diff --git a/.gitignore b/.gitignore index 75b9ac4..f8e660b 100644 --- a/.gitignore +++ b/.gitignore @@ -41,3 +41,4 @@ Thumbs.db # Vault test data test-vault/ +server-data/ diff --git a/build/Taskfile.yml b/build/Taskfile.yml deleted file mode 100644 index fdb0d17..0000000 --- a/build/Taskfile.yml +++ /dev/null @@ -1,355 +0,0 @@ -version: '3' - -tasks: - go:mod:tidy: - summary: Runs `go mod tidy` - internal: true - cmds: - - go mod tidy - - install:frontend:deps: - summary: Install frontend dependencies - cmds: - - task: install:frontend:deps:{{.PACKAGE_MANAGER}} - - install:frontend:deps:npm: - dir: frontend - sources: - - package.json - - package-lock.json - generates: - - node_modules - preconditions: - - sh: npm version - msg: "Looks like npm isn't installed. Npm is part of the Node installer: https://nodejs.org/en/download/" - cmds: - - npm install - - install:frontend:deps:bun: - dir: frontend - sources: - - package.json - - bun.lock - - bun.lockb - generates: - - node_modules - preconditions: - - sh: bun --version - msg: "bun not found" - cmds: - - bun install - - install:frontend:deps:pnpm: - dir: frontend - sources: - - package.json - - pnpm-lock.yaml - generates: - - node_modules - preconditions: - - sh: pnpm --version - msg: "pnpm not found" - cmds: - - pnpm install - - install:frontend:deps:yarn: - dir: frontend - sources: - - package.json - - yarn.lock - status: - - test -d node_modules || test -f .pnp.cjs - preconditions: - - sh: yarn --version - msg: "yarn not found" - cmds: - - yarn install - - build:frontend: - label: build:frontend (DEV={{.DEV}} RUNNER={{.PACKAGE_MANAGER}}) - summary: Build the frontend project - dir: frontend - sources: - - "**/*" - - exclude: node_modules/**/* - generates: - - dist/**/* - deps: - - task: install:frontend:deps - - task: generate:bindings - vars: - BUILD_FLAGS: - ref: .BUILD_FLAGS - OBFUSCATED: - ref: .OBFUSCATED - cmds: - - task: frontend:run - vars: - SCRIPT: '{{if eq .DEV "true"}}build:dev{{else}}build{{end}}' - env: - PRODUCTION: '{{if eq .DEV "true"}}false{{else}}true{{end}}' - - frontend:run: - summary: Run a frontend script with selected runner - cmds: - - task: frontend:run:{{.PACKAGE_MANAGER}} - vars: - SCRIPT: "{{.SCRIPT}}" - vars: - SCRIPT: "{{.SCRIPT}}" - - frontend:run:npm: - dir: frontend - cmds: - - npm run {{.SCRIPT}} -q - vars: - SCRIPT: "{{.SCRIPT}}" - - frontend:run:yarn: - dir: frontend - cmds: - - yarn {{.SCRIPT}} - vars: - SCRIPT: "{{.SCRIPT}}" - - frontend:run:pnpm: - dir: frontend - cmds: - - pnpm run {{.SCRIPT}} - vars: - SCRIPT: "{{.SCRIPT}}" - - frontend:run:bun: - dir: frontend - cmds: - - bun run {{.SCRIPT}} - vars: - SCRIPT: "{{.SCRIPT}}" - - frontend:vendor:puppertino: - summary: Fetches Puppertino CSS into frontend/public for consistent mobile styling - sources: - - frontend/public/puppertino/puppertino.css - generates: - - frontend/public/puppertino/puppertino.css - cmds: - - | - set -euo pipefail - mkdir -p frontend/public/puppertino - # If bundled Puppertino exists, prefer it. Otherwise, try to fetch, but don't fail build on error. - if [ ! -f frontend/public/puppertino/puppertino.css ]; then - echo "No bundled Puppertino found. Attempting to fetch from GitHub..." - if curl -fsSL https://raw.githubusercontent.com/codedgar/Puppertino/main/dist/css/full.css -o frontend/public/puppertino/puppertino.css; then - curl -fsSL https://raw.githubusercontent.com/codedgar/Puppertino/main/LICENSE -o frontend/public/puppertino/LICENSE || true - echo "Puppertino CSS downloaded to frontend/public/puppertino/puppertino.css" - else - echo "Warning: Could not fetch Puppertino CSS. Proceeding without download since template may bundle it." - fi - else - echo "Using bundled Puppertino at frontend/public/puppertino/puppertino.css" - fi - # Ensure index.html includes Puppertino CSS and button classes - INDEX_HTML=frontend/index.html - if [ -f "$INDEX_HTML" ]; then - if ! grep -q 'href="/puppertino/puppertino.css"' "$INDEX_HTML"; then - # Insert Puppertino link tag after style.css link - awk ' - /href="\/style.css"\/?/ && !x { print; print " "; x=1; next }1 - ' "$INDEX_HTML" > "$INDEX_HTML.tmp" && mv "$INDEX_HTML.tmp" "$INDEX_HTML" - fi - # Replace default .btn with Puppertino primary button classes if present - sed -E -i'' 's/class=\"btn\"/class=\"p-btn p-prim-col\"/g' "$INDEX_HTML" || true - fi - - - - generate:bindings: - label: generate:bindings (BUILD_FLAGS={{.BUILD_FLAGS}}) - summary: Generates bindings for the frontend - deps: - - task: go:mod:tidy - sources: - - "**/*.[jt]s" - - exclude: frontend/**/* - - frontend/bindings/**/* # Rerun when switching between dev/production mode causes changes in output - - "**/*.go" - - go.mod - - go.sum - generates: - - frontend/bindings/**/* - cmds: - - wails3 generate bindings -f '{{.BUILD_FLAGS}}' -clean=true{{if eq .OBFUSCATED "true"}} -obfuscated{{end}} - - generate:icons: - summary: Generates Windows `.ico` and Mac `.icns` from an image; on macOS, `-iconcomposerinput appicon.icon -macassetdir darwin` also produces `Assets.car` from a `.icon` file (skipped on other platforms). - dir: build - sources: - - "appicon.png" - - "appicon.icon" - generates: - - "darwin/icons.icns" - - "windows/icon.ico" - cmds: - - wails3 generate icons -input appicon.png -macfilename darwin/icons.icns -windowsfilename windows/icon.ico -iconcomposerinput appicon.icon -macassetdir darwin - - dev:frontend: - summary: Runs the frontend in development mode - deps: - - task: install:frontend:deps - cmds: - - task: frontend:dev:{{.PACKAGE_MANAGER}} - - frontend:dev:npm: - dir: frontend - cmds: - - npm run dev -- --port {{.VITE_PORT}} --strictPort - - frontend:dev:yarn: - dir: frontend - cmds: - - yarn dev --port {{.VITE_PORT}} --strictPort - - frontend:dev:pnpm: - dir: frontend - cmds: - - pnpm dev --port {{.VITE_PORT}} --strictPort - - frontend:dev:bun: - dir: frontend - cmds: - - bun run dev --port {{.VITE_PORT}} --strictPort - - update:build-assets: - summary: Updates the build assets - dir: build - cmds: - - wails3 update build-assets -name "{{.APP_NAME}}" -binaryname "{{.APP_NAME}}" -config config.yml -dir . - - build:server: - summary: Builds the application in server mode (no GUI, HTTP server only) - desc: | - Builds the application with the server build tag enabled. - Server mode runs as a pure HTTP server without native GUI dependencies. - Usage: task build:server - deps: - - task: build:frontend - vars: - BUILD_FLAGS: - ref: .BUILD_FLAGS - cmds: - - go build -tags server {{.BUILD_FLAGS}} -o {{.BIN_DIR}}/{{.APP_NAME}}-server{{exeExt}} - vars: - BUILD_FLAGS: "{{.BUILD_FLAGS}}" - - run:server: - summary: Builds and runs the application in server mode - deps: - - task: build:server - cmds: - - ./{{.BIN_DIR}}/{{.APP_NAME}}-server{{exeExt}} - - build:docker: - summary: Builds a Docker image for server mode deployment - desc: | - Creates a minimal Docker image containing the server mode binary. - The image is based on distroless for security and small size. - Usage: task build:docker [TAG=myapp:latest] - cmds: - - docker build -t {{.TAG | default (printf "%s:latest" .APP_NAME)}} -f build/docker/Dockerfile.server . - vars: - TAG: "{{.TAG}}" - preconditions: - - sh: docker info > /dev/null 2>&1 - msg: "Docker is required. Please install Docker first." - - sh: test -f build/docker/Dockerfile.server - msg: "Dockerfile.server not found. Run 'wails3 update build-assets' to generate it." - - run:docker: - summary: Builds and runs the Docker image - desc: | - Builds the Docker image and runs it, exposing port 8080. - Usage: task run:docker [TAG=myapp:latest] [PORT=8080] - Note: The internal container port is always 8080. The PORT variable - only changes the host port mapping. Ensure your app uses port 8080 - or modify the Dockerfile to match your ServerOptions.Port setting. - deps: - - task: build:docker - vars: - TAG: - ref: .TAG - cmds: - - docker run --rm -p {{.PORT | default "8080"}}:8080 {{.TAG | default (printf "%s:latest" .APP_NAME)}} - vars: - TAG: "{{.TAG}}" - PORT: "{{.PORT}}" - - setup:docker: - summary: Builds Docker image for cross-compilation (~800MB download) - desc: | - Builds the Docker image needed for cross-compiling to any platform. - Run this once to enable cross-platform builds from any OS. - cmds: - - docker build -t wails-cross -f build/docker/Dockerfile.cross build/docker/ - preconditions: - - sh: docker info > /dev/null 2>&1 - msg: "Docker is required. Please install Docker first." - - ios:device:list: - summary: Lists connected iOS devices (UDIDs) - cmds: - - xcrun xcdevice list - - ios:run:device: - summary: Build, install, and launch on a physical iPhone using Apple tools (xcodebuild/devicectl) - vars: - PROJECT: '{{.PROJECT}}' # e.g., build/ios/xcode/.xcodeproj - SCHEME: '{{.SCHEME}}' # e.g., ios.dev - CONFIG: '{{.CONFIG | default "Debug"}}' - DERIVED: '{{.DERIVED | default "build/ios/DerivedData"}}' - UDID: '{{.UDID}}' # from `task ios:device:list` - BUNDLE_ID: '{{.BUNDLE_ID}}' # e.g., com.yourco.wails.ios.dev - TEAM_ID: '{{.TEAM_ID}}' # optional, if your project is not already set up for signing - preconditions: - - sh: xcrun -f xcodebuild - msg: "xcodebuild not found. Please install Xcode." - - sh: xcrun -f devicectl - msg: "devicectl not found. Please update to Xcode 15+ (which includes devicectl)." - - sh: test -n '{{.PROJECT}}' - msg: "Set PROJECT to your .xcodeproj path (e.g., PROJECT=build/ios/xcode/App.xcodeproj)." - - sh: test -n '{{.SCHEME}}' - msg: "Set SCHEME to your app scheme (e.g., SCHEME=ios.dev)." - - sh: test -n '{{.UDID}}' - msg: "Set UDID to your device UDID (see: task ios:device:list)." - - sh: test -n '{{.BUNDLE_ID}}' - msg: "Set BUNDLE_ID to your app's bundle identifier (e.g., com.yourco.wails.ios.dev)." - cmds: - - | - set -euo pipefail - echo "Building for device: UDID={{.UDID}} SCHEME={{.SCHEME}} PROJECT={{.PROJECT}}" - XCB_ARGS=( - -project "{{.PROJECT}}" - -scheme "{{.SCHEME}}" - -configuration "{{.CONFIG}}" - -destination "id={{.UDID}}" - -derivedDataPath "{{.DERIVED}}" - -allowProvisioningUpdates - -allowProvisioningDeviceRegistration - ) - # Optionally inject signing identifiers if provided - if [ -n '{{.TEAM_ID}}' ]; then XCB_ARGS+=(DEVELOPMENT_TEAM={{.TEAM_ID}}); fi - if [ -n '{{.BUNDLE_ID}}' ]; then XCB_ARGS+=(PRODUCT_BUNDLE_IDENTIFIER={{.BUNDLE_ID}}); fi - xcodebuild "${XCB_ARGS[@]}" build | xcpretty || true - # If xcpretty isn't installed, run without it - if [ "${PIPESTATUS[0]}" -ne 0 ]; then - xcodebuild "${XCB_ARGS[@]}" build - fi - # Find built .app - APP_PATH=$(find "{{.DERIVED}}/Build/Products" -type d -name "*.app" -maxdepth 3 | head -n 1) - if [ -z "$APP_PATH" ]; then - echo "Could not locate built .app under {{.DERIVED}}/Build/Products" >&2 - exit 1 - fi - echo "Installing: $APP_PATH" - xcrun devicectl device install app --device "{{.UDID}}" "$APP_PATH" - echo "Launching: {{.BUNDLE_ID}}" - xcrun devicectl device process launch --device "{{.UDID}}" --stderr console --stdout console "{{.BUNDLE_ID}}" diff --git a/build/appicon.icon/Assets/wails_icon_vector.svg b/build/appicon.icon/Assets/wails_icon_vector.svg deleted file mode 100644 index b099222..0000000 --- a/build/appicon.icon/Assets/wails_icon_vector.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/build/appicon.icon/icon.json b/build/appicon.icon/icon.json deleted file mode 100644 index ecf1849..0000000 --- a/build/appicon.icon/icon.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "fill" : { - "automatic-gradient" : "extended-gray:1.00000,1.00000" - }, - "groups" : [ - { - "layers" : [ - { - "fill-specializations" : [ - { - "appearance" : "dark", - "value" : { - "solid" : "srgb:0.92143,0.92145,0.92144,1.00000" - } - }, - { - "appearance" : "tinted", - "value" : { - "solid" : "srgb:0.83742,0.83744,0.83743,1.00000" - } - } - ], - "image-name" : "wails_icon_vector.svg", - "name" : "wails_icon_vector", - "position" : { - "scale" : 1.25, - "translation-in-points" : [ - 36.890625, - 4.96875 - ] - } - } - ], - "shadow" : { - "kind" : "neutral", - "opacity" : 0.5 - }, - "specular" : true, - "translucency" : { - "enabled" : true, - "value" : 0.5 - } - } - ], - "supported-platforms" : { - "circles" : [ - "watchOS" - ], - "squares" : "shared" - } -} \ No newline at end of file diff --git a/build/appicon.png b/build/appicon.png deleted file mode 100644 index 63617fe..0000000 Binary files a/build/appicon.png and /dev/null differ diff --git a/build/config.yml b/build/config.yml deleted file mode 100644 index 9d49291..0000000 --- a/build/config.yml +++ /dev/null @@ -1,79 +0,0 @@ -# This file contains the configuration for this project. -# When you update `info` or `fileAssociations`, run `wails3 task common:update:build-assets` to update the assets. -# Note that this will overwrite any changes you have made to the assets. -version: '3' - -# This information is used to generate the build assets. -info: - companyName: "My Company" # The name of the company - productName: "My Product" # The name of the application - productIdentifier: "com.mycompany.myproduct" # The unique product identifier - description: "A program that does X" # The application description - copyright: "(c) 2025, My Company" # Copyright text - comments: "Some Product Comments" # Comments - version: "0.0.1" # The application version - # cfBundleIconName: "appicon" # The macOS icon name in Assets.car icon bundles (optional) - # # Should match the name of your .icon file without the extension - # # If not set and Assets.car exists, defaults to "appicon" - -# iOS build configuration (uncomment to customise iOS project generation) -# Note: Keys under `ios` OVERRIDE values under `info` when set. -# ios: -# # The iOS bundle identifier used in the generated Xcode project (CFBundleIdentifier) -# bundleID: "com.mycompany.myproduct" -# # The display name shown under the app icon (CFBundleDisplayName/CFBundleName) -# displayName: "My Product" -# # The app version to embed in Info.plist (CFBundleShortVersionString/CFBundleVersion) -# version: "0.0.1" -# # The company/organisation name for templates and project settings -# company: "My Company" -# # Additional comments to embed in Info.plist metadata -# comments: "Some Product Comments" - -# Dev mode configuration -dev_mode: - root_path: . - log_level: warn - debounce: 1000 - ignore: - dir: - - .git - - node_modules - - frontend - - bin - file: - - .DS_Store - - .gitignore - - .gitkeep - - "*_test.go" - watched_extension: - - "*.go" - - "*.js" # Watch for changes to JS/TS files included using the //wails:include directive. - - "*.ts" # The frontend directory will be excluded entirely by the setting above. - git_ignore: true - executes: - - cmd: wails3 build DEV=true - type: blocking - - cmd: wails3 task common:dev:frontend - type: background - - cmd: wails3 task run - type: primary - -# File Associations -# More information at: https://v3.wails.io/noit/done/yet -fileAssociations: -# - ext: wails -# name: Wails -# description: Wails Application File -# iconName: wailsFileIcon -# role: Editor -# - ext: jpg -# name: JPEG -# description: Image File -# iconName: jpegFileIcon -# role: Editor -# mimeType: image/jpeg # (optional) - -# Other data -other: - - name: My Other Data \ No newline at end of file diff --git a/build/docker/Dockerfile.cross b/build/docker/Dockerfile.cross deleted file mode 100644 index 46c274f..0000000 --- a/build/docker/Dockerfile.cross +++ /dev/null @@ -1,212 +0,0 @@ -# Cross-compile Wails v3 apps to any platform -# -# Darwin: Zig + macOS SDK -# Linux: Native GCC when host matches target, Zig for cross-arch -# Windows: Zig + bundled mingw -# -# Usage: -# docker build -t wails-cross -f Dockerfile.cross . -# docker run --rm -v $(pwd):/app wails-cross darwin arm64 -# docker run --rm -v $(pwd):/app wails-cross darwin amd64 -# docker run --rm -v $(pwd):/app wails-cross linux amd64 -# docker run --rm -v $(pwd):/app wails-cross linux arm64 -# docker run --rm -v $(pwd):/app wails-cross windows amd64 -# docker run --rm -v $(pwd):/app wails-cross windows arm64 - -FROM golang:1.26-bookworm - -ARG TARGETARCH -ARG GARBLE_VERSION=v0.16.0 - -# Install base tools, GCC, and GTK/WebKit dev packages -RUN apt-get update && apt-get install -y --no-install-recommends \ - curl xz-utils nodejs npm pkg-config gcc libc6-dev \ - libgtk-3-dev libwebkit2gtk-4.1-dev \ - libgtk-4-dev libwebkitgtk-6.0-dev \ - && rm -rf /var/lib/apt/lists/* - -RUN go install mvdan.cc/garble@${GARBLE_VERSION} - -# Install Zig - automatically selects correct binary for host architecture -ARG ZIG_VERSION=0.14.0 -RUN ZIG_ARCH=$(case "${TARGETARCH}" in arm64) echo "aarch64" ;; *) echo "x86_64" ;; esac) && \ - curl -L "https://ziglang.org/download/${ZIG_VERSION}/zig-linux-${ZIG_ARCH}-${ZIG_VERSION}.tar.xz" \ - | tar -xJ -C /opt \ - && ln -s /opt/zig-linux-${ZIG_ARCH}-${ZIG_VERSION}/zig /usr/local/bin/zig - -# Download macOS SDK (required for darwin targets) -ARG MACOS_SDK_VERSION=14.5 -RUN curl -L "https://github.com/joseluisq/macosx-sdks/releases/download/${MACOS_SDK_VERSION}/MacOSX${MACOS_SDK_VERSION}.sdk.tar.xz" \ - | tar -xJ -C /opt \ - && mv /opt/MacOSX${MACOS_SDK_VERSION}.sdk /opt/macos-sdk - -ENV MACOS_SDK_PATH=/opt/macos-sdk - -# Create Zig CC wrappers for cross-compilation targets -# Darwin and Windows use Zig; Linux uses native GCC (run with --platform for cross-arch) - -# Darwin arm64 -COPY <<'ZIGWRAP' /usr/local/bin/zcc-darwin-arm64 -#!/bin/sh -ARGS="" -SKIP_NEXT=0 -for arg in "$@"; do - if [ $SKIP_NEXT -eq 1 ]; then - SKIP_NEXT=0 - continue - fi - case "$arg" in - -target) SKIP_NEXT=1 ;; - -mmacosx-version-min=*) ;; - *) ARGS="$ARGS $arg" ;; - esac -done -exec zig cc -fno-sanitize=all -target aarch64-macos-none -isysroot /opt/macos-sdk -I/opt/macos-sdk/usr/include -L/opt/macos-sdk/usr/lib -F/opt/macos-sdk/System/Library/Frameworks -w $ARGS -ZIGWRAP -RUN chmod +x /usr/local/bin/zcc-darwin-arm64 - -# Darwin amd64 -COPY <<'ZIGWRAP' /usr/local/bin/zcc-darwin-amd64 -#!/bin/sh -ARGS="" -SKIP_NEXT=0 -for arg in "$@"; do - if [ $SKIP_NEXT -eq 1 ]; then - SKIP_NEXT=0 - continue - fi - case "$arg" in - -target) SKIP_NEXT=1 ;; - -mmacosx-version-min=*) ;; - *) ARGS="$ARGS $arg" ;; - esac -done -exec zig cc -fno-sanitize=all -target x86_64-macos-none -isysroot /opt/macos-sdk -I/opt/macos-sdk/usr/include -L/opt/macos-sdk/usr/lib -F/opt/macos-sdk/System/Library/Frameworks -w $ARGS -ZIGWRAP -RUN chmod +x /usr/local/bin/zcc-darwin-amd64 - -# Windows amd64 - uses Zig's bundled mingw -COPY <<'ZIGWRAP' /usr/local/bin/zcc-windows-amd64 -#!/bin/sh -ARGS="" -SKIP_NEXT=0 -for arg in "$@"; do - if [ $SKIP_NEXT -eq 1 ]; then - SKIP_NEXT=0 - continue - fi - case "$arg" in - -target) SKIP_NEXT=1 ;; - -Wl,*) ;; - *) ARGS="$ARGS $arg" ;; - esac -done -exec zig cc -target x86_64-windows-gnu $ARGS -ZIGWRAP -RUN chmod +x /usr/local/bin/zcc-windows-amd64 - -# Windows arm64 - uses Zig's bundled mingw -COPY <<'ZIGWRAP' /usr/local/bin/zcc-windows-arm64 -#!/bin/sh -ARGS="" -SKIP_NEXT=0 -for arg in "$@"; do - if [ $SKIP_NEXT -eq 1 ]; then - SKIP_NEXT=0 - continue - fi - case "$arg" in - -target) SKIP_NEXT=1 ;; - -Wl,*) ;; - *) ARGS="$ARGS $arg" ;; - esac -done -exec zig cc -target aarch64-windows-gnu $ARGS -ZIGWRAP -RUN chmod +x /usr/local/bin/zcc-windows-arm64 - -# Build script -COPY <<'SCRIPT' /usr/local/bin/build.sh -#!/bin/sh -set -e - -OS=${1:-darwin} -ARCH=${2:-arm64} - -case "${OS}-${ARCH}" in - darwin-arm64|darwin-aarch64) - export CC=zcc-darwin-arm64 - export GOARCH=arm64 - export GOOS=darwin - ;; - darwin-amd64|darwin-x86_64) - export CC=zcc-darwin-amd64 - export GOARCH=amd64 - export GOOS=darwin - ;; - linux-arm64|linux-aarch64) - export CC=gcc - export GOARCH=arm64 - export GOOS=linux - ;; - linux-amd64|linux-x86_64) - export CC=gcc - export GOARCH=amd64 - export GOOS=linux - ;; - windows-arm64|windows-aarch64) - export CC=zcc-windows-arm64 - export GOARCH=arm64 - export GOOS=windows - ;; - windows-amd64|windows-x86_64) - export CC=zcc-windows-amd64 - export GOARCH=amd64 - export GOOS=windows - ;; - *) - echo "Usage: " - echo " os: darwin, linux, windows" - echo " arch: amd64, arm64" - exit 1 - ;; -esac - -export CGO_ENABLED=1 -export CGO_CFLAGS="-w" - -# Build frontend if exists and not already built (host may have built it) -if [ -d "frontend" ] && [ -f "frontend/package.json" ] && [ ! -d "frontend/dist" ]; then - (cd frontend && npm install --silent && npm run build --silent) -fi - -# Build -APP=${APP_NAME:-$(basename $(pwd))} -mkdir -p bin - -EXT="" -LDFLAGS="-s -w" -if [ "$GOOS" = "windows" ]; then - EXT=".exe" - LDFLAGS="-s -w -H windowsgui" -fi - -TAGS="production" -if [ -n "$EXTRA_TAGS" ]; then - TAGS="${TAGS},${EXTRA_TAGS}" -fi - -COMPILER="go build" -if [ "$OBFUSCATED" = "true" ]; then - COMPILER="garble ${GARBLE_ARGS} build" - TAGS="${TAGS},wails_obfuscated" -fi - -${COMPILER} -tags "$TAGS" -trimpath -buildvcs=false -ldflags="$LDFLAGS" -o bin/${APP}-${GOOS}-${GOARCH}${EXT} . -echo "Built: bin/${APP}-${GOOS}-${GOARCH}${EXT}" -SCRIPT -RUN chmod +x /usr/local/bin/build.sh - -WORKDIR /app -ENTRYPOINT ["/usr/local/bin/build.sh"] -CMD ["darwin", "arm64"] diff --git a/build/docker/Dockerfile.server b/build/docker/Dockerfile.server deleted file mode 100644 index 58fb64f..0000000 --- a/build/docker/Dockerfile.server +++ /dev/null @@ -1,41 +0,0 @@ -# Wails Server Mode Dockerfile -# Multi-stage build for minimal image size - -# Build stage -FROM golang:alpine AS builder - -WORKDIR /app - -# Install build dependencies -RUN apk add --no-cache git - -# Copy source code -COPY . . - -# Remove local replace directive if present (for production builds) -RUN sed -i '/^replace/d' go.mod || true - -# Download dependencies -RUN go mod tidy - -# Build the server binary -RUN go build -tags server -ldflags="-s -w" -o server . - -# Runtime stage - minimal image -FROM gcr.io/distroless/static-debian12 - -# Copy the binary -COPY --from=builder /app/server /server - -# Copy frontend assets -COPY --from=builder /app/frontend/dist /frontend/dist - -# Expose the default port -EXPOSE 8080 - -# Bind to all interfaces (required for Docker) -# Can be overridden at runtime with -e WAILS_SERVER_HOST=... -ENV WAILS_SERVER_HOST=0.0.0.0 - -# Run the server -ENTRYPOINT ["/server"] diff --git a/build/linux/Taskfile.yml b/build/linux/Taskfile.yml deleted file mode 100644 index 7508e30..0000000 --- a/build/linux/Taskfile.yml +++ /dev/null @@ -1,224 +0,0 @@ -version: '3' - -includes: - common: ../Taskfile.yml - -vars: - # Signing configuration - edit these values for your project - # PGP_KEY: "path/to/signing-key.asc" - # SIGN_ROLE: "builder" # Options: origin, maint, archive, builder - # - # Password is stored securely in system keychain. Run: wails3 setup signing - - # Docker image for cross-compilation (used when building on non-Linux or no CC available) - CROSS_IMAGE: wails-cross - -tasks: - build: - summary: Builds the application for Linux - cmds: - # Linux requires CGO - use Docker when: - # 1. Cross-compiling from non-Linux, OR - # 2. No C compiler is available, OR - # 3. Target architecture differs from host architecture (cross-arch compilation) - - task: '{{if and (eq OS "linux") (eq .HAS_CC "true") (eq .TARGET_ARCH ARCH)}}build:native{{else}}build:docker{{end}}' - vars: - ARCH: '{{.ARCH}}' - DEV: '{{.DEV}}' - OUTPUT: '{{.OUTPUT}}' - EXTRA_TAGS: '{{.EXTRA_TAGS}}' - OBFUSCATED: '{{.OBFUSCATED}}' - GARBLE_ARGS: '{{.GARBLE_ARGS}}' - vars: - DEFAULT_OUTPUT: '{{.BIN_DIR}}/{{.APP_NAME}}' - OUTPUT: '{{ .OUTPUT | default .DEFAULT_OUTPUT }}' - # Determine target architecture (defaults to host ARCH if not specified) - TARGET_ARCH: '{{.ARCH | default ARCH}}' - # Check if a C compiler is available (gcc or clang) — cross-platform via wails3 tool - HAS_CC: - sh: 'wails3 tool has-cc' - - build:native: - summary: Builds the application natively on Linux - internal: true - deps: - - task: common:go:mod:tidy - - task: common:build:frontend - vars: - BUILD_FLAGS: - ref: .BUILD_FLAGS - OBFUSCATED: - ref: .OBFUSCATED - DEV: - ref: .DEV - - task: common:generate:icons - - task: generate:dotdesktop - preconditions: - - sh: '{{if eq .OBFUSCATED "true"}}command -v garble >/dev/null 2>&1{{else}}true{{end}}' - msg: "garble is required for obfuscated builds. Install it with: go install mvdan.cc/garble@v0.16.0 (requires Go 1.24+). See https://github.com/burrowers/garble/releases for version/toolchain compatibility." - cmds: - - '{{if eq .OBFUSCATED "true"}}garble {{.GARBLE_ARGS}} build{{else}}go build{{end}} {{.BUILD_FLAGS}} -o {{.OUTPUT}}' - vars: - BUILD_FLAGS: '{{if eq .DEV "true"}}{{if or .EXTRA_TAGS (eq .OBFUSCATED "true")}}-tags {{if eq .OBFUSCATED "true"}}wails_obfuscated{{if .EXTRA_TAGS}},{{end}}{{end}}{{.EXTRA_TAGS}} {{end}}-buildvcs=false -gcflags=all="-l"{{else}}-tags production{{if eq .OBFUSCATED "true"}},wails_obfuscated{{end}}{{if .EXTRA_TAGS}},{{.EXTRA_TAGS}}{{end}} -trimpath -buildvcs=false -ldflags="-w -s"{{end}}' - DEFAULT_OUTPUT: '{{.BIN_DIR}}/{{.APP_NAME}}' - OUTPUT: '{{ .OUTPUT | default .DEFAULT_OUTPUT }}' - env: - GOOS: linux - CGO_ENABLED: 1 - GOARCH: '{{.ARCH | default ARCH}}' - - build:docker: - summary: Builds for Linux using Docker (for non-Linux hosts or when no C compiler available) - internal: true - deps: - - task: common:build:frontend - vars: - OBFUSCATED: - ref: .OBFUSCATED - - task: common:generate:icons - - task: generate:dotdesktop - preconditions: - - sh: docker info > /dev/null 2>&1 - msg: "Docker is required for cross-compilation to Linux. Please install Docker." - - sh: docker image inspect {{.CROSS_IMAGE}} > /dev/null 2>&1 - msg: | - Docker image '{{.CROSS_IMAGE}}' not found. - Build it first: wails3 task setup:docker - cmds: - - docker run --rm -v "{{.ROOT_DIR}}:/app" {{.DOCKER_MOUNTS}} -e APP_NAME="{{.APP_NAME}}" {{if .EXTRA_TAGS}}-e EXTRA_TAGS="{{.EXTRA_TAGS}}"{{end}} {{if eq .OBFUSCATED "true"}}-e OBFUSCATED=true{{end}} {{if .GARBLE_ARGS}}-e GARBLE_ARGS="{{.GARBLE_ARGS}}"{{end}} "{{.CROSS_IMAGE}}" linux {{.DOCKER_ARCH}} - - cmd: docker run --rm -v "{{.ROOT_DIR}}:/app" alpine chown -R $(id -u):$(id -g) /app/bin - platforms: [linux, darwin] - - mkdir -p {{.BIN_DIR}} - - mv "bin/{{.APP_NAME}}-linux-{{.DOCKER_ARCH}}" "{{.OUTPUT}}" - vars: - DOCKER_ARCH: '{{.ARCH | default "amd64"}}' - DEFAULT_OUTPUT: '{{.BIN_DIR}}/{{.APP_NAME}}' - OUTPUT: '{{ .OUTPUT | default .DEFAULT_OUTPUT }}' - # Generate Docker volume mounts: Go module cache + go.mod replace directives - # Uses wails3 tool docker-mounts for cross-platform compatibility (Windows/Linux/macOS) - DOCKER_MOUNTS: - sh: 'wails3 tool docker-mounts' - - package: - summary: Packages the application for Linux - deps: - - task: build - cmds: - - task: create:appimage - - task: create:deb - - task: create:rpm - - task: create:aur - - create:appimage: - summary: Creates an AppImage - dir: build/linux/appimage - deps: - - task: build - - task: generate:dotdesktop - cmds: - - cp "{{.APP_BINARY}}" "{{.APP_NAME}}" - - cp ../../appicon.png "{{.APP_NAME}}.png" - - wails3 generate appimage -binary "{{.APP_NAME}}" -icon {{.ICON}} -desktopfile {{.DESKTOP_FILE}} -outputdir {{.OUTPUT_DIR}} -builddir {{.ROOT_DIR}}/build/linux/appimage/build - vars: - APP_NAME: '{{.APP_NAME}}' - APP_BINARY: '../../../bin/{{.APP_NAME}}' - ICON: '{{.APP_NAME}}.png' - DESKTOP_FILE: '../{{.APP_NAME}}.desktop' - OUTPUT_DIR: '../../../bin' - - create:deb: - summary: Creates a deb package - deps: - - task: build - cmds: - - task: generate:dotdesktop - - task: generate:deb - - create:rpm: - summary: Creates a rpm package - deps: - - task: build - cmds: - - task: generate:dotdesktop - - task: generate:rpm - - create:aur: - summary: Creates a arch linux packager package - deps: - - task: build - cmds: - - task: generate:dotdesktop - - task: generate:aur - - generate:deb: - summary: Creates a deb package - cmds: - - wails3 tool package -name "{{.APP_NAME}}" -format deb -config ./build/linux/nfpm/nfpm.yaml -out {{.ROOT_DIR}}/bin - - generate:rpm: - summary: Creates a rpm package - cmds: - - wails3 tool package -name "{{.APP_NAME}}" -format rpm -config ./build/linux/nfpm/nfpm.yaml -out {{.ROOT_DIR}}/bin - - generate:aur: - summary: Creates a arch linux packager package - cmds: - - wails3 tool package -name "{{.APP_NAME}}" -format archlinux -config ./build/linux/nfpm/nfpm.yaml -out {{.ROOT_DIR}}/bin - - generate:dotdesktop: - summary: Generates a `.desktop` file - dir: build - cmds: - - mkdir -p {{.ROOT_DIR}}/build/linux/appimage - - wails3 generate .desktop -name "{{.APP_NAME}}" -exec "{{.EXEC}}" -icon "{{.ICON}}" -outputfile "{{.ROOT_DIR}}/build/linux/{{.APP_NAME}}.desktop" -categories "{{.CATEGORIES}}" - vars: - APP_NAME: '{{.APP_NAME}}' - EXEC: '{{.APP_NAME}}' - ICON: '{{.APP_NAME}}' - CATEGORIES: 'Development;' - OUTPUTFILE: '{{.ROOT_DIR}}/build/linux/{{.APP_NAME}}.desktop' - - run: - cmds: - - '{{.BIN_DIR}}/{{.APP_NAME}}' - - sign:deb: - summary: Signs the DEB package - desc: | - Signs the .deb package with a PGP key. - Configure PGP_KEY in the vars section at the top of this file. - Password is retrieved from system keychain (run: wails3 setup signing) - deps: - - task: create:deb - cmds: - - wails3 tool sign --input "{{.BIN_DIR}}/{{.APP_NAME}}*.deb" --pgp-key {{.PGP_KEY}} {{if .SIGN_ROLE}}--role {{.SIGN_ROLE}}{{end}} - preconditions: - - sh: '[ -n "{{.PGP_KEY}}" ]' - msg: "PGP_KEY is required. Set it in the vars section at the top of build/linux/Taskfile.yml" - - sign:rpm: - summary: Signs the RPM package - desc: | - Signs the .rpm package with a PGP key. - Configure PGP_KEY in the vars section at the top of this file. - Password is retrieved from system keychain (run: wails3 setup signing) - deps: - - task: create:rpm - cmds: - - wails3 tool sign --input "{{.BIN_DIR}}/{{.APP_NAME}}*.rpm" --pgp-key {{.PGP_KEY}} - preconditions: - - sh: '[ -n "{{.PGP_KEY}}" ]' - msg: "PGP_KEY is required. Set it in the vars section at the top of build/linux/Taskfile.yml" - - sign:packages: - summary: Signs all Linux packages (DEB and RPM) - desc: | - Signs both .deb and .rpm packages with a PGP key. - Configure PGP_KEY in the vars section at the top of this file. - Password is retrieved from system keychain (run: wails3 setup signing) - cmds: - - task: sign:deb - - task: sign:rpm - preconditions: - - sh: '[ -n "{{.PGP_KEY}}" ]' - msg: "PGP_KEY is required. Set it in the vars section at the top of build/linux/Taskfile.yml" diff --git a/cmd/verstak-gui/frontend-dist/assets/main-B6Dq2iD8.css b/cmd/verstak-gui/frontend-dist/assets/main-B6Dq2iD8.css new file mode 100644 index 0000000..d5b0684 --- /dev/null +++ b/cmd/verstak-gui/frontend-dist/assets/main-B6Dq2iD8.css @@ -0,0 +1 @@ +.file-row.svelte-1u905d2.svelte-1u905d2{display:flex;align-items:center;gap:10px;padding:8px 12px;border-radius:6px;cursor:default;transition:background .12s;min-height:52px;-webkit-user-select:none;user-select:none;position:relative}.file-row.svelte-1u905d2.svelte-1u905d2:hover{background:#1e1e30}.file-row--selected.svelte-1u905d2.svelte-1u905d2{background:#1e1e3a;outline:1px solid #3a3a6c}.file-row--selected.svelte-1u905d2.svelte-1u905d2:hover{background:#252545}.file-row.svelte-1u905d2.svelte-1u905d2:focus-visible{outline:2px solid #5588ff;outline-offset:-2px}.file-row-icon.svelte-1u905d2.svelte-1u905d2{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:32px;height:32px;color:#888}.file-row-body.svelte-1u905d2.svelte-1u905d2{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.file-row-name.svelte-1u905d2.svelte-1u905d2{font-size:13px;color:#ddd;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.3}.file-row-meta.svelte-1u905d2.svelte-1u905d2{display:flex;align-items:center;gap:4px;font-size:11px;color:#666}.meta-sep.svelte-1u905d2.svelte-1u905d2{color:#444}.file-row-actions.svelte-1u905d2.svelte-1u905d2{display:flex;gap:2px;align-items:center;opacity:0;transition:opacity .15s ease;flex-shrink:0}.file-row.svelte-1u905d2:hover .file-row-actions.svelte-1u905d2{opacity:1}.action-btn.svelte-1u905d2.svelte-1u905d2{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;border-radius:4px;background:transparent;color:#666;cursor:pointer;transition:background .12s,color .12s}.action-btn.svelte-1u905d2.svelte-1u905d2:hover{background:#2a2a3c;color:#ccc}.action-btn-danger.svelte-1u905d2.svelte-1u905d2:hover{background:#3a2222;color:#ff6b6b}.action-btn.svelte-1u905d2.svelte-1u905d2:focus-visible{outline:2px solid #5588ff;outline-offset:1px}.menu-backdrop.svelte-1u905d2.svelte-1u905d2{position:fixed;top:0;right:0;bottom:0;left:0;z-index:99}.menu.svelte-1u905d2.svelte-1u905d2{position:absolute;right:12px;margin-top:4px;background:#1a1a28;border:1px solid #2a2a3c;border-radius:8px;padding:4px;z-index:100;min-width:220px;box-shadow:0 4px 16px #00000080}.menu-item.svelte-1u905d2.svelte-1u905d2{display:flex;align-items:center;gap:8px;width:100%;padding:7px 10px;border:none;background:transparent;color:#ccc;font-size:12px;text-align:left;cursor:pointer;border-radius:4px;font-family:inherit}.menu-item.svelte-1u905d2.svelte-1u905d2:hover{background:#2a2a3c;color:#fff}.menu-item-danger.svelte-1u905d2.svelte-1u905d2{color:#ff6b6b}.menu-item-danger.svelte-1u905d2.svelte-1u905d2:hover{background:#3a2222}.menu-item.svelte-1u905d2.svelte-1u905d2:focus-visible{outline:2px solid #5588ff;outline-offset:1px}.menu-sep.svelte-1u905d2.svelte-1u905d2{height:1px;background:#2a2a3c;margin:4px 8px}.breadcrumbs.svelte-csi2lb{display:flex;align-items:center;gap:4px;padding:8px 0;font-size:13px;color:#999}.sep.svelte-csi2lb{color:#444}.crumb.svelte-csi2lb{font-size:13px}.crumb--current.svelte-csi2lb{color:#ccc}.crumb--link.svelte-csi2lb{background:none;border:none;padding:2px 4px;color:#888;cursor:pointer;border-radius:3px;font-family:inherit;font-size:13px;transition:color .12s,background .12s}.crumb--link.svelte-csi2lb:hover{color:#ccc;background:#1e1e30}.crumb--link.svelte-csi2lb:focus-visible{outline:2px solid #5588ff;outline-offset:1px}.overlay.svelte-1cw3u0m{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000a6;display:flex;align-items:center;justify-content:center;z-index:1000}.modal.svelte-1cw3u0m{background:#14141f;border:1px solid #2a2a3c;border-radius:10px;width:90vw;max-width:900px;height:85vh;max-height:700px;display:flex;flex-direction:column;overflow:hidden}.preview-header.svelte-1cw3u0m{display:flex;align-items:center;gap:10px;padding:12px 16px;border-bottom:1px solid #2a2a3c;flex-shrink:0}.preview-title.svelte-1cw3u0m{display:flex;align-items:center;gap:8px;color:#ddd;font-size:14px;min-width:0}.preview-name.svelte-1cw3u0m{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.preview-meta.svelte-1cw3u0m{font-size:11px;color:#666;margin-left:auto;white-space:nowrap}.preview-actions.svelte-1cw3u0m{display:flex;gap:4px;flex-shrink:0;margin-left:8px}.action-btn.svelte-1cw3u0m{display:flex;align-items:center;justify-content:center;width:30px;height:30px;border:none;border-radius:4px;background:transparent;color:#666;cursor:pointer;transition:background .12s,color .12s}.action-btn.svelte-1cw3u0m:hover{background:#2a2a3c;color:#ccc}.action-btn.svelte-1cw3u0m:focus-visible{outline:2px solid #5588ff;outline-offset:1px}.action-btn-close.svelte-1cw3u0m{color:#ff6b6b}.action-btn-close.svelte-1cw3u0m:hover{background:#3a2222;color:#f44}.preview-body.svelte-1cw3u0m{flex:1;overflow:auto;min-height:0}.preview-status.svelte-1cw3u0m{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:48px 24px;color:#888;font-size:14px}.preview-image-container.svelte-1cw3u0m{display:flex;align-items:center;justify-content:center;padding:16px;min-height:200px;background:#0e0e18}.preview-image.svelte-1cw3u0m{max-width:100%;max-height:calc(85vh - 100px);object-fit:contain;border-radius:4px}.preview-text.svelte-1cw3u0m{margin:0;padding:16px;font-family:SF Mono,Fira Code,Cascadia Code,Consolas,monospace;font-size:12px;line-height:1.5;color:#ccc;white-space:pre-wrap;word-wrap:break-word;overflow:auto}.preview-pdf-container.svelte-1cw3u0m{width:100%;height:100%}.preview-pdf.svelte-1cw3u0m{width:100%;height:100%;border:none}.btn-sm.svelte-1cw3u0m{padding:6px 14px;border:1px solid #2a2a3c;background:#1a1a28;color:#ccc;border-radius:6px;cursor:pointer;font-size:12px;font-family:inherit;transition:background .12s}.btn-sm.svelte-1cw3u0m:hover{background:#223}.overlay.svelte-1fv6yyk{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:200}.modal.svelte-1fv6yyk{background:#1a1a28;border:1px solid #2a2a3c;border-radius:12px;padding:24px;width:360px;max-width:90vw}h3.svelte-1fv6yyk{font-size:18px;margin-bottom:12px;color:#e4e4ef}.message.svelte-1fv6yyk{font-size:14px;color:#aaa;margin-bottom:20px;line-height:1.4}.actions.svelte-1fv6yyk{display:flex;gap:8px;justify-content:flex-end}.btn.svelte-1fv6yyk{padding:8px 16px;border:1px solid #2a2a3c;background:#1a1a28;color:#ccc;border-radius:6px;cursor:pointer;font-size:13px;font-family:inherit}.btn.svelte-1fv6yyk:hover{background:#223}.btn-primary.svelte-1fv6yyk{background:#6366f1;border-color:#6366f1;color:#fff}.btn-primary.svelte-1fv6yyk:hover{background:#4f46e5}.btn-danger.svelte-1fv6yyk{background:#dc2626;border-color:#dc2626;color:#fff}.btn-danger.svelte-1fv6yyk:hover{background:#b91c1c}.btn.svelte-1fv6yyk:focus-visible{outline:2px solid #5588ff;outline-offset:1px}.svelte-owriro.svelte-owriro,.svelte-owriro.svelte-owriro:before,.svelte-owriro.svelte-owriro:after{box-sizing:border-box;margin:0;padding:0}.app.svelte-owriro.svelte-owriro{display:flex;width:100vw;height:100vh;overflow:hidden;background:#13131f;color:#e4e4ef;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:14px}.sidebar.svelte-owriro.svelte-owriro{width:260px;min-width:200px;height:100vh;display:flex;flex-direction:column;background:#1a1a28;border-right:1px solid #2a2a3c;flex-shrink:0;overflow:hidden}.sidebar-brand.svelte-owriro.svelte-owriro{padding:16px 20px;display:flex;align-items:center;gap:10px;border-bottom:1px solid #2a2a3c;flex-shrink:0}.logo.svelte-owriro.svelte-owriro{font-size:20px;line-height:1}.brand-name.svelte-owriro.svelte-owriro{font-size:16px;font-weight:600}.sidebar-nav.svelte-owriro.svelte-owriro{flex:1;overflow-y:auto;padding:12px 0}.nav-group.svelte-owriro.svelte-owriro{margin-bottom:16px}.nav-label.svelte-owriro.svelte-owriro{font-size:10px;text-transform:uppercase;letter-spacing:.5px;color:#666;padding:4px 20px;margin-bottom:4px}.nav-item.svelte-owriro.svelte-owriro{display:block;width:100%;padding:8px 20px;border:none;background:none;color:#ccc;font-size:13px;text-align:left;cursor:pointer;border-radius:0;font-family:inherit}.nav-item.svelte-owriro.svelte-owriro:hover{background:#223}.nav-item.selected.svelte-owriro.svelte-owriro{background:#2a2a4a;color:#fff;font-weight:500}.nav-empty.svelte-owriro.svelte-owriro{padding:8px 20px;color:#555;font-size:12px}.nav-label-row.svelte-owriro.svelte-owriro{font-size:10px;text-transform:uppercase;letter-spacing:.5px;color:#666;padding:4px 20px;margin-bottom:4px;display:flex;align-items:center;justify-content:space-between}.nav-add-btn.svelte-owriro.svelte-owriro{background:none;border:none;color:#666;cursor:pointer;font-size:16px;padding:0 4px;font-family:inherit;line-height:1}.nav-add-btn.svelte-owriro.svelte-owriro:hover{color:#ccc}.tree-item.svelte-owriro.svelte-owriro{display:flex;align-items:center;padding:4px 8px 4px 0;cursor:default;font-size:13px;color:#ccc}.tree-item.svelte-owriro.svelte-owriro:hover{background:#223}.tree-item.selected.svelte-owriro.svelte-owriro{background:#2a2a4a;color:#fff;font-weight:500}.tree-toggle.svelte-owriro.svelte-owriro{background:none;border:none;color:#666;cursor:pointer;padding:2px 4px;font-size:10px;width:20px;text-align:center;flex-shrink:0;font-family:inherit;line-height:1}.tree-toggle.svelte-owriro.svelte-owriro:hover{color:#888}.tree-arrow.svelte-owriro.svelte-owriro{display:inline-block}.tree-spacer.svelte-owriro.svelte-owriro{display:inline-block;width:12px}.tree-label.svelte-owriro.svelte-owriro{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:2px 4px;cursor:pointer}.context-menu-backdrop.svelte-owriro.svelte-owriro{position:fixed;top:0;right:0;bottom:0;left:0;z-index:200}.context-menu.svelte-owriro.svelte-owriro{position:fixed;background:#1a1a28;border:1px solid #2a2a3c;border-radius:8px;padding:4px;min-width:180px;box-shadow:0 8px 24px #0006}.context-menu-section.svelte-owriro.svelte-owriro{padding:6px 12px;font-size:10px;text-transform:uppercase;letter-spacing:.5px;color:#666}.context-menu-item.svelte-owriro.svelte-owriro{display:block;width:100%;padding:6px 12px;border:none;background:none;color:#ccc;font-size:13px;text-align:left;cursor:pointer;border-radius:4px;font-family:inherit}.context-menu-item.svelte-owriro.svelte-owriro:hover{background:#223;color:#fff}.context-menu-item.danger.svelte-owriro.svelte-owriro{color:#ff6b6b}.context-menu-item.danger.svelte-owriro.svelte-owriro:hover{background:#3a2222;color:#ff6b6b}.context-menu-divider.svelte-owriro.svelte-owriro{height:1px;background:#2a2a3c;margin:4px 0}.create-context.svelte-owriro.svelte-owriro{font-size:12px;color:#888;margin-bottom:12px}.sidebar-footer.svelte-owriro.svelte-owriro{padding:8px 12px;border-top:1px solid #2a2a3c;flex-shrink:0;display:flex;flex-direction:column;gap:4px}.version.svelte-owriro.svelte-owriro{font-size:11px;color:#555;text-align:center}.main.svelte-owriro.svelte-owriro{flex:1;display:flex;flex-direction:column;height:100vh;min-width:0;overflow:hidden;background:#13131f}.header.svelte-owriro.svelte-owriro{padding:12px 24px;border-bottom:1px solid #2a2a3c;display:flex;align-items:center;flex-shrink:0;min-height:48px}.header-left.svelte-owriro.svelte-owriro{display:flex;align-items:center;gap:8px;flex:1}.header-right.svelte-owriro.svelte-owriro{display:flex;align-items:center;gap:8px}.header-sync-btn.svelte-owriro.svelte-owriro{background:#1e1e38;border:1px solid #6366f1;border-radius:8px;padding:6px 12px;cursor:pointer;display:inline-flex;align-items:center;gap:6px;color:#c0c0f0;font-family:inherit;font-size:13px;position:relative}.header-sync-btn.svelte-owriro.svelte-owriro:hover{background:#2a2a50;color:#e4e4ef;border-color:#818cf8}.header-sync-btn.svelte-owriro.svelte-owriro:disabled{opacity:.5;cursor:not-allowed}.sync-badge.svelte-owriro.svelte-owriro{background:#6366f1;color:#fff;font-size:10px;border-radius:50%;width:16px;height:16px;display:inline-flex;align-items:center;justify-content:center;position:absolute;top:-6px;right:-6px}.crumb.svelte-owriro.svelte-owriro{font-size:14px;font-weight:500}.crumb.placeholder.svelte-owriro.svelte-owriro{color:#666}.crumb-type.svelte-owriro.svelte-owriro{font-size:11px;color:#555;background:#1e1e2e;padding:2px 8px;border-radius:10px;margin-left:8px}.error-banner.svelte-owriro.svelte-owriro{background:#3a2222;color:#f88;padding:8px 24px;font-size:12px;border-bottom:1px solid #4a2222;flex-shrink:0;cursor:pointer;display:flex;justify-content:space-between;align-items:center}.dismiss-btn.svelte-owriro.svelte-owriro{background:none;border:none;color:#f66;cursor:pointer;padding:2px;display:flex;align-items:center;border-radius:2px}.dismiss-btn.svelte-owriro.svelte-owriro:hover{color:#f44}.tabs.svelte-owriro.svelte-owriro{display:flex;border-bottom:1px solid #2a2a3c;flex-shrink:0;padding:0 24px}.tab.svelte-owriro.svelte-owriro{padding:10px 16px;border:none;background:none;color:#888;font-size:13px;cursor:pointer;border-bottom:2px solid transparent;font-family:inherit}.tab.svelte-owriro.svelte-owriro:hover{color:#ccc}.tab.active.svelte-owriro.svelte-owriro{color:#e4e4ef;border-bottom-color:#6366f1}.tab-content.svelte-owriro.svelte-owriro{flex:1;overflow-y:auto}.note-editor.svelte-owriro.svelte-owriro{flex:1;display:flex;flex-direction:column;height:100%}.note-editor-header.svelte-owriro.svelte-owriro{padding:12px 24px;border-bottom:1px solid #2a2a3c;display:flex;align-items:center;gap:12px;flex-shrink:0}.note-title.svelte-owriro.svelte-owriro{font-size:16px;font-weight:500}.dirty-mark.svelte-owriro.svelte-owriro{color:#f59e0b;font-size:10px}.note-editor-actions.svelte-owriro.svelte-owriro{margin-left:auto;display:flex;gap:8px}.note-textarea.svelte-owriro.svelte-owriro{flex:1;width:100%;border:none;outline:none;background:#13131f;color:#e4e4ef;font-family:SF Mono,Fira Code,monospace;font-size:14px;line-height:1.6;padding:24px;resize:none}.overview.svelte-owriro.svelte-owriro{padding:24px}.overview.svelte-owriro h2.svelte-owriro{font-size:24px;margin-bottom:16px}.meta-grid.svelte-owriro.svelte-owriro{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px;margin-bottom:24px}.meta-item.svelte-owriro.svelte-owriro{background:#1a1a28;padding:12px 16px;border-radius:8px}.meta-label.svelte-owriro.svelte-owriro{display:block;font-size:11px;color:#666;margin-bottom:4px;text-transform:uppercase}.quick-actions.svelte-owriro.svelte-owriro{display:flex;gap:8px;margin-bottom:24px;flex-wrap:wrap}.qa-btn.svelte-owriro.svelte-owriro{padding:10px 16px;border:1px solid #2a2a3c;background:#1a1a28;color:#ccc;border-radius:8px;cursor:pointer;font-size:13px;font-family:inherit;display:inline-flex;align-items:center;gap:6px}.qa-btn.svelte-owriro.svelte-owriro:hover{background:#223}.qa-btn.svelte-owriro.svelte-owriro:disabled{opacity:.4;cursor:not-allowed}.recent-section.svelte-owriro.svelte-owriro{margin-bottom:24px}.recent-section.svelte-owriro h3.svelte-owriro{font-size:13px;color:#666;text-transform:uppercase;margin-bottom:8px}.recent-note.svelte-owriro.svelte-owriro{padding:8px 12px;border-radius:6px;cursor:pointer;display:flex;justify-content:space-between}.recent-note.svelte-owriro.svelte-owriro:hover{background:#1a1a28}.recent-date.svelte-owriro.svelte-owriro{font-size:11px;color:#555}.recent-entry.svelte-owriro.svelte-owriro{padding:6px 0;font-size:13px;color:#888;border-bottom:1px solid #1a1a28}.notes-tab.svelte-owriro.svelte-owriro{padding:24px}.tab-toolbar.svelte-owriro.svelte-owriro{margin-bottom:16px}.create-form.svelte-owriro.svelte-owriro{background:#1a1a28;padding:16px;border-radius:8px;margin-bottom:16px}.create-form.svelte-owriro input.svelte-owriro{width:100%;padding:8px 12px;border:1px solid #2a2a3c;background:#13131f;color:#e4e4ef;border-radius:4px;font-size:14px;font-family:inherit;margin-bottom:8px}.create-form.svelte-owriro input.svelte-owriro:focus{outline:none;border-color:#6366f1}.form-actions.svelte-owriro.svelte-owriro{display:flex;gap:8px}.notes-list.svelte-owriro.svelte-owriro{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px}.note-card.svelte-owriro.svelte-owriro{background:#1a1a28;border:1px solid #2a2a3c;border-radius:8px;padding:16px;cursor:pointer}.note-card.svelte-owriro.svelte-owriro:hover{border-color:#3a3a5c}.note-card-title.svelte-owriro.svelte-owriro{font-size:14px;font-weight:500;margin-bottom:4px}.note-card-date.svelte-owriro.svelte-owriro{font-size:11px;color:#555}.worklog-tab.svelte-owriro.svelte-owriro{padding:24px}.worklog-form.svelte-owriro.svelte-owriro{display:flex;gap:8px;margin-bottom:24px;align-items:center}.worklog-form.svelte-owriro input.svelte-owriro{padding:8px 12px;border:1px solid #2a2a3c;background:#13131f;color:#e4e4ef;border-radius:4px;font-size:14px;font-family:inherit}.worklog-form.svelte-owriro input.svelte-owriro:focus{outline:none;border-color:#6366f1}.worklog-form.svelte-owriro input[type=text].svelte-owriro{flex:1}.worklog-form.svelte-owriro input[type=number].svelte-owriro{width:70px}.worklog-entry.svelte-owriro.svelte-owriro{padding:12px 0;border-bottom:1px solid #1a1a28}.wl-meta.svelte-owriro.svelte-owriro{font-size:11px;color:#555;margin-top:2px}.actions-tab.svelte-owriro.svelte-owriro{padding:24px}.action-card.svelte-owriro.svelte-owriro{background:#1a1a28;padding:12px 16px;border-radius:8px;display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:8px}.action-info.svelte-owriro.svelte-owriro{display:flex;align-items:center;gap:8px;flex:1;min-width:0}.action-title.svelte-owriro.svelte-owriro{font-weight:500}.action-type.svelte-owriro.svelte-owriro{font-size:11px;color:#888;background:#223;padding:2px 8px;border-radius:10px;white-space:nowrap}.action-data.svelte-owriro.svelte-owriro{font-size:11px;color:#555;font-family:SF Mono,Fira Code,monospace;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:200px}.action-btns.svelte-owriro.svelte-owriro{display:flex;gap:4px;flex-shrink:0}.action-btns.svelte-owriro .btn-danger.svelte-owriro{color:#ff6b6b;border-color:#4a2222;padding:4px 8px}.action-btns.svelte-owriro .btn-danger.svelte-owriro:hover{background:#3a2222}.empty-state.svelte-owriro.svelte-owriro{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px 24px;text-align:center}.empty-state.svelte-owriro p.svelte-owriro{margin:0;font-size:14px;color:#666}.empty-state.svelte-owriro .empty-icon.svelte-owriro{margin-bottom:12px;color:#444}.empty-state.svelte-owriro .hint.svelte-owriro{font-size:12px;color:#555;margin-top:6px}.empty-state.svelte-owriro .empty-actions.svelte-owriro{display:flex;gap:8px;justify-content:center;margin-top:16px}.empty-note.svelte-owriro.svelte-owriro{font-size:12px;color:#444;margin-top:16px}.welcome.svelte-owriro.svelte-owriro{padding:48px 24px;text-align:center}.welcome.svelte-owriro h2.svelte-owriro{font-size:32px;font-weight:300;color:#8888a4;margin-bottom:16px}.welcome.svelte-owriro p.svelte-owriro{color:#666;font-size:14px}.error-text.svelte-owriro.svelte-owriro{color:#f88}.fab.svelte-owriro.svelte-owriro{position:fixed;bottom:24px;right:24px;width:56px;height:56px;border-radius:50%;background:#6366f1;color:#fff;font-size:28px;display:flex;align-items:center;justify-content:center;cursor:pointer;box-shadow:0 4px 12px #6366f166}.fab.svelte-owriro.svelte-owriro:hover{background:#4f46e5}.modal-overlay.svelte-owriro.svelte-owriro{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:100}.modal.svelte-owriro.svelte-owriro{background:#1a1a28;border:1px solid #2a2a3c;border-radius:12px;padding:24px;width:400px;max-width:90vw}.modal.svelte-owriro h3.svelte-owriro{font-size:18px;margin-bottom:16px}.form-group.svelte-owriro.svelte-owriro{margin-bottom:12px}.form-group.svelte-owriro label.svelte-owriro{display:block;font-size:12px;color:#666;margin-bottom:4px}.form-group.svelte-owriro input.svelte-owriro,.form-group.svelte-owriro select.svelte-owriro{width:100%;padding:8px 12px;border:1px solid #2a2a3c;background:#13131f;color:#e4e4ef;border-radius:4px;font-size:14px;font-family:inherit}.form-group.svelte-owriro select.svelte-owriro{-moz-appearance:none;appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23888' d='M2 4l4 4 4-4'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 10px center;padding-right:32px}.form-group.svelte-owriro input.svelte-owriro:focus,.form-group.svelte-owriro select.svelte-owriro:focus{outline:none;border-color:#6366f1}.modal-actions.svelte-owriro.svelte-owriro{display:flex;gap:8px;justify-content:flex-end;margin-top:16px}.btn.svelte-owriro.svelte-owriro{padding:8px 16px;border:1px solid #2a2a3c;background:#1a1a28;color:#ccc;border-radius:6px;cursor:pointer;font-size:13px;font-family:inherit}.btn.svelte-owriro.svelte-owriro:hover{background:#223}.btn-primary.svelte-owriro.svelte-owriro{background:#6366f1;border-color:#6366f1;color:#fff}.btn-primary.svelte-owriro.svelte-owriro:hover{background:#4f46e5}.btn.svelte-owriro.svelte-owriro:disabled{opacity:.4;cursor:not-allowed}.btn-sm.svelte-owriro.svelte-owriro{padding:4px 10px;font-size:12px}.btn-danger.svelte-owriro.svelte-owriro{color:#ff6b6b;border-color:#4a2222}.btn-danger.svelte-owriro.svelte-owriro:hover{background:#3a2222}.files-tab.svelte-owriro.svelte-owriro{padding:20px}.files-tab.svelte-owriro .tab-toolbar.svelte-owriro{display:flex;gap:8px;align-items:center;margin-bottom:16px}.file-list.svelte-owriro.svelte-owriro{display:flex;flex-direction:column}.back-btn.svelte-owriro.svelte-owriro{margin-bottom:4px;display:inline-flex;align-items:center;gap:4px}.import-summary.svelte-owriro.svelte-owriro{margin-bottom:16px}.summary-row.svelte-owriro.svelte-owriro{display:flex;justify-content:space-between;padding:6px 0;font-size:14px;border-bottom:1px solid #2a2a3c}.summary-warn.svelte-owriro.svelte-owriro{margin-top:8px;padding:8px 12px;background:#3a2a22;border-radius:6px;color:#fa6;font-size:13px}.rename-error.svelte-owriro.svelte-owriro{color:#ff6b6b;font-size:12px;margin-top:4px}.today-dashboard.svelte-owriro.svelte-owriro{padding:24px;overflow-y:auto;flex:1}.today-header.svelte-owriro.svelte-owriro{display:flex;align-items:baseline;gap:12px;margin-bottom:16px}.today-header.svelte-owriro h2.svelte-owriro{font-size:24px}.today-date.svelte-owriro.svelte-owriro{font-size:13px;color:#666}.today-summary.svelte-owriro.svelte-owriro{display:flex;gap:8px;margin-bottom:20px;flex-wrap:wrap}.summary-chip.svelte-owriro.svelte-owriro{font-size:12px;color:#b0b0c0;background:#1a1a28;border:1px solid #2a2a3c;padding:4px 12px;border-radius:16px}.today-case.svelte-owriro.svelte-owriro{background:#1a1a28;border:1px solid #2a2a3c;border-radius:8px;margin-bottom:12px;overflow:hidden}.today-case-header.svelte-owriro.svelte-owriro{padding:12px 16px;display:flex;align-items:center;gap:8px;border-bottom:1px solid #2a2a3c;cursor:pointer}.today-case-header.svelte-owriro.svelte-owriro:hover{background:#1e1e30}.today-case-title.svelte-owriro.svelte-owriro{font-weight:500}.today-case-type.svelte-owriro.svelte-owriro{font-size:11px;color:#888;background:#223;padding:2px 8px;border-radius:10px}.today-case-count.svelte-owriro.svelte-owriro{font-size:11px;color:#6366f1;margin-left:4px}.today-case-time.svelte-owriro.svelte-owriro{font-size:11px;color:#555;margin-left:auto}.today-events.svelte-owriro.svelte-owriro{padding:8px 16px}.today-event.svelte-owriro.svelte-owriro{display:flex;align-items:center;gap:8px;padding:4px 0;font-size:13px;color:#b0b0c0;cursor:pointer}.today-event.svelte-owriro.svelte-owriro:hover{color:#e4e4ef}.today-event-icon.svelte-owriro.svelte-owriro{width:18px;text-align:center;color:#6366f1;font-size:13px}.today-event-title.svelte-owriro.svelte-owriro{flex:1}.today-event-type.svelte-owriro.svelte-owriro{font-size:11px;color:#666}.today-event-time.svelte-owriro.svelte-owriro{font-size:11px;color:#555;margin-left:auto}.today-events-empty.svelte-owriro.svelte-owriro{padding:8px 16px;font-size:13px;color:#666;font-style:italic}.today-empty.svelte-owriro.svelte-owriro{padding:48px 24px;text-align:center}.today-empty.svelte-owriro p.svelte-owriro{color:#666;font-size:14px;margin:0}.today-empty.svelte-owriro .hint.svelte-owriro{font-size:12px;color:#555;margin-top:8px}.today-timeline.svelte-owriro.svelte-owriro{margin-top:24px}.today-timeline.svelte-owriro h3.svelte-owriro{font-size:13px;color:#666;text-transform:uppercase;margin-bottom:12px}.timeline-event.svelte-owriro.svelte-owriro{display:flex;align-items:center;gap:10px;font-size:13px;color:#b0b0c0;border-left:2px solid #2a2a3c;padding:6px 0 6px 16px;margin-left:4px;cursor:pointer}.timeline-event.svelte-owriro.svelte-owriro:hover{color:#e4e4ef}.timeline-dot.svelte-owriro.svelte-owriro{width:6px;height:6px;border-radius:50%;background:#6366f1;margin-left:-19px;flex-shrink:0}.timeline-title.svelte-owriro.svelte-owriro{flex:1}.timeline-type.svelte-owriro.svelte-owriro{font-size:11px;color:#666}.timeline-time.svelte-owriro.svelte-owriro{font-size:11px;color:#555}.activity-tab.svelte-owriro.svelte-owriro{padding:24px}.activity-events.svelte-owriro.svelte-owriro{display:flex;flex-direction:column;gap:2px}.activity-event.svelte-owriro.svelte-owriro{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:6px;font-size:13px;color:#b0b0c0;cursor:pointer}.activity-event.svelte-owriro.svelte-owriro:hover{background:#1a1a28;color:#e4e4ef}.activity-event-icon.svelte-owriro.svelte-owriro{width:18px;text-align:center;color:#6366f1;font-size:13px;flex-shrink:0}.activity-event-title.svelte-owriro.svelte-owriro{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.activity-event-type.svelte-owriro.svelte-owriro{font-size:11px;color:#666;flex-shrink:0}.activity-event-target.svelte-owriro.svelte-owriro{font-size:10px;color:#555;background:#1e1e2e;padding:1px 6px;border-radius:8px;flex-shrink:0}.activity-event-time.svelte-owriro.svelte-owriro{font-size:11px;color:#555;margin-left:8px;flex-shrink:0}.activity-feed.svelte-owriro.svelte-owriro{padding:24px;overflow-y:auto;flex:1}.activity-feed-header.svelte-owriro.svelte-owriro{margin-bottom:20px}.activity-feed-header.svelte-owriro h2.svelte-owriro{font-size:24px}.activity-feed-events.svelte-owriro.svelte-owriro{display:flex;flex-direction:column;gap:2px}.activity-feed-event.svelte-owriro.svelte-owriro{display:flex;align-items:flex-start;gap:10px;padding:8px 12px;border-radius:8px;cursor:pointer}.activity-feed-event.svelte-owriro.svelte-owriro:hover{background:#1a1a28;color:#e4e4ef}.activity-feed-icon.svelte-owriro.svelte-owriro{width:20px;text-align:center;color:#6366f1;font-size:14px;flex-shrink:0;margin-top:1px}.activity-feed-body.svelte-owriro.svelte-owriro{flex:1;min-width:0}.activity-feed-title.svelte-owriro.svelte-owriro{font-size:14px;color:#e4e4ef}.activity-feed-meta.svelte-owriro.svelte-owriro{display:flex;align-items:center;gap:8px;margin-top:2px}.activity-feed-type.svelte-owriro.svelte-owriro{font-size:11px;color:#666}.activity-feed-target.svelte-owriro.svelte-owriro{font-size:10px;color:#555;background:#1e1e2e;padding:1px 6px;border-radius:8px}.activity-feed-time.svelte-owriro.svelte-owriro{font-size:11px;color:#555}.sidebar-sync-btn.svelte-owriro.svelte-owriro{background:#1e1e38;border:1px solid #6366f1;border-radius:8px;padding:8px 12px;cursor:pointer;width:100%;display:flex;align-items:center;gap:8px;color:#c0c0f0;font-family:inherit;font-size:13px}.sidebar-sync-btn.svelte-owriro.svelte-owriro:hover{background:#2a2a50;color:#e4e4ef;border-color:#818cf8}.sidebar-sync-label.svelte-owriro.svelte-owriro{flex:1;text-align:left}.sync-dot.svelte-owriro.svelte-owriro{width:8px;height:8px;border-radius:50%;background:#4a4a4a;flex-shrink:0}.sync-dot.active.svelte-owriro.svelte-owriro{background:#4ade80;box-shadow:0 0 6px #4ade8080}.modal-sync.svelte-owriro.svelte-owriro{width:460px}.sync-status.svelte-owriro.svelte-owriro{background:#13131f;border-radius:8px;padding:12px;margin-bottom:16px}.sync-row.svelte-owriro.svelte-owriro{display:flex;justify-content:space-between;padding:4px 0;font-size:13px}.sync-label.svelte-owriro.svelte-owriro{color:#666}.sync-value.svelte-owriro.svelte-owriro{color:#e4e4ef}.sync-value.mono.svelte-owriro.svelte-owriro{font-family:SF Mono,Fira Code,monospace;font-size:12px}.sync-result.svelte-owriro.svelte-owriro{font-size:12px;color:#6366f1;padding:4px 0}.sync-connected-actions.svelte-owriro.svelte-owriro{display:flex;gap:8px;margin-bottom:16px} diff --git a/cmd/verstak-gui/frontend-dist/assets/main-Bkv7FuGB.css b/cmd/verstak-gui/frontend-dist/assets/main-Bkv7FuGB.css deleted file mode 100644 index 289504f..0000000 --- a/cmd/verstak-gui/frontend-dist/assets/main-Bkv7FuGB.css +++ /dev/null @@ -1 +0,0 @@ -.file-row.svelte-1u905d2.svelte-1u905d2{display:flex;align-items:center;gap:10px;padding:8px 12px;border-radius:6px;cursor:default;transition:background .12s;min-height:52px;-webkit-user-select:none;user-select:none;position:relative}.file-row.svelte-1u905d2.svelte-1u905d2:hover{background:#1e1e30}.file-row--selected.svelte-1u905d2.svelte-1u905d2{background:#1e1e3a;outline:1px solid #3a3a6c}.file-row--selected.svelte-1u905d2.svelte-1u905d2:hover{background:#252545}.file-row.svelte-1u905d2.svelte-1u905d2:focus-visible{outline:2px solid #5588ff;outline-offset:-2px}.file-row-icon.svelte-1u905d2.svelte-1u905d2{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:32px;height:32px;color:#888}.file-row-body.svelte-1u905d2.svelte-1u905d2{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.file-row-name.svelte-1u905d2.svelte-1u905d2{font-size:13px;color:#ddd;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.3}.file-row-meta.svelte-1u905d2.svelte-1u905d2{display:flex;align-items:center;gap:4px;font-size:11px;color:#666}.meta-sep.svelte-1u905d2.svelte-1u905d2{color:#444}.file-row-actions.svelte-1u905d2.svelte-1u905d2{display:flex;gap:2px;align-items:center;opacity:0;transition:opacity .15s ease;flex-shrink:0}.file-row.svelte-1u905d2:hover .file-row-actions.svelte-1u905d2{opacity:1}.action-btn.svelte-1u905d2.svelte-1u905d2{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;border-radius:4px;background:transparent;color:#666;cursor:pointer;transition:background .12s,color .12s}.action-btn.svelte-1u905d2.svelte-1u905d2:hover{background:#2a2a3c;color:#ccc}.action-btn-danger.svelte-1u905d2.svelte-1u905d2:hover{background:#3a2222;color:#ff6b6b}.action-btn.svelte-1u905d2.svelte-1u905d2:focus-visible{outline:2px solid #5588ff;outline-offset:1px}.menu-backdrop.svelte-1u905d2.svelte-1u905d2{position:fixed;top:0;right:0;bottom:0;left:0;z-index:99}.menu.svelte-1u905d2.svelte-1u905d2{position:absolute;right:12px;margin-top:4px;background:#1a1a28;border:1px solid #2a2a3c;border-radius:8px;padding:4px;z-index:100;min-width:220px;box-shadow:0 4px 16px #00000080}.menu-item.svelte-1u905d2.svelte-1u905d2{display:flex;align-items:center;gap:8px;width:100%;padding:7px 10px;border:none;background:transparent;color:#ccc;font-size:12px;text-align:left;cursor:pointer;border-radius:4px;font-family:inherit}.menu-item.svelte-1u905d2.svelte-1u905d2:hover{background:#2a2a3c;color:#fff}.menu-item-danger.svelte-1u905d2.svelte-1u905d2{color:#ff6b6b}.menu-item-danger.svelte-1u905d2.svelte-1u905d2:hover{background:#3a2222}.menu-item.svelte-1u905d2.svelte-1u905d2:focus-visible{outline:2px solid #5588ff;outline-offset:1px}.menu-sep.svelte-1u905d2.svelte-1u905d2{height:1px;background:#2a2a3c;margin:4px 8px}.breadcrumbs.svelte-csi2lb{display:flex;align-items:center;gap:4px;padding:8px 0;font-size:13px;color:#999}.sep.svelte-csi2lb{color:#444}.crumb.svelte-csi2lb{font-size:13px}.crumb--current.svelte-csi2lb{color:#ccc}.crumb--link.svelte-csi2lb{background:none;border:none;padding:2px 4px;color:#888;cursor:pointer;border-radius:3px;font-family:inherit;font-size:13px;transition:color .12s,background .12s}.crumb--link.svelte-csi2lb:hover{color:#ccc;background:#1e1e30}.crumb--link.svelte-csi2lb:focus-visible{outline:2px solid #5588ff;outline-offset:1px}.overlay.svelte-1cw3u0m{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000a6;display:flex;align-items:center;justify-content:center;z-index:1000}.modal.svelte-1cw3u0m{background:#14141f;border:1px solid #2a2a3c;border-radius:10px;width:90vw;max-width:900px;height:85vh;max-height:700px;display:flex;flex-direction:column;overflow:hidden}.preview-header.svelte-1cw3u0m{display:flex;align-items:center;gap:10px;padding:12px 16px;border-bottom:1px solid #2a2a3c;flex-shrink:0}.preview-title.svelte-1cw3u0m{display:flex;align-items:center;gap:8px;color:#ddd;font-size:14px;min-width:0}.preview-name.svelte-1cw3u0m{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.preview-meta.svelte-1cw3u0m{font-size:11px;color:#666;margin-left:auto;white-space:nowrap}.preview-actions.svelte-1cw3u0m{display:flex;gap:4px;flex-shrink:0;margin-left:8px}.action-btn.svelte-1cw3u0m{display:flex;align-items:center;justify-content:center;width:30px;height:30px;border:none;border-radius:4px;background:transparent;color:#666;cursor:pointer;transition:background .12s,color .12s}.action-btn.svelte-1cw3u0m:hover{background:#2a2a3c;color:#ccc}.action-btn.svelte-1cw3u0m:focus-visible{outline:2px solid #5588ff;outline-offset:1px}.action-btn-close.svelte-1cw3u0m{color:#ff6b6b}.action-btn-close.svelte-1cw3u0m:hover{background:#3a2222;color:#f44}.preview-body.svelte-1cw3u0m{flex:1;overflow:auto;min-height:0}.preview-status.svelte-1cw3u0m{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:48px 24px;color:#888;font-size:14px}.preview-image-container.svelte-1cw3u0m{display:flex;align-items:center;justify-content:center;padding:16px;min-height:200px;background:#0e0e18}.preview-image.svelte-1cw3u0m{max-width:100%;max-height:calc(85vh - 100px);object-fit:contain;border-radius:4px}.preview-text.svelte-1cw3u0m{margin:0;padding:16px;font-family:SF Mono,Fira Code,Cascadia Code,Consolas,monospace;font-size:12px;line-height:1.5;color:#ccc;white-space:pre-wrap;word-wrap:break-word;overflow:auto}.preview-pdf-container.svelte-1cw3u0m{width:100%;height:100%}.preview-pdf.svelte-1cw3u0m{width:100%;height:100%;border:none}.btn-sm.svelte-1cw3u0m{padding:6px 14px;border:1px solid #2a2a3c;background:#1a1a28;color:#ccc;border-radius:6px;cursor:pointer;font-size:12px;font-family:inherit;transition:background .12s}.btn-sm.svelte-1cw3u0m:hover{background:#223}.overlay.svelte-1fv6yyk{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:200}.modal.svelte-1fv6yyk{background:#1a1a28;border:1px solid #2a2a3c;border-radius:12px;padding:24px;width:360px;max-width:90vw}h3.svelte-1fv6yyk{font-size:18px;margin-bottom:12px;color:#e4e4ef}.message.svelte-1fv6yyk{font-size:14px;color:#aaa;margin-bottom:20px;line-height:1.4}.actions.svelte-1fv6yyk{display:flex;gap:8px;justify-content:flex-end}.btn.svelte-1fv6yyk{padding:8px 16px;border:1px solid #2a2a3c;background:#1a1a28;color:#ccc;border-radius:6px;cursor:pointer;font-size:13px;font-family:inherit}.btn.svelte-1fv6yyk:hover{background:#223}.btn-primary.svelte-1fv6yyk{background:#6366f1;border-color:#6366f1;color:#fff}.btn-primary.svelte-1fv6yyk:hover{background:#4f46e5}.btn-danger.svelte-1fv6yyk{background:#dc2626;border-color:#dc2626;color:#fff}.btn-danger.svelte-1fv6yyk:hover{background:#b91c1c}.btn.svelte-1fv6yyk:focus-visible{outline:2px solid #5588ff;outline-offset:1px}.svelte-1qo7cgm.svelte-1qo7cgm,.svelte-1qo7cgm.svelte-1qo7cgm:before,.svelte-1qo7cgm.svelte-1qo7cgm:after{box-sizing:border-box;margin:0;padding:0}.app.svelte-1qo7cgm.svelte-1qo7cgm{display:flex;width:100vw;height:100vh;overflow:hidden;background:#13131f;color:#e4e4ef;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:14px}.sidebar.svelte-1qo7cgm.svelte-1qo7cgm{width:260px;min-width:200px;height:100vh;display:flex;flex-direction:column;background:#1a1a28;border-right:1px solid #2a2a3c;flex-shrink:0;overflow:hidden}.sidebar-brand.svelte-1qo7cgm.svelte-1qo7cgm{padding:16px 20px;display:flex;align-items:center;gap:10px;border-bottom:1px solid #2a2a3c;flex-shrink:0}.logo.svelte-1qo7cgm.svelte-1qo7cgm{font-size:20px;line-height:1}.brand-name.svelte-1qo7cgm.svelte-1qo7cgm{font-size:16px;font-weight:600}.sidebar-nav.svelte-1qo7cgm.svelte-1qo7cgm{flex:1;overflow-y:auto;padding:12px 0}.nav-group.svelte-1qo7cgm.svelte-1qo7cgm{margin-bottom:16px}.nav-label.svelte-1qo7cgm.svelte-1qo7cgm{font-size:10px;text-transform:uppercase;letter-spacing:.5px;color:#666;padding:4px 20px;margin-bottom:4px}.nav-item.svelte-1qo7cgm.svelte-1qo7cgm{display:block;width:100%;padding:8px 20px;border:none;background:none;color:#ccc;font-size:13px;text-align:left;cursor:pointer;border-radius:0;font-family:inherit}.nav-item.svelte-1qo7cgm.svelte-1qo7cgm:hover{background:#223}.nav-item.selected.svelte-1qo7cgm.svelte-1qo7cgm{background:#2a2a4a;color:#fff;font-weight:500}.nav-empty.svelte-1qo7cgm.svelte-1qo7cgm{padding:8px 20px;color:#555;font-size:12px}.sidebar-footer.svelte-1qo7cgm.svelte-1qo7cgm{padding:8px 12px;border-top:1px solid #2a2a3c;flex-shrink:0;display:flex;flex-direction:column;gap:4px}.version.svelte-1qo7cgm.svelte-1qo7cgm{font-size:11px;color:#555;text-align:center}.main.svelte-1qo7cgm.svelte-1qo7cgm{flex:1;display:flex;flex-direction:column;height:100vh;min-width:0;overflow:hidden;background:#13131f}.header.svelte-1qo7cgm.svelte-1qo7cgm{padding:12px 24px;border-bottom:1px solid #2a2a3c;display:flex;align-items:center;flex-shrink:0;min-height:48px}.header-left.svelte-1qo7cgm.svelte-1qo7cgm{display:flex;align-items:center;gap:8px;flex:1}.header-right.svelte-1qo7cgm.svelte-1qo7cgm{display:flex;align-items:center;gap:8px}.header-sync-btn.svelte-1qo7cgm.svelte-1qo7cgm{background:#1e1e38;border:1px solid #6366f1;border-radius:8px;padding:6px 12px;cursor:pointer;display:inline-flex;align-items:center;gap:6px;color:#c0c0f0;font-family:inherit;font-size:13px;position:relative}.header-sync-btn.svelte-1qo7cgm.svelte-1qo7cgm:hover{background:#2a2a50;color:#e4e4ef;border-color:#818cf8}.header-sync-btn.svelte-1qo7cgm.svelte-1qo7cgm:disabled{opacity:.5;cursor:not-allowed}.sync-badge.svelte-1qo7cgm.svelte-1qo7cgm{background:#6366f1;color:#fff;font-size:10px;border-radius:50%;width:16px;height:16px;display:inline-flex;align-items:center;justify-content:center;position:absolute;top:-6px;right:-6px}.crumb.svelte-1qo7cgm.svelte-1qo7cgm{font-size:14px;font-weight:500}.crumb.placeholder.svelte-1qo7cgm.svelte-1qo7cgm{color:#666}.crumb-type.svelte-1qo7cgm.svelte-1qo7cgm{font-size:11px;color:#555;background:#1e1e2e;padding:2px 8px;border-radius:10px;margin-left:8px}.error-banner.svelte-1qo7cgm.svelte-1qo7cgm{background:#3a2222;color:#f88;padding:8px 24px;font-size:12px;border-bottom:1px solid #4a2222;flex-shrink:0;cursor:pointer;display:flex;justify-content:space-between;align-items:center}.dismiss-btn.svelte-1qo7cgm.svelte-1qo7cgm{background:none;border:none;color:#f66;cursor:pointer;padding:2px;display:flex;align-items:center;border-radius:2px}.dismiss-btn.svelte-1qo7cgm.svelte-1qo7cgm:hover{color:#f44}.tabs.svelte-1qo7cgm.svelte-1qo7cgm{display:flex;border-bottom:1px solid #2a2a3c;flex-shrink:0;padding:0 24px}.tab.svelte-1qo7cgm.svelte-1qo7cgm{padding:10px 16px;border:none;background:none;color:#888;font-size:13px;cursor:pointer;border-bottom:2px solid transparent;font-family:inherit}.tab.svelte-1qo7cgm.svelte-1qo7cgm:hover{color:#ccc}.tab.active.svelte-1qo7cgm.svelte-1qo7cgm{color:#e4e4ef;border-bottom-color:#6366f1}.tab-content.svelte-1qo7cgm.svelte-1qo7cgm{flex:1;overflow-y:auto}.note-editor.svelte-1qo7cgm.svelte-1qo7cgm{flex:1;display:flex;flex-direction:column;height:100%}.note-editor-header.svelte-1qo7cgm.svelte-1qo7cgm{padding:12px 24px;border-bottom:1px solid #2a2a3c;display:flex;align-items:center;gap:12px;flex-shrink:0}.note-title.svelte-1qo7cgm.svelte-1qo7cgm{font-size:16px;font-weight:500}.dirty-mark.svelte-1qo7cgm.svelte-1qo7cgm{color:#f59e0b;font-size:10px}.note-editor-actions.svelte-1qo7cgm.svelte-1qo7cgm{margin-left:auto;display:flex;gap:8px}.note-textarea.svelte-1qo7cgm.svelte-1qo7cgm{flex:1;width:100%;border:none;outline:none;background:#13131f;color:#e4e4ef;font-family:SF Mono,Fira Code,monospace;font-size:14px;line-height:1.6;padding:24px;resize:none}.overview.svelte-1qo7cgm.svelte-1qo7cgm{padding:24px}.overview.svelte-1qo7cgm h2.svelte-1qo7cgm{font-size:24px;margin-bottom:16px}.meta-grid.svelte-1qo7cgm.svelte-1qo7cgm{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px;margin-bottom:24px}.meta-item.svelte-1qo7cgm.svelte-1qo7cgm{background:#1a1a28;padding:12px 16px;border-radius:8px}.meta-label.svelte-1qo7cgm.svelte-1qo7cgm{display:block;font-size:11px;color:#666;margin-bottom:4px;text-transform:uppercase}.quick-actions.svelte-1qo7cgm.svelte-1qo7cgm{display:flex;gap:8px;margin-bottom:24px;flex-wrap:wrap}.qa-btn.svelte-1qo7cgm.svelte-1qo7cgm{padding:10px 16px;border:1px solid #2a2a3c;background:#1a1a28;color:#ccc;border-radius:8px;cursor:pointer;font-size:13px;font-family:inherit;display:inline-flex;align-items:center;gap:6px}.qa-btn.svelte-1qo7cgm.svelte-1qo7cgm:hover{background:#223}.qa-btn.svelte-1qo7cgm.svelte-1qo7cgm:disabled{opacity:.4;cursor:not-allowed}.recent-section.svelte-1qo7cgm.svelte-1qo7cgm{margin-bottom:24px}.recent-section.svelte-1qo7cgm h3.svelte-1qo7cgm{font-size:13px;color:#666;text-transform:uppercase;margin-bottom:8px}.recent-note.svelte-1qo7cgm.svelte-1qo7cgm{padding:8px 12px;border-radius:6px;cursor:pointer;display:flex;justify-content:space-between}.recent-note.svelte-1qo7cgm.svelte-1qo7cgm:hover{background:#1a1a28}.recent-date.svelte-1qo7cgm.svelte-1qo7cgm{font-size:11px;color:#555}.recent-entry.svelte-1qo7cgm.svelte-1qo7cgm{padding:6px 0;font-size:13px;color:#888;border-bottom:1px solid #1a1a28}.notes-tab.svelte-1qo7cgm.svelte-1qo7cgm{padding:24px}.tab-toolbar.svelte-1qo7cgm.svelte-1qo7cgm{margin-bottom:16px}.create-form.svelte-1qo7cgm.svelte-1qo7cgm{background:#1a1a28;padding:16px;border-radius:8px;margin-bottom:16px}.create-form.svelte-1qo7cgm input.svelte-1qo7cgm{width:100%;padding:8px 12px;border:1px solid #2a2a3c;background:#13131f;color:#e4e4ef;border-radius:4px;font-size:14px;font-family:inherit;margin-bottom:8px}.create-form.svelte-1qo7cgm input.svelte-1qo7cgm:focus{outline:none;border-color:#6366f1}.form-actions.svelte-1qo7cgm.svelte-1qo7cgm{display:flex;gap:8px}.notes-list.svelte-1qo7cgm.svelte-1qo7cgm{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px}.note-card.svelte-1qo7cgm.svelte-1qo7cgm{background:#1a1a28;border:1px solid #2a2a3c;border-radius:8px;padding:16px;cursor:pointer}.note-card.svelte-1qo7cgm.svelte-1qo7cgm:hover{border-color:#3a3a5c}.note-card-title.svelte-1qo7cgm.svelte-1qo7cgm{font-size:14px;font-weight:500;margin-bottom:4px}.note-card-date.svelte-1qo7cgm.svelte-1qo7cgm{font-size:11px;color:#555}.worklog-tab.svelte-1qo7cgm.svelte-1qo7cgm{padding:24px}.worklog-form.svelte-1qo7cgm.svelte-1qo7cgm{display:flex;gap:8px;margin-bottom:24px;align-items:center}.worklog-form.svelte-1qo7cgm input.svelte-1qo7cgm{padding:8px 12px;border:1px solid #2a2a3c;background:#13131f;color:#e4e4ef;border-radius:4px;font-size:14px;font-family:inherit}.worklog-form.svelte-1qo7cgm input.svelte-1qo7cgm:focus{outline:none;border-color:#6366f1}.worklog-form.svelte-1qo7cgm input[type=text].svelte-1qo7cgm{flex:1}.worklog-form.svelte-1qo7cgm input[type=number].svelte-1qo7cgm{width:70px}.worklog-entry.svelte-1qo7cgm.svelte-1qo7cgm{padding:12px 0;border-bottom:1px solid #1a1a28}.wl-meta.svelte-1qo7cgm.svelte-1qo7cgm{font-size:11px;color:#555;margin-top:2px}.actions-tab.svelte-1qo7cgm.svelte-1qo7cgm{padding:24px}.action-card.svelte-1qo7cgm.svelte-1qo7cgm{background:#1a1a28;padding:12px 16px;border-radius:8px;display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:8px}.action-info.svelte-1qo7cgm.svelte-1qo7cgm{display:flex;align-items:center;gap:8px;flex:1;min-width:0}.action-title.svelte-1qo7cgm.svelte-1qo7cgm{font-weight:500}.action-type.svelte-1qo7cgm.svelte-1qo7cgm{font-size:11px;color:#888;background:#223;padding:2px 8px;border-radius:10px;white-space:nowrap}.action-data.svelte-1qo7cgm.svelte-1qo7cgm{font-size:11px;color:#555;font-family:SF Mono,Fira Code,monospace;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:200px}.action-btns.svelte-1qo7cgm.svelte-1qo7cgm{display:flex;gap:4px;flex-shrink:0}.action-btns.svelte-1qo7cgm .btn-danger.svelte-1qo7cgm{color:#ff6b6b;border-color:#4a2222;padding:4px 8px}.action-btns.svelte-1qo7cgm .btn-danger.svelte-1qo7cgm:hover{background:#3a2222}.empty-state.svelte-1qo7cgm.svelte-1qo7cgm{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px 24px;text-align:center}.empty-state.svelte-1qo7cgm p.svelte-1qo7cgm{margin:0;font-size:14px;color:#666}.empty-state.svelte-1qo7cgm .empty-icon.svelte-1qo7cgm{margin-bottom:12px;color:#444}.empty-state.svelte-1qo7cgm .hint.svelte-1qo7cgm{font-size:12px;color:#555;margin-top:6px}.empty-state.svelte-1qo7cgm .empty-actions.svelte-1qo7cgm{display:flex;gap:8px;justify-content:center;margin-top:16px}.empty-note.svelte-1qo7cgm.svelte-1qo7cgm{font-size:12px;color:#444;margin-top:16px}.welcome.svelte-1qo7cgm.svelte-1qo7cgm{padding:48px 24px;text-align:center}.welcome.svelte-1qo7cgm h2.svelte-1qo7cgm{font-size:32px;font-weight:300;color:#8888a4;margin-bottom:16px}.welcome.svelte-1qo7cgm p.svelte-1qo7cgm{color:#666;font-size:14px}.error-text.svelte-1qo7cgm.svelte-1qo7cgm{color:#f88}.fab.svelte-1qo7cgm.svelte-1qo7cgm{position:fixed;bottom:24px;right:24px;width:56px;height:56px;border-radius:50%;background:#6366f1;color:#fff;font-size:28px;display:flex;align-items:center;justify-content:center;cursor:pointer;box-shadow:0 4px 12px #6366f166}.fab.svelte-1qo7cgm.svelte-1qo7cgm:hover{background:#4f46e5}.modal-overlay.svelte-1qo7cgm.svelte-1qo7cgm{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:100}.modal.svelte-1qo7cgm.svelte-1qo7cgm{background:#1a1a28;border:1px solid #2a2a3c;border-radius:12px;padding:24px;width:400px;max-width:90vw}.modal.svelte-1qo7cgm h3.svelte-1qo7cgm{font-size:18px;margin-bottom:16px}.form-group.svelte-1qo7cgm.svelte-1qo7cgm{margin-bottom:12px}.form-group.svelte-1qo7cgm label.svelte-1qo7cgm{display:block;font-size:12px;color:#666;margin-bottom:4px}.form-group.svelte-1qo7cgm input.svelte-1qo7cgm,.form-group.svelte-1qo7cgm select.svelte-1qo7cgm{width:100%;padding:8px 12px;border:1px solid #2a2a3c;background:#13131f;color:#e4e4ef;border-radius:4px;font-size:14px;font-family:inherit}.form-group.svelte-1qo7cgm select.svelte-1qo7cgm{-moz-appearance:none;appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23888' d='M2 4l4 4 4-4'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 10px center;padding-right:32px}.form-group.svelte-1qo7cgm input.svelte-1qo7cgm:focus,.form-group.svelte-1qo7cgm select.svelte-1qo7cgm:focus{outline:none;border-color:#6366f1}.modal-actions.svelte-1qo7cgm.svelte-1qo7cgm{display:flex;gap:8px;justify-content:flex-end;margin-top:16px}.btn.svelte-1qo7cgm.svelte-1qo7cgm{padding:8px 16px;border:1px solid #2a2a3c;background:#1a1a28;color:#ccc;border-radius:6px;cursor:pointer;font-size:13px;font-family:inherit}.btn.svelte-1qo7cgm.svelte-1qo7cgm:hover{background:#223}.btn-primary.svelte-1qo7cgm.svelte-1qo7cgm{background:#6366f1;border-color:#6366f1;color:#fff}.btn-primary.svelte-1qo7cgm.svelte-1qo7cgm:hover{background:#4f46e5}.btn.svelte-1qo7cgm.svelte-1qo7cgm:disabled{opacity:.4;cursor:not-allowed}.btn-sm.svelte-1qo7cgm.svelte-1qo7cgm{padding:4px 10px;font-size:12px}.btn-danger.svelte-1qo7cgm.svelte-1qo7cgm{color:#ff6b6b;border-color:#4a2222}.btn-danger.svelte-1qo7cgm.svelte-1qo7cgm:hover{background:#3a2222}.files-tab.svelte-1qo7cgm.svelte-1qo7cgm{padding:20px}.files-tab.svelte-1qo7cgm .tab-toolbar.svelte-1qo7cgm{display:flex;gap:8px;align-items:center;margin-bottom:16px}.file-list.svelte-1qo7cgm.svelte-1qo7cgm{display:flex;flex-direction:column}.back-btn.svelte-1qo7cgm.svelte-1qo7cgm{margin-bottom:4px;display:inline-flex;align-items:center;gap:4px}.import-summary.svelte-1qo7cgm.svelte-1qo7cgm{margin-bottom:16px}.summary-row.svelte-1qo7cgm.svelte-1qo7cgm{display:flex;justify-content:space-between;padding:6px 0;font-size:14px;border-bottom:1px solid #2a2a3c}.summary-warn.svelte-1qo7cgm.svelte-1qo7cgm{margin-top:8px;padding:8px 12px;background:#3a2a22;border-radius:6px;color:#fa6;font-size:13px}.rename-error.svelte-1qo7cgm.svelte-1qo7cgm{color:#ff6b6b;font-size:12px;margin-top:4px}.today-dashboard.svelte-1qo7cgm.svelte-1qo7cgm{padding:24px;overflow-y:auto;flex:1}.today-header.svelte-1qo7cgm.svelte-1qo7cgm{display:flex;align-items:baseline;gap:12px;margin-bottom:16px}.today-header.svelte-1qo7cgm h2.svelte-1qo7cgm{font-size:24px}.today-date.svelte-1qo7cgm.svelte-1qo7cgm{font-size:13px;color:#666}.today-summary.svelte-1qo7cgm.svelte-1qo7cgm{display:flex;gap:8px;margin-bottom:20px;flex-wrap:wrap}.summary-chip.svelte-1qo7cgm.svelte-1qo7cgm{font-size:12px;color:#b0b0c0;background:#1a1a28;border:1px solid #2a2a3c;padding:4px 12px;border-radius:16px}.today-case.svelte-1qo7cgm.svelte-1qo7cgm{background:#1a1a28;border:1px solid #2a2a3c;border-radius:8px;margin-bottom:12px;overflow:hidden}.today-case-header.svelte-1qo7cgm.svelte-1qo7cgm{padding:12px 16px;display:flex;align-items:center;gap:8px;border-bottom:1px solid #2a2a3c;cursor:pointer}.today-case-header.svelte-1qo7cgm.svelte-1qo7cgm:hover{background:#1e1e30}.today-case-title.svelte-1qo7cgm.svelte-1qo7cgm{font-weight:500}.today-case-type.svelte-1qo7cgm.svelte-1qo7cgm{font-size:11px;color:#888;background:#223;padding:2px 8px;border-radius:10px}.today-case-count.svelte-1qo7cgm.svelte-1qo7cgm{font-size:11px;color:#6366f1;margin-left:4px}.today-case-time.svelte-1qo7cgm.svelte-1qo7cgm{font-size:11px;color:#555;margin-left:auto}.today-events.svelte-1qo7cgm.svelte-1qo7cgm{padding:8px 16px}.today-event.svelte-1qo7cgm.svelte-1qo7cgm{display:flex;align-items:center;gap:8px;padding:4px 0;font-size:13px;color:#b0b0c0;cursor:pointer}.today-event.svelte-1qo7cgm.svelte-1qo7cgm:hover{color:#e4e4ef}.today-event-icon.svelte-1qo7cgm.svelte-1qo7cgm{width:18px;text-align:center;color:#6366f1;font-size:13px}.today-event-title.svelte-1qo7cgm.svelte-1qo7cgm{flex:1}.today-event-type.svelte-1qo7cgm.svelte-1qo7cgm{font-size:11px;color:#666}.today-event-time.svelte-1qo7cgm.svelte-1qo7cgm{font-size:11px;color:#555;margin-left:auto}.today-events-empty.svelte-1qo7cgm.svelte-1qo7cgm{padding:8px 16px;font-size:13px;color:#666;font-style:italic}.today-empty.svelte-1qo7cgm.svelte-1qo7cgm{padding:48px 24px;text-align:center}.today-empty.svelte-1qo7cgm p.svelte-1qo7cgm{color:#666;font-size:14px;margin:0}.today-empty.svelte-1qo7cgm .hint.svelte-1qo7cgm{font-size:12px;color:#555;margin-top:8px}.today-timeline.svelte-1qo7cgm.svelte-1qo7cgm{margin-top:24px}.today-timeline.svelte-1qo7cgm h3.svelte-1qo7cgm{font-size:13px;color:#666;text-transform:uppercase;margin-bottom:12px}.timeline-event.svelte-1qo7cgm.svelte-1qo7cgm{display:flex;align-items:center;gap:10px;font-size:13px;color:#b0b0c0;border-left:2px solid #2a2a3c;padding:6px 0 6px 16px;margin-left:4px;cursor:pointer}.timeline-event.svelte-1qo7cgm.svelte-1qo7cgm:hover{color:#e4e4ef}.timeline-dot.svelte-1qo7cgm.svelte-1qo7cgm{width:6px;height:6px;border-radius:50%;background:#6366f1;margin-left:-19px;flex-shrink:0}.timeline-title.svelte-1qo7cgm.svelte-1qo7cgm{flex:1}.timeline-type.svelte-1qo7cgm.svelte-1qo7cgm{font-size:11px;color:#666}.timeline-time.svelte-1qo7cgm.svelte-1qo7cgm{font-size:11px;color:#555}.activity-tab.svelte-1qo7cgm.svelte-1qo7cgm{padding:24px}.activity-events.svelte-1qo7cgm.svelte-1qo7cgm{display:flex;flex-direction:column;gap:2px}.activity-event.svelte-1qo7cgm.svelte-1qo7cgm{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:6px;font-size:13px;color:#b0b0c0;cursor:pointer}.activity-event.svelte-1qo7cgm.svelte-1qo7cgm:hover{background:#1a1a28;color:#e4e4ef}.activity-event-icon.svelte-1qo7cgm.svelte-1qo7cgm{width:18px;text-align:center;color:#6366f1;font-size:13px;flex-shrink:0}.activity-event-title.svelte-1qo7cgm.svelte-1qo7cgm{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.activity-event-type.svelte-1qo7cgm.svelte-1qo7cgm{font-size:11px;color:#666;flex-shrink:0}.activity-event-target.svelte-1qo7cgm.svelte-1qo7cgm{font-size:10px;color:#555;background:#1e1e2e;padding:1px 6px;border-radius:8px;flex-shrink:0}.activity-event-time.svelte-1qo7cgm.svelte-1qo7cgm{font-size:11px;color:#555;margin-left:8px;flex-shrink:0}.activity-feed.svelte-1qo7cgm.svelte-1qo7cgm{padding:24px;overflow-y:auto;flex:1}.activity-feed-header.svelte-1qo7cgm.svelte-1qo7cgm{margin-bottom:20px}.activity-feed-header.svelte-1qo7cgm h2.svelte-1qo7cgm{font-size:24px}.activity-feed-events.svelte-1qo7cgm.svelte-1qo7cgm{display:flex;flex-direction:column;gap:2px}.activity-feed-event.svelte-1qo7cgm.svelte-1qo7cgm{display:flex;align-items:flex-start;gap:10px;padding:8px 12px;border-radius:8px;cursor:pointer}.activity-feed-event.svelte-1qo7cgm.svelte-1qo7cgm:hover{background:#1a1a28;color:#e4e4ef}.activity-feed-icon.svelte-1qo7cgm.svelte-1qo7cgm{width:20px;text-align:center;color:#6366f1;font-size:14px;flex-shrink:0;margin-top:1px}.activity-feed-body.svelte-1qo7cgm.svelte-1qo7cgm{flex:1;min-width:0}.activity-feed-title.svelte-1qo7cgm.svelte-1qo7cgm{font-size:14px;color:#e4e4ef}.activity-feed-meta.svelte-1qo7cgm.svelte-1qo7cgm{display:flex;align-items:center;gap:8px;margin-top:2px}.activity-feed-type.svelte-1qo7cgm.svelte-1qo7cgm{font-size:11px;color:#666}.activity-feed-target.svelte-1qo7cgm.svelte-1qo7cgm{font-size:10px;color:#555;background:#1e1e2e;padding:1px 6px;border-radius:8px}.activity-feed-time.svelte-1qo7cgm.svelte-1qo7cgm{font-size:11px;color:#555}.sidebar-sync-btn.svelte-1qo7cgm.svelte-1qo7cgm{background:#1e1e38;border:1px solid #6366f1;border-radius:8px;padding:8px 12px;cursor:pointer;width:100%;display:flex;align-items:center;gap:8px;color:#c0c0f0;font-family:inherit;font-size:13px}.sidebar-sync-btn.svelte-1qo7cgm.svelte-1qo7cgm:hover{background:#2a2a50;color:#e4e4ef;border-color:#818cf8}.sidebar-sync-label.svelte-1qo7cgm.svelte-1qo7cgm{flex:1;text-align:left}.sync-dot.svelte-1qo7cgm.svelte-1qo7cgm{width:8px;height:8px;border-radius:50%;background:#4a4a4a;flex-shrink:0}.sync-dot.active.svelte-1qo7cgm.svelte-1qo7cgm{background:#4ade80;box-shadow:0 0 6px #4ade8080}.modal-sync.svelte-1qo7cgm.svelte-1qo7cgm{width:460px}.sync-status.svelte-1qo7cgm.svelte-1qo7cgm{background:#13131f;border-radius:8px;padding:12px;margin-bottom:16px}.sync-row.svelte-1qo7cgm.svelte-1qo7cgm{display:flex;justify-content:space-between;padding:4px 0;font-size:13px}.sync-label.svelte-1qo7cgm.svelte-1qo7cgm{color:#666}.sync-value.svelte-1qo7cgm.svelte-1qo7cgm{color:#e4e4ef}.sync-value.mono.svelte-1qo7cgm.svelte-1qo7cgm{font-family:SF Mono,Fira Code,monospace;font-size:12px}.sync-result.svelte-1qo7cgm.svelte-1qo7cgm{font-size:12px;color:#6366f1;padding:4px 0}.sync-connected-actions.svelte-1qo7cgm.svelte-1qo7cgm{display:flex;gap:8px;margin-bottom:16px} diff --git a/cmd/verstak-gui/frontend-dist/assets/main-CvznySlT.js b/cmd/verstak-gui/frontend-dist/assets/main-CvznySlT.js deleted file mode 100644 index d2d1bf0..0000000 --- a/cmd/verstak-gui/frontend-dist/assets/main-CvznySlT.js +++ /dev/null @@ -1,16 +0,0 @@ -var js=Object.defineProperty;var Bs=(l,e,t)=>e in l?js(l,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):l[e]=t;var Ft=(l,e,t)=>Bs(l,typeof e!="symbol"?e+"":e,t);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))n(i);new MutationObserver(i=>{for(const o of i)if(o.type==="childList")for(const s of o.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&n(s)}).observe(document,{childList:!0,subtree:!0});function t(i){const o={};return i.integrity&&(o.integrity=i.integrity),i.referrerPolicy&&(o.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?o.credentials="include":i.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function n(i){if(i.ep)return;i.ep=!0;const o=t(i);fetch(i.href,o)}})();function W(){}function zn(l){return l()}function fl(){return Object.create(null)}function oe(l){l.forEach(zn)}function Vn(l){return typeof l=="function"}function it(l,e){return l!=l?e==e:l!==e||l&&typeof l=="object"||typeof l=="function"}let _t;function gt(l,e){return l===e?!0:(_t||(_t=document.createElement("a")),_t.href=e,l===_t.href)}function Os(l){return Object.keys(l).length===0}function Ps(l){return l??""}function r(l,e){l.appendChild(e)}function b(l,e,t){l.insertBefore(e,t||null)}function h(l){l.parentNode&&l.parentNode.removeChild(l)}function Ce(l,e){for(let t=0;tl.removeEventListener(e,t,n)}function Ve(l){return function(e){return e.stopPropagation(),l.call(this,e)}}function Ye(l){return function(e){e.target===this&&l.call(this,e)}}function c(l,e,t){t==null?l.removeAttribute(e):l.getAttribute(e)!==t&&l.setAttribute(e,t)}function ht(l){return l===""?null:+l}function zs(l){return Array.from(l.childNodes)}function O(l,e){e=""+e,l.data!==e&&(l.data=e)}function se(l,e){l.value=e??""}function He(l,e,t,n){t==null?l.style.removeProperty(e):l.style.setProperty(e,t,"")}function tt(l,e,t){for(let n=0;n{const i=l.$$.callbacks[e];if(i){const o=Vs(e,t,{cancelable:n});return i.slice().forEach(s=>{s.call(l,o)}),!o.defaultPrevented}return!0}}function Rs(l,e){const t=l.$$.callbacks[e.type];t&&t.slice().forEach(n=>n.call(this,e))}const $e=[],ul=[];let et=[];const dl=[],Ks=Promise.resolve();let Bt=!1;function Us(){Bt||(Bt=!0,Ks.then(Un))}function lt(l){et.push(l)}const jt=new Set;let xe=0;function Un(){if(xe!==0)return;const l=dt;do{try{for(;xe<$e.length;){const e=$e[xe];xe++,ut(e),Ws(e.$$)}}catch(e){throw $e.length=0,xe=0,e}for(ut(null),$e.length=0,xe=0;ul.length;)ul.pop()();for(let e=0;el.indexOf(n)===-1?e.push(n):t.push(n)),t.forEach(n=>n()),et=e}const vt=new Set;let Ze;function Re(){Ze={r:0,c:[],p:Ze}}function Ke(){Ze.r||oe(Ze.c),Ze=Ze.p}function ae(l,e){l&&l.i&&(vt.delete(l),l.i(e))}function de(l,e,t,n){if(l&&l.o){if(vt.has(l))return;vt.add(l),Ze.c.push(()=>{vt.delete(l),n&&(t&&l.d(1),n())}),l.o(e)}else n&&n()}function Y(l){return(l==null?void 0:l.length)!==void 0?l:Array.from(l)}function Js(l,e){de(l,1,1,()=>{e.delete(l.key)})}function Xs(l,e,t,n,i,o,s,a,f,d,_,g){let p=l.length,v=o.length,w=p;const C={};for(;w--;)C[l[w].key]=w;const q=[],T=new Map,D=new Map,N=[];for(w=v;w--;){const S=g(i,o,w),L=t(S);let y=s.get(L);y?N.push(()=>y.p(S,e)):(y=d(L,S),y.c()),T.set(L,q[w]=y),L in C&&D.set(L,Math.abs(w-C[L]))}const I=new Set,A=new Set;function j(S){ae(S,1),S.m(a,_),s.set(S.key,S),_=S.first,v--}for(;p&&v;){const S=q[v-1],L=l[p-1],y=S.key,M=L.key;S===L?(_=S.first,p--,v--):T.has(M)?!s.has(y)||I.has(y)?j(S):A.has(M)?p--:D.get(y)>D.get(M)?(A.add(y),j(S)):(I.add(M),p--):(f(L,s),p--)}for(;p--;){const S=l[p];T.has(S.key)||f(S,s)}for(;v;)j(q[v-1]);return oe(N),q}function Qe(l){l&&l.c()}function Ge(l,e,t){const{fragment:n,after_update:i}=l.$$;n&&n.m(e,t),lt(()=>{const o=l.$$.on_mount.map(zn).filter(Vn);l.$$.on_destroy?l.$$.on_destroy.push(...o):oe(o),l.$$.on_mount=[]}),i.forEach(lt)}function Je(l,e){const t=l.$$;t.fragment!==null&&(Gs(t.after_update),oe(t.on_destroy),t.fragment&&t.fragment.d(e),t.on_destroy=t.fragment=null,t.ctx=[])}function Zs(l,e){l.$$.dirty[0]===-1&&($e.push(l),Us(),l.$$.dirty.fill(0)),l.$$.dirty[e/31|0]|=1<{const w=v.length?v[0]:p;return d.ctx&&i(d.ctx[g],d.ctx[g]=w)&&(!d.skip_bound&&d.bound[g]&&d.bound[g](w),_&&Zs(l,g)),p}):[],d.update(),_=!0,oe(d.before_update),d.fragment=n?n(d.ctx):!1,e.target){if(e.hydrate){const g=zs(e.target);d.fragment&&d.fragment.l(g),g.forEach(h)}else d.fragment&&d.fragment.c();e.intro&&ae(l.$$.fragment),Ge(l,e.target,e.anchor),Un()}ut(f)}class ot{constructor(){Ft(this,"$$");Ft(this,"$$set")}$destroy(){Je(this,1),this.$destroy=W}$on(e,t){if(!Vn(t))return W;const n=this.$$.callbacks[e]||(this.$$.callbacks[e]=[]);return n.push(t),()=>{const i=n.indexOf(t);i!==-1&&n.splice(i,1)}}$set(e){this.$$set&&!Os(e)&&(this.$$.skip_bound=!0,this.$$set(e),this.$$.skip_bound=!1)}}const Ys="4";typeof window<"u"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(Ys);function Qs(l){let e,t;return{c(){e=K("path"),t=K("polyline"),c(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),c(t,"points","14 2 14 8 20 8")},m(n,i){b(n,e,i),b(n,t,i)},d(n){n&&(h(e),h(t))}}}function xs(l){let e,t,n,i,o;return{c(){e=K("path"),t=K("polyline"),n=K("line"),i=K("line"),o=K("polyline"),c(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),c(t,"points","14 2 14 8 20 8"),c(n,"x1","16"),c(n,"y1","13"),c(n,"x2","8"),c(n,"y2","13"),c(i,"x1","16"),c(i,"y1","17"),c(i,"x2","8"),c(i,"y2","17"),c(o,"points","10 9 9 9 8 9")},m(s,a){b(s,e,a),b(s,t,a),b(s,n,a),b(s,i,a),b(s,o,a)},d(s){s&&(h(e),h(t),h(n),h(i),h(o))}}}function $s(l){let e,t;return{c(){e=K("polyline"),t=K("polyline"),c(e,"points","16 18 22 12 16 6"),c(t,"points","8 6 2 12 8 18")},m(n,i){b(n,e,i),b(n,t,i)},d(n){n&&(h(e),h(t))}}}function eo(l){let e,t,n,i;return{c(){e=K("path"),t=K("polyline"),n=K("line"),i=K("rect"),c(e,"d","M21 8v13a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8"),c(t,"points","7 3 12 8 17 3"),c(n,"x1","3"),c(n,"y1","8"),c(n,"x2","21"),c(n,"y2","8"),c(i,"x","10"),c(i,"y","12"),c(i,"width","4"),c(i,"height","4"),c(i,"rx","1")},m(o,s){b(o,e,s),b(o,t,s),b(o,n,s),b(o,i,s)},d(o){o&&(h(e),h(t),h(n),h(i))}}}function to(l){let e,t,n,i,o;return{c(){e=K("path"),t=K("polyline"),n=K("line"),i=K("line"),o=K("line"),c(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),c(t,"points","14 2 14 8 20 8"),c(n,"x1","9"),c(n,"y1","12"),c(n,"x2","15"),c(n,"y2","12"),c(i,"x1","9"),c(i,"y1","15"),c(i,"x2","13"),c(i,"y2","15"),c(o,"x1","12"),c(o,"y1","15"),c(o,"x2","12"),c(o,"y2","18")},m(s,a){b(s,e,a),b(s,t,a),b(s,n,a),b(s,i,a),b(s,o,a)},d(s){s&&(h(e),h(t),h(n),h(i),h(o))}}}function lo(l){let e,t,n,i,o,s;return{c(){e=K("path"),t=K("polyline"),n=K("line"),i=K("line"),o=K("line"),s=K("line"),c(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),c(t,"points","14 2 14 8 20 8"),c(n,"x1","8"),c(n,"y1","12"),c(n,"x2","16"),c(n,"y2","12"),c(i,"x1","8"),c(i,"y1","16"),c(i,"x2","16"),c(i,"y2","16"),c(o,"x1","8"),c(o,"y1","14"),c(o,"x2","12"),c(o,"y2","14"),c(s,"x1","12"),c(s,"y1","12"),c(s,"x2","12"),c(s,"y2","18")},m(a,f){b(a,e,f),b(a,t,f),b(a,n,f),b(a,i,f),b(a,o,f),b(a,s,f)},d(a){a&&(h(e),h(t),h(n),h(i),h(o),h(s))}}}function no(l){let e,t,n,i;return{c(){e=K("path"),t=K("polyline"),n=K("line"),i=K("line"),c(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),c(t,"points","14 2 14 8 20 8"),c(n,"x1","16"),c(n,"y1","13"),c(n,"x2","8"),c(n,"y2","13"),c(i,"x1","16"),c(i,"y1","17"),c(i,"x2","8"),c(i,"y2","17")},m(o,s){b(o,e,s),b(o,t,s),b(o,n,s),b(o,i,s)},d(o){o&&(h(e),h(t),h(n),h(i))}}}function io(l){let e,t,n,i,o;return{c(){e=K("path"),t=K("polyline"),n=K("line"),i=K("line"),o=K("line"),c(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),c(t,"points","14 2 14 8 20 8"),c(n,"x1","8"),c(n,"y1","12"),c(n,"x2","16"),c(n,"y2","12"),c(i,"x1","8"),c(i,"y1","16"),c(i,"x2","16"),c(i,"y2","16"),c(o,"x1","8"),c(o,"y1","14"),c(o,"x2","12"),c(o,"y2","14")},m(s,a){b(s,e,a),b(s,t,a),b(s,n,a),b(s,i,a),b(s,o,a)},d(s){s&&(h(e),h(t),h(n),h(i),h(o))}}}function so(l){let e,t,n;return{c(){e=K("path"),t=K("circle"),n=K("circle"),c(e,"d","M9 18V5l12-2v13"),c(t,"cx","6"),c(t,"cy","18"),c(t,"r","3"),c(n,"cx","18"),c(n,"cy","16"),c(n,"r","3")},m(i,o){b(i,e,o),b(i,t,o),b(i,n,o)},d(i){i&&(h(e),h(t),h(n))}}}function oo(l){let e,t;return{c(){e=K("rect"),t=K("polyline"),c(e,"x","2"),c(e,"y","4"),c(e,"width","20"),c(e,"height","16"),c(e,"rx","2"),c(t,"points","10 9 16 12 10 15 10 9")},m(n,i){b(n,e,i),b(n,t,i)},d(n){n&&(h(e),h(t))}}}function co(l){let e,t,n;return{c(){e=K("rect"),t=K("circle"),n=K("polyline"),c(e,"x","3"),c(e,"y","3"),c(e,"width","18"),c(e,"height","18"),c(e,"rx","2"),c(e,"ry","2"),c(t,"cx","8.5"),c(t,"cy","8.5"),c(t,"r","1.5"),c(n,"points","21 15 16 10 5 21")},m(i,o){b(i,e,o),b(i,t,o),b(i,n,o)},d(i){i&&(h(e),h(t),h(n))}}}function ro(l){let e;return{c(){e=K("path"),c(e,"d","M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z")},m(t,n){b(t,e,n)},d(t){t&&h(e)}}}function ao(l){let e;function t(o,s){return o[0]==="folder"?ro:o[0]==="image"?co:o[0]==="video"?oo:o[0]==="audio"?so:o[0]==="pdf"?io:o[0]==="document"?no:o[0]==="spreadsheet"?lo:o[0]==="presentation"?to:o[0]==="archive"?eo:o[0]==="code"?$s:o[0]==="text"?xs:Qs}let n=t(l),i=n(l);return{c(){e=K("svg"),i.c(),c(e,"width",l[1]),c(e,"height",l[1]),c(e,"viewBox","0 0 24 24"),c(e,"fill","none"),c(e,"stroke","currentColor"),c(e,"stroke-width","1.5"),c(e,"stroke-linecap","round"),c(e,"stroke-linejoin","round"),c(e,"xmlns","http://www.w3.org/2000/svg")},m(o,s){b(o,e,s),i.m(e,null)},p(o,[s]){n!==(n=t(o))&&(i.d(1),i=n(o),i&&(i.c(),i.m(e,null))),s&2&&c(e,"width",o[1]),s&2&&c(e,"height",o[1])},i:W,o:W,d(o){o&&h(e),i.d()}}}function fo(l,e,t){let{kind:n="generic"}=e,{size:i=20}=e;return l.$$set=o=>{"kind"in o&&t(0,n=o.kind),"size"in o&&t(1,i=o.size)},[n,i]}class Wn extends ot{constructor(e){super(),st(this,e,fo,ao,it,{kind:0,size:1})}}function kt(l){if(l==null||l<0)return"—";if(l===0)return"0 B";const e=["B","KB","MB","GB"],t=Math.min(Math.floor(Math.log(l)/Math.log(1024)),e.length-1),n=l/Math.pow(1024,t);return(t===0?n.toFixed(0):n.toFixed(1))+" "+e[t]}const Ot={"image/jpeg":"Изображение JPEG","image/png":"Изображение PNG","image/gif":"Изображение GIF","image/webp":"Изображение WebP","image/svg+xml":"Изображение SVG","image/bmp":"Изображение BMP","image/tiff":"Изображение TIFF","image/avif":"Изображение AVIF","application/pdf":"PDF документ","application/msword":"Документ Word","application/vnd.openxmlformats-officedocument.wordprocessingml.document":"Документ Word","application/vnd.ms-excel":"Таблица Excel","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":"Таблица Excel","application/vnd.ms-powerpoint":"Презентация PowerPoint","application/vnd.openxmlformats-officedocument.presentationml.presentation":"Презентация PowerPoint","application/zip":"ZIP архив","application/gzip":"GZIP архив","application/x-tar":"TAR архив","application/x-7z-compressed":"7z архив","application/x-rar-compressed":"RAR архив","text/plain":"Текстовый файл","text/html":"HTML файл","text/css":"CSS файл","text/javascript":"JavaScript файл","application/json":"JSON файл","application/xml":"XML файл","application/x-yaml":"YAML файл","application/octet-stream":"Бинарный файл","application/x-msdos-program":"Исполняемый файл","inode/directory":"Папка"};function ml(l){return l?Ot[l]||l:"Неизвестно"}function uo(l){if(l.type==="folder")return"Папка";const e=(l.mime||"").toLowerCase();if(Ot[e])return Ot[e];const n=(l.name||"").toLowerCase().split(".").pop();return n?n.toUpperCase():"Файл"}function Gn(l){if(l.type==="folder")return"folder";const e=(l.mime||"").toLowerCase();if(e.startsWith("image/"))return"image";if(e.startsWith("video/"))return"video";if(e.startsWith("audio/"))return"audio";if(e.startsWith("text/"))return"text";if(e.includes("pdf"))return"pdf";if(e.includes("word")||e.includes("document"))return"document";if(e.includes("spreadsheet")||e.includes("excel"))return"spreadsheet";if(e.includes("presentation")||e.includes("powerpoint"))return"presentation";if(e.includes("zip")||e.includes("tar")||e.includes("gzip")||e.includes("rar")||e.includes("7z")||e.includes("compress"))return"archive";if(e.includes("json")||e.includes("xml")||e.includes("yaml")||e.includes("javascript")||e.includes("css")||e.includes("html"))return"code";const n=(l.name||"").toLowerCase().split(".").pop();return["js","ts","jsx","tsx","vue","svelte","py","rs","go","c","cpp","h","hpp","java","kt","swift","rb","php","pl","sh","bash","zsh","fish","yml","yaml","json","xml","toml","ini","cfg","conf","md","markdown","css","scss","less","sass","sql","graphql","proto","gradle","cmake","makefile","dockerfile","env","gitignore"].includes(n)?"code":"generic"}const mo=["image/jpeg","image/png","image/gif","image/webp","image/bmp","image/tiff","image/avif","image/svg+xml"],po=["text/plain","text/html","text/css","text/javascript","application/json","application/xml","application/x-yaml","text/x-shellscript"],_o=["txt","log","conf","ini","yaml","yml","json","xml","csv","sh","py","js","ts","css","html","md","markdown","cfg"],vo=["jpg","jpeg","png","gif","webp","bmp","tiff","tif","avif","svg"];function Jn(l){const e=(l.mime||"").toLowerCase(),n=(l.name||"").toLowerCase().split(".").pop();return mo.includes(e)||vo.includes(n)}function Xn(l){const e=(l.mime||"").toLowerCase(),n=(l.name||"").toLowerCase().split(".").pop();return po.includes(e)||_o.includes(n)&&n!=="md"&&n!=="markdown"}function Zn(l){return(l.mime||"").toLowerCase().includes("pdf")}function Yn(l){const e=(l.name||"").toLowerCase();return e.endsWith(".md")||e.endsWith(".markdown")}function go(l){return Jn(l)||Zn(l)}function ho(l){return Xn(l)||Yn(l)}function bo(l){let e,t,n,i=kt(l[0].size)+"",o;return{c(){e=u("span"),e.textContent="·",t=k(),n=u("span"),o=E(i),c(e,"class","meta-sep svelte-1u905d2")},m(s,a){b(s,e,a),b(s,t,a),b(s,n,a),r(n,o)},p(s,a){a&1&&i!==(i=kt(s[0].size)+"")&&O(o,i)},d(s){s&&(h(e),h(t),h(n))}}}function ko(l){let e,t,n;return{c(){e=u("button"),e.innerHTML='',c(e,"class","action-btn svelte-1u905d2"),c(e,"title","Открыть папку"),c(e,"aria-label","Открыть папку")},m(i,o){b(i,e,o),t||(n=F(e,"click",Ve(l[27])),t=!0)},p:W,d(i){i&&h(e),t=!1,n()}}}function yo(l){let e,t,n,i,o;return{c(){e=u("button"),e.innerHTML='',t=k(),n=u("button"),n.innerHTML='',c(e,"class","action-btn svelte-1u905d2"),c(e,"title","Предпросмотр"),c(e,"aria-label","Предпросмотр"),c(n,"class","action-btn svelte-1u905d2"),c(n,"title","Открыть во внешней программе"),c(n,"aria-label","Открыть внешне")},m(s,a){b(s,e,a),b(s,t,a),b(s,n,a),i||(o=[F(e,"click",Ve(l[26])),F(n,"click",Ve(l[8]))],i=!0)},p:W,d(s){s&&(h(e),h(t),h(n)),i=!1,oe(o)}}}function pl(l){let e,t,n,i,o,s,a,f,d,_,g,p,v,w,C,q,T,D,N,I,A,j,S,L=l[5]&&wo(l);return{c(){e=u("div"),t=k(),n=u("div"),i=u("button"),i.innerHTML=` - Открыть`,o=k(),s=u("button"),s.innerHTML=` - Открыть во внешней программе`,a=k(),L&&L.c(),f=k(),d=u("div"),_=k(),g=u("button"),g.innerHTML=` - Переименовать`,p=k(),v=u("button"),v.innerHTML=` - Дублировать`,w=k(),C=u("button"),C.innerHTML=` - Вырезать`,q=k(),T=u("button"),T.innerHTML=` - Копировать`,D=k(),N=u("div"),I=k(),A=u("button"),A.innerHTML=` - Удалить`,c(e,"class","menu-backdrop svelte-1u905d2"),c(e,"role","presentation"),c(i,"class","menu-item svelte-1u905d2"),c(i,"role","menuitem"),c(s,"class","menu-item svelte-1u905d2"),c(s,"role","menuitem"),c(d,"class","menu-sep svelte-1u905d2"),c(g,"class","menu-item svelte-1u905d2"),c(g,"role","menuitem"),c(v,"class","menu-item svelte-1u905d2"),c(v,"role","menuitem"),c(C,"class","menu-item svelte-1u905d2"),c(C,"role","menuitem"),c(T,"class","menu-item svelte-1u905d2"),c(T,"role","menuitem"),c(N,"class","menu-sep svelte-1u905d2"),c(A,"class","menu-item menu-item-danger svelte-1u905d2"),c(A,"role","menuitem"),c(n,"class","menu svelte-1u905d2"),c(n,"role","menu")},m(y,M){b(y,e,M),b(y,t,M),b(y,n,M),r(n,i),r(n,o),r(n,s),r(n,a),L&&L.m(n,null),r(n,f),r(n,d),r(n,_),r(n,g),r(n,p),r(n,v),r(n,w),r(n,C),r(n,q),r(n,T),r(n,D),r(n,N),r(n,I),r(n,A),j||(S=[F(e,"click",Ve(l[17])),F(i,"click",l[15]),F(s,"click",l[8]),F(g,"click",l[11]),F(v,"click",l[12]),F(C,"click",l[13]),F(T,"click",l[14]),F(A,"click",l[10]),F(n,"click",Ve(l[25]))],j=!0)},p(y,M){y[5]&&L.p(y,M)},d(y){y&&(h(e),h(t),h(n)),L&&L.d(),j=!1,oe(S)}}}function wo(l){let e,t,n;return{c(){e=u("button"),e.innerHTML=` - Показать в проводнике`,c(e,"class","menu-item svelte-1u905d2"),c(e,"role","menuitem")},m(i,o){b(i,e,o),t||(n=F(e,"click",l[9]),t=!0)},p:W,d(i){i&&h(e),t=!1,n()}}}function qo(l){let e,t,n,i,o,s,a=l[0].name+"",f,d,_,g,p,v,w,C,q,T,D,N,I,A,j,S,L,y,M,z,J,Z;n=new Wn({props:{kind:l[4],size:22}});let V=!l[5]&&bo(l);function R(X,ne){return X[5]?ko:yo}let U=R(l)(l),le=l[2]&&pl(l);return{c(){e=u("div"),t=u("div"),Qe(n.$$.fragment),i=k(),o=u("div"),s=u("div"),f=E(a),_=k(),g=u("div"),p=u("span"),p.textContent=`${l[6]}`,v=k(),V&&V.c(),w=k(),C=u("div"),U.c(),q=k(),T=u("button"),D=K("svg"),N=K("circle"),I=K("circle"),A=K("circle"),j=k(),S=u("button"),S.innerHTML='',y=k(),le&&le.c(),M=ze(),c(t,"class","file-row-icon svelte-1u905d2"),c(s,"class","file-row-name svelte-1u905d2"),c(s,"title",d=l[0].name),c(g,"class","file-row-meta svelte-1u905d2"),c(o,"class","file-row-body svelte-1u905d2"),c(N,"cx","12"),c(N,"cy","5"),c(N,"r","2"),c(I,"cx","12"),c(I,"cy","12"),c(I,"r","2"),c(A,"cx","12"),c(A,"cy","19"),c(A,"r","2"),c(D,"width","16"),c(D,"height","16"),c(D,"viewBox","0 0 24 24"),c(D,"fill","currentColor"),c(T,"class","action-btn svelte-1u905d2"),c(T,"title","Ещё"),c(T,"aria-label","Ещё"),c(T,"aria-expanded",l[2]),c(S,"class","action-btn action-btn-danger svelte-1u905d2"),c(S,"title","Удалить"),c(S,"aria-label","Удалить"),c(C,"class","file-row-actions svelte-1u905d2"),c(e,"class","file-row svelte-1u905d2"),c(e,"role","button"),c(e,"tabindex","0"),c(e,"draggable","true"),c(e,"aria-label",L=l[5]?`Папка ${l[0].name}`:`Файл ${l[0].name}`),bt(e,"file-row--selected",l[1])},m(X,ne){b(X,e,ne),r(e,t),Ge(n,t,null),r(e,i),r(e,o),r(o,s),r(s,f),r(o,_),r(o,g),r(g,p),r(g,v),V&&V.m(g,null),r(e,w),r(e,C),U.m(C,null),r(C,q),r(C,T),r(T,D),r(D,N),r(D,I),r(D,A),r(C,j),r(C,S),b(X,y,ne),le&&le.m(X,ne),b(X,M,ne),z=!0,J||(Z=[F(window,"click",l[17]),F(T,"click",Ve(l[16])),F(S,"click",Ve(l[10])),F(e,"click",l[7]),F(e,"contextmenu",l[21]),F(e,"dragstart",l[18]),F(e,"dragover",l[19]),F(e,"drop",l[20])],J=!0)},p(X,[ne]){(!z||ne&1)&&a!==(a=X[0].name+"")&&O(f,a),(!z||ne&1&&d!==(d=X[0].name))&&c(s,"title",d),X[5]||V.p(X,ne),U.p(X,ne),(!z||ne&4)&&c(T,"aria-expanded",X[2]),(!z||ne&1&&L!==(L=X[5]?`Папка ${X[0].name}`:`Файл ${X[0].name}`))&&c(e,"aria-label",L),(!z||ne&2)&&bt(e,"file-row--selected",X[1]),X[2]?le?le.p(X,ne):(le=pl(X),le.c(),le.m(M.parentNode,M)):le&&(le.d(1),le=null)},i(X){z||(ae(n.$$.fragment,X),z=!0)},o(X){de(n.$$.fragment,X),z=!1},d(X){X&&(h(e),h(y),h(M)),Je(n),V&&V.d(),U.d(),le&&le.d(X),J=!1,oe(Z)}}}function Co(l,e,t){let{item:n}=e,{selected:i=!1}=e,{onDragStart:o}=e,{onDragOver:s}=e,{onDrop:a}=e;const f=yt(),d=Gn(n),_=n.type==="folder",g=uo(n);let p=!1,v=null;function w(B){B.ctrlKey||B.metaKey?f("toggleSelect",n.id):B.shiftKey?f("rangeSelect",n.id):v?(clearTimeout(v),v=null,_?f("navigate",n.id):f("preview",n)):v=setTimeout(()=>{v=null,f("selectOne",n.id)},250)}function C(){f("openExternal",n.fileId)}function q(){f("showInFolder",n.id)}function T(){t(2,p=!1),f("delete",{id:n.id,type:n.type})}function D(){t(2,p=!1),f("rename",{id:n.id,name:n.name})}function N(){t(2,p=!1),f("duplicate",n.id)}function I(){t(2,p=!1),f("cut",n.id)}function A(){t(2,p=!1),f("copy",n.id)}function j(){t(2,p=!1),_?f("navigate",n.id):f("preview",n)}function S(){t(2,p=!p)}function L(){t(2,p=!1)}function y(B){o&&o(B,n.id)}function M(B){s&&_&&s(B,n.id)}function z(B){a&&_&&a(B,n.id)}function J(B){B.preventDefault(),t(2,p=!0)}function Z(B){Rs.call(this,l,B)}const V=()=>f("preview",n),R=()=>f("navigate",n.id);return l.$$set=B=>{"item"in B&&t(0,n=B.item),"selected"in B&&t(1,i=B.selected),"onDragStart"in B&&t(22,o=B.onDragStart),"onDragOver"in B&&t(23,s=B.onDragOver),"onDrop"in B&&t(24,a=B.onDrop)},[n,i,p,f,d,_,g,w,C,q,T,D,N,I,A,j,S,L,y,M,z,J,o,s,a,Z,V,R]}class To extends ot{constructor(e){super(),st(this,e,Co,qo,it,{item:0,selected:1,onDragStart:22,onDragOver:23,onDrop:24})}}function _l(l,e,t){const n=l.slice();return n[4]=e[t],n[6]=t,n}function So(l){let e;return{c(){e=u("span"),e.textContent="/",c(e,"class","sep svelte-csi2lb")},m(t,n){b(t,e,n)},d(t){t&&h(e)}}}function Mo(l){let e,t=l[4].name+"",n,i,o;function s(){return l[2](l[6])}return{c(){e=u("button"),n=E(t),c(e,"class","crumb crumb--link svelte-csi2lb")},m(a,f){b(a,e,f),r(e,n),i||(o=F(e,"click",s),i=!0)},p(a,f){l=a,f&1&&t!==(t=l[4].name+"")&&O(n,t)},d(a){a&&h(e),i=!1,o()}}}function Lo(l){let e,t=l[4].name+"",n;return{c(){e=u("span"),n=E(t),c(e,"class","crumb crumb--current svelte-csi2lb")},m(i,o){b(i,e,o),r(e,n)},p(i,o){o&1&&t!==(t=i[4].name+"")&&O(n,t)},d(i){i&&h(e)}}}function vl(l){let e,t,n=l[6]>0&&So();function i(a,f){return a[6]===a[0].length-1?Lo:Mo}let o=i(l),s=o(l);return{c(){n&&n.c(),e=k(),s.c(),t=ze()},m(a,f){n&&n.m(a,f),b(a,e,f),s.m(a,f),b(a,t,f)},p(a,f){o===(o=i(a))&&s?s.p(a,f):(s.d(1),s=o(a),s&&(s.c(),s.m(t.parentNode,t)))},d(a){a&&(h(e),h(t)),n&&n.d(a),s.d(a)}}}function Io(l){let e,t=Y(l[0]),n=[];for(let i=0;io(a);return l.$$set=a=>{"crumbs"in a&&t(0,n=a.crumbs)},[n,o,s]}class Qn extends ot{constructor(e){super(),st(this,e,Do,Io,it,{crumbs:0})}}function No(l){let e,t,n,i,o,s;return{c(){e=u("div"),t=u("p"),t.textContent="Предпросмотр недоступен для этого типа файлов.",n=k(),i=u("button"),i.textContent="Открыть во внешней программе",c(i,"class","btn btn-sm svelte-1cw3u0m"),c(e,"class","preview-status svelte-1cw3u0m")},m(a,f){b(a,e,f),r(e,t),r(e,n),r(e,i),o||(s=F(i,"click",l[9]),o=!0)},p:W,d(a){a&&h(e),o=!1,s()}}}function Ao(l){let e,t;function n(s,a){return a&2&&(e=null),e==null&&(e=!!(s[1]&&s[1].startsWith("data:"))),e?Oo:Bo}let i=n(l,-1),o=i(l);return{c(){o.c(),t=ze()},m(s,a){o.m(s,a),b(s,t,a)},p(s,a){i===(i=n(s,a))&&o?o.p(s,a):(o.d(1),o=i(s),o&&(o.c(),o.m(t.parentNode,t)))},d(s){s&&h(t),o.d(s)}}}function Eo(l){let e,t,n;return{c(){e=u("pre"),t=u("code"),n=E(l[1]),c(e,"class","preview-text svelte-1cw3u0m")},m(i,o){b(i,e,o),r(e,t),r(t,n)},p(i,o){o&2&&O(n,i[1])},d(i){i&&h(e)}}}function Fo(l){let e,t,n,i;return{c(){e=u("div"),t=u("img"),gt(t.src,n=l[1])||c(t,"src",n),c(t,"alt",i=l[0].name),c(t,"class","preview-image svelte-1cw3u0m"),c(e,"class","preview-image-container svelte-1cw3u0m")},m(o,s){b(o,e,s),r(e,t)},p(o,s){s&2&&!gt(t.src,n=o[1])&&c(t,"src",n),s&1&&i!==(i=o[0].name)&&c(t,"alt",i)},d(o){o&&h(e)}}}function Ho(l){let e,t,n,i,o,s,a;return{c(){e=u("div"),t=u("p"),n=E(l[3]),i=k(),o=u("button"),o.textContent="Открыть во внешней программе",c(o,"class","btn btn-sm svelte-1cw3u0m"),c(e,"class","preview-status svelte-1cw3u0m")},m(f,d){b(f,e,d),r(e,t),r(t,n),r(e,i),r(e,o),s||(a=F(o,"click",l[9]),s=!0)},p(f,d){d&8&&O(n,f[3])},d(f){f&&h(e),s=!1,a()}}}function jo(l){let e;return{c(){e=u("div"),e.innerHTML="

Загрузка...

",c(e,"class","preview-status svelte-1cw3u0m")},m(t,n){b(t,e,n)},p:W,d(t){t&&h(e)}}}function Bo(l){let e,t,n,i,o,s;return{c(){e=u("div"),t=u("p"),t.textContent="Предпросмотр PDF недоступен.",n=k(),i=u("button"),i.textContent="Открыть во внешней программе",c(i,"class","btn btn-sm svelte-1cw3u0m"),c(e,"class","preview-status svelte-1cw3u0m")},m(a,f){b(a,e,f),r(e,t),r(e,n),r(e,i),o||(s=F(i,"click",l[9]),o=!0)},p:W,d(a){a&&h(e),o=!1,s()}}}function Oo(l){let e,t,n;return{c(){e=u("div"),t=u("embed"),gt(t.src,n=l[1])||c(t,"src",n),c(t,"type","application/pdf"),c(t,"class","preview-pdf svelte-1cw3u0m"),c(e,"class","preview-pdf-container svelte-1cw3u0m")},m(i,o){b(i,e,o),r(e,t)},p(i,o){o&2&&!gt(t.src,n=i[1])&&c(t,"src",n)},d(i){i&&h(e)}}}function Po(l){let e,t,n,i,o,s,a,f=l[0].name+"",d,_,g,p,v=kt(l[0].size)+"",w,C,q=ml(l[0].mime)+"",T,D,N,I,A,j,S,L,y,M,z,J;o=new Wn({props:{kind:l[8],size:18}});function Z(B,U){return B[2]?jo:B[3]?Ho:B[6]&&B[1]?Fo:B[5]&&B[1]?Eo:B[4]?Ao:No}let V=Z(l),R=V(l);return{c(){e=u("div"),t=u("div"),n=u("header"),i=u("div"),Qe(o.$$.fragment),s=k(),a=u("span"),d=E(f),g=k(),p=u("div"),w=E(v),C=E(" · "),T=E(q),D=k(),N=u("div"),I=u("button"),I.innerHTML='',A=k(),j=u("button"),j.innerHTML='',S=k(),L=u("div"),R.c(),c(a,"class","preview-name svelte-1cw3u0m"),c(a,"title",_=l[0].name),c(i,"class","preview-title svelte-1cw3u0m"),c(p,"class","preview-meta svelte-1cw3u0m"),c(I,"class","action-btn svelte-1cw3u0m"),c(I,"title","Открыть во внешней программе"),c(I,"aria-label","Открыть внешне"),c(j,"class","action-btn action-btn-close svelte-1cw3u0m"),c(j,"title","Close"),c(j,"aria-label","Close preview"),c(N,"class","preview-actions svelte-1cw3u0m"),c(n,"class","preview-header svelte-1cw3u0m"),c(L,"class","preview-body svelte-1cw3u0m"),c(t,"class","modal svelte-1cw3u0m"),c(e,"class","overlay svelte-1cw3u0m"),c(e,"role","dialog"),c(e,"aria-modal","true"),c(e,"aria-label",y=`Preview: ${l[0].name}`)},m(B,U){b(B,e,U),r(e,t),r(t,n),r(n,i),Ge(o,i,null),r(i,s),r(i,a),r(a,d),r(n,g),r(n,p),r(p,w),r(p,C),r(p,T),r(n,D),r(n,N),r(N,I),r(N,A),r(N,j),r(t,S),r(t,L),R.m(L,null),M=!0,z||(J=[F(I,"click",l[9]),F(j,"click",l[10]),F(e,"click",Ye(l[11]))],z=!0)},p(B,[U]){(!M||U&1)&&f!==(f=B[0].name+"")&&O(d,f),(!M||U&1&&_!==(_=B[0].name))&&c(a,"title",_),(!M||U&1)&&v!==(v=kt(B[0].size)+"")&&O(w,v),(!M||U&1)&&q!==(q=ml(B[0].mime)+"")&&O(T,q),V===(V=Z(B))&&R?R.p(B,U):(R.d(1),R=V(B),R&&(R.c(),R.m(L,null))),(!M||U&1&&y!==(y=`Preview: ${B[0].name}`))&&c(e,"aria-label",y)},i(B){M||(ae(o.$$.fragment,B),M=!0)},o(B){de(o.$$.fragment,B),M=!1},d(B){B&&h(e),Je(o),R.d(),z=!1,oe(J)}}}function zo(l,e,t){let n,i,o,{item:s}=e,{content:a=""}=e,{loading:f=!1}=e,{error:d=""}=e;const _=yt(),g=Gn(s);function p(q){q.key==="Escape"&&_("close")}function v(){_("openExternal",s.fileId)}Rn(()=>{window.addEventListener("keydown",p)}),Kn(()=>{window.removeEventListener("keydown",p)});const w=()=>_("close"),C=()=>_("close");return l.$$set=q=>{"item"in q&&t(0,s=q.item),"content"in q&&t(1,a=q.content),"loading"in q&&t(2,f=q.loading),"error"in q&&t(3,d=q.error)},l.$$.update=()=>{l.$$.dirty&3&&t(6,n=Jn(s)&&a&&a.startsWith("data:")),l.$$.dirty&1&&t(5,i=Xn(s)||Yn(s)),l.$$.dirty&1&&t(4,o=Zn(s))},[s,a,f,d,o,i,n,_,g,v,w,C]}class Vo extends ot{constructor(e){super(),st(this,e,zo,Po,it,{item:0,content:1,loading:2,error:3})}}function Ro(l){let e,t,n,i,o,s,a,f,d,_,g,p,v,w,C,q,T;return{c(){e=u("div"),t=u("div"),n=u("h3"),i=E(l[0]),o=k(),s=u("p"),a=E(l[1]),f=k(),d=u("div"),_=u("button"),g=E(l[2]),v=k(),w=u("button"),C=E(l[3]),c(n,"class","svelte-1fv6yyk"),c(s,"class","message svelte-1fv6yyk"),c(_,"class",p="btn "+(l[4]?"btn-danger":"btn-primary")+" svelte-1fv6yyk"),c(w,"class","btn svelte-1fv6yyk"),c(d,"class","actions svelte-1fv6yyk"),c(t,"class","modal svelte-1fv6yyk"),c(e,"class","overlay svelte-1fv6yyk"),c(e,"role","dialog"),c(e,"aria-modal","true"),c(e,"aria-label",l[0])},m(D,N){b(D,e,N),r(e,t),r(t,n),r(n,i),r(t,o),r(t,s),r(s,a),r(t,f),r(t,d),r(d,_),r(_,g),r(d,v),r(d,w),r(w,C),q||(T=[F(_,"click",l[6]),F(w,"click",l[7]),F(e,"click",Ye(l[8]))],q=!0)},p(D,[N]){N&1&&O(i,D[0]),N&2&&O(a,D[1]),N&4&&O(g,D[2]),N&16&&p!==(p="btn "+(D[4]?"btn-danger":"btn-primary")+" svelte-1fv6yyk")&&c(_,"class",p),N&8&&O(C,D[3]),N&1&&c(e,"aria-label",D[0])},i:W,o:W,d(D){D&&h(e),q=!1,oe(T)}}}function Ko(l,e,t){let{title:n="Подтверждение"}=e,{message:i=""}=e,{confirmText:o="Удалить"}=e,{cancelText:s="Отмена"}=e,{danger:a=!1}=e;const f=yt(),d=()=>f("confirm"),_=()=>f("cancel"),g=()=>f("cancel");return l.$$set=p=>{"title"in p&&t(0,n=p.title),"message"in p&&t(1,i=p.message),"confirmText"in p&&t(2,o=p.confirmText),"cancelText"in p&&t(3,s=p.cancelText),"danger"in p&&t(4,a=p.danger)},[n,i,o,s,a,f,d,_,g]}class Uo extends ot{constructor(e){super(),st(this,e,Ko,Ro,it,{title:0,message:1,confirmText:2,cancelText:3,danger:4})}}function gl(l,e,t){const n=l.slice();return n[201]=e[t],n}function hl(l,e,t){const n=l.slice();return n[204]=e[t],n}function bl(l,e,t){const n=l.slice();return n[207]=e[t],n}function kl(l,e,t){const n=l.slice();return n[226]=e[t],n}function yl(l,e,t){const n=l.slice();return n[226]=e[t],n}function wl(l,e,t){const n=l.slice();return n[234]=e[t],n}function ql(l,e,t){const n=l.slice();return n[226]=e[t],n}function Cl(l,e,t){const n=l.slice();return n[226]=e[t],n}function Tl(l,e,t){const n=l.slice();return n[210]=e[t],n}function Sl(l,e,t){const n=l.slice();return n[221]=e[t],n}function Ml(l,e,t){const n=l.slice();return n[218]=e[t],n}function Ll(l,e,t){const n=l.slice();return n[213]=e[t],n}function Il(l,e,t){const n=l.slice();return n[210]=e[t],n}function Dl(l,e,t){const n=l.slice();return n[213]=e[t],n}function Nl(l,e,t){const n=l.slice();return n[229]=e[t],n}function Al(l,e,t){const n=l.slice();return n[207]=e[t],n}function El(l,e,t){const n=l.slice();return n[243]=e[t],n}function Fl(l,e,t){const n=l.slice();return n[246]=e[t],n}function Hl(l){let e,t=l[246].label+"",n,i,o,s,a;function f(){return l[114](l[246])}return{c(){e=u("button"),n=E(t),i=k(),c(e,"class",o="nav-item "+(l[7]===l[246].id?"selected":"")+" svelte-1qo7cgm")},m(d,_){b(d,e,_),r(e,n),r(e,i),s||(a=F(e,"click",f),s=!0)},p(d,_){l=d,_[0]&1&&t!==(t=l[246].label+"")&&O(n,t),_[0]&129&&o!==(o="nav-item "+(l[7]===l[246].id?"selected":"")+" svelte-1qo7cgm")&&c(e,"class",o)},d(d){d&&h(e),s=!1,a()}}}function jl(l){let e,t,n,i,o,s=l[1].length>0&&Bl(l),a=Y(l[1]),f=[];for(let _=0;_0?s?s.p(_,g):(s=Bl(_),s.c(),s.m(t,null)):s&&(s.d(1),s=null),g[0]&258|g[1]&536870912){a=Y(_[1]);let p;for(p=0;p0&&Rl(l);return{c(){e=u("button"),t=K("svg"),n=K("polyline"),i=K("polyline"),o=K("path"),s=k(),d&&d.c(),c(n,"points","23 4 23 10 17 10"),c(n,"class","svelte-1qo7cgm"),c(i,"points","1 20 1 14 7 14"),c(i,"class","svelte-1qo7cgm"),c(o,"d","M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15"),c(o,"class","svelte-1qo7cgm"),c(t,"width","16"),c(t,"height","16"),c(t,"viewBox","0 0 24 24"),c(t,"fill","none"),c(t,"stroke","currentColor"),c(t,"stroke-width","2"),c(t,"stroke-linecap","round"),c(t,"stroke-linejoin","round"),c(t,"class","svelte-1qo7cgm"),c(e,"class","header-sync-btn svelte-1qo7cgm"),e.disabled=l[51],c(e,"title","Синхронизировать")},m(_,g){b(_,e,g),r(e,t),r(t,n),r(t,i),r(t,o),r(e,s),d&&d.m(e,null),a||(f=F(e,"click",l[113]),a=!0)},p(_,g){_[50].unpushedOps>0?d?d.p(_,g):(d=Rl(_),d.c(),d.m(e,null)):d&&(d.d(1),d=null),g[1]&1048576&&(e.disabled=_[51])},d(_){_&&h(e),d&&d.d(),a=!1,f()}}}function Rl(l){let e,t=l[50].unpushedOps+"",n;return{c(){e=u("span"),n=E(t),c(e,"class","sync-badge svelte-1qo7cgm")},m(i,o){b(i,e,o),r(e,n)},p(i,o){o[1]&524288&&t!==(t=i[50].unpushedOps+"")&&O(n,t)},d(i){i&&h(e)}}}function Kl(l){let e,t,n,i,o,s;return{c(){e=u("div"),t=E(l[6]),n=k(),i=u("button"),i.innerHTML='',c(i,"class","dismiss-btn svelte-1qo7cgm"),c(i,"aria-label","Dismiss"),c(e,"class","error-banner svelte-1qo7cgm")},m(a,f){b(a,e,f),r(e,t),r(e,n),r(e,i),o||(s=[F(i,"click",Ve(l[116])),F(e,"click",l[117])],o=!0)},p(a,f){f[0]&64&&O(t,a[6])},d(a){a&&h(e),o=!1,oe(s)}}}function Xo(l){let e,t,n;function i(a,f){if(a[27])return tc;if(a[0].length>0)return ec;if(a[6])return $o}let o=i(l),s=o&&o(l);return{c(){e=u("div"),t=u("h2"),t.textContent="Верстак",n=k(),s&&s.c(),c(t,"class","svelte-1qo7cgm"),c(e,"class","welcome svelte-1qo7cgm")},m(a,f){b(a,e,f),r(e,t),r(e,n),s&&s.m(e,null)},p(a,f){o===(o=i(a))&&s?s.p(a,f):(s&&s.d(1),s=o&&o(a),s&&(s.c(),s.m(e,null)))},i:W,o:W,d(a){a&&h(e),s&&s.d()}}}function Zo(l){let e,t,n;function i(a,f){return a[3].length===0?nc:lc}let o=i(l),s=o(l);return{c(){e=u("div"),t=u("div"),t.innerHTML='

Активность

',n=k(),s.c(),c(t,"class","activity-feed-header svelte-1qo7cgm"),c(e,"class","activity-feed svelte-1qo7cgm")},m(a,f){b(a,e,f),r(e,t),r(e,n),s.m(e,null)},p(a,f){o===(o=i(a))&&s?s.p(a,f):(s.d(1),s=o(a),s&&(s.c(),s.m(e,null)))},i:W,o:W,d(a){a&&h(e),s.d()}}}function Yo(l){let e,t,n,i,o,s=l[2].date+"",a,f,d,_=l[2].summary&&Gl(l);function g(w,C){return w[2].groups&&w[2].groups.length>0?sc:ic}let p=g(l),v=p(l);return{c(){e=u("div"),t=u("div"),n=u("h2"),n.textContent="Сегодня",i=k(),o=u("span"),a=E(s),f=k(),_&&_.c(),d=k(),v.c(),c(n,"class","svelte-1qo7cgm"),c(o,"class","today-date svelte-1qo7cgm"),c(t,"class","today-header svelte-1qo7cgm"),c(e,"class","today-dashboard svelte-1qo7cgm")},m(w,C){b(w,e,C),r(e,t),r(t,n),r(t,i),r(t,o),r(o,a),r(e,f),_&&_.m(e,null),r(e,d),v.m(e,null)},p(w,C){C[0]&4&&s!==(s=w[2].date+"")&&O(a,s),w[2].summary?_?_.p(w,C):(_=Gl(w),_.c(),_.m(e,d)):_&&(_.d(1),_=null),p===(p=g(w))&&v?v.p(w,C):(v.d(1),v=p(w),v&&(v.c(),v.m(e,null)))},i:W,o:W,d(w){w&&h(e),_&&_.d(),v.d()}}}function Qo(l){let e,t,n,i,o,s,a=Y(l[58]),f=[];for(let p=0;p{_[w]=null}),Ke()),~i?(o=_[i],o?o.p(p,v):(o=_[i]=d[i](p),o.c()),ae(o,1),o.m(n,null)):o=null)},i(p){s||(ae(o),s=!0)},o(p){de(o),s=!1},d(p){p&&(h(e),h(t),h(n)),Ce(f,p),~i&&_[i].d()}}}function xo(l){let e,t,n,i=l[11].title+"",o,s,a,f,d,_,g,p,v,w,C,q=l[11].dirty&&hn();return{c(){e=u("div"),t=u("div"),n=u("span"),o=E(i),s=k(),q&&q.c(),a=k(),f=u("div"),d=u("button"),d.textContent="Сохранить",_=k(),g=u("button"),g.textContent="Закрыть",p=k(),v=u("textarea"),c(n,"class","note-title svelte-1qo7cgm"),c(d,"class","btn btn-primary svelte-1qo7cgm"),c(g,"class","btn svelte-1qo7cgm"),c(f,"class","note-editor-actions svelte-1qo7cgm"),c(t,"class","note-editor-header svelte-1qo7cgm"),c(v,"class","note-textarea svelte-1qo7cgm"),c(v,"placeholder","Начните писать..."),c(e,"class","note-editor svelte-1qo7cgm")},m(T,D){b(T,e,D),r(e,t),r(t,n),r(n,o),r(t,s),q&&q.m(t,null),r(t,a),r(t,f),r(f,d),r(f,_),r(f,g),r(e,p),r(e,v),se(v,l[11].content),w||(C=[F(d,"click",l[93]),F(g,"click",l[91]),F(v,"input",l[118]),F(v,"input",l[92])],w=!0)},p(T,D){D[0]&2048&&i!==(i=T[11].title+"")&&O(o,i),T[11].dirty?q||(q=hn(),q.c(),q.m(t,a)):q&&(q.d(1),q=null),D[0]&2048&&se(v,T[11].content)},i:W,o:W,d(T){T&&h(e),q&&q.d(),w=!1,oe(C)}}}function $o(l){let e,t,n;return{c(){e=u("p"),t=E("Ошибка: "),n=E(l[6]),c(e,"class","error-text svelte-1qo7cgm")},m(i,o){b(i,e,o),r(e,t),r(e,n)},p(i,o){o[0]&64&&O(n,i[6])},d(i){i&&h(e)}}}function ec(l){let e,t,n;return{c(){e=u("p"),e.textContent="Выберите раздел в боковой панели.",t=k(),n=u("p"),n.textContent="Или создайте новое дело кнопкой «+».",c(e,"class","svelte-1qo7cgm"),c(n,"class","hint svelte-1qo7cgm")},m(i,o){b(i,e,o),b(i,t,o),b(i,n,o)},p:W,d(i){i&&(h(e),h(t),h(n))}}}function tc(l){let e;return{c(){e=u("p"),e.textContent="Загрузка...",c(e,"class","svelte-1qo7cgm")},m(t,n){b(t,e,n)},p:W,d(t){t&&h(e)}}}function lc(l){let e,t=Y(l[3]),n=[];for(let i=0;iАктивность пока не зафиксирована

',c(e,"class","empty-state svelte-1qo7cgm")},m(t,n){b(t,e,n)},p:W,d(t){t&&h(e)}}}function Ul(l){let e,t=l[226].targetType+"",n;return{c(){e=u("span"),n=E(t),c(e,"class","activity-feed-target svelte-1qo7cgm")},m(i,o){b(i,e,o),r(e,n)},p(i,o){o[0]&8&&t!==(t=i[226].targetType+"")&&O(n,t)},d(i){i&&h(e)}}}function Wl(l){let e,t,n=nt(l[226].eventType)+"",i,o,s,a,f=l[226].title+"",d,_,g,p,v=Ue(l[226].eventType)+"",w,C,q,T,D=Be(l[226].createdAt)+"",N,I,A=je(l[226].createdAt)+"",j,S,L,y,M=l[226].targetType&&Ul(l);function z(){return l[151](l[226])}function J(...Z){return l[152](l[226],...Z)}return{c(){e=u("div"),t=u("span"),i=E(n),o=k(),s=u("div"),a=u("span"),d=E(f),_=k(),g=u("div"),p=u("span"),w=E(v),C=k(),M&&M.c(),q=k(),T=u("span"),N=E(D),I=k(),j=E(A),S=k(),c(t,"class","activity-feed-icon svelte-1qo7cgm"),c(a,"class","activity-feed-title svelte-1qo7cgm"),c(p,"class","activity-feed-type svelte-1qo7cgm"),c(T,"class","activity-feed-time svelte-1qo7cgm"),c(g,"class","activity-feed-meta svelte-1qo7cgm"),c(s,"class","activity-feed-body svelte-1qo7cgm"),c(e,"class","activity-feed-event svelte-1qo7cgm"),c(e,"role","button"),c(e,"tabindex","0")},m(Z,V){b(Z,e,V),r(e,t),r(t,i),r(e,o),r(e,s),r(s,a),r(a,d),r(s,_),r(s,g),r(g,p),r(p,w),r(g,C),M&&M.m(g,null),r(g,q),r(g,T),r(T,N),r(T,I),r(T,j),r(e,S),L||(y=[F(e,"click",z),F(e,"keydown",J)],L=!0)},p(Z,V){l=Z,V[0]&8&&n!==(n=nt(l[226].eventType)+"")&&O(i,n),V[0]&8&&f!==(f=l[226].title+"")&&O(d,f),V[0]&8&&v!==(v=Ue(l[226].eventType)+"")&&O(w,v),l[226].targetType?M?M.p(l,V):(M=Ul(l),M.c(),M.m(g,q)):M&&(M.d(1),M=null),V[0]&8&&D!==(D=Be(l[226].createdAt)+"")&&O(N,D),V[0]&8&&A!==(A=je(l[226].createdAt)+"")&&O(j,A)},d(Z){Z&&h(e),M&&M.d(),L=!1,oe(y)}}}function Gl(l){let e,t,n,i=l[2].summary.changedCases>0&&Jl(l),o=l[2].summary.notes>0&&Xl(l),s=l[2].summary.files>0&&Zl(l);return{c(){e=u("div"),i&&i.c(),t=k(),o&&o.c(),n=k(),s&&s.c(),c(e,"class","today-summary svelte-1qo7cgm")},m(a,f){b(a,e,f),i&&i.m(e,null),r(e,t),o&&o.m(e,null),r(e,n),s&&s.m(e,null)},p(a,f){a[2].summary.changedCases>0?i?i.p(a,f):(i=Jl(a),i.c(),i.m(e,t)):i&&(i.d(1),i=null),a[2].summary.notes>0?o?o.p(a,f):(o=Xl(a),o.c(),o.m(e,n)):o&&(o.d(1),o=null),a[2].summary.files>0?s?s.p(a,f):(s=Zl(a),s.c(),s.m(e,null)):s&&(s.d(1),s=null)},d(a){a&&h(e),i&&i.d(),o&&o.d(),s&&s.d()}}}function Jl(l){let e,t=l[2].summary.changedCases+"",n,i,o=We(l[2].summary.changedCases,"дело","дела","дел")+"",s;return{c(){e=u("span"),n=E(t),i=k(),s=E(o),c(e,"class","summary-chip svelte-1qo7cgm")},m(a,f){b(a,e,f),r(e,n),r(e,i),r(e,s)},p(a,f){f[0]&4&&t!==(t=a[2].summary.changedCases+"")&&O(n,t),f[0]&4&&o!==(o=We(a[2].summary.changedCases,"дело","дела","дел")+"")&&O(s,o)},d(a){a&&h(e)}}}function Xl(l){let e,t=l[2].summary.notes+"",n,i,o=We(l[2].summary.notes,"заметка","заметки","заметок")+"",s;return{c(){e=u("span"),n=E(t),i=k(),s=E(o),c(e,"class","summary-chip svelte-1qo7cgm")},m(a,f){b(a,e,f),r(e,n),r(e,i),r(e,s)},p(a,f){f[0]&4&&t!==(t=a[2].summary.notes+"")&&O(n,t),f[0]&4&&o!==(o=We(a[2].summary.notes,"заметка","заметки","заметок")+"")&&O(s,o)},d(a){a&&h(e)}}}function Zl(l){let e,t=l[2].summary.files+"",n,i,o=We(l[2].summary.files,"файл","файла","файлов")+"",s;return{c(){e=u("span"),n=E(t),i=k(),s=E(o),c(e,"class","summary-chip svelte-1qo7cgm")},m(a,f){b(a,e,f),r(e,n),r(e,i),r(e,s)},p(a,f){f[0]&4&&t!==(t=a[2].summary.files+"")&&O(n,t),f[0]&4&&o!==(o=We(a[2].summary.files,"файл","файла","файлов")+"")&&O(s,o)},d(a){a&&h(e)}}}function ic(l){let e;return{c(){e=u("div"),e.innerHTML='

Сегодня пока тихо

Здесь появятся дела, заметки, файлы и действия, с которыми вы работали сегодня.

',c(e,"class","today-empty svelte-1qo7cgm")},m(t,n){b(t,e,n)},p:W,d(t){t&&h(e)}}}function sc(l){let e,t,n=Y(l[2].groups),i=[];for(let s=0;s0&&en(l);return{c(){for(let s=0;s0?o?o.p(s,a):(o=en(s),o.c(),o.m(t.parentNode,t)):o&&(o.d(1),o=null)},d(s){s&&(h(e),h(t)),Ce(i,s),o&&o.d(s)}}}function Yl(l){let e,t=l[234].events.length+"",n,i,o=We(l[234].events.length,"событие","события","событий")+"",s;return{c(){e=u("span"),n=E(t),i=k(),s=E(o),c(e,"class","today-case-count svelte-1qo7cgm")},m(a,f){b(a,e,f),r(e,n),r(e,i),r(e,s)},p(a,f){f[0]&4&&t!==(t=a[234].events.length+"")&&O(n,t),f[0]&4&&o!==(o=We(a[234].events.length,"событие","события","событий")+"")&&O(s,o)},d(a){a&&h(e)}}}function oc(l){let e;return{c(){e=u("div"),e.textContent="Изменён сегодня",c(e,"class","today-events-empty svelte-1qo7cgm")},m(t,n){b(t,e,n)},p:W,d(t){t&&h(e)}}}function cc(l){let e,t=Y(l[234].events),n=[];for(let i=0;i0?cc:oc}let j=A(l),S=j(l);return{c(){e=u("div"),t=u("div"),n=u("span"),o=E(i),s=k(),a=u("span"),d=E(f),_=k(),D&&D.c(),g=k(),p=u("span"),w=E(v),C=k(),S.c(),c(n,"class","today-case-title svelte-1qo7cgm"),c(a,"class","today-case-type svelte-1qo7cgm"),c(p,"class","today-case-time svelte-1qo7cgm"),c(t,"class","today-case-header svelte-1qo7cgm"),c(t,"role","button"),c(t,"tabindex","0"),c(e,"class","today-case svelte-1qo7cgm")},m(L,y){b(L,e,y),r(e,t),r(t,n),r(n,o),r(t,s),r(t,a),r(a,d),r(t,_),D&&D.m(t,null),r(t,g),r(t,p),r(p,w),r(e,C),S.m(e,null),q||(T=[F(t,"click",N),F(t,"keydown",I)],q=!0)},p(L,y){l=L,y[0]&4&&i!==(i=l[234].nodeTitle+"")&&O(o,i),y[0]&4&&f!==(f=On(l[234].nodeKind)+"")&&O(d,f),l[234].events?D?D.p(l,y):(D=Yl(l),D.c(),D.m(t,g)):D&&(D.d(1),D=null),y[0]&4&&v!==(v=je(l[234].lastActivityAt)+"")&&O(w,v),j===(j=A(l))&&S?S.p(l,y):(S.d(1),S=j(l),S&&(S.c(),S.m(e,null)))},d(L){L&&h(e),D&&D.d(),S.d(),q=!1,oe(T)}}}function en(l){let e,t,n,i=Y(l[2].events),o=[];for(let s=0;s0&&rn(l);const A=[yc,kc],j=[];function S(M,z){return M[31]?0:1}p=S(l),v=j[p]=A[p](l);let L=l[28]&&!l[30]&&fn(),y=l[35]&&un(l);return{c(){e=u("div"),t=u("div"),n=u("button"),i=E("+ Добавить файл"),o=k(),s=u("button"),a=E("+ Добавить папку"),f=k(),d=u("button"),d.textContent="+ Новый файл",_=k(),I&&I.c(),g=k(),v.c(),w=k(),L&&L.c(),C=k(),y&&y.c(),q=ze(),c(n,"class","btn btn-primary svelte-1qo7cgm"),n.disabled=l[28],c(s,"class","btn svelte-1qo7cgm"),s.disabled=l[28],c(d,"class","btn svelte-1qo7cgm"),c(t,"class","tab-toolbar svelte-1qo7cgm"),c(e,"class","files-tab svelte-1qo7cgm")},m(M,z){b(M,e,z),r(e,t),r(t,n),r(n,i),r(t,o),r(t,s),r(s,a),r(t,f),r(t,d),r(t,_),I&&I.m(t,null),r(e,g),j[p].m(e,null),r(e,w),L&&L.m(e,null),b(M,C,z),y&&y.m(M,z),b(M,q,z),T=!0,D||(N=[F(n,"click",l[95]),F(s,"click",l[96]),F(d,"click",l[67])],D=!0)},p(M,z){(!T||z[0]&268435456)&&(n.disabled=M[28]),(!T||z[0]&268435456)&&(s.disabled=M[28]),M[39].items.length>0?I?I.p(M,z):(I=rn(M),I.c(),I.m(t,null)):I&&(I.d(1),I=null);let J=p;p=S(M),p===J?j[p].p(M,z):(Re(),de(j[J],1,1,()=>{j[J]=null}),Ke(),v=j[p],v?v.p(M,z):(v=j[p]=A[p](M),v.c()),ae(v,1),v.m(e,w)),M[28]&&!M[30]?L||(L=fn(),L.c(),L.m(e,null)):L&&(L.d(1),L=null),M[35]?y?(y.p(M,z),z[1]&16&&ae(y,1)):(y=un(M),y.c(),ae(y,1),y.m(q.parentNode,q)):y&&(Re(),de(y,1,1,()=>{y=null}),Ke())},i(M){T||(ae(v),ae(y),T=!0)},o(M){de(v),de(y),T=!1},d(M){M&&(h(e),h(C),h(q)),I&&I.d(),j[p].d(),L&&L.d(),y&&y.d(M),D=!1,oe(N)}}}function dc(l){let e,t,n,i,o,s,a,f=l[21]&&dn(l);function d(p,v){return p[10].length===0&&!p[21]?Mc:Sc}let _=d(l),g=_(l);return{c(){e=u("div"),t=u("div"),n=u("button"),n.textContent="+ Добавить заметку",i=k(),f&&f.c(),o=k(),g.c(),c(n,"class","btn btn-primary svelte-1qo7cgm"),c(t,"class","tab-toolbar svelte-1qo7cgm"),c(e,"class","notes-tab svelte-1qo7cgm")},m(p,v){b(p,e,v),r(e,t),r(t,n),r(e,i),f&&f.m(e,null),r(e,o),g.m(e,null),s||(a=F(n,"click",l[87]),s=!0)},p(p,v){p[21]?f?f.p(p,v):(f=dn(p),f.c(),f.m(e,o)):f&&(f.d(1),f=null),_===(_=d(p))&&g?g.p(p,v):(g.d(1),g=_(p),g&&(g.c(),g.m(e,null)))},i:W,o:W,d(p){p&&h(e),f&&f.d(),g.d(),s=!1,a()}}}function mc(l){let e,t,n=l[8].title+"",i,o,s,a,f,d,_=l[8].type+"",g,p,v,w,C,q=(l[8].section||"—")+"",T,D,N,I,A,j=Be(l[8].createdAt)+"",S,L,y,M,z,J,Z,V,R,B,U,le,X,ne,re=l[10].length>0&&pn(l),Q=l[13].length>0&&vn(l);return{c(){e=u("div"),t=u("h2"),i=E(n),o=k(),s=u("div"),a=u("div"),f=u("span"),f.textContent="Тип",d=u("span"),g=E(_),p=k(),v=u("div"),w=u("span"),w.textContent="Раздел",C=u("span"),T=E(q),D=k(),N=u("div"),I=u("span"),I.textContent="Создано",A=u("span"),S=E(j),L=k(),y=u("div"),M=u("button"),M.innerHTML=` - Новая заметка`,z=k(),J=u("button"),J.innerHTML=` - Добавить файл`,Z=k(),V=u("button"),V.innerHTML=` - Добавить действие`,R=k(),B=u("button"),B.innerHTML=` - Записать время`,U=k(),re&&re.c(),le=k(),Q&&Q.c(),c(t,"class","svelte-1qo7cgm"),c(f,"class","meta-label svelte-1qo7cgm"),c(d,"class","svelte-1qo7cgm"),c(a,"class","meta-item svelte-1qo7cgm"),c(w,"class","meta-label svelte-1qo7cgm"),c(C,"class","svelte-1qo7cgm"),c(v,"class","meta-item svelte-1qo7cgm"),c(I,"class","meta-label svelte-1qo7cgm"),c(A,"class","svelte-1qo7cgm"),c(N,"class","meta-item svelte-1qo7cgm"),c(s,"class","meta-grid svelte-1qo7cgm"),c(M,"class","qa-btn svelte-1qo7cgm"),c(J,"class","qa-btn svelte-1qo7cgm"),c(V,"class","qa-btn svelte-1qo7cgm"),c(B,"class","qa-btn svelte-1qo7cgm"),c(y,"class","quick-actions svelte-1qo7cgm"),c(e,"class","overview svelte-1qo7cgm")},m(ee,x){b(ee,e,x),r(e,t),r(t,i),r(e,o),r(e,s),r(s,a),r(a,f),r(a,d),r(d,g),r(s,p),r(s,v),r(v,w),r(v,C),r(C,T),r(s,D),r(s,N),r(N,I),r(N,A),r(A,S),r(e,L),r(e,y),r(y,M),r(y,z),r(y,J),r(y,Z),r(y,V),r(y,R),r(y,B),r(e,U),re&&re.m(e,null),r(e,le),Q&&Q.m(e,null),X||(ne=[F(M,"click",l[120]),F(J,"click",l[121]),F(V,"click",l[101]),F(B,"click",l[122])],X=!0)},p(ee,x){x[0]&256&&n!==(n=ee[8].title+"")&&O(i,n),x[0]&256&&_!==(_=ee[8].type+"")&&O(g,_),x[0]&256&&q!==(q=(ee[8].section||"—")+"")&&O(T,q),x[0]&256&&j!==(j=Be(ee[8].createdAt)+"")&&O(S,j),ee[10].length>0?re?re.p(ee,x):(re=pn(ee),re.c(),re.m(e,le)):re&&(re.d(1),re=null),ee[13].length>0?Q?Q.p(ee,x):(Q=vn(ee),Q.c(),Q.m(e,null)):Q&&(Q.d(1),Q=null)},i:W,o:W,d(ee){ee&&h(e),re&&re.d(),Q&&Q.d(),X=!1,oe(ne)}}}function pc(l){let e,t=Y(l[4]),n=[];for(let i=0;iАктивность пока не зафиксирована

',c(e,"class","empty-state svelte-1qo7cgm")},m(t,n){b(t,e,n)},p:W,d(t){t&&h(e)}}}function nn(l){let e,t=l[226].targetType+"",n;return{c(){e=u("span"),n=E(t),c(e,"class","activity-event-target svelte-1qo7cgm")},m(i,o){b(i,e,o),r(e,n)},p(i,o){o[0]&16&&t!==(t=i[226].targetType+"")&&O(n,t)},d(i){i&&h(e)}}}function sn(l){let e,t,n=nt(l[226].eventType)+"",i,o,s,a=l[226].title+"",f,d,_,g=Ue(l[226].eventType)+"",p,v,w,C,q=je(l[226].createdAt)+"",T,D,N=l[226].targetType&&nn(l);return{c(){e=u("div"),t=u("span"),i=E(n),o=k(),s=u("span"),f=E(a),d=k(),_=u("span"),p=E(g),v=k(),N&&N.c(),w=k(),C=u("span"),T=E(q),D=k(),c(t,"class","activity-event-icon svelte-1qo7cgm"),c(s,"class","activity-event-title svelte-1qo7cgm"),c(_,"class","activity-event-type svelte-1qo7cgm"),c(C,"class","activity-event-time svelte-1qo7cgm"),c(e,"class","activity-event svelte-1qo7cgm")},m(I,A){b(I,e,A),r(e,t),r(t,i),r(e,o),r(e,s),r(s,f),r(e,d),r(e,_),r(_,p),r(e,v),N&&N.m(e,null),r(e,w),r(e,C),r(C,T),r(e,D)},p(I,A){A[0]&16&&n!==(n=nt(I[226].eventType)+"")&&O(i,n),A[0]&16&&a!==(a=I[226].title+"")&&O(f,a),A[0]&16&&g!==(g=Ue(I[226].eventType)+"")&&O(p,g),I[226].targetType?N?N.p(I,A):(N=nn(I),N.c(),N.m(e,w)):N&&(N.d(1),N=null),A[0]&16&&q!==(q=je(I[226].createdAt)+"")&&O(T,q)},d(I){I&&h(e),N&&N.d()}}}function vc(l){let e,t=Y(l[13]),n=[];for(let i=0;iЗаписей работы пока нет

',c(e,"class","empty-state svelte-1qo7cgm")},m(t,n){b(t,e,n)},p:W,d(t){t&&h(e)}}}function on(l){let e,t,n=l[210].summary+"",i,o,s,a=l[210].minutes+"",f,d,_=Be(l[210].createdAt)+"",g,p;return{c(){e=u("div"),t=u("div"),i=E(n),o=k(),s=u("div"),f=E(a),d=E(" мин · "),g=E(_),p=k(),c(t,"class","svelte-1qo7cgm"),c(s,"class","wl-meta svelte-1qo7cgm"),c(e,"class","worklog-entry svelte-1qo7cgm")},m(v,w){b(v,e,w),r(e,t),r(t,i),r(e,o),r(e,s),r(s,f),r(s,d),r(s,g),r(e,p)},p(v,w){w[0]&8192&&n!==(n=v[210].summary+"")&&O(i,n),w[0]&8192&&a!==(a=v[210].minutes+"")&&O(f,a),w[0]&8192&&_!==(_=Be(v[210].createdAt)+"")&&O(g,_)},d(v){v&&h(e)}}}function hc(l){let e,t=Y(l[12]),n=[];for(let i=0;iДействий пока нет

',c(e,"class","empty-state svelte-1qo7cgm")},m(t,n){b(t,e,n)},p:W,d(t){t&&h(e)}}}function cn(l){let e,t,n,i=l[221].title+"",o,s,a,f=l[105](l[221].type)+"",d,_,g,p=l[221].data+"",v,w,C,q,T,D,N,I,A;function j(){return l[141](l[221])}function S(){return l[142](l[221])}return{c(){e=u("div"),t=u("div"),n=u("span"),o=E(i),s=k(),a=u("span"),d=E(f),_=k(),g=u("span"),v=E(p),w=k(),C=u("div"),q=u("button"),q.textContent="Запустить",T=k(),D=u("button"),D.innerHTML='',N=k(),c(n,"class","action-title svelte-1qo7cgm"),c(a,"class","action-type svelte-1qo7cgm"),c(g,"class","action-data svelte-1qo7cgm"),c(t,"class","action-info svelte-1qo7cgm"),c(q,"class","btn btn-sm svelte-1qo7cgm"),c(D,"class","btn btn-sm btn-danger svelte-1qo7cgm"),c(C,"class","action-btns svelte-1qo7cgm"),c(e,"class","action-card svelte-1qo7cgm")},m(L,y){b(L,e,y),r(e,t),r(t,n),r(n,o),r(t,s),r(t,a),r(a,d),r(t,_),r(t,g),r(g,v),r(e,w),r(e,C),r(C,q),r(C,T),r(C,D),r(e,N),I||(A=[F(q,"click",j),F(D,"click",S)],I=!0)},p(L,y){l=L,y[0]&4096&&i!==(i=l[221].title+"")&&O(o,i),y[0]&4096&&f!==(f=l[105](l[221].type)+"")&&O(d,f),y[0]&4096&&p!==(p=l[221].data+"")&&O(v,p)},d(L){L&&h(e),I=!1,oe(A)}}}function rn(l){let e,t,n=l[39].items.length+"",i,o,s;return{c(){e=u("button"),t=E("Вставить "),i=E(n),c(e,"class","btn svelte-1qo7cgm")},m(a,f){b(a,e,f),r(e,t),r(e,i),o||(s=F(e,"click",l[72]),o=!0)},p(a,f){f[1]&256&&n!==(n=a[39].items.length+"")&&O(i,n)},d(a){a&&h(e),o=!1,s()}}}function kc(l){let e,t,n,i,o,s,a;const f=[qc,wc],d=[];function _(w,C){return w[33].length>0?0:1}e=_(l),t=d[e]=f[e](l);const g=[Tc,Cc],p=[];function v(w,C){return w[34].length===0?0:1}return i=v(l),o=p[i]=g[i](l),{c(){t.c(),n=k(),o.c(),s=ze()},m(w,C){d[e].m(w,C),b(w,n,C),p[i].m(w,C),b(w,s,C),a=!0},p(w,C){let q=e;e=_(w),e===q?d[e].p(w,C):(Re(),de(d[q],1,1,()=>{d[q]=null}),Ke(),t=d[e],t?t.p(w,C):(t=d[e]=f[e](w),t.c()),ae(t,1),t.m(n.parentNode,n));let T=i;i=v(w),i===T?p[i].p(w,C):(Re(),de(p[T],1,1,()=>{p[T]=null}),Ke(),o=p[i],o?o.p(w,C):(o=p[i]=g[i](w),o.c()),ae(o,1),o.m(s.parentNode,s))},i(w){a||(ae(t),ae(o),a=!0)},o(w){de(t),de(o),a=!1},d(w){w&&(h(n),h(s)),d[e].d(w),p[i].d(w)}}}function yc(l){let e;return{c(){e=u("div"),e.innerHTML='

Загрузка...

',c(e,"class","empty-state svelte-1qo7cgm")},m(t,n){b(t,e,n)},p:W,i:W,o:W,d(t){t&&h(e)}}}function wc(l){let e,t;return e=new Qn({props:{crumbs:[{name:"Файлы"}]}}),{c(){Qe(e.$$.fragment)},m(n,i){Ge(e,n,i),t=!0},p:W,i(n){t||(ae(e.$$.fragment,n),t=!0)},o(n){de(e.$$.fragment,n),t=!1},d(n){Je(e,n)}}}function qc(l){let e,t,n,i,o,s;return e=new Qn({props:{crumbs:[{name:"Файлы"},...l[33]]}}),e.$on("navigate",l[127]),{c(){Qe(e.$$.fragment),t=k(),n=u("button"),n.innerHTML=` - Back`,c(n,"class","btn btn-sm back-btn svelte-1qo7cgm")},m(a,f){Ge(e,a,f),b(a,t,f),b(a,n,f),i=!0,o||(s=F(n,"click",l[63]),o=!0)},p(a,f){const d={};f[1]&4&&(d.crumbs=[{name:"Файлы"},...a[33]]),e.$set(d)},i(a){i||(ae(e.$$.fragment,a),i=!0)},o(a){de(e.$$.fragment,a),i=!1},d(a){a&&(h(t),h(n)),Je(e,a),o=!1,s()}}}function Cc(l){let e,t=[],n=new Map,i,o=Y(l[34]);const s=a=>a[218].id;for(let a=0;a0?"В этой папке пока нет файлов":"В этом проекте пока нет файлов",s,a,f,d,_,g,p,v,w,C;return{c(){e=u("div"),t=u("div"),t.innerHTML='',n=k(),i=u("p"),s=E(o),a=k(),f=u("p"),f.textContent="Добавьте файл или папку, чтобы сохранить материалы проекта.",d=k(),_=u("div"),g=u("button"),g.textContent="Добавить файл",p=k(),v=u("button"),v.textContent="Добавить папку",c(t,"class","empty-icon svelte-1qo7cgm"),c(i,"class","svelte-1qo7cgm"),c(f,"class","hint svelte-1qo7cgm"),c(g,"class","btn btn-primary svelte-1qo7cgm"),c(v,"class","btn svelte-1qo7cgm"),c(_,"class","empty-actions svelte-1qo7cgm"),c(e,"class","empty-state svelte-1qo7cgm")},m(q,T){b(q,e,T),r(e,t),r(e,n),r(e,i),r(i,s),r(e,a),r(e,f),r(e,d),r(e,_),r(_,g),r(_,p),r(_,v),w||(C=[F(g,"click",l[95]),F(v,"click",l[96])],w=!0)},p(q,T){T[1]&4&&o!==(o=q[33].length>0?"В этой папке пока нет файлов":"В этом проекте пока нет файлов")&&O(s,o)},i:W,o:W,d(q){q&&h(e),w=!1,oe(C)}}}function an(l,e){let t,n,i;return n=new To({props:{item:e[218],selected:e[40].includes(e[218].id),onDragStart:e[76],onDragOver:e[77],onDrop:e[78]}}),n.$on("navigate",e[128]),n.$on("preview",e[129]),n.$on("openExternal",e[130]),n.$on("showInFolder",e[131]),n.$on("delete",e[132]),n.$on("rename",e[133]),n.$on("duplicate",e[134]),n.$on("cut",e[135]),n.$on("copy",e[136]),n.$on("selectOne",e[137]),n.$on("toggleSelect",e[138]),n.$on("rangeSelect",e[139]),{key:l,first:null,c(){t=ze(),Qe(n.$$.fragment),this.first=t},m(o,s){b(o,t,s),Ge(n,o,s),i=!0},p(o,s){e=o;const a={};s[1]&8&&(a.item=e[218]),s[1]&520&&(a.selected=e[40].includes(e[218].id)),n.$set(a)},i(o){i||(ae(n.$$.fragment,o),i=!0)},o(o){de(n.$$.fragment,o),i=!1},d(o){o&&h(t),Je(n,o)}}}function fn(l){let e;return{c(){e=u("div"),e.innerHTML='

Сканирование...

',c(e,"class","empty-state svelte-1qo7cgm")},m(t,n){b(t,e,n)},d(t){t&&h(e)}}}function un(l){let e,t;return e=new Vo({props:{item:l[35],content:l[36],loading:l[37],error:l[38]}}),e.$on("close",l[66]),e.$on("openExternal",l[140]),{c(){Qe(e.$$.fragment)},m(n,i){Ge(e,n,i),t=!0},p(n,i){const o={};i[1]&16&&(o.item=n[35]),i[1]&32&&(o.content=n[36]),i[1]&64&&(o.loading=n[37]),i[1]&128&&(o.error=n[38]),e.$set(o)},i(n){t||(ae(e.$$.fragment,n),t=!0)},o(n){de(e.$$.fragment,n),t=!1},d(n){Je(e,n)}}}function dn(l){let e,t,n,i,o,s,a,f,d;return{c(){e=u("div"),t=u("input"),n=k(),i=u("div"),o=u("button"),o.textContent="Создать",s=k(),a=u("button"),a.textContent="Отмена",c(t,"type","text"),c(t,"placeholder","Название заметки"),c(t,"class","svelte-1qo7cgm"),c(o,"class","btn btn-primary svelte-1qo7cgm"),c(a,"class","btn svelte-1qo7cgm"),c(i,"class","form-actions svelte-1qo7cgm"),c(e,"class","create-form svelte-1qo7cgm")},m(_,g){b(_,e,g),r(e,t),se(t,l[22]),r(e,n),r(e,i),r(i,o),r(i,s),r(i,a),f||(d=[F(t,"input",l[124]),F(t,"keydown",l[125]),F(o,"click",l[89]),F(a,"click",l[88])],f=!0)},p(_,g){g[0]&4194304&&t.value!==_[22]&&se(t,_[22])},d(_){_&&h(e),f=!1,oe(d)}}}function Sc(l){let e,t=Y(l[10]),n=[];for(let i=0;iНет заметок

Создайте первую заметку для этого дела.

',c(e,"class","empty-state svelte-1qo7cgm")},m(t,n){b(t,e,n)},p:W,d(t){t&&h(e)}}}function mn(l){let e,t,n=l[213].title+"",i,o,s,a=Be(l[213].createdAt)+"",f,d,_,g;function p(){return l[126](l[213])}return{c(){e=u("div"),t=u("div"),i=E(n),o=k(),s=u("div"),f=E(a),d=k(),c(t,"class","note-card-title svelte-1qo7cgm"),c(s,"class","note-card-date svelte-1qo7cgm"),c(e,"class","note-card svelte-1qo7cgm")},m(v,w){b(v,e,w),r(e,t),r(t,i),r(e,o),r(e,s),r(s,f),r(e,d),_||(g=F(e,"click",p),_=!0)},p(v,w){l=v,w[0]&1024&&n!==(n=l[213].title+"")&&O(i,n),w[0]&1024&&a!==(a=Be(l[213].createdAt)+"")&&O(f,a)},d(v){v&&h(e),_=!1,g()}}}function pn(l){let e,t,n,i=Y(l[10].slice(0,5)),o=[];for(let s=0;s0&&wn(l);return{c(){e=u("div"),t=u("div"),n=u("h3"),n.textContent="Новое дело",i=k(),o=u("div"),s=u("label"),s.textContent="Название",a=k(),f=u("input"),d=k(),_=u("div"),g=u("label"),g.textContent="Раздел",p=k(),v=u("select");for(let y=0;yl[155].call(v)),c(_,"class","form-group svelte-1qo7cgm"),c(T,"class","btn btn-primary svelte-1qo7cgm"),c(N,"class","btn svelte-1qo7cgm"),c(q,"class","modal-actions svelte-1qo7cgm"),c(t,"class","modal svelte-1qo7cgm"),c(e,"class","modal-overlay svelte-1qo7cgm")},m(y,M){b(y,e,M),r(e,t),r(t,n),r(t,i),r(t,o),r(o,s),r(o,a),r(o,f),se(f,l[17]),r(t,d),r(t,_),r(_,g),r(_,p),r(_,v);for(let z=0;z0?L?L.p(y,M):(L=wn(y),L.c(),L.m(t,C)):L&&(L.d(1),L=null)},d(y){y&&h(e),Ce(S,y),L&&L.d(),I=!1,oe(A)}}}function yn(l){let e,t=l[207].label+"",n,i;return{c(){e=u("option"),n=E(t),e.__value=i=l[207].id,se(e,e.__value),c(e,"class","svelte-1qo7cgm")},m(o,s){b(o,e,s),r(e,n)},p(o,s){s[0]&1&&t!==(t=o[207].label+"")&&O(n,t),s[0]&1&&i!==(i=o[207].id)&&(e.__value=i,se(e,e.__value))},d(o){o&&h(e)}}}function wn(l){let e,t,n,i,o,s,a,f=Y(l[20]),d=[];for(let _=0;_l[156].call(i)),c(e,"class","form-group svelte-1qo7cgm")},m(_,g){b(_,e,g),r(e,t),r(e,n),r(e,i),r(i,o);for(let p=0;pl[159].call(v)),c(_,"class","form-group svelte-1qo7cgm"),c(q,"class","svelte-1qo7cgm"),c(I,"type","text"),c(I,"placeholder",A=l[25]==="open_url"?"https://example.com":l[25]==="open_folder"||l[25]==="open_file"?"/path/to/file":"команда"),c(I,"class","svelte-1qo7cgm"),c(C,"class","form-group svelte-1qo7cgm"),c(L,"class","btn btn-primary svelte-1qo7cgm"),c(M,"class","btn svelte-1qo7cgm"),c(S,"class","modal-actions svelte-1qo7cgm"),c(t,"class","modal svelte-1qo7cgm"),c(e,"class","modal-overlay svelte-1qo7cgm")},m(R,B){b(R,e,B),r(e,t),r(t,n),r(t,i),r(t,o),r(o,s),r(o,a),r(o,f),se(f,l[24]),r(t,d),r(t,_),r(_,g),r(_,p),r(_,v);for(let U=0;U