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
+
- sow()}>Sow
- trade()}>Trade 100 money for 1 gem
-
+
+ You have {gems} gems
+
-
-
-
+
+ You have planted {planted} sunflowers
+
+
+
+ sow()}>Sow
+ trade()}>Trade 100 money for 1 gem
+
+
+
+
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)}
+
+ selectPage(page)}>{name}
+
+{/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}
+
+
+{: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)}
+ {node.path.join('.')}
+ {/each}
+
+
+
+
+ {#each items as piece (piece.id)}
+
+ {#each nodes as node (node.path)}
+ {@const key = node.path.join("")}
+ {@const value = piece[key]}
+
+
+
+ {JSON.stringify(value, null, 2)}
+
+ {/each}
+
+ {/each}
+
+
+
\ 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 @@
+
+
+
+
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}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
closeToolbar()}>
+
+
+
+{:else}
+
+ openToolbar()}>Ludiek
+
+{/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 @@
+
+
+
+ {#each commands as command (command.command)}
+ {@const args = command.arguments.map(a => `<${a.field}>`).join(' ')}
+
+ {command.command}
+ {args}
+
+ {:else}
+ No {kind} registered
+ {/each}
+
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 @@
+
+
+
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()],
+});