libre-webui 0.12.0 → 0.12.1
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/backend/dist/utils/pluginValidation.js +1 -1
- package/backend/dist/utils/pluginValidation.js.map +1 -1
- package/backend/package.json +5 -7
- package/frontend/dist/assets/{index-ONn9VIq7.js → index-CdGZAiI5.js} +4 -4
- package/frontend/dist/favicon-dark.png +0 -0
- package/frontend/dist/favicon-light.png +0 -0
- package/frontend/dist/index.html +3 -3
- package/frontend/dist/js/{ArtifactContainer-CqKsiKz0.js → ArtifactContainer-DK1FCylP.js} +1 -1
- package/frontend/dist/js/{ArtifactDemoPage-Dd5BjIu2.js → ArtifactDemoPage-CMy7LH8t.js} +1 -1
- package/frontend/dist/js/ArtifactSlideOutPanel-DS1K3sQL.js +1 -0
- package/frontend/dist/js/ChatPage-RYQ8mcOC.js +16 -0
- package/frontend/dist/js/{FirstTimeSetup-DcGhm0H0.js → FirstTimeSetup-Ckdm_Hpv.js} +1 -1
- package/frontend/dist/js/{GalleryPage-DNI2Evvf.js → GalleryPage-sQc_lBme.js} +1 -1
- package/frontend/dist/js/{LibreClawPage-CmTiROsJ.js → LibreClawPage-DsGFex9f.js} +1 -1
- package/frontend/dist/js/{ModelManagerModals-CfvSeNsT.js → ModelManagerModals-m5uCO3SS.js} +1 -1
- package/frontend/dist/js/{ModelsPage-CeTGqx4q.js → ModelsPage-CgtfQ2np.js} +2 -2
- package/frontend/dist/js/{PersonasPage-BUqu7gJ3.js → PersonasPage-D1Twd9rI.js} +1 -1
- package/frontend/dist/js/{RichMessageContent-B0JO8vkR.js → RichMessageContent-BOQDgLTR.js} +1 -1
- package/frontend/dist/js/{SettingsModal-B5aJ5vfV.js → SettingsModal-RU_GFjMK.js} +1 -1
- package/frontend/dist/js/{UserManagementPage-BqIIWX2M.js → UserManagementPage-BAEOziZX.js} +1 -1
- package/frontend/dist/js/{api-CbmZzKBu.js → api-BaWiKZy-.js} +2 -2
- package/frontend/dist/js/{ui-vendor-BJAeWL11.js → ui-vendor-njo77ljx.js} +1 -1
- package/frontend/dist/js/{useBaseQuery-6OJiOiyu.js → useBaseQuery-C03a5oZt.js} +1 -1
- package/frontend/dist/js/useQuery-iKrQD3gp.js +1 -0
- package/frontend/dist/logo-dark.png +0 -0
- package/frontend/dist/logo-light.png +0 -0
- package/frontend/dist/logo.svg +5 -3
- package/package.json +4 -11
- package/plugins/anthropic.json +7 -9
- package/plugins/elevenlabs.json +2 -0
- package/plugins/gemini.json +5 -41
- package/plugins/github.json +36 -11
- package/plugins/groq.json +12 -3
- package/plugins/huggingface.json +116 -22
- package/plugins/mistral.json +76 -42
- package/plugins/openai-tts.json +4 -8
- package/plugins/openai.json +6 -103
- package/plugins/openrouter.json +136 -138
- package/backend/dist/test-encryption.d.ts +0 -2
- package/backend/dist/test-encryption.d.ts.map +0 -1
- package/backend/dist/test-encryption.js +0 -66
- package/backend/dist/test-encryption.js.map +0 -1
- package/frontend/dist/js/ArtifactSlideOutPanel-Yc7ttIaY.js +0 -1
- package/frontend/dist/js/ChatPage-Cpy7lQ0D.js +0 -16
- package/frontend/dist/js/useQuery-DfkI6VAv.js +0 -1
package/plugins/openrouter.json
CHANGED
|
@@ -9,210 +9,184 @@
|
|
|
9
9
|
"key_env": "OPENROUTER_API_KEY"
|
|
10
10
|
},
|
|
11
11
|
"model_map": [
|
|
12
|
+
"~anthropic/claude-fable-latest",
|
|
13
|
+
"~anthropic/claude-haiku-latest",
|
|
14
|
+
"~anthropic/claude-opus-latest",
|
|
15
|
+
"~anthropic/claude-sonnet-latest",
|
|
16
|
+
"~google/gemini-flash-latest",
|
|
17
|
+
"~google/gemini-pro-latest",
|
|
18
|
+
"~moonshotai/kimi-latest",
|
|
19
|
+
"~openai/gpt-latest",
|
|
20
|
+
"~openai/gpt-mini-latest",
|
|
12
21
|
"ai21/jamba-large-1.7",
|
|
13
|
-
"ai21/jamba-mini-1.7",
|
|
14
22
|
"aion-labs/aion-1.0",
|
|
15
23
|
"aion-labs/aion-1.0-mini",
|
|
24
|
+
"aion-labs/aion-2.0",
|
|
16
25
|
"aion-labs/aion-rp-llama-3.1-8b",
|
|
17
|
-
"
|
|
18
|
-
"alibaba/tongyi-deepresearch-30b-a3b",
|
|
19
|
-
"alibaba/tongyi-deepresearch-30b-a3b:free",
|
|
20
|
-
"allenai/olmo-2-0325-32b-instruct",
|
|
21
|
-
"allenai/olmo-3-32b-think:free",
|
|
22
|
-
"allenai/olmo-3-7b-instruct",
|
|
23
|
-
"allenai/olmo-3-7b-think",
|
|
24
|
-
"allenai/olmo-3.1-32b-think:free",
|
|
25
|
-
"alpindale/goliath-120b",
|
|
26
|
+
"allenai/olmo-3-32b-think",
|
|
26
27
|
"amazon/nova-2-lite-v1",
|
|
27
|
-
"amazon/nova-2-lite-v1:free",
|
|
28
28
|
"amazon/nova-lite-v1",
|
|
29
29
|
"amazon/nova-micro-v1",
|
|
30
30
|
"amazon/nova-premier-v1",
|
|
31
31
|
"amazon/nova-pro-v1",
|
|
32
32
|
"anthracite-org/magnum-v4-72b",
|
|
33
33
|
"anthropic/claude-3-haiku",
|
|
34
|
-
"anthropic/claude-
|
|
35
|
-
"anthropic/claude-3.5-haiku",
|
|
36
|
-
"anthropic/claude-3.5-haiku-20241022",
|
|
37
|
-
"anthropic/claude-3.5-sonnet",
|
|
38
|
-
"anthropic/claude-3.7-sonnet",
|
|
39
|
-
"anthropic/claude-3.7-sonnet:thinking",
|
|
34
|
+
"anthropic/claude-fable-5",
|
|
40
35
|
"anthropic/claude-haiku-4.5",
|
|
41
36
|
"anthropic/claude-opus-4",
|
|
42
37
|
"anthropic/claude-opus-4.1",
|
|
43
38
|
"anthropic/claude-opus-4.5",
|
|
39
|
+
"anthropic/claude-opus-4.6",
|
|
40
|
+
"anthropic/claude-opus-4.7",
|
|
41
|
+
"anthropic/claude-opus-4.7-fast",
|
|
42
|
+
"anthropic/claude-opus-4.8",
|
|
43
|
+
"anthropic/claude-opus-4.8-fast",
|
|
44
44
|
"anthropic/claude-sonnet-4",
|
|
45
45
|
"anthropic/claude-sonnet-4.5",
|
|
46
|
+
"anthropic/claude-sonnet-4.6",
|
|
47
|
+
"anthropic/claude-sonnet-5",
|
|
46
48
|
"arcee-ai/coder-large",
|
|
47
|
-
"arcee-ai/
|
|
48
|
-
"arcee-ai/spotlight",
|
|
49
|
+
"arcee-ai/trinity-large-thinking",
|
|
49
50
|
"arcee-ai/trinity-mini",
|
|
50
|
-
"arcee-ai/trinity-mini:free",
|
|
51
51
|
"arcee-ai/virtuoso-large",
|
|
52
|
-
"arliai/qwq-32b-arliai-rpr-v1",
|
|
53
|
-
"baidu/ernie-4.5-21b-a3b",
|
|
54
|
-
"baidu/ernie-4.5-21b-a3b-thinking",
|
|
55
|
-
"baidu/ernie-4.5-300b-a47b",
|
|
56
|
-
"baidu/ernie-4.5-vl-28b-a3b",
|
|
57
52
|
"baidu/ernie-4.5-vl-424b-a47b",
|
|
53
|
+
"bytedance-seed/seed-1.6",
|
|
54
|
+
"bytedance-seed/seed-1.6-flash",
|
|
55
|
+
"bytedance-seed/seed-2.0-lite",
|
|
56
|
+
"bytedance-seed/seed-2.0-mini",
|
|
58
57
|
"bytedance/ui-tars-1.5-7b",
|
|
59
58
|
"cognitivecomputations/dolphin-mistral-24b-venice-edition:free",
|
|
60
59
|
"cohere/command-a",
|
|
61
60
|
"cohere/command-r-08-2024",
|
|
62
61
|
"cohere/command-r-plus-08-2024",
|
|
63
62
|
"cohere/command-r7b-12-2024",
|
|
64
|
-
"
|
|
65
|
-
"deepcogito/cogito-v2-preview-llama-405b",
|
|
66
|
-
"deepcogito/cogito-v2-preview-llama-70b",
|
|
63
|
+
"cohere/north-mini-code:free",
|
|
67
64
|
"deepcogito/cogito-v2.1-671b",
|
|
68
65
|
"deepseek/deepseek-chat",
|
|
69
66
|
"deepseek/deepseek-chat-v3-0324",
|
|
70
67
|
"deepseek/deepseek-chat-v3.1",
|
|
71
|
-
"deepseek/deepseek-prover-v2",
|
|
72
68
|
"deepseek/deepseek-r1",
|
|
73
69
|
"deepseek/deepseek-r1-0528",
|
|
74
|
-
"deepseek/deepseek-r1-0528-qwen3-8b",
|
|
75
70
|
"deepseek/deepseek-r1-distill-llama-70b",
|
|
76
|
-
"deepseek/deepseek-r1-distill-qwen-14b",
|
|
77
|
-
"deepseek/deepseek-r1-distill-qwen-32b",
|
|
78
71
|
"deepseek/deepseek-v3.1-terminus",
|
|
79
|
-
"deepseek/deepseek-v3.1-terminus:exacto",
|
|
80
72
|
"deepseek/deepseek-v3.2",
|
|
81
73
|
"deepseek/deepseek-v3.2-exp",
|
|
82
|
-
"deepseek/deepseek-
|
|
83
|
-
"
|
|
84
|
-
"essentialai/rnj-1-instruct",
|
|
85
|
-
"google/gemini-2.0-flash-001",
|
|
86
|
-
"google/gemini-2.0-flash-exp:free",
|
|
87
|
-
"google/gemini-2.0-flash-lite-001",
|
|
74
|
+
"deepseek/deepseek-v4-flash",
|
|
75
|
+
"deepseek/deepseek-v4-pro",
|
|
88
76
|
"google/gemini-2.5-flash",
|
|
77
|
+
"google/gemini-2.5-flash-image",
|
|
89
78
|
"google/gemini-2.5-flash-lite",
|
|
90
79
|
"google/gemini-2.5-flash-lite-preview-09-2025",
|
|
91
|
-
"google/gemini-2.5-flash-preview-09-2025",
|
|
92
80
|
"google/gemini-2.5-pro",
|
|
93
81
|
"google/gemini-2.5-pro-preview",
|
|
94
82
|
"google/gemini-2.5-pro-preview-05-06",
|
|
95
|
-
"google/gemini-3-
|
|
83
|
+
"google/gemini-3-flash-preview",
|
|
84
|
+
"google/gemini-3-pro-image",
|
|
85
|
+
"google/gemini-3-pro-image-preview",
|
|
86
|
+
"google/gemini-3.1-flash-image",
|
|
87
|
+
"google/gemini-3.1-flash-image-preview",
|
|
88
|
+
"google/gemini-3.1-flash-lite",
|
|
89
|
+
"google/gemini-3.1-flash-lite-image",
|
|
90
|
+
"google/gemini-3.1-flash-lite-preview",
|
|
91
|
+
"google/gemini-3.1-pro-preview",
|
|
92
|
+
"google/gemini-3.1-pro-preview-customtools",
|
|
93
|
+
"google/gemini-3.5-flash",
|
|
96
94
|
"google/gemma-2-27b-it",
|
|
97
|
-
"google/gemma-2-9b-it",
|
|
98
95
|
"google/gemma-3-12b-it",
|
|
99
|
-
"google/gemma-3-12b-it:free",
|
|
100
96
|
"google/gemma-3-27b-it",
|
|
101
|
-
"google/gemma-3-27b-it:free",
|
|
102
97
|
"google/gemma-3-4b-it",
|
|
103
|
-
"google/gemma-3-4b-it:free",
|
|
104
|
-
"google/gemma-3n-e2b-it:free",
|
|
105
98
|
"google/gemma-3n-e4b-it",
|
|
106
|
-
"google/gemma-
|
|
99
|
+
"google/gemma-4-26b-a4b-it",
|
|
100
|
+
"google/gemma-4-26b-a4b-it:free",
|
|
101
|
+
"google/gemma-4-31b-it",
|
|
102
|
+
"google/gemma-4-31b-it:free",
|
|
103
|
+
"google/lyria-3-clip-preview",
|
|
104
|
+
"google/lyria-3-pro-preview",
|
|
107
105
|
"gryphe/mythomax-l2-13b",
|
|
108
106
|
"ibm-granite/granite-4.0-h-micro",
|
|
109
|
-
"
|
|
110
|
-
"inception/mercury-
|
|
107
|
+
"ibm-granite/granite-4.1-8b",
|
|
108
|
+
"inception/mercury-2",
|
|
109
|
+
"inclusionai/ling-2.6-1t",
|
|
110
|
+
"inclusionai/ling-2.6-flash",
|
|
111
|
+
"inclusionai/ring-2.6-1t",
|
|
111
112
|
"inflection/inflection-3-pi",
|
|
112
113
|
"inflection/inflection-3-productivity",
|
|
113
|
-
"kwaipilot/kat-coder-pro
|
|
114
|
-
"liquid/lfm-2
|
|
115
|
-
"liquid/
|
|
114
|
+
"kwaipilot/kat-coder-pro-v2",
|
|
115
|
+
"liquid/lfm-2-24b-a2b",
|
|
116
|
+
"liquid/lfm-2.5-1.2b-instruct:free",
|
|
117
|
+
"liquid/lfm-2.5-1.2b-thinking:free",
|
|
116
118
|
"mancer/weaver",
|
|
117
|
-
"meituan/longcat-flash-chat",
|
|
118
|
-
"meta-llama/llama-3-70b-instruct",
|
|
119
119
|
"meta-llama/llama-3-8b-instruct",
|
|
120
|
-
"meta-llama/llama-3.1-405b",
|
|
121
|
-
"meta-llama/llama-3.1-405b-instruct",
|
|
122
120
|
"meta-llama/llama-3.1-70b-instruct",
|
|
123
121
|
"meta-llama/llama-3.1-8b-instruct",
|
|
124
122
|
"meta-llama/llama-3.2-11b-vision-instruct",
|
|
125
123
|
"meta-llama/llama-3.2-1b-instruct",
|
|
126
124
|
"meta-llama/llama-3.2-3b-instruct",
|
|
127
125
|
"meta-llama/llama-3.2-3b-instruct:free",
|
|
128
|
-
"meta-llama/llama-3.2-90b-vision-instruct",
|
|
129
126
|
"meta-llama/llama-3.3-70b-instruct",
|
|
130
127
|
"meta-llama/llama-3.3-70b-instruct:free",
|
|
131
128
|
"meta-llama/llama-4-maverick",
|
|
132
129
|
"meta-llama/llama-4-scout",
|
|
133
|
-
"meta-llama/llama-guard-2-8b",
|
|
134
|
-
"meta-llama/llama-guard-3-8b",
|
|
135
130
|
"meta-llama/llama-guard-4-12b",
|
|
136
|
-
"microsoft/phi-3-medium-128k-instruct",
|
|
137
|
-
"microsoft/phi-3-mini-128k-instruct",
|
|
138
|
-
"microsoft/phi-3.5-mini-128k-instruct",
|
|
139
131
|
"microsoft/phi-4",
|
|
140
|
-
"microsoft/phi-4-multimodal-instruct",
|
|
141
|
-
"microsoft/phi-4-reasoning-plus",
|
|
142
132
|
"microsoft/wizardlm-2-8x22b",
|
|
143
133
|
"minimax/minimax-01",
|
|
144
134
|
"minimax/minimax-m1",
|
|
145
135
|
"minimax/minimax-m2",
|
|
136
|
+
"minimax/minimax-m2-her",
|
|
137
|
+
"minimax/minimax-m2.1",
|
|
138
|
+
"minimax/minimax-m2.5",
|
|
139
|
+
"minimax/minimax-m2.7",
|
|
140
|
+
"minimax/minimax-m3",
|
|
146
141
|
"mistralai/codestral-2508",
|
|
147
142
|
"mistralai/devstral-2512",
|
|
148
|
-
"mistralai/devstral-2512:free",
|
|
149
|
-
"mistralai/devstral-medium",
|
|
150
|
-
"mistralai/devstral-small",
|
|
151
|
-
"mistralai/devstral-small-2505",
|
|
152
143
|
"mistralai/ministral-14b-2512",
|
|
153
|
-
"mistralai/ministral-3b",
|
|
154
144
|
"mistralai/ministral-3b-2512",
|
|
155
|
-
"mistralai/ministral-8b",
|
|
156
145
|
"mistralai/ministral-8b-2512",
|
|
157
|
-
"mistralai/mistral-7b-instruct",
|
|
158
|
-
"mistralai/mistral-7b-instruct-v0.1",
|
|
159
|
-
"mistralai/mistral-7b-instruct-v0.2",
|
|
160
|
-
"mistralai/mistral-7b-instruct-v0.3",
|
|
161
|
-
"mistralai/mistral-7b-instruct:free",
|
|
162
146
|
"mistralai/mistral-large",
|
|
163
147
|
"mistralai/mistral-large-2407",
|
|
164
|
-
"mistralai/mistral-large-2411",
|
|
165
148
|
"mistralai/mistral-large-2512",
|
|
166
149
|
"mistralai/mistral-medium-3",
|
|
150
|
+
"mistralai/mistral-medium-3-5",
|
|
167
151
|
"mistralai/mistral-medium-3.1",
|
|
168
152
|
"mistralai/mistral-nemo",
|
|
169
153
|
"mistralai/mistral-saba",
|
|
170
154
|
"mistralai/mistral-small-24b-instruct-2501",
|
|
155
|
+
"mistralai/mistral-small-2603",
|
|
171
156
|
"mistralai/mistral-small-3.1-24b-instruct",
|
|
172
|
-
"mistralai/mistral-small-3.1-24b-instruct:free",
|
|
173
157
|
"mistralai/mistral-small-3.2-24b-instruct",
|
|
174
|
-
"mistralai/mistral-small-creative",
|
|
175
|
-
"mistralai/mistral-tiny",
|
|
176
158
|
"mistralai/mixtral-8x22b-instruct",
|
|
177
|
-
"mistralai/mixtral-8x7b-instruct",
|
|
178
|
-
"mistralai/pixtral-12b",
|
|
179
|
-
"mistralai/pixtral-large-2411",
|
|
180
159
|
"mistralai/voxtral-small-24b-2507",
|
|
181
|
-
"moonshotai/kimi-dev-72b",
|
|
182
160
|
"moonshotai/kimi-k2",
|
|
183
161
|
"moonshotai/kimi-k2-0905",
|
|
184
|
-
"moonshotai/kimi-k2-0905:exacto",
|
|
185
162
|
"moonshotai/kimi-k2-thinking",
|
|
186
|
-
"moonshotai/kimi-k2
|
|
163
|
+
"moonshotai/kimi-k2.5",
|
|
164
|
+
"moonshotai/kimi-k2.6",
|
|
165
|
+
"moonshotai/kimi-k2.7-code",
|
|
187
166
|
"morph/morph-v3-fast",
|
|
188
167
|
"morph/morph-v3-large",
|
|
189
|
-
"
|
|
190
|
-
"neversleep/noromaid-20b",
|
|
191
|
-
"nex-agi/deepseek-v3.1-nex-n1:free",
|
|
192
|
-
"nousresearch/deephermes-3-mistral-24b-preview",
|
|
193
|
-
"nousresearch/hermes-2-pro-llama-3-8b",
|
|
168
|
+
"nex-agi/nex-n2-pro",
|
|
194
169
|
"nousresearch/hermes-3-llama-3.1-405b",
|
|
195
170
|
"nousresearch/hermes-3-llama-3.1-405b:free",
|
|
196
171
|
"nousresearch/hermes-3-llama-3.1-70b",
|
|
197
172
|
"nousresearch/hermes-4-405b",
|
|
198
173
|
"nousresearch/hermes-4-70b",
|
|
199
|
-
"nvidia/llama-3.1-nemotron-70b-instruct",
|
|
200
|
-
"nvidia/llama-3.1-nemotron-ultra-253b-v1",
|
|
201
174
|
"nvidia/llama-3.3-nemotron-super-49b-v1.5",
|
|
175
|
+
"nvidia/nemotron-3-nano-30b-a3b",
|
|
202
176
|
"nvidia/nemotron-3-nano-30b-a3b:free",
|
|
203
|
-
"nvidia/nemotron-nano-
|
|
177
|
+
"nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free",
|
|
178
|
+
"nvidia/nemotron-3-super-120b-a12b",
|
|
179
|
+
"nvidia/nemotron-3-super-120b-a12b:free",
|
|
180
|
+
"nvidia/nemotron-3-ultra-550b-a55b",
|
|
181
|
+
"nvidia/nemotron-3-ultra-550b-a55b:free",
|
|
182
|
+
"nvidia/nemotron-3.5-content-safety:free",
|
|
204
183
|
"nvidia/nemotron-nano-12b-v2-vl:free",
|
|
205
|
-
"nvidia/nemotron-nano-9b-v2",
|
|
206
184
|
"nvidia/nemotron-nano-9b-v2:free",
|
|
207
|
-
"openai/chatgpt-4o-latest",
|
|
208
|
-
"openai/codex-mini",
|
|
209
185
|
"openai/gpt-3.5-turbo",
|
|
210
186
|
"openai/gpt-3.5-turbo-0613",
|
|
211
187
|
"openai/gpt-3.5-turbo-16k",
|
|
212
188
|
"openai/gpt-3.5-turbo-instruct",
|
|
213
189
|
"openai/gpt-4",
|
|
214
|
-
"openai/gpt-4-0314",
|
|
215
|
-
"openai/gpt-4-1106-preview",
|
|
216
190
|
"openai/gpt-4-turbo",
|
|
217
191
|
"openai/gpt-4-turbo-preview",
|
|
218
192
|
"openai/gpt-4.1",
|
|
@@ -222,15 +196,15 @@
|
|
|
222
196
|
"openai/gpt-4o-2024-05-13",
|
|
223
197
|
"openai/gpt-4o-2024-08-06",
|
|
224
198
|
"openai/gpt-4o-2024-11-20",
|
|
225
|
-
"openai/gpt-4o-audio-preview",
|
|
226
199
|
"openai/gpt-4o-mini",
|
|
227
200
|
"openai/gpt-4o-mini-2024-07-18",
|
|
228
201
|
"openai/gpt-4o-mini-search-preview",
|
|
229
202
|
"openai/gpt-4o-search-preview",
|
|
230
|
-
"openai/gpt-4o:extended",
|
|
231
203
|
"openai/gpt-5",
|
|
232
204
|
"openai/gpt-5-chat",
|
|
233
205
|
"openai/gpt-5-codex",
|
|
206
|
+
"openai/gpt-5-image",
|
|
207
|
+
"openai/gpt-5-image-mini",
|
|
234
208
|
"openai/gpt-5-mini",
|
|
235
209
|
"openai/gpt-5-nano",
|
|
236
210
|
"openai/gpt-5-pro",
|
|
@@ -241,9 +215,21 @@
|
|
|
241
215
|
"openai/gpt-5.1-codex-mini",
|
|
242
216
|
"openai/gpt-5.2",
|
|
243
217
|
"openai/gpt-5.2-chat",
|
|
218
|
+
"openai/gpt-5.2-codex",
|
|
244
219
|
"openai/gpt-5.2-pro",
|
|
220
|
+
"openai/gpt-5.3-chat",
|
|
221
|
+
"openai/gpt-5.3-codex",
|
|
222
|
+
"openai/gpt-5.4",
|
|
223
|
+
"openai/gpt-5.4-image-2",
|
|
224
|
+
"openai/gpt-5.4-mini",
|
|
225
|
+
"openai/gpt-5.4-nano",
|
|
226
|
+
"openai/gpt-5.4-pro",
|
|
227
|
+
"openai/gpt-5.5",
|
|
228
|
+
"openai/gpt-5.5-pro",
|
|
229
|
+
"openai/gpt-audio",
|
|
230
|
+
"openai/gpt-audio-mini",
|
|
231
|
+
"openai/gpt-chat-latest",
|
|
245
232
|
"openai/gpt-oss-120b",
|
|
246
|
-
"openai/gpt-oss-120b:exacto",
|
|
247
233
|
"openai/gpt-oss-120b:free",
|
|
248
234
|
"openai/gpt-oss-20b",
|
|
249
235
|
"openai/gpt-oss-20b:free",
|
|
@@ -258,97 +244,109 @@
|
|
|
258
244
|
"openai/o4-mini",
|
|
259
245
|
"openai/o4-mini-deep-research",
|
|
260
246
|
"openai/o4-mini-high",
|
|
261
|
-
"opengvlab/internvl3-78b",
|
|
262
247
|
"openrouter/auto",
|
|
263
248
|
"openrouter/bodybuilder",
|
|
249
|
+
"openrouter/free",
|
|
250
|
+
"openrouter/fusion",
|
|
251
|
+
"openrouter/pareto-code",
|
|
252
|
+
"perceptron/perceptron-mk1",
|
|
264
253
|
"perplexity/sonar",
|
|
265
254
|
"perplexity/sonar-deep-research",
|
|
266
255
|
"perplexity/sonar-pro",
|
|
267
256
|
"perplexity/sonar-pro-search",
|
|
268
|
-
"perplexity/sonar-reasoning",
|
|
269
257
|
"perplexity/sonar-reasoning-pro",
|
|
270
|
-
"
|
|
258
|
+
"poolside/laguna-m.1",
|
|
259
|
+
"poolside/laguna-m.1:free",
|
|
260
|
+
"poolside/laguna-xs.2",
|
|
261
|
+
"poolside/laguna-xs.2:free",
|
|
271
262
|
"qwen/qwen-2.5-72b-instruct",
|
|
272
263
|
"qwen/qwen-2.5-7b-instruct",
|
|
273
264
|
"qwen/qwen-2.5-coder-32b-instruct",
|
|
274
|
-
"qwen/qwen-2.5-vl-7b-instruct",
|
|
275
|
-
"qwen/qwen-max",
|
|
276
265
|
"qwen/qwen-plus",
|
|
277
266
|
"qwen/qwen-plus-2025-07-28",
|
|
278
267
|
"qwen/qwen-plus-2025-07-28:thinking",
|
|
279
|
-
"qwen/qwen-turbo",
|
|
280
|
-
"qwen/qwen-vl-max",
|
|
281
|
-
"qwen/qwen-vl-plus",
|
|
282
|
-
"qwen/qwen2.5-coder-7b-instruct",
|
|
283
|
-
"qwen/qwen2.5-vl-32b-instruct",
|
|
284
268
|
"qwen/qwen2.5-vl-72b-instruct",
|
|
285
269
|
"qwen/qwen3-14b",
|
|
286
270
|
"qwen/qwen3-235b-a22b",
|
|
287
271
|
"qwen/qwen3-235b-a22b-2507",
|
|
288
272
|
"qwen/qwen3-235b-a22b-thinking-2507",
|
|
289
|
-
"qwen/qwen3-235b-a22b:free",
|
|
290
273
|
"qwen/qwen3-30b-a3b",
|
|
291
274
|
"qwen/qwen3-30b-a3b-instruct-2507",
|
|
292
275
|
"qwen/qwen3-30b-a3b-thinking-2507",
|
|
293
276
|
"qwen/qwen3-32b",
|
|
294
|
-
"qwen/qwen3-4b:free",
|
|
295
277
|
"qwen/qwen3-8b",
|
|
296
278
|
"qwen/qwen3-coder",
|
|
297
279
|
"qwen/qwen3-coder-30b-a3b-instruct",
|
|
298
280
|
"qwen/qwen3-coder-flash",
|
|
281
|
+
"qwen/qwen3-coder-next",
|
|
299
282
|
"qwen/qwen3-coder-plus",
|
|
300
|
-
"qwen/qwen3-coder:exacto",
|
|
301
283
|
"qwen/qwen3-coder:free",
|
|
302
284
|
"qwen/qwen3-max",
|
|
285
|
+
"qwen/qwen3-max-thinking",
|
|
303
286
|
"qwen/qwen3-next-80b-a3b-instruct",
|
|
287
|
+
"qwen/qwen3-next-80b-a3b-instruct:free",
|
|
304
288
|
"qwen/qwen3-next-80b-a3b-thinking",
|
|
305
289
|
"qwen/qwen3-vl-235b-a22b-instruct",
|
|
306
290
|
"qwen/qwen3-vl-235b-a22b-thinking",
|
|
307
291
|
"qwen/qwen3-vl-30b-a3b-instruct",
|
|
308
292
|
"qwen/qwen3-vl-30b-a3b-thinking",
|
|
293
|
+
"qwen/qwen3-vl-32b-instruct",
|
|
309
294
|
"qwen/qwen3-vl-8b-instruct",
|
|
310
295
|
"qwen/qwen3-vl-8b-thinking",
|
|
311
|
-
"qwen/
|
|
312
|
-
"
|
|
296
|
+
"qwen/qwen3.5-122b-a10b",
|
|
297
|
+
"qwen/qwen3.5-27b",
|
|
298
|
+
"qwen/qwen3.5-35b-a3b",
|
|
299
|
+
"qwen/qwen3.5-397b-a17b",
|
|
300
|
+
"qwen/qwen3.5-9b",
|
|
301
|
+
"qwen/qwen3.5-flash-02-23",
|
|
302
|
+
"qwen/qwen3.5-plus-02-15",
|
|
303
|
+
"qwen/qwen3.5-plus-20260420",
|
|
304
|
+
"qwen/qwen3.6-27b",
|
|
305
|
+
"qwen/qwen3.6-35b-a3b",
|
|
306
|
+
"qwen/qwen3.6-flash",
|
|
307
|
+
"qwen/qwen3.6-max-preview",
|
|
308
|
+
"qwen/qwen3.6-plus",
|
|
309
|
+
"qwen/qwen3.7-max",
|
|
310
|
+
"qwen/qwen3.7-plus",
|
|
311
|
+
"rekaai/reka-edge",
|
|
312
|
+
"rekaai/reka-flash-3",
|
|
313
313
|
"relace/relace-apply-3",
|
|
314
314
|
"relace/relace-search",
|
|
315
|
-
"
|
|
315
|
+
"sakana/fugu-ultra",
|
|
316
316
|
"sao10k/l3-lunaris-8b",
|
|
317
317
|
"sao10k/l3.1-70b-hanami-x1",
|
|
318
318
|
"sao10k/l3.1-euryale-70b",
|
|
319
319
|
"sao10k/l3.3-euryale-70b",
|
|
320
|
-
"stepfun-
|
|
320
|
+
"stepfun/step-3.5-flash",
|
|
321
|
+
"stepfun/step-3.7-flash",
|
|
321
322
|
"switchpoint/router",
|
|
322
323
|
"tencent/hunyuan-a13b-instruct",
|
|
324
|
+
"tencent/hy3-preview",
|
|
323
325
|
"thedrummer/cydonia-24b-v4.1",
|
|
324
326
|
"thedrummer/rocinante-12b",
|
|
325
327
|
"thedrummer/skyfall-36b-v2",
|
|
326
328
|
"thedrummer/unslopnemo-12b",
|
|
327
|
-
"thudm/glm-4.1v-9b-thinking",
|
|
328
|
-
"tngtech/deepseek-r1t-chimera",
|
|
329
|
-
"tngtech/deepseek-r1t-chimera:free",
|
|
330
|
-
"tngtech/deepseek-r1t2-chimera",
|
|
331
|
-
"tngtech/deepseek-r1t2-chimera:free",
|
|
332
|
-
"tngtech/tng-r1t-chimera",
|
|
333
|
-
"tngtech/tng-r1t-chimera:free",
|
|
334
329
|
"undi95/remm-slerp-l2-13b",
|
|
335
|
-
"
|
|
336
|
-
"
|
|
337
|
-
"x-ai/grok-
|
|
338
|
-
"x-ai/grok-
|
|
339
|
-
"x-ai/grok-4",
|
|
340
|
-
"x-ai/grok-
|
|
341
|
-
"
|
|
342
|
-
"
|
|
343
|
-
"xiaomi/mimo-v2-flash:free",
|
|
344
|
-
"z-ai/glm-4-32b",
|
|
330
|
+
"upstage/solar-pro-3",
|
|
331
|
+
"writer/palmyra-x5",
|
|
332
|
+
"x-ai/grok-4.20",
|
|
333
|
+
"x-ai/grok-4.20-multi-agent",
|
|
334
|
+
"x-ai/grok-4.3",
|
|
335
|
+
"x-ai/grok-build-0.1",
|
|
336
|
+
"xiaomi/mimo-v2.5",
|
|
337
|
+
"xiaomi/mimo-v2.5-pro",
|
|
345
338
|
"z-ai/glm-4.5",
|
|
346
339
|
"z-ai/glm-4.5-air",
|
|
347
|
-
"z-ai/glm-4.5-air:free",
|
|
348
340
|
"z-ai/glm-4.5v",
|
|
349
341
|
"z-ai/glm-4.6",
|
|
350
|
-
"z-ai/glm-4.
|
|
351
|
-
"z-ai/glm-4.
|
|
342
|
+
"z-ai/glm-4.6v",
|
|
343
|
+
"z-ai/glm-4.7",
|
|
344
|
+
"z-ai/glm-4.7-flash",
|
|
345
|
+
"z-ai/glm-5",
|
|
346
|
+
"z-ai/glm-5-turbo",
|
|
347
|
+
"z-ai/glm-5.1",
|
|
348
|
+
"z-ai/glm-5.2",
|
|
349
|
+
"z-ai/glm-5v-turbo"
|
|
352
350
|
],
|
|
353
351
|
"variables": [
|
|
354
352
|
{
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"test-encryption.d.ts","sourceRoot":"","sources":["../src/test-encryption.ts"],"names":[],"mappings":""}
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Libre WebUI
|
|
3
|
-
* Copyright (C) 2025 Kroonen AI, Inc.
|
|
4
|
-
*
|
|
5
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
-
* you may not use this file except in compliance with the License.
|
|
7
|
-
* You may obtain a copy of the License at:
|
|
8
|
-
*
|
|
9
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
-
*
|
|
11
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
-
* See the License for the specific language governing permissions and
|
|
15
|
-
* limitations under the License.
|
|
16
|
-
*/
|
|
17
|
-
import { encryptionService } from './services/encryptionService.js';
|
|
18
|
-
import { createLogger } from './utils/logger.js';
|
|
19
|
-
const logger = createLogger('encryption-test');
|
|
20
|
-
try {
|
|
21
|
-
logger.info('Testing Database Encryption Service');
|
|
22
|
-
logger.info('=====================================');
|
|
23
|
-
// Test basic encryption/decryption
|
|
24
|
-
const testData = 'Hello, this is sensitive data!';
|
|
25
|
-
logger.info('Original:', testData);
|
|
26
|
-
const encrypted = encryptionService.encrypt(testData);
|
|
27
|
-
logger.info('Encrypted:', encrypted);
|
|
28
|
-
const decrypted = encryptionService.decrypt(encrypted);
|
|
29
|
-
logger.info('Decrypted:', decrypted);
|
|
30
|
-
logger.info('Basic encryption test:', testData === decrypted ? 'PASSED' : 'FAILED');
|
|
31
|
-
// Test object encryption
|
|
32
|
-
const testObject = {
|
|
33
|
-
message: 'Secret message',
|
|
34
|
-
artifacts: [{ type: 'code', content: 'logger.debug("secret");' }],
|
|
35
|
-
images: [
|
|
36
|
-
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==',
|
|
37
|
-
],
|
|
38
|
-
statistics: { tokens: 150, duration: 1200 },
|
|
39
|
-
};
|
|
40
|
-
logger.info('Testing object encryption');
|
|
41
|
-
logger.info('Original object:', JSON.stringify(testObject, null, 2));
|
|
42
|
-
const encryptedObject = encryptionService.encryptObject(testObject);
|
|
43
|
-
logger.info('Encrypted object:', encryptedObject);
|
|
44
|
-
const decryptedObject = encryptionService.decryptObject(encryptedObject);
|
|
45
|
-
logger.info('Decrypted object:', JSON.stringify(decryptedObject, null, 2));
|
|
46
|
-
logger.info('Object encryption test:', JSON.stringify(testObject) === JSON.stringify(decryptedObject)
|
|
47
|
-
? 'PASSED'
|
|
48
|
-
: 'FAILED');
|
|
49
|
-
// Test empty/null values
|
|
50
|
-
logger.info('Testing edge cases');
|
|
51
|
-
try {
|
|
52
|
-
const nullTest = encryptionService.encrypt('');
|
|
53
|
-
const nullDecrypted = encryptionService.decrypt(nullTest);
|
|
54
|
-
logger.info('Empty string test:', nullDecrypted === '' ? 'PASSED' : 'FAILED');
|
|
55
|
-
}
|
|
56
|
-
catch (error) {
|
|
57
|
-
logger.error('Empty string test failed:', error.message);
|
|
58
|
-
}
|
|
59
|
-
logger.info('Encryption service is ready for production');
|
|
60
|
-
logger.info('All sensitive data will be encrypted before storage in the database.');
|
|
61
|
-
}
|
|
62
|
-
catch (error) {
|
|
63
|
-
logger.error('Error running encryption tests:', error);
|
|
64
|
-
process.exit(1);
|
|
65
|
-
}
|
|
66
|
-
//# sourceMappingURL=test-encryption.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"test-encryption.js","sourceRoot":"","sources":["../src/test-encryption.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{d as t,f as n}from"./markdown-core-fkbHPd-g.js";import{n as r}from"./react-vendor-Co1u1rWb.js";import{t as i}from"./logger-BmpKNkls.js";import{J as a,Ot as o,Rt as s,Y as c,dt as l,it as u,n as d,ot as f,st as p,tt as m,ut as ee,vt as h}from"./ui-vendor-BJAeWL11.js";import{t as g}from"./utils-BaPYjs_z.js";import{t as _}from"./Button-BUjLpHmR.js";import{k as v,y}from"../assets/index-ONn9VIq7.js";import{t as b}from"./OptimizedSyntaxHighlighter-CNjLqj1Z.js";import{n as x,r as S,t as te}from"./artifactHtml-B7Oy2e__.js";var C=e(n(),1),w=r(),T=t(),E=i(`components:artifact-slide-out-panel`),D=320,O=.9,k=600,A=()=>{let{t:e}=v(),{artifactPanelOpen:t,artifactPanelArtifact:n,closeArtifactPanel:r,theme:i}=y(),[A,j]=(0,C.useState)(!1),[M,N]=(0,C.useState)(`preview`),[P,F]=(0,C.useState)(k),[I,L]=(0,C.useState)(!1),R=(0,C.useRef)(null),z=(0,C.useRef)(null),B=(0,C.useRef)(null),V=(0,C.useRef)(0),H=(0,C.useRef)(0),U=(0,C.useRef)(null),W=(0,C.useRef)(null),G=(0,C.useRef)(P),K=n?.id??null;K!==B.current&&(B.current=K,M!==`preview`&&N(`preview`));let q=(0,C.useCallback)(e=>{G.current=e,W.current===null&&(W.current=window.requestAnimationFrame(()=>{W.current=null,F(G.current)}))},[]),J=(0,C.useCallback)(()=>{U.current=null,L(!1),W.current!==null&&(window.cancelAnimationFrame(W.current),W.current=null,F(G.current))},[]),Y=(0,C.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),U.current=e.pointerId,H.current=P,V.current=e.clientX,G.current=P,e.currentTarget.setPointerCapture(e.pointerId),L(!0)},[P]),X=(0,C.useCallback)(e=>{if(!I||U.current!==null&&e.pointerId!==U.current)return;e.preventDefault();let t=V.current-e.clientX,n=window.innerWidth*O;q(Math.min(n,Math.max(D,H.current+t)))},[I,q]);if((0,C.useEffect)(()=>{if(!I){document.body.style.userSelect=``,document.body.style.cursor=``;return}let e=e=>{(U.current===null||e.pointerId===U.current)&&J()};return window.addEventListener(`pointermove`,X,{passive:!1}),window.addEventListener(`pointerup`,e),window.addEventListener(`pointercancel`,e),window.addEventListener(`blur`,J),document.body.style.userSelect=`none`,document.body.style.cursor=`col-resize`,()=>{window.removeEventListener(`pointermove`,X),window.removeEventListener(`pointerup`,e),window.removeEventListener(`pointercancel`,e),window.removeEventListener(`blur`,J),document.body.style.userSelect=``,document.body.style.cursor=``}},[I,X,J]),(0,C.useEffect)(()=>{let e=()=>{let e=window.innerWidth*O;P>e&&F(e)};return window.addEventListener(`resize`,e),()=>window.removeEventListener(`resize`,e)},[P]),(0,C.useEffect)(()=>{let e=e=>{e.key===`Escape`&&t&&r()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[t,r]),(0,C.useEffect)(()=>{let e=e=>{I||z.current&&!z.current.contains(e.target)&&t&&r()},n=setTimeout(()=>{window.addEventListener(`mousedown`,e)},100);return()=>{clearTimeout(n),window.removeEventListener(`mousedown`,e)}},[t,r,I]),!n)return null;let Z=n,ne=async e=>{try{await navigator.clipboard.writeText(e),j(!0),setTimeout(()=>j(!1),2e3)}catch(e){E.error(`Failed to copy:`,e)}},re=()=>{let e=Z.type===`html`?S(Z.content,Z.title):Z.content,t=new Blob([e],{type:ie(Z.type)}),n=URL.createObjectURL(t),r=document.createElement(`a`);r.href=n,r.download=`${Z.title}.${ae(Z.type)}`,document.body.appendChild(r),r.click(),document.body.removeChild(r),URL.revokeObjectURL(n)},ie=e=>{switch(e){case`html`:return`text/html`;case`react`:return`text/javascript`;case`svg`:return`image/svg+xml`;case`css`:return`text/css`;case`json`:return`application/json`;default:return`text/plain`}},ae=e=>{switch(e){case`html`:return`html`;case`react`:return`jsx`;case`svg`:return`svg`;case`css`:return`css`;case`json`:return`json`;default:return`txt`}},oe=()=>{switch(Z.type){case`html`:return(0,T.jsx)(c,{className:`h-5 w-5`});case`react`:return(0,T.jsx)(l,{className:`h-5 w-5`});case`svg`:return(0,T.jsx)(m,{className:`h-5 w-5`});case`code`:return(0,T.jsx)(l,{className:`h-5 w-5`});default:return(0,T.jsx)(m,{className:`h-5 w-5`})}},se=()=>(0,T.jsx)(`div`,{"data-testid":`artifact-html-fallback`,className:`w-full h-full flex items-center justify-center bg-gray-50 dark:bg-dark-100 rounded-lg border border-gray-200 dark:border-dark-200 p-4`,children:(0,T.jsxs)(`div`,{className:`max-w-sm text-center`,children:[(0,T.jsx)(o,{className:`h-8 w-8 text-primary-500 mx-auto mb-3`}),(0,T.jsx)(`p`,{className:`text-sm font-medium text-gray-900 dark:text-gray-100`,children:e(`artifacts.previewUnavailable`)}),(0,T.jsx)(`p`,{className:`mt-1 text-sm text-gray-600 dark:text-gray-400`,children:e(`artifacts.previewUnavailableDescription`)}),(0,T.jsxs)(_,{variant:`outline`,size:`sm`,onClick:()=>N(`code`),className:`mt-4`,children:[(0,T.jsx)(s,{className:`h-3.5 w-3.5 mr-1.5`}),e(`artifacts.code`)]})]})}),ce=()=>Z.content.trim()?(0,T.jsx)(`iframe`,{ref:R,"data-testid":`artifact-html-preview`,srcDoc:S(Z.content,Z.title),className:g(`w-full h-full border-0 rounded-lg bg-white`,I&&`pointer-events-none`),sandbox:x,allow:te,allowFullScreen:!0,title:Z.title}):se(),le=()=>{try{return(0,T.jsx)(`div`,{className:`w-full h-full flex items-center justify-center bg-gray-50 dark:bg-dark-100 rounded-lg overflow-auto p-4`,dangerouslySetInnerHTML:{__html:Z.content}})}catch{return(0,T.jsx)(`div`,{className:`w-full h-full flex items-center justify-center bg-gray-50 dark:bg-dark-100 rounded-lg`,children:(0,T.jsxs)(`div`,{className:`text-center`,children:[(0,T.jsx)(o,{className:`h-8 w-8 text-primary-500 mx-auto mb-2`}),(0,T.jsx)(`p`,{className:`text-sm text-gray-600 dark:text-dark-600`,children:e(`artifacts.invalidSvg`)})]})})}},Q=()=>(0,T.jsx)(`div`,{className:`h-full overflow-auto`,children:(0,T.jsx)(b,{language:(()=>{if(Z.language)return Z.language;switch(Z.type){case`html`:return`html`;case`react`:return`jsx`;case`svg`:return`xml`;case`json`:return`json`;default:return`text`}})(),isDark:i.mode===`dark`,className:`!m-0 !rounded-lg !h-full`,children:Z.content})}),ue=()=>{try{let e=JSON.parse(Z.content),t=JSON.stringify(e,null,2);return(0,T.jsx)(`div`,{className:`h-full overflow-auto`,children:(0,T.jsx)(b,{language:`json`,isDark:i.mode===`dark`,className:`!m-0 !rounded-lg !h-full`,children:t})})}catch{return(0,T.jsx)(`div`,{className:`w-full h-full flex items-center justify-center bg-gray-50 dark:bg-dark-100 rounded-lg`,children:(0,T.jsxs)(`div`,{className:`text-center`,children:[(0,T.jsx)(o,{className:`h-8 w-8 text-primary-500 mx-auto mb-2`}),(0,T.jsx)(`p`,{className:`text-sm text-gray-600 dark:text-dark-600`,children:e(`artifacts.invalidJson`)})]})})}},de=()=>{if(M===`code`)return Q();switch(Z.type){case`html`:return ce();case`svg`:return le();case`json`:return ue();default:return Q()}},fe=()=>Z.type===`html`||Z.type===`svg`||Z.type===`react`,$=typeof window<`u`&&window.innerWidth<640,pe=$?`100%`:`${P}px`;return(0,w.createPortal)((0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(`div`,{className:g(`fixed inset-0 bg-black/30 dark:bg-black/50 z-40 transition-opacity duration-300`,t?`opacity-100`:`opacity-0 pointer-events-none`)}),I&&(0,T.jsx)(`div`,{className:`fixed inset-0 z-[55] cursor-col-resize select-none`,"aria-hidden":`true`}),(0,T.jsxs)(`div`,{ref:z,"data-testid":`artifact-slide-out-panel`,style:{width:pe},className:g(`fixed top-0 right-0 h-full z-50`,`bg-white dark:bg-dark-25`,`shadow-2xl border-l border-gray-200 dark:border-dark-200`,`flex flex-col`,`transform transition-transform duration-300 ease-out`,t?`translate-x-0`:`translate-x-full`),children:[!$&&(0,T.jsxs)(`div`,{onPointerDown:Y,"data-testid":`artifact-resize-handle`,className:g(`absolute left-0 top-0 bottom-0 w-4 -ml-2 cursor-col-resize z-[56]`,`flex items-center justify-center`,`touch-none select-none group`),children:[(0,T.jsx)(`div`,{className:g(`w-1 h-16 rounded-full transition-all duration-200`,`bg-gray-300 dark:bg-dark-300`,`group-hover:bg-primary-500 group-hover:h-24`,I&&`bg-primary-500 h-24`)}),(0,T.jsx)(`div`,{className:g(`absolute left-1/2 -translate-x-1/2 opacity-0 group-hover:opacity-100 transition-opacity`,`text-gray-400 dark:text-dark-500`,I&&`opacity-100`),children:(0,T.jsx)(a,{className:`h-4 w-4`})})]}),(0,T.jsxs)(`div`,{className:`flex items-center justify-between p-4 border-b border-gray-200 dark:border-dark-200`,children:[(0,T.jsxs)(`div`,{className:`flex items-center gap-3 min-w-0 flex-1`,children:[(0,T.jsx)(`div`,{className:`text-gray-600 dark:text-gray-400 flex-shrink-0`,children:oe()}),(0,T.jsx)(`h2`,{className:`font-semibold text-gray-900 dark:text-gray-100 truncate`,children:Z.title}),(0,T.jsx)(`span`,{className:`text-xs bg-primary-50 dark:bg-primary-900/20 text-primary-700 dark:text-primary-300 px-2 py-1 rounded-full font-medium flex-shrink-0`,children:Z.type.toUpperCase()})]}),(0,T.jsx)(_,{variant:`ghost`,size:`sm`,onClick:r,className:`h-8 w-8 p-0 hover:bg-gray-100 dark:hover:bg-dark-200 flex-shrink-0`,title:e(`artifacts.closePanelEsc`),children:(0,T.jsx)(d,{className:`h-5 w-5`})})]}),(0,T.jsxs)(`div`,{className:`flex items-center justify-between px-4 py-2 border-b border-gray-100 dark:border-dark-200 bg-gray-50 dark:bg-dark-100/50`,children:[(0,T.jsx)(`div`,{className:`flex items-center gap-1`,children:fe()&&(0,T.jsxs)(T.Fragment,{children:[(0,T.jsxs)(_,{variant:M===`preview`?`primary`:`ghost`,size:`sm`,onClick:()=>N(`preview`),className:`h-8 px-3 text-xs`,title:e(`artifacts.previewMode`),children:[(0,T.jsx)(u,{className:`h-3.5 w-3.5 mr-1.5`}),e(`artifacts.preview`)]}),(0,T.jsxs)(_,{variant:M===`code`?`primary`:`ghost`,size:`sm`,onClick:()=>N(`code`),className:`h-8 px-3 text-xs`,title:e(`artifacts.codeMode`),children:[(0,T.jsx)(s,{className:`h-3.5 w-3.5 mr-1.5`}),e(`artifacts.code`)]})]})}),(0,T.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,T.jsx)(_,{variant:`ghost`,size:`sm`,onClick:()=>ne(Z.content),className:`h-8 px-3 text-xs hover:bg-gray-100 dark:hover:bg-dark-200`,title:e(`artifacts.copyContent`),children:A?(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(h,{className:`h-3.5 w-3.5 mr-1.5 text-green-500`}),e(`artifacts.copied`)]}):(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(ee,{className:`h-3.5 w-3.5 mr-1.5`}),e(`artifacts.copyButton`)]})}),(0,T.jsxs)(_,{variant:`ghost`,size:`sm`,onClick:re,className:`h-8 px-3 text-xs hover:bg-gray-100 dark:hover:bg-dark-200`,title:e(`artifacts.download`),children:[(0,T.jsx)(p,{className:`h-3.5 w-3.5 mr-1.5`}),e(`artifacts.download`)]}),(Z.type===`html`||Z.type===`react`)&&(0,T.jsxs)(_,{variant:`ghost`,size:`sm`,onClick:()=>{let e=window.open(``,`_blank`);e&&(e.document.write(S(Z.content,Z.title)),e.document.close())},className:`h-8 px-3 text-xs hover:bg-gray-100 dark:hover:bg-dark-200`,title:e(`artifacts.openInNewWindow`),children:[(0,T.jsx)(f,{className:`h-3.5 w-3.5 mr-1.5`}),e(`artifacts.open`)]})]})]}),Z.description&&(0,T.jsx)(`div`,{className:`px-4 py-3 border-b border-gray-100 dark:border-dark-200`,children:(0,T.jsx)(`p`,{className:`text-sm text-gray-600 dark:text-gray-400`,children:Z.description})}),(0,T.jsx)(`div`,{className:`flex-1 p-4 overflow-hidden`,children:de()}),(0,T.jsx)(`div`,{className:`px-4 py-2 border-t border-gray-100 dark:border-dark-200 bg-gray-50 dark:bg-dark-100/50`,children:(0,T.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,T.jsxs)(`div`,{className:`text-xs text-gray-500 dark:text-gray-400`,children:[e(`artifacts.created`),`:`,` `,new Date(Z.createdAt).toLocaleString()]}),!$&&(0,T.jsx)(`div`,{className:`text-xs text-gray-400 dark:text-dark-500`,children:e(`artifacts.dragEdgeToResize`)})]})})]})]}),document.body)};export{A as ArtifactSlideOutPanel};
|