diff --git a/README.md b/README.md index ebc625818f6..53b0d542aaa 100644 --- a/README.md +++ b/README.md @@ -1,39 +1,53 @@

@freesewing/core on NPM - License: MIT - DeepScan grade Open issues - All Contributors -

Chat with us on Discord - Become a FreeSewing Patron -

+href="https://www.npmjs.com/package/@freesewing/core" +title="@freesewing/core on NPM" +> + + + +

+

# FreeSewing diff --git a/config/software/plugins.json b/config/software/plugins.json index 1e9e3d64a3b..c9746e580ba 100644 --- a/config/software/plugins.json +++ b/config/software/plugins.json @@ -10,6 +10,7 @@ "plugin-mirror": "A FreeSewing plugin to mirror points or paths", "plugin-ringsector": "A FreeSewing plugin to draft a ring sector (think part of a donut)", "plugin-round": "A FreeSewing plugin to round corners", + "plugin-path-utils": "A FreeSewing plugin that adds various path helper macros", "plugin-sprinkle": "A FreeSewing plugin to bulk-add snippets to your pattern", "plugin-svgattr": "A FreeSewing plugin to set SVG attributes", "plugin-theme": "A FreeSewing plugin that provides a default theme", diff --git a/config/templates/readme.main.md b/config/templates/readme.main.md index 0eec7761aeb..a885ee507da 100644 --- a/config/templates/readme.main.md +++ b/config/templates/readme.main.md @@ -1,39 +1,53 @@

@freesewing/core on NPM - License: MIT - DeepScan grade Open issues - All Contributors -

Chat with us on Discord - Become a FreeSewing Patron -

+href="https://www.npmjs.com/package/@freesewing/core" +title="@freesewing/core on NPM" +> + + + +

+

# FreeSewing diff --git a/package-lock.json b/package-lock.json index 5499d2c9435..419e2389b5d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31854,6 +31854,257 @@ "node": ">=14.16" } }, + "node_modules/@tailwindcss/node": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.3.tgz", + "integrity": "sha512-H/6r6IPFJkCfBJZ2dKZiPJ7Ueb2wbL592+9bQEl2r73qbX6yGnmQVIfiUvDRB2YI0a3PWDrzUwkvQx1XW1bNkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "enhanced-resolve": "^5.18.1", + "jiti": "^2.4.2", + "lightningcss": "1.29.2", + "tailwindcss": "4.1.3" + } + }, + "node_modules/@tailwindcss/node/node_modules/tailwindcss": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.3.tgz", + "integrity": "sha512-2Q+rw9vy1WFXu5cIxlvsabCwhU2qUwodGq03ODhLJ0jW4ek5BUtoCsnLB0qG+m8AHgEsSJcJGDSDe06FXlP74g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.3.tgz", + "integrity": "sha512-t16lpHCU7LBxDe/8dCj9ntyNpXaSTAgxWm1u2XQP5NiIu4KGSyrDJJRlK9hJ4U9yJxx0UKCVI67MJWFNll5mOQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.1.3", + "@tailwindcss/oxide-darwin-arm64": "4.1.3", + "@tailwindcss/oxide-darwin-x64": "4.1.3", + "@tailwindcss/oxide-freebsd-x64": "4.1.3", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.3", + "@tailwindcss/oxide-linux-arm64-gnu": "4.1.3", + "@tailwindcss/oxide-linux-arm64-musl": "4.1.3", + "@tailwindcss/oxide-linux-x64-gnu": "4.1.3", + "@tailwindcss/oxide-linux-x64-musl": "4.1.3", + "@tailwindcss/oxide-win32-arm64-msvc": "4.1.3", + "@tailwindcss/oxide-win32-x64-msvc": "4.1.3" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.3.tgz", + "integrity": "sha512-cxklKjtNLwFl3mDYw4XpEfBY+G8ssSg9ADL4Wm6//5woi3XGqlxFsnV5Zb6v07dxw1NvEX2uoqsxO/zWQsgR+g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.3.tgz", + "integrity": "sha512-mqkf2tLR5VCrjBvuRDwzKNShRu99gCAVMkVsaEOFvv6cCjlEKXRecPu9DEnxp6STk5z+Vlbh1M5zY3nQCXMXhw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.3.tgz", + "integrity": "sha512-7sGraGaWzXvCLyxrc7d+CCpUN3fYnkkcso3rCzwUmo/LteAl2ZGCDlGvDD8Y/1D3ngxT8KgDj1DSwOnNewKhmg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.3.tgz", + "integrity": "sha512-E2+PbcbzIReaAYZe997wb9rId246yDkCwAakllAWSGqe6VTg9hHle67hfH6ExjpV2LSK/siRzBUs5wVff3RW9w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.3.tgz", + "integrity": "sha512-GvfbJ8wjSSjbLFFE3UYz4Eh8i4L6GiEYqCtA8j2Zd2oXriPuom/Ah/64pg/szWycQpzRnbDiJozoxFU2oJZyfg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.3.tgz", + "integrity": "sha512-35UkuCWQTeG9BHcBQXndDOrpsnt3Pj9NVIB4CgNiKmpG8GnCNXeMczkUpOoqcOhO6Cc/mM2W7kaQ/MTEENDDXg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.3.tgz", + "integrity": "sha512-dm18aQiML5QCj9DQo7wMbt1Z2tl3Giht54uVR87a84X8qRtuXxUqnKQkRDK5B4bCOmcZ580lF9YcoMkbDYTXHQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.3.tgz", + "integrity": "sha512-LMdTmGe/NPtGOaOfV2HuO7w07jI3cflPrVq5CXl+2O93DCewADK0uW1ORNAcfu2YxDUS035eY2W38TxrsqngxA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.3.tgz", + "integrity": "sha512-aalNWwIi54bbFEizwl1/XpmdDrOaCjRFQRgtbv9slWjmNPuJJTIKPHf5/XXDARc9CneW9FkSTqTbyvNecYAEGw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.3.tgz", + "integrity": "sha512-PEj7XR4OGTGoboTIAdXicKuWl4EQIjKHKuR+bFy9oYN7CFZo0eu74+70O4XuERX4yjqVZGAkCdglBODlgqcCXg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.3.tgz", + "integrity": "sha512-T8gfxECWDBENotpw3HR9SmNiHC9AOJdxs+woasRZ8Q/J4VHN0OMs7F+4yVNZ9EVN26Wv6mZbK0jv7eHYuLJLwA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/postcss": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.1.3.tgz", + "integrity": "sha512-6s5nJODm98F++QT49qn8xJKHQRamhYHfMi3X7/ltxiSQ9dyRsaFSfFkfaMsanWzf+TMYQtbk8mt5f6cCVXJwfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "@tailwindcss/node": "4.1.3", + "@tailwindcss/oxide": "4.1.3", + "postcss": "^8.4.41", + "tailwindcss": "4.1.3" + } + }, + "node_modules/@tailwindcss/postcss/node_modules/tailwindcss": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.3.tgz", + "integrity": "sha512-2Q+rw9vy1WFXu5cIxlvsabCwhU2qUwodGq03ODhLJ0jW4ek5BUtoCsnLB0qG+m8AHgEsSJcJGDSDe06FXlP74g==", + "dev": true, + "license": "MIT" + }, "node_modules/@trysound/sax": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", @@ -37530,16 +37781,6 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/css-selector-tokenizer": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.8.0.tgz", - "integrity": "sha512-Jd6Ig3/pe62/qe5SBPTN8h8LeUg/pT4lLgtavPf7updwwHpvFzxvOQBHYj2LZDMjUnBzgvIUSjRcf6oT5HzHFg==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "fastparse": "^1.1.2" - } - }, "node_modules/css-tree": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", @@ -37729,15 +37970,6 @@ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", "license": "MIT" }, - "node_modules/culori": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/culori/-/culori-3.3.0.tgz", - "integrity": "sha512-pHJg+jbuFsCjz9iclQBqyL3B2HLCBF71BwVNujUYEvCeQMvV97R59MNK3R2+jgJ3a1fcZgI9B3vYgz8lzr/BFQ==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, "node_modules/d3-dispatch": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", @@ -37770,22 +38002,13 @@ } }, "node_modules/daisyui": { - "version": "4.12.23", - "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-4.12.23.tgz", - "integrity": "sha512-EM38duvxutJ5PD65lO/AFMpcw+9qEy6XAZrTpzp7WyaPeO/l+F/Qiq0ECHHmFNcFXh5aVoALY4MGrrxtCiaQCQ==", + "version": "5.0.19", + "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-5.0.19.tgz", + "integrity": "sha512-vuxloVgdmTnGpA6CFnQyLkXuqPmusHgYZ0L5Qg1pQzAYPUMc0HM2S3brnu7xRnAUq7ZMAqyoV78Fvht7nY2svg==", + "dev": true, "license": "MIT", - "dependencies": { - "css-selector-tokenizer": "^0.8", - "culori": "^3", - "picocolors": "^1", - "postcss-js": "^4" - }, - "engines": { - "node": ">=16.9.0" - }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/daisyui" + "url": "https://github.com/saadeghi/daisyui?sponsor=1" } }, "node_modules/damerau-levenshtein": { @@ -38330,15 +38553,12 @@ } }, "node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", "license": "Apache-2.0", - "bin": { - "detect-libc": "bin/detect-libc.js" - }, "engines": { - "node": ">=0.10" + "node": ">=8" } }, "node_modules/detect-node": { @@ -40693,12 +40913,6 @@ "fxparser": "src/cli/cli.js" } }, - "node_modules/fastparse": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", - "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", - "license": "MIT" - }, "node_modules/fastq": { "version": "1.19.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.0.tgz", @@ -46450,12 +46664,12 @@ } }, "node_modules/lightningcss": { - "version": "1.29.1", - "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.29.1.tgz", - "integrity": "sha512-FmGoeD4S05ewj+AkhTY+D+myDvXI6eL27FjHIjoyUkO/uw7WZD1fBVs0QxeYWa7E17CUHJaYX/RUGISCtcrG4Q==", + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.29.2.tgz", + "integrity": "sha512-6b6gd/RUXKaw5keVdSEtqFVdzWnU5jMxTUjA2bVcMNPLwSQ08Sv/UodBVtETLCn7k4S1Ibxwh7k68IwLZPgKaA==", "license": "MPL-2.0", "dependencies": { - "detect-libc": "^1.0.3" + "detect-libc": "^2.0.3" }, "engines": { "node": ">= 12.0.0" @@ -46465,22 +46679,22 @@ "url": "https://opencollective.com/parcel" }, "optionalDependencies": { - "lightningcss-darwin-arm64": "1.29.1", - "lightningcss-darwin-x64": "1.29.1", - "lightningcss-freebsd-x64": "1.29.1", - "lightningcss-linux-arm-gnueabihf": "1.29.1", - "lightningcss-linux-arm64-gnu": "1.29.1", - "lightningcss-linux-arm64-musl": "1.29.1", - "lightningcss-linux-x64-gnu": "1.29.1", - "lightningcss-linux-x64-musl": "1.29.1", - "lightningcss-win32-arm64-msvc": "1.29.1", - "lightningcss-win32-x64-msvc": "1.29.1" + "lightningcss-darwin-arm64": "1.29.2", + "lightningcss-darwin-x64": "1.29.2", + "lightningcss-freebsd-x64": "1.29.2", + "lightningcss-linux-arm-gnueabihf": "1.29.2", + "lightningcss-linux-arm64-gnu": "1.29.2", + "lightningcss-linux-arm64-musl": "1.29.2", + "lightningcss-linux-x64-gnu": "1.29.2", + "lightningcss-linux-x64-musl": "1.29.2", + "lightningcss-win32-arm64-msvc": "1.29.2", + "lightningcss-win32-x64-msvc": "1.29.2" } }, "node_modules/lightningcss-darwin-arm64": { - "version": "1.29.1", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.29.1.tgz", - "integrity": "sha512-HtR5XJ5A0lvCqYAoSv2QdZZyoHNttBpa5EP9aNuzBQeKGfbyH5+UipLWvVzpP4Uml5ej4BYs5I9Lco9u1fECqw==", + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.29.2.tgz", + "integrity": "sha512-cK/eMabSViKn/PG8U/a7aCorpeKLMlK0bQeNHmdb7qUnBkNPnL+oV5DjJUo0kqWsJUapZsM4jCfYItbqBDvlcA==", "cpu": [ "arm64" ], @@ -46498,9 +46712,9 @@ } }, "node_modules/lightningcss-darwin-x64": { - "version": "1.29.1", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.29.1.tgz", - "integrity": "sha512-k33G9IzKUpHy/J/3+9MCO4e+PzaFblsgBjSGlpAaFikeBFm8B/CkO3cKU9oI4g+fjS2KlkLM/Bza9K/aw8wsNA==", + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.29.2.tgz", + "integrity": "sha512-j5qYxamyQw4kDXX5hnnCKMf3mLlHvG44f24Qyi2965/Ycz829MYqjrVg2H8BidybHBp9kom4D7DR5VqCKDXS0w==", "cpu": [ "x64" ], @@ -46518,9 +46732,9 @@ } }, "node_modules/lightningcss-freebsd-x64": { - "version": "1.29.1", - "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.29.1.tgz", - "integrity": "sha512-0SUW22fv/8kln2LnIdOCmSuXnxgxVC276W5KLTwoehiO0hxkacBxjHOL5EtHD8BAXg2BvuhsJPmVMasvby3LiQ==", + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.29.2.tgz", + "integrity": "sha512-wDk7M2tM78Ii8ek9YjnY8MjV5f5JN2qNVO+/0BAGZRvXKtQrBC4/cn4ssQIpKIPP44YXw6gFdpUF+Ps+RGsCwg==", "cpu": [ "x64" ], @@ -46538,9 +46752,9 @@ } }, "node_modules/lightningcss-linux-arm-gnueabihf": { - "version": "1.29.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.29.1.tgz", - "integrity": "sha512-sD32pFvlR0kDlqsOZmYqH/68SqUMPNj+0pucGxToXZi4XZgZmqeX/NkxNKCPsswAXU3UeYgDSpGhu05eAufjDg==", + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.29.2.tgz", + "integrity": "sha512-IRUrOrAF2Z+KExdExe3Rz7NSTuuJ2HvCGlMKoquK5pjvo2JY4Rybr+NrKnq0U0hZnx5AnGsuFHjGnNT14w26sg==", "cpu": [ "arm" ], @@ -46558,9 +46772,9 @@ } }, "node_modules/lightningcss-linux-arm64-gnu": { - "version": "1.29.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.29.1.tgz", - "integrity": "sha512-0+vClRIZ6mmJl/dxGuRsE197o1HDEeeRk6nzycSy2GofC2JsY4ifCRnvUWf/CUBQmlrvMzt6SMQNMSEu22csWQ==", + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.29.2.tgz", + "integrity": "sha512-KKCpOlmhdjvUTX/mBuaKemp0oeDIBBLFiU5Fnqxh1/DZ4JPZi4evEH7TKoSBFOSOV3J7iEmmBaw/8dpiUvRKlQ==", "cpu": [ "arm64" ], @@ -46578,9 +46792,9 @@ } }, "node_modules/lightningcss-linux-arm64-musl": { - "version": "1.29.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.29.1.tgz", - "integrity": "sha512-UKMFrG4rL/uHNgelBsDwJcBqVpzNJbzsKkbI3Ja5fg00sgQnHw/VrzUTEc4jhZ+AN2BvQYz/tkHu4vt1kLuJyw==", + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.29.2.tgz", + "integrity": "sha512-Q64eM1bPlOOUgxFmoPUefqzY1yV3ctFPE6d/Vt7WzLW4rKTv7MyYNky+FWxRpLkNASTnKQUaiMJ87zNODIrrKQ==", "cpu": [ "arm64" ], @@ -46598,9 +46812,9 @@ } }, "node_modules/lightningcss-linux-x64-gnu": { - "version": "1.29.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.29.1.tgz", - "integrity": "sha512-u1S+xdODy/eEtjADqirA774y3jLcm8RPtYztwReEXoZKdzgsHYPl0s5V52Tst+GKzqjebkULT86XMSxejzfISw==", + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.29.2.tgz", + "integrity": "sha512-0v6idDCPG6epLXtBH/RPkHvYx74CVziHo6TMYga8O2EiQApnUPZsbR9nFNrg2cgBzk1AYqEd95TlrsL7nYABQg==", "cpu": [ "x64" ], @@ -46618,9 +46832,9 @@ } }, "node_modules/lightningcss-linux-x64-musl": { - "version": "1.29.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.29.1.tgz", - "integrity": "sha512-L0Tx0DtaNUTzXv0lbGCLB/c/qEADanHbu4QdcNOXLIe1i8i22rZRpbT3gpWYsCh9aSL9zFujY/WmEXIatWvXbw==", + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.29.2.tgz", + "integrity": "sha512-rMpz2yawkgGT8RULc5S4WiZopVMOFWjiItBT7aSfDX4NQav6M44rhn5hjtkKzB+wMTRlLLqxkeYEtQ3dd9696w==", "cpu": [ "x64" ], @@ -46638,9 +46852,9 @@ } }, "node_modules/lightningcss-win32-arm64-msvc": { - "version": "1.29.1", - "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.29.1.tgz", - "integrity": "sha512-QoOVnkIEFfbW4xPi+dpdft/zAKmgLgsRHfJalEPYuJDOWf7cLQzYg0DEh8/sn737FaeMJxHZRc1oBreiwZCjog==", + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.29.2.tgz", + "integrity": "sha512-nL7zRW6evGQqYVu/bKGK+zShyz8OVzsCotFgc7judbt6wnB2KbiKKJwBE4SGoDBQ1O94RjW4asrCjQL4i8Fhbw==", "cpu": [ "arm64" ], @@ -46658,9 +46872,9 @@ } }, "node_modules/lightningcss-win32-x64-msvc": { - "version": "1.29.1", - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.29.1.tgz", - "integrity": "sha512-NygcbThNBe4JElP+olyTI/doBNGJvLs3bFCRPdvuCcxZCcCZ71B858IHpdm7L1btZex0FvCmM17FK98Y9MRy1Q==", + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.29.2.tgz", + "integrity": "sha512-EdIUW3B2vLuHmv7urfzMI/h2fmlnOQBk1xlsDxkN1tCWKjNFjfLhGxYk8C8mzpSfr+A6jFFIi8fU6LbQGsRWjA==", "cpu": [ "x64" ], @@ -58329,15 +58543,6 @@ "@img/sharp-win32-x64": "0.33.5" } }, - "node_modules/sharp/node_modules/detect-libc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", - "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", - "license": "Apache-2.0", - "engines": { - "node": ">=8" - } - }, "node_modules/sharp/node_modules/semver": { "version": "7.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", @@ -70571,7 +70776,6 @@ "@mdx-js/react": "^3.0.0", "autoprefixer": "^10.4.20", "clsx": "^2.0.0", - "daisyui": "^4.12.23", "lodash": "^4.17.21", "postcss": "^8.4.47", "prism-react-renderer": "^2.3.0", @@ -70579,12 +70783,14 @@ "react-dom": "^19.0.0", "react-markdown": "^9.0.1", "remark-smartypants": "^3.0.2", - "tailwindcss": "^3.4.14" + "tailwindcss": "^4.1.3" }, "devDependencies": { "@babel/plugin-syntax-import-attributes": "^7.25.6", "@docusaurus/module-type-aliases": "^3.7.0", "@docusaurus/types": "^3.7.0", + "@tailwindcss/postcss": "^4.1.3", + "daisyui": "^5.0.19", "glob": "^11.0.0", "gray-matter": "^4.0.3", "yaml-loader": "^0.8.1" @@ -70665,6 +70871,12 @@ "funding": { "url": "https://github.com/sponsors/isaacs" } + }, + "sites/org/node_modules/tailwindcss": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.3.tgz", + "integrity": "sha512-2Q+rw9vy1WFXu5cIxlvsabCwhU2qUwodGq03ODhLJ0jW4ek5BUtoCsnLB0qG+m8AHgEsSJcJGDSDe06FXlP74g==", + "license": "MIT" } } } diff --git a/packages/react/components/Account/Apikeys.mjs b/packages/react/components/Account/Apikeys.mjs index f95c17fc491..f3c9e7d5118 100644 --- a/packages/react/components/Account/Apikeys.mjs +++ b/packages/react/components/Account/Apikeys.mjs @@ -102,16 +102,16 @@ export const Apikeys = ({ Link = false }) => { return ( <> -
+
- - +
+ @@ -155,23 +155,23 @@ export const Apikeys = ({ Link = false }) => { {orderBy(apikeys, order, desc ? 'desc' : 'asc').map((apikey, i) => ( - - {Object.keys(fields) .slice(1, 4) .map((field) => ( - ))} - - + + ))} @@ -197,10 +197,10 @@ export const Apikeys = ({ Link = false }) => { const ApiKey = ({ apikey }) => ( <> -

+

API Key

-
@@ -139,13 +139,13 @@ export const Apikeys = ({ Link = false }) => { {Object.keys(fields).map((field) => (
+ toggle(apikey.id)} /> + + {shortDate(apikey.createdAt)}{shortDate(apikey.expiresAt)}{shortDate(apikey.createdAt)}{shortDate(apikey.expiresAt)}
- +
+ - - + @@ -145,16 +145,16 @@ export const Bookmarks = () => { .filter((bookmark) => bookmark.type === type) .map((bookmark, i) => ( - - - +
+ TitleTitle Location
+ toggleSelect(bookmark.id)} /> {bookmark.title} + {bookmark.title} {bookmark.url.length > 30 ? bookmark.url.slice(0, 30) + '...' @@ -210,7 +210,7 @@ export const NewBookmark = ({ onCreated = false }) => { // Render the form return ( -
+
{ valid={(val) => val.length > 0} placeholder={'https://freesewing.org/account'} /> -
+
diff --git a/packages/react/components/Account/Compare.mjs b/packages/react/components/Account/Compare.mjs index 97d2ab258d6..9ffb4667144 100644 --- a/packages/react/components/Account/Compare.mjs +++ b/packages/react/components/Account/Compare.mjs @@ -70,19 +70,19 @@ export const Compare = ({ welcome = false }) => { : '/docs/about/guide' return ( -
+
({ val, label: ( -
+
{strings[val].title} {val === 'yes' ? ( - + ) : ( - + )}
), @@ -93,17 +93,17 @@ export const Compare = ({ welcome = false }) => { /> {welcome ? ( <> - + Continue {welcomeSteps[account?.control].length > 0 ? ( <> - + 4 / {welcomeSteps[account?.control].length} { } return ( -
- {title ?

Privacy Matters

: null} +
+ {title ?

Privacy Matters

: null} {text.intro} -
Do you give your consent to process your account data?
+
Do you give your consent to process your account data?
{text.account} {consent1 ? ( ) : ( ) : signUp ? null : ( )} -

- +

+ FreeSewing Privacy Notice

@@ -138,19 +138,19 @@ export const Consent = ({ signUp = false, Link = false, title = false }) => { const Checkbox = ({ value, setter, label, children = null }) => (
setter(value ? false : true)} > -
+
setter(value ? false : true)} /> - {label} + {label}
{children}
@@ -174,7 +174,7 @@ const text = { ), account: ( -
+
What is account data?

Your email address, username, and password, and any measurements{' '} @@ -194,7 +194,7 @@ const text = {

No, never.

-

+

Note: Freesewing publishes anonymized measurements as open data for scientific research. You have the right to object to this.

diff --git a/packages/react/components/Account/Control.mjs b/packages/react/components/Account/Control.mjs index a83764d99b2..9adb5dcdb00 100644 --- a/packages/react/components/Account/Control.mjs +++ b/packages/react/components/Account/Control.mjs @@ -52,14 +52,14 @@ export const Control = ({ welcome = false }) => { : false return ( -
+
({ val, label: ( -
+
{controlDesc[val].title}
@@ -71,17 +71,17 @@ export const Control = ({ welcome = false }) => { /> {welcome ? ( <> - + Continue {welcomeSteps[control].length > 1 ? ( <> - + 1 / {welcomeSteps[control].length} diff --git a/packages/react/components/Account/Email.mjs b/packages/react/components/Account/Email.mjs index 83aca1bf506..a8affdb1292 100644 --- a/packages/react/components/Account/Email.mjs +++ b/packages/react/components/Account/Email.mjs @@ -51,7 +51,7 @@ export const Email = ({ welcome = false, Link = false }) => { const valid = (validateEmail(email) && validateTld(email)) || false return ( -
+
{changed ? (

Please confirm this change

@@ -72,9 +72,9 @@ export const Email = ({ welcome = false, Link = false }) => { original={account.email} valid={() => valid} /> -

+

- @@ -272,7 +272,7 @@ export const PatternCard = ({ const s = sizes[size] const wrapperProps = { - className: `tw-bg-base-300 tw-w-full tw-mb-2 tw-mx-auto tw-flex tw-flex-col tw-items-start tw-text-center tw-justify-center tw-rounded tw-shadow tw-py-4 tw-w-${s} tw-aspect-square`, + className: `tw:bg-base-300 tw:w-full tw:mb-2 tw:mx-auto tw:flex tw:flex-col tw:items-start tw:text-center tw:justify-center tw:rounded tw:shadow tw:py-4 tw:w-${s} tw:aspect-square`, style: { backgroundImage: `url(${cloudflareImageUrl({ type: 'w1000', id: pattern.img })})`, backgroundSize: 'cover', @@ -315,7 +315,7 @@ export const PatternCard = ({ const BadgeLink = ({ label, href }) => ( {label} @@ -336,19 +336,19 @@ const PatternHeader = ({ }) => ( <>

{pattern.name}

-
+
} color="secondary" /> } color="secondary" />
-
-
+
+
-
+
{account.control > 3 && (pattern?.public || pattern.userId === account.id) ? ( -
+
@@ -358,12 +358,12 @@ const PatternHeader = ({ diff --git a/packages/react/components/Account/Patterns.mjs b/packages/react/components/Account/Patterns.mjs index 189be0ec8b5..60be067f39b 100644 --- a/packages/react/components/Account/Patterns.mjs +++ b/packages/react/components/Account/Patterns.mjs @@ -89,16 +89,16 @@ export const Patterns = ({ Link = false }) => { return ( <> -
+
@@ -106,13 +106,13 @@ export const Patterns = ({ Link = false }) => {
- - +
+ @@ -136,16 +136,16 @@ export const Patterns = ({ Link = false }) => { {orderBy(patterns, order, desc ? 'desc' : 'asc').map((pattern, i) => ( - - - + - - - - + diff --git a/packages/react/components/Account/Platform.mjs b/packages/react/components/Account/Platform.mjs index 3e4c692647f..a5f435bf978 100644 --- a/packages/react/components/Account/Platform.mjs +++ b/packages/react/components/Account/Platform.mjs @@ -56,7 +56,7 @@ const Platform = ({ platform = false }) => { } return ( -
+
{ valid={(val) => val.length > 0} placeholder={'joostdecock'} /> -

+

@@ -340,14 +340,14 @@ export const Set = ({ id, publicOnly = false, Link = false, measurementHelpProvi )} {account.control > 1 && account?.compare ? (

-
+
) if (suggest) return ( -
+
{heading}
@@ -382,14 +382,14 @@ export const Set = ({ id, publicOnly = false, Link = false, measurementHelpProvi if (!edit) { if (render) return ( -
+
{heading}
) return ( -
+
{heading}

Data

@@ -404,14 +404,14 @@ export const Set = ({ id, publicOnly = false, Link = false, measurementHelpProvi <> {mset.userId === account.id && ( -
+
{mset.public ? ( - + ) : ( - + )}

-
+
-
+
{sets.map((set, i) => (
-
@@ -120,13 +120,13 @@ export const Patterns = ({ Link = false }) => { {Object.keys(fields).map((field) => (
+ toggle(pattern.id)} /> {pattern.id} + {pattern.id} { Link={Link} /> + {pattern.name} + {capitalize(pattern.design)} {shortDate(pattern.createdAt)} + {shortDate(pattern.createdAt)} {pattern.public ? : }
+
- - + + {hits.map((hit, i) => ( - - - +
EmailLanguageEmailLanguage Unsubscribe
+ {hit.email} {hit.lang.toUpperCase()} + {hit.lang.toUpperCase()} -
-
+
+
{user.username}
-
+
-
+
@@ -119,7 +119,7 @@ export const Collection = ({ Link = false, linkTo = 'about', editor = false, onC {d} @@ -128,19 +128,19 @@ export const Collection = ({ Link = false, linkTo = 'about', editor = false, onC
{showFilters ? ( <> -
+
Filters ({Object.keys(filtered).length}/{collection.length})
-
+
Tags: {tags.map((tag) => ( ))}
-
+
Techniques {techniques.sort().map((tech) => ( ))}
-
+
Difficulty: {[1, 2, 3, 4, 5].map((score) => ( ))}
-
+
) : ( -
+
{Object.keys(filtered) .sort() @@ -253,7 +253,7 @@ export const Collection = ({ Link = false, linkTo = 'about', editor = false, onC const Technique = ({ Link = WebLink, technique }) => ( {technique} @@ -269,7 +269,7 @@ const Technique = ({ Link = WebLink, technique }) => ( const Tag = ({ Link = WebLink, technique }) => ( {tag} @@ -292,28 +292,28 @@ const DesignCard = ({ name, lineDrawing = false, linkTo, Link, onClick }) => { const inner = (
{about[name].name}
{lineDrawing ? ( -
- +
+
) : ( )}
- +
) @@ -321,7 +321,7 @@ const DesignCard = ({ name, lineDrawing = false, linkTo, Link, onClick }) => { return onClick ? (
-
Description
- {about[design].description} +
Description
+ {about[design].description} -
By
-
+
By
+
{codeBy.map((code) => ( ))} @@ -450,12 +450,12 @@ export const DesignInfo = ({ Link = false, design = false, noDocsLink = false }) ))}
-
Difficulty
+
Difficulty
{optionalMeasurements[design].length > 0 ? ( <> -
+
Optional Measurements
@@ -477,7 +477,7 @@ export const DesignInfo = ({ Link = false, design = false, noDocsLink = false }) {requiredMeasurements[design].length > 0 ? ( <> -
+
Required Measurements
@@ -497,24 +497,24 @@ export const DesignInfo = ({ Link = false, design = false, noDocsLink = false }) ) : null} -
Tags
-
+
Tags
+
{tags.map((tag) => ( {tag} ))}
-
Techniques
-
+
Techniques
+
{techniques.map((tech) => ( {tech} @@ -522,8 +522,8 @@ export const DesignInfo = ({ Link = false, design = false, noDocsLink = false }) ))}
-
Examples
-
+
Examples
+
-
Documentation
-
+
Documentation
+
Designer Notes, What You Need, Fabric Options, @@ -548,7 +548,7 @@ export const DesignInfo = ({ Link = false, design = false, noDocsLink = false }) Design Options, Sewing Instructions
-
{buttons}
+
{buttons}
@@ -572,391 +572,3 @@ const SharingIsCaring = ({ design }) => (

If you like, you can copy the hashtag below:

) - -/* -// __SDEFILE__ - This file is a dependency for the stand-alone environment -// Dependencies -import { - nsMerge, - capitalize, - optionsMenuStructure, - optionType, - cloudflareImageUrl, - horFlexClasses, -} from 'shared/utils.mjs' -import { designs } from 'shared/config/designs.mjs' -import { examples } from 'site/components/design-examples.mjs' -// Hooks -import { useTranslation } from 'next-i18next' -import { useDesign } from 'site/hooks/use-design.mjs' -import { useContext, Fragment } from 'react' -// Context -import { ModalContext } from 'shared/context/modal-context.mjs' -// Components -import { ModalWrapper } from 'shared/components/wrappers/modal.mjs' -import { lineDrawings } from 'shared/components/designs/linedrawings/index.mjs' -import { Difficulty } from 'shared/components/designs/difficulty.mjs' -import { PageLink, AnchorLink, Link } from 'shared/components/link.mjs' -import { DocsLink, DocsTitle } from 'shared/components/mdx/docs-helpers.mjs' -import { Popout } from 'shared/components/popout/index.mjs' -import { NewPatternIcon, DocsIcon } from 'shared/components/icons.mjs' -import { DynamicMdx } from 'shared/components/mdx/dynamic.mjs' - -// Translation namespaces used on this page -export const ns = nsMerge( - 'account', - 'tags', - 'techniques', - 'measurements', - 'workbench', - 'designs', - 'tags' -) - -const Option = ({ id, option, design }) => - optionType(option) === 'constant' ? null : ( -
  • - -
  • - ) - -const OptionGroup = ({ id, group, t, design }) => ( -
  • - {t(`workbench:${id}`)} -
      - {Object.entries(group).map(([sid, entry]) => - entry.isGroup ? ( - - ) : ( -
    -
  • -) -export const SimpleOptionsList = ({ options, t, design }) => { - const structure = optionsMenuStructure(options, {}, true) - const output = [] - for (const [key, entry] of Object.entries(structure)) { - const shared = { key, t, design, id: key } - if (entry.isGroup) output.push() - else output.push(