@ienlab/cloud-functions-library 0.9.5 → 1.0.0-dev.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__vite-browser-external-BrdF6Ba4.js +1 -0
- package/dist/__vite-browser-external-C4yfM1ew.mjs +25 -0
- package/dist/dist-B3gFypMh.js +5 -0
- package/dist/dist-BHRQIx5i.mjs +460 -0
- package/dist/dist-CkUzyZvx.js +1 -0
- package/dist/dist-Cum8lv5j.mjs +16 -0
- package/dist/from-BPj5eOuj.mjs +2443 -0
- package/dist/from-jzy6jn2J.js +4 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.js +66 -0
- package/dist/index.mjs +49920 -0
- package/dist/multipart-parser-9TgDfPGH.mjs +149 -0
- package/dist/multipart-parser-D41wkGe-.js +2 -0
- package/dist/multipart-parser-DOk5BsUv.js +2 -0
- package/dist/multipart-parser-D_l0qnsO.mjs +149 -0
- package/dist/src-C0B8QY6h.js +3 -0
- package/dist/src-CNjb2Vfu.js +3 -0
- package/dist/src-CYCYovTl.mjs +666 -0
- package/dist/src-M25oq7Q_.mjs +666 -0
- package/package.json +17 -18
- package/.gemini/config.yaml +0 -47
- package/.github/ISSUE_TEMPLATE/bug_report.yaml +0 -74
- package/.github/ISSUE_TEMPLATE/documentation.yaml +0 -23
- package/.github/ISSUE_TEMPLATE/feature_request.yaml +0 -60
- package/.github/ISSUE_TEMPLATE/question.yaml +0 -17
- package/.github/ISSUE_TEMPLATE/refactor.yaml +0 -42
- package/.github/RELEASE_TEMPLATE.md +0 -17
- package/.github/workflows/publish.yml +0 -30
- package/eslint.config.js +0 -23
- package/index.html +0 -13
- package/public/favicon.svg +0 -1
- package/public/icons.svg +0 -24
- package/src/App.css +0 -184
- package/src/App.tsx +0 -121
- package/src/assets/hero.png +0 -0
- package/src/assets/react.svg +0 -1
- package/src/assets/vite.svg +0 -1
- package/src/index.css +0 -111
- package/src/index.ts +0 -16
- package/src/main.tsx +0 -10
- package/tsconfig.app.json +0 -25
- package/tsconfig.build.json +0 -17
- package/tsconfig.json +0 -7
- package/tsconfig.node.json +0 -24
- package/vite.config.ts +0 -33
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ienlab/cloud-functions-library",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0-dev.1",
|
|
4
4
|
"main": "./dist/index.js",
|
|
5
5
|
"module": "./dist/index.mjs",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -11,27 +11,26 @@
|
|
|
11
11
|
"types": "./dist/index.d.ts"
|
|
12
12
|
}
|
|
13
13
|
},
|
|
14
|
+
"files": ["dist"],
|
|
14
15
|
"scripts": {
|
|
15
16
|
"build": "vite build"
|
|
16
17
|
},
|
|
17
|
-
"dependencies": {
|
|
18
|
-
|
|
19
|
-
"firebase-
|
|
18
|
+
"dependencies": {},
|
|
19
|
+
"peerDependencies": {
|
|
20
|
+
"firebase-admin": ">=12.0.0",
|
|
21
|
+
"firebase-functions": ">=6.0.0"
|
|
20
22
|
},
|
|
21
23
|
"devDependencies": {
|
|
22
|
-
"firebase-
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
"@
|
|
26
|
-
"@types/
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
"eslint
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"typescript-eslint": "^8.58.0",
|
|
34
|
-
"vite": "^8.0.4",
|
|
35
|
-
"vite-plugin-dts": "^4.5.4"
|
|
24
|
+
"firebase-admin": "^13.10.0",
|
|
25
|
+
"firebase-functions": "^7.2.5",
|
|
26
|
+
"firebase-functions-test": "^3.5.0",
|
|
27
|
+
"@eslint/js": "^10.0.1",
|
|
28
|
+
"@types/node": "^25.9.1",
|
|
29
|
+
"eslint": "^10.4.1",
|
|
30
|
+
"globals": "^17.6.0",
|
|
31
|
+
"typescript": "~6.0.3",
|
|
32
|
+
"typescript-eslint": "^8.60.0",
|
|
33
|
+
"vite": "^8.0.14",
|
|
34
|
+
"vite-plugin-dts": "^5.0.1"
|
|
36
35
|
}
|
|
37
36
|
}
|
package/.gemini/config.yaml
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
# Gemini Code Review Configuration
|
|
2
|
-
version: 1
|
|
3
|
-
|
|
4
|
-
language: "ko-KR"
|
|
5
|
-
|
|
6
|
-
review:
|
|
7
|
-
prompt: |
|
|
8
|
-
당신은 Firebase Cloud Functions 및 TypeScript 백엔드 아키텍처 전문가입니다.
|
|
9
|
-
코드 리뷰 시 친절하고 상세하게 설명하며, 즉시 커밋 가능한 코드 해결책을 제공하세요.
|
|
10
|
-
|
|
11
|
-
focus_areas:
|
|
12
|
-
- performance # Cold Start 최적화 및 리소스 관리
|
|
13
|
-
- security # IAM 권한 및 데이터 검증
|
|
14
|
-
- clean_code # 비즈니스 로직 분리 및 에러 처리
|
|
15
|
-
- cost_optimization # DB 호출 최적화
|
|
16
|
-
|
|
17
|
-
guidelines:
|
|
18
|
-
- "비동기 작업(Promise)이 올바르게 리턴되는지 엄격히 확인하세요."
|
|
19
|
-
- "Firebase Admin SDK의 권한 최소화 원칙을 준수하는지 검토하세요."
|
|
20
|
-
- "비즈니스 로직이 Service 레이어로 잘 분리되어 유지보수가 용이한지 확인하세요."
|
|
21
|
-
- "불필요한 DB 접근을 줄이기 위한 배치 처리나 트랜잭션을 제안하세요."
|
|
22
|
-
|
|
23
|
-
commit_message:
|
|
24
|
-
enabled: true
|
|
25
|
-
language: "ko-KR"
|
|
26
|
-
prompt: |
|
|
27
|
-
당신은 Git 커밋 메시지 전문가입니다. $COMMIT_DIFF를 분석하여 규칙에 맞게 작성하세요.
|
|
28
|
-
|
|
29
|
-
## Output Format
|
|
30
|
-
<Gitmoji> <Type>(<Scope>): <Subject>
|
|
31
|
-
<Body (optional)>
|
|
32
|
-
|
|
33
|
-
## Rules
|
|
34
|
-
- 한국어로 작성하고 마침표 없이 명령형 어조를 사용하세요.
|
|
35
|
-
- 제목 앞에 반드시 Gitmoji를 붙이세요. (✨, 🐛, ♻️, ⚡, 🔒, 🔧 등)
|
|
36
|
-
- 마크다운 블록 없이 커밋 메시지만 출력하세요.
|
|
37
|
-
|
|
38
|
-
ignore:
|
|
39
|
-
- "**/node_modules/**"
|
|
40
|
-
- "**/lib/**"
|
|
41
|
-
- "**/dist/**"
|
|
42
|
-
- "**/firebase-debug.log"
|
|
43
|
-
- "**/package-lock.json"
|
|
44
|
-
|
|
45
|
-
output:
|
|
46
|
-
style: "detailed"
|
|
47
|
-
include_solutions: true
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
name: 🐛 버그 리포트
|
|
2
|
-
description: 발견된 버그를 작성해 주세요.
|
|
3
|
-
title: '[BUG] '
|
|
4
|
-
labels: ['bug']
|
|
5
|
-
|
|
6
|
-
body:
|
|
7
|
-
- type: checkboxes
|
|
8
|
-
id: function-type
|
|
9
|
-
attributes:
|
|
10
|
-
label: "🔧 Functions 유형"
|
|
11
|
-
options:
|
|
12
|
-
- label: "1st gen (firebase-functions v3/v4)"
|
|
13
|
-
- label: "2nd gen (v4+/v5+)"
|
|
14
|
-
- label: "Callable"
|
|
15
|
-
- label: "HTTP"
|
|
16
|
-
- label: "Firestore Trigger"
|
|
17
|
-
- label: "Auth Trigger"
|
|
18
|
-
- label: "Storage Trigger"
|
|
19
|
-
- label: "Pub/Sub 등 기타"
|
|
20
|
-
|
|
21
|
-
- type: input
|
|
22
|
-
id: versions
|
|
23
|
-
attributes:
|
|
24
|
-
label: "📦 버전 정보"
|
|
25
|
-
placeholder: "firebase-functions: 6.0.0, firebase-admin: 13.0.1, Node: 20.x"
|
|
26
|
-
validations:
|
|
27
|
-
required: true
|
|
28
|
-
|
|
29
|
-
- type: textarea
|
|
30
|
-
id: description
|
|
31
|
-
attributes:
|
|
32
|
-
label: "📝 버그 설명"
|
|
33
|
-
placeholder: "어떤 함수에서 어떤 문제가 발생하나요?"
|
|
34
|
-
validations:
|
|
35
|
-
required: true
|
|
36
|
-
|
|
37
|
-
- type: textarea
|
|
38
|
-
id: reproduce
|
|
39
|
-
attributes:
|
|
40
|
-
label: "🚀 재현 절차"
|
|
41
|
-
placeholder: |
|
|
42
|
-
1.
|
|
43
|
-
2.
|
|
44
|
-
3.
|
|
45
|
-
validations:
|
|
46
|
-
required: true
|
|
47
|
-
|
|
48
|
-
- type: textarea
|
|
49
|
-
id: expected
|
|
50
|
-
attributes:
|
|
51
|
-
label: "🎯 기대 결과"
|
|
52
|
-
placeholder: "정상 동작은?"
|
|
53
|
-
validations:
|
|
54
|
-
required: true
|
|
55
|
-
|
|
56
|
-
- type: textarea
|
|
57
|
-
id: code
|
|
58
|
-
attributes:
|
|
59
|
-
label: "📄 관련 코드"
|
|
60
|
-
placeholder: |
|
|
61
|
-
```ts
|
|
62
|
-
// 최소 재현 코드
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
- type: textarea
|
|
66
|
-
id: logs
|
|
67
|
-
attributes:
|
|
68
|
-
label: "📸 로그 / 에러"
|
|
69
|
-
placeholder: |
|
|
70
|
-
```text
|
|
71
|
-
// Cloud Logging, deploy 로그, 에뮬레이터 출력 등
|
|
72
|
-
```
|
|
73
|
-
validations:
|
|
74
|
-
required: true
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
name: 📚 문서 개선
|
|
2
|
-
description: 문서 개선 요청입니다.
|
|
3
|
-
title: '[DOCS] '
|
|
4
|
-
labels: ['documentation']
|
|
5
|
-
body:
|
|
6
|
-
- type: dropdown
|
|
7
|
-
id: target
|
|
8
|
-
attributes:
|
|
9
|
-
label: "📖 개선 대상"
|
|
10
|
-
options:
|
|
11
|
-
- "README.md"
|
|
12
|
-
- "API 문서"
|
|
13
|
-
- "코드 주석"
|
|
14
|
-
- "튜토리얼"
|
|
15
|
-
validations:
|
|
16
|
-
required: true
|
|
17
|
-
- type: textarea
|
|
18
|
-
id: suggestion
|
|
19
|
-
attributes:
|
|
20
|
-
label: "💡 개선 제안"
|
|
21
|
-
placeholder: "어떻게 개선할까요?"
|
|
22
|
-
validations:
|
|
23
|
-
required: true
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
name: ✨ 기능 추가
|
|
2
|
-
description: 새로운 기능이나 개선 사항을 제안합니다.
|
|
3
|
-
title: '[FEATURE] '
|
|
4
|
-
labels: ['enhancement']
|
|
5
|
-
|
|
6
|
-
body:
|
|
7
|
-
- type: textarea
|
|
8
|
-
id: background
|
|
9
|
-
attributes:
|
|
10
|
-
label: "💡 제안 배경"
|
|
11
|
-
placeholder: "왜 필요한 기능인가요? (예: 새로운 트리거 필요, 성능 개선 등)"
|
|
12
|
-
validations:
|
|
13
|
-
required: true
|
|
14
|
-
|
|
15
|
-
- type: textarea
|
|
16
|
-
id: details
|
|
17
|
-
attributes:
|
|
18
|
-
label: "🧩 제안 내용"
|
|
19
|
-
placeholder: |
|
|
20
|
-
```typescript
|
|
21
|
-
// 예시 코드나 API 스펙
|
|
22
|
-
export const newFeature = functions.firestore
|
|
23
|
-
.document('users/{userId}')
|
|
24
|
-
.onCreate(async (event, context) => {
|
|
25
|
-
// 새로운 로직
|
|
26
|
-
});
|
|
27
|
-
```
|
|
28
|
-
render: typescript
|
|
29
|
-
validations:
|
|
30
|
-
required: true
|
|
31
|
-
|
|
32
|
-
- type: textarea
|
|
33
|
-
id: expected
|
|
34
|
-
attributes:
|
|
35
|
-
label: "🚀 기대 동작 & 효과"
|
|
36
|
-
placeholder: "추가 후 서버/클라이언트 동작, 예상 성능 이득(콜드 스타트, 비용 등)"
|
|
37
|
-
|
|
38
|
-
- type: checkboxes
|
|
39
|
-
id: targets
|
|
40
|
-
attributes:
|
|
41
|
-
label: "🎯 적용 대상"
|
|
42
|
-
options:
|
|
43
|
-
- label: "1st gen Functions"
|
|
44
|
-
- label: "2nd gen Functions"
|
|
45
|
-
- label: "Callable Functions"
|
|
46
|
-
- label: "HTTP Functions"
|
|
47
|
-
- label: "Firestore Triggers"
|
|
48
|
-
- label: "Auth Triggers"
|
|
49
|
-
- label: "Storage Triggers"
|
|
50
|
-
- label: "Pub/Sub 등"
|
|
51
|
-
|
|
52
|
-
- type: checkboxes
|
|
53
|
-
id: impact
|
|
54
|
-
attributes:
|
|
55
|
-
label: "⚡ 예상 영향"
|
|
56
|
-
options:
|
|
57
|
-
- label: "클라이언트 앱 변경 필요"
|
|
58
|
-
- label: "배포 재시작 필요"
|
|
59
|
-
- label: "Firestore 스키마 변경"
|
|
60
|
-
- label: "비용 증가 가능"
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
name: ❓ 질문
|
|
2
|
-
description: 코드나 프로젝트에 대한 질문입니다.
|
|
3
|
-
title: '[QUESTION] '
|
|
4
|
-
labels: ['question']
|
|
5
|
-
body:
|
|
6
|
-
- type: textarea
|
|
7
|
-
id: question
|
|
8
|
-
attributes:
|
|
9
|
-
label: "💬 질문 내용"
|
|
10
|
-
placeholder: "궁금하신 점을 자세히..."
|
|
11
|
-
validations:
|
|
12
|
-
required: true
|
|
13
|
-
- type: textarea
|
|
14
|
-
id: code
|
|
15
|
-
attributes:
|
|
16
|
-
label: "📱 관련 코드 (선택)"
|
|
17
|
-
render: kotlin
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
name: 🔄 리팩토링
|
|
2
|
-
description: 코드 리팩토링 요청입니다.
|
|
3
|
-
title: '[REFACTOR] '
|
|
4
|
-
labels: ['refactoring']
|
|
5
|
-
|
|
6
|
-
body:
|
|
7
|
-
- type: textarea
|
|
8
|
-
id: code
|
|
9
|
-
attributes:
|
|
10
|
-
label: "🎯 리팩토링 대상 코드"
|
|
11
|
-
description: "index.ts 또는 관련 파일의 해당 부분을 붙여넣으세요."
|
|
12
|
-
placeholder: |
|
|
13
|
-
```typescript
|
|
14
|
-
// 리팩토링할 Functions 코드
|
|
15
|
-
export const sample = functions.https.onRequest((req, res) => {
|
|
16
|
-
// ...
|
|
17
|
-
});
|
|
18
|
-
```
|
|
19
|
-
render: typescript
|
|
20
|
-
validations:
|
|
21
|
-
required: true
|
|
22
|
-
|
|
23
|
-
- type: dropdown
|
|
24
|
-
id: reason
|
|
25
|
-
attributes:
|
|
26
|
-
label: "💡 개선 이유 (복수 선택)"
|
|
27
|
-
multiple: true
|
|
28
|
-
options:
|
|
29
|
-
- "가독성 향상"
|
|
30
|
-
- "성능 최적화 (콜드 스타트, 메모리)"
|
|
31
|
-
- "유지보수성 개선"
|
|
32
|
-
- "코드 중복 제거"
|
|
33
|
-
- "배포 크기/빌드 시간 최적화"
|
|
34
|
-
- "에러 핸들링 강화"
|
|
35
|
-
- "TypeScript 타입 안전성"
|
|
36
|
-
- "테스트 커버리지 향상"
|
|
37
|
-
|
|
38
|
-
- type: textarea
|
|
39
|
-
id: details
|
|
40
|
-
attributes:
|
|
41
|
-
label: "📝 세부 개선 사항"
|
|
42
|
-
placeholder: "어떤 부분을 어떻게 바꿀지, 예상 이득(예: 콜드 스타트 200ms 단축)을 적어주세요."
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
name: Publish to NPM
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
release:
|
|
5
|
-
types: [created] # GitHub Release 생성 시 트리거
|
|
6
|
-
|
|
7
|
-
jobs:
|
|
8
|
-
publish:
|
|
9
|
-
runs-on: ubuntu-latest
|
|
10
|
-
|
|
11
|
-
steps:
|
|
12
|
-
- name: Checkout
|
|
13
|
-
uses: actions/checkout@v4
|
|
14
|
-
|
|
15
|
-
- name: Setup Node.js
|
|
16
|
-
uses: actions/setup-node@v4
|
|
17
|
-
with:
|
|
18
|
-
node-version: '20'
|
|
19
|
-
registry-url: 'https://registry.npmjs.org'
|
|
20
|
-
|
|
21
|
-
- name: Install dependencies
|
|
22
|
-
run: npm ci
|
|
23
|
-
|
|
24
|
-
- name: Build
|
|
25
|
-
run: npm run build
|
|
26
|
-
|
|
27
|
-
- name: Publish
|
|
28
|
-
run: npm publish --access public
|
|
29
|
-
env:
|
|
30
|
-
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
package/eslint.config.js
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import js from '@eslint/js'
|
|
2
|
-
import globals from 'globals'
|
|
3
|
-
import reactHooks from 'eslint-plugin-react-hooks'
|
|
4
|
-
import reactRefresh from 'eslint-plugin-react-refresh'
|
|
5
|
-
import tseslint from 'typescript-eslint'
|
|
6
|
-
import { defineConfig, globalIgnores } from 'eslint/config'
|
|
7
|
-
|
|
8
|
-
export default defineConfig([
|
|
9
|
-
globalIgnores(['dist']),
|
|
10
|
-
{
|
|
11
|
-
files: ['**/*.{ts,tsx}'],
|
|
12
|
-
extends: [
|
|
13
|
-
js.configs.recommended,
|
|
14
|
-
tseslint.configs.recommended,
|
|
15
|
-
reactHooks.configs.flat.recommended,
|
|
16
|
-
reactRefresh.configs.vite,
|
|
17
|
-
],
|
|
18
|
-
languageOptions: {
|
|
19
|
-
ecmaVersion: 2020,
|
|
20
|
-
globals: globals.browser,
|
|
21
|
-
},
|
|
22
|
-
},
|
|
23
|
-
])
|
package/index.html
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
<!doctype html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8" />
|
|
5
|
-
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
|
6
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
|
-
<title>ienlab-cloud-functions-library</title>
|
|
8
|
-
</head>
|
|
9
|
-
<body>
|
|
10
|
-
<div id="root"></div>
|
|
11
|
-
<script type="module" src="/src/main.tsx"></script>
|
|
12
|
-
</body>
|
|
13
|
-
</html>
|
package/public/favicon.svg
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="48" height="46" fill="none" viewBox="0 0 48 46"><path fill="#863bff" d="M25.946 44.938c-.664.845-2.021.375-2.021-.698V33.937a2.26 2.26 0 0 0-2.262-2.262H10.287c-.92 0-1.456-1.04-.92-1.788l7.48-10.471c1.07-1.497 0-3.578-1.842-3.578H1.237c-.92 0-1.456-1.04-.92-1.788L10.013.474c.214-.297.556-.474.92-.474h28.894c.92 0 1.456 1.04.92 1.788l-7.48 10.471c-1.07 1.498 0 3.579 1.842 3.579h11.377c.943 0 1.473 1.088.89 1.83L25.947 44.94z" style="fill:#863bff;fill:color(display-p3 .5252 .23 1);fill-opacity:1"/><mask id="a" width="48" height="46" x="0" y="0" maskUnits="userSpaceOnUse" style="mask-type:alpha"><path fill="#000" d="M25.842 44.938c-.664.844-2.021.375-2.021-.698V33.937a2.26 2.26 0 0 0-2.262-2.262H10.183c-.92 0-1.456-1.04-.92-1.788l7.48-10.471c1.07-1.498 0-3.579-1.842-3.579H1.133c-.92 0-1.456-1.04-.92-1.787L9.91.473c.214-.297.556-.474.92-.474h28.894c.92 0 1.456 1.04.92 1.788l-7.48 10.471c-1.07 1.498 0 3.578 1.842 3.578h11.377c.943 0 1.473 1.088.89 1.832L25.843 44.94z" style="fill:#000;fill-opacity:1"/></mask><g mask="url(#a)"><g filter="url(#b)"><ellipse cx="5.508" cy="14.704" fill="#ede6ff" rx="5.508" ry="14.704" style="fill:#ede6ff;fill:color(display-p3 .9275 .9033 1);fill-opacity:1" transform="matrix(.00324 1 1 -.00324 -4.47 31.516)"/></g><g filter="url(#c)"><ellipse cx="10.399" cy="29.851" fill="#ede6ff" rx="10.399" ry="29.851" style="fill:#ede6ff;fill:color(display-p3 .9275 .9033 1);fill-opacity:1" transform="matrix(.00324 1 1 -.00324 -39.328 7.883)"/></g><g filter="url(#d)"><ellipse cx="5.508" cy="30.487" fill="#7e14ff" rx="5.508" ry="30.487" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(89.814 -25.913 -14.639)scale(1 -1)"/></g><g filter="url(#e)"><ellipse cx="5.508" cy="30.599" fill="#7e14ff" rx="5.508" ry="30.599" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(89.814 -32.644 -3.334)scale(1 -1)"/></g><g filter="url(#f)"><ellipse cx="5.508" cy="30.599" fill="#7e14ff" rx="5.508" ry="30.599" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="matrix(.00324 1 1 -.00324 -34.34 30.47)"/></g><g filter="url(#g)"><ellipse cx="14.072" cy="22.078" fill="#ede6ff" rx="14.072" ry="22.078" style="fill:#ede6ff;fill:color(display-p3 .9275 .9033 1);fill-opacity:1" transform="rotate(93.35 24.506 48.493)scale(-1 1)"/></g><g filter="url(#h)"><ellipse cx="3.47" cy="21.501" fill="#7e14ff" rx="3.47" ry="21.501" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(89.009 28.708 47.59)scale(-1 1)"/></g><g filter="url(#i)"><ellipse cx="3.47" cy="21.501" fill="#7e14ff" rx="3.47" ry="21.501" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(89.009 28.708 47.59)scale(-1 1)"/></g><g filter="url(#j)"><ellipse cx=".387" cy="8.972" fill="#7e14ff" rx="4.407" ry="29.108" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(39.51 .387 8.972)"/></g><g filter="url(#k)"><ellipse cx="47.523" cy="-6.092" fill="#7e14ff" rx="4.407" ry="29.108" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(37.892 47.523 -6.092)"/></g><g filter="url(#l)"><ellipse cx="41.412" cy="6.333" fill="#47bfff" rx="5.971" ry="9.665" style="fill:#47bfff;fill:color(display-p3 .2799 .748 1);fill-opacity:1" transform="rotate(37.892 41.412 6.333)"/></g><g filter="url(#m)"><ellipse cx="-1.879" cy="38.332" fill="#7e14ff" rx="4.407" ry="29.108" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(37.892 -1.88 38.332)"/></g><g filter="url(#n)"><ellipse cx="-1.879" cy="38.332" fill="#7e14ff" rx="4.407" ry="29.108" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(37.892 -1.88 38.332)"/></g><g filter="url(#o)"><ellipse cx="35.651" cy="29.907" fill="#7e14ff" rx="4.407" ry="29.108" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(37.892 35.651 29.907)"/></g><g filter="url(#p)"><ellipse cx="38.418" cy="32.4" fill="#47bfff" rx="5.971" ry="15.297" style="fill:#47bfff;fill:color(display-p3 .2799 .748 1);fill-opacity:1" transform="rotate(37.892 38.418 32.4)"/></g></g><defs><filter id="b" width="60.045" height="41.654" x="-19.77" y="16.149" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="7.659"/></filter><filter id="c" width="90.34" height="51.437" x="-54.613" y="-7.533" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="7.659"/></filter><filter id="d" width="79.355" height="29.4" x="-49.64" y="2.03" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="e" width="79.579" height="29.4" x="-45.045" y="20.029" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="f" width="79.579" height="29.4" x="-43.513" y="21.178" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="g" width="74.749" height="58.852" x="15.756" y="-17.901" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="7.659"/></filter><filter id="h" width="61.377" height="25.362" x="23.548" y="2.284" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="i" width="61.377" height="25.362" x="23.548" y="2.284" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="j" width="56.045" height="63.649" x="-27.636" y="-22.853" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="k" width="54.814" height="64.646" x="20.116" y="-38.415" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="l" width="33.541" height="35.313" x="24.641" y="-11.323" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="m" width="54.814" height="64.646" x="-29.286" y="6.009" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="n" width="54.814" height="64.646" x="-29.286" y="6.009" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="o" width="54.814" height="64.646" x="8.244" y="-2.416" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="p" width="39.409" height="43.623" x="18.713" y="10.588" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter></defs></svg>
|
package/public/icons.svg
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg">
|
|
2
|
-
<symbol id="bluesky-icon" viewBox="0 0 16 17">
|
|
3
|
-
<g clip-path="url(#bluesky-clip)"><path fill="#08060d" d="M7.75 7.735c-.693-1.348-2.58-3.86-4.334-5.097-1.68-1.187-2.32-.981-2.74-.79C.188 2.065.1 2.812.1 3.251s.241 3.602.398 4.13c.52 1.744 2.367 2.333 4.07 2.145-2.495.37-4.71 1.278-1.805 4.512 3.196 3.309 4.38-.71 4.987-2.746.608 2.036 1.307 5.91 4.93 2.746 2.72-2.746.747-4.143-1.747-4.512 1.702.189 3.55-.4 4.07-2.145.156-.528.397-3.691.397-4.13s-.088-1.186-.575-1.406c-.42-.19-1.06-.395-2.741.79-1.755 1.24-3.64 3.752-4.334 5.099"/></g>
|
|
4
|
-
<defs><clipPath id="bluesky-clip"><path fill="#fff" d="M.1.85h15.3v15.3H.1z"/></clipPath></defs>
|
|
5
|
-
</symbol>
|
|
6
|
-
<symbol id="discord-icon" viewBox="0 0 20 19">
|
|
7
|
-
<path fill="#08060d" d="M16.224 3.768a14.5 14.5 0 0 0-3.67-1.153c-.158.286-.343.67-.47.976a13.5 13.5 0 0 0-4.067 0c-.128-.306-.317-.69-.476-.976A14.4 14.4 0 0 0 3.868 3.77C1.546 7.28.916 10.703 1.231 14.077a14.7 14.7 0 0 0 4.5 2.306q.545-.748.965-1.587a9.5 9.5 0 0 1-1.518-.74q.191-.14.372-.293c2.927 1.369 6.107 1.369 8.999 0q.183.152.372.294-.723.437-1.52.74.418.838.963 1.588a14.6 14.6 0 0 0 4.504-2.308c.37-3.911-.63-7.302-2.644-10.309m-9.13 8.234c-.878 0-1.599-.82-1.599-1.82 0-.998.705-1.82 1.6-1.82.894 0 1.614.82 1.599 1.82.001 1-.705 1.82-1.6 1.82m5.91 0c-.878 0-1.599-.82-1.599-1.82 0-.998.705-1.82 1.6-1.82.893 0 1.614.82 1.599 1.82 0 1-.706 1.82-1.6 1.82"/>
|
|
8
|
-
</symbol>
|
|
9
|
-
<symbol id="documentation-icon" viewBox="0 0 21 20">
|
|
10
|
-
<path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="m15.5 13.333 1.533 1.322c.645.555.967.833.967 1.178s-.322.623-.967 1.179L15.5 18.333m-3.333-5-1.534 1.322c-.644.555-.966.833-.966 1.178s.322.623.966 1.179l1.534 1.321"/>
|
|
11
|
-
<path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="M17.167 10.836v-4.32c0-1.41 0-2.117-.224-2.68-.359-.906-1.118-1.621-2.08-1.96-.599-.21-1.349-.21-2.848-.21-2.623 0-3.935 0-4.983.369-1.684.591-3.013 1.842-3.641 3.428C3 6.449 3 7.684 3 10.154v2.122c0 2.558 0 3.838.706 4.726q.306.383.713.671c.76.536 1.79.64 3.581.66"/>
|
|
12
|
-
<path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="M3 10a2.78 2.78 0 0 1 2.778-2.778c.555 0 1.209.097 1.748-.047.48-.129.854-.503.982-.982.145-.54.048-1.194.048-1.749a2.78 2.78 0 0 1 2.777-2.777"/>
|
|
13
|
-
</symbol>
|
|
14
|
-
<symbol id="github-icon" viewBox="0 0 19 19">
|
|
15
|
-
<path fill="#08060d" fill-rule="evenodd" d="M9.356 1.85C5.05 1.85 1.57 5.356 1.57 9.694a7.84 7.84 0 0 0 5.324 7.44c.387.079.528-.168.528-.376 0-.182-.013-.805-.013-1.454-2.165.467-2.616-.935-2.616-.935-.349-.91-.864-1.143-.864-1.143-.71-.48.051-.48.051-.48.787.051 1.2.805 1.2.805.695 1.194 1.817.857 2.268.649.064-.507.27-.857.49-1.052-1.728-.182-3.545-.857-3.545-3.87 0-.857.31-1.558.8-2.104-.078-.195-.349-1 .077-2.078 0 0 .657-.208 2.14.805a7.5 7.5 0 0 1 1.946-.26c.657 0 1.328.092 1.946.26 1.483-1.013 2.14-.805 2.14-.805.426 1.078.155 1.883.078 2.078.502.546.799 1.247.799 2.104 0 3.013-1.818 3.675-3.558 3.87.284.247.528.714.528 1.454 0 1.052-.012 1.896-.012 2.156 0 .208.142.455.528.377a7.84 7.84 0 0 0 5.324-7.441c.013-4.338-3.48-7.844-7.773-7.844" clip-rule="evenodd"/>
|
|
16
|
-
</symbol>
|
|
17
|
-
<symbol id="social-icon" viewBox="0 0 20 20">
|
|
18
|
-
<path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="M12.5 6.667a4.167 4.167 0 1 0-8.334 0 4.167 4.167 0 0 0 8.334 0"/>
|
|
19
|
-
<path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="M2.5 16.667a5.833 5.833 0 0 1 8.75-5.053m3.837.474.513 1.035c.07.144.257.282.414.309l.93.155c.596.1.736.536.307.965l-.723.73a.64.64 0 0 0-.152.531l.207.903c.164.715-.213.991-.84.618l-.872-.52a.63.63 0 0 0-.577 0l-.872.52c-.624.373-1.003.094-.84-.618l.207-.903a.64.64 0 0 0-.152-.532l-.723-.729c-.426-.43-.289-.864.306-.964l.93-.156a.64.64 0 0 0 .412-.31l.513-1.034c.28-.562.735-.562 1.012 0"/>
|
|
20
|
-
</symbol>
|
|
21
|
-
<symbol id="x-icon" viewBox="0 0 19 19">
|
|
22
|
-
<path fill="#08060d" fill-rule="evenodd" d="M1.893 1.98c.052.072 1.245 1.769 2.653 3.77l2.892 4.114c.183.261.333.48.333.486s-.068.089-.152.183l-.522.593-.765.867-3.597 4.087c-.375.426-.734.834-.798.905a1 1 0 0 0-.118.148c0 .01.236.017.664.017h.663l.729-.83c.4-.457.796-.906.879-.999a692 692 0 0 0 1.794-2.038c.034-.037.301-.34.594-.675l.551-.624.345-.392a7 7 0 0 1 .34-.374c.006 0 .93 1.306 2.052 2.903l2.084 2.965.045.063h2.275c1.87 0 2.273-.003 2.266-.021-.008-.02-1.098-1.572-3.894-5.547-2.013-2.862-2.28-3.246-2.273-3.266.008-.019.282-.332 2.085-2.38l2-2.274 1.567-1.782c.022-.028-.016-.03-.65-.03h-.674l-.3.342a871 871 0 0 1-1.782 2.025c-.067.075-.405.458-.75.852a100 100 0 0 1-.803.91c-.148.172-.299.344-.99 1.127-.304.343-.32.358-.345.327-.015-.019-.904-1.282-1.976-2.808L6.365 1.85H1.8zm1.782.91 8.078 11.294c.772 1.08 1.413 1.973 1.425 1.984.016.017.241.02 1.05.017l1.03-.004-2.694-3.766L7.796 5.75 5.722 2.852l-1.039-.004-1.039-.004z" clip-rule="evenodd"/>
|
|
23
|
-
</symbol>
|
|
24
|
-
</svg>
|
package/src/App.css
DELETED
|
@@ -1,184 +0,0 @@
|
|
|
1
|
-
.counter {
|
|
2
|
-
font-size: 16px;
|
|
3
|
-
padding: 5px 10px;
|
|
4
|
-
border-radius: 5px;
|
|
5
|
-
color: var(--accent);
|
|
6
|
-
background: var(--accent-bg);
|
|
7
|
-
border: 2px solid transparent;
|
|
8
|
-
transition: border-color 0.3s;
|
|
9
|
-
margin-bottom: 24px;
|
|
10
|
-
|
|
11
|
-
&:hover {
|
|
12
|
-
border-color: var(--accent-border);
|
|
13
|
-
}
|
|
14
|
-
&:focus-visible {
|
|
15
|
-
outline: 2px solid var(--accent);
|
|
16
|
-
outline-offset: 2px;
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
.hero {
|
|
21
|
-
position: relative;
|
|
22
|
-
|
|
23
|
-
.base,
|
|
24
|
-
.framework,
|
|
25
|
-
.vite {
|
|
26
|
-
inset-inline: 0;
|
|
27
|
-
margin: 0 auto;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
.base {
|
|
31
|
-
width: 170px;
|
|
32
|
-
position: relative;
|
|
33
|
-
z-index: 0;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
.framework,
|
|
37
|
-
.vite {
|
|
38
|
-
position: absolute;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
.framework {
|
|
42
|
-
z-index: 1;
|
|
43
|
-
top: 34px;
|
|
44
|
-
height: 28px;
|
|
45
|
-
transform: perspective(2000px) rotateZ(300deg) rotateX(44deg) rotateY(39deg)
|
|
46
|
-
scale(1.4);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
.vite {
|
|
50
|
-
z-index: 0;
|
|
51
|
-
top: 107px;
|
|
52
|
-
height: 26px;
|
|
53
|
-
width: auto;
|
|
54
|
-
transform: perspective(2000px) rotateZ(300deg) rotateX(40deg) rotateY(39deg)
|
|
55
|
-
scale(0.8);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
#center {
|
|
60
|
-
display: flex;
|
|
61
|
-
flex-direction: column;
|
|
62
|
-
gap: 25px;
|
|
63
|
-
place-content: center;
|
|
64
|
-
place-items: center;
|
|
65
|
-
flex-grow: 1;
|
|
66
|
-
|
|
67
|
-
@media (max-width: 1024px) {
|
|
68
|
-
padding: 32px 20px 24px;
|
|
69
|
-
gap: 18px;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
#next-steps {
|
|
74
|
-
display: flex;
|
|
75
|
-
border-top: 1px solid var(--border);
|
|
76
|
-
text-align: left;
|
|
77
|
-
|
|
78
|
-
& > div {
|
|
79
|
-
flex: 1 1 0;
|
|
80
|
-
padding: 32px;
|
|
81
|
-
@media (max-width: 1024px) {
|
|
82
|
-
padding: 24px 20px;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
.icon {
|
|
87
|
-
margin-bottom: 16px;
|
|
88
|
-
width: 22px;
|
|
89
|
-
height: 22px;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
@media (max-width: 1024px) {
|
|
93
|
-
flex-direction: column;
|
|
94
|
-
text-align: center;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
#docs {
|
|
99
|
-
border-right: 1px solid var(--border);
|
|
100
|
-
|
|
101
|
-
@media (max-width: 1024px) {
|
|
102
|
-
border-right: none;
|
|
103
|
-
border-bottom: 1px solid var(--border);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
#next-steps ul {
|
|
108
|
-
list-style: none;
|
|
109
|
-
padding: 0;
|
|
110
|
-
display: flex;
|
|
111
|
-
gap: 8px;
|
|
112
|
-
margin: 32px 0 0;
|
|
113
|
-
|
|
114
|
-
.logo {
|
|
115
|
-
height: 18px;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
a {
|
|
119
|
-
color: var(--text-h);
|
|
120
|
-
font-size: 16px;
|
|
121
|
-
border-radius: 6px;
|
|
122
|
-
background: var(--social-bg);
|
|
123
|
-
display: flex;
|
|
124
|
-
padding: 6px 12px;
|
|
125
|
-
align-items: center;
|
|
126
|
-
gap: 8px;
|
|
127
|
-
text-decoration: none;
|
|
128
|
-
transition: box-shadow 0.3s;
|
|
129
|
-
|
|
130
|
-
&:hover {
|
|
131
|
-
box-shadow: var(--shadow);
|
|
132
|
-
}
|
|
133
|
-
.button-icon {
|
|
134
|
-
height: 18px;
|
|
135
|
-
width: 18px;
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
@media (max-width: 1024px) {
|
|
140
|
-
margin-top: 20px;
|
|
141
|
-
flex-wrap: wrap;
|
|
142
|
-
justify-content: center;
|
|
143
|
-
|
|
144
|
-
li {
|
|
145
|
-
flex: 1 1 calc(50% - 8px);
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
a {
|
|
149
|
-
width: 100%;
|
|
150
|
-
justify-content: center;
|
|
151
|
-
box-sizing: border-box;
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
#spacer {
|
|
157
|
-
height: 88px;
|
|
158
|
-
border-top: 1px solid var(--border);
|
|
159
|
-
@media (max-width: 1024px) {
|
|
160
|
-
height: 48px;
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
.ticks {
|
|
165
|
-
position: relative;
|
|
166
|
-
width: 100%;
|
|
167
|
-
|
|
168
|
-
&::before,
|
|
169
|
-
&::after {
|
|
170
|
-
content: '';
|
|
171
|
-
position: absolute;
|
|
172
|
-
top: -4.5px;
|
|
173
|
-
border: 5px solid transparent;
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
&::before {
|
|
177
|
-
left: 0;
|
|
178
|
-
border-left-color: var(--border);
|
|
179
|
-
}
|
|
180
|
-
&::after {
|
|
181
|
-
right: 0;
|
|
182
|
-
border-right-color: var(--border);
|
|
183
|
-
}
|
|
184
|
-
}
|