Compare commits
No commits in common. "main" and "master" have entirely different histories.
3
.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
node_modules/
|
||||
*/node_modules/
|
||||
*/build/
|
||||
166
admin.php
Normal file
@ -0,0 +1,166 @@
|
||||
<?php
|
||||
require_once __DIR__ . '/db/config.php';
|
||||
|
||||
// Simple handling of form submissions
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
if (isset($_POST['action']) && $_POST['action'] === 'add') {
|
||||
$keywords = $_POST['keywords'] ?? '';
|
||||
$answer = $_POST['answer'] ?? '';
|
||||
if ($keywords && $answer) {
|
||||
$stmt = db()->prepare("INSERT INTO faqs (keywords, answer) VALUES (?, ?)");
|
||||
$stmt->execute([$keywords, $answer]);
|
||||
}
|
||||
} elseif (isset($_POST['action']) && $_POST['action'] === 'delete') {
|
||||
$id = $_POST['id'] ?? 0;
|
||||
if ($id) {
|
||||
$stmt = db()->prepare("DELETE FROM faqs WHERE id = ?");
|
||||
$stmt->execute([$id]);
|
||||
}
|
||||
} elseif (isset($_POST['action']) && $_POST['action'] === 'update_settings') {
|
||||
$token = $_POST['telegram_token'] ?? '';
|
||||
$stmt = db()->prepare("INSERT INTO settings (setting_key, setting_value) VALUES ('telegram_token', ?) ON DUPLICATE KEY UPDATE setting_value = ?");
|
||||
$stmt->execute([$token, $token]);
|
||||
}
|
||||
header("Location: admin.php");
|
||||
exit;
|
||||
}
|
||||
|
||||
$faqs = db()->query("SELECT * FROM faqs ORDER BY created_at DESC")->fetchAll();
|
||||
$messages = db()->query("SELECT * FROM messages ORDER BY created_at DESC LIMIT 50")->fetchAll();
|
||||
|
||||
$telegramToken = '';
|
||||
$stmt = db()->query("SELECT setting_value FROM settings WHERE setting_key = 'telegram_token'");
|
||||
$row = $stmt->fetch();
|
||||
if ($row) {
|
||||
$telegramToken = $row['setting_value'];
|
||||
}
|
||||
?>
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Admin - FAQ Manager</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&display=swap" rel="stylesheet">
|
||||
<link rel="stylesheet" href="assets/css/custom.css?v=<?php echo time(); ?>">
|
||||
<style>
|
||||
.btn-delete {
|
||||
background: #dc3545;
|
||||
color: white;
|
||||
border: none;
|
||||
padding: 0.25rem 0.5rem;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.btn-add {
|
||||
background: #212529;
|
||||
color: white;
|
||||
border: none;
|
||||
padding: 0.5rem 1rem;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
margin-top: 1rem;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="bg-animations">
|
||||
<div class="blob blob-1"></div>
|
||||
<div class="blob blob-2"></div>
|
||||
<div class="blob blob-3"></div>
|
||||
</div>
|
||||
<div class="admin-container">
|
||||
<div style="display: flex; justify-content: space-between; align-items: center;">
|
||||
<h1>FAQ Manager</h1>
|
||||
<a href="index.php" class="admin-link">Back to Chat</a>
|
||||
</div>
|
||||
|
||||
<div class="admin-card" style="background: rgba(255, 255, 255, 0.6); padding: 2rem; border-radius: 20px; border: 1px solid rgba(255, 255, 255, 0.5); margin-bottom: 2.5rem; box-shadow: 0 10px 30px rgba(0,0,0,0.05);">
|
||||
<h3 style="margin-top: 0; margin-bottom: 1.5rem; font-weight: 700;">Telegram Bot Settings</h3>
|
||||
<form method="POST">
|
||||
<input type="hidden" name="action" value="update_settings">
|
||||
<div class="form-group">
|
||||
<label for="telegram_token">Telegram Bot Token</label>
|
||||
<input type="text" name="telegram_token" id="telegram_token" class="form-control" placeholder="Paste your bot token from @BotFather" value="<?= htmlspecialchars($telegramToken) ?>">
|
||||
</div>
|
||||
<p style="font-size: 0.85em; color: #555; margin-top: 0.5rem;">
|
||||
Webhook URL: <code>https://<?= $_SERVER['HTTP_HOST'] ?>/api/telegram_webhook.php</code>
|
||||
</p>
|
||||
<button type="submit" class="btn-add" style="background: #0088cc; color: white; border: none; padding: 0.8rem 1.5rem; border-radius: 12px; cursor: pointer; font-weight: 600; width: 100%; transition: all 0.3s ease;">Save Token</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="admin-card" style="background: rgba(255, 255, 255, 0.6); padding: 2rem; border-radius: 20px; border: 1px solid rgba(255, 255, 255, 0.5); margin-bottom: 2.5rem; box-shadow: 0 10px 30px rgba(0,0,0,0.05);">
|
||||
<h3 style="margin-top: 0; margin-bottom: 1.5rem; font-weight: 700;">Add New FAQ</h3>
|
||||
<form method="POST">
|
||||
<input type="hidden" name="action" value="add">
|
||||
<div class="form-group">
|
||||
<label for="keywords">Keywords (comma separated)</label>
|
||||
<input type="text" name="keywords" id="keywords" class="form-control" placeholder="e.g. price, cost, dollar" required>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="answer">Answer</label>
|
||||
<textarea name="answer" id="answer" class="form-control" rows="3" placeholder="Enter the answer..." required></textarea>
|
||||
</div>
|
||||
<button type="submit" class="btn-add" style="background: #212529; color: white; border: none; padding: 0.8rem 1.5rem; border-radius: 12px; cursor: pointer; font-weight: 600; width: 100%; transition: all 0.3s ease;">Save FAQ</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<h3>Existing FAQs</h3>
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Keywords</th>
|
||||
<th>Answer</th>
|
||||
<th>Actions</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach ($faqs as $faq): ?>
|
||||
<tr>
|
||||
<td><?= htmlspecialchars($faq['keywords']) ?></td>
|
||||
<td><?= htmlspecialchars($faq['answer']) ?></td>
|
||||
<td>
|
||||
<form method="POST" style="display:inline;" onsubmit="return confirm('Delete this FAQ?');">
|
||||
<input type="hidden" name="action" value="delete">
|
||||
<input type="hidden" name="id" value="<?= $faq['id'] ?>">
|
||||
<button type="submit" class="btn-delete">Delete</button>
|
||||
</form>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h3 style="margin-top: 3rem; margin-bottom: 1rem;">Recent Chat History (Last 50)</h3>
|
||||
<div style="overflow-x: auto; background: rgba(255, 255, 255, 0.4); padding: 1rem; border-radius: 12px; border: 1px solid rgba(255, 255, 255, 0.3);">
|
||||
<table class="table" style="width: 100%;">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width: 15%;">Time</th>
|
||||
<th style="width: 35%;">User Message</th>
|
||||
<th style="width: 50%;">AI Response</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php if (empty($messages)): ?>
|
||||
<tr>
|
||||
<td colspan="3" style="text-align: center; color: #777;">No messages yet.</td>
|
||||
</tr>
|
||||
<?php else: ?>
|
||||
<?php foreach ($messages as $msg): ?>
|
||||
<tr>
|
||||
<td style="white-space: nowrap; font-size: 0.85em; color: #555;"><?= htmlspecialchars($msg['created_at']) ?></td>
|
||||
<td style="background: rgba(255, 255, 255, 0.3); border-radius: 8px; padding: 8px;"><?= htmlspecialchars($msg['user_message']) ?></td>
|
||||
<td style="background: rgba(255, 255, 255, 0.5); border-radius: 8px; padding: 8px;"><?= htmlspecialchars($msg['ai_response']) ?></td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
<?php endif; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
493
ai/LocalAIApi.php
Normal file
@ -0,0 +1,493 @@
|
||||
<?php
|
||||
// LocalAIApi — proxy client for the Responses API.
|
||||
// Usage (async: auto-polls status until ready):
|
||||
// require_once __DIR__ . '/ai/LocalAIApi.php';
|
||||
// $response = LocalAIApi::createResponse([
|
||||
// 'input' => [
|
||||
// ['role' => 'system', 'content' => 'You are a helpful assistant.'],
|
||||
// ['role' => 'user', 'content' => 'Tell me a bedtime story.'],
|
||||
// ],
|
||||
// ]);
|
||||
// if (!empty($response['success'])) {
|
||||
// // response['data'] contains full payload, e.g.:
|
||||
// // {
|
||||
// // "id": "resp_xxx",
|
||||
// // "status": "completed",
|
||||
// // "output": [
|
||||
// // {"type": "reasoning", "summary": []},
|
||||
// // {"type": "message", "content": [{"type": "output_text", "text": "Your final answer here."}]}
|
||||
// // ]
|
||||
// // }
|
||||
// $decoded = LocalAIApi::decodeJsonFromResponse($response); // or inspect $response['data'] / extractText(...)
|
||||
// }
|
||||
// Poll settings override:
|
||||
// LocalAIApi::createResponse($payload, ['poll_interval' => 5, 'poll_timeout' => 300]);
|
||||
|
||||
class LocalAIApi
|
||||
{
|
||||
/** @var array<string,mixed>|null */
|
||||
private static ?array $configCache = null;
|
||||
|
||||
/**
|
||||
* Signature compatible with the OpenAI Responses API.
|
||||
*
|
||||
* @param array<string,mixed> $params Request body (model, input, text, reasoning, metadata, etc.).
|
||||
* @param array<string,mixed> $options Extra options (timeout, verify_tls, headers, path, project_uuid).
|
||||
* @return array{
|
||||
* success:bool,
|
||||
* status?:int,
|
||||
* data?:mixed,
|
||||
* error?:string,
|
||||
* response?:mixed,
|
||||
* message?:string
|
||||
* }
|
||||
*/
|
||||
public static function createResponse(array $params, array $options = []): array
|
||||
{
|
||||
$cfg = self::config();
|
||||
$payload = $params;
|
||||
|
||||
if (empty($payload['input']) || !is_array($payload['input'])) {
|
||||
return [
|
||||
'success' => false,
|
||||
'error' => 'input_missing',
|
||||
'message' => 'Parameter "input" is required and must be an array.',
|
||||
];
|
||||
}
|
||||
|
||||
if (!isset($payload['model']) || $payload['model'] === '') {
|
||||
$payload['model'] = $cfg['default_model'];
|
||||
}
|
||||
|
||||
$initial = self::request($options['path'] ?? null, $payload, $options);
|
||||
if (empty($initial['success'])) {
|
||||
return $initial;
|
||||
}
|
||||
|
||||
// Async flow: if backend returns ai_request_id, poll status until ready
|
||||
$data = $initial['data'] ?? null;
|
||||
if (is_array($data) && isset($data['ai_request_id'])) {
|
||||
$aiRequestId = $data['ai_request_id'];
|
||||
$pollTimeout = isset($options['poll_timeout']) ? (int) $options['poll_timeout'] : 300; // seconds
|
||||
$pollInterval = isset($options['poll_interval']) ? (int) $options['poll_interval'] : 5; // seconds
|
||||
return self::awaitResponse($aiRequestId, [
|
||||
'timeout' => $pollTimeout,
|
||||
'interval' => $pollInterval,
|
||||
'headers' => $options['headers'] ?? [],
|
||||
'timeout_per_call' => $options['timeout'] ?? null,
|
||||
]);
|
||||
}
|
||||
|
||||
return $initial;
|
||||
}
|
||||
|
||||
/**
|
||||
* Snake_case alias for createResponse (matches the provided example).
|
||||
*
|
||||
* @param array<string,mixed> $params
|
||||
* @param array<string,mixed> $options
|
||||
* @return array<string,mixed>
|
||||
*/
|
||||
public static function create_response(array $params, array $options = []): array
|
||||
{
|
||||
return self::createResponse($params, $options);
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform a raw request to the AI proxy.
|
||||
*
|
||||
* @param string $path Endpoint (may be an absolute URL).
|
||||
* @param array<string,mixed> $payload JSON payload.
|
||||
* @param array<string,mixed> $options Additional request options.
|
||||
* @return array<string,mixed>
|
||||
*/
|
||||
public static function request(?string $path = null, array $payload = [], array $options = []): array
|
||||
{
|
||||
$cfg = self::config();
|
||||
|
||||
$projectUuid = $cfg['project_uuid'];
|
||||
if (empty($projectUuid)) {
|
||||
return [
|
||||
'success' => false,
|
||||
'error' => 'project_uuid_missing',
|
||||
'message' => 'PROJECT_UUID is not defined; aborting AI request.',
|
||||
];
|
||||
}
|
||||
|
||||
$defaultPath = $cfg['responses_path'] ?? null;
|
||||
$resolvedPath = $path ?? ($options['path'] ?? $defaultPath);
|
||||
if (empty($resolvedPath)) {
|
||||
return [
|
||||
'success' => false,
|
||||
'error' => 'project_id_missing',
|
||||
'message' => 'PROJECT_ID is not defined; cannot resolve AI proxy endpoint.',
|
||||
];
|
||||
}
|
||||
|
||||
$url = self::buildUrl($resolvedPath, $cfg['base_url']);
|
||||
$baseTimeout = isset($cfg['timeout']) ? (int) $cfg['timeout'] : 30;
|
||||
$timeout = isset($options['timeout']) ? (int) $options['timeout'] : $baseTimeout;
|
||||
if ($timeout <= 0) {
|
||||
$timeout = 30;
|
||||
}
|
||||
|
||||
$baseVerifyTls = array_key_exists('verify_tls', $cfg) ? (bool) $cfg['verify_tls'] : true;
|
||||
$verifyTls = array_key_exists('verify_tls', $options)
|
||||
? (bool) $options['verify_tls']
|
||||
: $baseVerifyTls;
|
||||
|
||||
$projectHeader = $cfg['project_header'];
|
||||
|
||||
$headers = [
|
||||
'Content-Type: application/json',
|
||||
'Accept: application/json',
|
||||
];
|
||||
$headers[] = $projectHeader . ': ' . $projectUuid;
|
||||
if (!empty($options['headers']) && is_array($options['headers'])) {
|
||||
foreach ($options['headers'] as $header) {
|
||||
if (is_string($header) && $header !== '') {
|
||||
$headers[] = $header;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($projectUuid) && !array_key_exists('project_uuid', $payload)) {
|
||||
$payload['project_uuid'] = $projectUuid;
|
||||
}
|
||||
|
||||
$body = json_encode($payload, JSON_UNESCAPED_UNICODE);
|
||||
if ($body === false) {
|
||||
return [
|
||||
'success' => false,
|
||||
'error' => 'json_encode_failed',
|
||||
'message' => 'Failed to encode request body to JSON.',
|
||||
];
|
||||
}
|
||||
|
||||
return self::sendCurl($url, 'POST', $body, $headers, $timeout, $verifyTls);
|
||||
}
|
||||
|
||||
/**
|
||||
* Poll AI request status until ready or timeout.
|
||||
*
|
||||
* @param int|string $aiRequestId
|
||||
* @param array<string,mixed> $options
|
||||
* @return array<string,mixed>
|
||||
*/
|
||||
public static function awaitResponse($aiRequestId, array $options = []): array
|
||||
{
|
||||
$cfg = self::config();
|
||||
|
||||
$timeout = isset($options['timeout']) ? (int) $options['timeout'] : 300; // seconds
|
||||
$interval = isset($options['interval']) ? (int) $options['interval'] : 5; // seconds
|
||||
if ($interval <= 0) {
|
||||
$interval = 5;
|
||||
}
|
||||
$perCallTimeout = isset($options['timeout_per_call']) ? (int) $options['timeout_per_call'] : null;
|
||||
|
||||
$deadline = time() + max($timeout, $interval);
|
||||
$headers = $options['headers'] ?? [];
|
||||
|
||||
while (true) {
|
||||
$statusResp = self::fetchStatus($aiRequestId, [
|
||||
'headers' => $headers,
|
||||
'timeout' => $perCallTimeout,
|
||||
]);
|
||||
if (!empty($statusResp['success'])) {
|
||||
$data = $statusResp['data'] ?? [];
|
||||
if (is_array($data)) {
|
||||
$statusValue = $data['status'] ?? null;
|
||||
if ($statusValue === 'success') {
|
||||
return [
|
||||
'success' => true,
|
||||
'status' => 200,
|
||||
'data' => $data['response'] ?? $data,
|
||||
];
|
||||
}
|
||||
if ($statusValue === 'failed') {
|
||||
return [
|
||||
'success' => false,
|
||||
'status' => 500,
|
||||
'error' => isset($data['error']) ? (string)$data['error'] : 'AI request failed',
|
||||
'data' => $data,
|
||||
];
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return $statusResp;
|
||||
}
|
||||
|
||||
if (time() >= $deadline) {
|
||||
return [
|
||||
'success' => false,
|
||||
'error' => 'timeout',
|
||||
'message' => 'Timed out waiting for AI response.',
|
||||
];
|
||||
}
|
||||
sleep($interval);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetch status for queued AI request.
|
||||
*
|
||||
* @param int|string $aiRequestId
|
||||
* @param array<string,mixed> $options
|
||||
* @return array<string,mixed>
|
||||
*/
|
||||
public static function fetchStatus($aiRequestId, array $options = []): array
|
||||
{
|
||||
$cfg = self::config();
|
||||
$projectUuid = $cfg['project_uuid'];
|
||||
if (empty($projectUuid)) {
|
||||
return [
|
||||
'success' => false,
|
||||
'error' => 'project_uuid_missing',
|
||||
'message' => 'PROJECT_UUID is not defined; aborting status check.',
|
||||
];
|
||||
}
|
||||
|
||||
$statusPath = self::resolveStatusPath($aiRequestId, $cfg);
|
||||
$url = self::buildUrl($statusPath, $cfg['base_url']);
|
||||
|
||||
$baseTimeout = isset($cfg['timeout']) ? (int) $cfg['timeout'] : 30;
|
||||
$timeout = isset($options['timeout']) ? (int) $options['timeout'] : $baseTimeout;
|
||||
if ($timeout <= 0) {
|
||||
$timeout = 30;
|
||||
}
|
||||
|
||||
$baseVerifyTls = array_key_exists('verify_tls', $cfg) ? (bool) $cfg['verify_tls'] : true;
|
||||
$verifyTls = array_key_exists('verify_tls', $options)
|
||||
? (bool) $options['verify_tls']
|
||||
: $baseVerifyTls;
|
||||
|
||||
$projectHeader = $cfg['project_header'];
|
||||
$headers = [
|
||||
'Accept: application/json',
|
||||
$projectHeader . ': ' . $projectUuid,
|
||||
];
|
||||
if (!empty($options['headers']) && is_array($options['headers'])) {
|
||||
foreach ($options['headers'] as $header) {
|
||||
if (is_string($header) && $header !== '') {
|
||||
$headers[] = $header;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return self::sendCurl($url, 'GET', null, $headers, $timeout, $verifyTls);
|
||||
}
|
||||
|
||||
/**
|
||||
* Extract plain text from a Responses API payload.
|
||||
*
|
||||
* @param array<string,mixed> $response Result of LocalAIApi::createResponse|request.
|
||||
* @return string
|
||||
*/
|
||||
public static function extractText(array $response): string
|
||||
{
|
||||
$payload = $response['data'] ?? $response;
|
||||
if (!is_array($payload)) {
|
||||
return '';
|
||||
}
|
||||
|
||||
if (!empty($payload['output']) && is_array($payload['output'])) {
|
||||
$combined = '';
|
||||
foreach ($payload['output'] as $item) {
|
||||
if (!isset($item['content']) || !is_array($item['content'])) {
|
||||
continue;
|
||||
}
|
||||
foreach ($item['content'] as $block) {
|
||||
if (is_array($block) && ($block['type'] ?? '') === 'output_text' && !empty($block['text'])) {
|
||||
$combined .= $block['text'];
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($combined !== '') {
|
||||
return $combined;
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($payload['choices'][0]['message']['content'])) {
|
||||
return (string) $payload['choices'][0]['message']['content'];
|
||||
}
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Attempt to decode JSON emitted by the model (handles markdown fences).
|
||||
*
|
||||
* @param array<string,mixed> $response
|
||||
* @return array<string,mixed>|null
|
||||
*/
|
||||
public static function decodeJsonFromResponse(array $response): ?array
|
||||
{
|
||||
$text = self::extractText($response);
|
||||
if ($text === '') {
|
||||
return null;
|
||||
}
|
||||
|
||||
$decoded = json_decode($text, true);
|
||||
if (is_array($decoded)) {
|
||||
return $decoded;
|
||||
}
|
||||
|
||||
$stripped = preg_replace('/^```json|```$/m', '', trim($text));
|
||||
if ($stripped !== null && $stripped !== $text) {
|
||||
$decoded = json_decode($stripped, true);
|
||||
if (is_array($decoded)) {
|
||||
return $decoded;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Load configuration from ai/config.php.
|
||||
*
|
||||
* @return array<string,mixed>
|
||||
*/
|
||||
private static function config(): array
|
||||
{
|
||||
if (self::$configCache === null) {
|
||||
$configPath = __DIR__ . '/config.php';
|
||||
if (!file_exists($configPath)) {
|
||||
throw new RuntimeException('AI config file not found: ai/config.php');
|
||||
}
|
||||
$cfg = require $configPath;
|
||||
if (!is_array($cfg)) {
|
||||
throw new RuntimeException('Invalid AI config format: expected array');
|
||||
}
|
||||
self::$configCache = $cfg;
|
||||
}
|
||||
|
||||
return self::$configCache;
|
||||
}
|
||||
|
||||
/**
|
||||
* Build an absolute URL from base_url and a path.
|
||||
*/
|
||||
private static function buildUrl(string $path, string $baseUrl): string
|
||||
{
|
||||
$trimmed = trim($path);
|
||||
if ($trimmed === '') {
|
||||
return $baseUrl;
|
||||
}
|
||||
if (str_starts_with($trimmed, 'http://') || str_starts_with($trimmed, 'https://')) {
|
||||
return $trimmed;
|
||||
}
|
||||
if ($trimmed[0] === '/') {
|
||||
return $baseUrl . $trimmed;
|
||||
}
|
||||
return $baseUrl . '/' . $trimmed;
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolve status path based on configured responses_path and ai_request_id.
|
||||
*
|
||||
* @param int|string $aiRequestId
|
||||
* @param array<string,mixed> $cfg
|
||||
* @return string
|
||||
*/
|
||||
private static function resolveStatusPath($aiRequestId, array $cfg): string
|
||||
{
|
||||
$basePath = $cfg['responses_path'] ?? '';
|
||||
$trimmed = rtrim($basePath, '/');
|
||||
if ($trimmed === '') {
|
||||
return '/ai-request/' . rawurlencode((string)$aiRequestId) . '/status';
|
||||
}
|
||||
if (substr($trimmed, -11) !== '/ai-request') {
|
||||
$trimmed .= '/ai-request';
|
||||
}
|
||||
return $trimmed . '/' . rawurlencode((string)$aiRequestId) . '/status';
|
||||
}
|
||||
|
||||
/**
|
||||
* Shared CURL sender for GET/POST requests.
|
||||
*
|
||||
* @param string $url
|
||||
* @param string $method
|
||||
* @param string|null $body
|
||||
* @param array<int,string> $headers
|
||||
* @param int $timeout
|
||||
* @param bool $verifyTls
|
||||
* @return array<string,mixed>
|
||||
*/
|
||||
private static function sendCurl(string $url, string $method, ?string $body, array $headers, int $timeout, bool $verifyTls): array
|
||||
{
|
||||
if (!function_exists('curl_init')) {
|
||||
return [
|
||||
'success' => false,
|
||||
'error' => 'curl_missing',
|
||||
'message' => 'PHP cURL extension is missing. Install or enable it on the VM.',
|
||||
];
|
||||
}
|
||||
|
||||
$ch = curl_init($url);
|
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
|
||||
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
|
||||
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, $verifyTls);
|
||||
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, $verifyTls ? 2 : 0);
|
||||
curl_setopt($ch, CURLOPT_FAILONERROR, false);
|
||||
|
||||
$upper = strtoupper($method);
|
||||
if ($upper === 'POST') {
|
||||
curl_setopt($ch, CURLOPT_POST, true);
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, $body ?? '');
|
||||
} else {
|
||||
curl_setopt($ch, CURLOPT_HTTPGET, true);
|
||||
}
|
||||
|
||||
$responseBody = curl_exec($ch);
|
||||
if ($responseBody === false) {
|
||||
$error = curl_error($ch) ?: 'Unknown cURL error';
|
||||
curl_close($ch);
|
||||
return [
|
||||
'success' => false,
|
||||
'error' => 'curl_error',
|
||||
'message' => $error,
|
||||
];
|
||||
}
|
||||
|
||||
$status = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
curl_close($ch);
|
||||
|
||||
$decoded = null;
|
||||
if ($responseBody !== '' && $responseBody !== null) {
|
||||
$decoded = json_decode($responseBody, true);
|
||||
if (json_last_error() !== JSON_ERROR_NONE) {
|
||||
$decoded = null;
|
||||
}
|
||||
}
|
||||
|
||||
if ($status >= 200 && $status < 300) {
|
||||
return [
|
||||
'success' => true,
|
||||
'status' => $status,
|
||||
'data' => $decoded ?? $responseBody,
|
||||
];
|
||||
}
|
||||
|
||||
$errorMessage = 'AI proxy request failed';
|
||||
if (is_array($decoded)) {
|
||||
$errorMessage = $decoded['error'] ?? $decoded['message'] ?? $errorMessage;
|
||||
} elseif (is_string($responseBody) && $responseBody !== '') {
|
||||
$errorMessage = $responseBody;
|
||||
}
|
||||
|
||||
return [
|
||||
'success' => false,
|
||||
'status' => $status,
|
||||
'error' => $errorMessage,
|
||||
'response' => $decoded ?? $responseBody,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
// Legacy alias for backward compatibility with the previous class name.
|
||||
if (!class_exists('OpenAIService')) {
|
||||
class_alias(LocalAIApi::class, 'OpenAIService');
|
||||
}
|
||||
52
ai/config.php
Normal file
@ -0,0 +1,52 @@
|
||||
<?php
|
||||
// OpenAI proxy configuration (workspace scope).
|
||||
// Reads values from environment variables or executor/.env.
|
||||
|
||||
$projectUuid = getenv('PROJECT_UUID');
|
||||
$projectId = getenv('PROJECT_ID');
|
||||
|
||||
if (
|
||||
($projectUuid === false || $projectUuid === null || $projectUuid === '') ||
|
||||
($projectId === false || $projectId === null || $projectId === '')
|
||||
) {
|
||||
$envPath = realpath(__DIR__ . '/../../.env'); // executor/.env
|
||||
if ($envPath && is_readable($envPath)) {
|
||||
$lines = @file($envPath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) ?: [];
|
||||
foreach ($lines as $line) {
|
||||
$line = trim($line);
|
||||
if ($line === '' || $line[0] === '#') {
|
||||
continue;
|
||||
}
|
||||
if (!str_contains($line, '=')) {
|
||||
continue;
|
||||
}
|
||||
[$key, $value] = array_map('trim', explode('=', $line, 2));
|
||||
if ($key === '') {
|
||||
continue;
|
||||
}
|
||||
$value = trim($value, "\"' ");
|
||||
if (getenv($key) === false || getenv($key) === '') {
|
||||
putenv("{$key}={$value}");
|
||||
}
|
||||
}
|
||||
$projectUuid = getenv('PROJECT_UUID');
|
||||
$projectId = getenv('PROJECT_ID');
|
||||
}
|
||||
}
|
||||
|
||||
$projectUuid = ($projectUuid === false) ? null : $projectUuid;
|
||||
$projectId = ($projectId === false) ? null : $projectId;
|
||||
|
||||
$baseUrl = 'https://flatlogic.com';
|
||||
$responsesPath = $projectId ? "/projects/{$projectId}/ai-request" : null;
|
||||
|
||||
return [
|
||||
'base_url' => $baseUrl,
|
||||
'responses_path' => $responsesPath,
|
||||
'project_id' => $projectId,
|
||||
'project_uuid' => $projectUuid,
|
||||
'project_header' => 'project-uuid',
|
||||
'default_model' => 'gpt-5-mini',
|
||||
'timeout' => 30,
|
||||
'verify_tls' => true,
|
||||
];
|
||||
64
api/chat.php
Normal file
@ -0,0 +1,64 @@
|
||||
<?php
|
||||
header('Content-Type: application/json');
|
||||
require_once __DIR__ . '/../db/config.php';
|
||||
require_once __DIR__ . '/../ai/LocalAIApi.php';
|
||||
|
||||
$input = json_decode(file_get_contents('php://input'), true);
|
||||
$message = $input['message'] ?? '';
|
||||
|
||||
if (empty($message)) {
|
||||
echo json_encode(['reply' => "I didn't catch that. Could you repeat?"]);
|
||||
exit;
|
||||
}
|
||||
|
||||
try {
|
||||
// 1. Fetch Knowledge Base (FAQs)
|
||||
$stmt = db()->query("SELECT keywords, answer FROM faqs");
|
||||
$faqs = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
|
||||
$knowledgeBase = "Here is the knowledge base for this website:\n\n";
|
||||
foreach ($faqs as $faq) {
|
||||
$knowledgeBase .= "Q: " . $faq['keywords'] . "\nA: " . $faq['answer'] . "\n---\n";
|
||||
}
|
||||
|
||||
// 2. Construct Prompt for AI
|
||||
$systemPrompt = "You are a helpful, friendly AI assistant for this website. " .
|
||||
"Use the provided Knowledge Base to answer user questions accurately. " .
|
||||
"If the answer is found in the Knowledge Base, rephrase it naturally. " .
|
||||
"If the answer is NOT in the Knowledge Base, use your general knowledge to help, " .
|
||||
"but politely mention that you don't have specific information about that if it seems like a site-specific question. " .
|
||||
"Keep answers concise and professional.\n\n" .
|
||||
$knowledgeBase;
|
||||
|
||||
// 3. Call AI API
|
||||
$response = LocalAIApi::createResponse([
|
||||
'model' => 'gpt-4o-mini',
|
||||
'input' => [
|
||||
['role' => 'system', 'content' => $systemPrompt],
|
||||
['role' => 'user', 'content' => $message],
|
||||
]
|
||||
]);
|
||||
|
||||
if (!empty($response['success'])) {
|
||||
$aiReply = LocalAIApi::extractText($response);
|
||||
|
||||
// 4. Save to Database
|
||||
try {
|
||||
$stmt = db()->prepare("INSERT INTO messages (user_message, ai_response) VALUES (?, ?)");
|
||||
$stmt->execute([$message, $aiReply]);
|
||||
} catch (Exception $e) {
|
||||
error_log("DB Save Error: " . $e->getMessage());
|
||||
// Continue even if save fails, so the user still gets a reply
|
||||
}
|
||||
|
||||
echo json_encode(['reply' => $aiReply]);
|
||||
} else {
|
||||
// Fallback if AI fails
|
||||
error_log("AI Error: " . ($response['error'] ?? 'Unknown'));
|
||||
echo json_encode(['reply' => "I'm having trouble connecting to my brain right now. Please try again later."]);
|
||||
}
|
||||
|
||||
} catch (Exception $e) {
|
||||
error_log("Chat Error: " . $e->getMessage());
|
||||
echo json_encode(['reply' => "An internal error occurred."]);
|
||||
}
|
||||
91
api/telegram_webhook.php
Normal file
@ -0,0 +1,91 @@
|
||||
<?php
|
||||
require_once __DIR__ . '/../db/config.php';
|
||||
require_once __DIR__ . '/../ai/LocalAIApi.php';
|
||||
|
||||
// Get Telegram Update
|
||||
$content = file_get_contents("php://input");
|
||||
$update = json_decode($content, true);
|
||||
|
||||
if (!$update || !isset($update['message'])) {
|
||||
exit;
|
||||
}
|
||||
|
||||
$message = $update['message'];
|
||||
$chatId = $message['chat']['id'];
|
||||
$text = $message['text'] ?? '';
|
||||
|
||||
if (empty($text)) {
|
||||
exit;
|
||||
}
|
||||
|
||||
// Get Telegram Token from DB
|
||||
$stmt = db()->query("SELECT setting_value FROM settings WHERE setting_key = 'telegram_token'");
|
||||
$token = $stmt->fetchColumn();
|
||||
|
||||
if (!$token) {
|
||||
error_log("Telegram Error: No bot token found in settings.");
|
||||
exit;
|
||||
}
|
||||
|
||||
function sendTelegramMessage($chatId, $text, $token) {
|
||||
$url = "https://api.telegram.org/bot$token/sendMessage";
|
||||
$data = [
|
||||
'chat_id' => $chatId,
|
||||
'text' => $text,
|
||||
'parse_mode' => 'Markdown'
|
||||
];
|
||||
|
||||
$options = [
|
||||
'http' => [
|
||||
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
|
||||
'method' => 'POST',
|
||||
'content' => http_build_query($data),
|
||||
],
|
||||
];
|
||||
$context = stream_context_create($options);
|
||||
return file_get_contents($url, false, $context);
|
||||
}
|
||||
|
||||
// Process with AI (Similar logic to api/chat.php)
|
||||
try {
|
||||
// 1. Fetch Knowledge Base
|
||||
$stmt = db()->query("SELECT keywords, answer FROM faqs");
|
||||
$faqs = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
|
||||
$knowledgeBase = "Here is the knowledge base for this website:\n\n";
|
||||
foreach ($faqs as $faq) {
|
||||
$knowledgeBase .= "Q: " . $faq['keywords'] . "\nA: " . $faq['answer'] . "\n---\n";
|
||||
}
|
||||
|
||||
$systemPrompt = "You are a helpful AI assistant integrated with Telegram. " .
|
||||
"Use the provided Knowledge Base to answer user questions. " .
|
||||
"Keep answers concise for mobile reading. Use Markdown for formatting.\n\n" .
|
||||
$knowledgeBase;
|
||||
|
||||
// 2. Call AI
|
||||
$response = LocalAIApi::createResponse([
|
||||
'model' => 'gpt-4o-mini',
|
||||
'input' => [
|
||||
['role' => 'system', 'content' => $systemPrompt],
|
||||
['role' => 'user', 'content' => $text],
|
||||
]
|
||||
]);
|
||||
|
||||
if (!empty($response['success'])) {
|
||||
$aiReply = LocalAIApi::extractText($response);
|
||||
|
||||
// 3. Save History
|
||||
try {
|
||||
$stmt = db()->prepare("INSERT INTO messages (user_message, ai_response) VALUES (?, ?)");
|
||||
$stmt->execute(["[Telegram] " . $text, $aiReply]);
|
||||
} catch (Exception $e) {}
|
||||
|
||||
// 4. Send back to Telegram
|
||||
sendTelegramMessage($chatId, $aiReply, $token);
|
||||
} else {
|
||||
sendTelegramMessage($chatId, "I'm sorry, I encountered an error processing your request.", $token);
|
||||
}
|
||||
|
||||
} catch (Exception $e) {
|
||||
error_log("Telegram Webhook Error: " . $e->getMessage());
|
||||
}
|
||||
302
assets/css/custom.css
Normal file
@ -0,0 +1,302 @@
|
||||
body {
|
||||
background: linear-gradient(-45deg, #ee7752, #e73c7e, #23a6d5, #23d5ab);
|
||||
background-size: 400% 400%;
|
||||
animation: gradient 15s ease infinite;
|
||||
color: #212529;
|
||||
font-family: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
|
||||
font-size: 14px;
|
||||
margin: 0;
|
||||
min-height: 100vh;
|
||||
}
|
||||
|
||||
.main-wrapper {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
min-height: 100vh;
|
||||
width: 100%;
|
||||
padding: 20px;
|
||||
box-sizing: border-box;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
@keyframes gradient {
|
||||
0% {
|
||||
background-position: 0% 50%;
|
||||
}
|
||||
50% {
|
||||
background-position: 100% 50%;
|
||||
}
|
||||
100% {
|
||||
background-position: 0% 50%;
|
||||
}
|
||||
}
|
||||
|
||||
.chat-container {
|
||||
width: 100%;
|
||||
max-width: 600px;
|
||||
background: rgba(255, 255, 255, 0.85);
|
||||
border: 1px solid rgba(255, 255, 255, 0.3);
|
||||
border-radius: 20px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 85vh;
|
||||
box-shadow: 0 20px 40px rgba(0,0,0,0.2);
|
||||
backdrop-filter: blur(15px);
|
||||
-webkit-backdrop-filter: blur(15px);
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.chat-header {
|
||||
padding: 1.5rem;
|
||||
border-bottom: 1px solid rgba(0, 0, 0, 0.05);
|
||||
background: rgba(255, 255, 255, 0.5);
|
||||
font-weight: 700;
|
||||
font-size: 1.1rem;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.chat-messages {
|
||||
flex: 1;
|
||||
overflow-y: auto;
|
||||
padding: 1.5rem;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 1.25rem;
|
||||
}
|
||||
|
||||
/* Custom Scrollbar */
|
||||
::-webkit-scrollbar {
|
||||
width: 6px;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-track {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-thumb {
|
||||
background: rgba(255, 255, 255, 0.3);
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-thumb:hover {
|
||||
background: rgba(255, 255, 255, 0.5);
|
||||
}
|
||||
|
||||
.message {
|
||||
max-width: 85%;
|
||||
padding: 0.85rem 1.1rem;
|
||||
border-radius: 16px;
|
||||
line-height: 1.5;
|
||||
font-size: 0.95rem;
|
||||
box-shadow: 0 4px 15px rgba(0,0,0,0.05);
|
||||
animation: fadeIn 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);
|
||||
}
|
||||
|
||||
@keyframes fadeIn {
|
||||
from { opacity: 0; transform: translateY(20px) scale(0.95); }
|
||||
to { opacity: 1; transform: translateY(0) scale(1); }
|
||||
}
|
||||
|
||||
.message.visitor {
|
||||
align-self: flex-end;
|
||||
background: linear-gradient(135deg, #212529 0%, #343a40 100%);
|
||||
color: #fff;
|
||||
border-bottom-right-radius: 4px;
|
||||
}
|
||||
|
||||
.message.bot {
|
||||
align-self: flex-start;
|
||||
background: #ffffff;
|
||||
color: #212529;
|
||||
border-bottom-left-radius: 4px;
|
||||
}
|
||||
|
||||
.chat-input-area {
|
||||
padding: 1.25rem;
|
||||
background: rgba(255, 255, 255, 0.5);
|
||||
border-top: 1px solid rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
|
||||
.chat-input-area form {
|
||||
display: flex;
|
||||
gap: 0.75rem;
|
||||
}
|
||||
|
||||
.chat-input-area input {
|
||||
flex: 1;
|
||||
border: 1px solid rgba(0, 0, 0, 0.1);
|
||||
border-radius: 12px;
|
||||
padding: 0.75rem 1rem;
|
||||
outline: none;
|
||||
background: rgba(255, 255, 255, 0.9);
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.chat-input-area input:focus {
|
||||
border-color: #23a6d5;
|
||||
box-shadow: 0 0 0 3px rgba(35, 166, 213, 0.2);
|
||||
}
|
||||
|
||||
.chat-input-area button {
|
||||
background: #212529;
|
||||
color: #fff;
|
||||
border: none;
|
||||
padding: 0.75rem 1.5rem;
|
||||
border-radius: 12px;
|
||||
cursor: pointer;
|
||||
font-weight: 600;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.chat-input-area button:hover {
|
||||
background: #000;
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 5px 15px rgba(0,0,0,0.2);
|
||||
}
|
||||
|
||||
/* Background Animations */
|
||||
.bg-animations {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: 0;
|
||||
overflow: hidden;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.blob {
|
||||
position: absolute;
|
||||
width: 500px;
|
||||
height: 500px;
|
||||
background: rgba(255, 255, 255, 0.2);
|
||||
border-radius: 50%;
|
||||
filter: blur(80px);
|
||||
animation: move 20s infinite alternate cubic-bezier(0.45, 0, 0.55, 1);
|
||||
}
|
||||
|
||||
.blob-1 {
|
||||
top: -10%;
|
||||
left: -10%;
|
||||
background: rgba(238, 119, 82, 0.4);
|
||||
}
|
||||
|
||||
.blob-2 {
|
||||
bottom: -10%;
|
||||
right: -10%;
|
||||
background: rgba(35, 166, 213, 0.4);
|
||||
animation-delay: -7s;
|
||||
width: 600px;
|
||||
height: 600px;
|
||||
}
|
||||
|
||||
.blob-3 {
|
||||
top: 40%;
|
||||
left: 30%;
|
||||
background: rgba(231, 60, 126, 0.3);
|
||||
animation-delay: -14s;
|
||||
width: 450px;
|
||||
height: 450px;
|
||||
}
|
||||
|
||||
@keyframes move {
|
||||
0% { transform: translate(0, 0) rotate(0deg) scale(1); }
|
||||
33% { transform: translate(150px, 100px) rotate(120deg) scale(1.1); }
|
||||
66% { transform: translate(-50px, 200px) rotate(240deg) scale(0.9); }
|
||||
100% { transform: translate(0, 0) rotate(360deg) scale(1); }
|
||||
}
|
||||
|
||||
.admin-link {
|
||||
font-size: 14px;
|
||||
color: #fff;
|
||||
text-decoration: none;
|
||||
background: rgba(0, 0, 0, 0.2);
|
||||
padding: 0.5rem 1rem;
|
||||
border-radius: 8px;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.admin-link:hover {
|
||||
background: rgba(0, 0, 0, 0.4);
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
/* Admin Styles */
|
||||
.admin-container {
|
||||
max-width: 900px;
|
||||
margin: 3rem auto;
|
||||
padding: 2.5rem;
|
||||
background: rgba(255, 255, 255, 0.85);
|
||||
backdrop-filter: blur(20px);
|
||||
-webkit-backdrop-filter: blur(20px);
|
||||
border-radius: 24px;
|
||||
box-shadow: 0 20px 50px rgba(0,0,0,0.15);
|
||||
border: 1px solid rgba(255, 255, 255, 0.4);
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.admin-container h1 {
|
||||
margin-top: 0;
|
||||
color: #212529;
|
||||
font-weight: 800;
|
||||
}
|
||||
|
||||
.table {
|
||||
width: 100%;
|
||||
border-collapse: separate;
|
||||
border-spacing: 0 8px;
|
||||
margin-top: 1.5rem;
|
||||
}
|
||||
|
||||
.table th {
|
||||
background: transparent;
|
||||
border: none;
|
||||
padding: 1rem;
|
||||
color: #6c757d;
|
||||
font-weight: 600;
|
||||
text-transform: uppercase;
|
||||
font-size: 0.75rem;
|
||||
letter-spacing: 1px;
|
||||
}
|
||||
|
||||
.table td {
|
||||
background: #fff;
|
||||
padding: 1rem;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.table tr td:first-child { border-radius: 12px 0 0 12px; }
|
||||
.table tr td:last-child { border-radius: 0 12px 12px 0; }
|
||||
|
||||
.form-group {
|
||||
margin-bottom: 1.25rem;
|
||||
}
|
||||
|
||||
.form-group label {
|
||||
display: block;
|
||||
margin-bottom: 0.5rem;
|
||||
font-weight: 600;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.form-control {
|
||||
width: 100%;
|
||||
padding: 0.75rem 1rem;
|
||||
border: 1px solid rgba(0, 0, 0, 0.1);
|
||||
border-radius: 12px;
|
||||
background: #fff;
|
||||
transition: all 0.3s ease;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.form-control:focus {
|
||||
outline: none;
|
||||
border-color: #23a6d5;
|
||||
box-shadow: 0 0 0 3px rgba(35, 166, 213, 0.1);
|
||||
}
|
||||
39
assets/js/main.js
Normal file
@ -0,0 +1,39 @@
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
const chatForm = document.getElementById('chat-form');
|
||||
const chatInput = document.getElementById('chat-input');
|
||||
const chatMessages = document.getElementById('chat-messages');
|
||||
|
||||
const appendMessage = (text, sender) => {
|
||||
const msgDiv = document.createElement('div');
|
||||
msgDiv.classList.add('message', sender);
|
||||
msgDiv.textContent = text;
|
||||
chatMessages.appendChild(msgDiv);
|
||||
chatMessages.scrollTop = chatMessages.scrollHeight;
|
||||
};
|
||||
|
||||
chatForm.addEventListener('submit', async (e) => {
|
||||
e.preventDefault();
|
||||
const message = chatInput.value.trim();
|
||||
if (!message) return;
|
||||
|
||||
appendMessage(message, 'visitor');
|
||||
chatInput.value = '';
|
||||
|
||||
try {
|
||||
const response = await fetch('api/chat.php', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ message })
|
||||
});
|
||||
const data = await response.json();
|
||||
|
||||
// Artificial delay for realism
|
||||
setTimeout(() => {
|
||||
appendMessage(data.reply, 'bot');
|
||||
}, 500);
|
||||
} catch (error) {
|
||||
console.error('Error:', error);
|
||||
appendMessage("Sorry, something went wrong. Please try again.", 'bot');
|
||||
}
|
||||
});
|
||||
});
|
||||
17
db/config.php
Normal file
@ -0,0 +1,17 @@
|
||||
<?php
|
||||
// Generated by setup_mariadb_project.sh — edit as needed.
|
||||
define('DB_HOST', '127.0.0.1');
|
||||
define('DB_NAME', 'app_38384');
|
||||
define('DB_USER', 'app_38384');
|
||||
define('DB_PASS', '5561099f-23a3-43d8-b1a2-54739c50721b');
|
||||
|
||||
function db() {
|
||||
static $pdo;
|
||||
if (!$pdo) {
|
||||
$pdo = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME.';charset=utf8mb4', DB_USER, DB_PASS, [
|
||||
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
||||
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
||||
]);
|
||||
}
|
||||
return $pdo;
|
||||
}
|
||||
52
index.php
Normal file
@ -0,0 +1,52 @@
|
||||
<?php
|
||||
require_once __DIR__ . '/db/config.php';
|
||||
$projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Modern AI-ready Chat Assistant';
|
||||
$projectImageUrl = $_SERVER['PROJECT_IMAGE_URL'] ?? '';
|
||||
?>
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Chat Assistant</title>
|
||||
<?php if ($projectDescription): ?>
|
||||
<meta name="description" content="<?= htmlspecialchars($projectDescription) ?>">
|
||||
<meta property="og:description" content="<?= htmlspecialchars($projectDescription) ?>">
|
||||
<?php endif; ?>
|
||||
<?php if ($projectImageUrl): ?>
|
||||
<meta property="og:image" content="<?= htmlspecialchars($projectImageUrl) ?>">
|
||||
<?php endif; ?>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&display=swap" rel="stylesheet">
|
||||
<link rel="stylesheet" href="assets/css/custom.css?v=<?php echo time(); ?>">
|
||||
</head>
|
||||
<body>
|
||||
<div class="bg-animations">
|
||||
<div class="blob blob-1"></div>
|
||||
<div class="blob blob-2"></div>
|
||||
<div class="blob blob-3"></div>
|
||||
</div>
|
||||
<div class="main-wrapper">
|
||||
<div class="chat-container">
|
||||
<div class="chat-header">
|
||||
<span>Chat Assistant</span>
|
||||
<a href="admin.php" class="admin-link">Admin</a>
|
||||
</div>
|
||||
<div class="chat-messages" id="chat-messages">
|
||||
<div class="message bot">
|
||||
Hello! I'm your assistant. How can I help you today?
|
||||
</div>
|
||||
</div>
|
||||
<div class="chat-input-area">
|
||||
<form id="chat-form">
|
||||
<input type="text" id="chat-input" placeholder="Type your message..." autocomplete="off">
|
||||
<button type="submit">Send</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="assets/js/main.js?v=<?php echo time(); ?>"></script>
|
||||
</body>
|
||||
</html>
|
||||
21
light-blue-vue-master/.gitignore
vendored
@ -1,21 +0,0 @@
|
||||
.DS_Store
|
||||
node_modules
|
||||
dist
|
||||
|
||||
# local env files
|
||||
.env.local
|
||||
.env.*.local
|
||||
|
||||
# Log files
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
|
||||
# Editor directories and files
|
||||
.idea
|
||||
.vscode
|
||||
*.suo
|
||||
*.ntvs*
|
||||
*.njsproj
|
||||
*.sln
|
||||
*.sw*
|
||||
@ -1,46 +0,0 @@
|
||||
# Contributor Covenant Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to creating a positive environment include:
|
||||
|
||||
* Using welcoming and inclusive language
|
||||
* Being respectful of differing viewpoints and experiences
|
||||
* Gracefully accepting constructive criticism
|
||||
* Focusing on what is best for the community
|
||||
* Showing empathy towards other community members
|
||||
|
||||
Examples of unacceptable behavior by participants include:
|
||||
|
||||
* The use of sexualized language or imagery and unwelcome sexual attention or advances
|
||||
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or electronic address, without explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a professional setting
|
||||
|
||||
## Our Responsibilities
|
||||
|
||||
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
|
||||
|
||||
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at contact@flatlogic.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
|
||||
|
||||
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
|
||||
|
||||
[homepage]: http://contributor-covenant.org
|
||||
[version]: http://contributor-covenant.org/version/1/4/
|
||||
@ -1,120 +0,0 @@
|
||||
# Contributing to Light Blue
|
||||
|
||||
Your contributions are welcome and are greatly appreciated! Every little bit helps, and credit
|
||||
will always be given.
|
||||
|
||||
Please take a moment to review this document in order to make the contribution process easy and
|
||||
effective for everyone involved.
|
||||
|
||||
## Conduct
|
||||
|
||||
Please, follow the [golden rule](https://en.wikipedia.org/wiki/Golden_Rule). Be respectful, even to
|
||||
those that are disrespectful.
|
||||
|
||||
## Feedback
|
||||
|
||||
Feedback is the breakfast for champions! We'd love to hear your opinions, discuss potential
|
||||
improvements, architecture, theory, internal implementation, etc. Please, join or start a new
|
||||
conversation in our [issue tracker](https://github.com/flatlogic/light-blue-vue-admin/issues).
|
||||
|
||||
## Documentation
|
||||
|
||||
We need your help with improving documentation to the project. This might be the easiest way for
|
||||
you to contribute, because you don't even need to clone the repo but can edit or create new `.md`
|
||||
files right from GitHub website as described [here](https://help.github.com/articles/editing-files-in-your-repository/).
|
||||
|
||||
## Bugs & Feature Requests
|
||||
|
||||
Before opening an issue, please:
|
||||
|
||||
* Check [Documentation](https://demo.flatlogic.com/light-blue-vue-admin/documentation).
|
||||
* Search the [issue tracker](https://github.com/flatlogic/light-blue-vue-admin/issues) to make sure
|
||||
your issue hasn’t already been reported.
|
||||
* If your issue sounds more like a question, please post it on StackOverflow.com instead with the
|
||||
tag [sing-app](http://stackoverflow.com/questions/tagged/light-blue-vue-admin).
|
||||
|
||||
## Pull Requests
|
||||
|
||||
Before you submit a [pull request](https://help.github.com/articles/using-pull-requests/) from your
|
||||
forked repo, check that it meets these guidelines:
|
||||
|
||||
* If the pull request adds functionality, the docs should be updated as part of the same PR.
|
||||
* Create a separate PR for each small feature or bug fix.
|
||||
* [Squash](http://stackoverflow.com/questions/5189560/squash-my-last-x-commits-together-using-git)
|
||||
your commits into one for each PR.
|
||||
* When contributing to an opt-in feature, apply the `[feature/...]` tag as a prefix to your PR title
|
||||
|
||||
## Style Guide
|
||||
|
||||
We follow [Airbnb's Style Guide](https://github.com/airbnb/javascript) for best practices writing javascript code.
|
||||
|
||||
## Commit Message Guidelines
|
||||
|
||||
We have very precise rules over how our git commit messages can be formatted. This leads to **more
|
||||
readable messages** that are easy to follow when looking through the **project history**. But also,
|
||||
we use the git commit messages to **generate the ngx-admin change log**.
|
||||
|
||||
### Commit Message Format
|
||||
Each commit message consists of a **header**, a **body** and a **footer**. The header has a special
|
||||
format that includes a **type**, a **scope** and a **subject**:
|
||||
|
||||
```
|
||||
<type>(<scope>): <subject>
|
||||
<BLANK LINE>
|
||||
<body>
|
||||
<BLANK LINE>
|
||||
<footer>
|
||||
```
|
||||
|
||||
The **header** is mandatory and the **scope** of the header is optional.
|
||||
|
||||
Any line of the commit message cannot be longer 100 characters! This allows the message to be easier
|
||||
to read on GitHub as well as in various git tools.
|
||||
|
||||
### Revert
|
||||
If the commit reverts a previous commit, it should begin with `revert: `, followed by the header of
|
||||
the reverted commit. In the body it should say: `This reverts commit <hash>.`, where the hash is
|
||||
the SHA of the commit being reverted.
|
||||
|
||||
### Type
|
||||
Must be one of the following:
|
||||
|
||||
* **feat**: A new feature
|
||||
* **fix**: A bug fix
|
||||
* **docs**: Documentation only changes
|
||||
* **style**: Changes that do not affect the meaning of the code (white-space, formatting, missing
|
||||
semi-colons, etc)
|
||||
* **refactor**: A code change that neither fixes a bug nor adds a feature
|
||||
* **perf**: A code change that improves performance
|
||||
* **test**: Adding missing tests or correcting existing tests
|
||||
* **build**: Changes that affect the build system, CI configuration or external dependencies
|
||||
(example scopes: gulp, broccoli, npm)
|
||||
* **chore**: Other changes that don't modify `src` or `test` files
|
||||
* **relese**: Release version commit
|
||||
|
||||
### Scope
|
||||
The scope could be anything specifying place of the commit change. For example
|
||||
`menu`, `sidebar`, etc.
|
||||
|
||||
### Subject
|
||||
The subject contains succinct description of the change:
|
||||
|
||||
* use the imperative, present tense: "change" not "changed" nor "changes"
|
||||
* don't capitalize first letter
|
||||
* no dot (.) at the end
|
||||
|
||||
### Body
|
||||
Optional. Just as in the **subject**, use the imperative, present tense: "change" not "changed" nor "changes".
|
||||
The body should include the motivation for the change and contrast this with previous behavior.
|
||||
|
||||
### Footer
|
||||
Optional. The footer should contain any information about **Breaking Changes** and is also the place to
|
||||
reference GitHub issues that this commit **Closes**.
|
||||
|
||||
**Breaking Changes** should start with the word `BREAKING CHANGE:` with a space or two newlines.
|
||||
The rest of the commit message is then used for this.
|
||||
|
||||
## License
|
||||
|
||||
By contributing to Light Blue, you agree that your contributions will be licensed under its
|
||||
[MIT license](https://github.com/flatlogic/sing-app/blob/master/LICENSE).
|
||||
@ -1,21 +0,0 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2018 Flatlogic, LLC
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
@ -1,113 +0,0 @@
|
||||
# 🚀 Light Blue Vue Full - A Free Transparent Vue.js Admin Dashboard Template!
|
||||
|
||||
[View Demo](https://flatlogic.com/templates/light-blue-vue/demo) | [Download](https://github.com/flatlogic/light-blue-vue/archive/refs/heads/master.zip) | [More Templates](https://flatlogic.com/templates) | [Discord Community](https://discord.gg/flatlogic-community) | [Support Forum](https://flatlogic.com/forum)
|
||||
|
||||
[](https://flatlogic.com/admin-dashboards/light-blue-vue/demo)
|
||||
|
||||
**Originally a premium product priced at $69+, made available for free in January 2025!** 🎉
|
||||
|
||||
Looking for a perfect codebase generator for your Startup? Try [Flatlogic AI Web App Generator](https://flatlogic.com/generator) - our new tool, sort of a template++.
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Why Light Blue Vue?
|
||||
- **Ex-Premium**: This template was previously paid. Enjoy it for free now. 😉
|
||||
- **Tons of components**: Hundreds of ready-to-use UI elements, charts, and more.
|
||||
- **Join the Community**: [Flatlogic Discord](https://discord.gg/flatlogic-community) is where the action happens.
|
||||
- **Free Node.js Backend**: Pair it up with [this backend](https://github.com/flatlogic/nodejs-backend) to go full-stack.
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Quick Start
|
||||
|
||||
1. **Clone the repo**
|
||||
```bash
|
||||
git clone https://github.com/flatlogic/light-blue-vue.git
|
||||
cd light-blue-vue
|
||||
```
|
||||
2. **Install dependencies**
|
||||
```bash
|
||||
yarn install # Or npm install
|
||||
```
|
||||
3. **Run the app**
|
||||
```bash
|
||||
yarn run start
|
||||
```
|
||||
Navigate to http://localhost:3000/.
|
||||
|
||||
4. **Build for production**
|
||||
```bash
|
||||
yarn build
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🧩 Features
|
||||
|
||||
- No jQuery!
|
||||
- Fully Responsive
|
||||
- Vue.js 2.5.2
|
||||
- 8 Charts Libraries
|
||||
- 2 Dashboards
|
||||
- E-Commerce Section
|
||||
- Fully Documented Codebase
|
||||
|
||||
---
|
||||
|
||||
## 🛠 Built With
|
||||
- Vue.js
|
||||
- Bootstrap 5
|
||||
- Node.js
|
||||
- HTML5
|
||||
- JavaScript (ES6)
|
||||
- SASS
|
||||
|
||||
---
|
||||
|
||||
## 📦 Components
|
||||
- UI Elements (Badge, Card, Carousel, Modal, etc.)
|
||||
- Charts (Flot, Morris, Rickshaw, Sparkline, Easy Pie Charts)
|
||||
- Forms (Validation, Wizard, Elements)
|
||||
- Dashboards (Analytics, Visits)
|
||||
- Pages (Profile, E-commerce, Calendar, Chat, Error)
|
||||
- Maps (Google, Vector)
|
||||
|
||||
---
|
||||
|
||||
## 🌍 Available Variants
|
||||
|
||||
| | **Material** | **Transparent** | **Classic** | **Sofia** | **Flatlogic** |
|
||||
|---------------|-----------------------------------------------------------|---------------------------------------------------------|-------------------------------------------------------|-----------------------------------------------------|----------------------------------------------------|
|
||||
| **React** | [React Material Admin](https://github.com/flatlogic/react-material-admin-full) | [Light Blue React](https://github.com/flatlogic/light-blue-react) | [Sing App React](https://github.com/flatlogic/sing-app-react) | [Sofia React](https://github.com/flatlogic/sofia-react) | [One React](https://github.com/flatlogic/one-react) |
|
||||
| **Angular** | [Angular Material Admin](https://github.com/flatlogic/angular-material-admin-full) | [Light Blue Angular](https://github.com/flatlogic/light-blue-angular) | [Sing App Angular](https://github.com/flatlogic/sing-app-angular) | - | - |
|
||||
| **Vue** | [Material Vue](https://github.com/flatlogic/material-vue-full) | [Light Blue Vue](https://github.com/flatlogic/light-blue-vue) | [Sing App Vue](https://github.com/flatlogic/sing-app-vue) | - | - |
|
||||
| **Bootstrap** | - | [Light Blue HTML5](https://github.com/flatlogic/light-blue-html5) | [Sing App HTML5](https://github.com/flatlogic/sing-app-html5) | - | [One Bootstrap](https://github.com/flatlogic/one-bootstrap-template-full) |
|
||||
|
||||
Additionally, these templates are tailored for specific business needs:
|
||||
|
||||
- [E-Commerce Frontend (React)](https://github.com/flatlogic/ecommerce-frontend) - A complete e-commerce solution.
|
||||
- [Bookkeeper UI (React)](https://github.com/flatlogic/bookkeeper-ui) - Accounting dashboard for finance management.
|
||||
- [User Management Template (React)](https://github.com/flatlogic/user-management-template) - User authentication and management.
|
||||
|
||||
---
|
||||
|
||||
## 👨💻 How to Contribute
|
||||
- **Star this repo ⭐** - show some love.
|
||||
- **Report bugs** - but be nice.
|
||||
- **Join the [Discord](<insert-discord-invite-link>)** - meet fellow devs.
|
||||
|
||||
---
|
||||
|
||||
## 🔥 About Flatlogic
|
||||
[Flatlogic AI Software Engineer](https://flatlogic.com/ai-software-development-agent) builds modern business software so you don't have to. Our AI Software Development Agent helps you generate, deploy, and maintain enterprise applications with minimal effort.
|
||||
|
||||
---
|
||||
|
||||
## 📜 License
|
||||
This template is free to use. Modify it, break it, make it your own. Just don’t try to sell it back to us. 😎
|
||||
|
||||
---
|
||||
|
||||
> **Questions or feedback?**
|
||||
> Join our [Flatlogic Community Discord](https://discord.gg/flatlogic-community) or visit our [support forum](https://flatlogic.com/forum). We might even reply!
|
||||
|
||||
@ -1,5 +0,0 @@
|
||||
module.exports = {
|
||||
presets: [
|
||||
'@vue/app'
|
||||
]
|
||||
}
|
||||
@ -1,129 +0,0 @@
|
||||
# Changelog
|
||||
|
||||
## [3.3.3] - 22/11/2024
|
||||
|
||||
- Fixed dev mode errors
|
||||
|
||||
## [3.3.2] [27/04/2023]
|
||||
|
||||
- Fix vuex errors
|
||||
- Fix charts errors
|
||||
|
||||
### Updated
|
||||
- Update dependency
|
||||
|
||||
## [3.3.1] [04/07/2022]
|
||||
|
||||
- Fix auth page style and several errors
|
||||
|
||||
## [3.3.0] [01/07/2022]
|
||||
|
||||
### Updated
|
||||
- Update dependency
|
||||
- Updated Bootstrap/Reactstrap
|
||||
- Add theme switcher
|
||||
|
||||
## [3.2.3] [22/10/2021]
|
||||
|
||||
### Updated
|
||||
- Add link to generator in sidebar
|
||||
|
||||
## [3.2.2] [12/04/2021]
|
||||
|
||||
### Updated
|
||||
- Update project for new backend
|
||||
- Update support links
|
||||
|
||||
## [3.2.1]
|
||||
|
||||
- Fix icons animation
|
||||
- Fix images naming
|
||||
- Fix calendar buttons
|
||||
- Fix 404 page
|
||||
|
||||
## [3.2.0]
|
||||
|
||||
- Updated documentation
|
||||
|
||||
## [3.1.9]
|
||||
|
||||
### Updated
|
||||
|
||||
- Update dependency
|
||||
|
||||
## [3.1.8]
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix popover text color;
|
||||
- Fix modal buttons;
|
||||
- Fix typography color;
|
||||
- Fix colors in several charts;
|
||||
- Fix input colors in forms elements
|
||||
|
||||
## [3.1.7]
|
||||
|
||||
### Updated
|
||||
|
||||
- Update dependency
|
||||
|
||||
### Fixed
|
||||
|
||||
- Much work has been done to improve and correct a lot of small bugs :)
|
||||
|
||||
## [3.1.6]
|
||||
|
||||
### Updated
|
||||
|
||||
- Update dependency
|
||||
|
||||
## [3.1.5]
|
||||
|
||||
### Fixed
|
||||
|
||||
- Update dependency
|
||||
- Fix animate class
|
||||
- Fix link to git repo
|
||||
|
||||
## [3.1.4]
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix invalid token validation
|
||||
|
||||
## [3.1.3]
|
||||
|
||||
### Fixed
|
||||
|
||||
- fixed issue with themes
|
||||
|
||||
## [3.1.2]
|
||||
|
||||
### Updated
|
||||
|
||||
- updated seed version
|
||||
- updated documentation
|
||||
|
||||
## [3.1.1]
|
||||
|
||||
### Fixed
|
||||
|
||||
- Design fixes
|
||||
|
||||
## [3.1.0]
|
||||
|
||||
### Updated
|
||||
|
||||
- Added brand new design!
|
||||
|
||||
## [3.0.5]
|
||||
|
||||
### Fixed
|
||||
|
||||
- fix bugs
|
||||
|
||||
## [3.0.4]
|
||||
|
||||
### Updated
|
||||
|
||||
- added documentation menu
|
||||
2
light-blue-vue-master/jqueryStub.js
vendored
@ -1,2 +0,0 @@
|
||||
// this is an workaround of jquery requirement for the vue-bootstrap-slide library
|
||||
module.exports = null;
|
||||
@ -1,115 +0,0 @@
|
||||
{
|
||||
"name": "light-blue-vue",
|
||||
"version": "3.3.3",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"start": "vue-cli-service serve --port 3000",
|
||||
"start:backend": "cross-env VUE_APP_BACKEND=true vue-cli-service serve --port 3000",
|
||||
"build": "cross-env VUE_APP_BACKEND=true vue-cli-service build",
|
||||
"lint": "vue-cli-service lint",
|
||||
"node": "node server.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"@amcharts/amcharts4": "^4.10.35",
|
||||
"@amcharts/amcharts4-geodata": "^4.1.26",
|
||||
"@ckeditor/ckeditor5-build-classic": "^12.4.0",
|
||||
"@ckeditor/ckeditor5-vue": "^1.0.3",
|
||||
"@fullcalendar/core": "^4.4.2",
|
||||
"@fullcalendar/daygrid": "^4.4.2",
|
||||
"@fullcalendar/interaction": "^4.4.2",
|
||||
"@fullcalendar/timegrid": "^4.4.2",
|
||||
"@fullcalendar/vue": "^4.4.2",
|
||||
"animate.css": "^4.1.1",
|
||||
"animated-number-vue": "^1.0.0",
|
||||
"apexcharts": "^3.22.1",
|
||||
"awesome-bootstrap-checkbox": "^1.0.1",
|
||||
"axios": "^0.23.0",
|
||||
"bootstrap": "^5.2.3",
|
||||
"bootstrap-vue": "2.22.0",
|
||||
"chart.js": "^2.9.4",
|
||||
"chroma-js": "^2.4.2",
|
||||
"core-js": "2.6.12",
|
||||
"cross-env": "^7.0.3",
|
||||
"css-loader": "^1.0.1",
|
||||
"echarts": "4.9.0",
|
||||
"expose-loader": "^0.7.5",
|
||||
"font-awesome": "4.7.0",
|
||||
"glyphicons-halflings": "^1.9.1",
|
||||
"highcharts": "^7.2.2",
|
||||
"highcharts-vue": "^1.4.0",
|
||||
"imports-loader": "^0.8.0",
|
||||
"jsonwebtoken": "^8.5.1",
|
||||
"line-awesome": "1.3.0",
|
||||
"mavon-editor": "^2.10.4",
|
||||
"moment": "^2.29.1",
|
||||
"rickshaw": "1.7.1",
|
||||
"skycons": "^1.0.0",
|
||||
"v-calendar": "^1.1.1",
|
||||
"v-mask": "^1.3.4",
|
||||
"vee-validate": "^2.2.15",
|
||||
"vue": "^2.7.14",
|
||||
"vue-apexcharts": "^1.6.2",
|
||||
"vue-bootstrap-slider": "2.1.8",
|
||||
"vue-carousel": "^0.18.0",
|
||||
"vue-chartjs": "^3.5.1",
|
||||
"vue-code-highlight": "^0.7.8",
|
||||
"vue-color": "^2.8.1",
|
||||
"vue-draggable-nested-tree": "^2.2.20",
|
||||
"vue-echarts": "^4.1.0",
|
||||
"vue-form-wizard": "^0.8.4",
|
||||
"vue-gallery": "^1.5.0",
|
||||
"vue-input-tag": "^2.0.7",
|
||||
"vue-router": "^3.6.5",
|
||||
"vue-select": "^2.6.4",
|
||||
"vue-tables-2": "^1.6.25",
|
||||
"vue-textarea-autosize": "^1.1.1",
|
||||
"vue-toasted": "^1.1.28",
|
||||
"vue-touch": "2.0.0-beta.4",
|
||||
"vue2-datepicker": "^2.13.4",
|
||||
"vue2-dropzone": "^3.6.0",
|
||||
"vue2-google-maps": "0.10.7",
|
||||
"vuedraggable": "^2.24.3",
|
||||
"vuetrend": "^0.3.4",
|
||||
"vuex": "^3.6.2",
|
||||
"webpack-cli": "^3.3.12"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@vue/cli-plugin-babel": "^3.12.0",
|
||||
"@vue/cli-plugin-eslint": "^3.12.0",
|
||||
"@vue/cli-service": "^3.12.0",
|
||||
"sass": "^1.62.1",
|
||||
"sass-loader": "^10.4.1",
|
||||
"vue-template-compiler": "^2.7.14",
|
||||
"webpack": "^5.81.0"
|
||||
},
|
||||
"resolutions": {
|
||||
"core-js": "3.23.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14"
|
||||
},
|
||||
"eslintConfig": {
|
||||
"root": true,
|
||||
"env": {
|
||||
"node": true
|
||||
},
|
||||
"extends": [
|
||||
"plugin:vue/essential",
|
||||
"eslint:recommended"
|
||||
],
|
||||
"rules": {},
|
||||
"parserOptions": {
|
||||
"parser": "babel-eslint"
|
||||
}
|
||||
},
|
||||
"postcss": {
|
||||
"plugins": {
|
||||
"autoprefixer": {}
|
||||
}
|
||||
},
|
||||
"browserslist": [
|
||||
"> 1%",
|
||||
"last 2 versions",
|
||||
"not ie <= 8"
|
||||
]
|
||||
}
|
||||
|
Before Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 63 KiB |
|
Before Width: | Height: | Size: 166 KiB |
|
Before Width: | Height: | Size: 170 KiB |
|
Before Width: | Height: | Size: 149 KiB |
|
Before Width: | Height: | Size: 146 KiB |
|
Before Width: | Height: | Size: 149 KiB |
|
Before Width: | Height: | Size: 166 KiB |
|
Before Width: | Height: | Size: 57 KiB |
@ -1,33 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="referrer" content="no-referrer-when-downgrade">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||||
<link rel="icon" href="<%= BASE_URL %>favicon.png">
|
||||
<title>Light Blue Vue.js Dashboard - Vue.js Admin Template</title>
|
||||
<meta name="description" content="Vue.js Admin Dashboard Template built with vue-router, vuex and bootstrap 4">
|
||||
<meta name="keywords" content="vue admin, vue admin template, vue dashboard, vue.js admin dashboard, vue template, vue.js theme">
|
||||
<meta name="author" content="Flatlogic LLC">
|
||||
<!-- Global site tag (gtag.js) - Google Analytics -->
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-36759672-9"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
|
||||
gtag('config', 'UA-36759672-9');
|
||||
</script>
|
||||
<!-- Yandex.Metrika counter -->
|
||||
<script type="text/javascript" > (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)}; m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)}) (window, document, "script", "https://cdn.jsdelivr.net/npm/yandex-metrica-watch/tag.js", "ym"); ym(48020168, "init", { id:48020168, clickmap:true, trackLinks:true, accurateTrackBounce:true, webvisor:true, trackHash:true, ecommerce:"dataLayer" }); </script>
|
||||
<!-- /Yandex.Metrika counter -->
|
||||
</head>
|
||||
<body>
|
||||
<noscript>
|
||||
<strong>We're sorry but vue-cli doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
|
||||
</noscript>
|
||||
<div id="app"></div>
|
||||
<!-- built files will be auto injected -->
|
||||
</body>
|
||||
</html>
|
||||
@ -1,8 +0,0 @@
|
||||
var express = require('express');
|
||||
var serveStatic = require('serve-static');
|
||||
|
||||
var app = express();
|
||||
app.use(serveStatic(__dirname + "/dist"));
|
||||
|
||||
var port = process.env.PORT || 5000;
|
||||
app.listen(port);
|
||||
@ -1,11 +0,0 @@
|
||||
<template>
|
||||
<router-view />
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'App',
|
||||
};
|
||||
</script>
|
||||
|
||||
<style src="./styles/theme.scss" lang="scss" />
|
||||
@ -1,467 +0,0 @@
|
||||
import Vue from 'vue';
|
||||
import Router from 'vue-router';
|
||||
|
||||
import Layout from '@/components/Layout/Layout';
|
||||
// Core
|
||||
import TypographyPage from '@/pages/Core/Typography/Typography';
|
||||
import ColorsPage from '@/pages/Core/Colors/Colors';
|
||||
import CoreGridPage from '@/pages/Core/Grid/Grid';
|
||||
// Tables
|
||||
import TablesBasicPage from '@/pages/Tables/Basic/Basic';
|
||||
import TablesDynamicPage from '@/pages/Tables/Dynamic/Dynamic';
|
||||
// Maps
|
||||
import GoogleMapPage from '@/pages/Maps/Google/Google';
|
||||
import AmchartsMapPage from '@/pages/Maps/Amcharts/Amcharts';
|
||||
// Main
|
||||
import VisitsPage from '@/pages/Visits/Visits';
|
||||
import AnalyticsPage from '@/pages/Dashboard/Dashboard';
|
||||
import WidgetsPage from '@/pages/Widgets/Widgets';
|
||||
// Charts
|
||||
import ChartsPage from '@/pages/Charts/Charts';
|
||||
import ApexPage from '@/pages/Charts/Apex/Apex';
|
||||
import EchartsPage from '@/pages/Charts/Echarts/Echarts';
|
||||
import HighchartsPage from '@/pages/Charts/Highcharts/Highcharts';
|
||||
|
||||
import ProfilePage from '@/pages/Profile/Profile';
|
||||
// Profile
|
||||
import PackagePage from '@/pages/Package/Package';
|
||||
// Email
|
||||
import EmailPage from '@/pages/Email/Email';
|
||||
// Ecommerce
|
||||
import ProductsManagement from '@/pages/Ecommerce/Management/Management';
|
||||
import ProductEdit from '@/pages/Ecommerce/Management/components/ProductEdit/ProductEdit';
|
||||
import ProductsPage from '@/pages/Ecommerce/ProductsGrid/ProductsGrid';
|
||||
import ProductPage from '@/pages/Ecommerce/ProductPage/ProductPage';
|
||||
// Grid
|
||||
import GridPagePage from '@/pages/Grid/Grid';
|
||||
// Forms
|
||||
import FormElementsPage from '@/pages/Forms/Elements/Elements';
|
||||
import FormValidationPage from '@/pages/Forms/Validation/Validation';
|
||||
import FormWizardPage from '@/pages/Forms/Wizard/Wizard';
|
||||
// Extra
|
||||
import CalendarPage from '@/pages/Extra/Calendar/Calendar';
|
||||
import InvoicePage from '@/pages/Extra/Invoice/Invoice';
|
||||
import SearchPage from '@/pages/Extra/Search/Search';
|
||||
import TimelinePage from '@/pages/Extra/Timeline/Timeline';
|
||||
import GalleryPage from '@/pages/Extra/Gallery/Gallery';
|
||||
import Login from '@/pages/Login/Login';
|
||||
import LoginDemo from '@/pages/Extra/LoginDemo/LoginDemo';
|
||||
import Register from '@/pages/Register/Register';
|
||||
import ErrorPage from '@/pages/Error/Error';
|
||||
// Ui
|
||||
import AlertsPage from '@/pages/Ui/Alerts/Alerts';
|
||||
import BadgePage from '@/pages/Ui/Badge/Badge';
|
||||
import ButtonsPage from '@/pages/Ui/Buttons/Buttons';
|
||||
import CardPage from '@/pages/Ui/Card/Card';
|
||||
import CarouselPage from '@/pages/Ui/Carousel/Carousel';
|
||||
import IconsPage from '@/pages/Ui/Icons/Icons';
|
||||
import JumbotronPage from '@/pages/Ui/Jumbotron/Jumbotron';
|
||||
import ListGroupsPage from '@/pages/Ui/ListGroups/ListGroups';
|
||||
import ModalPage from '@/pages/Ui/Modal/Modal';
|
||||
import NavPage from '@/pages/Ui/Nav/Nav';
|
||||
import NavbarPage from '@/pages/Ui/Navbar/Navbar';
|
||||
import NotificationsPage from '@/pages/Ui/Notifications/Notifications';
|
||||
import PopoversPage from '@/pages/Ui/Popovers/Popovers';
|
||||
import ProgressPage from '@/pages/Ui/Progress/Progress';
|
||||
import TabsPage from '@/pages/Ui/Tabs/Tabs';
|
||||
|
||||
import Documentation from '@/documentation/DocumentationLayout';
|
||||
import DocLicensesPage from '@/documentation/pages/getting-started/Licenses';
|
||||
import DocQuickStartPage from '@/documentation/pages/getting-started/QuickStart';
|
||||
import DocOverviewPage from '@/documentation/pages/getting-started/Overview';
|
||||
import DocLibsPage from '@/documentation/pages/Libs';
|
||||
import DocPagesPage from '@/documentation/pages/Pages';
|
||||
import DocAlertsPage from '@/documentation/pages/components/Alerts';
|
||||
import DocBadgePage from '@/documentation/pages/components/Badge';
|
||||
import DocButtonsPage from '@/documentation/pages/components/Buttons';
|
||||
import DocCardPage from '@/documentation/pages/components/Card';
|
||||
import DocCarouselPage from '@/documentation/pages/components/Carousel';
|
||||
import DocModalPage from '@/documentation/pages/components/Modal';
|
||||
import DocNavPage from '@/documentation/pages/components/Nav';
|
||||
import DocNavbarPage from '@/documentation/pages/components/Navbar';
|
||||
import DocPopoversPage from '@/documentation/pages/components/Popovers';
|
||||
import DocProgressPage from '@/documentation/pages/components/Progress';
|
||||
import DocTabsPage from '@/documentation/pages/components/Tabs';
|
||||
|
||||
import { isAuthenticated } from './mixins/auth';
|
||||
|
||||
Vue.use(Router);
|
||||
|
||||
export default new Router({
|
||||
routes: [
|
||||
{path: '/', redirect: '/app/main/visits'},
|
||||
{path: '/app', redirect: '/app/main/visits'},
|
||||
{path: '/documentation', redirect: '/documentation/getting-started/overview'},
|
||||
{
|
||||
path: '/login',
|
||||
name: 'Login',
|
||||
component: Login,
|
||||
},
|
||||
{
|
||||
path: '/login-demo',
|
||||
name: 'LoginDemo',
|
||||
component: LoginDemo,
|
||||
},
|
||||
{
|
||||
path: '/register',
|
||||
name: 'Register',
|
||||
component: Register,
|
||||
},
|
||||
{
|
||||
path: '/error',
|
||||
name: 'Error',
|
||||
component: ErrorPage,
|
||||
},
|
||||
{
|
||||
path: '/documentation',
|
||||
name: 'Documentation',
|
||||
component: Documentation,
|
||||
children: [
|
||||
{
|
||||
path: 'getting-started/overview',
|
||||
name: 'Overview',
|
||||
component: DocOverviewPage,
|
||||
},
|
||||
{
|
||||
path: 'getting-started/licenses',
|
||||
name: 'Licenses',
|
||||
component: DocLicensesPage,
|
||||
},
|
||||
{
|
||||
path: 'getting-started/quick-start',
|
||||
name: 'QuickStart',
|
||||
component: DocQuickStartPage,
|
||||
},
|
||||
{
|
||||
path: 'components/alerts',
|
||||
name: 'Alerts',
|
||||
component: DocAlertsPage,
|
||||
},
|
||||
{
|
||||
path: 'components/badge',
|
||||
name: 'Badge',
|
||||
component: DocBadgePage,
|
||||
},
|
||||
{
|
||||
path: 'components/buttons',
|
||||
name: 'Buttons',
|
||||
component: DocButtonsPage,
|
||||
},
|
||||
{
|
||||
path: 'components/card',
|
||||
name: 'Card',
|
||||
component: DocCardPage,
|
||||
},
|
||||
{
|
||||
path: 'components/carousel',
|
||||
name: 'Carousel',
|
||||
component: DocCarouselPage,
|
||||
},
|
||||
{
|
||||
path: 'components/modal',
|
||||
name: 'Modal',
|
||||
component: DocModalPage,
|
||||
},
|
||||
{
|
||||
path: 'components/nav',
|
||||
name: 'Nav',
|
||||
component: DocNavPage,
|
||||
},
|
||||
{
|
||||
path: 'components/navbar',
|
||||
name: 'Navbar',
|
||||
component: DocNavbarPage,
|
||||
},
|
||||
{
|
||||
path: 'components/popovers',
|
||||
name: 'Popovers',
|
||||
component: DocPopoversPage,
|
||||
},
|
||||
{
|
||||
path: 'components/progress',
|
||||
name: 'Progress',
|
||||
component: DocProgressPage,
|
||||
},
|
||||
{
|
||||
path: 'components/tabs',
|
||||
name: 'Tabs',
|
||||
component: DocTabsPage,
|
||||
},
|
||||
{
|
||||
path: 'libs',
|
||||
name: 'Libs',
|
||||
component: DocLibsPage,
|
||||
},
|
||||
{
|
||||
path: 'pages',
|
||||
name: 'Pages',
|
||||
component: DocPagesPage,
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
path: '/app',
|
||||
name: 'Layout',
|
||||
component: Layout,
|
||||
beforeEnter: (to, from, next) => {
|
||||
let token = localStorage.getItem('token');
|
||||
isAuthenticated(token) ? next() : next({path: '/login'});
|
||||
},
|
||||
children: [
|
||||
// main pages
|
||||
{
|
||||
path: 'main/analytics',
|
||||
name: 'AnalyticsPage',
|
||||
component: AnalyticsPage,
|
||||
},
|
||||
{
|
||||
path: 'main/visits',
|
||||
name: 'VisitsPage',
|
||||
component: VisitsPage,
|
||||
},
|
||||
{
|
||||
path: 'main/widgets',
|
||||
name: 'WidgetsPage',
|
||||
component: WidgetsPage,
|
||||
},
|
||||
// package page
|
||||
{
|
||||
path: 'package',
|
||||
name: 'PackagePage',
|
||||
component: PackagePage,
|
||||
},
|
||||
// profile page
|
||||
{
|
||||
path: 'profile',
|
||||
name: 'ProfilePage',
|
||||
component: ProfilePage,
|
||||
},
|
||||
// email page
|
||||
{
|
||||
path: 'email',
|
||||
name: 'EmailPage',
|
||||
component: EmailPage,
|
||||
},
|
||||
// ecommerce pages
|
||||
{
|
||||
path: 'ecommerce/management',
|
||||
name: 'ProductsManagement',
|
||||
component: ProductsManagement,
|
||||
},
|
||||
{
|
||||
path: 'ecommerce/management/:id',
|
||||
name: 'ProductEdit',
|
||||
component: ProductEdit,
|
||||
},
|
||||
{
|
||||
path: 'ecommerce/management/create',
|
||||
name: 'ProductCreate',
|
||||
component: ProductEdit,
|
||||
},
|
||||
{
|
||||
path: 'ecommerce/products',
|
||||
name: 'ProductsPage',
|
||||
component: ProductsPage,
|
||||
},
|
||||
{
|
||||
path: 'ecommerce/product',
|
||||
name: 'ProductPage',
|
||||
component: ProductPage,
|
||||
},
|
||||
{
|
||||
path: 'ecommerce/product/:id',
|
||||
name: 'DefiniteProductPage',
|
||||
component: ProductPage,
|
||||
},
|
||||
// core pages
|
||||
{
|
||||
path: 'core/typography',
|
||||
name: 'TypographyPage',
|
||||
component: TypographyPage,
|
||||
},
|
||||
{
|
||||
path: 'core/colors',
|
||||
name: 'ColorsPage',
|
||||
component: ColorsPage,
|
||||
},
|
||||
{
|
||||
path: 'core/grid',
|
||||
name: 'CoreGridPage',
|
||||
component: CoreGridPage,
|
||||
},
|
||||
// ui pages
|
||||
{
|
||||
path: 'ui/alerts',
|
||||
name: 'AlertsPage',
|
||||
component: AlertsPage,
|
||||
},
|
||||
{
|
||||
path: 'ui/badge',
|
||||
name: 'BadgePage',
|
||||
component: BadgePage,
|
||||
},
|
||||
{
|
||||
path: 'ui/buttons',
|
||||
name: 'ButtonsPage',
|
||||
component: ButtonsPage,
|
||||
},
|
||||
{
|
||||
path: 'ui/card',
|
||||
name: 'CardPage',
|
||||
component: CardPage,
|
||||
},
|
||||
{
|
||||
path: 'ui/carousel',
|
||||
name: 'CarouselPage',
|
||||
component: CarouselPage,
|
||||
},
|
||||
{
|
||||
path: 'ui/jumbotron',
|
||||
name: 'JumbotronPage',
|
||||
component: JumbotronPage,
|
||||
},
|
||||
{
|
||||
path: 'ui/icons',
|
||||
name: 'IconsPage',
|
||||
component: IconsPage,
|
||||
},
|
||||
{
|
||||
path: 'ui/list-groups',
|
||||
name: 'ListGroupsPage',
|
||||
component: ListGroupsPage,
|
||||
},
|
||||
{
|
||||
path: 'ui/modal',
|
||||
name: 'ModalPage',
|
||||
component: ModalPage,
|
||||
},
|
||||
{
|
||||
path: 'ui/nav',
|
||||
name: 'NavPage',
|
||||
component: NavPage,
|
||||
},
|
||||
{
|
||||
path: 'ui/navbar',
|
||||
name: 'NavbarPage',
|
||||
component: NavbarPage,
|
||||
},
|
||||
{
|
||||
path: 'ui/notifications',
|
||||
name: 'NotificationsPage',
|
||||
component: NotificationsPage,
|
||||
},
|
||||
{
|
||||
path: 'ui/popovers',
|
||||
name: 'PopoversPage',
|
||||
component: PopoversPage,
|
||||
},
|
||||
{
|
||||
path: 'ui/progress',
|
||||
name: 'ProgressPage',
|
||||
component: ProgressPage,
|
||||
},
|
||||
{
|
||||
path: 'ui/tabs',
|
||||
name: 'TabsPage',
|
||||
component: TabsPage,
|
||||
},
|
||||
// forms
|
||||
{
|
||||
path: 'forms/elements',
|
||||
name: 'FormElementsPage',
|
||||
component: FormElementsPage,
|
||||
},
|
||||
{
|
||||
path: 'forms/validation',
|
||||
name: 'FormValidationPage',
|
||||
component: FormValidationPage,
|
||||
},
|
||||
{
|
||||
path: 'forms/wizard',
|
||||
name: 'FormWizardPage',
|
||||
component: FormWizardPage,
|
||||
},
|
||||
// Charts
|
||||
{
|
||||
path: 'charts/overview',
|
||||
name: 'ChartsPage',
|
||||
component: ChartsPage,
|
||||
},
|
||||
{
|
||||
path: 'charts/apex',
|
||||
name: 'ApexPage',
|
||||
component: ApexPage,
|
||||
},
|
||||
{
|
||||
path: 'charts/echarts',
|
||||
name: 'EchartsPage',
|
||||
component: EchartsPage,
|
||||
},
|
||||
{
|
||||
path: 'charts/highcharts',
|
||||
name: 'HighchartsPage',
|
||||
component: HighchartsPage,
|
||||
},
|
||||
// grid page
|
||||
{
|
||||
path: 'grid',
|
||||
name: 'GridPage',
|
||||
component: GridPagePage,
|
||||
},
|
||||
// tables pages
|
||||
{
|
||||
path: 'tables/basic',
|
||||
name: 'TablesBasicPage',
|
||||
component: TablesBasicPage,
|
||||
},
|
||||
{
|
||||
path: 'tables/dynamic',
|
||||
name: 'TablesDynamicPage',
|
||||
component: TablesDynamicPage,
|
||||
},
|
||||
// maps pages
|
||||
{
|
||||
path: 'maps/google',
|
||||
name: 'GoogleMapPage',
|
||||
component: GoogleMapPage,
|
||||
},
|
||||
{
|
||||
path: 'maps/amcharts',
|
||||
name: 'AmchartsMapPage',
|
||||
component: AmchartsMapPage,
|
||||
},
|
||||
// extra pages
|
||||
{
|
||||
path: 'extra/calendar',
|
||||
name: 'CalendarPage',
|
||||
component: CalendarPage,
|
||||
},
|
||||
{
|
||||
path: 'extra/invoice',
|
||||
name: 'InvoicePage',
|
||||
component: InvoicePage,
|
||||
},
|
||||
{
|
||||
path: 'extra/search',
|
||||
name: 'SearchPage',
|
||||
component: SearchPage,
|
||||
},
|
||||
{
|
||||
path: 'extra/time-line',
|
||||
name: 'TimelinePage',
|
||||
component: TimelinePage,
|
||||
},
|
||||
{
|
||||
path: 'extra/gallery',
|
||||
name: 'GalleryPage',
|
||||
component: GalleryPage,
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
path: '*',
|
||||
name: 'Error',
|
||||
component: ErrorPage,
|
||||
}
|
||||
],
|
||||
});
|
||||
@ -1 +0,0 @@
|
||||
<svg width="2370" height="2500" viewBox="0 0 256 270" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMinYMin meet"><path d="M127.606.341L.849 44.95 20.88 211.022l106.86 58.732 107.412-59.528L255.175 44.16 127.606.341z" fill="#B3B3B3"/><path d="M242.532 53.758L127.31 14.466v241.256l96.561-53.441 18.66-148.523z" fill="#A6120D"/><path d="M15.073 54.466l17.165 148.525 95.07 52.731V14.462L15.074 54.465z" fill="#DD1B16"/><path d="M159.027 142.898L127.31 157.73H93.881l-15.714 39.305-29.228.54L127.31 23.227l31.717 119.672zm-3.066-7.467l-28.44-56.303-23.329 55.334h23.117l28.652.97z" fill="#F2F2F2"/><path d="M127.309 23.226l.21 55.902 26.47 55.377h-26.62l-.06 23.189 36.81.035 17.204 39.852 27.967.518-81.981-174.873z" fill="#B3B3B3"/></svg>
|
||||
|
Before Width: | Height: | Size: 749 B |
@ -1,14 +0,0 @@
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 230 230" style="enable-background:new 0 0 230 230;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#DD0031;}
|
||||
.st1{fill:#C3002F;}
|
||||
.st2{fill:#FFFFFF;}
|
||||
</style>
|
||||
<g>
|
||||
<polygon class="st0" points="125,30 125,30 125,30 31.9,63.2 46.1,186.3 125,230 125,230 125,230 203.9,186.3 218.1,63.2 "/>
|
||||
<polygon class="st1" points="125,30 125,52.2 125,52.1 125,153.4 125,153.4 125,230 125,230 203.9,186.3 218.1,63.2 125,30 "/>
|
||||
<path class="st2" d="M125,52.1L66.8,182.6h0h21.7h0l11.7-29.2h49.4l11.7,29.2h0h21.7h0L125,52.1L125,52.1L125,52.1L125,52.1
|
||||
L125,52.1z M142,135.4H108l17-40.9L142,135.4z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 749 B |
@ -1,40 +0,0 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Capa_1" x="0px" y="0px" width="512px" height="512px" viewBox="0 0 306 306" style="enable-background:new 0 0 306 306;" xml:space="preserve">
|
||||
<g>
|
||||
<g id="chevron-right">
|
||||
<polygon points="94.35,0 58.65,35.7 175.95,153 58.65,270.3 94.35,306 247.35,153 " fill="#FFFFFF"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 763 B |
|
Before Width: | Height: | Size: 9.5 KiB |
@ -1,38 +0,0 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 31.494 31.494" style="enable-background:new 0 0 31.494 31.494;" xml:space="preserve">
|
||||
<path style="fill:#1E201D;" d="M10.273,5.009c0.444-0.444,1.143-0.444,1.587,0c0.429,0.429,0.429,1.143,0,1.571l-8.047,8.047h26.554
|
||||
c0.619,0,1.127,0.492,1.127,1.111c0,0.619-0.508,1.127-1.127,1.127H3.813l8.047,8.032c0.429,0.444,0.429,1.159,0,1.587
|
||||
c-0.444,0.444-1.143,0.444-1.587,0l-9.952-9.952c-0.429-0.429-0.429-1.143,0-1.571L10.273,5.009z"/>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 850 B |
@ -1,39 +0,0 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Capa_1" x="0px" y="0px" viewBox="0 0 321.2 321.2" style="enable-background:new 0 0 321.2 321.2;" xml:space="preserve" width="512px" height="512px">
|
||||
<g>
|
||||
<g>
|
||||
<path d="M306.4,313.2l-24-223.6c-0.4-3.6-3.6-6.4-7.2-6.4h-44.4V69.6c0-38.4-31.2-69.6-69.6-69.6c-38.4,0-69.6,31.2-69.6,69.6 v13.6H46c-3.6,0-6.8,2.8-7.2,6.4l-24,223.6c-0.4,2,0.4,4,1.6,5.6c1.2,1.6,3.2,2.4,5.2,2.4h278c2,0,4-0.8,5.2-2.4 C306,317.2,306.8,315.2,306.4,313.2z M223.6,123.6c3.6,0,6.4,2.8,6.4,6.4c0,3.6-2.8,6.4-6.4,6.4c-3.6,0-6.4-2.8-6.4-6.4 C217.2,126.4,220,123.6,223.6,123.6z M106,69.6c0-30.4,24.8-55.2,55.2-55.2c30.4,0,55.2,24.8,55.2,55.2v13.6H106V69.6z M98.8,123.6c3.6,0,6.4,2.8,6.4,6.4c0,3.6-2.8,6.4-6.4,6.4c-3.6,0-6.4-2.8-6.4-6.4C92.4,126.4,95.2,123.6,98.8,123.6z M30,306.4 L52.4,97.2h39.2v13.2c-8,2.8-13.6,10.4-13.6,19.2c0,11.2,9.2,20.4,20.4,20.4c11.2,0,20.4-9.2,20.4-20.4c0-8.8-5.6-16.4-13.6-19.2 V97.2h110.4v13.2c-8,2.8-13.6,10.4-13.6,19.2c0,11.2,9.2,20.4,20.4,20.4c11.2,0,20.4-9.2,20.4-20.4c0-8.8-5.6-16.4-13.6-19.2V97.2 H270l22.4,209.2H30z" fill="#FFFFFF"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.4 KiB |
@ -1,17 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Слой_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 1370 240" enable-background="new 0 0 1370 240" xml:space="preserve">
|
||||
<g id="XMLID_1459_" opacity="0.56">
|
||||
<path id="XMLID_1462_" opacity="0.08" fill="#FFFFFF" d="M-3.8,10.1c0,0,82.4,129.7,304,144c112,7.2,222.9-15.6,290.5-59.1
|
||||
S771-2,946-2c182.5,0,194.7,91,291.1,94c131.3,4.1,135.9-22.6,135.9-22.6V130c0,0-22.7-28.4-102.4-10.3
|
||||
c-125.4,28.5-103.9,74.5-200.8,58C871,143.8,924.6,145.8,620.2,199c-206.3,36.1-396.7-15.6-475-17.1S-4,242.3-4,242.3L-3.8,10.1z"
|
||||
/>
|
||||
<path id="XMLID_1461_" opacity="0.08" fill="#FFFFFF" d="M-5,233.6V82.7c0,0,45.7,39.7,106.8,31.8S233.1,34.7,438,34.6
|
||||
c139,0,197,41.9,298.8,79.4s134.2,45.5,245.6,45.5S1138.5,100.2,1196,96s179,56.8,179,56.8V223c0,0-99.1-72.1-277-33.1
|
||||
s-338.5,29.7-457.1-10.8s-183.7-8.3-325.9-11.3S155.1,116,101,134.1C57.7,148.6-5,233.6-5,233.6z"/>
|
||||
<path id="XMLID_1460_" opacity="0.08" fill="#FFFFFF" d="M1376,183.4v-90c0,0-45.7,7.9-106.8,0S1137.9,13.7,933,13.6
|
||||
c-139,0-197,41.9-298.8,79.4s-134.2,61-245.6,61S233.8,93,176.3,88.8C118.8,84.6-4,131.8-4,131.8v49.7c0,0,98-89.5,275.9-50.5
|
||||
s339.5,67.6,458.1,27.1s174.7,6.1,316.9,3.1S1204.3,81,1280,116C1321.4,135.2,1376,183.4,1376,183.4z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.4 KiB |
@ -1,7 +0,0 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'>
|
||||
<svg width="64" version="1.1" xmlns="http://www.w3.org/2000/svg" height="64" viewBox="0 0 64 64" xmlns:xlink="http://www.w3.org/1999/xlink" enable-background="new 0 0 64 64">
|
||||
<g>
|
||||
<path fill="#1D1D1B" d="M28.941,31.786L0.613,60.114c-0.787,0.787-0.787,2.062,0,2.849c0.393,0.394,0.909,0.59,1.424,0.59 c0.516,0,1.031-0.196,1.424-0.59l28.541-28.541l28.541,28.541c0.394,0.394,0.909,0.59,1.424,0.59c0.515,0,1.031-0.196,1.424-0.59 c0.787-0.787,0.787-2.062,0-2.849L35.064,31.786L63.41,3.438c0.787-0.787,0.787-2.062,0-2.849c-0.787-0.786-2.062-0.786-2.848,0 L32.003,29.15L3.441,0.59c-0.787-0.786-2.061-0.786-2.848,0c-0.787,0.787-0.787,2.062,0,2.849L28.941,31.786z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 820 B |
|
Before Width: | Height: | Size: 43 KiB |
|
Before Width: | Height: | Size: 322 KiB |
|
Before Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 200 KiB |
@ -1,39 +0,0 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Capa_1" x="0px" y="0px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve" width="512px" height="512px">
|
||||
<g>
|
||||
<g>
|
||||
<path d="M504.527,67.909c-8.611-6.92-21.2-5.547-28.118,3.063L210.291,402.169c-3.612,3.863-8.494,6.101-13.797,6.314 c-5.459,0.22-10.629-1.73-14.523-5.431L33.839,261.061c-7.975-7.643-20.634-7.374-28.278,0.599 c-7.643,7.974-7.375,20.634,0.599,28.278l148.191,142.048c11.26,10.703,25.83,16.515,41.268,16.515 c0.825,0,1.655-0.017,2.484-0.051c16.352-0.657,31.371-7.734,42.288-19.926c0.237-0.265,0.467-0.537,0.691-0.814L507.59,96.027 C514.508,87.416,513.137,74.828,504.527,67.909z" fill="#555555"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 682 KiB |
@ -1,11 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: Sketch 52.4 (67378) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>dribble-logo</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="dribble-logo" fill="#6C757D" fill-rule="nonzero">
|
||||
<path d="M9.99056974,0 C4.48200393,0 0,4.48200393 0,9.99056974 C0,15.4991356 4.48200393,19.9811395 9.99056974,19.9811395 C15.4991356,19.9811395 19.9811395,15.4991356 19.9811395,9.99056974 C19.9811395,4.48200393 15.4990963,0 9.99056974,0 Z M16.5955599,4.60691552 C17.7844401,6.05929273 18.5025147,7.90880157 18.5212574,9.92314342 C18.2390177,9.86318271 15.4204322,9.29123772 12.5793713,9.64840864 L12.3957957,9.2075835 C12.2184676,8.79170923 12.0286444,8.37834971 11.8300982,7.97123772 C14.9858546,6.68369352 16.4157564,4.85041257 16.5955599,4.60691552 Z M9.99056974,1.46986248 C12.1585069,1.46986248 14.1403929,2.28282908 15.6464833,3.62031434 C15.4941454,3.83886051 14.210334,5.56471513 11.1757171,6.70239686 C9.77705305,4.13355599 8.22726916,2.02306483 7.99123772,1.70711198 C8.63308448,1.55229862 9.30247544,1.46986248 9.99056974,1.46986248 Z M6.36275049,2.28035363 C6.5875442,2.58880157 8.11233792,4.70180747 9.52601179,7.2156778 C5.53477407,8.27591356 2.01937132,8.26094303 1.63721022,8.25595285 C2.19041257,5.60719057 3.97500982,3.40679764 6.36275049,2.28035363 Z M1.45611002,10.0030648 L1.45984283,9.74204322 C1.83324165,9.75076621 5.96935167,9.803222 10.2290766,8.52817289 C10.4750884,9.0064833 10.707387,9.49225933 10.9221611,9.97681729 L10.5849902,10.0779568 C6.1853831,11.5003536 3.84385069,15.3792141 3.64903733,15.7088802 C2.28785855,14.1965815 1.45736739,12.1959921 1.45611002,10.0030648 Z M9.98931238,18.5362279 C8.01740668,18.5362279 6.19913556,17.8643615 4.75174853,16.735442 C4.90534381,16.423222 6.63371316,13.08389 11.4466798,11.4067191 L11.5028684,11.3879764 C12.7017289,14.5000393 13.1950098,17.1100589 13.3236542,17.8593713 C12.3008644,18.2952063 11.1732024,18.5374853 9.98931238,18.5362279 Z M14.7585462,17.0776031 C14.6711198,16.5580747 14.2153242,14.0604715 13.1013752,10.9933595 C15.7750884,10.5650295 18.1241257,11.2668369 18.4163458,11.3592534 C18.034224,13.7320236 16.6742633,15.7838507 14.7585462,17.0776031 Z" id="Shape"></path>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 2.4 KiB |
@ -1,11 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="11px" height="20px" viewBox="0 0 11 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: Sketch 52.4 (67378) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>facebook-logo</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="facebook-logo" fill="#6C757D">
|
||||
<path d="M10.3276289,0.00412371134 L7.75752577,0 C4.87010309,0 3.00412371,1.91443299 3.00412371,4.87752577 L3.00412371,7.12639175 L0.42,7.12639175 C0.196701031,7.12639175 0.0158762887,7.30742268 0.0158762887,7.53072165 L0.0158762887,10.7890722 C0.0158762887,11.0123711 0.196907216,11.1931959 0.42,11.1931959 L3.00412371,11.1931959 L3.00412371,19.4150515 C3.00412371,19.6383505 3.18494845,19.8191753 3.40824742,19.8191753 L6.77979381,19.8191753 C7.00309278,19.8191753 7.18391753,19.6381443 7.18391753,19.4150515 L7.18391753,11.1931959 L10.2053608,11.1931959 C10.4286598,11.1931959 10.6094845,11.0123711 10.6094845,10.7890722 L10.6107216,7.53072165 C10.6107216,7.42350515 10.5680412,7.32082474 10.4923711,7.24494845 C10.416701,7.16907216 10.3136082,7.12639175 10.2063918,7.12639175 L7.18391753,7.12639175 L7.18391753,5.22 C7.18391753,4.30371134 7.40226804,3.8385567 8.59587629,3.8385567 L10.3272165,3.83793814 C10.5503093,3.83793814 10.731134,3.65690722 10.731134,3.43381443 L10.731134,0.408247423 C10.731134,0.185360825 10.5505155,0.00453608247 10.3276289,0.00412371134 Z" id="Path"></path>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.6 KiB |
@ -1,11 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: Sketch 52.4 (67378) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>github-logo</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="github-logo" fill="#6C757D">
|
||||
<path d="M18.6392711,4.99193622 C17.7459681,3.46136674 16.5342597,2.24961276 15.0038269,1.35640091 C13.4731663,0.463143508 11.8021412,0.0166287016 9.9895672,0.0166287016 C8.17722096,0.0166287016 6.5056492,0.463280182 4.97530752,1.35640091 C3.44473804,2.2495672 2.23307517,3.46136674 1.33977221,4.99193622 C0.446605923,6.52246014 0,8.1938041 0,10.0059226 C0,12.1826879 0.635079727,14.1400911 1.90555809,15.8786333 C3.17589977,17.6173121 4.81699317,18.82041 6.82870159,19.4880638 C7.06287016,19.5315262 7.23621868,19.5009567 7.34892938,19.3971298 C7.46168565,19.2931663 7.51799544,19.1629613 7.51799544,19.0070615 C7.51799544,18.9810478 7.5157631,18.7470159 7.51143508,18.3046925 C7.50697039,17.862369 7.50487472,17.476492 7.50487472,17.1472437 L7.20569476,17.1989977 C7.01494305,17.2339408 6.77430524,17.2487472 6.48378132,17.2445558 C6.19339408,17.2405011 5.89193622,17.2100683 5.57981777,17.1534852 C5.26756264,17.0974032 4.97712984,16.9673349 4.70829157,16.7635535 C4.43958998,16.5597722 4.24883827,16.2930296 4.136082,15.9637358 L4.00601367,15.6644191 C3.91931663,15.4651481 3.7828246,15.2437813 3.59635535,15.001139 C3.4098861,14.7582688 3.22132118,14.5936219 3.03056948,14.5069248 L2.93949886,14.4417312 C2.87881549,14.3984055 2.82250569,14.3461503 2.7704328,14.2855125 C2.71840547,14.2248747 2.6794533,14.1641913 2.65343964,14.1034169 C2.62738041,14.0425968 2.64897494,13.9927107 2.71845103,13.9535763 C2.78792711,13.9144419 2.91348519,13.8954442 3.09567198,13.8954442 L3.35571754,13.9343052 C3.52915718,13.9690661 3.74369021,14.0728929 3.99958998,14.2464237 C4.25535308,14.4198178 4.46560364,14.6452392 4.63038724,14.9225968 C4.82993166,15.2782232 5.07034169,15.5492027 5.35230068,15.735672 C5.63403189,15.9221412 5.91808656,16.0152164 6.20419134,16.0152164 C6.49029613,16.0152164 6.73740319,15.9935308 6.94560364,15.9503872 C7.15357631,15.9070159 7.34870159,15.8418223 7.53088838,15.7551708 C7.60892938,15.1739408 7.8214123,14.727426 8.1681549,14.4153075 C7.67394077,14.3633713 7.22961276,14.2851481 6.83494305,14.181139 C6.44050114,14.0769932 6.03289294,13.9079727 5.6123918,13.6736219 C5.19166287,13.43959 4.84264237,13.1489749 4.56523918,12.8022779 C4.28779043,12.4553986 4.06009112,12 3.88246014,11.436492 C3.70473804,10.8727563 3.61585421,10.2224601 3.61585421,9.48542141 C3.61585421,8.43599089 3.95845103,7.54296128 4.64350797,6.80583144 C4.32259681,6.01685649 4.35289294,5.1323918 4.73448747,4.15252847 C4.98596811,4.07439636 5.35890661,4.13302961 5.85312073,4.32806378 C6.34742597,4.52318907 6.70933941,4.69034169 6.93922551,4.82892938 C7.16911162,4.96747153 7.35330296,5.08487472 7.49207289,5.18009112 C8.29867882,4.95471526 9.13107062,4.84200456 9.98947608,4.84200456 C10.8478815,4.84200456 11.6804556,4.95471526 12.4871071,5.18009112 L12.9813667,4.86806378 C13.3193622,4.65986333 13.7184966,4.46906606 14.1778132,4.29562642 C14.6374032,4.1222779 14.9888383,4.07453303 15.231754,4.15266515 C15.6218223,5.13257403 15.6565831,6.01699317 15.3355809,6.80596811 C16.0205923,7.54309795 16.3633257,8.43635535 16.3633257,9.48555809 C16.3633257,10.2225968 16.274123,10.8749431 16.0966743,11.4430068 C15.9189977,12.0111617 15.6893394,12.4661048 15.4076082,12.8087927 C15.1255581,13.1514351 14.7743052,13.4397722 14.3538041,13.6737585 C13.9332118,13.9079271 13.525467,14.0769476 13.1310251,14.1810934 C12.7364009,14.2852392 12.2920729,14.363508 11.7978588,14.4155353 C12.2486105,14.8056036 12.4740319,15.4213212 12.4740319,16.2624146 L12.4740319,19.006697 C12.4740319,19.1625968 12.528246,19.2927563 12.6367654,19.3967654 C12.7451481,19.5005923 12.9163098,19.5311617 13.1504784,19.4876538 C15.1624601,18.8200911 16.8035535,17.6169476 18.0738497,15.8782688 C19.3440091,14.1397267 19.9793166,12.1823235 19.9793166,10.0055581 C19.978861,8.19366743 19.5320273,6.52246014 18.6392711,4.99193622 Z" id="Path"></path>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 4.2 KiB |
@ -1,13 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: Sketch 52.4 (67378) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>instagram-logo</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="instagram-logo" fill="#6C757D">
|
||||
<path d="M14.4007059,0 L5.48870588,0 C2.46223529,0 0,2.46235294 0,5.48882353 L0,14.4008235 C0,17.4274118 2.46223529,19.8896471 5.48870588,19.8896471 L14.4007059,19.8896471 C17.4274118,19.8896471 19.8896471,17.4272941 19.8896471,14.4008235 L19.8896471,5.48882353 C19.8897647,2.46235294 17.4274118,0 14.4007059,0 Z M18.1250588,14.4008235 C18.1250588,16.4543529 16.4543529,18.1249412 14.4008235,18.1249412 L5.48870588,18.1249412 C3.43529412,18.1250588 1.76470588,16.4543529 1.76470588,14.4008235 L1.76470588,5.48882353 C1.76470588,3.43541176 3.43529412,1.76470588 5.48870588,1.76470588 L14.4007059,1.76470588 C16.4542353,1.76470588 18.1249412,3.43541176 18.1249412,5.48882353 L18.1249412,14.4008235 L18.1250588,14.4008235 Z" id="Shape" fill-rule="nonzero"></path>
|
||||
<path d="M9.94482353,4.82 C7.11882353,4.82 4.81976471,7.11905882 4.81976471,9.94505882 C4.81976471,12.7709412 7.11882353,15.0698824 9.94482353,15.0698824 C12.7708235,15.0698824 15.0698824,12.7709412 15.0698824,9.94505882 C15.0698824,7.11905882 12.7708235,4.82 9.94482353,4.82 Z M9.94482353,13.3050588 C8.092,13.3050588 6.58447059,11.7977647 6.58447059,9.94494118 C6.58447059,8.092 8.09188235,6.58458824 9.94482353,6.58458824 C11.7977647,6.58458824 13.3051765,8.092 13.3051765,9.94494118 C13.3051765,11.7977647 11.7976471,13.3050588 9.94482353,13.3050588 Z" id="Shape" fill-rule="nonzero"></path>
|
||||
<path d="M15.2848235,3.32364706 C14.9448235,3.32364706 14.6108235,3.46129412 14.3707059,3.70247059 C14.1294118,3.94247059 13.9907059,4.27658824 13.9907059,4.61776471 C13.9907059,4.95788235 14.1295294,5.29188235 14.3707059,5.53305882 C14.6107059,5.77305882 14.9448235,5.91188235 15.2848235,5.91188235 C15.626,5.91188235 15.9589412,5.77305882 16.2001176,5.53305882 C16.4412941,5.29188235 16.5789412,4.95776471 16.5789412,4.61776471 C16.5789412,4.27658824 16.4412941,3.94247059 16.2001176,3.70247059 C15.9601176,3.46129412 15.626,3.32364706 15.2848235,3.32364706 Z" id="Path"></path>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 617 KiB |
@ -1,11 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: Sketch 52.4 (67378) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>linkedin-logo</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="linkedin-logo" fill="#6C757D" fill-rule="nonzero">
|
||||
<path d="M19.9590255,12.2593689 L19.9590255,19.9786408 L15.6811601,19.9786408 L15.6811601,12.7763592 C15.6811601,10.9670874 15.062413,9.7323301 13.5139675,9.7323301 C12.3319258,9.7323301 11.6284919,10.564466 11.3190255,11.3694175 C11.2061717,11.6571845 11.177123,12.0577184 11.177123,12.460534 L11.177123,19.9786408 L6.89781903,19.9786408 C6.89781903,19.9786408 6.95545244,7.78033981 6.89781903,6.51650485 L11.1767053,6.51650485 L11.1767053,8.42470874 C11.1680278,8.43898058 11.1567517,8.45436893 11.1485847,8.46820388 L11.1767053,8.46820388 L11.1767053,8.42470874 C11.7451972,7.50873786 12.760464,6.20024272 15.0329466,6.20024272 C17.8483991,6.20019417 19.9590255,8.12432039 19.9590255,12.2593689 Z M2.42148492,0.0270873786 C0.957540603,0.0270873786 0,1.03160194 0,2.35257282 C0,3.64475728 0.929837587,4.67975728 2.36468677,4.67975728 L2.39327146,4.67975728 C3.88556845,4.67975728 4.81364269,3.64495146 4.81364269,2.35257282 C4.78552204,1.03160194 3.88556845,0.0270873786 2.42148492,0.0270873786 Z M0.254153132,19.9786408 L4.53183295,19.9786408 L4.53183295,6.51650485 L0.254153132,6.51650485 L0.254153132,19.9786408 Z" id="LinkedIn"></path>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 110 KiB |
@ -1,11 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="20px" height="17px" viewBox="0 0 20 17" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: Sketch 52.4 (67378) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>twitter-logo</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="twitter-logo" fill="#6C757D">
|
||||
<path d="M20,1.93653595 C19.2638889,2.26271242 18.4740523,2.48392157 17.644183,2.58267974 C18.4915359,2.07526144 19.1401634,1.27042484 19.4475817,0.314346405 C18.6527451,0.784248366 17.7753922,1.12545752 16.8405556,1.31042484 C16.0919608,0.511830065 15.0271569,0.0144117647 13.8461111,0.0144117647 C11.5802941,0.0144117647 9.74313725,1.85156863 9.74313725,4.11614379 C9.74313725,4.43732026 9.77937908,4.75101307 9.84937908,5.05098039 C6.44003268,4.87973856 3.41686275,3.24630719 1.39349673,0.764248366 C1.03980392,1.36915033 0.838594771,2.07398693 0.838594771,2.82637255 C0.838594771,4.24986928 1.56346405,5.50588235 2.66326797,6.24071895 C1.99088235,6.21823529 1.35849673,6.03326797 0.804869281,5.72581699 L0.804869281,5.77705882 C0.804869281,7.76418301 2.21960784,9.42261438 4.0954902,9.80006536 C3.75179739,9.89254902 3.38937908,9.94379085 3.01444444,9.94379085 C2.7495098,9.94379085 2.49330065,9.91754902 2.2420915,9.86754902 C2.76447712,11.4984967 4.27921569,12.6845098 6.07388889,12.7170261 C4.67039216,13.8168301 2.90071895,14.4704575 0.978594771,14.4704575 C0.647418301,14.4704575 0.32120915,14.4504575 3.26797386e-05,14.4142157 C1.81594771,15.5802614 3.97179739,16.2601307 6.28885621,16.2601307 C13.8361765,16.2601307 17.9616667,10.0087908 17.9616667,4.58732026 L17.9479085,4.05617647 C18.7539869,3.48124183 19.4513399,2.75888889 20,1.93653595 Z" id="Path"></path>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 12 KiB |
@ -1,4 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 630 630">
|
||||
<rect width="630" height="630" fill="#f7df1e"/>
|
||||
<path d="m423.2 492.19c12.69 20.72 29.2 35.95 58.4 35.95 24.53 0 40.2-12.26 40.2-29.2 0-20.3-16.1-27.49-43.1-39.3l-14.8-6.35c-42.72-18.2-71.1-41-71.1-89.2 0-44.4 33.83-78.2 86.7-78.2 37.64 0 64.7 13.1 84.2 47.4l-46.1 29.6c-10.15-18.2-21.1-25.37-38.1-25.37-17.34 0-28.33 11-28.33 25.37 0 17.76 11 24.95 36.4 35.95l14.8 6.34c50.3 21.57 78.7 43.56 78.7 93 0 53.3-41.87 82.5-98.1 82.5-54.98 0-90.5-26.2-107.88-60.54zm-209.13 5.13c9.3 16.5 17.76 30.45 38.1 30.45 19.45 0 31.72-7.61 31.72-37.2v-201.3h59.2v202.1c0 61.3-35.94 89.2-88.4 89.2-47.4 0-74.85-24.53-88.81-54.075z"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 687 B |
|
Before Width: | Height: | Size: 9.7 KiB |
|
Before Width: | Height: | Size: 6.7 KiB |
|
Before Width: | Height: | Size: 7.5 KiB |
@ -1,103 +0,0 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="56.48px" height="56.48px" viewBox="0 0 56.48 56.48" style="enable-background:new 0 0 56.48 56.48;" xml:space="preserve"
|
||||
>
|
||||
<g>
|
||||
<path d="M24.25,26.305h-4.284v-5.367h4.284v1.118h-3.002v0.967h2.931v1.1h-2.931v1.072h3.002V26.305z M14.703,26.305l-1.863-4.206
|
||||
v4.207h-2.61l-0.493-1.197h-2.67l-0.498,1.197H5.176l2.297-5.367h1.904l2.183,5.082v-5.082h2.094l1.679,3.641l1.541-3.641h2.138
|
||||
v5.367h-1.315l-0.005-4.203l-1.86,4.203L14.703,26.305L14.703,26.305z M9.273,23.99l-0.877-2.139L7.524,23.99H9.273z
|
||||
M30.022,31.944c0,1.491-1.112,1.799-2.233,1.799h-1.6v1.8h-2.493l-1.58-1.777l-1.642,1.777h-5.081v-5.367h5.158l1.58,1.758
|
||||
l1.632-1.758h4.098C28.879,30.175,30.022,30.458,30.022,31.944z M21.291,32.849l-1.403-1.563h-3.215v0.976h2.815v1.096h-2.815
|
||||
v1.068h3.152L21.291,32.849z M24.911,30.751l-1.97,2.116l1.97,2.188V30.751z M28.645,31.944c0-0.47-0.32-0.659-0.784-0.659h-1.672
|
||||
v1.367h1.656C28.339,32.653,28.645,32.408,28.645,31.944z M26.424,26.305H25.14v-5.367h2.95c0.655,0,1.138,0.017,1.554,0.257
|
||||
c0.404,0.24,0.648,0.59,0.648,1.189c0,0.855-0.57,1.298-0.904,1.43c0.281,0.107,0.521,0.296,0.635,0.452
|
||||
c0.182,0.267,0.213,0.505,0.213,0.984v1.055h-1.294l-0.006-0.677c0-0.323,0.031-0.787-0.202-1.045
|
||||
c-0.187-0.188-0.473-0.229-0.935-0.229h-1.375V26.305z M26.422,23.248h1.559c0.249,0,0.457-0.003,0.635-0.11
|
||||
c0.165-0.087,0.264-0.276,0.264-0.51c0-0.23-0.103-0.396-0.269-0.474c-0.152-0.086-0.386-0.097-0.608-0.097h-1.58L26.422,23.248
|
||||
L26.422,23.248z M32.344,20.939h-1.309v5.367h1.309V20.939z M33.66,25.712c-0.452-0.456-0.688-1.074-0.688-2.049
|
||||
c0-0.796,0.141-1.524,0.691-2.099c0.413-0.428,1.064-0.625,1.948-0.625h1.241v1.15h-1.215c-0.471,0-0.734,0.07-0.988,0.318
|
||||
c-0.219,0.226-0.368,0.652-0.368,1.216c0,0.574,0.112,0.989,0.353,1.259c0.197,0.213,0.559,0.277,0.894,0.277h0.575l1.812-4.22
|
||||
h1.921l2.172,5.076v-5.076h1.953l2.256,3.738v-3.738h1.312v5.367h-1.816l-2.434-4.028v4.028h-2.611l-0.5-1.197h-2.664l-0.482,1.197
|
||||
H35.52C34.895,26.305,34.106,26.167,33.66,25.712z M37.963,23.99h1.77l-0.889-2.139L37.963,23.99z M35.27,23.041
|
||||
c-0.012,0.017-0.102,0.21-0.102,0.582c0,0.368,0.059,0.545,0.102,0.625c0.045,0.012,0.128,0.026,0.252,0.026l0.556-1.299h-0.438
|
||||
C35.338,22.974,35.307,23.006,35.27,23.041z M56.48,11.393v33.695c0,0.803-0.65,1.454-1.454,1.454H1.454
|
||||
C0.65,46.542,0,45.89,0,45.087V11.393c0-0.803,0.65-1.454,1.454-1.454h53.572C55.83,9.939,56.48,10.59,56.48,11.393z
|
||||
M14.703,27.192h1.127c0.352,0,0.668-0.207,0.81-0.528l0.17-0.38v0.022c0,0.489,0.396,0.885,0.886,0.885h1.315
|
||||
c0.18,0,0.337-0.068,0.478-0.159c0.14,0.091,0.297,0.159,0.478,0.159h4.284c0.166,0,0.313-0.058,0.444-0.137
|
||||
c0.134,0.079,0.279,0.137,0.445,0.137h1.284c0.489,0,0.886-0.397,0.886-0.886v-1.066h0.489c0.111,0,0.19,0.003,0.249,0.007
|
||||
c0.006,0.091,0.004,0.199,0.004,0.271l-0.002,0.118l0.005,0.677c0.004,0.486,0.4,0.879,0.887,0.879h1.294
|
||||
c0.146,0,0.277-0.044,0.398-0.107c0.123,0.063,0.256,0.107,0.401,0.107h1.31c0.429,0,0.769-0.31,0.852-0.714
|
||||
c0.729,0.611,1.751,0.714,2.322,0.714h1.502c0.359,0,0.685-0.22,0.818-0.555l0.262-0.643h1.478l0.271,0.652
|
||||
c0.14,0.33,0.461,0.545,0.818,0.545h2.611c0.488,0,0.886-0.397,0.886-0.886v-0.847l0.787,1.305
|
||||
c0.161,0.266,0.448,0.428,0.761,0.428h1.816c0.488,0,0.886-0.397,0.886-0.886v-5.367c0-0.489-0.396-0.886-0.886-0.886h-1.312
|
||||
c-0.49,0-0.888,0.397-0.888,0.886v0.554l-0.61-1.011c-0.16-0.266-0.447-0.428-0.758-0.428h-1.953c-0.49,0-0.887,0.397-0.887,0.886
|
||||
v0.753l-0.471-1.102c-0.141-0.325-0.46-0.537-0.814-0.537h-1.921c-0.196,0-0.381,0.064-0.53,0.176
|
||||
c-0.147-0.111-0.332-0.176-0.529-0.176h-1.241c-1.052,0-1.834,0.256-2.408,0.753c-0.065-0.423-0.417-0.753-0.86-0.753h-1.309
|
||||
c-0.349,0-0.645,0.207-0.789,0.499c-0.055-0.04-0.099-0.087-0.16-0.124c-0.603-0.348-1.234-0.375-1.997-0.375h-2.95
|
||||
c-0.166,0-0.312,0.058-0.445,0.137c-0.131-0.079-0.278-0.137-0.444-0.137h-4.284c-0.181,0-0.338,0.067-0.478,0.159
|
||||
c-0.141-0.092-0.298-0.159-0.478-0.159h-2.138c-0.354,0-0.676,0.213-0.814,0.541l-0.762,1.796l-0.839-1.822
|
||||
c-0.146-0.313-0.461-0.515-0.805-0.515H11.56c-0.49,0-0.886,0.397-0.886,0.886v0.771l-0.481-1.122
|
||||
c-0.141-0.325-0.46-0.536-0.815-0.536H7.474c-0.355,0-0.676,0.212-0.815,0.537l-2.296,5.367c-0.118,0.273-0.089,0.587,0.074,0.837
|
||||
c0.164,0.248,0.442,0.398,0.74,0.398h1.394c0.356,0,0.68-0.216,0.816-0.546l0.271-0.652h1.486l0.267,0.648
|
||||
c0.137,0.332,0.46,0.549,0.82,0.549h2.609c0.489,0,0.886-0.397,0.886-0.886v-0.021l0.168,0.381
|
||||
C14.035,26.985,14.353,27.192,14.703,27.192z M52.19,33.849c0-0.75-0.2-1.308-0.64-1.76c-0.009-0.009-0.019-0.018-0.026-0.026
|
||||
c0.245-0.158,0.405-0.433,0.405-0.746v-1.142c0-0.49-0.396-0.887-0.885-0.887h-2.572c-0.801,0-1.402,0.235-1.842,0.592
|
||||
c-0.123-0.343-0.441-0.592-0.828-0.592h-2.57c-0.706,0-1.266,0.176-1.688,0.462c-0.152-0.271-0.432-0.462-0.764-0.462H36.5
|
||||
c-0.346,0-0.635,0.202-0.781,0.489c-0.062-0.042-0.105-0.093-0.172-0.132c-0.619-0.331-1.279-0.357-1.961-0.357h-2.962
|
||||
c-0.347,0-0.639,0.203-0.784,0.493c-0.449-0.294-1.081-0.493-1.979-0.493h-4.098c-0.247,0-0.482,0.102-0.65,0.283l-0.971,1.048
|
||||
l-0.932-1.037c-0.167-0.188-0.406-0.294-0.659-0.294h-5.158c-0.489,0-0.886,0.396-0.886,0.887v5.367
|
||||
c0,0.489,0.396,0.887,0.886,0.887h5.081c0.247,0,0.482-0.104,0.65-0.285l0.979-1.06l0.929,1.046
|
||||
c0.168,0.189,0.41,0.297,0.663,0.297h2.493c0.49,0,0.887-0.396,0.887-0.886v-0.915h0.713c0.866,0,1.494-0.178,1.949-0.449v1.364
|
||||
c0,0.489,0.396,0.886,0.887,0.886h1.289c0.489,0,0.886-0.396,0.886-0.886v-1.075h0.484c0.118,0,0.201,0.004,0.26,0.008
|
||||
c0.006,0.095,0.006,0.211,0.004,0.287v0.78c0,0.489,0.396,0.886,0.887,0.886h1.287c0.142,0,0.271-0.041,0.39-0.1
|
||||
c0.118,0.061,0.249,0.1,0.392,0.1h4.28c0.14,0,0.267-0.039,0.384-0.096c0.118,0.057,0.244,0.096,0.385,0.096h2.498
|
||||
c0.797,0,1.441-0.194,1.928-0.539c0.136,0.316,0.449,0.539,0.815,0.539h2.498C51.107,36.429,52.19,35.464,52.19,33.849z
|
||||
M44.215,32.281l-0.689-0.02c-0.219,0-0.363-0.014-0.5-0.061c-0.161-0.061-0.28-0.197-0.28-0.4c0-0.17,0.052-0.299,0.194-0.387
|
||||
c0.128-0.087,0.279-0.097,0.514-0.097h2.352v-1.142h-2.57c-1.346,0-1.834,0.818-1.834,1.598c0,1.697,1.503,1.621,2.701,1.66
|
||||
c0.225,0,0.359,0.037,0.457,0.119c0.09,0.076,0.156,0.198,0.156,0.355c0,0.146-0.062,0.268-0.15,0.35
|
||||
c-0.108,0.102-0.281,0.133-0.523,0.133h-2.488v1.151h2.498c1.293,0,2.016-0.539,2.016-1.694c0-0.551-0.135-0.879-0.385-1.137
|
||||
C45.389,32.417,44.911,32.298,44.215,32.281z M34.881,33.048c0.284,0.104,0.519,0.295,0.627,0.451
|
||||
c0.183,0.262,0.209,0.506,0.213,0.979v1.064h-1.287v-0.671c0-0.323,0.031-0.801-0.207-1.051c-0.188-0.192-0.473-0.238-0.941-0.238
|
||||
h-1.37v1.96h-1.288v-5.367h2.961c0.649,0,1.121,0.027,1.545,0.252c0.403,0.244,0.658,0.58,0.658,1.192
|
||||
C35.79,32.478,35.217,32.915,34.881,33.048z M34.371,31.866c0-0.229-0.099-0.396-0.265-0.483c-0.156-0.092-0.386-0.097-0.612-0.097
|
||||
h-1.58v1.206h1.559c0.25,0,0.463-0.009,0.635-0.111C34.272,32.281,34.371,32.095,34.371,31.866z M36.502,35.542h4.28v-1.113
|
||||
l-3.004-0.006v-1.067h2.93v-1.095h-2.93v-0.977h3.004v-1.109h-4.28V35.542z M49.456,32.281l-0.69-0.02
|
||||
c-0.217,0-0.362-0.014-0.5-0.061c-0.159-0.061-0.279-0.197-0.279-0.4c0-0.17,0.052-0.299,0.193-0.387
|
||||
c0.129-0.087,0.281-0.097,0.515-0.097h2.353v-1.142h-2.572c-1.344,0-1.834,0.818-1.834,1.598c0,1.697,1.504,1.621,2.703,1.66
|
||||
c0.224,0,0.357,0.037,0.457,0.119c0.088,0.076,0.155,0.198,0.155,0.355c0,0.146-0.063,0.268-0.149,0.35
|
||||
c-0.109,0.102-0.282,0.133-0.524,0.133h-2.487v1.151h2.498c1.293,0,2.014-0.539,2.014-1.694c0-0.551-0.133-0.879-0.385-1.137
|
||||
C50.631,32.417,50.152,32.298,49.456,32.281z"/>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 7.7 KiB |
|
Before Width: | Height: | Size: 26 KiB |
@ -1,50 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 34 21.5" style="enable-background:new 0 0 34 21.5;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#FFFFFF;}
|
||||
.st1{fill:#FF5F00;}
|
||||
.st2{fill:#EB001B;}
|
||||
.st3{fill:#F79E1B;}
|
||||
</style>
|
||||
<rect id="XMLID_1_" x="0" width="34" height="21.5"/>
|
||||
<g id="XMLID_4703_">
|
||||
<path id="XMLID_4607_" class="st0" d="M9.5,19.8v-1.2c0-0.5-0.3-0.8-0.7-0.8c-0.2,0-0.5,0.1-0.7,0.3c-0.1-0.2-0.3-0.3-0.6-0.3
|
||||
c-0.2,0-0.4,0.1-0.6,0.3v-0.2H6.5v1.9h0.4v-1.1c0-0.3,0.2-0.5,0.5-0.5c0.3,0,0.4,0.2,0.4,0.5v1.1h0.4v-1.1c0-0.3,0.2-0.5,0.5-0.5
|
||||
c0.3,0,0.4,0.2,0.4,0.5v1.1L9.5,19.8L9.5,19.8z M15.8,17.9h-0.7v-0.6h-0.4v0.6h-0.4v0.4h0.4v0.9c0,0.4,0.2,0.7,0.7,0.7
|
||||
c0.2,0,0.4-0.1,0.5-0.1l-0.1-0.3c-0.1,0.1-0.3,0.1-0.4,0.1c-0.2,0-0.3-0.1-0.3-0.3v-0.9h0.7L15.8,17.9L15.8,17.9z M19.4,17.8
|
||||
c-0.2,0-0.4,0.1-0.5,0.3v-0.2h-0.4v1.9h0.4v-1.1c0-0.3,0.2-0.5,0.4-0.5c0.1,0,0.2,0,0.3,0l0.1-0.4C19.6,17.8,19.5,17.8,19.4,17.8
|
||||
L19.4,17.8z M14,18c-0.2-0.1-0.5-0.2-0.8-0.2c-0.5,0-0.8,0.2-0.8,0.6c0,0.3,0.2,0.5,0.7,0.6l0.2,0c0.2,0,0.4,0.1,0.4,0.2
|
||||
c0,0.1-0.2,0.2-0.5,0.2c-0.3,0-0.5-0.1-0.6-0.2l-0.2,0.3c0.3,0.2,0.6,0.3,0.8,0.3c0.6,0,0.9-0.3,0.9-0.6c0-0.3-0.2-0.5-0.7-0.6
|
||||
l-0.2,0c-0.2,0-0.3-0.1-0.3-0.2c0-0.1,0.2-0.2,0.4-0.2c0.2,0,0.5,0.1,0.6,0.2L14,18z M19.8,18.8c0,0.6,0.4,1,1,1
|
||||
c0.3,0,0.5-0.1,0.7-0.2l-0.2-0.3c-0.2,0.1-0.3,0.2-0.5,0.2c-0.3,0-0.6-0.3-0.6-0.7c0-0.4,0.3-0.7,0.6-0.7c0.2,0,0.3,0.1,0.5,0.2
|
||||
l0.2-0.3c-0.2-0.2-0.4-0.2-0.7-0.2C20.2,17.8,19.8,18.2,19.8,18.8L19.8,18.8z M17.1,17.8c-0.6,0-1,0.4-1,1c0,0.6,0.4,1,1,1
|
||||
c0.3,0,0.6-0.1,0.8-0.3l-0.2-0.3c-0.2,0.1-0.4,0.2-0.6,0.2c-0.3,0-0.5-0.2-0.6-0.5H18c0-0.1,0-0.1,0-0.2
|
||||
C18,18.2,17.6,17.8,17.1,17.8L17.1,17.8z M17.1,18.2c0.3,0,0.5,0.2,0.5,0.5h-1C16.6,18.4,16.8,18.2,17.1,18.2L17.1,18.2z
|
||||
M11.9,18.8v-1h-0.4v0.2c-0.1-0.2-0.4-0.3-0.6-0.3c-0.5,0-1,0.4-1,1s0.4,1,1,1c0.3,0,0.5-0.1,0.6-0.3v0.2h0.4V18.8z M10.3,18.8
|
||||
c0-0.4,0.2-0.7,0.6-0.7c0.4,0,0.6,0.3,0.6,0.7s-0.2,0.7-0.6,0.7C10.5,19.5,10.3,19.2,10.3,18.8L10.3,18.8z M25.2,17.8
|
||||
c-0.2,0-0.4,0.1-0.5,0.3v-0.2h-0.4v1.9h0.4v-1.1c0-0.3,0.2-0.5,0.4-0.5c0.1,0,0.2,0,0.3,0l0.1-0.4C25.4,17.8,25.3,17.8,25.2,17.8
|
||||
L25.2,17.8z M28.3,19.5C28.4,19.5,28.4,19.5,28.3,19.5c0.1,0,0.1,0,0.1,0.1c0,0,0,0,0,0.1c0,0,0,0,0,0.1c0,0,0,0.1,0,0.1
|
||||
c0,0,0,0,0,0.1c0,0,0,0-0.1,0c0,0,0,0-0.1,0c0,0-0.1,0-0.1,0c0,0,0,0-0.1,0c0,0,0,0,0-0.1c0,0,0,0,0-0.1c0,0,0-0.1,0-0.1
|
||||
c0,0,0,0,0-0.1C28.2,19.6,28.2,19.5,28.3,19.5C28.3,19.5,28.3,19.5,28.3,19.5z M28.3,19.9C28.4,19.9,28.4,19.9,28.3,19.9
|
||||
c0.1,0,0.1,0,0.1,0c0,0,0,0,0,0c0,0,0,0,0-0.1c0,0,0,0,0-0.1c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0-0.1,0c0,0,0,0-0.1,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0.1c0,0,0,0,0,0.1c0,0,0,0,0,0C28.2,19.8,28.3,19.8,28.3,19.9C28.3,19.9,28.3,19.9,28.3,19.9z M28.3,19.6
|
||||
C28.4,19.6,28.4,19.6,28.3,19.6C28.4,19.6,28.4,19.7,28.3,19.6C28.4,19.7,28.4,19.7,28.3,19.6c0,0.1,0,0.1,0,0.1l0.1,0.1h0
|
||||
l-0.1-0.1h0v0.1h0L28.3,19.6L28.3,19.6L28.3,19.6z M28.3,19.7L28.3,19.7L28.3,19.7C28.4,19.7,28.4,19.7,28.3,19.7
|
||||
C28.4,19.7,28.4,19.7,28.3,19.7C28.4,19.7,28.4,19.7,28.3,19.7C28.4,19.7,28.4,19.7,28.3,19.7L28.3,19.7z M23.7,18.8v-1h-0.4v0.2
|
||||
c-0.1-0.2-0.4-0.3-0.6-0.3c-0.5,0-1,0.4-1,1s0.4,1,1,1c0.3,0,0.5-0.1,0.6-0.3v0.2h0.4V18.8z M22.2,18.8c0-0.4,0.2-0.7,0.6-0.7
|
||||
c0.4,0,0.6,0.3,0.6,0.7s-0.2,0.7-0.6,0.7C22.4,19.5,22.2,19.2,22.2,18.8L22.2,18.8z M27.6,18.8v-1.7h-0.4v1
|
||||
c-0.1-0.2-0.4-0.3-0.6-0.3c-0.5,0-1,0.4-1,1s0.4,1,1,1c0.3,0,0.5-0.1,0.6-0.3v0.2h0.4V18.8z M26.1,18.8c0-0.4,0.2-0.7,0.6-0.7
|
||||
c0.4,0,0.6,0.3,0.6,0.7s-0.2,0.7-0.6,0.7C26.3,19.5,26.1,19.2,26.1,18.8z"/>
|
||||
<g id="XMLID_4571_">
|
||||
<rect id="XMLID_4635_" x="13.5" y="3.2" class="st1" width="7" height="11.4"/>
|
||||
<path id="XMLID_4576_" class="st2" d="M14.2,8.9c0-2.3,1.1-4.4,2.8-5.7c-1.2-1-2.8-1.6-4.5-1.6c-4,0-7.3,3.3-7.3,7.3
|
||||
c0,4,3.3,7.3,7.3,7.3c1.7,0,3.3-0.6,4.5-1.6C15.3,13.3,14.2,11.2,14.2,8.9z"/>
|
||||
<path id="XMLID_4707_" class="st3" d="M28.1,13.4v-0.2h0.1v0h-0.2v0H28L28.1,13.4L28.1,13.4z M28.5,13.4v-0.3h-0.1l-0.1,0.2
|
||||
l-0.1-0.2h-0.1v0.3h0.1v-0.2l0.1,0.2h0.1l0.1-0.2L28.5,13.4L28.5,13.4L28.5,13.4z"/>
|
||||
<path id="XMLID_4631_" class="st3" d="M28.8,8.9c0,4-3.3,7.3-7.3,7.3c-1.7,0-3.3-0.6-4.5-1.6c1.7-1.3,2.8-3.4,2.8-5.7
|
||||
c0-2.3-1.1-4.4-2.8-5.7c1.2-1,2.8-1.6,4.5-1.6C25.5,1.6,28.8,4.9,28.8,8.9z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 4.4 KiB |
|
Before Width: | Height: | Size: 22 KiB |
@ -1,67 +0,0 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 504 504" style="enable-background:new 0 0 504 504;" xml:space="preserve">
|
||||
<path style="fill:#139AD6;" d="M389.6,221.2h-27.2c-1.6,0-3.2,1.6-4,3.2l-11.2,70.4c0,1.6,0.8,2.4,2.4,2.4H364
|
||||
c1.6,0,2.4-0.8,2.4-2.4l3.2-20c0-1.6,1.6-3.2,4-3.2h8.8c18.4,0,28.8-8.8,31.2-26.4c1.6-7.2,0-13.6-3.2-17.6
|
||||
C405.6,223.6,398.4,221.2,389.6,221.2 M392.8,247.6c-1.6,9.6-8.8,9.6-16,9.6H372l3.2-18.4c0-0.8,0.8-1.6,2.4-1.6h1.6
|
||||
c4.8,0,9.6,0,12,3.2C392.8,241.2,392.8,243.6,392.8,247.6"/>
|
||||
<g>
|
||||
<path style="fill:#263B80;" d="M193.6,221.2h-27.2c-1.6,0-3.2,1.6-4,3.2l-11.2,70.4c0,1.6,0.8,2.4,2.4,2.4h12.8
|
||||
c1.6,0,3.2-1.6,4-3.2l3.2-19.2c0-1.6,1.6-3.2,4-3.2h8.8c18.4,0,28.8-8.8,31.2-26.4c1.6-7.2,0-13.6-3.2-17.6
|
||||
C209.6,223.6,203.2,221.2,193.6,221.2 M196.8,247.6c-1.6,9.6-8.8,9.6-16,9.6h-4l3.2-18.4c0-0.8,0.8-1.6,2.4-1.6h1.6
|
||||
c4.8,0,9.6,0,12,3.2C196.8,241.2,197.6,243.6,196.8,247.6"/>
|
||||
<path style="fill:#263B80;" d="M276,246.8h-12.8c-0.8,0-2.4,0.8-2.4,1.6l-0.8,4l-0.8-1.6c-3.2-4-8.8-5.6-15.2-5.6
|
||||
c-14.4,0-27.2,11.2-29.6,26.4c-1.6,8,0.8,15.2,4.8,20s9.6,6.4,16.8,6.4c12,0,18.4-7.2,18.4-7.2l-0.8,4c0,1.6,0.8,2.4,2.4,2.4h12
|
||||
c1.6,0,3.2-1.6,4-3.2l7.2-44.8C278.4,248.4,276.8,246.8,276,246.8 M257.6,272.4c-1.6,7.2-7.2,12.8-15.2,12.8c-4,0-7.2-1.6-8.8-3.2
|
||||
c-1.6-2.4-2.4-5.6-2.4-9.6c0.8-7.2,7.2-12.8,14.4-12.8c4,0,6.4,1.6,8.8,3.2C256.8,265.2,257.6,269.2,257.6,272.4"/>
|
||||
</g>
|
||||
<path style="fill:#139AD6;" d="M471.2,246.8h-12.8c-0.8,0-2.4,0.8-2.4,1.6l-0.8,4l-0.8-1.6c-3.2-4-8.8-5.6-15.2-5.6
|
||||
c-14.4,0-27.2,11.2-29.6,26.4c-1.6,8,0.8,15.2,4.8,20s9.6,6.4,16.8,6.4c12,0,18.4-7.2,18.4-7.2l-0.8,4c0,1.6,0.8,2.4,2.4,2.4h12
|
||||
c1.6,0,3.2-1.6,4-3.2l7.2-44.8C473.6,248.4,472.8,246.8,471.2,246.8 M452.8,272.4c-1.6,7.2-7.2,12.8-15.2,12.8c-4,0-7.2-1.6-8.8-3.2
|
||||
c-1.6-2.4-2.4-5.6-2.4-9.6c0.8-7.2,7.2-12.8,14.4-12.8c4,0,6.4,1.6,8.8,3.2C452.8,265.2,453.6,269.2,452.8,272.4"/>
|
||||
<path style="fill:#263B80;" d="M345.6,246.8H332c-1.6,0-2.4,0.8-3.2,1.6l-17.6,27.2l-8-25.6c-0.8-1.6-1.6-2.4-4-2.4h-12.8
|
||||
c-1.6,0-2.4,1.6-2.4,3.2l14.4,42.4l-13.6,19.2c-0.8,1.6,0,4,1.6,4h12.8c1.6,0,2.4-0.8,3.2-1.6l44-63.2
|
||||
C348.8,249.2,347.2,246.8,345.6,246.8"/>
|
||||
<path style="fill:#139AD6;" d="M486.4,223.6l-11.2,72c0,1.6,0.8,2.4,2.4,2.4h11.2c1.6,0,3.2-1.6,4-3.2l11.2-70.4
|
||||
c0-1.6-0.8-2.4-2.4-2.4h-12.8C488,221.2,487.2,222,486.4,223.6"/>
|
||||
<path style="fill:#263B80;" d="M92,197.2c-5.6-6.4-16-9.6-30.4-9.6h-40c-2.4,0-4.8,2.4-5.6,4.8L0,297.2c0,2.4,1.6,4,3.2,4H28
|
||||
l6.4-39.2v1.6c0.8-2.4,3.2-4.8,5.6-4.8h12c23.2,0,40.8-9.6,46.4-36c0-0.8,0-1.6,0-2.4c-0.8,0-0.8,0,0,0
|
||||
C99.2,210,97.6,203.6,92,197.2"/>
|
||||
<path style="fill:#139AD6;" d="M97.6,220.4L97.6,220.4c0,0.8,0,1.6,0,2.4c-5.6,27.2-23.2,36-46.4,36h-12c-2.4,0-4.8,2.4-5.6,4.8
|
||||
l-8,48.8c0,1.6,0.8,3.2,3.2,3.2h20.8c2.4,0,4.8-1.6,4.8-4v-0.8l4-24.8v-1.6c0-2.4,2.4-4,4.8-4h3.2c20,0,36-8,40-32
|
||||
c1.6-9.6,0.8-18.4-4-24C101.6,222.8,100,221.2,97.6,220.4"/>
|
||||
<path style="fill:#232C65;" d="M92,218c-0.8,0-1.6-0.8-2.4-0.8s-1.6,0-2.4-0.8c-3.2-0.8-6.4-0.8-10.4-0.8H45.6c-0.8,0-1.6,0-2.4,0.8
|
||||
c-1.6,0.8-2.4,2.4-2.4,4L34.4,262v1.6c0.8-2.4,3.2-4.8,5.6-4.8h12c23.2,0,40.8-9.6,46.4-36c0-0.8,0-1.6,0.8-2.4
|
||||
c-1.6-0.8-2.4-1.6-4-1.6C92.8,218,92.8,218,92,218"/>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 3.4 KiB |
|
Before Width: | Height: | Size: 23 KiB |
@ -1,62 +0,0 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 504 504" style="enable-background:new 0 0 504 504;" xml:space="preserve">
|
||||
<polygon style="fill:#3C58BF;" points="184.8,324.4 210.4,180.4 250.4,180.4 225.6,324.4 "/>
|
||||
<polygon style="fill:#293688;" points="184.8,324.4 217.6,180.4 250.4,180.4 225.6,324.4 "/>
|
||||
<path style="fill:#3C58BF;" d="M370.4,182c-8-3.2-20.8-6.4-36.8-6.4c-40,0-68.8,20-68.8,48.8c0,21.6,20,32.8,36,40
|
||||
s20.8,12,20.8,18.4c0,9.6-12.8,14.4-24,14.4c-16,0-24.8-2.4-38.4-8l-5.6-2.4l-5.6,32.8c9.6,4,27.2,8,45.6,8
|
||||
c42.4,0,70.4-20,70.4-50.4c0-16.8-10.4-29.6-34.4-40c-14.4-7.2-23.2-11.2-23.2-18.4c0-6.4,7.2-12.8,23.2-12.8
|
||||
c13.6,0,23.2,2.4,30.4,5.6l4,1.6L370.4,182L370.4,182z"/>
|
||||
<path style="fill:#293688;" d="M370.4,182c-8-3.2-20.8-6.4-36.8-6.4c-40,0-61.6,20-61.6,48.8c0,21.6,12.8,32.8,28.8,40
|
||||
s20.8,12,20.8,18.4c0,9.6-12.8,14.4-24,14.4c-16,0-24.8-2.4-38.4-8l-5.6-2.4l-5.6,32.8c9.6,4,27.2,8,45.6,8
|
||||
c42.4,0,70.4-20,70.4-50.4c0-16.8-10.4-29.6-34.4-40c-14.4-7.2-23.2-11.2-23.2-18.4c0-6.4,7.2-12.8,23.2-12.8
|
||||
c13.6,0,23.2,2.4,30.4,5.6l4,1.6L370.4,182L370.4,182z"/>
|
||||
<path style="fill:#3C58BF;" d="M439.2,180.4c-9.6,0-16.8,0.8-20.8,10.4l-60,133.6h43.2l8-24h51.2l4.8,24H504l-33.6-144H439.2z
|
||||
M420.8,276.4c2.4-7.2,16-42.4,16-42.4s3.2-8.8,5.6-14.4l2.4,13.6c0,0,8,36,9.6,44h-33.6V276.4z"/>
|
||||
<path style="fill:#293688;" d="M448.8,180.4c-9.6,0-16.8,0.8-20.8,10.4l-69.6,133.6h43.2l8-24h51.2l4.8,24H504l-33.6-144H448.8z
|
||||
M420.8,276.4c3.2-8,16-42.4,16-42.4s3.2-8.8,5.6-14.4l2.4,13.6c0,0,8,36,9.6,44h-33.6V276.4z"/>
|
||||
<path style="fill:#3C58BF;" d="M111.2,281.2l-4-20.8c-7.2-24-30.4-50.4-56-63.2l36,128h43.2l64.8-144H152L111.2,281.2z"/>
|
||||
<path style="fill:#293688;" d="M111.2,281.2l-4-20.8c-7.2-24-30.4-50.4-56-63.2l36,128h43.2l64.8-144H160L111.2,281.2z"/>
|
||||
<path style="fill:#FFBC00;" d="M0,180.4l7.2,1.6c51.2,12,86.4,42.4,100,78.4l-14.4-68c-2.4-9.6-9.6-12-18.4-12H0z"/>
|
||||
<path style="fill:#F7981D;" d="M0,180.4L0,180.4c51.2,12,93.6,43.2,107.2,79.2l-13.6-56.8c-2.4-9.6-10.4-15.2-19.2-15.2L0,180.4z"/>
|
||||
<path style="fill:#ED7C00;" d="M0,180.4L0,180.4c51.2,12,93.6,43.2,107.2,79.2l-9.6-31.2c-2.4-9.6-5.6-19.2-16.8-23.2L0,180.4z"/>
|
||||
<g>
|
||||
<path style="fill:#051244;" d="M151.2,276.4L124,249.2l-12.8,30.4l-3.2-20c-7.2-24-30.4-50.4-56-63.2l36,128h43.2L151.2,276.4z"/>
|
||||
<polygon style="fill:#051244;" points="225.6,324.4 191.2,289.2 184.8,324.4 "/>
|
||||
<path style="fill:#051244;" d="M317.6,274.8L317.6,274.8c3.2,3.2,4.8,5.6,4,8.8c0,9.6-12.8,14.4-24,14.4c-16,0-24.8-2.4-38.4-8
|
||||
l-5.6-2.4l-5.6,32.8c9.6,4,27.2,8,45.6,8c25.6,0,46.4-7.2,58.4-20L317.6,274.8z"/>
|
||||
<path style="fill:#051244;" d="M364,324.4h37.6l8-24h51.2l4.8,24H504L490.4,266l-48-46.4l2.4,12.8c0,0,8,36,9.6,44h-33.6
|
||||
c3.2-8,16-42.4,16-42.4s3.2-8.8,5.6-14.4"/>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 3.0 KiB |
|
Before Width: | Height: | Size: 166 KiB |
|
Before Width: | Height: | Size: 170 KiB |
|
Before Width: | Height: | Size: 149 KiB |
|
Before Width: | Height: | Size: 146 KiB |
|
Before Width: | Height: | Size: 149 KiB |
|
Before Width: | Height: | Size: 166 KiB |
|
Before Width: | Height: | Size: 876 KiB |
|
Before Width: | Height: | Size: 565 KiB |
|
Before Width: | Height: | Size: 1.4 MiB |
|
Before Width: | Height: | Size: 791 KiB |
|
Before Width: | Height: | Size: 833 KiB |
|
Before Width: | Height: | Size: 572 KiB |
|
Before Width: | Height: | Size: 558 KiB |
|
Before Width: | Height: | Size: 683 KiB |
|
Before Width: | Height: | Size: 1.2 MiB |
|
Before Width: | Height: | Size: 1.8 MiB |
|
Before Width: | Height: | Size: 698 KiB |
|
Before Width: | Height: | Size: 132 KiB |
|
Before Width: | Height: | Size: 417 KiB |
|
Before Width: | Height: | Size: 987 KiB |
|
Before Width: | Height: | Size: 793 KiB |
|
Before Width: | Height: | Size: 1.0 MiB |
|
Before Width: | Height: | Size: 1.3 MiB |
|
Before Width: | Height: | Size: 436 KiB |
|
Before Width: | Height: | Size: 1.2 MiB |
|
Before Width: | Height: | Size: 1.1 MiB |
|
Before Width: | Height: | Size: 3.5 MiB |
@ -1,39 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 960 960" style="enable-background:new 0 0 960 960;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#05A5D1;}
|
||||
</style>
|
||||
<g id="XMLID_17_">
|
||||
<path id="XMLID_21_" class="st0" d="M960.2,478.3c0-63.5-79.5-123.7-201.5-161C786.8,193,774.3,94.1,719.2,62.4
|
||||
c-12.7-7.4-27.6-10.9-43.8-10.9v43.6c9,0,16.2,1.8,22.3,5.1c26.6,15.2,38.1,73.3,29.1,147.9c-2.1,18.4-5.7,37.7-10,57.5
|
||||
c-38.3-9.4-80.1-16.6-124.1-21.3c-26.4-36.2-53.7-69-81.3-97.7c63.7-59.2,123.5-91.7,164.2-91.7V51.3l0,0
|
||||
c-53.7,0-124.1,38.3-195.2,104.8c-71.1-66.1-141.5-104-195.2-104v43.6c40.5,0,100.5,32.2,164.2,91.1
|
||||
c-27.4,28.7-54.7,61.4-80.7,97.5c-44.2,4.7-86,11.9-124.3,21.5c-4.5-19.5-7.8-38.5-10.2-56.7c-9.2-74.7,2.1-132.7,28.5-148.1
|
||||
c5.9-3.5,13.5-5.1,22.5-5.1V52.3l0,0c-16.4,0-31.3,3.5-44.2,10.9c-54.9,31.7-67.2,130.4-38.9,254.3C80.5,355,1.4,415,1.4,478.3
|
||||
c0,63.5,79.5,123.7,201.5,161c-28.1,124.3-15.6,223.2,39.5,254.8c12.7,7.4,27.6,10.9,44,10.9c53.7,0,124.1-38.3,195.2-104.8
|
||||
c71.1,66.1,141.5,104,195.2,104c16.4,0,31.3-3.5,44.2-10.9c54.9-31.7,67.2-130.4,38.9-254.3C881,601.8,960.2,541.6,960.2,478.3z
|
||||
M705.7,348c-7.2,25.2-16.2,51.2-26.4,77.2c-8-15.6-16.4-31.3-25.6-46.9c-9-15.6-18.6-30.9-28.1-45.7
|
||||
C653.4,336.6,680.1,341.7,705.7,348z M616.2,556.1c-15.2,26.4-30.9,51.4-47.1,74.7c-29.1,2.5-58.6,3.9-88.3,3.9
|
||||
c-29.5,0-59-1.4-87.9-3.7c-16.2-23.3-32.1-48.1-47.3-74.3c-14.9-25.6-28.3-51.6-40.7-77.8c12.1-26.2,25.8-52.4,40.5-78
|
||||
c15.2-26.4,30.9-51.4,47.1-74.7c29.1-2.5,58.6-3.9,88.3-3.9c29.5,0,59,1.4,87.9,3.7c16.2,23.3,32.1,48.1,47.3,74.3
|
||||
c14.9,25.6,28.3,51.6,40.7,77.8C644.4,504.3,630.9,530.5,616.2,556.1z M679.4,530.7c10.6,26.2,19.5,52.4,27,77.8
|
||||
c-25.6,6.3-52.6,11.5-80.5,15.6c9.6-15,19.2-30.5,28.1-46.3C662.9,562.2,671.3,546.3,679.4,530.7z M481.2,739.2
|
||||
c-18.2-18.8-36.4-39.7-54.3-62.5c17.6,0.8,35.6,1.4,53.7,1.4c18.4,0,36.5-0.4,54.3-1.4C517.3,699.5,499.2,720.5,481.2,739.2z
|
||||
M335.8,624.1c-27.8-4.1-54.5-9.2-80.1-15.4c7.2-25.2,16.2-51.2,26.4-77.2c8,15.6,16.4,31.3,25.6,46.9
|
||||
C316.8,594,326.2,609.3,335.8,624.1z M480.2,217.4c18.2,18.8,36.4,39.7,54.3,62.5c-17.6-0.8-35.6-1.4-53.7-1.4
|
||||
c-18.4,0-36.5,0.4-54.3,1.4C444.1,257.1,462.2,236.2,480.2,217.4z M335.6,332.5c-9.6,15-19.2,30.5-28.1,46.3
|
||||
c-9,15.6-17.4,31.3-25.4,46.9c-10.6-26.2-19.5-52.4-27-77.8C280.7,341.9,307.6,336.6,335.6,332.5z M158.7,577.2
|
||||
C89.5,547.7,44.8,509,44.8,478.3s44.8-69.6,113.9-98.9c16.8-7.2,35.2-13.7,54.1-19.7c11.1,38.3,25.8,78.2,44,119
|
||||
c-18,40.7-32.4,80.3-43.4,118.4C194.1,591.1,175.7,584.4,158.7,577.2z M263.9,856.5c-26.6-15.2-38.1-73.3-29.1-147.9
|
||||
c2.1-18.4,5.7-37.7,10-57.5c38.3,9.4,80.1,16.6,124.1,21.3c26.4,36.2,53.7,69,81.3,97.7c-63.7,59.2-123.5,91.7-164.2,91.7
|
||||
C277.2,861.6,269.7,859.8,263.9,856.5z M727.4,707.6c9.2,74.7-2.1,132.7-28.5,148.1c-5.9,3.5-13.5,5.1-22.5,5.1
|
||||
c-40.5,0-100.5-32.2-164.2-91.1c27.4-28.7,54.7-61.4,80.7-97.5c44.2-4.7,86-11.9,124.3-21.5C721.8,670.4,725.3,689.4,727.4,707.6z
|
||||
M802.7,577.2c-16.8,7.2-35.2,13.7-54.1,19.7c-11.1-38.3-25.8-78.2-44-119c18-40.7,32.4-80.3,43.4-118.4
|
||||
c19.3,6.1,37.7,12.7,54.9,19.9c69.2,29.5,113.9,68.2,113.9,98.9C916.6,509,871.9,547.9,802.7,577.2z"/>
|
||||
<path id="XMLID_3_" class="st0" d="M285,52.1L285,52.1L285,52.1z"/>
|
||||
<circle id="XMLID_2_" class="st0" cx="480.6" cy="478.3" r="89.3"/>
|
||||
<path id="XMLID_1_" class="st0" d="M675.3,51.5L675.3,51.5L675.3,51.5z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 3.5 KiB |
|
Before Width: | Height: | Size: 286 KiB |
|
Before Width: | Height: | Size: 336 KiB |
|
Before Width: | Height: | Size: 506 KiB |
|
Before Width: | Height: | Size: 266 KiB |