@tamagui/style-grammar 3.0.0-beta.1101.1 → 3.0.0-beta.1111.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -92,7 +92,7 @@ function lowerProgram(program, options) {
92
92
  if (pointerEventsProgram && isPointerEventsMode(value)) {
93
93
  const pointerEvents = pointerEventsCSS(value);
94
94
  rules.push(wrapAtRules(`${selector}{${declaration}:${pointerEvents.subject}}`, wrappers));
95
- rules.push(wrapAtRules(`${selector}>*{${declaration}:${pointerEvents.children}}`, wrappers));
95
+ rules.push(wrapAtRules(`:where(${selector})>*{${declaration}:${pointerEvents.children}}`, wrappers));
96
96
  return;
97
97
  }
98
98
  rules.push(wrapAtRules(`${selector}{${declaration}:${value}}`, wrappers));
@@ -98,7 +98,7 @@ function lowerProgram(program, options) {
98
98
  if (pointerEventsProgram && isPointerEventsMode(value)) {
99
99
  var pointerEvents = pointerEventsCSS(value);
100
100
  rules.push(wrapAtRules(`${selector2}{${declaration}:${pointerEvents.subject}}`, wrappers2));
101
- rules.push(wrapAtRules(`${selector2}>*{${declaration}:${pointerEvents.children}}`, wrappers2));
101
+ rules.push(wrapAtRules(`:where(${selector2})>*{${declaration}:${pointerEvents.children}}`, wrappers2));
102
102
  return;
103
103
  }
104
104
  rules.push(wrapAtRules(`${selector2}{${declaration}:${value}}`, wrappers2));
@@ -98,7 +98,7 @@ function lowerProgram(program, options) {
98
98
  if (pointerEventsProgram && isPointerEventsMode(value)) {
99
99
  var pointerEvents = pointerEventsCSS(value);
100
100
  rules.push(wrapAtRules(`${selector2}{${declaration}:${pointerEvents.subject}}`, wrappers2));
101
- rules.push(wrapAtRules(`${selector2}>*{${declaration}:${pointerEvents.children}}`, wrappers2));
101
+ rules.push(wrapAtRules(`:where(${selector2})>*{${declaration}:${pointerEvents.children}}`, wrappers2));
102
102
  return;
103
103
  }
104
104
  rules.push(wrapAtRules(`${selector2}{${declaration}:${value}}`, wrappers2));
@@ -1 +1 @@
1
- {"version":3,"file":"lowerProgram.native.js","names":[],"sources":["cjs/programs/lowerProgram.native.js"],"sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar lowerProgram_exports = {};\n__export(lowerProgram_exports, {\n defaultStateSelectors: () => defaultStateSelectors,\n lowerProgram: () => lowerProgram\n});\nmodule.exports = __toCommonJS(lowerProgram_exports);\nvar import_clauseIdentity = require(\"../runtime/clauseIdentity\");\nvar import_modifierRegistry = require(\"./modifierRegistry\");\nvar import_clausePrecedence = require(\"../runtime/clausePrecedence\");\nvar import_transformFamily = require(\"../shorthands/transformFamily\");\nvar import_programHash = require(\"./programHash\");\nvar defaultStateSelectors = Object.freeze({\n hover: {\n fragment: \":hover\",\n media: \"(hover: hover)\"\n },\n // the press modifier's CSS pseudo name is `active`\n press: {\n fragment: \":active\"\n },\n // the registered alias of press\n active: {\n fragment: \":active\"\n },\n focus: {\n fragment: \":focus\"\n },\n \"focus-visible\": {\n fragment: \":focus-visible\"\n },\n \"focus-within\": {\n fragment: \":focus-within\"\n },\n disabled: {\n fragment: \"[aria-disabled]\"\n },\n enter: {\n fragment: \".t_unmounted\",\n scope: \"is-or-within\"\n },\n exit: {\n fragment: \".t_exiting\",\n scope: \"is-or-within\"\n }\n});\nvar unnamedGroup = \"true\";\nfunction pushCapabilityGuard(wrappers, media) {\n var guard = `@media ${media}`;\n for (var index = 0; index < wrappers.length; index++) {\n if (wrappers[index] === guard) return;\n }\n wrappers.push(guard);\n}\nfunction hyphenate(property) {\n var out = \"\";\n for (var index = 0; index < property.length; index++) {\n var code = property.charCodeAt(index);\n out += code >= 65 && code <= 90 ? `-${property[index].toLowerCase()}` : property[index];\n }\n return out;\n}\nfunction conditionSelector(fragment, scope, zeroSpecificity) {\n var pseudo = zeroSpecificity ? \"where\" : \"is\";\n if (scope === \"within\") return `:${pseudo}(${fragment} *)`;\n if (scope === \"is-or-within\") {\n return `:${pseudo}(${fragment}, ${fragment} *)`;\n }\n return zeroSpecificity ? `:where(${fragment})` : fragment;\n}\nfunction isPointerEventsMode(value) {\n return value === \"auto\" || value === \"none\" || value === \"box-none\" || value === \"box-only\";\n}\nfunction pointerEventsCSS(mode) {\n return {\n subject: mode === \"none\" || mode === \"box-none\" ? \"none\" : \"auto\",\n children: mode === \"none\" || mode === \"box-only\" ? \"none\" : \"auto\"\n };\n}\nfunction lowerProgram(program, options) {\n var { registry, configRevision, mediaQueries, containerQueries, stateSelectors = defaultStateSelectors, precedenceOrder = (0, import_clausePrecedence.createClausePrecedenceOrder)(mediaQueries), themeClassPrefix = \"t_\", groupClassPrefix = \"t_group_\" } = options;\n var className = (0, import_programHash.programClassName)(program.property, program.value, configRevision);\n var declaration = hyphenate(program.property);\n var rules = [];\n var pointerEventsProgram = program.property === \"pointerEvents\" && [\n program.value.base,\n ...program.value.clauses.map(function(clause2) {\n return clause2.payload;\n })\n ].some(function(value) {\n return value === \"box-none\" || value === \"box-only\";\n });\n var pushRule = function(selector2, wrappers2, value) {\n if (pointerEventsProgram && isPointerEventsMode(value)) {\n var pointerEvents = pointerEventsCSS(value);\n rules.push(wrapAtRules(`${selector2}{${declaration}:${pointerEvents.subject}}`, wrappers2));\n rules.push(wrapAtRules(`${selector2}>*{${declaration}:${pointerEvents.children}}`, wrappers2));\n return;\n }\n rules.push(wrapAtRules(`${selector2}{${declaration}:${value}}`, wrappers2));\n };\n if (program.value.base !== null) {\n pushRule(`.${className}`, [], program.value.base);\n }\n var clauseSlots = /* @__PURE__ */ new Map();\n for (var index = 0; index < program.value.clauses.length; index++) {\n var clause = program.value.clauses[index];\n clauseSlots.set((0, import_clausePrecedence.clauseConditionSetKey)(clause.modifiers), {\n clause,\n index\n });\n }\n var clauses = [\n ...clauseSlots.values()\n ].map(function(entry) {\n return {\n ...entry,\n precedence: (0, import_clausePrecedence.getClausePrecedenceKey)(entry.clause.modifiers, registry, precedenceOrder)\n };\n }).sort(function(left, right) {\n return left.precedence - right.precedence || left.index - right.index;\n });\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = clauses[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var { clause: clause1, precedence } = _step.value;\n var selectorSuffix = \"\";\n var selfStateSpecificity = 0;\n var wrappers = [];\n var skip = false;\n var seenModifiers = /* @__PURE__ */ new Set();\n var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = void 0;\n try {\n for (var _iterator1 = clause1.modifiers[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {\n var authoredModifier = _step1.value;\n var modifier = (0, import_clausePrecedence.canonicalClauseModifier)(authoredModifier);\n if (seenModifiers.has(modifier)) continue;\n seenModifiers.add(modifier);\n var kind = registry.get(modifier);\n if (kind === \"platform\") {\n if (modifier !== \"web\") skip = true;\n continue;\n }\n if (kind === \"media\") {\n var query = mediaQueries === null || mediaQueries === void 0 ? void 0 : mediaQueries[modifier];\n if (!query) {\n throw new Error(`cannot lower \"${modifier}:\" \\u2014 no media query was provided for media key \"${modifier}\"`);\n }\n wrappers.push(`@media ${query}`);\n continue;\n }\n if (kind === \"container\") {\n var container = (0, import_modifierRegistry.parseContainerModifier)(modifier);\n var query1 = containerQueries === null || containerQueries === void 0 ? void 0 : containerQueries[container.size];\n if (!query1) {\n throw new Error(`cannot lower \"${modifier}:\" \\u2014 no container query was provided for size \"${container.size}\"`);\n }\n wrappers.push(container.container === null ? `@container ${query1}` : `@container ${container.container} ${query1}`);\n continue;\n }\n if (kind === \"state\") {\n var state = stateSelectors[modifier];\n if (!state) {\n throw new Error(`cannot lower \"${modifier}:\" \\u2014 the state has no web selector, so it cannot become CSS`);\n }\n var _state_scope;\n selectorSuffix += conditionSelector(state.fragment, (_state_scope = state.scope) !== null && _state_scope !== void 0 ? _state_scope : \"self\", false);\n selfStateSpecificity++;\n if (state.media) pushCapabilityGuard(wrappers, state.media);\n continue;\n }\n if (kind === \"theme\") {\n selectorSuffix += conditionSelector(`.${themeClassPrefix}${modifier}`, \"is-or-within\", true);\n continue;\n }\n if (kind === \"group\") {\n var group = (0, import_clauseIdentity.parseGroupModifier)(modifier);\n var state1 = stateSelectors[group.state];\n if (!state1) {\n throw new Error(`cannot lower \"${modifier}:\" \\u2014 the group state \"${group.state}\" has no web selector`);\n }\n var _group_group;\n selectorSuffix += conditionSelector(`.${groupClassPrefix}${(_group_group = group.group) !== null && _group_group !== void 0 ? _group_group : unnamedGroup}${state1.fragment}`, \"within\", true);\n if (state1.media) pushCapabilityGuard(wrappers, state1.media);\n continue;\n }\n throw new Error(`cannot lower \"${modifier}:\" \\u2014 it is not a registered modifier, so the value was never validated`);\n }\n } catch (err) {\n _didIteratorError1 = true;\n _iteratorError1 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion1 && _iterator1.return != null) {\n _iterator1.return();\n }\n } finally {\n if (_didIteratorError1) {\n throw _iteratorError1;\n }\n }\n }\n if (skip) continue;\n var selector = `.${className}`.repeat((0, import_clausePrecedence.clauseSubjectClassRepetitions)(precedence, selfStateSpecificity)) + selectorSuffix;\n pushRule(selector, wrappers, clause1.payload);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n var composition = import_transformFamily.transformAxisCompositions[program.property];\n if (!composition) return {\n className,\n rules\n };\n var compositionClassName = (0, import_programHash.programClassName)(composition.property, {\n base: composition.value,\n clauses: []\n }, configRevision);\n var localDefaults = Object.entries(composition.defaults).map(function(param) {\n var [property, value] = param;\n return `${property}:${value}`;\n }).join(\";\");\n return {\n className,\n rules,\n composition: {\n property: composition.property,\n className: compositionClassName,\n rules: [\n `:where(.${compositionClassName}){${localDefaults}}`,\n `.${compositionClassName}{${composition.property}:${composition.value}}`\n ]\n }\n };\n}\nfunction wrapAtRules(rule, wrappers) {\n var out = rule;\n for (var index = wrappers.length - 1; index >= 0; index--) {\n out = `${wrappers[index]} {${out}}`;\n }\n return out;\n}\n//# sourceMappingURL=lowerProgram.js.map\n"],"mappings":"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"}
1
+ {"version":3,"file":"lowerProgram.native.js","names":[],"sources":["cjs/programs/lowerProgram.native.js"],"sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar lowerProgram_exports = {};\n__export(lowerProgram_exports, {\n defaultStateSelectors: () => defaultStateSelectors,\n lowerProgram: () => lowerProgram\n});\nmodule.exports = __toCommonJS(lowerProgram_exports);\nvar import_clauseIdentity = require(\"../runtime/clauseIdentity\");\nvar import_modifierRegistry = require(\"./modifierRegistry\");\nvar import_clausePrecedence = require(\"../runtime/clausePrecedence\");\nvar import_transformFamily = require(\"../shorthands/transformFamily\");\nvar import_programHash = require(\"./programHash\");\nvar defaultStateSelectors = Object.freeze({\n hover: {\n fragment: \":hover\",\n media: \"(hover: hover)\"\n },\n // the press modifier's CSS pseudo name is `active`\n press: {\n fragment: \":active\"\n },\n // the registered alias of press\n active: {\n fragment: \":active\"\n },\n focus: {\n fragment: \":focus\"\n },\n \"focus-visible\": {\n fragment: \":focus-visible\"\n },\n \"focus-within\": {\n fragment: \":focus-within\"\n },\n disabled: {\n fragment: \"[aria-disabled]\"\n },\n enter: {\n fragment: \".t_unmounted\",\n scope: \"is-or-within\"\n },\n exit: {\n fragment: \".t_exiting\",\n scope: \"is-or-within\"\n }\n});\nvar unnamedGroup = \"true\";\nfunction pushCapabilityGuard(wrappers, media) {\n var guard = `@media ${media}`;\n for (var index = 0; index < wrappers.length; index++) {\n if (wrappers[index] === guard) return;\n }\n wrappers.push(guard);\n}\nfunction hyphenate(property) {\n var out = \"\";\n for (var index = 0; index < property.length; index++) {\n var code = property.charCodeAt(index);\n out += code >= 65 && code <= 90 ? `-${property[index].toLowerCase()}` : property[index];\n }\n return out;\n}\nfunction conditionSelector(fragment, scope, zeroSpecificity) {\n var pseudo = zeroSpecificity ? \"where\" : \"is\";\n if (scope === \"within\") return `:${pseudo}(${fragment} *)`;\n if (scope === \"is-or-within\") {\n return `:${pseudo}(${fragment}, ${fragment} *)`;\n }\n return zeroSpecificity ? `:where(${fragment})` : fragment;\n}\nfunction isPointerEventsMode(value) {\n return value === \"auto\" || value === \"none\" || value === \"box-none\" || value === \"box-only\";\n}\nfunction pointerEventsCSS(mode) {\n return {\n subject: mode === \"none\" || mode === \"box-none\" ? \"none\" : \"auto\",\n children: mode === \"none\" || mode === \"box-only\" ? \"none\" : \"auto\"\n };\n}\nfunction lowerProgram(program, options) {\n var { registry, configRevision, mediaQueries, containerQueries, stateSelectors = defaultStateSelectors, precedenceOrder = (0, import_clausePrecedence.createClausePrecedenceOrder)(mediaQueries), themeClassPrefix = \"t_\", groupClassPrefix = \"t_group_\" } = options;\n var className = (0, import_programHash.programClassName)(program.property, program.value, configRevision);\n var declaration = hyphenate(program.property);\n var rules = [];\n var pointerEventsProgram = program.property === \"pointerEvents\" && [\n program.value.base,\n ...program.value.clauses.map(function(clause2) {\n return clause2.payload;\n })\n ].some(function(value) {\n return value === \"box-none\" || value === \"box-only\";\n });\n var pushRule = function(selector2, wrappers2, value) {\n if (pointerEventsProgram && isPointerEventsMode(value)) {\n var pointerEvents = pointerEventsCSS(value);\n rules.push(wrapAtRules(`${selector2}{${declaration}:${pointerEvents.subject}}`, wrappers2));\n rules.push(wrapAtRules(`:where(${selector2})>*{${declaration}:${pointerEvents.children}}`, wrappers2));\n return;\n }\n rules.push(wrapAtRules(`${selector2}{${declaration}:${value}}`, wrappers2));\n };\n if (program.value.base !== null) {\n pushRule(`.${className}`, [], program.value.base);\n }\n var clauseSlots = /* @__PURE__ */ new Map();\n for (var index = 0; index < program.value.clauses.length; index++) {\n var clause = program.value.clauses[index];\n clauseSlots.set((0, import_clausePrecedence.clauseConditionSetKey)(clause.modifiers), {\n clause,\n index\n });\n }\n var clauses = [\n ...clauseSlots.values()\n ].map(function(entry) {\n return {\n ...entry,\n precedence: (0, import_clausePrecedence.getClausePrecedenceKey)(entry.clause.modifiers, registry, precedenceOrder)\n };\n }).sort(function(left, right) {\n return left.precedence - right.precedence || left.index - right.index;\n });\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = clauses[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var { clause: clause1, precedence } = _step.value;\n var selectorSuffix = \"\";\n var selfStateSpecificity = 0;\n var wrappers = [];\n var skip = false;\n var seenModifiers = /* @__PURE__ */ new Set();\n var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = void 0;\n try {\n for (var _iterator1 = clause1.modifiers[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {\n var authoredModifier = _step1.value;\n var modifier = (0, import_clausePrecedence.canonicalClauseModifier)(authoredModifier);\n if (seenModifiers.has(modifier)) continue;\n seenModifiers.add(modifier);\n var kind = registry.get(modifier);\n if (kind === \"platform\") {\n if (modifier !== \"web\") skip = true;\n continue;\n }\n if (kind === \"media\") {\n var query = mediaQueries === null || mediaQueries === void 0 ? void 0 : mediaQueries[modifier];\n if (!query) {\n throw new Error(`cannot lower \"${modifier}:\" \\u2014 no media query was provided for media key \"${modifier}\"`);\n }\n wrappers.push(`@media ${query}`);\n continue;\n }\n if (kind === \"container\") {\n var container = (0, import_modifierRegistry.parseContainerModifier)(modifier);\n var query1 = containerQueries === null || containerQueries === void 0 ? void 0 : containerQueries[container.size];\n if (!query1) {\n throw new Error(`cannot lower \"${modifier}:\" \\u2014 no container query was provided for size \"${container.size}\"`);\n }\n wrappers.push(container.container === null ? `@container ${query1}` : `@container ${container.container} ${query1}`);\n continue;\n }\n if (kind === \"state\") {\n var state = stateSelectors[modifier];\n if (!state) {\n throw new Error(`cannot lower \"${modifier}:\" \\u2014 the state has no web selector, so it cannot become CSS`);\n }\n var _state_scope;\n selectorSuffix += conditionSelector(state.fragment, (_state_scope = state.scope) !== null && _state_scope !== void 0 ? _state_scope : \"self\", false);\n selfStateSpecificity++;\n if (state.media) pushCapabilityGuard(wrappers, state.media);\n continue;\n }\n if (kind === \"theme\") {\n selectorSuffix += conditionSelector(`.${themeClassPrefix}${modifier}`, \"is-or-within\", true);\n continue;\n }\n if (kind === \"group\") {\n var group = (0, import_clauseIdentity.parseGroupModifier)(modifier);\n var state1 = stateSelectors[group.state];\n if (!state1) {\n throw new Error(`cannot lower \"${modifier}:\" \\u2014 the group state \"${group.state}\" has no web selector`);\n }\n var _group_group;\n selectorSuffix += conditionSelector(`.${groupClassPrefix}${(_group_group = group.group) !== null && _group_group !== void 0 ? _group_group : unnamedGroup}${state1.fragment}`, \"within\", true);\n if (state1.media) pushCapabilityGuard(wrappers, state1.media);\n continue;\n }\n throw new Error(`cannot lower \"${modifier}:\" \\u2014 it is not a registered modifier, so the value was never validated`);\n }\n } catch (err) {\n _didIteratorError1 = true;\n _iteratorError1 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion1 && _iterator1.return != null) {\n _iterator1.return();\n }\n } finally {\n if (_didIteratorError1) {\n throw _iteratorError1;\n }\n }\n }\n if (skip) continue;\n var selector = `.${className}`.repeat((0, import_clausePrecedence.clauseSubjectClassRepetitions)(precedence, selfStateSpecificity)) + selectorSuffix;\n pushRule(selector, wrappers, clause1.payload);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n var composition = import_transformFamily.transformAxisCompositions[program.property];\n if (!composition) return {\n className,\n rules\n };\n var compositionClassName = (0, import_programHash.programClassName)(composition.property, {\n base: composition.value,\n clauses: []\n }, configRevision);\n var localDefaults = Object.entries(composition.defaults).map(function(param) {\n var [property, value] = param;\n return `${property}:${value}`;\n }).join(\";\");\n return {\n className,\n rules,\n composition: {\n property: composition.property,\n className: compositionClassName,\n rules: [\n `:where(.${compositionClassName}){${localDefaults}}`,\n `.${compositionClassName}{${composition.property}:${composition.value}}`\n ]\n }\n };\n}\nfunction wrapAtRules(rule, wrappers) {\n var out = rule;\n for (var index = wrappers.length - 1; index >= 0; index--) {\n out = `${wrappers[index]} {${out}}`;\n }\n return out;\n}\n//# sourceMappingURL=lowerProgram.js.map\n"],"mappings":"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"}
@@ -67,7 +67,7 @@ function lowerProgram(program, options) {
67
67
  if (pointerEventsProgram && isPointerEventsMode(value)) {
68
68
  const pointerEvents = pointerEventsCSS(value);
69
69
  rules.push(wrapAtRules(`${selector}{${declaration}:${pointerEvents.subject}}`, wrappers));
70
- rules.push(wrapAtRules(`${selector}>*{${declaration}:${pointerEvents.children}}`, wrappers));
70
+ rules.push(wrapAtRules(`:where(${selector})>*{${declaration}:${pointerEvents.children}}`, wrappers));
71
71
  return;
72
72
  }
73
73
  rules.push(wrapAtRules(`${selector}{${declaration}:${value}}`, wrappers));
@@ -1 +1 @@
1
- {"version":3,"file":"lowerProgram.js","names":[],"sources":["esm/programs/lowerProgram.js"],"sourcesContent":["import { parseGroupModifier } from \"../runtime/clauseIdentity\";\nimport { parseContainerModifier } from \"./modifierRegistry\";\nimport {\n canonicalClauseModifier,\n clauseConditionSetKey,\n clauseSubjectClassRepetitions,\n createClausePrecedenceOrder,\n getClausePrecedenceKey\n} from \"../runtime/clausePrecedence\";\nimport { transformAxisCompositions } from \"../shorthands/transformFamily\";\nimport { programClassName } from \"./programHash\";\nconst defaultStateSelectors = Object.freeze({\n hover: { fragment: \":hover\", media: \"(hover: hover)\" },\n // the press modifier's CSS pseudo name is `active`\n press: { fragment: \":active\" },\n // the registered alias of press\n active: { fragment: \":active\" },\n focus: { fragment: \":focus\" },\n \"focus-visible\": { fragment: \":focus-visible\" },\n \"focus-within\": { fragment: \":focus-within\" },\n disabled: { fragment: \"[aria-disabled]\" },\n enter: { fragment: \".t_unmounted\", scope: \"is-or-within\" },\n exit: { fragment: \".t_exiting\", scope: \"is-or-within\" }\n});\nconst unnamedGroup = \"true\";\nfunction pushCapabilityGuard(wrappers, media) {\n const guard = `@media ${media}`;\n for (let index = 0; index < wrappers.length; index++) {\n if (wrappers[index] === guard) return;\n }\n wrappers.push(guard);\n}\nfunction hyphenate(property) {\n let out = \"\";\n for (let index = 0; index < property.length; index++) {\n const code = property.charCodeAt(index);\n out += code >= 65 && code <= 90 ? `-${property[index].toLowerCase()}` : property[index];\n }\n return out;\n}\nfunction conditionSelector(fragment, scope, zeroSpecificity) {\n const pseudo = zeroSpecificity ? \"where\" : \"is\";\n if (scope === \"within\") return `:${pseudo}(${fragment} *)`;\n if (scope === \"is-or-within\") {\n return `:${pseudo}(${fragment}, ${fragment} *)`;\n }\n return zeroSpecificity ? `:where(${fragment})` : fragment;\n}\nfunction isPointerEventsMode(value) {\n return value === \"auto\" || value === \"none\" || value === \"box-none\" || value === \"box-only\";\n}\nfunction pointerEventsCSS(mode) {\n return {\n subject: mode === \"none\" || mode === \"box-none\" ? \"none\" : \"auto\",\n children: mode === \"none\" || mode === \"box-only\" ? \"none\" : \"auto\"\n };\n}\nfunction lowerProgram(program, options) {\n const {\n registry,\n configRevision,\n mediaQueries,\n containerQueries,\n stateSelectors = defaultStateSelectors,\n precedenceOrder = createClausePrecedenceOrder(mediaQueries),\n themeClassPrefix = \"t_\",\n groupClassPrefix = \"t_group_\"\n } = options;\n const className = programClassName(program.property, program.value, configRevision);\n const declaration = hyphenate(program.property);\n const rules = [];\n const pointerEventsProgram = program.property === \"pointerEvents\" && [program.value.base, ...program.value.clauses.map((clause) => clause.payload)].some(\n (value) => value === \"box-none\" || value === \"box-only\"\n );\n const pushRule = (selector, wrappers, value) => {\n if (pointerEventsProgram && isPointerEventsMode(value)) {\n const pointerEvents = pointerEventsCSS(value);\n rules.push(\n wrapAtRules(`${selector}{${declaration}:${pointerEvents.subject}}`, wrappers)\n );\n rules.push(\n wrapAtRules(`${selector}>*{${declaration}:${pointerEvents.children}}`, wrappers)\n );\n return;\n }\n rules.push(wrapAtRules(`${selector}{${declaration}:${value}}`, wrappers));\n };\n if (program.value.base !== null) {\n pushRule(`.${className}`, [], program.value.base);\n }\n const clauseSlots = /* @__PURE__ */ new Map();\n for (let index = 0; index < program.value.clauses.length; index++) {\n const clause = program.value.clauses[index];\n clauseSlots.set(clauseConditionSetKey(clause.modifiers), { clause, index });\n }\n const clauses = [...clauseSlots.values()].map((entry) => ({\n ...entry,\n precedence: getClausePrecedenceKey(\n entry.clause.modifiers,\n registry,\n precedenceOrder\n )\n })).sort((left, right) => left.precedence - right.precedence || left.index - right.index);\n for (const { clause, precedence } of clauses) {\n let selectorSuffix = \"\";\n let selfStateSpecificity = 0;\n const wrappers = [];\n let skip = false;\n const seenModifiers = /* @__PURE__ */ new Set();\n for (const authoredModifier of clause.modifiers) {\n const modifier = canonicalClauseModifier(authoredModifier);\n if (seenModifiers.has(modifier)) continue;\n seenModifiers.add(modifier);\n const kind = registry.get(modifier);\n if (kind === \"platform\") {\n if (modifier !== \"web\") skip = true;\n continue;\n }\n if (kind === \"media\") {\n const query = mediaQueries?.[modifier];\n if (!query) {\n throw new Error(\n `cannot lower \"${modifier}:\" \\u2014 no media query was provided for media key \"${modifier}\"`\n );\n }\n wrappers.push(`@media ${query}`);\n continue;\n }\n if (kind === \"container\") {\n const container = parseContainerModifier(modifier);\n const query = containerQueries?.[container.size];\n if (!query) {\n throw new Error(\n `cannot lower \"${modifier}:\" \\u2014 no container query was provided for size \"${container.size}\"`\n );\n }\n wrappers.push(\n container.container === null ? `@container ${query}` : `@container ${container.container} ${query}`\n );\n continue;\n }\n if (kind === \"state\") {\n const state = stateSelectors[modifier];\n if (!state) {\n throw new Error(\n `cannot lower \"${modifier}:\" \\u2014 the state has no web selector, so it cannot become CSS`\n );\n }\n selectorSuffix += conditionSelector(state.fragment, state.scope ?? \"self\", false);\n selfStateSpecificity++;\n if (state.media) pushCapabilityGuard(wrappers, state.media);\n continue;\n }\n if (kind === \"theme\") {\n selectorSuffix += conditionSelector(\n `.${themeClassPrefix}${modifier}`,\n \"is-or-within\",\n true\n );\n continue;\n }\n if (kind === \"group\") {\n const group = parseGroupModifier(modifier);\n const state = stateSelectors[group.state];\n if (!state) {\n throw new Error(\n `cannot lower \"${modifier}:\" \\u2014 the group state \"${group.state}\" has no web selector`\n );\n }\n selectorSuffix += conditionSelector(\n `.${groupClassPrefix}${group.group ?? unnamedGroup}${state.fragment}`,\n \"within\",\n true\n );\n if (state.media) pushCapabilityGuard(wrappers, state.media);\n continue;\n }\n throw new Error(\n `cannot lower \"${modifier}:\" \\u2014 it is not a registered modifier, so the value was never validated`\n );\n }\n if (skip) continue;\n const selector = `.${className}`.repeat(\n clauseSubjectClassRepetitions(precedence, selfStateSpecificity)\n ) + selectorSuffix;\n pushRule(selector, wrappers, clause.payload);\n }\n const composition = transformAxisCompositions[program.property];\n if (!composition) return { className, rules };\n const compositionClassName = programClassName(\n composition.property,\n { base: composition.value, clauses: [] },\n configRevision\n );\n const localDefaults = Object.entries(composition.defaults).map(([property, value]) => `${property}:${value}`).join(\";\");\n return {\n className,\n rules,\n composition: {\n property: composition.property,\n className: compositionClassName,\n rules: [\n `:where(.${compositionClassName}){${localDefaults}}`,\n `.${compositionClassName}{${composition.property}:${composition.value}}`\n ]\n }\n };\n}\nfunction wrapAtRules(rule, wrappers) {\n let out = rule;\n for (let index = wrappers.length - 1; index >= 0; index--) {\n out = `${wrappers[index]} {${out}}`;\n }\n return out;\n}\nexport {\n defaultStateSelectors,\n lowerProgram\n};\n//# sourceMappingURL=lowerProgram.js.map\n"],"mappings":"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"}
1
+ {"version":3,"file":"lowerProgram.js","names":[],"sources":["esm/programs/lowerProgram.js"],"sourcesContent":["import { parseGroupModifier } from \"../runtime/clauseIdentity\";\nimport { parseContainerModifier } from \"./modifierRegistry\";\nimport {\n canonicalClauseModifier,\n clauseConditionSetKey,\n clauseSubjectClassRepetitions,\n createClausePrecedenceOrder,\n getClausePrecedenceKey\n} from \"../runtime/clausePrecedence\";\nimport { transformAxisCompositions } from \"../shorthands/transformFamily\";\nimport { programClassName } from \"./programHash\";\nconst defaultStateSelectors = Object.freeze({\n hover: { fragment: \":hover\", media: \"(hover: hover)\" },\n // the press modifier's CSS pseudo name is `active`\n press: { fragment: \":active\" },\n // the registered alias of press\n active: { fragment: \":active\" },\n focus: { fragment: \":focus\" },\n \"focus-visible\": { fragment: \":focus-visible\" },\n \"focus-within\": { fragment: \":focus-within\" },\n disabled: { fragment: \"[aria-disabled]\" },\n enter: { fragment: \".t_unmounted\", scope: \"is-or-within\" },\n exit: { fragment: \".t_exiting\", scope: \"is-or-within\" }\n});\nconst unnamedGroup = \"true\";\nfunction pushCapabilityGuard(wrappers, media) {\n const guard = `@media ${media}`;\n for (let index = 0; index < wrappers.length; index++) {\n if (wrappers[index] === guard) return;\n }\n wrappers.push(guard);\n}\nfunction hyphenate(property) {\n let out = \"\";\n for (let index = 0; index < property.length; index++) {\n const code = property.charCodeAt(index);\n out += code >= 65 && code <= 90 ? `-${property[index].toLowerCase()}` : property[index];\n }\n return out;\n}\nfunction conditionSelector(fragment, scope, zeroSpecificity) {\n const pseudo = zeroSpecificity ? \"where\" : \"is\";\n if (scope === \"within\") return `:${pseudo}(${fragment} *)`;\n if (scope === \"is-or-within\") {\n return `:${pseudo}(${fragment}, ${fragment} *)`;\n }\n return zeroSpecificity ? `:where(${fragment})` : fragment;\n}\nfunction isPointerEventsMode(value) {\n return value === \"auto\" || value === \"none\" || value === \"box-none\" || value === \"box-only\";\n}\nfunction pointerEventsCSS(mode) {\n return {\n subject: mode === \"none\" || mode === \"box-none\" ? \"none\" : \"auto\",\n children: mode === \"none\" || mode === \"box-only\" ? \"none\" : \"auto\"\n };\n}\nfunction lowerProgram(program, options) {\n const {\n registry,\n configRevision,\n mediaQueries,\n containerQueries,\n stateSelectors = defaultStateSelectors,\n precedenceOrder = createClausePrecedenceOrder(mediaQueries),\n themeClassPrefix = \"t_\",\n groupClassPrefix = \"t_group_\"\n } = options;\n const className = programClassName(program.property, program.value, configRevision);\n const declaration = hyphenate(program.property);\n const rules = [];\n const pointerEventsProgram = program.property === \"pointerEvents\" && [program.value.base, ...program.value.clauses.map((clause) => clause.payload)].some(\n (value) => value === \"box-none\" || value === \"box-only\"\n );\n const pushRule = (selector, wrappers, value) => {\n if (pointerEventsProgram && isPointerEventsMode(value)) {\n const pointerEvents = pointerEventsCSS(value);\n rules.push(\n wrapAtRules(`${selector}{${declaration}:${pointerEvents.subject}}`, wrappers)\n );\n rules.push(\n wrapAtRules(\n `:where(${selector})>*{${declaration}:${pointerEvents.children}}`,\n wrappers\n )\n );\n return;\n }\n rules.push(wrapAtRules(`${selector}{${declaration}:${value}}`, wrappers));\n };\n if (program.value.base !== null) {\n pushRule(`.${className}`, [], program.value.base);\n }\n const clauseSlots = /* @__PURE__ */ new Map();\n for (let index = 0; index < program.value.clauses.length; index++) {\n const clause = program.value.clauses[index];\n clauseSlots.set(clauseConditionSetKey(clause.modifiers), { clause, index });\n }\n const clauses = [...clauseSlots.values()].map((entry) => ({\n ...entry,\n precedence: getClausePrecedenceKey(\n entry.clause.modifiers,\n registry,\n precedenceOrder\n )\n })).sort((left, right) => left.precedence - right.precedence || left.index - right.index);\n for (const { clause, precedence } of clauses) {\n let selectorSuffix = \"\";\n let selfStateSpecificity = 0;\n const wrappers = [];\n let skip = false;\n const seenModifiers = /* @__PURE__ */ new Set();\n for (const authoredModifier of clause.modifiers) {\n const modifier = canonicalClauseModifier(authoredModifier);\n if (seenModifiers.has(modifier)) continue;\n seenModifiers.add(modifier);\n const kind = registry.get(modifier);\n if (kind === \"platform\") {\n if (modifier !== \"web\") skip = true;\n continue;\n }\n if (kind === \"media\") {\n const query = mediaQueries?.[modifier];\n if (!query) {\n throw new Error(\n `cannot lower \"${modifier}:\" \\u2014 no media query was provided for media key \"${modifier}\"`\n );\n }\n wrappers.push(`@media ${query}`);\n continue;\n }\n if (kind === \"container\") {\n const container = parseContainerModifier(modifier);\n const query = containerQueries?.[container.size];\n if (!query) {\n throw new Error(\n `cannot lower \"${modifier}:\" \\u2014 no container query was provided for size \"${container.size}\"`\n );\n }\n wrappers.push(\n container.container === null ? `@container ${query}` : `@container ${container.container} ${query}`\n );\n continue;\n }\n if (kind === \"state\") {\n const state = stateSelectors[modifier];\n if (!state) {\n throw new Error(\n `cannot lower \"${modifier}:\" \\u2014 the state has no web selector, so it cannot become CSS`\n );\n }\n selectorSuffix += conditionSelector(state.fragment, state.scope ?? \"self\", false);\n selfStateSpecificity++;\n if (state.media) pushCapabilityGuard(wrappers, state.media);\n continue;\n }\n if (kind === \"theme\") {\n selectorSuffix += conditionSelector(\n `.${themeClassPrefix}${modifier}`,\n \"is-or-within\",\n true\n );\n continue;\n }\n if (kind === \"group\") {\n const group = parseGroupModifier(modifier);\n const state = stateSelectors[group.state];\n if (!state) {\n throw new Error(\n `cannot lower \"${modifier}:\" \\u2014 the group state \"${group.state}\" has no web selector`\n );\n }\n selectorSuffix += conditionSelector(\n `.${groupClassPrefix}${group.group ?? unnamedGroup}${state.fragment}`,\n \"within\",\n true\n );\n if (state.media) pushCapabilityGuard(wrappers, state.media);\n continue;\n }\n throw new Error(\n `cannot lower \"${modifier}:\" \\u2014 it is not a registered modifier, so the value was never validated`\n );\n }\n if (skip) continue;\n const selector = `.${className}`.repeat(\n clauseSubjectClassRepetitions(precedence, selfStateSpecificity)\n ) + selectorSuffix;\n pushRule(selector, wrappers, clause.payload);\n }\n const composition = transformAxisCompositions[program.property];\n if (!composition) return { className, rules };\n const compositionClassName = programClassName(\n composition.property,\n { base: composition.value, clauses: [] },\n configRevision\n );\n const localDefaults = Object.entries(composition.defaults).map(([property, value]) => `${property}:${value}`).join(\";\");\n return {\n className,\n rules,\n composition: {\n property: composition.property,\n className: compositionClassName,\n rules: [\n `:where(.${compositionClassName}){${localDefaults}}`,\n `.${compositionClassName}{${composition.property}:${composition.value}}`\n ]\n }\n };\n}\nfunction wrapAtRules(rule, wrappers) {\n let out = rule;\n for (let index = wrappers.length - 1; index >= 0; index--) {\n out = `${wrappers[index]} {${out}}`;\n }\n return out;\n}\nexport {\n defaultStateSelectors,\n lowerProgram\n};\n//# sourceMappingURL=lowerProgram.js.map\n"],"mappings":"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"}
@@ -71,7 +71,7 @@ function lowerProgram(program, options) {
71
71
  if (pointerEventsProgram && isPointerEventsMode(value)) {
72
72
  var pointerEvents = pointerEventsCSS(value);
73
73
  rules.push(wrapAtRules(`${selector2}{${declaration}:${pointerEvents.subject}}`, wrappers2));
74
- rules.push(wrapAtRules(`${selector2}>*{${declaration}:${pointerEvents.children}}`, wrappers2));
74
+ rules.push(wrapAtRules(`:where(${selector2})>*{${declaration}:${pointerEvents.children}}`, wrappers2));
75
75
  return;
76
76
  }
77
77
  rules.push(wrapAtRules(`${selector2}{${declaration}:${value}}`, wrappers2));
@@ -1 +1 @@
1
- {"version":3,"file":"lowerProgram.native.js","names":[],"sources":["esm/programs/lowerProgram.native.js"],"sourcesContent":["import { parseGroupModifier } from \"../runtime/clauseIdentity\";\nimport { parseContainerModifier } from \"./modifierRegistry\";\nimport { canonicalClauseModifier, clauseConditionSetKey, clauseSubjectClassRepetitions, createClausePrecedenceOrder, getClausePrecedenceKey } from \"../runtime/clausePrecedence\";\nimport { transformAxisCompositions } from \"../shorthands/transformFamily\";\nimport { programClassName } from \"./programHash\";\nvar defaultStateSelectors = Object.freeze({\n hover: {\n fragment: \":hover\",\n media: \"(hover: hover)\"\n },\n // the press modifier's CSS pseudo name is `active`\n press: {\n fragment: \":active\"\n },\n // the registered alias of press\n active: {\n fragment: \":active\"\n },\n focus: {\n fragment: \":focus\"\n },\n \"focus-visible\": {\n fragment: \":focus-visible\"\n },\n \"focus-within\": {\n fragment: \":focus-within\"\n },\n disabled: {\n fragment: \"[aria-disabled]\"\n },\n enter: {\n fragment: \".t_unmounted\",\n scope: \"is-or-within\"\n },\n exit: {\n fragment: \".t_exiting\",\n scope: \"is-or-within\"\n }\n});\nvar unnamedGroup = \"true\";\nfunction pushCapabilityGuard(wrappers, media) {\n var guard = `@media ${media}`;\n for (var index = 0; index < wrappers.length; index++) {\n if (wrappers[index] === guard) return;\n }\n wrappers.push(guard);\n}\nfunction hyphenate(property) {\n var out = \"\";\n for (var index = 0; index < property.length; index++) {\n var code = property.charCodeAt(index);\n out += code >= 65 && code <= 90 ? `-${property[index].toLowerCase()}` : property[index];\n }\n return out;\n}\nfunction conditionSelector(fragment, scope, zeroSpecificity) {\n var pseudo = zeroSpecificity ? \"where\" : \"is\";\n if (scope === \"within\") return `:${pseudo}(${fragment} *)`;\n if (scope === \"is-or-within\") {\n return `:${pseudo}(${fragment}, ${fragment} *)`;\n }\n return zeroSpecificity ? `:where(${fragment})` : fragment;\n}\nfunction isPointerEventsMode(value) {\n return value === \"auto\" || value === \"none\" || value === \"box-none\" || value === \"box-only\";\n}\nfunction pointerEventsCSS(mode) {\n return {\n subject: mode === \"none\" || mode === \"box-none\" ? \"none\" : \"auto\",\n children: mode === \"none\" || mode === \"box-only\" ? \"none\" : \"auto\"\n };\n}\nfunction lowerProgram(program, options) {\n var { registry, configRevision, mediaQueries, containerQueries, stateSelectors = defaultStateSelectors, precedenceOrder = createClausePrecedenceOrder(mediaQueries), themeClassPrefix = \"t_\", groupClassPrefix = \"t_group_\" } = options;\n var className = programClassName(program.property, program.value, configRevision);\n var declaration = hyphenate(program.property);\n var rules = [];\n var pointerEventsProgram = program.property === \"pointerEvents\" && [\n program.value.base,\n ...program.value.clauses.map(function(clause2) {\n return clause2.payload;\n })\n ].some(function(value) {\n return value === \"box-none\" || value === \"box-only\";\n });\n var pushRule = function(selector2, wrappers2, value) {\n if (pointerEventsProgram && isPointerEventsMode(value)) {\n var pointerEvents = pointerEventsCSS(value);\n rules.push(wrapAtRules(`${selector2}{${declaration}:${pointerEvents.subject}}`, wrappers2));\n rules.push(wrapAtRules(`${selector2}>*{${declaration}:${pointerEvents.children}}`, wrappers2));\n return;\n }\n rules.push(wrapAtRules(`${selector2}{${declaration}:${value}}`, wrappers2));\n };\n if (program.value.base !== null) {\n pushRule(`.${className}`, [], program.value.base);\n }\n var clauseSlots = /* @__PURE__ */ new Map();\n for (var index = 0; index < program.value.clauses.length; index++) {\n var clause = program.value.clauses[index];\n clauseSlots.set(clauseConditionSetKey(clause.modifiers), {\n clause,\n index\n });\n }\n var clauses = [\n ...clauseSlots.values()\n ].map(function(entry) {\n return {\n ...entry,\n precedence: getClausePrecedenceKey(entry.clause.modifiers, registry, precedenceOrder)\n };\n }).sort(function(left, right) {\n return left.precedence - right.precedence || left.index - right.index;\n });\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = clauses[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var { clause: clause1, precedence } = _step.value;\n var selectorSuffix = \"\";\n var selfStateSpecificity = 0;\n var wrappers = [];\n var skip = false;\n var seenModifiers = /* @__PURE__ */ new Set();\n var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = void 0;\n try {\n for (var _iterator1 = clause1.modifiers[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {\n var authoredModifier = _step1.value;\n var modifier = canonicalClauseModifier(authoredModifier);\n if (seenModifiers.has(modifier)) continue;\n seenModifiers.add(modifier);\n var kind = registry.get(modifier);\n if (kind === \"platform\") {\n if (modifier !== \"web\") skip = true;\n continue;\n }\n if (kind === \"media\") {\n var query = mediaQueries === null || mediaQueries === void 0 ? void 0 : mediaQueries[modifier];\n if (!query) {\n throw new Error(`cannot lower \"${modifier}:\" \\u2014 no media query was provided for media key \"${modifier}\"`);\n }\n wrappers.push(`@media ${query}`);\n continue;\n }\n if (kind === \"container\") {\n var container = parseContainerModifier(modifier);\n var query1 = containerQueries === null || containerQueries === void 0 ? void 0 : containerQueries[container.size];\n if (!query1) {\n throw new Error(`cannot lower \"${modifier}:\" \\u2014 no container query was provided for size \"${container.size}\"`);\n }\n wrappers.push(container.container === null ? `@container ${query1}` : `@container ${container.container} ${query1}`);\n continue;\n }\n if (kind === \"state\") {\n var state = stateSelectors[modifier];\n if (!state) {\n throw new Error(`cannot lower \"${modifier}:\" \\u2014 the state has no web selector, so it cannot become CSS`);\n }\n var _state_scope;\n selectorSuffix += conditionSelector(state.fragment, (_state_scope = state.scope) !== null && _state_scope !== void 0 ? _state_scope : \"self\", false);\n selfStateSpecificity++;\n if (state.media) pushCapabilityGuard(wrappers, state.media);\n continue;\n }\n if (kind === \"theme\") {\n selectorSuffix += conditionSelector(`.${themeClassPrefix}${modifier}`, \"is-or-within\", true);\n continue;\n }\n if (kind === \"group\") {\n var group = parseGroupModifier(modifier);\n var state1 = stateSelectors[group.state];\n if (!state1) {\n throw new Error(`cannot lower \"${modifier}:\" \\u2014 the group state \"${group.state}\" has no web selector`);\n }\n var _group_group;\n selectorSuffix += conditionSelector(`.${groupClassPrefix}${(_group_group = group.group) !== null && _group_group !== void 0 ? _group_group : unnamedGroup}${state1.fragment}`, \"within\", true);\n if (state1.media) pushCapabilityGuard(wrappers, state1.media);\n continue;\n }\n throw new Error(`cannot lower \"${modifier}:\" \\u2014 it is not a registered modifier, so the value was never validated`);\n }\n } catch (err) {\n _didIteratorError1 = true;\n _iteratorError1 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion1 && _iterator1.return != null) {\n _iterator1.return();\n }\n } finally {\n if (_didIteratorError1) {\n throw _iteratorError1;\n }\n }\n }\n if (skip) continue;\n var selector = `.${className}`.repeat(clauseSubjectClassRepetitions(precedence, selfStateSpecificity)) + selectorSuffix;\n pushRule(selector, wrappers, clause1.payload);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n var composition = transformAxisCompositions[program.property];\n if (!composition) return {\n className,\n rules\n };\n var compositionClassName = programClassName(composition.property, {\n base: composition.value,\n clauses: []\n }, configRevision);\n var localDefaults = Object.entries(composition.defaults).map(function(param) {\n var [property, value] = param;\n return `${property}:${value}`;\n }).join(\";\");\n return {\n className,\n rules,\n composition: {\n property: composition.property,\n className: compositionClassName,\n rules: [\n `:where(.${compositionClassName}){${localDefaults}}`,\n `.${compositionClassName}{${composition.property}:${composition.value}}`\n ]\n }\n };\n}\nfunction wrapAtRules(rule, wrappers) {\n var out = rule;\n for (var index = wrappers.length - 1; index >= 0; index--) {\n out = `${wrappers[index]} {${out}}`;\n }\n return out;\n}\nexport {\n defaultStateSelectors,\n lowerProgram\n};\n//# sourceMappingURL=lowerProgram.js.map\n"],"mappings":"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"}
1
+ {"version":3,"file":"lowerProgram.native.js","names":[],"sources":["esm/programs/lowerProgram.native.js"],"sourcesContent":["import { parseGroupModifier } from \"../runtime/clauseIdentity\";\nimport { parseContainerModifier } from \"./modifierRegistry\";\nimport { canonicalClauseModifier, clauseConditionSetKey, clauseSubjectClassRepetitions, createClausePrecedenceOrder, getClausePrecedenceKey } from \"../runtime/clausePrecedence\";\nimport { transformAxisCompositions } from \"../shorthands/transformFamily\";\nimport { programClassName } from \"./programHash\";\nvar defaultStateSelectors = Object.freeze({\n hover: {\n fragment: \":hover\",\n media: \"(hover: hover)\"\n },\n // the press modifier's CSS pseudo name is `active`\n press: {\n fragment: \":active\"\n },\n // the registered alias of press\n active: {\n fragment: \":active\"\n },\n focus: {\n fragment: \":focus\"\n },\n \"focus-visible\": {\n fragment: \":focus-visible\"\n },\n \"focus-within\": {\n fragment: \":focus-within\"\n },\n disabled: {\n fragment: \"[aria-disabled]\"\n },\n enter: {\n fragment: \".t_unmounted\",\n scope: \"is-or-within\"\n },\n exit: {\n fragment: \".t_exiting\",\n scope: \"is-or-within\"\n }\n});\nvar unnamedGroup = \"true\";\nfunction pushCapabilityGuard(wrappers, media) {\n var guard = `@media ${media}`;\n for (var index = 0; index < wrappers.length; index++) {\n if (wrappers[index] === guard) return;\n }\n wrappers.push(guard);\n}\nfunction hyphenate(property) {\n var out = \"\";\n for (var index = 0; index < property.length; index++) {\n var code = property.charCodeAt(index);\n out += code >= 65 && code <= 90 ? `-${property[index].toLowerCase()}` : property[index];\n }\n return out;\n}\nfunction conditionSelector(fragment, scope, zeroSpecificity) {\n var pseudo = zeroSpecificity ? \"where\" : \"is\";\n if (scope === \"within\") return `:${pseudo}(${fragment} *)`;\n if (scope === \"is-or-within\") {\n return `:${pseudo}(${fragment}, ${fragment} *)`;\n }\n return zeroSpecificity ? `:where(${fragment})` : fragment;\n}\nfunction isPointerEventsMode(value) {\n return value === \"auto\" || value === \"none\" || value === \"box-none\" || value === \"box-only\";\n}\nfunction pointerEventsCSS(mode) {\n return {\n subject: mode === \"none\" || mode === \"box-none\" ? \"none\" : \"auto\",\n children: mode === \"none\" || mode === \"box-only\" ? \"none\" : \"auto\"\n };\n}\nfunction lowerProgram(program, options) {\n var { registry, configRevision, mediaQueries, containerQueries, stateSelectors = defaultStateSelectors, precedenceOrder = createClausePrecedenceOrder(mediaQueries), themeClassPrefix = \"t_\", groupClassPrefix = \"t_group_\" } = options;\n var className = programClassName(program.property, program.value, configRevision);\n var declaration = hyphenate(program.property);\n var rules = [];\n var pointerEventsProgram = program.property === \"pointerEvents\" && [\n program.value.base,\n ...program.value.clauses.map(function(clause2) {\n return clause2.payload;\n })\n ].some(function(value) {\n return value === \"box-none\" || value === \"box-only\";\n });\n var pushRule = function(selector2, wrappers2, value) {\n if (pointerEventsProgram && isPointerEventsMode(value)) {\n var pointerEvents = pointerEventsCSS(value);\n rules.push(wrapAtRules(`${selector2}{${declaration}:${pointerEvents.subject}}`, wrappers2));\n rules.push(wrapAtRules(`:where(${selector2})>*{${declaration}:${pointerEvents.children}}`, wrappers2));\n return;\n }\n rules.push(wrapAtRules(`${selector2}{${declaration}:${value}}`, wrappers2));\n };\n if (program.value.base !== null) {\n pushRule(`.${className}`, [], program.value.base);\n }\n var clauseSlots = /* @__PURE__ */ new Map();\n for (var index = 0; index < program.value.clauses.length; index++) {\n var clause = program.value.clauses[index];\n clauseSlots.set(clauseConditionSetKey(clause.modifiers), {\n clause,\n index\n });\n }\n var clauses = [\n ...clauseSlots.values()\n ].map(function(entry) {\n return {\n ...entry,\n precedence: getClausePrecedenceKey(entry.clause.modifiers, registry, precedenceOrder)\n };\n }).sort(function(left, right) {\n return left.precedence - right.precedence || left.index - right.index;\n });\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = clauses[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var { clause: clause1, precedence } = _step.value;\n var selectorSuffix = \"\";\n var selfStateSpecificity = 0;\n var wrappers = [];\n var skip = false;\n var seenModifiers = /* @__PURE__ */ new Set();\n var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = void 0;\n try {\n for (var _iterator1 = clause1.modifiers[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {\n var authoredModifier = _step1.value;\n var modifier = canonicalClauseModifier(authoredModifier);\n if (seenModifiers.has(modifier)) continue;\n seenModifiers.add(modifier);\n var kind = registry.get(modifier);\n if (kind === \"platform\") {\n if (modifier !== \"web\") skip = true;\n continue;\n }\n if (kind === \"media\") {\n var query = mediaQueries === null || mediaQueries === void 0 ? void 0 : mediaQueries[modifier];\n if (!query) {\n throw new Error(`cannot lower \"${modifier}:\" \\u2014 no media query was provided for media key \"${modifier}\"`);\n }\n wrappers.push(`@media ${query}`);\n continue;\n }\n if (kind === \"container\") {\n var container = parseContainerModifier(modifier);\n var query1 = containerQueries === null || containerQueries === void 0 ? void 0 : containerQueries[container.size];\n if (!query1) {\n throw new Error(`cannot lower \"${modifier}:\" \\u2014 no container query was provided for size \"${container.size}\"`);\n }\n wrappers.push(container.container === null ? `@container ${query1}` : `@container ${container.container} ${query1}`);\n continue;\n }\n if (kind === \"state\") {\n var state = stateSelectors[modifier];\n if (!state) {\n throw new Error(`cannot lower \"${modifier}:\" \\u2014 the state has no web selector, so it cannot become CSS`);\n }\n var _state_scope;\n selectorSuffix += conditionSelector(state.fragment, (_state_scope = state.scope) !== null && _state_scope !== void 0 ? _state_scope : \"self\", false);\n selfStateSpecificity++;\n if (state.media) pushCapabilityGuard(wrappers, state.media);\n continue;\n }\n if (kind === \"theme\") {\n selectorSuffix += conditionSelector(`.${themeClassPrefix}${modifier}`, \"is-or-within\", true);\n continue;\n }\n if (kind === \"group\") {\n var group = parseGroupModifier(modifier);\n var state1 = stateSelectors[group.state];\n if (!state1) {\n throw new Error(`cannot lower \"${modifier}:\" \\u2014 the group state \"${group.state}\" has no web selector`);\n }\n var _group_group;\n selectorSuffix += conditionSelector(`.${groupClassPrefix}${(_group_group = group.group) !== null && _group_group !== void 0 ? _group_group : unnamedGroup}${state1.fragment}`, \"within\", true);\n if (state1.media) pushCapabilityGuard(wrappers, state1.media);\n continue;\n }\n throw new Error(`cannot lower \"${modifier}:\" \\u2014 it is not a registered modifier, so the value was never validated`);\n }\n } catch (err) {\n _didIteratorError1 = true;\n _iteratorError1 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion1 && _iterator1.return != null) {\n _iterator1.return();\n }\n } finally {\n if (_didIteratorError1) {\n throw _iteratorError1;\n }\n }\n }\n if (skip) continue;\n var selector = `.${className}`.repeat(clauseSubjectClassRepetitions(precedence, selfStateSpecificity)) + selectorSuffix;\n pushRule(selector, wrappers, clause1.payload);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n var composition = transformAxisCompositions[program.property];\n if (!composition) return {\n className,\n rules\n };\n var compositionClassName = programClassName(composition.property, {\n base: composition.value,\n clauses: []\n }, configRevision);\n var localDefaults = Object.entries(composition.defaults).map(function(param) {\n var [property, value] = param;\n return `${property}:${value}`;\n }).join(\";\");\n return {\n className,\n rules,\n composition: {\n property: composition.property,\n className: compositionClassName,\n rules: [\n `:where(.${compositionClassName}){${localDefaults}}`,\n `.${compositionClassName}{${composition.property}:${composition.value}}`\n ]\n }\n };\n}\nfunction wrapAtRules(rule, wrappers) {\n var out = rule;\n for (var index = wrappers.length - 1; index >= 0; index--) {\n out = `${wrappers[index]} {${out}}`;\n }\n return out;\n}\nexport {\n defaultStateSelectors,\n lowerProgram\n};\n//# sourceMappingURL=lowerProgram.js.map\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tamagui/style-grammar",
3
- "version": "3.0.0-beta.1101.1",
3
+ "version": "3.0.0-beta.1111.1",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -84,7 +84,7 @@
84
84
  },
85
85
  "dependencies": {},
86
86
  "devDependencies": {
87
- "@tamagui/build": "3.0.0-beta.1101.1",
87
+ "@tamagui/build": "3.0.0-beta.1111.1",
88
88
  "vitest": "4.1.0"
89
89
  },
90
90
  "repository": {
@@ -212,7 +212,10 @@ export function lowerProgram(
212
212
  wrapAtRules(`${selector}{${declaration}:${pointerEvents.subject}}`, wrappers)
213
213
  )
214
214
  rules.push(
215
- wrapAtRules(`${selector}>*{${declaration}:${pointerEvents.children}}`, wrappers)
215
+ wrapAtRules(
216
+ `:where(${selector})>*{${declaration}:${pointerEvents.children}}`,
217
+ wrappers
218
+ )
216
219
  )
217
220
  return
218
221
  }
@@ -6,6 +6,6 @@
6
6
  ],
7
7
  "version": 3,
8
8
  "sourcesContent": [
9
- "// Web lowering: one program becomes one contiguous block of CSS rules.\n//\n// See plans/dom-tailwind-flat-values.md — \"The program block encoding\". The\n// invariants this file exists to hold:\n//\n// - every condition anchors on the subject class, Tailwind-group style, so a\n// clause is exactly ONE selector: conditions chain as `:where()` on the\n// subject in authored modifier order. Ancestor-scoped conditions become a\n// descendant test inside their own `:where()` (`.t_dark *`), which makes each\n// one independent, so nesting order between them never matters and no\n// ancestor-permutation selectors exist;\n// - rule order is ascending clause precedence; selector specificity encodes\n// depth, while platform clauses receive a floor above the maximum\n// non-platform depth. Self states contribute naturally; media/container\n// wrappers and :where()-scoped theme/group ancestors contribute zero;\n// - the block is inserted contiguously, so cross-program order never matters and\n// append-at-end is always safe.\n//\n// Payloads are emitted verbatim. Token resolution, opacity composition, and\n// value validation all happen upstream: this layer receives CSS-ready payloads,\n// and the same resolved program is what the class name hashes, so a program has\n// exactly one identity. Rule injection through a payload is structurally\n// impossible because the parser rejects a top-level `{`, `}`, or `;`.\n\nimport { parseGroupModifier } from '../runtime/clauseIdentity'\nimport { parseContainerModifier } from './modifierRegistry'\nimport {\n canonicalClauseModifier,\n clauseConditionSetKey,\n clauseSubjectClassRepetitions,\n createClausePrecedenceOrder,\n getClausePrecedenceKey,\n type ClausePrecedenceOrder,\n} from '../runtime/clausePrecedence'\nimport { transformAxisCompositions } from '../shorthands/transformFamily'\nimport { programClassName } from './programHash'\nimport type { LonghandProgram, ModifierRegistryView } from '../ast/valueTypes'\n\n/**\n * Where a condition's selector fragment is matched, relative to the subject: on\n * the subject itself, strictly above it, or either.\n */\nexport type ConditionScope = 'self' | 'within' | 'is-or-within'\n\nexport interface ConditionSelector {\n /** compound selector piece, eg `:hover`, `.t_dark`, `[aria-disabled]` */\n fragment: string\n /** defaults to `self` */\n scope?: ConditionScope\n /**\n * capability guard the rule must nest in, eg `(hover: hover)` so touch\n * devices never sticky-trigger hover styles\n */\n media?: string\n}\n\n/**\n * Interaction-state selector spellings: `disabled` is an attribute rather than\n * `:disabled`, and enter matches the unmounted class on the subject or above it.\n * Mirrored as data instead of imported because this package must not depend on\n * @tamagui/web.\n *\n * Lifecycle clauses use classes supplied by createComponent. `is-or-within`\n * lets a presence boundary carry the lifecycle state for descendants too.\n */\nexport const defaultStateSelectors: Readonly<Record<string, ConditionSelector>> =\n Object.freeze({\n hover: { fragment: ':hover', media: '(hover: hover)' },\n // the press modifier's CSS pseudo name is `active`\n press: { fragment: ':active' },\n // the registered alias of press\n active: { fragment: ':active' },\n focus: { fragment: ':focus' },\n 'focus-visible': { fragment: ':focus-visible' },\n 'focus-within': { fragment: ':focus-within' },\n disabled: { fragment: '[aria-disabled]' },\n enter: { fragment: '.t_unmounted', scope: 'is-or-within' },\n exit: { fragment: '.t_exiting', scope: 'is-or-within' },\n })\n\n// core writes the unnamed group's class as `t_group_true`, from the boolean\n// `group` prop (see getSplitStyles' group class name construction)\nconst unnamedGroup = 'true'\n\n// a capability guard (hover: hover) wraps once even when the subject and a\n// group both carry the hover state in one clause\nfunction pushCapabilityGuard(wrappers: string[], media: string): void {\n const guard = `@media ${media}`\n for (let index = 0; index < wrappers.length; index++) {\n if (wrappers[index] === guard) return\n }\n wrappers.push(guard)\n}\n\nexport interface LowerProgramOptions {\n /** classifies each modifier; the same registry the value was parsed against */\n registry: ModifierRegistryView\n /** opaque stamp for the resolved config that produced these payloads */\n configRevision: string\n /** media key -> the `@media` condition text, eg `(max-width: 860px)` */\n mediaQueries?: Readonly<Record<string, string>>\n /**\n * media key -> the `@container` condition text, eg `(min-width: 24rem)`. Sizes\n * are the same keys as `mediaQueries`, but the query text differs: container\n * queries measure the container, not the viewport, so the caller derives both\n * from config.\n */\n containerQueries?: Readonly<Record<string, string>>\n /** modifier -> selector, defaults to `defaultStateSelectors` */\n stateSelectors?: Readonly<Record<string, ConditionSelector>>\n /** precomputed media declaration order; derived from mediaQueries by default */\n precedenceOrder?: ClausePrecedenceOrder\n /** theme class prefix; `t_` gives `.t_dark` */\n themeClassPrefix?: string\n /** group class prefix; `t_group_` gives `.t_group_card` */\n groupClassPrefix?: string\n}\n\nexport interface LoweredProgram {\n className: string\n /** base rule first, then one rule per emitted clause in precedence order */\n rules: string[]\n /**\n * Present when the program writes a per-axis custom property (`x`, `y`,\n * `scaleX`, `scaleY`). The composing rule turns the axis variables into the\n * real CSS property and is identical for every element using that axis group,\n * so it carries its own class name and hash: the caller adds this class too and\n * insertion dedups it to one rule per sheet. Its specificity is the same\n * (0,1,0) as every other rule here.\n */\n composition?: {\n /** the CSS property being composed, and the classNames key to store it under */\n property: string\n className: string\n rules: string[]\n }\n}\n\nfunction hyphenate(property: string): string {\n let out = ''\n for (let index = 0; index < property.length; index++) {\n const code = property.charCodeAt(index)\n out +=\n code >= 65 && code <= 90 ? `-${property[index].toLowerCase()}` : property[index]\n }\n return out\n}\n\nfunction conditionSelector(\n fragment: string,\n scope: ConditionScope,\n zeroSpecificity: boolean\n): string {\n const pseudo = zeroSpecificity ? 'where' : 'is'\n if (scope === 'within') return `:${pseudo}(${fragment} *)`\n if (scope === 'is-or-within') {\n return `:${pseudo}(${fragment}, ${fragment} *)`\n }\n return zeroSpecificity ? `:where(${fragment})` : fragment\n}\n\ntype PointerEventsMode = 'auto' | 'none' | 'box-none' | 'box-only'\n\nfunction isPointerEventsMode(value: string): value is PointerEventsMode {\n return (\n value === 'auto' || value === 'none' || value === 'box-none' || value === 'box-only'\n )\n}\n\nfunction pointerEventsCSS(mode: PointerEventsMode): {\n subject: 'auto' | 'none'\n children: 'auto' | 'none'\n} {\n return {\n subject: mode === 'none' || mode === 'box-none' ? 'none' : 'auto',\n children: mode === 'none' || mode === 'box-only' ? 'none' : 'auto',\n }\n}\n\nexport function lowerProgram(\n program: LonghandProgram,\n options: LowerProgramOptions\n): LoweredProgram {\n const {\n registry,\n configRevision,\n mediaQueries,\n containerQueries,\n stateSelectors = defaultStateSelectors,\n precedenceOrder = createClausePrecedenceOrder(mediaQueries),\n themeClassPrefix = 't_',\n groupClassPrefix = 't_group_',\n } = options\n\n const className = programClassName(program.property, program.value, configRevision)\n const declaration = hyphenate(program.property)\n const rules: string[] = []\n\n // React Native's box-only/box-none values need a subject rule and a direct-child\n // rule. If either appears in a program, every clause emits both halves so moving\n // between (for example) box-none and none cannot leave the base child rule active.\n const pointerEventsProgram =\n program.property === 'pointerEvents' &&\n [program.value.base, ...program.value.clauses.map((clause) => clause.payload)].some(\n (value) => value === 'box-none' || value === 'box-only'\n )\n\n const pushRule = (selector: string, wrappers: readonly string[], value: string) => {\n if (pointerEventsProgram && isPointerEventsMode(value)) {\n const pointerEvents = pointerEventsCSS(value)\n rules.push(\n wrapAtRules(`${selector}{${declaration}:${pointerEvents.subject}}`, wrappers)\n )\n rules.push(\n wrapAtRules(`${selector}>*{${declaration}:${pointerEvents.children}}`, wrappers)\n )\n return\n }\n rules.push(wrapAtRules(`${selector}{${declaration}:${value}}`, wrappers))\n }\n\n if (program.value.base !== null) {\n pushRule(`.${className}`, [], program.value.base)\n }\n\n const clauseSlots = new Map<\n string,\n { clause: (typeof program.value.clauses)[number]; index: number }\n >()\n for (let index = 0; index < program.value.clauses.length; index++) {\n const clause = program.value.clauses[index]\n clauseSlots.set(clauseConditionSetKey(clause.modifiers), { clause, index })\n }\n const clauses = [...clauseSlots.values()]\n .map((entry) => ({\n ...entry,\n precedence: getClausePrecedenceKey(\n entry.clause.modifiers,\n registry,\n precedenceOrder\n ),\n }))\n .sort((left, right) => left.precedence - right.precedence || left.index - right.index)\n\n for (const { clause, precedence } of clauses) {\n let selectorSuffix = ''\n let selfStateSpecificity = 0\n // at-rule preludes wrapping this clause, outermost first in authored order\n const wrappers: string[] = []\n let skip = false\n const seenModifiers = new Set<string>()\n\n for (const authoredModifier of clause.modifiers) {\n const modifier = canonicalClauseModifier(authoredModifier)\n if (seenModifiers.has(modifier)) continue\n seenModifiers.add(modifier)\n const kind = registry.get(modifier)\n\n if (kind === 'platform') {\n // a web clause applies here exactly as if unconditional at its position;\n // every other platform's clause belongs to native and is not web CSS\n if (modifier !== 'web') skip = true\n continue\n }\n\n if (kind === 'media') {\n const query = mediaQueries?.[modifier]\n if (!query) {\n throw new Error(\n `cannot lower \"${modifier}:\" — no media query was provided for media key \"${modifier}\"`\n )\n }\n wrappers.push(`@media ${query}`)\n continue\n }\n\n if (kind === 'container') {\n const container = parseContainerModifier(modifier)!\n const query = containerQueries?.[container.size]\n if (!query) {\n throw new Error(\n `cannot lower \"${modifier}:\" — no container query was provided for size \"${container.size}\"`\n )\n }\n wrappers.push(\n container.container === null\n ? `@container ${query}`\n : `@container ${container.container} ${query}`\n )\n continue\n }\n\n if (kind === 'state') {\n const state = stateSelectors[modifier]\n if (!state) {\n throw new Error(\n `cannot lower \"${modifier}:\" — the state has no web selector, so it cannot become CSS`\n )\n }\n selectorSuffix += conditionSelector(state.fragment, state.scope ?? 'self', false)\n selfStateSpecificity++\n if (state.media) pushCapabilityGuard(wrappers, state.media)\n continue\n }\n\n if (kind === 'theme') {\n // the theme class is on the subject or anywhere above it\n selectorSuffix += conditionSelector(\n `.${themeClassPrefix}${modifier}`,\n 'is-or-within',\n true\n )\n continue\n }\n\n if (kind === 'group') {\n const group = parseGroupModifier(modifier)!\n const state = stateSelectors[group.state]\n if (!state) {\n throw new Error(\n `cannot lower \"${modifier}:\" — the group state \"${group.state}\" has no web selector`\n )\n }\n // a group is always a parent, never the subject itself\n selectorSuffix += conditionSelector(\n `.${groupClassPrefix}${group.group ?? unnamedGroup}${state.fragment}`,\n 'within',\n true\n )\n if (state.media) pushCapabilityGuard(wrappers, state.media)\n continue\n }\n\n throw new Error(\n `cannot lower \"${modifier}:\" — it is not a registered modifier, so the value was never validated`\n )\n }\n\n if (skip) continue\n\n const selector =\n `.${className}`.repeat(\n clauseSubjectClassRepetitions(precedence, selfStateSpecificity)\n ) + selectorSuffix\n pushRule(selector, wrappers, clause.payload)\n }\n\n const composition = transformAxisCompositions[program.property]\n if (!composition) return { className, rules }\n\n // one shared rule per axis group: same text, same hash, inserted once\n const compositionClassName = programClassName(\n composition.property,\n { base: composition.value, clauses: [] },\n configRevision\n )\n const localDefaults = Object.entries(composition.defaults)\n .map(([property, value]) => `${property}:${value}`)\n .join(';')\n return {\n className,\n rules,\n composition: {\n property: composition.property,\n className: compositionClassName,\n rules: [\n `:where(.${compositionClassName}){${localDefaults}}`,\n `.${compositionClassName}{${composition.property}:${composition.value}}`,\n ],\n },\n }\n}\n\n/**\n * Media and container conditions wrap outermost, first authored outermost, and\n * both share one list so a chain mixing them keeps authored order. Nesting is\n * AND for arbitrary query texts, where joining with ` and ` would break on query\n * lists and on `screen and (…)` forms. Specificity is unmoved either way.\n */\nfunction wrapAtRules(rule: string, wrappers: readonly string[]): string {\n let out = rule\n for (let index = wrappers.length - 1; index >= 0; index--) {\n out = `${wrappers[index]} {${out}}`\n }\n return out\n}\n"
9
+ "// Web lowering: one program becomes one contiguous block of CSS rules.\n//\n// See plans/dom-tailwind-flat-values.md — \"The program block encoding\". The\n// invariants this file exists to hold:\n//\n// - every condition anchors on the subject class, Tailwind-group style, so a\n// clause is exactly ONE selector: conditions chain as `:where()` on the\n// subject in authored modifier order. Ancestor-scoped conditions become a\n// descendant test inside their own `:where()` (`.t_dark *`), which makes each\n// one independent, so nesting order between them never matters and no\n// ancestor-permutation selectors exist;\n// - rule order is ascending clause precedence; selector specificity encodes\n// depth, while platform clauses receive a floor above the maximum\n// non-platform depth. Self states contribute naturally; media/container\n// wrappers and :where()-scoped theme/group ancestors contribute zero;\n// - the block is inserted contiguously, so cross-program order never matters and\n// append-at-end is always safe.\n//\n// Payloads are emitted verbatim. Token resolution, opacity composition, and\n// value validation all happen upstream: this layer receives CSS-ready payloads,\n// and the same resolved program is what the class name hashes, so a program has\n// exactly one identity. Rule injection through a payload is structurally\n// impossible because the parser rejects a top-level `{`, `}`, or `;`.\n\nimport { parseGroupModifier } from '../runtime/clauseIdentity'\nimport { parseContainerModifier } from './modifierRegistry'\nimport {\n canonicalClauseModifier,\n clauseConditionSetKey,\n clauseSubjectClassRepetitions,\n createClausePrecedenceOrder,\n getClausePrecedenceKey,\n type ClausePrecedenceOrder,\n} from '../runtime/clausePrecedence'\nimport { transformAxisCompositions } from '../shorthands/transformFamily'\nimport { programClassName } from './programHash'\nimport type { LonghandProgram, ModifierRegistryView } from '../ast/valueTypes'\n\n/**\n * Where a condition's selector fragment is matched, relative to the subject: on\n * the subject itself, strictly above it, or either.\n */\nexport type ConditionScope = 'self' | 'within' | 'is-or-within'\n\nexport interface ConditionSelector {\n /** compound selector piece, eg `:hover`, `.t_dark`, `[aria-disabled]` */\n fragment: string\n /** defaults to `self` */\n scope?: ConditionScope\n /**\n * capability guard the rule must nest in, eg `(hover: hover)` so touch\n * devices never sticky-trigger hover styles\n */\n media?: string\n}\n\n/**\n * Interaction-state selector spellings: `disabled` is an attribute rather than\n * `:disabled`, and enter matches the unmounted class on the subject or above it.\n * Mirrored as data instead of imported because this package must not depend on\n * @tamagui/web.\n *\n * Lifecycle clauses use classes supplied by createComponent. `is-or-within`\n * lets a presence boundary carry the lifecycle state for descendants too.\n */\nexport const defaultStateSelectors: Readonly<Record<string, ConditionSelector>> =\n Object.freeze({\n hover: { fragment: ':hover', media: '(hover: hover)' },\n // the press modifier's CSS pseudo name is `active`\n press: { fragment: ':active' },\n // the registered alias of press\n active: { fragment: ':active' },\n focus: { fragment: ':focus' },\n 'focus-visible': { fragment: ':focus-visible' },\n 'focus-within': { fragment: ':focus-within' },\n disabled: { fragment: '[aria-disabled]' },\n enter: { fragment: '.t_unmounted', scope: 'is-or-within' },\n exit: { fragment: '.t_exiting', scope: 'is-or-within' },\n })\n\n// core writes the unnamed group's class as `t_group_true`, from the boolean\n// `group` prop (see getSplitStyles' group class name construction)\nconst unnamedGroup = 'true'\n\n// a capability guard (hover: hover) wraps once even when the subject and a\n// group both carry the hover state in one clause\nfunction pushCapabilityGuard(wrappers: string[], media: string): void {\n const guard = `@media ${media}`\n for (let index = 0; index < wrappers.length; index++) {\n if (wrappers[index] === guard) return\n }\n wrappers.push(guard)\n}\n\nexport interface LowerProgramOptions {\n /** classifies each modifier; the same registry the value was parsed against */\n registry: ModifierRegistryView\n /** opaque stamp for the resolved config that produced these payloads */\n configRevision: string\n /** media key -> the `@media` condition text, eg `(max-width: 860px)` */\n mediaQueries?: Readonly<Record<string, string>>\n /**\n * media key -> the `@container` condition text, eg `(min-width: 24rem)`. Sizes\n * are the same keys as `mediaQueries`, but the query text differs: container\n * queries measure the container, not the viewport, so the caller derives both\n * from config.\n */\n containerQueries?: Readonly<Record<string, string>>\n /** modifier -> selector, defaults to `defaultStateSelectors` */\n stateSelectors?: Readonly<Record<string, ConditionSelector>>\n /** precomputed media declaration order; derived from mediaQueries by default */\n precedenceOrder?: ClausePrecedenceOrder\n /** theme class prefix; `t_` gives `.t_dark` */\n themeClassPrefix?: string\n /** group class prefix; `t_group_` gives `.t_group_card` */\n groupClassPrefix?: string\n}\n\nexport interface LoweredProgram {\n className: string\n /** base rule first, then one rule per emitted clause in precedence order */\n rules: string[]\n /**\n * Present when the program writes a per-axis custom property (`x`, `y`,\n * `scaleX`, `scaleY`). The composing rule turns the axis variables into the\n * real CSS property and is identical for every element using that axis group,\n * so it carries its own class name and hash: the caller adds this class too and\n * insertion dedups it to one rule per sheet. Its specificity is the same\n * (0,1,0) as every other rule here.\n */\n composition?: {\n /** the CSS property being composed, and the classNames key to store it under */\n property: string\n className: string\n rules: string[]\n }\n}\n\nfunction hyphenate(property: string): string {\n let out = ''\n for (let index = 0; index < property.length; index++) {\n const code = property.charCodeAt(index)\n out +=\n code >= 65 && code <= 90 ? `-${property[index].toLowerCase()}` : property[index]\n }\n return out\n}\n\nfunction conditionSelector(\n fragment: string,\n scope: ConditionScope,\n zeroSpecificity: boolean\n): string {\n const pseudo = zeroSpecificity ? 'where' : 'is'\n if (scope === 'within') return `:${pseudo}(${fragment} *)`\n if (scope === 'is-or-within') {\n return `:${pseudo}(${fragment}, ${fragment} *)`\n }\n return zeroSpecificity ? `:where(${fragment})` : fragment\n}\n\ntype PointerEventsMode = 'auto' | 'none' | 'box-none' | 'box-only'\n\nfunction isPointerEventsMode(value: string): value is PointerEventsMode {\n return (\n value === 'auto' || value === 'none' || value === 'box-none' || value === 'box-only'\n )\n}\n\nfunction pointerEventsCSS(mode: PointerEventsMode): {\n subject: 'auto' | 'none'\n children: 'auto' | 'none'\n} {\n return {\n subject: mode === 'none' || mode === 'box-none' ? 'none' : 'auto',\n children: mode === 'none' || mode === 'box-only' ? 'none' : 'auto',\n }\n}\n\nexport function lowerProgram(\n program: LonghandProgram,\n options: LowerProgramOptions\n): LoweredProgram {\n const {\n registry,\n configRevision,\n mediaQueries,\n containerQueries,\n stateSelectors = defaultStateSelectors,\n precedenceOrder = createClausePrecedenceOrder(mediaQueries),\n themeClassPrefix = 't_',\n groupClassPrefix = 't_group_',\n } = options\n\n const className = programClassName(program.property, program.value, configRevision)\n const declaration = hyphenate(program.property)\n const rules: string[] = []\n\n // React Native's box-only/box-none values need a subject rule and a direct-child\n // rule. If either appears in a program, every clause emits both halves so moving\n // between (for example) box-none and none cannot leave the base child rule active.\n const pointerEventsProgram =\n program.property === 'pointerEvents' &&\n [program.value.base, ...program.value.clauses.map((clause) => clause.payload)].some(\n (value) => value === 'box-none' || value === 'box-only'\n )\n\n const pushRule = (selector: string, wrappers: readonly string[], value: string) => {\n if (pointerEventsProgram && isPointerEventsMode(value)) {\n const pointerEvents = pointerEventsCSS(value)\n rules.push(\n wrapAtRules(`${selector}{${declaration}:${pointerEvents.subject}}`, wrappers)\n )\n rules.push(\n wrapAtRules(\n `:where(${selector})>*{${declaration}:${pointerEvents.children}}`,\n wrappers\n )\n )\n return\n }\n rules.push(wrapAtRules(`${selector}{${declaration}:${value}}`, wrappers))\n }\n\n if (program.value.base !== null) {\n pushRule(`.${className}`, [], program.value.base)\n }\n\n const clauseSlots = new Map<\n string,\n { clause: (typeof program.value.clauses)[number]; index: number }\n >()\n for (let index = 0; index < program.value.clauses.length; index++) {\n const clause = program.value.clauses[index]\n clauseSlots.set(clauseConditionSetKey(clause.modifiers), { clause, index })\n }\n const clauses = [...clauseSlots.values()]\n .map((entry) => ({\n ...entry,\n precedence: getClausePrecedenceKey(\n entry.clause.modifiers,\n registry,\n precedenceOrder\n ),\n }))\n .sort((left, right) => left.precedence - right.precedence || left.index - right.index)\n\n for (const { clause, precedence } of clauses) {\n let selectorSuffix = ''\n let selfStateSpecificity = 0\n // at-rule preludes wrapping this clause, outermost first in authored order\n const wrappers: string[] = []\n let skip = false\n const seenModifiers = new Set<string>()\n\n for (const authoredModifier of clause.modifiers) {\n const modifier = canonicalClauseModifier(authoredModifier)\n if (seenModifiers.has(modifier)) continue\n seenModifiers.add(modifier)\n const kind = registry.get(modifier)\n\n if (kind === 'platform') {\n // a web clause applies here exactly as if unconditional at its position;\n // every other platform's clause belongs to native and is not web CSS\n if (modifier !== 'web') skip = true\n continue\n }\n\n if (kind === 'media') {\n const query = mediaQueries?.[modifier]\n if (!query) {\n throw new Error(\n `cannot lower \"${modifier}:\" — no media query was provided for media key \"${modifier}\"`\n )\n }\n wrappers.push(`@media ${query}`)\n continue\n }\n\n if (kind === 'container') {\n const container = parseContainerModifier(modifier)!\n const query = containerQueries?.[container.size]\n if (!query) {\n throw new Error(\n `cannot lower \"${modifier}:\" — no container query was provided for size \"${container.size}\"`\n )\n }\n wrappers.push(\n container.container === null\n ? `@container ${query}`\n : `@container ${container.container} ${query}`\n )\n continue\n }\n\n if (kind === 'state') {\n const state = stateSelectors[modifier]\n if (!state) {\n throw new Error(\n `cannot lower \"${modifier}:\" — the state has no web selector, so it cannot become CSS`\n )\n }\n selectorSuffix += conditionSelector(state.fragment, state.scope ?? 'self', false)\n selfStateSpecificity++\n if (state.media) pushCapabilityGuard(wrappers, state.media)\n continue\n }\n\n if (kind === 'theme') {\n // the theme class is on the subject or anywhere above it\n selectorSuffix += conditionSelector(\n `.${themeClassPrefix}${modifier}`,\n 'is-or-within',\n true\n )\n continue\n }\n\n if (kind === 'group') {\n const group = parseGroupModifier(modifier)!\n const state = stateSelectors[group.state]\n if (!state) {\n throw new Error(\n `cannot lower \"${modifier}:\" — the group state \"${group.state}\" has no web selector`\n )\n }\n // a group is always a parent, never the subject itself\n selectorSuffix += conditionSelector(\n `.${groupClassPrefix}${group.group ?? unnamedGroup}${state.fragment}`,\n 'within',\n true\n )\n if (state.media) pushCapabilityGuard(wrappers, state.media)\n continue\n }\n\n throw new Error(\n `cannot lower \"${modifier}:\" — it is not a registered modifier, so the value was never validated`\n )\n }\n\n if (skip) continue\n\n const selector =\n `.${className}`.repeat(\n clauseSubjectClassRepetitions(precedence, selfStateSpecificity)\n ) + selectorSuffix\n pushRule(selector, wrappers, clause.payload)\n }\n\n const composition = transformAxisCompositions[program.property]\n if (!composition) return { className, rules }\n\n // one shared rule per axis group: same text, same hash, inserted once\n const compositionClassName = programClassName(\n composition.property,\n { base: composition.value, clauses: [] },\n configRevision\n )\n const localDefaults = Object.entries(composition.defaults)\n .map(([property, value]) => `${property}:${value}`)\n .join(';')\n return {\n className,\n rules,\n composition: {\n property: composition.property,\n className: compositionClassName,\n rules: [\n `:where(.${compositionClassName}){${localDefaults}}`,\n `.${compositionClassName}{${composition.property}:${composition.value}}`,\n ],\n },\n }\n}\n\n/**\n * Media and container conditions wrap outermost, first authored outermost, and\n * both share one list so a chain mixing them keeps authored order. Nesting is\n * AND for arbitrary query texts, where joining with ` and ` would break on query\n * lists and on `screen and (…)` forms. Specificity is unmoved either way.\n */\nfunction wrapAtRules(rule: string, wrappers: readonly string[]): string {\n let out = rule\n for (let index = wrappers.length - 1; index >= 0; index--) {\n out = `${wrappers[index]} {${out}}`\n }\n return out\n}\n"
10
10
  ]
11
11
  }