Compare commits
3 Commits
b55cebea4e
...
4f85637875
| Author | SHA1 | Date | |
|---|---|---|---|
| 4f85637875 | |||
| 1175b4d0e6 | |||
| 2afa3c6e9b |
@@ -3,7 +3,7 @@
|
|||||||
# ============================================================================
|
# ============================================================================
|
||||||
# Base stage - shared dependencies
|
# Base stage - shared dependencies
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
FROM node:22.11.0-slim AS base
|
FROM node:22.14.0-slim AS base
|
||||||
|
|
||||||
# Enable corepack for pnpm
|
# Enable corepack for pnpm
|
||||||
RUN npm install -g corepack@latest && corepack enable
|
RUN npm install -g corepack@latest && corepack enable
|
||||||
@@ -32,6 +32,9 @@ COPY packages ./packages
|
|||||||
# Install all dependencies
|
# Install all dependencies
|
||||||
RUN pnpm install --frozen-lockfile
|
RUN pnpm install --frozen-lockfile
|
||||||
|
|
||||||
|
# Generate SvelteKit type definitions (creates .svelte-kit/tsconfig.json)
|
||||||
|
RUN pnpm --filter @sexy.pivoine.art/frontend exec svelte-kit sync
|
||||||
|
|
||||||
# Build frontend
|
# Build frontend
|
||||||
RUN pnpm --filter @sexy.pivoine.art/frontend build
|
RUN pnpm --filter @sexy.pivoine.art/frontend build
|
||||||
|
|
||||||
@@ -41,7 +44,7 @@ RUN CI=true pnpm install -rP
|
|||||||
# ============================================================================
|
# ============================================================================
|
||||||
# Runner stage - minimal production image
|
# Runner stage - minimal production image
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
FROM node:22.11.0-slim AS runner
|
FROM node:22.14.0-slim AS runner
|
||||||
|
|
||||||
# Install dumb-init for proper signal handling
|
# Install dumb-init for proper signal handling
|
||||||
RUN apt-get update && apt-get install -y \
|
RUN apt-get update && apt-get install -y \
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
# ============================================================================
|
# ============================================================================
|
||||||
# Builder stage
|
# Builder stage
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
FROM node:22.11.0-slim AS builder
|
FROM node:22.14.0-slim AS builder
|
||||||
|
|
||||||
RUN npm install -g corepack@latest && corepack enable
|
RUN npm install -g corepack@latest && corepack enable
|
||||||
|
|
||||||
@@ -34,7 +34,7 @@ RUN pnpm rebuild argon2 sharp
|
|||||||
# ============================================================================
|
# ============================================================================
|
||||||
# Runner stage
|
# Runner stage
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
FROM node:22.11.0-slim AS runner
|
FROM node:22.14.0-slim AS runner
|
||||||
|
|
||||||
RUN apt-get update && apt-get install -y \
|
RUN apt-get update && apt-get install -y \
|
||||||
dumb-init \
|
dumb-init \
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
# ============================================================================
|
# ============================================================================
|
||||||
# Builder stage - compile Rust/WASM and TypeScript
|
# Builder stage - compile Rust/WASM and TypeScript
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
FROM node:22.11.0-slim AS builder
|
FROM node:22.14.0-slim AS builder
|
||||||
|
|
||||||
# Install build dependencies for Rust
|
# Install build dependencies for Rust
|
||||||
RUN apt-get update && apt-get install -y \
|
RUN apt-get update && apt-get install -y \
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
"@sexy.pivoine.art/buttplug": "workspace:*",
|
"@sexy.pivoine.art/buttplug": "workspace:*",
|
||||||
"@iconify-json/ri": "^1.2.10",
|
"@iconify-json/ri": "^1.2.10",
|
||||||
"@iconify/tailwind4": "^1.2.1",
|
"@iconify/tailwind4": "^1.2.1",
|
||||||
"@internationalized/date": "^3.11.0",
|
"@internationalized/date": "^3.12.0",
|
||||||
"@lucide/svelte": "^0.561.0",
|
"@lucide/svelte": "^0.561.0",
|
||||||
"@sveltejs/adapter-node": "^5.5.4",
|
"@sveltejs/adapter-node": "^5.5.4",
|
||||||
"@sveltejs/adapter-static": "^3.0.10",
|
"@sveltejs/adapter-static": "^3.0.10",
|
||||||
@@ -39,8 +39,7 @@
|
|||||||
"tailwindcss": "^4.2.1",
|
"tailwindcss": "^4.2.1",
|
||||||
"tw-animate-css": "^1.4.0",
|
"tw-animate-css": "^1.4.0",
|
||||||
"typescript": "^5.9.3",
|
"typescript": "^5.9.3",
|
||||||
"vite": "^7.3.1",
|
"vite": "^7.3.1"
|
||||||
"vite-plugin-wasm": "3.5.0"
|
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@sexy.pivoine.art/types": "workspace:*",
|
"@sexy.pivoine.art/types": "workspace:*",
|
||||||
|
|||||||
@@ -123,15 +123,17 @@
|
|||||||
<div class="flex items-center justify-between">
|
<div class="flex items-center justify-between">
|
||||||
<Label>{$_("admin.article_form.content")}</Label>
|
<Label>{$_("admin.article_form.content")}</Label>
|
||||||
<div class="flex rounded-lg border border-border/40 overflow-hidden text-xs sm:hidden">
|
<div class="flex rounded-lg border border-border/40 overflow-hidden text-xs sm:hidden">
|
||||||
<button
|
<Button
|
||||||
type="button"
|
variant="ghost"
|
||||||
class={`px-3 py-1 transition-colors ${editorTab === "write" ? "bg-primary/10 text-primary" : "text-muted-foreground"}`}
|
size="sm"
|
||||||
onclick={() => (editorTab = "write")}>{$_("admin.common.write")}</button
|
class={`px-3 py-1 h-auto rounded-none transition-colors ${editorTab === "write" ? "bg-primary/10 text-primary" : "text-muted-foreground"}`}
|
||||||
|
onclick={() => (editorTab = "write")}>{$_("admin.common.write")}</Button
|
||||||
>
|
>
|
||||||
<button
|
<Button
|
||||||
type="button"
|
variant="ghost"
|
||||||
class={`px-3 py-1 transition-colors ${editorTab === "preview" ? "bg-primary/10 text-primary" : "text-muted-foreground"}`}
|
size="sm"
|
||||||
onclick={() => (editorTab = "preview")}>{$_("admin.common.preview")}</button
|
class={`px-3 py-1 h-auto rounded-none transition-colors ${editorTab === "preview" ? "bg-primary/10 text-primary" : "text-muted-foreground"}`}
|
||||||
|
onclick={() => (editorTab = "preview")}>{$_("admin.common.preview")}</Button
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -121,15 +121,17 @@
|
|||||||
<div class="flex items-center justify-between">
|
<div class="flex items-center justify-between">
|
||||||
<Label>{$_("admin.article_form.content")}</Label>
|
<Label>{$_("admin.article_form.content")}</Label>
|
||||||
<div class="flex rounded-lg border border-border/40 overflow-hidden text-xs sm:hidden">
|
<div class="flex rounded-lg border border-border/40 overflow-hidden text-xs sm:hidden">
|
||||||
<button
|
<Button
|
||||||
type="button"
|
variant="ghost"
|
||||||
class={`px-3 py-1 transition-colors ${editorTab === "write" ? "bg-primary/10 text-primary" : "text-muted-foreground"}`}
|
size="sm"
|
||||||
onclick={() => (editorTab = "write")}>{$_("admin.common.write")}</button
|
class={`px-3 py-1 h-auto rounded-none transition-colors ${editorTab === "write" ? "bg-primary/10 text-primary" : "text-muted-foreground"}`}
|
||||||
|
onclick={() => (editorTab = "write")}>{$_("admin.common.write")}</Button
|
||||||
>
|
>
|
||||||
<button
|
<Button
|
||||||
type="button"
|
variant="ghost"
|
||||||
class={`px-3 py-1 transition-colors ${editorTab === "preview" ? "bg-primary/10 text-primary" : "text-muted-foreground"}`}
|
size="sm"
|
||||||
onclick={() => (editorTab = "preview")}>{$_("admin.common.preview")}</button
|
class={`px-3 py-1 h-auto rounded-none transition-colors ${editorTab === "preview" ? "bg-primary/10 text-primary" : "text-muted-foreground"}`}
|
||||||
|
onclick={() => (editorTab = "preview")}>{$_("admin.common.preview")}</Button
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -236,13 +236,14 @@
|
|||||||
alt=""
|
alt=""
|
||||||
class="w-full aspect-square object-cover rounded"
|
class="w-full aspect-square object-cover rounded"
|
||||||
/>
|
/>
|
||||||
<button
|
<Button
|
||||||
class="absolute inset-0 flex items-center justify-center bg-black/50 opacity-0 group-hover:opacity-100 transition-opacity rounded"
|
variant="ghost"
|
||||||
|
class="absolute inset-0 flex items-center justify-center bg-black/50 opacity-0 group-hover:opacity-100 transition-opacity rounded h-auto p-0"
|
||||||
onclick={() => removePhoto(photo.id)}
|
onclick={() => removePhoto(photo.id)}
|
||||||
type="button"
|
aria-label="Remove photo"
|
||||||
>
|
>
|
||||||
<span class="icon-[ri--delete-bin-line] h-5 w-5 text-white"></span>
|
<span class="icon-[ri--delete-bin-line] h-5 w-5 text-white"></span>
|
||||||
</button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
{/each}
|
{/each}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -180,9 +180,10 @@
|
|||||||
<Label>Models</Label>
|
<Label>Models</Label>
|
||||||
<div class="flex flex-wrap gap-2">
|
<div class="flex flex-wrap gap-2">
|
||||||
{#each data.models as model (model.id)}
|
{#each data.models as model (model.id)}
|
||||||
<button
|
<Button
|
||||||
type="button"
|
variant="ghost"
|
||||||
class={`px-3 py-1.5 rounded-full text-sm border transition-colors ${
|
size="sm"
|
||||||
|
class={`px-3 py-1.5 h-auto rounded-full text-sm border transition-colors ${
|
||||||
selectedModelIds.includes(model.id)
|
selectedModelIds.includes(model.id)
|
||||||
? "border-primary bg-primary/10 text-primary"
|
? "border-primary bg-primary/10 text-primary"
|
||||||
: "border-border/40 text-muted-foreground hover:border-primary/40"
|
: "border-border/40 text-muted-foreground hover:border-primary/40"
|
||||||
@@ -190,7 +191,7 @@
|
|||||||
onclick={() => toggleModel(model.id)}
|
onclick={() => toggleModel(model.id)}
|
||||||
>
|
>
|
||||||
{model.artist_name || model.id}
|
{model.artist_name || model.id}
|
||||||
</button>
|
</Button>
|
||||||
{/each}
|
{/each}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
19
pnpm-lock.yaml
generated
19
pnpm-lock.yaml
generated
@@ -180,8 +180,8 @@ importers:
|
|||||||
specifier: ^1.2.1
|
specifier: ^1.2.1
|
||||||
version: 1.2.1(tailwindcss@4.2.1)
|
version: 1.2.1(tailwindcss@4.2.1)
|
||||||
'@internationalized/date':
|
'@internationalized/date':
|
||||||
specifier: ^3.11.0
|
specifier: ^3.12.0
|
||||||
version: 3.11.0
|
version: 3.12.0
|
||||||
'@lucide/svelte':
|
'@lucide/svelte':
|
||||||
specifier: ^0.561.0
|
specifier: ^0.561.0
|
||||||
version: 0.561.0(svelte@5.53.7)
|
version: 0.561.0(svelte@5.53.7)
|
||||||
@@ -214,7 +214,7 @@ importers:
|
|||||||
version: 5.0.8
|
version: 5.0.8
|
||||||
bits-ui:
|
bits-ui:
|
||||||
specifier: 2.16.2
|
specifier: 2.16.2
|
||||||
version: 2.16.2(@internationalized/date@3.11.0)(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.7)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)))(svelte@5.53.7)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)))(svelte@5.53.7)
|
version: 2.16.2(@internationalized/date@3.12.0)(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.7)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)))(svelte@5.53.7)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)))(svelte@5.53.7)
|
||||||
clsx:
|
clsx:
|
||||||
specifier: ^2.1.1
|
specifier: ^2.1.1
|
||||||
version: 2.1.1
|
version: 2.1.1
|
||||||
@@ -257,9 +257,6 @@ importers:
|
|||||||
vite:
|
vite:
|
||||||
specifier: ^7.3.1
|
specifier: ^7.3.1
|
||||||
version: 7.3.1(@types/node@25.3.3)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)
|
version: 7.3.1(@types/node@25.3.3)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)
|
||||||
vite-plugin-wasm:
|
|
||||||
specifier: 3.5.0
|
|
||||||
version: 3.5.0(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0))
|
|
||||||
|
|
||||||
packages/types:
|
packages/types:
|
||||||
devDependencies:
|
devDependencies:
|
||||||
@@ -1173,8 +1170,8 @@ packages:
|
|||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [win32]
|
os: [win32]
|
||||||
|
|
||||||
'@internationalized/date@3.11.0':
|
'@internationalized/date@3.12.0':
|
||||||
resolution: {integrity: sha512-BOx5huLAWhicM9/ZFs84CzP+V3gBW6vlpM02yzsdYC7TGlZJX1OJiEEHcSayF00Z+3jLlm4w79amvSt6RqKN3Q==}
|
resolution: {integrity: sha512-/PyIMzK29jtXaGU23qTvNZxvBXRtKbNnGDFD+PY6CZw/Y8Ex8pFUzkuCJCG9aOqmShjqhS9mPqP6Dk5onQY8rQ==}
|
||||||
|
|
||||||
'@ioredis/commands@1.5.1':
|
'@ioredis/commands@1.5.1':
|
||||||
resolution: {integrity: sha512-JH8ZL/ywcJyR9MmJ5BNqZllXNZQqQbnVZOqpPQqE1vHiFgAw4NHbvE0FOduNU8IX9babitBT46571OnPTT0Zcw==}
|
resolution: {integrity: sha512-JH8ZL/ywcJyR9MmJ5BNqZllXNZQqQbnVZOqpPQqE1vHiFgAw4NHbvE0FOduNU8IX9babitBT46571OnPTT0Zcw==}
|
||||||
@@ -4105,7 +4102,7 @@ snapshots:
|
|||||||
'@img/sharp-win32-x64@0.33.5':
|
'@img/sharp-win32-x64@0.33.5':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@internationalized/date@3.11.0':
|
'@internationalized/date@3.12.0':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@swc/helpers': 0.5.19
|
'@swc/helpers': 0.5.19
|
||||||
|
|
||||||
@@ -4642,11 +4639,11 @@ snapshots:
|
|||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- debug
|
- debug
|
||||||
|
|
||||||
bits-ui@2.16.2(@internationalized/date@3.11.0)(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.7)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)))(svelte@5.53.7)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)))(svelte@5.53.7):
|
bits-ui@2.16.2(@internationalized/date@3.12.0)(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.7)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)))(svelte@5.53.7)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)))(svelte@5.53.7):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@floating-ui/core': 1.7.5
|
'@floating-ui/core': 1.7.5
|
||||||
'@floating-ui/dom': 1.7.6
|
'@floating-ui/dom': 1.7.6
|
||||||
'@internationalized/date': 3.11.0
|
'@internationalized/date': 3.12.0
|
||||||
esm-env: 1.2.2
|
esm-env: 1.2.2
|
||||||
runed: 0.35.1(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.7)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)))(svelte@5.53.7)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)))(svelte@5.53.7)
|
runed: 0.35.1(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.7)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)))(svelte@5.53.7)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)))(svelte@5.53.7)
|
||||||
svelte: 5.53.7
|
svelte: 5.53.7
|
||||||
|
|||||||
Reference in New Issue
Block a user