ide-assi 0.45.0 → 0.47.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -193387,6 +193387,15 @@ class IdeAi
193387
193387
  })
193388
193388
  });
193389
193389
 
193390
+ await fetch(`/api/source/generateJsFile`, {
193391
+ method: "POST",
193392
+ headers: { "Content-Type": "application/json" },
193393
+ body: JSON.stringify({
193394
+ fileNm: res.js + "x",
193395
+ contents: source.js,
193396
+ })
193397
+ });
193398
+
193390
193399
  return await response4.json();
193391
193400
  }
193392
193401
 
@@ -193396,6 +193405,7 @@ class IdeAi
193396
193405
 
193397
193406
  class IdeAssi extends HTMLElement
193398
193407
  {
193408
+ settings;
193399
193409
  #ai;
193400
193410
  #ing = false;
193401
193411
 
@@ -193417,6 +193427,8 @@ class IdeAssi extends HTMLElement
193417
193427
  </style>
193418
193428
 
193419
193429
  <div class="wrapper">
193430
+ <ide-assi-settings></ide-assi-settings>
193431
+
193420
193432
  <div class="container">
193421
193433
  <div class="head">
193422
193434
  <div class="logo"></div>
@@ -193444,13 +193456,14 @@ class IdeAssi extends HTMLElement
193444
193456
 
193445
193457
 
193446
193458
  #init = (info) => {
193447
-
193459
+ this.settings = this.shadowRoot.querySelector("nx-ai-settings");
193460
+
193448
193461
  this.shadowRoot.querySelector("textarea").addEventListener("keydown", this.#keydownHandler);
193449
193462
 
193450
193463
  this.shadowRoot.querySelector(".expand-icon").addEventListener("click", this.#toggleCollapseHandler);
193451
193464
  this.shadowRoot.querySelector(".collapse-icon").addEventListener("click", this.#toggleCollapseHandler);
193452
193465
 
193453
- //this.shadowRoot.querySelectorAll(".menu-icon").forEach(el => el.addEventListener("click", this.#menuClickHandler));
193466
+ this.shadowRoot.querySelectorAll(".menu-icon").forEach(el => el.addEventListener("click", this.#menuClickHandler));
193454
193467
  };
193455
193468
 
193456
193469
 
@@ -193544,6 +193557,19 @@ export default Home;
193544
193557
  #toggleCollapseHandler = () => {
193545
193558
  this.classList.toggle("collapse");
193546
193559
  };
193560
+
193561
+ #menuClickHandler = (e) => {
193562
+
193563
+ // 모든 `.menu-icon`에서 `active` 클래스 제거
193564
+ this.shadowRoot.querySelectorAll(".menu-icon").forEach(el => el.classList.remove("active"));
193565
+
193566
+ // 클릭한 `.menu-icon`에 `active` 클래스 추가
193567
+ const clickedIcon = e.target.closest(".menu-icon");
193568
+ if (clickedIcon) clickedIcon.classList.add("active");
193569
+
193570
+ // `.menu-setting`이 클릭되었는지 확인 후 `nx-ai-settings` 토글
193571
+ this.settings.classList.toggle("expand", !!e.target.closest(".menu-setting"));
193572
+ };
193547
193573
  }
193548
193574
 
193549
193575
  customElements.define("ide-assi", IdeAssi);
@@ -193383,6 +193383,15 @@ class IdeAi
193383
193383
  })
193384
193384
  });
193385
193385
 
193386
+ await fetch(`/api/source/generateJsFile`, {
193387
+ method: "POST",
193388
+ headers: { "Content-Type": "application/json" },
193389
+ body: JSON.stringify({
193390
+ fileNm: res.js + "x",
193391
+ contents: source.js,
193392
+ })
193393
+ });
193394
+
193386
193395
  return await response4.json();
193387
193396
  }
193388
193397
 
@@ -193392,6 +193401,7 @@ class IdeAi
193392
193401
 
193393
193402
  class IdeAssi extends HTMLElement
193394
193403
  {
193404
+ settings;
193395
193405
  #ai;
193396
193406
  #ing = false;
193397
193407
 
@@ -193413,6 +193423,8 @@ class IdeAssi extends HTMLElement
193413
193423
  </style>
193414
193424
 
193415
193425
  <div class="wrapper">
193426
+ <ide-assi-settings></ide-assi-settings>
193427
+
193416
193428
  <div class="container">
193417
193429
  <div class="head">
193418
193430
  <div class="logo"></div>
@@ -193440,13 +193452,14 @@ class IdeAssi extends HTMLElement
193440
193452
 
193441
193453
 
193442
193454
  #init = (info) => {
193443
-
193455
+ this.settings = this.shadowRoot.querySelector("nx-ai-settings");
193456
+
193444
193457
  this.shadowRoot.querySelector("textarea").addEventListener("keydown", this.#keydownHandler);
193445
193458
 
193446
193459
  this.shadowRoot.querySelector(".expand-icon").addEventListener("click", this.#toggleCollapseHandler);
193447
193460
  this.shadowRoot.querySelector(".collapse-icon").addEventListener("click", this.#toggleCollapseHandler);
193448
193461
 
193449
- //this.shadowRoot.querySelectorAll(".menu-icon").forEach(el => el.addEventListener("click", this.#menuClickHandler));
193462
+ this.shadowRoot.querySelectorAll(".menu-icon").forEach(el => el.addEventListener("click", this.#menuClickHandler));
193450
193463
  };
193451
193464
 
193452
193465
 
@@ -193540,6 +193553,19 @@ export default Home;
193540
193553
  #toggleCollapseHandler = () => {
193541
193554
  this.classList.toggle("collapse");
193542
193555
  };
193556
+
193557
+ #menuClickHandler = (e) => {
193558
+
193559
+ // 모든 `.menu-icon`에서 `active` 클래스 제거
193560
+ this.shadowRoot.querySelectorAll(".menu-icon").forEach(el => el.classList.remove("active"));
193561
+
193562
+ // 클릭한 `.menu-icon`에 `active` 클래스 추가
193563
+ const clickedIcon = e.target.closest(".menu-icon");
193564
+ if (clickedIcon) clickedIcon.classList.add("active");
193565
+
193566
+ // `.menu-setting`이 클릭되었는지 확인 후 `nx-ai-settings` 토글
193567
+ this.settings.classList.toggle("expand", !!e.target.closest(".menu-setting"));
193568
+ };
193543
193569
  }
193544
193570
 
193545
193571
  customElements.define("ide-assi", IdeAssi);
@@ -130,6 +130,15 @@ export class IdeAi
130
130
  })
131
131
  });
132
132
 
133
+ const response6 = await fetch(`/api/source/generateJsFile`, {
134
+ method: "POST",
135
+ headers: { "Content-Type": "application/json" },
136
+ body: JSON.stringify({
137
+ fileNm: res.js + "x",
138
+ contents: source.js,
139
+ })
140
+ });
141
+
133
142
  return await response4.json();
134
143
  }
135
144
 
@@ -3,6 +3,7 @@ import { IdeAi } from "./ideAi.js";
3
3
 
4
4
  export class IdeAssi extends HTMLElement
5
5
  {
6
+ settings;
6
7
  #ai;
7
8
  #ing = false;
8
9
 
@@ -24,6 +25,8 @@ export class IdeAssi extends HTMLElement
24
25
  </style>
25
26
 
26
27
  <div class="wrapper">
28
+ <ide-assi-settings></ide-assi-settings>
29
+
27
30
  <div class="container">
28
31
  <div class="head">
29
32
  <div class="logo"></div>
@@ -51,13 +54,14 @@ export class IdeAssi extends HTMLElement
51
54
 
52
55
 
53
56
  #init = (info) => {
54
-
57
+ this.settings = this.shadowRoot.querySelector("nx-ai-settings");
58
+
55
59
  this.shadowRoot.querySelector("textarea").addEventListener("keydown", this.#keydownHandler);
56
60
 
57
61
  this.shadowRoot.querySelector(".expand-icon").addEventListener("click", this.#toggleCollapseHandler);
58
62
  this.shadowRoot.querySelector(".collapse-icon").addEventListener("click", this.#toggleCollapseHandler);
59
63
 
60
- //this.shadowRoot.querySelectorAll(".menu-icon").forEach(el => el.addEventListener("click", this.#menuClickHandler));
64
+ this.shadowRoot.querySelectorAll(".menu-icon").forEach(el => el.addEventListener("click", this.#menuClickHandler));
61
65
  };
62
66
 
63
67
 
@@ -151,6 +155,19 @@ export default Home;
151
155
  #toggleCollapseHandler = () => {
152
156
  this.classList.toggle("collapse");
153
157
  };
158
+
159
+ #menuClickHandler = (e) => {
160
+
161
+ // 모든 `.menu-icon`에서 `active` 클래스 제거
162
+ this.shadowRoot.querySelectorAll(".menu-icon").forEach(el => el.classList.remove("active"));
163
+
164
+ // 클릭한 `.menu-icon`에 `active` 클래스 추가
165
+ const clickedIcon = e.target.closest(".menu-icon");
166
+ if (clickedIcon) clickedIcon.classList.add("active");
167
+
168
+ // `.menu-setting`이 클릭되었는지 확인 후 `nx-ai-settings` 토글
169
+ this.settings.classList.toggle("expand", !!e.target.closest(".menu-setting"));
170
+ };
154
171
  }
155
172
 
156
173
  customElements.define("ide-assi", IdeAssi);
@@ -0,0 +1,147 @@
1
+ import ninegrid from "ninegrid2";
2
+
3
+ class ideAssiSettings extends HTMLElement
4
+ {
5
+ constructor() {
6
+ console.log("construct");
7
+
8
+ super();
9
+ this.attachShadow({ mode: 'open' });
10
+ }
11
+
12
+ get geminiApiKey() { return this.shadowRoot.querySelector("#geminiApiKey").value; };
13
+ set geminiApiKey(v) { this.shadowRoot.querySelector("#geminiApiKey").value = v; };
14
+
15
+ get openaiApiKey() { return this.shadowRoot.querySelector("#openaiApiKey").value };
16
+ set openaiApiKey(v) { this.shadowRoot.querySelector("#openaiApiKey").value = v; };
17
+
18
+ get ollamaUrl() { return this.shadowRoot.querySelector("#ollamaUrl").value; };
19
+ set ollamaUrl(v) { this.shadowRoot.querySelector("#ollamaUrl").value = v; };
20
+
21
+ get qdrantUrl() { return this.shadowRoot.querySelector("#qdrantUrl").value; };
22
+ set qdrantUrl(v) { this.shadowRoot.querySelector("#qdrantUrl").value = v; };
23
+
24
+ get server() {
25
+ return this.shadowRoot.querySelector('input[name="server"]:checked')?.value;
26
+ };
27
+ set server(v) {
28
+ const elem = this.shadowRoot.querySelector(`input[name="server"][value="${v}"]`);
29
+ if (elem) elem.checked = true;
30
+
31
+ this.shadowRoot.querySelectorAll('input[name="server"]').forEach(el => {
32
+ el.dispatchEvent(new Event("change"));
33
+ });
34
+ };
35
+
36
+ get model() {
37
+ return this.shadowRoot.querySelector(`#${this.server}Model`)?.value;
38
+ };
39
+ set model(v) {
40
+ const elem = this.shadowRoot.querySelector(`#${this.server}Model`);
41
+ if (elem) {
42
+ elem.value = v;
43
+ elem.dispatchEvent(new Event("change"));
44
+ }
45
+
46
+ /**
47
+ this.dispatchEvent(new CustomEvent("setting-change", {
48
+ detail: { server: this.server, model: this.model }
49
+ })); */
50
+ };
51
+
52
+ connectedCallback() {
53
+
54
+ this.shadowRoot.innerHTML = `
55
+ <style>
56
+ @import "https://cdn.jsdelivr.net/npm/ninegrid@${ninegrid.version}/dist/css/ai.css";
57
+ ${ninegrid.getCustomPath(this,"ai.css")}
58
+ </style>
59
+
60
+ <div class="line subject">
61
+ <label for="server">Server:</label>
62
+ </div>
63
+ <div class="line contents">
64
+ <label><input name="server" type="radio" value="gemini" checked>Gemini</label>
65
+ <label><input name="server" type="radio" value="openai">Open AI</label>
66
+ <label><input name="server" type="radio" value="ollama">Ollama</label>
67
+ </div>
68
+ <div class="line gemini-bak" style="display:none;">
69
+ <label>API Key: <input id="geminiApiKey" value=""/></label>
70
+ </div>
71
+ <div class="line openai-bak" style="display:none;">
72
+ <label>API Key: <input id="openaiApiKey" value=""/></label>
73
+ </div>
74
+ <div class="line subject ollama">
75
+ <label for="ollamaUrl">Server Url:</label>
76
+ </div>
77
+ <div class="line contents ollama">
78
+ <input type="text" id="ollamaUrl" value="http://localhost:11434"/></label>
79
+ </div>
80
+ <div class="line subject ollama">
81
+ <label for="ollamaModel">Model:</label>
82
+ </div>
83
+ <div class="line contents ollama">
84
+ <select id="ollamaModel">
85
+ <option value="phi4:14b">phi4:14b</option>
86
+ <option value="llama3.1:8b">llama3.1:8b</option>
87
+ <option value="mistral:7b">mistral:7b</option>
88
+ </select>
89
+ </div>
90
+ <div class="line subject gemini">
91
+ <label for="geminiModel">Model:</label>
92
+ </div>
93
+ <div class="line contents gemini">
94
+ <select id="geminiModel">
95
+ <option value="gemini-2.5-flash-preview-04-17">gemini-2.5-flash-preview-04-17</option>
96
+ <option value="gemini-pro">gemini-pro</option>
97
+ </select>
98
+ </div>
99
+ <div class="line subject openai">
100
+ <label for="openaiModel">Model:</label>
101
+ </div>
102
+ <div class="line contents openai">
103
+ <select id="openaiModel">
104
+ <option value="gpt-4">gpt-4</option>
105
+ <option value="gpt-4o">gpt-4o</option>
106
+ <option value="gpt-3.5-turbo">gpt-3.5-turbo</option>
107
+ </select>
108
+ </div>
109
+
110
+ <div class="line subject qdrant">
111
+ <label for="qdrantUrl">Qdrant Url:</label>
112
+ </div>
113
+ <div class="line contents qdrant">
114
+ <input type="text" id="qdrantUrl" value="http://localhost:6333"/>
115
+ </div>
116
+
117
+ <div class="line subject analyze">
118
+ <input id="chkAnalyze" type="checkbox" checked> <input id="txtAnalyze" type="number" value="100"><label>건 미만인 경우 데이타 분석 요청</label>
119
+ </div>
120
+ `;
121
+
122
+ this.#init();
123
+
124
+ setTimeout(() => {
125
+ this.server = "gemini";
126
+ }, 0);
127
+ };
128
+
129
+
130
+
131
+ #init = () => {
132
+
133
+ this.shadowRoot.querySelectorAll('input[name="server"]').forEach((radio) => {
134
+ radio.addEventListener("change", () => {
135
+ const server = this.shadowRoot.querySelector('input[name="server"]:checked').value;
136
+
137
+ ["gemini","openai","ollama"].forEach(v => {
138
+ this.shadowRoot.querySelectorAll('.' + v).forEach((elem) => {
139
+ elem.style.display = (server === v) ? "flex" : "none";
140
+ });
141
+ });
142
+ });
143
+ });
144
+ }
145
+ }
146
+
147
+ customElements.define("ide-assi-settings", ideAssiSettings);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "ide-assi",
3
3
  "type": "module",
4
- "version": "0.45.0",
4
+ "version": "0.47.0",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "exports": {
@@ -130,6 +130,15 @@ export class IdeAi
130
130
  })
131
131
  });
132
132
 
133
+ const response6 = await fetch(`/api/source/generateJsFile`, {
134
+ method: "POST",
135
+ headers: { "Content-Type": "application/json" },
136
+ body: JSON.stringify({
137
+ fileNm: res.js + "x",
138
+ contents: source.js,
139
+ })
140
+ });
141
+
133
142
  return await response4.json();
134
143
  }
135
144
 
@@ -3,6 +3,7 @@ import { IdeAi } from "./ideAi.js";
3
3
 
4
4
  export class IdeAssi extends HTMLElement
5
5
  {
6
+ settings;
6
7
  #ai;
7
8
  #ing = false;
8
9
 
@@ -24,6 +25,8 @@ export class IdeAssi extends HTMLElement
24
25
  </style>
25
26
 
26
27
  <div class="wrapper">
28
+ <ide-assi-settings></ide-assi-settings>
29
+
27
30
  <div class="container">
28
31
  <div class="head">
29
32
  <div class="logo"></div>
@@ -51,13 +54,14 @@ export class IdeAssi extends HTMLElement
51
54
 
52
55
 
53
56
  #init = (info) => {
54
-
57
+ this.settings = this.shadowRoot.querySelector("nx-ai-settings");
58
+
55
59
  this.shadowRoot.querySelector("textarea").addEventListener("keydown", this.#keydownHandler);
56
60
 
57
61
  this.shadowRoot.querySelector(".expand-icon").addEventListener("click", this.#toggleCollapseHandler);
58
62
  this.shadowRoot.querySelector(".collapse-icon").addEventListener("click", this.#toggleCollapseHandler);
59
63
 
60
- //this.shadowRoot.querySelectorAll(".menu-icon").forEach(el => el.addEventListener("click", this.#menuClickHandler));
64
+ this.shadowRoot.querySelectorAll(".menu-icon").forEach(el => el.addEventListener("click", this.#menuClickHandler));
61
65
  };
62
66
 
63
67
 
@@ -151,6 +155,19 @@ export default Home;
151
155
  #toggleCollapseHandler = () => {
152
156
  this.classList.toggle("collapse");
153
157
  };
158
+
159
+ #menuClickHandler = (e) => {
160
+
161
+ // 모든 `.menu-icon`에서 `active` 클래스 제거
162
+ this.shadowRoot.querySelectorAll(".menu-icon").forEach(el => el.classList.remove("active"));
163
+
164
+ // 클릭한 `.menu-icon`에 `active` 클래스 추가
165
+ const clickedIcon = e.target.closest(".menu-icon");
166
+ if (clickedIcon) clickedIcon.classList.add("active");
167
+
168
+ // `.menu-setting`이 클릭되었는지 확인 후 `nx-ai-settings` 토글
169
+ this.settings.classList.toggle("expand", !!e.target.closest(".menu-setting"));
170
+ };
154
171
  }
155
172
 
156
173
  customElements.define("ide-assi", IdeAssi);
@@ -0,0 +1,147 @@
1
+ import ninegrid from "ninegrid2";
2
+
3
+ class ideAssiSettings extends HTMLElement
4
+ {
5
+ constructor() {
6
+ console.log("construct");
7
+
8
+ super();
9
+ this.attachShadow({ mode: 'open' });
10
+ }
11
+
12
+ get geminiApiKey() { return this.shadowRoot.querySelector("#geminiApiKey").value; };
13
+ set geminiApiKey(v) { this.shadowRoot.querySelector("#geminiApiKey").value = v; };
14
+
15
+ get openaiApiKey() { return this.shadowRoot.querySelector("#openaiApiKey").value };
16
+ set openaiApiKey(v) { this.shadowRoot.querySelector("#openaiApiKey").value = v; };
17
+
18
+ get ollamaUrl() { return this.shadowRoot.querySelector("#ollamaUrl").value; };
19
+ set ollamaUrl(v) { this.shadowRoot.querySelector("#ollamaUrl").value = v; };
20
+
21
+ get qdrantUrl() { return this.shadowRoot.querySelector("#qdrantUrl").value; };
22
+ set qdrantUrl(v) { this.shadowRoot.querySelector("#qdrantUrl").value = v; };
23
+
24
+ get server() {
25
+ return this.shadowRoot.querySelector('input[name="server"]:checked')?.value;
26
+ };
27
+ set server(v) {
28
+ const elem = this.shadowRoot.querySelector(`input[name="server"][value="${v}"]`);
29
+ if (elem) elem.checked = true;
30
+
31
+ this.shadowRoot.querySelectorAll('input[name="server"]').forEach(el => {
32
+ el.dispatchEvent(new Event("change"));
33
+ });
34
+ };
35
+
36
+ get model() {
37
+ return this.shadowRoot.querySelector(`#${this.server}Model`)?.value;
38
+ };
39
+ set model(v) {
40
+ const elem = this.shadowRoot.querySelector(`#${this.server}Model`);
41
+ if (elem) {
42
+ elem.value = v;
43
+ elem.dispatchEvent(new Event("change"));
44
+ }
45
+
46
+ /**
47
+ this.dispatchEvent(new CustomEvent("setting-change", {
48
+ detail: { server: this.server, model: this.model }
49
+ })); */
50
+ };
51
+
52
+ connectedCallback() {
53
+
54
+ this.shadowRoot.innerHTML = `
55
+ <style>
56
+ @import "https://cdn.jsdelivr.net/npm/ninegrid@${ninegrid.version}/dist/css/ai.css";
57
+ ${ninegrid.getCustomPath(this,"ai.css")}
58
+ </style>
59
+
60
+ <div class="line subject">
61
+ <label for="server">Server:</label>
62
+ </div>
63
+ <div class="line contents">
64
+ <label><input name="server" type="radio" value="gemini" checked>Gemini</label>
65
+ <label><input name="server" type="radio" value="openai">Open AI</label>
66
+ <label><input name="server" type="radio" value="ollama">Ollama</label>
67
+ </div>
68
+ <div class="line gemini-bak" style="display:none;">
69
+ <label>API Key: <input id="geminiApiKey" value=""/></label>
70
+ </div>
71
+ <div class="line openai-bak" style="display:none;">
72
+ <label>API Key: <input id="openaiApiKey" value=""/></label>
73
+ </div>
74
+ <div class="line subject ollama">
75
+ <label for="ollamaUrl">Server Url:</label>
76
+ </div>
77
+ <div class="line contents ollama">
78
+ <input type="text" id="ollamaUrl" value="http://localhost:11434"/></label>
79
+ </div>
80
+ <div class="line subject ollama">
81
+ <label for="ollamaModel">Model:</label>
82
+ </div>
83
+ <div class="line contents ollama">
84
+ <select id="ollamaModel">
85
+ <option value="phi4:14b">phi4:14b</option>
86
+ <option value="llama3.1:8b">llama3.1:8b</option>
87
+ <option value="mistral:7b">mistral:7b</option>
88
+ </select>
89
+ </div>
90
+ <div class="line subject gemini">
91
+ <label for="geminiModel">Model:</label>
92
+ </div>
93
+ <div class="line contents gemini">
94
+ <select id="geminiModel">
95
+ <option value="gemini-2.5-flash-preview-04-17">gemini-2.5-flash-preview-04-17</option>
96
+ <option value="gemini-pro">gemini-pro</option>
97
+ </select>
98
+ </div>
99
+ <div class="line subject openai">
100
+ <label for="openaiModel">Model:</label>
101
+ </div>
102
+ <div class="line contents openai">
103
+ <select id="openaiModel">
104
+ <option value="gpt-4">gpt-4</option>
105
+ <option value="gpt-4o">gpt-4o</option>
106
+ <option value="gpt-3.5-turbo">gpt-3.5-turbo</option>
107
+ </select>
108
+ </div>
109
+
110
+ <div class="line subject qdrant">
111
+ <label for="qdrantUrl">Qdrant Url:</label>
112
+ </div>
113
+ <div class="line contents qdrant">
114
+ <input type="text" id="qdrantUrl" value="http://localhost:6333"/>
115
+ </div>
116
+
117
+ <div class="line subject analyze">
118
+ <input id="chkAnalyze" type="checkbox" checked> <input id="txtAnalyze" type="number" value="100"><label>건 미만인 경우 데이타 분석 요청</label>
119
+ </div>
120
+ `;
121
+
122
+ this.#init();
123
+
124
+ setTimeout(() => {
125
+ this.server = "gemini";
126
+ }, 0);
127
+ };
128
+
129
+
130
+
131
+ #init = () => {
132
+
133
+ this.shadowRoot.querySelectorAll('input[name="server"]').forEach((radio) => {
134
+ radio.addEventListener("change", () => {
135
+ const server = this.shadowRoot.querySelector('input[name="server"]:checked').value;
136
+
137
+ ["gemini","openai","ollama"].forEach(v => {
138
+ this.shadowRoot.querySelectorAll('.' + v).forEach((elem) => {
139
+ elem.style.display = (server === v) ? "flex" : "none";
140
+ });
141
+ });
142
+ });
143
+ });
144
+ }
145
+ }
146
+
147
+ customElements.define("ide-assi-settings", ideAssiSettings);