diff --git a/.storybook/main.js b/.storybook/main.js index 314212c..4d0a351 100644 --- a/.storybook/main.js +++ b/.storybook/main.js @@ -6,7 +6,8 @@ module.exports = { "addons": [ "@storybook/addon-links", "@storybook/addon-essentials", - "@storybook/addon-interactions" + "@storybook/addon-interactions", + "@storybook/preset-scss" ], "framework": "@storybook/react", "core": { diff --git a/package-lock.json b/package-lock.json index 55b6a69..87ccc20 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "0.1.0", "dependencies": { "@next/font": "13.1.6", + "@primer/css": "^20.8.2", "@types/react": "18.0.27", "@types/react-dom": "18.0.10", "eslint": "8.33.0", @@ -32,15 +33,20 @@ "@storybook/addon-links": "^6.5.16", "@storybook/builder-webpack5": "^6.5.16", "@storybook/manager-webpack5": "^6.5.16", + "@storybook/preset-scss": "^1.0.3", "@storybook/react": "^6.5.16", "@storybook/testing-library": "^0.0.13", "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^13.4.0", "babel-loader": "^8.3.0", + "css-loader": "^6.7.3", "eslint-plugin-storybook": "^0.6.10", "jest": "^29.4.1", "jest-environment-jsdom": "^29.4.1", - "node-mocks-http": "^1.12.1" + "node-mocks-http": "^1.12.1", + "sass": "^1.58.1", + "sass-loader": "^13.2.0", + "style-loader": "^3.3.1" } }, "node_modules/@adobe/css-tools": { @@ -2350,6 +2356,67 @@ "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", "dev": true }, + "node_modules/@github/auto-check-element": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@github/auto-check-element/-/auto-check-element-5.2.0.tgz", + "integrity": "sha512-YODZZUSeoZVJQ04p73MAohrEK37SJlVRDUTaFiPYse9K3z3bNEm+ekq5qYCIyDKGgX7hUhr3WZF35qHxr/zu0Q==", + "dependencies": { + "@github/mini-throttle": "^1.0.7" + } + }, + "node_modules/@github/auto-check-element/node_modules/@github/mini-throttle": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@github/mini-throttle/-/mini-throttle-1.0.7.tgz", + "integrity": "sha512-1fzCDXpxI4J59pNmO0r0Y1g+R8Sa2B5ersce8AuFu5STMu7b++9osdedK0zWduYowBIgsPQZihJBN19WrAF64g==" + }, + "node_modules/@github/auto-complete-element": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@github/auto-complete-element/-/auto-complete-element-3.3.4.tgz", + "integrity": "sha512-b9SBCLIQGfCI3G0pGYE8rBSUDON5iFKUgHXgAtVdgZii0dnLFxNl5tn1R/RaBEFdzBQPDl9vqu41TF/Hs3w8FA==", + "dependencies": { + "@github/combobox-nav": "^2.0.2" + } + }, + "node_modules/@github/catalyst": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@github/catalyst/-/catalyst-1.6.0.tgz", + "integrity": "sha512-u8A+DameixqpeyHzvnJWTGj+wfiskQOYHzSiJscCWVfMkIT3rxnbHMtGh3lMthaRY21nbUOK71WcsCnCrXhBJQ==" + }, + "node_modules/@github/clipboard-copy-element": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@github/clipboard-copy-element/-/clipboard-copy-element-1.1.2.tgz", + "integrity": "sha512-L6CMrcA5we0udafvoSuRCE/Ci/3xrLWKYRGup2IlhxF771bQYsQ2EB1of182pI8ZWM4oxgwzu37+igMeoZjN/A==" + }, + "node_modules/@github/combobox-nav": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@github/combobox-nav/-/combobox-nav-2.1.7.tgz", + "integrity": "sha512-Webx0W5iTpkk5Chy9dB/1BEUORQ0qrwui8HaaVBiy75W2VOJg96WTuKj1rXENAJ3XTMhdEF53bn0LYfvP0EKvg==" + }, + "node_modules/@github/details-menu-element": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/@github/details-menu-element/-/details-menu-element-1.0.13.tgz", + "integrity": "sha512-gMkii86w/oUP5dq8yOWZn1sgbgtFj3AYETxxtpsqRggZktgd8te4+npAn4Hm+936c/lxmEzXqfjARL/CzGR4+w==" + }, + "node_modules/@github/image-crop-element": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@github/image-crop-element/-/image-crop-element-5.0.0.tgz", + "integrity": "sha512-Vgm2OwWAs1ESoib/t5sjxsAYo6YTOxxAjWDRxswX7qrqoyCejTZ3hshdo4Ep5e+Mz/GVTZC3rdMtg06dk/eT4g==" + }, + "node_modules/@github/mini-throttle": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@github/mini-throttle/-/mini-throttle-2.1.0.tgz", + "integrity": "sha512-iEeR2OdVCPkdIPUszL8gJnKNu4MR8ANh7y0u/LPyaatYezgaWxUZEzhFntloqQq+HE6MZkFy+cl+xzCNuljOdw==" + }, + "node_modules/@github/relative-time-element": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@github/relative-time-element/-/relative-time-element-4.2.1.tgz", + "integrity": "sha512-XwUfSNwcfBjKRHcUmbh87iFUhzAwO5eDQQ+MNpTFNq5JObFTQv0jmmL45vUsYutwuZCBQHLILXkIgSmHVsa4PA==" + }, + "node_modules/@github/tab-container-element": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@github/tab-container-element/-/tab-container-element-3.2.0.tgz", + "integrity": "sha512-to5ZJuywKK3KX53X1ifOcWjvUTQcBGdQ6Qkhm8L97xQ3ovICag1048M3YMpc+QSdr8xWeCBMnLeMnENqotB0Og==" + }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.8", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", @@ -3402,6 +3469,45 @@ "node": ">= 8" } }, + "node_modules/@primer/behaviors": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@primer/behaviors/-/behaviors-1.3.3.tgz", + "integrity": "sha512-iHMRuu8YWDJIdqCi1krx0cyFNeqszNKTOb0dXFu2wQ5BeIqxqPJLD7rjZ2Vjf/+YaPSbWuIQE1H6TaGMMsDfdA==" + }, + "node_modules/@primer/css": { + "version": "20.8.2", + "resolved": "https://registry.npmjs.org/@primer/css/-/css-20.8.2.tgz", + "integrity": "sha512-MoUIX/9JcAci1jCczFsXyweZpRWbgyGI9j55CCxRBk/AFdWmblCwEMBioXOpBViCrZDNMsACns2i7T4ku47kbQ==", + "dependencies": { + "@primer/primitives": "^7.11.1", + "@primer/view-components": "^0.0.120" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/@primer/primitives": { + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/@primer/primitives/-/primitives-7.11.1.tgz", + "integrity": "sha512-Sdss4XG96nqBqrTAyg+RuFOj+U5wkICK8n2hafcyT+lpSlZoIwcbmhyFjmDy9f88FkhHe2q0uCpQ8PjKd8ILTQ==" + }, + "node_modules/@primer/view-components": { + "version": "0.0.120", + "resolved": "https://registry.npmjs.org/@primer/view-components/-/view-components-0.0.120.tgz", + "integrity": "sha512-C90cNtB3Zl8B+nLPkztYYMBNTaGxUWLrVroG3a8dIEcpGdEZOhsOPOfeptpyPMolX7DWag/hfzBXBp0i7TawDg==", + "dependencies": { + "@github/auto-check-element": "^5.2.0", + "@github/auto-complete-element": "^3.3.4", + "@github/catalyst": "^1.6.0", + "@github/clipboard-copy-element": "^1.1.2", + "@github/details-menu-element": "^1.0.12", + "@github/image-crop-element": "^5.0.0", + "@github/mini-throttle": "^2.1.0", + "@github/relative-time-element": "^4.0.0", + "@github/tab-container-element": "^3.1.2", + "@primer/behaviors": "^1.2.0" + } + }, "node_modules/@rushstack/eslint-patch": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz", @@ -5588,6 +5694,54 @@ "integrity": "sha512-vzLe5NaNMjIE3mcddFVGlAXN1LEWueUsMsOJWaT6wWMJGyljHAWHznqfnKUQWGzu7TLPrGvWdNAsvQYW+C0xtw==", "dev": true }, + "node_modules/@storybook/builder-webpack5/node_modules/css-loader": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz", + "integrity": "sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==", + "dev": true, + "dependencies": { + "icss-utils": "^5.1.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.15", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.27.0 || ^5.0.0" + } + }, + "node_modules/@storybook/builder-webpack5/node_modules/style-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", + "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, "node_modules/@storybook/channel-postmessage": { "version": "6.5.16", "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-6.5.16.tgz", @@ -8710,6 +8864,34 @@ "integrity": "sha512-vzLe5NaNMjIE3mcddFVGlAXN1LEWueUsMsOJWaT6wWMJGyljHAWHznqfnKUQWGzu7TLPrGvWdNAsvQYW+C0xtw==", "dev": true }, + "node_modules/@storybook/manager-webpack5/node_modules/css-loader": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz", + "integrity": "sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==", + "dev": true, + "dependencies": { + "icss-utils": "^5.1.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.15", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.27.0 || ^5.0.0" + } + }, "node_modules/@storybook/manager-webpack5/node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -8719,6 +8901,26 @@ "node": ">=8" } }, + "node_modules/@storybook/manager-webpack5/node_modules/style-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", + "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, "node_modules/@storybook/mdx1-csf": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/@storybook/mdx1-csf/-/mdx1-csf-0.0.1.tgz", @@ -8768,6 +8970,17 @@ "url": "https://opencollective.com/storybook" } }, + "node_modules/@storybook/preset-scss": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@storybook/preset-scss/-/preset-scss-1.0.3.tgz", + "integrity": "sha512-o9Iz6wxPeNENrQa2mKlsDKynBfqU2uWaRP80HeWp4TkGgf7/x3DVF2O7yi9N0x/PI1qzzTTpxlQ90D62XmpiTw==", + "dev": true, + "peerDependencies": { + "css-loader": "*", + "sass-loader": "*", + "style-loader": "*" + } + }, "node_modules/@storybook/preview-web": { "version": "6.5.16", "resolved": "https://registry.npmjs.org/@storybook/preview-web/-/preview-web-6.5.16.tgz", @@ -13195,31 +13408,53 @@ } }, "node_modules/css-loader": { - "version": "5.2.7", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz", - "integrity": "sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==", + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.3.tgz", + "integrity": "sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ==", "dev": true, "dependencies": { "icss-utils": "^5.1.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.15", + "postcss": "^8.4.19", "postcss-modules-extract-imports": "^3.0.0", "postcss-modules-local-by-default": "^4.0.0", "postcss-modules-scope": "^3.0.0", "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.1.0", - "schema-utils": "^3.0.0", - "semver": "^7.3.5" + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.8" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 12.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^4.27.0 || ^5.0.0" + "webpack": "^5.0.0" + } + }, + "node_modules/css-loader/node_modules/postcss": { + "version": "8.4.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" } }, "node_modules/css-select": { @@ -16631,6 +16866,12 @@ "node": ">= 4" } }, + "node_modules/immutable": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.2.4.tgz", + "integrity": "sha512-WDxL3Hheb1JkRN3sQkyujNlL/xRjAo3rJtaU5xeufUauG66JdMr32bLj4gF+vWl84DIA3Zxw7tiAjneYzRRw+w==", + "dev": true + }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -22602,6 +22843,61 @@ "which": "bin/which" } }, + "node_modules/sass": { + "version": "1.58.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.58.1.tgz", + "integrity": "sha512-bnINi6nPXbP1XNRaranMFEBZWUfdW/AF16Ql5+ypRxfTvCRTTKrLsMIakyDcayUt2t/RZotmL4kgJwNH5xO+bg==", + "dev": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/sass-loader": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.2.0.tgz", + "integrity": "sha512-JWEp48djQA4nbZxmgC02/Wh0eroSUutulROUusYJO9P9zltRbNN80JCBHqRGzjd4cmZCa/r88xgfkjGD0TXsHg==", + "dev": true, + "dependencies": { + "klona": "^2.0.4", + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + } + } + }, "node_modules/saxes": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", @@ -23690,23 +23986,19 @@ } }, "node_modules/style-loader": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", - "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", + "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==", "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, "engines": { - "node": ">= 10.13.0" + "node": ">= 12.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" + "webpack": "^5.0.0" } }, "node_modules/style-to-object": { @@ -27529,6 +27821,69 @@ "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", "dev": true }, + "@github/auto-check-element": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@github/auto-check-element/-/auto-check-element-5.2.0.tgz", + "integrity": "sha512-YODZZUSeoZVJQ04p73MAohrEK37SJlVRDUTaFiPYse9K3z3bNEm+ekq5qYCIyDKGgX7hUhr3WZF35qHxr/zu0Q==", + "requires": { + "@github/mini-throttle": "^1.0.7" + }, + "dependencies": { + "@github/mini-throttle": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@github/mini-throttle/-/mini-throttle-1.0.7.tgz", + "integrity": "sha512-1fzCDXpxI4J59pNmO0r0Y1g+R8Sa2B5ersce8AuFu5STMu7b++9osdedK0zWduYowBIgsPQZihJBN19WrAF64g==" + } + } + }, + "@github/auto-complete-element": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@github/auto-complete-element/-/auto-complete-element-3.3.4.tgz", + "integrity": "sha512-b9SBCLIQGfCI3G0pGYE8rBSUDON5iFKUgHXgAtVdgZii0dnLFxNl5tn1R/RaBEFdzBQPDl9vqu41TF/Hs3w8FA==", + "requires": { + "@github/combobox-nav": "^2.0.2" + } + }, + "@github/catalyst": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@github/catalyst/-/catalyst-1.6.0.tgz", + "integrity": "sha512-u8A+DameixqpeyHzvnJWTGj+wfiskQOYHzSiJscCWVfMkIT3rxnbHMtGh3lMthaRY21nbUOK71WcsCnCrXhBJQ==" + }, + "@github/clipboard-copy-element": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@github/clipboard-copy-element/-/clipboard-copy-element-1.1.2.tgz", + "integrity": "sha512-L6CMrcA5we0udafvoSuRCE/Ci/3xrLWKYRGup2IlhxF771bQYsQ2EB1of182pI8ZWM4oxgwzu37+igMeoZjN/A==" + }, + "@github/combobox-nav": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@github/combobox-nav/-/combobox-nav-2.1.7.tgz", + "integrity": "sha512-Webx0W5iTpkk5Chy9dB/1BEUORQ0qrwui8HaaVBiy75W2VOJg96WTuKj1rXENAJ3XTMhdEF53bn0LYfvP0EKvg==" + }, + "@github/details-menu-element": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/@github/details-menu-element/-/details-menu-element-1.0.13.tgz", + "integrity": "sha512-gMkii86w/oUP5dq8yOWZn1sgbgtFj3AYETxxtpsqRggZktgd8te4+npAn4Hm+936c/lxmEzXqfjARL/CzGR4+w==" + }, + "@github/image-crop-element": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@github/image-crop-element/-/image-crop-element-5.0.0.tgz", + "integrity": "sha512-Vgm2OwWAs1ESoib/t5sjxsAYo6YTOxxAjWDRxswX7qrqoyCejTZ3hshdo4Ep5e+Mz/GVTZC3rdMtg06dk/eT4g==" + }, + "@github/mini-throttle": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@github/mini-throttle/-/mini-throttle-2.1.0.tgz", + "integrity": "sha512-iEeR2OdVCPkdIPUszL8gJnKNu4MR8ANh7y0u/LPyaatYezgaWxUZEzhFntloqQq+HE6MZkFy+cl+xzCNuljOdw==" + }, + "@github/relative-time-element": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@github/relative-time-element/-/relative-time-element-4.2.1.tgz", + "integrity": "sha512-XwUfSNwcfBjKRHcUmbh87iFUhzAwO5eDQQ+MNpTFNq5JObFTQv0jmmL45vUsYutwuZCBQHLILXkIgSmHVsa4PA==" + }, + "@github/tab-container-element": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@github/tab-container-element/-/tab-container-element-3.2.0.tgz", + "integrity": "sha512-to5ZJuywKK3KX53X1ifOcWjvUTQcBGdQ6Qkhm8L97xQ3ovICag1048M3YMpc+QSdr8xWeCBMnLeMnENqotB0Og==" + }, "@humanwhocodes/config-array": { "version": "0.11.8", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", @@ -28259,6 +28614,42 @@ } } }, + "@primer/behaviors": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@primer/behaviors/-/behaviors-1.3.3.tgz", + "integrity": "sha512-iHMRuu8YWDJIdqCi1krx0cyFNeqszNKTOb0dXFu2wQ5BeIqxqPJLD7rjZ2Vjf/+YaPSbWuIQE1H6TaGMMsDfdA==" + }, + "@primer/css": { + "version": "20.8.2", + "resolved": "https://registry.npmjs.org/@primer/css/-/css-20.8.2.tgz", + "integrity": "sha512-MoUIX/9JcAci1jCczFsXyweZpRWbgyGI9j55CCxRBk/AFdWmblCwEMBioXOpBViCrZDNMsACns2i7T4ku47kbQ==", + "requires": { + "@primer/primitives": "^7.11.1", + "@primer/view-components": "^0.0.120" + } + }, + "@primer/primitives": { + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/@primer/primitives/-/primitives-7.11.1.tgz", + "integrity": "sha512-Sdss4XG96nqBqrTAyg+RuFOj+U5wkICK8n2hafcyT+lpSlZoIwcbmhyFjmDy9f88FkhHe2q0uCpQ8PjKd8ILTQ==" + }, + "@primer/view-components": { + "version": "0.0.120", + "resolved": "https://registry.npmjs.org/@primer/view-components/-/view-components-0.0.120.tgz", + "integrity": "sha512-C90cNtB3Zl8B+nLPkztYYMBNTaGxUWLrVroG3a8dIEcpGdEZOhsOPOfeptpyPMolX7DWag/hfzBXBp0i7TawDg==", + "requires": { + "@github/auto-check-element": "^5.2.0", + "@github/auto-complete-element": "^3.3.4", + "@github/catalyst": "^1.6.0", + "@github/clipboard-copy-element": "^1.1.2", + "@github/details-menu-element": "^1.0.12", + "@github/image-crop-element": "^5.0.0", + "@github/mini-throttle": "^2.1.0", + "@github/relative-time-element": "^4.0.0", + "@github/tab-container-element": "^3.1.2", + "@primer/behaviors": "^1.2.0" + } + }, "@rushstack/eslint-patch": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz", @@ -29905,6 +30296,34 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.12.tgz", "integrity": "sha512-vzLe5NaNMjIE3mcddFVGlAXN1LEWueUsMsOJWaT6wWMJGyljHAWHznqfnKUQWGzu7TLPrGvWdNAsvQYW+C0xtw==", "dev": true + }, + "css-loader": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz", + "integrity": "sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==", + "dev": true, + "requires": { + "icss-utils": "^5.1.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.15", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.5" + } + }, + "style-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", + "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + } } } }, @@ -32458,11 +32877,39 @@ "integrity": "sha512-vzLe5NaNMjIE3mcddFVGlAXN1LEWueUsMsOJWaT6wWMJGyljHAWHznqfnKUQWGzu7TLPrGvWdNAsvQYW+C0xtw==", "dev": true }, + "css-loader": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz", + "integrity": "sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==", + "dev": true, + "requires": { + "icss-utils": "^5.1.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.15", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.5" + } + }, "resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true + }, + "style-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", + "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + } } } }, @@ -32507,6 +32954,12 @@ "core-js": "^3.8.2" } }, + "@storybook/preset-scss": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@storybook/preset-scss/-/preset-scss-1.0.3.tgz", + "integrity": "sha512-o9Iz6wxPeNENrQa2mKlsDKynBfqU2uWaRP80HeWp4TkGgf7/x3DVF2O7yi9N0x/PI1qzzTTpxlQ90D62XmpiTw==", + "dev": true + }, "@storybook/preview-web": { "version": "6.5.16", "resolved": "https://registry.npmjs.org/@storybook/preview-web/-/preview-web-6.5.16.tgz", @@ -36077,21 +36530,32 @@ } }, "css-loader": { - "version": "5.2.7", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz", - "integrity": "sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==", + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.3.tgz", + "integrity": "sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ==", "dev": true, "requires": { "icss-utils": "^5.1.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.15", + "postcss": "^8.4.19", "postcss-modules-extract-imports": "^3.0.0", "postcss-modules-local-by-default": "^4.0.0", "postcss-modules-scope": "^3.0.0", "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.1.0", - "schema-utils": "^3.0.0", - "semver": "^7.3.5" + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.8" + }, + "dependencies": { + "postcss": { + "version": "8.4.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", + "dev": true, + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + } } }, "css-select": { @@ -38766,6 +39230,12 @@ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==" }, + "immutable": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.2.4.tgz", + "integrity": "sha512-WDxL3Hheb1JkRN3sQkyujNlL/xRjAo3rJtaU5xeufUauG66JdMr32bLj4gF+vWl84DIA3Zxw7tiAjneYzRRw+w==", + "dev": true + }, "import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -43306,6 +43776,27 @@ } } }, + "sass": { + "version": "1.58.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.58.1.tgz", + "integrity": "sha512-bnINi6nPXbP1XNRaranMFEBZWUfdW/AF16Ql5+ypRxfTvCRTTKrLsMIakyDcayUt2t/RZotmL4kgJwNH5xO+bg==", + "dev": true, + "requires": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + } + }, + "sass-loader": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.2.0.tgz", + "integrity": "sha512-JWEp48djQA4nbZxmgC02/Wh0eroSUutulROUusYJO9P9zltRbNN80JCBHqRGzjd4cmZCa/r88xgfkjGD0TXsHg==", + "dev": true, + "requires": { + "klona": "^2.0.4", + "neo-async": "^2.6.2" + } + }, "saxes": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", @@ -44219,14 +44710,10 @@ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" }, "style-loader": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", - "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - } + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", + "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==", + "dev": true }, "style-to-object": { "version": "0.3.0", diff --git a/package.json b/package.json index 4699a98..81a5d45 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ }, "dependencies": { "@next/font": "13.1.6", + "@primer/css": "^20.8.2", "@types/react": "18.0.27", "@types/react-dom": "18.0.10", "eslint": "8.33.0", @@ -36,14 +37,19 @@ "@storybook/addon-links": "^6.5.16", "@storybook/builder-webpack5": "^6.5.16", "@storybook/manager-webpack5": "^6.5.16", + "@storybook/preset-scss": "^1.0.3", "@storybook/react": "^6.5.16", "@storybook/testing-library": "^0.0.13", "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^13.4.0", "babel-loader": "^8.3.0", + "css-loader": "^6.7.3", "eslint-plugin-storybook": "^0.6.10", "jest": "^29.4.1", "jest-environment-jsdom": "^29.4.1", - "node-mocks-http": "^1.12.1" + "node-mocks-http": "^1.12.1", + "sass": "^1.58.1", + "sass-loader": "^13.2.0", + "style-loader": "^3.3.1" } } diff --git a/rucio.d.ts b/rucio.d.ts new file mode 100644 index 0000000..040baaa --- /dev/null +++ b/rucio.d.ts @@ -0,0 +1,149 @@ +/************************ Rucio WebUI Story Components PropType Definitions ************************/ + +interface AlertProps { + open?: boolean + leftIcon?: ReactElement | undefined + rightIcon?: ReactElement | undefined + message?: string | any + variant?: 'primary' | 'warn' | 'success' | 'error' + onClose?: () => void +} + +interface BoxProps { + title?: string + type?: 'condensed' | 'spacious' | 'blue' | 'danger' + background?: string + children?: any +} + +interface ButtonProps { + icon?: ReactNode + kind?: 'primary' | 'secondary' | 'outline' + show?: 'danger' | 'block' | 'invisible' | 'normal' + size?: 'small' | 'medium' | 'large' + label: string + type?: 'button' | 'submit' | 'reset' + selected?: boolean + disabled?: boolean + onClick?: (args: unknown) => void +} + +interface CardProps { + img?: any + header?: ReactElement | string + content: ReactElement + footer?: Array + onCardClick?: (args: unknown) => void + hoverable?: boolean +} + +interface CheckboxProps { + isChecked?: boolean + label: string + kind?: 'danger' | 'warning' | 'success' | 'info' + size?: 'small' | 'normal' | 'medium' | 'large' + style?: 'rounded_checkbox' | 'block' | 'no_border' | 'background-color' + type?: 'checkbox' | 'radio' + name?: string + handleChange?: (args: any) => void +} + +interface DropdownProps { + label?: string + options?: Array + handleChange?: (args: any) => void +} + +interface FormProps { + title?: string + subtitle?: string + children?: any + onSubmit?: (args: unknown) => void +} + +interface HeaderProps { + menuActive?: boolean + menuCollapsible?: boolean + user?: { + name: string + } + onLogin?: () => void + onLogout?: () => void + onCreateAccount?: () => void +} + +interface ImageProps { + src: string + type?: string + height?: number + width?: number +} + +interface InputProps { + type?: string + label?: string + name?: string + placeholder?: string + kind?: 'primary' | 'info' | 'link' | 'normal' + show?: 'danger' | 'warning' | 'success' | 'rounded' + size?: 'small' | 'medium' | 'large' + value?: any + min?: number + max?: number + width?: string | number + focusByDefault?: boolean + onChange?: (args: any) => void +} + +interface ModalProps { + active?: boolean + body?: ReactElement + title?: string + onClose?: () => void +} + +interface NavProps { + active?: boolean + menuItems?: any +} + +interface ProgressBarProps { + title?: string + size?: 'small' | 'medium' | 'large' + type?: 'primary' | 'link' | 'info' | 'success' | 'warning' | 'danger' + value?: number + max?: number +} + +interface StepsProps { + steps: Array + active?: number + size?: 'small' | 'medium' | 'large' +} + +interface TableProps { + id?: string + columns?: string[] + rows?: any[] + footer?: string[] +} + +interface TabsProps { + tabs: Array + active: number + alignment?: 'right' | 'centered' + size?: 'small' | 'medium' | 'large' + rounded?: 'toggle' | 'toggle-rounded' + boxed?: 'boxed' + fullwidth?: 'fullwidth' + handleClick: (args: any) => void +} + +interface ToggleSwitchProps { + label?: string + kind?: 'danger' | 'warning' | 'success' | 'info' + size?: 'small' | 'normal' | 'medium' | 'large' + style?: 'rounded' | 'outlined' + checked?: boolean + handleChange?: (event: any) => void +} diff --git a/src/component-library/Alert/Alert.stories.tsx b/src/component-library/Alert/Alert.stories.tsx new file mode 100644 index 0000000..bd2cfd2 --- /dev/null +++ b/src/component-library/Alert/Alert.stories.tsx @@ -0,0 +1,16 @@ +import { ComponentStory, ComponentMeta } from '@storybook/react' + +import { Alert } from './Alert' + +export default { + title: 'Components/Alert', + component: Alert, + argTypes: { + background: { control: 'color' }, + }, +} as ComponentMeta + +const Template: ComponentStory = args => + +export const Standard = Template.bind({}) +Standard.args = {} diff --git a/src/component-library/Alert/Alert.tsx b/src/component-library/Alert/Alert.tsx new file mode 100644 index 0000000..b8293b4 --- /dev/null +++ b/src/component-library/Alert/Alert.tsx @@ -0,0 +1,66 @@ +import './alert.scss' + +import { useEffect } from 'react' + +export const Alert = ({ + open = true, + message = 'Flash banner message.', + variant = 'primary', + onClose, + leftIcon = ( + + + + ), + rightIcon = ( + + ), +}: AlertProps) => { + useEffect(() => { + window.scrollTo({ + top: 0, + behavior: 'smooth', + }) + }, []) + return ( + <> + {open ? ( +
+ {leftIcon} + {message} + {rightIcon} +
+ ) : null} + + ) +} diff --git a/src/component-library/Alert/alert.scss b/src/component-library/Alert/alert.scss new file mode 100644 index 0000000..035756b --- /dev/null +++ b/src/component-library/Alert/alert.scss @@ -0,0 +1,46 @@ +@import '@primer/css/alerts/index.scss'; + +@mixin animate($animation, $duration, $method, $times) { + animation: $animation $duration $method $times; +} + +@mixin keyframes($name) { + @keyframes #{$name} { + @content; + } +} + +.rucio-alert { + @extend .flash; + z-index: 999; + display: flex; + flex-direction: row; + opacity: 1; + position: absolute; + width: 98.5%; + top: 10px; + @include keyframes(customAnimation) { + 0% { + top: -50px; + opacity: 0; + } + 50% { + top: 10px; + opacity: 1; + } + 100% { + top: -50px; + opacity: 0; + } + } + @include animate(customAnimation, 5s, ease-in-out, 1); + &.success { + @extend .flash-success; + } + &.warn { + @extend .flash-warn; + } + &.error { + @extend .flash-error; + } +} diff --git a/src/component-library/Box/Box.stories.tsx b/src/component-library/Box/Box.stories.tsx new file mode 100644 index 0000000..ee3b7d6 --- /dev/null +++ b/src/component-library/Box/Box.stories.tsx @@ -0,0 +1,20 @@ +import { ComponentStory, ComponentMeta } from '@storybook/react' + +import { Box } from './Box' +import { BoxBody } from './components/BoxBody' +import { BoxFooter } from './components/BoxFooter' + +export default { + title: 'Components/Box', + component: Box, + subcomponents: { BoxBody: BoxBody, BoxFooter: BoxFooter }, +} as ComponentMeta + +const Template: ComponentStory = args => ( + + + + +) + +export const Primary = Template.bind({}) diff --git a/src/component-library/Box/Box.tsx b/src/component-library/Box/Box.tsx new file mode 100644 index 0000000..6adb85a --- /dev/null +++ b/src/component-library/Box/Box.tsx @@ -0,0 +1,16 @@ +import './box.scss' + +export const Box = ({ + title = 'Sample Box', + type = 'spacious', + children, +}: BoxProps) => { + return ( +
+
+

{title}

+
+ {children} +
+ ) +} diff --git a/src/component-library/Box/box.scss b/src/component-library/Box/box.scss new file mode 100644 index 0000000..c70d11d --- /dev/null +++ b/src/component-library/Box/box.scss @@ -0,0 +1,76 @@ +@import '@primer/css/utilities/index.scss'; +@import '@primer/css/box/index.scss'; + +.rucio-box { + @extend .Box; + &.condensed { + @extend .Box--condensed; + } + &.spacious { + @extend .Box--spacious; + } + &.blue { + @extend .Box--blue; + } + &.danger { + @extend .Box--danger; + } + .header { + @extend .Box-header; + } + .title { + @extend .Box-title; + } + .body { + @extend .Box-body; + } + .footer { + @extend .Box-footer; + } + .row { + @extend .Box-row; + &.gray { + @extend .Box-row--gray; + } + &.blue { + @extend .Box-row--gray; + } + &.yellow { + @extend .Box-row--yellow; + } + &.hover-blue { + @extend .Box-row--hover-blue; + } + &.hover-gray { + @extend .Box-row--hover-gray; + } + &.unread { + @extend .Box-row--unread; + } + &.border-dashed { + @extend .border-dashed; + } + &.clear { + @extend .clearfix; + } + .link { + @extend .Box-row-link; + } + } + overflow-y: hidden; + overflow-x: hidden; +} + +@media (max-width: 768px) { + .wrap-login100 { + padding-left: 60px; + padding-right: 60px; + } + + @media (max-width: 576px) { + .wrap-login100 { + padding-left: 15px; + padding-right: 15px; + } + } +} diff --git a/src/component-library/Box/components/BoxBody.tsx b/src/component-library/Box/components/BoxBody.tsx new file mode 100644 index 0000000..69928fe --- /dev/null +++ b/src/component-library/Box/components/BoxBody.tsx @@ -0,0 +1,7 @@ +interface BoxBodyProps { + children?: any +} + +export const BoxBody = ({ children =
body
}: BoxBodyProps) => { + return
{children}
+} diff --git a/src/component-library/Box/components/BoxFooter.tsx b/src/component-library/Box/components/BoxFooter.tsx new file mode 100644 index 0000000..e753c96 --- /dev/null +++ b/src/component-library/Box/components/BoxFooter.tsx @@ -0,0 +1,7 @@ +interface BoxFooterProps { + children?: any +} + +export const BoxFooter = ({ children =
footer
}: BoxFooterProps) => { + return
{children}
+} diff --git a/src/component-library/Button/Button.stories.tsx b/src/component-library/Button/Button.stories.tsx new file mode 100644 index 0000000..c951548 --- /dev/null +++ b/src/component-library/Button/Button.stories.tsx @@ -0,0 +1,17 @@ +import { ComponentStory, ComponentMeta } from '@storybook/react' + +import { Button } from './Button' + +export default { + title: 'Components/Button', + component: Button, +} as ComponentMeta + +const Template: ComponentStory = args => + ) +} diff --git a/src/component-library/Button/button.scss b/src/component-library/Button/button.scss new file mode 100644 index 0000000..7af2f92 --- /dev/null +++ b/src/component-library/Button/button.scss @@ -0,0 +1,35 @@ +@import '@primer/css/buttons/index.scss'; + +.rucio-btn { + @extend .btn; + margin: auto auto; + &.primary { + @extend .btn-primary; + } + &.outline { + @extend .btn-outline; + background-color: #f8f9fd; + } + &.danger { + @extend .btn-danger; + } + &.large { + @extend .btn-large; + } + &.small { + @extend .btn-sm; + } + &.block { + @extend .btn-block; + } + &.invisible { + @extend .btn-invisible; + } + &.item { + @extend .BtnGroup-item; + } +} + +.rucio-btn-grp { + @extend .BtnGroup; +}