@artilingo/artiframe-cli 2.0.4 → 3.0.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/LICENSE +660 -660
- package/README.md +64 -118
- package/bin/artiframe.js +0 -0
- package/bin/artiframe.php +0 -0
- package/core-stubs/app/ApiAuthControl.php +76 -0
- package/core-stubs/app/ApiControl.php +81 -35
- package/core-stubs/app/AuthControl.php +39 -0
- package/core-stubs/app/Database.php +36 -35
- package/core-stubs/app/DotEnv.php +19 -1
- package/core-stubs/app/ViewControl.php +47 -1
- package/core-stubs/bin/SQLMethod.php +261 -0
- package/core-stubs/bin/SystemMethod.php +115 -74
- package/core-stubs/bin/ViewMethod.php +19 -5
- package/core-stubs/docs/de.html +4325 -4347
- package/core-stubs/docs/en.html +4325 -4347
- package/core-stubs/docs/es.html +4325 -4347
- package/core-stubs/docs/fr.html +4325 -4347
- package/core-stubs/docs/tr.html +117 -46
- package/core-stubs/public/403.php +52 -0
- package/core-stubs/public/assets/css/components/header.css +174 -0
- package/core-stubs/public/assets/css/components/mobilenav.css +198 -0
- package/core-stubs/public/assets/css/components/sidebar.css +184 -0
- package/core-stubs/public/assets/css/root/app.css +975 -38
- package/core-stubs/public/assets/css/root/root.css +64 -0
- package/core-stubs/public/assets/js/components/header.js +380 -0
- package/core-stubs/public/assets/js/components/mobilenav.js +97 -0
- package/core-stubs/public/assets/js/components/theme-modal.js +74 -0
- package/core-stubs/public/assets/js/root/app.js +1870 -0
- package/core-stubs/public/includes/footer.php +4 -5
- package/core-stubs/public/includes/head-auth.php +65 -0
- package/core-stubs/public/includes/head.php +56 -17
- package/core-stubs/public/includes/header.php +135 -1
- package/core-stubs/public/includes/mobilenav.php +75 -3
- package/core-stubs/public/includes/sidebar.php +186 -1
- package/core-stubs/public/includes/theme-modal.php +1 -0
- package/db-studio/debug.log +3 -0
- package/db-studio/index.html +1755 -0
- package/db-studio/launcher.html +102 -0
- package/db-studio/launcher.js +180 -0
- package/db-studio/logo.svg +22 -0
- package/db-studio/main.js +568 -0
- package/db-studio/package-lock.json +1034 -0
- package/db-studio/package.json +16 -0
- package/db-studio/preload.js +29 -0
- package/devops-studio/api-inspector.js +222 -0
- package/devops-studio/index.html +1892 -0
- package/devops-studio/logo.svg +22 -0
- package/devops-studio/main.js +67 -0
- package/devops-studio/make-wizard.js +635 -0
- package/devops-studio/package-lock.json +871 -0
- package/devops-studio/package.json +12 -0
- package/package.json +5 -2
- package/scripts/postinstall.js +44 -8
- package/server-studio/.json-404-guard +1 -0
- package/server-studio/index.html +283 -0
- package/server-studio/logo.svg +22 -0
- package/server-studio/main.js +133 -0
- package/server-studio/package-lock.json +1179 -0
- package/server-studio/package.json +15 -0
- package/server-studio/router.php +99 -0
- package/src/App.php +29 -0
- package/src/Commands/AddCommand.php +26 -9
- package/src/Commands/DbExportCommand.php +131 -0
- package/src/Commands/DbStartCommand.php +46 -0
- package/src/Commands/DevopsCommand.php +35 -0
- package/src/Commands/GoCommand.php +48 -48
- package/src/Commands/ListCommand.php +68 -68
- package/src/Commands/MakeApiCommand.php +6 -1
- package/src/Commands/MakeViewCommand.php +25 -2
- package/src/Commands/NewProjectCommand.php +16 -11
- package/src/Commands/OptimizeCommand.php +61 -0
- package/src/Commands/RemoveCommand.php +35 -7
- package/src/Commands/ServeCommand.php +46 -91
- package/src/Commands/ShowCommand.php +24 -24
- package/src/Commands/UpgradeCommand.php +39 -10
- package/stubs/make/api-switch-case.stub +1 -1
- package/stubs/make/auth-api-standart.stub +20 -0
- package/stubs/make/auth-api-switch-case.stub +38 -0
- package/stubs/make/auth-view.stub +26 -0
- package/stubs/make/class.stub +10 -2
- package/stubs/make/view.stub +3 -0
- package/stubs/service/image.stub +334 -334
- package/stubs/service/iyzico.stub +637 -637
- package/stubs/service/jwt.stub +312 -312
- package/stubs/service/phpmailer.stub +143 -143
- package/stubs/service/pusher.stub +232 -232
- package/stubs/service/qrcode.stub +169 -169
- package/stubs/service/redis.stub +361 -361
- package/stubs/service/s3.stub +377 -377
- package/stubs/service/stripe.stub +526 -526
- package/stubs/service/twilio.stub +361 -361
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="tr">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<title>ArtiFrame DB Studio - Launcher</title>
|
|
6
|
+
<style>
|
|
7
|
+
body { margin: 0; padding: 0; background-color: #1e1e1e; color: #d4d4d4; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; display: flex; flex-direction: column; align-items: center; height: 100vh; justify-content: center; overflow: hidden; }
|
|
8
|
+
.container { width: 80%; max-width: 800px; display: flex; flex-direction: column; gap: 20px; }
|
|
9
|
+
.header { text-align: center; margin-bottom: 20px; }
|
|
10
|
+
.header h1 { font-size: 36px; margin: 0; font-weight: 300; }
|
|
11
|
+
.header h1 span { font-weight: bold; color: #007acc; }
|
|
12
|
+
.header p { color: #888; font-size: 14px; margin-top: 5px; }
|
|
13
|
+
.grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 20px; }
|
|
14
|
+
.card { background: #252526; border: 1px solid #333; border-radius: 8px; padding: 25px; text-align: center; cursor: pointer; transition: all 0.2s; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 15px; }
|
|
15
|
+
.card:hover { border-color: #007acc; background: #2d2d30; transform: translateY(-2px); }
|
|
16
|
+
.card.success:hover { border-color: #2ecc71; }
|
|
17
|
+
.card.warning:hover { border-color: #f39c12; }
|
|
18
|
+
.icon { font-size: 40px; }
|
|
19
|
+
.title { font-size: 16px; font-weight: 600; color: #fff; }
|
|
20
|
+
.desc { font-size: 12px; color: #aaa; line-height: 1.4; }
|
|
21
|
+
|
|
22
|
+
#workspace-selector { margin-top: 30px; padding: 15px; background: #2d2d30; border-radius: 6px; border: 1px dashed #555; text-align: center; font-size: 12px; color: #aaa; }
|
|
23
|
+
#workspace-selector a { color: #007acc; cursor: pointer; text-decoration: none; }
|
|
24
|
+
#workspace-selector a:hover { text-decoration: underline; }
|
|
25
|
+
</style>
|
|
26
|
+
</head>
|
|
27
|
+
<body>
|
|
28
|
+
<div class="container">
|
|
29
|
+
<div class="header">
|
|
30
|
+
<h1>ArtiFrame <span>DB Studio</span></h1>
|
|
31
|
+
<p>Veritabanı Mimari ve Geliştirme Platformu</p>
|
|
32
|
+
</div>
|
|
33
|
+
|
|
34
|
+
<div class="grid">
|
|
35
|
+
<div class="card success" onclick="createNewProject()">
|
|
36
|
+
<div class="icon">🚀</div>
|
|
37
|
+
<div class="title">Yeni Proje Başlat</div>
|
|
38
|
+
<div class="desc">Çalışma alanınızda sıfırdan yeni bir ArtiFrame projesi oluşturun.</div>
|
|
39
|
+
</div>
|
|
40
|
+
|
|
41
|
+
<div class="card" onclick="loadProject()">
|
|
42
|
+
<div class="icon">📂</div>
|
|
43
|
+
<div class="title">Var Olan Projeyi Yükle</div>
|
|
44
|
+
<div class="desc">Mevcut projelerinizi görüntüleyin ve geliştirmeye devam edin.</div>
|
|
45
|
+
</div>
|
|
46
|
+
|
|
47
|
+
<div class="card warning" onclick="previewSchema()">
|
|
48
|
+
<div class="icon">👁️</div>
|
|
49
|
+
<div class="title">Şema Önizle (.artiframe)</div>
|
|
50
|
+
<div class="desc">Bir veritabanı şemasını açarak inceleyin veya yeni projeye dönüştürün.</div>
|
|
51
|
+
</div>
|
|
52
|
+
</div>
|
|
53
|
+
|
|
54
|
+
<div id="workspace-selector">
|
|
55
|
+
Çalışma Alanı (Workspace): <span id="workspace-path" style="color:#d4d4d4; margin-right: 10px;">Belirlenmedi</span>
|
|
56
|
+
<a onclick="selectWorkspace()">[Değiştir]</a>
|
|
57
|
+
</div>
|
|
58
|
+
</div>
|
|
59
|
+
|
|
60
|
+
<script src="launcher.js"></script>
|
|
61
|
+
|
|
62
|
+
<!-- Custom Modals -->
|
|
63
|
+
<div id="modal-overlay" style="display:none; position:fixed; top:0; left:0; width:100%; height:100%; background:rgba(0,0,0,0.8); z-index:999; justify-content:center; align-items:center;">
|
|
64
|
+
|
|
65
|
+
<!-- Prompt Modal -->
|
|
66
|
+
<div id="prompt-modal" style="display:none; background:#252526; padding:25px; border-radius:8px; border:1px solid #444; width:350px;">
|
|
67
|
+
<h3 id="prompt-title" style="margin-top:0; color:#d4d4d4; font-size:16px;">Giriş Bekleniyor</h3>
|
|
68
|
+
<p id="prompt-desc" style="font-size:12px; color:#aaa; margin-bottom:15px;"></p>
|
|
69
|
+
<input type="text" id="prompt-input" style="width:100%; padding:8px; background:#1e1e1e; border:1px solid #555; color:white; margin-bottom:15px; box-sizing:border-box; border-radius:4px;">
|
|
70
|
+
<div style="display:flex; justify-content:flex-end; gap:10px;">
|
|
71
|
+
<button class="btn" style="background:#555; color:white; padding:8px 12px; border:none; cursor:pointer;" onclick="closeModal()">İptal</button>
|
|
72
|
+
<button class="btn" style="background:#007acc; color:white; padding:8px 12px; border:none; cursor:pointer;" onclick="submitPrompt()">Tamam</button>
|
|
73
|
+
</div>
|
|
74
|
+
</div>
|
|
75
|
+
|
|
76
|
+
<!-- Confirm Modal (For Preview Choice) -->
|
|
77
|
+
<div id="preview-choice-modal" style="display:none; background:#252526; padding:25px; border-radius:8px; border:1px solid #444; width:400px; text-align:center;">
|
|
78
|
+
<h3 style="margin-top:0; color:#f39c12; font-size:16px;">Şema Önizleme</h3>
|
|
79
|
+
<p style="font-size:12px; color:#aaa; margin-bottom:20px; line-height:1.5;">İçe aktardığınız şemayı sadece <b>ER Diyagramı</b> olarak incelemek mi istersiniz, yoksa bu şema ile doğrudan <b>Yeni Bir Proje</b> mi kurmak istersiniz?</p>
|
|
80
|
+
<div style="display:flex; flex-direction:column; gap:10px;">
|
|
81
|
+
<button class="btn" style="background:#007acc; color:white; padding:10px; border:none; cursor:pointer;" onclick="choosePreview('inspect')">👁️ Sadece Diyagramı İncele</button>
|
|
82
|
+
<button class="btn" style="background:#2ecc71; color:#111; padding:10px; border:none; cursor:pointer; font-weight:bold;" onclick="choosePreview('scaffold')">🚀 Bu Şema İle Proje Kur</button>
|
|
83
|
+
<button class="btn" style="background:#555; color:white; padding:10px; border:none; cursor:pointer;" onclick="closeModal()">İptal</button>
|
|
84
|
+
</div>
|
|
85
|
+
</div>
|
|
86
|
+
|
|
87
|
+
<!-- Project List Modal -->
|
|
88
|
+
<div id="project-list-modal" style="display:none; background:#252526; padding:25px; border-radius:8px; border:1px solid #444; width:350px;">
|
|
89
|
+
<h3 style="margin-top:0; color:#d4d4d4; font-size:16px;">Proje Seçin</h3>
|
|
90
|
+
<p style="font-size:12px; color:#aaa; margin-bottom:15px;">Çalışma alanınızdaki mevcut projeler:</p>
|
|
91
|
+
<select id="project-select" style="width:100%; padding:8px; background:#1e1e1e; border:1px solid #555; color:white; margin-bottom:15px; border-radius:4px;" size="5">
|
|
92
|
+
</select>
|
|
93
|
+
<div style="display:flex; justify-content:flex-end; gap:10px;">
|
|
94
|
+
<button class="btn" style="background:#555; color:white; padding:8px 12px; border:none; cursor:pointer;" onclick="closeModal()">İptal</button>
|
|
95
|
+
<button class="btn" style="background:#007acc; color:white; padding:8px 12px; border:none; cursor:pointer;" onclick="submitProjectList()">Aç</button>
|
|
96
|
+
</div>
|
|
97
|
+
</div>
|
|
98
|
+
|
|
99
|
+
</div>
|
|
100
|
+
|
|
101
|
+
</body>
|
|
102
|
+
</html>
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
|
|
2
|
+
let currentWorkspace = null;
|
|
3
|
+
let promptCallback = null;
|
|
4
|
+
let previewDataCache = null;
|
|
5
|
+
|
|
6
|
+
async function initLauncher() {
|
|
7
|
+
if (window.api && window.api.getWorkspace) {
|
|
8
|
+
currentWorkspace = await window.api.getWorkspace();
|
|
9
|
+
if (currentWorkspace) {
|
|
10
|
+
document.getElementById('workspace-path').innerText = currentWorkspace;
|
|
11
|
+
} else {
|
|
12
|
+
document.getElementById('workspace-path').innerText = "Belirlenmedi (Lütfen Seçin)";
|
|
13
|
+
document.getElementById('workspace-path').style.color = "#f39c12";
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
async function selectWorkspace() {
|
|
19
|
+
if (window.api && window.api.selectDirectory) {
|
|
20
|
+
const dir = await window.api.selectDirectory();
|
|
21
|
+
if (dir) {
|
|
22
|
+
await window.api.setWorkspace(dir);
|
|
23
|
+
currentWorkspace = dir;
|
|
24
|
+
document.getElementById('workspace-path').innerText = dir;
|
|
25
|
+
document.getElementById('workspace-path').style.color = "#d4d4d4";
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function openPrompt(title, desc, callback) {
|
|
31
|
+
document.getElementById('modal-overlay').style.display = 'flex';
|
|
32
|
+
document.getElementById('prompt-modal').style.display = 'block';
|
|
33
|
+
document.getElementById('preview-choice-modal').style.display = 'none';
|
|
34
|
+
document.getElementById('project-list-modal').style.display = 'none';
|
|
35
|
+
|
|
36
|
+
document.getElementById('prompt-title').innerText = title;
|
|
37
|
+
document.getElementById('prompt-desc').innerText = desc;
|
|
38
|
+
document.getElementById('prompt-input').value = '';
|
|
39
|
+
document.getElementById('prompt-input').focus();
|
|
40
|
+
promptCallback = callback;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function closeModal() {
|
|
44
|
+
document.getElementById('modal-overlay').style.display = 'none';
|
|
45
|
+
promptCallback = null;
|
|
46
|
+
previewDataCache = null;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function submitPrompt() {
|
|
50
|
+
const val = document.getElementById('prompt-input').value.trim();
|
|
51
|
+
if (val && promptCallback) {
|
|
52
|
+
const cb = promptCallback;
|
|
53
|
+
closeModal();
|
|
54
|
+
cb(val);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
async function createNewProject() {
|
|
59
|
+
if (!currentWorkspace) {
|
|
60
|
+
document.getElementById('workspace-path').innerText = "Önce Buradan Çalışma Alanı Seçin ->";
|
|
61
|
+
document.getElementById('workspace-path').style.color = "#e74c3c";
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
openPrompt("Yeni Proje Başlat", "Projeniz için bir klasör adı girin (Örn: my-app):\n(Proje " + currentWorkspace + " dizininde kurulacaktır)", async (pName) => {
|
|
66
|
+
if (window.api && window.api.scaffoldProject) {
|
|
67
|
+
const btn = document.querySelector('.card.success');
|
|
68
|
+
const oldHtml = btn.innerHTML;
|
|
69
|
+
btn.innerHTML = "<div class='title'>🚀 Proje Kuruluyor...</div>";
|
|
70
|
+
|
|
71
|
+
const res = await window.api.scaffoldProject(pName, { tables: [] }, currentWorkspace);
|
|
72
|
+
|
|
73
|
+
if (res.success) {
|
|
74
|
+
window.api.openProject(res.path);
|
|
75
|
+
} else {
|
|
76
|
+
alert("Hata: " + res.error);
|
|
77
|
+
btn.innerHTML = oldHtml;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
async function loadProject() {
|
|
84
|
+
if (!currentWorkspace) {
|
|
85
|
+
document.getElementById('workspace-path').innerText = "Önce Buradan Çalışma Alanı Seçin ->";
|
|
86
|
+
document.getElementById('workspace-path').style.color = "#e74c3c";
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// We should get all directories in workspace, not just the ones with .env, because .env might not exist yet if scaffold failed or just created.
|
|
91
|
+
// Actually, getProjects in main.js filters by .env or 'artiframe'. Let's ensure it shows more.
|
|
92
|
+
const projects = await window.api.getProjects(currentWorkspace);
|
|
93
|
+
if (projects.length === 0) {
|
|
94
|
+
openPrompt("Proje Bulunamadı", "Seçili çalışma alanında proje (.env veya artiframe dosyası içeren klasör) bulunamadı.", async (dir) => {
|
|
95
|
+
// Do nothing special
|
|
96
|
+
});
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// Open custom project list modal
|
|
101
|
+
document.getElementById('modal-overlay').style.display = 'flex';
|
|
102
|
+
document.getElementById('prompt-modal').style.display = 'none';
|
|
103
|
+
document.getElementById('preview-choice-modal').style.display = 'none';
|
|
104
|
+
document.getElementById('project-list-modal').style.display = 'block';
|
|
105
|
+
|
|
106
|
+
const select = document.getElementById('project-select');
|
|
107
|
+
select.innerHTML = '';
|
|
108
|
+
projects.forEach(p => {
|
|
109
|
+
const opt = document.createElement('option');
|
|
110
|
+
opt.value = p;
|
|
111
|
+
opt.innerText = p;
|
|
112
|
+
select.appendChild(opt);
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
function submitProjectList() {
|
|
117
|
+
const select = document.getElementById('project-select');
|
|
118
|
+
if (select.value) {
|
|
119
|
+
const pPath = currentWorkspace + '/' + select.value;
|
|
120
|
+
closeModal();
|
|
121
|
+
if (window.api && window.api.openProject) {
|
|
122
|
+
window.api.openProject(pPath);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
async function previewSchema() {
|
|
128
|
+
if (!window.api || !window.api.loadArtiframeFile) return;
|
|
129
|
+
|
|
130
|
+
const res = await window.api.loadArtiframeFile();
|
|
131
|
+
if (!res) return; // User canceled dialog
|
|
132
|
+
|
|
133
|
+
if (res.error) {
|
|
134
|
+
alert(res.error);
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
previewDataCache = res.data.schema;
|
|
139
|
+
|
|
140
|
+
// Show custom choice modal
|
|
141
|
+
document.getElementById('modal-overlay').style.display = 'flex';
|
|
142
|
+
document.getElementById('prompt-modal').style.display = 'none';
|
|
143
|
+
document.getElementById('project-list-modal').style.display = 'none';
|
|
144
|
+
document.getElementById('preview-choice-modal').style.display = 'block';
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
function choosePreview(action) {
|
|
148
|
+
if (!previewDataCache) return;
|
|
149
|
+
|
|
150
|
+
const schema = previewDataCache;
|
|
151
|
+
closeModal();
|
|
152
|
+
|
|
153
|
+
if (action === 'inspect') {
|
|
154
|
+
if (window.api && window.api.previewSchemaFile) {
|
|
155
|
+
window.api.previewSchemaFile(schema);
|
|
156
|
+
}
|
|
157
|
+
} else if (action === 'scaffold') {
|
|
158
|
+
if (!currentWorkspace) {
|
|
159
|
+
document.getElementById('workspace-path').innerText = "Önce Buradan Çalışma Alanı Seçin ->";
|
|
160
|
+
document.getElementById('workspace-path').style.color = "#e74c3c";
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
openPrompt("Proje Kurulumu", "Bu şema ile kurulacak proje için klasör adı girin (Örn: blog-app):", async (pName) => {
|
|
165
|
+
const btn = document.querySelector('.card.warning');
|
|
166
|
+
const oldHtml = btn.innerHTML;
|
|
167
|
+
btn.innerHTML = "<div class='title'>🚀 Proje Kuruluyor...</div>";
|
|
168
|
+
|
|
169
|
+
const res = await window.api.scaffoldProject(pName, schema, currentWorkspace);
|
|
170
|
+
if (res.success) {
|
|
171
|
+
window.api.openProject(res.path);
|
|
172
|
+
} else {
|
|
173
|
+
alert("Hata: " + res.error);
|
|
174
|
+
btn.innerHTML = oldHtml;
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
document.addEventListener('DOMContentLoaded', initLauncher);
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<svg id="katman_2" data-name="katman 2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 144.49 94.09">
|
|
3
|
+
<defs>
|
|
4
|
+
<style>
|
|
5
|
+
.cls-1 {
|
|
6
|
+
fill: #099772;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.cls-2 {
|
|
10
|
+
fill: #0a9872;
|
|
11
|
+
}
|
|
12
|
+
</style>
|
|
13
|
+
</defs>
|
|
14
|
+
<g id="katman_1" data-name="katman 1">
|
|
15
|
+
<g>
|
|
16
|
+
<path class="cls-2" d="M131.15,38.06c.67-.18,1.4-.1,2.26.14.32-3.12,2.59-5.34,5.55-5.33s5.5,2.5,5.53,5.43-2.23,5.38-5.12,5.59c-3.09.22-5.71-2.08-5.9-5.29-34.52,2.36-67.93,12.42-97.08,31.26-5.61,3.7-11,7.44-16,11.83l-6.13,12.38-14.26-.02,13.95-27.62,7.14-14.06L47.82.06l21.37,41.64c-3.96,1.03-7.73,2.29-11.62,3.65l-9.74-19.89-2.9,5.99-14.53,29.82c25.42-14.09,52.79-21.29,81.35-23.22l5.69-.27,11.17.03c.86,0,1.58.49,2.52.24Z"/>
|
|
17
|
+
<polygon class="cls-2" points="64.24 58.84 75.54 54.2 90.45 83.55 112.61 83.52 112.61 44.51 122.99 43.06 122.99 94.08 81.55 94.09 72.23 75.24 64.24 58.84"/>
|
|
18
|
+
<path class="cls-1" d="M112.61,33.97V10.34s-53.64.02-53.64.02L54.05.7c.04-.06.09-.22.35-.22h68.33s0,33.6,0,33.6l-10.13-.11Z"/>
|
|
19
|
+
<path class="cls-2" d="M112.61,33.97l10.13.11V.48s-68.34,0-68.34,0c-.26,0-.31.16-.35.22-.3-.09-.39-.7.07-.7h68.84s0,34.31,0,34.31h-7.91c-.8.25-1.56.34-2.36.21-.07-.2-.1-.34-.1-.56Z"/>
|
|
20
|
+
</g>
|
|
21
|
+
</g>
|
|
22
|
+
</svg>
|