diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d635bded51..23de22d98c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -255,9 +255,6 @@ importers: '@internationalized/date': specifier: ^3.5.6 version: 3.5.6 - '@layerstack/utils': - specifier: ^1.0.0 - version: 1.0.0 '@lucide/svelte': specifier: ^0.482.0 version: 0.482.0(svelte@5.28.2) @@ -306,12 +303,6 @@ importers: '@types/node': specifier: ^20.14.10 version: 20.17.27 - '@unovis/svelte': - specifier: 1.4.3 - version: 1.4.3(@unovis/ts@1.4.3)(svelte@5.28.2) - '@unovis/ts': - specifier: 1.4.3 - version: 1.4.3 acorn: specifier: ^8.13.0 version: 8.14.1 @@ -339,6 +330,9 @@ importers: formsnap: specifier: 2.0.0 version: 2.0.0(svelte@5.28.2)(sveltekit-superforms@2.19.1(@sveltejs/kit@2.20.8(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.28.2)(vite@6.3.5(@types/node@20.17.27)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.4)))(svelte@5.28.2)(vite@6.3.5(@types/node@20.17.27)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.4)))(@types/json-schema@7.0.15)(svelte@5.28.2)) + globby: + specifier: ^14.1.0 + version: 14.1.0 hast-util-to-html: specifier: ^9.0.1 version: 9.0.1 @@ -387,6 +381,9 @@ importers: shadcn-svelte: specifier: workspace:* version: link:../../packages/cli + sharp: + specifier: ^0.34.1 + version: 0.34.1 shiki: specifier: ^1.2.1 version: 1.2.1 @@ -396,12 +393,6 @@ importers: svelte-check: specifier: ^4.2.1 version: 4.2.1(picomatch@4.0.2)(svelte@5.28.2)(typescript@5.8.3) - svelte-local-storage-store: - specifier: ^0.6.4 - version: 0.6.4(svelte@5.28.2) - svelte-persisted-store: - specifier: ^0.11.0 - version: 0.11.0(svelte@5.28.2) svelte-sonner: specifier: ^1.0.1 version: 1.0.1(svelte@5.28.2) @@ -417,9 +408,6 @@ importers: tailwindcss: specifier: ^4.1.7 version: 4.1.7 - ts-blank-space: - specifier: ^0.4.4 - version: 0.4.4 tslib: specifier: ^2.6.3 version: 2.8.1 @@ -777,6 +765,9 @@ packages: '@emnapi/runtime@1.3.1': resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==} + '@emnapi/runtime@1.4.3': + resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==} + '@emotion/babel-plugin@11.11.0': resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==} @@ -1338,105 +1329,215 @@ packages: cpu: [arm64] os: [darwin] + '@img/sharp-darwin-arm64@0.34.1': + resolution: {integrity: sha512-pn44xgBtgpEbZsu+lWf2KNb6OAf70X68k+yk69Ic2Xz11zHR/w24/U49XT7AeRwJ0Px+mhALhU5LPci1Aymk7A==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + '@img/sharp-darwin-x64@0.33.5': resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [darwin] + '@img/sharp-darwin-x64@0.34.1': + resolution: {integrity: sha512-VfuYgG2r8BpYiOUN+BfYeFo69nP/MIwAtSJ7/Zpxc5QF3KS22z8Pvg3FkrSFJBPNQ7mmcUcYQFBmEQp7eu1F8Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + '@img/sharp-libvips-darwin-arm64@1.0.4': resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} cpu: [arm64] os: [darwin] + '@img/sharp-libvips-darwin-arm64@1.1.0': + resolution: {integrity: sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA==} + cpu: [arm64] + os: [darwin] + '@img/sharp-libvips-darwin-x64@1.0.4': resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} cpu: [x64] os: [darwin] + '@img/sharp-libvips-darwin-x64@1.1.0': + resolution: {integrity: sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ==} + cpu: [x64] + os: [darwin] + '@img/sharp-libvips-linux-arm64@1.0.4': resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} cpu: [arm64] os: [linux] + '@img/sharp-libvips-linux-arm64@1.1.0': + resolution: {integrity: sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew==} + cpu: [arm64] + os: [linux] + '@img/sharp-libvips-linux-arm@1.0.5': resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} cpu: [arm] os: [linux] + '@img/sharp-libvips-linux-arm@1.1.0': + resolution: {integrity: sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA==} + cpu: [arm] + os: [linux] + + '@img/sharp-libvips-linux-ppc64@1.1.0': + resolution: {integrity: sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ==} + cpu: [ppc64] + os: [linux] + '@img/sharp-libvips-linux-s390x@1.0.4': resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} cpu: [s390x] os: [linux] + '@img/sharp-libvips-linux-s390x@1.1.0': + resolution: {integrity: sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA==} + cpu: [s390x] + os: [linux] + '@img/sharp-libvips-linux-x64@1.0.4': resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} cpu: [x64] os: [linux] + '@img/sharp-libvips-linux-x64@1.1.0': + resolution: {integrity: sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q==} + cpu: [x64] + os: [linux] + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} cpu: [arm64] os: [linux] + '@img/sharp-libvips-linuxmusl-arm64@1.1.0': + resolution: {integrity: sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w==} + cpu: [arm64] + os: [linux] + '@img/sharp-libvips-linuxmusl-x64@1.0.4': resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} cpu: [x64] os: [linux] + '@img/sharp-libvips-linuxmusl-x64@1.1.0': + resolution: {integrity: sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A==} + cpu: [x64] + os: [linux] + '@img/sharp-linux-arm64@0.33.5': resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + '@img/sharp-linux-arm64@0.34.1': + resolution: {integrity: sha512-kX2c+vbvaXC6vly1RDf/IWNXxrlxLNpBVWkdpRq5Ka7OOKj6nr66etKy2IENf6FtOgklkg9ZdGpEu9kwdlcwOQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + '@img/sharp-linux-arm@0.33.5': resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] + '@img/sharp-linux-arm@0.34.1': + resolution: {integrity: sha512-anKiszvACti2sGy9CirTlNyk7BjjZPiML1jt2ZkTdcvpLU1YH6CXwRAZCA2UmRXnhiIftXQ7+Oh62Ji25W72jA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + '@img/sharp-linux-s390x@0.33.5': resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] + '@img/sharp-linux-s390x@0.34.1': + resolution: {integrity: sha512-7s0KX2tI9mZI2buRipKIw2X1ufdTeaRgwmRabt5bi9chYfhur+/C1OXg3TKg/eag1W+6CCWLVmSauV1owmRPxA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + '@img/sharp-linux-x64@0.33.5': resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + '@img/sharp-linux-x64@0.34.1': + resolution: {integrity: sha512-wExv7SH9nmoBW3Wr2gvQopX1k8q2g5V5Iag8Zk6AVENsjwd+3adjwxtp3Dcu2QhOXr8W9NusBU6XcQUohBZ5MA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + '@img/sharp-linuxmusl-arm64@0.33.5': resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + '@img/sharp-linuxmusl-arm64@0.34.1': + resolution: {integrity: sha512-DfvyxzHxw4WGdPiTF0SOHnm11Xv4aQexvqhRDAoD00MzHekAj9a/jADXeXYCDFH/DzYruwHbXU7uz+H+nWmSOQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + '@img/sharp-linuxmusl-x64@0.33.5': resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + '@img/sharp-linuxmusl-x64@0.34.1': + resolution: {integrity: sha512-pax/kTR407vNb9qaSIiWVnQplPcGU8LRIJpDT5o8PdAx5aAA7AS3X9PS8Isw1/WfqgQorPotjrZL3Pqh6C5EBg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + '@img/sharp-wasm32@0.33.5': resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [wasm32] + '@img/sharp-wasm32@0.34.1': + resolution: {integrity: sha512-YDybQnYrLQfEpzGOQe7OKcyLUCML4YOXl428gOOzBgN6Gw0rv8dpsJ7PqTHxBnXnwXr8S1mYFSLSa727tpz0xg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + '@img/sharp-win32-ia32@0.33.5': resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ia32] os: [win32] + '@img/sharp-win32-ia32@0.34.1': + resolution: {integrity: sha512-WKf/NAZITnonBf3U1LfdjoMgNO5JYRSlhovhRhMxXVdvWYveM4kM3L8m35onYIdh75cOMCo1BexgVQcCDzyoWw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] + '@img/sharp-win32-x64@0.33.5': resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [win32] + '@img/sharp-win32-x64@0.34.1': + resolution: {integrity: sha512-hw1iIAHpNE8q3uMIRCgGOeDoz9KtFNarFLQclLxr/LK1VBkj8nby18RjFvr6aP7USRYAjTZW6yisnBWMX571Tw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + '@internationalized/date@3.5.6': resolution: {integrity: sha512-jLxQjefH9VI5P9UQuqB6qNKnvFt1Ky1TPIzHGsIlCi7sZZoMR8SdYbBGRvM0y+Jtb+ez4ieBzmiAUcpmPYpyOw==} @@ -1718,6 +1819,10 @@ packages: '@sinclair/typebox@0.32.35': resolution: {integrity: sha512-Ul3YyOTU++to8cgNkttakC0dWvpERr6RYoHO2W47DLbFvrwBDJUY31B1sImH6JZSYc4Kt4PyHtoPNu+vL2r2dA==} + '@sindresorhus/merge-streams@2.3.0': + resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} + engines: {node: '>=18'} + '@svecosystem/strip-types@0.0.2': resolution: {integrity: sha512-KlxmAT3mZSUAyiM6ek6i0UmEUAHJJAYXb4udT0VUrcb354/bcZyt9GTX6448TUhjl1XG5Y50TMuaENx0iU4zQA==} @@ -3006,6 +3111,10 @@ packages: resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} @@ -3164,6 +3273,10 @@ packages: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} + globby@14.1.0: + resolution: {integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==} + engines: {node: '>=18'} + graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -3966,6 +4079,10 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} + path-type@6.0.0: + resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==} + engines: {node: '>=18'} + pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} @@ -4319,6 +4436,10 @@ packages: resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + sharp@0.34.1: + resolution: {integrity: sha512-1j0w61+eVxu7DawFJtnfYcvSv6qPFvfTaqzTQ2BLknVhHTwGS8sc63ZBF4rzkWMBVKybo4S5OBtDdZahh2A1xg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -4351,6 +4472,10 @@ packages: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} + slash@5.1.0: + resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} + engines: {node: '>=14.16'} + smart-buffer@4.2.0: resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} @@ -4498,18 +4623,6 @@ packages: svelte: optional: true - svelte-local-storage-store@0.6.4: - resolution: {integrity: sha512-45WoY2vSGPQM1sIQJ9jTkPPj20hYeqm+af6mUGRFSPP5WglZf36YYoZqwmZZ8Dt/2SU8lem+BTA8/Z/8TkqNLg==} - engines: {node: '>=0.14'} - peerDependencies: - svelte: ^3.48.0 || >4.0.0 - - svelte-persisted-store@0.11.0: - resolution: {integrity: sha512-9RgJ5DrawGyyfK22A80cfu8Jose3CV8YjEZKz9Tn94rQ0tWyEmYr+XI+wrVF6wjRbW99JMDSVcFRiM3XzVJj/w==} - engines: {node: '>=0.14'} - peerDependencies: - svelte: ^3.48.0 || ^4.0.0 || ^5.0.0-next.0 - svelte-sonner@1.0.1: resolution: {integrity: sha512-vz0eqcs9GNnJ2CTtTno7v/jSA0P3r+X+3y/hrJg+FPpB2rZCFywIKNKD3wiRI8449i3LXVcgQ+q5R5ocOd6ydA==} peerDependencies: @@ -4710,10 +4823,6 @@ packages: peerDependencies: typescript: '>=4.8.4' - ts-blank-space@0.4.4: - resolution: {integrity: sha512-G6GkD6oEJ7j5gG2e5qAizfE4Ap7JXMpnN0CEp9FEt4LExdaqsdwB90aQsaAwcKhiSxVk5KoqFW9xfxTQ4lBUnQ==} - engines: {node: '>=18.0.0'} - ts-deepmerge@7.0.1: resolution: {integrity: sha512-JBFCmNenZdUCc+TRNCtXVM6N8y/nDQHAcpj5BlwXG/gnogjam1NunulB9ia68mnqYI446giMfpqeBFFkOleh+g==} engines: {node: '>=14.13.1'} @@ -4776,11 +4885,6 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - typescript@5.5.4: - resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} - engines: {node: '>=14.17'} - hasBin: true - typescript@5.8.3: resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} engines: {node: '>=14.17'} @@ -4808,6 +4912,10 @@ packages: unenv@2.0.0-rc.15: resolution: {integrity: sha512-J/rEIZU8w6FOfLNz/hNKsnY+fFHWnu9MH4yRbSZF3xbbGHovcetXPs7sD+9p8L6CeNC//I9bhRYAOsBt2u7/OA==} + unicorn-magic@0.3.0: + resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} + engines: {node: '>=18'} + unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} @@ -5394,6 +5502,11 @@ snapshots: tslib: 2.8.1 optional: true + '@emnapi/runtime@1.4.3': + dependencies: + tslib: 2.8.1 + optional: true + '@emotion/babel-plugin@11.11.0': dependencies: '@babel/helper-module-imports': 7.22.15 @@ -5759,76 +5872,154 @@ snapshots: '@img/sharp-libvips-darwin-arm64': 1.0.4 optional: true + '@img/sharp-darwin-arm64@0.34.1': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.1.0 + optional: true + '@img/sharp-darwin-x64@0.33.5': optionalDependencies: '@img/sharp-libvips-darwin-x64': 1.0.4 optional: true + '@img/sharp-darwin-x64@0.34.1': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.1.0 + optional: true + '@img/sharp-libvips-darwin-arm64@1.0.4': optional: true + '@img/sharp-libvips-darwin-arm64@1.1.0': + optional: true + '@img/sharp-libvips-darwin-x64@1.0.4': optional: true + '@img/sharp-libvips-darwin-x64@1.1.0': + optional: true + '@img/sharp-libvips-linux-arm64@1.0.4': optional: true + '@img/sharp-libvips-linux-arm64@1.1.0': + optional: true + '@img/sharp-libvips-linux-arm@1.0.5': optional: true + '@img/sharp-libvips-linux-arm@1.1.0': + optional: true + + '@img/sharp-libvips-linux-ppc64@1.1.0': + optional: true + '@img/sharp-libvips-linux-s390x@1.0.4': optional: true + '@img/sharp-libvips-linux-s390x@1.1.0': + optional: true + '@img/sharp-libvips-linux-x64@1.0.4': optional: true + '@img/sharp-libvips-linux-x64@1.1.0': + optional: true + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': optional: true + '@img/sharp-libvips-linuxmusl-arm64@1.1.0': + optional: true + '@img/sharp-libvips-linuxmusl-x64@1.0.4': optional: true + '@img/sharp-libvips-linuxmusl-x64@1.1.0': + optional: true + '@img/sharp-linux-arm64@0.33.5': optionalDependencies: '@img/sharp-libvips-linux-arm64': 1.0.4 optional: true + '@img/sharp-linux-arm64@0.34.1': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.1.0 + optional: true + '@img/sharp-linux-arm@0.33.5': optionalDependencies: '@img/sharp-libvips-linux-arm': 1.0.5 optional: true + '@img/sharp-linux-arm@0.34.1': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.1.0 + optional: true + '@img/sharp-linux-s390x@0.33.5': optionalDependencies: '@img/sharp-libvips-linux-s390x': 1.0.4 optional: true + '@img/sharp-linux-s390x@0.34.1': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.1.0 + optional: true + '@img/sharp-linux-x64@0.33.5': optionalDependencies: '@img/sharp-libvips-linux-x64': 1.0.4 optional: true + '@img/sharp-linux-x64@0.34.1': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.1.0 + optional: true + '@img/sharp-linuxmusl-arm64@0.33.5': optionalDependencies: '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 optional: true + '@img/sharp-linuxmusl-arm64@0.34.1': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.1.0 + optional: true + '@img/sharp-linuxmusl-x64@0.33.5': optionalDependencies: '@img/sharp-libvips-linuxmusl-x64': 1.0.4 optional: true + '@img/sharp-linuxmusl-x64@0.34.1': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.1.0 + optional: true + '@img/sharp-wasm32@0.33.5': dependencies: '@emnapi/runtime': 1.3.1 optional: true + '@img/sharp-wasm32@0.34.1': + dependencies: + '@emnapi/runtime': 1.4.3 + optional: true + '@img/sharp-win32-ia32@0.33.5': optional: true + '@img/sharp-win32-ia32@0.34.1': + optional: true + '@img/sharp-win32-x64@0.33.5': optional: true + '@img/sharp-win32-x64@0.34.1': + optional: true + '@internationalized/date@3.5.6': dependencies: '@swc/helpers': 0.5.6 @@ -6163,6 +6354,8 @@ snapshots: '@sinclair/typebox@0.32.35': optional: true + '@sindresorhus/merge-streams@2.3.0': {} + '@svecosystem/strip-types@0.0.2': dependencies: estree-walker: 3.0.3 @@ -7686,6 +7879,14 @@ snapshots: merge2: 1.4.1 micromatch: 4.0.8 + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + fast-json-stable-stringify@2.1.0: {} fast-levenshtein@2.0.6: {} @@ -7849,6 +8050,15 @@ snapshots: merge2: 1.4.1 slash: 3.0.0 + globby@14.1.0: + dependencies: + '@sindresorhus/merge-streams': 2.3.0 + fast-glob: 3.3.3 + ignore: 7.0.4 + path-type: 6.0.0 + slash: 5.1.0 + unicorn-magic: 0.3.0 + graceful-fs@4.2.11: {} graphemer@1.4.0: {} @@ -9030,6 +9240,8 @@ snapshots: path-type@4.0.0: {} + path-type@6.0.0: {} + pathe@2.0.3: {} pathval@2.0.0: {} @@ -9391,6 +9603,33 @@ snapshots: '@img/sharp-win32-ia32': 0.33.5 '@img/sharp-win32-x64': 0.33.5 + sharp@0.34.1: + dependencies: + color: 4.2.3 + detect-libc: 2.0.4 + semver: 7.7.1 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.34.1 + '@img/sharp-darwin-x64': 0.34.1 + '@img/sharp-libvips-darwin-arm64': 1.1.0 + '@img/sharp-libvips-darwin-x64': 1.1.0 + '@img/sharp-libvips-linux-arm': 1.1.0 + '@img/sharp-libvips-linux-arm64': 1.1.0 + '@img/sharp-libvips-linux-ppc64': 1.1.0 + '@img/sharp-libvips-linux-s390x': 1.1.0 + '@img/sharp-libvips-linux-x64': 1.1.0 + '@img/sharp-libvips-linuxmusl-arm64': 1.1.0 + '@img/sharp-libvips-linuxmusl-x64': 1.1.0 + '@img/sharp-linux-arm': 0.34.1 + '@img/sharp-linux-arm64': 0.34.1 + '@img/sharp-linux-s390x': 0.34.1 + '@img/sharp-linux-x64': 0.34.1 + '@img/sharp-linuxmusl-arm64': 0.34.1 + '@img/sharp-linuxmusl-x64': 0.34.1 + '@img/sharp-wasm32': 0.34.1 + '@img/sharp-win32-ia32': 0.34.1 + '@img/sharp-win32-x64': 0.34.1 + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -9419,6 +9658,8 @@ snapshots: slash@3.0.0: {} + slash@5.1.0: {} + smart-buffer@4.2.0: {} socks-proxy-agent@8.0.4: @@ -9576,14 +9817,6 @@ snapshots: optionalDependencies: svelte: 5.28.2 - svelte-local-storage-store@0.6.4(svelte@5.28.2): - dependencies: - svelte: 5.28.2 - - svelte-persisted-store@0.11.0(svelte@5.28.2): - dependencies: - svelte: 5.28.2 - svelte-sonner@1.0.1(svelte@5.28.2): dependencies: runed: 0.26.0(svelte@5.28.2) @@ -9824,10 +10057,6 @@ snapshots: dependencies: typescript: 5.8.3 - ts-blank-space@0.4.4: - dependencies: - typescript: 5.5.4 - ts-deepmerge@7.0.1: {} ts-interface-checker@0.1.13: {} @@ -9894,8 +10123,6 @@ snapshots: transitivePeerDependencies: - supports-color - typescript@5.5.4: {} - typescript@5.8.3: {} ufo@1.6.1: {} @@ -9923,6 +10150,8 @@ snapshots: pathe: 2.0.3 ufo: 1.6.1 + unicorn-magic@0.3.0: {} + unified@11.0.5: dependencies: '@types/unist': 3.0.2 diff --git a/sites/docs/package.json b/sites/docs/package.json index 7ccf8e362f..6d2301d43c 100644 --- a/sites/docs/package.json +++ b/sites/docs/package.json @@ -18,7 +18,7 @@ "build": "pnpm build:content && pnpm build:svelte", "build:content": "velite && tsx scripts/velite/velite-update-json.ts", "build:svelte": "vite build", - "build:screenshots": "tsx scripts/capture-screenshots.ts", + "build:screenshots": "tsx scripts/capture-registry.ts", "replace:velite": "tsx scripts/velite/velite-watch-output.ts", "preview": "vite preview", "sync": "svelte-kit sync", @@ -30,7 +30,6 @@ "@dnd-kit-svelte/sortable": "^0.0.8", "@dnd-kit-svelte/utilities": "^0.0.8", "@internationalized/date": "^3.5.6", - "@layerstack/utils": "^1.0.0", "@lucide/svelte": "^0.482.0", "@prettier/sync": "0.3.0", "@shadcn-svelte/registry": "workspace:*", @@ -47,8 +46,6 @@ "@types/lodash.template": "^4.5.3", "@types/mdast": "^4.0.4", "@types/node": "^20.14.10", - "@unovis/svelte": "1.4.3", - "@unovis/ts": "1.4.3", "acorn": "^8.13.0", "bits-ui": "^1.4.7", "clsx": "^2.1.1", @@ -58,6 +55,7 @@ "embla-carousel-svelte": "8.1.6", "estree-walker": "^3.0.3", "formsnap": "2.0.0", + "globby": "^14.1.0", "hast-util-to-html": "^9.0.1", "layerchart": "2.0.0-next.6", "lodash.template": "^4.5.0", @@ -74,17 +72,15 @@ "rimraf": "^4.4.1", "runed": "^0.27.0", "shadcn-svelte": "workspace:*", + "sharp": "^0.34.1", "shiki": "^1.2.1", "svelte": "^5.16.1", "svelte-check": "^4.2.1", - "svelte-local-storage-store": "^0.6.4", - "svelte-persisted-store": "^0.11.0", "svelte-sonner": "^1.0.1", "sveltekit-superforms": "^2.19.1", "tailwind-merge": "^3.0.2", "tailwind-variants": "^0.2.1", "tailwindcss": "^4.1.7", - "ts-blank-space": "^0.4.4", "tslib": "^2.6.3", "tsx": "^4.16.2", "tw-animate-css": "^1.2.4", diff --git a/sites/docs/scripts/build-registry.ts b/sites/docs/scripts/build-registry.ts index 48d11f46a2..0bb1e9740f 100644 --- a/sites/docs/scripts/build-registry.ts +++ b/sites/docs/scripts/build-registry.ts @@ -181,12 +181,13 @@ export const Index = {`; const themeCSS = []; for (const baseColor of baseColors) { const base = generateBaseColorTemplate(baseColor); + const zincCssVars = generateBaseColorTemplate("zinc"); themeCSS.push( template(THEME_STYLES_WITH_VARIABLES)({ colors: { + ...zincCssVars.cssVars, ...baseColorsOKLCH[baseColor as keyof typeof baseColorsOKLCH], - ...base.cssVars, }, theme: baseColor, }) @@ -206,4 +207,9 @@ export const Index = {`; // ---------------------------------------------------------------------------- writeFileWithDirs(path.join(THEMES_CSS_PATH, `themes.css`), themeCSS.join("\n\n"), "utf-8"); + writeFileWithDirs( + path.resolve("src", "styles", "old-themes.css"), + themeCSS.join("\n\n"), + "utf-8" + ); } diff --git a/sites/docs/scripts/capture-registry.ts b/sites/docs/scripts/capture-registry.ts new file mode 100644 index 0000000000..9956f341e6 --- /dev/null +++ b/sites/docs/scripts/capture-registry.ts @@ -0,0 +1,101 @@ +import fs from "node:fs"; +import promises from "node:fs/promises"; +import path from "node:path"; +import puppeteer, { Browser } from "puppeteer"; +import { globby } from "globby"; +import sharp from "sharp"; + +import { getAllBlockIds } from "../src/lib/blocks.js"; + +const SCREENSHOT_PATH = path.join(process.cwd(), "static/img/registry"); + +async function captureBlockScreenshot(browser: Browser, block: string) { + const pageUrl = `http://localhost:5173/view/${block}`; + const page = await browser.newPage(); + await page.goto(pageUrl); + + for (const theme of ["light", "dark"]) { + const screenshotPath = path.join(SCREENSHOT_PATH, `${block}-${theme}-uncompressed.png`); + if (fs.existsSync(screenshotPath)) { + fs.unlinkSync(screenshotPath); + } + + await page.evaluate((currentTheme) => { + localStorage.setItem("mode-watcher-mode", currentTheme); + }, theme); + + await page.reload({ waitUntil: "networkidle2" }); + + if (block.startsWith("chart") || block.startsWith("dashboard")) { + await new Promise((resolve) => setTimeout(resolve, 1000)); + } + + await page.evaluate(() => { + const indicator = document.querySelector("[data-tailwind-indicator]"); + if (indicator) indicator.remove(); + }); + + await page.screenshot({ path: screenshotPath }); + } + + await page.close(); +} + +async function captureScreenshots() { + if (!fs.existsSync(SCREENSHOT_PATH)) { + fs.mkdirSync(SCREENSHOT_PATH, { recursive: true }); + } + + const blocks = getAllBlockIds(); + + const browser = await puppeteer.launch({ + defaultViewport: { + width: 1440, + height: 900, + deviceScaleFactor: 2, + }, + }); + + for (const block of blocks) { + await captureBlockScreenshot(browser, block); + console.log(`✅ Captured ${block}`); + } + + await browser.close(); +} + +async function compressImages(): Promise { + const files = await globby([`${SCREENSHOT_PATH}/**/*-uncompressed.png`], { absolute: true }); + + await Promise.all( + files.map(async (file) => { + const beforeStat = await promises.stat(file); + const beforeKB = (beforeStat.size / 1024).toFixed(1); + + console.log(`🔄 Compressing ${path.basename(file)} (before: ${beforeKB} KB)…`); + const out = file.replace("-uncompressed", ""); + await sharp(file).png({ compressionLevel: 9, quality: 75 }).toFile(out); + + const afterStat = await promises.stat(out); + const afterKB = (afterStat.size / 1024).toFixed(1); + const delta = (((afterStat.size - beforeStat.size) / beforeStat.size) * 100).toFixed(1); + + fs.unlinkSync(file); + + console.log( + `✅ ${path.basename(file)}: ${beforeKB} KB → ${afterKB} KB (${delta}% change)` + ); + }) + ); +} + +try { + console.log("🎬 Capturing registry screenshots..."); + await captureScreenshots(); + console.log("⚙️ Converting PNGs to WebP..."); + await compressImages(); + console.log("✨ Done!"); +} catch (error) { + console.error("❌ Error:", error); + process.exit(1); +} diff --git a/sites/docs/src/__registry__/index.js b/sites/docs/src/__registry__/index.js index d75659b496..ef70c616f0 100644 --- a/sites/docs/src/__registry__/index.js +++ b/sites/docs/src/__registry__/index.js @@ -493,7 +493,7 @@ export const Index = { "drawer-demo": { name: "drawer-demo", type: "registry:example", - registryDependencies: ["drawer","button"], + registryDependencies: ["drawer","button","chart"], component: () => import("../lib/registry/examples/drawer-demo.svelte").then((m) => m.default), files: ["../lib/registry/examples/drawer-demo.svelte"], raw: () => import("../lib/registry/examples/drawer-demo.svelte?raw").then((m) => m.default), diff --git a/sites/docs/src/lib/active-theme.ts b/sites/docs/src/lib/active-theme.ts deleted file mode 100644 index 1450546ff1..0000000000 --- a/sites/docs/src/lib/active-theme.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { PersistedState } from "runed"; -import { THEMES } from "./registry/ui/chart/chart-utils.js"; - -export const activeTheme = new PersistedState("themes:config2", THEMES); diff --git a/sites/docs/src/lib/blocks.ts b/sites/docs/src/lib/blocks.ts index b4015a7877..8b26408726 100644 --- a/sites/docs/src/lib/blocks.ts +++ b/sites/docs/src/lib/blocks.ts @@ -1,35 +1,12 @@ import { z } from "zod"; import type { Component } from "svelte"; -import { type Highlighter, getHighlighter } from "shiki"; import { Blocks } from "../__registry__/blocks.js"; -import { lambdaStudioBlackout } from "../styles/dark.js"; -import { blockMeta } from "$lib/registry/registry-block-meta.js"; export type RawBlock = { raw: () => Promise; component: () => Promise; }; -// This also defines the order they appear on the blocks page. -export const BLOCK_WHITELIST: BlockName[] = [ - "sidebar-01", - "sidebar-02", - "sidebar-03", - "sidebar-04", - "sidebar-05", - "sidebar-06", - "sidebar-07", - "sidebar-08", - "sidebar-09", - "sidebar-10", - "sidebar-11", - "sidebar-12", - "sidebar-13", - "sidebar-14", - "sidebar-15", - "login-01", -]; - export type BlockName = keyof typeof Blocks; export const blockSchema = z.object({ @@ -46,57 +23,9 @@ export const blockSchema = z.object({ export type Block = z.infer; -export function getAllBlockIds(): readonly BlockName[] { - const blocks = Object.keys(Blocks) as BlockName[]; - return blocks.map((name) => name).filter((b) => BLOCK_WHITELIST.includes(b)); -} - -export async function getBlock(name: BlockName) { - const block = Blocks[name]; - const content = await getBlockContent(name); - - return blockSchema.parse({ name, ...block, ...content }); -} - -async function getBlockCode(name: BlockName) { - const block = Blocks[name]; - const code = await block.raw(); - // use 2 spaces rather than tabs, making it the same as the rest of the codeblocks in /docs - const detabbed = code.replaceAll("\t", " "); - return detabbed; -} - -async function getBlockContent(name: BlockName) { - const raw = await getBlockCode(name); - const { description, iframeHeight, className } = blockMeta[name]; - const code = raw.replaceAll(`$lib/registry/`, "$lib/components/"); - - return { - description, - code, - container: { - height: iframeHeight, - className, - }, - }; -} - -let highlighter: Highlighter; - -export async function highlightCode(code: string) { - if (!highlighter) { - highlighter = await getHighlighter({ - langs: ["svelte"], - themes: [lambdaStudioBlackout], - }); - } - - const html = highlighter.codeToHtml(code, { - lang: "svelte", - theme: "Lambda Studio - Blackout", - }); - - return html; +export function getAllBlockIds(): string[] { + const blocks = Object.keys(Blocks) as string[]; + return blocks.filter((b) => !b.startsWith("chart-")); } export function isBlock(name: string): name is BlockName { diff --git a/sites/docs/src/lib/components/docs/block-copy-code-button.svelte b/sites/docs/src/lib/components/docs/block-copy-code-button.svelte deleted file mode 100644 index 725c3ae1da..0000000000 --- a/sites/docs/src/lib/components/docs/block-copy-code-button.svelte +++ /dev/null @@ -1,70 +0,0 @@ - - - - - { - copyToClipboard(); - hasCopied = true; - }} - {disabled} - {...restProps} - > - Copy - {#if hasCopied} - - {:else} - - {/if} - - Copy code - - diff --git a/sites/docs/src/lib/components/docs/block-preview.svelte b/sites/docs/src/lib/components/docs/block-preview.svelte deleted file mode 100644 index e526c89a49..0000000000 --- a/sites/docs/src/lib/components/docs/block-preview.svelte +++ /dev/null @@ -1,66 +0,0 @@ - - -
- - - - {#if isLoading} -
- - Loading... -
- {/if} - {block.name} - - -
-
-
diff --git a/sites/docs/src/lib/components/docs/block-toolbar.svelte b/sites/docs/src/lib/components/docs/block-toolbar.svelte deleted file mode 100644 index 56a534228d..0000000000 --- a/sites/docs/src/lib/components/docs/block-toolbar.svelte +++ /dev/null @@ -1,109 +0,0 @@ - - -
- - -
diff --git a/sites/docs/src/lib/components/docs/block-viewer-view.svelte b/sites/docs/src/lib/components/docs/block-viewer-view.svelte index 6fbf2a293a..868ad706b2 100644 --- a/sites/docs/src/lib/components/docs/block-viewer-view.svelte +++ b/sites/docs/src/lib/components/docs/block-viewer-view.svelte @@ -14,8 +14,8 @@ defaultSize={100} minSize={30} > - + />