diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000000000000000000000000000000000000..818d649bf21cdef29b21f885c8f770f9baa1714e --- /dev/null +++ b/.gitattributes @@ -0,0 +1,31 @@ +*.7z filter=lfs diff=lfs merge=lfs -text +*.arrow filter=lfs diff=lfs merge=lfs -text +*.bin filter=lfs diff=lfs merge=lfs -text +*.bz2 filter=lfs diff=lfs merge=lfs -text +*.ftz filter=lfs diff=lfs merge=lfs -text +*.gz filter=lfs diff=lfs merge=lfs -text +*.h5 filter=lfs diff=lfs merge=lfs -text +*.joblib filter=lfs diff=lfs merge=lfs -text +*.lfs.* filter=lfs diff=lfs merge=lfs -text +*.model filter=lfs diff=lfs merge=lfs -text +*.msgpack filter=lfs diff=lfs merge=lfs -text +*.npy filter=lfs diff=lfs merge=lfs -text +*.npz filter=lfs diff=lfs merge=lfs -text +*.onnx filter=lfs diff=lfs merge=lfs -text +*.ot filter=lfs diff=lfs merge=lfs -text +*.parquet filter=lfs diff=lfs merge=lfs -text +*.pickle filter=lfs diff=lfs merge=lfs -text +*.pkl filter=lfs diff=lfs merge=lfs -text +*.pb filter=lfs diff=lfs merge=lfs -text +*.pt filter=lfs diff=lfs merge=lfs -text +*.pth filter=lfs diff=lfs merge=lfs -text +*.rar filter=lfs diff=lfs merge=lfs -text +saved_model/**/* filter=lfs diff=lfs merge=lfs -text +*.tar.* filter=lfs diff=lfs merge=lfs -text +*.tflite filter=lfs diff=lfs merge=lfs -text +*.tgz filter=lfs diff=lfs merge=lfs -text +*.wasm filter=lfs diff=lfs merge=lfs -text +*.xz filter=lfs diff=lfs merge=lfs -text +*.zip filter=lfs diff=lfs merge=lfs -text +*.zst filter=lfs diff=lfs merge=lfs -text +*tfevents* filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..41390fe369cac2a131d219c42d69bf3f6d18eff3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,19 @@ +.DS_Store +node_modules +/build +/.svelte-kit +/package +.env +.env.* +!.env.example + +# Ignore files for PNPM, NPM and YARN +pnpm-lock.yaml +package-lock.json +yarn.lock +venv/ +__pycache__/ +flagged/ +data +data.db +data.json diff --git a/Makefile b/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..7c9311e7f678f4d0f0f19ac5a13b6f01d667be28 --- /dev/null +++ b/Makefile @@ -0,0 +1,11 @@ +build-client: + cd frontend && npm install && PUBLIC_DEV_MODE=PROD npm run build && rm -rf ../static && cp -r build/ ../static/ +build-dev: + cd frontend && npm install && PUBLIC_DEV_MODE=DEV npm run build-dev && rm -rf ../static && cp -r build/ ../static/ +run-front-dev: + cd frontend && npm install && PUBLIC_DEV_MODE=DEV npm run dev +run-dev: + rm -rf .data/ && FLASK_DEBUG=development python app.py +run-prod: + python app.py +build-all: run-prod \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000000000000000000000000000000000000..46a28699a8061962b46da59a3856cf75eab2f382 --- /dev/null +++ b/README.md @@ -0,0 +1,14 @@ +--- +title: Sd Color Palette Generator +emoji: 📖🎨⚙️ +colorFrom: yellow +colorTo: gray +sdk: gradio +sdk_version: 3.3 +app_file: run.py +fullWidth: true +pinned: false +duplicated_from: huggingface-projects/color-palette-generator-sd +--- + +Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference diff --git a/app.py b/app.py new file mode 100644 index 0000000000000000000000000000000000000000..cfc8ba330a0b2b4d89be191ededb1d03475ee7ae --- /dev/null +++ b/app.py @@ -0,0 +1,163 @@ +import os +from pathlib import Path +import json +from flask import Flask, request, jsonify, g +from flask_expects_json import expects_json +from flask_cors import CORS +from PIL import Image +from huggingface_hub import Repository +from flask_apscheduler import APScheduler +import shutil +import sqlite3 +import subprocess +from jsonschema import ValidationError + +MODE = os.environ.get('FLASK_ENV', 'production') +IS_DEV = MODE == 'development' +app = Flask(__name__, static_url_path='/static') +app.config['JSONIFY_PRETTYPRINT_REGULAR'] = False + +schema = { + "type": "object", + "properties": { + "prompt": {"type": "string"}, + "images": { + "type": "array", + "items": { + "type": "object", + "minProperties": 2, + "maxProperties": 2, + "properties": { + "colors": { + "type": "array", + "items": { + "type": "string" + }, + "maxItems": 5, + "minItems": 5 + }, + "imgURL": {"type": "string"}} + } + } + }, + "minProperties": 2, + "maxProperties": 2 +} + +CORS(app) + +DB_FILE = Path("./data.db") +TOKEN = os.environ.get('HUGGING_FACE_HUB_TOKEN') +repo = Repository( + local_dir="data", + repo_type="dataset", + clone_from="huggingface-projects/color-palettes-sd", + use_auth_token=TOKEN +) +repo.git_pull() +# copy db on db to local path +shutil.copyfile("./data/data.db", DB_FILE) + +db = sqlite3.connect(DB_FILE) +try: + data = db.execute("SELECT * FROM palettes").fetchall() + if IS_DEV: + print(f"Loaded {len(data)} palettes from local db") + db.close() +except sqlite3.OperationalError: + db.execute( + 'CREATE TABLE palettes (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, data json, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL)') + db.commit() + + +def get_db(): + db = getattr(g, '_database', None) + if db is None: + db = g._database = sqlite3.connect(DB_FILE) + db.row_factory = sqlite3.Row + return db + + +@app.teardown_appcontext +def close_connection(exception): + db = getattr(g, '_database', None) + if db is not None: + db.close() + + +def update_repository(): + repo.git_pull() + # copy db on db to local path + shutil.copyfile(DB_FILE, "./data/data.db") + + with sqlite3.connect("./data/data.db") as db: + db.row_factory = sqlite3.Row + palettes = db.execute("SELECT * FROM palettes").fetchall() + data = [{'id': row['id'], 'data': json.loads( + row['data']), 'created_at': row['created_at']} for row in palettes] + + with open('./data/data.json', 'w') as f: + json.dump(data, f, separators=(',', ':')) + + print("Updating repository") + subprocess.Popen( + "git add . && git commit --amend -m 'update' && git push --force", cwd="./data", shell=True) + repo.push_to_hub(blocking=False) + + +@app.route('/') +def index(): + return app.send_static_file('index.html') + + +@app.route('/force_push') +def push(): + if (request.headers['token'] == TOKEN): + update_repository() + return jsonify({'success': True}) + else: + return "Error", 401 + + +def getAllData(): + palettes = get_db().execute("SELECT * FROM palettes").fetchall() + data = [{'id': row['id'], 'data': json.loads( + row['data']), 'created_at': row['created_at']} for row in palettes] + return data + + +@app.route('/data') +def getdata(): + return jsonify(getAllData()) + + +@app.route('/new_palette', methods=['POST']) +@expects_json(schema) +def create(): + data = g.data + db = get_db() + cursor = db.cursor() + cursor.execute("INSERT INTO palettes(data) VALUES (?)", [json.dumps(data)]) + db.commit() + return jsonify(getAllData()) + + +@app.errorhandler(400) +def bad_request(error): + if isinstance(error.description, ValidationError): + original_error = error.description + return jsonify({'error': original_error.message}), 400 + return error + + +if __name__ == '__main__': + if not IS_DEV: + print("Starting scheduler -- Running Production") + scheduler = APScheduler() + scheduler.add_job(id='Update Dataset Repository', + func=update_repository, trigger='interval', hours=1) + scheduler.start() + else: + print("Not Starting scheduler -- Running Development") + app.run(host='0.0.0.0', port=int( + os.environ.get('PORT', 7860)), debug=True, use_reloader=IS_DEV) diff --git a/extract.py b/extract.py new file mode 100644 index 0000000000000000000000000000000000000000..5029801905de5650d855e593bd6d8e1fb71accbf --- /dev/null +++ b/extract.py @@ -0,0 +1,31 @@ +from colorthief import ColorThief +from pathlib import Path +import json +from PIL import Image + + +images_path = Path('frontend/static/images') +images = images_path.glob("*.[jpeg jpg png]*") +print(images) +data = {} +for image in images: + print(image.stem) + image_pil = Image.open(image) + color_thief = ColorThief(image) + image_pil.save(Path.joinpath(images_path, (image.stem + ".jpg")), optimize=True, quality=95) + prompt = image.stem.split("-")[2] + try: + type(data[prompt]) == list + except: + data[prompt] = [] + + colors = color_thief.get_palette(color_count=5, quality=1) + colors_hex = ['#%02x%02x%02x' % (color) for color in colors] + data[prompt].append({ + "colors": colors_hex, + "imgURL": "static/images/" + image.stem + ".jpg" + }) +prompts = [{"prompt": prompt, "images": values} + for (prompt, values) in data.items()] +with open('frontend/static/data.json', 'w') as f: + json.dump(prompts, f) diff --git a/frontend/.env.example b/frontend/.env.example new file mode 100644 index 0000000000000000000000000000000000000000..6bb246efee45ae5e1243614ec92f70f881c80fc2 --- /dev/null +++ b/frontend/.env.example @@ -0,0 +1,2 @@ +PUBLIC_WS_ENDPOINT="wss://spaces.huggingface.tech/stabilityai/stable-diffusion-1/queue/join" +PUBLIC_API="" \ No newline at end of file diff --git a/frontend/.eslintignore b/frontend/.eslintignore new file mode 100644 index 0000000000000000000000000000000000000000..38972655faff07d2cc0383044bbf9f43b22c2248 --- /dev/null +++ b/frontend/.eslintignore @@ -0,0 +1,13 @@ +.DS_Store +node_modules +/build +/.svelte-kit +/package +.env +.env.* +!.env.example + +# Ignore files for PNPM, NPM and YARN +pnpm-lock.yaml +package-lock.json +yarn.lock diff --git a/frontend/.eslintrc.cjs b/frontend/.eslintrc.cjs new file mode 100644 index 0000000000000000000000000000000000000000..3ccf435f02ce260ecb9b59ecfbb042c0dff1ea26 --- /dev/null +++ b/frontend/.eslintrc.cjs @@ -0,0 +1,20 @@ +module.exports = { + root: true, + parser: '@typescript-eslint/parser', + extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended', 'prettier'], + plugins: ['svelte3', '@typescript-eslint'], + ignorePatterns: ['*.cjs'], + overrides: [{ files: ['*.svelte'], processor: 'svelte3/svelte3' }], + settings: { + 'svelte3/typescript': () => require('typescript') + }, + parserOptions: { + sourceType: 'module', + ecmaVersion: 2020 + }, + env: { + browser: true, + es2017: true, + node: true + } +}; diff --git a/frontend/.gitignore b/frontend/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..c24b60bf42cdf67f4d227ea610bae07f26d74b49 --- /dev/null +++ b/frontend/.gitignore @@ -0,0 +1,12 @@ +.DS_Store +node_modules +/build +/.svelte-kit +/package +.env +.env.* +!.env.example +.vercel +.output +venv/ +__pycache__/ \ No newline at end of file diff --git a/frontend/.npmrc b/frontend/.npmrc new file mode 100644 index 0000000000000000000000000000000000000000..b6f27f135954640c8cc5bfd7b8c9922ca6eb2aad --- /dev/null +++ b/frontend/.npmrc @@ -0,0 +1 @@ +engine-strict=true diff --git a/frontend/.prettierignore b/frontend/.prettierignore new file mode 100644 index 0000000000000000000000000000000000000000..38972655faff07d2cc0383044bbf9f43b22c2248 --- /dev/null +++ b/frontend/.prettierignore @@ -0,0 +1,13 @@ +.DS_Store +node_modules +/build +/.svelte-kit +/package +.env +.env.* +!.env.example + +# Ignore files for PNPM, NPM and YARN +pnpm-lock.yaml +package-lock.json +yarn.lock diff --git a/frontend/.prettierrc b/frontend/.prettierrc new file mode 100644 index 0000000000000000000000000000000000000000..d177cd62dd136ec70ff54638f5a17be7ed277ad0 --- /dev/null +++ b/frontend/.prettierrc @@ -0,0 +1,8 @@ +{ + "useTabs": true, + "singleQuote": true, + "trailingComma": "none", + "printWidth": 100, + "pluginSearchDirs": ["."], + "overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }] +} diff --git a/frontend/README.md b/frontend/README.md new file mode 100644 index 0000000000000000000000000000000000000000..5c91169b0ca6508bb24301c957a9edea5abf2b01 --- /dev/null +++ b/frontend/README.md @@ -0,0 +1,38 @@ +# create-svelte + +Everything you need to build a Svelte project, powered by [`create-svelte`](https://github.com/sveltejs/kit/tree/master/packages/create-svelte). + +## Creating a project + +If you're seeing this, you've probably already done this step. Congrats! + +```bash +# create a new project in the current directory +npm create svelte@latest + +# create a new project in my-app +npm create svelte@latest my-app +``` + +## Developing + +Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server: + +```bash +npm run dev + +# or start the server and open the app in a new browser tab +npm run dev -- --open +``` + +## Building + +To create a production version of your app: + +```bash +npm run build +``` + +You can preview the production build with `npm run preview`. + +> To deploy your app, you may need to install an [adapter](https://kit.svelte.dev/docs/adapters) for your target environment. diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000000000000000000000000000000000000..053771462846039fdf47c29802965cfb82b140ae --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,45 @@ +{ + "name": "frontend", + "version": "0.0.1", + "scripts": { + "dev": "NODE_ENV=development vite --config vite.config.dev.ts dev", + "build-dev": "vite build --mode development", + "build": "vite build", + "preview": "vite preview", + "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", + "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", + "lint": "prettier --check . && eslint .", + "format": "prettier --write ." + }, + "devDependencies": { + "@sveltejs/adapter-static": "^1.0.0-next.43", + "@sveltejs/kit": "next", + "@tailwindcss/forms": "^0.5.3", + "@tailwindcss/line-clamp": "^0.4.2", + "@types/cookie": "^0.5.1", + "@types/d3-color": "^3.1.0", + "@typescript-eslint/eslint-plugin": "^5.27.0", + "@typescript-eslint/parser": "^5.27.0", + "autoprefixer": "^10.4.11", + "d3-color": "^3.1.0", + "eslint": "^8.16.0", + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-svelte3": "^4.0.0", + "postcss": "^8.4.16", + "prettier": "^2.6.2", + "prettier-plugin-svelte": "^2.7.0", + "svelte": "^3.46.0", + "svelte-check": "^2.7.1", + "svelte-preprocess": "^4.10.7", + "tailwindcss": "^3.1.8", + "tslib": "^2.3.1", + "typescript": "^4.7.4", + "vite": "^3.1.0" + }, + "type": "module", + "dependencies": { + "@fontsource/fira-mono": "^4.5.0", + "quantize": "^1.0.2", + "scroll-into-view-if-needed": "^2.2.29" + } +} diff --git a/frontend/postcss.config.cjs b/frontend/postcss.config.cjs new file mode 100644 index 0000000000000000000000000000000000000000..33ad091d26d8a9dc95ebdf616e217d985ec215b8 --- /dev/null +++ b/frontend/postcss.config.cjs @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/frontend/src/app.css b/frontend/src/app.css new file mode 100644 index 0000000000000000000000000000000000000000..bd6213e1dfe6b0a79ce7d8b37d0d2dc70f0250bb --- /dev/null +++ b/frontend/src/app.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; \ No newline at end of file diff --git a/frontend/src/app.d.ts b/frontend/src/app.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..a7a0dde382b64c545272190b4ddb1866350d184d --- /dev/null +++ b/frontend/src/app.d.ts @@ -0,0 +1,15 @@ +// See https://kit.svelte.dev/docs/types#app +// for information about these interfaces +// and what to do when importing types + +declare global { + namespace App { + // interface Locals {} + // interface PageData {} + // interface PageError {} + // interface Platform {} + interface Window { + parentIFrame: unknown; + } + } +} diff --git a/frontend/src/app.html b/frontend/src/app.html new file mode 100644 index 0000000000000000000000000000000000000000..297a734845729e1e41885f95394198203cec83e6 --- /dev/null +++ b/frontend/src/app.html @@ -0,0 +1,13 @@ + + + + + + + + %sveltekit.head% + + +
%sveltekit.body%
+ + diff --git a/frontend/src/lib/ArrowLeft.svelte b/frontend/src/lib/ArrowLeft.svelte new file mode 100644 index 0000000000000000000000000000000000000000..1a2835b97e3182e323ce1111e888d8efcfd699d8 --- /dev/null +++ b/frontend/src/lib/ArrowLeft.svelte @@ -0,0 +1,13 @@ + diff --git a/frontend/src/lib/ArrowRight.svelte b/frontend/src/lib/ArrowRight.svelte new file mode 100644 index 0000000000000000000000000000000000000000..f9b0d433ef4e233e681f88c1a5a1e81a110a36f8 --- /dev/null +++ b/frontend/src/lib/ArrowRight.svelte @@ -0,0 +1,13 @@ + diff --git a/frontend/src/lib/ColorPalette.svelte b/frontend/src/lib/ColorPalette.svelte new file mode 100644 index 0000000000000000000000000000000000000000..968b8a2acf0296e3f4c55c1befcb2978881b1809 --- /dev/null +++ b/frontend/src/lib/ColorPalette.svelte @@ -0,0 +1,50 @@ + + +
+
+ {#each colors as color, i} +
copyStringToClipboard(color.formatHex(), i)} + > + + + + {isCopying === i ? 'copied' : color.formatHex()} +
+ {/each} +
+
diff --git a/frontend/src/lib/Palette.svelte b/frontend/src/lib/Palette.svelte new file mode 100644 index 0000000000000000000000000000000000000000..928bdd19128854a8fd36a2e625b96cfb3eda370a --- /dev/null +++ b/frontend/src/lib/Palette.svelte @@ -0,0 +1,92 @@ + + +
+
+

{prompt}

+
+
+ {#if colors} + + {/if} +
+
+
+ {prompt} +
+ {#each promptData.images as image, i} +
+
+
+
+
+ + +
+
+
+ + diff --git a/frontend/src/lib/store.ts b/frontend/src/lib/store.ts new file mode 100644 index 0000000000000000000000000000000000000000..a07350e7b3bb62e71d7142b7542f7b56c435ac63 --- /dev/null +++ b/frontend/src/lib/store.ts @@ -0,0 +1,3 @@ +import { writable } from 'svelte/store'; +export const loadingState = writable(''); +export const isLoading = writable(false); diff --git a/frontend/src/lib/types.ts b/frontend/src/lib/types.ts new file mode 100644 index 0000000000000000000000000000000000000000..71877a8977e5fd5190f3fdcb5ea3c8bc7a90b731 --- /dev/null +++ b/frontend/src/lib/types.ts @@ -0,0 +1,15 @@ +import type { Color } from 'd3-color'; + +export interface ColorsImage { + colors: Color[]; + imgURL: string; +} +export interface ColorsPrompt { + prompt: string; + images: ColorsImage[]; +} + +export interface LoadingState { + loadingMessage: string; + isLoading: boolean; +} diff --git a/frontend/src/lib/utils.ts b/frontend/src/lib/utils.ts new file mode 100644 index 0000000000000000000000000000000000000000..4d555a165545398d9aba9650f84fe3dbf98587df --- /dev/null +++ b/frontend/src/lib/utils.ts @@ -0,0 +1,118 @@ +import quantize from 'quantize'; +import * as d3 from 'd3-color'; +import type { Color } from 'd3-color'; +import { dev } from '$app/environment'; + +export function randomSeed() { + return BigInt(13248873089935215612 & (((1 << 63) - 1) * Math.random())); +} + +function sortColors(colors: Color[]): Color[] { + const reverse = true; + return colors + .map((color) => d3.hcl(color)) + .sort((a, b) => { + const aa = a.h; + const bb = b.h; + + return !reverse ? aa - bb || isNaN(aa) - isNaN(bb) : bb - aa || isNaN(bb) - isNaN(aa); + }); +} + +function createPixelArray(imgData: Uint8ClampedArray, pixelCount: number, quality: number) { + // from https://github.com/lokesh/color-thief + const pixels = imgData; + const pixelArray = []; + + for (let i = 0, offset, r, g, b, a; i < pixelCount; i = i + quality) { + offset = i * 4; + r = pixels[offset + 0]; + g = pixels[offset + 1]; + b = pixels[offset + 2]; + a = pixels[offset + 3]; + + // If pixel is mostly opaque and not white + if (typeof a === 'undefined' || a >= 125) { + if (!(r > 250 && g > 250 && b > 250)) { + pixelArray.push([r, g, b]); + } + } + } + return pixelArray; +} + +export function extractPalette( + base64image: string, + colorCount = 5, + quality = 1 +): Promise<{ colors: Color[]; imgBlob: Blob }> { + return new Promise((resolve) => { + const img = new Image(); + img.onload = async () => { + const w = img.width; + const h = img.height; + const canvas = document.createElement('canvas'); + canvas.width = w; + canvas.height = h; + const ctx = canvas.getContext('2d') as CanvasRenderingContext2D; + ctx.drawImage(img, 0, 0, w, h); + const imageData = ctx.getImageData(0, 0, w, h); + const pixelArray = createPixelArray(imageData.data, w * h, quality); + const cmap = quantize(pixelArray, colorCount); + const colors: number[][] = cmap.palette(); + const tempCanvas = document.createElement('canvas'); + tempCanvas.width = w / 5; + tempCanvas.height = h / 5; + const tempCtx = tempCanvas.getContext('2d') as CanvasRenderingContext2D; + tempCtx.drawImage(img, 0, 0, w, h, 0, 0, w / 5, h / 5); + + const imgBlob: Blob = await new Promise((_resolve) => + tempCanvas.toBlob(_resolve, 'image/jpeg', 0.8) + ); + const colorsRGB = colors.map((color) => d3.rgb(...(color as [number, number, number]))); + resolve({ + colors: sortColors(colorsRGB), + imgBlob + }); + }; + img.src = base64image; + }); +} + +export async function uploadImage(imagBlob: Blob, prompt: string): string { + // simple regex slugify string for file name + const promptSlug = slugify(prompt); + const UPLOAD_URL = dev ? 'moon/uploads' : 'https://huggingface.co/uploads'; + + const hash = crypto.randomUUID().split('-')[0]; + const fileName = `color-palette-${hash}-${promptSlug}.jpeg`; + + const file = new File([imagBlob], fileName, { type: 'image/jpeg' }); + + console.log('uploading image', file); + + const response = await fetch(UPLOAD_URL, { + method: 'POST', + headers: { + 'Content-Type': file.type, + 'X-Requested-With': 'XMLHttpRequest' + }, + body: file /// <- File inherits from Blob + }); + const url = await response.text(); + + console.log('uploaded images', url); + return url; +} + +function slugify(text: string) { + if (!text) return ''; + return text + .toString() + .toLowerCase() + .replace(/\s+/g, '-') + .replace(/[^\w\-]+/g, '') + .replace(/\-\-+/g, '-') + .replace(/^-+/, '') + .replace(/-+$/, ''); +} diff --git a/frontend/src/routes/+layout.svelte b/frontend/src/routes/+layout.svelte new file mode 100644 index 0000000000000000000000000000000000000000..2e511e004988ec574f1b3d5406d22bb9d4f558cd --- /dev/null +++ b/frontend/src/routes/+layout.svelte @@ -0,0 +1,5 @@ + + + diff --git a/frontend/src/routes/+layout.ts b/frontend/src/routes/+layout.ts new file mode 100644 index 0000000000000000000000000000000000000000..189f71e2e1b31d4e92a0493e33539bdd5128d987 --- /dev/null +++ b/frontend/src/routes/+layout.ts @@ -0,0 +1 @@ +export const prerender = true; diff --git a/frontend/src/routes/+page.svelte b/frontend/src/routes/+page.svelte new file mode 100644 index 0000000000000000000000000000000000000000..03328f4aa69a4919626d5910cb516f79f4386438 --- /dev/null +++ b/frontend/src/routes/+page.svelte @@ -0,0 +1,307 @@ + + +
+

Palette generation with Stable Diffusion

+

+ Original ideas: + + + Matt DesLauriers + , + dribnet +

+
+
generatePalette(prompt)}> + + +
+ {#if $loadingState} +

{$loadingState}

+ {#if $isLoading} + + + + {/if} + {/if} +
+ +
+
+ {promptsTotal ? `${promptsTotal} submitted palettes` : 'Loading...'} +
+
+
+ + {#if promptsDataPage} + + + diff --git a/frontend/static/favicon.png b/frontend/static/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..825b9e65af7c104cfb07089bb28659393b4f2097 Binary files /dev/null and b/frontend/static/favicon.png differ diff --git a/frontend/static/robots.txt b/frontend/static/robots.txt new file mode 100644 index 0000000000000000000000000000000000000000..e9e57dc4d41b9b46e05112e9f45b7ea6ac0ba15e --- /dev/null +++ b/frontend/static/robots.txt @@ -0,0 +1,3 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * +Disallow: diff --git a/frontend/static/svelte-welcome.png b/frontend/static/svelte-welcome.png new file mode 100644 index 0000000000000000000000000000000000000000..fe7d2d6b50ce937a0c3cecaa9a3501dfe138b7c8 Binary files /dev/null and b/frontend/static/svelte-welcome.png differ diff --git a/frontend/static/svelte-welcome.webp b/frontend/static/svelte-welcome.webp new file mode 100644 index 0000000000000000000000000000000000000000..6ec1a28d63b49d9288d0bc3bf3a341eb4edf3318 Binary files /dev/null and b/frontend/static/svelte-welcome.webp differ diff --git a/frontend/svelte.config.js b/frontend/svelte.config.js new file mode 100644 index 0000000000000000000000000000000000000000..f69ce2e1166832bdc6a4525e51f51b10c4f4abf1 --- /dev/null +++ b/frontend/svelte.config.js @@ -0,0 +1,26 @@ +import adapter from '@sveltejs/adapter-static'; +import preprocess from 'svelte-preprocess'; + +const dev = process.env.NODE_ENV === 'development'; +console.log(dev) +/** @type {import('@sveltejs/kit').Config} */ +const config = { + preprocess: [ + preprocess({ + postcss: true + }) + ], + kit: { + paths: { + base: '/static' + }, + adapter: adapter({ + pages: 'build', + assets: 'build', + fallback: null, + precompress: false + }) + } +}; + +export default config; diff --git a/frontend/tailwind.config.cjs b/frontend/tailwind.config.cjs new file mode 100644 index 0000000000000000000000000000000000000000..8012d9571321dc60aa6943b1e5c497aeb2827309 --- /dev/null +++ b/frontend/tailwind.config.cjs @@ -0,0 +1,6 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: ['./src/**/*.{html,js,svelte,ts}'], + theme: {}, + plugins: [require('@tailwindcss/forms'), require('@tailwindcss/line-clamp')] +}; diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json new file mode 100644 index 0000000000000000000000000000000000000000..6ae0c8c44d08a78140c9c62c1b0f745edd05e804 --- /dev/null +++ b/frontend/tsconfig.json @@ -0,0 +1,17 @@ +{ + "extends": "./.svelte-kit/tsconfig.json", + "compilerOptions": { + "allowJs": true, + "checkJs": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "strict": true + } + // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias + // + // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes + // from the referenced tsconfig.json - TypeScript does not merge them in +} diff --git a/frontend/vite.config.dev.ts b/frontend/vite.config.dev.ts new file mode 100644 index 0000000000000000000000000000000000000000..bc127c858452aa79bccb57ff8b1b85c9a2874d04 --- /dev/null +++ b/frontend/vite.config.dev.ts @@ -0,0 +1,18 @@ +import { sveltekit } from '@sveltejs/kit/vite'; +import type { UserConfig } from 'vite'; + +const config: UserConfig = { + plugins: [sveltekit()], + server: { + proxy: { + '/moon': { + target: 'https://huggingface.co', + changeOrigin: true, + cookieDomainRewrite: 'localhost', + rewrite: (path) => path.replace(/^\/moon/, '') + } + } + } +}; + +export default config; diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts new file mode 100644 index 0000000000000000000000000000000000000000..16950342c1a41f60729f1abfcbbf67676c08e1bb --- /dev/null +++ b/frontend/vite.config.ts @@ -0,0 +1,8 @@ +import { sveltekit } from '@sveltejs/kit/vite'; +import type { UserConfig } from 'vite'; + +const config: UserConfig = { + plugins: [sveltekit()] +}; + +export default config; diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..82e30b02d4dbe71cef038a08dd0578e0fd349528 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,8 @@ +datasets +flask +flask_cors +flask_expects_json +requests +Pillow +gradio +Flask-APScheduler \ No newline at end of file diff --git a/run.py b/run.py new file mode 100644 index 0000000000000000000000000000000000000000..4383dff4c849fe1564a48f33b271ea8771ff27b7 --- /dev/null +++ b/run.py @@ -0,0 +1,3 @@ +import subprocess + +subprocess.run(["make", "build-all"], shell=False) \ No newline at end of file diff --git a/static/_app/immutable/assets/_layout-e397cbf6.css b/static/_app/immutable/assets/_layout-e397cbf6.css new file mode 100644 index 0000000000000000000000000000000000000000..7d58639711a30204720b05b7a39e65f3ffde151a --- /dev/null +++ b/static/_app/immutable/assets/_layout-e397cbf6.css @@ -0,0 +1 @@ +*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[type=text],[type=email],[type=url],[type=password],[type=number],[type=date],[type=datetime-local],[type=month],[type=search],[type=tel],[type=time],[type=week],[multiple],textarea,select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-width:1px;border-radius:0;padding:.5rem .75rem;font-size:1rem;line-height:1.5rem;--tw-shadow: 0 0 #0000}[type=text]:focus,[type=email]:focus,[type=url]:focus,[type=password]:focus,[type=number]:focus,[type=date]:focus,[type=datetime-local]:focus,[type=month]:focus,[type=search]:focus,[type=tel]:focus,[type=time]:focus,[type=week]:focus,[multiple]:focus,textarea:focus,select:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset: var(--tw-empty, );--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: #2563eb;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-color:#2563eb}input::-moz-placeholder,textarea::-moz-placeholder{color:#6b7280;opacity:1}input::placeholder,textarea::placeholder{color:#6b7280;opacity:1}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-date-and-time-value{min-height:1.5em}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field{padding-top:0;padding-bottom:0}select{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-right:2.5rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}[multiple]{background-image:initial;background-position:initial;background-repeat:unset;background-size:initial;padding-right:.75rem;-webkit-print-color-adjust:unset;print-color-adjust:unset}[type=checkbox],[type=radio]{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;-webkit-user-select:none;-moz-user-select:none;user-select:none;flex-shrink:0;height:1rem;width:1rem;color:#2563eb;background-color:#fff;border-color:#6b7280;border-width:1px;--tw-shadow: 0 0 #0000}[type=checkbox]{border-radius:0}[type=radio]{border-radius:100%}[type=checkbox]:focus,[type=radio]:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset: var(--tw-empty, );--tw-ring-offset-width: 2px;--tw-ring-offset-color: #fff;--tw-ring-color: #2563eb;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}[type=checkbox]:checked,[type=radio]:checked{border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}[type=checkbox]:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e")}[type=radio]:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e")}[type=checkbox]:checked:hover,[type=checkbox]:checked:focus,[type=radio]:checked:hover,[type=radio]:checked:focus{border-color:transparent;background-color:currentColor}[type=checkbox]:indeterminate{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e");border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}[type=checkbox]:indeterminate:hover,[type=checkbox]:indeterminate:focus{border-color:transparent;background-color:currentColor}[type=file]{background:unset;border-color:inherit;border-width:0;border-radius:0;padding:0;font-size:unset;line-height:inherit}[type=file]:focus{outline:1px solid ButtonText;outline:1px auto -webkit-focus-ring-color}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::-webkit-backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.absolute{position:absolute}.relative{position:relative}.bottom-0{bottom:0px}.top-0{top:0px}.z-0{z-index:0}.z-50{z-index:50}.col-span-6{grid-column:span 6 / span 6}.col-span-4{grid-column:span 4 / span 4}.col-span-2{grid-column:span 2 / span 2}.row-start-1{grid-row-start:1}.row-start-3{grid-row-start:3}.row-start-2{grid-row-start:2}.row-start-4{grid-row-start:4}.m-1{margin:.25rem}.mx-auto{margin-left:auto;margin-right:auto}.my-3{margin-top:.75rem;margin-bottom:.75rem}.my-10{margin-top:2.5rem;margin-bottom:2.5rem}.mr-1\.5{margin-right:.375rem}.mr-1{margin-right:.25rem}.ml-1\.5{margin-left:.375rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.mt-6{margin-top:1.5rem}.mb-4{margin-bottom:1rem}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.grid{display:grid}.aspect-square{aspect-ratio:1 / 1}.h-3{height:.75rem}.w-full{width:100%}.w-3{width:.75rem}.min-w-\[9ch\]{min-width:9ch}.min-w-\[3ch\]{min-width:3ch}.max-w-full{max-width:100%}.max-w-prose{max-width:65ch}.max-w-\[100px\]{max-width:100px}.max-w-screen-md{max-width:768px}.max-w-\[1rem\]{max-width:1rem}.grow{flex-grow:1}.rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@-webkit-keyframes spin{to{transform:rotate(360deg)}}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{-webkit-animation:spin 1s linear infinite;animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-center{justify-content:center}.justify-around{justify-content:space-around}.gap-3{gap:.75rem}.gap-4{gap:1rem}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.rounded-full{border-radius:9999px}.rounded-2xl{border-radius:1rem}.rounded-lg{border-radius:.5rem}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-black{--tw-border-opacity: 1;border-color:rgb(0 0 0 / var(--tw-border-opacity))}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.bg-black{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity))}.bg-slate-900{--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity))}.px-2{padding-left:.5rem;padding-right:.5rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-8{padding-top:2rem;padding-bottom:2rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.pl-1{padding-left:.25rem}.pb-3{padding-bottom:.75rem}.text-center{text-align:center}.text-right{text-align:right}.text-xs{font-size:.75rem;line-height:1rem}.text-base{font-size:1rem;line-height:1.5rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-sm{font-size:.875rem;line-height:1.25rem}.font-bold{font-weight:700}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.italic{font-style:italic}.leading-normal{line-height:1.5}.text-black{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.underline{text-decoration-line:underline}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.line-clamp-3{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3}.placeholder\:text-white::-moz-placeholder{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.placeholder\:text-white::placeholder{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.placeholder\:text-opacity-30::-moz-placeholder{--tw-text-opacity: .3}.placeholder\:text-opacity-30::placeholder{--tw-text-opacity: .3}.hover\:bg-gray-50:hover{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity))}.hover\:text-gray-500:hover{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.hover\:no-underline:hover{text-decoration-line:none}.focus\:border-gray-400:focus{--tw-border-opacity: 1;border-color:rgb(156 163 175 / var(--tw-border-opacity))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.disabled\:opacity-50:disabled{opacity:.5}@media (prefers-color-scheme: dark){.dark\:border-white{--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity))}.dark\:bg-\[rgb\(11\,15\,25\)\]{--tw-bg-opacity: 1;background-color:rgb(11 15 25 / var(--tw-bg-opacity))}.dark\:bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.dark\:bg-black{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity))}.dark\:bg-slate-300{--tw-bg-opacity: 1;background-color:rgb(203 213 225 / var(--tw-bg-opacity))}.dark\:text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.dark\:text-black{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity))}.dark\:placeholder\:text-black::-moz-placeholder{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity))}.dark\:placeholder\:text-black::placeholder{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity))}.dark\:placeholder\:text-opacity-10::-moz-placeholder{--tw-text-opacity: .1}.dark\:placeholder\:text-opacity-10::placeholder{--tw-text-opacity: .1}.dark\:hover\:bg-gray-800:hover{--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity))}}@media (min-width: 640px){.sm\:justify-center{justify-content:center}}@media (min-width: 768px){.md\:col-span-4{grid-column:span 4 / span 4}.md\:col-span-2{grid-column:span 2 / span 2}.md\:col-span-5{grid-column:span 5 / span 5}.md\:col-span-1{grid-column:span 1 / span 1}.md\:col-start-5{grid-column-start:5}.md\:row-start-2{grid-row-start:2}.md\:justify-end{justify-content:flex-end}} diff --git a/static/_app/immutable/assets/_page-fd1176fc.css b/static/_app/immutable/assets/_page-fd1176fc.css new file mode 100644 index 0000000000000000000000000000000000000000..18d52da51ee9754d809af8d6afac22d9685e33ac --- /dev/null +++ b/static/_app/immutable/assets/_page-fd1176fc.css @@ -0,0 +1 @@ +.button.svelte-8zu88a{margin-left:.5rem;min-width:9ch;border-radius:1rem;border-width:2px;--tw-border-opacity:1;border-color:rgb(0 0 0 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(0 0 0 / var(--tw-bg-opacity));padding:.5rem;font-size:.75rem;line-height:1rem;font-weight:700;--tw-text-opacity:1;color:rgb(255 255 255 / var(--tw-text-opacity));--tw-shadow:0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.button.svelte-8zu88a:focus{--tw-border-opacity:1;border-color:rgb(156 163 175 / var(--tw-border-opacity));outline:2px solid transparent;outline-offset:2px}@media (prefers-color-scheme: dark){.button.svelte-8zu88a{--tw-border-opacity:1;border-color:rgb(255 255 255 / var(--tw-border-opacity))}}.link.svelte-zbscw1{font-size:.75rem;line-height:1rem;font-weight:700;text-decoration-line:underline}.link.svelte-zbscw1:visited{color:#6b7280}.link.svelte-zbscw1:hover{--tw-text-opacity:1;color:rgb(107 114 128 / var(--tw-text-opacity));text-decoration-line:none}.input.svelte-zbscw1{grid-column:span 4 / span 4;border-radius:1rem;border-width:2px;--tw-border-opacity:1;border-color:rgb(0 0 0 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(15 23 42 / var(--tw-bg-opacity));padding-left:.5rem;padding-right:.5rem;font-size:.875rem;line-height:1.25rem;font-style:italic;--tw-text-opacity:1;color:rgb(255 255 255 / var(--tw-text-opacity));--tw-shadow:0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.input.svelte-zbscw1::-moz-placeholder{color:rgb(255 255 255 / var(--tw-text-opacity));--tw-text-opacity:.3 }.input.svelte-zbscw1::placeholder{color:rgb(255 255 255 / var(--tw-text-opacity));--tw-text-opacity:.3 }.input.svelte-zbscw1:focus{--tw-border-opacity:1;border-color:rgb(156 163 175 / var(--tw-border-opacity));outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.input.svelte-zbscw1:disabled{opacity:.5}@media (prefers-color-scheme: dark){.input.svelte-zbscw1{--tw-bg-opacity:1;background-color:rgb(255 255 255 / var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(0 0 0 / var(--tw-text-opacity))}.input.svelte-zbscw1::-moz-placeholder{color:rgb(0 0 0 / var(--tw-text-opacity));--tw-text-opacity:.1 }.input.svelte-zbscw1::placeholder{color:rgb(0 0 0 / var(--tw-text-opacity));--tw-text-opacity:.1 }}@media (min-width: 768px){.input.svelte-zbscw1{grid-column:span 5 / span 5}}.button.svelte-zbscw1{grid-column:span 2 / span 2;margin-left:.5rem;border-radius:1rem;border-width:2px;--tw-border-opacity:1;border-color:rgb(0 0 0 / var(--tw-border-opacity));padding:.5rem;font-size:.75rem;line-height:1rem;font-weight:700;--tw-shadow:0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.button.svelte-zbscw1:focus{--tw-border-opacity:1;border-color:rgb(156 163 175 / var(--tw-border-opacity));outline:2px solid transparent;outline-offset:2px}.button.svelte-zbscw1:disabled{opacity:.5}@media (prefers-color-scheme: dark){.button.svelte-zbscw1{--tw-bg-opacity:1;background-color:rgb(255 255 255 / var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(0 0 0 / var(--tw-text-opacity))}}@media (min-width: 768px){.button.svelte-zbscw1{grid-column:span 1 / span 1}} diff --git a/static/_app/immutable/chunks/0-17a4fec1.js b/static/_app/immutable/chunks/0-17a4fec1.js new file mode 100644 index 0000000000000000000000000000000000000000..bcc1f53c4da2d7011e7a24db35afe01e5bdd8f69 --- /dev/null +++ b/static/_app/immutable/chunks/0-17a4fec1.js @@ -0,0 +1 @@ +import{_ as r}from"./_layout-1daba58d.js";import{default as t}from"../components/pages/_layout.svelte-55da5a4f.js";export{t as component,r as shared}; diff --git a/static/_app/immutable/chunks/1-26e94021.js b/static/_app/immutable/chunks/1-26e94021.js new file mode 100644 index 0000000000000000000000000000000000000000..715e5df82b3d55a1bf1738360d2056502795b7e7 --- /dev/null +++ b/static/_app/immutable/chunks/1-26e94021.js @@ -0,0 +1 @@ +import{default as t}from"../components/error.svelte-c31c95c4.js";export{t as component}; diff --git a/static/_app/immutable/chunks/2-fc64cbc2.js b/static/_app/immutable/chunks/2-fc64cbc2.js new file mode 100644 index 0000000000000000000000000000000000000000..9a528c6dea1a44733688e57c8b361ffb1c5dd214 --- /dev/null +++ b/static/_app/immutable/chunks/2-fc64cbc2.js @@ -0,0 +1 @@ +import{default as t}from"../components/pages/_page.svelte-3643b29c.js";export{t as component}; diff --git a/static/_app/immutable/chunks/_layout-1daba58d.js b/static/_app/immutable/chunks/_layout-1daba58d.js new file mode 100644 index 0000000000000000000000000000000000000000..470b827d2ea3fc294e0b8a1ff4ca645db498ef5a --- /dev/null +++ b/static/_app/immutable/chunks/_layout-1daba58d.js @@ -0,0 +1 @@ +const e=!0,r=Object.freeze(Object.defineProperty({__proto__:null,prerender:!0},Symbol.toStringTag,{value:"Module"}));export{r as _,e as p}; diff --git a/static/_app/immutable/chunks/index-3bda1050.js b/static/_app/immutable/chunks/index-3bda1050.js new file mode 100644 index 0000000000000000000000000000000000000000..55bb5442ad7c9eca8b8c2a6efc8b467f101e8027 --- /dev/null +++ b/static/_app/immutable/chunks/index-3bda1050.js @@ -0,0 +1 @@ +import{A as f,s as l}from"./index-5559954d.js";const e=[];function h(n,u=f){let o;const i=new Set;function r(t){if(l(n,t)&&(n=t,o)){const c=!e.length;for(const s of i)s[1](),e.push(s,n);if(c){for(let s=0;s{i.delete(s),i.size===0&&(o(),o=null)}}return{set:r,update:b,subscribe:p}}export{h as w}; diff --git a/static/_app/immutable/chunks/index-5559954d.js b/static/_app/immutable/chunks/index-5559954d.js new file mode 100644 index 0000000000000000000000000000000000000000..4ffba7dbc0a17dd387edd98801f837cd199fdf7a --- /dev/null +++ b/static/_app/immutable/chunks/index-5559954d.js @@ -0,0 +1 @@ +function S(){}function H(t,n){for(const e in n)t[e]=n[e];return t}function B(t){return t()}function M(){return Object.create(null)}function p(t){t.forEach(B)}function I(t){return typeof t=="function"}function st(t,n){return t!=t?n==n:t!==n||t&&typeof t=="object"||typeof t=="function"}let g;function ot(t,n){return g||(g=document.createElement("a")),g.href=n,t===g.href}function G(t){return Object.keys(t).length===0}function J(t,...n){if(t==null)return S;const e=t.subscribe(...n);return e.unsubscribe?()=>e.unsubscribe():e}function at(t,n,e){t.$$.on_destroy.push(J(n,e))}function ft(t,n,e,i){if(t){const r=D(t,n,e,i);return t[0](r)}}function D(t,n,e,i){return t[1]&&i?H(e.ctx.slice(),t[1](i(n))):e.ctx}function _t(t,n,e,i){if(t[2]&&i){const r=t[2](i(e));if(n.dirty===void 0)return r;if(typeof r=="object"){const o=[],c=Math.max(n.dirty.length,r.length);for(let s=0;s32){const n=[],e=t.ctx.length/32;for(let i=0;i>1);e(r)<=i?t=r+1:n=r}return t}function W(t){if(t.hydrate_init)return;t.hydrate_init=!0;let n=t.childNodes;if(t.nodeName==="HEAD"){const u=[];for(let l=0;l0&&n[e[r]].claim_order<=l?r+1:R(1,r,y=>n[e[y]].claim_order,l))-1;i[u]=e[f]+1;const a=f+1;e[a]=u,r=Math.max(a,r)}const o=[],c=[];let s=n.length-1;for(let u=e[r]+1;u!=0;u=i[u-1]){for(o.push(n[u-1]);s>=u;s--)c.push(n[s]);s--}for(;s>=0;s--)c.push(n[s]);o.reverse(),c.sort((u,l)=>u.claim_order-l.claim_order);for(let u=0,l=0;u=o[l].claim_order;)l++;const f=lt.removeEventListener(n,e,i)}function vt(t){return function(n){return n.preventDefault(),t.call(this,n)}}function $t(t,n,e){e==null?t.removeAttribute(n):t.getAttribute(n)!==e&&t.setAttribute(n,e)}function Z(t){return Array.from(t.childNodes)}function tt(t){t.claim_info===void 0&&(t.claim_info={last_index:0,total_claimed:0})}function L(t,n,e,i,r=!1){tt(t);const o=(()=>{for(let c=t.claim_info.last_index;c=0;c--){const s=t[c];if(n(s)){const u=e(s);return u===void 0?t.splice(c,1):t[c]=u,r?u===void 0&&t.claim_info.last_index--:t.claim_info.last_index=c,s}}return i()})();return o.claim_order=t.claim_info.total_claimed,t.claim_info.total_claimed+=1,o}function O(t,n,e,i){return L(t,r=>r.nodeName===n,r=>{const o=[];for(let c=0;cr.removeAttribute(c))},()=>i(n))}function Et(t,n,e){return O(t,n,e,X)}function wt(t,n,e){return O(t,n,e,Y)}function nt(t,n){return L(t,e=>e.nodeType===3,e=>{const i=""+n;if(e.data.startsWith(i)){if(e.data.length!==i.length)return e.splitText(i.length)}else e.data=i},()=>A(n),!0)}function Nt(t){return nt(t," ")}function St(t,n){n=""+n,t.wholeText!==n&&(t.data=n)}function At(t,n){t.value=n==null?"":n}function jt(t,n,e,i){e===null?t.style.removeProperty(n):t.style.setProperty(n,e,i?"important":"")}function et(t,n,{bubbles:e=!1,cancelable:i=!1}={}){const r=document.createEvent("CustomEvent");return r.initCustomEvent(t,e,i,n),r}let m;function h(t){m=t}function j(){if(!m)throw new Error("Function called outside component initialization");return m}function Ct(t){j().$$.on_mount.push(t)}function kt(t){j().$$.after_update.push(t)}function Mt(){const t=j();return(n,e,{cancelable:i=!1}={})=>{const r=t.$$.callbacks[n];if(r){const o=et(n,e,{cancelable:i});return r.slice().forEach(c=>{c.call(t,o)}),!o.defaultPrevented}return!0}}const d=[],P=[],b=[],q=[],T=Promise.resolve();let w=!1;function z(){w||(w=!0,T.then(F))}function Pt(){return z(),T}function N(t){b.push(t)}const E=new Set;let x=0;function F(){const t=m;do{for(;x{v.delete(t),i&&(e&&t.d(1),i())}),t.o(n)}else i&&i()}function Lt(t){t&&t.c()}function Ot(t,n){t&&t.l(n)}function ct(t,n,e,i){const{fragment:r,on_mount:o,on_destroy:c,after_update:s}=t.$$;r&&r.m(n,e),i||N(()=>{const u=o.map(B).filter(I);c?c.push(...u):p(u),t.$$.on_mount=[]}),s.forEach(N)}function ut(t,n){const e=t.$$;e.fragment!==null&&(p(e.on_destroy),e.fragment&&e.fragment.d(n),e.on_destroy=e.fragment=null,e.ctx=[])}function lt(t,n){t.$$.dirty[0]===-1&&(d.push(t),z(),t.$$.dirty.fill(0)),t.$$.dirty[n/31|0]|=1<{const k=C.length?C[0]:y;return l.ctx&&r(l.ctx[a],l.ctx[a]=k)&&(!l.skip_bound&&l.bound[a]&&l.bound[a](k),f&<(t,a)),y}):[],l.update(),f=!0,p(l.before_update),l.fragment=i?i(l.ctx):!1,n.target){if(n.hydrate){K();const a=Z(n.target);l.fragment&&l.fragment.l(a),a.forEach(V)}else l.fragment&&l.fragment.c();n.intro&&rt(t.$$.fragment),ct(t,n.target,n.anchor,n.customElement),Q(),F()}h(u)}class zt{$destroy(){ut(this,1),this.$destroy=S}$on(n,e){const i=this.$$.callbacks[n]||(this.$$.callbacks[n]=[]);return i.push(e),()=>{const r=i.indexOf(e);r!==-1&&i.splice(r,1)}}$set(n){this.$$set&&!G(n)&&(this.$$.skip_bound=!0,this.$$set(n),this.$$.skip_bound=!1)}}export{S as A,ft as B,dt as C,ht as D,_t as E,U as F,at as G,yt as H,Y as I,wt as J,bt as K,ot as L,p as M,Mt as N,At as O,vt as P,mt as Q,P as R,zt as S,gt as a,pt as b,Nt as c,Bt as d,xt as e,rt as f,qt as g,V as h,Tt as i,kt as j,X as k,Et as l,Z as m,$t as n,Ct as o,jt as p,A as q,nt as r,st as s,Dt as t,St as u,Lt as v,Ot as w,ct as x,ut as y,Pt as z}; diff --git a/static/_app/immutable/chunks/singletons-e4c31a41.js b/static/_app/immutable/chunks/singletons-e4c31a41.js new file mode 100644 index 0000000000000000000000000000000000000000..190ed1e42ccdb206d25d47eee5935138710bdab4 --- /dev/null +++ b/static/_app/immutable/chunks/singletons-e4c31a41.js @@ -0,0 +1 @@ +import{w as u}from"./index-3bda1050.js";let f="",b="";function g(n){f=n.base,b=n.assets||f}function m(n){let e=n.baseURI;if(!e){const t=n.getElementsByTagName("base");e=t.length?t[0].href:n.URL}return e}function _(){return{x:pageXOffset,y:pageYOffset}}function k(n){let e,t=null,r=null,a=null;for(const s of n.composedPath())s instanceof Element&&(!e&&s.nodeName.toUpperCase()==="A"&&(e=s),t===null&&(t=l(s,"data-sveltekit-noscroll")),r===null&&(r=l(s,"data-sveltekit-prefetch")),a===null&&(a=l(s,"data-sveltekit-reload")));const o=e&&new URL(e instanceof SVGAElement?e.href.baseVal:e.href,document.baseURI);return{a:e,url:o,options:{noscroll:t,prefetch:r,reload:a}}}function l(n,e){const t=n.getAttribute(e);return t===null?t:t===""?!0:(t==="off",!1)}function d(n){const e=u(n);let t=!0;function r(){t=!0,e.update(s=>s)}function a(s){t=!1,e.set(s)}function o(s){let i;return e.subscribe(c=>{(i===void 0||t&&c!==i)&&s(i=c)})}return{notify:r,set:a,subscribe:o}}function p(){const{set:n,subscribe:e}=u(!1);let t;async function r(){clearTimeout(t);const a=await fetch(`${b}/_app/version.json`,{headers:{pragma:"no-cache","cache-control":"no-cache"}});if(a.ok){const{version:o}=await a.json(),s=o!=="1666722090902";return s&&(n(!0),clearTimeout(t)),s}else throw new Error(`Version check failed: ${a.status}`)}return{subscribe:e,check:r}}function v(n){n.client}const w={url:d({}),page:d({}),navigating:u(null),updated:p()};export{_ as a,g as b,k as f,m as g,v as i,w as s}; diff --git a/static/_app/immutable/components/error.svelte-c31c95c4.js b/static/_app/immutable/components/error.svelte-c31c95c4.js new file mode 100644 index 0000000000000000000000000000000000000000..9f8cd1ff85b41f3038faa9098af98c8e306a9338 --- /dev/null +++ b/static/_app/immutable/components/error.svelte-c31c95c4.js @@ -0,0 +1 @@ +import{S as A,i as C,s as F,k as v,q as k,a as h,e as q,l as g,m as E,r as $,h as p,c as R,b as u,F as P,u as S,A as w,G}from"../chunks/index-5559954d.js";import{s as H}from"../chunks/singletons-e4c31a41.js";const O=()=>{const t=H,s={page:{subscribe:t.page.subscribe},navigating:{subscribe:t.navigating.subscribe},updated:t.updated};return Object.defineProperties(s,{preloading:{get(){return console.error("stores.preloading is deprecated; use stores.navigating instead"),{subscribe:t.navigating.subscribe}},enumerable:!1},session:{get(){return B(),{}},enumerable:!1}}),s},z={subscribe(t){return O().page.subscribe(t)}};function B(){throw new Error("stores.session is no longer available. See https://github.com/sveltejs/kit/discussions/5883")}function N(t){let s,i=t[0].error.frame+"",o;return{c(){s=v("pre"),o=k(i)},l(r){s=g(r,"PRE",{});var a=E(s);o=$(a,i),a.forEach(p)},m(r,a){u(r,s,a),P(s,o)},p(r,a){a&1&&i!==(i=r[0].error.frame+"")&&S(o,i)},d(r){r&&p(s)}}}function y(t){let s,i=t[0].error.stack+"",o;return{c(){s=v("pre"),o=k(i)},l(r){s=g(r,"PRE",{});var a=E(s);o=$(a,i),a.forEach(p)},m(r,a){u(r,s,a),P(s,o)},p(r,a){a&1&&i!==(i=r[0].error.stack+"")&&S(o,i)},d(r){r&&p(s)}}}function D(t){let s,i=t[0].status+"",o,r,a,b=t[0].error.message+"",_,d,c,m,l=t[0].error.frame&&N(t),n=t[0].error.stack&&y(t);return{c(){s=v("h1"),o=k(i),r=h(),a=v("pre"),_=k(b),d=h(),l&&l.c(),c=h(),n&&n.c(),m=q()},l(e){s=g(e,"H1",{});var f=E(s);o=$(f,i),f.forEach(p),r=R(e),a=g(e,"PRE",{});var j=E(a);_=$(j,b),j.forEach(p),d=R(e),l&&l.l(e),c=R(e),n&&n.l(e),m=q()},m(e,f){u(e,s,f),P(s,o),u(e,r,f),u(e,a,f),P(a,_),u(e,d,f),l&&l.m(e,f),u(e,c,f),n&&n.m(e,f),u(e,m,f)},p(e,[f]){f&1&&i!==(i=e[0].status+"")&&S(o,i),f&1&&b!==(b=e[0].error.message+"")&&S(_,b),e[0].error.frame?l?l.p(e,f):(l=N(e),l.c(),l.m(c.parentNode,c)):l&&(l.d(1),l=null),e[0].error.stack?n?n.p(e,f):(n=y(e),n.c(),n.m(m.parentNode,m)):n&&(n.d(1),n=null)},i:w,o:w,d(e){e&&p(s),e&&p(r),e&&p(a),e&&p(d),l&&l.d(e),e&&p(c),n&&n.d(e),e&&p(m)}}}function I(t,s,i){let o;return G(t,z,r=>i(0,o=r)),[o]}class L extends A{constructor(s){super(),C(this,s,I,D,F,{})}}export{L as default}; diff --git a/static/_app/immutable/components/pages/_layout.svelte-55da5a4f.js b/static/_app/immutable/components/pages/_layout.svelte-55da5a4f.js new file mode 100644 index 0000000000000000000000000000000000000000..0ca560a14585bd2b79c6a7219297242351ac5caf --- /dev/null +++ b/static/_app/immutable/components/pages/_layout.svelte-55da5a4f.js @@ -0,0 +1 @@ +import{S as l,i,s as r,B as u,C as f,D as _,E as c,f as p,t as d}from"../../chunks/index-5559954d.js";function m(n){let s;const o=n[1].default,e=u(o,n,n[0],null);return{c(){e&&e.c()},l(t){e&&e.l(t)},m(t,a){e&&e.m(t,a),s=!0},p(t,[a]){e&&e.p&&(!s||a&1)&&f(e,o,t,t[0],s?c(o,t[0],a,null):_(t[0]),null)},i(t){s||(p(e,t),s=!0)},o(t){d(e,t),s=!1},d(t){e&&e.d(t)}}}function $(n,s,o){let{$$slots:e={},$$scope:t}=s;return n.$$set=a=>{"$$scope"in a&&o(0,t=a.$$scope)},[t,e]}class h extends l{constructor(s){super(),i(this,s,$,m,r,{})}}export{h as default}; diff --git a/static/_app/immutable/components/pages/_page.svelte-3643b29c.js b/static/_app/immutable/components/pages/_page.svelte-3643b29c.js new file mode 100644 index 0000000000000000000000000000000000000000..ec70f7137d1b6d580587fdf2485d45419b57a0c8 --- /dev/null +++ b/static/_app/immutable/components/pages/_page.svelte-3643b29c.js @@ -0,0 +1,9 @@ +import{S as Ee,i as Ne,s as $e,k as S,l as z,m as M,h as w,n as c,b as J,F as m,A as ue,H as Ge,I as he,a as T,q as j,J as de,c as U,r as F,p as Ce,K as se,u as me,L as Ze,f as Q,g as Je,t as ae,d as Qe,M as Oe,N as Rt,v as He,w as qe,x as Re,y as Le,O as et,P as Se,G as tt,o as Lt,e as rt,Q as W,R as St}from"../../chunks/index-5559954d.js";import{w as kt}from"../../chunks/index-3bda1050.js";if(!oe)var oe={map:function(e,t){var r={};return t?e.map(function(n,s){return r.index=s,t.call(r,n)}):e.slice()},naturalOrder:function(e,t){return et?1:0},sum:function(e,t){var r={};return e.reduce(t?function(n,s,l){return r.index=l,n+t.call(r,s)}:function(n,s){return n+s},0)},max:function(e,t){return Math.max.apply(null,t?oe.map(e,t):e)}};var zt=function(){var e=5,t=8-e,r=1e3,n=.75;function s(u,a,g){return(u<<2*e)+(a<>t;return gval=u[1]>>t,bval=u[2]>>t,g>=a.r1&&g<=a.r2&&gval>=a.g1&&gval<=a.g2&&bval>=a.b1&&bval<=a.b2}};function o(){this.vboxes=new l(function(u,a){return oe.naturalOrder(u.vbox.count()*u.vbox.volume(),a.vbox.count()*a.vbox.volume())})}o.prototype={push:function(u){this.vboxes.push({vbox:u,color:u.avg()})},palette:function(){return this.vboxes.map(function(u){return u.color})},size:function(){return this.vboxes.size()},map:function(u){for(var a=this.vboxes,g=0;g251&&f[1]>251&&f[2]>251&&(u[g].color=[255,255,255])}};function d(u){var a=1<<3*e,g=new Array(a),f,x,b,N;return u.forEach(function(H){x=H[0]>>t,b=H[1]>>t,N=H[2]>>t,f=s(x,b,N),g[f]=(g[f]||0)+1}),g}function y(u,a){var g=1e6,f=0,x=1e6,b=0,N=1e6,H=0,R,v,$;return u.forEach(function(I){R=I[0]>>t,v=I[1]>>t,$=I[2]>>t,Rf&&(f=R),vb&&(b=v),$H&&(H=$)}),new i(g,f,x,b,N,H,a)}function L(u,a){if(!a.count())return;var g=a.r2-a.r1+1,f=a.g2-a.g1+1,x=a.b2-a.b1+1,b=oe.max([g,f,x]);if(a.count()==1)return[a.copy()];var N=0,H=[],R=[],v,$,I,B,E;if(b==g)for(v=a.r1;v<=a.r2;v++){for(B=0,$=a.g1;$<=a.g2;$++)for(I=a.b1;I<=a.b2;I++)E=s(v,$,I),B+=u[E]||0;N+=B,H[v]=N}else if(b==f)for(v=a.g1;v<=a.g2;v++){for(B=0,$=a.r1;$<=a.r2;$++)for(I=a.b1;I<=a.b2;I++)E=s($,v,I),B+=u[E]||0;N+=B,H[v]=N}else for(v=a.b1;v<=a.b2;v++){for(B=0,$=a.r1;$<=a.r2;$++)for(I=a.g1;I<=a.g2;I++)E=s($,I,v),B+=u[E]||0;N+=B,H[v]=N}H.forEach(function(O,q){R[q]=N-O});function C(O){var q=O+"1",p=O+"2",D,h,k,_,P,V=0;for(v=a[q];v<=a[p];v++)if(H[v]>N/2){for(k=a.copy(),_=a.copy(),D=v-a[q],h=a[p]-v,D<=h?P=Math.min(a[p]-1,~~(v+h/2)):P=Math.max(a[q],~~(v-1-D/2));!H[P];)P++;for(V=R[P];!V&&H[P-1];)V=R[--P];return k[p]=P,_[q]=k[p]+1,[k,_]}}return b==g?C("r"):b==f?C("g"):C("b")}function A(u,a){if(!u.length||a<2||a>256)return!1;var g=d(u);g.forEach(function(){});var f=y(u,g),x=new l(function(R,v){return oe.naturalOrder(R.count(),v.count())});x.push(f);function b(R,v){for(var $=1,I=0,B;I=v)||I++>r)return}}b(x,n*a);for(var N=new l(function(R,v){return oe.naturalOrder(R.count()*R.volume(),v.count()*v.volume())});x.size();)N.push(x.pop());b(N,a-N.size());for(var H=new o;N.size();)H.push(N.pop());return H}return{quantize:A}}(),Bt=zt.quantize;function Ie(e,t,r){e.prototype=t.prototype=r,r.constructor=e}function Ae(e,t){var r=Object.create(e.prototype);for(var n in t)r[n]=t[n];return r}function be(){}var ye=.7,ze=1/ye,ve="\\s*([+-]?\\d+)\\s*",ke="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",le="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",Dt=/^#([0-9a-f]{3,8})$/,Ot=new RegExp(`^rgb\\(${ve},${ve},${ve}\\)$`),At=new RegExp(`^rgb\\(${le},${le},${le}\\)$`),Tt=new RegExp(`^rgba\\(${ve},${ve},${ve},${ke}\\)$`),Ut=new RegExp(`^rgba\\(${le},${le},${le},${ke}\\)$`),Vt=new RegExp(`^hsl\\(${ke},${le},${le}\\)$`),jt=new RegExp(`^hsla\\(${ke},${le},${le},${ke}\\)$`),nt={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};Ie(be,Ke,{copy(e){return Object.assign(new this.constructor,this,e)},displayable(){return this.rgb().displayable()},hex:at,formatHex:at,formatHex8:Ft,formatHsl:Wt,formatRgb:st,toString:st});function at(){return this.rgb().formatHex()}function Ft(){return this.rgb().formatHex8()}function Wt(){return Nt(this).formatHsl()}function st(){return this.rgb().formatRgb()}function Ke(e){var t,r;return e=(e+"").trim().toLowerCase(),(t=Dt.exec(e))?(r=t[1].length,t=parseInt(t[1],16),r===6?lt(t):r===3?new G(t>>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):r===8?Pe(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):r===4?Pe(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=Ot.exec(e))?new G(t[1],t[2],t[3],1):(t=At.exec(e))?new G(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=Tt.exec(e))?Pe(t[1],t[2],t[3],t[4]):(t=Ut.exec(e))?Pe(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=Vt.exec(e))?ct(t[1],t[2]/100,t[3]/100,1):(t=jt.exec(e))?ct(t[1],t[2]/100,t[3]/100,t[4]):nt.hasOwnProperty(e)?lt(nt[e]):e==="transparent"?new G(NaN,NaN,NaN,0):null}function lt(e){return new G(e>>16&255,e>>8&255,e&255,1)}function Pe(e,t,r,n){return n<=0&&(e=t=r=NaN),new G(e,t,r,n)}function Et(e){return e instanceof be||(e=Ke(e)),e?(e=e.rgb(),new G(e.r,e.g,e.b,e.opacity)):new G}function Xe(e,t,r,n){return arguments.length===1?Et(e):new G(e,t,r,n==null?1:n)}function G(e,t,r,n){this.r=+e,this.g=+t,this.b=+r,this.opacity=+n}Ie(G,Xe,Ae(be,{brighter(e){return e=e==null?ze:Math.pow(ze,e),new G(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?ye:Math.pow(ye,e),new G(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new G(pe(this.r),pe(this.g),pe(this.b),Be(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:it,formatHex:it,formatHex8:Gt,formatRgb:ot,toString:ot}));function it(){return`#${ge(this.r)}${ge(this.g)}${ge(this.b)}`}function Gt(){return`#${ge(this.r)}${ge(this.g)}${ge(this.b)}${ge((isNaN(this.opacity)?1:this.opacity)*255)}`}function ot(){const e=Be(this.opacity);return`${e===1?"rgb(":"rgba("}${pe(this.r)}, ${pe(this.g)}, ${pe(this.b)}${e===1?")":`, ${e})`}`}function Be(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function pe(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function ge(e){return e=pe(e),(e<16?"0":"")+e.toString(16)}function ct(e,t,r,n){return n<=0?e=t=r=NaN:r<=0||r>=1?e=t=NaN:t<=0&&(e=NaN),new Z(e,t,r,n)}function Nt(e){if(e instanceof Z)return new Z(e.h,e.s,e.l,e.opacity);if(e instanceof be||(e=Ke(e)),!e)return new Z;if(e instanceof Z)return e;e=e.rgb();var t=e.r/255,r=e.g/255,n=e.b/255,s=Math.min(t,r,n),l=Math.max(t,r,n),i=NaN,o=l-s,d=(l+s)/2;return o?(t===l?i=(r-n)/o+(r0&&d<1?0:i,new Z(i,o,d,e.opacity)}function Jt(e,t,r,n){return arguments.length===1?Nt(e):new Z(e,t,r,n==null?1:n)}function Z(e,t,r,n){this.h=+e,this.s=+t,this.l=+r,this.opacity=+n}Ie(Z,Jt,Ae(be,{brighter(e){return e=e==null?ze:Math.pow(ze,e),new Z(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?ye:Math.pow(ye,e),new Z(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,r=this.l,n=r+(r<.5?r:1-r)*t,s=2*r-n;return new G(Te(e>=240?e-240:e+120,s,n),Te(e,s,n),Te(e<120?e+240:e-120,s,n),this.opacity)},clamp(){return new Z(ft(this.h),Me(this.s),Me(this.l),Be(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const e=Be(this.opacity);return`${e===1?"hsl(":"hsla("}${ft(this.h)}, ${Me(this.s)*100}%, ${Me(this.l)*100}%${e===1?")":`, ${e})`}`}}));function ft(e){return e=(e||0)%360,e<0?e+360:e}function Me(e){return Math.max(0,Math.min(1,e||0))}function Te(e,t,r){return(e<60?t+(r-t)*e/60:e<180?r:e<240?t+(r-t)*(240-e)/60:t)*255}const Qt=Math.PI/180,Kt=180/Math.PI,De=18,$t=.96422,It=1,Ct=.82521,Pt=4/29,we=6/29,Mt=3*we*we,Xt=we*we*we;function Ht(e){if(e instanceof ie)return new ie(e.l,e.a,e.b,e.opacity);if(e instanceof ce)return qt(e);e instanceof G||(e=Et(e));var t=Fe(e.r),r=Fe(e.g),n=Fe(e.b),s=Ue((.2225045*t+.7168786*r+.0606169*n)/It),l,i;return t===r&&r===n?l=i=s:(l=Ue((.4360747*t+.3850649*r+.1430804*n)/$t),i=Ue((.0139322*t+.0971045*r+.7141733*n)/Ct)),new ie(116*s-16,500*(l-s),200*(s-i),e.opacity)}function Yt(e,t,r,n){return arguments.length===1?Ht(e):new ie(e,t,r,n==null?1:n)}function ie(e,t,r,n){this.l=+e,this.a=+t,this.b=+r,this.opacity=+n}Ie(ie,Yt,Ae(be,{brighter(e){return new ie(this.l+De*(e==null?1:e),this.a,this.b,this.opacity)},darker(e){return new ie(this.l-De*(e==null?1:e),this.a,this.b,this.opacity)},rgb(){var e=(this.l+16)/116,t=isNaN(this.a)?e:e+this.a/500,r=isNaN(this.b)?e:e-this.b/200;return t=$t*Ve(t),e=It*Ve(e),r=Ct*Ve(r),new G(je(3.1338561*t-1.6168667*e-.4906146*r),je(-.9787684*t+1.9161415*e+.033454*r),je(.0719453*t-.2289914*e+1.4052427*r),this.opacity)}}));function Ue(e){return e>Xt?Math.pow(e,1/3):e/Mt+Pt}function Ve(e){return e>we?e*e*e:Mt*(e-Pt)}function je(e){return 255*(e<=.0031308?12.92*e:1.055*Math.pow(e,1/2.4)-.055)}function Fe(e){return(e/=255)<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)}function Zt(e){if(e instanceof ce)return new ce(e.h,e.c,e.l,e.opacity);if(e instanceof ie||(e=Ht(e)),e.a===0&&e.b===0)return new ce(NaN,0_e(t)).sort((t,r)=>{const n=t.h,s=r.h;return s-n||isNaN(s)-isNaN(n)})}function tr(e,t,r){const n=e,s=[];for(let l=0,i,o,d,y,L;l"u"||L>=125)&&(o>250&&d>250&&y>250||s.push([o,d,y]));return s}function rr(e,t=5,r=1){return new Promise(n=>{const s=new Image;s.onload=async()=>{const l=s.width,i=s.height,o=document.createElement("canvas");o.width=l,o.height=i;const d=o.getContext("2d");d.drawImage(s,0,0,l,i);const y=d.getImageData(0,0,l,i),L=tr(y.data,l*i,r),u=Bt(L,t).palette(),a=document.createElement("canvas");a.width=l/5,a.height=i/5,a.getContext("2d").drawImage(s,0,0,l,i,0,0,l/5,i/5);const f=await new Promise(b=>a.toBlob(b,"image/jpeg",.8)),x=u.map(b=>Xe(...b));n({colors:er(x),imgBlob:f})},s.src=e})}async function nr(e,t){const r=ar(t),n="https://huggingface.co/uploads",l=`color-palette-${crypto.randomUUID().split("-")[0]}-${r}.jpeg`,i=new File([e],l,{type:"image/jpeg"});console.log("uploading image",i);const d=await(await fetch(n,{method:"POST",headers:{"Content-Type":i.type,"X-Requested-With":"XMLHttpRequest"},body:i})).text();return console.log("uploaded images",d),d}function ar(e){return e?e.toString().toLowerCase().replace(/\s+/g,"-").replace(/[^\w\-]+/g,"").replace(/\-\-+/g,"-").replace(/^-+/,"").replace(/-+$/,""):""}const X=kt(""),xe=kt(!1),sr="wss://spaces.huggingface.tech/stabilityai/stable-diffusion-1/queue/join",ut="";function ht(e,t,r){const n=e.slice();return n[6]=t[r],n[8]=r,n}function dt(e){let t,r,n,s,l,i,o=(e[1]===e[8]?"copied":e[6].formatHex())+"",d,y,L,A,u;function a(){return e[4](e[6],e[8])}return{c(){t=S("div"),r=he("svg"),n=he("rect"),l=T(),i=S("span"),d=j(o),y=T(),this.h()},l(g){t=z(g,"DIV",{class:!0,style:!0});var f=M(t);r=de(f,"svg",{class:!0,width:!0,viewBox:!0});var x=M(r);n=de(x,"rect",{x:!0,y:!0,width:!0,height:!0,fill:!0}),M(n).forEach(w),x.forEach(w),l=U(f),i=z(f,"SPAN",{title:!0,class:!0,style:!0});var b=M(i);d=F(b,o),b.forEach(w),y=U(f),f.forEach(w),this.h()},h(){c(n,"x","0"),c(n,"y","0"),c(n,"width","50"),c(n,"height","50"),c(n,"fill",s=e[6].formatHex()),c(r,"class","block max-w-full aspect-square"),c(r,"width","100"),c(r,"viewBox","0 0 50 50"),c(i,"title","Copy single color"),c(i,"class","absolute bottom-0 text-center text-xs pl-1 font-bold uppercase"),Ce(i,"color",e[2](e[6])),c(t,"class",L=(e[1]===e[8]?"":"cursor-pointer")+" aspect-square relative"),Ce(t,"background-color",e[6].formatHex())},m(g,f){J(g,t,f),m(t,r),m(r,n),m(t,l),m(t,i),m(i,d),m(t,y),A||(u=se(t,"click",a),A=!0)},p(g,f){e=g,f&1&&s!==(s=e[6].formatHex())&&c(n,"fill",s),f&3&&o!==(o=(e[1]===e[8]?"copied":e[6].formatHex())+"")&&me(d,o),f&1&&Ce(i,"color",e[2](e[6])),f&2&&L!==(L=(e[1]===e[8]?"":"cursor-pointer")+" aspect-square relative")&&c(t,"class",L),f&1&&Ce(t,"background-color",e[6].formatHex())},d(g){g&&w(t),A=!1,u()}}}function lr(e){let t,r,n=e[0],s=[];for(let l=0;l50?_e(y.h,y.c,0).formatHex():_e(y.h,y.c,100).formatHex()}let l=-1;async function i(d,y){l>-1||(r(1,l=y),await navigator.clipboard.write([new ClipboardItem({"text/plain":new Blob([d],{type:"text/plain"})})]),setTimeout(()=>{r(1,l=-1)},800))}const o=(d,y)=>i(d.formatHex(),y);return e.$$set=d=>{"colors"in d&&r(0,n=d.colors)},[n,l,s,i,o]}class or extends Ee{constructor(t){super(),Ne(this,t,ir,lr,$e,{colors:0})}}function gt(e,t,r){const n=e.slice();return n[12]=t[r],n[14]=r,n}function pt(e){let t,r;return t=new or({props:{colors:e[4]}}),{c(){He(t.$$.fragment)},l(n){qe(t.$$.fragment,n)},m(n,s){Re(t,n,s),r=!0},p(n,s){const l={};s&16&&(l.colors=n[4]),t.$set(l)},i(n){r||(Q(t.$$.fragment,n),r=!0)},o(n){ae(t.$$.fragment,n),r=!1},d(n){Le(t,n)}}}function mt(e){let t,r,n,s;function l(){return e[8](e[14])}function i(){return e[9](e[14])}return{c(){t=S("button"),this.h()},l(o){t=z(o,"BUTTON",{class:!0}),M(t).forEach(w),this.h()},h(){c(t,"class",r=(e[1]===e[14]?"bg-black dark:bg-white":"bg-white dark:bg-black")+" dark:bg-slate-300 rounded-full h-3 w-3 m-1 border border-black dark:border-white")},m(o,d){J(o,t,d),n||(s=[se(t,"click",l),se(t,"mousemove",i)],n=!0)},p(o,d){e=o,d&2&&r!==(r=(e[1]===e[14]?"bg-black dark:bg-white":"bg-white dark:bg-black")+" dark:bg-slate-300 rounded-full h-3 w-3 m-1 border border-black dark:border-white")&&c(t,"class",r)},d(o){o&&w(t),n=!1,Oe(s)}}}function cr(e){let t,r,n,s,l,i,o,d,y,L,A,u,a,g,f,x,b,N,H,R,v=e[2]?"Copied":"Copy",$,I,B,E,C=e[4]&&pt(e),O=e[0].images,q=[];for(let p=0;p{C=null}),Qe()),(!I||D&8&&!Ze(L.src,A=p[3]))&&c(L,"src",A),(!I||D&32)&&c(L,"alt",p[5]),D&3){O=p[0].images;let h;for(h=0;h{r(2,y=!1)},1e3))}const A=f=>r(1,d=f),u=f=>r(1,d=f),a=()=>i("remix",{prompt:n}),g=()=>L(s.map(f=>f.formatHex()).join(", "));return e.$$set=f=>{"promptData"in f&&r(0,o=f.promptData)},e.$$.update=()=>{var f,x;e.$$.dirty&1&&r(5,n=o==null?void 0:o.prompt),e.$$.dirty&3&&r(4,s=((f=o==null?void 0:o.images[d])==null?void 0:f.colors.map(b=>Xe(b)))||[]),e.$$.dirty&3&&r(3,l=(x=o==null?void 0:o.images[d])==null?void 0:x.imgURL)},[o,d,y,l,s,n,i,L,A,u,a,g]}class ur extends Ee{constructor(t){super(),Ne(this,t,fr,cr,$e,{promptData:0})}}function hr(e){let t,r;return{c(){t=he("svg"),r=he("path"),this.h()},l(n){t=de(n,"svg",{class:!0,xmlns:!0,"xmlns:xlink":!0,"aria-hidden":!0,focusable:!0,role:!0,width:!0,height:!0,preserveAspectRatio:!0,viewBox:!0});var s=M(t);r=de(s,"path",{d:!0,fill:!0}),M(r).forEach(w),s.forEach(w),this.h()},h(){c(r,"d","M10 16L20 6l1.4 1.4l-8.6 8.6l8.6 8.6L20 26z"),c(r,"fill","currentColor"),c(t,"class","ml-1.5 transform rotate-180"),c(t,"xmlns","http://www.w3.org/2000/svg"),c(t,"xmlns:xlink","http://www.w3.org/1999/xlink"),c(t,"aria-hidden","true"),c(t,"focusable","false"),c(t,"role","img"),c(t,"width","1em"),c(t,"height","1em"),c(t,"preserveAspectRatio","xMidYMid meet"),c(t,"viewBox","0 0 32 32")},m(n,s){J(n,t,s),m(t,r)},p:ue,i:ue,o:ue,d(n){n&&w(t)}}}class dr extends Ee{constructor(t){super(),Ne(this,t,null,hr,$e,{})}}function gr(e){let t,r;return{c(){t=he("svg"),r=he("path"),this.h()},l(n){t=de(n,"svg",{class:!0,xmlns:!0,"xmlns:xlink":!0,"aria-hidden":!0,focusable:!0,role:!0,width:!0,height:!0,preserveAspectRatio:!0,viewBox:!0});var s=M(t);r=de(s,"path",{d:!0,fill:!0}),M(r).forEach(w),s.forEach(w),this.h()},h(){c(r,"d","M10 16L20 6l1.4 1.4l-8.6 8.6l8.6 8.6L20 26z"),c(r,"fill","currentColor"),c(t,"class","mr-1.5"),c(t,"xmlns","http://www.w3.org/2000/svg"),c(t,"xmlns:xlink","http://www.w3.org/1999/xlink"),c(t,"aria-hidden","true"),c(t,"focusable","false"),c(t,"role","img"),c(t,"width","1em"),c(t,"height","1em"),c(t,"preserveAspectRatio","xMidYMid meet"),c(t,"viewBox","0 0 32 32")},m(n,s){J(n,t,s),m(t,r)},p:ue,i:ue,o:ue,d(n){n&&w(t)}}}class pr extends Ee{constructor(t){super(),Ne(this,t,null,gr,$e,{})}}function bt(e,t,r){const n=e.slice();return n[22]=t[r],n}function xt(e){let t,r,n,s,l=e[7]&&vt();return{c(){t=S("h3"),r=j(e[6]),n=T(),l&&l.c(),s=rt(),this.h()},l(i){t=z(i,"H3",{class:!0});var o=M(t);r=F(o,e[6]),o.forEach(w),n=U(i),l&&l.l(i),s=rt(),this.h()},h(){c(t,"class","text-xs font-bold ml-3 inline-block")},m(i,o){J(i,t,o),m(t,r),J(i,n,o),l&&l.m(i,o),J(i,s,o)},p(i,o){o&64&&me(r,i[6]),i[7]?l||(l=vt(),l.c(),l.m(s.parentNode,s)):l&&(l.d(1),l=null)},d(i){i&&w(t),i&&w(n),l&&l.d(i),i&&w(s)}}}function vt(e){let t,r;return{c(){t=he("svg"),r=he("path"),this.h()},l(n){t=de(n,"svg",{xmlns:!0,fill:!0,viewBox:!0,class:!0});var s=M(t);r=de(s,"path",{fill:!0,d:!0}),M(r).forEach(w),s.forEach(w),this.h()},h(){c(r,"fill","currentColor"),c(r,"d","M20 12a8 8 0 0 1-8 8v4a12 12 0 0 0 12-12h-4Zm-2-5.3a8 8 0 0 1 2 5.3h4c0-3-1.1-5.8-3-8l-3 2.7Z"),c(t,"xmlns","http://www.w3.org/2000/svg"),c(t,"fill","none"),c(t,"viewBox","0 0 24 24"),c(t,"class","animate-spin max-w-[1rem] inline-block")},m(n,s){J(n,t,s),m(t,r)},d(n){n&&w(t)}}}function wt(e){let t,r,n,s,l,i,o,d,y,L,A,u,a,g=e[0]+1+"",f,x,b,N,H,R,v,$,I,B,E,C,O,q=e[4],p=[];for(let h=0;hae(p[h],1,1,()=>{p[h]=null});return y=new pr({}),B=new dr({}),{c(){t=S("div");for(let h=0;h{k=null}),Qe())},i(_){q||(Q(k),q=!0)},o(_){ae(k),q=!1},d(_){_&&w(t),e[13](null),h&&h.d(),k&&k.d(),p=!1,Oe(D)}}}const We=10;function yt(e){return e.sort((t,r)=>r.id-t.id).map(t=>t.data).filter(t=>t.images.length>0)}function br(e,t,r){let n,s,l,i,o;tt(e,X,E=>r(6,i=E)),tt(e,xe,E=>r(7,o=E));let d=[],y,L;Lt(()=>{A();const E=window.setInterval(A,5e3);return()=>{clearInterval(E)}});async function A(){const E=await fetch(ut+"/data").then(C=>C.json());(!d||(E==null?void 0:E.length)>(d==null?void 0:d.length))&&r(11,d=yt(E))}let u=0,a=[];async function g(E){try{const C=await fetch(ut+"/new_palette",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({prompt:E.prompt,images:E.images.map(O=>({imgURL:O.imgURL,colors:O.colors.map(q=>q.formatHex())}))})}).then(O=>O.json());r(11,d=yt(C))}catch(C){console.error(C)}}async function f(E){if(!E||o==!0)return;W(X,i="Pending",i),W(xe,o=!0,o);const C=crypto.randomUUID(),O={fn_index:2,session_hash:C},q={data:[E]},p=new WebSocket(sr);p.onclose=D=>{D.wasClean||(W(X,i="Error",i),W(xe,o=!1,o))},p.onmessage=async function(D){try{const h=JSON.parse(D.data);switch(W(X,i="",i),h.msg){case"send_hash":p.send(JSON.stringify(O));break;case"send_data":W(X,i="Sending Data",i),p.send(JSON.stringify({...O,...q}));break;case"queue_full":W(X,i="Queue full",i),p.close(),W(xe,o=!1,o);return;case"estimation":const{msg:k,rank:_,queue_size:P}=h;W(X,i=`On queue ${_}/${P}`,i);break;case"process_generating":W(X,i=h.success?"Generating":"Error",i);break;case"process_completed":try{const V=await x(h.output.data[0],E);g({prompt:E,images:V}),W(X,i=h.success?"Complete":"Error",i)}catch(V){W(X,i=V.message,i)}p.close(),W(xe,o=!1,o);return;case"process_starts":W(X,i="Processing",i);break}}catch(h){console.error(h),W(xe,o=!1,o),W(X,i="Error",i)}}}async function x(E,C){const O=["#040404","#B7B7B7","#565656","#747474","#6C6C6C"],q=[];let p=!1;for(const D of E){const{colors:h,imgBlob:k}=await rr(D);if(h.map(_=>_.formatHex().toUpperCase()).every(_=>O.includes(_)))p=!0;else{const _=await nr(k,C),P={colors:h,imgURL:_};q.push(P)}}if(q.length===0&&p)throw console.error("Possible NSFW image"),new Error("Possible NSFW image");return q}function b(E){r(2,y=E.detail.prompt),L.scrollIntoView({behavior:"smooth"}),N()}function N(){window.scrollTo(0,0),"parentIFrame"in window&&window.parentIFrame.scrollTo(0,L.offsetTop)}function H(E){St[E?"unshift":"push"](()=>{L=E,r(3,L)})}function R(){y=this.value,r(2,y)}const v=()=>f(y),$=()=>f(y),I=()=>{r(0,u=u-1<0?0:u-1),N()},B=()=>{r(0,u=u+1>=s-1?s-1:u+1),N()};return e.$$.update=()=>{if(e.$$.dirty&2048&&r(5,n=(d==null?void 0:d.length)||null),e.$$.dirty&2048&&r(1,s=Math.ceil((d==null?void 0:d.length)/We)||0),e.$$.dirty&2049&&r(4,l=[...d].slice(u*We,(u+1)*We)),e.$$.dirty&4098&&s){const E=Array(s).fill([]).map((C,O)=>({value:O,label:O+1}));r(12,a=E.slice(0,3).concat([{value:-1,label:"..."}]).concat(E.length>3?E.slice(-1):[])),console.log(a)}},[u,s,y,L,l,n,i,o,f,b,N,d,a,H,R,v,$,I,B]}class wr extends Ee{constructor(t){super(),Ne(this,t,br,mr,$e,{})}}export{wr as default}; diff --git a/static/_app/immutable/modules/pages/_layout.ts-b8ee4d7c.js b/static/_app/immutable/modules/pages/_layout.ts-b8ee4d7c.js new file mode 100644 index 0000000000000000000000000000000000000000..bce84918a025adf81c9aa5b1fbba49f77c9044e6 --- /dev/null +++ b/static/_app/immutable/modules/pages/_layout.ts-b8ee4d7c.js @@ -0,0 +1 @@ +import{p}from"../../chunks/_layout-1daba58d.js";export{p as prerender}; diff --git a/static/_app/immutable/start-20d8ad7e.js b/static/_app/immutable/start-20d8ad7e.js new file mode 100644 index 0000000000000000000000000000000000000000..056a433dee6139b00d2cf6597f08783eb6deea5a --- /dev/null +++ b/static/_app/immutable/start-20d8ad7e.js @@ -0,0 +1 @@ +import{S as Ge,i as We,s as He,a as Me,e as z,c as Xe,b as W,g as ie,t as K,d as le,f as x,h as F,j as Ye,o as be,k as Qe,l as Ze,m as et,n as ge,p as C,q as tt,r as nt,u as rt,v as H,w as Se,x as M,y as X,z as De}from"./chunks/index-5559954d.js";import{g as Ce,f as qe,s as G,a as ve,b as at,i as st}from"./chunks/singletons-e4c31a41.js";const ot=function(){const e=document.createElement("link").relList;return e&&e.supports&&e.supports("modulepreload")?"modulepreload":"preload"}(),it=function(r,e){return new URL(r,e).href},Ve={},se=function(e,t,c){return!t||t.length===0?e():Promise.all(t.map(o=>{if(o=it(o,c),o in Ve)return;Ve[o]=!0;const d=o.endsWith(".css"),n=d?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${o}"]${n}`))return;const f=document.createElement("link");if(f.rel=d?"stylesheet":ot,d||(f.as="script",f.crossOrigin=""),f.href=o,document.head.appendChild(f),d)return new Promise((w,_)=>{f.addEventListener("load",w),f.addEventListener("error",()=>_(new Error(`Unable to preload CSS for ${o}`)))})})).then(()=>e())};class we{constructor(e,t){this.status=e,typeof t=="string"?this.body={message:t}:t?this.body=t:this.body={message:`Error: ${e}`}}toString(){return JSON.stringify(this.body)}}class Be{constructor(e,t){this.status=e,this.location=t}}function lt(r,e){return r==="/"||e==="ignore"?r:e==="never"?r.endsWith("/")?r.slice(0,-1):r:e==="always"&&!r.endsWith("/")?r+"/":r}function ct(r){for(const e in r)r[e]=r[e].replace(/%23/g,"#").replace(/%3[Bb]/g,";").replace(/%2[Cc]/g,",").replace(/%2[Ff]/g,"/").replace(/%3[Ff]/g,"?").replace(/%3[Aa]/g,":").replace(/%40/g,"@").replace(/%26/g,"&").replace(/%3[Dd]/g,"=").replace(/%2[Bb]/g,"+").replace(/%24/g,"$");return r}const ft=["href","pathname","search","searchParams","toString","toJSON"];function ut(r,e){const t=new URL(r);for(const c of ft){let o=t[c];Object.defineProperty(t,c,{get(){return e(),o},enumerable:!0,configurable:!0})}return t[Symbol.for("nodejs.util.inspect.custom")]=(c,o,d)=>d(r,o),dt(t),t}function dt(r){Object.defineProperty(r,"hash",{get(){throw new Error("Cannot access event.url.hash. Consider using `$page.url.hash` inside a component instead")}})}function pt(r){let e=5381,t=r.length;if(typeof r=="string")for(;t;)e=e*33^r.charCodeAt(--t);else for(;t;)e=e*33^r[--t];return(e>>>0).toString(36)}const Re=window.fetch;window.fetch=(r,e)=>{if((r instanceof Request?r.method:(e==null?void 0:e.method)||"GET")!=="GET"){const c=new URL(r instanceof Request?r.url:r.toString(),document.baseURI).href;oe.delete(c)}return Re(r,e)};const oe=new Map;function ht(r,e,t){let o=`script[data-sveltekit-fetched][data-url=${JSON.stringify(typeof r=="string"?r:r.url)}]`;t&&typeof t.body=="string"&&(o+=`[data-hash="${pt(t.body)}"]`);const d=document.querySelector(o);if(d!=null&&d.textContent){const{body:n,...f}=JSON.parse(d.textContent),w=d.getAttribute("data-ttl");return w&&oe.set(e,{body:n,init:f,ttl:1e3*Number(w)}),Promise.resolve(new Response(n,f))}return Re(r,t)}function mt(r,e){const t=oe.get(r);if(t){if(performance.now(){const w=decodeURIComponent(d),_=/^\[\.\.\.(\w+)(?:=(\w+))?\]$/.exec(w);if(_)return e.push(_[1]),t.push(_[2]),"(?:/(.*))?";const b=n===f.length-1;return w&&"/"+w.split(/\[(.+?)\]/).map(($,S)=>{if(S%2){const N=_t.exec($);if(!N)throw new Error(`Invalid param: ${$}. Params and matcher names can only have underscores and alphanumeric characters.`);const[,j,T,q]=N;return e.push(T),t.push(q),j?"(.*?)":"([^/]+?)"}return b&&$.includes(".")&&(c=!1),$.normalize().replace(/%5[Bb]/g,"[").replace(/%5[Dd]/g,"]").replace(/#/g,"%23").replace(/\?/g,"%3F").replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}).join("")}).join("")}${c?"/?":""}$`),names:e,types:t}}function wt(r){return!/^\([^)]+\)$/.test(r)}function yt(r,e,t,c){const o={};for(let d=0;d{const{pattern:$,names:S,types:N}=gt(f),j={id:f,exec:T=>{const q=$.exec(T);if(q)return yt(q,S,N,c)},errors:[1,...b||[]].map(T=>r[T]),layouts:[0,..._||[]].map(n),leaf:d(w)};return j.errors.length=j.layouts.length=Math.max(j.errors.length,j.layouts.length),j});function d(f){const w=f<0;return w&&(f=~f),[w,r[f]]}function n(f){return f===void 0?f:[o.has(f),r[f]]}}function vt(r){let e,t,c;var o=r[0][0];function d(n){return{props:{data:n[2],form:n[1]}}}return o&&(e=new o(d(r))),{c(){e&&H(e.$$.fragment),t=z()},l(n){e&&Se(e.$$.fragment,n),t=z()},m(n,f){e&&M(e,n,f),W(n,t,f),c=!0},p(n,f){const w={};if(f&4&&(w.data=n[2]),f&2&&(w.form=n[1]),o!==(o=n[0][0])){if(e){ie();const _=e;K(_.$$.fragment,1,0,()=>{X(_,1)}),le()}o?(e=new o(d(n)),H(e.$$.fragment),x(e.$$.fragment,1),M(e,t.parentNode,t)):e=null}else o&&e.$set(w)},i(n){c||(e&&x(e.$$.fragment,n),c=!0)},o(n){e&&K(e.$$.fragment,n),c=!1},d(n){n&&F(t),e&&X(e,n)}}}function kt(r){let e,t,c;var o=r[0][0];function d(n){return{props:{data:n[2],$$slots:{default:[Et]},$$scope:{ctx:n}}}}return o&&(e=new o(d(r))),{c(){e&&H(e.$$.fragment),t=z()},l(n){e&&Se(e.$$.fragment,n),t=z()},m(n,f){e&&M(e,n,f),W(n,t,f),c=!0},p(n,f){const w={};if(f&4&&(w.data=n[2]),f&523&&(w.$$scope={dirty:f,ctx:n}),o!==(o=n[0][0])){if(e){ie();const _=e;K(_.$$.fragment,1,0,()=>{X(_,1)}),le()}o?(e=new o(d(n)),H(e.$$.fragment),x(e.$$.fragment,1),M(e,t.parentNode,t)):e=null}else o&&e.$set(w)},i(n){c||(e&&x(e.$$.fragment,n),c=!0)},o(n){e&&K(e.$$.fragment,n),c=!1},d(n){n&&F(t),e&&X(e,n)}}}function Et(r){let e,t,c;var o=r[0][1];function d(n){return{props:{data:n[3],form:n[1]}}}return o&&(e=new o(d(r))),{c(){e&&H(e.$$.fragment),t=z()},l(n){e&&Se(e.$$.fragment,n),t=z()},m(n,f){e&&M(e,n,f),W(n,t,f),c=!0},p(n,f){const w={};if(f&8&&(w.data=n[3]),f&2&&(w.form=n[1]),o!==(o=n[0][1])){if(e){ie();const _=e;K(_.$$.fragment,1,0,()=>{X(_,1)}),le()}o?(e=new o(d(n)),H(e.$$.fragment),x(e.$$.fragment,1),M(e,t.parentNode,t)):e=null}else o&&e.$set(w)},i(n){c||(e&&x(e.$$.fragment,n),c=!0)},o(n){e&&K(e.$$.fragment,n),c=!1},d(n){n&&F(t),e&&X(e,n)}}}function Je(r){let e,t=r[5]&&ze(r);return{c(){e=Qe("div"),t&&t.c(),this.h()},l(c){e=Ze(c,"DIV",{id:!0,"aria-live":!0,"aria-atomic":!0,style:!0});var o=et(e);t&&t.l(o),o.forEach(F),this.h()},h(){ge(e,"id","svelte-announcer"),ge(e,"aria-live","assertive"),ge(e,"aria-atomic","true"),C(e,"position","absolute"),C(e,"left","0"),C(e,"top","0"),C(e,"clip","rect(0 0 0 0)"),C(e,"clip-path","inset(50%)"),C(e,"overflow","hidden"),C(e,"white-space","nowrap"),C(e,"width","1px"),C(e,"height","1px")},m(c,o){W(c,e,o),t&&t.m(e,null)},p(c,o){c[5]?t?t.p(c,o):(t=ze(c),t.c(),t.m(e,null)):t&&(t.d(1),t=null)},d(c){c&&F(e),t&&t.d()}}}function ze(r){let e;return{c(){e=tt(r[6])},l(t){e=nt(t,r[6])},m(t,c){W(t,e,c)},p(t,c){c&64&&rt(e,t[6])},d(t){t&&F(e)}}}function St(r){let e,t,c,o,d;const n=[kt,vt],f=[];function w(b,$){return b[0][1]?0:1}e=w(r),t=f[e]=n[e](r);let _=r[4]&&Je(r);return{c(){t.c(),c=Me(),_&&_.c(),o=z()},l(b){t.l(b),c=Xe(b),_&&_.l(b),o=z()},m(b,$){f[e].m(b,$),W(b,c,$),_&&_.m(b,$),W(b,o,$),d=!0},p(b,[$]){let S=e;e=w(b),e===S?f[e].p(b,$):(ie(),K(f[S],1,1,()=>{f[S]=null}),le(),t=f[e],t?t.p(b,$):(t=f[e]=n[e](b),t.c()),x(t,1),t.m(c.parentNode,c)),b[4]?_?_.p(b,$):(_=Je(b),_.c(),_.m(o.parentNode,o)):_&&(_.d(1),_=null)},i(b){d||(x(t),d=!0)},o(b){K(t),d=!1},d(b){f[e].d(b),b&&F(c),_&&_.d(b),b&&F(o)}}}function Rt(r,e,t){let{stores:c}=e,{page:o}=e,{components:d}=e,{form:n}=e,{data_0:f=null}=e,{data_1:w=null}=e;Ye(c.page.notify);let _=!1,b=!1,$=null;return be(()=>{const S=c.page.subscribe(()=>{_&&(t(5,b=!0),t(6,$=document.title||"untitled page"))});return t(4,_=!0),S}),r.$$set=S=>{"stores"in S&&t(7,c=S.stores),"page"in S&&t(8,o=S.page),"components"in S&&t(0,d=S.components),"form"in S&&t(1,n=S.form),"data_0"in S&&t(2,f=S.data_0),"data_1"in S&&t(3,w=S.data_1)},r.$$.update=()=>{r.$$.dirty&384&&c.page.set(o)},[d,n,f,w,_,b,$,c,o]}class $t extends Ge{constructor(e){super(),We(this,e,Rt,St,He,{stores:7,page:8,components:0,form:1,data_0:2,data_1:3})}}const Lt={},ce=[()=>se(()=>import("./chunks/0-17a4fec1.js"),["chunks/0-17a4fec1.js","chunks/_layout-1daba58d.js","components/pages/_layout.svelte-55da5a4f.js","assets/_layout-e397cbf6.css","chunks/index-5559954d.js"],import.meta.url),()=>se(()=>import("./chunks/1-26e94021.js"),["chunks/1-26e94021.js","components/error.svelte-c31c95c4.js","chunks/index-5559954d.js","chunks/singletons-e4c31a41.js","chunks/index-3bda1050.js"],import.meta.url),()=>se(()=>import("./chunks/2-fc64cbc2.js"),["chunks/2-fc64cbc2.js","components/pages/_page.svelte-3643b29c.js","assets/_page-fd1176fc.css","chunks/index-5559954d.js","chunks/index-3bda1050.js"],import.meta.url)],Pt=[],Ot={"":[2]},jt={handleError:({error:r})=>(console.error(r),{message:"Internal Error"})},Ut="/__data.js",Fe="sveltekit:scroll",J="sveltekit:index",ne=bt(ce,Pt,Ot,Lt),ke=ce[0],Ee=ce[1];ke();Ee();let ee={};try{ee=JSON.parse(sessionStorage[Fe])}catch{}function ye(r){ee[r]=ve()}function It({target:r,base:e,trailing_slash:t}){var Ne;const c=[],o={id:null,promise:null},d={before_navigate:[],after_navigate:[]};let n={branch:[],error:null,session_id:0,url:null},f=!1,w=!0,_=!1,b=1,$=null,S=!1,N,j=(Ne=history.state)==null?void 0:Ne[J];j||(j=Date.now(),history.replaceState({...history.state,[J]:j},"",location.href));const T=ee[j];T&&(history.scrollRestoration="manual",scrollTo(T.x,T.y));let q=!1,V,$e;function Le(){if(!$){const a=new URL(location.href);$=Promise.resolve().then(async()=>{const i=pe(a,!0);await Oe(i,a,[]),$=null,S=!1})}return $}async function fe(a,{noscroll:i=!1,replaceState:p=!1,keepfocus:s=!1,state:l={}},h){return typeof a=="string"&&(a=new URL(a,Ce(document))),he({url:a,scroll:i?ve():null,keepfocus:s,redirect_chain:h,details:{state:l,replaceState:p},accepted:()=>{},blocked:()=>{},type:"goto"})}async function Pe(a){const i=pe(a,!1);if(!i)throw new Error("Attempted to prefetch a URL that does not belong to this app");return o.promise=Ie(i),o.id=i.id,o.promise}async function Oe(a,i,p,s,l){var v,k;const h=$e={};let m=a&&await Ie(a);if(!m&&i.origin===location.origin&&i.pathname===location.pathname&&(m=await te({status:404,error:new Error(`Not found: ${i.pathname}`),url:i,routeId:null})),!m)return await Q(i),!1;if(i=(a==null?void 0:a.url)||i,$e!==h)return!1;if(c.length=0,m.type==="redirect")if(p.length>10||p.includes(i.pathname))m=await te({status:500,error:new Error("Redirect loop"),url:i,routeId:null});else return fe(new URL(m.location,i).href,{},[...p,i.pathname]),!1;else((k=(v=m.props)==null?void 0:v.page)==null?void 0:k.status)>=400&&await G.updated.check()&&await Q(i);if(_=!0,s&&s.details){const{details:y}=s,g=y.replaceState?0:1;y.state[J]=j+=g,history[y.replaceState?"replaceState":"pushState"](y.state,"",i)}if(f){n=m.state,m.props.page&&(m.props.page.url=i);const y=ae();N.$set(m.props),y()}else je(m);if(s){const{scroll:y,keepfocus:g}=s;if(!g){const E=document.body,U=E.getAttribute("tabindex");E.tabIndex=-1,E.focus({preventScroll:!0}),setTimeout(()=>{var L;(L=getSelection())==null||L.removeAllRanges()}),U!==null?E.setAttribute("tabindex",U):E.removeAttribute("tabindex")}if(await De(),w){const E=i.hash&&document.getElementById(i.hash.slice(1));y?scrollTo(y.x,y.y):E?E.scrollIntoView():scrollTo(0,0)}}else await De();o.promise=null,o.id=null,w=!0,m.props.page&&(V=m.props.page),l&&l(),_=!1}function je(a){var l,h;n=a.state;const i=document.querySelector("style[data-sveltekit]");i&&i.remove(),V=a.props.page;const p=ae();N=new $t({target:r,props:{...a.props,stores:G},hydrate:!0}),p();const s={from:null,to:re("to",{params:n.params,routeId:(h=(l=n.route)==null?void 0:l.id)!=null?h:null,url:new URL(location.href)}),type:"load"};d.after_navigate.forEach(m=>m(s)),f=!0}async function Y({url:a,params:i,branch:p,status:s,error:l,route:h,form:m}){var U;const v=p.filter(Boolean),k={type:"loaded",state:{url:a,params:i,branch:p,error:l,route:h,session_id:b},props:{components:v.map(L=>L.node.component)}};m!==void 0&&(k.props.form=m);let y={},g=!V;for(let L=0;LA===I))&&(k.props[`data_${L}`]=y,g=g||Object.keys((U=I.data)!=null?U:{}).length>0)}if(g||(g=Object.keys(V.data).length!==Object.keys(y).length),!n.url||a.href!==n.url.href||n.error!==l||g){k.props.page={error:l,params:i,routeId:h&&h.id,status:s,url:a,data:g?y:V.data};const L=(I,A)=>{Object.defineProperty(k.props.page,I,{get:()=>{throw new Error(`$page.${I} has been replaced by $page.url.${A}`)}})};L("origin","origin"),L("path","pathname"),L("query","searchParams")}return k}async function ue({loader:a,parent:i,url:p,params:s,routeId:l,server_data_node:h}){var y,g,E,U,L;let m=null;const v={dependencies:new Set,params:new Set,parent:!1,url:!1},k=await a();if((y=k.shared)!=null&&y.load){let I=function(...u){for(const R of u){const{href:O}=new URL(R,p);v.dependencies.add(O)}};const A={};for(const u in s)Object.defineProperty(A,u,{get(){return v.params.add(u),s[u]},enumerable:!0});const B={routeId:l,params:A,data:(g=h==null?void 0:h.data)!=null?g:null,url:ut(p,()=>{v.url=!0}),async fetch(u,R){let O;typeof u=="string"?O=u:(O=u.url,R={body:u.method==="GET"||u.method==="HEAD"?void 0:await u.blob(),cache:u.cache,credentials:u.credentials,headers:u.headers,integrity:u.integrity,keepalive:u.keepalive,method:u.method,mode:u.mode,redirect:u.redirect,referrer:u.referrer,referrerPolicy:u.referrerPolicy,signal:u.signal,...R});const P=new URL(O,p).href;return I(P),f?mt(P,R):ht(O,P,R)},setHeaders:()=>{},depends:I,parent(){return v.parent=!0,i()}};Object.defineProperties(B,{props:{get(){throw new Error("@migration task: Replace `props` with `data` stuff https://github.com/sveltejs/kit/discussions/5774#discussioncomment-3292693")},enumerable:!1},session:{get(){throw new Error("session is no longer available. See https://github.com/sveltejs/kit/discussions/5883")},enumerable:!1},stuff:{get(){throw new Error("@migration task: Remove stuff https://github.com/sveltejs/kit/discussions/5774#discussioncomment-3292693")},enumerable:!1}}),m=(E=await k.shared.load.call(null,B))!=null?E:null}return{node:k,loader:a,server:h,shared:(U=k.shared)!=null&&U.load?{type:"data",data:m,uses:v}:null,data:(L=m!=null?m:h==null?void 0:h.data)!=null?L:null}}function Ue(a,i,p){if(S)return!0;if(!p)return!1;if(p.parent&&i||a.url&&p.url)return!0;for(const s of a.params)if(p.params.has(s))return!0;for(const s of p.dependencies)if(c.some(l=>l(new URL(s))))return!0;return!1}function de(a,i){var p,s;return(a==null?void 0:a.type)==="data"?{type:"data",data:a.data,uses:{dependencies:new Set((p=a.uses.dependencies)!=null?p:[]),params:new Set((s=a.uses.params)!=null?s:[]),parent:!!a.uses.parent,url:!!a.uses.url}}:(a==null?void 0:a.type)==="skip"&&i!=null?i:null}async function Ie({id:a,invalidating:i,url:p,params:s,route:l}){var B;if(o.id===a&&o.promise)return o.promise;const{errors:h,layouts:m,leaf:v}=l,k=n.url&&{url:a!==n.url.pathname+n.url.search,params:Object.keys(s).filter(u=>n.params[u]!==s[u])},y=[...m,v];h.forEach(u=>u==null?void 0:u().catch(()=>{})),y.forEach(u=>u==null?void 0:u[1]().catch(()=>{}));let g=null;const E=y.reduce((u,R,O)=>{var D;const P=n.branch[O],Z=!!(R!=null&&R[0])&&((P==null?void 0:P.loader)!==R[1]||Ue(k,u.some(Boolean),(D=P.server)==null?void 0:D.uses));return u.push(Z),u},[]);if(E.some(Boolean)){try{g=await Ke(p,E)}catch(u){return te({status:500,error:u,url:p,routeId:l.id})}if(g.type==="redirect")return g}const U=g==null?void 0:g.nodes;let L=!1;const I=y.map(async(u,R)=>{var D;if(!u)return;const O=n.branch[R],P=U==null?void 0:U[R];if((!P||P.type==="skip")&&u[1]===(O==null?void 0:O.loader)&&!Ue(k,L,(D=O.shared)==null?void 0:D.uses))return O;if(L=!0,(P==null?void 0:P.type)==="error")throw P;return ue({loader:u[1],url:p,params:s,routeId:l.id,parent:async()=>{var Te;const me={};for(let _e=0;_e{});const A=[];for(let u=0;uPromise.resolve({}),server_data_node:de(m)}),k={node:await Ee(),loader:Ee,shared:null,server:null,data:null};return await Y({url:p,params:l,branch:[v,k],status:a,error:i instanceof we?i.body:xe(i,{url:p,params:l,routeId:null}),route:null})}function pe(a,i){if(Ae(a))return;const p=decodeURI(a.pathname.slice(e.length)||"/");for(const s of ne){const l=s.exec(p);if(l){const h=new URL(a.origin+lt(a.pathname,t)+a.search+a.hash);return{id:h.pathname+h.search,invalidating:i,route:s,params:ct(l),url:h}}}}function Ae(a){return a.origin!==location.origin||!a.pathname.startsWith(e)}async function he({url:a,scroll:i,keepfocus:p,redirect_chain:s,details:l,type:h,delta:m,accepted:v,blocked:k}){var L,I,A,B;let y=!1;const g=pe(a,!1),E={from:re("from",{params:n.params,routeId:(I=(L=n.route)==null?void 0:L.id)!=null?I:null,url:n.url}),to:re("to",{params:(A=g==null?void 0:g.params)!=null?A:null,routeId:(B=g==null?void 0:g.route.id)!=null?B:null,url:a}),type:h};m!==void 0&&(E.delta=m);const U={...E,cancel:()=>{y=!0}};if(d.before_navigate.forEach(u=>u(U)),y){k();return}ye(j),v(),f&&G.navigating.set(E),await Oe(g,a,s,{scroll:i,keepfocus:p,details:l},()=>{d.after_navigate.forEach(u=>u(E)),G.navigating.set(null)})}function Q(a){return location.href=a.href,new Promise(()=>{})}return{after_navigate:a=>{be(()=>(d.after_navigate.push(a),()=>{const i=d.after_navigate.indexOf(a);d.after_navigate.splice(i,1)}))},before_navigate:a=>{be(()=>(d.before_navigate.push(a),()=>{const i=d.before_navigate.indexOf(a);d.before_navigate.splice(i,1)}))},disable_scroll_handling:()=>{(_||!f)&&(w=!1)},goto:(a,i={})=>fe(a,i,[]),invalidate:a=>{if(a===void 0)throw new Error("`invalidate()` (with no arguments) has been replaced by `invalidateAll()`");if(typeof a=="function")c.push(a);else{const{href:i}=new URL(a,location.href);c.push(p=>p.href===i)}return Le()},invalidateAll:()=>(S=!0,Le()),prefetch:async a=>{const i=new URL(a,Ce(document));await Pe(i)},prefetch_routes:async a=>{const p=(a?ne.filter(s=>a.some(l=>s.exec(l))):ne).map(s=>Promise.all([...s.layouts,s.leaf].map(l=>l==null?void 0:l[1]())));await Promise.all(p)},apply_action:async a=>{if(a.type==="error"){const i=new URL(location.href),{branch:p,route:s}=n;if(!s)return;let l=n.branch.length;for(;l--;)if(s.errors[l]){let h,m=l;for(;!p[m];)m-=1;try{h={node:await s.errors[l](),loader:s.errors[l],data:{},server:null,shared:null};const v=await Y({url:i,params:n.params,branch:p.slice(0,m+1).concat(h),status:500,error:a.error,route:s});n=v.state;const k=ae();N.$set(v.props),k();return}catch{continue}}}else if(a.type==="redirect")fe(a.location,{},[]);else{const i={form:a.data};a.status!==V.status&&(i.page={...V,status:a.status});const p=ae();N.$set(i),p()}},_start_router:()=>{history.scrollRestoration="manual",addEventListener("beforeunload",s=>{var m,v;let l=!1;const h={from:re("from",{params:n.params,routeId:(v=(m=n.route)==null?void 0:m.id)!=null?v:null,url:n.url}),to:null,type:"unload",cancel:()=>l=!0};d.before_navigate.forEach(k=>k(h)),l?(s.preventDefault(),s.returnValue=""):history.scrollRestoration="auto"}),addEventListener("visibilitychange",()=>{if(document.visibilityState==="hidden"){ye(j);try{sessionStorage[Fe]=JSON.stringify(ee)}catch{}}});const a=s=>{const{url:l,options:h}=qe(s);if(l&&h.prefetch){if(Ae(l))return;Pe(l)}};let i;const p=s=>{clearTimeout(i),i=setTimeout(()=>{var l;(l=s.target)==null||l.dispatchEvent(new CustomEvent("sveltekit:trigger_prefetch",{bubbles:!0}))},20)};addEventListener("touchstart",a),addEventListener("mousemove",p),addEventListener("sveltekit:trigger_prefetch",a),addEventListener("click",s=>{if(s.button||s.which!==1||s.metaKey||s.ctrlKey||s.shiftKey||s.altKey||s.defaultPrevented)return;const{a:l,url:h,options:m}=qe(s);if(!l||!h)return;const v=l instanceof SVGAElement;if(!v&&!(h.protocol==="https:"||h.protocol==="http:"))return;const k=(l.getAttribute("rel")||"").split(/\s+/);if(l.hasAttribute("download")||k.includes("external")||m.reload||(v?l.target.baseVal:l.target))return;const[y,g]=h.href.split("#");if(g!==void 0&&y===location.href.split("#")[0]){q=!0,ye(j),n.url=h,G.page.set({...V,url:h}),G.page.notify();return}he({url:h,scroll:m.noscroll?ve():null,keepfocus:!1,redirect_chain:[],details:{state:{},replaceState:h.href===location.href},accepted:()=>s.preventDefault(),blocked:()=>s.preventDefault(),type:"link"})}),addEventListener("popstate",s=>{if(s.state){if(s.state[J]===j)return;const l=s.state[J]-j;he({url:new URL(location.href),scroll:ee[s.state[J]],keepfocus:!1,redirect_chain:[],details:null,accepted:()=>{j=s.state[J]},blocked:()=>{history.go(-l)},type:"popstate",delta:l})}}),addEventListener("hashchange",()=>{q&&(q=!1,history.replaceState({...history.state,[J]:++j},"",location.href))});for(const s of document.querySelectorAll("link"))s.rel==="icon"&&(s.href=s.href);addEventListener("pageshow",s=>{s.persisted&&G.navigating.set(null)})},_hydrate:async({status:a,error:i,node_ids:p,params:s,routeId:l,data:h,form:m})=>{var y;const v=new URL(location.href);let k;try{const g=p.map(async(E,U)=>{const L=h[U];return ue({loader:ce[E],url:v,params:s,routeId:l,parent:async()=>{const I={};for(let A=0;AE.id===l))!=null?y:null})}catch(g){const E=g;if(E instanceof Be){await Q(new URL(g.location,location.href));return}k=await te({status:E instanceof we?E.status:500,error:E,url:v,routeId:l})}je(k)}}}let At=1;async function Ke(r,e){const t=new URL(r);t.pathname=r.pathname.replace(/\/$/,"")+Ut,t.searchParams.set("__invalid",e.map(o=>o?"y":"n").join("")),t.searchParams.set("__id",String(At++)),await se(()=>import(t.href),[],import.meta.url);const c=window.__sveltekit_data;return delete window.__sveltekit_data,c}function xe(r,e){var t;return(t=jt.handleError({error:r,event:e}))!=null?t:{message:"Internal Error"}}const Nt=["hash","href","host","hostname","origin","pathname","port","protocol","search","searchParams","toString","toJSON"];function re(r,e){for(const t of Nt)Object.defineProperty(e,t,{get(){throw new Error(`The navigation shape changed - ${r}.${t} should now be ${r}.url.${t}`)}});return e}function ae(){return()=>{}}async function Ct({env:r,hydrate:e,paths:t,target:c,trailing_slash:o}){at(t);const d=It({target:c,base:t.base,trailing_slash:o});st({client:d}),e?await d._hydrate(e):d.goto(location.href,{replaceState:!0}),d._start_router()}export{Ct as start}; diff --git a/static/_app/version.json b/static/_app/version.json new file mode 100644 index 0000000000000000000000000000000000000000..b76c41612d3aa34e1319f573c9e5bdfd1aadf8e7 --- /dev/null +++ b/static/_app/version.json @@ -0,0 +1 @@ +{"version":"1666722090902"} \ No newline at end of file diff --git a/static/favicon.png b/static/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..825b9e65af7c104cfb07089bb28659393b4f2097 Binary files /dev/null and b/static/favicon.png differ diff --git a/static/index.html b/static/index.html new file mode 100644 index 0000000000000000000000000000000000000000..302f333ae3e9c76cb311c4c88295fbd6d4c6fa13 --- /dev/null +++ b/static/index.html @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + +
+ + +

Palette generation with Stable Diffusion

+

Original ideas: + + Matt DesLauriers + , + dribnet

+
+
+
+ +
Loading...
+
+ +
+ +
+ + + +
+ + diff --git a/static/robots.txt b/static/robots.txt new file mode 100644 index 0000000000000000000000000000000000000000..e9e57dc4d41b9b46e05112e9f45b7ea6ac0ba15e --- /dev/null +++ b/static/robots.txt @@ -0,0 +1,3 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * +Disallow: diff --git a/static/svelte-welcome.png b/static/svelte-welcome.png new file mode 100644 index 0000000000000000000000000000000000000000..fe7d2d6b50ce937a0c3cecaa9a3501dfe138b7c8 Binary files /dev/null and b/static/svelte-welcome.png differ diff --git a/static/svelte-welcome.webp b/static/svelte-welcome.webp new file mode 100644 index 0000000000000000000000000000000000000000..6ec1a28d63b49d9288d0bc3bf3a341eb4edf3318 Binary files /dev/null and b/static/svelte-welcome.webp differ diff --git a/static/vite-manifest.json b/static/vite-manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..49c21d303d8c495c58d0ff00de47e3cc4d683614 --- /dev/null +++ b/static/vite-manifest.json @@ -0,0 +1,107 @@ +{ + "node_modules/@sveltejs/kit/src/runtime/client/start.js": { + "file": "_app/immutable/start-20d8ad7e.js", + "src": "node_modules/@sveltejs/kit/src/runtime/client/start.js", + "isEntry": true, + "imports": [ + "_index-5559954d.js", + "_singletons-e4c31a41.js" + ], + "dynamicImports": [ + ".svelte-kit/generated/nodes/0.js", + ".svelte-kit/generated/nodes/1.js", + ".svelte-kit/generated/nodes/2.js" + ] + }, + "src/routes/+layout.svelte": { + "file": "_app/immutable/components/pages/_layout.svelte-55da5a4f.js", + "src": "src/routes/+layout.svelte", + "isEntry": true, + "imports": [ + "_index-5559954d.js" + ], + "css": [ + "_app/immutable/assets/_layout-e397cbf6.css" + ] + }, + "node_modules/@sveltejs/kit/src/runtime/components/error.svelte": { + "file": "_app/immutable/components/error.svelte-c31c95c4.js", + "src": "node_modules/@sveltejs/kit/src/runtime/components/error.svelte", + "isEntry": true, + "imports": [ + "_index-5559954d.js", + "_singletons-e4c31a41.js" + ] + }, + "src/routes/+page.svelte": { + "file": "_app/immutable/components/pages/_page.svelte-3643b29c.js", + "src": "src/routes/+page.svelte", + "isEntry": true, + "imports": [ + "_index-5559954d.js", + "_index-3bda1050.js" + ], + "css": [ + "_app/immutable/assets/_page-fd1176fc.css" + ] + }, + "src/routes/+layout.ts": { + "file": "_app/immutable/modules/pages/_layout.ts-b8ee4d7c.js", + "src": "src/routes/+layout.ts", + "isEntry": true, + "imports": [ + "__layout-1daba58d.js" + ] + }, + "_singletons-e4c31a41.js": { + "file": "_app/immutable/chunks/singletons-e4c31a41.js", + "imports": [ + "_index-3bda1050.js" + ] + }, + "_index-5559954d.js": { + "file": "_app/immutable/chunks/index-5559954d.js" + }, + "_index-3bda1050.js": { + "file": "_app/immutable/chunks/index-3bda1050.js", + "imports": [ + "_index-5559954d.js" + ] + }, + "__layout-1daba58d.js": { + "file": "_app/immutable/chunks/_layout-1daba58d.js" + }, + ".svelte-kit/generated/nodes/0.js": { + "file": "_app/immutable/chunks/0-17a4fec1.js", + "src": ".svelte-kit/generated/nodes/0.js", + "isDynamicEntry": true, + "imports": [ + "__layout-1daba58d.js", + "src/routes/+layout.svelte" + ] + }, + ".svelte-kit/generated/nodes/1.js": { + "file": "_app/immutable/chunks/1-26e94021.js", + "src": ".svelte-kit/generated/nodes/1.js", + "isDynamicEntry": true, + "imports": [ + "node_modules/@sveltejs/kit/src/runtime/components/error.svelte" + ] + }, + ".svelte-kit/generated/nodes/2.js": { + "file": "_app/immutable/chunks/2-fc64cbc2.js", + "src": ".svelte-kit/generated/nodes/2.js", + "isDynamicEntry": true, + "imports": [ + "src/routes/+page.svelte" + ] + }, + "src/routes/+page.css": { + "file": "_app/immutable/assets/_page-fd1176fc.css", + "src": "src/routes/+page.css" + }, + "src/routes/+layout.css": { + "file": "_app/immutable/assets/_layout-e397cbf6.css", + "src": "src/routes/+layout.css" + } +} \ No newline at end of file