diff --git a/apps/website/package.json b/apps/website/package.json index 63e8f81..6c84bcb 100644 --- a/apps/website/package.json +++ b/apps/website/package.json @@ -42,7 +42,8 @@ "vite": "^8.0.0" }, "dependencies": { - "@123ishatest/louter": "^0.5.0", + "@123ishatest/louter": "^0.6.0", + "@123ishatest/lui": "*", "zod": "^4.4.3" } } diff --git a/apps/website/src/lib/components/atoms/LudiekProgress.svelte b/apps/website/src/lib/components/atoms/LudiekProgress.svelte index 439d567..768f663 100644 --- a/apps/website/src/lib/components/atoms/LudiekProgress.svelte +++ b/apps/website/src/lib/components/atoms/LudiekProgress.svelte @@ -1,5 +1,5 @@ -
-

You have {money} money

-

You have {gems} gems

-

You have planted {planted} sunflowers

+ +
+
+ + You have {money} money + - - -
+ +

You have {gems} gems

+
-
- -
+ +

You have planted {planted} sunflowers

+
+ +
+ + +
+
+
+ diff --git a/package-lock.json b/package-lock.json index 815b134..2f92ffe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,10 +1,10 @@ { - "name": "with-svelte", + "name": "@123ishatest/ludiek-monorepo", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "with-svelte", + "name": "@123ishatest/ludiek-monorepo", "workspaces": [ "apps/*", "packages/*" @@ -23,7 +23,8 @@ "name": "@123ishatest/ludiek-website", "version": "0.8.0", "dependencies": { - "@123ishatest/louter": "^0.5.0", + "@123ishatest/louter": "^0.6.0", + "@123ishatest/lui": "*", "zod": "^4.4.3" }, "devDependencies": { @@ -213,9 +214,9 @@ } }, "node_modules/@123ishatest/louter": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@123ishatest/louter/-/louter-0.5.3.tgz", - "integrity": "sha512-vA6Gsz/dmtWSwyIbI8oppAa7bheKbUzZngRljmMF+OmlJ9EBJqMVnQmUHIiNiKxFkna+VRs8KkywsvzYNrVH1w==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@123ishatest/louter/-/louter-0.6.0.tgz", + "integrity": "sha512-J7bNSYjg0PvU8FqCGUI/JakDSA3o7WdYuFLR/jVdK8D+4Qcie7Lx1Zd81Ia6bpqdF4f00HXKxo/Oz0zVVPYn5g==", "dependencies": { "yaml": "^2.8.2" }, @@ -239,6 +240,10 @@ "resolved": "apps/website", "link": true }, + "node_modules/@123ishatest/lui": { + "resolved": "packages/lui", + "link": true + }, "node_modules/@asamuzakjp/css-color": { "version": "5.1.11", "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-5.1.11.tgz", @@ -1197,7 +1202,6 @@ "version": "0.3.13", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", - "dev": true, "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", @@ -1208,7 +1212,6 @@ "version": "2.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", - "dev": true, "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", @@ -1219,7 +1222,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.0.0" @@ -1229,20 +1231,27 @@ "version": "1.5.5", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.31", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", - "dev": true, "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@lucide/svelte": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/@lucide/svelte/-/svelte-1.16.0.tgz", + "integrity": "sha512-AvvPJnaWxeiNkAljI5MsSEc84yHPLMaWQIAJOcbX7k9au/f9ITS7cxTTQiautDiOFKVOXiYdZ+d6mtl88J+Kbg==", + "license": "ISC", + "peerDependencies": { + "svelte": "^5" + } + }, "node_modules/@manypkg/find-root": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@manypkg/find-root/-/find-root-1.1.0.tgz", @@ -1513,6 +1522,19 @@ "dev": true, "license": "MIT" }, + "node_modules/@publint/pack": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@publint/pack/-/pack-0.1.4.tgz", + "integrity": "sha512-HDVTWq3H0uTXiU0eeSQntcVUTPP3GamzeXI41+x7uU9J65JgWQh3qWZHblR1i0npXfFtF+mxBiU2nJH8znxWnQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://bjornlu.com/sponsor" + } + }, "node_modules/@rolldown/binding-android-arm64": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.2.tgz", @@ -2031,23 +2053,22 @@ "version": "1.0.9", "resolved": "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.9.tgz", "integrity": "sha512-lVJX6qEgs/4DOcRTpo56tmKzVPtoWAaVbL4hfO7t7NVwl9AAXzQR6cihesW1BmNMPl+bK6dreu2sOKBP2Q9CIA==", - "dev": true, "license": "MIT", "peerDependencies": { "acorn": "^8.9.0" } }, "node_modules/@sveltejs/kit": { - "version": "2.60.1", - "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.60.1.tgz", - "integrity": "sha512-mQjlkNo+rJvpln7V2IGY2j99BqhcFbS4UN0AQNKNYfhBAFZTuCDAdW3a1sgf330mvtNvsBXn3HpAhcmvdJTcIQ==", + "version": "2.61.0", + "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.61.0.tgz", + "integrity": "sha512-beYjgUux5ITbZeL0vn6gipZlsQiXF1/08C/3F+vlbDvthb/CTgYpZsYPdRIi9RxgTwRSkKIvnxyl+ViZlX4q5A==", "dev": true, "license": "MIT", "dependencies": { "@standard-schema/spec": "^1.0.0", - "@sveltejs/acorn-typescript": "^1.0.5", + "@sveltejs/acorn-typescript": "^1.0.9", "@types/cookie": "^0.6.0", - "acorn": "^8.14.1", + "acorn": "^8.16.0", "cookie": "^0.6.0", "devalue": "^5.8.1", "esm-env": "^1.2.2", @@ -2079,6 +2100,59 @@ } } }, + "node_modules/@sveltejs/package": { + "version": "2.5.7", + "resolved": "https://registry.npmjs.org/@sveltejs/package/-/package-2.5.7.tgz", + "integrity": "sha512-qqD9xa9H7TDiGFrF6rz7AirOR8k15qDK/9i4MIE8te4vWsv5GEogPks61rrZcLy+yWph+aI6pIj2MdoK3YI8AQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^5.0.0", + "kleur": "^4.1.5", + "sade": "^1.8.1", + "semver": "^7.5.4", + "svelte2tsx": "~0.7.33" + }, + "bin": { + "svelte-package": "svelte-package.js" + }, + "engines": { + "node": "^16.14 || >=18" + }, + "peerDependencies": { + "svelte": "^3.44.0 || ^4.0.0 || ^5.0.0-next.1" + } + }, + "node_modules/@sveltejs/package/node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@sveltejs/package/node_modules/readdirp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", + "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@sveltejs/vite-plugin-svelte": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-7.1.2.tgz", @@ -2535,7 +2609,6 @@ "version": "1.0.9", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", - "dev": true, "license": "MIT" }, "node_modules/@types/json-schema": { @@ -2559,7 +2632,6 @@ "version": "2.0.7", "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", - "dev": true, "license": "MIT" }, "node_modules/@types/unist": { @@ -2719,7 +2791,7 @@ "version": "8.59.3", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.59.3.tgz", "integrity": "sha512-ePFoH0g4ludssdRFqqDxQePCxU4WQyRa9+XVwjm7yLn0FKhMeoetC+qBEEI1Eyb1pGSDveTIT09Bvw2WhlGayg==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3039,7 +3111,6 @@ "version": "8.16.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", - "dev": true, "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -3172,7 +3243,6 @@ "version": "5.3.1", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.1.tgz", "integrity": "sha512-Z/ZeOgVl7bcSYZ/u/rh0fOpvEpq//LZmdbkXyc7syVzjPAhfOa9ebsdTSjEBDU4vs5nC98Kfduj1uFo0qyET3g==", - "dev": true, "license": "Apache-2.0", "engines": { "node": ">= 0.4" @@ -3214,7 +3284,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", - "dev": true, "license": "Apache-2.0", "engines": { "node": ">= 0.4" @@ -3344,7 +3413,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -3508,6 +3576,13 @@ "dev": true, "license": "MIT" }, + "node_modules/dedent-js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dedent-js/-/dedent-js-1.0.1.tgz", + "integrity": "sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==", + "dev": true, + "license": "MIT" + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -3549,7 +3624,6 @@ "version": "5.8.1", "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.8.1.tgz", "integrity": "sha512-4CXDYRBGqN+57wVJkuXBYmpAVUSg3L6JAQa/DFqm238G73E1wuyc/JhGQJzN7vUf/CMphYau2zXbfWzDR5aTEw==", - "dev": true, "license": "MIT" }, "node_modules/diff": { @@ -4078,7 +4152,6 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz", "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==", - "dev": true, "license": "MIT" }, "node_modules/espree": { @@ -4130,7 +4203,6 @@ "version": "2.2.9", "resolved": "https://registry.npmjs.org/esrap/-/esrap-2.2.9.tgz", "integrity": "sha512-4KijP+NxCWthMCUC3qHbE6n4vCjqgJS1uAYKhuT/GWfFTf1Qyive2TgOjep+gzbSzRfnNyaN/UU9YmdOt8Eg0A==", - "dev": true, "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" @@ -4628,7 +4700,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz", "integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==", - "dev": true, "license": "MIT", "dependencies": { "@types/estree": "^1.0.6" @@ -5153,7 +5224,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", - "dev": true, "license": "MIT" }, "node_modules/locate-path": { @@ -5198,7 +5268,6 @@ "version": "0.30.21", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", - "dev": true, "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" @@ -5896,6 +5965,35 @@ "node": ">=6" } }, + "node_modules/publint": { + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/publint/-/publint-0.3.21.tgz", + "integrity": "sha512-OqejcnMV6E9zel2oCrUOJEiiFkGiAAni0A6ibfQNh1k9Gu5z4F+Yso8lllam7AzmV6Do0vp7u3UpZNRBwuXaHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@publint/pack": "^0.1.4", + "package-manager-detector": "^1.6.0", + "picocolors": "^1.1.1", + "sade": "^1.8.1" + }, + "bin": { + "publint": "src/cli.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://bjornlu.com/sponsor" + } + }, + "node_modules/publint/node_modules/package-manager-detector": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.6.0.tgz", + "integrity": "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==", + "dev": true, + "license": "MIT" + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -6142,6 +6240,13 @@ "node": ">=v12.22.7" } }, + "node_modules/scule": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/scule/-/scule-1.3.0.tgz", + "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==", + "dev": true, + "license": "MIT" + }, "node_modules/semver": { "version": "7.8.0", "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz", @@ -6457,7 +6562,6 @@ "version": "5.55.7", "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.55.7.tgz", "integrity": "sha512-ymI5ykLPwIHW839E053FQbI1G+jnRFJEw3Kv5Y4njixVWywQBx+NUFpkkKyk5LIb36Fg9DVXSYpqiGekLD0hyw==", - "dev": true, "license": "MIT", "dependencies": { "@jridgewell/remapping": "^2.3.4", @@ -6616,6 +6720,21 @@ "node": ">=4" } }, + "node_modules/svelte2tsx": { + "version": "0.7.55", + "resolved": "https://registry.npmjs.org/svelte2tsx/-/svelte2tsx-0.7.55.tgz", + "integrity": "sha512-JWzgeM3lqySRNfqcsesvVEh8LhTWBxQJ9RMjzJ+VepdmXtVnNd0SbtGctG6+/fbHq0N6mhwSd823gszw9JHeGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "dedent-js": "^1.0.1", + "scule": "^1.3.0" + }, + "peerDependencies": { + "svelte": "^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0", + "typescript": "^4.9.4 || ^5.0.0 || ^6.0.0" + } + }, "node_modules/symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", @@ -7264,7 +7383,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.4.tgz", "integrity": "sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==", - "dev": true, "license": "MIT" }, "node_modules/zod": { @@ -7314,7 +7432,7 @@ "name": "@123ishatest/ludiek", "version": "0.8.0", "dependencies": { - "@123ishatest/louter": "^0.5.0", + "@123ishatest/louter": "^0.6.0", "es-toolkit": "^1.39.10", "strongly-typed-events": "^3.0.11", "zod": "^4.4.3" @@ -7535,7 +7653,6 @@ "packages/lui": { "name": "@123ishatest/lui", "version": "0.0.1", - "extraneous": true, "dependencies": { "@123ishatest/ludiek": "*", "@lucide/svelte": "^1.3.0" @@ -7543,7 +7660,6 @@ "devDependencies": { "@eslint/compat": "^2.0.4", "@eslint/js": "^10.0.1", - "@sveltejs/adapter-auto": "^7.0.1", "@sveltejs/kit": "^2.57.0", "@sveltejs/package": "^2.5.7", "@sveltejs/vite-plugin-svelte": "^7.0.0", @@ -7565,14 +7681,218 @@ "tailwindcss": "^4.2.2", "typescript": "^6.0.2", "typescript-eslint": "^8.58.1", - "vite": "^8.0.7", - "vitest": "^4.1.3", - "zod": "^4.4.3" + "vite": "^8.0.7" }, "peerDependencies": { "svelte": "^5.0.0" } }, + "packages/lui/node_modules/@eslint/compat": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-2.1.0.tgz", + "integrity": "sha512-LgaSCymEpw7tF53xvDw9SNsraPb1IBHxpdABIOM0hW8UAlP8znrjYtuxfR58FSJ3L9BhwD+FaPRFQpZq84Nh6g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^1.2.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "peerDependencies": { + "eslint": "^8.40 || 9 || 10" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "packages/lui/node_modules/@eslint/core": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.1.tgz", + "integrity": "sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "packages/lui/node_modules/@eslint/js": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz", + "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "eslint": "^10.0.0" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "packages/lui/node_modules/@types/node": { + "version": "24.12.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.12.4.tgz", + "integrity": "sha512-GUUEShf+PBCGW2KaXwcIt3Yk+e3pkKwWKb9GSyM9WQVE+ep2jzmHdGsHzu4wgcZy5fN9FBdVzjpBQsYlpfpgLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "packages/lui/node_modules/eslint": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.4.0.tgz", + "integrity": "sha512-loXy6bWOoP3EP6JA7jo6p5jMpBJmHmsNZM5SFRHLdh1MGOPurMnNBj4ZlAbaqUAaQWbCr7jHV4P7gzAyryZWkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.2", + "@eslint/config-array": "^0.23.5", + "@eslint/config-helpers": "^0.6.0", + "@eslint/core": "^1.2.1", + "@eslint/plugin-kit": "^0.7.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.14.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^9.1.2", + "eslint-visitor-keys": "^5.0.1", + "espree": "^11.2.0", + "esquery": "^1.7.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "minimatch": "^10.2.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "packages/lui/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/lui/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "packages/lui/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/lui/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/lui/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/lui/node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "dev": true, + "license": "MIT" + }, "packages/typescript-config": { "name": "@123ishatest/ludiek-typescript-config", "version": "0.1.0", diff --git a/package.json b/package.json index 230c9f3..44ebb63 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "with-svelte", + "name": "@123ishatest/ludiek-monorepo", "private": true, "scripts": { "build": "turbo run build", diff --git a/packages/eslint-config/index.js b/packages/eslint-config/index.js index c82629b..421e4c3 100644 --- a/packages/eslint-config/index.js +++ b/packages/eslint-config/index.js @@ -4,6 +4,9 @@ import globals from 'globals'; import ts from 'typescript-eslint'; export const config = ts.config( + { + ignores: ['.svelte-kit/**', 'node_modules/**', 'build/**', 'dist/**'], + }, js.configs.recommended, ...ts.configs.recommended, ...svelte.configs['flat/recommended'], diff --git a/packages/ludiek/package.json b/packages/ludiek/package.json index bc7e513..48c6e21 100644 --- a/packages/ludiek/package.json +++ b/packages/ludiek/package.json @@ -32,7 +32,7 @@ "vitest": "^4.1.2" }, "dependencies": { - "@123ishatest/louter": "^0.5.0", + "@123ishatest/louter": "^0.6.0", "es-toolkit": "^1.39.10", "strongly-typed-events": "^3.0.11", "zod": "^4.4.3" diff --git a/packages/lui/.prettierignore b/packages/lui/.prettierignore new file mode 100644 index 0000000..14c1877 --- /dev/null +++ b/packages/lui/.prettierignore @@ -0,0 +1,2 @@ +dist/ +.svelte-kit diff --git a/packages/lui/eslint.config.js b/packages/lui/eslint.config.js new file mode 100644 index 0000000..25c7133 --- /dev/null +++ b/packages/lui/eslint.config.js @@ -0,0 +1,3 @@ +import { config } from '@123ishatest/ludiek-eslint-config/index.js'; + +export default [...config]; diff --git a/packages/lui/package.json b/packages/lui/package.json new file mode 100644 index 0000000..a290d5c --- /dev/null +++ b/packages/lui/package.json @@ -0,0 +1,73 @@ +{ + "name": "@123ishatest/lui", + "version": "0.0.1", + "scripts": { + "dev": "svelte-kit sync && svelte-package --preserve-output --watch --input=src", + "build": "npm run prepack", + "preview": "vite preview", + "prepare": "svelte-kit sync || echo ''", + "prepack": "svelte-kit sync && svelte-package --input=src && publint", + "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 ." + }, + "files": [ + "dist", + "!dist/**/*.test.*", + "!dist/**/*.spec.*", + "src", + "!src/**/*.test.*", + "!src/**/*.spec.*" + ], + "sideEffects": [ + "**/*.css" + ], + "svelte": "./dist/index.js", + "types": "./dist/index.d.ts", + "type": "module", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "svelte": "./dist/index.js", + "import": "./dist/index.js", + "default": "./dist/index.js" + } + }, + "peerDependencies": { + "svelte": "^5.0.0" + }, + "devDependencies": { + "@eslint/compat": "^2.0.4", + "@eslint/js": "^10.0.1", + "@sveltejs/kit": "^2.57.0", + "@sveltejs/package": "^2.5.7", + "@sveltejs/vite-plugin-svelte": "^7.0.0", + "@tailwindcss/forms": "^0.5.11", + "@tailwindcss/typography": "^0.5.19", + "@tailwindcss/vite": "^4.2.2", + "@types/node": "^24", + "daisyui": "^5.5.20", + "eslint": "^10.2.0", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-svelte": "^3.17.0", + "globals": "^17.4.0", + "prettier": "^3.8.1", + "prettier-plugin-svelte": "^3.5.1", + "prettier-plugin-tailwindcss": "^0.7.2", + "publint": "^0.3.18", + "svelte": "^5.55.2", + "svelte-check": "^4.4.6", + "tailwindcss": "^4.2.2", + "typescript": "^6.0.2", + "typescript-eslint": "^8.58.1", + "vite": "^8.0.7" + }, + "keywords": [ + "svelte" + ], + "dependencies": { + "@123ishatest/ludiek": "*", + "@lucide/svelte": "^1.3.0" + } +} diff --git a/packages/lui/src/LuiContext.svelte b/packages/lui/src/LuiContext.svelte new file mode 100644 index 0000000..0bf6812 --- /dev/null +++ b/packages/lui/src/LuiContext.svelte @@ -0,0 +1,62 @@ + + + + + {#snippet failed(error)} +

Lui error: {error}

+ {/snippet} + + {#if isDebug()} + {#if children} + {@render children()} + {/if} + +
+ +
+ + {#if withToolbar} + + {/if} + + + + {:else} + {#if children} + {@render children()} + {/if} + {/if} +
diff --git a/packages/lui/src/components/LuiPageNotFound.svelte b/packages/lui/src/components/LuiPageNotFound.svelte new file mode 100644 index 0000000..f446af1 --- /dev/null +++ b/packages/lui/src/components/LuiPageNotFound.svelte @@ -0,0 +1,12 @@ + + +

Page '{page}' not found

diff --git a/packages/lui/src/components/LuiSidebar.svelte b/packages/lui/src/components/LuiSidebar.svelte new file mode 100644 index 0000000..1fe89a7 --- /dev/null +++ b/packages/lui/src/components/LuiSidebar.svelte @@ -0,0 +1,51 @@ + + +{#snippet button(page: PageType, name: string)} +
  • + +
  • +{/snippet} + + diff --git a/packages/lui/src/components/LuiVersion.svelte b/packages/lui/src/components/LuiVersion.svelte new file mode 100644 index 0000000..41da6da --- /dev/null +++ b/packages/lui/src/components/LuiVersion.svelte @@ -0,0 +1,7 @@ + + +{ludiekVersion} diff --git a/packages/lui/src/components/content/LuiContentCard.svelte b/packages/lui/src/components/content/LuiContentCard.svelte new file mode 100644 index 0000000..da578fe --- /dev/null +++ b/packages/lui/src/components/content/LuiContentCard.svelte @@ -0,0 +1,28 @@ + + + +
    +

    {id}

    + +
    {JSON.stringify(content, null, 2)}
    +
    + diff --git a/packages/lui/src/components/content/LuiContentHint.svelte b/packages/lui/src/components/content/LuiContentHint.svelte new file mode 100644 index 0000000..1edea4b --- /dev/null +++ b/packages/lui/src/components/content/LuiContentHint.svelte @@ -0,0 +1,39 @@ + + +{#if isDebug()} +
    + {#if children} + {@render children()} + {/if} +
    + + {#snippet failed(error)} + +
    + {error} +
    + {/snippet} + +
    + +
    +
    +
    +
    +{:else} + {@render children?.()} +{/if} + diff --git a/packages/lui/src/components/content/LuiContentPage.svelte b/packages/lui/src/components/content/LuiContentPage.svelte new file mode 100644 index 0000000..cd8b1c9 --- /dev/null +++ b/packages/lui/src/components/content/LuiContentPage.svelte @@ -0,0 +1,26 @@ + + +{#if !hasContent} +

    No content found

    +{:else} +
    + + {#if selectedIntrospection} + + {:else} +

    No kind selected

    + {/if} +
    +{/if} diff --git a/packages/lui/src/components/content/LuiContentSelector.svelte b/packages/lui/src/components/content/LuiContentSelector.svelte new file mode 100644 index 0000000..eddbe64 --- /dev/null +++ b/packages/lui/src/components/content/LuiContentSelector.svelte @@ -0,0 +1,24 @@ + + + diff --git a/packages/lui/src/components/content/LuiContentTable.svelte b/packages/lui/src/components/content/LuiContentTable.svelte new file mode 100644 index 0000000..f2fc024 --- /dev/null +++ b/packages/lui/src/components/content/LuiContentTable.svelte @@ -0,0 +1,41 @@ + + + +
    + + + + {#each nodes as node (node.path)} + + {/each} + + + + + {#each items as piece (piece.id)} + + {#each nodes as node (node.path)} + {@const key = node.path.join("")} + {@const value = piece[key]} + + + + {/each} + + {/each} + +
    {node.path.join('.')}
    + {JSON.stringify(value, null, 2)} +
    +
    \ No newline at end of file diff --git a/packages/lui/src/components/persistence/LuiPersistencePage.svelte b/packages/lui/src/components/persistence/LuiPersistencePage.svelte new file mode 100644 index 0000000..e58f97f --- /dev/null +++ b/packages/lui/src/components/persistence/LuiPersistencePage.svelte @@ -0,0 +1,19 @@ + + + +
    +
    +
    {formattedSave}
    +
    +
    diff --git a/packages/lui/src/components/toolbar/LuiToolbar.svelte b/packages/lui/src/components/toolbar/LuiToolbar.svelte new file mode 100644 index 0000000..a718d92 --- /dev/null +++ b/packages/lui/src/components/toolbar/LuiToolbar.svelte @@ -0,0 +1,114 @@ + + +{#if isVisible} +
    + +
    + + + + +
      + {#each introspection.content.kinds as kind (kind.kind)} +
    • +
      {kind.kind}
      +
    • + {:else} +
    • No content registered
    • + {/each} +
    +
    + + +
      + {#each introspection.features.features as feature (feature.type)} +
    • +
      {feature.type}
      +
    • + {:else} +
    • No features registered
    • + {/each} +
    +
    + + +
      + {#each introspection.plugins.plugins as plugin (plugin.type)} +
    • +
      {plugin.type}
      +
    • + {:else} +
    • No plugins registered
    • + {/each} +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + +
    +{:else} +
    + +
    +{/if} diff --git a/packages/lui/src/components/toolbar/LuiToolbarCommandList.svelte b/packages/lui/src/components/toolbar/LuiToolbarCommandList.svelte new file mode 100644 index 0000000..26e180e --- /dev/null +++ b/packages/lui/src/components/toolbar/LuiToolbarCommandList.svelte @@ -0,0 +1,22 @@ + + + diff --git a/packages/lui/src/components/toolbar/LuiToolbarEntry.svelte b/packages/lui/src/components/toolbar/LuiToolbarEntry.svelte new file mode 100644 index 0000000..262a6c5 --- /dev/null +++ b/packages/lui/src/components/toolbar/LuiToolbarEntry.svelte @@ -0,0 +1,24 @@ + + +
    +
    + {#if children} + {@render children()} + {/if} +
    +
    + + {value} +
    +
    diff --git a/packages/lui/src/index.css b/packages/lui/src/index.css new file mode 100644 index 0000000..3b96609 --- /dev/null +++ b/packages/lui/src/index.css @@ -0,0 +1,7 @@ +@import 'tailwindcss'; +@plugin '@tailwindcss/forms'; +@plugin '@tailwindcss/typography'; + +@plugin "daisyui"; + +@source './'; diff --git a/packages/lui/src/index.ts b/packages/lui/src/index.ts new file mode 100644 index 0000000..b99be77 --- /dev/null +++ b/packages/lui/src/index.ts @@ -0,0 +1,6 @@ +import './index.css'; + +export { default as LuiDebugger } from './pages/LuiDebugger.svelte'; +export { default as LuiContentCard } from './components/content/LuiContentCard.svelte'; +export { default as LuiContentHint } from './components/content/LuiContentHint.svelte'; +export { default as LuiContext } from './LuiContext.svelte'; diff --git a/packages/lui/src/pages/LuiDebugger.svelte b/packages/lui/src/pages/LuiDebugger.svelte new file mode 100644 index 0000000..c29e7a4 --- /dev/null +++ b/packages/lui/src/pages/LuiDebugger.svelte @@ -0,0 +1,32 @@ + + + +
    + + +
    + {#if SelectedPage} + + {:else} + + {/if} +
    + +
    diff --git a/packages/lui/src/types/PageType.ts b/packages/lui/src/types/PageType.ts new file mode 100644 index 0000000..c797638 --- /dev/null +++ b/packages/lui/src/types/PageType.ts @@ -0,0 +1,11 @@ +export type PageType = + | 'dashboard' + | 'plugin' + | 'feature' + | 'persistence' + | 'condition' + | 'input' + | 'output' + | 'request' + | 'bonus' + | 'content'; diff --git a/packages/lui/src/util/LuiError.ts b/packages/lui/src/util/LuiError.ts new file mode 100644 index 0000000..06873a5 --- /dev/null +++ b/packages/lui/src/util/LuiError.ts @@ -0,0 +1,5 @@ +export abstract class LuiError extends Error {} + +export class EngineNotFoundError extends LuiError {} + +export class IntrospectionNotFoundError extends LuiError {} diff --git a/packages/lui/src/util/context.ts b/packages/lui/src/util/context.ts new file mode 100644 index 0000000..95c9ba2 --- /dev/null +++ b/packages/lui/src/util/context.ts @@ -0,0 +1,38 @@ +import { LudiekIntrospector, type AnyEngine, type LudiekIntrospection } from '@123ishatest/ludiek'; +import { getContext, setContext } from 'svelte'; +import { EngineNotFoundError, IntrospectionNotFoundError } from './LuiError.js'; + +export const LUI_ENGINE_KEY = 'LUI_ENGINE'; +export const LUI_INTROSPECTION_KEY = 'LUI_INTROSPECTION'; + +type EngineGetter = () => AnyEngine; + +export const getEngine = (): AnyEngine => { + const engine = getContext(LUI_ENGINE_KEY); + if (!engine) { + throw new EngineNotFoundError( + 'Could not get engine from the context. Make sure you only use Lui components within a LuiContext', + ); + } + return engine(); +}; + +export const setEngine = (engine: EngineGetter) => { + setContext(LUI_ENGINE_KEY, engine); + const introspection = new LudiekIntrospector(engine()).introspect(); + setContext(LUI_INTROSPECTION_KEY, introspection); +}; + +export const getIntrospection = (): LudiekIntrospection => { + const introspection = getContext(LUI_INTROSPECTION_KEY); + if (!introspection) { + throw new IntrospectionNotFoundError( + 'Could not get introspection from the context. Make sure you only use Lui components within a LuiContext', + ); + } + return introspection; +}; + +export const isDebug = (): boolean => { + return getEngine().debug; +}; diff --git a/packages/lui/svelte.config.js b/packages/lui/svelte.config.js new file mode 100644 index 0000000..b11a23c --- /dev/null +++ b/packages/lui/svelte.config.js @@ -0,0 +1,10 @@ +import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; + +/** @type {import('@sveltejs/kit').Config} */ +const config = { + // Consult https://kit.svelte.dev/docs/integrations#preprocessors + // for more information about preprocessors + preprocess: vitePreprocess(), +}; + +export default config; diff --git a/packages/lui/tsconfig.json b/packages/lui/tsconfig.json new file mode 100644 index 0000000..9470aa8 --- /dev/null +++ b/packages/lui/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": ["@123ishatest/ludiek-typescript-config/svelte.json", "./.svelte-kit/tsconfig.json"], + "compilerOptions": { + "declaration": true, + "declarationMap": true, + + "allowArbitraryExtensions": true, + "strictNullChecks": true, + "types": ["svelte"] + }, + "include": ["dist", "./src/**/*.svelte", "./src/**/*.ts"], + "exclude": ["node_modules", ".svelte-kit"] +} diff --git a/packages/lui/vite.config.ts b/packages/lui/vite.config.ts new file mode 100644 index 0000000..d1a9dcb --- /dev/null +++ b/packages/lui/vite.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from 'vite'; + +import tailwindcss from '@tailwindcss/vite'; +import { svelte } from '@sveltejs/vite-plugin-svelte'; + +export default defineConfig({ + plugins: [tailwindcss(), svelte()], +});