itmar-block-packages 3.1.0 → 3.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -17,6 +17,13 @@ TypeScript で利用する場合、以下のバージョン以上を推奨しま
17
17
  typescript: ^5.0.0 以上
18
18
 
19
19
  ## 更新履歴
20
+
21
+ = 3.1.2 =
22
+ styleComponentApplyでstyle要素が重複して登録されるのを避けるようにした。
23
+
24
+ = 3.1.1 =
25
+ ログ表示の微修正
26
+
20
27
  = 3.1.0 =
21
28
  useStyleIframeとstyleComponentApplyを新設
22
29
 
@@ -4,6 +4,8 @@ var jsxRuntime = require('react/jsx-runtime');
4
4
  var styledComponents = require('styled-components');
5
5
  var server = require('react-dom/server');
6
6
 
7
+ // 注入済みのクラス名を記憶する(関数の外で定義することで、呼び出し間で共有される)
8
+ const injectedClasses = new Set();
7
9
  const styleComponentApply = (StyleComp, blockSelector) => {
8
10
  const blocks = document.querySelectorAll(blockSelector);
9
11
  blocks.forEach((el) => {
@@ -20,15 +22,22 @@ const styleComponentApply = (StyleComp, blockSelector) => {
20
22
  const classMatch = html.match(/class="([^"]+)"/);
21
23
  const className = classMatch ? classMatch[1] : "";
22
24
  // ----------------------------------
23
- // 1. スタイルタグを <head> または要素の直前に注入
24
- const styleContainer = document.createElement("div");
25
- styleContainer.innerHTML = styleTags;
26
- console.log(styleTags);
27
- document.head.appendChild(styleContainer.firstChild);
28
- // 2. クラス名を適用する対象を探す
29
- // save.tsx で <div className="itmar-wrap"> のように目印をつけておくと確実です
30
- const target = el.querySelector(".itmar-wrap") || el;
31
25
  if (className) {
26
+ // 3. 【重要】このクラス名がまだ注入されていなければ実行
27
+ if (!injectedClasses.has(className)) {
28
+ // 1. スタイルタグを <head> または要素の直前に注入
29
+ const styleContainer = document.createElement("div");
30
+ styleContainer.innerHTML = styleTags;
31
+ const styleElement = styleContainer.firstChild;
32
+ if (styleElement instanceof Node) {
33
+ document.head.appendChild(styleElement);
34
+ // 注入済みとして記録
35
+ injectedClasses.add(className);
36
+ }
37
+ }
38
+ // 2. クラス名を適用する対象を探す
39
+ // save.tsx で <div className="itmar-wrap"> のように目印をつけておくと確実です
40
+ const target = el.querySelector(".itmar-wrap") || el;
32
41
  target.classList.add(...className.split(" "));
33
42
  }
34
43
  }
@@ -1 +1 @@
1
- {"version":3,"file":"styleComponentApply.js","sources":["../../src/styleComponentApply.tsx"],"sourcesContent":[null],"names":["ServerStyleSheet","renderToString","_jsx"],"mappings":";;;;;;MAGa,mBAAmB,GAAG,CACjC,SAA6E,EAC7E,aAAqB,KACnB;IACF,MAAM,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CAAC,aAAa,CAAC;AACvD,IAAA,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;QACpB,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,iBAAiB,CAAC;AACnD,QAAA,IAAI,CAAC,QAAQ;YAAE;AAEf,QAAA,IAAI;YACF,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAM;;AAG5C,YAAA,MAAM,KAAK,GAAG,IAAIA,iCAAgB,EAAE;AACpC,YAAA,MAAM,IAAI,GAAGC,qBAAc,CACzB,KAAK,CAAC,aAAa,CAACC,cAAA,CAAC,SAAS,IAAC,UAAU,EAAE,UAAU,EAAA,CAAI,CAAC,CAC3D;AACD,YAAA,MAAM,SAAS,GAAG,KAAK,CAAC,YAAY,EAAE;;YAGtC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC;AAChD,YAAA,MAAM,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE;;;YAIjD,MAAM,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACpD,YAAA,cAAc,CAAC,SAAS,GAAG,SAAS;AACpC,YAAA,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;YACtB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,UAAW,CAAC;;;YAIrD,MAAM,MAAM,GAAG,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,EAAE;YACpD,IAAI,SAAS,EAAE;AACb,gBAAA,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC/C;QACF;QAAE,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,CAAC,CAAC;QAC7C;AACF,IAAA,CAAC,CAAC;AACJ;;;;"}
1
+ {"version":3,"file":"styleComponentApply.js","sources":["../../src/styleComponentApply.tsx"],"sourcesContent":[null],"names":["ServerStyleSheet","renderToString","_jsx"],"mappings":";;;;;;AAGA;AACA,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU;MAE5B,mBAAmB,GAAG,CACjC,SAA6E,EAC7E,aAAqB,KACnB;IACF,MAAM,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CAAC,aAAa,CAAC;AACvD,IAAA,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;QACpB,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,iBAAiB,CAAC;AACnD,QAAA,IAAI,CAAC,QAAQ;YAAE;AAEf,QAAA,IAAI;YACF,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAM;;AAG5C,YAAA,MAAM,KAAK,GAAG,IAAIA,iCAAgB,EAAE;AACpC,YAAA,MAAM,IAAI,GAAGC,qBAAc,CACzB,KAAK,CAAC,aAAa,CAACC,cAAA,CAAC,SAAS,IAAC,UAAU,EAAE,UAAU,EAAA,CAAI,CAAC,CAC3D;AACD,YAAA,MAAM,SAAS,GAAG,KAAK,CAAC,YAAY,EAAE;;YAGtC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC;AAChD,YAAA,MAAM,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE;;YAEjD,IAAI,SAAS,EAAE;;gBAEb,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;;oBAEnC,MAAM,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACpD,oBAAA,cAAc,CAAC,SAAS,GAAG,SAAS;AAEpC,oBAAA,MAAM,YAAY,GAAG,cAAc,CAAC,UAAU;AAC9C,oBAAA,IAAI,YAAY,YAAY,IAAI,EAAE;AAChC,wBAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC;;AAEvC,wBAAA,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC;oBAChC;gBACF;;;gBAIA,MAAM,MAAM,GAAG,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,EAAE;AACpD,gBAAA,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC/C;QACF;QAAE,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,CAAC,CAAC;QAC7C;AACF,IAAA,CAAC,CAAC;AACJ;;;;"}
@@ -2,6 +2,8 @@ import { jsx } from 'react/jsx-runtime';
2
2
  import { ServerStyleSheet } from 'styled-components';
3
3
  import { renderToString } from 'react-dom/server';
4
4
 
5
+ // 注入済みのクラス名を記憶する(関数の外で定義することで、呼び出し間で共有される)
6
+ const injectedClasses = new Set();
5
7
  const styleComponentApply = (StyleComp, blockSelector) => {
6
8
  const blocks = document.querySelectorAll(blockSelector);
7
9
  blocks.forEach((el) => {
@@ -18,15 +20,22 @@ const styleComponentApply = (StyleComp, blockSelector) => {
18
20
  const classMatch = html.match(/class="([^"]+)"/);
19
21
  const className = classMatch ? classMatch[1] : "";
20
22
  // ----------------------------------
21
- // 1. スタイルタグを <head> または要素の直前に注入
22
- const styleContainer = document.createElement("div");
23
- styleContainer.innerHTML = styleTags;
24
- console.log(styleTags);
25
- document.head.appendChild(styleContainer.firstChild);
26
- // 2. クラス名を適用する対象を探す
27
- // save.tsx で <div className="itmar-wrap"> のように目印をつけておくと確実です
28
- const target = el.querySelector(".itmar-wrap") || el;
29
23
  if (className) {
24
+ // 3. 【重要】このクラス名がまだ注入されていなければ実行
25
+ if (!injectedClasses.has(className)) {
26
+ // 1. スタイルタグを <head> または要素の直前に注入
27
+ const styleContainer = document.createElement("div");
28
+ styleContainer.innerHTML = styleTags;
29
+ const styleElement = styleContainer.firstChild;
30
+ if (styleElement instanceof Node) {
31
+ document.head.appendChild(styleElement);
32
+ // 注入済みとして記録
33
+ injectedClasses.add(className);
34
+ }
35
+ }
36
+ // 2. クラス名を適用する対象を探す
37
+ // save.tsx で <div className="itmar-wrap"> のように目印をつけておくと確実です
38
+ const target = el.querySelector(".itmar-wrap") || el;
30
39
  target.classList.add(...className.split(" "));
31
40
  }
32
41
  }
@@ -1 +1 @@
1
- {"version":3,"file":"styleComponentApply.js","sources":["../../src/styleComponentApply.tsx"],"sourcesContent":[null],"names":["_jsx"],"mappings":";;;;MAGa,mBAAmB,GAAG,CACjC,SAA6E,EAC7E,aAAqB,KACnB;IACF,MAAM,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CAAC,aAAa,CAAC;AACvD,IAAA,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;QACpB,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,iBAAiB,CAAC;AACnD,QAAA,IAAI,CAAC,QAAQ;YAAE;AAEf,QAAA,IAAI;YACF,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAM;;AAG5C,YAAA,MAAM,KAAK,GAAG,IAAI,gBAAgB,EAAE;AACpC,YAAA,MAAM,IAAI,GAAG,cAAc,CACzB,KAAK,CAAC,aAAa,CAACA,GAAA,CAAC,SAAS,IAAC,UAAU,EAAE,UAAU,EAAA,CAAI,CAAC,CAC3D;AACD,YAAA,MAAM,SAAS,GAAG,KAAK,CAAC,YAAY,EAAE;;YAGtC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC;AAChD,YAAA,MAAM,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE;;;YAIjD,MAAM,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACpD,YAAA,cAAc,CAAC,SAAS,GAAG,SAAS;AACpC,YAAA,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;YACtB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,UAAW,CAAC;;;YAIrD,MAAM,MAAM,GAAG,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,EAAE;YACpD,IAAI,SAAS,EAAE;AACb,gBAAA,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC/C;QACF;QAAE,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,CAAC,CAAC;QAC7C;AACF,IAAA,CAAC,CAAC;AACJ;;;;"}
1
+ {"version":3,"file":"styleComponentApply.js","sources":["../../src/styleComponentApply.tsx"],"sourcesContent":[null],"names":["_jsx"],"mappings":";;;;AAGA;AACA,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU;MAE5B,mBAAmB,GAAG,CACjC,SAA6E,EAC7E,aAAqB,KACnB;IACF,MAAM,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CAAC,aAAa,CAAC;AACvD,IAAA,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;QACpB,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,iBAAiB,CAAC;AACnD,QAAA,IAAI,CAAC,QAAQ;YAAE;AAEf,QAAA,IAAI;YACF,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAM;;AAG5C,YAAA,MAAM,KAAK,GAAG,IAAI,gBAAgB,EAAE;AACpC,YAAA,MAAM,IAAI,GAAG,cAAc,CACzB,KAAK,CAAC,aAAa,CAACA,GAAA,CAAC,SAAS,IAAC,UAAU,EAAE,UAAU,EAAA,CAAI,CAAC,CAC3D;AACD,YAAA,MAAM,SAAS,GAAG,KAAK,CAAC,YAAY,EAAE;;YAGtC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC;AAChD,YAAA,MAAM,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE;;YAEjD,IAAI,SAAS,EAAE;;gBAEb,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;;oBAEnC,MAAM,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACpD,oBAAA,cAAc,CAAC,SAAS,GAAG,SAAS;AAEpC,oBAAA,MAAM,YAAY,GAAG,cAAc,CAAC,UAAU;AAC9C,oBAAA,IAAI,YAAY,YAAY,IAAI,EAAE;AAChC,wBAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC;;AAEvC,wBAAA,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC;oBAChC;gBACF;;;gBAIA,MAAM,MAAM,GAAG,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,EAAE;AACpD,gBAAA,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC/C;QACF;QAAE,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,CAAC,CAAC;QAC7C;AACF,IAAA,CAAC,CAAC;AACJ;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "itmar-block-packages",
3
- "version": "3.1.0",
3
+ "version": "3.1.2",
4
4
  "description": "Common React components for WordPress custom blocks, now fully TypeScript-ready.",
5
5
  "main": "build/cjs/index.js",
6
6
  "module": "build/esm/index.js",