@nine-lab/nine-mu 0.1.294 β†’ 0.1.296

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nine-lab/nine-mu",
3
- "version": "0.1.294",
3
+ "version": "0.1.296",
4
4
  "description": "AI-Driven Full-Stack Code Fabrication Engine",
5
5
  "type": "module",
6
6
  "main": "./dist/nine-mu.umd.js",
@@ -24,7 +24,7 @@
24
24
  "@nine-lab/nine-ai": "*",
25
25
  "@nine-lab/nine-nomenu": "*",
26
26
  "@nine-lab/nine-util": "^0.9.126",
27
- "@nine-lab/nine-ux": "^0.1.243",
27
+ "@nine-lab/nine-ux": "^0.1.244",
28
28
  "terser": "^5.31.0",
29
29
  "vite": "^6.0.0"
30
30
  },
@@ -19,7 +19,7 @@ export class NineDiffPopup extends HTMLElement {
19
19
  }
20
20
 
21
21
  /**
22
- * πŸ’‘ μŠ€νƒ€μΌ κ°„μ„­ μ—†λŠ” κΉ¨λ—ν•œ 순수 μŠ€μΌ€ν΄λ”© μ„ μ–Έ
22
+ * πŸ’‘ μŠ€νƒ€μΌ κ°„μ„­ μ—†λŠ” 순수 λ‹€μ΄μ–Όλ‘œκ·Έ 껍데기 λ Œλ”λ§
23
23
  */
24
24
  #renderScaffolding() {
25
25
  const customImport = this.getAttribute("css-path") ? `@import "${this.getAttribute("css-path")}";` : "";
@@ -54,13 +54,13 @@ export class NineDiffPopup extends HTMLElement {
54
54
  }
55
55
 
56
56
  /**
57
- * πŸ’‘ [μ™„λ²½ μΊ‘μŠν™” 데이터 ν”Όλ”©]
57
+ * πŸ’‘ [μ›ν”„λ ˆμž„ ν†΅μ§œ 일괄 동적 λΉŒλ“œ μ—”μ§„]
58
58
  */
59
59
  async data(fileList) {
60
60
  if (!Array.isArray(fileList) || fileList.length === 0) return this;
61
61
  this.#fileList = fileList;
62
62
 
63
- // 1. 🧼 이전 μ„Έμ…˜μ˜ 동적 λ²„νŠΌκ³Ό 컨텐츠듀을 μ™„μ „νžˆ μ΄ˆκΈ°ν™”(Clean)
63
+ // 1. 🧼 이전 μ‹€ν–‰ μ„Έμ…˜ 흔적 κΉ¨λ—ν•˜κ²Œ 포맷
64
64
  if (this.#tabContainer && typeof this.#tabContainer.clearTabs === 'function') {
65
65
  this.#tabContainer.clearTabs();
66
66
  }
@@ -73,39 +73,50 @@ export class NineDiffPopup extends HTMLElement {
73
73
  return 'javascript';
74
74
  };
75
75
 
76
- // 2. ⚑ λ°±μ—”λ“œ λͺ…μ„Έ 개수만큼 μˆœμˆ˜ν•˜κ²Œ 고유 κ΄€μ œνƒ‘ API만 트리거
76
+ // 2. ⚑ [핡심 ꡐ정]: appendChild둜 ν•˜λ‚˜μ”© λ°€μ–΄λ„£μ§€ μ•Šκ³ , ν†΅μ§œ λ§ˆν¬μ—… λ¬Έμžμ—΄λ‘œ μ‘°λ¦½ν•©λ‹ˆλ‹€.
77
+ let totalTabHtml = "";
78
+
77
79
  fileList.forEach((file) => {
78
80
  const { layer, full_path } = file;
79
81
  const fileName = full_path.split('/').pop() || "Unknown";
80
82
  const captionName = `${layer.toUpperCase()} (${fileName})`;
81
83
 
82
- // λ‚ κ²ƒμ˜ 에디터 λ§ˆν¬μ—… λ¬Έμžμ—΄ νŒ¨ν‚€μ§•
83
- const targetHtmlContent = `<nine-diff class="${layer}"></nine-diff>`;
84
-
85
- // πŸ’‘ 핡심: μ •μ„λŒ€λ‘œ NineTab λ‚΄λΆ€ μ‹€μ‹œκ°„ 쑰립 기동 μ§€μ‹œ
86
- if (this.#tabContainer && typeof this.#tabContainer.addTabPage === 'function') {
87
- this.#tabContainer.addTabPage(captionName, targetHtmlContent);
88
- }
84
+ totalTabHtml += `
85
+ <nine-tab-page caption="${captionName}">
86
+ <nine-diff class="${layer}"></nine-diff>
87
+ </nine-tab-page>
88
+ `;
89
89
  });
90
90
 
91
- // 3. ⏰ 데이터 μ£Όμž… μ—°μ‚° μ‹€ν–‰
92
- // μš”μ†Œλ₯Ό μ„€λ„μš° λ”μ˜ κ°€μ‹œ λ Œλ” νŠΈλ¦¬μ— 직접 κ½‚μ•˜κΈ° λ•Œλ¬Έμ— κΈ΄ μ§€μ—° μ‹œκ°„μ΄ μ „ν˜€ ν•„μš” μ—†μŠ΅λ‹ˆλ‹€.
93
- setTimeout(() => {
94
- fileList.forEach((file) => {
95
- const { layer, full_path, asis_source, source } = file;
96
- const diff = this.#tabContainer.shadowRoot.querySelector(`nine-diff.${layer}`);
91
+ // 3. πŸš€ 단 ν•œ 번의 μ—°μ‚°μœΌλ‘œ Light DOM νŠΈλ¦¬μ— μ™„μ „ μŠ› μ£Όμž…!
92
+ this.#tabContainer.innerHTML = totalTabHtml;
93
+
94
+ // 4. βš™οΈ μ£Όμž…μ΄ λλ‚¬μœΌλ―€λ‘œ nine-tab의 μ˜€λ¦¬μ§€λ„ 기동 μ΄ˆκΈ°ν™” 둜직(#init)을 κ°•μ œλ‘œ λ‹€μ‹œ κΉ¨μ›λ‹ˆλ‹€.
95
+ if (this.#tabContainer && typeof this.#tabContainer.connectedCallback === 'function') {
96
+ this.#tabContainer.connectedCallback();
97
+ }
98
+
99
+ // 5. ⏰ λΈŒλΌμš°μ €κ°€ 일괄 μƒμ„±λœ ν•˜μœ„ μ—λ””ν„°λ“€μ˜ ꡬ쑰 해석을 μ™„λ²½νžˆ 마칠 수 μžˆλ„λ‘ 더블 ν”„λ ˆμž„ λ§ˆμ§„ μŠ€μΌ€μ€„λ§
100
+ requestAnimationFrame(() => {
101
+ requestAnimationFrame(() => {
102
+ fileList.forEach((file) => {
103
+ const { layer, full_path, asis_source, source } = file;
97
104
 
98
- if (diff && typeof diff.initialize === 'function') {
99
- const lang = detectLanguage(full_path);
100
- diff.initialize(asis_source || "", source || "", lang);
105
+ // 이제 정상적인 ν†΅λ‘œ(nine-tab의 shadowRoot λ‚΄λΆ€)둜 μ•ˆμ „ν•˜κ²Œ 이사 κ°„ 에디터 νƒ€κ²ŸνŒ… 좔적
106
+ const diff = this.#tabContainer.shadowRoot.querySelector(`nine-diff.${layer}`);
107
+
108
+ if (diff && typeof diff.initialize === 'function') {
109
+ const lang = detectLanguage(full_path);
110
+ diff.initialize(asis_source || "", source || "", lang);
111
+ }
112
+ });
113
+
114
+ // μ†ŒμŠ€ 바인딩이 μ™„λ²½νžˆ λλ‚œ μ΅œμ’… μ‹œμ μ— 포컀싱 앑츄에이터 가동 (첫 번째 동적 νƒ­ 클릭 κ°•μ œ 트리거)
115
+ if (this.#tabContainer && typeof this.#tabContainer.initialize === 'function') {
116
+ this.#tabContainer.initialize();
101
117
  }
102
118
  });
103
-
104
- // 4. λͺ¨λ“  μ†ŒμŠ€ 동기화 μ™„λ£Œ ν›„ μ˜€λ¦¬μ§€λ„ 포컀싱 앑츄에이터 트리거 (첫 번째 ν™œμ„± νƒ­ μ—΄κΈ°)
105
- if (this.#tabContainer && typeof this.#tabContainer.initialize === 'function') {
106
- this.#tabContainer.initialize();
107
- }
108
- }, 50);
119
+ });
109
120
 
110
121
  return this;
111
122
  }