Compare commits

...

3 Commits

Author SHA1 Message Date
ae31e72447 📝 Update terms 2025-03-20 13:08:26 +08:00
4efa211e9e 🐛 Fix bugs 2025-03-20 00:02:05 +08:00
6304305ff6 🗑️ Remove kb 2025-03-19 23:41:26 +08:00
31 changed files with 167 additions and 1026 deletions

View File

@ -2,7 +2,7 @@
<div class="text-xs text-grey sidebar-footer transition-opacity duration-500"> <div class="text-xs text-grey sidebar-footer transition-opacity duration-500">
<div class="flex footer-links flex-wrap"> <div class="flex footer-links flex-wrap">
<nuxt-link to="/terms/privacy-policy" class="hover:underline">Privacy Policy</nuxt-link> <nuxt-link to="/terms/privacy-policy" class="hover:underline">Privacy Policy</nuxt-link>
<nuxt-link to="/terms/user-agreement" class="hover:underline">Term of Service</nuxt-link> <nuxt-link to="/terms/basic-law" class="hover:underline">Term of Service</nuxt-link>
</div> </div>
<div class="flex footer-links flex-wrap"> <div class="flex footer-links flex-wrap">
<nuxt-link to="https://status.solsynth.dev" target="_blank" class="hover:underline">Status of Service</nuxt-link> <nuxt-link to="https://status.solsynth.dev" target="_blank" class="hover:underline">Status of Service</nuxt-link>

View File

@ -76,6 +76,6 @@ const config = useRuntimeConfig()
const { t } = useI18n() const { t } = useI18n()
const url = computed(() => const url = computed(() =>
props.post.alias ? `/posts/${props.post.area_alias}/${props.post.alias}` : `/posts/${props.post.id}`, props.post?.alias ? `/posts/${props.post?.alias_prefix}/${props.post?.alias}` : `/posts/${props.post?.id}`,
) )
</script> </script>

View File

@ -1,7 +1,7 @@
<template> <template>
<div class="my-2"> <div class="my-2">
<div v-if="status == 'pending'">{{ t("loading") }}</div> <post-item v-if="status === 'success'" class="no-margin-post" :post="post" :force-show-content="props.forceShowContent" />
<post-item v-else class="no-margin-post" :post="post" :force-show-content="props.forceShowContent" /> <div v-else>{{ t("loading") }}</div>
</div> </div>
</template> </template>

View File

@ -1,14 +0,0 @@
<template>
<v-list-item :active="route.hash.replace('#', '') == link.id" :to="{ hash: '#'+link.id }">
<template #prepend>
<v-icon icon="mdi-menu-right" :style="`padding-left: ${props.padding ?? 0}rem`" />
</template>
{{ link.text }}
</v-list-item>
</template>
<script setup lang="ts">
const props = defineProps<{ link: any, padding?: number }>()
const route = useRoute()
</script>

View File

@ -1,11 +0,0 @@
<template>
<template v-for="link in links">
<docs-table-of-content-link :link="link" :padding="props.padding" />
<table-of-content-links v-if="link.children" :links="link.children" :padding="(props.padding ?? 0) + 2" />
</template>
</template>
<script setup lang="ts">
const props = defineProps<{ links: any[], padding?: number }>()
</script>

View File

@ -1,13 +0,0 @@
<template>
<v-list density="compact" nav color="primary">
<template v-for="link in links">
<docs-table-of-content-link :link="link" :padding="props.padding" />
<docs-table-of-content-links v-if="link.children" :links="link.children" :padding="(props.padding ?? 0) + 2" />
</template>
</v-list>
</template>
<script setup lang="ts">
const props = defineProps<{ links: any[], padding?: number }>()
</script>

View File

@ -1,17 +0,0 @@
---
icon: mdi-airplane-landing
title: Welcome to Landing
description: Welcome to Solsynth's Knowledge Base - The Solar Archive
---
![Solar Archive Thumbnail](/thumbnails/docs/solar-archive-thumbnail.webp)
Welcome to the Solsynth Archive!
The Solsynth Archive, also known as the Solar Archive, is the largest known product database of Solsynth LLC. It is operated by Solsynth LLC and community-driven, with content and resources provided by the community, while being officially monitored and corrected.
The archive is still under construction, but in the future, you will be able to access all our materials here.
You can contribute to our documentation by forking our [Capital](https://git.solsynth.dev/Goatworks/Capital) repository and submitting PRs to modify the files under `content/<lang>/docs`. Contributions are welcome, whether its adding new content or correcting inaccuracies.
*P.S. You can use Solarpass for one-click login to the Solsynth Code Repository.*

View File

@ -1,23 +0,0 @@
---
icon: mdi-web
title: Solar Network
description: The Next-Generation Social Network by Solsynth LLC
---
![Solar Archive Thumbnail](/thumbnails/docs/solar-network-user-manual.webp)
Solar Network is a social network developed by Solsynth LLC, aiming to become the next-generation social network.
## Tech Stack
The Solar Network project follows the classic frontend-backend separation architecture, with the entire project divided into two parts: the frontend (Solian) and the backend (Hydrogen.Dealer, Hydrogen.Passport, etc.).
### Frontend
The frontend of Solar Network is a cross-platform client built with Flutter. For more details, check the [related page](solar-network/solian).
### Backend
The backend of Solar Network follows what we define as a "mid-service" architecture. Compared to microservices, each individual service is responsible for more tasks and is larger in scope, allowing us to maintain multiple projects more easily. At the same time, issues with a single service won't cause an overall outage.
At the center of it all is our core service — Hydrogen.Dealer, which serves as both the service discovery system and mid-service gateway. It is also the only external interface for Solar Network, with `api.sn.solsynth.dev` being the gateway exposed by Hydrogen.Dealer.

View File

@ -1,9 +0,0 @@
---
icon: mdi-palette
title: Creator Program
description: Welcome to the Solar Network Creator Program, Let's Co-create Solar Network
---
The Creator Program is an initiative by Solar Network designed to encourage users to create content. The goal of the program is to help creators use Solar Network to produce higher-quality content.
Join the Creator Program to receive more official support, get early access to new features, and provide valuable feedback to shape the future of Solar Network!

View File

@ -1,38 +0,0 @@
---
icon: mdi-sticker-emoji
title: Stickers and Sticker Packs
description: Stickers, Emotes, and Emojis
---
Stickers help users express their emotions better on Solar Network. This article introduces how to upload and use a sticker.
## Sticker Packs
Stickers must be part of a sticker pack. To create a sticker pack, go to the "Creator Hub" > "Stickers" section on the website sidebar.
## Stickers
Before creating a sticker, youll need to prepare the content. It is recommended to use a PNG or GIF image that is 1024x1024 pixels (minimum 128x128). The background can be transparent or not, but avoid solid color fills. Large white fills may cause discomfort for users in dark mode, akin to a flashbang.
Once the sticker pack is created, open it and select the plus symbol under "Actions" to add a sticker.
You might need to upload an attachment for the sticker material. After uploading, fill in the "Attachment" field with the Random ID (the series of characters after the #) from the completed upload. If the content displays correctly, the connection is successful.
After that, simply fill out the form to finish.
## Usage
To use a sticker, type a placeholder in your content, formatted as `:<pack prefix><sticker alias>:`.
For example, if a sticker pack has the prefix `solar` and a sticker alias `Hello`, the resulting placeholder would be `:solarHello:`.
Dont worry if that seems confusing—most of the time, we provide automatic suggestions. Simply type a colon in the Solian text box, followed by part of the placeholder, and suggestions will appear.
### Size Variations
In Solar Network, you may notice stickers appear in different sizes due to Smart Resize. The rules are as follows:
1. If only one sticker is present, it will appear at 128x128.
2. If three or fewer stickers are present, they will appear at 32x32.
3. If more than three stickers are present, or if stickers are embedded within text, they will appear at 20x20.
These adjustments are applied within a single paragraph.

View File

@ -1,10 +0,0 @@
---
icon: mdi-oci
title: Open Program
description: Welcome to the Solar Network Open Program, Let Us Help Your Application Grow
---
The Open Program is a collection of developer-friendly APIs and tools from Solar Network.
We adhere to principles that aim not to burden developers — no unnecessary encryption of parameters, no parameter obfuscation, and user-friendly API interfaces. We provide RESTful API endpoints to ensure the best possible developer experience.
Start exploring now and see what you can do with Solar Network!

View File

@ -1,71 +0,0 @@
---
icon: mdi-pencil-ruler
title: API Standards
description: The guidelines we follow when designing Solar Network service APIs
---
This article covers the paradigms we follow when designing Solar Network APIs, helping you better interact with our APIs for secondary development.
## Minimization
Our APIs aim to be minimalistic. Unlike some major platforms, where the response includes not only data but also a bunch of status codes, messages, and request IDs, we keep such information in the HTTP headers. The HTTP response body contains only the raw data, with no extra information (for paginated endpoints, an additional field for total count will be included).
## CRUD Operations
Our APIs generally follow RESTful design patterns. If you're unfamiliar with RESTful principles, heres how we practice it:
### Request Methods
- `GET` for fetching data
- `POST` for creating or performing some operations
- `PUT` for updating (though in RESTful principles it's also defined for creation, we dont use it that way)
- `PATCH` for updating (rarely used)
- `DELETE` for removing data
### Path Mapping
If you use `POST` to create data at an endpoint, using `GET` on the same endpoint will typically list the data.
Appending `/<id>` to the path will fetch a specific data entry. Switching the request method to `PUT` updates the entry, and using `DELETE` removes it.
If additional actions are needed, append paths after `/<id>`, usually for operations handled via `POST`.
Heres an example of path mapping for posts:
*Note: `:id` is a path parameter.*
- `GET /posts` - Retrieves a list of posts (paginated)
- `GET /posts/:id` - Retrieves a specific post
- `GET /posts/:id/replies` - Retrieves replies for a specific post (paginated)
- `POST /posts` - ~~Creates a post~~ (removed in the new version due to post types; use the specific post type creation endpoint)
- `PUT /posts/:id` - ~~Updates a post~~ (removed in the new version due to post types; use the specific post type update endpoint)
- `DELETE /posts/:id` - Deletes a post
- `POST /posts/:id/pin` - Pins a post
- `POST /posts/:id/react` - Reacts to a post
## Error Handling
We dont understand why, despite HTTP providing a complete set of status codes, other large companies still create their own. For HTTP status codes, heres a summary of common meanings:
- `500` - Internal Server Error — No need to worry; just file an issue if it happens frequently.
- `400` - Bad Request — Check the documentation and request body.
- `404` - Data not found or incorrect API path.
- `403` - Forbidden — You dont have permission.
- `401` - Unauthorized — API token required but not provided.
- `200` - Success
- `204` - No Content — Common for delete operations (though often forgotten during API development).
If the response status is not `2xx`, we usually return a `plain/text` response instead of `application/json`, providing a simple line of text indicating the error.
> If youre not good at English, dont keep asking us about errors — use a translator! Why else would we write error messages?
## Super Gateway
The Super Gateway refers to our [Hydrogen.Dealer](https://git.solsynth.dev/Hydrogen/Dealer). In most cases, you wont directly access our services; requests are forwarded through the Dealer gateway. Were not even sure why we created this.
Our API base URL is `api.sn.solsynth.dev`. How do you use it? Its simple. Access `/cgi/<service name>`, and this path will be forwarded to the corresponding services `/api` endpoint. In the latest version, we also introduced aliases for these services, making the URLs more readable.
- `/cgi/id` or `/cgi/auth` — Authentication service [Hydrogen.Passport](https://git.solsynth.dev/Hydrogen/Passport)
- `/cgi/uc` or `/cgi/files` — Attachment service [Hydrogen.Paperclip](https://git.solsynth.dev/Hydrogen/Paperclip)
- `/cgi/co` or `/cgi/interactive` — Post service [Hydrogen.Interactive](https://git.solsynth.dev/Hydrogen/Interactive)
- `/cgi/im` or `/cgi/messaging` — Messaging service [Hydrogen.Messaging](https://git.solsynth.dev/Hydrogen/Messaging)
> Fun fact: You might have noticed that the new aliases are actually the subdomains used before we had the Super Gateway.

View File

@ -1,104 +0,0 @@
---
icon: mdi-open-in-app
title: Solian Chain
description: Solian is the official cross-platform client developed by Solsynth LLC.
---
Solian is the cross-platform Solar Network client built with Flutter, and currently, its our only frontend.
# Usage
To use Solian, you can either download the client or open it directly in your browser. Thanks to Flutters cross-platform support, you can access the web version of Solian at https://lian.solsynth.dev. However, due to browser limitations, some features may be missing or affected.
## Download
There are many ways to download Solsynth, but make sure to download from officially certified channels.
1. The official release version from the repository: https://git.solsynth.dev/Hydrogen/Solian/releases
2. The test version from the official file storage: https://files.solsynth.dev/production01/solian
3. Official TestFlight (iOS and some macOS): https://testflight.apple.com/join/YJ0lmN6O
The Windows version is a portable version. You can place it in a directory you're familiar with and run it directly.
The web version also supports PWA (Progressive Web Application), which can replace some desktop usage.
## Installation
Below are the technical instructions for installing Solian on different platforms.
### Android
It is recommended to download the latest test version from the **file storage**. It has the latest fixes and is the most stable. ~~The test version is more stable than the stable version.~~
You can open and install the downloaded APK file directly. For Chinese phones, additional steps may be required for verification, but please avoid searching for and downloading from built-in app stores.
### iOS/macOS
Use TestFlight for installation. First, click the link above to download the TestFlight app. Then, click "Start Testing" in the second step of the link to join the test.
TestFlight has a limited number of testing slots. Once the time is right, we will release Solian on the App Store (non-China region), where you can search and download it.
### Windows
After downloading from any trusted source, extract it to a directory, and you can start using it.
**Note:** It seems that, due to a potential Flutter support issue, the Windows version often freezes for a while during the first startup before displaying the main window. Please be patient and avoid clicking repeatedly, as it may take 5 to 30 seconds. Repeated clicking may open multiple windows.
### Linux
Please build it yourself. I believe you can do it — good luck!
## Build It Yourself
### Preparing the Environment
Building Solian requires the Flutter SDK. Please download the latest version from the official site. Alternatively, you can download it from a China mirror.
After installing Flutter, follow the official documentation to install other platform-specific dependencies (e.g., Windows requires VS2022, Android requires Android Studio, and for iOS/macOS, its better to use the official pre-built version).
In addition to installing the Flutter SDK, we need Rust for system-level dependencies. Please download the latest version from the official Rust site.
Now that we have Flutter and Rust, we need one more thing — SQLite3, to support local databases for chat and future modules.
For Linux, you need to install the corresponding SQLite3 development dependencies:
```sh
# for ubuntu
sudo apt-get -y install libsqlite3-0 libsqlite3-dev
```
For Windows, download the
[sqlite3.dll](https://github.com/tekartik/sqflite/raw/master/sqflite_common_ffi/lib/src/windows/sqlite3.dll)
and place it in the running directory.
No additional steps are needed for macOS or mobile builds.
### Building the Code
Next, its time to build the code. Ensure that you have `git` installed on your build machine. Alternatively, you can download the code as a compressed archive.
Once `git` is installed, use the following command to clone the code:
```sh
git clone https://git.solsynth.dev/Hydrogen/Solian.git
```
Navigate to the corresponding directory and install dependencies using the following command:
```sh
flutter pub get
```
This will download dependencies from [pub.dev](https://pub.dev), hosted by Google. Connectivity within mainland China might be questionable. Refer to mirror sites for solutions.
Once the dependencies are installed, you can proceed with the build. Just one line of code:
```sh
# for windows
flutter build windows
# for macos
flutter build macos
# for linux
flutter build linux
# for ios
flutter build ipa
# for android
flutter build apk
```
You can also build other formats for Android, such as `aab`, but please prepare the necessary signing materials yourself.

View File

@ -22,6 +22,6 @@ downloads:
AceField which is stands for wonderful place to battle. AceField which is stands for wonderful place to battle.
We can't just use the name Battlefield because it already became a trademark of Electronic Arts. We can't just use the name Battlefield because it already became a trademark of Electronic Arts.
:embed-download-link{:items='downloads'} :embed-download-link{items='downloads'}
:embed-post-item{id=914} :embed-post-item{id=914}

View File

@ -0,0 +1,53 @@
---
title: User Agreement / Basic Law
date: 2025-03-19T16:12:21.897Z
---
This User Agreement (a.k.a. the Basic Law) is the framework of rules for all Solsynth LLC products, and other related regulations should comply with it, or the entry will not be effective.
This User Agreement will be referred to herein as “these Terms and Conditions” and Solsynth LLC will refer to it as “we” and “us”.
As used herein, account number, account, and Solarpass refer to the User's account on the Solar Network.
## Scope of Application
1. The User Agreement applies to all Solsynth LLC products, including but not limited to Solar Network, DietaryGuard, and AceField. 2.
2. Any prior events will still be subject to the latest revised version of these Terms and Conditions. 3.
3. All Solar Network users are deemed to have agreed to the contents of these Terms and Conditions and any subsequent updates to these Terms and Conditions upon registration.
4. The final interpretation of these Terms and Conditions is the responsibility of Solsynth LLC and the legislator of the relevant entry.
## Amendments and Updates to the Terms and Conditions
1. Changes to these Regulations shall be made by Solsynth LLC and the Legislator.
2. The Legislative Councilor's proposal to amend the Basic Law shall be supported by a referendum of more than **3/2** of the users and shall not be subject to the one-vote right of passage.
3. Legislators' proposals to amend other sub-regulations shall be supported by a referendum of more than **one-half** of the users.
4. Some special regulations are protected from amendment by legislators.
5. Regarding any subsequent updates to the ordinance, we will notify the content of the update by means of “notification on the website” or “email push”.
## Provision and Discontinuation of Services
1. Solsynth LLC will provide the same service to all natural persons in the world. 2.
2. We also reserve the right to discontinue the service to any user, and in principle we will inform the reason for discontinuance.
3. after the termination or suspension of the service, the user has the right to ask us to delete or export all user data.
4. In case of violation of the relevant regulations, the user will receive three kinds of penalties: **Warning, Suspension and Disablement**.
- Warning (Strike): The warning will not have any practical effect on the User and will be automatically revoked after 180 days without any bad behavior. If the user receives another warning within the warning period, the penalty will be upgraded to suspension.
- Suspension: There are two types of suspension: “Full Suspension” and “Partial Suspension”. Full Suspension” shall, in principle, have a time limit for entry into force.
- Full Suspension: The user will not be allowed to access any Solar Network and other services, and will not be able to log in to Solarpass.
- Partial deactivation: Partial disabling of the user's rights, e.g. uploading of files, publishing of posts, etc.
- Disablement: The user's entire account and all rights of Solsynth LLC to use other services are disabled. We also reserve the right to delete the relevant data.
5. A natural person can register and own only one Solarpass account, and we reserve the right to take action against other sub-accounts of the same User for deletion of data.
6. If a user opens a sub-account in any way during the penalty period in an attempt to evade the penalty, the sub-account shall be subject to deletion of data and the penalty shall be escalated or the time limit extended, as the case may be.
7. Bot accounts opened through the Developer Portal are not considered sub-accounts. *For more information on the use of bot accounts, please refer to the Developer Rules (/terms/developer-rules).
## 4. User Generated Content
1. we do not assume any responsibility for user-generated content posted on our Products. 2.
2. Regarding copyright infringement of content published by users on our products, we will remove the content in question; if we agree that there is a large amount of copyright infringement by the publisher, we will impose penalties of **warning and suspension of rights** depending on the situation.
3. In principle, we do not restrict users' freedom of expression, with the exception of the following cases, in which we will remove the content and penalize the publisher according to the circumstances:
- Copyright infringement
- Board-washing, meaningless content *See [community-safety-law](/terms/community-safety-law)* for details.
- Spreading rumors, fear-mongering, extremist speech *See the Community Safety Laws for more information.
4. With regard to the files uploaded by the User on Solar Network, they are considered to be public content on the Internet; at the moment of completion of the upload the User is considered to have authorized us with the required copyright to display the respective content.
## 5. User Privacy Protection
*The contents of this chapter are detailed in the [privacy-policy](/terms/privacy-policy)*

View File

@ -1,50 +1,48 @@
--- ---
title: Privacy Policy title: Privacy Policy / Privacy Protection Law
date: 2024-08-15T15:18:48.218Z date: 2025-03-19T16:12:21.897Z
--- ---
## Introduction This regulation is an expansion of Chapter 5 of the contents of the “Basic Law”. This entry applies the security protection policy (direct modification by the legislator is not allowed due to the design of user data security).
We take your privacy seriously. We take your privacy very seriously. This Privacy Policy outlines the types of personal information we collect, how we use it, and the protective measures we take.
This privacy policy outlines the types of personal information we collect,
how we use it, and the measures we take to protect your data.
## Information Collection ## 5.1 Information Collection
We collect personal information only when necessary to provide our services. We only collect personal information that is necessary to provide our services. This includes:
This may include your name, email address, and other relevant details.
## Use of Information - Email
- Telephone number *optional*
- Name *optional
- Address *optional
- Date of Birth *Optional
- Gender *selectable
- Internet Address
- Device Identifier
- User behavior data
## 5.2 Use of Information
We use your personal information to: We use your personal information to:
- Provide and improve our services - Provide data necessary for the provision and use of our services
- Communicate with you about updates or important information - communicate with you about updates to regulations or other important information
- Ensure compliance with legal obligations - analyze services to improve the quality of our services
## Data Sharing ## 5.3 Data Sharing
We do not sell, trade, or share your personal information with third parties except as required by law. We do not sell or trade your personal information.
## Data Security We share some of your personal information, which may include device identifiers and behavioral data, with our partner Google Analytics to help us analyze and improve our services, as described in Google's Privacy Policy (https://policies.google.com/privacy).
We implement robust security measures to protect your personal information from unauthorized access, ## 5.4 Data Security
alteration, disclosure, or destruction.
## Your Rights We have implemented strong security measures (including, but not limited to, the use of industry-leading encryption algorithms, a database key rotation policy, etc.) to protect your personal information from unauthorized access, alteration, disclosure or destruction.
You have the right to: ## 5.5 Your Rights
Regardless of the penalties imposed on your account, you always have the right to:
- Access the personal information we hold about you - Access the personal information we hold about you
- Request corrections to your personal information - Request correction of your personal information
- Request the deletion of your personal information - Request the deletion of your personal information
## Contact Us
If you have any questions or concerns about this privacy policy or our data practices,
please contact us at lily@solsynth.dev.
## Changes to This Policy
We may update this privacy policy from time to time.
Any changes will be posted on this page, and we will notify you of any significant changes.

View File

@ -1,77 +0,0 @@
---
title: User Agreement
date: 2024-08-15T15:18:48.218Z
---
This Agreement applies to all Solsynth LLC products, including but not limited to Solar Network, Solian, DietaryGuard, AceField.
## Provision and Discontinuance of Service
Solsynth LLC will provide equal service to all living things in the world, including grasshoppers.
We also reserve the right to stop service to any user. We do not require prior notice for discontinuing services to some users.
## User Generated Content
Any content posted on Solar Network (including but not limited to posts, articles, attachments) grants Solsynth LLC the right to display it by default.
Unless otherwise stated by the user, all rights are reserved by the original poster, and reprints should be authorized by the original poster.
### Reproduction Recognition
Unless specifically stated by the poster, all content is subject to the definition of reprint in this section.
Republishing means uploading the content of the original post to another platform or to the Solar Network, either unchanged or with minor modifications, provided that simultaneous reposting of the post, embedded components, and links to the presentation do not constitute republishing.
Republishing also requires attribution when authorized by the original poster.
### Freedom of Speech
We do not remove user-generated content except in cases of misuse of resources. We will not ask any user to remove any content.
However, Solsynth LLC reserves the right to restrict and stop the display of content to the public that violates community guidelines (e.g., obscenity, violence, gore, anti-social, terrorist organizations, etc.).
Although you have 100% freedom of speech on Solar Network. However, please be aware that freedom of speech does not mean that you will not be held accountable for what you say.
#### Restriction and Discontinuation
- Restriction of Display: Discontinuation of related tweets, while retaining the right to access them directly through resource identifiers and sharing links.
- Cease display: stop all access to the resource by anyone other than the author.
## Resource Misuse Prevention Policy
Although there are no capacity limitations for using Solar Network's data hosting services, resources determined to be abusive will be disenfranchised from some features.
Solsynth LLC reserves the right to reclaim space on previously uploaded resources for deletion.
### Determination of Misuse
- Uploading without using: e.g. uploading excessive attachments in Solar Network's Interactive Attachment Pool and not linking them to posts.
- Meaningless Posts: meaningless shuffling or wasting of Solar Network's storage resources
- Misuse: using Solar Network's public resources as if they were your own dedicated pool (see the Wiki's Dedicated Pools page for details).
The Solsynth Trust & Safety Team is ultimately responsible for determining misuse.
## Secondary Releases
A secondary release is when our assets are downloaded and re-hosted on another site.
### Product Secondary Release
Unless otherwise stated, Solsynth LLC products are not available for secondary distribution, please do not download our product builds and upload them twice to another site.
Please do not download our product builds and upload them to other sites. **Secondary distribution for commercial use is not permitted. **.
What you should do is post a link to our product on another site. Or use the embedded component. And indicate Solsynth LLC All Rights Reserved.
If you want to build a mirror site of our products, please contact us to waive this rule.
### Secondary distribution of source code
We do not allow any form of redistribution of source code (except for Forks).
This includes, but is not limited to, mirroring code repositories on GitHub or the Solsynth Code Repository to other Git providers such as GitLab, Gitee, and so on.
**Selling source code twice is not allowed. **
For more information on source code usage regulations, please follow the open source license used by the project.
If you would like to set up a mirror of our source code, please contact us to waive this policy.
*****
Solsynth LLC reserves the right of final interpretation of this agreement.

View File

@ -1,18 +0,0 @@
---
icon: mdi-airplane-landing
title: 欢迎着陆
description: 欢迎来到 Solsynth 的知识库 —— 太阳能档案
---
![Solar Archive Thumbnail](/thumbnails/docs/solar-archive-thumbnail.webp)
欢迎来到 Solsynth 资料库!
Solsynth 资料库,又称太阳档案馆,现知的最大 Solsynth LLC 产品资料库。由 Solsynth LLC 运营。由社区提供内容及资源,官方监督改正。
我们目前还在修建档案馆,但是未来这里将可以查阅到我们的所有资料。
你可以通过 Fork 我们的 [Capital](https://git.solsynth.dev/Goatworks/Capital) 来编辑 `content/<lang>/docs` 内部的文件并提交 PR 来贡献我们的文档。
无论是新增内容、修改不正确的地方,都欢迎贡献。
*P.S. 你可以使用 Solarpass 一键登陆 Solsynth Code Repository*

View File

@ -1,25 +0,0 @@
---
icon: mdi-web
title: Solar Network
description: Solsynth LLC 的下一代社交网络
---
![Solar Archive Thumbnail](/thumbnails/docs/solar-network-user-manual.webp)
Solar Network 是 Solsynth LLC 开发的社交网络,目标成为下一代社交网络。
## 技术栈
Solar Network 项目是经典的前后端分离项目,整体项目分为两部分:前端 (Solian),后端 (Hydrogen.Dealer, Hydrogen.Passport, etc...)
### 前端
Solar Network 的前端是 Flutter 构建的全平台支持客户端,详情可以查看 [相关页面](solar-network/solian)
### 后端
Solar Network 的后端根据我们的定义是一个「中服务」架构,它相比微服务相比,单个服务负责的东西更多,体量更大,这可以帮我们更好地维护多个项目,
但同时部分服务出现问题不会造成整体 Outage
在这一切的中心是我们的核心服务 —— Hydrogen.Dealer服务发现和中服务网关同时是唯一一个 Solar Network 地外部接口,
`api.sn.solsynth.dev` 就是 Hydrogen.Dealer 暴露出来的网关

View File

@ -1,9 +0,0 @@
---
icon: mdi-palette
title: 创作者计划
description: 欢迎来到 Solar Network 创作者计划,在这里共创 Solar Network
---
创作者计划是 Solar Network 为了推动用户创作内容而诞生的一个企划,企划旨在帮助创作者更好的使用 Solar Network 产出更高质量的内容。
加入创作者计划,获得更多官方支持,第一时间使用新功能,为未来的 Solar Network 提出宝贵的建议吧!

View File

@ -1,40 +0,0 @@
---
icon: mdi-sticker-emoji
title: 贴图及贴图包
description: Stickers, Emotes 和 Emoji
---
贴图可以帮助用户通过 Solar Network 更好的表达他们的情绪,这篇文章将会向你介绍如何上传、使用一个贴图
## 贴图包
贴图必须跟随一个贴图包要创建一个贴图包你可以转到官网侧边栏的「Creator Hub」>「Stickers」来创建一个
## 贴图
贴图的创建,你首先需要准备内容。建议为一个 1024x1024 像素大小(最小为 128x128 的大小,否则可能造成效果不佳)的 PNG 或 GIF 图片,
透明背景或内容背景均可,但请不要使用纯色填充。大面积的白色填充可能会给暗色模式的用户带来闪光弹。
之后打开刚刚创建的贴图包在「Actions」中点选加号标识来创建一个贴图。
你可能需要上传一个附件来添加贴图的材质,并使用上传完成后界面的 Random ID (井号后面的一连串字符) 填写在 Attachment 字段里,
能成功显示出内容即代表连接成功
之后完成表单的填写即可。
## 使用
使用贴图,需要在你的内容中键入一个文字占位符,具体的组成为 `:<pack prefix><sticker alias>:`。
例如一个贴图包的前缀(`prefix`)为 `solar`,一个该贴图包的的贴图别名(`alias`)为 `Hello`,组成出来的占位符为 `:solarHello:`
不过不明白也别担心,大多数情况我们都有自动提示。只需在 Solian 内文本框键入一个英文冒号,再开始键入占位符的一部分即可。
### 大小变化
在 Solar Network 中,你可能看到大小不同的贴图,这是因为 Smart Resize 在背后发功。具体规则如下。
1. 当仅有一个贴图,将使用 128x128 的大小
2. 当有三个及一下的题图,将使用 32x32 的大小
3. 当有三个以上的贴图,或贴图夹杂在文本内时,将使用 20x20 的大小
这一系列的匹配都将发生在一个段落中。

View File

@ -1,10 +0,0 @@
---
icon: mdi-oci
title: 开放计划
description: 欢迎来到 Solar Network 开放计划,让我们助力你的应用成长
---
开放计划是 Solar Network 一系列的开发者友好的 API 和小工具集合。
我们坚持不为开发者添堵的规则,非必要不加密参数,永不混淆参数,人性化 API 接口RESTful API 端点,尽可能的让开发者体验好。
现在就开始浏览,看看你能用 Solar Network 做些什么吧!

View File

@ -1,70 +0,0 @@
---
icon: mdi-pencil-ruler
title: API 标准
description: 在设计 Solar Network 服务 API 时惯用的准则
---
这篇文章是关于我们平时在设计 Solar Network API 时的范式是怎样的,能够帮助你更好的调用我们的 API 来进行第二次开发
## 最小化
我们的 API 一般追求极简,不像某些大平台的 API 一样除了数据之外的格式还有一大堆什么状态码、信息、请求 ID 什么的。这些信息我们都选择放在 HTTP 的 Header 部分。HTTP 的响应体就是纯粹的数据,无其他信息(需要分页的数据接口会额外返回一个数据总数)。
## 增删查改
我们的 API 基本上都是遵循 RESTful 设计范式的,如果你不知道什么是 RESTful可以看以下我们理解的实践的 RESTful
### 请求方法
- `GET` 查询
- `POST` 创建、进行某种操作
- `PUT` 更新(虽在 RESTful 中也被定义为创建数据的行为,但是我们不使用)
- `PATCH` 更新(不常用)
- `DELETE` 删除
### 路径映射
假如你 POST 了一个地址来创建数据,那么用 GET 方法访问相同的地址大概就是列出数据的列表。
在其后面加上 `/<id>` 就是单独读取某个数据,将请求方法改成 PUT 便是更新该条数据,改成 DELETE 就是删除该条数据。
如果在 `/<id>` 再加上东西基本上就是 POST 方法来执行某个操作。
例如以下是我们帖子的路径映射
*注:`:id` 系路径参数*
- `GET /posts` 获取帖子列表(分页)
- `GET /posts/:id` 获取单个帖子
- `GET /posts/:id/replies` 获取单个帖子的回复(分页)
- `POST /posts` ~~创建帖子~~(于新版本因为引入帖子类型移除,需使用对应类型的创建接口)
- `PUT /posts/:id` ~~更新帖子~~(于新版本因为引入帖子类型移除,需使用对应类型的更新接口)
- `DELETE /posts/:id` 删除帖子
- `POST /posts/:id/pin` 置顶帖子
- `POST /posts/:id/react` 对帖子作出反应
## 错误处理
我们不理解为什么 HTTP 有给一套完善的状态码系统,其他大厂却仍选择自立门户。关于响应的 HTTP 状态码,以下是一些常用的含义代表。
- `500` 服务器内部错误 —— 你不用管,如果多见记得抛 issue
- `400` 请求参数错误 —— 看文档,核查请求体
- `404` 数据不存在或是接口路径不对
- `403` 没有权限
- `401` 需要授权 —— 需要授权的 API 但你没有提供 API 令牌
- `200` 成功
- `204` 无内容 —— 常见于删除 *虽然后时候写 API 会忘记删除内容时改成这个*
如果响应不是 `2xx` 的状态码,一般我们都不会返回 `application/json` 的数据,而是一个 `plain/text`,一行简单的文字来代表你犯了什么错。
> 如果你是英语白痴,遇到报错别老来问我们,用用翻译好吗?不然我们写报错信息干嘛。
## 超级网关
超级网关指的是我们的 [Hydrogen.Dealer](https://git.solsynth.dev/Hydrogen/Dealer),一般情况下你都不会直接访问我们的服务,都是走 Dealer 的网关转发的。虽然我们也不知道为什么写了个这个东西。
我们 API 的地址为 `api.sn.solsynth.dev`,怎么用呢?很简单。访问 `/cgi/<service name>` 即可,这样的地址会被转发到对应服务的 `/api` 端点。新版本我们还给这些服务加了点别名,这样你的 URL 可以变得更好看点。
- `/cgi/id` 或 `/cgi/auth` —— 授权服务 [Hydrogen.Passport](https://git.solsynth.dev/Hydrogen/Passport)
- `/cgi/uc` 或 `/cgi/files` —— 附件服务 [Hydrogen.Paperclip](https://git.solsynth.dev/Hydrogen/Paperclip)
- `/cgi/co` 或 `/cgi/interactive` —— 帖子服务 [Hydrogen.Interactive](https://git.solsynth.dev/Hydrogen/Interactive)
- `/cgi/im` 或 `/cgi/messaging` —— 聊天服务 [Hydrogen.Messaging](https://git.solsynth.dev/Hydrogen/Messaging)
> 冷知识:你可能注意到了我们新配置的别名其实就是之前没有超级网关时他们使用的子域名。

View File

@ -1,106 +0,0 @@
---
icon: mdi-open-in-app
title: Solian 索链
description: Solian 是由 Solsynth LLC 官方编写的全平台支持客户端。
---
Solian 是由 Flutter 编写的全平台 Solar Network 客户端,也是我们目前唯一的前端。
# 使用
想要使用 Solian你可以下载客户端也可以直接在浏览器中打开。得益于 Flutter 的全平台支持,你可以在 https://lian.solsynth.dev 访问到 Solian 网页版。但由于浏览器限制,部分功能可能欠缺或受到影响。
## 下载
下载 Solsynth 的方式很多,但一定请从官方认证的渠道下载。
1. 官方仓库发布的正式版本 https://git.solsynth.dev/Hydrogen/Solian/releases
2. 官方文件托管柜发布的测试版本 https://files.solsynth.dev/production01/solian
3. 官方 TestFlight (iOS 与少量 macOS) https://testflight.apple.com/join/YJ0lmN6O
Windows 版本系免安装版本,放置于一个您熟悉的目录即可使用。
Web 版本同时支持 PWA 渐进式网页应用,可以替代一部分桌面端使用。
## 安装
以下是个平台安装 Solian 的技术要领。
### Android
推荐从**文件托管柜**下载最新测试版,版本最新,修复最全,最稳定。~~测试版比稳定版稳定~~
下载下来的 APK 档案可以直接打开安装。中国版手机可能需要额外步骤验证,但请不要使用自带应用商店搜索下载。
### iOS/macOS
使用 TestFlight 安装。可以点击上方链接首先下载安装 TestFlight App。再点击上方链接的第二部开始测试来参加测试。
TestFlight 的测试名额有限,等到时机成熟我们会将 Solian 发布于非中国区的 App Store可以前往 App Store 搜索下载。
### Windows
Windows 从任意可信渠道下载后解压到一个目录即可使用。
**注意:** Windows 版本不知是否属于 Flutter 的支持问题,在第一次启动加载时总是会卡好一会才弹出主窗口。不用反复点击,请耐心等待,可能会使用
5 到 30 秒。如果多次点击可能会打开多个窗口。
### Linux
请自行构建。我相信你们可以的,加油哦~
## 自行构建
### 环境准备
构建 Solian 需要使用 Flutter SDK请在官网下载最新版安装。也可以从中国镜像站下载安装。
安装完成 Flutter 请根据官方文档下载其他对应平台需要的开发依赖,例如 Windows 需要 VS2022、Android 需要 Android
Studio、iOS/macOS 我劝你还是用官方版本构建的吧。
除开安装 Flutter SDK我们还需要使用 Rust 做系统级依赖支持。请从 Rust 官方下载最新版本。
现在我们有了 Flutter、Rust还少一个东西为了实现聊天及未来的其他模块本地数据库支持。
Linux 版本还需要安装对应的 SQLite3 开发依赖。
```sh
# for ubuntu
sudo apt-get -y install libsqlite3-0 libsqlite3-dev
```
Windows 需要下载
[sqlite3.dll](https://github.com/tekartik/sqflite/raw/master/sqflite_common_ffi/lib/src/windows/sqlite3.dll)
放置在运行目录。
macOS 及手机端构建不需要其他操作。
### 构建代码
之后就是构建代码的时候了。确保你在构建机器上安装了 `git` 版本管理工具。或者你想直接下载代码压缩档案也不是不行。
确保 `git` 安装之后可以使用以下命令克隆代码。
```sh
git clone https://git.solsynth.dev/Hydrogen/Solian.git
```
之后导航到对应目录,使用以下命令安装依赖。
```sh
flutter pub get
```
该操作会从 [pub.dev](https://pub.dev) 上下载依赖,而 pub.dev 是由 Google 托管提供。所以中国大陆的连接性要被打个问号。具体可以参考中国大陆镜像站点查询解决方案。
完成依赖获取后就可编译了,一行命令就搞定。
```sh
# for windows
flutter build windows
# for macos
flutter build macos
# for linux
flutter build linux
# for ios
flutter build ipa
# for android
flutter build apk
```
你也可以为 Android 平台构建 `aab` 等其他格式的应用包。但是对应签名素材请自行准备。

View File

@ -0,0 +1,53 @@
---
title: 用户协议 / 基本法
date: 2025-03-19T16:12:21.897Z
---
本用户协议(又称基本法)是 Solsynth LLC 所有产品的规则框架,其他相关的条例应该遵守本条例,否则该条目不生效。
本文将省略称呼本用户协议为「本条例」Solsynth LLC 称为「我们」。
本文中帐号、帐户、及 Solarpass 均指代用户在 Solar Network 上开设的帐号。
## 1. 适用范围
1. 用户协议适用于所有 Solsynth LLC 的产品,包括但不限于 Solar Network、DietaryGuard 及 AceField。
2. 任何发生在以前的事件仍然适用最新版修订版的本条例。
3. 所有 Solar Network 用户在注册时视为同意本条例的内容以及其后续更新。
4. 条例的最终解释权归属于 Solsynth LLC 及相关条目立法委员。
## 2. 条例的修改和更新
1. 本条例的修改由 Solsynth LLC 和立法委员共同完成。
2. 立法委员提出关于修改「基本法」的提案应当得到超过**二分之三**的用户公投支持并不适用一票通过权。
3. 立法委员提出关于修改其他子条例的提案应当得到超过**二分之一**的用户公投支持。
4. 部份特殊条例实行保护方针不允许立法委员修改。
5. 关于后续任何的条例更新,我们将采取「站内通知」或「邮件推送」的方式通知内容更新。
## 3. 服务的提供与中断
1. Solsynth LLC 将向世界上所有的自然人提供同等的服务。
2. 我们同时保留向任何用户停止服务的权利,原则上我们会告知停止服务的原因。
3. 在用户的服务被终止或停权之后,用户有权向我们要求删除或导出所有的用户资料。
4. 用户在违反相关条例时,会收到**警告、停权、禁用**三种处罚措施。
- 警告 (Strike): 不会对用户造成任何实际上的影响,警告会在无任何不良行为 180 天后自动撤销。若用户在警告期内再次获得警告,处罚将升级为停权。
- 停权:停权分为两种类型「完全停权」和「部份停权」。其中「完全停权」原则上应有生效时限。
- 完全停权:用户将不允许存取任何 Solar Network 和其他服务内容,同时也会无法登陆 Solarpass。
- 部份停权:禁用用户的部份权利,例如上传文件、发布帖子等。
- 禁用:禁用用户的整个帐号和所有 Solsynth LLC 使用其他服务的权利。同时我们保留删除相关数据的权利。
5. 一个自然人只能注册、拥有一个 Solarpass 帐号,我们有权对其他同用户的子帐号采取删除数据的措施。
6. 若用户在处罚期间采取任何方式开设子帐号试图逃避处罚,应当对子帐号采取删除数据的措施,并且视情况升级处罚或延长时限。
7. 通过「开发者门户」开设的机器人帐号不属于子帐号范畴。*关于「机器人帐号」的使用规定,详见 [开发者守则](/terms/developer-rules)*
## 4. 用户生成内容
1. 我们不承担任何关于用户在我们产品上发表的内容的责任。
2. 关于用户在我们产品上发布的内容侵犯版权时,我们会对相关内容进行删除;若同意发布者有大量侵犯版权的情况,根据情况处以**警告及停权**的处罚。
3. 我们原则上不会限制用户的言论自由,但以下情况例外,我们会根据情况对相关内容进行删除并处罚发布者:
- 侵犯版权
- 洗板,无意义的内容 *详见 [社区治安条例](/terms/community-safety-law)*
- 散播谣言、恐慌、极端主义的言论 *详见 [社区治安条例](/terms/community-safety-law)*
4. 关于用户上传在 Solar Network 上的文件,视为互联网上的公开内容;在用户上传完成的即刻起,视为用户授权我们所需的版权展示相关的内容。
## 5. 用户隐私保护
*本章内容详见 [隐私保护法](/terms/privacy-policy)*

View File

@ -1,44 +1,48 @@
--- ---
title: 隐私策略 title: 隐私策略 / 隐私保护法
date: 2024-08-15T15:18:48.218Z date: 2025-03-19T16:12:21.897Z
--- ---
## 简介 本条例是对「基本法」内容第五章的扩充。本条目适用安全保护方针(因设计用户数据安全,不允许立法委员直接修改)。
我们非常重视您的隐私。本隐私政策概述了我们收集的个人信息类型、使用方式以及我们采取的保护措施。 我们非常重视您的隐私。本隐私政策概述了我们收集的个人信息类型、使用方式以及我们采取的保护措施。
## 信息收集 ## 5.1 信息收集
我们仅在提供服务时收集必要的个人信息。这可能包括您的姓名、电子邮件地址以及其他相关信息。 我们仅在提供服务时收集必要的个人信息。这包括:
## 信息使用 - 电子邮件
- 电话号码 *可选*
- 姓名 *可选*
- 地址 *可选*
- 出生日期 *可选*
- 性别 *可选*
- 互联网地址
- 设备标识符
- 用户行为数据
## 5.2 信息使用
我们使用您的个人信息来: 我们使用您的个人信息来:
- 提供和改进我们的服务 - 提供和我们的服务使用的必要数据
- 与您沟通更新或重要信息 - 与您沟通相关条例更新或其他重要信息
- 确保遵守法律义务 - 分析服务提升我们服务的质量
## 数据共享 ## 5.3 数据共享
我们不会出售、交易或与第三方分享您的个人信息,法律要求除外。 我们不会出售、交易您的个人信息。
## 数据安全 我们与我们的合作伙伴 Google Analytics 共享您部份的个人信息,这可能包括设备标识符和行为数据,来帮助我们分析和改进我们的服务,详见 [Google 的隐私政策](https://policies.google.com/privacy)。
我们实施了强有力的安全措施,以保护您的个人信息免受未经授权的访问、更改、披露或销毁。 ## 5.4 数据安全
## 您的权利 我们实施了强有力的安全措施(包括但不限于使用业界领先的加密算法,实行数据库密钥轮换政策等),以保护您的个人信息免受未经授权的访问、更改、披露或销毁。
您有权: ## 5.5 您的权利
无论您的帐号被如何处罚,您一直有权:
- 访问我们持有的关于您的个人信息 - 访问我们持有的关于您的个人信息
- 请求更正您的个人信息 - 请求更正您的个人信息
- 请求删除您的个人信息 - 请求删除您的个人信息
## 联系我们
如果您对本隐私政策或我们的数据处理方式有任何疑问或顾虑,请通过[您的联系方式]与我们联系。
## 政策变更
我们可能会不时更新本隐私政策。任何更改将发布在此页面上,且我们会通知您任何重大更改。

View File

@ -1,77 +0,0 @@
---
title: 用户协议
date: 2024-08-15T15:18:48.218Z
---
本协议适用于所有 Solsynth LLC 的产品,包括但不限于 Solar Network、Solian、DietaryGuard、AceField。
## 服务的提供与中断
Solsynth LLC 将向世界上所有的生物提供同等的服务,包括草履虫。
同时也保留向任意用户停止提供服务的权利。关于停止部分用户的服务,我们不需要提前通知。
## 用户生成内容
任意发布在 Solar Network 上的内容(包括但不限于帖子、文章、附件)都默认授权 Solsynth LLC 予以展示的权利。
除非用户特别声明,所有内容均为原帖主保留所有权利,转载请先向原帖主授权。
### 转载的认定
无帖主特别声明,所有内容均适用本条转载的定义。
转载指将原帖的内容原封不动或略作改动上传到别的平台或 Solar Network。但同时转帖、嵌入式组件与展示展开的链接不构成转载。
转载即时在原帖主授权的情况下也需表明出处。
### 言论的自由
除滥用资源的情况,我们不会将用户生成内容进行删除。也不会做出要求任何用户删除任何内容的要求。
但 Solsynth LLC 始终保留对于违反社区准则的内容(如淫秽、暴力、血腥、反社会、恐怖组织等)限制与停止向公众展示的权利。
尽管在 Solar Network 上你拥有 100% 的言论自由。但还请清楚,言论自由不代表不用对自己的言论负责。
#### 限制展示与停止展示
- 限制展示:停止相关的推送,但是任保留直接通过资源标识符和分享连接访问的权利
- 停止展示:全面停止除作者之外任何人访问该资源的权利
## 防止资源滥用条例
尽管使用 Solar Network 的数据托管服务并无任何的容量限制,但经过判定的滥用资源将会被取消使用部分功能的权利。
并且之前上传的资源 Solsynth LLC 有权对其进行删除空间回收。
### 滥用的认定
- 传而不用:例如在 Solar Network 的 Interactive 附件池中过度上传附件并不将附件与帖子连接
- 无意义帖:无意义洗版或浪费 Solar Network 的存储资源
- 走错片场:将 Solar Network 公有资源当作自己的专用资源池使用(详见维基《专用资源池》页面)
滥用的认定最终解释权归属于 Solsynth Trust & Safety Team
## 二次发布
二次发布指将我们的资产下载并重新托管到别站。
### 制品二次发布
除特殊声明Solsynth LLC 的产品均不允许二次发布,请勿将我们的产品构建下载并二次上传于其他站点。
**二次作为商用发布更是不允许的。**
你应该做的是将我们的产品链接贴上他站。或使用嵌入式组件。并且表明 Solsynth LLC 版权所有。
若您想搭建我们制品的镜像站,请与我们取得联系以豁免此条例。
### 源码二次发布
我们不允许任何形式的源码二次发布Fork 除外)。
包括但不限于,将 GitHub 或 Solsynth Code Repository 上的代码仓库镜像于 GitLab、Gitee 等其他 Git 提供者。
**二次售卖源码更是不允许的。**
关于更多的源码使用条例,请遵循项目使用的开源许可证。
若您想搭建我们源码的镜像站,请与我们取得联系以豁免此条例。
*****
Solsynth LLC 保留对此协议的最终解释权

View File

@ -24,7 +24,6 @@
<v-navigation-drawer v-model="openDrawer" location="left" width="300" temporary order="-1"> <v-navigation-drawer v-model="openDrawer" location="left" width="300" temporary order="-1">
<v-list density="compact" nav color="primary"> <v-list density="compact" nav color="primary">
<v-list-item title="Knowledge Base" prepend-icon="mdi-library" to="/docs" exact />
<v-list-item title="Developer Portal" prepend-icon="mdi-code-tags" to="/dev" exact /> <v-list-item title="Developer Portal" prepend-icon="mdi-code-tags" to="/dev" exact />
<v-list-item title="Creator Hub" prepend-icon="mdi-pencil" to="/creator" exact /> <v-list-item title="Creator Hub" prepend-icon="mdi-pencil" to="/creator" exact />
</v-list> </v-list>

View File

@ -1,115 +0,0 @@
<template>
<v-app-bar flat color="primary">
<v-container fluid class="mx-auto d-flex align-center justify-center pe-8">
<v-app-bar-nav-icon class="me-1" @click="openDrawer = !openDrawer" />
<nuxt-link to="/docs" exact>
<h2 class="mt-0.5">Solsynth Knowledge Base</h2>
</nuxt-link>
<v-spacer></v-spacer>
<locale-select @update="reload" />
<user-menu />
</v-container>
</v-app-bar>
<v-navigation-drawer v-model="openDrawer" location="left" width="300" floating>
<content-navigation v-slot="{ navigation }" :query="navQuery" :key="route.path">
<v-list density="compact" nav color="primary" class="mt-1">
<v-list-item
v-if="navNotRoot"
title="Previous"
prepend-icon="mdi-page-previous"
exact
@click="previousNav"
/>
<v-list-item
v-if="navigation[0]?.children"
v-for="link of fullyFlatMap(navigation[0])"
:key="link._path"
:title="link.title"
:to="link._path"
:prepend-icon="link.icon ?? 'mdi-text-box'"
exact
/>
<v-list-item v-else title="No Content" prepend-icon="mdi-close-box-outline" disabled />
</v-list>
</content-navigation>
<v-divider class="border-opacity-50 mb-4 mt-0.5" />
<copyright no-centered service="capital" class="px-5" />
<footer-links class="px-5 mt-3" />
</v-navigation-drawer>
<v-app-bar color="transparent" density="compact" class="backdrop-blur-md">
<v-app-bar-nav-icon icon="mdi-home" to="/" class="ms-4" />
<div class="flex items-center justify-center h-[60px]">
<v-breadcrumbs :items="breadcrumb" density="compact" class="px-0 mt-0.5"></v-breadcrumbs>
</div>
</v-app-bar>
<v-main>
<slot />
</v-main>
</template>
<script setup lang="ts">
const { locale } = useI18n()
const route = useRoute()
const breadcrumb = computed(() => {
const arr = route.path.replace(/^\/|\/$/g, "").split("/")
arr.shift()
return arr.map((x, idx) => ({
title: x,
to: `/docs/${arr.slice(0, idx + 1).join("/")}`,
}))
})
const navNotRoot = computed(() => route.path.split("/").length > 2)
const navQuery = ref(calcNavQuery())
function calcNavQuery(path?: string) {
return {
where: {
_path: new RegExp("^\\/" + (path ?? route.path).replace(/^\/|\/$/g, "") + "\\/[^\\/]+\\/?$"),
_locale: getLocale(locale),
},
}
}
watch(route, (value) => {
navQuery.value = calcNavQuery(value.path)
}, { immediate: true, deep: true })
function previousNav() {
const arr = route.path.split("/")
arr.pop()
navigateTo(arr.join("/"))
}
function fullyFlatMap(input: any): any[] {
const result: any[] = []
const pathSet = new Set<string>()
for (const item of input?.children ?? []) {
result.push(item)
result.push(...fullyFlatMap(item))
}
return result.filter((x) => {
if (pathSet.has(x._path)) return false
pathSet.add(x._path)
return true
})
}
const openDrawer = ref(false)
function reload() {
window.location.reload()
}
</script>

View File

@ -1,105 +0,0 @@
<template>
<v-container class="px-12 docs-page-container">
<div class="docs-container">
<div class="docs-content">
<div class="mt-5">
<div class="flex gap-2 items-center">
<v-icon :icon="page.icon ?? 'mdi-text-box'" size="28" />
<h1 class="text-2xl">{{ page.title }}</h1>
</div>
<p>{{ page.description }}</p>
</div>
<article class="text-base prose xl:text-lg docs-article">
<content-renderer :value="page">
<content-renderer-markdown :value="page" />
</content-renderer>
</article>
</div>
<v-dialog max-width="540" v-model="dialogOpen" close-on-content-click>
<v-card title="Table of Contents" density="compact">
<div class="mt-[-12px]">
<docs-table-of-contents v-if="page.body.toc.links?.length > 0" :links="page.body.toc.links" />
<v-empty-state v-else text="No Headers Available" />
</div>
</v-card>
</v-dialog>
<v-fab
app
appear
size="large"
location="bottom end"
icon="mdi-menu"
@click="dialogOpen = !dialogOpen"
/>
</div>
</v-container>
</template>
<script setup lang="ts">
import { definePageMeta } from "#imports"
const route = useRoute()
const { t } = useI18n()
const { data: page } = await useAsyncData<any>("page", queryContent(route.path).where({ _locale: getLocale() }).findOne)
const drawerTab = ref(0)
const dialogOpen = ref(false)
if (page.value == null) {
throw createError({
status: 404,
statusMessage: "Document Page Not Found",
})
}
definePageMeta({
layout: "docs",
})
useHead({
title: page.value.title,
titleTemplate: "%s | Solsynth Knowledge Base",
})
useSeoMeta({
title: page.value.title,
ogTitle: page.value.title,
description: page.value.description,
ogDescription: page.value.description,
ogUrl: `${useRuntimeConfig().public.siteUrl}${route.fullPath}`,
publisher: "Solar Archive",
ogSiteName: "Solsynth Capital",
})
</script>
<style scoped>
.docs-article {
padding-bottom: 2rem;
}
.docs-content {
max-width: 75ch;
margin: 0 auto;
}
</style>
<style>
.docs-article img {
border-radius: 8px;
border: 1px solid #eee;
transition: box-shadow .3s ease-in-out;
}
.docs-article img:hover {
box-shadow: 2px 2px 2px rgba(0, 0, 0, .2);;
}
html, body, .v-application, .docs-article {
scroll-behavior: smooth;
}
</style>

View File

@ -43,10 +43,6 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
definePageMeta({
alias: ["/@:name(.*)*"],
})
const { t } = useI18n() const { t } = useI18n()
const route = useRoute() const route = useRoute()
const config = useRuntimeConfig() const config = useRuntimeConfig()