diff --git a/package-lock.json b/package-lock.json index ca1e526..3a83a0d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -66,6 +66,74 @@ "node": ">=6.9.0" } }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz", + "integrity": "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz", + "integrity": "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz", + "integrity": "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz", + "integrity": "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@esbuild/darwin-arm64": { "version": "0.27.3", "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz", @@ -77,73 +145,749 @@ "license": "MIT", "optional": true, "os": [ - "darwin" + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz", + "integrity": "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz", + "integrity": "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz", + "integrity": "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz", + "integrity": "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz", + "integrity": "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz", + "integrity": "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz", + "integrity": "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz", + "integrity": "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz", + "integrity": "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz", + "integrity": "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz", + "integrity": "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz", + "integrity": "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz", + "integrity": "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz", + "integrity": "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz", + "integrity": "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz", + "integrity": "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz", + "integrity": "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz", + "integrity": "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz", + "integrity": "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz", + "integrity": "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz", + "integrity": "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "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", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "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", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "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" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "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/@rolldown/pluginutils": { + "version": "1.0.0-rc.2", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.2.tgz", + "integrity": "sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz", + "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz", + "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz", + "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz", + "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz", + "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz", + "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==", + "cpu": [ + "x64" ], - "engines": { - "node": ">=18" - } + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] }, - "node_modules/@jridgewell/gen-mapping": { - "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==", + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz", + "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==", + "cpu": [ + "arm" + ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@jridgewell/remapping": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz", + "integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==", + "cpu": [ + "arm" + ], "dev": true, + "libc": [ + "musl" + ], "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz", + "integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==", + "cpu": [ + "arm64" + ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", - "engines": { - "node": ">=6.0.0" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz", + "integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT" + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] }, - "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==", + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz", + "integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==", + "cpu": [ + "loong64" + ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-rc.2", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.2.tgz", - "integrity": "sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw==", + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz", + "integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==", + "cpu": [ + "loong64" + ], "dev": true, - "license": "MIT" + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@rollup/rollup-darwin-arm64": { + "node_modules/@rollup/rollup-linux-ppc64-gnu": { "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz", - "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz", + "integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz", + "integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz", + "integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz", + "integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz", + "integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz", + "integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz", + "integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz", + "integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz", + "integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==", "cpu": [ "arm64" ], @@ -151,7 +895,63 @@ "license": "MIT", "optional": true, "os": [ - "darwin" + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz", + "integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz", + "integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz", + "integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz", + "integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" ] }, "node_modules/@statamic/cms": { @@ -291,6 +1091,9 @@ "arm64" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -308,6 +1111,9 @@ "arm64" ], "dev": true, + "libc": [ + "musl" + ], "license": "MIT", "optional": true, "os": [ @@ -881,6 +1687,9 @@ "arm64" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MPL-2.0", "optional": true, "os": [ @@ -902,6 +1711,9 @@ "arm64" ], "dev": true, + "libc": [ + "musl" + ], "license": "MPL-2.0", "optional": true, "os": [ diff --git a/resources/dist/build/assets/cp-CXMWA2cY.js b/resources/dist/build/assets/cp-CXMWA2cY.js deleted file mode 100644 index e87d5b8..0000000 --- a/resources/dist/build/assets/cp-CXMWA2cY.js +++ /dev/null @@ -1 +0,0 @@ -const _=window.Vue,{BaseTransition:$,BaseTransitionPropsValidators:Q,Comment:J,DeprecationTypes:X,EffectScope:Y,ErrorCodes:Z,ErrorTypeStrings:ee,Fragment:te,KeepAlive:oe,ReactiveEffect:ne,Static:re,Suspense:se,Teleport:ie,Text:ae,TrackOpTypes:le,Transition:ce,TransitionGroup:de,TriggerOpTypes:ue,VueElement:pe,__esModule:me,assertNumber:fe,callWithAsyncErrorHandling:he,callWithErrorHandling:ve,camelize:ge,capitalize:Se,cloneVNode:Ce,compatUtils:be,compile:ye,computed:f,createApp:we,createBlock:V,createCommentVNode:Te,createElementBlock:Pe,createElementVNode:i,createHydrationRenderer:Re,createPropsRestProxy:xe,createRenderer:Ie,createSSRApp:Ee,createSlots:Me,createStaticVNode:Le,createTextVNode:Ae,createVNode:Fe,customRef:ke,defineAsyncComponent:He,defineComponent:De,defineCustomElement:_e,defineEmits:Ve,defineExpose:Be,defineModel:Oe,defineOptions:Ne,defineProps:Ge,defineSSRCustomElement:ze,defineSlots:Ue,devtools:je,effect:qe,effectScope:Ke,getCurrentInstance:We,getCurrentScope:$e,getCurrentWatcher:Qe,getTransitionRawChildren:Je,guardReactiveProps:Xe,h:Ye,handleError:Ze,hasInjectionContext:et,hydrate:tt,hydrateOnIdle:ot,hydrateOnInteraction:nt,hydrateOnMediaQuery:rt,hydrateOnVisible:st,initCustomFormatter:it,initDirectivesForSSR:at,inject:lt,isMemoSame:ct,isProxy:dt,isReactive:ut,isReadonly:pt,isRef:mt,isRuntimeOnly:ft,isShallow:ht,isVNode:vt,markRaw:gt,mergeDefaults:St,mergeModels:Ct,mergeProps:bt,nextTick:yt,nodeOps:wt,normalizeClass:h,normalizeProps:Tt,normalizeStyle:Pt,onActivated:Rt,onBeforeMount:xt,onBeforeUnmount:It,onBeforeUpdate:Et,onDeactivated:Mt,onErrorCaptured:Lt,onMounted:B,onRenderTracked:At,onRenderTriggered:Ft,onScopeDispose:kt,onServerPrefetch:Ht,onUnmounted:O,onUpdated:Dt,onWatcherCleanup:_t,openBlock:N,patchProp:Vt,popScopeId:Bt,provide:Ot,proxyRefs:Nt,pushScopeId:Gt,queuePostFlushCb:zt,reactive:Ut,readonly:jt,ref:C,registerRuntimeCompiler:qt,render:Kt,renderList:Wt,renderSlot:$t,resolveComponent:Qt,resolveDirective:Jt,resolveDynamicComponent:Xt,resolveFilter:Yt,resolveTransitionHooks:Zt,setBlockTracking:eo,setDevtoolsHook:to,setTransitionHooks:oo,shallowReactive:no,shallowReadonly:ro,shallowRef:so,ssrContextKey:io,ssrUtils:ao,stop:lo,toDisplayString:b,toHandlerKey:co,toHandlers:uo,toRaw:po,toRef:mo,toRefs:fo,toValue:ho,transformVNodeArgs:vo,triggerRef:go,unref:c,useAttrs:So,useCssModule:Co,useCssVars:bo,useHost:yo,useId:wo,useModel:To,useSSRContext:Po,useShadowRoot:Ro,useSlots:xo,useTemplateRef:Io,useTransitionState:Eo,vModelCheckbox:Mo,vModelDynamic:Lo,vModelRadio:Ao,vModelSelect:Fo,vModelText:ko,vShow:Ho,version:Do,warn:_o,watch:Vo,watchEffect:Bo,watchPostEffect:Oo,watchSyncEffect:No,withAsyncContext:Go,withCtx:y,withDefaults:zo,withDirectives:Uo,withKeys:jo,withMemo:qo,withModifiers:Ko,withScopeId:Wo}=_,{Fieldtype:v,IndexFieldtype:$o,FieldtypeMixin:Qo,HasActionsMixin:Jo,HasInputOptionsMixin:Xo,HasPreferencesMixin:Yo,IndexFieldtypeMixin:Zo,InlineEditForm:en,DateFormatter:tn,ItemActions:on,RelatedItem:nn,RestoreRevision:rn,RevisionHistory:sn,RevisionPreview:an,SaveButtonOptions:ln,SortableList:cn,requireElevatedSession:dn,requireElevatedSessionIf:un,clone:pn,deepClone:mn,resetValuesFromResponse:fn}=__STATAMIC__.core,{Alert:hn,AuthCard:vn,Avatar:gn,Badge:Sn,Button:Cn,ButtonGroup:bn,Calendar:yn,Card:wn,CardList:Tn,CardListItem:Pn,CardPanel:Rn,CharacterCounter:xn,Checkbox:In,CheckboxGroup:En,CodeEditor:Mn,Combobox:G,CommandPaletteItem:Ln,ConfirmationModal:An,Context:Fn,ContextFooter:kn,ContextHeader:Hn,ContextItem:Dn,ContextLabel:_n,ContextMenu:Vn,ContextSeparator:Bn,CreateForm:On,DatePicker:Nn,DateRangePicker:Gn,Description:zn,DocsCallout:Un,DragHandle:jn,Dropdown:qn,DropdownItem:Kn,DropdownLabel:Wn,DropdownMenu:$n,DropdownSeparator:Qn,DropdownFooter:Jn,DropdownHeader:Xn,Editable:Yn,ErrorMessage:Zn,EmptyStateItem:er,EmptyStateMenu:tr,Field:or,Header:nr,Heading:rr,HoverCard:sr,Icon:ir,Input:ar,InputGroup:lr,InputGroupAppend:cr,InputGroupPrepend:dr,Label:ur,Listing:pr,ListingCustomizeColumns:mr,ListingFilters:fr,ListingHeaderCell:hr,ListingPagination:vr,ListingPresets:gr,ListingPresetTrigger:Sr,ListingRowActions:Cr,ListingSearch:br,ListingTable:yr,ListingTableBody:wr,ListingTableHead:Tr,ListingToggleAll:Pr,LivePreview:Rr,LivePreviewPopout:xr,MiddleEllipsis:Ir,Modal:Er,ModalClose:Mr,ModalTitle:Lr,Pagination:Ar,Panel:Fr,PanelFooter:kr,PanelHeader:Hr,Popover:Dr,PublishComponents:_r,PublishContainer:Vr,publishContextKey:Br,injectPublishContext:Or,PublishField:Nr,PublishFields:Gr,PublishFieldsProvider:zr,PublishForm:Ur,PublishLocalizations:jr,PublishSections:qr,PublishTabs:Kr,Radio:Wr,RadioGroup:$r,Select:Qr,Separator:Jr,Slider:Xr,Skeleton:Yr,SplitterGroup:Zr,SplitterPanel:es,SplitterResizeHandle:ts,StatusIndicator:os,Subheading:ns,Switch:rs,TabContent:ss,Stack:is,StackClose:as,StackHeader:ls,StackFooter:cs,StackContent:ds,Table:us,TableCell:ps,TableColumn:ms,TableColumns:fs,TableRow:hs,TableRows:vs,TabList:gs,TabProvider:Ss,Tabs:Cs,TabTrigger:bs,Textarea:ys,TimePicker:ws,ToggleGroup:Ts,ToggleItem:Ps,Widget:Rs,registerIconSet:xs,registerIconSetFromStrings:Is}=__STATAMIC__.ui,z=Statamic.$pinia.defineStore("fontAwesome",{state:()=>({icons:null,loading:!1}),actions:{fetchIcons(d){return this.icons||this.loading?Promise.resolve():(this.loading=!0,fetch(d).then(s=>s.json()).then(s=>this.icons=Object.values(s)).catch(s=>console.error("Failed to fetch Font Awesome icons:",s)).finally(()=>this.loading=!1))}}}),U={class:"flex items-center gap-4"},j={class:"text-xs truncate"},q={class:"flex items-center gap-4"},K={class:"text-xs truncate"},W={__name:"FontAwesome",props:v.props,emits:[...v.emits,"focus","blur"],setup(d,{expose:s,emit:w}){const T=w,r=d,{expose:P,update:R,isReadOnly:x}=v.use(T,r);s(P);const a=z(),u=C(""),l=C(50);let n=null,p=null;const g=f(()=>{if(!a.icons)return[];const e=a.icons.filter(t=>r.meta.styles.includes(t.style));return u.value.length>0?e.filter(t=>t.label.toLowerCase().includes(u.value.toLowerCase())):e}),I=f(()=>g.value.slice(0,l.value)),E=f(()=>(r.meta.script?Array.from(document.getElementsByTagName("script")).filter(t=>t.src===r.meta.script):Array.from(document.getElementsByTagName("link")).filter(t=>t.href===r.meta.css)).length>0);function M(e){u.value=e,l.value=50}function m(){const{scrollTop:e,scrollHeight:t,clientHeight:o}=n,H=e+o>=t-100,D=l.value{for(const t of e){for(const o of t.addedNodes)n||L(o);for(const o of t.removedNodes)n&&A(o)}}),p.observe(document.body,{childList:!0,subtree:!0})}function k(){if(E.value)return;const e=r.meta.script?Object.assign(document.createElement("script"),{src:r.meta.script}):Object.assign(document.createElement("link"),{rel:"stylesheet",href:r.meta.css});document.head.appendChild(e)}return B(()=>{a.fetchIcons(r.meta.url),k(),F()}),O(()=>{p.disconnect(),n&&n.removeEventListener("scroll",m)}),(e,t)=>(N(),V(c(G),{clearable:"",class:h({invisible:!c(a).icons}),"read-only":c(x),options:I.value,placeholder:"Type to search …","ignore-filter":!0,"model-value":c(a).icons?e.value:null,"option-value":"class","onUpdate:modelValue":c(R),onSearch:M},{option:y(o=>[i("div",U,[i("i",{class:h(["w-5 h-5",o.class])},null,2),i("span",j,b(o.label),1)])]),"selected-option":y(({option:o})=>[i("div",q,[i("i",{class:h(["w-5 h-5",o.class])},null,2),i("span",K,b(o.label),1)])]),_:1},8,["class","read-only","options","model-value","onUpdate:modelValue"]))}};Statamic.booting(()=>{Statamic.$components.register("font_awesome-fieldtype",W)}); diff --git a/resources/dist/build/assets/cp-DV_gD1cC.js b/resources/dist/build/assets/cp-DV_gD1cC.js new file mode 100644 index 0000000..ba41dfd --- /dev/null +++ b/resources/dist/build/assets/cp-DV_gD1cC.js @@ -0,0 +1 @@ +const _=window.Vue,{BaseTransition:$,BaseTransitionPropsValidators:Q,Comment:J,DeprecationTypes:X,EffectScope:Y,ErrorCodes:Z,ErrorTypeStrings:ee,Fragment:te,KeepAlive:oe,ReactiveEffect:ne,Static:re,Suspense:se,Teleport:ie,Text:ae,TrackOpTypes:le,Transition:ce,TransitionGroup:de,TriggerOpTypes:ue,VueElement:pe,__esModule:me,assertNumber:fe,callWithAsyncErrorHandling:he,callWithErrorHandling:ve,camelize:ge,capitalize:Se,cloneVNode:Ce,compatUtils:be,compile:ye,computed:f,createApp:Te,createBlock:V,createCommentVNode:we,createElementBlock:xe,createElementVNode:i,createHydrationRenderer:Pe,createPropsRestProxy:Re,createRenderer:Ie,createSSRApp:Ee,createSlots:Me,createStaticVNode:Le,createTextVNode:Ae,createVNode:Fe,customRef:ke,defineAsyncComponent:He,defineComponent:De,defineCustomElement:_e,defineEmits:Ve,defineExpose:Be,defineModel:Oe,defineOptions:Ne,defineProps:Ge,defineSSRCustomElement:ze,defineSlots:Ue,devtools:je,effect:qe,effectScope:Ke,getCurrentInstance:We,getCurrentScope:$e,getCurrentWatcher:Qe,getTransitionRawChildren:Je,guardReactiveProps:Xe,h:Ye,handleError:Ze,hasInjectionContext:et,hydrate:tt,hydrateOnIdle:ot,hydrateOnInteraction:nt,hydrateOnMediaQuery:rt,hydrateOnVisible:st,initCustomFormatter:it,initDirectivesForSSR:at,inject:lt,isMemoSame:ct,isProxy:dt,isReactive:ut,isReadonly:pt,isRef:mt,isRuntimeOnly:ft,isShallow:ht,isVNode:vt,markRaw:gt,mergeDefaults:St,mergeModels:Ct,mergeProps:bt,nextTick:yt,nodeOps:Tt,normalizeClass:h,normalizeProps:wt,normalizeStyle:xt,onActivated:Pt,onBeforeMount:Rt,onBeforeUnmount:It,onBeforeUpdate:Et,onDeactivated:Mt,onErrorCaptured:Lt,onMounted:B,onRenderTracked:At,onRenderTriggered:Ft,onScopeDispose:kt,onServerPrefetch:Ht,onUnmounted:O,onUpdated:Dt,onWatcherCleanup:_t,openBlock:N,patchProp:Vt,popScopeId:Bt,provide:Ot,proxyRefs:Nt,pushScopeId:Gt,queuePostFlushCb:zt,reactive:Ut,readonly:jt,ref:C,registerRuntimeCompiler:qt,render:Kt,renderList:Wt,renderSlot:$t,resolveComponent:Qt,resolveDirective:Jt,resolveDynamicComponent:Xt,resolveFilter:Yt,resolveTransitionHooks:Zt,setBlockTracking:eo,setDevtoolsHook:to,setTransitionHooks:oo,shallowReactive:no,shallowReadonly:ro,shallowRef:so,ssrContextKey:io,ssrUtils:ao,stop:lo,toDisplayString:b,toHandlerKey:co,toHandlers:uo,toRaw:po,toRef:mo,toRefs:fo,toValue:ho,transformVNodeArgs:vo,triggerRef:go,unref:c,useAttrs:So,useCssModule:Co,useCssVars:bo,useHost:yo,useId:To,useModel:wo,useSSRContext:xo,useShadowRoot:Po,useSlots:Ro,useTemplateRef:Io,useTransitionState:Eo,vModelCheckbox:Mo,vModelDynamic:Lo,vModelRadio:Ao,vModelSelect:Fo,vModelText:ko,vShow:Ho,version:Do,warn:_o,watch:Vo,watchEffect:Bo,watchPostEffect:Oo,watchSyncEffect:No,withAsyncContext:Go,withCtx:y,withDefaults:zo,withDirectives:Uo,withKeys:jo,withMemo:qo,withModifiers:Ko,withScopeId:Wo}=_,{Fieldtype:v,IndexFieldtype:$o,FieldtypeMixin:Qo,HasActionsMixin:Jo,HasInputOptionsMixin:Xo,HasPreferencesMixin:Yo,IndexFieldtypeMixin:Zo,InlineEditForm:en,DateFormatter:tn,NumberFormatter:on,ItemActions:nn,RelatedItem:rn,RestoreRevision:sn,RevisionHistory:an,RevisionPreview:ln,SaveButtonOptions:cn,SortableList:dn,requireElevatedSession:un,requireElevatedSessionIf:pn,clone:mn,deepClone:fn,resetValuesFromResponse:hn}=__STATAMIC__.core,{Alert:vn,AuthCard:gn,Avatar:Sn,Badge:Cn,Button:bn,ButtonGroup:yn,Calendar:Tn,Card:wn,CardList:xn,CardListItem:Pn,CardPanel:Rn,CharacterCounter:In,Checkbox:En,CheckboxGroup:Mn,CodeEditor:Ln,Combobox:G,CommandPaletteItem:An,ConfirmationModal:Fn,Context:kn,ContextFooter:Hn,ContextHeader:Dn,ContextItem:_n,ContextLabel:Vn,ContextMenu:Bn,ContextSeparator:On,CreateForm:Nn,DatePicker:Gn,DateRangePicker:zn,Description:Un,DocsCallout:jn,DragHandle:qn,Dropdown:Kn,DropdownItem:Wn,DropdownLabel:$n,DropdownMenu:Qn,DropdownSeparator:Jn,DropdownFooter:Xn,DropdownHeader:Yn,Editable:Zn,ErrorMessage:er,EmptyStateItem:tr,EmptyStateMenu:or,Field:nr,Header:rr,Heading:sr,HoverCard:ir,Icon:ar,Input:lr,InputGroup:cr,InputGroupAppend:dr,InputGroupPrepend:ur,Label:pr,Listing:mr,ListingCustomizeColumns:fr,ListingFilters:hr,ListingHeaderCell:vr,ListingPagination:gr,ListingPresets:Sr,ListingPresetTrigger:Cr,ListingRowActions:br,ListingSearch:yr,ListingTable:Tr,ListingTableBody:wr,ListingTableHead:xr,ListingToggleAll:Pr,LivePreview:Rr,LivePreviewPopout:Ir,MiddleEllipsis:Er,Modal:Mr,ModalClose:Lr,ModalTitle:Ar,Pagination:Fr,Panel:kr,PanelFooter:Hr,PanelHeader:Dr,Popover:_r,PublishComponents:Vr,PublishContainer:Br,publishContextKey:Or,injectPublishContext:Nr,PublishField:Gr,PublishFields:zr,PublishFieldsProvider:Ur,PublishForm:jr,PublishLocalizations:qr,PublishSections:Kr,PublishTabs:Wr,Radio:$r,RadioGroup:Qr,Select:Jr,Separator:Xr,Slider:Yr,Skeleton:Zr,SplitterGroup:es,SplitterPanel:ts,SplitterResizeHandle:os,StatusIndicator:ns,Subheading:rs,Switch:ss,TabContent:is,Stack:as,StackClose:ls,StackHeader:cs,StackFooter:ds,StackContent:us,Table:ps,TableCell:ms,TableColumn:fs,TableColumns:hs,TableRow:vs,TableRows:gs,TabList:Ss,TabProvider:Cs,Tabs:bs,TabTrigger:ys,Text:Ts,Textarea:ws,TimePicker:xs,ToggleGroup:Ps,ToggleItem:Rs,Widget:Is,registerIconSet:Es,registerIconSetFromStrings:Ms}=__STATAMIC__.ui,z=Statamic.$pinia.defineStore("fontAwesome",{state:()=>({icons:null,loading:!1}),actions:{fetchIcons(d){return this.icons||this.loading?Promise.resolve():(this.loading=!0,fetch(d).then(s=>s.json()).then(s=>this.icons=Object.values(s)).catch(s=>console.error("Failed to fetch Font Awesome icons:",s)).finally(()=>this.loading=!1))}}}),U={class:"flex items-center gap-4"},j={class:"text-xs truncate"},q={class:"flex items-center gap-4"},K={class:"text-xs truncate"},W={__name:"FontAwesome",props:v.props,emits:[...v.emits,"focus","blur"],setup(d,{expose:s,emit:T}){const w=T,r=d,{expose:x,update:P,isReadOnly:R}=v.use(w,r);s(x);const a=z(),u=C(""),l=C(50);let n=null,p=null;const g=f(()=>{if(!a.icons)return[];const e=a.icons.filter(t=>r.meta.styles.includes(t.style));return u.value.length>0?e.filter(t=>t.label.toLowerCase().includes(u.value.toLowerCase())):e}),I=f(()=>g.value.slice(0,l.value)),E=f(()=>(r.meta.script?Array.from(document.getElementsByTagName("script")).filter(t=>t.src===r.meta.script):Array.from(document.getElementsByTagName("link")).filter(t=>t.href===r.meta.css)).length>0);function M(e){u.value=e,l.value=50}function m(){const{scrollTop:e,scrollHeight:t,clientHeight:o}=n,H=e+o>=t-100,D=l.value{for(const t of e){for(const o of t.addedNodes)n||L(o);for(const o of t.removedNodes)n&&A(o)}}),p.observe(document.body,{childList:!0,subtree:!0})}function k(){if(E.value)return;const e=r.meta.script?Object.assign(document.createElement("script"),{src:r.meta.script}):Object.assign(document.createElement("link"),{rel:"stylesheet",href:r.meta.css});document.head.appendChild(e)}return B(()=>{a.fetchIcons(r.meta.url),k(),F()}),O(()=>{p.disconnect(),n&&n.removeEventListener("scroll",m)}),(e,t)=>(N(),V(c(G),{clearable:"",class:h({invisible:!c(a).icons}),"read-only":c(R),options:I.value,placeholder:"Type to search …","ignore-filter":!0,"model-value":c(a).icons?e.value:null,"option-value":"class","onUpdate:modelValue":c(P),onSearch:M},{option:y(o=>[i("div",U,[i("i",{class:h(["w-5 h-5",o.class])},null,2),i("span",j,b(o.label),1)])]),"selected-option":y(({option:o})=>[i("div",q,[i("i",{class:h(["w-5 h-5",o.value])},null,2),i("span",K,b(o.label),1)])]),_:1},8,["class","read-only","options","model-value","onUpdate:modelValue"]))}};Statamic.booting(()=>{Statamic.$components.register("font_awesome-fieldtype",W)}); diff --git a/resources/dist/build/manifest.json b/resources/dist/build/manifest.json index 5908920..274f58d 100644 --- a/resources/dist/build/manifest.json +++ b/resources/dist/build/manifest.json @@ -9,7 +9,7 @@ ] }, "resources/js/cp.js": { - "file": "assets/cp-CXMWA2cY.js", + "file": "assets/cp-DV_gD1cC.js", "name": "cp", "src": "resources/js/cp.js", "isEntry": true diff --git a/resources/js/FontAwesome.vue b/resources/js/FontAwesome.vue index 188bde8..80f770b 100644 --- a/resources/js/FontAwesome.vue +++ b/resources/js/FontAwesome.vue @@ -20,7 +20,7 @@ diff --git a/src/Contracts/FontAwesome.php b/src/Contracts/FontAwesome.php index 681bb1f..e0de379 100644 --- a/src/Contracts/FontAwesome.php +++ b/src/Contracts/FontAwesome.php @@ -13,4 +13,6 @@ public function icons(): Icons; public function icon(string $id): ?Icon; public function styles(): Collection; + + public function iconsCachePath(): ?string; } diff --git a/src/FontAwesome/AbstractFontAwesome.php b/src/FontAwesome/AbstractFontAwesome.php index 7e83a30..d2d0acd 100644 --- a/src/FontAwesome/AbstractFontAwesome.php +++ b/src/FontAwesome/AbstractFontAwesome.php @@ -11,6 +11,8 @@ abstract class AbstractFontAwesome implements FontAwesome { abstract public function icons(): Icons; + abstract public function iconCacheKey(): string; + public function icon(string $id): ?Icon { return $this->icons()->get($id); @@ -18,7 +20,16 @@ public function icon(string $id): ?Icon public function styles(): Collection { - return $this->icons()->styles(); + $cached = $this->readStylesCache(); + + if ($cached !== null) { + return collect($cached); + } + + $styles = $this->icons()->styles(); + $this->writeStylesCache($styles->all()); + + return $styles; } protected function collectIcons(array $icons): Icons @@ -37,6 +48,123 @@ class: $this->iconClass($icon['id'], $familyStyle['family'], $familyStyle['style }); } + public function iconsCachePath(): ?string + { + $key = $this->iconCacheKey(); + $path = storage_path("framework/cache/font-awesome/{$key}.json"); + + return file_exists($path) ? $path : null; + } + + protected function readStylesCache(): ?array + { + $path = storage_path("framework/cache/font-awesome/styles-{$this->iconCacheKey()}.json"); + + if (! file_exists($path)) { + return null; + } + + try { + $data = file_get_contents($path); + + if ($data === false) { + return null; + } + + $decoded = json_decode($data, true); + + return is_array($decoded) ? $decoded : null; + } catch (\Throwable $e) { + return null; + } + } + + protected function writeStylesCache(array $styles): void + { + $dir = storage_path('framework/cache/font-awesome'); + + if (! is_dir($dir)) { + @mkdir($dir, 0755, true); + } + + $path = "{$dir}/styles-{$this->iconCacheKey()}.json"; + file_put_contents($path, json_encode($styles, JSON_THROW_ON_ERROR)); + } + + protected function iconsFromArray(array $data): Icons + { + return Icons::make($data)->map(fn (array $icon) => new Icon( + id: $icon['id'], + label: $icon['label'], + style: $icon['style'], + class: $icon['class'], + ))->keyBy('id'); + } + + protected function readIconCache(string $key): ?array + { + $path = storage_path("framework/cache/font-awesome/{$key}.json"); + + if (! file_exists($path)) { + return null; + } + + try { + $data = file_get_contents($path); + + if ($data === false) { + return null; + } + + $decoded = json_decode($data, true); + + return is_array($decoded) ? $decoded : null; + } catch (\Throwable $e) { + return null; + } + } + + protected function writeIconCache(string $key, Icons $icons): void + { + $dir = storage_path('framework/cache/font-awesome'); + + if (! is_dir($dir)) { + @mkdir($dir, 0755, true); + } + + $path = "{$dir}/{$key}.json"; + $handle = fopen($path, 'w'); + + if ($handle === false) { + throw new \RuntimeException("Unable to write cache file: {$path}"); + } + + fwrite($handle, "[\n"); + $first = true; + + foreach ($icons as $icon) { + if (! $first) { + fwrite($handle, ",\n"); + } + $first = false; + + $json = json_encode([ + 'id' => $icon->id, + 'label' => $icon->label, + 'style' => $icon->style, + 'class' => $icon->class, + ], JSON_THROW_ON_ERROR); + + fwrite($handle, ' '.$json); + } + + fwrite($handle, "\n]"); + fclose($handle); + + // Also write styles cache alongside + $this->writeStylesCache($icons->styles()->all()); + } + protected function iconClass(string $id, string $family, string $style): string { return match (true) { @@ -54,4 +182,44 @@ protected function familyStyleForLabel(array $familyStyle): string ->replace('-', ' ') ->title(); } + + protected function readKitCache(string $key): ?array + { + $path = storage_path("framework/cache/font-awesome/kit-{$key}.json"); + + if (! file_exists($path)) { + return null; + } + + try { + $data = file_get_contents($path); + + if ($data === false) { + return null; + } + + $decoded = json_decode($data, true); + + if (! is_array($decoded)) { + return null; + } + + return $decoded; + } catch (\Throwable $e) { + return null; + } + } + + protected function writeKitCache(string $key, array $data): void + { + $dir = storage_path('framework/cache/font-awesome'); + + if (! is_dir($dir)) { + @mkdir($dir, 0755, true); + } + + $path = "{$dir}/kit-{$key}.json"; + + file_put_contents($path, json_encode($data, JSON_THROW_ON_ERROR)); + } } diff --git a/src/FontAwesome/KitFontAwesome.php b/src/FontAwesome/KitFontAwesome.php index 622dfee..220e144 100644 --- a/src/FontAwesome/KitFontAwesome.php +++ b/src/FontAwesome/KitFontAwesome.php @@ -13,21 +13,40 @@ class KitFontAwesome extends AbstractFontAwesome implements FontAwesome { protected string $apiEndpoint = 'https://api.fontawesome.com'; + protected ?Icons $cachedIcons = null; + public function __construct(protected string $apiToken, protected string $kitToken) { // } + public function iconCacheKey(): string + { + return $this->kitToken; + } + public function icons(): Icons { - return Cache::rememberForever('font_awesome::kit::icons', function () { - $icons = Http::post($this->apiEndpoint, ['query' => $this->iconsQuery()]) - ->collect('data.release.icons') - ->merge($this->customIcons()) - ->toArray(); - - return $this->collectIcons($icons); - }); + if ($this->cachedIcons) { + return $this->cachedIcons; + } + + $cached = $this->readIconCache($this->kitToken); + + if ($cached !== null) { + return $this->cachedIcons = $this->iconsFromArray($cached); + } + + $iconsData = Http::post($this->apiEndpoint, ['query' => $this->iconsQuery()]) + ->collect('data.release.icons') + ->merge($this->customIcons()) + ->toArray(); + + $this->cachedIcons = $this->collectIcons($iconsData); + unset($iconsData); + $this->writeIconCache($this->kitToken, $this->cachedIcons); + + return $this->cachedIcons; } protected function customIcons(): Collection @@ -55,19 +74,23 @@ public function script(): string protected function kit(): Kit { - return Cache::rememberForever("font_awesome::kit::{$this->kitToken}", function () { - $kit = Http::withToken($this->authToken()) + $kitData = $this->readKitCache($this->kitToken); + + if ($kitData === null) { + $kitData = Http::withToken($this->authToken()) ->post($this->apiEndpoint, ['query' => $this->kitQuery()]) ->json('data.me.kit'); - return new Kit( - id: $kit['token'], - url: "https://kit.fontawesome.com/{$kit['token']}.js", - license: $kit['licenseSelected'], - version: $kit['version'], - customIcons: $kit['iconUploads'], - ); - }); + $this->writeKitCache($this->kitToken, $kitData); + } + + return new Kit( + id: $kitData['token'], + url: "https://kit.fontawesome.com/{$kitData['token']}.js", + license: $kitData['licenseSelected'], + version: $kitData['version'], + customIcons: $kitData['iconUploads'], + ); } protected function authToken(): string diff --git a/src/FontAwesome/LocalFontAwesome.php b/src/FontAwesome/LocalFontAwesome.php index b6d7d8c..5fb0c6b 100644 --- a/src/FontAwesome/LocalFontAwesome.php +++ b/src/FontAwesome/LocalFontAwesome.php @@ -4,29 +4,47 @@ use Aerni\FontAwesome\Contracts\FontAwesome; use Aerni\FontAwesome\Data\Icons; -use Illuminate\Support\Facades\Cache; use Illuminate\Support\Str; use Statamic\Facades\YAML; class LocalFontAwesome extends AbstractFontAwesome implements FontAwesome { + protected ?Icons $cachedIcons = null; + public function __construct(protected string $metadata, protected string $css) { // } + public function iconCacheKey(): string + { + return 'local'; + } + public function icons(): Icons { - return Cache::rememberForever('font_awesome::local::icons', function () { - $icons = YAML::file("{$this->metadata}/icon-families.yml")->parse(); + if ($this->cachedIcons) { + return $this->cachedIcons; + } + + $cached = $this->readIconCache('local'); + + if ($cached !== null) { + return $this->cachedIcons = $this->iconsFromArray($cached); + } + + $icons = YAML::file("{$this->metadata}/icon-families.yml")->parse(); + + foreach ($icons as $id => $icon) { + $icons[$id]['id'] = $id; + $icons[$id]['label'] = Str::title($icon['label']); + } - foreach ($icons as $id => $icon) { - $icons[$id]['id'] = $id; /* Make sure we have an ID to work with. */ - $icons[$id]['label'] = Str::title($icon['label']); /* Ensure custom icons also use title case. */ - } + $this->cachedIcons = $this->collectIcons($icons); + unset($icons); + $this->writeIconCache('local', $this->cachedIcons); - return $this->collectIcons($icons); - }); + return $this->cachedIcons; } public function css(): string diff --git a/src/GraphQL/SafeResponseCache.php b/src/GraphQL/SafeResponseCache.php new file mode 100644 index 0000000..4b3ce94 --- /dev/null +++ b/src/GraphQL/SafeResponseCache.php @@ -0,0 +1,86 @@ +getCacheKey($request)); + + if (! is_array($cached)) { + return null; + } + + return new Response( + $cached['content'], + $cached['status'], + $cached['headers'] + ); + } + + public function put(Request $request, $response) + { + $key = $this->track($request); + + $ttl = Carbon::now()->addMinutes((int) config('statamic.graphql.cache.expiry', 60)); + + $data = [ + 'content' => $response->getContent(), + 'status' => $response->getStatusCode(), + 'headers' => $response->headers->all(), + ]; + + Cache::put($key, $data, $ttl); + } + + protected function track($request) + { + $newKey = $this->getCacheKey($request); + + $keys = $this + ->getTrackedResponses() + ->push($newKey) + ->unique() + ->values() + ->all(); + + Cache::put($this->getTrackingKey(), $keys); + + return $newKey; + } + + protected function getTrackedResponses() + { + return collect(Cache::get($this->getTrackingKey(), [])); + } + + protected function getTrackingKey() + { + return 'gql-cache:tracked-responses'; + } + + protected function getCacheKey(Request $request) + { + $query = $request->input('query'); + $vars = $request->input('variables'); + + return 'gql-cache:'.md5($query).'_'.md5(json_encode($vars)); + } + + public function handleInvalidationEvent(Event $event) + { + $this->getTrackedResponses()->each(function ($key) { + Cache::forget($key); + }); + + Cache::forget($this->getTrackingKey()); + } +} diff --git a/src/Http/Controllers/FontAwesomeController.php b/src/Http/Controllers/FontAwesomeController.php index 8bd9f48..278fc68 100644 --- a/src/Http/Controllers/FontAwesomeController.php +++ b/src/Http/Controllers/FontAwesomeController.php @@ -9,6 +9,12 @@ class FontAwesomeController extends Controller { public function __invoke() { + $cachePath = FontAwesome::iconsCachePath(); + + if ($cachePath !== null) { + return response()->file($cachePath); + } + return response()->json(FontAwesome::icons()); } } diff --git a/src/ServiceProvider.php b/src/ServiceProvider.php index 88e4c6a..b73892e 100644 --- a/src/ServiceProvider.php +++ b/src/ServiceProvider.php @@ -3,6 +3,8 @@ namespace Aerni\FontAwesome; use Statamic\Providers\AddonServiceProvider; +use Statamic\Contracts\GraphQL\ResponseCache; +use Aerni\FontAwesome\GraphQL\SafeResponseCache; class ServiceProvider extends AddonServiceProvider { @@ -12,4 +14,11 @@ class ServiceProvider extends AddonServiceProvider ], 'publicDirectory' => 'resources/dist', ]; + + public function boot(): void + { + parent::boot(); + + $this->app->bind(ResponseCache::class, SafeResponseCache::class); + } }