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⚒ Верстак ',i=k(),o=u("nav"),s=u("div"),a=u("div"),a.textContent="Разделы",f=k();for(let te=0;te<_e.length;te+=1)_e[te].c();d=k(),ve&&ve.c(),_=k(),g=u("div"),p=u("button"),v=K("svg"),w=K("polyline"),C=K("polyline"),q=K("path"),T=k(),D=u("span"),N=k(),I=u("span"),I.textContent="Синхронизация",A=k(),j=u("span"),S=E(l[5]),L=k(),y=u("main"),M=u("header"),z=u("div"),Se.c(),J=k(),Z=u("div"),we&&we.c(),V=k(),Te&&Te.c(),R=k(),U.c(),le=k(),ge&&ge.c(),X=k(),he&&he.c(),ne=k(),be&&be.c(),re=k(),ke&&ke.c(),Q=k(),pe&&pe.c(),ee=k(),ue&&ue.c(),x=k(),ye&&ye.c(),c(n,"class","sidebar-brand svelte-1qo7cgm"),c(a,"class","nav-label svelte-1qo7cgm"),c(s,"class","nav-group svelte-1qo7cgm"),c(o,"class","sidebar-nav svelte-1qo7cgm"),c(w,"points","23 4 23 10 17 10"),c(w,"class","svelte-1qo7cgm"),c(C,"points","1 20 1 14 7 14"),c(C,"class","svelte-1qo7cgm"),c(q,"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(q,"class","svelte-1qo7cgm"),c(v,"width","16"),c(v,"height","16"),c(v,"viewBox","0 0 24 24"),c(v,"fill","none"),c(v,"stroke","currentColor"),c(v,"stroke-width","2"),c(v,"stroke-linecap","round"),c(v,"stroke-linejoin","round"),c(v,"class","svelte-1qo7cgm"),c(D,"class","sync-dot svelte-1qo7cgm"),bt(D,"active",(P=l[50])==null?void 0:P.configured),c(I,"class","sidebar-sync-label svelte-1qo7cgm"),c(p,"class","sidebar-sync-btn svelte-1qo7cgm"),c(p,"title","Настройки синхронизации"),c(j,"class","version svelte-1qo7cgm"),c(g,"class","sidebar-footer svelte-1qo7cgm"),c(t,"class","sidebar svelte-1qo7cgm"),c(z,"class","header-left svelte-1qo7cgm"),c(Z,"class","header-right svelte-1qo7cgm"),c(M,"class","header svelte-1qo7cgm"),c(y,"class","main svelte-1qo7cgm"),c(e,"class","app svelte-1qo7cgm")},m(P,te){b(P,e,te),r(e,t),r(t,n),r(t,i),r(t,o),r(o,s),r(s,a),r(s,f);for(let Me=0;Me<_e.length;Me+=1)_e[Me]&&_e[Me].m(s,null);r(o,d),ve&&ve.m(o,null),r(t,_),r(t,g),r(g,p),r(p,v),r(v,w),r(v,C),r(v,q),r(p,T),r(p,D),r(p,N),r(p,I),r(g,A),r(g,j),r(j,S),r(e,L),r(e,y),r(y,M),r(M,z),Se.m(z,null),r(M,J),r(M,Z),we&&we.m(Z,null),r(y,V),Te&&Te.m(y,null),r(y,R),Ae[B].m(y,null),r(y,le),ge&&ge.m(y,null),r(y,X),he&&he.m(y,null),r(y,ne),be&&be.m(y,null),r(y,re),ke&&ke.m(y,null),r(y,Q),pe&&pe.m(y,null),r(y,ee),ue&&ue.m(y,null),r(y,x),ye&&ye.m(y,null),fe=!0,me||(Oe=F(p,"click",l[107]),me=!0)},p(P,te){var Ee,Fe;if(te[0]&129|te[1]&268435456){Ie=Y(P[0]);let ie;for(ie=0;ie{Ae[Me]=null}),Ke(),U=Ae[B],U?U.p(P,te):(U=Ae[B]=ct[B](P),U.c()),ae(U,1),U.m(y,le)),!P[11]&&!P[8]&&P[7]!=="today"&&P[7]!=="inbox"&&P[7]!=="activity"?ge?ge.p(P,te):(ge=bn(P),ge.c(),ge.m(y,X)):ge&&(ge.d(1),ge=null),P[16]?he?he.p(P,te):(he=kn(P),he.c(),he.m(y,ne)):he&&(he.d(1),he=null),P[23]?be?be.p(P,te):(be=Cn(P),be.c(),be.m(y,re)):be&&(be.d(1),be=null),P[30]&&P[29]?ke?ke.p(P,te):(ke=Sn(P),ke.c(),ke.m(y,Q)):ke&&(ke.d(1),ke=null),P[46]?pe?pe.p(P,te):(pe=Ln(P),pe.c(),pe.m(y,ee)):pe&&(pe.d(1),pe=null),P[41]?ue?(ue.p(P,te),te[1]&1024&&ae(ue,1)):(ue=Dn(P),ue.c(),ae(ue,1),ue.m(y,x)):ue&&(Re(),de(ue,1,1,()=>{ue=null}),Ke()),P[49]?ye?ye.p(P,te):(ye=Nn(P),ye.c(),ye.m(y,null)):ye&&(ye.d(1),ye=null)},i(P){fe||(ae(U),ae(ue),fe=!0)},o(P){de(U),de(ue),fe=!1},d(P){P&&h(e),Ce(_e,P),ve&&ve.d(),Se.d(),we&&we.d(),Te&&Te.d(),Ae[B].d(),ge&&ge.d(),he&&he.d(),be&&be.d(),ke&&ke.d(),pe&&pe.d(),ue&&ue.d(),ye&&ye.d(),me=!1,Oe()}}}function G(l,...e){try{if(window.go&&window.go.main&&window.go.main.App){const t=window.go.main.App[l];if(typeof t=="function")return t(...e)}}catch(t){console.error("Wails call error:",l,t)}return Promise.reject(new Error("Wails not connected: "+l))}function Ue(l){return{note_created:"Заметка создана",note_updated:"Заметка изменена",file_added:"Файл добавлен",file_deleted:"Файл удалён",file_renamed:"Файл переименован",file_copied:"Файл скопирован",file_moved:"Файл перемещён",folder_added:"Папка добавлена",folder_deleted:"Папка удалена",folder_renamed:"Папка переименована",node_created:"Дело создано",node_updated:"Дело изменено"}[l]||l}function nt(l){return l==="note_created"||l==="file_added"||l==="folder_added"||l==="node_created"?"+":l==="file_deleted"||l==="folder_deleted"?"×":l==="file_renamed"||l==="folder_renamed"||l==="note_updated"||l==="node_updated"?"~":l==="file_copied"?"⧉":l==="file_moved"?"→":"•"}function je(l){if(!l)return"";try{return new Date(l).toLocaleTimeString("ru-RU",{hour:"2-digit",minute:"2-digit"})}catch{return""}}function Be(l){if(!l)return"";try{return new Date(l).toLocaleDateString("ru-RU",{day:"numeric",month:"short"})}catch{return l}}function On(l){return{project:"Проект",client:"Клиент",document:"Документ",recipe:"Рецепт",archive:"Архив",case:"Дело"}[l]||l||"Дело"}function We(l,e,t,n){return l=Math.abs(l)%100,l>=5&&l<=20?n:(l%=10,l===1?e:l>=2&&l<=4?t:n)}const Pn=l=>l.id!=="today"&&l.id!=="inbox"&&l.id!=="activity";function Hc(l,e,t){let n=[],i=[],o=null,s=[],a=0,f=!0,d=[],_="",g="",p="",v=null,w="overview",C=[],q=null,T=[],D=[],N=[],I="",A="",j=!1,S="",L="clients",y="",M=[],z=!1,J="",Z=!1,V="",R="open_url",B="",U=[{id:"open_url",label:"Открыть URL"},{id:"open_file",label:"Открыть файл"},{id:"open_folder",label:"Открыть папку"},{id:"run_command",label:"Запустить команду"},{id:"run_script",label:"Запустить скрипт"},{id:"open_terminal",label:"Открыть терминал"},{id:"launch_app",label:"Запустить приложение"}],le=!0,X=!1,ne=null,re=!1,Q="",ee=!1,x=null,fe=[],me=[],Oe=null,Ie="",_e=!1,ve="",De={items:[],mode:"copy"},$=[],Se=[],we=!1,Te="",ct="",Ae=!1,rt="Удалить",ge=null,he=null,be=!1,ke="",pe="",ue="",ye=!1,Ne=null,P=!1,te="",Me="",Ee="",Fe=0,ie="";const mt=[{id:"overview",label:"Обзор"},{id:"notes",label:"Заметки"},{id:"files",label:"Файлы"},{id:"actions",label:"Действия"},{id:"worklog",label:"Журнал"},{id:"activity",label:"Активность"}];let wt=null;Rn(async()=>{try{t(5,_=await G("VerstakVersion")||"verstak-gui/v2"),t(0,n=await G("ListSections")||[])}catch(m){t(6,g=String(m)),t(0,n=[{id:"today",label:"Сегодня"},{id:"inbox",label:"Неразобранное"},{id:"activity",label:"Активность"},{id:"clients",label:"Клиенты"},{id:"projects",label:"Проекты"},{id:"recipes",label:"Рецепты"},{id:"documents",label:"Документы"},{id:"archive",label:"Архив"}])}window.runtime&&window.runtime.EventsOn&&(window.runtime.EventsOn("files-dropped",wi),wt=()=>window.runtime.EventsOff("files-dropped")),window.addEventListener("keydown",Qt),t(27,le=!1),at()}),Kn(()=>{wt&&wt(),window.removeEventListener("keydown",Qt)});async function qt(m){t(7,p=m),t(8,v=null),t(9,w="overview"),t(10,C=[]),T=[],t(12,D=[]),t(13,N=[]),t(16,j=!1),t(6,g=""),t(2,o=null),t(3,s=[]),a=0,f=!0,t(1,i=[]);try{m==="today"?t(2,o=await G("ListTodayView")||{cases:[]}):m==="activity"?(t(3,s=await G("ListActivityFeed",50,0)||[]),a=s.length,f=s.length===50):t(1,i=await G("ListNodesBySection",m)||[])}catch(H){t(6,g=String(H)),t(1,i=[]),t(2,o={cases:[]}),t(3,s=[])}}async function Ct(m){t(8,v=m),t(9,w="overview"),t(10,C=[]),T=[],t(12,D=[]),t(13,N=[]),t(34,me=[]),t(33,fe=[]),t(32,x=null),t(35,Oe=null),t(36,Ie=""),t(40,$=[]),Se=[],t(11,q=null),t(16,j=!1),t(21,z=!1),t(6,g=""),t(4,d=[]),await zt(m.id)}async function zt(m){try{t(10,C=await G("ListNotes",m)||[])}catch{}try{T=await G("ListFiles",m)||[]}catch{}try{t(12,D=await G("ListActions",m)||[])}catch{}try{t(13,N=await G("ListWorklog",m)||[])}catch{}try{t(4,d=await G("ListActivityByNode",m,50,0)||[])}catch{}}async function Le(m){t(31,ee=!0);try{let H=await G("ListItems",m)||[];H.sort((ce,qe)=>ce.type!==qe.type?ce.type==="folder"?-1:1:(ce.name||"").localeCompare(qe.name||"")),t(34,me=H)}catch{t(34,me=[])}t(31,ee=!1)}async function Tt(m){if(v){try{const H=await G("GetNodeDetail",m);H&&t(33,fe=[...fe,{id:m,name:H.title}])}catch{t(33,fe=[...fe,{id:m,name:"..."}])}t(32,x=m),await Le(m)}}function Vt(){if(fe.length<2)t(33,fe=[]),t(32,x=null),Le(v.id);else{const m=fe[fe.length-2];t(33,fe=fe.slice(0,-1)),t(32,x=m.id),Le(m.id)}}function Rt(m){const H=fe[m];t(33,fe=fe.slice(0,m+1)),t(32,x=H.id),Le(H.id)}async function St(m){t(35,Oe=m),t(36,Ie=""),t(38,ve=""),t(37,_e=!0);try{go(m)?t(36,Ie=await G("GetFileBase64",m.fileId)||""):ho(m)&&t(36,Ie=await G("ReadFileText",m.fileId)||"")}catch(H){t(38,ve=String(H))}t(37,_e=!1)}function Mt(){t(35,Oe=null),t(36,Ie=""),t(38,ve="")}async function xn(){const m=prompt("Введите имя файла:");if(!(!m||!m.trim()))try{const H=x||v.id;await G("CreateEmptyFile",H,m.trim()),await Le(H)}catch(H){t(6,g=String(H))}}async function Kt(m){try{await G("DuplicateNode",m);const H=x||v.id;await Le(H)}catch(H){t(6,g=String(H))}}function Ut(m){const H=me.find(ce=>ce.id===m);H&&$t(H.id,H.name)}function Wt(m){t(39,De={items:[m],mode:"cut"})}function Gt(m){t(39,De={items:[m],mode:"copy"})}async function Jt(){if(De.items.length===0)return;const m=x||v.id;try{if(De.mode==="copy")for(const H of De.items)await G("DuplicateNode",H);else for(const H of De.items)await G("MoveNode",H,m);t(39,De={items:[],mode:"copy"}),await Le(m)}catch(H){t(6,g=String(H))}}function Xt(m){$.includes(m)?t(40,$=$.filter(H=>H!==m)):t(40,$=[...$,m])}function Zt(m){t(40,$=[m])}function $n(){t(40,$=me.map(m=>m.id))}function Yt(m){if(me.length===0)return;const H=$.length>0?$[$.length-1]:me[0].id,ce=me.findIndex(Xe=>Xe.id===H),qe=me.findIndex(Xe=>Xe.id===m);if(ce===-1||qe===-1)return;const ft=Math.min(ce,qe),Et=Math.max(ce,qe),Hs=me.slice(ft,Et+1).map(Xe=>Xe.id),al=new Set($);Hs.forEach(Xe=>al.add(Xe)),t(40,$=[...al])}function ei(){t(40,$=[])}function Lt(m){return m.length>0?m:me.map(H=>H.id)}async function ti(){var ce;const m=Lt($),H=m.length===1&&((ce=me.find(qe=>qe.id===m[0]))==null?void 0:ce.type)==="folder"?"папку":`файлов (${m.length})`;pt({title:"Удаление",message:`Удалить ${H}?`,confirmText:"Удалить",danger:!0,onConfirm:async()=>{for(const ft of m)try{await G("DeleteFileOrFolder",ft)}catch(Et){t(6,g=String(Et))}t(40,$=[]);const qe=x||v.id;await Le(qe)}})}function li(){const m=Lt($);t(39,De={items:m,mode:"cut"}),t(40,$=[])}function ni(){const m=Lt($);t(39,De={items:m,mode:"copy"}),t(40,$=[])}function ii(m,H){const ce=$.includes(H)?$:[H];Se=ce,m.dataTransfer.effectAllowed="move",m.dataTransfer.setData("text/plain",ce.join(","))}function si(m,H){const ce=me.find(qe=>qe.id===H);ce&&ce.type==="folder"&&(m.preventDefault(),m.dataTransfer.dropEffect="move")}async function oi(m,H){if(m.preventDefault(),Se.length!==0){for(const ce of Se)try{await G("MoveNode",ce,H)}catch(qe){t(6,g=String(qe))}Se=[],t(40,$=[]),await Le(x||v.id)}}function Qt(m){if(w==="files"&&!(m.target.tagName==="INPUT"||m.target.tagName==="TEXTAREA"))if(m.ctrlKey||m.metaKey)m.key==="c"||m.key==="C"?(m.preventDefault(),ni()):m.key==="x"||m.key==="X"?(m.preventDefault(),li()):m.key==="v"||m.key==="V"?(m.preventDefault(),Jt()):m.key==="a"||m.key==="A"?(m.preventDefault(),$n()):m.key==="o"||m.key==="O"?(m.preventDefault(),ci()):m.key==="Enter"&&(m.preventDefault(),xt());else if(m.key==="Enter")m.preventDefault(),xt();else if(m.key==="Delete"||m.key==="Backspace"){if(Oe){m.preventDefault(),Mt();return}if($.length>0){m.preventDefault(),ti();return}if(m.key==="Backspace"&&fe.length>0){m.preventDefault(),Vt();return}}else if(m.key==="Escape"){if(Oe){Mt();return}if($.length>0){ei();return}}else m.key==="F2"&&(m.preventDefault(),ri())}function xt(){if($.length===1){const m=me.find(H=>H.id===$[0]);m&&(m.type==="folder"?Tt(m.id):St(m))}}function ci(){if($.length===1){const m=me.find(H=>H.id===$[0]);m&&m.fileId&&G("OpenFile",m.fileId)}}function $t(m,H){ke=m,t(47,pe=H),t(48,ue=""),t(46,be=!0)}function ri(){if($.length===1){const m=me.find(H=>H.id===$[0]);m&&$t(m.id,m.name)}}async function el(){const m=pe.trim();if(!m){t(48,ue="Имя не может быть пустым");return}try{await G("ValidateName",m)}catch{t(48,ue="Недопустимое имя");return}t(46,be=!1),ke="";try{await G("RenameNode",ke,m);const H=x||v.id;await Le(H)}catch(H){t(6,g=String(H))}}function ai(){t(46,be=!1),ke="",t(47,pe=""),t(48,ue="")}function fi(m){m.key==="Enter"?el():t(48,ue="")}function pt(m){t(42,Te=m.title||"Подтверждение"),t(43,ct=m.message||""),t(44,Ae=m.danger!==void 0?m.danger:!0),t(45,rt=m.confirmText||"Удалить"),ge=m.onConfirm||null,he=m.onCancel||null,t(41,we=!0)}function tl(){t(41,we=!1),ge=null,he=null}function ui(){ge&&ge(),tl()}function di(){he&&he(),tl()}function mi(){t(16,j=!0),t(17,S=""),t(18,L=p||"clients"),t(19,y=""),G("ListTemplates").then(m=>{t(20,M=m||[])}).catch(()=>{t(20,M=[])})}function pi(){t(16,j=!1),t(17,S="")}async function ll(){if(S.trim())try{let m;y?m=await G("FromTemplate","","case",S.trim(),L,y):m=await G("CreateNode","","case",S.trim(),L),t(16,j=!1),t(17,S=""),t(19,y=""),await qt(L)}catch(m){t(6,g=String(m))}}function nl(){t(21,z=!0),t(22,J="")}function _i(){t(21,z=!1),t(22,J="")}async function il(){if(!(!J.trim()||!v))try{const m=await G("CreateNote",v.id,J.trim());t(10,C=[...C,m&&m.id?m:{id:Date.now().toString(),title:J.trim(),createdAt:new Date().toISOString()}]),t(21,z=!1),t(22,J="")}catch{const H={id:Date.now().toString(),title:J.trim(),createdAt:new Date().toISOString()};t(10,C=[...C,H]),t(21,z=!1),t(22,J="")}}async function It(m){if(q&&q.dirty){pt({title:"Несохранённые изменения",message:"Закрыть редактор? Все несохранённые изменения будут потеряны.",confirmText:"Закрыть",danger:!1,onConfirm:async()=>{await sl(m)}});return}await sl(m)}async function sl(m){try{const H=await G("ReadNote",m.id);t(11,q={id:m.id,title:m.title,content:H||"",dirty:!1})}catch{t(11,q={id:m.id,title:m.title,content:"# "+m.title+`
-
-`,dirty:!1})}}function vi(){if(q&&q.dirty){pt({title:"Несохранённые изменения",message:"Закрыть редактор? Все несохранённые изменения будут потеряны.",confirmText:"Закрыть",danger:!1,onConfirm:()=>{t(11,q=null)}});return}t(11,q=null)}function gi(m){q&&(t(11,q.content=m.target.value,q),t(11,q.dirty=!0,q))}async function hi(){if(q)try{await G("SaveNote",q.id,q.content),t(11,q.dirty=!1,q)}catch{t(11,q.dirty=!1,q)}}async function bi(){const m=parseInt(I,10);if(!(!A.trim()||isNaN(m)||m<=0||!v)){try{const H=await G("CreateWorklog",v.id,A.trim(),m);t(13,N=[...N,H&&H.id?H:{id:Date.now().toString(),nodeId:v.id,summary:A.trim(),minutes:m,createdAt:new Date().toISOString()}])}catch{t(13,N=[...N,{id:Date.now().toString(),nodeId:v.id,summary:A.trim(),minutes:m,createdAt:new Date().toISOString()}])}t(15,A=""),t(14,I="")}}async function ol(){const m=await G("PickFile");m&&await Dt(v.id,m)}async function ki(){const m=await G("PickDirectory");m&&await Dt(v.id,m)}async function Dt(m,H){t(28,X=!0);try{const ce=await G("PreviewImport",H);t(29,ne=ce),Q=H,t(30,re=!0)}catch(ce){t(6,g=String(ce))}t(28,X=!1)}async function Nt(m){try{const H=m==="copy"?await G("AddPathCopy",v.id,Q):await G("AddPathLink",v.id,Q);t(30,re=!1),t(29,ne=null),t(33,fe=[]),t(32,x=null),await Promise.all([zt(v.id),Le(v.id)])}catch(H){t(6,g=String(H))}}function yi(){t(30,re=!1),t(29,ne=null)}async function cl({id:m,type:H}){pt({title:"Удаление",message:`Удалить ${H==="folder"?"папку":"файл"}?`,confirmText:"Удалить",danger:!0,onConfirm:async()=>{try{await G("DeleteFileOrFolder",m),T=T.filter(ft=>ft.nodeId!==m);const qe=x||v.id;await Le(qe)}catch(qe){t(6,g=String(qe))}}})}async function wi(m){if(!m||m.length===0)return;if(!v){t(6,g="Сначала выберите дело для добавления файлов");return}const H=m[0];await Dt(v.id,H)}function qi(m){return w===m?"tab active":"tab"}function Ci(){t(23,Z=!0),t(24,V=""),t(25,R="open_url"),t(26,B="")}function Ti(){t(23,Z=!1),t(24,V=""),t(26,B="")}async function At(){if(!(!V.trim()||!B.trim()||!v))try{const m=await G("CreateAction",v.id,R,V.trim(),B.trim());m&&m.id&&t(12,D=[...D,m]),t(23,Z=!1),t(24,V=""),t(26,B="")}catch(m){t(6,g=String(m))}}async function rl(m){try{await G("DeleteAction",m),t(12,D=D.filter(H=>H.id!==m))}catch(H){t(6,g=String(H))}}function Si(m){const H=U.find(ce=>ce.id===m);return H?H.label:m}async function Pe(m){try{const H=await G("GetNodeDetail",m);H&&Ct(H)}catch(H){t(6,g=String(H))}}async function at(){try{t(50,Ne=await G("SyncStatus"))}catch{t(50,Ne={configured:!1,serverUrl:"",deviceId:"",unpushedOps:0,lastSyncAt:"",syncInterval:0})}}function Mi(){t(49,ye=!0),t(52,te=(Ne==null?void 0:Ne.serverUrl)||""),t(53,Me=""),t(54,Ee=""),t(55,Fe=(Ne==null?void 0:Ne.syncInterval)||0),t(56,ie="")}function Li(){t(49,ye=!1),t(56,ie="")}async function Ii(){t(51,P=!0),t(56,ie="");try{await G("SyncConfigure",te,Me,Ee),Fe>0&&await G("SyncSetInterval",Fe),t(54,Ee=""),t(53,Me=""),await at(),t(49,ye=!1)}catch(m){t(56,ie="err: "+String(m))}t(51,P=!1)}async function Di(){t(51,P=!0),t(56,ie="");try{await G("SyncSetInterval",Fe),t(56,ie="интервал сохранён"),await at()}catch(m){t(56,ie="err: "+String(m))}t(51,P=!1)}async function Ni(){t(51,P=!0),t(56,ie="");try{await G("SyncTestConnection",te,Me,Ee),t(56,ie="connection ok")}catch(m){t(56,ie="connection failed: "+String(m))}t(51,P=!1)}async function Ai(){t(51,P=!0),t(56,ie="");try{await G("SyncDisconnect"),t(56,ie="disconnected"),await at()}catch(m){t(56,ie="err: "+String(m))}t(51,P=!1)}async function Ei(){t(51,P=!0),t(56,ie="");try{const m=await G("SyncNow");t(56,ie="pushed "+m.pushed+", pulled "+m.pulled+" (seq "+m.serverSequence+")"),await at()}catch(m){t(56,ie="err: "+String(m))}t(51,P=!1)}const Fi=m=>qt(m.id),Hi=m=>Ct(m),ji=()=>t(6,g=""),Bi=()=>t(6,g="");function Oi(){q.content=this.value,t(11,q)}const Pi=m=>{t(9,w=m.id),m.id==="files"&&v&&me.length===0&&!x&&Le(v.id)},zi=()=>{t(9,w="notes"),nl()},Vi=()=>{t(9,w="files"),ol()},Ri=()=>t(9,w="worklog"),Ki=m=>It(m);function Ui(){J=this.value,t(22,J)}const Wi=m=>m.key==="Enter"&&il(),Gi=m=>It(m),Ji=m=>{const H=m.detail;H===0?(t(33,fe=[]),t(32,x=null),Le(v.id)):Rt(H-1)},Xi=m=>Tt(m.detail),Zi=m=>St(m.detail),Yi=m=>G("OpenFile",m.detail),Qi=m=>G("OpenFolder",m.detail),xi=m=>cl(m.detail),$i=m=>Ut(m.detail.id),es=m=>Kt(m.detail),ts=m=>Wt(m.detail),ls=m=>Gt(m.detail),ns=m=>Zt(m.detail),is=m=>Xt(m.detail),ss=m=>Yt(m.detail),os=m=>G("OpenFile",m.detail),cs=m=>G("RunAction",m.id),rs=m=>rl(m.id);function as(){A=this.value,t(15,A)}function fs(){I=ht(this.value),t(14,I)}const us=m=>Pe(m.nodeId),ds=(m,H)=>H.key==="Enter"&&Pe(m.nodeId),ms=m=>Pe(m.nodeId),ps=(m,H)=>H.key==="Enter"&&Pe(m.nodeId),_s=m=>Pe(m.nodeId),vs=(m,H)=>H.key==="Enter"&&Pe(m.nodeId),gs=m=>Pe(m.nodeId),hs=(m,H)=>H.key==="Enter"&&Pe(m.nodeId);function bs(){S=this.value,t(17,S)}const ks=m=>m.key==="Enter"&&ll();function ys(){L=Ht(this),t(18,L),t(0,n)}function ws(){y=Ht(this),t(19,y),t(20,M)}function qs(){V=this.value,t(24,V)}const Cs=m=>m.key==="Enter"&&At();function Ts(){R=Ht(this),t(25,R),t(57,U)}function Ss(){B=this.value,t(26,B)}const Ms=m=>m.key==="Enter"&&At(),Ls=()=>Nt("copy"),Is=()=>Nt("link");function Ds(){pe=this.value,t(47,pe)}function Ns(){te=this.value,t(52,te)}function As(){Me=this.value,t(53,Me)}function Es(){Ee=this.value,t(54,Ee)}function Fs(){Fe=ht(this.value),t(55,Fe)}return[n,i,o,s,d,_,g,p,v,w,C,q,D,N,I,A,j,S,L,y,M,z,J,Z,V,R,B,le,X,ne,re,ee,x,fe,me,Oe,Ie,_e,ve,De,$,we,Te,ct,Ae,rt,be,pe,ue,ye,Ne,P,te,Me,Ee,Fe,ie,U,mt,qt,Ct,Le,Tt,Vt,Rt,St,Mt,xn,Kt,Ut,Wt,Gt,Jt,Xt,Zt,Yt,ii,si,oi,el,ai,fi,ui,di,mi,pi,ll,nl,_i,il,It,vi,gi,hi,bi,ol,ki,Nt,yi,cl,qi,Ci,Ti,At,rl,Si,Pe,Mi,Li,Ii,Di,Ni,Ai,Ei,Fi,Hi,ji,Bi,Oi,Pi,zi,Vi,Ri,Ki,Ui,Wi,Gi,Ji,Xi,Zi,Yi,Qi,xi,$i,es,ts,ls,ns,is,ss,os,cs,rs,as,fs,us,ds,ms,ps,_s,vs,gs,hs,bs,ks,ys,ws,qs,Cs,Ts,Ss,Ms,Ls,Is,Ds,Ns,As,Es,Fs]}class jc extends ot{constructor(e){super(),st(this,e,Hc,Fc,it,{},null,[-1,-1,-1,-1,-1,-1,-1,-1,-1])}}new jc({target:document.getElementById("app")});
diff --git a/cmd/verstak-gui/frontend-dist/assets/main-DyAxVBm-.js b/cmd/verstak-gui/frontend-dist/assets/main-DyAxVBm-.js
new file mode 100644
index 0000000..108fb30
--- /dev/null
+++ b/cmd/verstak-gui/frontend-dist/assets/main-DyAxVBm-.js
@@ -0,0 +1,3 @@
+var Xi=Object.defineProperty;var Ji=(l,e,t)=>e in l?Xi(l,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):l[e]=t;var Wt=(l,e,t)=>Ji(l,typeof e!="symbol"?e+"":e,t);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))n(o);new MutationObserver(o=>{for(const s of o)if(s.type==="childList")for(const r of s.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&n(r)}).observe(document,{childList:!0,subtree:!0});function t(o){const s={};return o.integrity&&(s.integrity=o.integrity),o.referrerPolicy&&(s.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?s.credentials="include":o.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function n(o){if(o.ep)return;o.ep=!0;const s=t(o);fetch(o.href,s)}})();function Q(){}function qn(l){return l()}function hl(){return Object.create(null)}function fe(l){l.forEach(qn)}function Gn(l){return typeof l=="function"}function ct(l,e){return l!=l?e==e:l!==e||l&&typeof l=="object"||typeof l=="function"}let It;function Dt(l,e){return l===e?!0:(It||(It=document.createElement("a")),It.href=e,l===It.href)}function Yi(l){return Object.keys(l).length===0}function Zi(l){return l??""}function c(l,e){l.appendChild(e)}function g(l,e,t){l.insertBefore(e,t||null)}function y(l){l.parentNode&&l.parentNode.removeChild(l)}function je(l,e){for(let t=0;tl.removeEventListener(e,t,n)}function At(l){return function(e){return e.preventDefault(),l.call(this,e)}}function ot(l){return function(e){return e.stopPropagation(),l.call(this,e)}}function at(l){return function(e){e.target===this&&l.call(this,e)}}function i(l,e,t){t==null?l.removeAttribute(e):l.getAttribute(e)!==t&&l.setAttribute(e,t)}function Et(l){return l===""?null:+l}function Qi(l){return Array.from(l.childNodes)}function V(l,e){e=""+e,l.data!==e&&(l.data=e)}function ge(l,e){l.value=e??""}function Re(l,e,t,n){t==null?l.style.removeProperty(e):l.style.setProperty(e,t,"")}function wl(l,e,t){for(let n=0;n{const o=l.$$.callbacks[e];if(o){const s=$i(e,t,{cancelable:n});return o.slice().forEach(r=>{r.call(l,s)}),!s.defaultPrevented}return!0}}function er(l,e){const t=l.$$.callbacks[e.type];t&&t.slice().forEach(n=>n.call(this,e))}const vt=[],bl=[];let ht=[];const kl=[],tr=Promise.resolve();let qt=!1;function lr(){qt||(qt=!0,tr.then(Yn))}function Lt(l){ht.push(l)}const Kt=new Set;let _t=0;function Yn(){if(_t!==0)return;const l=Ft;do{try{for(;_tl.indexOf(n)===-1?e.push(n):t.push(n)),t.forEach(n=>n()),ht=e}const Mt=new Set;let st;function Ye(){st={r:0,c:[],p:st}}function Ze(){st.r||fe(st.c),st=st.p}function se(l,e){l&&l.i&&(Mt.delete(l),l.i(e))}function pe(l,e,t,n){if(l&&l.o){if(Mt.has(l))return;Mt.add(l),st.c.push(()=>{Mt.delete(l),n&&(t&&l.d(1),n())}),l.o(e)}else n&&n()}function ce(l){return(l==null?void 0:l.length)!==void 0?l:Array.from(l)}function ir(l,e){pe(l,1,1,()=>{e.delete(l.key)})}function rr(l,e,t,n,o,s,r,a,f,m,b,v){let _=l.length,h=s.length,w=_;const T={};for(;w--;)T[l[w].key]=w;const S=[],C=new Map,I=new Map,F=[];for(w=h;w--;){const D=v(o,s,w),M=t(D);let B=r.get(M);B?F.push(()=>B.p(D,e)):(B=m(M,D),B.c()),C.set(M,S[w]=B),M in T&&I.set(M,Math.abs(w-T[M]))}const N=new Set,R=new Set;function O(D){se(D,1),D.m(a,b),r.set(D.key,D),b=D.first,h--}for(;_&&h;){const D=S[h-1],M=l[_-1],B=D.key,j=M.key;D===M?(b=D.first,_--,h--):C.has(j)?!r.has(B)||N.has(B)?O(D):R.has(j)?_--:I.get(B)>I.get(j)?(R.add(B),O(D)):(N.add(j),_--):(f(M,r),_--)}for(;_--;){const D=l[_];C.has(D.key)||f(D,r)}for(;h;)O(S[h-1]);return fe(F),S}function nt(l){l&&l.c()}function et(l,e,t){const{fragment:n,after_update:o}=l.$$;n&&n.m(e,t),Lt(()=>{const s=l.$$.on_mount.map(qn).filter(Gn);l.$$.on_destroy?l.$$.on_destroy.push(...s):fe(s),l.$$.on_mount=[]}),o.forEach(Lt)}function tt(l,e){const t=l.$$;t.fragment!==null&&(or(t.after_update),fe(t.on_destroy),t.fragment&&t.fragment.d(e),t.on_destroy=t.fragment=null,t.ctx=[])}function sr(l,e){l.$$.dirty[0]===-1&&(vt.push(l),lr(),l.$$.dirty.fill(0)),l.$$.dirty[e/31|0]|=1<{const w=h.length?h[0]:_;return m.ctx&&o(m.ctx[v],m.ctx[v]=w)&&(!m.skip_bound&&m.bound[v]&&m.bound[v](w),b&&sr(l,v)),_}):[],m.update(),b=!0,fe(m.before_update),m.fragment=n?n(m.ctx):!1,e.target){if(e.hydrate){const v=Qi(e.target);m.fragment&&m.fragment.l(v),v.forEach(y)}else m.fragment&&m.fragment.c();e.intro&&se(l.$$.fragment),et(l,e.target,e.anchor),Yn()}Nt(f)}class ut{constructor(){Wt(this,"$$");Wt(this,"$$set")}$destroy(){tt(this,1),this.$destroy=Q}$on(e,t){if(!Gn(t))return Q;const n=this.$$.callbacks[e]||(this.$$.callbacks[e]=[]);return n.push(t),()=>{const o=n.indexOf(t);o!==-1&&n.splice(o,1)}}$set(e){this.$$set&&!Yi(e)&&(this.$$.skip_bound=!0,this.$$set(e),this.$$.skip_bound=!1)}}const cr="4";typeof window<"u"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(cr);function ar(l){let e,t;return{c(){e=z("path"),t=z("polyline"),i(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),i(t,"points","14 2 14 8 20 8")},m(n,o){g(n,e,o),g(n,t,o)},d(n){n&&(y(e),y(t))}}}function fr(l){let e,t,n,o,s;return{c(){e=z("path"),t=z("polyline"),n=z("line"),o=z("line"),s=z("polyline"),i(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),i(t,"points","14 2 14 8 20 8"),i(n,"x1","16"),i(n,"y1","13"),i(n,"x2","8"),i(n,"y2","13"),i(o,"x1","16"),i(o,"y1","17"),i(o,"x2","8"),i(o,"y2","17"),i(s,"points","10 9 9 9 8 9")},m(r,a){g(r,e,a),g(r,t,a),g(r,n,a),g(r,o,a),g(r,s,a)},d(r){r&&(y(e),y(t),y(n),y(o),y(s))}}}function ur(l){let e,t;return{c(){e=z("polyline"),t=z("polyline"),i(e,"points","16 18 22 12 16 6"),i(t,"points","8 6 2 12 8 18")},m(n,o){g(n,e,o),g(n,t,o)},d(n){n&&(y(e),y(t))}}}function dr(l){let e,t,n,o;return{c(){e=z("path"),t=z("polyline"),n=z("line"),o=z("rect"),i(e,"d","M21 8v13a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8"),i(t,"points","7 3 12 8 17 3"),i(n,"x1","3"),i(n,"y1","8"),i(n,"x2","21"),i(n,"y2","8"),i(o,"x","10"),i(o,"y","12"),i(o,"width","4"),i(o,"height","4"),i(o,"rx","1")},m(s,r){g(s,e,r),g(s,t,r),g(s,n,r),g(s,o,r)},d(s){s&&(y(e),y(t),y(n),y(o))}}}function mr(l){let e,t,n,o,s;return{c(){e=z("path"),t=z("polyline"),n=z("line"),o=z("line"),s=z("line"),i(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),i(t,"points","14 2 14 8 20 8"),i(n,"x1","9"),i(n,"y1","12"),i(n,"x2","15"),i(n,"y2","12"),i(o,"x1","9"),i(o,"y1","15"),i(o,"x2","13"),i(o,"y2","15"),i(s,"x1","12"),i(s,"y1","15"),i(s,"x2","12"),i(s,"y2","18")},m(r,a){g(r,e,a),g(r,t,a),g(r,n,a),g(r,o,a),g(r,s,a)},d(r){r&&(y(e),y(t),y(n),y(o),y(s))}}}function pr(l){let e,t,n,o,s,r;return{c(){e=z("path"),t=z("polyline"),n=z("line"),o=z("line"),s=z("line"),r=z("line"),i(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),i(t,"points","14 2 14 8 20 8"),i(n,"x1","8"),i(n,"y1","12"),i(n,"x2","16"),i(n,"y2","12"),i(o,"x1","8"),i(o,"y1","16"),i(o,"x2","16"),i(o,"y2","16"),i(s,"x1","8"),i(s,"y1","14"),i(s,"x2","12"),i(s,"y2","14"),i(r,"x1","12"),i(r,"y1","12"),i(r,"x2","12"),i(r,"y2","18")},m(a,f){g(a,e,f),g(a,t,f),g(a,n,f),g(a,o,f),g(a,s,f),g(a,r,f)},d(a){a&&(y(e),y(t),y(n),y(o),y(s),y(r))}}}function _r(l){let e,t,n,o;return{c(){e=z("path"),t=z("polyline"),n=z("line"),o=z("line"),i(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),i(t,"points","14 2 14 8 20 8"),i(n,"x1","16"),i(n,"y1","13"),i(n,"x2","8"),i(n,"y2","13"),i(o,"x1","16"),i(o,"y1","17"),i(o,"x2","8"),i(o,"y2","17")},m(s,r){g(s,e,r),g(s,t,r),g(s,n,r),g(s,o,r)},d(s){s&&(y(e),y(t),y(n),y(o))}}}function vr(l){let e,t,n,o,s;return{c(){e=z("path"),t=z("polyline"),n=z("line"),o=z("line"),s=z("line"),i(e,"d","M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"),i(t,"points","14 2 14 8 20 8"),i(n,"x1","8"),i(n,"y1","12"),i(n,"x2","16"),i(n,"y2","12"),i(o,"x1","8"),i(o,"y1","16"),i(o,"x2","16"),i(o,"y2","16"),i(s,"x1","8"),i(s,"y1","14"),i(s,"x2","12"),i(s,"y2","14")},m(r,a){g(r,e,a),g(r,t,a),g(r,n,a),g(r,o,a),g(r,s,a)},d(r){r&&(y(e),y(t),y(n),y(o),y(s))}}}function hr(l){let e,t,n;return{c(){e=z("path"),t=z("circle"),n=z("circle"),i(e,"d","M9 18V5l12-2v13"),i(t,"cx","6"),i(t,"cy","18"),i(t,"r","3"),i(n,"cx","18"),i(n,"cy","16"),i(n,"r","3")},m(o,s){g(o,e,s),g(o,t,s),g(o,n,s)},d(o){o&&(y(e),y(t),y(n))}}}function wr(l){let e,t;return{c(){e=z("rect"),t=z("polyline"),i(e,"x","2"),i(e,"y","4"),i(e,"width","20"),i(e,"height","16"),i(e,"rx","2"),i(t,"points","10 9 16 12 10 15 10 9")},m(n,o){g(n,e,o),g(n,t,o)},d(n){n&&(y(e),y(t))}}}function br(l){let e,t,n;return{c(){e=z("rect"),t=z("circle"),n=z("polyline"),i(e,"x","3"),i(e,"y","3"),i(e,"width","18"),i(e,"height","18"),i(e,"rx","2"),i(e,"ry","2"),i(t,"cx","8.5"),i(t,"cy","8.5"),i(t,"r","1.5"),i(n,"points","21 15 16 10 5 21")},m(o,s){g(o,e,s),g(o,t,s),g(o,n,s)},d(o){o&&(y(e),y(t),y(n))}}}function kr(l){let e;return{c(){e=z("path"),i(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){g(t,e,n)},d(t){t&&y(e)}}}function yr(l){let e;function t(s,r){return s[0]==="folder"?kr:s[0]==="image"?br:s[0]==="video"?wr:s[0]==="audio"?hr:s[0]==="pdf"?vr:s[0]==="document"?_r:s[0]==="spreadsheet"?pr:s[0]==="presentation"?mr:s[0]==="archive"?dr:s[0]==="code"?ur:s[0]==="text"?fr:ar}let n=t(l),o=n(l);return{c(){e=z("svg"),o.c(),i(e,"width",l[1]),i(e,"height",l[1]),i(e,"viewBox","0 0 24 24"),i(e,"fill","none"),i(e,"stroke","currentColor"),i(e,"stroke-width","1.5"),i(e,"stroke-linecap","round"),i(e,"stroke-linejoin","round"),i(e,"xmlns","http://www.w3.org/2000/svg")},m(s,r){g(s,e,r),o.m(e,null)},p(s,[r]){n!==(n=t(s))&&(o.d(1),o=n(s),o&&(o.c(),o.m(e,null))),r&2&&i(e,"width",s[1]),r&2&&i(e,"height",s[1])},i:Q,o:Q,d(s){s&&y(e),o.d()}}}function gr(l,e,t){let{kind:n="generic"}=e,{size:o=20}=e;return l.$$set=s=>{"kind"in s&&t(0,n=s.kind),"size"in s&&t(1,o=s.size)},[n,o]}class Zn extends ut{constructor(e){super(),ft(this,e,gr,yr,ct,{kind:0,size:1})}}const Cr={"nav.today":"Сегодня","nav.inbox":"Неразобранное","nav.activity":"Активность","nav.clients":"Клиенты","nav.projects":"Проекты","nav.recipes":"Рецепты","nav.documents":"Документы","nav.archive":"Архив","nav.sections":"Разделы","nav.cases":"Дела","nav.noCases":"Нет дел","nav.sync":"Синхронизация","nav.syncSettings":"Настройки синхронизации","nav.syncNow":"Синхронизировать","nav.selectPrompt":"Выберите раздел или дело","nav.brand":"Верстак","nav.system":"Системное","nav.workspace":"Рабочее пространство","nav.noNodes":"Нет узлов","nav.openFolder":"Открыть папку","nav.createInside":"Создать внутри","tab.overview":"Обзор","tab.notes":"Заметки","tab.files":"Файлы","tab.actions":"Действия","tab.worklog":"Журнал","tab.activity":"Активность","common.save":"Сохранить","common.cancel":"Отмена","common.delete":"Удалить","common.rename":"Переименовать","common.close":"Закрыть","common.create":"Создать","common.confirm":"Подтверждение","common.back":"← Назад","common.loading":"Загрузка...","common.error":"Ошибка:","common.yes":"Да","common.ok":"OK","common.copy":"Копировать","common.cut":"Вырезать","common.paste":"Вставить","common.duplicate":"Дублировать","common.run":"Запустить","common.test":"Test","common.testAgain":"Проверить","common.connect":"Подключиться","common.disconnect":"Отключиться","common.settings":"Настройки","common.name":"Название","common.type":"Тип","common.section":"Раздел","common.created":"Создано","common.empty":"Нет","common.newName":"Новое имя","welcome.title":"Верстак","welcome.selectSection":"Выберите раздел в боковой панели.","welcome.createCase":"Или создайте новое дело кнопкой «+».","welcome.addCase":"Добавить дело","event.noteCreated":"Заметка создана","event.noteUpdated":"Заметка изменена","event.fileAdded":"Файл добавлен","event.fileDeleted":"Файл удалён","event.fileRenamed":"Файл переименован","event.fileCopied":"Файл скопирован","event.fileMoved":"Файл перемещён","event.folderAdded":"Папка добавлена","event.folderDeleted":"Папка удалена","event.folderRenamed":"Папка переименована","event.caseCreated":"Дело создано","event.caseUpdated":"Дело изменено","kind.project":"Проект","kind.client":"Клиент","kind.document":"Документ","kind.recipe":"Рецепт","kind.archive":"Архив","kind.case":"Дело","action.openUrl":"Открыть URL","action.openFile":"Открыть файл","action.openFolder":"Открыть папку","action.runCommand":"Запустить команду","action.runScript":"Запустить скрипт","action.openTerminal":"Открыть терминал","action.launchApp":"Запустить приложение","action.addAction":"+ Добавить действие","action.newAction":"Новое действие","action.noActions":"Действий пока нет","action.run":"Запустить","action.dataUrl":"URL","action.dataPath":"Путь","action.dataCommand":"Команда","action.urlPlaceholder":"https://example.com","action.pathPlaceholder":"/path/to/file","action.commandPlaceholder":"команда","action.namePlaceholder":"Например: Открыть сайт","note.add":"+ Добавить заметку","note.new":"Новая заметка","note.title":"Название заметки","note.noNotes":"Нет заметок","note.createFirst":"Создайте первую заметку для этого дела.","note.placeholder":"Начните писать...","note.unsavedTitle":"Несохранённые изменения","note.unsavedMessage":"Закрыть редактор? Все несохранённые изменения будут потеряны.","note.unsavedClose":"Закрыть","file.addFile":"+ Добавить файл","file.addFolder":"+ Добавить папку","file.newFile":"+ Новый файл","file.addFileSimple":"Добавить файл","file.addFolderSimple":"Добавить папку","file.noFiles":"В этой папке пока нет файлов","file.noFilesCase":"В этом проекте пока нет файлов","file.hint":"Добавьте файл или папку, чтобы сохранить материалы проекта.","file.root":"Файлы","file.preview":"Предпросмотр","file.openExternal":"Открыть во внешней программе","file.openFolder":"Открыть папку","file.showInExplorer":"Показать в проводнике","file.more":"Ещё","file.delete":"Удалить","file.ariaFolder":"Папка","file.ariaFile":"Файл","file.scanning":"Сканирование...","file.pickSingle":"Выберите файл","file.pickMultiple":"Выберите файлы","file.pickDirectory":"Выберите папку","file.importTitle":"Добавить в","file.importFiles":"Файлов:","file.importFolders":"Папок:","file.importSize":"Размер:","file.importCopy":"Скопировать","file.importLink":"Привязать","file.selectCaseFirst":"Сначала выберите дело для добавления файлов","worklog.title":"Журнал","worklog.whatDone":"Что сделано","worklog.minutes":"Мин","worklog.min":"мин","worklog.log":"Записать","worklog.empty":"Записей работы пока нет","sync.title":"Синхронизация","sync.settings":"Настройки синхронизации","sync.status":"Статус","sync.server":"Сервер","sync.device":"Устройство","sync.deviceId":"ID устройства","sync.unpushed":"Неотправлено","sync.lastSync":"Последняя синх.","sync.revoked":"Отозвано","sync.connected":"Подключено","sync.notConnected":"Не подключено","sync.disabled":"Отключена","sync.serverUrl":"URL сервера","sync.serverUrlPlaceholder":"https://example.com:47732","sync.username":"Логин","sync.usernamePlaceholder":"username","sync.password":"Пароль","sync.passwordPlaceholder":"password","sync.autoSync":"Автосинхронизация (мин, 0 = отключено)","sync.saveInterval":"Сохранить интервал","sync.syncNow":"Синхронизировать","sync.disconnect":"Отключиться","sync.connect":"Подключиться","sync.test":"Проверить","sync.settingsSaved":"интервал сохранён","today.title":"Сегодня","today.changedCases":"Изменён сегодня","today.timeline":"Лента за сегодня","today.empty":"Сегодня пока тихо","today.emptyHint":"Здесь появятся дела, заметки, файлы и действия, с которыми вы работали сегодня.","today.plural.case_one":"дело","today.plural.case_few":"дела","today.plural.case_many":"дел","today.plural.note_one":"заметка","today.plural.note_few":"заметки","today.plural.note_many":"заметок","today.plural.file_one":"файл","today.plural.file_few":"файла","today.plural.file_many":"файлов","today.plural.event_one":"событие","today.plural.event_few":"события","today.plural.event_many":"событий","activity.title":"Активность","activity.empty":"Активность пока не зафиксирована","activity.perCaseEmpty":"Активность пока не зафиксирована","overview.type":"Тип","overview.section":"Раздел","overview.created":"Создано","overview.newNote":"Новая заметка","overview.addFile":"Добавить файл","overview.addAction":"Добавить действие","overview.logTime":"Записать время","overview.recentNotes":"Последние заметки","overview.recentEntries":"Последние записи","rename.title":"Переименовать","rename.emptyError":"Имя не может быть пустым","rename.invalidError":"Недопустимое имя","delete.confirmTitle":"Удаление","delete.confirmMessage":"Удалить","delete.folder":"папку","delete.file":"файл","template.optionNone":"Без шаблона","template.optional":"Шаблон (опционально)","mime.jpeg":"Изображение JPEG","mime.png":"Изображение PNG","mime.gif":"Изображение GIF","mime.webp":"Изображение WebP","mime.svg":"Изображение SVG","mime.bmp":"Изображение BMP","mime.tiff":"Изображение TIFF","mime.avif":"Изображение AVIF","mime.pdf":"PDF документ","mime.word":"Документ Word","mime.excel":"Таблица Excel","mime.ppt":"Презентация PowerPoint","mime.zip":"ZIP архив","mime.gzip":"GZIP архив","mime.tar":"TAR архив","mime.sevenz":"7z архив","mime.rar":"RAR архив","mime.text":"Текстовый файл","mime.html":"HTML файл","mime.css":"CSS файл","mime.js":"JavaScript файл","mime.json":"JSON файл","mime.xml":"XML файл","mime.yaml":"YAML файл","mime.binary":"Бинарный файл","mime.executable":"Исполняемый файл","mime.folder":"Папка","mime.unknown":"Неизвестно","mime.file":"Файл","error.nameEmpty":"Имя не может быть пустым","error.nameInvalid":"Недопустимое имя","error.selectCaseFirst":"Сначала выберите дело","common.open":"Открыть","delete.files":"файлов ({count})","file.namePrompt":"Введите имя файла:","file.pdfUnavailable":"Предпросмотр PDF недоступен.","file.previewUnavailable":"Предпросмотр недоступен для этого типа файлов.","case.new":"Новое дело","case.namePlaceholder":"Название дела","error.generic":"Произошла ошибка","error.invalidCredentials":"Неверный логин или пароль","error.accountBlocked":"Аккаунт заблокирован","error.emailNotConfirmed":"Email не подтверждён","error.tokenInvalid":"Неверный или просроченный токен","error.tokenExpired":"Срок действия токена истёк"},Sr={"nav.today":"Today","nav.inbox":"Inbox","nav.activity":"Activity","nav.clients":"Clients","nav.projects":"Projects","nav.recipes":"Recipes","nav.documents":"Documents","nav.archive":"Archive","nav.system":"System","nav.workspace":"Workspace","nav.noNodes":"No nodes","nav.openFolder":"Open folder","nav.createInside":"Create inside","tab.overview":"Overview","tab.notes":"Notes","tab.files":"Files","tab.actions":"Actions","tab.worklog":"Work Log","tab.activity":"Activity","common.save":"Save","common.cancel":"Cancel","common.delete":"Delete","common.rename":"Rename","common.close":"Close","common.create":"Create","common.confirm":"Confirm","common.back":"← Back","common.loading":"Loading...","common.error":"Error:","common.yes":"Yes","common.ok":"OK","common.run":"Run","common.name":"Name","common.settings":"Settings","welcome.title":"Verstak","welcome.selectSection":"Select a section in the sidebar.","welcome.addCase":"Add case","event.noteCreated":"Note created","event.noteUpdated":"Note updated","event.fileAdded":"File added","event.fileDeleted":"File deleted","event.fileRenamed":"File renamed","event.fileCopied":"File copied","event.fileMoved":"File moved","event.caseCreated":"Case created","action.openUrl":"Open URL","action.openFile":"Open file","action.openFolder":"Open folder","action.runCommand":"Run command","action.runScript":"Run script","action.openTerminal":"Open terminal","action.launchApp":"Launch app","note.add":"+ Add note","note.noNotes":"No notes","note.title":"Note title","note.placeholder":"Start writing...","file.addFile":"+ Add file","file.addFolder":"+ Add folder","file.preview":"Preview","file.openExternal":"Open in external program","file.openFolder":"Open folder","file.delete":"Delete","file.pickSingle":"Select file","file.pickDirectory":"Select folder","sync.title":"Sync","sync.settings":"Sync settings","sync.status":"Status","sync.server":"Server","sync.device":"Device","sync.connected":"Connected","sync.notConnected":"Not connected","sync.disabled":"Disabled","error.generic":"An error occurred","error.invalidCredentials":"Invalid username or password"},yl={ru:Cr,en:Sr};let gl="ru";function p(l,e){var o;const t=yl[gl];let n=t==null?void 0:t[l];if(n==null&&gl!=="ru"&&(n=(o=yl.ru)==null?void 0:o[l]),n==null&&(n=l),e!=null)for(const[s,r]of Object.entries(e))n=n.replace(`{${s}}`,String(r));return n}function Pt(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 Gt={"image/jpeg":p("mime.jpeg"),"image/png":p("mime.png"),"image/gif":p("mime.gif"),"image/webp":p("mime.webp"),"image/svg+xml":p("mime.svg"),"image/bmp":p("mime.bmp"),"image/tiff":p("mime.tiff"),"image/avif":p("mime.avif"),"application/pdf":p("mime.pdf"),"application/msword":p("mime.word"),"application/vnd.openxmlformats-officedocument.wordprocessingml.document":p("mime.word"),"application/vnd.ms-excel":p("mime.excel"),"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":p("mime.excel"),"application/vnd.ms-powerpoint":p("mime.ppt"),"application/vnd.openxmlformats-officedocument.presentationml.presentation":p("mime.ppt"),"application/zip":p("mime.zip"),"application/gzip":p("mime.gzip"),"application/x-tar":p("mime.tar"),"application/x-7z-compressed":p("mime.sevenz"),"application/x-rar-compressed":p("mime.rar"),"text/plain":p("mime.text"),"text/html":p("mime.html"),"text/css":p("mime.css"),"text/javascript":p("mime.js"),"application/json":p("mime.json"),"application/xml":p("mime.xml"),"application/x-yaml":p("mime.yaml"),"application/octet-stream":p("mime.binary"),"application/x-msdos-program":p("mime.executable"),"inode/directory":p("mime.folder")};function Cl(l){return l?Gt[l]||l:p("mime.unknown")}function Tr(l){if(l.type==="folder")return p("mime.folder");const e=(l.mime||"").toLowerCase();if(Gt[e])return Gt[e];const n=(l.name||"").toLowerCase().split(".").pop();return n?n.toUpperCase():p("mime.file")}function Qn(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 Nr=["image/jpeg","image/png","image/gif","image/webp","image/bmp","image/tiff","image/avif","image/svg+xml"],Fr=["text/plain","text/html","text/css","text/javascript","application/json","application/xml","application/x-yaml","text/x-shellscript"],Ir=["txt","log","conf","ini","yaml","yml","json","xml","csv","sh","py","js","ts","css","html","md","markdown","cfg"],Ar=["jpg","jpeg","png","gif","webp","bmp","tiff","tif","avif","svg"];function xn(l){const e=(l.mime||"").toLowerCase(),n=(l.name||"").toLowerCase().split(".").pop();return Nr.includes(e)||Ar.includes(n)}function $n(l){const e=(l.mime||"").toLowerCase(),n=(l.name||"").toLowerCase().split(".").pop();return Fr.includes(e)||Ir.includes(n)&&n!=="md"&&n!=="markdown"}function eo(l){return(l.mime||"").toLowerCase().includes("pdf")}function to(l){const e=(l.name||"").toLowerCase();return e.endsWith(".md")||e.endsWith(".markdown")}function Mr(l){return xn(l)||eo(l)}function Dr(l){return $n(l)||to(l)}function Er(l){let e,t,n,o=Pt(l[0].size)+"",s;return{c(){e=u("span"),e.textContent="·",t=k(),n=u("span"),s=A(o),i(e,"class","meta-sep svelte-1u905d2")},m(r,a){g(r,e,a),g(r,t,a),g(r,n,a),c(n,s)},p(r,a){a&1&&o!==(o=Pt(r[0].size)+"")&&V(s,o)},d(r){r&&(y(e),y(t),y(n))}}}function Lr(l){let e,t,n;return{c(){e=u("button"),e.innerHTML=' ',i(e,"class","action-btn svelte-1u905d2"),i(e,"title",p("file.openFolder")),i(e,"aria-label",p("file.openFolder"))},m(o,s){g(o,e,s),t||(n=L(e,"click",ot(l[27])),t=!0)},p:Q,d(o){o&&y(e),t=!1,n()}}}function Pr(l){let e,t,n,o,s;return{c(){e=u("button"),e.innerHTML=' ',t=k(),n=u("button"),n.innerHTML=' ',i(e,"class","action-btn svelte-1u905d2"),i(e,"title",p("file.preview")),i(e,"aria-label",p("file.preview")),i(n,"class","action-btn svelte-1u905d2"),i(n,"title",p("file.openExternal")),i(n,"aria-label",p("file.openExternal"))},m(r,a){g(r,e,a),g(r,t,a),g(r,n,a),o||(s=[L(e,"click",ot(l[26])),L(n,"click",ot(l[8]))],o=!0)},p:Q,d(r){r&&(y(e),y(t),y(n)),o=!1,fe(s)}}}function Sl(l){let e,t,n,o,s,r,a,f,m=p("common.open")+"",b,v,_,h,w,T,S,C,I=p("file.openExternal")+"",F,N,R,O,D,M,B,j,P,H,q=p("common.rename")+"",J,G,U,K,ee,Y,X,Se=p("common.duplicate")+"",Ae,Ue,re,te,$,le,oe,Me,Be,qe=p("common.cut")+"",De,de,x,he,Te,Ge,Xe,Ve=p("common.copy")+"",be,He,Ie,ke,me,ie,_e,Ce,we,ze=p("common.delete")+"",Ee,We,ye,ve=l[5]&&Or(l);return{c(){e=u("div"),t=k(),n=u("div"),o=u("button"),s=z("svg"),r=z("path"),a=z("circle"),f=k(),b=A(m),v=k(),_=u("button"),h=z("svg"),w=z("path"),T=z("polyline"),S=z("line"),C=k(),F=A(I),N=k(),ve&&ve.c(),R=k(),O=u("div"),D=k(),M=u("button"),B=z("svg"),j=z("path"),P=z("path"),H=k(),J=A(q),G=k(),U=u("button"),K=z("svg"),ee=z("rect"),Y=z("path"),X=k(),Ae=A(Se),Ue=k(),re=u("button"),te=z("svg"),$=z("circle"),le=z("circle"),oe=z("line"),Me=z("line"),Be=k(),De=A(qe),de=k(),x=u("button"),he=z("svg"),Te=z("rect"),Ge=z("path"),Xe=k(),be=A(Ve),He=k(),Ie=u("div"),ke=k(),me=u("button"),ie=z("svg"),_e=z("polyline"),Ce=z("path"),we=k(),Ee=A(ze),i(e,"class","menu-backdrop svelte-1u905d2"),i(e,"role","presentation"),i(r,"d","M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"),i(a,"cx","12"),i(a,"cy","12"),i(a,"r","3"),i(s,"width","14"),i(s,"height","14"),i(s,"viewBox","0 0 24 24"),i(s,"fill","none"),i(s,"stroke","currentColor"),i(s,"stroke-width","2"),i(s,"stroke-linecap","round"),i(s,"stroke-linejoin","round"),i(o,"class","menu-item svelte-1u905d2"),i(o,"role","menuitem"),i(w,"d","M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"),i(T,"points","15 3 21 3 21 9"),i(S,"x1","10"),i(S,"y1","14"),i(S,"x2","21"),i(S,"y2","3"),i(h,"width","14"),i(h,"height","14"),i(h,"viewBox","0 0 24 24"),i(h,"fill","none"),i(h,"stroke","currentColor"),i(h,"stroke-width","2"),i(h,"stroke-linecap","round"),i(h,"stroke-linejoin","round"),i(_,"class","menu-item svelte-1u905d2"),i(_,"role","menuitem"),i(O,"class","menu-sep svelte-1u905d2"),i(j,"d","M12 20h9"),i(P,"d","M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4L16.5 3.5z"),i(B,"width","14"),i(B,"height","14"),i(B,"viewBox","0 0 24 24"),i(B,"fill","none"),i(B,"stroke","currentColor"),i(B,"stroke-width","2"),i(B,"stroke-linecap","round"),i(B,"stroke-linejoin","round"),i(M,"class","menu-item svelte-1u905d2"),i(M,"role","menuitem"),i(ee,"x","9"),i(ee,"y","9"),i(ee,"width","13"),i(ee,"height","13"),i(ee,"rx","2"),i(ee,"ry","2"),i(Y,"d","M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"),i(K,"width","14"),i(K,"height","14"),i(K,"viewBox","0 0 24 24"),i(K,"fill","none"),i(K,"stroke","currentColor"),i(K,"stroke-width","2"),i(K,"stroke-linecap","round"),i(K,"stroke-linejoin","round"),i(U,"class","menu-item svelte-1u905d2"),i(U,"role","menuitem"),i($,"cx","6"),i($,"cy","6"),i($,"r","3"),i(le,"cx","6"),i(le,"cy","18"),i(le,"r","3"),i(oe,"x1","20"),i(oe,"y1","4"),i(oe,"x2","8.12"),i(oe,"y2","15.88"),i(Me,"x1","8.12"),i(Me,"y1","8.12"),i(Me,"x2","20"),i(Me,"y2","20"),i(te,"width","14"),i(te,"height","14"),i(te,"viewBox","0 0 24 24"),i(te,"fill","none"),i(te,"stroke","currentColor"),i(te,"stroke-width","2"),i(te,"stroke-linecap","round"),i(te,"stroke-linejoin","round"),i(re,"class","menu-item svelte-1u905d2"),i(re,"role","menuitem"),i(Te,"x","9"),i(Te,"y","9"),i(Te,"width","13"),i(Te,"height","13"),i(Te,"rx","2"),i(Te,"ry","2"),i(Ge,"d","M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"),i(he,"width","14"),i(he,"height","14"),i(he,"viewBox","0 0 24 24"),i(he,"fill","none"),i(he,"stroke","currentColor"),i(he,"stroke-width","2"),i(he,"stroke-linecap","round"),i(he,"stroke-linejoin","round"),i(x,"class","menu-item svelte-1u905d2"),i(x,"role","menuitem"),i(Ie,"class","menu-sep svelte-1u905d2"),i(_e,"points","3 6 5 6 21 6"),i(Ce,"d","M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"),i(ie,"width","14"),i(ie,"height","14"),i(ie,"viewBox","0 0 24 24"),i(ie,"fill","none"),i(ie,"stroke","currentColor"),i(ie,"stroke-width","2"),i(ie,"stroke-linecap","round"),i(ie,"stroke-linejoin","round"),i(me,"class","menu-item menu-item-danger svelte-1u905d2"),i(me,"role","menuitem"),i(n,"class","menu svelte-1u905d2"),i(n,"role","menu")},m(ne,Ne){g(ne,e,Ne),g(ne,t,Ne),g(ne,n,Ne),c(n,o),c(o,s),c(s,r),c(s,a),c(o,f),c(o,b),c(n,v),c(n,_),c(_,h),c(h,w),c(h,T),c(h,S),c(_,C),c(_,F),c(n,N),ve&&ve.m(n,null),c(n,R),c(n,O),c(n,D),c(n,M),c(M,B),c(B,j),c(B,P),c(M,H),c(M,J),c(n,G),c(n,U),c(U,K),c(K,ee),c(K,Y),c(U,X),c(U,Ae),c(n,Ue),c(n,re),c(re,te),c(te,$),c(te,le),c(te,oe),c(te,Me),c(re,Be),c(re,De),c(n,de),c(n,x),c(x,he),c(he,Te),c(he,Ge),c(x,Xe),c(x,be),c(n,He),c(n,Ie),c(n,ke),c(n,me),c(me,ie),c(ie,_e),c(ie,Ce),c(me,we),c(me,Ee),We||(ye=[L(e,"click",ot(l[17])),L(o,"click",l[15]),L(_,"click",l[8]),L(M,"click",l[11]),L(U,"click",l[12]),L(re,"click",l[13]),L(x,"click",l[14]),L(me,"click",l[10]),L(n,"click",ot(l[25]))],We=!0)},p(ne,Ne){ne[5]&&ve.p(ne,Ne)},d(ne){ne&&(y(e),y(t),y(n)),ve&&ve.d(),We=!1,fe(ye)}}}function Or(l){let e,t,n,o,s=p("file.showInExplorer")+"",r,a,f;return{c(){e=u("button"),t=z("svg"),n=z("path"),o=k(),r=A(s),i(n,"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"),i(t,"width","14"),i(t,"height","14"),i(t,"viewBox","0 0 24 24"),i(t,"fill","none"),i(t,"stroke","currentColor"),i(t,"stroke-width","2"),i(t,"stroke-linecap","round"),i(t,"stroke-linejoin","round"),i(e,"class","menu-item svelte-1u905d2"),i(e,"role","menuitem")},m(m,b){g(m,e,b),c(e,t),c(t,n),c(e,o),c(e,r),a||(f=L(e,"click",l[9]),a=!0)},p:Q,d(m){m&&y(e),a=!1,f()}}}function jr(l){let e,t,n,o,s,r,a=l[0].name+"",f,m,b,v,_,h,w,T,S,C,I,F,N,R,O,D,M,B,j,P,H,q;n=new Zn({props:{kind:l[4],size:22}});let J=!l[5]&&Er(l);function G(Y,X){return Y[5]?Lr:Pr}let K=G(l)(l),ee=l[2]&&Sl(l);return{c(){e=u("div"),t=u("div"),nt(n.$$.fragment),o=k(),s=u("div"),r=u("div"),f=A(a),b=k(),v=u("div"),_=u("span"),_.textContent=`${l[6]}`,h=k(),J&&J.c(),w=k(),T=u("div"),K.c(),S=k(),C=u("button"),I=z("svg"),F=z("circle"),N=z("circle"),R=z("circle"),O=k(),D=u("button"),D.innerHTML=' ',B=k(),ee&&ee.c(),j=Qe(),i(t,"class","file-row-icon svelte-1u905d2"),i(r,"class","file-row-name svelte-1u905d2"),i(r,"title",m=l[0].name),i(v,"class","file-row-meta svelte-1u905d2"),i(s,"class","file-row-body svelte-1u905d2"),i(F,"cx","12"),i(F,"cy","5"),i(F,"r","2"),i(N,"cx","12"),i(N,"cy","12"),i(N,"r","2"),i(R,"cx","12"),i(R,"cy","19"),i(R,"r","2"),i(I,"width","16"),i(I,"height","16"),i(I,"viewBox","0 0 24 24"),i(I,"fill","currentColor"),i(C,"class","action-btn svelte-1u905d2"),i(C,"title",p("file.more")),i(C,"aria-label",p("file.more")),i(C,"aria-expanded",l[2]),i(D,"class","action-btn action-btn-danger svelte-1u905d2"),i(D,"title",p("common.delete")),i(D,"aria-label",p("common.delete")),i(T,"class","file-row-actions svelte-1u905d2"),i(e,"class","file-row svelte-1u905d2"),i(e,"role","button"),i(e,"tabindex","0"),i(e,"draggable","true"),i(e,"aria-label",M=l[5]?p("file.ariaFolder")+" "+l[0].name:p("file.ariaFile")+" "+l[0].name),wt(e,"file-row--selected",l[1])},m(Y,X){g(Y,e,X),c(e,t),et(n,t,null),c(e,o),c(e,s),c(s,r),c(r,f),c(s,b),c(s,v),c(v,_),c(v,h),J&&J.m(v,null),c(e,w),c(e,T),K.m(T,null),c(T,S),c(T,C),c(C,I),c(I,F),c(I,N),c(I,R),c(T,O),c(T,D),g(Y,B,X),ee&&ee.m(Y,X),g(Y,j,X),P=!0,H||(q=[L(window,"click",l[17]),L(C,"click",ot(l[16])),L(D,"click",ot(l[10])),L(e,"click",l[7]),L(e,"contextmenu",l[21]),L(e,"dragstart",l[18]),L(e,"dragover",l[19]),L(e,"drop",l[20])],H=!0)},p(Y,[X]){(!P||X&1)&&a!==(a=Y[0].name+"")&&V(f,a),(!P||X&1&&m!==(m=Y[0].name))&&i(r,"title",m),Y[5]||J.p(Y,X),K.p(Y,X),(!P||X&4)&&i(C,"aria-expanded",Y[2]),(!P||X&1&&M!==(M=Y[5]?p("file.ariaFolder")+" "+Y[0].name:p("file.ariaFile")+" "+Y[0].name))&&i(e,"aria-label",M),(!P||X&2)&&wt(e,"file-row--selected",Y[1]),Y[2]?ee?ee.p(Y,X):(ee=Sl(Y),ee.c(),ee.m(j.parentNode,j)):ee&&(ee.d(1),ee=null)},i(Y){P||(se(n.$$.fragment,Y),P=!0)},o(Y){pe(n.$$.fragment,Y),P=!1},d(Y){Y&&(y(e),y(B),y(j)),tt(n),J&&J.d(),K.d(),ee&&ee.d(Y),H=!1,fe(q)}}}function Br(l,e,t){let{item:n}=e,{selected:o=!1}=e,{onDragStart:s}=e,{onDragOver:r}=e,{onDrop:a}=e;const f=Ot(),m=Qn(n),b=n.type==="folder",v=Tr(n);let _=!1,h=null;function w(U){U.ctrlKey||U.metaKey?f("toggleSelect",n.id):U.shiftKey?f("rangeSelect",n.id):h?(clearTimeout(h),h=null,b?f("navigate",n.id):f("preview",n)):h=setTimeout(()=>{h=null,f("selectOne",n.id)},250)}function T(){f("openExternal",n.fileId)}function S(){f("showInFolder",n.id)}function C(){t(2,_=!1),f("delete",{id:n.id,type:n.type})}function I(){t(2,_=!1),f("rename",{id:n.id,name:n.name})}function F(){t(2,_=!1),f("duplicate",n.id)}function N(){t(2,_=!1),f("cut",n.id)}function R(){t(2,_=!1),f("copy",n.id)}function O(){t(2,_=!1),b?f("navigate",n.id):f("preview",n)}function D(){t(2,_=!_)}function M(){t(2,_=!1)}function B(U){s&&s(U,n.id)}function j(U){r&&b&&r(U,n.id)}function P(U){a&&b&&a(U,n.id)}function H(U){U.preventDefault(),t(2,_=!0)}function q(U){er.call(this,l,U)}const J=()=>f("preview",n),G=()=>f("navigate",n.id);return l.$$set=U=>{"item"in U&&t(0,n=U.item),"selected"in U&&t(1,o=U.selected),"onDragStart"in U&&t(22,s=U.onDragStart),"onDragOver"in U&&t(23,r=U.onDragOver),"onDrop"in U&&t(24,a=U.onDrop)},[n,o,_,f,m,b,v,w,T,S,C,I,F,N,R,O,D,M,B,j,P,H,s,r,a,q,J,G]}class zr extends ut{constructor(e){super(),ft(this,e,Br,jr,ct,{item:0,selected:1,onDragStart:22,onDragOver:23,onDrop:24})}}function Tl(l,e,t){const n=l.slice();return n[4]=e[t],n[6]=t,n}function Rr(l){let e;return{c(){e=u("span"),e.textContent="/",i(e,"class","sep svelte-csi2lb")},m(t,n){g(t,e,n)},d(t){t&&y(e)}}}function Ur(l){let e,t=l[4].name+"",n,o,s;function r(){return l[2](l[6])}return{c(){e=u("button"),n=A(t),i(e,"class","crumb crumb--link svelte-csi2lb")},m(a,f){g(a,e,f),c(e,n),o||(s=L(e,"click",r),o=!0)},p(a,f){l=a,f&1&&t!==(t=l[4].name+"")&&V(n,t)},d(a){a&&y(e),o=!1,s()}}}function Vr(l){let e,t=l[4].name+"",n;return{c(){e=u("span"),n=A(t),i(e,"class","crumb crumb--current svelte-csi2lb")},m(o,s){g(o,e,s),c(e,n)},p(o,s){s&1&&t!==(t=o[4].name+"")&&V(n,t)},d(o){o&&y(e)}}}function Nl(l){let e,t,n=l[6]>0&&Rr();function o(a,f){return a[6]===a[0].length-1?Vr:Ur}let s=o(l),r=s(l);return{c(){n&&n.c(),e=k(),r.c(),t=Qe()},m(a,f){n&&n.m(a,f),g(a,e,f),r.m(a,f),g(a,t,f)},p(a,f){s===(s=o(a))&&r?r.p(a,f):(r.d(1),r=s(a),r&&(r.c(),r.m(t.parentNode,t)))},d(a){a&&(y(e),y(t)),n&&n.d(a),r.d(a)}}}function Hr(l){let e,t=ce(l[0]),n=[];for(let o=0;os(a);return l.$$set=a=>{"crumbs"in a&&t(0,n=a.crumbs)},[n,s,r]}class lo extends ut{constructor(e){super(),ft(this,e,Wr,Hr,ct,{crumbs:0})}}function Kr(l){let e,t,n,o,s,r;return{c(){e=u("div"),t=u("p"),t.textContent=`${p("file.previewUnavailable")}`,n=k(),o=u("button"),o.textContent=`${p("file.openExternal")}`,i(o,"class","btn btn-sm svelte-1cw3u0m"),i(e,"class","preview-status svelte-1cw3u0m")},m(a,f){g(a,e,f),c(e,t),c(e,n),c(e,o),s||(r=L(o,"click",l[9]),s=!0)},p:Q,d(a){a&&y(e),s=!1,r()}}}function qr(l){let e,t;function n(r,a){return a&2&&(e=null),e==null&&(e=!!(r[1]&&r[1].startsWith("data:"))),e?Qr:Zr}let o=n(l,-1),s=o(l);return{c(){s.c(),t=Qe()},m(r,a){s.m(r,a),g(r,t,a)},p(r,a){o===(o=n(r,a))&&s?s.p(r,a):(s.d(1),s=o(r),s&&(s.c(),s.m(t.parentNode,t)))},d(r){r&&y(t),s.d(r)}}}function Gr(l){let e,t,n;return{c(){e=u("pre"),t=u("code"),n=A(l[1]),i(e,"class","preview-text svelte-1cw3u0m")},m(o,s){g(o,e,s),c(e,t),c(t,n)},p(o,s){s&2&&V(n,o[1])},d(o){o&&y(e)}}}function Xr(l){let e,t,n,o;return{c(){e=u("div"),t=u("img"),Dt(t.src,n=l[1])||i(t,"src",n),i(t,"alt",o=l[0].name),i(t,"class","preview-image svelte-1cw3u0m"),i(e,"class","preview-image-container svelte-1cw3u0m")},m(s,r){g(s,e,r),c(e,t)},p(s,r){r&2&&!Dt(t.src,n=s[1])&&i(t,"src",n),r&1&&o!==(o=s[0].name)&&i(t,"alt",o)},d(s){s&&y(e)}}}function Jr(l){let e,t,n,o,s,r,a;return{c(){e=u("div"),t=u("p"),n=A(l[3]),o=k(),s=u("button"),s.textContent=`${p("file.openExternal")}`,i(s,"class","btn btn-sm svelte-1cw3u0m"),i(e,"class","preview-status svelte-1cw3u0m")},m(f,m){g(f,e,m),c(e,t),c(t,n),c(e,o),c(e,s),r||(a=L(s,"click",l[9]),r=!0)},p(f,m){m&8&&V(n,f[3])},d(f){f&&y(e),r=!1,a()}}}function Yr(l){let e,t;return{c(){e=u("div"),t=u("p"),t.textContent=`${p("common.loading")}`,i(e,"class","preview-status svelte-1cw3u0m")},m(n,o){g(n,e,o),c(e,t)},p:Q,d(n){n&&y(e)}}}function Zr(l){let e,t,n,o,s,r;return{c(){e=u("div"),t=u("p"),t.textContent=`${p("file.pdfUnavailable")}`,n=k(),o=u("button"),o.textContent=`${p("file.openExternal")}`,i(o,"class","btn btn-sm svelte-1cw3u0m"),i(e,"class","preview-status svelte-1cw3u0m")},m(a,f){g(a,e,f),c(e,t),c(e,n),c(e,o),s||(r=L(o,"click",l[9]),s=!0)},p:Q,d(a){a&&y(e),s=!1,r()}}}function Qr(l){let e,t,n;return{c(){e=u("div"),t=u("embed"),Dt(t.src,n=l[1])||i(t,"src",n),i(t,"type","application/pdf"),i(t,"class","preview-pdf svelte-1cw3u0m"),i(e,"class","preview-pdf-container svelte-1cw3u0m")},m(o,s){g(o,e,s),c(e,t)},p(o,s){s&2&&!Dt(t.src,n=o[1])&&i(t,"src",n)},d(o){o&&y(e)}}}function xr(l){let e,t,n,o,s,r,a,f=l[0].name+"",m,b,v,_,h=Pt(l[0].size)+"",w,T,S=Cl(l[0].mime)+"",C,I,F,N,R,O,D,M,B,j,P,H;s=new Zn({props:{kind:l[8],size:18}});function q(U,K){return U[2]?Yr:U[3]?Jr:U[6]&&U[1]?Xr:U[5]&&U[1]?Gr:U[4]?qr:Kr}let J=q(l),G=J(l);return{c(){e=u("div"),t=u("div"),n=u("header"),o=u("div"),nt(s.$$.fragment),r=k(),a=u("span"),m=A(f),v=k(),_=u("div"),w=A(h),T=A(" · "),C=A(S),I=k(),F=u("div"),N=u("button"),N.innerHTML=' ',R=k(),O=u("button"),O.innerHTML=' ',D=k(),M=u("div"),G.c(),i(a,"class","preview-name svelte-1cw3u0m"),i(a,"title",b=l[0].name),i(o,"class","preview-title svelte-1cw3u0m"),i(_,"class","preview-meta svelte-1cw3u0m"),i(N,"class","action-btn svelte-1cw3u0m"),i(N,"title",p("file.openExternal")),i(N,"aria-label",p("file.openExternal")),i(O,"class","action-btn action-btn-close svelte-1cw3u0m"),i(O,"title","Close"),i(O,"aria-label","Close preview"),i(F,"class","preview-actions svelte-1cw3u0m"),i(n,"class","preview-header svelte-1cw3u0m"),i(M,"class","preview-body svelte-1cw3u0m"),i(t,"class","modal svelte-1cw3u0m"),i(e,"class","overlay svelte-1cw3u0m"),i(e,"role","dialog"),i(e,"aria-modal","true"),i(e,"aria-label",B=`Preview: ${l[0].name}`)},m(U,K){g(U,e,K),c(e,t),c(t,n),c(n,o),et(s,o,null),c(o,r),c(o,a),c(a,m),c(n,v),c(n,_),c(_,w),c(_,T),c(_,C),c(n,I),c(n,F),c(F,N),c(F,R),c(F,O),c(t,D),c(t,M),G.m(M,null),j=!0,P||(H=[L(N,"click",l[9]),L(O,"click",l[10]),L(e,"click",at(l[11]))],P=!0)},p(U,[K]){(!j||K&1)&&f!==(f=U[0].name+"")&&V(m,f),(!j||K&1&&b!==(b=U[0].name))&&i(a,"title",b),(!j||K&1)&&h!==(h=Pt(U[0].size)+"")&&V(w,h),(!j||K&1)&&S!==(S=Cl(U[0].mime)+"")&&V(C,S),J===(J=q(U))&&G?G.p(U,K):(G.d(1),G=J(U),G&&(G.c(),G.m(M,null))),(!j||K&1&&B!==(B=`Preview: ${U[0].name}`))&&i(e,"aria-label",B)},i(U){j||(se(s.$$.fragment,U),j=!0)},o(U){pe(s.$$.fragment,U),j=!1},d(U){U&&y(e),tt(s),G.d(),P=!1,fe(H)}}}function $r(l,e,t){let n,o,s,{item:r}=e,{content:a=""}=e,{loading:f=!1}=e,{error:m=""}=e;const b=Ot(),v=Qn(r);function _(S){S.key==="Escape"&&b("close")}function h(){b("openExternal",r.fileId)}Xn(()=>{window.addEventListener("keydown",_)}),Jn(()=>{window.removeEventListener("keydown",_)});const w=()=>b("close"),T=()=>b("close");return l.$$set=S=>{"item"in S&&t(0,r=S.item),"content"in S&&t(1,a=S.content),"loading"in S&&t(2,f=S.loading),"error"in S&&t(3,m=S.error)},l.$$.update=()=>{l.$$.dirty&3&&t(6,n=xn(r)&&a&&a.startsWith("data:")),l.$$.dirty&1&&t(5,o=$n(r)||to(r)),l.$$.dirty&1&&t(4,s=eo(r))},[r,a,f,m,s,o,n,b,v,h,w,T]}class es extends ut{constructor(e){super(),ft(this,e,$r,xr,ct,{item:0,content:1,loading:2,error:3})}}function ts(l){let e,t,n,o,s,r,a,f,m,b,v,_,h,w,T,S,C;return{c(){e=u("div"),t=u("div"),n=u("h3"),o=A(l[0]),s=k(),r=u("p"),a=A(l[1]),f=k(),m=u("div"),b=u("button"),v=A(l[2]),h=k(),w=u("button"),T=A(l[3]),i(n,"class","svelte-1fv6yyk"),i(r,"class","message svelte-1fv6yyk"),i(b,"class",_="btn "+(l[4]?"btn-danger":"btn-primary")+" svelte-1fv6yyk"),i(w,"class","btn svelte-1fv6yyk"),i(m,"class","actions svelte-1fv6yyk"),i(t,"class","modal svelte-1fv6yyk"),i(e,"class","overlay svelte-1fv6yyk"),i(e,"role","dialog"),i(e,"aria-modal","true"),i(e,"aria-label",l[0])},m(I,F){g(I,e,F),c(e,t),c(t,n),c(n,o),c(t,s),c(t,r),c(r,a),c(t,f),c(t,m),c(m,b),c(b,v),c(m,h),c(m,w),c(w,T),S||(C=[L(b,"click",l[6]),L(w,"click",l[7]),L(e,"click",at(l[8]))],S=!0)},p(I,[F]){F&1&&V(o,I[0]),F&2&&V(a,I[1]),F&4&&V(v,I[2]),F&16&&_!==(_="btn "+(I[4]?"btn-danger":"btn-primary")+" svelte-1fv6yyk")&&i(b,"class",_),F&8&&V(T,I[3]),F&1&&i(e,"aria-label",I[0])},i:Q,o:Q,d(I){I&&y(e),S=!1,fe(C)}}}function ls(l,e,t){let{title:n=p("common.confirm")}=e,{message:o=""}=e,{confirmText:s=p("common.delete")}=e,{cancelText:r=p("common.cancel")}=e,{danger:a=!1}=e;const f=Ot(),m=()=>f("confirm"),b=()=>f("cancel"),v=()=>f("cancel");return l.$$set=_=>{"title"in _&&t(0,n=_.title),"message"in _&&t(1,o=_.message),"confirmText"in _&&t(2,s=_.confirmText),"cancelText"in _&&t(3,r=_.cancelText),"danger"in _&&t(4,a=_.danger)},[n,o,s,r,a,f,m,b,v]}class ns extends ut{constructor(e){super(),ft(this,e,ls,ts,ct,{title:0,message:1,confirmText:2,cancelText:3,danger:4})}}function Fl(l,e,t){const n=l.slice();return n[10]=e[t],n}function os(l){let e;return{c(){e=u("span"),i(e,"class","tree-spacer")},m(t,n){g(t,e,n)},p:Q,d(t){t&&y(e)}}}function is(l){let e,t=l[1][l[10].id]?"▼":"▶",n;return{c(){e=u("span"),n=A(t),i(e,"class","tree-arrow")},m(o,s){g(o,e,s),c(e,n)},p(o,s){s&3&&t!==(t=o[1][o[10].id]?"▼":"▶")&&V(n,t)},d(o){o&&y(e)}}}function Il(l){let e,t;return e=new no({props:{nodes:l[10].children,expanded:l[1],selectedNodeId:l[2],level:l[3]+1,onSelect:l[4],onToggle:l[5],onContextMenu:l[6]}}),{c(){nt(e.$$.fragment)},m(n,o){et(e,n,o),t=!0},p(n,o){const s={};o&1&&(s.nodes=n[10].children),o&2&&(s.expanded=n[1]),o&4&&(s.selectedNodeId=n[2]),o&8&&(s.level=n[3]+1),o&16&&(s.onSelect=n[4]),o&32&&(s.onToggle=n[5]),o&64&&(s.onContextMenu=n[6]),e.$set(s)},i(n){t||(se(e.$$.fragment,n),t=!0)},o(n){pe(e.$$.fragment,n),t=!1},d(n){tt(e,n)}}}function Al(l){let e,t,n,o,s=l[10].title+"",r,a,f,m,b,v;function _(F,N){return F[10].children&&F[10].children.length>0?is:os}let h=_(l),w=h(l);function T(){return l[7](l[10])}function S(){return l[8](l[10])}function C(...F){return l[9](l[10],...F)}let I=l[1][l[10].id]&&l[10].children&&l[10].children.length>0&&Il(l);return{c(){e=u("div"),t=u("button"),w.c(),n=k(),o=u("span"),r=A(s),a=k(),I&&I.c(),f=Qe(),i(t,"class","tree-toggle"),i(o,"class","tree-label"),i(e,"class","tree-item"),Re(e,"padding-left",l[3]*16+8+"px"),wt(e,"selected",l[2]===l[10].id)},m(F,N){g(F,e,N),c(e,t),w.m(t,null),c(e,n),c(e,o),c(o,r),g(F,a,N),I&&I.m(F,N),g(F,f,N),m=!0,b||(v=[L(t,"click",T),L(t,"contextmenu",At(ss)),L(o,"click",S),L(o,"contextmenu",At(cs)),L(e,"contextmenu",At(C))],b=!0)},p(F,N){l=F,h===(h=_(l))&&w?w.p(l,N):(w.d(1),w=h(l),w&&(w.c(),w.m(t,null))),(!m||N&1)&&s!==(s=l[10].title+"")&&V(r,s),(!m||N&8)&&Re(e,"padding-left",l[3]*16+8+"px"),(!m||N&5)&&wt(e,"selected",l[2]===l[10].id),l[1][l[10].id]&&l[10].children&&l[10].children.length>0?I?(I.p(l,N),N&3&&se(I,1)):(I=Il(l),I.c(),se(I,1),I.m(f.parentNode,f)):I&&(Ye(),pe(I,1,1,()=>{I=null}),Ze())},i(F){m||(se(I),m=!0)},o(F){pe(I),m=!1},d(F){F&&(y(e),y(a),y(f)),w.d(),I&&I.d(F),b=!1,fe(v)}}}function rs(l){let e,t,n=ce(l[0]),o=[];for(let r=0;rpe(o[r],1,1,()=>{o[r]=null});return{c(){for(let r=0;rl.stopPropagation(),cs=l=>l.stopPropagation();function as(l,e,t){let{nodes:n=[]}=e,{expanded:o={}}=e,{selectedNodeId:s=""}=e,{level:r=0}=e,{onSelect:a}=e,{onToggle:f}=e,{onContextMenu:m}=e;const b=h=>f&&f(h.id),v=h=>a&&a(h),_=(h,w)=>m&&m(w,h);return l.$$set=h=>{"nodes"in h&&t(0,n=h.nodes),"expanded"in h&&t(1,o=h.expanded),"selectedNodeId"in h&&t(2,s=h.selectedNodeId),"level"in h&&t(3,r=h.level),"onSelect"in h&&t(4,a=h.onSelect),"onToggle"in h&&t(5,f=h.onToggle),"onContextMenu"in h&&t(6,m=h.onContextMenu)},[n,o,s,r,a,f,m,b,v,_]}class no extends ut{constructor(e){super(),ft(this,e,as,rs,ct,{nodes:0,expanded:1,selectedNodeId:2,level:3,onSelect:4,onToggle:5,onContextMenu:6})}}function Ml(l,e,t){const n=l.slice();return n[212]=e[t],n}function Dl(l,e,t){const n=l.slice();return n[215]=e[t],n}function El(l,e,t){const n=l.slice();return n[234]=e[t],n}function Ll(l,e,t){const n=l.slice();return n[234]=e[t],n}function Pl(l,e,t){const n=l.slice();return n[242]=e[t],n}function Ol(l,e,t){const n=l.slice();return n[234]=e[t],n}function jl(l,e,t){const n=l.slice();return n[234]=e[t],n}function Bl(l,e,t){const n=l.slice();return n[218]=e[t],n}function zl(l,e,t){const n=l.slice();return n[229]=e[t],n}function Rl(l,e,t){const n=l.slice();return n[226]=e[t],n}function Ul(l,e,t){const n=l.slice();return n[221]=e[t],n}function Vl(l,e,t){const n=l.slice();return n[218]=e[t],n}function Hl(l,e,t){const n=l.slice();return n[221]=e[t],n}function Wl(l,e,t){const n=l.slice();return n[237]=e[t],n}function Kl(l,e,t){const n=l.slice();return n[249]=e[t],n}function ql(l,e,t){const n=l.slice();return n[252]=e[t],n}function Gl(l){let e,t=l[252].label+"",n,o,s,r,a;function f(){return l[125](l[252])}return{c(){e=u("button"),n=A(t),o=k(),i(e,"class",s="nav-item "+(l[8]===l[252].id?"selected":"")+" svelte-owriro")},m(m,b){g(m,e,b),c(e,n),c(e,o),r||(a=L(e,"click",f),r=!0)},p(m,b){l=m,b[0]&1&&t!==(t=l[252].label+"")&&V(n,t),b[0]&257&&s!==(s="nav-item "+(l[8]===l[252].id?"selected":"")+" svelte-owriro")&&i(e,"class",s)},d(m){m&&y(e),r=!1,a()}}}function fs(l){let e;return{c(){e=u("div"),e.textContent=`${p("nav.noNodes")}`,i(e,"class","nav-empty svelte-owriro")},m(t,n){g(t,e,n)},p:Q,i:Q,o:Q,d(t){t&&y(e)}}}function us(l){var n;let e,t;return e=new no({props:{nodes:l[1],expanded:l[32],selectedNodeId:((n=l[9])==null?void 0:n.id)||"",onSelect:l[62],onToggle:l[92],onContextMenu:l[90]}}),{c(){nt(e.$$.fragment)},m(o,s){et(e,o,s),t=!0},p(o,s){var a;const r={};s[0]&2&&(r.nodes=o[1]),s[1]&2&&(r.expanded=o[32]),s[0]&512&&(r.selectedNodeId=((a=o[9])==null?void 0:a.id)||""),e.$set(r)},i(o){t||(se(e.$$.fragment,o),t=!0)},o(o){pe(e.$$.fragment,o),t=!1},d(o){tt(e,o)}}}function ds(l){let e;return{c(){e=u("span"),e.textContent=`${p("nav.selectPrompt")}`,i(e,"class","crumb placeholder svelte-owriro")},m(t,n){g(t,e,n)},p:Q,d(t){t&&y(e)}}}function ms(l){let e,t=ce(l[0]),n=[];for(let o=0;o0&&Yl(l);return{c(){e=u("button"),t=z("svg"),n=z("polyline"),o=z("polyline"),s=z("path"),r=k(),m&&m.c(),i(n,"points","23 4 23 10 17 10"),i(n,"class","svelte-owriro"),i(o,"points","1 20 1 14 7 14"),i(o,"class","svelte-owriro"),i(s,"d","M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15"),i(s,"class","svelte-owriro"),i(t,"width","16"),i(t,"height","16"),i(t,"viewBox","0 0 24 24"),i(t,"fill","none"),i(t,"stroke","currentColor"),i(t,"stroke-width","2"),i(t,"stroke-linecap","round"),i(t,"stroke-linejoin","round"),i(t,"class","svelte-owriro"),i(e,"class","header-sync-btn svelte-owriro"),e.disabled=l[53],i(e,"title",p("nav.syncNow"))},m(b,v){g(b,e,v),c(e,t),c(t,n),c(t,o),c(t,s),c(e,r),m&&m.m(e,null),a||(f=L(e,"click",l[124]),a=!0)},p(b,v){b[52].unpushedOps>0?m?m.p(b,v):(m=Yl(b),m.c(),m.m(e,null)):m&&(m.d(1),m=null),v[1]&4194304&&(e.disabled=b[53])},d(b){b&&y(e),m&&m.d(),a=!1,f()}}}function Yl(l){let e,t=l[52].unpushedOps+"",n;return{c(){e=u("span"),n=A(t),i(e,"class","sync-badge svelte-owriro")},m(o,s){g(o,e,s),c(e,n)},p(o,s){s[1]&2097152&&t!==(t=o[52].unpushedOps+"")&&V(n,t)},d(o){o&&y(e)}}}function Zl(l){let e,t,n,o,s,r;return{c(){e=u("div"),t=A(l[7]),n=k(),o=u("button"),o.innerHTML=' ',i(o,"class","dismiss-btn svelte-owriro"),i(o,"aria-label","Dismiss"),i(e,"class","error-banner svelte-owriro")},m(a,f){g(a,e,f),c(e,t),c(e,n),c(e,o),s||(r=[L(o,"click",ot(l[126])),L(e,"click",l[127])],s=!0)},p(a,f){f[0]&128&&V(t,a[7])},d(a){a&&y(e),s=!1,fe(r)}}}function _s(l){let e,t,n;function o(a,f){if(a[28])return gs;if(a[0].length>0)return ys;if(a[7])return ks}let s=o(l),r=s&&s(l);return{c(){e=u("div"),t=u("h2"),t.textContent=`${p("welcome.title")}`,n=k(),r&&r.c(),i(t,"class","svelte-owriro"),i(e,"class","welcome svelte-owriro")},m(a,f){g(a,e,f),c(e,t),c(e,n),r&&r.m(e,null)},p(a,f){s===(s=o(a))&&r?r.p(a,f):(r&&r.d(1),r=s&&s(a),r&&(r.c(),r.m(e,null)))},i:Q,o:Q,d(a){a&&y(e),r&&r.d()}}}function vs(l){let e,t,n,o;function s(f,m){return f[4].length===0?Ss:Cs}let r=s(l),a=r(l);return{c(){e=u("div"),t=u("div"),n=u("h2"),n.textContent=`${p("activity.title")}`,o=k(),a.c(),i(n,"class","svelte-owriro"),i(t,"class","activity-feed-header svelte-owriro"),i(e,"class","activity-feed svelte-owriro")},m(f,m){g(f,e,m),c(e,t),c(t,n),c(e,o),a.m(e,null)},p(f,m){r===(r=s(f))&&a?a.p(f,m):(a.d(1),a=r(f),a&&(a.c(),a.m(e,null)))},i:Q,o:Q,d(f){f&&y(e),a.d()}}}function hs(l){let e,t,n,o,s,r=l[3].date+"",a,f,m,b=l[3].summary&&$l(l);function v(w,T){return w[3].groups&&w[3].groups.length>0?Ns:Ts}let _=v(l),h=_(l);return{c(){e=u("div"),t=u("div"),n=u("h2"),n.textContent=`${p("today.title")}`,o=k(),s=u("span"),a=A(r),f=k(),b&&b.c(),m=k(),h.c(),i(n,"class","svelte-owriro"),i(s,"class","today-date svelte-owriro"),i(t,"class","today-header svelte-owriro"),i(e,"class","today-dashboard svelte-owriro")},m(w,T){g(w,e,T),c(e,t),c(t,n),c(t,o),c(t,s),c(s,a),c(e,f),b&&b.m(e,null),c(e,m),h.m(e,null)},p(w,T){T[0]&8&&r!==(r=w[3].date+"")&&V(a,r),w[3].summary?b?b.p(w,T):(b=$l(w),b.c(),b.m(e,m)):b&&(b.d(1),b=null),_===(_=v(w))&&h?h.p(w,T):(h.d(1),h=_(w),h&&(h.c(),h.m(e,null)))},i:Q,o:Q,d(w){w&&y(e),b&&b.d(),h.d()}}}function ws(l){let e,t,n,o,s,r,a=ce(l[60]),f=[];for(let _=0;_{b[w]=null}),Ze()),~o?(s=b[o],s?s.p(_,h):(s=b[o]=m[o](_),s.c()),se(s,1),s.m(n,null)):s=null)},i(_){r||(se(s),r=!0)},o(_){pe(s),r=!1},d(_){_&&(y(e),y(t),y(n)),je(f,_),~o&&b[o].d()}}}function bs(l){let e,t,n,o=l[12].title+"",s,r,a,f,m,b,v,_,h,w,T,S=l[12].dirty&&Tn();return{c(){e=u("div"),t=u("div"),n=u("span"),s=A(o),r=k(),S&&S.c(),a=k(),f=u("div"),m=u("button"),m.textContent=`${p("common.save")}`,b=k(),v=u("button"),v.textContent=`${p("common.close")}`,_=k(),h=u("textarea"),i(n,"class","note-title svelte-owriro"),i(m,"class","btn btn-primary svelte-owriro"),i(v,"class","btn svelte-owriro"),i(f,"class","note-editor-actions svelte-owriro"),i(t,"class","note-editor-header svelte-owriro"),i(h,"class","note-textarea svelte-owriro"),i(h,"placeholder",p("note.placeholder")),i(e,"class","note-editor svelte-owriro")},m(C,I){g(C,e,I),c(e,t),c(t,n),c(n,s),c(t,r),S&&S.m(t,null),c(t,a),c(t,f),c(f,m),c(f,b),c(f,v),c(e,_),c(e,h),ge(h,l[12].content),w||(T=[L(m,"click",l[102]),L(v,"click",l[100]),L(h,"input",l[128]),L(h,"input",l[101])],w=!0)},p(C,I){I[0]&4096&&o!==(o=C[12].title+"")&&V(s,o),C[12].dirty?S||(S=Tn(),S.c(),S.m(t,a)):S&&(S.d(1),S=null),I[0]&4096&&ge(h,C[12].content)},i:Q,o:Q,d(C){C&&y(e),S&&S.d(),w=!1,fe(T)}}}function ks(l){let e,t=p("common.error")+"",n,o,s;return{c(){e=u("p"),n=A(t),o=k(),s=A(l[7]),i(e,"class","error-text svelte-owriro")},m(r,a){g(r,e,a),c(e,n),c(e,o),c(e,s)},p(r,a){a[0]&128&&V(s,r[7])},d(r){r&&y(e)}}}function ys(l){let e,t,n;return{c(){e=u("p"),e.textContent=`${p("welcome.selectSection")}`,t=k(),n=u("p"),n.textContent=`${p("welcome.createCase")}`,i(e,"class","svelte-owriro"),i(n,"class","hint svelte-owriro")},m(o,s){g(o,e,s),g(o,t,s),g(o,n,s)},p:Q,d(o){o&&(y(e),y(t),y(n))}}}function gs(l){let e;return{c(){e=u("p"),e.textContent=`${p("common.loading")}`,i(e,"class","svelte-owriro")},m(t,n){g(t,e,n)},p:Q,d(t){t&&y(e)}}}function Cs(l){let e,t=ce(l[4]),n=[];for(let o=0;o0&&en(l),s=l[3].summary.notes>0&&tn(l),r=l[3].summary.files>0&&ln(l);return{c(){e=u("div"),o&&o.c(),t=k(),s&&s.c(),n=k(),r&&r.c(),i(e,"class","today-summary svelte-owriro")},m(a,f){g(a,e,f),o&&o.m(e,null),c(e,t),s&&s.m(e,null),c(e,n),r&&r.m(e,null)},p(a,f){a[3].summary.changedCases>0?o?o.p(a,f):(o=en(a),o.c(),o.m(e,t)):o&&(o.d(1),o=null),a[3].summary.notes>0?s?s.p(a,f):(s=tn(a),s.c(),s.m(e,n)):s&&(s.d(1),s=null),a[3].summary.files>0?r?r.p(a,f):(r=ln(a),r.c(),r.m(e,null)):r&&(r.d(1),r=null)},d(a){a&&y(e),o&&o.d(),s&&s.d(),r&&r.d()}}}function en(l){let e,t=l[3].summary.changedCases+"",n,o,s=it(l[3].summary.changedCases,p("today.plural.case_one"),p("today.plural.case_few"),p("today.plural.case_many"))+"",r;return{c(){e=u("span"),n=A(t),o=k(),r=A(s),i(e,"class","summary-chip svelte-owriro")},m(a,f){g(a,e,f),c(e,n),c(e,o),c(e,r)},p(a,f){f[0]&8&&t!==(t=a[3].summary.changedCases+"")&&V(n,t),f[0]&8&&s!==(s=it(a[3].summary.changedCases,p("today.plural.case_one"),p("today.plural.case_few"),p("today.plural.case_many"))+"")&&V(r,s)},d(a){a&&y(e)}}}function tn(l){let e,t=l[3].summary.notes+"",n,o,s=it(l[3].summary.notes,p("today.plural.note_one"),p("today.plural.note_few"),p("today.plural.note_many"))+"",r;return{c(){e=u("span"),n=A(t),o=k(),r=A(s),i(e,"class","summary-chip svelte-owriro")},m(a,f){g(a,e,f),c(e,n),c(e,o),c(e,r)},p(a,f){f[0]&8&&t!==(t=a[3].summary.notes+"")&&V(n,t),f[0]&8&&s!==(s=it(a[3].summary.notes,p("today.plural.note_one"),p("today.plural.note_few"),p("today.plural.note_many"))+"")&&V(r,s)},d(a){a&&y(e)}}}function ln(l){let e,t=l[3].summary.files+"",n,o,s=it(l[3].summary.files,p("today.plural.file_one"),p("today.plural.file_few"),p("today.plural.file_many"))+"",r;return{c(){e=u("span"),n=A(t),o=k(),r=A(s),i(e,"class","summary-chip svelte-owriro")},m(a,f){g(a,e,f),c(e,n),c(e,o),c(e,r)},p(a,f){f[0]&8&&t!==(t=a[3].summary.files+"")&&V(n,t),f[0]&8&&s!==(s=it(a[3].summary.files,p("today.plural.file_one"),p("today.plural.file_few"),p("today.plural.file_many"))+"")&&V(r,s)},d(a){a&&y(e)}}}function Ts(l){let e,t,n,o;return{c(){e=u("div"),t=u("p"),t.textContent=`${p("today.empty")}`,n=k(),o=u("p"),o.textContent=`${p("today.emptyHint")}`,i(t,"class","svelte-owriro"),i(o,"class","hint svelte-owriro"),i(e,"class","today-empty svelte-owriro")},m(s,r){g(s,e,r),c(e,t),c(e,n),c(e,o)},p:Q,d(s){s&&y(e)}}}function Ns(l){let e,t,n=ce(l[3].groups),o=[];for(let r=0;r0&&cn(l);return{c(){for(let r=0;r0?s?s.p(r,a):(s=cn(r),s.c(),s.m(t.parentNode,t)):s&&(s.d(1),s=null)},d(r){r&&(y(e),y(t)),je(o,r),s&&s.d(r)}}}function nn(l){let e,t=l[242].events.length+"",n,o,s=it(l[242].events.length,p("today.plural.event_one"),p("today.plural.event_few"),p("today.plural.event_many"))+"",r;return{c(){e=u("span"),n=A(t),o=k(),r=A(s),i(e,"class","today-case-count svelte-owriro")},m(a,f){g(a,e,f),c(e,n),c(e,o),c(e,r)},p(a,f){f[0]&8&&t!==(t=a[242].events.length+"")&&V(n,t),f[0]&8&&s!==(s=it(a[242].events.length,p("today.plural.event_one"),p("today.plural.event_few"),p("today.plural.event_many"))+"")&&V(r,s)},d(a){a&&y(e)}}}function Fs(l){let e;return{c(){e=u("div"),e.textContent=`${p("today.changedCases")}`,i(e,"class","today-events-empty svelte-owriro")},m(t,n){g(t,e,n)},p:Q,d(t){t&&y(e)}}}function Is(l){let e,t=ce(l[242].events),n=[];for(let o=0;o0?Is:Fs}let O=R(l),D=O(l);return{c(){e=u("div"),t=u("div"),n=u("span"),s=A(o),r=k(),a=u("span"),m=A(f),b=k(),I&&I.c(),v=k(),_=u("span"),w=A(h),T=k(),D.c(),i(n,"class","today-case-title svelte-owriro"),i(a,"class","today-case-type svelte-owriro"),i(_,"class","today-case-time svelte-owriro"),i(t,"class","today-case-header svelte-owriro"),i(t,"role","button"),i(t,"tabindex","0"),i(e,"class","today-case svelte-owriro")},m(M,B){g(M,e,B),c(e,t),c(t,n),c(n,s),c(t,r),c(t,a),c(a,m),c(t,b),I&&I.m(t,null),c(t,v),c(t,_),c(_,w),c(e,T),D.m(e,null),S||(C=[L(t,"click",F),L(t,"keydown",N)],S=!0)},p(M,B){l=M,B[0]&8&&o!==(o=l[242].nodeTitle+"")&&V(s,o),B[0]&8&&f!==(f=l[111](l[242].nodeKind)+"")&&V(m,f),l[242].events?I?I.p(l,B):(I=nn(l),I.c(),I.m(t,v)):I&&(I.d(1),I=null),B[0]&8&&h!==(h=xe(l[242].lastActivityAt)+"")&&V(w,h),O===(O=R(l))&&D?D.p(l,B):(D.d(1),D=O(l),D&&(D.c(),D.m(e,null)))},d(M){M&&y(e),I&&I.d(),D.d(),S=!1,fe(C)}}}function cn(l){let e,t,n,o=ce(l[3].events),s=[];for(let r=0;r0&&_n(l);const D=[Hs,Vs],M=[];function B(H,q){return H[33]?0:1}w=B(l),T=M[w]=D[w](l);let j=l[29]&&!l[31]&&hn(),P=l[37]&&wn(l);return{c(){e=u("div"),t=u("div"),n=u("button"),s=A(o),r=k(),a=u("button"),m=A(f),b=k(),v=u("button"),v.textContent=`${p("file.newFile")}`,_=k(),O&&O.c(),h=k(),T.c(),S=k(),j&&j.c(),C=k(),P&&P.c(),I=Qe(),i(n,"class","btn btn-primary svelte-owriro"),n.disabled=l[29],i(a,"class","btn svelte-owriro"),a.disabled=l[29],i(v,"class","btn svelte-owriro"),i(t,"class","tab-toolbar svelte-owriro"),i(e,"class","files-tab svelte-owriro")},m(H,q){g(H,e,q),c(e,t),c(t,n),c(n,s),c(t,r),c(t,a),c(a,m),c(t,b),c(t,v),c(t,_),O&&O.m(t,null),c(e,h),M[w].m(e,null),c(e,S),j&&j.m(e,null),g(H,C,q),P&&P.m(H,q),g(H,I,q),F=!0,N||(R=[L(n,"click",l[104]),L(a,"click",l[105]),L(v,"click",l[69])],N=!0)},p(H,q){(!F||q[0]&536870912)&&(n.disabled=H[29]),(!F||q[0]&536870912)&&(a.disabled=H[29]),H[41].items.length>0?O?O.p(H,q):(O=_n(H),O.c(),O.m(t,null)):O&&(O.d(1),O=null);let J=w;w=B(H),w===J?M[w].p(H,q):(Ye(),pe(M[J],1,1,()=>{M[J]=null}),Ze(),T=M[w],T?T.p(H,q):(T=M[w]=D[w](H),T.c()),se(T,1),T.m(e,S)),H[29]&&!H[31]?j||(j=hn(),j.c(),j.m(e,null)):j&&(j.d(1),j=null),H[37]?P?(P.p(H,q),q[1]&64&&se(P,1)):(P=wn(H),P.c(),se(P,1),P.m(I.parentNode,I)):P&&(Ye(),pe(P,1,1,()=>{P=null}),Ze())},i(H){F||(se(T),se(P),F=!0)},o(H){pe(T),pe(P),F=!1},d(H){H&&(y(e),y(C),y(I)),O&&O.d(),M[w].d(),j&&j.d(),P&&P.d(H),N=!1,fe(R)}}}function Ls(l){let e,t,n,o,s,r,a,f=l[22]&&bn(l);function m(_,h){return _[11].length===0&&!_[22]?Js:Xs}let b=m(l),v=b(l);return{c(){e=u("div"),t=u("div"),n=u("button"),n.textContent=`${p("note.add")}`,o=k(),f&&f.c(),s=k(),v.c(),i(n,"class","btn btn-primary svelte-owriro"),i(t,"class","tab-toolbar svelte-owriro"),i(e,"class","notes-tab svelte-owriro")},m(_,h){g(_,e,h),c(e,t),c(t,n),c(e,o),f&&f.m(e,null),c(e,s),v.m(e,null),r||(a=L(n,"click",l[96]),r=!0)},p(_,h){_[22]?f?f.p(_,h):(f=bn(_),f.c(),f.m(e,s)):f&&(f.d(1),f=null),b===(b=m(_))&&v?v.p(_,h):(v.d(1),v=b(_),v&&(v.c(),v.m(e,null)))},i:Q,o:Q,d(_){_&&y(e),f&&f.d(),v.d(),r=!1,a()}}}function Ps(l){let e,t,n=l[9].title+"",o,s,r,a,f,m,b=l[9].type+"",v,_,h,w,T,S=(l[9].section||"—")+"",C,I,F,N,R,O=$e(l[9].createdAt)+"",D,M,B,j,P,H,q,J,G=p("overview.newNote")+"",U,K,ee,Y,X,Se,Ae=p("overview.addFile")+"",Ue,re,te,$,le,oe,Me=p("overview.addAction")+"",Be,qe,De,de,x,he,Te,Ge=p("overview.logTime")+"",Xe,Ve,be,He,Ie,ke=l[11].length>0&&yn(l),me=l[14].length>0&&Cn(l);return{c(){e=u("div"),t=u("h2"),o=A(n),s=k(),r=u("div"),a=u("div"),f=u("span"),f.textContent=`${p("overview.type")}`,m=u("span"),v=A(b),_=k(),h=u("div"),w=u("span"),w.textContent=`${p("overview.section")}`,T=u("span"),C=A(S),I=k(),F=u("div"),N=u("span"),N.textContent=`${p("overview.created")}`,R=u("span"),D=A(O),M=k(),B=u("div"),j=u("button"),P=z("svg"),H=z("path"),q=z("path"),J=k(),U=A(G),K=k(),ee=u("button"),Y=z("svg"),X=z("path"),Se=k(),Ue=A(Ae),re=k(),te=u("button"),$=z("svg"),le=z("polygon"),oe=k(),Be=A(Me),qe=k(),De=u("button"),de=z("svg"),x=z("circle"),he=z("polyline"),Te=k(),Xe=A(Ge),Ve=k(),ke&&ke.c(),be=k(),me&&me.c(),i(t,"class","svelte-owriro"),i(f,"class","meta-label svelte-owriro"),i(m,"class","svelte-owriro"),i(a,"class","meta-item svelte-owriro"),i(w,"class","meta-label svelte-owriro"),i(T,"class","svelte-owriro"),i(h,"class","meta-item svelte-owriro"),i(N,"class","meta-label svelte-owriro"),i(R,"class","svelte-owriro"),i(F,"class","meta-item svelte-owriro"),i(r,"class","meta-grid svelte-owriro"),i(H,"d","M12 20h9"),i(H,"class","svelte-owriro"),i(q,"d","M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4L16.5 3.5z"),i(q,"class","svelte-owriro"),i(P,"width","16"),i(P,"height","16"),i(P,"viewBox","0 0 24 24"),i(P,"fill","none"),i(P,"stroke","currentColor"),i(P,"stroke-width","2"),i(P,"stroke-linecap","round"),i(P,"stroke-linejoin","round"),i(P,"class","svelte-owriro"),i(j,"class","qa-btn svelte-owriro"),i(X,"d","M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48"),i(X,"class","svelte-owriro"),i(Y,"width","16"),i(Y,"height","16"),i(Y,"viewBox","0 0 24 24"),i(Y,"fill","none"),i(Y,"stroke","currentColor"),i(Y,"stroke-width","2"),i(Y,"stroke-linecap","round"),i(Y,"stroke-linejoin","round"),i(Y,"class","svelte-owriro"),i(ee,"class","qa-btn svelte-owriro"),i(le,"points","13 2 3 14 12 14 11 22 21 10 12 10 13 2"),i(le,"class","svelte-owriro"),i($,"width","16"),i($,"height","16"),i($,"viewBox","0 0 24 24"),i($,"fill","none"),i($,"stroke","currentColor"),i($,"stroke-width","2"),i($,"stroke-linecap","round"),i($,"stroke-linejoin","round"),i($,"class","svelte-owriro"),i(te,"class","qa-btn svelte-owriro"),i(x,"cx","12"),i(x,"cy","12"),i(x,"r","10"),i(x,"class","svelte-owriro"),i(he,"points","12 6 12 12 16 14"),i(he,"class","svelte-owriro"),i(de,"width","16"),i(de,"height","16"),i(de,"viewBox","0 0 24 24"),i(de,"fill","none"),i(de,"stroke","currentColor"),i(de,"stroke-width","2"),i(de,"stroke-linecap","round"),i(de,"stroke-linejoin","round"),i(de,"class","svelte-owriro"),i(De,"class","qa-btn svelte-owriro"),i(B,"class","quick-actions svelte-owriro"),i(e,"class","overview svelte-owriro")},m(ie,_e){g(ie,e,_e),c(e,t),c(t,o),c(e,s),c(e,r),c(r,a),c(a,f),c(a,m),c(m,v),c(r,_),c(r,h),c(h,w),c(h,T),c(T,C),c(r,I),c(r,F),c(F,N),c(F,R),c(R,D),c(e,M),c(e,B),c(B,j),c(j,P),c(P,H),c(P,q),c(j,J),c(j,U),c(B,K),c(B,ee),c(ee,Y),c(Y,X),c(ee,Se),c(ee,Ue),c(B,re),c(B,te),c(te,$),c($,le),c(te,oe),c(te,Be),c(B,qe),c(B,De),c(De,de),c(de,x),c(de,he),c(De,Te),c(De,Xe),c(e,Ve),ke&&ke.m(e,null),c(e,be),me&&me.m(e,null),He||(Ie=[L(j,"click",l[130]),L(ee,"click",l[131]),L(te,"click",l[112]),L(De,"click",l[132])],He=!0)},p(ie,_e){_e[0]&512&&n!==(n=ie[9].title+"")&&V(o,n),_e[0]&512&&b!==(b=ie[9].type+"")&&V(v,b),_e[0]&512&&S!==(S=(ie[9].section||"—")+"")&&V(C,S),_e[0]&512&&O!==(O=$e(ie[9].createdAt)+"")&&V(D,O),ie[11].length>0?ke?ke.p(ie,_e):(ke=yn(ie),ke.c(),ke.m(e,be)):ke&&(ke.d(1),ke=null),ie[14].length>0?me?me.p(ie,_e):(me=Cn(ie),me.c(),me.m(e,null)):me&&(me.d(1),me=null)},i:Q,o:Q,d(ie){ie&&y(e),ke&&ke.d(),me&&me.d(),He=!1,fe(Ie)}}}function Os(l){let e,t=ce(l[5]),n=[];for(let o=0;o ',F=k(),i(n,"class","action-title svelte-owriro"),i(a,"class","action-type svelte-owriro"),i(v,"class","action-data svelte-owriro"),i(t,"class","action-info svelte-owriro"),i(S,"class","btn btn-sm svelte-owriro"),i(I,"class","btn btn-sm btn-danger svelte-owriro"),i(T,"class","action-btns svelte-owriro"),i(e,"class","action-card svelte-owriro")},m(M,B){g(M,e,B),c(e,t),c(t,n),c(n,s),c(t,r),c(t,a),c(a,m),c(t,b),c(t,v),c(v,h),c(e,w),c(e,T),c(T,S),c(T,C),c(T,I),c(e,F),N||(R=[L(S,"click",O),L(I,"click",D)],N=!0)},p(M,B){l=M,B[0]&8192&&o!==(o=l[229].title+"")&&V(s,o),B[0]&8192&&f!==(f=l[116](l[229].type)+"")&&V(m,f),B[0]&8192&&_!==(_=l[229].data+"")&&V(h,_)},d(M){M&&y(e),N=!1,fe(R)}}}function _n(l){let e,t=p("common.paste")+"",n,o,s=l[41].items.length+"",r,a,f;return{c(){e=u("button"),n=A(t),o=k(),r=A(s),i(e,"class","btn svelte-owriro")},m(m,b){g(m,e,b),c(e,n),c(e,o),c(e,r),a||(f=L(e,"click",l[74]),a=!0)},p(m,b){b[1]&1024&&s!==(s=m[41].items.length+"")&&V(r,s)},d(m){m&&y(e),a=!1,f()}}}function Vs(l){let e,t,n,o,s,r,a;const f=[Ks,Ws],m=[];function b(w,T){return w[35].length>0?0:1}e=b(l),t=m[e]=f[e](l);const v=[Gs,qs],_=[];function h(w,T){return w[36].length===0?0:1}return o=h(l),s=_[o]=v[o](l),{c(){t.c(),n=k(),s.c(),r=Qe()},m(w,T){m[e].m(w,T),g(w,n,T),_[o].m(w,T),g(w,r,T),a=!0},p(w,T){let S=e;e=b(w),e===S?m[e].p(w,T):(Ye(),pe(m[S],1,1,()=>{m[S]=null}),Ze(),t=m[e],t?t.p(w,T):(t=m[e]=f[e](w),t.c()),se(t,1),t.m(n.parentNode,n));let C=o;o=h(w),o===C?_[o].p(w,T):(Ye(),pe(_[C],1,1,()=>{_[C]=null}),Ze(),s=_[o],s?s.p(w,T):(s=_[o]=v[o](w),s.c()),se(s,1),s.m(r.parentNode,r))},i(w){a||(se(t),se(s),a=!0)},o(w){pe(t),pe(s),a=!1},d(w){w&&(y(n),y(r)),m[e].d(w),_[o].d(w)}}}function Hs(l){let e,t;return{c(){e=u("div"),t=u("p"),t.textContent=`${p("common.loading")}`,i(t,"class","svelte-owriro"),i(e,"class","empty-state svelte-owriro")},m(n,o){g(n,e,o),c(e,t)},p:Q,i:Q,o:Q,d(n){n&&y(e)}}}function Ws(l){let e,t;return e=new lo({props:{crumbs:[{name:p("file.root")}]}}),{c(){nt(e.$$.fragment)},m(n,o){et(e,n,o),t=!0},p:Q,i(n){t||(se(e.$$.fragment,n),t=!0)},o(n){pe(e.$$.fragment,n),t=!1},d(n){tt(e,n)}}}function Ks(l){let e,t,n,o,s,r,a,f=p("common.back")+"",m,b,v,_;return e=new lo({props:{crumbs:[{name:p("file.root")},...l[35]]}}),e.$on("navigate",l[137]),{c(){nt(e.$$.fragment),t=k(),n=u("button"),o=z("svg"),s=z("line"),r=z("polyline"),a=k(),m=A(f),i(s,"x1","19"),i(s,"y1","12"),i(s,"x2","5"),i(s,"y2","12"),i(s,"class","svelte-owriro"),i(r,"points","12 19 5 12 12 5"),i(r,"class","svelte-owriro"),i(o,"width","14"),i(o,"height","14"),i(o,"viewBox","0 0 24 24"),i(o,"fill","none"),i(o,"stroke","currentColor"),i(o,"stroke-width","2"),i(o,"stroke-linecap","round"),i(o,"stroke-linejoin","round"),i(o,"class","svelte-owriro"),i(n,"class","btn btn-sm back-btn svelte-owriro")},m(h,w){et(e,h,w),g(h,t,w),g(h,n,w),c(n,o),c(o,s),c(o,r),c(n,a),c(n,m),b=!0,v||(_=L(n,"click",l[65]),v=!0)},p(h,w){const T={};w[1]&16&&(T.crumbs=[{name:p("file.root")},...h[35]]),e.$set(T)},i(h){b||(se(e.$$.fragment,h),b=!0)},o(h){pe(e.$$.fragment,h),b=!1},d(h){h&&(y(t),y(n)),tt(e,h),v=!1,_()}}}function qs(l){let e,t=[],n=new Map,o,s=ce(l[36]);const r=a=>a[226].id;for(let a=0;a0?p("file.noFiles"):p("file.noFilesCase"))+"",r,a,f,m,b,v,_,h,w,T;return{c(){e=u("div"),t=u("div"),t.innerHTML=' ',n=k(),o=u("p"),r=A(s),a=k(),f=u("p"),f.textContent=`${p("file.hint")}`,m=k(),b=u("div"),v=u("button"),v.textContent=`${p("file.addFileSimple")}`,_=k(),h=u("button"),h.textContent=`${p("file.addFolderSimple")}`,i(t,"class","empty-icon svelte-owriro"),i(o,"class","svelte-owriro"),i(f,"class","hint svelte-owriro"),i(v,"class","btn btn-primary svelte-owriro"),i(h,"class","btn svelte-owriro"),i(b,"class","empty-actions svelte-owriro"),i(e,"class","empty-state svelte-owriro")},m(S,C){g(S,e,C),c(e,t),c(e,n),c(e,o),c(o,r),c(e,a),c(e,f),c(e,m),c(e,b),c(b,v),c(b,_),c(b,h),w||(T=[L(v,"click",l[104]),L(h,"click",l[105])],w=!0)},p(S,C){C[1]&16&&s!==(s=(S[35].length>0?p("file.noFiles"):p("file.noFilesCase"))+"")&&V(r,s)},i:Q,o:Q,d(S){S&&y(e),w=!1,fe(T)}}}function vn(l,e){let t,n,o;return n=new zr({props:{item:e[226],selected:e[42].includes(e[226].id),onDragStart:e[78],onDragOver:e[79],onDrop:e[80]}}),n.$on("navigate",e[138]),n.$on("preview",e[139]),n.$on("openExternal",e[140]),n.$on("showInFolder",e[141]),n.$on("delete",e[142]),n.$on("rename",e[143]),n.$on("duplicate",e[144]),n.$on("cut",e[145]),n.$on("copy",e[146]),n.$on("selectOne",e[147]),n.$on("toggleSelect",e[148]),n.$on("rangeSelect",e[149]),{key:l,first:null,c(){t=Qe(),nt(n.$$.fragment),this.first=t},m(s,r){g(s,t,r),et(n,s,r),o=!0},p(s,r){e=s;const a={};r[1]&32&&(a.item=e[226]),r[1]&2080&&(a.selected=e[42].includes(e[226].id)),n.$set(a)},i(s){o||(se(n.$$.fragment,s),o=!0)},o(s){pe(n.$$.fragment,s),o=!1},d(s){s&&y(t),tt(n,s)}}}function hn(l){let e,t;return{c(){e=u("div"),t=u("p"),t.textContent=`${p("file.scanning")}`,i(t,"class","svelte-owriro"),i(e,"class","empty-state svelte-owriro")},m(n,o){g(n,e,o),c(e,t)},d(n){n&&y(e)}}}function wn(l){let e,t;return e=new es({props:{item:l[37],content:l[38],loading:l[39],error:l[40]}}),e.$on("close",l[68]),e.$on("openExternal",l[150]),{c(){nt(e.$$.fragment)},m(n,o){et(e,n,o),t=!0},p(n,o){const s={};o[1]&64&&(s.item=n[37]),o[1]&128&&(s.content=n[38]),o[1]&256&&(s.loading=n[39]),o[1]&512&&(s.error=n[40]),e.$set(s)},i(n){t||(se(e.$$.fragment,n),t=!0)},o(n){pe(e.$$.fragment,n),t=!1},d(n){tt(e,n)}}}function bn(l){let e,t,n,o,s,r,a,f,m;return{c(){e=u("div"),t=u("input"),n=k(),o=u("div"),s=u("button"),s.textContent=`${p("common.create")}`,r=k(),a=u("button"),a.textContent=`${p("common.cancel")}`,i(t,"type","text"),i(t,"placeholder",p("note.title")),i(t,"class","svelte-owriro"),i(s,"class","btn btn-primary svelte-owriro"),i(a,"class","btn svelte-owriro"),i(o,"class","form-actions svelte-owriro"),i(e,"class","create-form svelte-owriro")},m(b,v){g(b,e,v),c(e,t),ge(t,l[23]),c(e,n),c(e,o),c(o,s),c(o,r),c(o,a),f||(m=[L(t,"input",l[134]),L(t,"keydown",l[135]),L(s,"click",l[98]),L(a,"click",l[97])],f=!0)},p(b,v){v[0]&8388608&&t.value!==b[23]&&ge(t,b[23])},d(b){b&&y(e),f=!1,fe(m)}}}function Xs(l){let e,t=ce(l[11]),n=[];for(let o=0;o0?l[2]:[{id:"",title:p("template.optionNone"),icon:""}]),r=[];for(let a=0;a0?a[2]:[{id:"",title:p("template.optionNone"),icon:""}]);let m;for(m=0;ml[171].call(h)),i(b,"class","form-group svelte-owriro"),i(S,"class","svelte-owriro"),i(N,"type","text"),i(N,"placeholder",R=l[26]==="open_url"?p("action.urlPlaceholder"):l[26]==="open_folder"||l[26]==="open_file"?p("action.pathPlaceholder"):p("action.commandPlaceholder")),i(N,"class","svelte-owriro"),i(T,"class","form-group svelte-owriro"),i(M,"class","btn btn-primary svelte-owriro"),i(j,"class","btn svelte-owriro"),i(D,"class","modal-actions svelte-owriro"),i(t,"class","modal svelte-owriro"),i(e,"class","modal-overlay svelte-owriro")},m(G,U){g(G,e,U),c(e,t),c(t,n),c(t,o),c(t,s),c(s,r),c(s,a),c(s,f),ge(f,l[25]),c(t,m),c(t,b),c(b,v),c(b,_),c(b,h);for(let K=0;K0?0:1}F=ke(l),N=Ie[F]=He[F](l);function me(W,ae){return W[9]?ps:W[8]?ms:ds}let ie=me(l),_e=ie(l),Ce=((kt=l[52])==null?void 0:kt.configured)&&Jl(l),we=l[7]&&Zl(l);const ze=[bs,ws,hs,vs,_s],Ee=[];function We(W,ae){return W[12]?0:W[9]?1:W[8]==="today"&&W[3]?2:W[8]==="activity"?3:4}le=We(l),oe=Ee[le]=ze[le](l);let ye=l[17]&&Nn(l),ve=l[21].visible&&In(l),ne=l[24]&&Dn(l),Ne=l[31]&&l[30]&&Ln(l),Le=l[48]&&On(l),Fe=l[43]&&Bn(l),Oe=l[51]&&zn(l);return{c(){var W;e=u("div"),t=u("aside"),n=u("div"),o=u("span"),o.textContent="⚒",s=k(),r=u("span"),r.textContent=`${p("nav.brand")}`,a=k(),f=u("nav"),m=u("div"),b=u("div"),b.textContent=`${p("nav.system")}`,v=k();for(let ae=0;ae{Ie[Je]=null}),Ze(),N=Ie[F],N?N.p(W,ae):(N=Ie[F]=He[F](W),N.c()),se(N,1),N.m(h,null)),(!Te||ae[1]&2097152)&&wt(q,"active",(mt=W[52])==null?void 0:mt.configured),(!Te||ae[0]&64)&&V(ee,W[6]),ie===(ie=me(W))&&_e?_e.p(W,ae):(_e.d(1),_e=ie(W),_e&&(_e.c(),_e.m(Ae,null))),(pt=W[52])!=null&&pt.configured?Ce?Ce.p(W,ae):(Ce=Jl(W),Ce.c(),Ce.m(re,null)):Ce&&(Ce.d(1),Ce=null),W[7]?we?we.p(W,ae):(we=Zl(W),we.c(),we.m(X,$)):we&&(we.d(1),we=null);let dt=le;le=We(W),le===dt?Ee[le].p(W,ae):(Ye(),pe(Ee[dt],1,1,()=>{Ee[dt]=null}),Ze(),oe=Ee[le],oe?oe.p(W,ae):(oe=Ee[le]=ze[le](W),oe.c()),se(oe,1),oe.m(X,Me)),W[17]?ye?ye.p(W,ae):(ye=Nn(W),ye.c(),ye.m(X,Be)):ye&&(ye.d(1),ye=null),W[21].visible?ve?ve.p(W,ae):(ve=In(W),ve.c(),ve.m(X,qe)):ve&&(ve.d(1),ve=null),W[24]?ne?ne.p(W,ae):(ne=Dn(W),ne.c(),ne.m(X,De)):ne&&(ne.d(1),ne=null),W[31]&&W[30]?Ne?Ne.p(W,ae):(Ne=Ln(W),Ne.c(),Ne.m(X,de)):Ne&&(Ne.d(1),Ne=null),W[48]?Le?Le.p(W,ae):(Le=On(W),Le.c(),Le.m(X,x)):Le&&(Le.d(1),Le=null),W[43]?Fe?(Fe.p(W,ae),ae[1]&4096&&se(Fe,1)):(Fe=Bn(W),Fe.c(),se(Fe,1),Fe.m(X,he)):Fe&&(Ye(),pe(Fe,1,1,()=>{Fe=null}),Ze()),W[51]?Oe?Oe.p(W,ae):(Oe=zn(W),Oe.c(),Oe.m(X,null)):Oe&&(Oe.d(1),Oe=null)},i(W){Te||(se(N),se(oe),se(Fe),Te=!0)},o(W){pe(N),pe(oe),pe(Fe),Te=!1},d(W){W&&y(e),je(be,W),Ie[F].d(),_e.d(),Ce&&Ce.d(),we&&we.d(),Ee[le].d(),ye&&ye.d(),ve&&ve.d(),ne&&ne.d(),Ne&&Ne.d(),Le&&Le.d(),Fe&&Fe.d(),Oe&&Oe.d(),Ge=!1,fe(Xe)}}}function Z(l,...e){try{if(window.go&&window.go.main&&window.go.main.App){const t=window.go.main.App[l];if(typeof t=="function")return t(...e)}}catch(t){console.error("Wails call error:",l,t)}return Promise.reject(new Error("Wails not connected: "+l))}function bt(l){return l==="note_created"||l==="file_added"||l==="folder_added"||l==="node_created"?"+":l==="file_deleted"||l==="folder_deleted"?"×":l==="file_renamed"||l==="folder_renamed"||l==="note_updated"||l==="node_updated"?"~":l==="file_copied"?"⧉":l==="file_moved"?"→":"•"}function xe(l){if(!l)return"";try{return new Date(l).toLocaleTimeString("ru-RU",{hour:"2-digit",minute:"2-digit"})}catch{return""}}function $e(l){if(!l)return"";try{return new Date(l).toLocaleDateString("ru-RU",{day:"numeric",month:"short"})}catch{return l}}function it(l,e,t,n){return l=Math.abs(l)%100,l>=5&&l<=20?n:(l%=10,l===1?e:l>=2&&l<=4?t:n)}function lc(l,e,t){let n=[],o=[],s=[],r=null,a=[],f=0,m=!0,b=[],v="",_="",h="",w=null,T="overview",S=[],C=null,I=[],F=[],N=[],R="",O="",D=!1,M="",B=null,j=null,P={visible:!1,x:0,y:0,node:null},H=!1,q="",J=!1,G="",U="open_url",K="",ee=[{id:"open_url",label:p("action.openUrl")},{id:"open_file",label:p("action.openFile")},{id:"open_folder",label:p("action.openFolder")},{id:"run_command",label:p("action.runCommand")},{id:"run_script",label:p("action.runScript")},{id:"open_terminal",label:p("action.openTerminal")},{id:"launch_app",label:p("action.launchApp")}],Y=!0,X=!1,Se=null,Ae=!1,Ue="",re={},te=!1,$=null,le=[],oe=[],Me=null,Be="",qe=!1,De="",de={items:[],mode:"copy"},x=[],he=[],Te=!1,Ge="",Xe="",Ve=!1,be=p("common.delete"),He=null,Ie=null,ke=!1,me="",ie="",_e="",Ce=!1,we=null,ze=!1,Ee="",We="",ye="",ve=0,ne="";const Ne=[{id:"overview",label:p("tab.overview")},{id:"notes",label:p("tab.notes")},{id:"files",label:p("tab.files")},{id:"actions",label:p("tab.actions")},{id:"worklog",label:p("tab.worklog")},{id:"activity",label:p("tab.activity")}];let Le=null;Xn(async()=>{try{t(6,v=await Z("VerstakVersion")||"verstak-gui/v2"),t(0,n=await Z("ListSystemViews")||[]),t(1,o=await Z("ListWorkspaceTree")||[]),t(2,s=await Z("ListEnabledTemplates")||[])}catch(d){t(7,_=String(d)),t(0,n=[{id:"today",label:p("nav.today")},{id:"inbox",label:p("nav.inbox")},{id:"activity",label:p("nav.activity")}]),t(1,o=[]),t(2,s=[])}window.runtime&&window.runtime.EventsOn&&(window.runtime.EventsOn("files-dropped",Mo),Le=()=>window.runtime.EventsOff("files-dropped")),window.addEventListener("keydown",tl),t(28,Y=!1),St()}),Jn(()=>{Le&&Le(),window.removeEventListener("keydown",tl)});async function Fe(d){t(8,h=d),t(9,w=null),t(10,T="overview"),t(11,S=[]),I=[],t(13,F=[]),t(14,N=[]),t(17,D=!1),t(7,_=""),t(3,r=null),t(4,a=[]),f=0,m=!0;try{d==="today"?t(3,r=await Z("ListTodayView")||{cases:[]}):d==="activity"&&(t(4,a=await Z("ListActivityFeed",50,0)||[]),f=a.length,m=a.length===50)}catch(E){t(7,_=String(E)),t(3,r={cases:[]}),t(4,a=[])}}async function Oe(d){t(9,w=d),t(10,T="overview"),t(11,S=[]),I=[],t(13,F=[]),t(14,N=[]),t(32,re={}),t(36,oe=[]),t(35,le=[]),t(34,$=null),t(37,Me=null),t(38,Be=""),t(42,x=[]),he=[],t(12,C=null),t(17,D=!1),t(22,H=!1),t(7,_=""),t(5,b=[]),await kt(d.id)}async function kt(d){try{t(11,S=await Z("ListNotes",d)||[])}catch{}try{I=await Z("ListFiles",d)||[]}catch{}try{t(13,F=await Z("ListActions",d)||[])}catch{}try{t(14,N=await Z("ListWorklog",d)||[])}catch{}try{t(5,b=await Z("ListActivityByNode",d,50,0)||[])}catch{}}async function W(d){t(33,te=!0);try{let E=await Z("ListItems",d)||[];E.sort((ue,Pe)=>ue.type!==Pe.type?ue.type==="folder"?-1:1:(ue.name||"").localeCompare(Pe.name||"")),t(36,oe=E)}catch{t(36,oe=[])}t(33,te=!1)}async function ae(d){if(w){try{const E=await Z("GetNodeDetail",d);E&&t(35,le=[...le,{id:d,name:E.title}])}catch{t(35,le=[...le,{id:d,name:"..."}])}t(34,$=d),await W(d)}}function Je(){if(le.length<2)t(35,le=[]),t(34,$=null),W(w.id);else{const d=le[le.length-2];t(35,le=le.slice(0,-1)),t(34,$=d.id),W(d.id)}}function dt(d){const E=le[d];t(35,le=le.slice(0,d+1)),t(34,$=E.id),W(E.id)}async function mt(d){t(37,Me=d),t(38,Be=""),t(40,De=""),t(39,qe=!0);try{Mr(d)?t(38,Be=await Z("GetFileBase64",d.fileId)||""):Dr(d)&&t(38,Be=await Z("ReadFileText",d.fileId)||"")}catch(E){t(40,De=String(E))}t(39,qe=!1)}function pt(){t(37,Me=null),t(38,Be=""),t(40,De="")}async function Ke(){const d=prompt(p("file.namePrompt"));if(!(!d||!d.trim()))try{const E=$||w.id;await Z("CreateEmptyFile",E,d.trim()),await W(E)}catch(E){t(7,_=String(E))}}async function yt(d){try{await Z("DuplicateNode",d);const E=$||w.id;await W(E)}catch(E){t(7,_=String(E))}}function Jt(d){const E=oe.find(ue=>ue.id===d);E&&Bt(E.id,E.name)}function Yt(d){t(41,de={items:[d],mode:"cut"})}function Zt(d){t(41,de={items:[d],mode:"copy"})}async function Qt(){if(de.items.length===0)return;const d=$||w.id;try{if(de.mode==="copy")for(const E of de.items)await Z("DuplicateNode",E);else for(const E of de.items)await Z("MoveNode",E,d);t(41,de={items:[],mode:"copy"}),await W(d)}catch(E){t(7,_=String(E))}}function xt(d){x.includes(d)?t(42,x=x.filter(E=>E!==d)):t(42,x=[...x,d])}function $t(d){t(42,x=[d])}function oo(){t(42,x=oe.map(d=>d.id))}function el(d){if(oe.length===0)return;const E=x.length>0?x[x.length-1]:oe[0].id,ue=oe.findIndex(rt=>rt.id===E),Pe=oe.findIndex(rt=>rt.id===d);if(ue===-1||Pe===-1)return;const Tt=Math.min(ue,Pe),Ht=Math.max(ue,Pe),Gi=oe.slice(Tt,Ht+1).map(rt=>rt.id),vl=new Set(x);Gi.forEach(rt=>vl.add(rt)),t(42,x=[...vl])}function io(){t(42,x=[])}function jt(d){return d.length>0?d:oe.map(E=>E.id)}async function ro(){const d=jt(x),E=oe.find(Pe=>Pe.id===d[0]);let ue;d.length===1&&(E==null?void 0:E.type)==="folder"?ue=p("delete.folder"):d.length===1?ue=p("delete.file"):ue=p("delete.files",{count:d.length}),gt({title:p("delete.confirmTitle"),message:p("delete.confirmMessage")+" "+ue+"?",confirmText:p("common.delete"),danger:!0,onConfirm:async()=>{for(const Tt of d)try{await Z("DeleteFileOrFolder",Tt)}catch(Ht){t(7,_=String(Ht))}t(42,x=[]);const Pe=$||w.id;await W(Pe)}})}function so(){const d=jt(x);t(41,de={items:d,mode:"cut"}),t(42,x=[])}function co(){const d=jt(x);t(41,de={items:d,mode:"copy"}),t(42,x=[])}function ao(d,E){const ue=x.includes(E)?x:[E];he=ue,d.dataTransfer.effectAllowed="move",d.dataTransfer.setData("text/plain",ue.join(","))}function fo(d,E){const ue=oe.find(Pe=>Pe.id===E);ue&&ue.type==="folder"&&(d.preventDefault(),d.dataTransfer.dropEffect="move")}async function uo(d,E){if(d.preventDefault(),he.length!==0){for(const ue of he)try{await Z("MoveNode",ue,E)}catch(Pe){t(7,_=String(Pe))}he=[],t(42,x=[]),await W($||w.id)}}function tl(d){if(T==="files"&&!(d.target.tagName==="INPUT"||d.target.tagName==="TEXTAREA"))if(d.ctrlKey||d.metaKey)d.key==="c"||d.key==="C"?(d.preventDefault(),co()):d.key==="x"||d.key==="X"?(d.preventDefault(),so()):d.key==="v"||d.key==="V"?(d.preventDefault(),Qt()):d.key==="a"||d.key==="A"?(d.preventDefault(),oo()):d.key==="o"||d.key==="O"?(d.preventDefault(),mo()):d.key==="Enter"&&(d.preventDefault(),ll());else if(d.key==="Enter")d.preventDefault(),ll();else if(d.key==="Delete"||d.key==="Backspace"){if(Me){d.preventDefault(),pt();return}if(x.length>0){d.preventDefault(),ro();return}if(d.key==="Backspace"&&le.length>0){d.preventDefault(),Je();return}}else if(d.key==="Escape"){if(Me){pt();return}if(x.length>0){io();return}}else d.key==="F2"&&(d.preventDefault(),po())}function ll(){if(x.length===1){const d=oe.find(E=>E.id===x[0]);d&&(d.type==="folder"?ae(d.id):mt(d))}}function mo(){if(x.length===1){const d=oe.find(E=>E.id===x[0]);d&&d.fileId&&Z("OpenFile",d.fileId)}}function Bt(d,E){me=d,t(49,ie=E),t(50,_e=""),t(48,ke=!0)}function po(){if(x.length===1){const d=oe.find(E=>E.id===x[0]);d&&Bt(d.id,d.name)}}async function nl(){const d=ie.trim();if(!d){t(50,_e=p("rename.emptyError"));return}try{await Z("ValidateName",d)}catch{t(50,_e=p("rename.invalidError"));return}t(48,ke=!1),me="";try{await Z("RenameNode",me,d);const E=$||w.id;await W(E)}catch(E){t(7,_=String(E))}}function _o(){t(48,ke=!1),me="",t(49,ie=""),t(50,_e="")}function vo(d){d.key==="Enter"?nl():t(50,_e="")}function gt(d){t(44,Ge=d.title||p("common.confirm")),t(45,Xe=d.message||""),t(46,Ve=d.danger!==void 0?d.danger:!0),t(47,be=d.confirmText||p("common.delete")),He=d.onConfirm||null,Ie=d.onCancel||null,t(43,Te=!0)}function ol(){t(43,Te=!1),He=null,Ie=null}function ho(){He&&He(),ol()}function wo(){Ie&&Ie(),ol()}function il(d){t(19,B=P.node),t(20,j=d),t(18,M=""),t(17,D=!0),Ct()}function bo(){t(19,B=null),t(20,j=null),t(18,M=""),t(17,D=!0)}function ko(){t(17,D=!1),t(18,M=""),t(19,B=null),t(20,j=null)}async function rl(){if(M.trim())try{const d=B?B.id:"",E=j?j.id:"";if(await Z("CreateNodeFromTemplate",d,M.trim(),E),t(17,D=!1),t(18,M=""),t(19,B=null),t(20,j=null),t(1,o=await Z("ListWorkspaceTree")||o),!d){const ue=await Z("ListWorkspaceTree")||o;t(1,o=ue)}}catch(d){t(7,_=String(d))}}function yo(d,E){t(21,P={visible:!0,x:d.clientX,y:d.clientY,node:E})}function Ct(){t(21,P={visible:!1,x:0,y:0,node:null})}function go(d){t(32,re={...re,[d]:!re[d]})}function sl(d){Bt(d.id,d.title),Ct()}function cl(d){Ct(),gt({title:p("delete.confirmTitle"),message:p("delete.confirmMessage")+" "+d.title+"?",confirmText:p("common.delete"),danger:!0,onConfirm:async()=>{try{await Z("DeleteNode",d.id),t(1,o=await Z("ListWorkspaceTree")||o),w&&w.id===d.id&&t(9,w=null)}catch(E){t(7,_=String(E))}}})}async function al(d){Ct();try{await Z("OpenNodeFolder",d.id)}catch(E){t(7,_=String(E))}}function fl(){t(22,H=!0),t(23,q="")}function Co(){t(22,H=!1),t(23,q="")}async function ul(){if(!(!q.trim()||!w))try{const d=await Z("CreateNote",w.id,q.trim());t(11,S=[...S,d&&d.id?d:{id:Date.now().toString(),title:q.trim(),createdAt:new Date().toISOString()}]),t(22,H=!1),t(23,q="")}catch{const E={id:Date.now().toString(),title:q.trim(),createdAt:new Date().toISOString()};t(11,S=[...S,E]),t(22,H=!1),t(23,q="")}}async function zt(d){if(C&&C.dirty){gt({title:p("note.unsavedTitle"),message:p("note.unsavedMessage"),confirmText:p("note.unsavedClose"),danger:!1,onConfirm:async()=>{await dl(d)}});return}await dl(d)}async function dl(d){try{const E=await Z("ReadNote",d.id);t(12,C={id:d.id,title:d.title,content:E||"",dirty:!1})}catch{t(12,C={id:d.id,title:d.title,content:"# "+d.title+`
+
+`,dirty:!1})}}function So(){if(C&&C.dirty){gt({title:p("note.unsavedTitle"),message:p("note.unsavedMessage"),confirmText:p("note.unsavedClose"),danger:!1,onConfirm:()=>{t(12,C=null)}});return}t(12,C=null)}function To(d){C&&(t(12,C.content=d.target.value,C),t(12,C.dirty=!0,C))}async function No(){if(C)try{await Z("SaveNote",C.id,C.content),t(12,C.dirty=!1,C)}catch{t(12,C.dirty=!1,C)}}async function Fo(){const d=parseInt(R,10);if(!(!O.trim()||isNaN(d)||d<=0||!w)){try{const E=await Z("CreateWorklog",w.id,O.trim(),d);t(14,N=[...N,E&&E.id?E:{id:Date.now().toString(),nodeId:w.id,summary:O.trim(),minutes:d,createdAt:new Date().toISOString()}])}catch{t(14,N=[...N,{id:Date.now().toString(),nodeId:w.id,summary:O.trim(),minutes:d,createdAt:new Date().toISOString()}])}t(16,O=""),t(15,R="")}}async function ml(){const d=await Z("PickFile");d&&await Rt(w.id,d)}async function Io(){const d=await Z("PickDirectory");d&&await Rt(w.id,d)}async function Rt(d,E){t(29,X=!0);try{const ue=await Z("PreviewImport",E);t(30,Se=ue),Ue=E,t(31,Ae=!0)}catch(ue){t(7,_=String(ue))}t(29,X=!1)}async function Ut(d){try{const E=d==="copy"?await Z("AddPathCopy",w.id,Ue):await Z("AddPathLink",w.id,Ue);t(31,Ae=!1),t(30,Se=null),t(35,le=[]),t(34,$=null),await Promise.all([kt(w.id),W(w.id)])}catch(E){t(7,_=String(E))}}function Ao(){t(31,Ae=!1),t(30,Se=null)}async function pl({id:d,type:E}){const ue=p(E==="folder"?"delete.folder":"delete.file");gt({title:p("delete.confirmTitle"),message:p("delete.confirmMessage")+" "+ue+"?",confirmText:p("common.delete"),danger:!0,onConfirm:async()=>{try{await Z("DeleteFileOrFolder",d),I=I.filter(Tt=>Tt.nodeId!==d);const Pe=$||w.id;await W(Pe)}catch(Pe){t(7,_=String(Pe))}}})}async function Mo(d){if(!d||d.length===0)return;if(!w){t(7,_=p("error.selectCaseFirst"));return}const E=d[0];await Rt(w.id,E)}function Do(d){return T===d?"tab active":"tab"}function Eo(d){return{note_created:p("event.noteCreated"),note_updated:p("event.noteUpdated"),file_added:p("event.fileAdded"),file_deleted:p("event.fileDeleted"),file_renamed:p("event.fileRenamed"),file_copied:p("event.fileCopied"),file_moved:p("event.fileMoved"),folder_added:p("event.folderAdded"),folder_deleted:p("event.folderDeleted"),folder_renamed:p("event.folderRenamed"),node_created:p("event.caseCreated"),node_updated:p("event.caseUpdated")}[d]||d}function Lo(d){return{project:p("kind.project"),client:p("kind.client"),document:p("kind.document"),recipe:p("kind.recipe"),archive:p("kind.archive"),case:p("kind.case")}[d]||d||p("kind.case")}function Po(){t(24,J=!0),t(25,G=""),t(26,U="open_url"),t(27,K="")}function Oo(){t(24,J=!1),t(25,G=""),t(27,K="")}async function Vt(){if(!(!G.trim()||!K.trim()||!w))try{const d=await Z("CreateAction",w.id,U,G.trim(),K.trim());d&&d.id&&t(13,F=[...F,d]),t(24,J=!1),t(25,G=""),t(27,K="")}catch(d){t(7,_=String(d))}}async function _l(d){try{await Z("DeleteAction",d),t(13,F=F.filter(E=>E.id!==d))}catch(E){t(7,_=String(E))}}function jo(d){const E=ee.find(ue=>ue.id===d);return E?E.label:d}async function lt(d){try{const E=await Z("GetNodeDetail",d);E&&Oe(E)}catch(E){t(7,_=String(E))}}async function St(){try{t(52,we=await Z("SyncStatus"))}catch{t(52,we={configured:!1,serverUrl:"",deviceId:"",unpushedOps:0,lastSyncAt:"",syncInterval:0})}}function Bo(){t(51,Ce=!0),t(54,Ee=(we==null?void 0:we.serverUrl)||""),t(55,We=""),t(56,ye=""),t(57,ve=(we==null?void 0:we.syncInterval)||0),t(58,ne="")}function zo(){t(51,Ce=!1),t(58,ne="")}async function Ro(){t(53,ze=!0),t(58,ne="");try{await Z("SyncConfigure",Ee,We,ye),ve>0&&await Z("SyncSetInterval",ve),t(56,ye=""),t(55,We=""),await St(),t(51,Ce=!1)}catch(d){t(58,ne="err: "+String(d))}t(53,ze=!1)}async function Uo(){t(53,ze=!0),t(58,ne="");try{await Z("SyncSetInterval",ve),t(58,ne=p("sync.settingsSaved")),await St()}catch(d){t(58,ne="err: "+String(d))}t(53,ze=!1)}async function Vo(){t(53,ze=!0),t(58,ne="");try{await Z("SyncTestConnection",Ee,We,ye),t(58,ne="connection ok")}catch(d){t(58,ne="connection failed: "+String(d))}t(53,ze=!1)}async function Ho(){t(53,ze=!0),t(58,ne="");try{await Z("SyncDisconnect"),t(58,ne="disconnected"),await St()}catch(d){t(58,ne="err: "+String(d))}t(53,ze=!1)}async function Wo(){t(53,ze=!0),t(58,ne="");try{const d=await Z("SyncNow");t(58,ne="pushed "+d.pushed+", pulled "+d.pulled+" (seq "+d.serverSequence+")"),await St()}catch(d){t(58,ne="err: "+String(d))}t(53,ze=!1)}const Ko=d=>Fe(d.id),qo=()=>t(7,_=""),Go=()=>t(7,_="");function Xo(){C.content=this.value,t(12,C)}const Jo=d=>{t(10,T=d.id),d.id==="files"&&w&&oe.length===0&&!$&&W(w.id)},Yo=()=>{t(10,T="notes"),fl()},Zo=()=>{t(10,T="files"),ml()},Qo=()=>t(10,T="worklog"),xo=d=>zt(d);function $o(){q=this.value,t(23,q)}const ei=d=>d.key==="Enter"&&ul(),ti=d=>zt(d),li=d=>{const E=d.detail;E===0?(t(35,le=[]),t(34,$=null),W(w.id)):dt(E-1)},ni=d=>ae(d.detail),oi=d=>mt(d.detail),ii=d=>Z("OpenFile",d.detail),ri=d=>Z("OpenFolder",d.detail),si=d=>pl(d.detail),ci=d=>Jt(d.detail.id),ai=d=>yt(d.detail),fi=d=>Yt(d.detail),ui=d=>Zt(d.detail),di=d=>$t(d.detail),mi=d=>xt(d.detail),pi=d=>el(d.detail),_i=d=>Z("OpenFile",d.detail),vi=d=>Z("RunAction",d.id),hi=d=>_l(d.id);function wi(){O=this.value,t(16,O)}function bi(){R=Et(this.value),t(15,R)}const ki=d=>lt(d.nodeId),yi=(d,E)=>E.key==="Enter"&<(d.nodeId),gi=d=>lt(d.nodeId),Ci=(d,E)=>E.key==="Enter"&<(d.nodeId),Si=d=>lt(d.nodeId),Ti=(d,E)=>E.key==="Enter"&<(d.nodeId),Ni=d=>lt(d.nodeId),Fi=(d,E)=>E.key==="Enter"&<(d.nodeId);function Ii(){M=this.value,t(18,M)}const Ai=d=>d.key==="Enter"&&rl(),Mi=d=>il(d),Di=()=>sl(P.node),Ei=()=>cl(P.node),Li=()=>al(P.node);function Pi(){G=this.value,t(25,G)}const Oi=d=>d.key==="Enter"&&Vt();function ji(){U=xi(this),t(26,U),t(59,ee)}function Bi(){K=this.value,t(27,K)}const zi=d=>d.key==="Enter"&&Vt(),Ri=()=>Ut("copy"),Ui=()=>Ut("link");function Vi(){ie=this.value,t(49,ie)}function Hi(){Ee=this.value,t(54,Ee)}function Wi(){We=this.value,t(55,We)}function Ki(){ye=this.value,t(56,ye)}function qi(){ve=Et(this.value),t(57,ve)}return[n,o,s,r,a,b,v,_,h,w,T,S,C,F,N,R,O,D,M,B,j,P,H,q,J,G,U,K,Y,X,Se,Ae,re,te,$,le,oe,Me,Be,qe,De,de,x,Te,Ge,Xe,Ve,be,ke,ie,_e,Ce,we,ze,Ee,We,ye,ve,ne,ee,Ne,Fe,Oe,W,ae,Je,dt,mt,pt,Ke,yt,Jt,Yt,Zt,Qt,xt,$t,el,ao,fo,uo,nl,_o,vo,ho,wo,il,bo,ko,rl,yo,Ct,go,sl,cl,al,fl,Co,ul,zt,So,To,No,Fo,ml,Io,Ut,Ao,pl,Do,Eo,Lo,Po,Oo,Vt,_l,jo,lt,Bo,zo,Ro,Uo,Vo,Ho,Wo,Ko,qo,Go,Xo,Jo,Yo,Zo,Qo,xo,$o,ei,ti,li,ni,oi,ii,ri,si,ci,ai,fi,ui,di,mi,pi,_i,vi,hi,wi,bi,ki,yi,gi,Ci,Si,Ti,Ni,Fi,Ii,Ai,Mi,Di,Ei,Li,Pi,Oi,ji,Bi,zi,Ri,Ui,Vi,Hi,Wi,Ki,qi]}class nc extends ut{constructor(e){super(),ft(this,e,lc,tc,ct,{},null,[-1,-1,-1,-1,-1,-1,-1,-1,-1])}}new nc({target:document.getElementById("app")});
diff --git a/cmd/verstak-gui/frontend-dist/index.html b/cmd/verstak-gui/frontend-dist/index.html
index 7b93f17..7e643b7 100644
--- a/cmd/verstak-gui/frontend-dist/index.html
+++ b/cmd/verstak-gui/frontend-dist/index.html
@@ -16,8 +16,8 @@
background: #13131f;
}
-
-
+
+
diff --git a/cmd/verstak-gui/frontend-dist/style.css b/cmd/verstak-gui/frontend-dist/style.css
deleted file mode 100644
index 0b9c582..0000000
--- a/cmd/verstak-gui/frontend-dist/style.css
+++ /dev/null
@@ -1,157 +0,0 @@
-:root {
- font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto",
- "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue",
- sans-serif;
- font-size: 16px;
- line-height: 24px;
- font-weight: 400;
- color-scheme: light dark;
- color: rgba(255, 255, 255, 0.87);
- background-color: rgba(27, 38, 54, 1);
- font-synthesis: none;
- text-rendering: optimizeLegibility;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- -webkit-text-size-adjust: 100%;
- user-select: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
-}
-
-@font-face {
- font-family: "Inter";
- font-style: normal;
- font-weight: 400;
- src: local(""),
- url("./Inter-Medium.ttf") format("truetype");
-}
-
-h3 {
- font-size: 3em;
- line-height: 1.1;
-}
-
-a {
- font-weight: 500;
- color: #646cff;
- text-decoration: inherit;
-}
-
-a:hover {
- color: #535bf2;
-}
-
-button {
- width: 60px;
- height: 30px;
- line-height: 30px;
- border-radius: 3px;
- border: none;
- margin: 0 0 0 20px;
- padding: 0 8px;
- cursor: pointer;
-}
-
-.result {
- height: 20px;
- line-height: 20px;
-}
-
-body {
- margin: 0;
- display: flex;
- place-items: center;
- place-content: center;
- min-width: 320px;
- min-height: 100vh;
-}
-
-.container {
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
-}
-
-h1 {
- font-size: 3.2em;
- line-height: 1.1;
-}
-
-#app {
- max-width: 1280px;
- margin: 0 auto;
- padding: 2rem;
- text-align: center;
-}
-
-.logo {
- height: 6em;
- padding: 1.5em;
- will-change: filter;
-}
-
-.logo:hover {
- filter: drop-shadow(0 0 2em #e80000aa);
-}
-
-.logo.vanilla:hover {
- filter: drop-shadow(0 0 2em #f7df1eaa);
-}
-
-.result {
- height: 20px;
- line-height: 20px;
- margin: 1.5rem auto;
- text-align: center;
-}
-
-.footer {
- margin-top: 1rem;
- align-content: center;
- text-align: center;
-}
-
-@media (prefers-color-scheme: light) {
- :root {
- color: #213547;
- background-color: #ffffff;
- }
-
- a:hover {
- color: #747bff;
- }
-
- button {
- background-color: #f9f9f9;
- }
-}
-
-
-.input-box .btn:hover {
- background-image: linear-gradient(to top, #cfd9df 0%, #e2ebf0 100%);
- color: #333333;
-}
-
-.input-box .input {
- border: none;
- border-radius: 3px;
- outline: none;
- height: 30px;
- line-height: 30px;
- padding: 0 10px;
- color: black;
- background-color: rgba(240, 240, 240, 1);
- -webkit-font-smoothing: antialiased;
-}
-
-.input-box .input:hover {
- border: none;
- background-color: rgba(255, 255, 255, 1);
-}
-
-.input-box .input:focus {
- border: none;
- background-color: rgba(255, 255, 255, 1);
-}
\ No newline at end of file
diff --git a/cmd/verstak-gui/wails.json b/cmd/verstak-gui/wails.json
new file mode 100644
index 0000000..7bd261e
--- /dev/null
+++ b/cmd/verstak-gui/wails.json
@@ -0,0 +1,12 @@
+{
+ "name": "verstak-gui",
+ "assetdir": "frontend/dist",
+ "frontend:install": "npm install",
+ "frontend:build": "npm run build",
+ "frontend:dev:watcher": "npm run dev",
+ "frontend:dev:serverUrl": "http://localhost:5173",
+ "wailsjsdir": "frontend/wailsjs",
+ "version": "2",
+ "outputfilename": "verstak-gui",
+ "projectdir": "cmd/verstak-gui"
+}
diff --git a/wails.json b/wails.json
new file mode 100644
index 0000000..7bd261e
--- /dev/null
+++ b/wails.json
@@ -0,0 +1,12 @@
+{
+ "name": "verstak-gui",
+ "assetdir": "frontend/dist",
+ "frontend:install": "npm install",
+ "frontend:build": "npm run build",
+ "frontend:dev:watcher": "npm run dev",
+ "frontend:dev:serverUrl": "http://localhost:5173",
+ "wailsjsdir": "frontend/wailsjs",
+ "version": "2",
+ "outputfilename": "verstak-gui",
+ "projectdir": "cmd/verstak-gui"
+}