ide-assi 0.46.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.
- package/dist/bundle.cjs.js +19 -2
- package/dist/bundle.esm.js +19 -2
- package/dist/components/ideAssi.js +19 -2
- package/dist/components/ideAssiSettings.js +147 -0
- package/package.json +1 -1
- package/src/components/ideAssi.js +19 -2
- package/src/components/ideAssiSettings.js +147 -0
package/dist/bundle.cjs.js
CHANGED
|
@@ -193405,6 +193405,7 @@ class IdeAi
|
|
|
193405
193405
|
|
|
193406
193406
|
class IdeAssi extends HTMLElement
|
|
193407
193407
|
{
|
|
193408
|
+
settings;
|
|
193408
193409
|
#ai;
|
|
193409
193410
|
#ing = false;
|
|
193410
193411
|
|
|
@@ -193426,6 +193427,8 @@ class IdeAssi extends HTMLElement
|
|
|
193426
193427
|
</style>
|
|
193427
193428
|
|
|
193428
193429
|
<div class="wrapper">
|
|
193430
|
+
<ide-assi-settings></ide-assi-settings>
|
|
193431
|
+
|
|
193429
193432
|
<div class="container">
|
|
193430
193433
|
<div class="head">
|
|
193431
193434
|
<div class="logo"></div>
|
|
@@ -193453,13 +193456,14 @@ class IdeAssi extends HTMLElement
|
|
|
193453
193456
|
|
|
193454
193457
|
|
|
193455
193458
|
#init = (info) => {
|
|
193456
|
-
|
|
193459
|
+
this.settings = this.shadowRoot.querySelector("nx-ai-settings");
|
|
193460
|
+
|
|
193457
193461
|
this.shadowRoot.querySelector("textarea").addEventListener("keydown", this.#keydownHandler);
|
|
193458
193462
|
|
|
193459
193463
|
this.shadowRoot.querySelector(".expand-icon").addEventListener("click", this.#toggleCollapseHandler);
|
|
193460
193464
|
this.shadowRoot.querySelector(".collapse-icon").addEventListener("click", this.#toggleCollapseHandler);
|
|
193461
193465
|
|
|
193462
|
-
|
|
193466
|
+
this.shadowRoot.querySelectorAll(".menu-icon").forEach(el => el.addEventListener("click", this.#menuClickHandler));
|
|
193463
193467
|
};
|
|
193464
193468
|
|
|
193465
193469
|
|
|
@@ -193553,6 +193557,19 @@ export default Home;
|
|
|
193553
193557
|
#toggleCollapseHandler = () => {
|
|
193554
193558
|
this.classList.toggle("collapse");
|
|
193555
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
|
+
};
|
|
193556
193573
|
}
|
|
193557
193574
|
|
|
193558
193575
|
customElements.define("ide-assi", IdeAssi);
|
package/dist/bundle.esm.js
CHANGED
|
@@ -193401,6 +193401,7 @@ class IdeAi
|
|
|
193401
193401
|
|
|
193402
193402
|
class IdeAssi extends HTMLElement
|
|
193403
193403
|
{
|
|
193404
|
+
settings;
|
|
193404
193405
|
#ai;
|
|
193405
193406
|
#ing = false;
|
|
193406
193407
|
|
|
@@ -193422,6 +193423,8 @@ class IdeAssi extends HTMLElement
|
|
|
193422
193423
|
</style>
|
|
193423
193424
|
|
|
193424
193425
|
<div class="wrapper">
|
|
193426
|
+
<ide-assi-settings></ide-assi-settings>
|
|
193427
|
+
|
|
193425
193428
|
<div class="container">
|
|
193426
193429
|
<div class="head">
|
|
193427
193430
|
<div class="logo"></div>
|
|
@@ -193449,13 +193452,14 @@ class IdeAssi extends HTMLElement
|
|
|
193449
193452
|
|
|
193450
193453
|
|
|
193451
193454
|
#init = (info) => {
|
|
193452
|
-
|
|
193455
|
+
this.settings = this.shadowRoot.querySelector("nx-ai-settings");
|
|
193456
|
+
|
|
193453
193457
|
this.shadowRoot.querySelector("textarea").addEventListener("keydown", this.#keydownHandler);
|
|
193454
193458
|
|
|
193455
193459
|
this.shadowRoot.querySelector(".expand-icon").addEventListener("click", this.#toggleCollapseHandler);
|
|
193456
193460
|
this.shadowRoot.querySelector(".collapse-icon").addEventListener("click", this.#toggleCollapseHandler);
|
|
193457
193461
|
|
|
193458
|
-
|
|
193462
|
+
this.shadowRoot.querySelectorAll(".menu-icon").forEach(el => el.addEventListener("click", this.#menuClickHandler));
|
|
193459
193463
|
};
|
|
193460
193464
|
|
|
193461
193465
|
|
|
@@ -193549,6 +193553,19 @@ export default Home;
|
|
|
193549
193553
|
#toggleCollapseHandler = () => {
|
|
193550
193554
|
this.classList.toggle("collapse");
|
|
193551
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
|
+
};
|
|
193552
193569
|
}
|
|
193553
193570
|
|
|
193554
193571
|
customElements.define("ide-assi", IdeAssi);
|
|
@@ -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
|
-
|
|
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
|
@@ -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
|
-
|
|
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);
|