diff --git a/packages/babel-plugin-jsx-dom-expressions/src/dom/template.js b/packages/babel-plugin-jsx-dom-expressions/src/dom/template.js index 570bb448..675cc21b 100644 --- a/packages/babel-plugin-jsx-dom-expressions/src/dom/template.js +++ b/packages/babel-plugin-jsx-dom-expressions/src/dom/template.js @@ -102,11 +102,16 @@ function wrapDynamics(path, dynamics) { const effectWrapperId = registerImportMethod(path, config.effectWrapper); if (dynamics.length === 1) { + let dynamicStyle; const prevValue = - dynamics[0].key === "classList" || dynamics[0].key === "style" + dynamics[0].key === "classList" || + dynamics[0].key === "style" || + (dynamicStyle = dynamics[0].key.startsWith("style:")) ? t.identifier("_$p") : undefined; - if ( + if (dynamicStyle) { + dynamics[0].value = t.assignmentExpression("=", prevValue, dynamics[0].value); + } else if ( dynamics[0].key.startsWith("class:") && !t.isBooleanLiteral(dynamics[0].value) && !t.isUnaryExpression(dynamics[0].value) diff --git a/packages/babel-plugin-jsx-dom-expressions/test/__dom_fixtures__/attributeExpressions/code.js b/packages/babel-plugin-jsx-dom-expressions/test/__dom_fixtures__/attributeExpressions/code.js index fe3f1f41..daf044fa 100644 --- a/packages/babel-plugin-jsx-dom-expressions/test/__dom_fixtures__/attributeExpressions/code.js +++ b/packages/babel-plugin-jsx-dom-expressions/test/__dom_fixtures__/attributeExpressions/code.js @@ -201,3 +201,5 @@ const template37 =
const template38 =
const template39 = + +const template40 =
diff --git a/packages/babel-plugin-jsx-dom-expressions/test/__dom_fixtures__/attributeExpressions/output.js b/packages/babel-plugin-jsx-dom-expressions/test/__dom_fixtures__/attributeExpressions/output.js index 38b7490f..382b4759 100644 --- a/packages/babel-plugin-jsx-dom-expressions/test/__dom_fixtures__/attributeExpressions/output.js +++ b/packages/babel-plugin-jsx-dom-expressions/test/__dom_fixtures__/attributeExpressions/output.js @@ -340,9 +340,9 @@ const template29 = (() => { const template30 = _tmpl$17(); const template31 = (() => { var _el$44 = _tmpl$4(); - _$effect(() => - getStore.itemProperties.color != null - ? _el$44.style.setProperty("background-color", getStore.itemProperties.color) + _$effect(_$p => + (_$p = getStore.itemProperties.color) != null + ? _el$44.style.setProperty("background-color", _$p) : _el$44.style.removeProperty("background-color") ); return _el$44; @@ -406,4 +406,13 @@ const template38 = (() => { return _el$54; })(); const template39 = _tmpl$19(); +const template40 = (() => { + var _el$56 = _tmpl$4(); + _$effect(_$p => + (_$p = a()) != null + ? _el$56.style.setProperty("color", _$p) + : _el$56.style.removeProperty("color") + ); + return _el$56; +})(); _$delegateEvents(["click", "input"]); diff --git a/packages/babel-plugin-jsx-dom-expressions/test/__dom_hydratable_fixtures__/attributeExpressions/code.js b/packages/babel-plugin-jsx-dom-expressions/test/__dom_hydratable_fixtures__/attributeExpressions/code.js index fe3f1f41..daf044fa 100644 --- a/packages/babel-plugin-jsx-dom-expressions/test/__dom_hydratable_fixtures__/attributeExpressions/code.js +++ b/packages/babel-plugin-jsx-dom-expressions/test/__dom_hydratable_fixtures__/attributeExpressions/code.js @@ -201,3 +201,5 @@ const template37 =
const template38 =
const template39 = + +const template40 =
diff --git a/packages/babel-plugin-jsx-dom-expressions/test/__dom_hydratable_fixtures__/attributeExpressions/output.js b/packages/babel-plugin-jsx-dom-expressions/test/__dom_hydratable_fixtures__/attributeExpressions/output.js index b9f9c614..be36b0cb 100644 --- a/packages/babel-plugin-jsx-dom-expressions/test/__dom_hydratable_fixtures__/attributeExpressions/output.js +++ b/packages/babel-plugin-jsx-dom-expressions/test/__dom_hydratable_fixtures__/attributeExpressions/output.js @@ -358,9 +358,9 @@ const template29 = (() => { const template30 = _$getNextElement(_tmpl$17); const template31 = (() => { var _el$48 = _$getNextElement(_tmpl$4); - _$effect(() => - getStore.itemProperties.color != null - ? _el$48.style.setProperty("background-color", getStore.itemProperties.color) + _$effect(_$p => + (_$p = getStore.itemProperties.color) != null + ? _el$48.style.setProperty("background-color", _$p) : _el$48.style.removeProperty("background-color") ); return _el$48; @@ -425,4 +425,13 @@ const template38 = (() => { return _el$58; })(); const template39 = _$getNextElement(_tmpl$19); +const template40 = (() => { + var _el$60 = _$getNextElement(_tmpl$4); + _$effect(_$p => + (_$p = a()) != null + ? _el$60.style.setProperty("color", _$p) + : _el$60.style.removeProperty("color") + ); + return _el$60; +})(); _$delegateEvents(["click", "input"]); diff --git a/packages/babel-plugin-jsx-dom-expressions/test/__dynamic_fixtures__/attributeExpressions/code.js b/packages/babel-plugin-jsx-dom-expressions/test/__dynamic_fixtures__/attributeExpressions/code.js index e2ef800f..9f60af89 100644 --- a/packages/babel-plugin-jsx-dom-expressions/test/__dynamic_fixtures__/attributeExpressions/code.js +++ b/packages/babel-plugin-jsx-dom-expressions/test/__dynamic_fixtures__/attributeExpressions/code.js @@ -76,3 +76,5 @@ const template18 =
const template19 =
const template20 =
+ +const template21 =
diff --git a/packages/babel-plugin-jsx-dom-expressions/test/__dynamic_fixtures__/attributeExpressions/output.js b/packages/babel-plugin-jsx-dom-expressions/test/__dynamic_fixtures__/attributeExpressions/output.js index 07baa758..fefad2a6 100644 --- a/packages/babel-plugin-jsx-dom-expressions/test/__dynamic_fixtures__/attributeExpressions/output.js +++ b/packages/babel-plugin-jsx-dom-expressions/test/__dynamic_fixtures__/attributeExpressions/output.js @@ -211,3 +211,12 @@ const template20 = (() => { typeof _ref$7 === "function" && _$use(_ref$7, _el$26); return _el$26; })(); +const template21 = (() => { + var _el$27 = _tmpl$3(); + _$effect(_$p => + (_$p = a()) != null + ? _el$27.style.setProperty("color", _$p) + : _el$27.style.removeProperty("color") + ); + return _el$27; +})(); diff --git a/packages/babel-plugin-jsx-dom-expressions/test/__ssr_fixtures__/attributeExpressions/code.js b/packages/babel-plugin-jsx-dom-expressions/test/__ssr_fixtures__/attributeExpressions/code.js index fe3f1f41..daf044fa 100644 --- a/packages/babel-plugin-jsx-dom-expressions/test/__ssr_fixtures__/attributeExpressions/code.js +++ b/packages/babel-plugin-jsx-dom-expressions/test/__ssr_fixtures__/attributeExpressions/code.js @@ -201,3 +201,5 @@ const template37 =
const template38 =
const template39 = + +const template40 =
diff --git a/packages/babel-plugin-jsx-dom-expressions/test/__ssr_fixtures__/attributeExpressions/output.js b/packages/babel-plugin-jsx-dom-expressions/test/__ssr_fixtures__/attributeExpressions/output.js index e258a4bb..47529443 100644 --- a/packages/babel-plugin-jsx-dom-expressions/test/__ssr_fixtures__/attributeExpressions/output.js +++ b/packages/babel-plugin-jsx-dom-expressions/test/__ssr_fixtures__/attributeExpressions/output.js @@ -223,3 +223,4 @@ const template36 = _$ssr(_tmpl$8); const template37 = _$ssr(_tmpl$8); const template38 = _$ssr(_tmpl$8); const template39 = _$ssr(_tmpl$21); +const template40 = _$ssr(_tmpl$15, "color:" + _$escape(a(), true)); diff --git a/packages/babel-plugin-jsx-dom-expressions/test/__ssr_hydratable_fixtures__/attributeExpressions/code.js b/packages/babel-plugin-jsx-dom-expressions/test/__ssr_hydratable_fixtures__/attributeExpressions/code.js index fe3f1f41..daf044fa 100644 --- a/packages/babel-plugin-jsx-dom-expressions/test/__ssr_hydratable_fixtures__/attributeExpressions/code.js +++ b/packages/babel-plugin-jsx-dom-expressions/test/__ssr_hydratable_fixtures__/attributeExpressions/code.js @@ -201,3 +201,5 @@ const template37 =
const template38 =
const template39 = + +const template40 =
diff --git a/packages/babel-plugin-jsx-dom-expressions/test/__ssr_hydratable_fixtures__/attributeExpressions/output.js b/packages/babel-plugin-jsx-dom-expressions/test/__ssr_hydratable_fixtures__/attributeExpressions/output.js index 066eace7..39d01733 100644 --- a/packages/babel-plugin-jsx-dom-expressions/test/__ssr_hydratable_fixtures__/attributeExpressions/output.js +++ b/packages/babel-plugin-jsx-dom-expressions/test/__ssr_hydratable_fixtures__/attributeExpressions/output.js @@ -272,3 +272,4 @@ const template36 = _$ssr(_tmpl$8, _$ssrHydrationKey()); const template37 = _$ssr(_tmpl$8, _$ssrHydrationKey()); const template38 = _$ssr(_tmpl$8, _$ssrHydrationKey()); const template39 = _$ssr(_tmpl$22, _$ssrHydrationKey()); +const template40 = _$ssr(_tmpl$15, _$ssrHydrationKey(), "color:" + _$escape(a(), true));