初始化
@@ -0,0 +1,12 @@
|
||||
---
|
||||
description: 用户要求 git commit、提交代码、写 commit message 或创建提交时,必须先加载 commit-convention skill 并严格遵守
|
||||
alwaysApply: false
|
||||
---
|
||||
|
||||
# Git 提交规范自动激活
|
||||
|
||||
当用户要求**提交代码**、**git commit**、**写提交说明**或执行提交流程时:
|
||||
|
||||
1. 必须先加载 `.cursor/skills/commit-convention/SKILL.md`。
|
||||
2. subject **必须**以 `[Ai]` 或 `[Human]` 开头:Agent 编写的变更用 `[Ai]`,用户手写且仅代提交用 `[Human]`;提交前须结合 diff 与对话上下文判定,并写清业务变更,禁止敷衍 subject。
|
||||
3. 未获用户明确授权不得 commit;不得提交 `.env` 等含密钥文件;默认不 push。
|
||||
@@ -0,0 +1,21 @@
|
||||
---
|
||||
description: 在改动 Vue/hook/service/store/views/components 时,自动加载 frontend-project-standards skill 并按其规范输出
|
||||
globs: src/**/*.vue,src/views/**/*.ts,src/hooks/**/*.ts,src/service/**/*.ts,src/stores/**/*.ts,src/components/**/*.{vue,ts}
|
||||
alwaysApply: false
|
||||
---
|
||||
|
||||
# 前端规范自动激活
|
||||
|
||||
本仓库改动 Vue / hooks / service / store / views / components 范围的代码时:
|
||||
|
||||
1. 必须先加载 `.cursor/skills/frontend-project-standards/SKILL.md`,并严格遵守其中的"强制规则"。
|
||||
2. 命名细则参考 `.cursor/skills/frontend-project-standards/naming-conventions.md`。
|
||||
3. 代码模板参考 `.cursor/skills/frontend-project-standards/reference.md`。
|
||||
4. 用户使用 `@fps:new` / `@fps:refactor` / `@fps:api` / `@fps:fix` / `@fps:review` / `@fps:hook` 时,按 `prompt-templates.md` 对应模板执行。
|
||||
5. 输出必须包含:分层说明、hooks 变更、API 变更与类型、错误覆盖、维护性收益、PR 自检结果。
|
||||
|
||||
不得绕过 `src/utils/request.ts` 直接 axios,不得在 `.vue` / hook 中直接发请求,不得在新增代码中引入宽泛 `any`。
|
||||
|
||||
**禁止过度设计**:默认走最小可行实现,命中 `SKILL.md` 的 `### 0.1) 反过度设计` 任一信号即必须回退方案;任何抽象/拆分动作都需要在输出里说明对应的复用或复杂度信号。
|
||||
|
||||
**完工必须做闭环校验**:按 `SKILL.md` 的 `## 完工闭环校验` 执行,**只校验本次改动文件**,不扫全仓、不修历史问题。最终输出附"闭环校验结果"区块(已校验文件清单 + 5 类校验项 + 未通过项的文件:行号)。Agent 必须对改动文件调用 `ReadLints` 确认 0 新增报错。
|
||||
@@ -0,0 +1,124 @@
|
||||
---
|
||||
name: commit-convention
|
||||
description: 为本仓库生成符合团队规范的 Git 提交信息,并在用户要求提交代码时执行完整提交流程。用于 git commit、提交代码、写 commit message、创建提交、push 前整理提交等场景;须根据变更来源选用 [Ai] 或 [Human] 标记并写清业务变更。
|
||||
---
|
||||
|
||||
# Git 提交规范(Agent 协助提交)
|
||||
|
||||
## 触发条件
|
||||
|
||||
满足任一条件,**必须先加载本 skill**,再执行 `git add` / `git commit`:
|
||||
|
||||
- 用户明确要求:提交、commit、git commit、保存提交、push 前先 commit 等
|
||||
- 用户规则中的「committing-changes-with-git」流程已启动
|
||||
|
||||
**未获用户明确授权时,不得执行 commit。**
|
||||
|
||||
---
|
||||
|
||||
## 提交来源标记(强制)
|
||||
|
||||
所有由 Agent 代为执行的 `git commit`,subject **必须**以 `[Ai]` 或 `[Human]` 开头(二选一,不得省略)。
|
||||
|
||||
```text
|
||||
[Ai] <type>(<scope>): <subject>
|
||||
[Human] <type>(<scope>): <subject>
|
||||
|
||||
<body 可选:业务背景、影响范围、关联 Bug>
|
||||
```
|
||||
|
||||
- `type`:`feat` | `fix` | `refactor` | `style` | `perf` | `chore` | `docs` | `test` | `build` | `ci`
|
||||
- `scope`:模块/页面,如 `benefits`、`mine`、`community`、`player`
|
||||
- 仅当标记为 `[Ai]` 时,可在正文末尾追加 trailer(可选):
|
||||
|
||||
```text
|
||||
Co-Authored-By: Cursor <noreply@cursor.com>
|
||||
```
|
||||
|
||||
### 如何判定用 `[Ai]` 还是 `[Human]`
|
||||
|
||||
在撰写 message **之前**,结合 `git diff` 与**当前对话上下文**判断本次待提交变更的**主要作者**:
|
||||
|
||||
| 标记 | 适用场景 |
|
||||
|------|----------|
|
||||
| **`[Ai]`** | 本次待提交 diff 中的逻辑/样式/配置变更,**主要由当前或近期 Agent 会话编写或修改**;或用户未说明来源且 diff 与对话中 Agent 已完成的实现一致 |
|
||||
| **`[Human]`** | 变更**主要由用户本人编写**(用户仅让 Agent 代写 commit message、执行 add/commit);或用户明确说「人工提交」「我自己改的」「帮我提交一下(我改的)」等 |
|
||||
|
||||
**判定步骤(按序执行):**
|
||||
|
||||
1. 用户是否**明确**要求 `[Human]` / 人工提交?→ 是则用 `[Human]`(除非 diff 明显全是 Agent 刚写的,此时先向用户确认)
|
||||
2. 当前对话里,Agent 是否**为实现用户需求**而修改了待提交文件?→ 是则用 `[Ai]`
|
||||
3. 待提交文件是否**未出现在**本对话的 Agent 编辑记录中,且用户只是要求「提交一下」?→ 用 `[Human]`
|
||||
4. **同一批 staged 变更**中既有 Agent 编写又有用户手写:优先**询问是否拆分**为两次提交;若用户坚持一次提交,以**改动行数/核心逻辑**更多的一方为准,并在 body 中简要说明混合来源
|
||||
5. **无法判断**时:默认 `[Ai]`,并在执行 commit 前**用一句话向用户说明**所选标记及理由;若用户纠正,改用 `[Human]` 后重新 commit(hook 失败则新建 commit,勿 amend 除非符合 user rule)
|
||||
|
||||
**禁止:**
|
||||
|
||||
- 用户明确是人工改动时,仍标 `[Ai]`
|
||||
- 用户未授权时,将 Agent 刚写完的代码标 `[Human]`
|
||||
|
||||
---
|
||||
|
||||
## Subject 质量(强制)
|
||||
|
||||
提交说明必须让人一眼看懂**改了什么业务**或**修了什么问题**。
|
||||
|
||||
### 必须做到
|
||||
|
||||
1. 先并行执行:`git status`、`git diff`(含 staged)、`git log -5 --oneline` 了解风格与变更范围
|
||||
2. **完成上一节来源判定**,选定 `[Ai]` 或 `[Human]`
|
||||
3. subject 用**完整语义**描述,优先中文;可中英混用 scope
|
||||
4. 多文件、多模块时:一条 commit 只包同一业务目标;若混杂无关改动,先询问是否拆分
|
||||
5. body 写:原因、用户可见变化、风险点(如有);混合来源时在 body 注明
|
||||
|
||||
### 严禁(subject 不得仅为或等同于)
|
||||
|
||||
`test`、`修改`、`update`、`fix`、`xxx`、`111`、`wip`、`temp`、`提交`、`save`、纯标点、纯数字、单字
|
||||
|
||||
### 示例
|
||||
|
||||
```text
|
||||
# ✅ Agent 实现的功能
|
||||
[Ai] feat(benefits): 新增七日签到弹窗与连续签到奖励展示
|
||||
[Ai] fix(player): 修复横屏切换后 HLS 首帧黑屏
|
||||
|
||||
# ✅ 用户手写,Agent 仅代提交
|
||||
[Human] style(home): 调整首页 Header 搜索框间距与图标尺寸
|
||||
[Human] fix(lazyImg): 修复弱网下占位图闪烁
|
||||
|
||||
# ❌
|
||||
feat(benefits): 新增签到弹窗 # 缺少来源标记
|
||||
[Ai] fix: 修改
|
||||
修改播放器
|
||||
111
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 提交流程(与 user rule 对齐)
|
||||
|
||||
1. `git status` + `git diff` + `git log`(可并行)
|
||||
2. **判定** `[Ai]` / `[Human]`(见上表)
|
||||
3. 根据 diff **撰写**符合本规范的 message(HEREDOC 传 `-m`)
|
||||
4. 只 `git add` 与本次任务相关的文件
|
||||
5. **不得**提交 `.env`、密钥、凭据类文件;若用户在 staged 中含此类文件,警告并排除
|
||||
6. `git commit` 后 `git status` 确认成功
|
||||
7. hook 失败时:**不要** `commit --amend`,修 message 后**新建 commit**
|
||||
8. **除非用户明确要求,否则不 `git push`**
|
||||
|
||||
---
|
||||
|
||||
## 输出给用户
|
||||
|
||||
提交完成后简要说明:
|
||||
|
||||
- **来源标记**:`[Ai]` 或 `[Human]`,以及一行判定理由
|
||||
- commit hash(若有)
|
||||
- 本次纳入的文件范围
|
||||
- message 摘要(一行)
|
||||
|
||||
---
|
||||
|
||||
## 与本地 Hook / CI 的关系
|
||||
|
||||
本 skill 约束 **Agent 行为**。若仓库后续接入 `husky` + `commitlint` 或 CI,以仓库脚本校验为准;Agent 仍须预先满足 `[Ai]`/`[Human]` 与 subject 质量,避免 hook 拒绝。
|
||||
@@ -0,0 +1,258 @@
|
||||
---
|
||||
name: frontend-project-standards
|
||||
description: 为当前仓库输出可维护的 Vue3 + TypeScript 前端代码规范,覆盖组件分层、hooks 抽离、service 接口封装、错误处理与命名规范。用于新功能开发、页面重构、接口改造、复杂逻辑拆分与可维护性治理场景。
|
||||
---
|
||||
|
||||
# 前端项目规范
|
||||
|
||||
## 适用范围
|
||||
本规范适用于以下所有变更:
|
||||
- `src/views/**`:路由级页面容器及其私有 `components/`、`hooks/`。
|
||||
- `src/components/**`:跨模块复用组件,以及形如 `src/components/<module>/{components,hooks,types.ts,index.vue}` 的"组件即模块"容器(参考 `src/components/HomeHeader/`)。
|
||||
- `src/hooks/**`:全局/通用 composable。
|
||||
- `src/service/**`:接口封装层。
|
||||
- `src/stores/**`:Pinia store。
|
||||
- `src/utils/**`:纯工具函数(无状态、非 Vue 特定)。
|
||||
|
||||
需遵循的项目上下文:
|
||||
- 技术栈:Vue 3 + TypeScript + Vite + Pinia + Vant。
|
||||
- 请求链路:`src/service/*.ts` -> `src/utils/request.ts` -> axios。`request` 实例除标准 `get/post/put/delete` 外还提供 `deletes`(form 形式 DELETE),不要新增同义包装。
|
||||
- 路径别名:从 `src` 导入时统一使用 `@/`。
|
||||
|
||||
## 触发条件
|
||||
满足任一条件,必须先加载并按本规范输出:
|
||||
- 用户消息中出现:前端规范、规范、可维护性、重构、refactor、抽 hook、抽 composable、接口封装、service、错误处理、loading/error/empty、拆分大文件、整改、治理、frontend-project-standards、@fps、/fps。
|
||||
- 改动范围涉及 `*.vue`、`src/hooks/**`、`src/service/**`、`src/components/**`、`src/views/**`、`src/stores/**`,且包含结构、接口、状态、交互或业务逻辑调整。
|
||||
- 用户提供 PRD/Figma/截图要求"按本仓库结构落地"。
|
||||
- PR 自检、code review、规范审查类任务。
|
||||
|
||||
轻量豁免:仅改文案、样式数值、静态资源路径、纯 class 调整时,可只做最小变更并说明“不涉及分层/API/hook 调整”,无需强行套完整交付结构。
|
||||
|
||||
## 快捷指令
|
||||
团队可直接在对话中使用以下短指令触发对应工作流,每条都映射到 `prompt-templates.md` 的具体模板:
|
||||
|
||||
| 指令 | 含义 | 对应模板 |
|
||||
| --- | --- | --- |
|
||||
| `@fps:new <页面/模块>` | 新页面或新模块开发(container + hooks + service 全套分层) | 模板 1 |
|
||||
| `@fps:refactor <文件路径>` | 拆分大文件 / 抽 hook / 行为不变重构 | 模板 2 |
|
||||
| `@fps:api <接口描述> -> <页面>` | 新增接口并接入页面(service typed 方法 + hook + view 三步) | 模板 3 |
|
||||
| `@fps:fix <问题描述>` | 修 bug 同时做最小必要规范化 | 模板 4 |
|
||||
| `@fps:review <文件/diff>` | 仅做规范审查,不大改代码 | 模板 5 |
|
||||
| `@fps:hook <逻辑描述>` | 仅产出单一职责 hook(state/computed/actions) | 模板 1 子集 |
|
||||
|
||||
调用约定:
|
||||
- 任何指令默认带上"输出分层说明 + hooks 变更 + API 变更 + 错误覆盖 + 自检结果"五项交付。
|
||||
- 指令后可追加自由描述,越具体越好(目标文件、行为约束、是否允许重命名等)。
|
||||
- 不带任何指令时,按 `## 触发条件` 自动判定是否启用本规范。
|
||||
- 若某项交付不涉及,简短标注“不涉及”,不要为了满足格式新增无意义文件或抽象。
|
||||
|
||||
## 强制规则(必须遵守)
|
||||
|
||||
### 0) 通用工程准则(最高优先级)
|
||||
- 可维护性 > 短期省事;规则冲突时按 类型安全 > 分层正确性 > 局部简洁性 排序。
|
||||
- **不引入新依赖**:除非用户明确要求,否则不增加 npm/yarn 依赖、不替换现有库(axios/Pinia/Vant 不替换)。
|
||||
- **对齐项目结构**:所有新文件必须落入"适用范围"描述的目录形态,不另起新目录约定。
|
||||
- **优先复用既有逻辑**:动手前先在 `src/hooks`、`src/utils`、`src/service`、`src/stores` 检索可复用项;找到 ≥70% 匹配即扩展或参数化,不重复造轮。
|
||||
- **避免过度设计**:见 `### 0.1)`。
|
||||
- 历史代码受限暂时无法满足规则时,必须明确说明约束并给出分阶段改造计划。
|
||||
|
||||
### 0.1) 反过度设计(硬规则)
|
||||
**默认顺序:先写最小可行实现(MVP),出现下方"复用/复杂度信号"再抽象。**
|
||||
|
||||
判定信号(命中任一即"过度",必须回退到更简方案):
|
||||
- 仅以“未来可能复用”为理由,为只有 1 个调用方的逻辑创建 hook / 工具 / 组件;至少出现 2 处调用、明确跨页面复用价值,或命中本规范的复杂度/职责边界阈值时再抽。
|
||||
- 为只有一种实参的"泛型/策略/工厂"提前预留扩展点(如未被使用的泛型参数、单实现的 strategy map)。
|
||||
- 引入空壳 wrapper:组件 / 函数 / 类除转发外不做事(可直接使用被包装对象)。
|
||||
- 配置爆炸:用 5+ 个布尔/枚举 props 控制一个组件多种形态,应拆为多个组件。
|
||||
- 未使用的导出:新增 export 在本次改动范围内无人调用。
|
||||
- 为不存在的需求设计接口字段、状态分支、loading 子态。
|
||||
- 自造已被现有依赖覆盖的能力(已用 Vant/Pinia/axios 拦截器/`@/utils/request` 时不再造轮)。
|
||||
- 抽象层数 ≥ 3(view -> hook -> hook -> service)且中间层无独立职责。
|
||||
- 单文件代码量小于 80 行却被拆成 3 个文件(除非命名/职责必要)。
|
||||
- 单一页面被拆成大量细碎展示组件,组件之间只是传递原样 props/slot,无法形成清晰职责边界。
|
||||
|
||||
输出要求:
|
||||
- 涉及"是否抽象/拆分/泛化"的决策点,必须显式给一句话理由(命中哪条复用信号或复杂度阈值)。
|
||||
- 找不到理由时,默认走"内联实现 / 单文件 / 字面量参数"的最简路径。
|
||||
- 抽象阈值另见 `### 2) hooks 抽离` 中的硬性拆分触发条件,二者取严。
|
||||
- 页面私有 hook 因复杂副作用或业务域拆分而创建时,不要求跨页面复用;但必须具备独立职责,不能只是移动代码。
|
||||
|
||||
### 1) 组件分层
|
||||
- `src/views/**/index.vue` 作为页面容器,负责路由参数、hooks 组装、子组件编排。
|
||||
- 页面私有组件放在 `src/views/**/components/`。
|
||||
- 跨模块复用组件放在 `src/components/`。
|
||||
- 展示组件禁止直接调接口,避免承载重业务副作用。
|
||||
- 模板相关逻辑留在组件内,复杂业务分支和副作用迁移到 hooks。
|
||||
- 不为了“看起来分层”把一个页面拆成很多小组件。只有满足以下任一条件才拆组件:
|
||||
- 该 UI 区块会复用,或未来已有明确复用场景;
|
||||
- 区块模板/交互复杂,独立后能显著降低容器理解成本;
|
||||
- 区块拥有清晰业务语义边界(如用户面板、订单卡片、筛选栏),而不是纯布局切片。
|
||||
- 仅用于排版、单次使用且逻辑简单的片段,优先留在当前组件内。
|
||||
|
||||
### 2) hooks 抽离
|
||||
- 满足任一条件必须抽离 hook:
|
||||
- 同文件存在多个副作用块(`watch`、`watchEffect`、生命周期);
|
||||
- 一个大 `setup` 中混合了业务状态和 UI 状态;
|
||||
- 逻辑具备跨页面复用价值。
|
||||
- hook 命名统一为 `useXxx.ts`。
|
||||
- 放置规则:
|
||||
- 全局/通用逻辑 -> `src/hooks/`;
|
||||
- 模块专属逻辑 -> `src/views/<module>/hooks/`。
|
||||
- hook 输出保持最小且清晰:`state`、`computed`、`actions`。
|
||||
- 页面私有 hook 的价值来自“隔离副作用/业务域”,不来自文件数量;单纯把几行状态搬出去不算合格抽离。
|
||||
- hook 内必须清理定时器、监听器、订阅等资源。
|
||||
- 大文件硬性拆分触发条件(满足任一即拆):
|
||||
- 非样式代码超过 350 行;
|
||||
- 单文件含 4 个及以上 `watch/watchEffect/生命周期` 块;
|
||||
- 单文件混合 3 个及以上业务域(如分页 + 权限 + 埋点)。
|
||||
- `src/views/**/utils/` 下的重业务文件优先迁移到 `src/views/**/hooks/`,工具函数保持纯函数化。
|
||||
|
||||
### 3) 接口封装
|
||||
- 禁止在 `.vue` 或 hooks 中直接调用 `axios`/`fetch`。
|
||||
- 接口新增或调整统一在 `src/service/*.ts` 中用 class static 方法实现,并保持项目现有风格。
|
||||
- 统一复用 `src/utils/request.ts` 的 `request.get/post/put/delete`。
|
||||
- 新增/修改的接口方法必须有入参和返回值类型(避免新增 `any`)。
|
||||
- URL 路径和参数组装留在 service 层,不放到视图/组件层。
|
||||
- 历史代码若仍有 `any`,本次改动不得继续扩散;应在改动范围内增量替换为明确类型。
|
||||
|
||||
### 4) 错误处理
|
||||
- 网络层与 HTTP 状态码处理继续由 `src/utils/request.ts` 统一兜底。
|
||||
- 业务异步动作仍需本地容错:
|
||||
- `loading` 开关必须成对出现(`finally` 或等价方案);
|
||||
- 失败时必须设置可预期兜底状态(`error`、空态、安全默认值);
|
||||
- 仅在需要用户动作引导时显示用户提示。
|
||||
- 禁止吞错(`catch {}`)以及仅 `console` 不落状态。
|
||||
- 需要继续抛错时,必须保留明确原因与必要上下文。
|
||||
- 异步后会变更 UI 状态的动作,必须覆盖失败分支并防止状态不一致。
|
||||
|
||||
### 5) 类型纪律
|
||||
- view/hook/service 中禁止新增宽泛 `any`。
|
||||
- service 边界优先使用显式 `interface/type`。
|
||||
- 无法确认类型时优先 `unknown`,使用前做类型收窄。
|
||||
- 路由参数标准化要显式处理(例如 `String(route.query.id || '')`)。
|
||||
|
||||
### 6) 命名规范(对齐主流最佳实践)
|
||||
- 目录名统一 `kebab-case`(如 `user-profile`)。
|
||||
- 非组件文件统一 `kebab-case`(如 `media-content.ts`、`use-xxx` 不使用,hook 文件仍保持 `useXxx.ts`)。
|
||||
- Vue 组件文件名使用 `PascalCase.vue`(如 `UserProfileCard.vue`);页面入口保持 `index.vue`。
|
||||
- class、type、interface、enum 名称使用 `PascalCase`。
|
||||
- 变量、函数、方法使用 `camelCase`;常量使用 `UPPER_SNAKE_CASE`。
|
||||
- 布尔变量必须带语义前缀:`is/has/can/should`(如 `isLoading`、`hasPaid`)。
|
||||
- 事件处理函数统一 `handleXxx`;计算属性使用业务语义命名,不使用无意义缩写。
|
||||
- 禁止拼音、无语义缩写、单字符命名(循环计数器 `i/j` 除外)。
|
||||
|
||||
### 7) 历史命名兼容策略(增量治理)
|
||||
- 历史文件允许保留旧命名,不强制一次性全量重命名。
|
||||
- 任何新增文件、新增目录、以及被修改代码中的新增符号,必须遵循最新命名规范。
|
||||
- 若本次改动涉及重命名风险较高区域,可采用“行为不变优先”的分阶段治理:本次先保证增量合规,后续单独提交命名清理任务。
|
||||
- 禁止在新代码中复制旧命名反模式(即使同文件已有旧风格)。
|
||||
|
||||
## 交付输出要求
|
||||
完成编码任务时,输出中必须包含:
|
||||
1. 分层说明:哪些留在 view/container,哪些在 component/hook/service。
|
||||
2. hooks 变更:新增或调整了哪些 hook、各自单一职责是什么。
|
||||
3. 接口变更:新增/修改的 service 方法及其类型定义。
|
||||
4. 错误覆盖:哪些异步路径已补齐失败兜底与状态恢复。
|
||||
5. 维护性收益:如何降低耦合,便于后续功能扩展。
|
||||
6. 自检结果:`reference.md` 中检查项的通过情况。
|
||||
7. **闭环校验结果**:按 `## 完工闭环校验` 给出逐项通过/未通过,未通过需附文件/行号。
|
||||
|
||||
若某项未发生变更,写“不涉及”即可;不要为了输出完整而新增 wrapper、空组件、空 hook 或空 service。
|
||||
|
||||
## 改造工作流
|
||||
按以下顺序执行:
|
||||
1. 识别目标文件中的职责混杂点。
|
||||
2. 必要时拆分为 container + hooks + 展示组件;组件拆分以清晰职责边界为准,不以数量为目标。
|
||||
3. 将直接请求逻辑迁移到 service 层。
|
||||
4. 在 service 边界与 hook 状态处补强类型。
|
||||
5. 补齐 loading/error/empty 等状态保护。
|
||||
6. 执行自检清单并先修复不通过项。
|
||||
7. **执行 `## 完工闭环校验`**,仅针对本次改动文件。
|
||||
8. 最终确认无本规范违规项。
|
||||
|
||||
## 完工闭环校验(仅检查本次改动)
|
||||
**强制收尾步骤**。范围严格限定在"本次新增/修改/重命名"的文件,**不扩到全仓**,不修复历史问题(除非用户明确要求)。
|
||||
|
||||
### 必执行动作(Agent)
|
||||
- 对所有改动文件调用 `ReadLints`(一次性传入改动文件路径数组),确认无新增报错。
|
||||
- 若改动了 `*.vue` 内的 `<script setup lang="ts">` 或新增 `.ts`,须在心中跑一遍 IDE 类型解析:所有 import 路径可达、命名/默认导出对齐、`@/` 别名能正确解析。
|
||||
- 若仓库已配置 `tsc --noEmit` / `vue-tsc`,仅在用户要求时执行;默认依赖 `ReadLints` 增量结果。
|
||||
|
||||
### 校验清单(逐项过)
|
||||
1. **类型与 lint 闭环**
|
||||
- [ ] `ReadLints` 对改动文件返回 0 新增报错;历史已有报错可保留并显式列出。
|
||||
2. **引入与路径闭环**
|
||||
- [ ] 新增/修改的 `import` 路径存在且大小写正确。
|
||||
- [ ] 命名导出 / 默认导出与源文件实际声明一致。
|
||||
- [ ] `@/` 别名指向正确的真实路径。
|
||||
- [ ] 仅类型用途的导入使用 `import type { ... }`。
|
||||
- [ ] 不留未使用的 `import`、ref、computed、props、emits。
|
||||
3. **类型边界闭环**
|
||||
- [ ] service 方法 params/response 类型已声明并被 hook/view 正确消费。
|
||||
- [ ] 无新增宽泛 `any`;`unknown` 已做类型收窄。
|
||||
- [ ] props / emits / defineExpose 类型完整,无隐式 any。
|
||||
- [ ] 全局类型(如 `Types.*`)引用路径与 `src/typings` 实际声明一致。
|
||||
4. **行为闭环**
|
||||
- [ ] 异步动作 loading 开关成对,error/empty 兜底到位。
|
||||
- [ ] hook 内定时器、`watch` 句柄、事件监听、订阅在 `onUnmounted` 释放。
|
||||
- [ ] 模板引用的 ref/computed 都有定义且被使用,无孤儿。
|
||||
5. **范围纪律**
|
||||
- [ ] 改动未扩散到无关文件。
|
||||
- [ ] 历史已有问题未顺手"乱改";如确需顺带修复,单独列在"附带修复"区块。
|
||||
- [ ] 输出区块内显式列出"已校验文件清单"和"未校验/不在范围"的文件。
|
||||
|
||||
### 输出格式(强制)
|
||||
完工时必须附以下区块:
|
||||
|
||||
```markdown
|
||||
### 闭环校验结果
|
||||
**已校验文件**:
|
||||
- src/xxx/yyy.vue
|
||||
- src/xxx/hooks/useZzz.ts
|
||||
- src/service/xxx.ts
|
||||
|
||||
**校验项**
|
||||
- [x] 类型与 lint 闭环(ReadLints 0 新增报错)
|
||||
- [x] 引入与路径闭环
|
||||
- [x] 类型边界闭环
|
||||
- [x] 行为闭环
|
||||
- [x] 范围纪律
|
||||
|
||||
**未通过项**(如有):
|
||||
- <文件:行号> <问题描述> <建议>
|
||||
```
|
||||
|
||||
## 反模式(禁止)
|
||||
- 超大 `setup` 同时处理路由、接口、业务规则、DOM 行为。
|
||||
- 在模板、UI 组件或临时 util 中直接发请求,绕过 service。
|
||||
- 一个 hook 混合多个无关业务域。
|
||||
- 已知结构场景下继续使用宽泛 `any`。
|
||||
- 异步失败分支未做状态回滚或兜底。
|
||||
- 对已超大文件(如 500+ 行)继续堆逻辑而不拆分。
|
||||
- 把埋点逻辑混入通用分页/权限 hook。
|
||||
- **过度设计**:单调用方就抽 hook/util/组件、未被使用的泛型与策略点、空壳 wrapper、5+ 布尔 props 的"全能组件"、未使用的 export、为不存在的需求设计字段或子态、自造已被现有依赖覆盖的能力(违反 `### 0.1)`)。
|
||||
|
||||
## PR 自检清单(必须通过)
|
||||
- [ ] `.vue` 或 hook 文件中无新增直接请求调用。
|
||||
- [ ] 新增/修改 service 方法均具备入参和返回类型。
|
||||
- [ ] 无新增宽泛 `any`。
|
||||
- [ ] 异步动作具备完整 loading/error/fallback 处理。
|
||||
- [ ] 长逻辑已按业务域拆入聚焦 hooks。
|
||||
- [ ] 新增目录/文件/符号命名符合命名规范。
|
||||
- [ ] 历史命名仅保留存量,新增/改动部分全部符合新规范。
|
||||
- [ ] **未触发 `### 0.1)` 任一过度设计信号**;如有抽象/拆分动作,已说明触发的复用或复杂度信号。
|
||||
- [ ] **完工闭环校验已执行且通过**(仅对本次改动文件,`ReadLints` 0 新增报错,import/类型/行为四类闭环全过)。
|
||||
- [ ] 输出内容包含“交付输出要求”中的全部项目。
|
||||
|
||||
## 术语对照(统一用词)
|
||||
- container:页面容器(`src/views/**/index.vue`)。
|
||||
- presentational component:展示组件(偏 UI,无接口副作用)。
|
||||
- hook/composable:可复用业务逻辑单元(`useXxx.ts`)。
|
||||
- service:接口封装层(`src/service/*.ts`)。
|
||||
- request layer:统一请求层(`src/utils/request.ts`)。
|
||||
|
||||
## 参考资料
|
||||
- 代码模板见 [reference.md](reference.md)。
|
||||
- 仓库场景示例见 [examples.md](examples.md)。
|
||||
- 团队提问模板见 [prompt-templates.md](prompt-templates.md)。
|
||||
- 命名规范详表见 [naming-conventions.md](naming-conventions.md)。
|
||||
@@ -0,0 +1,87 @@
|
||||
# 仓库场景示例
|
||||
|
||||
## 示例 A:重构大型视图工具文件
|
||||
|
||||
### 场景
|
||||
`src/views/<module>/utils/` 下某文件同时包含:
|
||||
- 路由参数解析,
|
||||
- 分页加载,
|
||||
- 权限判断,
|
||||
- 事件埋点,
|
||||
- 章节切换。
|
||||
|
||||
### 目标拆分
|
||||
- `index.vue`(容器页):路由绑定 + hooks 组装。
|
||||
- `hooks/useEpisodeList.ts`:列表分页/刷新逻辑。
|
||||
- `hooks/useEpisodeAccess.ts`:权限校验与付费弹窗逻辑。
|
||||
- `hooks/useReadEvents.ts`:阅读进度与埋点上报逻辑。
|
||||
- `service/<module>.ts`:集中承载接口定义与类型边界。
|
||||
|
||||
### 期望结果
|
||||
- 每个 hook 只负责一个业务域。
|
||||
- 容器页仅做编排与组件通信。
|
||||
- 接口调用统一收敛到 service class 方法。
|
||||
- 所有异步动作具备失败兜底状态。
|
||||
|
||||
## 示例 B:新增接口的正确姿势
|
||||
|
||||
### 错误示例
|
||||
- 在 `.vue` 中直接调用 `request.get()`。
|
||||
- 返回值不定义类型,使用点到处强转。
|
||||
|
||||
### 正确示例
|
||||
1. 在 `src/service/<domain>.ts` 中新增方法:
|
||||
- 入参类型明确,
|
||||
- 返回值类型明确,
|
||||
- 不混入视图逻辑。
|
||||
2. hook 调用 service,并映射到本地状态。
|
||||
3. view 仅消费 hook 对外暴露的数据和动作。
|
||||
|
||||
## 示例 C:页面动作的错误处理
|
||||
|
||||
### 必备模式
|
||||
- 异步前先 `loading = true`。
|
||||
- 使用 `try/catch/finally` 包裹异步调用。
|
||||
- `catch` 中设置 `error = true`,并将关键数据恢复到安全默认值。
|
||||
- `finally` 中关闭 loading,避免状态泄漏。
|
||||
|
||||
### 需要避免
|
||||
- `catch (e) { console.log(e) }`,但不修改任何状态。
|
||||
- 仅在成功分支关闭 loading。
|
||||
|
||||
## 示例 D:页面组件拆分克制
|
||||
|
||||
### 应该拆
|
||||
- 用户信息面板、会员卡片、菜单宫格这类具备清晰业务语义的区块。
|
||||
- 交互复杂、模板较长,独立后能明显降低 `index.vue` 理解成本的区块。
|
||||
- 已有复用或确定会复用的 UI/业务组件。
|
||||
|
||||
### 不应该拆
|
||||
- 只有几行 HTML/CSS 的布局容器。
|
||||
- 只接收原样 props 再原样渲染,没有独立语义或交互的小片段。
|
||||
- 为了凑 `components/` 目录,把一个页面按视觉切片拆成大量一次性组件。
|
||||
|
||||
### 期望结果
|
||||
- `index.vue` 负责页面编排,不变成所有状态和副作用的大杂烩。
|
||||
- `components/` 数量服务于职责边界,不以“越多越规范”为目标。
|
||||
- 简单静态片段可以留在页面或父组件内。
|
||||
|
||||
## 示例 E:大文件拆分触发(mediaContentInfo 类场景)
|
||||
|
||||
### 触发条件
|
||||
当类似 `src/views/acgModule/utils/mediaContentInfo.ts` 的文件持续叠加以下逻辑时:
|
||||
- 列表分页逻辑,
|
||||
- 权限与付费闸门逻辑,
|
||||
- 阅读进度与埋点逻辑,
|
||||
- 路由同步逻辑。
|
||||
|
||||
### 推荐拆分方案
|
||||
1. `useMediaEpisodePaging.ts`:分页、刷新、列表合并规则。
|
||||
2. `useMediaEpisodeAccess.ts`:权限校验、付费弹窗状态、购买成功处理。
|
||||
3. `useMediaReadReport.ts`:进度计算与埋点派发。
|
||||
4. 协调文件保持轻量:仅组装 hooks 并对 view 暴露统一 API。
|
||||
|
||||
### 完成标准
|
||||
- 不存在跨多个业务域的“大而全 hook”。
|
||||
- 埋点逻辑不直接修改分页状态。
|
||||
- 权限逻辑不直接承担列表拉取职责。
|
||||
@@ -0,0 +1,87 @@
|
||||
# 命名规范(Vue3 + TypeScript)
|
||||
|
||||
本规范参考 Vue 官方风格与 TypeScript 主流实践,目标是统一可读性、可检索性、可维护性。
|
||||
|
||||
## 0) 历史代码兼容原则
|
||||
|
||||
- 存量代码可暂时保留历史命名,不做一次性全量改名。
|
||||
- 增量从严:新增文件、目录、类型、变量、函数、组件命名必须符合本规范。
|
||||
- 改动旧文件时,至少保证“新增/修改行”不引入旧命名反模式。
|
||||
- 大范围改名需单独评估风险(路由、动态导入、缓存键、埋点字段),建议独立 PR 分批执行。
|
||||
|
||||
## 1) 目录与文件命名
|
||||
|
||||
- 目录名:`kebab-case`
|
||||
- 示例:`src/views/user-center/`
|
||||
- 页面入口文件:`index.vue`
|
||||
- 组件文件:`PascalCase.vue`
|
||||
- 示例:`UserProfileCard.vue`
|
||||
- hooks/composable 文件:`useXxx.ts`
|
||||
- 示例:`useMediaEpisodePaging.ts`
|
||||
- 其他 TS 文件:`kebab-case.ts`
|
||||
- 示例:`media-content-parser.ts`
|
||||
- 样式文件:`kebab-case.scss`
|
||||
|
||||
## 2) 代码符号命名
|
||||
|
||||
- class/type/interface/enum:`PascalCase`
|
||||
- 示例:`UserProfileService`、`MediaListItem`、`ApiError`
|
||||
- 变量/函数/方法:`camelCase`
|
||||
- 示例:`fetchMediaList`、`buildRequestParams`
|
||||
- 常量:`UPPER_SNAKE_CASE`
|
||||
- 示例:`DEFAULT_PAGE_SIZE`
|
||||
- 布尔变量:`is/has/can/should + PascalCase`
|
||||
- 示例:`isLoading`、`hasPermission`
|
||||
- Promise 异步动作:动词开头
|
||||
- 示例:`fetchUserInfo`、`loadEpisodeList`
|
||||
|
||||
## 3) Vue 约定命名
|
||||
|
||||
- 事件处理函数统一 `handleXxx`
|
||||
- 示例:`handleSubmit`、`handleEpisodeChange`
|
||||
- 事件命名(emit)使用 `kebab-case`
|
||||
- 示例:`episode-change`、`submit-success`
|
||||
- props 命名在代码中使用 `camelCase`,模板中可使用 `kebab-case`。
|
||||
- 计算属性命名以业务语义为主,避免 `data1`、`tempVal` 这类占位名。
|
||||
|
||||
## 4) 类型命名细则
|
||||
|
||||
- DTO/接口模型建议加语义后缀:
|
||||
- 入参:`XxxParams`
|
||||
- 返回:`XxxResp` 或 `XxxResponse`
|
||||
- 列表项:`XxxItem`
|
||||
- 错误类型建议统一:`XxxError`
|
||||
- 避免使用 `IUser` 这类 `I` 前缀接口命名。
|
||||
|
||||
## 5) 禁止项
|
||||
|
||||
- 禁止拼音命名(业务专有词且已有共识除外)。
|
||||
- 禁止无语义缩写(如 `tmp`, `obj2`, `aaa`)。
|
||||
- 禁止单字符业务变量命名(循环计数器 `i/j/k` 除外)。
|
||||
- 禁止同一模块混用多种命名风格。
|
||||
|
||||
## 6) 快速示例
|
||||
|
||||
```ts
|
||||
// good
|
||||
const DEFAULT_RETRY_COUNT = 2;
|
||||
|
||||
interface QueryMediaListParams {
|
||||
pageNumber: number;
|
||||
pageSize: number;
|
||||
}
|
||||
|
||||
async function fetchMediaList(params: QueryMediaListParams) {
|
||||
// ...
|
||||
}
|
||||
|
||||
const isListEmpty = computed(() => state.list.length === 0);
|
||||
```
|
||||
|
||||
```ts
|
||||
// bad
|
||||
const retryCountDefault = 2; // 常量未使用 UPPER_SNAKE_CASE
|
||||
interface IQuery {} // 不建议 I 前缀
|
||||
async function getdata(d: any) {} // 命名与类型均不规范
|
||||
const temp = computed(() => state.list.length === 0); // 语义弱
|
||||
```
|
||||
@@ -0,0 +1,83 @@
|
||||
# 提问模板(团队可直接复制)
|
||||
|
||||
以下模板用于稳定触发 `frontend-project-standards`,并确保输出符合本规范的交付结构。
|
||||
|
||||
## 模板 1:新页面开发(标准版)
|
||||
|
||||
```text
|
||||
请按 frontend-project-standards 开发新页面:<页面路径或模块名>。
|
||||
要求:
|
||||
1) 页面按 container + components + hooks + service 分层;
|
||||
2) 接口统一走 src/service/*.ts,禁止在 .vue/hook 里直接 request;
|
||||
3) 补齐 loading/error/empty 状态与错误处理;
|
||||
4) 不新增宽泛 any;
|
||||
5) 命名遵循 naming-conventions.md(历史可保留,新增/改动必须新规范);
|
||||
6) 不要把单一页面过度拆成很多 component,只有复用、复杂交互或清晰业务边界时才拆。
|
||||
|
||||
交付时请输出:
|
||||
- 分层说明
|
||||
- hooks 变更
|
||||
- API 变更与类型
|
||||
- 错误处理覆盖
|
||||
- 维护性收益
|
||||
- 自检结果
|
||||
```
|
||||
|
||||
## 模板 2:重构大文件(如 mediaContentInfo)
|
||||
|
||||
```text
|
||||
请按 frontend-project-standards 重构:<目标文件路径>。
|
||||
当前文件职责混杂,请拆分为多个单一职责 hook,并保持原有行为不回退。
|
||||
要求重点:
|
||||
1) 分离分页、权限/付费、埋点上报、路由同步等业务域;
|
||||
2) 保持 service 层接口边界清晰并补齐类型;
|
||||
3) 异步流程加上失败兜底与状态恢复;
|
||||
4) 组件拆分保持克制,避免把页面按视觉小块切成大量一次性 component;
|
||||
5) 完成后给出迁移说明(旧逻辑 -> 新结构映射)。
|
||||
```
|
||||
|
||||
## 模板 3:新增接口并接入页面
|
||||
|
||||
```text
|
||||
请按 frontend-project-standards 完成接口接入:
|
||||
- 新增接口:<接口描述>
|
||||
- 接入页面:<页面路径>
|
||||
|
||||
要求:
|
||||
1) 在 src/service/<domain>.ts 新增 typed 方法(params/response);
|
||||
2) 页面只通过 hook 使用 service;
|
||||
3) 禁止组件层直接请求;
|
||||
4) 输出本次 API contract(字段说明 + 类型)。
|
||||
```
|
||||
|
||||
## 模板 4:问题修复(带规范化)
|
||||
|
||||
```text
|
||||
请按 frontend-project-standards 修复问题:<问题描述>。
|
||||
除修复 bug 外,还要完成最小必要规范化:
|
||||
1) 抽离与 bug 相关的混杂逻辑到 hook;
|
||||
2) 补齐错误处理分支,避免静默失败;
|
||||
3) 确保不新增 any,不绕过 service;
|
||||
4) 给出回归风险点和验证步骤。
|
||||
```
|
||||
|
||||
## 模板 5:仅做规范审查(不大改代码)
|
||||
|
||||
```text
|
||||
请按 frontend-project-standards 对以下改动做规范审查并给出修正建议:
|
||||
<文件路径或 diff 范围>
|
||||
|
||||
请按严重程度输出:
|
||||
1) 违反分层/hook/API/错误处理规范的问题;
|
||||
2) 每个问题的最小修复方案;
|
||||
3) 可选优化项;
|
||||
4) 最后给出 PR 自检清单通过情况。
|
||||
```
|
||||
|
||||
## 建议补充信息(提高一次成功率)
|
||||
|
||||
- 目标文件路径
|
||||
- 是否允许拆文件/重命名
|
||||
- 行为兼容要求(必须保持 / 可调整)
|
||||
- 优先级(性能、可维护性、上线速度)
|
||||
- 是否需要同时补测试
|
||||
@@ -0,0 +1,148 @@
|
||||
# 参考模板
|
||||
|
||||
## 1) Service 方法模板
|
||||
|
||||
```ts
|
||||
import request from '@/utils/request';
|
||||
|
||||
export interface QueryListParams {
|
||||
pageNumber: number;
|
||||
pageSize: number;
|
||||
mediaId?: string;
|
||||
}
|
||||
|
||||
export interface QueryListResp {
|
||||
list: Array<{
|
||||
id: string;
|
||||
title: string;
|
||||
}>;
|
||||
total: number;
|
||||
}
|
||||
|
||||
export default class ExampleApi {
|
||||
static queryList(params: QueryListParams): Promise<QueryListResp> {
|
||||
return request.get('/example/list', params);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 2) Hook 模板(单一职责)
|
||||
|
||||
```ts
|
||||
import { reactive } from 'vue';
|
||||
import ExampleApi, { QueryListParams } from '@/service/example';
|
||||
|
||||
export function useExampleList(initialParams: QueryListParams) {
|
||||
const state = reactive({
|
||||
loading: false,
|
||||
error: false,
|
||||
list: [] as Array<{ id: string; title: string }>,
|
||||
total: 0,
|
||||
});
|
||||
|
||||
const fetchList = async (params = initialParams) => {
|
||||
state.loading = true;
|
||||
state.error = false;
|
||||
|
||||
try {
|
||||
const res = await ExampleApi.queryList(params);
|
||||
state.list = res.list || [];
|
||||
state.total = Number(res.total || 0);
|
||||
} catch (err) {
|
||||
state.error = true;
|
||||
state.list = [];
|
||||
state.total = 0;
|
||||
} finally {
|
||||
state.loading = false;
|
||||
}
|
||||
};
|
||||
|
||||
return {
|
||||
state,
|
||||
fetchList,
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
## 3) 容器页模板(Container View)
|
||||
|
||||
```vue
|
||||
<script setup lang="ts">
|
||||
import { computed } from 'vue';
|
||||
import { useRoute } from 'vue-router';
|
||||
import { useExampleList } from './hooks/useExampleList';
|
||||
|
||||
const route = useRoute();
|
||||
const mediaId = computed(() => String(route.query.id || ''));
|
||||
|
||||
const { state, fetchList } = useExampleList({
|
||||
pageNumber: 1,
|
||||
pageSize: 30,
|
||||
mediaId: mediaId.value,
|
||||
});
|
||||
|
||||
fetchList();
|
||||
</script>
|
||||
```
|
||||
|
||||
## 4) 错误处理最低检查项
|
||||
|
||||
- 每个异步动作都具备成对的 loading 开关。
|
||||
- 请求失败时会落到确定性兜底状态。
|
||||
- 接口细节与类型由 service 层承载。
|
||||
- UI 层能展示空态/错误态,不允许静默失败。
|
||||
|
||||
## 5) 旧代码 any 的渐进迁移模式
|
||||
|
||||
```ts
|
||||
// 改造前
|
||||
// static getMediaHot(data: any) {
|
||||
// return request.get('/media/hot', data);
|
||||
// }
|
||||
|
||||
// 改造后(增量迁移)
|
||||
export interface GetMediaHotParams {
|
||||
pageNumber: number;
|
||||
pageSize: number;
|
||||
moduleId?: string;
|
||||
}
|
||||
|
||||
export interface GetMediaHotResp {
|
||||
list: Types.Acg.MediaContentListItem[];
|
||||
total: number;
|
||||
}
|
||||
|
||||
static getMediaHot(data: GetMediaHotParams): Promise<GetMediaHotResp> {
|
||||
return request.get('/media/hot', data);
|
||||
}
|
||||
```
|
||||
|
||||
## 6) PR 自检输出模板
|
||||
|
||||
在实现说明中必须附上以下区块(与 `SKILL.md` 保持一致):
|
||||
|
||||
```markdown
|
||||
### 自检结果
|
||||
- [x] view/hook 层没有直接请求调用
|
||||
- [x] service 边界方法具备明确类型
|
||||
- [x] 未新增宽泛 any
|
||||
- [x] 异步失败分支具备兜底状态
|
||||
- [x] 混杂职责已拆分为聚焦 hooks/components
|
||||
```
|
||||
|
||||
## 7) 轻量自动校验命令(可执行)
|
||||
|
||||
在仓库根目录执行以下命令进行快速自检:
|
||||
|
||||
```bash
|
||||
# 1) 优先检查本次改动的 view/hook 文件是否直接调用 request
|
||||
rg "request\\.(get|post|put|delete|deletes)\\(" <changed-view-or-hook-files>
|
||||
|
||||
# 2) 检查本次改动文件是否引入 any(人工结合 diff 判断)
|
||||
rg "\\bany\\b" <changed-files>
|
||||
```
|
||||
|
||||
判定规则:
|
||||
- 命令 1 预期为“无结果”;有结果则说明可能绕过 service。
|
||||
- 命令 2 不要求仓库清零,但本次改动不应新增宽泛 `any`。
|
||||
- 只有在做全仓治理或用户明确要求时,才扩展到 `src/views src/hooks src/service` 全量扫描。
|
||||
@@ -0,0 +1,239 @@
|
||||
---
|
||||
name: ui-requirement-planner
|
||||
description: 将 UI 需求转化为可维护且可落地的 Vue 3 + Vite + TypeScript 实施方案。适用于用户提供产品需求、Figma 链接/节点、截图、现有页面代码或自然语言想法,并希望输出组件分层、页面结构、composable 抽离、Pinia 使用决策、API 合约规划、交互流程、样式建议、边界状态、素材落地(图标/背景识别、下载、目录归档、页面引用)与验收标准。优先给出可执行方案,再生成代码。
|
||||
---
|
||||
|
||||
# UI 需求规划器
|
||||
|
||||
## 概述
|
||||
|
||||
将模糊或分散的 UI 需求整理为可落地的前端实施方案(Vue 3 + Vite + TypeScript)。默认采用“方案优先”输出:先明确页面结构、组件边界、composable、数据流和 API 职责,再给出 Vue 骨架代码。
|
||||
|
||||
默认技术栈与约定:
|
||||
- Vue 3 + Composition API + `<script setup lang="ts">`
|
||||
- Vite
|
||||
- TypeScript(props、emits、API 数据、view model 均需显式类型)
|
||||
- `scoped scss`
|
||||
- `Pinia` 仅在跨路由或远距离组件共享状态时引入
|
||||
- `axios` + 统一请求层 + 统一错误处理
|
||||
|
||||
术语统一:
|
||||
- “素材”默认指 UI 里的图标、背景图、插图、装饰图等静态资源。
|
||||
- “模块目录”默认指 `src/assets/images/png/<module>/`(例如 `mine/newHome`)。
|
||||
|
||||
## 工作流程
|
||||
|
||||
除非用户明确要求更小范围交付,否则按以下顺序执行:
|
||||
|
||||
1. 读取输入并识别来源:
|
||||
- 自然语言需求
|
||||
- PRD / 需求单
|
||||
- 截图 / 线框描述
|
||||
- 现有页面或组件代码
|
||||
- 混合输入
|
||||
2. 将需求归一为简洁的页面目标与主用户路径。
|
||||
3. 按层拆分 UI:
|
||||
- 页面/容器职责
|
||||
- 可复用展示组件
|
||||
- 业务组件
|
||||
- composables
|
||||
- store 使用边界
|
||||
- API / services 分层
|
||||
4. 确定状态模型:
|
||||
- 页面内状态优先使用 `ref` / `reactive`
|
||||
- 展示派生状态使用 `computed`
|
||||
- 仅在共享或跨路由场景引入 `Pinia`
|
||||
5. 定义 API 边界:
|
||||
- service 方法
|
||||
- 请求/响应类型
|
||||
- loading、empty、error、retry、permission 状态
|
||||
6. 若输入包含 Figma/原型:执行素材规划与落地策略。
|
||||
- 识别图标、背景图、插图等素材位
|
||||
- 标记可复用素材与仅页面内使用素材
|
||||
- 生成目录归档与命名方案
|
||||
- 规划页面中的资源引用方式
|
||||
7. 产出结构化实施方案。
|
||||
8. 需要时再补充 Vue 骨架代码或示例文件。
|
||||
|
||||
## Figma 素材处理规则(新增)
|
||||
|
||||
当用户要求“识别 Figma 图标/背景并落地资源”时,必须按以下规则执行:
|
||||
|
||||
1. 识别范围
|
||||
- 至少区分:功能图标、背景图(整页/卡片)、装饰图、头像占位图。
|
||||
- 对同一视觉资源的多处复用,优先抽为同一文件,避免重复导出。
|
||||
|
||||
2. 下载与保存路径
|
||||
- 统一保存到:`src/assets/images/png/<module>/`
|
||||
- `<module>` 与业务页面一致,例如:`mine/newHome`、`home/recommend`
|
||||
- 若资源存在主题态(light/dark)或状态态(default/active/disabled),在文件名中体现。
|
||||
|
||||
3. 命名规范
|
||||
- 文件名使用小写英文 + 连字符,禁止空格与中文文件名。
|
||||
- 推荐模式:`<module>-<semantic>-<state?>.png`
|
||||
- 示例:`mine-home-bg.png`、`mine-home-setting-default.png`、`mine-home-setting-active.png`
|
||||
|
||||
4. 页面引用规范
|
||||
- Vue SFC 模板内静态引用优先使用别名:`@/assets/images/png/...`
|
||||
- TS 里拼装或计算型资源地址使用:`new URL('@/assets/images/png/...', import.meta.url).href`
|
||||
- 必须确保引用与目录结构一致,避免“移动文件后路径失效”。
|
||||
|
||||
5. 无图场景兜底(强制)
|
||||
- 缺少真实素材时必须提供占位图,不可空白。
|
||||
- 占位图尺寸按 UI 设计尺寸;无标注时按容器尺寸。
|
||||
- 方案中需注明占位图来源、尺寸与替换策略(后续替换真实图不改布局)。
|
||||
|
||||
## 输出格式
|
||||
|
||||
除非用户要求更短答复,默认按以下结构输出:
|
||||
|
||||
### 1) 需求摘要
|
||||
- 用 2-4 条概括目标页面/功能
|
||||
- 说明核心用户目标
|
||||
- 说明关键业务约束与待确认项
|
||||
|
||||
### 2) 页面与组件架构
|
||||
- 页面职责
|
||||
- 组件树
|
||||
- 哪些组件保持展示型(dumb/presentational)
|
||||
- 哪些组件承载业务逻辑
|
||||
|
||||
### 3) 状态与数据流
|
||||
- 本地状态
|
||||
- 派生状态
|
||||
- 事件与交互流
|
||||
- 是否需要 `Pinia` 及理由
|
||||
|
||||
### 4) API 与类型规划
|
||||
- 推荐的 `services/api` 拆分方式
|
||||
- 请求方法与用途
|
||||
- 核心类型定义
|
||||
- 是否需要从原始 API 数据映射到 UI 模型
|
||||
|
||||
### 5) 边界与失败状态
|
||||
相关场景下必须覆盖:
|
||||
- loading
|
||||
- empty
|
||||
- error
|
||||
- validation
|
||||
- permission
|
||||
- retry / fallback
|
||||
|
||||
### 6) 实施步骤
|
||||
给出从基础搭建到联调集成的可执行顺序。
|
||||
|
||||
### 7) 验收清单
|
||||
列出开发者/评审可直接核对的验收点。
|
||||
|
||||
### 8) Vue 骨架代码(按需)
|
||||
需要时提供精简骨架:
|
||||
- 页面容器
|
||||
- 子组件 props / emits
|
||||
- composable
|
||||
- store(仅在有充分理由时)
|
||||
- API service
|
||||
- 类型定义
|
||||
|
||||
### 9) 图片与占位图规范(强制)
|
||||
- 若需求未提供真实图片资源(如 banner、封面、头像、商品图等),必须给出占位图方案,禁止留空或“后续补图”而无实现。
|
||||
- 占位图尺寸必须与 UI 设计尺寸一致:优先使用设计稿标注的宽高;若无明确标注,则以对应容器的宽高作为占位尺寸。
|
||||
- 在方案与代码中都要明确占位规则(例如:`<img>` 的 `width/height`、容器比例、`object-fit` 策略)。
|
||||
- 若同一页面包含多种图片位,需分别定义占位图尺寸与样式,不可用一个尺寸通配全部场景。
|
||||
|
||||
### 10) 素材落地清单(Figma/原型场景必填)
|
||||
- 素材识别结果(图标、背景、装饰图分类)
|
||||
- 目标目录:`src/assets/images/png/<module>/`
|
||||
- 文件命名映射(设计稿节点名 -> 最终文件名)
|
||||
- 页面引用点位(组件/页面中的引用位置)
|
||||
- 未交付素材的占位图策略与尺寸
|
||||
|
||||
## 架构规则
|
||||
|
||||
### 组件分层
|
||||
- 路由页聚焦编排,不要在单文件里混放大段模板 + 业务逻辑 + API 调用。
|
||||
- 可复用 UI 放入 `components/`。
|
||||
- 可复用业务逻辑放入 `composables/`。
|
||||
- HTTP 请求逻辑放入 `services/` 或 `services/api/`。
|
||||
- 跨文件共享类型放入 `types/`。
|
||||
- 纯函数工具放入 `utils/`(需无状态且非 Vue 特定)。
|
||||
|
||||
### composable 抽离原则
|
||||
满足任一条件即可考虑抽离:
|
||||
- 逻辑可复用
|
||||
- 页面因异步流程或 watchers 变得难以维护
|
||||
- 表单、列表查询、分页、筛选、权限流程需要独立测试
|
||||
- 页面中 API 编排与 UI 状态迁移耦合过重
|
||||
|
||||
不要为了“挪几行代码”而抽离;抽离应有明确边界价值。
|
||||
|
||||
### Pinia 使用决策
|
||||
默认不使用 store。仅在以下场景推荐 `Pinia`:
|
||||
- 跨页面共享状态
|
||||
- 需要持久化的会话态 UI 状态
|
||||
- 多个远距离组件共同消费同一特性状态
|
||||
- 单页 composable 无法合理承载的缓存或状态协同
|
||||
|
||||
若本地状态足够,需明确说明“不需要 Pinia”。
|
||||
|
||||
### API 设计
|
||||
推荐“统一请求客户端 + 薄 service 模块”:
|
||||
- `services/http/client.ts`:axios 实例与拦截器
|
||||
- `services/api/<feature>.ts`:按业务域组织请求
|
||||
- `types/api.ts` 或 feature 内局部 DTO 类型
|
||||
|
||||
方案中始终要提及:
|
||||
- loading 与取消请求策略(如适用)
|
||||
- 面向用户的错误文案与内部技术错误的区分
|
||||
- 是否需要将后端字段映射为 view model
|
||||
|
||||
### 错误处理
|
||||
必须给出一致的错误处理约定:
|
||||
- 网络与超时失败
|
||||
- 业务错误码/业务失败
|
||||
- 参数校验失败
|
||||
- 乐观更新失败回滚(如适用)
|
||||
- 可安全重试动作的 retry 机制
|
||||
|
||||
避免零散、无模式地到处写 `try/catch`。
|
||||
|
||||
### 样式规范
|
||||
默认使用 `scoped scss`:
|
||||
- 保持布局 token 与重复样式模式一致
|
||||
- 避免样式决策导致无关组件强耦合
|
||||
- 明确指出适合抽离 design token、CSS 变量、共享 mixin 的位置
|
||||
|
||||
### 素材目录与复用边界
|
||||
- 页面私有素材放 `src/assets/images/png/<module>/`,跨页面复用素材可上提到共享目录(如 `src/assets/images/png/common/`)。
|
||||
- 同一个素材在多个页面复用时,不得各自复制一份,优先统一引用共享文件。
|
||||
- 若历史文件命名混乱,方案中应给出“保守兼容 + 渐进收敛”的改造建议。
|
||||
|
||||
## 代码生成规则
|
||||
生成 Vue 代码时:
|
||||
- 使用 `<script setup lang="ts">`
|
||||
- props 与 emits 必须显式类型
|
||||
- 模板保持可读,避免巨型“全塞一页”
|
||||
- 有意义的模板表达式应提升为 `computed`
|
||||
- 小型展示组件中禁止直接写 axios 调用
|
||||
- 无充分理由不得引入 `Pinia`
|
||||
- 后端细节缺失时可用占位 API 方法与类型,并明确假设
|
||||
- 缺少真实图片时,必须提供占位图实现,并按 UI 尺寸设置宽高/比例,确保布局稳定不抖动
|
||||
- 新增素材引用时,必须匹配真实文件路径与命名,不允许“先写引用、后补文件”造成运行时 404
|
||||
|
||||
## 输入不明确时
|
||||
除非缺失信息会阻断有效推进,否则不要卡住:
|
||||
- 明确写出假设
|
||||
- 区分“已确认需求”与“假设项”
|
||||
- 仍需给出可维护的默认架构方案
|
||||
|
||||
## 典型触发场景
|
||||
以下请求应使用本技能:
|
||||
- “把这个后台页面需求拆成 Vue 实现方案”
|
||||
- “根据这张草图规划组件结构和接口”
|
||||
- “把这个 UI 需求整理成前端开发任务和代码骨架”
|
||||
- “这个页面适不适合上 Pinia,接口怎么分层”
|
||||
- “把现有页面按 composables + services 重构出方案”
|
||||
- “识别 Figma 图标和背景,下载到 `src/assets/images/png` 并按模块建目录”
|
||||
- “把设计稿素材落地并在页面正确引用”
|
||||
|
||||
## 参考
|
||||
更详细的输出结构与规划提示词见:`references/planning-template.md`。
|
||||
@@ -0,0 +1,2 @@
|
||||
interface:
|
||||
display_name: "UI Requirement Planner"
|
||||
@@ -0,0 +1,141 @@
|
||||
# 规划模板
|
||||
|
||||
当用户希望获得完整、可执行的前端实施方案时,使用本参考模板。
|
||||
|
||||
## 默认输出模板
|
||||
|
||||
### 需求摘要
|
||||
- 目标:
|
||||
- 核心用户:
|
||||
- 关键操作:
|
||||
- 约束条件:
|
||||
- 假设项:
|
||||
|
||||
### 页面与组件架构
|
||||
- 路由/页面容器职责:
|
||||
- 组件树:
|
||||
- 展示型组件:
|
||||
- 业务组件:
|
||||
- 可复用候选模块:
|
||||
|
||||
### 状态与数据流
|
||||
- 页面本地状态:
|
||||
- 派生状态:
|
||||
- 交互事件:
|
||||
- 异步流程:
|
||||
- 是否需要 Pinia:
|
||||
- 使用或不使用理由:
|
||||
|
||||
### API 与类型规划
|
||||
- Service 模块划分:
|
||||
- 请求方法:
|
||||
- 请求参数:
|
||||
- 响应类型:
|
||||
- ViewModel 映射:
|
||||
- 错误模型:
|
||||
|
||||
### 边界与失败状态
|
||||
- Loading:
|
||||
- Empty:
|
||||
- Error:
|
||||
- Validation:
|
||||
- Permission:
|
||||
- Retry/Fallback:
|
||||
|
||||
### 图片与占位图规范(强制)
|
||||
- 是否提供真实图片资源:
|
||||
- 若未提供,采用的占位图方案:
|
||||
- 占位图尺寸(按 UI 设计尺寸或容器尺寸):
|
||||
- 容器比例与 `object-fit` 策略:
|
||||
- 多图片位是否分别定义尺寸与样式:
|
||||
|
||||
### 实施步骤
|
||||
1.
|
||||
2.
|
||||
3.
|
||||
4.
|
||||
|
||||
### 验收清单
|
||||
- [ ] 组件边界清晰,职责拆分明确
|
||||
- [ ] 展示组件内无直接 API 调用
|
||||
- [ ] 仅在必要时使用 Pinia,且理由明确
|
||||
- [ ] Loading / Empty / Error 等状态已覆盖
|
||||
- [ ] 类型定义完整且显式
|
||||
- [ ] `scoped scss` 职责边界清楚
|
||||
- [ ] 缺图场景有占位图且尺寸符合 UI 设计
|
||||
|
||||
### 骨架目录建议
|
||||
```text
|
||||
src/
|
||||
pages/
|
||||
components/
|
||||
composables/
|
||||
services/
|
||||
http/
|
||||
api/
|
||||
types/
|
||||
utils/
|
||||
```
|
||||
|
||||
## 输入到输出示例
|
||||
|
||||
### 示例 1
|
||||
输入: “做一个用户列表页,支持搜索、筛选、分页、详情抽屉。”
|
||||
|
||||
重点关注:
|
||||
- 表格容器、工具栏、详情抽屉的职责分离
|
||||
- 查询条件状态是否抽离为 composable
|
||||
- 详情抽屉是否需要独立拉取逻辑
|
||||
- loading、empty、retry 状态设计
|
||||
|
||||
### 示例 2
|
||||
输入: “把这个原型图转成 Vue 页面实现方案。”
|
||||
|
||||
重点关注:
|
||||
- 视觉区域如何映射到组件树
|
||||
- 通用 UI 基础组件与一次性业务组件的边界
|
||||
- 占位 API 与类型化 DTO 假设
|
||||
- 明确的响应式与溢出行为
|
||||
- 若原型未提供真实图片,给出按 UI 尺寸的占位图方案
|
||||
|
||||
### 示例 3(Figma 素材落地)
|
||||
输入: “识别 Figma 图标和背景,下载保存到 `src/assets/images/png`,按模块建目录并正确引用到页面。”
|
||||
|
||||
重点关注:
|
||||
- 图标、背景图、装饰图的分类与复用判断
|
||||
- 素材目录是否按模块归档
|
||||
- 文件名是否语义化、可维护
|
||||
- 页面模板和 TS 里的引用方式是否正确
|
||||
- 缺失素材时是否有按 UI 尺寸的占位图兜底
|
||||
|
||||
可直接复用的输出片段:
|
||||
|
||||
````markdown
|
||||
### 素材落地清单
|
||||
- 模块:`mine/newHome`
|
||||
- 目标目录:`src/assets/images/png/mine/newHome/`
|
||||
- 素材映射:
|
||||
- `icon_message` -> `mine-home-icon-message.png`
|
||||
- `icon_setting` -> `mine-home-icon-setting.png`
|
||||
- `bg_header` -> `mine-home-bg-header.png`
|
||||
|
||||
### 目录结构
|
||||
```text
|
||||
src/assets/images/png/mine/newHome/
|
||||
mine-home-icon-message.png
|
||||
mine-home-icon-setting.png
|
||||
mine-home-bg-header.png
|
||||
mine-home-banner-placeholder.png
|
||||
```
|
||||
|
||||
### 页面引用建议
|
||||
- 模板静态引用:
|
||||
- `<img src="@/assets/images/png/mine/newHome/mine-home-icon-message.png" alt="message" />`
|
||||
- TS 计算型引用:
|
||||
- `new URL('@/assets/images/png/mine/newHome/mine-home-bg-header.png', import.meta.url).href`
|
||||
|
||||
### 占位图策略
|
||||
- 当 `bg_header` 未交付时,使用 `mine-home-banner-placeholder.png`
|
||||
- 占位图尺寸:`343 x 84`(按 UI 标注);若无标注则取容器尺寸
|
||||
- `object-fit: cover`,确保替换真实图前后布局不抖动
|
||||
````
|
||||
@@ -0,0 +1,8 @@
|
||||
NODE_ENV= development # 开发环境
|
||||
VITE_APP_API_BASE_URL = /api/app # 接口请求地址,会设置到 axios 的 baseURL 参数上
|
||||
VITE_BUILD_SOURCEMAP = true # 是否在打包时生成 sourcemap
|
||||
VITE_BUILD_DROP_CONSOLE = true # 是否在打包时删除 console 代码
|
||||
VITE_BUILD_VCONSOLE = false # 是否开启调试工具 vconsole
|
||||
VITE_PARAMETER_ENCRYPTION = 0 # 是否开启参数加密 0关闭 1开启
|
||||
VITE_BASE_URL= ["http://172.104.39.32:25508"] # api选线域名,这里必须为数组
|
||||
# VITE_BASE_URL= ["https://gx5q5.com","https://d122lhoqt6shfh.cloudfront.net","https://d2dyiyxr71jnmg.cloudfront.net"] # api选线域名,这里必须为数组
|
||||
@@ -0,0 +1,7 @@
|
||||
NODE_ENV= production # 生产环境
|
||||
VITE_APP_API_BASE_URL = /api/app # 接口请求地址,会设置到 axios 的 baseURL 参数上
|
||||
VITE_BUILD_SOURCEMAP = false # 是否在打包时生成 sourcemap
|
||||
VITE_BUILD_DROP_CONSOLE = true # 是否在打包时删除 console 代码
|
||||
VITE_BUILD_VCONSOLE = false # 是否开启调试工具 vconsole
|
||||
VITE_PARAMETER_ENCRYPTION = 1 # 是否开启参数加密 0关闭 1开启
|
||||
VITE_BASE_URL= ["http://172.104.39.32:25508"] # api选线域名,这里必须为数组
|
||||
@@ -0,0 +1,7 @@
|
||||
NODE_ENV= test # 测试环境
|
||||
VITE_APP_API_BASE_URL = /api/app # 接口请求地址,会设置到 axios 的 baseURL 参数上
|
||||
VITE_BUILD_SOURCEMAP = false # 是否在打包时生成 sourcemap
|
||||
VITE_BUILD_DROP_CONSOLE = true # 是否在打包时删除 console 代码
|
||||
VITE_BUILD_VCONSOLE = false # 是否开启调试工具 vconsole
|
||||
VITE_PARAMETER_ENCRYPTION = 0 # 是否开启参数加密 0关闭 1开启
|
||||
VITE_BASE_URL= ["http://172.104.39.32:25508"] # api选线域名,这里必须为数组
|
||||
@@ -0,0 +1 @@
|
||||
components.d.ts
|
||||
@@ -0,0 +1,29 @@
|
||||
module.exports = {
|
||||
root: true, // 停止向上查找父级目录中的配置文件
|
||||
env: {
|
||||
browser: true,
|
||||
es2021: true,
|
||||
node: true,
|
||||
},
|
||||
extends: [
|
||||
'eslint:recommended',
|
||||
'plugin:vue/vue3-essential',
|
||||
'plugin:@typescript-eslint/recommended',
|
||||
'plugin:prettier/recommended',
|
||||
'prettier', // eslint-config-prettier 的缩写
|
||||
],
|
||||
parser: 'vue-eslint-parser', // 指定要使用的解析器
|
||||
// 给解析器传入一些其他的配置参数
|
||||
parserOptions: {
|
||||
ecmaVersion: 'latest', // 支持的es版本
|
||||
parser: '@typescript-eslint/parser',
|
||||
sourceType: 'module', // 模块类型,默认为script,我们设置为module
|
||||
},
|
||||
plugins: ['vue', '@typescript-eslint', 'prettier'], // eslint-plugin- 可以省略
|
||||
rules: {
|
||||
'vue/multi-word-component-names': 0,
|
||||
'@typescript-eslint/no-var-requires': 0,
|
||||
'@typescript-eslint/no-explicit-any': 0,
|
||||
'no-undef': 0,
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,27 @@
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
pnpm-debug.log*
|
||||
lerna-debug.log*
|
||||
|
||||
node_modules
|
||||
build
|
||||
dist
|
||||
dist-ssr
|
||||
*.local
|
||||
.history
|
||||
|
||||
# Editor directories and files
|
||||
.vscode/*
|
||||
!.vscode/extensions.json
|
||||
.idea
|
||||
.DS_Store
|
||||
*.suo
|
||||
*.ntvs*
|
||||
*.njsproj
|
||||
*.sln
|
||||
*.sw?
|
||||
/components.d.ts
|
||||
@@ -0,0 +1,9 @@
|
||||
registry=https://packages.aliyun.com/67c6c2a49f45126533f3b576/npm/npm-registry/
|
||||
always-auth=true
|
||||
//packages.aliyun.com/67c6c2a49f45126533f3b576/npm/npm-registry/:_authToken=7fe5cdbf-a914-40c2-9900-05a27f2b9582
|
||||
|
||||
sass_binary_site="https://npmmirror.com/mirrors/node-sass/"
|
||||
phantomjs_cdnurl="https://cdn.npmmirror.com/binaries/phantomjs"
|
||||
electron_mirror="https://cdn.npmmirror.com/binaries/electron/"
|
||||
sqlite3_binary_host_mirror="https://foxgis.oss-cn-shanghai.aliyuncs.com/"
|
||||
chromedriver_cdnurl="https://cdn.npmmirror.com/binaries/chromedriver"
|
||||
@@ -0,0 +1,20 @@
|
||||
module.exports = {
|
||||
printWidth: 120, //单行长度
|
||||
tabWidth: 2, //缩进长度
|
||||
useTabs: false, //使用空格代替tab缩进
|
||||
semi: true, //句末使用分号
|
||||
singleQuote: true, //使用单引号
|
||||
quoteProps: 'as-needed', //仅在必需时为对象的key添加引号
|
||||
jsxSingleQuote: true, // jsx中使用单引号
|
||||
trailingComma: 'all', //多行时尽可能打印尾随逗号
|
||||
bracketSpacing: true, //在对象前后添加空格-eg: { foo: bar }
|
||||
jsxBracketSameLine: true, //多属性html标签的‘>’折行放置
|
||||
arrowParens: 'always', //单参数箭头函数参数周围使用圆括号-eg: (x) => x
|
||||
requirePragma: false, //无需顶部注释即可格式化
|
||||
insertPragma: false, //在已被preitter格式化的文件顶部加上标注
|
||||
proseWrap: 'preserve',
|
||||
htmlWhitespaceSensitivity: 'ignore', //对HTML全局空白不敏感
|
||||
vueIndentScriptAndStyle: false, //不对vue中的script及style标签缩进s
|
||||
endOfLine: 'auto', //结束行形式
|
||||
embeddedLanguageFormatting: 'auto', //对引用代码进行格式化
|
||||
};
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"recommendations": ["Vue.volar", "Vue.vscode-typescript-vue-plugin"]
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<link rel="icon" href="/favicon.ico" />
|
||||
<meta name="viewport"
|
||||
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no, viewport-fit=cover" />
|
||||
<!-- 状态栏/浏览器顶栏背景:对齐设计稿页面底色 #1A0F16;iOS 需配合 black-translucent 才能透出页面背景 -->
|
||||
<!-- <meta name="theme-color" content="#1A0F16" />
|
||||
<meta name="apple-mobile-web-app-capable" content="yes" />
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" /> -->
|
||||
<title></title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
<script type="module" src="/src/main.ts"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,63 @@
|
||||
{
|
||||
"name": "redapricot",
|
||||
"private": true,
|
||||
"version": "1.0.0",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
"build:prod": "export NODE_ENV=production && vite build --mode production",
|
||||
"build:test": "export NODE_ENV=test && vite build --mode test ",
|
||||
"preview": "vite preview",
|
||||
"lint": "eslint --ext .js,.vue,.ts src --fix"
|
||||
},
|
||||
"dependencies": {
|
||||
"autoprefixer": "^10.4.13",
|
||||
"axios": "^1.3.2",
|
||||
"buffer": "^6.0.3",
|
||||
"crypto-js": "^4.1.1",
|
||||
"devtools-detector": "^2.0.14",
|
||||
"html5-qrcode": "^2.3.8",
|
||||
"js-md5": "^0.8.3",
|
||||
"mitt": "^3.0.1",
|
||||
"moment": "^2.29.4",
|
||||
"pinia": "^2.0.30",
|
||||
"pinia-plugin-persistedstate": "^3.0.2",
|
||||
"pinyin-pro": "^3.13.0",
|
||||
"postcss-px-to-viewport-8-plugin": "^1.2.0",
|
||||
"qrcode.vue": "^3.3.3",
|
||||
"qs": "^6.11.0",
|
||||
"spark-md5": "^3.0.2",
|
||||
"swiper": "^8.4.5",
|
||||
"terser": "^5.16.3",
|
||||
"vant": "^4.0.10",
|
||||
"vconsole": "^3.15.0",
|
||||
"vue": "^3.2.45",
|
||||
"vue-clipboard3": "^2.0.0",
|
||||
"vue-router": "^4.1.6",
|
||||
"vuedraggable-es": "^4.1.1",
|
||||
"xgplayer-hls.js": "^2.6.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/crypto-js": "^4.1.1",
|
||||
"@types/node": "^18.13.0",
|
||||
"@types/qs": "^6.9.7",
|
||||
"@types/spark-md5": "^3.0.2",
|
||||
"@typescript-eslint/eslint-plugin": "^5.50.0",
|
||||
"@typescript-eslint/parser": "^5.50.0",
|
||||
"@vitejs/plugin-vue": "^3.2.0",
|
||||
"eslint": "^8.33.0",
|
||||
"eslint-config-prettier": "^8.6.0",
|
||||
"eslint-plugin-prettier": "^4.2.1",
|
||||
"eslint-plugin-vue": "^9.9.0",
|
||||
"prettier": "^2.8.3",
|
||||
"sass": "^1.58.0",
|
||||
"sass-loader": "^13.2.0",
|
||||
"typescript": "^4.9.3",
|
||||
"unplugin-vue-components": "^0.23.0",
|
||||
"vite": "^3.2.5",
|
||||
"vite-plugin-compression": "^0.5.1",
|
||||
"vite-plugin-svg-icons": "^2.0.1",
|
||||
"vite-plugin-vconsole": "^1.3.1",
|
||||
"vue-tsc": "^1.0.24"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
const autoprefixer = require('autoprefixer');
|
||||
const px2viewport = require('postcss-px-to-viewport-8-plugin');
|
||||
|
||||
const basePx2viewport = {
|
||||
unitToConvert: 'px', // 需要转换的单位,默认为 px
|
||||
unitPrecision: 3, // 单位转换后保留的精度(很多时候无法整除)
|
||||
propList: ['*'], // 能转化为vw的属性列表,!font-size表示font-size后面的单位不会被转换
|
||||
viewportUnit: 'vw', // 指定需要转换成的视口单位,建议使用 vw
|
||||
fontViewportUnit: 'vw', // 字体使用的视口单位
|
||||
selectorBlackList: ['.ignore', 'keep-px'],
|
||||
minPixelValue: 1, // 设置最小的转换数值,这里小于或等于 1px 不转换为视口单位
|
||||
mediaQuery: false, // 媒体查询里的单位是否需要转换单位
|
||||
// exclude: [/node_modules/], // 忽略某些文件夹下的文件或特定文件
|
||||
// include: [/src/], // 如果设置了include,那将只有匹配到的文件才会被转换
|
||||
};
|
||||
module.exports = {
|
||||
plugins: [
|
||||
autoprefixer(),
|
||||
px2viewport({
|
||||
...basePx2viewport,
|
||||
viewportWidth: 375,
|
||||
}),
|
||||
],
|
||||
};
|
||||
@@ -0,0 +1,7 @@
|
||||
# sh 执行打包到正式服上
|
||||
npm run build:prod
|
||||
zip -q -r dist.zip dist
|
||||
scp dist.zip server@116.212.120.2:/home/server/91porn/h5/pro
|
||||
ssh server@116.212.120.2 "/home/server/91porn/h5/pro/dist.sh"
|
||||
rm dist.zip
|
||||
# https://5w8cj.com?tid=6797250199453562mmpyrwqv
|
||||
@@ -0,0 +1,169 @@
|
||||
---
|
||||
项目名称: 91pron H5 客户端 # 与 DMP 或内部命名一致时请自行替换
|
||||
一级部门: 北斗 # 请填写一级部门名称
|
||||
二级部门: 瑞升 # 请填写二级部门名称,无则留空
|
||||
|
||||
DMP编码: JHA-204 # 无则留空
|
||||
|
||||
项目类型: H5
|
||||
# 可选值:
|
||||
# H5 / APP / PC / 服务 / 组件 / 工具 / AI / 中间件
|
||||
|
||||
开发语言: Node
|
||||
# 可选值:
|
||||
# GO / Java / PHP / Node
|
||||
|
||||
项目负责人: DN4929,DN4868 # 员工编号,多个用逗号隔开,这里的负责是这套代码的负责人
|
||||
|
||||
运维负责人: DN9460,DN9651,DN4792 # 负责部署、监控、K8S、发布、证书等
|
||||
|
||||
产品负责人: YY1145,YY1208 # 项目产品经理
|
||||
|
||||
项目成员: DN4929,DN4868
|
||||
|
||||
项目状态: 开发中
|
||||
# 可选值:
|
||||
# 开发中 / 维护中 / 已停止 / 已归档
|
||||
|
||||
项目级别: 中
|
||||
# 可选值:
|
||||
# 高 / 中 / 低
|
||||
|
||||
核心分支: main
|
||||
|
||||
代码仓库:
|
||||
- https://bd-git.jsyyds.com/ruisheng/jha-204-91pron/frontend/91porn-h5-client.git
|
||||
|
||||
最后审计人:
|
||||
|
||||
最后审计时间:
|
||||
|
||||
告警群:
|
||||
|
||||
备注:
|
||||
- `package.json` 中 `name` 为 `redapricot`,仓库/目录名为 `91pron-h5-client`。
|
||||
- 业务 API 根路径由 **选线得到的 `configStore.baseUrl`** + 环境变量 `VITE_APP_API_BASE_URL`(如 `/api/app`)拼接;选线候选域名见各环境 `.env.*` 中的 `VITE_BASE_URL`(JSON 数组),勿将含密钥、内网地址的未脱敏内容对外发布。
|
||||
---
|
||||
|
||||
# 1. 项目说明
|
||||
|
||||
本仓库为面向 **移动端 H5 浏览器** 的 **Vue 3 + Vite + TypeScript** 单页应用,UI 基于 **Vant 4**,状态管理为 **Pinia**(`pinia-plugin-persistedstate` 持久化),路由为 **Vue Router 4**,模式为 **`createWebHistory`(HTML5 History)**(见 `src/router/index.ts`)。入口为 `src/main.ts`,挂载 Pinia、Router、埋点插件与 Vant `Lazyload` 等;全局路由前置逻辑见 `src/permission.ts`(含大量 `<keep-alive>` 与 Tab 缓存策略)。启动页 `Splash` 负责 **API 选线**(ping)、拉取应用配置并写入 `config`/`global` 等 store,再进入 `MainView` 主导航。
|
||||
|
||||
业务域在 `src/views/` 下按模块划分,主要包括:**首页与搜索/片库/长短视频播放详情**(`lldhome`、`shortVideo`)、**社区**(帖子、套图、排行、群聊等,`community`)、**直播**(`lldlive`)、**我的**(登录、钱包会员、充值提现、消息、AI 功能、历史收藏等,`lldmine`)、**ACG**(小说/漫画/动漫,`acgModule`)、**暗网**(`darkNet`)、**娱乐**(`entertainment`)、**联合游戏活动**(`jointGamingActivitie`)、**预售**(`lldpresale`)、**免费福利**(`lldfreeBenefits`)等;接口封装在 `src/service/`,按域拆分(如 `home.ts`、`user.ts`、`community.ts`)。
|
||||
|
||||
**技术栈要点:**
|
||||
|
||||
- 构建:**Vite 3**(`vite.config.ts`),生产使用 **Terser** 压缩,**vite-plugin-compression** 生成 **gzip** 产物;**unplugin-vue-components** + **VantResolver** 按需引入组件;**vite-plugin-svg-icons** 使用 `src/assets/icons`;可按环境开启 **vconsole**(`vite-plugin-vconsole`)。
|
||||
- 样式:**Sass**,通过 `css.preprocessorOptions.scss.additionalData` 向各组件注入 `@/assets/styles/main.scss`;存在主题目录 `src/assets/theme/`。
|
||||
- 适配:**postcss-px-to-viewport-8-plugin**(见 `postcss` 配置)。
|
||||
- 网络:**axios** 封装于 `src/utils/request.ts`,`baseURL = configStore.baseUrl + VITE_APP_API_BASE_URL`;支持 **Authorization**、业务码非 200 时 `showToast`、可选 **请求体/查询参数加密**(`VITE_PARAMETER_ENCRYPTION`)、响应 `hash` 字段时的解密;GET 短缓存与请求去重等逻辑也在该文件中。
|
||||
- 播放器与媒体:**xgplayer-hls.js**(HLS),业务中多处拼接 **`/api/app/vid/h5/m3u8/…`** 拉流地址(见 `VideoHls` 等组件)。
|
||||
- 其他:**mitt** 事件总线、`moment`、**swiper**、**qrcode.vue**、**html5-qrcode**、**vuedraggable-es**、**devtools-detector**(生产环境非调试参数下启用检测)、`index.html` 引入 **web-sdk** 脚本供设备信息与部分请求头使用等。
|
||||
|
||||
**Node 版本:** 仓库 `README.md` 建议使用 **16.17.1**。
|
||||
|
||||
**常用脚本(`package.json`):**
|
||||
|
||||
| 命令 | 说明 |
|
||||
|------|------|
|
||||
| `npm run dev` | 本地开发(`vite`,默认见 `vite.config.ts` 中 `server.port` 等) |
|
||||
| `npm run build:prod` | 生产构建(`--mode production`) |
|
||||
| `npm run build:test` | 测试环境构建(`--mode test`) |
|
||||
| `npm run preview` | 预览构建产物(`vite preview`) |
|
||||
| `npm run lint` | ESLint(`src` 下 `.js` / `.vue` / `.ts`,带 `--fix`) |
|
||||
|
||||
**开发环境代理(`vite.config.ts`):** 本地将 **`/dcserv`** 代理到可配置的 `target`(用于部分接口调试,以文件内实际配置为准)。
|
||||
|
||||
**项目目录结构(核心):**
|
||||
|
||||
```
|
||||
91pron-h5-client/
|
||||
├── public/
|
||||
├── src/
|
||||
│ ├── main.ts # 入口:Pinia、Router、Vant、埋点、devtools 等
|
||||
│ ├── App.vue
|
||||
│ ├── permission.ts # 路由守卫:keep-alive / Tab 缓存策略
|
||||
│ ├── router/
|
||||
│ │ └── index.ts # Router(History)、_SPLASH_ / 首页集合 / 业务子路由等
|
||||
│ ├── stores/ # Pinia(user、config、global、app 等)
|
||||
│ ├── views/ # 页面:lldhome / community / lldmine / acgModule 等
|
||||
│ ├── service/ # 按域拆分的接口方法
|
||||
│ ├── components/ # 通用与业务组件(含 VideoHls、瀑布流等)
|
||||
│ ├── utils/ # request、埋点、加解密、本地存储等
|
||||
│ ├── hooks/ # 组合式逻辑
|
||||
│ ├── assets/ # 样式、图标、主题等
|
||||
│ ├── plugins/ # 如 tracker 等
|
||||
│ └── enums/、typings/ # 枚举与类型
|
||||
├── vite.config.ts
|
||||
├── index.html # 入口 HTML,含 web-sdk 脚本引用
|
||||
├── .env.development / .env.test / .env.production # VITE_* 与选线域名等
|
||||
├── prod_build.sh # 示例打包/发布脚本(环境差异大,使用前请内部确认)
|
||||
└── project.md # 本文件
|
||||
```
|
||||
|
||||
**接口基址与选线:**
|
||||
|
||||
- **`VITE_APP_API_BASE_URL`**:通常为 **`/api/app`**,作为 axios 路径前缀拼在选线成功的域名之后。
|
||||
- **`VITE_BASE_URL`**:各环境文件中为 **JSON 数组字符串**,供启动阶段对多个候选域名做 **ping/选线**,选中的结果写入 **`configStore.baseUrl`**(详见 `Splash` 与 `src/utils/ping.ts` 等逻辑)。
|
||||
- 生产部署若使用相对路径,需由 **网关 / Nginx** 将浏览器同源下的 **`/api`** 转发到实际业务后端。
|
||||
|
||||
---
|
||||
|
||||
# 2. 基础设施与中间件
|
||||
|
||||
本仓库为 **纯前端工程**,不内置后端;运行时依赖:
|
||||
|
||||
- **业务 API**:由选线结果 + `VITE_APP_API_BASE_URL` 决定;静态部署时需保证 **`/api/...` 反代** 与 HTTPS 证书策略一致。
|
||||
- **静态资源托管**:`build:prod` / `build:test` 产物在 **`dist/`**,由 CDN 或 Web 服务器提供;**History 路由** 需在服务端配置 **单页回退**(如 `try_files` 到 `index.html`)。
|
||||
- **媒体与图片域名**:全局配置、资源线与播放线路等由接口与 `config`/`global` store 中的 **`sourceInfo`**、**线路信息** 等共同决定(勿在文档中粘贴未脱敏的内网或密钥配置)。
|
||||
|
||||
---
|
||||
|
||||
# 3. 运维部署
|
||||
|
||||
**构建产物:** 执行 `npm run build:prod` 或 `npm run build:test` 后,在 **`dist/`** 生成静态资源;可能同时生成 **`.gz`**(依赖服务器是否启用 `gzip_static` 或等价能力)。
|
||||
|
||||
**推荐发布流程(示例):**
|
||||
|
||||
1. 使用约定 **Node** 版本安装依赖:`npm ci` 或 `npm install`。
|
||||
2. 确认各环境 **`.env.*`** 中 `VITE_BASE_URL`、`VITE_APP_API_BASE_URL`、加密开关等与当前发布目标一致。
|
||||
3. 执行 `npm run build:prod` 或 `npm run build:test`。
|
||||
4. 将 **`dist/`** 同步至静态服务器;确认 **History 路由回退** 与 **`/api` 反代**。
|
||||
5. 仓库内 **`prod_build.sh`** 为示例流程,**主机与路径以实际运维规范为准**,避免泄露账号与内网信息。
|
||||
|
||||
**环境变量说明(摘录,完整以 `.env.*` 为准):**
|
||||
|
||||
| 变量 | 作用 |
|
||||
|------|------|
|
||||
| `NODE_ENV` | 构建/运行环境标识 |
|
||||
| `VITE_APP_API_BASE_URL` | 与选线域名拼接,作为 API 路径前缀 |
|
||||
| `VITE_BASE_URL` | 选线候选 API 域名列表(JSON 数组字符串) |
|
||||
| `VITE_BUILD_SOURCEMAP` | 是否生成 sourcemap |
|
||||
| `VITE_BUILD_DROP_CONSOLE` | 生产是否剔除 `console` |
|
||||
| `VITE_BUILD_VCONSOLE` | 是否打包进 vconsole |
|
||||
| `VITE_PARAMETER_ENCRYPTION` | 是否开启请求参数加密 |
|
||||
|
||||
---
|
||||
|
||||
# 4. 风险说明
|
||||
|
||||
- **强依赖网关反代**:生产使用相对路径时,**`/api` 代理错误会导致整站接口不可用**;History 模式服务器配置错误会导致 **深链 404**。
|
||||
- **选线失败**:启动阶段若所有候选域名不可用,用户可能停留在选线或错误态(见 `Splash` 与相关弹层逻辑)。
|
||||
- **参数加密与后端约定**:`VITE_PARAMETER_ENCRYPTION` 与各环境必须 **与后端一致**,否则请求体解析失败。
|
||||
- **安全与合规**:生产环境开启 **devtools 检测并跳转外部页**(见 `main.ts`),变更前需评估用户体验与合规要求。
|
||||
- **配置敏感信息**:`.env`、选线域名、密钥类逻辑 **勿提交到公开仓库**;供应链上锁定 `package-lock.json` 并定期审计依赖。
|
||||
|
||||
---
|
||||
|
||||
# 5. 历史事故(可选)
|
||||
|
||||
- 暂无(请运维/研发后续补充)
|
||||
|
||||
---
|
||||
|
||||
# 6. 交接说明(可选)
|
||||
|
||||
- 路由与缓存策略集中在 **`src/permission.ts`**,新增常驻缓存页面时需同步维护 **keepAliveMap / mainViewKeep** 等映射。
|
||||
- 用户信息、配置等与 **`src/stores/`** 及持久化插件相关;**请勿绕过 `src/utils/request.ts` 直接发起业务 axios**(与仓库 `.cursor` 前端规范一致)。
|
||||
- 接口目录:**`src/service/`**;类型定义:**`src/typings/`**。
|
||||
- **请勿将含密钥、生产内网地址的 `.env` 或未脱敏脚本提交至对外可见仓库**;YAML 头部元数据若与真实组织不一致,请在内部系统中核对后修改。
|
||||
|
After Width: | Height: | Size: 41 KiB |
@@ -0,0 +1,150 @@
|
||||
<script setup lang="ts">
|
||||
import { RouterView, useRoute } from 'vue-router';
|
||||
import { computed, nextTick, onBeforeUnmount, onMounted, watch } from 'vue';
|
||||
import AppApi from '@/service/app';
|
||||
import { useGlobalStore } from './stores/global';
|
||||
import inobounce from '@/assets/js/inobounce.min.js';
|
||||
import { getDevType } from './utils';
|
||||
import { startAppActiveTracking, stopAppActiveTracking } from '@/utils/appActiveTime';
|
||||
const globalStore = useGlobalStore();
|
||||
const route = useRoute();
|
||||
const keepAliveList = computed(() => {
|
||||
return globalStore.$state.keepAliveList;
|
||||
});
|
||||
|
||||
const startInobounce = () => {
|
||||
if (getDevType() == 'ios') {
|
||||
inobounce.enable();
|
||||
}
|
||||
};
|
||||
|
||||
onMounted(() => {
|
||||
startInobounce();
|
||||
startAppActiveTracking();
|
||||
window.addEventListener('beforeunload', AppApi.clearImgDecryptCache);
|
||||
window.addEventListener('pagehide', AppApi.clearImgDecryptCache);
|
||||
});
|
||||
|
||||
onBeforeUnmount(() => {
|
||||
if (getDevType() == 'ios') {
|
||||
inobounce.disable();
|
||||
}
|
||||
stopAppActiveTracking();
|
||||
window.removeEventListener('beforeunload', AppApi.clearImgDecryptCache);
|
||||
window.removeEventListener('pagehide', AppApi.clearImgDecryptCache);
|
||||
});
|
||||
|
||||
/**
|
||||
* 保存用户滚动距离
|
||||
*/
|
||||
|
||||
let keepPathScroll = computed(() => {
|
||||
return globalStore.keepPathScroll;
|
||||
});
|
||||
|
||||
watch(
|
||||
() => route.path,
|
||||
(toPath, fromPath) => {
|
||||
try {
|
||||
if (keepPathScroll.value[fromPath]) {
|
||||
const className = keepPathScroll.value[fromPath]?.className;
|
||||
// 查找到className才储存
|
||||
if (className) {
|
||||
const domArr = document.getElementsByClassName(className);
|
||||
//单个页面
|
||||
if (domArr.length == 1) {
|
||||
const dom = domArr[0];
|
||||
const scrollTop = dom?.scrollTop;
|
||||
if (dom) {
|
||||
globalStore.updateScroll(fromPath, 'scrollTop', scrollTop);
|
||||
}
|
||||
} else {
|
||||
//同个路由多个存在tab
|
||||
if (keepPathScroll.value[fromPath]?.isTab) {
|
||||
let curIndex = keepPathScroll.value[fromPath].curIndex;
|
||||
const dom = domArr[curIndex];
|
||||
const scrollTop = dom?.scrollTop;
|
||||
globalStore.updateScroll(fromPath, 'scrollArr', scrollTop, curIndex);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// 设置
|
||||
if (keepPathScroll.value[toPath]) {
|
||||
const className = keepPathScroll.value[toPath]?.className;
|
||||
if (className) {
|
||||
nextTick(() => {
|
||||
const domArr = document.getElementsByClassName(className);
|
||||
//单个页面
|
||||
if (domArr.length == 1) {
|
||||
const domIndex = domArr.length - 1;
|
||||
const dom: any = domArr[domIndex];
|
||||
const scrollTop = keepPathScroll.value[toPath].scrollTop;
|
||||
if (dom) {
|
||||
dom.scrollTop = scrollTop;
|
||||
}
|
||||
} else {
|
||||
//同个路由多个存在tab
|
||||
if (keepPathScroll.value[toPath]?.isTab) {
|
||||
let curIndex = keepPathScroll.value[toPath].curIndex;
|
||||
const dom = domArr[curIndex];
|
||||
const scrollTop = keepPathScroll.value[toPath].scrollArr[curIndex];
|
||||
if (dom && scrollTop > 0) {
|
||||
dom.scrollTop = scrollTop;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
}
|
||||
},
|
||||
);
|
||||
const getComponentKey = () => {
|
||||
if (
|
||||
['AcgVideoDetail', 'AcgImageDetailWatch', 'AcgTextDetailWatch0', 'AcgTextDetailWatch1'].includes(
|
||||
route.name as string,
|
||||
)
|
||||
) {
|
||||
return route.path + '?id=' + route.query.id;
|
||||
} else if (
|
||||
[
|
||||
'userInfo',
|
||||
'postDetail',
|
||||
'AcgImageDetail',
|
||||
'AcgTextDetail',
|
||||
'gameDetails',
|
||||
'tagVideoList',
|
||||
'shortVideoDetails',
|
||||
].includes(route.name as string)
|
||||
) {
|
||||
return route.fullPath;
|
||||
} else if (['liveRoom'].includes(route.name as string)) {
|
||||
return route.path + '?id=' + (route.query.id || route.query.vid);
|
||||
} else {
|
||||
return undefined;
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<template>
|
||||
<div id="appView" @click.prevent>
|
||||
<router-view v-slot="{ Component }">
|
||||
<keep-alive :include="keepAliveList">
|
||||
<component :is="Component" :key="getComponentKey()" />
|
||||
</keep-alive>
|
||||
</router-view>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style scoped lang="scss">
|
||||
@import './assets/css/font.css';
|
||||
#appView {
|
||||
color: white;
|
||||
background: #0f0f0f;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,6 @@
|
||||
@font-face {
|
||||
font-family: 'AaLongYanTi';
|
||||
src: url('./../fonts/AaLongYanTi.ttf');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
/* http://meyerweb.com/eric/tools/css/reset/
|
||||
v2.0 | 20110126
|
||||
License: none (public domain)
|
||||
*/
|
||||
|
||||
html, body, div, span, applet, object, iframe,
|
||||
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
|
||||
a, abbr, acronym, address, big, cite, code,
|
||||
del, dfn, em, img, ins, kbd, q, s, samp,
|
||||
small, strike, strong, sub, sup, tt, var,
|
||||
b, u, i, center,
|
||||
dl, dt, dd, ol, ul, li,
|
||||
fieldset, form, label, legend,
|
||||
table, caption, tbody, tfoot, thead, tr, th, td,
|
||||
article, aside, canvas, details, embed,
|
||||
figure, figcaption, footer, header, hgroup,
|
||||
menu, nav, output, ruby, section, summary,
|
||||
time, mark, audio, video {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
font-size: 100%;
|
||||
font: inherit;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
/* HTML5 display-role reset for older browsers */
|
||||
article, aside, details, figcaption, figure,
|
||||
footer, header, hgroup, menu, nav, section {
|
||||
display: block;
|
||||
}
|
||||
html {
|
||||
height: 100%;
|
||||
background-color: #0f0f0f;
|
||||
}
|
||||
body {
|
||||
height: 100%;
|
||||
line-height: 1;
|
||||
overflow: hidden;
|
||||
/* 与 #appView / 设计稿页面底色一致,刘海/状态栏透出区不会出现色差 */
|
||||
background-color: #0f0f0f;
|
||||
}
|
||||
*,
|
||||
*::before,
|
||||
*::after {
|
||||
box-sizing: border-box;
|
||||
margin: 0;
|
||||
position: relative;
|
||||
font-weight: normal;
|
||||
-webkit-touch-callout: none; /* 系统默认菜单被禁用/ */
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
ol, ul {
|
||||
list-style: none;
|
||||
}
|
||||
blockquote, q {
|
||||
quotes: none;
|
||||
}
|
||||
blockquote:before, blockquote:after,
|
||||
q:before, q:after {
|
||||
content: '';
|
||||
content: none;
|
||||
}
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
#app {
|
||||
height: 100%;
|
||||
}
|
||||
div::-webkit-scrollbar{
|
||||
display: none;
|
||||
}
|
||||
|
||||
.openX{
|
||||
overflow-y: hidden;
|
||||
overflow-x: auto;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
}
|
||||
|
||||
.openY{
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
/* 覆盖vant 默认样式 */
|
||||
:root:root {
|
||||
--van-tabbar-height: 51px;
|
||||
--van-tabbar-item-font-size: 10px;
|
||||
--van-popover-action-width: 108px;
|
||||
--van-popover-light-text-color: rgb(24,24,24);
|
||||
--van-popup-background: transparent;
|
||||
}
|
||||
|
||||
/* 全局loading */
|
||||
.global_loading {
|
||||
width: 100% !important;
|
||||
max-width: 100% !important;
|
||||
height: 100% !important;
|
||||
background-color: rgba(0, 0, 0, 0.7);
|
||||
}
|
||||
.global_loading .van-toast__icon img {
|
||||
font-size: 26px;
|
||||
}
|
||||
.van-toast{
|
||||
background: rgba(0, 0, 0, .7) !important;
|
||||
box-sizing: border-box !important;
|
||||
}
|
||||
|
||||
/* 评论审核中 toast(Figma 20852:80720) */
|
||||
.comment-review-toast.van-toast {
|
||||
background: #000 !important;
|
||||
border: 0.5px solid #f68804;
|
||||
border-radius: 99px;
|
||||
padding: 6px 10px;
|
||||
}
|
||||
.comment-review-toast .van-toast__text {
|
||||
color: #f68804;
|
||||
font-size: 12px;
|
||||
line-height: 18px;
|
||||
}
|
||||
|
After Width: | Height: | Size: 422 KiB |
|
After Width: | Height: | Size: 77 KiB |
|
After Width: | Height: | Size: 232 KiB |
|
After Width: | Height: | Size: 266 KiB |
|
After Width: | Height: | Size: 146 KiB |
|
After Width: | Height: | Size: 164 KiB |
|
After Width: | Height: | Size: 939 KiB |
|
After Width: | Height: | Size: 15 KiB |
@@ -0,0 +1,5 @@
|
||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g id="icons">
|
||||
<path id="Vector" d="M17.4164 18.604L17.4163 18.6036L17.0399 14.4551L17.011 14.1367L17.2207 13.8954L20.4041 10.2329C20.4041 10.2329 20.4042 10.2328 20.4042 10.2328C20.5962 10.0117 20.6035 9.81288 20.5632 9.68797C20.5232 9.5639 20.4031 9.4095 20.1208 9.34487L15.4091 8.26669L15.0949 8.1948L14.9308 7.91743L12.4578 3.73666C12.4578 3.73654 12.4577 3.73643 12.4576 3.73631C12.3072 3.48271 12.1236 3.418 11.9996 3.41797C11.8757 3.41794 11.6923 3.48238 11.5419 3.73619C11.5419 3.73627 11.5418 3.73634 11.5418 3.73642L9.06781 7.91752L8.90372 8.19482L8.58963 8.26669L3.87824 9.34479C3.87815 9.34481 3.87806 9.34483 3.87798 9.34485C3.87793 9.34486 3.87789 9.34487 3.87785 9.34488C3.59902 9.40896 3.47762 9.56294 3.43683 9.68865C3.39607 9.81425 3.40316 10.0125 3.5945 10.2328C3.59453 10.2328 3.59456 10.2329 3.5946 10.2329L6.77795 13.8954L6.98759 14.1365L6.95885 14.4548L6.52096 19.3036C6.49431 19.5986 6.6057 19.7626 6.70849 19.8378C6.81019 19.9122 6.9948 19.9669 7.26069 19.852L7.261 19.8518L11.7021 17.9349L11.9995 17.8065L12.2968 17.935L16.0958 19.5763L17.4164 18.604ZM17.4164 18.604C17.4627 19.1117 17.281 19.4116 17.0869 19.5538M17.4164 18.604L17.0869 19.5538M17.0869 19.5538C16.8941 19.6949 16.5589 19.7759 16.0963 19.5765L17.0869 19.5538Z" stroke="white" stroke-width="1.5"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
@@ -0,0 +1,5 @@
|
||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g id="icons">
|
||||
<path id="Vector" d="M15.7988 20.265C17.1304 20.8393 18.2955 19.9841 18.1632 18.5358L17.7868 14.3874L20.9703 10.7248C21.6656 9.92436 21.3203 8.85008 20.2881 8.61378L15.5764 7.53559L13.103 3.35426C12.5609 2.4396 11.4386 2.43881 10.8965 3.35426L8.42234 7.53559L3.71055 8.61378C2.68388 8.84929 2.33232 9.92358 3.02843 10.7248L6.21189 14.3874L5.774 19.2361C5.67833 20.2955 6.586 20.9606 7.55822 20.5404L11.9993 18.6235L15.7988 20.2642V20.265Z" fill="#F52C56"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 580 B |
@@ -0,0 +1,3 @@
|
||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M15.7987 20.265C17.1302 20.8393 18.2954 19.9841 18.1631 18.5358L17.7867 14.3874L20.9701 10.7248C21.6655 9.92436 21.3201 8.85008 20.288 8.61378L15.5762 7.53559L13.1029 3.35426C12.5608 2.4396 11.4384 2.43881 10.8963 3.35426L8.42221 7.53559L3.71043 8.61378C2.68376 8.84929 2.3322 9.92358 3.02831 10.7248L6.21177 14.3874L5.77387 19.2361C5.67821 20.2955 6.58588 20.9606 7.5581 20.5404L11.9992 18.6235L15.7987 20.2642V20.265Z" fill="#989898"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 550 B |
@@ -0,0 +1,3 @@
|
||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M15.7987 20.265C17.1302 20.8393 18.2954 19.9841 18.1631 18.5358L17.7867 14.3874L20.9701 10.7248C21.6655 9.92436 21.3201 8.85008 20.288 8.61378L15.5762 7.53559L13.1029 3.35426C12.5608 2.4396 11.4384 2.43881 10.8963 3.35426L8.42221 7.53559L3.71043 8.61378C2.68376 8.84929 2.3322 9.92358 3.02831 10.7248L6.21177 14.3874L5.77387 19.2361C5.67821 20.2955 6.58588 20.9606 7.5581 20.5404L11.9992 18.6235L15.7987 20.2642V20.265Z" fill="#F52C56"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 550 B |
@@ -0,0 +1,5 @@
|
||||
<svg width="50" height="24" viewBox="0 0 50 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M0 3C0 1.34315 1.34315 0 3 0H47C48.6569 0 50 1.34315 50 3V21C50 22.6569 48.6569 24 47 24H3C1.34315 24 0 22.6569 0 21V3Z" fill="#F68804"/>
|
||||
<path d="M18.6654 11.333H14.6654V7.33301H13.332V11.333H9.33203V12.6663H13.332V16.6663H14.6654V12.6663H18.6654V11.333Z" fill="white"/>
|
||||
<path d="M24.68 14.41C24.8267 14.35 24.9 14.27 24.9 14.17V8.69H25.6V14.15C26.0667 14.0167 26.5667 13.85 27.1 13.65V7.88H27.81V16.94H27.1V14.35C26.4533 14.5833 25.72 14.8067 24.9 15.02L24.68 14.41ZM29.85 10.06C29.7167 10.42 29.5933 10.72 29.48 10.96C29.8467 11.96 30.3133 12.86 30.88 13.66C31.4733 12.6533 31.8 11.4533 31.86 10.06H29.85ZM29.06 11.74C28.88 12.0267 28.68 12.3 28.46 12.56L28.01 12.01C28.83 10.9633 29.3867 9.56 29.68 7.8L30.4 7.92C30.3 8.44 30.19 8.91667 30.07 9.35H33.41V10.06H32.55C32.4767 11.7133 32.0733 13.1167 31.34 14.27C32.0067 15.1033 32.7733 15.8333 33.64 16.46L33.15 17.04C32.29 16.3933 31.54 15.6767 30.9 14.89C30.2467 15.7167 29.3967 16.41 28.35 16.97L27.94 16.32C28.9933 15.8 29.83 15.13 30.45 14.31C29.87 13.4767 29.4067 12.62 29.06 11.74ZM34.65 8.47H36.98V7.83H37.72V8.47H40.29V7.84H41.03V8.47H43.36V9.1H41.03V9.65H41.54V10.21H42.34C42.24 9.93667 42.13 9.68667 42.01 9.46L42.62 9.36C42.6867 9.52 42.74 9.65333 42.78 9.76C42.8333 9.92 42.8833 10.07 42.93 10.21H43.43V10.82H41.55C41.59 12.0933 41.67 13.07 41.79 13.75C41.81 13.87 41.83 13.98 41.85 14.08C42.13 13.34 42.32 12.4767 42.42 11.49L43.03 11.62C42.87 13.04 42.5567 14.1967 42.09 15.09C42.1567 15.3033 42.22 15.4733 42.28 15.6C42.46 15.9867 42.6033 16.18 42.71 16.18C42.8367 16.1667 42.95 15.7133 43.05 14.82L43.57 15.11C43.4033 16.35 43.1567 16.97 42.83 16.97C42.57 16.97 42.2867 16.7267 41.98 16.24C41.8933 16.1 41.8067 15.9233 41.72 15.71C41.34 16.23 40.9 16.64 40.4 16.94L40.06 16.4L40.23 16.29H37.61V11.41H40.46V11.99H39.58V12.86H40.45V14.76H39.58V15.71H40.46V16.12C40.8467 15.7933 41.1767 15.4 41.45 14.94C41.35 14.62 41.2733 14.3067 41.22 14C41.06 13.18 40.96 12.12 40.92 10.82H37.05V13.87C37.03 15.1633 36.8 16.2067 36.36 17L35.84 16.53C36.1933 15.9033 36.38 15.0167 36.4 13.87V13.76H35.6C35.56 15.0867 35.3167 16.02 34.87 16.56L34.37 16.17C34.77 15.73 34.99 14.9267 35.03 13.76H34.46V13.16H36.4V12.15H34.87V9.87H35.49V11.55H36.4V10.21H40.91V9.8H40.29V9.1H37.72V9.79H36.98V9.1H34.65V8.47ZM39.01 11.99H38.2V12.86H39.01V11.99ZM38.2 13.39V14.22H39.89V13.39H38.2ZM38.2 14.76V15.71H39.01V14.76H38.2Z" fill="white"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.4 KiB |
@@ -0,0 +1,5 @@
|
||||
<svg width="62" height="24" viewBox="0 0 62 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M0 3C0 1.34315 1.34315 0 3 0H59C60.6569 0 62 1.34315 62 3V21C62 22.6569 60.6569 24 59 24H3C1.34315 24 0 22.6569 0 21V3Z" fill="#3D3D3D"/>
|
||||
<path d="M24.33 12.36H18.13V15.36C18.13 15.7733 18.3333 15.98 18.74 15.98H23.86C24.0867 15.98 24.27 15.92 24.41 15.8C24.5967 15.6133 24.7133 14.9733 24.76 13.88L25.46 14.1C25.36 15.3333 25.2 16.08 24.98 16.34C24.76 16.5467 24.4533 16.66 24.06 16.68H18.54C17.7867 16.68 17.41 16.2867 17.41 15.5V10.23H18.13V11.67H23.6V9.06H16.87V8.36H24.33V12.36ZM26.68 14.41C26.8267 14.35 26.9 14.27 26.9 14.17V8.69H27.6V14.15C28.0667 14.0167 28.5667 13.85 29.1 13.65V7.88H29.81V16.94H29.1V14.35C28.4533 14.5833 27.72 14.8067 26.9 15.02L26.68 14.41ZM31.85 10.06C31.7167 10.42 31.5933 10.72 31.48 10.96C31.8467 11.96 32.3133 12.86 32.88 13.66C33.4733 12.6533 33.8 11.4533 33.86 10.06H31.85ZM31.06 11.74C30.88 12.0267 30.68 12.3 30.46 12.56L30.01 12.01C30.83 10.9633 31.3867 9.56 31.68 7.8L32.4 7.92C32.3 8.44 32.19 8.91667 32.07 9.35H35.41V10.06H34.55C34.4767 11.7133 34.0733 13.1167 33.34 14.27C34.0067 15.1033 34.7733 15.8333 35.64 16.46L35.15 17.04C34.29 16.3933 33.54 15.6767 32.9 14.89C32.2467 15.7167 31.3967 16.41 30.35 16.97L29.94 16.32C30.9933 15.8 31.83 15.13 32.45 14.31C31.87 13.4767 31.4067 12.62 31.06 11.74ZM36.65 8.47H38.98V7.83H39.72V8.47H42.29V7.84H43.03V8.47H45.36V9.1H43.03V9.65H43.54V10.21H44.34C44.24 9.93667 44.13 9.68667 44.01 9.46L44.62 9.36C44.6867 9.52 44.74 9.65333 44.78 9.76C44.8333 9.92 44.8833 10.07 44.93 10.21H45.43V10.82H43.55C43.59 12.0933 43.67 13.07 43.79 13.75C43.81 13.87 43.83 13.98 43.85 14.08C44.13 13.34 44.32 12.4767 44.42 11.49L45.03 11.62C44.87 13.04 44.5567 14.1967 44.09 15.09C44.1567 15.3033 44.22 15.4733 44.28 15.6C44.46 15.9867 44.6033 16.18 44.71 16.18C44.8367 16.1667 44.95 15.7133 45.05 14.82L45.57 15.11C45.4033 16.35 45.1567 16.97 44.83 16.97C44.57 16.97 44.2867 16.7267 43.98 16.24C43.8933 16.1 43.8067 15.9233 43.72 15.71C43.34 16.23 42.9 16.64 42.4 16.94L42.06 16.4L42.23 16.29H39.61V11.41H42.46V11.99H41.58V12.86H42.45V14.76H41.58V15.71H42.46V16.12C42.8467 15.7933 43.1767 15.4 43.45 14.94C43.35 14.62 43.2733 14.3067 43.22 14C43.06 13.18 42.96 12.12 42.92 10.82H39.05V13.87C39.03 15.1633 38.8 16.2067 38.36 17L37.84 16.53C38.1933 15.9033 38.38 15.0167 38.4 13.87V13.76H37.6C37.56 15.0867 37.3167 16.02 36.87 16.56L36.37 16.17C36.77 15.73 36.99 14.9267 37.03 13.76H36.46V13.16H38.4V12.15H36.87V9.87H37.49V11.55H38.4V10.21H42.91V9.8H42.29V9.1H39.72V9.79H38.98V9.1H36.65V8.47ZM41.01 11.99H40.2V12.86H41.01V11.99ZM40.2 13.39V14.22H41.89V13.39H40.2ZM40.2 14.76V15.71H41.01V14.76H40.2Z" fill="white"/>
|
||||
</svg>
|
||||
|
||||
|
After Width: | Height: | Size: 2.6 KiB |
@@ -0,0 +1,6 @@
|
||||
<svg width="16" height="14" viewBox="0 0 16 14" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g id="Heart">
|
||||
<path id="Stroke 1" fill-rule="evenodd" clip-rule="evenodd" d="M1.94802 7.29795C1.23268 5.06462 2.06935 2.28795 4.41402 1.53328C5.64735 1.13528 7.16935 1.46728 8.03402 2.65995C8.84935 1.42328 10.4153 1.13795 11.6473 1.53328C13.9913 2.28795 14.8327 5.06462 14.118 7.29795C13.0047 10.8379 9.12002 12.6819 8.03402 12.6819C6.94868 12.6819 3.09868 10.8793 1.94802 7.29795Z" stroke="#3D3D3D" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path id="Stroke 3" d="M10.5259 4.04297C11.3305 4.12564 11.8339 4.76364 11.8039 5.65764" stroke="#3D3D3D" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 751 B |
@@ -0,0 +1,5 @@
|
||||
<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g id="Heart">
|
||||
<path id="Heart_2" fill-rule="evenodd" clip-rule="evenodd" d="M9.56635 0.668075C9.98702 0.668075 10.407 0.727409 10.8064 0.861409C13.267 1.66141 14.1537 4.36141 13.413 6.72141C12.993 7.92741 12.3064 9.02808 11.407 9.92741C10.1197 11.1741 8.70702 12.2807 7.18635 13.2341L7.01969 13.3347L6.84635 13.2274C5.32035 12.2807 3.89969 11.1741 2.60035 9.92074C1.70702 9.02141 1.01969 7.92741 0.593019 6.72141C-0.160314 4.36141 0.726352 1.66141 3.21369 0.847409C3.40702 0.780742 3.60635 0.734075 3.80635 0.708075H3.88635C4.07369 0.680742 4.25969 0.668075 4.44635 0.668075H4.51969C4.93969 0.680742 5.34635 0.754075 5.74035 0.888075H5.77969C5.80635 0.900742 5.82635 0.914742 5.83968 0.927409C5.98702 0.974742 6.12635 1.02808 6.25969 1.10141L6.51302 1.21474C6.57423 1.24739 6.64294 1.29728 6.70233 1.34039C6.73995 1.36771 6.77383 1.3923 6.79969 1.40808C6.81057 1.41449 6.82162 1.42095 6.83277 1.42746C6.88993 1.46082 6.94948 1.49558 6.99968 1.53408C7.74035 0.968075 8.63968 0.661409 9.56635 0.668075ZM11.3397 5.46808C11.613 5.46074 11.8464 5.24141 11.8664 4.96074V4.88141C11.8864 3.94741 11.3204 3.10141 10.4597 2.77474C10.1864 2.68074 9.88635 2.82808 9.78635 3.10808C9.69302 3.38808 9.83969 3.69474 10.1197 3.79408C10.547 3.95408 10.833 4.37474 10.833 4.84074V4.86141C10.8204 5.01408 10.8664 5.16141 10.9597 5.27474C11.053 5.38808 11.193 5.45408 11.3397 5.46808Z" fill="#F52C56"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.5 KiB |
@@ -0,0 +1,6 @@
|
||||
<svg width="16" height="14" viewBox="0 0 16 14" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g id="Heart">
|
||||
<path id="Stroke 1" fill-rule="evenodd" clip-rule="evenodd" d="M1.94802 7.29795C1.23268 5.06462 2.06935 2.28795 4.41402 1.53328C5.64735 1.13528 7.16935 1.46728 8.03402 2.65995C8.84935 1.42328 10.4153 1.13795 11.6473 1.53328C13.9913 2.28795 14.8327 5.06462 14.118 7.29795C13.0047 10.8379 9.12002 12.6819 8.03402 12.6819C6.94868 12.6819 3.09868 10.8793 1.94802 7.29795Z" stroke="#3D3D3D" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path id="Stroke 3" d="M10.5259 4.04297C11.3305 4.12564 11.8339 4.76364 11.8039 5.65764" stroke="#3D3D3D" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 751 B |
@@ -0,0 +1,3 @@
|
||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M20.9879 9.79947C20.9879 9.82063 20.99 9.84564 20.99 9.87449C20.99 10.3785 20.8795 10.9074 20.6525 11.4922C20.5701 11.7134 20.4676 11.9384 20.3391 12.1827L20.335 12.1885L20.329 12.2039L20.2969 12.2578C20.2888 12.2693 20.2808 12.2847 20.2708 12.3058L20.2487 12.3462C20.2025 12.4347 20.1422 12.5463 20.0658 12.6636C19.2663 14.0024 17.9203 15.5124 16.0641 17.1512C15.1078 17.9957 14.0612 18.8343 12.9542 19.6403C12.9141 19.6711 12.8859 19.6903 12.8739 19.6999L12.8679 19.7057C12.6127 19.8961 12.2993 20 11.9859 20C11.6685 20 11.3652 19.8981 11.108 19.7076L11.106 19.7057C11.096 19.698 11.0719 19.6807 11.0397 19.6576C9.4808 18.5285 8.27946 17.4994 7.54821 16.8339C5.45692 14.9411 4.07679 13.2311 3.44598 11.7557C3.43192 11.7269 3.42388 11.7019 3.41585 11.6845L3.41384 11.6788C3.14665 11.0382 3.01205 10.4304 3.01205 9.87257C3.01205 9.85718 3.01205 9.83794 3.01406 9.81678C3.00603 9.74176 3 9.66098 3 9.56672C3 6.49675 5.46496 4 8.49442 4C9.23772 4 9.96094 4.15196 10.648 4.45396C11.1382 4.66939 11.5922 4.95023 11.998 5.29647C12.4038 4.95215 12.8558 4.66939 13.346 4.45396C14.035 4.15196 14.7603 4 15.5056 4C18.535 4 21 6.49675 21 9.56672C21 9.66098 20.994 9.74177 20.9879 9.79947Z" fill="#989898"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
@@ -0,0 +1,3 @@
|
||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M20.9879 9.79947C20.9879 9.82063 20.99 9.84564 20.99 9.87449C20.99 10.3785 20.8795 10.9074 20.6525 11.4922C20.5701 11.7134 20.4676 11.9384 20.3391 12.1827L20.335 12.1885L20.329 12.2039L20.2969 12.2578C20.2888 12.2693 20.2808 12.2847 20.2708 12.3058L20.2487 12.3462C20.2025 12.4347 20.1422 12.5463 20.0658 12.6636C19.2663 14.0024 17.9203 15.5124 16.0641 17.1512C15.1078 17.9957 14.0612 18.8343 12.9542 19.6403C12.9141 19.6711 12.8859 19.6903 12.8739 19.6999L12.8679 19.7057C12.6127 19.8961 12.2993 20 11.9859 20C11.6685 20 11.3652 19.8981 11.108 19.7076L11.106 19.7057C11.096 19.698 11.0719 19.6807 11.0397 19.6576C9.4808 18.5285 8.27946 17.4994 7.54821 16.8339C5.45692 14.9411 4.07679 13.2311 3.44598 11.7557C3.43192 11.7269 3.42388 11.7019 3.41585 11.6845L3.41384 11.6788C3.14665 11.0382 3.01205 10.4304 3.01205 9.87257C3.01205 9.85718 3.01205 9.83794 3.01406 9.81678C3.00603 9.74176 3 9.66098 3 9.56672C3 6.49675 5.46496 4 8.49442 4C9.23772 4 9.96094 4.15196 10.648 4.45396C11.1382 4.66939 11.5922 4.95023 11.998 5.29647C12.4038 4.95215 12.8558 4.66939 13.346 4.45396C14.035 4.15196 14.7603 4 15.5056 4C18.535 4 21 6.49675 21 9.56672C21 9.66098 20.994 9.74177 20.9879 9.79947Z" fill="#F52C56"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
@@ -0,0 +1,3 @@
|
||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M4 12C4 13.654 5.346 15 7 15C7.794 15 8.512 14.685 9.049 14.18L15.04 17.604C15.022 17.734 15 17.864 15 18C15 19.654 16.346 21 18 21C19.654 21 21 19.654 21 18C21 16.346 19.654 15 18 15C17.206 15 16.488 15.315 15.951 15.82L9.96 12.397C9.978 12.266 10 12.136 10 12C10 11.864 9.978 11.734 9.96 11.603L15.951 8.18C16.488 8.685 17.206 9 18 9C19.654 9 21 7.654 21 6C21 4.346 19.654 3 18 3C16.346 3 15 4.346 15 6C15 6.136 15.022 6.266 15.04 6.397L9.049 9.82C8.496 9.29468 7.76273 9.00123 7 9C5.346 9 4 10.346 4 12Z" fill="#989898"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 637 B |
@@ -0,0 +1,5 @@
|
||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g id="icons">
|
||||
<path id="Vector" d="M4 12C4 13.654 5.346 15 7 15C7.794 15 8.512 14.685 9.049 14.18L15.04 17.604C15.022 17.734 15 17.864 15 18C15 19.654 16.346 21 18 21C19.654 21 21 19.654 21 18C21 16.346 19.654 15 18 15C17.206 15 16.488 15.315 15.951 15.82L9.96 12.397C9.978 12.266 10 12.136 10 12C10 11.864 9.978 11.734 9.96 11.603L15.951 8.18C16.488 8.685 17.206 9 18 9C19.654 9 21 7.654 21 6C21 4.346 19.654 3 18 3C16.346 3 15 4.346 15 6C15 6.136 15.022 6.266 15.04 6.397L9.049 9.82C8.496 9.29468 7.76273 9.00123 7 9C5.346 9 4 10.346 4 12Z" fill="white"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 667 B |
@@ -0,0 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
|
||||
<path d="M2.5 3H19.5C19.5 3 21.5 4 21.5 6.5C21.5 9 19.5 10 19.5 10H2.5C2.5 10 4.5 9 4.5 6.5C4.5 4 2.5 3 2.5 3Z" fill="#F52C56"/>
|
||||
<path d="M21.5 14H4.5C4.5 14 2.5 15 2.5 17.5C2.5 20 4.5 21 4.5 21H21.5C21.5 21 19.5 20 19.5 17.5C19.5 15 21.5 14 21.5 14Z" fill="#F52C56"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 375 B |
@@ -0,0 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none">
|
||||
<path d="M1.875 2.25H14.625C14.625 2.25 16.125 3 16.125 4.875C16.125 6.75 14.625 7.5 14.625 7.5H1.875C1.875 7.5 3.375 6.75 3.375 4.875C3.375 3 1.875 2.25 1.875 2.25Z" stroke="white" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M16.125 10.5H3.375C3.375 10.5 1.875 11.25 1.875 13.125C1.875 15 3.375 15.75 3.375 15.75H16.125C16.125 15.75 14.625 15 14.625 13.125C14.625 11.25 16.125 10.5 16.125 10.5Z" stroke="white" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 581 B |
@@ -0,0 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none">
|
||||
<circle cx="8" cy="8" r="6" stroke="white" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M12 12.667L14 14.667" stroke="white" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 293 B |
@@ -0,0 +1,5 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
|
||||
<path d="M2 3.5H22M2 11.5H8M2 19.5H8" stroke="white" stroke-width="2" stroke-linecap="round"/>
|
||||
<path d="M20.5 13.5C20.5 14.7705 19.9735 15.918 19.1268 16.7362C18.3172 17.5186 17.2148 18 16 18C13.5147 18 11.5 15.9853 11.5 13.5C11.5 11.0147 13.5147 9 16 9C18.4853 9 20.5 11.0147 20.5 13.5Z" stroke="white" stroke-width="2" stroke-linejoin="round"/>
|
||||
<path d="M21 18.5L22 19.5" stroke="white" stroke-width="2" stroke-linecap="round"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 539 B |
@@ -0,0 +1,12 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none">
|
||||
<g clip-path="url(#clip0_5647_350889)">
|
||||
<path d="M15.9844 0.0078125H0V15.9922H15.9844V0.0078125Z" fill="white" fill-opacity="0.01"/>
|
||||
<path d="M1.32853 1.67586C1.15365 1.67586 0.985944 1.74533 0.862291 1.86898C0.738638 1.99263 0.66917 2.16034 0.66917 2.33522C0.66915 2.51102 0.738298 2.67977 0.861672 2.80502C0.985046 2.93026 1.15274 3.00194 1.32853 3.00456V1.67586ZM14.6555 3.00456C14.7429 3.00457 14.8295 2.98719 14.9102 2.95343C14.9908 2.91967 15.064 2.87021 15.1253 2.80792C15.1867 2.74563 15.235 2.67176 15.2676 2.59061C15.3001 2.50946 15.3162 2.42264 15.3149 2.33522C15.3162 2.24826 15.3001 2.16191 15.2674 2.0813C15.2348 2.0007 15.1862 1.92747 15.1247 1.86598C15.0633 1.80448 14.99 1.75596 14.9094 1.7233C14.8288 1.69064 14.7425 1.67451 14.6555 1.67586V3.00456ZM1.32853 3.00456H14.6555V1.67586H1.32853V3.00456ZM1.32853 7.00066C1.15274 7.00328 0.985046 7.07496 0.861672 7.2002C0.738298 7.32545 0.66915 7.4942 0.66917 7.67001C0.66917 7.84488 0.738638 8.01259 0.862291 8.13624C0.985944 8.25989 1.15365 8.32936 1.32853 8.32936V7.00066ZM4.99495 8.32936C5.08237 8.33069 5.16919 8.31461 5.25034 8.28207C5.33149 8.24953 5.40536 8.20117 5.46765 8.13981C5.52994 8.07845 5.5794 8.00531 5.61316 7.92466C5.64692 7.844 5.6643 7.75744 5.66429 7.67001C5.66429 7.49248 5.59377 7.32223 5.46824 7.19671C5.34272 7.07118 5.17247 7.00066 4.99495 7.00066V8.32936ZM1.32853 8.32936H4.99495V7.00066H1.32853V8.32936ZM1.32853 12.3255C1.151 12.3255 0.980753 12.396 0.855227 12.5215C0.7297 12.647 0.65918 12.8173 0.65918 12.9948C0.65918 13.1723 0.7297 13.3426 0.855227 13.4681C0.980753 13.5936 1.151 13.6642 1.32853 13.6642V12.3255ZM4.99495 13.6642C5.17247 13.6642 5.34272 13.5936 5.46824 13.4681C5.59377 13.3426 5.66429 13.1723 5.66429 12.9948C5.66429 12.8173 5.59377 12.647 5.46824 12.5215C5.34272 12.396 5.17247 12.3255 4.99495 12.3255V13.6642ZM1.32853 13.6642H4.99495V12.3255H1.32853V13.6642ZM10.4896 5.00261C9.79802 5.00261 9.12199 5.20768 8.54698 5.59189C7.97197 5.9761 7.5238 6.52219 7.25916 7.16111C6.99451 7.80003 6.92526 8.50308 7.06018 9.18135C7.1951 9.85962 7.52811 10.4826 8.01712 10.9717C8.50613 11.4607 9.12916 11.7937 9.80743 11.9286C10.4857 12.0635 11.1887 11.9943 11.8277 11.7296C12.4666 11.465 13.0127 11.0168 13.3969 10.4418C13.7811 9.86678 13.9862 9.19076 13.9862 8.4992C13.9862 7.57184 13.6178 6.68247 12.962 6.02674C12.3063 5.371 11.4169 5.00261 10.4896 5.00261ZM10.4896 10.6671C10.0608 10.6671 9.64167 10.5399 9.28517 10.3017C8.92866 10.0635 8.6508 9.72494 8.48672 9.32881C8.32263 8.93268 8.2797 8.49679 8.36335 8.07626C8.447 7.65574 8.65347 7.26945 8.95665 6.96627C9.25984 6.66309 9.64612 6.45662 10.0666 6.37297C10.4872 6.28932 10.9231 6.33225 11.3192 6.49633C11.7153 6.66042 12.0539 6.93828 12.2921 7.29478C12.5303 7.65129 12.6575 8.07043 12.6575 8.4992C12.6575 9.07415 12.4291 9.62556 12.0225 10.0321C11.6159 10.4387 11.0645 10.6671 10.4896 10.6671Z" fill="#333333"/>
|
||||
<path d="M12.7974 10.1965C12.7357 10.1309 12.6617 10.0781 12.5797 10.0411C12.4976 10.0041 12.409 9.98358 12.319 9.9808C12.2291 9.97801 12.1394 9.99298 12.0552 10.0248C11.971 10.0567 11.8939 10.1048 11.8283 10.1665C11.7627 10.2282 11.7099 10.3021 11.6729 10.3842C11.6359 10.4663 11.6154 10.5548 11.6126 10.6448C11.6098 10.7348 11.6248 10.8245 11.6567 10.9087C11.6885 10.9929 11.7367 11.07 11.7983 11.1356L12.7974 10.1965ZM14.176 13.4833C14.2396 13.5523 14.3169 13.6074 14.4028 13.6451C14.4888 13.6827 14.5817 13.7022 14.6755 13.7022C14.7694 13.7022 14.8623 13.6827 14.9482 13.6451C15.0342 13.6074 15.1114 13.5523 15.175 13.4833C15.2373 13.4219 15.2867 13.3488 15.3204 13.2682C15.3541 13.1876 15.3715 13.1011 15.3715 13.0137C15.3715 12.9264 15.3541 12.8398 15.3204 12.7592C15.2867 12.6786 15.2373 12.6055 15.175 12.5442L14.176 13.4833ZM11.8483 11.1356L14.176 13.4833L15.175 12.5442L12.7974 10.1965L11.7983 11.1356H11.8483Z" fill="#333333"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_5647_350889">
|
||||
<rect width="16" height="16" fill="white"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.0 KiB |
@@ -0,0 +1,6 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none">
|
||||
<path d="M4.66665 6.99967C5.95531 6.99967 6.99998 5.95501 6.99998 4.66634C6.99998 3.37768 5.95531 2.33301 4.66665 2.33301C3.37798 2.33301 2.33331 3.37768 2.33331 4.66634C2.33331 5.95501 3.37798 6.99967 4.66665 6.99967Z" stroke="white" stroke-opacity="0.8"/>
|
||||
<path d="M4.66665 13.6667C5.95531 13.6667 6.99998 12.622 6.99998 11.3333C6.99998 10.0447 5.95531 9 4.66665 9C3.37798 9 2.33331 10.0447 2.33331 11.3333C2.33331 12.622 3.37798 13.6667 4.66665 13.6667Z" stroke="white" stroke-opacity="0.8"/>
|
||||
<path d="M11.3333 6.99967C12.622 6.99967 13.6667 5.95501 13.6667 4.66634C13.6667 3.37768 12.622 2.33301 11.3333 2.33301C10.0447 2.33301 9 3.37768 9 4.66634C9 5.95501 10.0447 6.99967 11.3333 6.99967Z" stroke="white" stroke-opacity="0.8"/>
|
||||
<path d="M11.3333 13.6667C12.622 13.6667 13.6667 12.622 13.6667 11.3333C13.6667 10.0447 12.622 9 11.3333 9C10.0447 9 9 10.0447 9 11.3333C9 12.622 10.0447 13.6667 11.3333 13.6667Z" stroke="white" stroke-opacity="0.8"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
@@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none">
|
||||
<path d="M9.33333 12.3021L10.8465 13.3127C11.2964 13.6133 11.898 13.2809 11.8832 12.74L11.8108 10.1085C11.8066 9.95518 11.8553 9.80513 11.9488 9.6836L13.7472 7.34626C14.0329 6.97501 13.8567 6.4327 13.4074 6.30026L10.5786 5.46638C10.4315 5.42302 10.3039 5.33029 10.2172 5.2038L8.54996 2.77114C8.28515 2.38476 7.71493 2.38476 7.45013 2.77114L5.78292 5.2038C5.69624 5.33029 5.56859 5.42302 5.42151 5.46638L2.59272 6.30026C2.14342 6.4327 1.96721 6.97501 2.25285 7.34626L4.05125 9.6836C4.14476 9.80513 4.19352 9.95518 4.1893 10.1085L4.12344 12.5031C4.10745 13.0846 4.79182 13.4062 5.22929 13.0228L8.33333 10.3021" stroke="white" stroke-opacity="0.6" stroke-linecap="round"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 774 B |
@@ -0,0 +1,6 @@
|
||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g id="内容">
|
||||
<rect id="Rectangle 3541" x="2.22217" y="2.22266" width="11.5556" height="11.5556" rx="2.66667" stroke="white" stroke-opacity="0.6"/>
|
||||
<path id="Vector 409" d="M4.88867 4.89062V11.1128M7.11089 4.89062V11.1128M9.77756 4.89062L11.1109 11.1128" stroke="white" stroke-opacity="0.6" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 480 B |
@@ -0,0 +1,5 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
|
||||
<path d="M8.47227 17.055C5.68086 17.055 3.41211 14.7839 3.41211 11.9949C3.41211 9.20345 5.6832 6.9347 8.47227 6.9347C8.52617 6.9347 8.58008 6.93001 8.63164 6.92064V8.28704C8.63164 8.57533 8.95977 8.74173 9.1918 8.57064L12.2996 6.28314C12.4895 6.14251 12.4895 5.85658 12.2996 5.71595L9.1918 3.42845C8.95977 3.25736 8.63164 3.42376 8.63164 3.71204V5.07376C8.58008 5.06439 8.52617 5.0597 8.47227 5.0597C7.53945 5.0597 6.63242 5.24486 5.77695 5.60814C4.95195 5.9597 4.21133 6.45892 3.57383 7.09642C2.93633 7.73392 2.43477 8.47454 2.08555 9.29954C1.72227 10.155 1.53711 11.062 1.53711 11.9949C1.53711 12.9277 1.72227 13.8347 2.08555 14.6902C2.43711 15.5152 2.93633 16.2558 3.57383 16.8933C4.21133 17.5308 4.95195 18.0324 5.77695 18.3816C6.63242 18.7449 7.53945 18.93 8.47227 18.93C8.99023 18.93 9.40977 18.5105 9.40977 17.9925C9.40977 17.4745 8.99023 17.055 8.47227 17.055ZM21.9887 9.29954C21.6371 8.47454 21.1379 7.73392 20.5004 7.09642C19.8629 6.45892 19.1223 5.95736 18.2973 5.60814C17.4418 5.24486 16.5348 5.0597 15.602 5.0597C15.084 5.0597 14.6645 5.47923 14.6645 5.9972C14.6645 6.51517 15.084 6.9347 15.602 6.9347C18.3934 6.9347 20.6621 9.20579 20.6621 11.9949C20.6621 14.7863 18.391 17.055 15.602 17.055C15.5059 17.055 15.4121 17.0691 15.3254 17.0972V15.6722C15.3254 15.3839 14.9973 15.2175 14.7652 15.3886L11.6574 17.6761C11.4676 17.8167 11.4676 18.1027 11.6574 18.2433L14.7629 20.5285C14.9949 20.6995 15.323 20.5331 15.323 20.2449V18.8878C15.4098 18.9159 15.5035 18.93 15.5996 18.93C16.5324 18.93 17.4395 18.7449 18.2949 18.3816C19.1199 18.03 19.8605 17.5308 20.498 16.8933C21.1355 16.2558 21.6371 15.5152 21.9863 14.6902C22.3496 13.8347 22.5348 12.9277 22.5348 11.9949C22.5348 11.062 22.352 10.155 21.9887 9.29954Z" fill="white"/>
|
||||
<rect x="8.88867" y="9.77734" width="7.11111" height="1.77778" rx="0.888889" fill="white"/>
|
||||
<rect x="8.88867" y="12.4453" width="7.11111" height="1.77778" rx="0.888889" fill="white"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.0 KiB |
@@ -0,0 +1,3 @@
|
||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M21.001 11.055V14.0665C21.001 16.839 18.7625 19.0865 16.001 19.0865H9V20.884C8.99996 20.9749 8.97513 21.0641 8.9282 21.1419C8.88126 21.2198 8.81399 21.2834 8.73362 21.3258C8.65325 21.3683 8.56282 21.3881 8.47205 21.383C8.38129 21.3779 8.29363 21.3482 8.2185 21.297L4.1035 18.4945C4.03636 18.4487 3.98138 18.3873 3.94332 18.3155C3.90526 18.2438 3.88526 18.1638 3.88507 18.0825C3.88487 18.0013 3.90447 17.9212 3.94219 17.8492C3.9799 17.7773 4.03458 17.7156 4.1015 17.6695L8.2165 14.8375C8.29161 14.7858 8.37943 14.7556 8.47045 14.7502C8.56148 14.7448 8.65225 14.7644 8.73293 14.8069C8.81362 14.8494 8.88115 14.9131 8.92822 14.9912C8.9753 15.0693 9.00012 15.1588 9 15.25V17.079H16.001C17.658 17.079 19.001 15.7305 19.001 14.067V11.055H21.001ZM13.025 9V14.832H11.595V10.54L10.5 11.426V9.886L11.595 9H13.025ZM15.501 2.5C15.6014 2.49992 15.6995 2.53006 15.7825 2.5865L19.8975 5.389C19.9646 5.43475 20.0196 5.49618 20.0577 5.56796C20.0957 5.63975 20.1157 5.71972 20.1159 5.80097C20.1161 5.88222 20.0965 5.9623 20.0588 6.03426C20.0211 6.10623 19.9664 6.16792 19.8995 6.214L15.7845 9.046C15.7094 9.09768 15.6217 9.12785 15.5307 9.13326C15.4397 9.13867 15.349 9.11911 15.2683 9.07669C15.1876 9.03427 15.1201 8.9706 15.073 8.89258C15.0259 8.81456 15.001 8.72514 15.001 8.634V6.805H8C6.343 6.805 5 8.154 5 9.817V12.8295H3V9.817C3 7.045 5.2385 4.797 8 4.797H15.001V3C15.001 2.93434 15.0139 2.86932 15.0391 2.80866C15.0642 2.748 15.101 2.69288 15.1474 2.64645C15.1939 2.60002 15.249 2.56319 15.3097 2.53806C15.3703 2.51293 15.4353 2.5 15.501 2.5Z" fill="white"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
@@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="21" height="20" viewBox="0 0 21 20" fill="none">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M0.5 10.0058C0.5 4.48625 4.98842 0 10.5 0C16.0116 0 20.5 4.48625 20.5 10.0058C20.5 15.5137 16.0116 20 10.5 20C4.98842 20 0.5 15.5137 0.5 10.0058ZM14.168 11.0178C14.2741 10.9117 14.4093 10.7477 14.4382 10.7091C14.5927 10.5065 14.6699 10.2557 14.6699 10.0058C14.6699 9.72504 14.583 9.46454 14.4189 9.25229C14.4055 9.23885 14.3791 9.21019 14.3448 9.17284C14.2806 9.10296 14.1885 9.00264 14.1004 8.91462C13.3089 8.06561 11.2432 6.67631 10.1622 6.25181C9.99807 6.18524 9.58301 6.03956 9.361 6.02991C9.14865 6.02991 8.94595 6.07815 8.7529 6.17463C8.51158 6.3097 8.31853 6.52195 8.21236 6.77279C8.14479 6.94645 8.03861 7.46744 8.03861 7.47709C7.93243 8.04631 7.87452 8.9725 7.87452 9.99518C7.87452 10.9706 7.93243 11.8572 8.01931 12.4361C8.02169 12.4385 8.03 12.4799 8.0429 12.5442C8.08211 12.7397 8.1638 13.1471 8.25097 13.314C8.46332 13.7192 8.87838 13.9701 9.32239 13.9701H9.361C9.65058 13.9604 10.2587 13.7096 10.2587 13.7C11.2819 13.2754 13.2992 11.9537 14.11 11.0757L14.168 11.0178Z" fill="white"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="25" height="24" viewBox="0 0 25 24" fill="none">
|
||||
<path d="M9.88955 13.3524C9.25341 12.9622 9.25341 12.0378 9.88955 11.6476L18.9771 6.07298C19.6434 5.66424 20.5 6.14369 20.5 6.92538L20.5 18.0746C20.5 18.8563 19.6434 19.3358 18.9771 18.927L9.88955 13.3524Z" fill="white"/>
|
||||
<rect x="4.5" y="5" width="2" height="14" rx="1" fill="white"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 392 B |
@@ -0,0 +1,5 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none">
|
||||
<path d="M13.5 13.5V4.5" stroke="white" stroke-width="1.5" stroke-linecap="round"/>
|
||||
<path d="M9 13.5L9 9.375" stroke="white" stroke-width="1.5" stroke-linecap="round"/>
|
||||
<path d="M4.5 13.5V8.25" stroke="white" stroke-width="1.5" stroke-linecap="round"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 361 B |
@@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
|
||||
<path d="M11.0625 4.9275C9.55987 5.09788 8.13469 5.6845 6.9475 6.62125L7.975 7.65C8.1406 7.82772 8.23075 8.06278 8.22647 8.30565C8.22218 8.54853 8.12379 8.78026 7.95203 8.95203C7.78026 9.12379 7.54853 9.22218 7.30565 9.22647C7.06278 9.23075 6.82772 9.1406 6.65 8.975L5.6175 7.94375C4.73997 9.04444 4.16902 10.3575 3.9625 11.75H6.0625C6.31114 11.75 6.5496 11.8488 6.72541 12.0246C6.90123 12.2004 7 12.4389 7 12.6875C7 12.9361 6.90123 13.1746 6.72541 13.3504C6.5496 13.5262 6.31114 13.625 6.0625 13.625H3.90625C4.10087 15.6311 5.01775 17.4982 6.48625 18.8787C6.66337 19.0498 6.76606 19.2837 6.77214 19.5299C6.77823 19.7761 6.68721 20.0148 6.51875 20.1944C6.3503 20.374 6.11794 20.4801 5.87188 20.4898C5.62583 20.4995 5.38583 20.412 5.20375 20.2462C3.27875 18.4425 2 15.7825 2 12.9287C2 7.43875 6.48375 3 12 3C17.5163 3 22 7.4375 22 12.9287C21.9975 14.2988 21.7163 15.6541 21.1735 16.9121C20.6307 18.1701 19.8376 19.3045 18.8425 20.2462C18.6604 20.412 18.4204 20.4995 18.1744 20.4898C17.9283 20.4801 17.6959 20.374 17.5275 20.1944C17.359 20.0148 17.268 19.7761 17.2741 19.5299C17.2802 19.2837 17.3829 19.0498 17.56 18.8787C19.0183 17.4959 19.92 15.6271 20.095 13.625H17.9375C17.6889 13.625 17.4504 13.5262 17.2746 13.3504C17.0988 13.1746 17 12.9361 17 12.6875C17 12.4389 17.0988 12.2004 17.2746 12.0246C17.4504 11.8488 17.6889 11.75 17.9375 11.75H20.0375C19.5075 8.1675 16.5963 5.34375 12.9375 4.9275V6.4375C12.9375 6.68614 12.8387 6.9246 12.6629 7.10041C12.4871 7.27623 12.2486 7.375 12 7.375C11.7514 7.375 11.5129 7.27623 11.3371 7.10041C11.1613 6.9246 11.0625 6.68614 11.0625 6.4375V4.9275ZM16.3113 7.75875C16.4248 7.66854 16.5663 7.62064 16.7113 7.62327C16.8563 7.62591 16.9959 7.67891 17.1062 7.77319C17.2164 7.86747 17.2904 7.99715 17.3155 8.14002C17.3406 8.28289 17.3153 8.43004 17.2437 8.55625L17.1062 8.80125C16.6036 9.68888 16.0977 10.5747 15.5888 11.4587C15.1818 12.1662 14.7693 12.8704 14.3512 13.5712C14.1946 13.8349 14.0346 14.0966 13.8713 14.3562C13.7462 14.5525 13.6238 14.7387 13.5338 14.8437C13.2108 15.222 12.7509 15.4565 12.2551 15.4957C11.7593 15.5348 11.2683 15.3754 10.89 15.0525C10.5117 14.7296 10.2772 14.2697 10.2381 13.7739C10.1989 13.2781 10.3583 12.787 10.6812 12.4087C10.7712 12.3038 10.935 12.1525 11.11 11.9987C11.2975 11.8325 11.5387 11.6287 11.81 11.4C12.355 10.945 13.0375 10.3875 13.7025 9.85C14.4957 9.20837 15.2915 8.57003 16.09 7.935L16.3113 7.76V7.75875Z" fill="white"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.5 KiB |
@@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="25" height="24" viewBox="0 0 25 24" fill="none">
|
||||
<path d="M10.5 4C10.2167 4 9.97933 3.904 9.788 3.712C9.596 3.52067 9.5 3.28333 9.5 3C9.5 2.71667 9.596 2.479 9.788 2.287C9.97933 2.09567 10.2167 2 10.5 2H14.5C14.7833 2 15.021 2.09567 15.213 2.287C15.4043 2.479 15.5 2.71667 15.5 3C15.5 3.28333 15.4043 3.52067 15.213 3.712C15.021 3.904 14.7833 4 14.5 4H10.5ZM12.5 15C12.7833 15 13.021 14.904 13.213 14.712C13.4043 14.5207 13.5 14.2833 13.5 14V10C13.5 9.71667 13.4043 9.479 13.213 9.287C13.021 9.09567 12.7833 9 12.5 9C12.2167 9 11.9793 9.09567 11.788 9.287C11.596 9.479 11.5 9.71667 11.5 10V14C11.5 14.2833 11.596 14.5207 11.788 14.712C11.9793 14.904 12.2167 15 12.5 15ZM12.5 23C11.2667 23 10.104 22.7627 9.012 22.288C7.92067 21.8127 6.96667 21.1667 6.15 20.35C5.33333 19.5333 4.68733 18.5793 4.212 17.488C3.73733 16.396 3.5 15.2333 3.5 14C3.5 12.7667 3.73733 11.604 4.212 10.512C4.68733 9.42067 5.33333 8.46667 6.15 7.65C6.96667 6.83333 7.92067 6.18767 9.012 5.713C10.104 5.23767 11.2667 5 12.5 5C13.5333 5 14.525 5.16667 15.475 5.5C16.425 5.83333 17.3167 6.31667 18.15 6.95L18.875 6.225C19.0583 6.04167 19.2833 5.95 19.55 5.95C19.8167 5.95 20.05 6.05 20.25 6.25C20.4333 6.43333 20.525 6.66667 20.525 6.95C20.525 7.23333 20.4333 7.46667 20.25 7.65L19.55 8.35C20.1833 9.18333 20.6667 10.075 21 11.025C21.3333 11.975 21.5 12.9667 21.5 14C21.5 15.2333 21.2627 16.396 20.788 17.488C20.3127 18.5793 19.6667 19.5333 18.85 20.35C18.0333 21.1667 17.0793 21.8127 15.988 22.288C14.896 22.7627 13.7333 23 12.5 23ZM12.5 21C14.4333 21 16.0833 20.3167 17.45 18.95C18.8167 17.5833 19.5 15.9333 19.5 14C19.5 12.0667 18.8167 10.4167 17.45 9.05C16.0833 7.68333 14.4333 7 12.5 7C10.5667 7 8.91667 7.68333 7.55 9.05C6.18333 10.4167 5.5 12.0667 5.5 14C5.5 15.9333 6.18333 17.5833 7.55 18.95C8.91667 20.3167 10.5667 21 12.5 21Z" fill="white"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.8 KiB |
@@ -0,0 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="25" height="24" viewBox="0 0 25 24" fill="none">
|
||||
<rect x="5.2998" y="3.59985" width="4.8" height="16.8" rx="2.4" fill="white"/>
|
||||
<rect x="14.8994" y="3.59985" width="4.8" height="16.8" rx="2.4" fill="white"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 265 B |
|
After Width: | Height: | Size: 16 KiB |
@@ -0,0 +1,6 @@
|
||||
<svg width="18" height="21" viewBox="0 0 18 21" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g id="Group 4">
|
||||
<path id="Vector" d="M17.1178 11.9151C16.7861 11.9151 16.5197 12.1844 16.4932 12.5151C16.3911 13.7885 15.9653 15.0185 15.2519 16.0862C14.4269 17.3208 13.2544 18.2831 11.8825 18.8514C10.5106 19.4196 9.00105 19.5683 7.54468 19.2786C6.0883 18.9889 4.75054 18.2739 3.70055 17.2239C2.65057 16.1739 1.93552 14.8361 1.64583 13.3798C1.35614 11.9234 1.50482 10.4138 2.07306 9.04195C2.64131 7.67008 3.60361 6.49752 4.83826 5.67255C6.07291 4.84758 7.52447 4.40726 9.00938 4.40726H11.4119C11.7436 4.40726 12.0125 4.67617 12.0125 5.00788V6.71113C12.0125 7.24623 12.6595 7.51421 13.0378 7.13583L16.0925 4.08118C16.327 3.84663 16.327 3.46633 16.0925 3.23177L13.0378 0.177123C12.6595 -0.201249 12.0125 0.066729 12.0125 0.601829V2.30507C12.0125 2.63679 11.7436 2.9057 11.4119 2.9057H9.00938C7.22749 2.9057 5.48562 3.43409 4.00404 4.42405C2.52245 5.41401 1.3677 6.82108 0.685802 8.46733C0.00390364 10.1136 -0.174512 11.9251 0.173117 13.6727C0.520745 15.4204 1.3788 17.0257 2.63879 18.2857C3.89877 19.5456 5.50409 20.4037 7.25174 20.7513C8.99938 21.099 10.8109 20.9205 12.4571 20.2386C14.1034 19.5567 15.5104 18.402 16.5004 16.9204C17.3789 15.6057 17.8939 14.086 17.9987 12.5153C18.0208 12.1843 17.7498 11.9151 17.4181 11.9151H17.1178Z" fill="white"/>
|
||||
<path id="Vector_2" d="M11.7345 15.0153C11.4028 15.0234 11.0737 14.954 10.7735 14.8126C10.507 14.6773 10.2776 14.4788 10.1053 14.2345C9.91653 13.9494 9.78401 13.6309 9.71493 13.296C9.62621 12.8815 9.58341 12.4586 9.58729 12.0347C9.58425 11.6109 9.62704 11.188 9.71493 10.7734C9.7854 10.439 9.91781 10.1207 10.1053 9.83492C10.2776 9.59059 10.507 9.39211 10.7735 9.25682C11.0737 9.11539 11.4028 9.04598 11.7345 9.05411C12.0464 9.03038 12.3593 9.08692 12.6431 9.21834C12.927 9.34977 13.1725 9.5517 13.3562 9.80489C13.7434 10.4707 13.9261 11.2357 13.8818 12.0047C13.9261 12.7736 13.7434 13.5386 13.3562 14.2045C13.1795 14.4687 12.937 14.6824 12.6527 14.8246C12.3684 14.9667 12.052 15.0325 11.7345 15.0153ZM11.7345 14.0994C11.8859 14.1084 12.0367 14.0744 12.1696 14.0013C12.3024 13.9283 12.4119 13.8191 12.4853 13.6864C12.6647 13.3353 12.7598 12.9471 12.7631 12.5527V11.5167C12.7793 11.1294 12.7048 10.7438 12.5454 10.3905C12.4614 10.2619 12.3468 10.1563 12.2118 10.0832C12.0767 10.0101 11.9256 9.97179 11.7721 9.97179C11.6185 9.97179 11.4674 10.0101 11.3324 10.0832C11.1974 10.1563 11.0827 10.2619 10.9988 10.3905C10.8394 10.7438 10.7648 11.1294 10.781 11.5167V12.5527C10.7656 12.9423 10.8401 13.3303 10.9988 13.6864C11.0704 13.8173 11.1773 13.9254 11.3074 13.9984C11.4375 14.0714 11.5855 14.1064 11.7345 14.0994ZM4.9775 14.9177V14.0318H6.47906V10.1352L5.08261 10.886L4.66968 10.0902L6.41149 9.11417H7.50763V13.9942H8.84402V14.9177H4.9775Z" fill="white"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.7 KiB |
@@ -0,0 +1,6 @@
|
||||
<svg width="18" height="21" viewBox="0 0 18 21" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g id="Group 4">
|
||||
<path id="Vector" d="M0.882189 11.9151C1.21391 11.9151 1.48031 12.1844 1.50682 12.5151C1.60891 13.7885 2.03468 15.0185 2.74811 16.0862C3.57308 17.3208 4.74564 18.2831 6.11751 18.8514C7.48938 19.4196 8.99895 19.5683 10.4553 19.2786C11.9117 18.9889 13.2495 18.2739 14.2994 17.2239C15.3494 16.1739 16.0645 14.8361 16.3542 13.3798C16.6439 11.9234 16.4952 10.4138 15.9269 9.04195C15.3587 7.67008 14.3964 6.49752 13.1617 5.67255C11.9271 4.84758 10.4755 4.40726 8.99062 4.40726H6.58812C6.25641 4.40726 5.9875 4.67617 5.9875 5.00788V6.71113C5.9875 7.24623 5.34054 7.51421 4.96217 7.13583L1.90752 4.08118C1.67296 3.84663 1.67296 3.46633 1.90752 3.23177L4.96217 0.177123C5.34054 -0.201249 5.9875 0.066729 5.9875 0.601829V2.30507C5.9875 2.63679 6.25641 2.9057 6.58812 2.9057H8.99062C10.7725 2.9057 12.5144 3.43409 13.996 4.42405C15.4775 5.41401 16.6323 6.82108 17.3142 8.46733C17.9961 10.1136 18.1745 11.9251 17.8269 13.6727C17.4793 15.4204 16.6212 17.0257 15.3612 18.2857C14.1012 19.5456 12.4959 20.4037 10.7483 20.7513C9.00062 21.099 7.18913 20.9205 5.54289 20.2386C3.89664 19.5567 2.48957 18.402 1.49961 16.9204C0.621136 15.6057 0.106124 14.086 0.00126213 12.5153C-0.0208342 12.1843 0.25016 11.9151 0.581876 11.9151H0.882189Z" fill="white"/>
|
||||
<path id="Vector_2" d="M11.7343 15.0153C11.4025 15.0234 11.0735 14.954 10.7733 14.8126C10.5067 14.6773 10.2773 14.4788 10.1051 14.2345C9.91628 13.9494 9.78377 13.6309 9.71468 13.296C9.62597 12.8815 9.58316 12.4586 9.58705 12.0347C9.584 11.6109 9.62679 11.188 9.71468 10.7734C9.78516 10.439 9.91757 10.1207 10.1051 9.83492C10.2773 9.59059 10.5067 9.39211 10.7733 9.25682C11.0735 9.11539 11.4025 9.04598 11.7343 9.05411C12.0462 9.03038 12.359 9.08692 12.6429 9.21834C12.9268 9.34977 13.1723 9.5517 13.356 9.80489C13.7431 10.4707 13.9259 11.2357 13.8815 12.0047C13.9259 12.7736 13.7431 13.5386 13.356 14.2045C13.1792 14.4687 12.9368 14.6824 12.6525 14.8246C12.3681 14.9667 12.0517 15.0325 11.7343 15.0153ZM11.7343 14.0994C11.8856 14.1084 12.0365 14.0744 12.1693 14.0013C12.3022 13.9283 12.4116 13.8191 12.4851 13.6864C12.6645 13.3353 12.7596 12.9471 12.7629 12.5527V11.5167C12.7791 11.1294 12.7045 10.7438 12.5451 10.3905C12.4612 10.2619 12.3465 10.1563 12.2115 10.0832C12.0765 10.0101 11.9254 9.97179 11.7718 9.97179C11.6183 9.97179 11.4672 10.0101 11.3321 10.0832C11.1971 10.1563 11.0824 10.2619 10.9985 10.3905C10.8391 10.7438 10.7646 11.1294 10.7808 11.5167V12.5527C10.7653 12.9423 10.8398 13.3303 10.9985 13.6864C11.0701 13.8173 11.1771 13.9254 11.3072 13.9984C11.4373 14.0714 11.5853 14.1064 11.7343 14.0994ZM4.97725 14.9177V14.0318H6.47882V10.1352L5.08236 10.886L4.66943 10.0902L6.41125 9.11417H7.50739V13.9942H8.84378V14.9177H4.97725Z" fill="white"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.7 KiB |
@@ -0,0 +1,6 @@
|
||||
<svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g id="icons">
|
||||
<path id="Vector" d="M16.55 6.3C17.9 6.3 18.95 5.1 18.8 3.75C18.65 2.4 17.6 1.5 16.25 1.5C15.05 1.5 14 2.7 14 3.9C14 5.25 15.05 6.3 16.55 6.3C16.4 6.3 16.4 6.3 16.55 6.3Z" fill="white"/>
|
||||
<path id="Vector_2" d="M20.6 5.69992C19.55 7.49992 17.3 7.94992 15.5 6.89992C15.35 6.89992 15.35 6.74992 15.2 6.74992L14.3 6.14992C11.45 4.19992 7.69996 4.94992 5.74996 7.79992C5.74996 7.94992 5.59996 7.94992 5.59996 8.09992C4.69996 9.29992 6.79996 10.6499 7.69996 9.29992C8.59996 7.79992 10.25 7.19992 11.9 7.79992C11.15 9.14992 10.4 10.6499 9.34996 12.5999C8.29996 14.5499 6.19996 16.0499 3.94996 14.8499C3.49996 14.3999 2.59996 14.5499 2.29996 15.1499C1.99996 15.7499 1.99996 16.4999 2.59996 16.9499C2.59996 16.9499 2.74996 16.9499 2.74996 17.0999C5.44996 18.5999 8.89996 17.9999 10.7 15.5999L10.85 15.7499C12.2 16.3499 13.55 17.0999 14.75 17.9999C15.65 19.1999 16.25 20.5499 16.85 22.0499C17.15 22.6499 17.9 22.9499 18.5 22.6499C19.1 22.3499 19.4 21.5999 19.1 20.9999C18.5 19.3499 17.6 17.6999 16.55 16.3499C15.5 15.5999 14.45 14.8499 13.4 14.2499C14.15 12.7499 14.9 11.3999 15.8 9.89992C18.5 10.4999 21.05 9.74992 22.55 7.34992C23 6.74992 23.6 4.79992 22.25 4.49992C21.2 4.34992 20.6 5.69992 20.6 5.69992Z" fill="white"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
@@ -0,0 +1,5 @@
|
||||
<svg width="23" height="22" viewBox="0 0 23 22" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M7 13.5C7 12.9477 7.44772 12.5 8 12.5H15C15.5523 12.5 16 12.9477 16 13.5C16 14.0523 15.5523 14.5 15 14.5H8C7.44772 14.5 7 14.0523 7 13.5Z" fill="white"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.5 18C10.9477 18 10.5 17.5523 10.5 17V10C10.5 9.44771 10.9477 9 11.5 9C12.0523 9 12.5 9.44771 12.5 10V17C12.5 17.5523 12.0523 18 11.5 18Z" fill="white"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M18.1667 5.4H7.33333C7.11232 5.4 6.90036 5.48429 6.74408 5.63431C6.73604 5.64203 6.72818 5.64989 6.72051 5.65788C6.579 5.8053 6.5 5.99874 6.5 6.2C6.5 6.40126 6.579 6.5947 6.72051 6.74212C6.72818 6.75011 6.73604 6.75797 6.74408 6.76569C6.90036 6.91571 7.11232 7 7.33333 7H18.1667V5.4ZM19 7.8H7.33333C6.90265 7.8 6.48915 7.63997 6.1791 7.35421C6.17093 7.34668 6.16284 7.33907 6.15482 7.33137C5.96846 7.15246 5.83079 6.93555 5.75 6.6996C5.69529 6.53983 5.66667 6.37133 5.66667 6.2C5.66667 5.79748 5.82466 5.4106 6.10768 5.11577C6.12303 5.09978 6.13874 5.08406 6.15482 5.06863C6.16284 5.06093 6.17093 5.05332 6.1791 5.04579C6.48915 4.76003 6.90265 4.6 7.33333 4.6H19V3.8C19 3.7493 18.995 3.6991 18.9852 3.65C18.9541 3.49363 18.8749 3.34849 18.7559 3.23431C18.5996 3.08429 18.3877 3 18.1667 3H7.33333C6.47196 3 5.64496 3.32006 5.02486 3.89159C5.00853 3.90664 4.99235 3.92186 4.97631 3.93726C4.35119 4.53737 4 5.35131 4 6.2V15.8C4 16.6487 4.35119 17.4626 4.97631 18.0627C5.60143 18.6629 6.44928 19 7.33333 19H18.1667C18.3877 19 18.5996 18.9157 18.7559 18.7657C18.9122 18.6157 19 18.4122 19 18.2V7.8ZM20.75 3.8C20.75 3.10011 20.4597 2.44408 19.9679 1.97189C19.4784 1.50202 18.8293 1.25 18.1667 1.25H7.33333C6.00768 1.25 4.72266 1.75488 3.76438 2.67483C2.80367 3.59711 2.25 4.86359 2.25 6.2V15.8C2.25 17.1364 2.80367 18.4029 3.76438 19.3252C4.72266 20.2451 6.00768 20.75 7.33333 20.75H18.1667C18.8293 20.75 19.4784 20.498 19.9679 20.0281C20.4597 19.5559 20.75 18.8999 20.75 18.2V3.8Z" fill="white"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.0 KiB |
@@ -0,0 +1,4 @@
|
||||
<svg width="23" height="22" viewBox="0 0 23 22" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M19.0556 5.4H6.77778C6.5273 5.4 6.28707 5.48429 6.10995 5.63431C6.07238 5.66614 6.0383 5.70037 6.00793 5.73658C5.8951 5.87106 5.83333 6.03283 5.83333 6.2C5.83333 6.36716 5.8951 6.52894 6.00793 6.66342C6.0383 6.69963 6.07238 6.73386 6.10995 6.76569C6.28707 6.91571 6.5273 7 6.77778 7H19.0556V5.4ZM20 7.8H6.77778C6.3285 7.8 5.89573 7.66442 5.5557 7.42001C5.51658 7.39189 5.47868 7.36233 5.44213 7.33137C5.0879 7.03131 4.88889 6.62435 4.88889 6.2C4.88889 5.86426 5.01346 5.5394 5.24093 5.26976C5.30096 5.1986 5.36816 5.13128 5.44213 5.06863C5.47868 5.03767 5.51658 5.00811 5.5557 4.97999C5.89573 4.73558 6.3285 4.6 6.77778 4.6H20V3.8C20 3.7493 19.9943 3.6991 19.9833 3.65C19.948 3.49363 19.8582 3.34849 19.7234 3.23431C19.5463 3.08429 19.306 3 19.0556 3H6.77778C5.87923 3 5.01369 3.27116 4.33362 3.75997C4.25538 3.81621 4.17959 3.87534 4.10649 3.93726C4.07168 3.96674 4.03763 3.99673 4.00433 4.02723C3.35987 4.61743 3 5.393 3 6.2V15.8C3 16.6487 3.39801 17.4626 4.10649 18.0627C4.81496 18.6629 5.77585 19 6.77778 19H19.0556C19.306 19 19.5463 18.9157 19.7234 18.7657C19.9005 18.6157 20 18.4122 20 18.2V7.8ZM21.75 3.8C21.75 3.02109 21.3824 2.34617 20.8545 1.89898C20.3353 1.45924 19.6849 1.25 19.0556 1.25H6.77778C5.39694 1.25 4.02587 1.7121 2.97538 2.60193C1.91611 3.4992 1.25 4.78457 1.25 6.2V15.8C1.25 17.2154 1.91611 18.5008 2.97538 19.3981C4.02587 20.2879 5.39694 20.75 6.77778 20.75H19.0556C19.6849 20.75 20.3353 20.5408 20.8545 20.101C21.3824 19.6538 21.75 18.9789 21.75 18.2V3.8Z" fill="white" fill-opacity="0.4"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M15.0743 10.0128C15.4814 9.63965 16.114 9.66716 16.4872 10.0743C16.8603 10.4814 16.8328 11.114 16.4257 11.4872L15.75 10.75L15.0743 10.0128ZM8.05876 12.9119L8.08009 12.9411L8.14266 13.0266C8.19691 13.1005 8.27489 13.2064 8.36932 13.3336C8.55852 13.5884 8.8122 13.9267 9.07254 14.2636C9.25297 14.4971 9.43227 14.7243 9.59315 14.9205C9.69544 14.8339 9.80773 14.7379 9.9288 14.6335C10.5187 14.1245 11.2862 13.4424 12.0506 12.756C12.814 12.0705 13.57 11.3847 14.1354 10.8699C14.4181 10.6126 14.6529 10.3982 14.8171 10.2482L15.0743 10.0128C15.0743 10.0128 15.0743 10.0128 15.75 10.75C16.4257 11.4872 16.4257 11.4872 16.4257 11.4872L16.1663 11.7245C16.0014 11.8752 15.7655 12.0905 15.4818 12.3489C14.9144 12.8653 14.1548 13.5545 13.3869 14.244C12.62 14.9326 11.8406 15.6255 11.2353 16.1478C10.9339 16.4078 10.6678 16.6323 10.465 16.7945C10.3655 16.8741 10.2684 16.9491 10.184 17.0081C10.1437 17.0362 10.0881 17.0735 10.0265 17.1079C9.99631 17.1247 9.94654 17.151 9.88439 17.1756C9.84407 17.1916 9.69646 17.25 9.5 17.25C9.28224 17.25 9.11853 17.181 9.04761 17.1478C8.96367 17.1085 8.89751 17.0649 8.85479 17.0346C8.76913 16.9738 8.69475 16.9065 8.64032 16.8545C8.52728 16.7463 8.40429 16.6107 8.28615 16.4739C8.04534 16.1951 7.75864 15.8341 7.48996 15.4864C7.21905 15.1358 6.95711 14.7866 6.7635 14.5258C6.66652 14.3952 6.5863 14.2862 6.53019 14.2098L6.46495 14.1207L6.44177 14.0889C6.44177 14.0889 6.44126 14.0882 7.25 13.5L6.44177 14.0889C6.11693 13.6422 6.21518 13.0161 6.66183 12.6913C7.10848 12.3664 7.73392 12.4652 8.05876 12.9119V12.9119Z" fill="white" fill-opacity="0.4"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.2 KiB |
@@ -0,0 +1,5 @@
|
||||
<svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g id="list">
|
||||
<path id="Icon" d="M9.22001 6H22.1M9.22001 12.48H22.1M9.22001 18.96H22.1M4.10001 6V6.0128M4.10001 12.48V12.4928M4.10001 18.96V18.9728" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 338 B |
@@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14" fill="none">
|
||||
<path d="M3.25 7.5L6.25 11.5L10.75 2.5" stroke="#FFA500" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 229 B |
@@ -0,0 +1,5 @@
|
||||
<svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g id="annotation-typing">
|
||||
<path id="Icon" d="M8 9.83459V9.75M12.5 9.83459V9.75M17 9.83459V9.75M14.9457 16.3043L12.5 21L10.25 16.3043H5.75C4.50736 16.3043 3.5 15.297 3.5 14.0543V5.25C3.5 4.00736 4.50736 3 5.75 3H19.25C20.4926 3 21.5 4.00736 21.5 5.25V14.0543C21.5 15.297 20.4926 16.3043 19.25 16.3043H14.9457Z" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 500 B |
@@ -0,0 +1,5 @@
|
||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g id="Filter">
|
||||
<path id="Stroke 1" fill-rule="evenodd" clip-rule="evenodd" d="M2.42388 1.25C1.77581 1.25 1.25 1.78465 1.25 2.4428V3.14483C1.25 3.63235 1.43539 4.10119 1.76702 4.45383L5.40133 8.31824L5.40292 8.31581C6.10453 9.03409 6.49929 10.0051 6.49929 11.0175V14.4464C6.49929 14.6755 6.73902 14.8218 6.938 14.7137L9.00767 13.5859C9.32011 13.4153 9.51509 13.0838 9.51509 12.7238V11.0085C9.51509 10.0018 9.90426 9.0349 10.5995 8.31824L14.2338 4.45383C14.5646 4.10119 14.75 3.63235 14.75 3.14483V2.4428C14.75 1.78465 14.225 1.25 13.5769 1.25H2.42388Z" stroke="#9A9A9A" stroke-width="1.125" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 748 B |
|
After Width: | Height: | Size: 5.0 KiB |
@@ -0,0 +1,6 @@
|
||||
<svg width="20" height="16" viewBox="0 0 20 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="20" height="16" rx="6" fill="#FF1060"/>
|
||||
<path d="M6.54108 10.6017C6.54108 10.6017 7.01474 9.64675 7.70424 9.64675C8.39374 9.64675 8.74608 10.4488 9.51024 10.4488C10.2738 10.4488 11.1307 8.4375 11.9964 8.4375C12.8609 8.4375 13.4827 9.83225 13.4827 9.83225" stroke="white" stroke-width="0.875" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M8.91456 6.31118C8.91456 6.81284 8.50797 7.22001 8.00572 7.22001C7.50406 7.22001 7.09747 6.81284 7.09747 6.31118C7.09747 5.80951 7.50406 5.40234 8.00572 5.40234C8.50797 5.40293 8.91456 5.80951 8.91456 6.31118Z" stroke="white" stroke-width="0.875" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M4.60431 8.00033C4.60431 12.0469 5.95356 13.3962 10.0001 13.3962C14.0467 13.3962 15.396 12.0469 15.396 8.00033C15.396 3.95374 14.0467 2.60449 10.0001 2.60449C5.95356 2.60449 4.60431 3.95374 4.60431 8.00033Z" stroke="white" stroke-width="0.875" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
|
||||
<path d="M6.94643 12.1748C6.30357 11.8037 6.30357 10.8758 6.94643 10.5046L16.8036 4.81362C17.4464 4.44247 18.25 4.90641 18.25 5.64872L18.25 17.0308C18.25 17.7731 17.4464 18.237 16.8036 17.8659L6.94643 12.1748Z" stroke="#A7A7A7" stroke-width="1.5"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 353 B |
@@ -0,0 +1,5 @@
|
||||
<svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g id="audio-settings-01">
|
||||
<path id="Icon" d="M2.9 4.79844L12.5 4.79844M2.9 11.9984H12.5M12.5 11.9984V14.3984M12.5 11.9984V9.59844M2.9 19.1984H7.7M12.5 19.1984L22.1 19.1984M17.3 11.9984H22.1M17.3 4.79844L22.1 4.79844M17.3 4.79844V7.19844M17.3 4.79844V2.39844M8.3 21.5984V16.7984" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 469 B |
@@ -0,0 +1,18 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="21" height="18" viewBox="0 0 21 18" fill="none">
|
||||
<g clip-path="url(#clip0_0_9047)">
|
||||
<rect x="0.5" y="0.5" width="5" height="4" rx="0.5" stroke="#DD001B"/>
|
||||
<rect x="8" y="0.5" width="5" height="4" rx="0.5" stroke="#DD001B"/>
|
||||
<rect x="15.5" y="0.5" width="5" height="4" rx="0.5" stroke="#DD001B"/>
|
||||
<rect x="0.5" y="7" width="5" height="4" rx="0.5" stroke="#DD001B"/>
|
||||
<rect x="8" y="7" width="5" height="4" rx="0.5" stroke="#DD001B"/>
|
||||
<rect x="15.5" y="7" width="5" height="4" rx="0.5" stroke="#DD001B"/>
|
||||
<rect x="0.5" y="13.5" width="5" height="4" rx="0.5" stroke="#DD001B"/>
|
||||
<rect x="8" y="13.5" width="5" height="4" rx="0.5" stroke="#DD001B"/>
|
||||
<rect x="15.5" y="13.5" width="5" height="4" rx="0.5" stroke="#DD001B"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_0_9047">
|
||||
<rect width="21" height="18" fill="white"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 933 B |
@@ -0,0 +1,8 @@
|
||||
<svg width="14" height="12" viewBox="0 0 14 12" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g id="组 6634">
|
||||
<path id="路径 8990" d="M4.9394 11.5267C4.65173 11.5267 4.36947 11.4145 4.1579 11.203L0.323824 7.62404C-0.107941 7.19228 -0.107941 6.49242 0.323824 6.0608C0.75559 5.62931 1.45505 5.62917 1.88682 6.06093L3.83408 8.00804V1.57894C3.83408 0.96854 4.32899 0.473633 4.9394 0.473633C5.54981 0.473633 6.04472 0.96854 6.04472 1.57894V10.4214C6.04472 10.8684 5.7754 11.2716 5.36253 11.4425C5.22544 11.4992 5.08188 11.5267 4.9394 11.5267Z" fill="#1A1A1A"/>
|
||||
<path id="矩形 2359" d="M7.36816 1.57894C7.36816 0.968497 7.86303 0.473633 8.47347 0.473633H12.8948C13.5052 0.473633 14.0001 0.968497 14.0001 1.57894C14.0001 2.18939 13.5052 2.68425 12.8948 2.68425H8.47347C7.86303 2.68425 7.36816 2.18939 7.36816 1.57894Z" fill="#1A1A1A"/>
|
||||
<path id="矩形 2360" d="M7.36816 5.99984C7.36816 5.3894 7.86303 4.89453 8.47347 4.89453H12.8948C13.5052 4.89453 14.0001 5.3894 14.0001 5.99984C14.0001 6.61029 13.5052 7.10515 12.8948 7.10515H8.47347C7.86303 7.10515 7.36816 6.61029 7.36816 5.99984Z" fill="#1A1A1A"/>
|
||||
<path id="矩形 2361" d="M7.36816 10.4217C7.36816 9.81127 7.86303 9.31641 8.47347 9.31641H12.8948C13.5052 9.31641 14.0001 9.81127 14.0001 10.4217C14.0001 11.0322 13.5052 11.527 12.8948 11.527H8.47347C7.86303 11.527 7.36816 11.0322 7.36816 10.4217Z" fill="#1A1A1A"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.5 KiB |
@@ -0,0 +1,8 @@
|
||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g id="名称=排序, 状态=off">
|
||||
<path id="Vector 479" d="M13 7L21 7" stroke="#292929" stroke-width="2" stroke-linecap="round"/>
|
||||
<path id="Vector 480" d="M13 12L21 12" stroke="#292929" stroke-width="2" stroke-linecap="round"/>
|
||||
<path id="Vector 482" d="M13 17L21 17" stroke="#292929" stroke-width="2" stroke-linecap="round"/>
|
||||
<path id="Vector 481" d="M8 19V5L2 11" stroke="#292929" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 647 B |
@@ -0,0 +1,8 @@
|
||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g id="名称=排序, 状态=on">
|
||||
<path id="Vector 479" d="M13 7L21 7" stroke="#292929" stroke-width="2" stroke-linecap="round"/>
|
||||
<path id="Vector 480" d="M13 12L21 12" stroke="#292929" stroke-width="2" stroke-linecap="round"/>
|
||||
<path id="Vector 482" d="M13 17L21 17" stroke="#292929" stroke-width="2" stroke-linecap="round"/>
|
||||
<path id="Vector 481" d="M8 5V19L2 13" stroke="#292929" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 646 B |
@@ -0,0 +1,4 @@
|
||||
<svg width="19" height="17" viewBox="0 0 19 17" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M19.0008 2.81803V13.3711C19.0008 15.5325 16.652 16.8888 14.7774 15.8082L10.201 13.1726L5.62473 10.5261C3.75009 9.44542 3.75009 6.74374 5.62473 5.66307L10.201 3.01652L14.7774 0.381001C16.652 -0.699672 19.0008 0.645655 19.0008 2.81803Z" fill="#F68804"/>
|
||||
<path d="M0.827046 15.7311C0.374927 15.7311 0 15.3561 0 14.904V1.27431C0 0.822193 0.374927 0.447266 0.827046 0.447266C1.27916 0.447266 1.65409 0.822193 1.65409 1.27431V14.904C1.65409 15.3561 1.27916 15.7311 0.827046 15.7311Z" fill="#F68804"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 607 B |
@@ -0,0 +1,5 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none">
|
||||
<path d="M15 15V5" stroke="#3E64EA" stroke-width="1.66667" stroke-linecap="round"/>
|
||||
<path d="M10 15.0003L10 10.417" stroke="#3E64EA" stroke-width="1.66667" stroke-linecap="round"/>
|
||||
<path d="M5 15.0003V9.16699" stroke="#3E64EA" stroke-width="1.66667" stroke-linecap="round"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 383 B |
@@ -0,0 +1,22 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 0 48 48">
|
||||
<g data-name="组 21727">
|
||||
<g data-name="组 21607" style="opacity:.8">
|
||||
<path data-name="路径 59274" d="M848.9 795.387h2v3h-2v-3zm0 0" transform="translate(-825.899 -777.256)" style="fill:#ff9400"/>
|
||||
<path data-name="路径 59275" d="M851.887 795.387h1v3h-1v-3zm0 0" transform="translate(-827.887 -777.256)" style="fill:#ff6849"/>
|
||||
<path data-name="路径 59276" d="M830.969 797.379h2v3h-2v-3zm0 0" transform="translate(-813.967 -778.581)" style="fill:#ff6849"/>
|
||||
<path data-name="路径 59277" d="M816.421 813.645a6.333 6.333 0 0 1 7.93-9.542l-.944 9.667c-.623-.334-6.985-.124-6.985-.124zm0 0" transform="translate(-803.362 -782.558)" style="fill:#ff9400"/>
|
||||
<path data-name="路径 59278" d="M866.828 797.379h2v3h-2v-3zm0 0" transform="translate(-837.829 -778.581)" style="fill:#fd4b2d"/>
|
||||
<path data-name="路径 59279" d="M843.481 812.444H835.1a6.332 6.332 0 1 1 8.376 0zm0 0" transform="translate(-815.293 -781.232)" style="fill:#ffab15"/>
|
||||
<path data-name="路径 59280" d="M868.694 813.8s-6.237-.334-6.861 0l-.944-9.693a6.333 6.333 0 0 1 7.805 9.693zm0 0" transform="translate(-833.877 -782.558)" style="fill:#ff6849"/>
|
||||
<path data-name="路径 59281" d="M851.887 801.363v11.081h4.188a6.332 6.332 0 0 0-4.188-11.081zm0 0" transform="translate(-827.887 -781.232)" style="fill:#ff9400"/>
|
||||
<path data-name="路径 59282" d="M843.945 765.1a2.992 2.992 0 0 1-4 0 3 3 0 1 0 0 6h4a3 3 0 0 0 0-6zm-3 4h-1a1 1 0 1 1 1-1v1zm3 0h-1v-1a1 1 0 1 1 1 1zm0 0" transform="translate(-817.945 -757.105)" style="fill:#994c0f"/>
|
||||
<path data-name="路径 59283" d="M853.887 765.1a2.989 2.989 0 0 0-2 .766v5.234h2a3 3 0 0 0 0-6zm0 4h-1v-1a1 1 0 1 1 1 1zm0 0" transform="translate(-827.887 -757.105)" style="fill:#713708"/>
|
||||
<path data-name="路径 59284" d="M835.013 795.918h-2v-1.2a15.064 15.064 0 0 0-30.127 0v1.2h-2v-1.2a17.063 17.063 0 0 1 34.126 0v1.2zm0 0" transform="translate(-793.95 -765.456)" style="fill:#bf6015"/>
|
||||
<path data-name="路径 59285" d="M863.952 782.653a16.952 16.952 0 0 0-12.065-5v2a15.081 15.081 0 0 1 15.064 15.063v1.2h2v-1.2a16.951 16.951 0 0 0-5-12.065zm0 0" transform="translate(-827.887 -765.456)" style="fill:#994c0f"/>
|
||||
<path data-name="路径 59286" d="M823.349 841.918h-10.8a11.678 11.678 0 0 1-11.664-11.664v-1h34.126v1a11.678 11.678 0 0 1-11.664 11.664zm0 0" transform="translate(-793.95 -799.792)" style="fill:#ffea84"/>
|
||||
<path data-name="路径 59287" d="M851.887 829.254v12.664h5.4a11.678 11.678 0 0 0 11.664-11.664v-1zm0 0" transform="translate(-827.887 -799.792)" style="fill:#ffdc40"/>
|
||||
<path data-name="路径 59288" d="m846.263 845.383-2.828-2.828 2.828-2.828 2.828 2.828-2.828 2.828zm0 0" transform="translate(-822.263 -806.761)" style="fill:#ff6849"/>
|
||||
<path data-name="路径 59289" d="M851.887 839.727v5.655l2.828-2.828zm0 0" transform="translate(-827.887 -806.761)" style="fill:#fd4b2d"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.1 KiB |
@@ -0,0 +1,13 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="47" height="47" viewBox="0 0 47 47">
|
||||
<g data-name="组 21210">
|
||||
<g style="stroke:#666;stroke-width:2px;fill:none">
|
||||
<rect width="47" height="47" rx="10" style="stroke:none"/>
|
||||
<rect x="1" y="1" width="45" height="45" rx="9" style="fill:none"/>
|
||||
</g>
|
||||
<g data-name="组 20871" transform="translate(14.911 14.911)">
|
||||
<rect data-name="矩形 3046" width="17.178" height="2.04" rx="1.02" transform="translate(0 7.569)" style="fill:#666"/>
|
||||
<rect data-name="矩形 3047" width="10.498" height="2.044" rx="1.022" transform="rotate(90 1.568 8.249)" style="fill:#666"/>
|
||||
<rect data-name="矩形 3048" width="9.483" height="2.044" rx="1.022" transform="rotate(90 4.909 4.909)" style="fill:#666"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 844 B |
@@ -0,0 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="19" height="18" viewBox="0 0 19 18" fill="none">
|
||||
<path d="M1.25 9L17.25 9" stroke="#999999" stroke-miterlimit="3.68918" stroke-linecap="round" stroke-dasharray="1.71 1.71"/>
|
||||
<path d="M9.25 17L9.25 1" stroke="#999999" stroke-miterlimit="3.68918" stroke-linecap="round" stroke-dasharray="1.71 1.71"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 352 B |
@@ -0,0 +1,10 @@
|
||||
<svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_18385_94637)">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M2.81779 2.14737L3.33063 10.7672C3.33835 10.8956 3.3948 11.0163 3.48847 11.1046C3.58213 11.1928 3.70594 11.242 3.83463 11.2421H8.40221C8.53091 11.242 8.65472 11.1928 8.74838 11.1046C8.84204 11.0163 8.89849 10.8956 8.90621 10.7672L9.41905 2.14737H2.81779ZM10.1788 2.14737L9.66284 10.812C9.64369 11.1334 9.50254 11.4353 9.26823 11.6561C9.03393 11.8769 8.72416 11.9999 8.40221 12H3.83463C3.51268 11.9999 3.20291 11.8769 2.96861 11.6561C2.7343 11.4353 2.59316 11.1334 2.574 10.812L2.058 2.14737H0.75V1.70526C0.75 1.62151 0.783271 1.54119 0.842493 1.48197C0.901715 1.42274 0.982037 1.38947 1.06579 1.38947H11.1711C11.2548 1.38947 11.3351 1.42274 11.3943 1.48197C11.4536 1.54119 11.4868 1.62151 11.4868 1.70526V2.14737H10.1788ZM7.38158 0C7.46533 0 7.54565 0.0332706 7.60488 0.0924927C7.6641 0.151715 7.69737 0.232037 7.69737 0.315789V0.757895H4.53947V0.315789C4.53947 0.232037 4.57274 0.151715 4.63197 0.0924927C4.69119 0.0332706 4.77151 0 4.85526 0H7.38158ZM4.53947 3.78947H5.29737L5.61316 9.47368H4.85526L4.53947 3.78947ZM6.93947 3.78947H7.69737L7.38158 9.47368H6.62368L6.93947 3.78947Z" fill="white" fill-opacity="0.5"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_18385_94637">
|
||||
<rect width="12" height="12" fill="white"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
@@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
|
||||
<path d="M22.5 8.25C22.5 9.13642 22.3254 10.0142 21.9862 10.8331C21.647 11.6521 21.1498 12.3962 20.523 13.023C19.8962 13.6498 19.1521 14.147 18.3331 14.4862C17.5142 14.8254 16.6364 15 15.75 15C14.8636 15 13.9858 14.8254 13.1669 14.4862C12.3479 14.147 11.6038 13.6498 10.977 13.023C10.3502 12.3962 9.85303 11.6521 9.51381 10.8331C9.17459 10.0142 9 9.13642 9 8.25C9 6.45979 9.71116 4.7429 10.977 3.47703C12.2429 2.21116 13.9598 1.5 15.75 1.5C17.5402 1.5 19.2571 2.21116 20.523 3.47703C21.7888 4.7429 22.5 6.45979 22.5 8.25ZM18.531 6.531C18.6007 6.46127 18.656 6.37848 18.6938 6.28738C18.7315 6.19627 18.7509 6.09862 18.7509 6C18.7509 5.90138 18.7315 5.80373 18.6938 5.71262C18.656 5.62152 18.6007 5.53873 18.531 5.469C18.4613 5.39927 18.3785 5.34395 18.2874 5.30621C18.1963 5.26848 18.0986 5.24905 18 5.24905C17.9014 5.24905 17.8037 5.26848 17.7126 5.30621C17.6215 5.34395 17.5387 5.39927 17.469 5.469L15.75 7.1895L14.031 5.469C13.9613 5.39927 13.8785 5.34395 13.7874 5.30621C13.6963 5.26848 13.5986 5.24905 13.5 5.24905C13.4014 5.24905 13.3037 5.26848 13.2126 5.30621C13.1215 5.34395 13.0387 5.39927 12.969 5.469C12.8993 5.53873 12.844 5.62152 12.8062 5.71262C12.7685 5.80373 12.7491 5.90138 12.7491 6C12.7491 6.09862 12.7685 6.19627 12.8062 6.28738C12.844 6.37848 12.8993 6.46127 12.969 6.531L14.6895 8.25L12.969 9.969C12.8993 10.0387 12.844 10.1215 12.8062 10.2126C12.7685 10.3037 12.7491 10.4014 12.7491 10.5C12.7491 10.5986 12.7685 10.6963 12.8062 10.7874C12.844 10.8785 12.8993 10.9613 12.969 11.031C13.0387 11.1007 13.1215 11.156 13.2126 11.1938C13.3037 11.2315 13.4014 11.2509 13.5 11.2509C13.5986 11.2509 13.6963 11.2315 13.7874 11.1938C13.8785 11.156 13.9613 11.1007 14.031 11.031L15.75 9.3105L17.469 11.031C17.6098 11.1718 17.8008 11.2509 18 11.2509C18.1992 11.2509 18.3902 11.1718 18.531 11.031C18.6718 10.8902 18.7509 10.6992 18.7509 10.5C18.7509 10.3008 18.6718 10.1098 18.531 9.969L16.8105 8.25L18.531 6.531ZM15.75 16.5C17.745 16.5 19.575 15.792 21 14.6145V18.75C21 19.7446 20.6049 20.6984 19.9016 21.4016C19.1984 22.1049 18.2446 22.5 17.25 22.5H6.75C5.75544 22.5 4.80161 22.1049 4.09835 21.4016C3.39509 20.6984 3 19.7446 3 18.75V8.25C3 7.25544 3.39509 6.30161 4.09835 5.59835C4.80161 4.89509 5.75544 4.5 6.75 4.5H8.4C8.15469 4.97941 7.95723 5.48184 7.8105 6H6.75C6.15326 6 5.58097 6.23705 5.15901 6.65901C4.73705 7.08097 4.5 7.65326 4.5 8.25V13.5H8.25C8.44891 13.5 8.63968 13.579 8.78033 13.7197C8.92098 13.8603 9 14.0511 9 14.25C9 14.328 9.012 14.493 9.048 14.712C9.1095 15.0825 9.2205 15.453 9.39 15.789C9.852 16.716 10.6545 17.25 12 17.25C13.038 17.25 13.752 16.932 14.238 16.362C14.727 16.452 15.2325 16.5 15.75 16.5Z" fill="white"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.7 KiB |
@@ -0,0 +1,11 @@
|
||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_18799_77008)">
|
||||
<path d="M3.16332 11.5362L6.90798 12.9438C7.03089 12.9439 7.1526 12.9216 7.26615 12.8783C7.37971 12.8349 7.48288 12.7714 7.56977 12.6913C7.65666 12.6112 7.72556 12.516 7.77253 12.4114C7.8195 12.3067 7.84362 12.1945 7.84351 12.0812V6.18829C7.84357 5.77696 7.7557 5.36964 7.58494 4.98961C7.41417 4.60958 7.16385 4.26428 6.84826 3.97342C6.53268 3.68256 6.15802 3.45185 5.74568 3.29447C5.33334 3.13708 4.8914 3.0561 4.44509 3.05615H3.24672C3.01554 3.0562 2.79385 3.14087 2.63038 3.29152C2.46692 3.44218 2.37506 3.6465 2.375 3.85957V10.4635C2.37717 10.694 2.45314 10.9188 2.59338 11.1096C2.73363 11.3004 2.9319 11.4488 3.16332 11.5362ZM13.2114 11.5362L9.46669 12.9438C9.34378 12.9439 9.22207 12.9216 9.10851 12.8783C8.99496 12.8349 8.89178 12.7714 8.8049 12.6913C8.71801 12.6112 8.64911 12.516 8.60214 12.4114C8.55517 12.3067 8.53105 12.1945 8.53116 12.0812V6.18829C8.5311 5.77696 8.61897 5.36964 8.78973 4.98961C8.9605 4.60958 9.21082 4.26428 9.52641 3.97342C9.84199 3.68256 10.2167 3.45185 10.629 3.29447C11.0413 3.13708 11.4833 3.0561 11.9296 3.05615H13.128C13.3591 3.0562 13.5808 3.14087 13.7443 3.29152C13.9078 3.44218 13.9996 3.6465 13.9997 3.85957V10.4635C13.9974 10.694 13.9214 10.9187 13.7811 11.1096C13.6408 11.3004 13.4426 11.4488 13.2111 11.5362H13.2114Z" fill="white"/>
|
||||
<path d="M14.849 4.86437L14.5348 4.57903L14.4114 4.48411V10.4627C14.4119 10.7692 14.313 11.0689 14.1275 11.3233C13.942 11.5777 13.6783 11.7753 13.3701 11.8907L12.6612 12.1588C12.8508 12.2087 13.0614 12.245 13.2579 12.2314L14.3457 12.1475C14.8172 12.0479 15.1584 11.604 15.1584 11.0861V5.57345C15.1536 5.29956 15.043 5.04159 14.849 4.86514V4.86437ZM3.00576 11.8892C2.69727 11.7742 2.4332 11.5767 2.24758 11.3222C2.06196 11.0677 1.96329 10.7678 1.96429 10.4611V4.42529L1.76526 4.57903L1.45103 4.86437C1.25706 5.04081 1.14648 5.29878 1.14648 5.57034V11.0811C1.14648 11.5995 1.48788 12.0431 1.95923 12.1427L3.04725 12.2263C3.25786 12.2422 3.48679 12.1993 3.68561 12.1427L3.00576 11.8892Z" fill="white"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_18799_77008">
|
||||
<rect width="16" height="16" fill="white"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.2 KiB |
@@ -0,0 +1,3 @@
|
||||
<svg width="8" height="7" viewBox="0 0 8 7" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M5.05841 6.5C4.67351 7.16667 3.71126 7.16667 3.32636 6.5L0.728282 2C0.343382 1.33333 0.824506 0.499999 1.59431 0.499999L6.79046 0.5C7.56026 0.5 8.04139 1.33333 7.65649 2L5.05841 6.5Z" fill="#D9D9D9"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 309 B |
@@ -0,0 +1,3 @@
|
||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect x="4" y="4" width="16" height="16" rx="8" stroke="white" stroke-opacity="0.6" stroke-width="2"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 206 B |
@@ -0,0 +1,5 @@
|
||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect x="4" y="4" width="16" height="16" rx="8" fill="#F68804"/>
|
||||
<rect x="4" y="4" width="16" height="16" rx="8" stroke="#F68804" stroke-width="2"/>
|
||||
<path d="M8.5625 12.3437L10.9817 14.7629C11.1554 14.9366 11.4433 14.9141 11.5879 14.7155L15.75 9" stroke="#141414" stroke-width="2" stroke-linecap="round"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 409 B |
@@ -0,0 +1,16 @@
|
||||
<svg width="17" height="16" viewBox="0 0 17 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_16131_67026)">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.95031 8.24248C7.71599 8.00817 7.33609 8.00817 7.10178 8.24248L1.76845 13.5758C1.53413 13.8101 1.53413 14.19 1.76845 14.4243C2.00276 14.6587 2.38266 14.6587 2.61697 14.4243L7.95031 9.09101C8.18462 8.8567 8.18462 8.4768 7.95031 8.24248Z" fill="white"/>
|
||||
<path d="M3.3085 0.837842C3.36382 0.609717 3.68826 0.609717 3.74358 0.837842L3.89579 1.46554C3.91554 1.54699 3.97913 1.61058 4.06058 1.63033L4.68828 1.78254C4.91641 1.83786 4.91641 2.1623 4.68828 2.21762L4.06058 2.36983C3.97913 2.38958 3.91554 2.45317 3.89579 2.53462L3.74358 3.16232C3.68826 3.39045 3.36382 3.39045 3.3085 3.16232L3.15629 2.53462C3.13654 2.45317 3.07295 2.38958 2.9915 2.36983L2.3638 2.21762C2.13568 2.1623 2.13568 1.83786 2.3638 1.78254L2.9915 1.63033C3.07295 1.61058 3.13654 1.54699 3.15629 1.46554L3.3085 0.837842Z" fill="white"/>
|
||||
<path d="M14.1927 11.3334C14.1927 11.7016 14.4912 12.0001 14.8594 12.0001C15.2276 12.0001 15.526 11.7016 15.526 11.3334C15.526 10.9652 15.2276 10.6667 14.8594 10.6667C14.4912 10.6667 14.1927 10.9652 14.1927 11.3334Z" fill="white"/>
|
||||
<path d="M0.859375 6.00008C0.859375 6.36827 1.15785 6.66675 1.52604 6.66675C1.89423 6.66675 2.19271 6.36827 2.19271 6.00008C2.19271 5.63189 1.89423 5.33342 1.52604 5.33342C1.15785 5.33342 0.859375 5.63189 0.859375 6.00008Z" fill="white"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.2843 3.39516L10.8352 3.88497C10.2752 4.07421 9.66026 4.00611 9.15531 3.69892L7.84842 2.90388L7.86643 4.4335C7.87339 5.0245 7.61858 5.58832 7.17039 5.97363L6.01041 6.97087L7.47073 7.42643C8.03496 7.60244 8.49244 8.01901 8.72039 8.56432L9.31037 9.9757L10.1949 8.72763C10.5366 8.2454 11.0742 7.93904 11.6633 7.89075L13.1879 7.76579L12.2742 6.53888C11.9212 6.06484 11.7959 5.45893 11.9321 4.88377L12.2843 3.39516ZM13.6182 2.96945C13.7629 2.3581 13.1787 1.82618 12.5836 2.02734L10.4509 2.74814C10.227 2.82384 9.98097 2.7966 9.77899 2.67373L7.85574 1.50373C7.31901 1.17721 6.63262 1.56841 6.64001 2.19661L6.66651 4.44762C6.66929 4.68402 6.56737 4.90955 6.3881 5.06367L4.68105 6.53124C4.20465 6.9408 4.3646 7.71449 4.96434 7.90158L7.11337 8.57198C7.33906 8.64239 7.52205 8.80901 7.61323 9.02714L8.48146 11.1041C8.72376 11.6838 9.50901 11.7707 9.87227 11.2582L11.1739 9.42149C11.3107 9.2286 11.5257 9.10606 11.7613 9.08674L14.0049 8.90284C14.6311 8.85151 14.9565 8.13157 14.5812 7.6277L13.2367 5.82216C13.0955 5.63255 13.0454 5.39018 13.0998 5.16012L13.6182 2.96945Z" fill="white"/>
|
||||
<path d="M3.3085 0.837842C3.36382 0.609717 3.68826 0.609717 3.74358 0.837842L3.89579 1.46554C3.91554 1.54699 3.97913 1.61058 4.06058 1.63033L4.68828 1.78254C4.91641 1.83786 4.91641 2.1623 4.68828 2.21762L4.06058 2.36983C3.97913 2.38958 3.91554 2.45317 3.89579 2.53462L3.74358 3.16232C3.68826 3.39045 3.36382 3.39045 3.3085 3.16232L3.15629 2.53462C3.13654 2.45317 3.07295 2.38958 2.9915 2.36983L2.3638 2.21762C2.13568 2.1623 2.13568 1.83786 2.3638 1.78254L2.9915 1.63033C3.07295 1.61058 3.13654 1.54699 3.15629 1.46554L3.3085 0.837842Z" fill="white"/>
|
||||
<path d="M11.3085 12.8378C11.3638 12.6097 11.6883 12.6097 11.7436 12.8378L11.8958 13.4655C11.9155 13.547 11.9791 13.6106 12.0606 13.6303L12.6883 13.7825C12.9164 13.8379 12.9164 14.1623 12.6883 14.2176L12.0606 14.3698C11.9791 14.3896 11.9155 14.4532 11.8958 14.5346L11.7436 15.1623C11.6883 15.3904 11.3638 15.3904 11.3085 15.1623L11.1563 14.5346C11.1365 14.4532 11.073 14.3896 10.9915 14.3698L10.3638 14.2176C10.1357 14.1623 10.1357 13.8379 10.3638 13.7825L10.9915 13.6303C11.073 13.6106 11.1365 13.547 11.1563 13.4655L11.3085 12.8378Z" fill="white"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_16131_67026">
|
||||
<rect width="16" height="16" fill="white" transform="translate(0.192383)"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.8 KiB |