style: prettier reformatting of the entire codebase

Former-commit-id: 6ad2fac2e9cab83dd484e90e80732067d22616e8 [formerly 0834b7e2aaeb6a04e31f5f04cf88f01b2c256986] [formerly a4dcf0af4dfe6fcf744184676baa2d4caeb40fc7 [formerly 9632ffb6671d8f30ca33c51bda106c299a4c07da]]
Former-commit-id: 23ac95ccea08e36479fe17ac5ae4c2bdc4d77119 [formerly 450788517ac9fabdc16607b8f41785bb5c55917e]
Former-commit-id: 256d0df6be62899478c8a3a5258f296649f4672d
This commit is contained in:
Melvin Chia
2025-10-05 12:26:11 +08:00
parent 09ad177519
commit e8690ec913
263 changed files with 2595 additions and 2335 deletions

View File

@@ -2,7 +2,7 @@ name: Build
on:
pull_request:
types: [ opened, synchronize, reopened ]
types: [opened, synchronize, reopened]
permissions:
contents: read
@@ -12,56 +12,56 @@ jobs:
build-backend:
name: Build Backend
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: latest
- name: Install dependencies
run: bun install --frozen-lockfile
- name: Type check server
run: bun run forge types server
- name: Build server
run: bun run forge build server
build-frontend:
name: Build Frontend
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: latest
- name: Install dependencies
run: bun install --frozen-lockfile
- name: Type check shared package
run: bun run forge types shared
- name: Build shared package
run: bun run forge build shared
- name: Type check UI package
run: bun run forge types ui
- name: Build UI package
- name: Build UI package
run: bun run forge build ui
- name: Type check client
run: bun run forge types client
- name: Build client
run: bun run forge build client
@@ -70,7 +70,7 @@ jobs:
runs-on: ubuntu-latest
needs: [build-backend, build-frontend]
if: always() && github.event_name == 'pull_request'
steps:
- name: Comment PR
uses: actions/github-script@v7
@@ -80,10 +80,10 @@ jobs:
const runId = context.runId;
const backendResult = '${{ needs.build-backend.result }}';
const frontendResult = '${{ needs.build-frontend.result }}';
let summary = '## 🔨 Build Results\n\n';
let allSuccess = true;
// Backend status
if (backendResult === 'success') {
summary += '✅ **Backend Build**: Passed\n';
@@ -91,7 +91,7 @@ jobs:
summary += `❌ **Backend Build**: Failed (${backendResult})\n`;
allSuccess = false;
}
// Frontend status
if (frontendResult === 'success') {
summary += '✅ **Frontend Build**: Passed\n';
@@ -99,29 +99,29 @@ jobs:
summary += `❌ **Frontend Build**: Failed (${frontendResult})\n`;
allSuccess = false;
}
summary += '\n';
if (allSuccess) {
summary += '🎉 All builds completed successfully!';
} else {
summary += '⚠️ One or more builds failed. Please check the logs for details.';
}
summary += `\n\n🔗 [View full workflow run](https://github.com/${owner}/${repo}/actions/runs/${runId})`;
// Find existing comment to update
const comments = await github.rest.issues.listComments({
owner,
repo,
issue_number: number,
});
const botComment = comments.data.find(
comment => comment.user.type === 'Bot' &&
comment.body.includes('## 🔨 Build Results')
);
if (botComment) {
// Update existing comment
await github.rest.issues.updateComment({

View File

@@ -1,8 +1,9 @@
Generate TypeScript prop interface docstrings following this exact convention:
**FORMAT**: Use single-line JSDoc `/** Description. */`
**FORMAT**: Use single-line JSDoc `/** Description. */`
**PHRASING RULES**:
- Boolean props: "Whether the [component] is [state/condition]."
- Callback functions: "Callback function called when [event/condition]."
- String/value props: "The [description] [additional context]."
@@ -15,6 +16,7 @@ Generate TypeScript prop interface docstrings following this exact convention:
- Callbacks with changes: "Callback function called when the [property] changes."
**SPECIAL PATTERNS**:
- For defaults: "The [description]. Defaults to '[value]'."
- For Tailwind CSS: "Additional CSS class names to apply to the [element]. Use `!` suffix for Tailwind CSS class overrides."
- For i18n namespace: "The i18n namespace for internationalization. See the [main documentation](https://docs.lifeforge.melvinchia.dev) for more details."
@@ -22,9 +24,10 @@ Generate TypeScript prop interface docstrings following this exact convention:
- For tProps props: "Additional properties for the translation function. Used for dynamic translations. See the [i18n documentation](https://docs.lifeforge.melvinchia.dev) for more details."
**REQUIREMENTS**:
- Start with capital letter, end with period
- Be concise but descriptive
- Use consistent terminology across similar props
- Include examples in parentheses when helpful (e.g., "#FF0000")
Generate docstrings for the selected interface.
Generate docstrings for the selected interface.

View File

@@ -8,11 +8,9 @@
"@trivago/prettier-plugin-sort-imports",
"prettier-plugin-tailwindcss"
],
"importOrder": [
"^shared/(.*)$",
"@apps/(.*)$",
"^[./]"
],
"importOrder": ["^shared/(.*)$", "@apps/(.*)$", "^[./]"],
"importOrderSeparation": true,
"importOrderSortSpecifiers": true
}
"importOrderSortSpecifiers": true,
"tabWidth": 2,
"bracketSameLine": false
}

View File

@@ -1,10 +1,5 @@
{
"cSpell.words": [
"ITMDB",
"nuqs",
"Sizer",
"subnamespace"
],
"cSpell.words": ["ITMDB", "nuqs", "Sizer", "subnamespace"],
"typescript.tsdk": "node_modules/typescript/lib",
"typescript.experimental.useTsgo": false
}
}

View File

@@ -1,50 +1,36 @@
{
"compilerOptions": {
// JSX and Language Settings
"jsx": "react-jsx",
"target": "ES2020",
"lib": [
"ES2020",
"DOM",
"DOM.Iterable",
"ES2024.Object"
],
// Module Resolution
"module": "ESNext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"verbatimModuleSyntax": true,
// Build and Output
"composite": true,
"noEmit": true,
"skipLibCheck": true,
// Type Checking
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"useDefineForClassFields": true,
"noFallthroughCasesInSwitch": true,
// Path Mapping
"paths": {
"@": [
"./src/index"
],
"@/*": [
"./src/*"
],
"@server/*": [
"../../../server/src/*"
]
}
},
"references": [
{
"path": "../../../server/tsconfig.json"
}
]
}
"compilerOptions": {
// JSX and Language Settings
"jsx": "react-jsx",
"target": "ES2020",
"lib": ["ES2020", "DOM", "DOM.Iterable", "ES2024.Object"],
// Module Resolution
"module": "ESNext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"verbatimModuleSyntax": true,
// Build and Output
"composite": true,
"noEmit": true,
"skipLibCheck": true,
// Type Checking
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"useDefineForClassFields": true,
"noFallthroughCasesInSwitch": true,
// Path Mapping
"paths": {
"@": ["./src/index"],
"@/*": ["./src/*"],
"@server/*": ["../../../server/src/*"]
}
},
"include": ["./src/**/*", "./manifest.ts"],
"references": [
{
"path": "../../../server/tsconfig.json"
}
]
}

View File

@@ -1,3 +1,3 @@
{
"type": "module"
}
"type": "module"
}

View File

@@ -1,3 +1,3 @@
{
"extends": "../../../server/tsconfig.json"
}
"extends": "../../../server/tsconfig.json"
}

View File

@@ -1,50 +1,36 @@
{
"compilerOptions": {
// JSX and Language Settings
"jsx": "react-jsx",
"target": "ES2020",
"lib": [
"ES2020",
"DOM",
"DOM.Iterable",
"ES2024.Object"
],
// Module Resolution
"module": "ESNext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"verbatimModuleSyntax": true,
// Build and Output
"composite": true,
"noEmit": true,
"skipLibCheck": true,
// Type Checking
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"useDefineForClassFields": true,
"noFallthroughCasesInSwitch": true,
// Path Mapping
"paths": {
"@": [
"./src/index"
],
"@/*": [
"./src/*"
],
"@server/*": [
"../../../server/src/*"
]
}
},
"references": [
{
"path": "../../../server/tsconfig.json"
}
]
}
"compilerOptions": {
// JSX and Language Settings
"jsx": "react-jsx",
"target": "ES2020",
"lib": ["ES2020", "DOM", "DOM.Iterable", "ES2024.Object"],
// Module Resolution
"module": "ESNext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"verbatimModuleSyntax": true,
// Build and Output
"composite": true,
"noEmit": true,
"skipLibCheck": true,
// Type Checking
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"useDefineForClassFields": true,
"noFallthroughCasesInSwitch": true,
// Path Mapping
"paths": {
"@": ["./src/index"],
"@/*": ["./src/*"],
"@server/*": ["../../../server/src/*"]
}
},
"include": ["./src/**/*", "./manifest.ts"],
"references": [
{
"path": "../../../server/tsconfig.json"
}
]
}

View File

@@ -1,3 +1,3 @@
{
"type": "module"
}
"type": "module"
}

View File

@@ -1,3 +1,3 @@
{
"extends": "../../../server/tsconfig.json"
}
"extends": "../../../server/tsconfig.json"
}

View File

@@ -172,8 +172,9 @@ function AnnasModal({ onClose }: { onClose: () => void }) {
</span>
</p>
<p className="text-bg-500 text-sm font-light">
{data.total} result{data.total !== 1 ? 's' : ''} found on
page {currentPage} of {data.totalPages}
{data.total} result
{data.total !== 1 ? 's' : ''} found on page {currentPage} of{' '}
{data.totalPages}
</p>
</div>
<Pagination

View File

@@ -26,7 +26,9 @@ function ModifyModal({
})
).mutationOptions({
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['booksLibrary', stuff] })
queryClient.invalidateQueries({
queryKey: ['booksLibrary', stuff]
})
},
onError: () => {
toast.error(`Failed to ${type} ${_.camelCase(stuff)}`)

View File

@@ -79,7 +79,10 @@ function BooksLibrary() {
new
</Button>
}
classNames={{ wrapper: 'hidden md:block', menu: 'w-64' }}
classNames={{
wrapper: 'hidden md:block',
menu: 'w-64'
}}
>
<ContextMenuItem
icon="tabler:upload"

View File

@@ -1,50 +1,36 @@
{
"compilerOptions": {
// JSX and Language Settings
"jsx": "react-jsx",
"target": "ES2020",
"lib": [
"ES2020",
"DOM",
"DOM.Iterable",
"ES2024.Object"
],
// Module Resolution
"module": "ESNext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"verbatimModuleSyntax": true,
// Build and Output
"composite": true,
"noEmit": true,
"skipLibCheck": true,
// Type Checking
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"useDefineForClassFields": true,
"noFallthroughCasesInSwitch": true,
// Path Mapping
"paths": {
"@": [
"./src/index"
],
"@/*": [
"./src/*"
],
"@server/*": [
"../../../server/src/*"
]
}
},
"references": [
{
"path": "../../../server/tsconfig.json"
}
]
}
"compilerOptions": {
// JSX and Language Settings
"jsx": "react-jsx",
"target": "ES2020",
"lib": ["ES2020", "DOM", "DOM.Iterable", "ES2024.Object"],
// Module Resolution
"module": "ESNext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"verbatimModuleSyntax": true,
// Build and Output
"composite": true,
"noEmit": true,
"skipLibCheck": true,
// Type Checking
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"useDefineForClassFields": true,
"noFallthroughCasesInSwitch": true,
// Path Mapping
"paths": {
"@": ["./src/index"],
"@/*": ["./src/*"],
"@server/*": ["../../../server/src/*"]
}
},
"include": ["./src/**/*", "./manifest.ts"],
"references": [
{
"path": "../../../server/tsconfig.json"
}
]
}

View File

@@ -134,4 +134,4 @@
"kindleSent": "Fired process to send the selected document to the targeted email address.",
"bookmarkedBooks": "Bookmarked Books",
"bookmarkedBooksDesc": "You have {{number}} bookmarked book(s)"
}
}

View File

@@ -134,4 +134,4 @@
"kindleSent": "Proses dijalankan untuk menghantar dokumen terpilih ke alamat e-mel yang disasarkan.",
"bookmarkedBooks": "Buku Yang Ditempah",
"bookmarkedBooksDesc": "Anda mempunyai {{number}} buku yang ditandai"
}
}

View File

@@ -134,4 +134,4 @@
"kindleSent": "已启动进程将所选文档发送到目标邮箱地址。",
"bookmarkedBooks": "已收藏的书籍",
"bookmarkedBooksDesc": "您有 {{number}} 本书已添加书签"
}
}

View File

@@ -134,4 +134,4 @@
"kindleSent": "已啟動程序將所選文件傳送到目標電子郵件地址。",
"bookmarkedBooks": "已書籤的書籍",
"bookmarkedBooksDesc": "您有 {{number}} 本書已加書籤"
}
}

View File

@@ -1,3 +1,3 @@
{
"type": "module"
}
"type": "module"
}

View File

@@ -5,6 +5,7 @@ import { forgeController, forgeRouter } from '@functions/routes'
import { ClientError } from '@functions/routes/utils/response'
import { addToTaskPool, updateTaskInPool } from '@functions/socketio/taskPool'
import convertPDFToImage from '@functions/utils/convertPDFToImage'
import { SCHEMAS } from '@schema'
import { EPub } from 'epub2'
import { countWords } from 'epub-wordcount'
import fs from 'fs'
@@ -14,8 +15,6 @@ import mailer from 'nodemailer'
import pdfPageCounter from 'pdf-page-counter'
import z from 'zod'
import { SCHEMAS } from '@schema'
const list = forgeController
.query()
.description(

View File

@@ -1,3 +1,3 @@
{
"extends": "../../../server/tsconfig.json"
}
"extends": "../../../server/tsconfig.json"
}

View File

@@ -39,7 +39,10 @@ function EventDetailsHeader({
.mutationOptions({
onSuccess: () => {
queryClient.setQueryData(
forgeAPI.calendar.events.getByDateRange.input({ start, end }).key,
forgeAPI.calendar.events.getByDateRange.input({
start,
end
}).key,
(oldData: CalendarEvent[]) => {
return oldData.filter(item => item.id !== event.id)
}

View File

@@ -9,7 +9,7 @@ function EventItemButton({
title,
color,
icon,
isStrikethrough,
isStrikethrough
}: {
id: string
title: string

View File

@@ -23,7 +23,9 @@ function ModifyCalendarModal({
const mutation = useMutation(
(type === 'create'
? forgeAPI.calendar.calendars.create
: forgeAPI.calendar.calendars.update.input({ id: initialData?.id || '' })
: forgeAPI.calendar.calendars.update.input({
id: initialData?.id || ''
})
).mutationOptions({
onSuccess: () => {
queryClient.invalidateQueries({

View File

@@ -124,8 +124,16 @@ function ModifyEventModal({
required: true,
icon: 'tabler:calendar',
options: [
{ value: 'single', text: 'Single Event', icon: 'tabler:calendar' },
{ value: 'recurring', text: 'Recurring Event', icon: 'tabler:repeat' }
{
value: 'single',
text: 'Single Event',
icon: 'tabler:calendar'
},
{
value: 'recurring',
text: 'Recurring Event',
icon: 'tabler:repeat'
}
],
disabled: type === 'update'
},

View File

@@ -1,50 +1,36 @@
{
"compilerOptions": {
// JSX and Language Settings
"jsx": "react-jsx",
"target": "ES2020",
"lib": [
"ES2020",
"DOM",
"DOM.Iterable",
"ES2024.Object"
],
// Module Resolution
"module": "ESNext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"verbatimModuleSyntax": true,
// Build and Output
"composite": true,
"noEmit": true,
"skipLibCheck": true,
// Type Checking
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"useDefineForClassFields": true,
"noFallthroughCasesInSwitch": true,
// Path Mapping
"paths": {
"@": [
"./src/index"
],
"@/*": [
"./src/*"
],
"@server/*": [
"../../../server/src/*"
]
}
},
"references": [
{
"path": "../../../server/tsconfig.json"
}
]
}
"compilerOptions": {
// JSX and Language Settings
"jsx": "react-jsx",
"target": "ES2020",
"lib": ["ES2020", "DOM", "DOM.Iterable", "ES2024.Object"],
// Module Resolution
"module": "ESNext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"verbatimModuleSyntax": true,
// Build and Output
"composite": true,
"noEmit": true,
"skipLibCheck": true,
// Type Checking
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"useDefineForClassFields": true,
"noFallthroughCasesInSwitch": true,
// Path Mapping
"paths": {
"@": ["./src/index"],
"@/*": ["./src/*"],
"@server/*": ["../../../server/src/*"]
}
},
"include": ["./src/**/*", "./manifest.ts"],
"references": [
{
"path": "../../../server/tsconfig.json"
}
]
}

View File

@@ -171,4 +171,4 @@
"todaysEvent": "Today's Events",
"miniCalendar": "Mini Calendar"
}
}
}

View File

@@ -171,4 +171,4 @@
"todaysEvent": "Acara Hari Ini",
"miniCalendar": "Kalendar Mini"
}
}
}

View File

@@ -171,4 +171,4 @@
"todaysEvent": "今天的事件",
"miniCalendar": "迷你日历"
}
}
}

View File

@@ -171,4 +171,4 @@
"todaysEvent": "今天的事件",
"miniCalendar": "迷你日曆"
}
}
}

View File

@@ -211,7 +211,11 @@ export default async function getEvents({
await pb.getFullList
.collection('movies__entries')
.filter([
{ field: 'theatre_showtime', operator: '>=', value: startMoment },
{
field: 'theatre_showtime',
operator: '>=',
value: startMoment
},
{ field: 'theatre_showtime', operator: '<=', value: endMoment }
])
.execute()

View File

@@ -1,3 +1,3 @@
{
"type": "module"
}
"type": "module"
}

View File

@@ -1,3 +1,3 @@
{
"extends": "../../../server/tsconfig.json"
}
"extends": "../../../server/tsconfig.json"
}

View File

@@ -1,50 +1,36 @@
{
"compilerOptions": {
// JSX and Language Settings
"jsx": "react-jsx",
"target": "ES2020",
"lib": [
"ES2020",
"DOM",
"DOM.Iterable",
"ES2024.Object"
],
// Module Resolution
"module": "ESNext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"verbatimModuleSyntax": true,
// Build and Output
"composite": true,
"noEmit": true,
"skipLibCheck": true,
// Type Checking
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"useDefineForClassFields": true,
"noFallthroughCasesInSwitch": true,
// Path Mapping
"paths": {
"@": [
"./src/index"
],
"@/*": [
"./src/*"
],
"@server/*": [
"../../../server/src/*"
]
}
},
"references": [
{
"path": "../../../server/tsconfig.json"
}
]
}
"compilerOptions": {
// JSX and Language Settings
"jsx": "react-jsx",
"target": "ES2020",
"lib": ["ES2020", "DOM", "DOM.Iterable", "ES2024.Object"],
// Module Resolution
"module": "ESNext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"verbatimModuleSyntax": true,
// Build and Output
"composite": true,
"noEmit": true,
"skipLibCheck": true,
// Type Checking
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"useDefineForClassFields": true,
"noFallthroughCasesInSwitch": true,
// Path Mapping
"paths": {
"@": ["./src/index"],
"@/*": ["./src/*"],
"@server/*": ["../../../server/src/*"]
}
},
"include": ["./src/**/*", "./manifest.ts"],
"references": [
{
"path": "../../../server/tsconfig.json"
}
]
}

View File

@@ -1,4 +1,4 @@
{
"title": "CFOP Algorithms",
"description": "Learn speedcubing, all in one place"
}
}

View File

@@ -1,4 +1,4 @@
{
"title": "Algoritma CFOP",
"description": "Belajar speedcubing, semua dalam satu tempat"
}
}

View File

@@ -1,4 +1,4 @@
{
"title": "CFOP 算法",
"description": "学习速拧魔方,一站式服务"
}
}

View File

@@ -1,4 +1,4 @@
{
"title": "CFOP 演算法",
"description": "學習速解魔方,一站式服務"
}
}

View File

@@ -1,50 +1,36 @@
{
"compilerOptions": {
// JSX and Language Settings
"jsx": "react-jsx",
"target": "ES2020",
"lib": [
"ES2020",
"DOM",
"DOM.Iterable",
"ES2024.Object"
],
// Module Resolution
"module": "ESNext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"verbatimModuleSyntax": true,
// Build and Output
"composite": true,
"noEmit": true,
"skipLibCheck": true,
// Type Checking
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"useDefineForClassFields": true,
"noFallthroughCasesInSwitch": true,
// Path Mapping
"paths": {
"@": [
"./src/index"
],
"@/*": [
"./src/*"
],
"@server/*": [
"../../../server/src/*"
]
}
},
"references": [
{
"path": "../../../server/tsconfig.json"
}
]
}
"compilerOptions": {
// JSX and Language Settings
"jsx": "react-jsx",
"target": "ES2020",
"lib": ["ES2020", "DOM", "DOM.Iterable", "ES2024.Object"],
// Module Resolution
"module": "ESNext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"verbatimModuleSyntax": true,
// Build and Output
"composite": true,
"noEmit": true,
"skipLibCheck": true,
// Type Checking
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"useDefineForClassFields": true,
"noFallthroughCasesInSwitch": true,
// Path Mapping
"paths": {
"@": ["./src/index"],
"@/*": ["./src/*"],
"@server/*": ["../../../server/src/*"]
}
},
"include": ["./src/**/*", "./manifest.ts"],
"references": [
{
"path": "../../../server/tsconfig.json"
}
]
}

View File

@@ -4,4 +4,4 @@
"items": {
"flight": "Flight"
}
}
}

View File

@@ -4,4 +4,4 @@
"items": {
"flight": "Penerbangan"
}
}
}

View File

@@ -4,4 +4,4 @@
"items": {
"flight": "航班"
}
}
}

View File

@@ -4,4 +4,4 @@
"items": {
"flight": "航班"
}
}
}

View File

@@ -1,3 +1,3 @@
{
"type": "module"
}
"type": "module"
}

View File

@@ -1,3 +1,3 @@
{
"extends": "../../../server/tsconfig.json"
}
"extends": "../../../server/tsconfig.json"
}

View File

@@ -1,50 +1,36 @@
{
"compilerOptions": {
// JSX and Language Settings
"jsx": "react-jsx",
"target": "ES2020",
"lib": [
"ES2020",
"DOM",
"DOM.Iterable",
"ES2024.Object"
],
// Module Resolution
"module": "ESNext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"verbatimModuleSyntax": true,
// Build and Output
"composite": true,
"noEmit": true,
"skipLibCheck": true,
// Type Checking
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"useDefineForClassFields": true,
"noFallthroughCasesInSwitch": true,
// Path Mapping
"paths": {
"@": [
"./src/index"
],
"@/*": [
"./src/*"
],
"@server/*": [
"../../../server/src/*"
]
}
},
"references": [
{
"path": "../../../server/tsconfig.json"
}
]
}
"compilerOptions": {
// JSX and Language Settings
"jsx": "react-jsx",
"target": "ES2020",
"lib": ["ES2020", "DOM", "DOM.Iterable", "ES2024.Object"],
// Module Resolution
"module": "ESNext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"verbatimModuleSyntax": true,
// Build and Output
"composite": true,
"noEmit": true,
"skipLibCheck": true,
// Type Checking
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"useDefineForClassFields": true,
"noFallthroughCasesInSwitch": true,
// Path Mapping
"paths": {
"@": ["./src/index"],
"@/*": ["./src/*"],
"@server/*": ["../../../server/src/*"]
}
},
"include": ["./src/**/*", "./manifest.ts"],
"references": [
{
"path": "../../../server/tsconfig.json"
}
]
}

View File

@@ -27,4 +27,4 @@
"hours": "Hours",
"noTime": "No Time Recorded"
}
}
}

View File

@@ -27,4 +27,4 @@
"hours": "Jam",
"noTime": "Tiada Masa Direkod"
}
}
}

View File

@@ -27,4 +27,4 @@
"hours": "小时",
"noTime": "没有记录时间"
}
}
}

View File

@@ -27,4 +27,4 @@
"hours": "小時",
"noTime": "未記錄時間"
}
}
}

View File

@@ -1,3 +1,3 @@
{
"type": "module"
}
"type": "module"
}

View File

@@ -1,3 +1,3 @@
{
"extends": "../../../server/tsconfig.json"
}
"extends": "../../../server/tsconfig.json"
}

View File

@@ -1,50 +1,36 @@
{
"compilerOptions": {
// JSX and Language Settings
"jsx": "react-jsx",
"target": "ES2020",
"lib": [
"ES2020",
"DOM",
"DOM.Iterable",
"ES2024.Object"
],
// Module Resolution
"module": "ESNext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"verbatimModuleSyntax": true,
// Build and Output
"composite": true,
"noEmit": true,
"skipLibCheck": true,
// Type Checking
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"useDefineForClassFields": true,
"noFallthroughCasesInSwitch": true,
// Path Mapping
"paths": {
"@": [
"./src/index"
],
"@/*": [
"./src/*"
],
"@server/*": [
"../../../server/src/*"
]
}
},
"references": [
{
"path": "../../../server/tsconfig.json"
}
]
}
"compilerOptions": {
// JSX and Language Settings
"jsx": "react-jsx",
"target": "ES2020",
"lib": ["ES2020", "DOM", "DOM.Iterable", "ES2024.Object"],
// Module Resolution
"module": "ESNext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"verbatimModuleSyntax": true,
// Build and Output
"composite": true,
"noEmit": true,
"skipLibCheck": true,
// Type Checking
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"useDefineForClassFields": true,
"noFallthroughCasesInSwitch": true,
// Path Mapping
"paths": {
"@": ["./src/index"],
"@/*": ["./src/*"],
"@server/*": ["../../../server/src/*"]
}
},
"include": ["./src/**/*", "./manifest.ts"],
"references": [
{
"path": "../../../server/tsconfig.json"
}
]
}

View File

@@ -38,7 +38,9 @@ function FolderContextMenu({
})
.mutationOptions({
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['ideaBox', 'folders'] })
queryClient.invalidateQueries({
queryKey: ['ideaBox', 'folders']
})
},
onError: error => {
toast.error(`Failed to delete folder: ${error.message}`)

View File

@@ -47,7 +47,9 @@ function IdeaAndFolderList() {
children: 'new',
onClick: handleIdeaCreation,
icon: 'tabler:plus',
tProps: { item: t('items.idea') }
tProps: {
item: t('items.idea')
}
}}
icon="tabler:bulb-off"
name="idea"

View File

@@ -28,7 +28,9 @@ function ModifyFolderModal({
})
).mutationOptions({
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['ideaBox', 'folders'] })
queryClient.invalidateQueries({
queryKey: ['ideaBox', 'folders']
})
},
onError: error => {
toast.error(`Failed to ${type} folder: ${error.message}`)

View File

@@ -84,8 +84,16 @@ function ModifyIdeaModal({
text: t('entryType.text'),
icon: 'tabler:text-size'
},
{ value: 'link', text: t('entryType.link'), icon: 'tabler:link' },
{ value: 'image', text: t('entryType.image'), icon: 'tabler:photo' }
{
value: 'link',
text: t('entryType.link'),
icon: 'tabler:link'
},
{
value: 'image',
text: t('entryType.image'),
icon: 'tabler:photo'
}
],
disabled: type === 'update'
},

View File

@@ -1,50 +1,36 @@
{
"compilerOptions": {
// JSX and Language Settings
"jsx": "react-jsx",
"target": "ES2020",
"lib": [
"ES2020",
"DOM",
"DOM.Iterable",
"ES2024.Object"
],
// Module Resolution
"module": "ESNext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"verbatimModuleSyntax": true,
// Build and Output
"composite": true,
"noEmit": true,
"skipLibCheck": true,
// Type Checking
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"useDefineForClassFields": true,
"noFallthroughCasesInSwitch": true,
// Path Mapping
"paths": {
"@": [
"./src/index"
],
"@/*": [
"./src/*"
],
"@server/*": [
"../../../server/src/*"
]
}
},
"references": [
{
"path": "../../../server/tsconfig.json"
}
]
}
"compilerOptions": {
// JSX and Language Settings
"jsx": "react-jsx",
"target": "ES2020",
"lib": ["ES2020", "DOM", "DOM.Iterable", "ES2024.Object"],
// Module Resolution
"module": "ESNext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"verbatimModuleSyntax": true,
// Build and Output
"composite": true,
"noEmit": true,
"skipLibCheck": true,
// Type Checking
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"useDefineForClassFields": true,
"noFallthroughCasesInSwitch": true,
// Path Mapping
"paths": {
"@": ["./src/index"],
"@/*": ["./src/*"],
"@server/*": ["../../../server/src/*"]
}
},
"include": ["./src/**/*", "./manifest.ts"],
"references": [
{
"path": "../../../server/tsconfig.json"
}
]
}

View File

@@ -89,4 +89,4 @@
"folder": "Folder",
"ideaInFolder": "Idea in Folder"
}
}
}

View File

@@ -89,4 +89,4 @@
"folder": "Folder",
"ideaInFolder": "Idea dalam Folder"
}
}
}

View File

@@ -89,4 +89,4 @@
"folder": "资料夹",
"ideaInFolder": "资料夹中的创意"
}
}
}

View File

@@ -89,4 +89,4 @@
"folder": "資料夾",
"ideaInFolder": "資料夾中的創意"
}
}
}

View File

@@ -1,3 +1,3 @@
{
"type": "module"
}
"type": "module"
}

View File

@@ -1,3 +1,3 @@
{
"extends": "../../../server/tsconfig.json"
}
"extends": "../../../server/tsconfig.json"
}

View File

@@ -56,11 +56,15 @@ function AudioType({
setCurrentTime(0)
setTotalTime(0)
const stream = await navigator.mediaDevices.getUserMedia({ audio: true })
const stream = await navigator.mediaDevices.getUserMedia({
audio: true
})
streamRef.current = stream
const mediaRecorder = new MediaRecorder(stream, { mimeType: 'audio/webm' })
const mediaRecorder = new MediaRecorder(stream, {
mimeType: 'audio/webm'
})
mediaRecorderRef.current = mediaRecorder
audioChunksRef.current = []

View File

@@ -1,50 +1,36 @@
{
"compilerOptions": {
// JSX and Language Settings
"jsx": "react-jsx",
"target": "ES2020",
"lib": [
"ES2020",
"DOM",
"DOM.Iterable",
"ES2024.Object"
],
// Module Resolution
"module": "ESNext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"verbatimModuleSyntax": true,
// Build and Output
"composite": true,
"noEmit": true,
"skipLibCheck": true,
// Type Checking
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"useDefineForClassFields": true,
"noFallthroughCasesInSwitch": true,
// Path Mapping
"paths": {
"@": [
"./src/index"
],
"@/*": [
"./src/*"
],
"@server/*": [
"../../../server/src/*"
]
}
},
"references": [
{
"path": "../../../server/tsconfig.json"
}
]
}
"compilerOptions": {
// JSX and Language Settings
"jsx": "react-jsx",
"target": "ES2020",
"lib": ["ES2020", "DOM", "DOM.Iterable", "ES2024.Object"],
// Module Resolution
"module": "ESNext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"verbatimModuleSyntax": true,
// Build and Output
"composite": true,
"noEmit": true,
"skipLibCheck": true,
// Type Checking
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"useDefineForClassFields": true,
"noFallthroughCasesInSwitch": true,
// Path Mapping
"paths": {
"@": ["./src/index"],
"@/*": ["./src/*"],
"@server/*": ["../../../server/src/*"]
}
},
"include": ["./src/**/*", "./manifest.ts"],
"references": [
{
"path": "../../../server/tsconfig.json"
}
]
}

View File

@@ -28,4 +28,4 @@
"text": "Text",
"photos": "Photos"
}
}
}

View File

@@ -28,4 +28,4 @@
"text": "Teks",
"photos": "Gambar"
}
}
}

View File

@@ -28,4 +28,4 @@
"text": "文本",
"photos": "照片"
}
}
}

View File

@@ -28,4 +28,4 @@
"text": "文本",
"photos": "照片"
}
}
}

View File

@@ -1,3 +1,3 @@
{
"type": "module"
}
"type": "module"
}

View File

@@ -1,3 +1,3 @@
{
"extends": "../../../server/tsconfig.json"
}
"extends": "../../../server/tsconfig.json"
}

View File

@@ -1,50 +1,36 @@
{
"compilerOptions": {
// JSX and Language Settings
"jsx": "react-jsx",
"target": "ES2020",
"lib": [
"ES2020",
"DOM",
"DOM.Iterable",
"ES2024.Object"
],
// Module Resolution
"module": "ESNext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"verbatimModuleSyntax": true,
// Build and Output
"composite": true,
"noEmit": true,
"skipLibCheck": true,
// Type Checking
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"useDefineForClassFields": true,
"noFallthroughCasesInSwitch": true,
// Path Mapping
"paths": {
"@": [
"./src/index"
],
"@/*": [
"./src/*"
],
"@server/*": [
"../../../server/src/*"
]
}
},
"references": [
{
"path": "../../../server/tsconfig.json"
}
]
}
"compilerOptions": {
// JSX and Language Settings
"jsx": "react-jsx",
"target": "ES2020",
"lib": ["ES2020", "DOM", "DOM.Iterable", "ES2024.Object"],
// Module Resolution
"module": "ESNext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"verbatimModuleSyntax": true,
// Build and Output
"composite": true,
"noEmit": true,
"skipLibCheck": true,
// Type Checking
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"useDefineForClassFields": true,
"noFallthroughCasesInSwitch": true,
// Path Mapping
"paths": {
"@": ["./src/index"],
"@/*": ["./src/*"],
"@server/*": ["../../../server/src/*"]
}
},
"include": ["./src/**/*", "./manifest.ts"],
"references": [
{
"path": "../../../server/tsconfig.json"
}
]
}

View File

@@ -56,4 +56,4 @@
"misc": {
"watched": "Watched on {{date}}"
}
}
}

View File

@@ -56,4 +56,4 @@
"misc": {
"watched": "Ditonton pada {{date}}"
}
}
}

View File

@@ -56,4 +56,4 @@
"misc": {
"watched": "观看于{{date}}"
}
}
}

View File

@@ -56,4 +56,4 @@
"misc": {
"watched": "觀看於{{date}}"
}
}
}

View File

@@ -1,3 +1,3 @@
{
"type": "module"
}
"type": "module"
}

View File

@@ -18,7 +18,10 @@ const moviesSchemas = {
theatre_seat: z.string(),
theatre_showtime: z.string(),
theatre_location: z.string(),
theatre_location_coords: z.object({ lat: z.number(), lon: z.number() }),
theatre_location_coords: z.object({
lat: z.number(),
lon: z.number()
}),
theatre_number: z.string(),
is_watched: z.boolean()
}),

View File

@@ -1,3 +1,3 @@
{
"extends": "../../../server/tsconfig.json"
}
"extends": "../../../server/tsconfig.json"
}

View File

@@ -1,50 +1,36 @@
{
"compilerOptions": {
// JSX and Language Settings
"jsx": "react-jsx",
"target": "ES2020",
"lib": [
"ES2020",
"DOM",
"DOM.Iterable",
"ES2024.Object"
],
// Module Resolution
"module": "ESNext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"verbatimModuleSyntax": true,
// Build and Output
"composite": true,
"noEmit": true,
"skipLibCheck": true,
// Type Checking
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"useDefineForClassFields": true,
"noFallthroughCasesInSwitch": true,
// Path Mapping
"paths": {
"@": [
"./src/index"
],
"@/*": [
"./src/*"
],
"@server/*": [
"../../../server/src/*"
]
}
},
"references": [
{
"path": "../../../server/tsconfig.json"
}
]
}
"compilerOptions": {
// JSX and Language Settings
"jsx": "react-jsx",
"target": "ES2020",
"lib": ["ES2020", "DOM", "DOM.Iterable", "ES2024.Object"],
// Module Resolution
"module": "ESNext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"verbatimModuleSyntax": true,
// Build and Output
"composite": true,
"noEmit": true,
"skipLibCheck": true,
// Type Checking
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"useDefineForClassFields": true,
"noFallthroughCasesInSwitch": true,
// Path Mapping
"paths": {
"@": ["./src/index"],
"@/*": ["./src/*"],
"@server/*": ["../../../server/src/*"]
}
},
"include": ["./src/**/*", "./manifest.ts"],
"references": [
{
"path": "../../../server/tsconfig.json"
}
]
}

View File

@@ -1,3 +1,3 @@
{
"type": "module"
}
"type": "module"
}

View File

@@ -1,3 +1,3 @@
{
"extends": "../../../server/tsconfig.json"
}
"extends": "../../../server/tsconfig.json"
}

View File

@@ -77,7 +77,9 @@ function ContentContainer({ masterPassword }: { masterPassword: string }) {
)
} catch {
toast.error(t('error.pin'))
queryClient.invalidateQueries({ queryKey: ['passwords', 'entries'] })
queryClient.invalidateQueries({
queryKey: ['passwords', 'entries']
})
}
}

View File

@@ -55,7 +55,9 @@ function PasswordEntryItem({
})
.mutationOptions({
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['passwords', 'entries'] })
queryClient.invalidateQueries({
queryKey: ['passwords', 'entries']
})
},
onError: () => {
toast.error('Failed to delete password. Please try again.')

View File

@@ -31,7 +31,9 @@ function ModifyPasswordModal({
})
).mutationOptions({
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['passwords', 'entries'] })
queryClient.invalidateQueries({
queryKey: ['passwords', 'entries']
})
},
onError: () => {
toast.error('Failed to modify password entry')

View File

@@ -1,50 +1,36 @@
{
"compilerOptions": {
// JSX and Language Settings
"jsx": "react-jsx",
"target": "ES2020",
"lib": [
"ES2020",
"DOM",
"DOM.Iterable",
"ES2024.Object"
],
// Module Resolution
"module": "ESNext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"verbatimModuleSyntax": true,
// Build and Output
"composite": true,
"noEmit": true,
"skipLibCheck": true,
// Type Checking
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"useDefineForClassFields": true,
"noFallthroughCasesInSwitch": true,
// Path Mapping
"paths": {
"@": [
"./src/index"
],
"@/*": [
"./src/*"
],
"@server/*": [
"../../../server/src/*"
]
}
},
"references": [
{
"path": "../../../server/tsconfig.json"
}
]
}
"compilerOptions": {
// JSX and Language Settings
"jsx": "react-jsx",
"target": "ES2020",
"lib": ["ES2020", "DOM", "DOM.Iterable", "ES2024.Object"],
// Module Resolution
"module": "ESNext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"verbatimModuleSyntax": true,
// Build and Output
"composite": true,
"noEmit": true,
"skipLibCheck": true,
// Type Checking
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"useDefineForClassFields": true,
"noFallthroughCasesInSwitch": true,
// Path Mapping
"paths": {
"@": ["./src/index"],
"@/*": ["./src/*"],
"@server/*": ["../../../server/src/*"]
}
},
"include": ["./src/**/*", "./manifest.ts"],
"references": [
{
"path": "../../../server/tsconfig.json"
}
]
}

View File

@@ -35,4 +35,4 @@
"showPassword": "Show Password",
"hidePassword": "Hide Password"
}
}
}

View File

@@ -35,4 +35,4 @@
"showPassword": "Tunjukkan Kata Laluan",
"hidePassword": "Sembunyikan Kata Laluan"
}
}
}

View File

@@ -35,4 +35,4 @@
"showPassword": "显示密码",
"hidePassword": "隐藏密码"
}
}
}

View File

@@ -35,4 +35,4 @@
"showPassword": "顯示密碼",
"hidePassword": "隱藏密碼"
}
}
}

View File

@@ -1,3 +1,3 @@
{
"type": "module"
}
"type": "module"
}

View File

@@ -1,3 +1,3 @@
{
"extends": "../../../server/tsconfig.json"
}
"extends": "../../../server/tsconfig.json"
}

View File

@@ -1,50 +1,36 @@
{
"compilerOptions": {
// JSX and Language Settings
"jsx": "react-jsx",
"target": "ES2020",
"lib": [
"ES2020",
"DOM",
"DOM.Iterable",
"ES2024.Object"
],
// Module Resolution
"module": "ESNext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"verbatimModuleSyntax": true,
// Build and Output
"composite": true,
"noEmit": true,
"skipLibCheck": true,
// Type Checking
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"useDefineForClassFields": true,
"noFallthroughCasesInSwitch": true,
// Path Mapping
"paths": {
"@": [
"./src/index"
],
"@/*": [
"./src/*"
],
"@server/*": [
"../../../server/src/*"
]
}
},
"references": [
{
"path": "../../../server/tsconfig.json"
}
]
}
"compilerOptions": {
// JSX and Language Settings
"jsx": "react-jsx",
"target": "ES2020",
"lib": ["ES2020", "DOM", "DOM.Iterable", "ES2024.Object"],
// Module Resolution
"module": "ESNext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"verbatimModuleSyntax": true,
// Build and Output
"composite": true,
"noEmit": true,
"skipLibCheck": true,
// Type Checking
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"useDefineForClassFields": true,
"noFallthroughCasesInSwitch": true,
// Path Mapping
"paths": {
"@": ["./src/index"],
"@/*": ["./src/*"],
"@server/*": ["../../../server/src/*"]
}
},
"include": ["./src/**/*", "./manifest.ts"],
"references": [
{
"path": "../../../server/tsconfig.json"
}
]
}

View File

@@ -1,3 +1,3 @@
{
"type": "module"
}
"type": "module"
}

View File

@@ -1,3 +1,3 @@
{
"extends": "../../../server/tsconfig.json"
}
"extends": "../../../server/tsconfig.json"
}

View File

@@ -86,7 +86,9 @@ function Header({
if (data.status === 'completed') {
toast.done(toastId.current!)
toastId.current = null
queryClient.invalidateQueries({ queryKey: ['scoresLibrary'] })
queryClient.invalidateQueries({
queryKey: ['scoresLibrary']
})
}
}
)

View File

@@ -36,7 +36,9 @@ function SidebarTypeItem({
const deleteMutation = useMutation(
forgeAPI.scoresLibrary.types.remove.input({ id: data.id }).mutationOptions({
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['scoresLibrary'] })
queryClient.invalidateQueries({
queryKey: ['scoresLibrary']
})
},
onError: () => {
toast.error('Failed to delete type')

View File

@@ -30,7 +30,9 @@ function SidebarCollectionItem({
.input({ id: data.id })
.mutationOptions({
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['scoresLibrary'] })
queryClient.invalidateQueries({
queryKey: ['scoresLibrary']
})
},
onError: () => {
toast.error('Failed to delete collection')

View File

@@ -21,7 +21,9 @@ function ModifyEntryModal({
.input({ id: initialData.id })
.mutationOptions({
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['scoresLibrary'] })
queryClient.invalidateQueries({
queryKey: ['scoresLibrary']
})
onClose()
}
})

Some files were not shown because too many files have changed in this diff Show More