diff --git a/.storybook/documentation.scss b/.storybook/documentation.scss index 608f608a..87fc121f 100644 --- a/.storybook/documentation.scss +++ b/.storybook/documentation.scss @@ -70,5 +70,27 @@ .font-family-demo--alternative { --rm-font-family: 'Tilt Neon', sans-serif; + font-family: var(--rm-font-family); } + +.design-token-container { + .design-token-card { + table { + td:nth-of-type(1), + th:nth-of-type(1) { + flex-basis: 40%; + } + + td:nth-of-type(2), + th:nth-of-type(2) { + flex-basis: 35%; + } + + td:nth-of-type(3), + th:nth-of-type(3) { + flex-basis: 25%; + } + } + } +} diff --git a/.storybook/main.js b/.storybook/main.js index 65534a0f..0ab87ed8 100644 --- a/.storybook/main.js +++ b/.storybook/main.js @@ -5,6 +5,7 @@ module.exports = { '@storybook/addon-essentials', '@storybook/addon-interactions', '@storybook/preset-scss', + { name: 'storybook-design-token', options: { preserveCSSVars: true } }, ], framework: '@storybook/html', } diff --git a/README.md b/README.md index 27622ccc..1fb6432e 100644 --- a/README.md +++ b/README.md @@ -52,6 +52,21 @@ There are also a few component specific tokens that are defined in their respect There is a JSON file in `docs/token_structure.json` that lists all the current tokens in one place and shows how the names indicate organization. +### Token Documentation + +We use the Storybook Design Token for showing design tokens in the documentation. This allows us to tag groups of tokens with a category and a presenter. + +[Available Presenters](https://github.com/UX-and-I/storybook-design-token#available-presenters) + +Add the following above a group to categorize the tokens. + +```css +/** +* @tokens Basic Colors +* @presenter Color +*/ +``` + ## License [MIT](LICENSE) diff --git a/package-lock.json b/package-lock.json index 6b3c4c96..598ed019 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@rolemodel/optics", - "version": "0.2.4", + "version": "0.2.5", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@rolemodel/optics", - "version": "0.2.4", + "version": "0.2.5", "license": "MIT", "dependencies": { "modern-css-reset": "^1.4.0", @@ -38,6 +38,7 @@ "prettier": "^2.8.1", "sass": "^1.53.0", "sass-loader": "^10.1.1", + "storybook-design-token": "^2.9.0", "style-loader": "^2.0.0", "stylelint": "^14.16.0", "stylelint-config-idiomatic-order": "^9.0.0", @@ -2012,6 +2013,38 @@ "node": ">=10.0.0" } }, + "node_modules/@esbuild/android-arm": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz", + "integrity": "sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz", + "integrity": "sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@eslint/eslintrc": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.0.tgz", @@ -2657,6 +2690,12 @@ "resolved": "https://registry.npmjs.org/@orchidjs/unicode-variants/-/unicode-variants-1.0.4.tgz", "integrity": "sha512-NvVBRnZNE+dugiXERFsET1JlKZfM5lJDEpSMilKW4bToYJ7pxf0Zne78xyXB2ny2c2aHfJ6WLnz1AaTNHAmQeQ==" }, + "node_modules/@reach/observe-rect": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@reach/observe-rect/-/observe-rect-1.2.0.tgz", + "integrity": "sha512-Ba7HmkFgfQxZqqaeIWWkNK0rEhpxVQHIoVyW1YDSkGsGIXzcaW4deC8B0pZrNSSyLTdIk7y+5olKt5+g0GmFIQ==", + "dev": true + }, "node_modules/@storybook/addon-actions": { "version": "6.5.14", "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-6.5.14.tgz", @@ -4942,6 +4981,15 @@ "node": ">=6.9.0" } }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, "node_modules/@types/aria-query": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz", @@ -5398,6 +5446,12 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "dev": true + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -5423,6 +5477,28 @@ "node": ">=0.4.0" } }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dev": true, + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/acorn-globals/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -5432,6 +5508,15 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/address": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", @@ -5441,6 +5526,18 @@ "node": ">= 10.0.0" } }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -6544,6 +6641,12 @@ "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", "dev": true }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, "node_modules/browserify-aes": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", @@ -7547,6 +7650,15 @@ "node": ">=0.10.0" } }, + "node_modules/copy-to-clipboard": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz", + "integrity": "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==", + "dev": true, + "dependencies": { + "toggle-selection": "^1.0.6" + } + }, "node_modules/core-js": { "version": "3.23.5", "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.23.5.tgz", @@ -8197,6 +8309,30 @@ "node": ">=4" } }, + "node_modules/cssom": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", + "dev": true + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, "node_modules/csstype": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", @@ -8223,6 +8359,54 @@ "integrity": "sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A==", "dev": true }, + "node_modules/data-urls": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "dev": true, + "dependencies": { + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/data-urls/node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/data-urls/node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/data-urls/node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dev": true, + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -8265,6 +8449,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", + "dev": true + }, "node_modules/decode-uri-component": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", @@ -8541,6 +8731,27 @@ } ] }, + "node_modules/domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "dev": true, + "dependencies": { + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/domhandler": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", @@ -8914,6 +9125,363 @@ "integrity": "sha512-EmTr31wppcaIAgblChZiuN/l9Y7DPyw8Xtbg7fIVngn6zMW+IEBJDJngeKC3x6wr0V/vcA2wqeFnaw1bFJbDdA==", "dev": true }, + "node_modules/esbuild": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.18.tgz", + "integrity": "sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.15.18", + "@esbuild/linux-loong64": "0.15.18", + "esbuild-android-64": "0.15.18", + "esbuild-android-arm64": "0.15.18", + "esbuild-darwin-64": "0.15.18", + "esbuild-darwin-arm64": "0.15.18", + "esbuild-freebsd-64": "0.15.18", + "esbuild-freebsd-arm64": "0.15.18", + "esbuild-linux-32": "0.15.18", + "esbuild-linux-64": "0.15.18", + "esbuild-linux-arm": "0.15.18", + "esbuild-linux-arm64": "0.15.18", + "esbuild-linux-mips64le": "0.15.18", + "esbuild-linux-ppc64le": "0.15.18", + "esbuild-linux-riscv64": "0.15.18", + "esbuild-linux-s390x": "0.15.18", + "esbuild-netbsd-64": "0.15.18", + "esbuild-openbsd-64": "0.15.18", + "esbuild-sunos-64": "0.15.18", + "esbuild-windows-32": "0.15.18", + "esbuild-windows-64": "0.15.18", + "esbuild-windows-arm64": "0.15.18" + } + }, + "node_modules/esbuild-android-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz", + "integrity": "sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz", + "integrity": "sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz", + "integrity": "sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz", + "integrity": "sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz", + "integrity": "sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz", + "integrity": "sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-32": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz", + "integrity": "sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz", + "integrity": "sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz", + "integrity": "sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz", + "integrity": "sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-mips64le": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz", + "integrity": "sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-ppc64le": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz", + "integrity": "sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-riscv64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz", + "integrity": "sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-s390x": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz", + "integrity": "sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-netbsd-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz", + "integrity": "sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-openbsd-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz", + "integrity": "sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-sunos-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz", + "integrity": "sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-32": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz", + "integrity": "sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz", + "integrity": "sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-arm64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz", + "integrity": "sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -8938,6 +9506,79 @@ "node": ">=0.8.0" } }, + "node_modules/escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/eslint": { "version": "8.30.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.30.0.tgz", @@ -11274,6 +11915,18 @@ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, + "node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dev": true, + "dependencies": { + "whatwg-encoding": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/html-entities": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", @@ -11449,12 +12102,39 @@ "node": ">= 0.8" } }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", "dev": true }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -12067,6 +12747,12 @@ "node": ">=0.10.0" } }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -12613,6 +13299,112 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsdom": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-19.0.0.tgz", + "integrity": "sha512-RYAyjCbxy/vri/CfnjUWJQQtZ3LKlLnDqj+9XLNnJPgEGeirZs3hllKR20re8LUZ6o1b1X4Jat+Qd26zmP41+A==", + "dev": true, + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.5.0", + "acorn-globals": "^6.0.0", + "cssom": "^0.5.0", + "cssstyle": "^2.3.0", + "data-urls": "^3.0.1", + "decimal.js": "^10.3.1", + "domexception": "^4.0.0", + "escodegen": "^2.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^3.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^10.0.0", + "ws": "^8.2.3", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/jsdom/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jsdom/node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jsdom/node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/jsdom/node_modules/whatwg-url": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz", + "integrity": "sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w==", + "dev": true, + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -13877,6 +14669,12 @@ "integrity": "sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==", "dev": true }, + "node_modules/nwsapi": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.2.tgz", + "integrity": "sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==", + "dev": true + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -15177,6 +15975,12 @@ "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", "dev": true }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, "node_modules/public-encrypt": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", @@ -15271,6 +16075,12 @@ "node": ">=0.4.x" } }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -15459,6 +16269,43 @@ "url": "https://github.com/sponsors/gregberge" } }, + "node_modules/react-storage-hooks": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/react-storage-hooks/-/react-storage-hooks-4.0.1.tgz", + "integrity": "sha512-fetDkT5RDHGruc2NrdD1iqqoLuXgbx6AUpQSQLLkrCiJf8i97EtwJNXNTy3+GRfsATLG8TZgNc9lGRZOaU5yQA==", + "dev": true, + "peerDependencies": { + "react": "^16.8.0" + } + }, + "node_modules/react-use-clipboard": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/react-use-clipboard/-/react-use-clipboard-1.0.9.tgz", + "integrity": "sha512-OcMzc14usXhqQnAkvzmhCXAbW5WBT2LSgscVh2vKHXZfg72jFsSOsEearqdeC/nUj8YxEfLnziqe7AE7YkWFwA==", + "dev": true, + "dependencies": { + "copy-to-clipboard": "^3.3.1" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18", + "react-dom": "^16.8.0 || ^17 || ^18" + } + }, + "node_modules/react-virtual": { + "version": "2.10.4", + "resolved": "https://registry.npmjs.org/react-virtual/-/react-virtual-2.10.4.tgz", + "integrity": "sha512-Ir6+oPQZTVHfa6+JL9M7cvMILstFZH/H3jqeYeKI4MSUX+rIruVwFC6nGVXw9wqAw8L0Kg2KvfXxI85OvYQdpQ==", + "dev": true, + "funding": [ + "https://github.com/sponsors/tannerlinsley" + ], + "dependencies": { + "@reach/observe-rect": "^1.1.0" + }, + "peerDependencies": { + "react": "^16.6.3 || ^17.0.0" + } + }, "node_modules/read-pkg": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", @@ -16052,6 +16899,12 @@ "node": ">=0.10.0" } }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, "node_modules/resolve": { "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", @@ -16129,6 +16982,21 @@ "inherits": "^2.0.1" } }, + "node_modules/rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, "node_modules/rsvp": { "version": "4.8.5", "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", @@ -16584,6 +17452,18 @@ "node": ">=10" } }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dev": true, + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/scheduler": { "version": "0.19.1", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", @@ -17373,6 +18253,167 @@ "integrity": "sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w==", "dev": true }, + "node_modules/storybook-design-token": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/storybook-design-token/-/storybook-design-token-2.9.0.tgz", + "integrity": "sha512-bcEsGRMFFmQXh6tXZ+dcU215FQh+GuN6RR/4a6ccSP/DXWLYgMbv4CRCFCumgaho0Mz9mQCb28ROl5JSe/vMoQ==", + "dev": true, + "dependencies": { + "@storybook/addon-docs": "^6.3.12", + "@storybook/addons": "^6.3.12", + "@storybook/components": "^6.3.12", + "@storybook/theming": "^6.3.12", + "glob": "^8.0.3", + "jsdom": "^19.0.0", + "polished": "^4.1.3", + "postcss": "^8.3.11", + "postcss-scss": "^4.0.2", + "raw-loader": "^4.0.2", + "react-storage-hooks": "^4.0.1", + "react-use-clipboard": "^1.0.7", + "react-virtual": "^2.10.4", + "vite": "^3.0.8" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/storybook-design-token/node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true, + "optional": true, + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/storybook-design-token/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/storybook-design-token/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/storybook-design-token/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/storybook-design-token/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/storybook-design-token/node_modules/terser": { + "version": "5.16.5", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.5.tgz", + "integrity": "sha512-qcwfg4+RZa3YvlFh0qjifnzBHjKGNbtDo9yivMqMFDy9Q6FSaQWSB/j1xKhsoUFJIqDOM3TsN6D5xbrMrFcHbg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/storybook-design-token/node_modules/vite": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.5.tgz", + "integrity": "sha512-4mVEpXpSOgrssFZAOmGIr85wPHKvaDAcXqxVxVRZhljkJOMZi1ibLibzjLHzJvcok8BMguLc7g1W6W/GqZbLdQ==", + "dev": true, + "dependencies": { + "esbuild": "^0.15.9", + "postcss": "^8.4.18", + "resolve": "^1.22.1", + "rollup": "^2.79.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, "node_modules/stream-browserify": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", @@ -18205,6 +19246,12 @@ "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", "dev": true }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, "node_modules/symbol.prototype.description": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/symbol.prototype.description/-/symbol.prototype.description-1.0.5.tgz", @@ -18668,6 +19715,12 @@ "node": ">=8.0" } }, + "node_modules/toggle-selection": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", + "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==", + "dev": true + }, "node_modules/toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", @@ -18693,6 +19746,30 @@ "url": "https://opencollective.com/tom-select" } }, + "node_modules/tough-cookie": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", + "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==", + "dev": true, + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -19324,6 +20401,16 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, "node_modules/url/node_modules/punycode": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", @@ -19472,6 +20559,28 @@ "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", "dev": true }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", + "dev": true, + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz", + "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==", + "dev": true, + "dependencies": { + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/walker": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", @@ -20293,6 +21402,39 @@ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true }, + "node_modules/whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dev": true, + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", @@ -20489,6 +21631,21 @@ "default-browser-id": "^1.0.4" } }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -21925,6 +23082,20 @@ "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", "dev": true }, + "@esbuild/android-arm": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz", + "integrity": "sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz", + "integrity": "sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==", + "dev": true, + "optional": true + }, "@eslint/eslintrc": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.0.tgz", @@ -22429,6 +23600,12 @@ "resolved": "https://registry.npmjs.org/@orchidjs/unicode-variants/-/unicode-variants-1.0.4.tgz", "integrity": "sha512-NvVBRnZNE+dugiXERFsET1JlKZfM5lJDEpSMilKW4bToYJ7pxf0Zne78xyXB2ny2c2aHfJ6WLnz1AaTNHAmQeQ==" }, + "@reach/observe-rect": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@reach/observe-rect/-/observe-rect-1.2.0.tgz", + "integrity": "sha512-Ba7HmkFgfQxZqqaeIWWkNK0rEhpxVQHIoVyW1YDSkGsGIXzcaW4deC8B0pZrNSSyLTdIk7y+5olKt5+g0GmFIQ==", + "dev": true + }, "@storybook/addon-actions": { "version": "6.5.14", "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-6.5.14.tgz", @@ -23996,6 +25173,12 @@ } } }, + "@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true + }, "@types/aria-query": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz", @@ -24451,6 +25634,12 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, + "abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "dev": true + }, "accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -24467,6 +25656,24 @@ "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", "dev": true }, + "acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + } + } + }, "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -24474,12 +25681,27 @@ "dev": true, "requires": {} }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true + }, "address": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", "dev": true }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + } + }, "aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -25323,6 +26545,12 @@ "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", "dev": true }, + "browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, "browserify-aes": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", @@ -26123,6 +27351,15 @@ "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", "dev": true }, + "copy-to-clipboard": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz", + "integrity": "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==", + "dev": true, + "requires": { + "toggle-selection": "^1.0.6" + } + }, "core-js": { "version": "3.23.5", "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.23.5.tgz", @@ -26627,6 +27864,29 @@ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true }, + "cssom": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", + "dev": true + }, + "cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "requires": { + "cssom": "~0.3.6" + }, + "dependencies": { + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + } + } + }, "csstype": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", @@ -26650,6 +27910,44 @@ "integrity": "sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A==", "dev": true }, + "data-urls": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "dev": true, + "requires": { + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" + }, + "dependencies": { + "tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dev": true, + "requires": { + "punycode": "^2.1.1" + } + }, + "webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true + }, + "whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dev": true, + "requires": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + } + } + } + }, "debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -26675,6 +27973,12 @@ "map-obj": "^1.0.0" } }, + "decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", + "dev": true + }, "decode-uri-component": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", @@ -26885,6 +28189,23 @@ "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", "dev": true }, + "domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "dev": true, + "requires": { + "webidl-conversions": "^7.0.0" + }, + "dependencies": { + "webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true + } + } + }, "domhandler": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", @@ -27214,6 +28535,176 @@ "integrity": "sha512-EmTr31wppcaIAgblChZiuN/l9Y7DPyw8Xtbg7fIVngn6zMW+IEBJDJngeKC3x6wr0V/vcA2wqeFnaw1bFJbDdA==", "dev": true }, + "esbuild": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.18.tgz", + "integrity": "sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.15.18", + "@esbuild/linux-loong64": "0.15.18", + "esbuild-android-64": "0.15.18", + "esbuild-android-arm64": "0.15.18", + "esbuild-darwin-64": "0.15.18", + "esbuild-darwin-arm64": "0.15.18", + "esbuild-freebsd-64": "0.15.18", + "esbuild-freebsd-arm64": "0.15.18", + "esbuild-linux-32": "0.15.18", + "esbuild-linux-64": "0.15.18", + "esbuild-linux-arm": "0.15.18", + "esbuild-linux-arm64": "0.15.18", + "esbuild-linux-mips64le": "0.15.18", + "esbuild-linux-ppc64le": "0.15.18", + "esbuild-linux-riscv64": "0.15.18", + "esbuild-linux-s390x": "0.15.18", + "esbuild-netbsd-64": "0.15.18", + "esbuild-openbsd-64": "0.15.18", + "esbuild-sunos-64": "0.15.18", + "esbuild-windows-32": "0.15.18", + "esbuild-windows-64": "0.15.18", + "esbuild-windows-arm64": "0.15.18" + } + }, + "esbuild-android-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz", + "integrity": "sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==", + "dev": true, + "optional": true + }, + "esbuild-android-arm64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz", + "integrity": "sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==", + "dev": true, + "optional": true + }, + "esbuild-darwin-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz", + "integrity": "sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==", + "dev": true, + "optional": true + }, + "esbuild-darwin-arm64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz", + "integrity": "sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz", + "integrity": "sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-arm64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz", + "integrity": "sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==", + "dev": true, + "optional": true + }, + "esbuild-linux-32": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz", + "integrity": "sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==", + "dev": true, + "optional": true + }, + "esbuild-linux-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz", + "integrity": "sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz", + "integrity": "sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz", + "integrity": "sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==", + "dev": true, + "optional": true + }, + "esbuild-linux-mips64le": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz", + "integrity": "sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-ppc64le": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz", + "integrity": "sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==", + "dev": true, + "optional": true + }, + "esbuild-linux-riscv64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz", + "integrity": "sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==", + "dev": true, + "optional": true + }, + "esbuild-linux-s390x": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz", + "integrity": "sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==", + "dev": true, + "optional": true + }, + "esbuild-netbsd-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz", + "integrity": "sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==", + "dev": true, + "optional": true + }, + "esbuild-openbsd-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz", + "integrity": "sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==", + "dev": true, + "optional": true + }, + "esbuild-sunos-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz", + "integrity": "sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==", + "dev": true, + "optional": true + }, + "esbuild-windows-32": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz", + "integrity": "sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==", + "dev": true, + "optional": true + }, + "esbuild-windows-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz", + "integrity": "sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==", + "dev": true, + "optional": true + }, + "esbuild-windows-arm64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz", + "integrity": "sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==", + "dev": true, + "optional": true + }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -27232,6 +28723,60 @@ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true }, + "escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + } + } + }, "eslint": { "version": "8.30.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.30.0.tgz", @@ -29055,6 +30600,15 @@ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, + "html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dev": true, + "requires": { + "whatwg-encoding": "^2.0.0" + } + }, "html-entities": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", @@ -29185,12 +30739,33 @@ "toidentifier": "1.0.1" } }, + "http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "requires": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + } + }, "https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", "dev": true }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, "human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -29609,6 +31184,12 @@ "isobject": "^3.0.1" } }, + "is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, "is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -30018,6 +31599,85 @@ "esprima": "^4.0.0" } }, + "jsdom": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-19.0.0.tgz", + "integrity": "sha512-RYAyjCbxy/vri/CfnjUWJQQtZ3LKlLnDqj+9XLNnJPgEGeirZs3hllKR20re8LUZ6o1b1X4Jat+Qd26zmP41+A==", + "dev": true, + "requires": { + "abab": "^2.0.5", + "acorn": "^8.5.0", + "acorn-globals": "^6.0.0", + "cssom": "^0.5.0", + "cssstyle": "^2.3.0", + "data-urls": "^3.0.1", + "decimal.js": "^10.3.1", + "domexception": "^4.0.0", + "escodegen": "^2.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^3.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^10.0.0", + "ws": "^8.2.3", + "xml-name-validator": "^4.0.0" + }, + "dependencies": { + "acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dev": true, + "requires": { + "punycode": "^2.1.1" + } + }, + "webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true + }, + "whatwg-url": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz", + "integrity": "sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w==", + "dev": true, + "requires": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + } + } + } + }, "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -31058,6 +32718,12 @@ "integrity": "sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==", "dev": true }, + "nwsapi": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.2.tgz", + "integrity": "sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==", + "dev": true + }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -32043,6 +33709,12 @@ "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", "dev": true }, + "psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, "public-encrypt": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", @@ -32125,6 +33797,12 @@ "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", "dev": true }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -32257,6 +33935,31 @@ "integrity": "sha512-alTKsjEL0dKH/ru1Iyn7vliS2QRcBp9zZPGoWxUOvRGWPUYgjo+V01is7p04It6KhgrzhJGnIj9GgX8W4bZoCQ==", "dev": true }, + "react-storage-hooks": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/react-storage-hooks/-/react-storage-hooks-4.0.1.tgz", + "integrity": "sha512-fetDkT5RDHGruc2NrdD1iqqoLuXgbx6AUpQSQLLkrCiJf8i97EtwJNXNTy3+GRfsATLG8TZgNc9lGRZOaU5yQA==", + "dev": true, + "requires": {} + }, + "react-use-clipboard": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/react-use-clipboard/-/react-use-clipboard-1.0.9.tgz", + "integrity": "sha512-OcMzc14usXhqQnAkvzmhCXAbW5WBT2LSgscVh2vKHXZfg72jFsSOsEearqdeC/nUj8YxEfLnziqe7AE7YkWFwA==", + "dev": true, + "requires": { + "copy-to-clipboard": "^3.3.1" + } + }, + "react-virtual": { + "version": "2.10.4", + "resolved": "https://registry.npmjs.org/react-virtual/-/react-virtual-2.10.4.tgz", + "integrity": "sha512-Ir6+oPQZTVHfa6+JL9M7cvMILstFZH/H3jqeYeKI4MSUX+rIruVwFC6nGVXw9wqAw8L0Kg2KvfXxI85OvYQdpQ==", + "dev": true, + "requires": { + "@reach/observe-rect": "^1.1.0" + } + }, "read-pkg": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", @@ -32715,6 +34418,12 @@ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, "resolve": { "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", @@ -32769,6 +34478,15 @@ "inherits": "^2.0.1" } }, + "rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, "rsvp": { "version": "4.8.5", "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", @@ -33109,6 +34827,15 @@ } } }, + "saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dev": true, + "requires": { + "xmlchars": "^2.2.0" + } + }, "scheduler": { "version": "0.19.1", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", @@ -33768,6 +35495,104 @@ "integrity": "sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w==", "dev": true }, + "storybook-design-token": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/storybook-design-token/-/storybook-design-token-2.9.0.tgz", + "integrity": "sha512-bcEsGRMFFmQXh6tXZ+dcU215FQh+GuN6RR/4a6ccSP/DXWLYgMbv4CRCFCumgaho0Mz9mQCb28ROl5JSe/vMoQ==", + "dev": true, + "requires": { + "@storybook/addon-docs": "^6.3.12", + "@storybook/addons": "^6.3.12", + "@storybook/components": "^6.3.12", + "@storybook/theming": "^6.3.12", + "glob": "^8.0.3", + "jsdom": "^19.0.0", + "polished": "^4.1.3", + "postcss": "^8.3.11", + "postcss-scss": "^4.0.2", + "raw-loader": "^4.0.2", + "react-storage-hooks": "^4.0.1", + "react-use-clipboard": "^1.0.7", + "react-virtual": "^2.10.4", + "vite": "^3.0.8" + }, + "dependencies": { + "acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true, + "optional": true, + "peer": true + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "optional": true, + "peer": true + }, + "glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "terser": { + "version": "5.16.5", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.5.tgz", + "integrity": "sha512-qcwfg4+RZa3YvlFh0qjifnzBHjKGNbtDo9yivMqMFDy9Q6FSaQWSB/j1xKhsoUFJIqDOM3TsN6D5xbrMrFcHbg==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + } + }, + "vite": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.5.tgz", + "integrity": "sha512-4mVEpXpSOgrssFZAOmGIr85wPHKvaDAcXqxVxVRZhljkJOMZi1ibLibzjLHzJvcok8BMguLc7g1W6W/GqZbLdQ==", + "dev": true, + "requires": { + "esbuild": "^0.15.9", + "fsevents": "~2.3.2", + "postcss": "^8.4.18", + "resolve": "^1.22.1", + "rollup": "^2.79.1" + } + } + } + }, "stream-browserify": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", @@ -34374,6 +36199,12 @@ "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", "dev": true }, + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, "symbol.prototype.description": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/symbol.prototype.description/-/symbol.prototype.description-1.0.5.tgz", @@ -34743,6 +36574,12 @@ "is-number": "^7.0.0" } }, + "toggle-selection": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", + "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==", + "dev": true + }, "toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", @@ -34758,6 +36595,26 @@ "@orchidjs/unicode-variants": "^1.0.4" } }, + "tough-cookie": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", + "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==", + "dev": true, + "requires": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "dependencies": { + "universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true + } + } + }, "tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -35226,6 +37083,16 @@ } } }, + "url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", @@ -35345,6 +37212,24 @@ "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", "dev": true }, + "w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "dev": true, + "requires": { + "browser-process-hrtime": "^1.0.0" + } + }, + "w3c-xmlserializer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz", + "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==", + "dev": true, + "requires": { + "xml-name-validator": "^4.0.0" + } + }, "walker": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", @@ -36036,6 +37921,32 @@ } } }, + "whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dev": true, + "requires": { + "iconv-lite": "0.6.3" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true + }, "whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", @@ -36187,6 +38098,18 @@ "default-browser-id": "^1.0.4" } }, + "xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true + }, + "xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", diff --git a/package.json b/package.json index d0d0da48..81f18f2a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@rolemodel/optics", - "version": "0.2.4", + "version": "0.2.5", "description": "Optics is an scss package that provides base styles and components that can be integrated and customized in a variety of projects.", "main": "dist/scss/optics.scss", "scripts": { @@ -69,6 +69,7 @@ "prettier": "^2.8.1", "sass": "^1.53.0", "sass-loader": "^10.1.1", + "storybook-design-token": "^2.9.0", "style-loader": "^2.0.0", "stylelint": "^14.16.0", "stylelint-config-idiomatic-order": "^9.0.0", diff --git a/src/core/tokens/base_tokens.scss b/src/core/tokens/base_tokens.scss index 8eaf9d66..8e7503c3 100644 --- a/src/core/tokens/base_tokens.scss +++ b/src/core/tokens/base_tokens.scss @@ -7,41 +7,68 @@ // A theme comprised of a primary, neutral, warning, danger, info, and notice colors. @mixin color-varieties { // Basic Colors + + /** + * @tokens Basic Colors + * @presenter Color + */ --rm-color-white: hsl(0deg 100% 100%); --rm-color-black: hsl(0deg 0% 0%); - // Primary HSL + /** + * @tokens Primary Colors + * @presenter Color + */ --rm-color-primary-h: 216; --rm-color-primary-s: 58%; --rm-color-primary-l: 48%; - // Neutral HSL + /** + * @tokens Neutral Colors + * @presenter Color + */ --rm-color-neutral-h: var(--rm-color-primary-h); --rm-color-neutral-s: 4%; --rm-color-neutral-l: var(--rm-color-primary-l); - // Alerts Warning HSL + /** + * @tokens Alerts Warning Colors + * @presenter Color + */ --rm-color-alerts-warning-h: 47; --rm-color-alerts-warning-s: 100%; --rm-color-alerts-warning-l: 61%; - // Alerts Danger HSL + /** + * @tokens Alerts Danger Colors + * @presenter Color + */ --rm-color-alerts-danger-h: 0; --rm-color-alerts-danger-s: 99%; --rm-color-alerts-danger-l: 76%; - // Alerts Info HSL + /** + * @tokens Alerts Info Colors + * @presenter Color + */ --rm-color-alerts-info-h: 216; --rm-color-alerts-info-s: 58%; --rm-color-alerts-info-l: 48%; - // Alerts Notice HSL + /** + * @tokens Alerts Notice Colors + * @presenter Color + */ --rm-color-alerts-notice-h: 130; --rm-color-alerts-notice-s: 61%; --rm-color-alerts-notice-l: 64%; } @mixin border-radius { + /** + * @tokens Border Radius + * @presenter BorderRadius + */ --rm-radius-small: 2px; --rm-radius-medium: 4px; --rm-radius-large: 8px; @@ -51,17 +78,30 @@ } @mixin border-widths { + /** + * @tokens Border Width + * @presenter Spacing + */ --rm-border-width: 1px; --rm-border-width-large: 2px; --rm-border-width-x-large: 4px; } @mixin border-colors { + /** + * @tokens Border Color + * @presenter Color + */ --rm-border-color: var(--rm-color-neutral-plus-three); } @mixin box-shadows { // E.G. box-shadow: var(--rm-border-top) var(--rm-border-color); + + /** + * @tokens Border Shadow + * @presenter Shadow + */ --rm-border-none: 0 0 0 0; --rm-border-all: 0 0 0 var(--rm-border-width); --rm-border-top: 0 calc(-1 * var(--rm-border-width)) 0 0; @@ -73,6 +113,10 @@ } @mixin font-scales { + /** + * @tokens Font Scale + * @presenter FontSize + */ --rm-font-scale-unit: 1rem; // 10px; --rm-font-x-small: calc(var(--rm-font-scale-unit) * 1.2); // 12px --rm-font-small: calc(var(--rm-font-scale-unit) * 1.4); // 14px @@ -86,6 +130,10 @@ } @mixin font-weights { + /** + * @tokens Font Weight + * @presenter FontWeight + */ --rm-font-weight-thin: 100; --rm-font-weight-extra-light: 200; --rm-font-weight-light: 300; @@ -98,6 +146,10 @@ } @mixin line-heights { + /** + * @tokens Line Height + * @presenter LineHeight + */ --rm-line-height-none: 0; --rm-line-height-densest: 1; --rm-line-height-denser: 1.15; @@ -109,11 +161,18 @@ } @mixin letter-spacing { + /** + * @tokens Letter Spacing + * @presenter LetterSpacing + */ --rm-letter-spacing-navigation: 0.01rem; --rm-letter-spacing-label: 0.04rem; } @mixin transitions { + /** + * @tokens Transition + */ --rm-transition-input: 120ms; --rm-transition-navigation: 200ms; --rm-transition-sidebar: 300ms; @@ -123,15 +182,26 @@ } @mixin encoded-images { + /** + * @tokens Encoded Images + */ --rm-form-dropdown-arrow-width: 1rem; // No way to string interpolate --rm-form-dropdown-arrow: url("data:image/svg+xml,%3Csvg viewBox='0 0 10 7' version='1.1' xmlns='http://www.w3.org/2000/svg' width='10' height='7'%3E%3Cg transform='matrix(0.983953,0,0,1.00934,-9.22679,-3.65885)'%3E%3Cpath fill='%23d1d1d1' d='M9.37727 3.625l5.08154 6.93523L19.54036 3.625'/%3E%3C/g%3E%3C/svg%3E%0A"); } @mixin fonts { + /** + * @tokens Font Family + * @presenter FontFamily + */ --rm-font-family: 'Noto Sans', 'Noto Serif', sans-serif; } @mixin spacing-scales { + /** + * @tokens Space Scale + * @presenter Spacing + */ --rm-space-scale-unit: 1rem; // 10px; --rm-space-3x-small: calc(var(--rm-space-scale-unit) * 0.2); // 2px --rm-space-2x-small: calc(var(--rm-space-scale-unit) * 0.4); // 4px @@ -146,6 +216,10 @@ } @mixin shadows { + /** + * @tokens Shadows + * @presenter Shadow + */ --rm-shadow-x-small: 0 1px 2px hsl(0deg 0% 0% / 3%), 0 1px 3px hsl(0deg 0% 0% / 15%); --rm-shadow-small: 0 1px 2px hsl(0deg 0% 0% / 3%), 0 2px 6px hsl(0deg 0% 0% / 15%); --rm-shadow-medium: 0 4px 8px hsl(0deg 0% 0% / 15%), 0 1px 3px hsl(0deg 0% 0% / 3%); @@ -154,6 +228,9 @@ } @mixin z-indexes { + /** + * @tokens Z-Index + */ --rm-z-index-header: 500; --rm-z-index-footer: 500; --rm-z-index-drawer: 700; @@ -168,10 +245,20 @@ @mixin inputs { // This should follow multiples of 4 // https: //uxdesign.cc/baseline-grids-design-systems-ae23b5af8cec See example 8 + + /** + * @tokens Input Heights + * @presenter Spacing + */ --rm-input-height-small: 2.4rem; // 24px --rm-input-height-medium: 3.2rem; // 32px --rm-input-height-large: 4.4rem; // 44px --rm-input-height-x-large: 5.6rem; // 56px + + /** + * @tokens Input Focus + * @presenter Shadow + */ --rm-input-outer-focus: 0 0 0 var(--rm-border-width-large) var(--rm-color-primary-plus-four); --rm-input-inner-focus: inset var(--rm-border-all) var(--rm-color-primary-minus-three); --rm-input-focus: var(--rm-input-inner-focus), var(--rm-input-outer-focus); @@ -182,6 +269,9 @@ // https://drafts.csswg.org/css-env-1/ // https://bholmes.dev/blog/alternative-to-css-variable-media-queries/ +/** +* @tokens Breakpoints +*/ $breakpoint-x-small: 512px; // vertical phone $breakpoint-small: 768px; // vertical ipad $breakpoint-medium: 1024px; // landscape ipad diff --git a/src/core/tokens/dark_mode_tokens.scss b/src/core/tokens/dark_mode_tokens.scss index e8273496..e57bbce9 100644 --- a/src/core/tokens/dark_mode_tokens.scss +++ b/src/core/tokens/dark_mode_tokens.scss @@ -1,4 +1,9 @@ @mixin primary-semantic-scale-dark { + /** + * @tokens Primary Dark Colors + * @presenter Color + */ + // Main Scale --rm-color-primary-plus-max: var(--rm-color-black); --rm-color-primary-plus-eight: hsl(var(--rm-color-primary-h) var(--rm-color-primary-s) 4%); @@ -43,6 +48,11 @@ } @mixin neutral-semantic-scale-dark { + /** + * @tokens Neutral Dark Colors + * @presenter Color + */ + // Main Scale --rm-color-neutral-plus-max: var(--rm-color-black); --rm-color-neutral-plus-eight: hsl(var(--rm-color-neutral-h) var(--rm-color-neutral-s) 4%); @@ -87,6 +97,11 @@ } @mixin alerts-warning-semantic-scale-dark { + /** + * @tokens Alerts Warning Dark Colors + * @presenter Color + */ + // Main Scale --rm-color-alerts-warning-plus-max: var(--rm-color-black); --rm-color-alerts-warning-plus-eight: hsl(var(--rm-color-alerts-warning-h) var(--rm-color-alerts-warning-s) 4%); @@ -131,6 +146,11 @@ } @mixin alerts-danger-semantic-scale-dark { + /** + * @tokens Alerts Danger Dark Colors + * @presenter Color + */ + // Main Scale --rm-color-alerts-danger-plus-max: var(--rm-color-black); --rm-color-alerts-danger-plus-eight: hsl(var(--rm-color-alerts-danger-h) var(--rm-color-alerts-danger-s) 4%); @@ -175,6 +195,11 @@ } @mixin alerts-info-semantic-scale-dark { + /** + * @tokens Alerts Info Dark Colors + * @presenter Color + */ + // Main Scale --rm-color-alerts-info-plus-max: var(--rm-color-black); --rm-color-alerts-info-plus-eight: hsl(var(--rm-color-alerts-info-h) var(--rm-color-alerts-info-s) 4%); @@ -219,6 +244,11 @@ } @mixin alerts-notice-semantic-scale-dark { + /** + * @tokens Alerts Notice Dark Colors + * @presenter Color + */ + // Main Scale --rm-color-alerts-notice-plus-max: var(--rm-color-black); --rm-color-alerts-notice-plus-eight: hsl(var(--rm-color-alerts-notice-h) var(--rm-color-alerts-notice-s) 4%); @@ -263,6 +293,10 @@ } @mixin shadows-dark { + /** + * @tokens Dark Shadows + * @presenter Shadow + */ --rm-shadow-x-small: 0 1px 3px hsl(0deg 0% 0% / 15%), 0 1px 2px hsl(0deg 0% 0% / 30%); --rm-shadow-small: 0 2px 6px hsl(0deg 0% 0% / 15%), 0 1px 2px hsl(0deg 0% 0% / 30%); --rm-shadow-medium: 0 4px 8px hsl(0deg 0% 0% / 15%), 0 1px 3px hsl(0deg 0% 0% / 30%); diff --git a/src/core/tokens/scale_color_tokens.scss b/src/core/tokens/scale_color_tokens.scss index b651b748..fd31df3a 100644 --- a/src/core/tokens/scale_color_tokens.scss +++ b/src/core/tokens/scale_color_tokens.scss @@ -1,4 +1,8 @@ @mixin primary-semantic-scale { + /** + * @tokens Primary Colors + * @presenter Color + */ --rm-color-primary-original: hsl(var(--rm-color-primary-h) var(--rm-color-primary-s) var(--rm-color-primary-l)); // Main Scale @@ -45,6 +49,10 @@ } @mixin neutral-semantic-scale { + /** + * @tokens Neutral Colors + * @presenter Color + */ --rm-color-neutral-original: hsl(var(--rm-color-neutral-h) var(--rm-color-neutral-s) var(--rm-color-neutral-l)); // Main Scale @@ -91,6 +99,10 @@ } @mixin alerts-warning-semantic-scale { + /** + * @tokens Alerts Warning Colors + * @presenter Color + */ --rm-color-alerts-warning-original: hsl( var(--rm-color-alerts-warning-h) var(--rm-color-alerts-warning-s) var(--rm-color-alerts-warning-l) ); @@ -139,6 +151,10 @@ } @mixin alerts-danger-semantic-scale { + /** + * @tokens Alerts Danger Colors + * @presenter Color + */ --rm-color-alerts-danger-original: hsl( var(--rm-color-alerts-danger-h) var(--rm-color-alerts-danger-s) var(--rm-color-alerts-danger-l) ); @@ -187,6 +203,10 @@ } @mixin alerts-info-semantic-scale { + /** + * @tokens Alerts Info Colors + * @presenter Color + */ --rm-color-alerts-info-original: hsl( var(--rm-color-alerts-info-h) var(--rm-color-alerts-info-s) var(--rm-color-alerts-info-l) ); @@ -235,6 +255,10 @@ } @mixin alerts-notice-semantic-scale { + /** + * @tokens Alerts Notice Colors + * @presenter Color + */ --rm-color-alerts-notice-original: hsl( var(--rm-color-alerts-notice-h) var(--rm-color-alerts-notice-s) var(--rm-color-alerts-notice-l) ); @@ -283,6 +307,10 @@ } @mixin background { + /** + * @tokens Basic Colors + * @presenter Color + */ --rm-color-background: var(--rm-color-neutral-plus-eight); --rm-color-on-background: var(--rm-color-neutral-on-plus-eight); } diff --git a/src/core/utilities.scss b/src/core/utilities.scss index 78836ae0..79e17667 100644 --- a/src/core/utilities.scss +++ b/src/core/utilities.scss @@ -194,6 +194,10 @@ align-self: stretch; } +.self-baseline { + align-self: baseline; +} + // Text Alignment .text-left { diff --git a/src/stories/3_Tokens.stories.mdx b/src/stories/3_Tokens.stories.mdx index a1fb6d9b..b9dff909 100644 --- a/src/stories/3_Tokens.stories.mdx +++ b/src/stories/3_Tokens.stories.mdx @@ -17,11 +17,22 @@ There is a JSON file in `docs/token_structure.json` that lists all the current t ## Base Tokens -- Border -- Font Family -- Font Size -- Font Weight -- Letter Spacing -- Line Height -- Shadow +- Basic Color +- Border Color +- Color Scale +- Border Radius +- Border Stroke +- Border Width +- Breakpoint +- Encoded Image +- Font Size +- Font Weight +- Letter Spacing +- Line Height +- Font Family +- Input Focus +- Input Height +- Shadow +- Spacing +- Z-Index - Transition diff --git a/src/stories/BasicColor.stories.mdx b/src/stories/BasicColor.stories.mdx new file mode 100644 index 00000000..7a4f7c00 --- /dev/null +++ b/src/stories/BasicColor.stories.mdx @@ -0,0 +1,27 @@ +import { Meta } from '@storybook/addon-docs' +import { DesignTokenDocBlock } from 'storybook-design-token/dist/doc-blocks' + + + +# Basic Color + +Basic color tokens can be used to define exact colors. + +The background colors use the color scale and will adjust in dark mode. + +## Usage + +These tokens can be applied to anything that supports color. + +```css +body { + background-color: var(--rm-color-background); + color: var(--rm-color-on-background); +} +// or +color: var(--rm-color-white); +``` + +## Available tokens and their definitions + + diff --git a/src/stories/Border.stories.js b/src/stories/Border.stories.js deleted file mode 100644 index f0d2c5ce..00000000 --- a/src/stories/Border.stories.js +++ /dev/null @@ -1,53 +0,0 @@ -import { createBorder } from './Border/Border.js' -import BorderDocs from './Border/Border.mdx' - -export default { - title: 'Tokens/Border', - argTypes: { - position: { - control: { type: 'select' }, - options: ['none', 'all', 'top', 'right', 'bottom', 'left', 'y', 'x'], - }, - inset: { control: 'boolean' }, - }, - parameters: { - docs: { - page: BorderDocs, - }, - }, -} - -const Template = ({ position, ...args }) => { - return createBorder({ position, ...args }) -} - -export const Default = Template.bind({}) -Default.args = { - position: 'all', -} - -export const Left = Template.bind({}) -Left.args = { - position: 'left', -} - -export const Bottom = Template.bind({}) -Bottom.args = { - position: 'bottom', -} - -export const X = Template.bind({}) -X.args = { - position: 'x', -} - -export const Y = Template.bind({}) -Y.args = { - position: 'y', -} - -export const InsetLeft = Template.bind({}) -InsetLeft.args = { - position: 'left', - inset: true, -} diff --git a/src/stories/Border/Border.js b/src/stories/Border/Border.js deleted file mode 100644 index d95398ea..00000000 --- a/src/stories/Border/Border.js +++ /dev/null @@ -1,20 +0,0 @@ -export const createBorder = ({ position = 'all', inset = false }) => { - const borderElement = document.createElement('div') - borderElement.innerText = position - - borderElement.style.padding = 'var(--rm-space-medium)' - - let shadowStyle = `var(--rm-border-${position})` - - if (inset) { - shadowStyle = `inset ${shadowStyle}` - } - - if (position !== 'x' && position !== 'y') { - shadowStyle += ' var(--rm-border-color)' - } - - borderElement.style.boxShadow = shadowStyle - - return borderElement -} diff --git a/src/stories/BorderColor.stories.mdx b/src/stories/BorderColor.stories.mdx new file mode 100644 index 00000000..200630af --- /dev/null +++ b/src/stories/BorderColor.stories.mdx @@ -0,0 +1,22 @@ +import { Meta } from '@storybook/addon-docs' +import { DesignTokenDocBlock } from 'storybook-design-token/dist/doc-blocks' + + + +# Border Color + +Border color tokens can be used to define the color of borders and box shadows. + +## Usage + +These tokens can be applied with a border or box shadow. + +```css +border-color: var(--rm-border-color); +// or +box-shadow: var(--rm-border-top) var(--rm-border-color); +``` + +## Available tokens and their definitions + + diff --git a/src/stories/BorderRadius.stories.mdx b/src/stories/BorderRadius.stories.mdx new file mode 100644 index 00000000..7fa211a0 --- /dev/null +++ b/src/stories/BorderRadius.stories.mdx @@ -0,0 +1,20 @@ +import { Meta } from '@storybook/addon-docs' +import { DesignTokenDocBlock } from 'storybook-design-token/dist/doc-blocks' + + + +# Border Radius + +Border radius tokens can be used to round corners on various elements. + +## Usage + +These tokens can be applied with or without an actual border on the element. + +```css +border-radius: var(--rm-border-small); +``` + +## Available tokens and their definitions + + diff --git a/src/stories/Border/Border.mdx b/src/stories/BorderStroke.stories.mdx similarity index 62% rename from src/stories/Border/Border.mdx rename to src/stories/BorderStroke.stories.mdx index 979ccf12..506833c9 100644 --- a/src/stories/Border/Border.mdx +++ b/src/stories/BorderStroke.stories.mdx @@ -1,7 +1,10 @@ -import { Primary, ArgsTable, Canvas, Story } from '@storybook/addon-docs' +import { Meta } from '@storybook/addon-docs' +import { DesignTokenDocBlock } from 'storybook-design-token/dist/doc-blocks' import LinkTo from '@storybook/addon-links/react' -# Border + + +# Border Stroke Border tokens can be used as box shadows to add borders to various elements. Box Shadows are used in order to provide border styling without affecting the sizing of elements. These can be composed with other box shadows such as Shadows to stack effects. @@ -34,20 +37,4 @@ Insetting the x and y borders is currently **not supported**. You can achieve th ## Available tokens and their definitions - -```css ---rm-border-none: 0 0 0 0; ---rm-border-all: 0 0 0 var(--rm-border-width); ---rm-border-top: 0 calc(-1 * var(--rm-border-width)) 0 0; ---rm-border-right: var(--rm-border-width) 0 0 0; ---rm-border-bottom: 0 var(--rm-border-width) 0 0; ---rm-border-left: calc(-1 * var(--rm-border-width)) 0 0 0; ---rm-border-y: var(--rm-border-top) var(--rm-border-color), var(--rm-border-bottom) var(--rm-border-color); ---rm-border-x: var(--rm-border-left) var(--rm-border-color), var(--rm-border-right) var(--rm-border-color); -``` - - -## Playground - - - + diff --git a/src/stories/BorderWidth.stories.mdx b/src/stories/BorderWidth.stories.mdx new file mode 100644 index 00000000..fa8c6ae9 --- /dev/null +++ b/src/stories/BorderWidth.stories.mdx @@ -0,0 +1,22 @@ +import { Meta } from '@storybook/addon-docs' +import { DesignTokenDocBlock } from 'storybook-design-token/dist/doc-blocks' + + + +# Border Width + +Border width tokens can be used to define a border width or a box shadow width. + +## Usage + +These tokens can be applied with a border or box shadow. + +```css +border-width: 0 0 0 var(--rm-border-width); +// or +box-shadow: 0 0 0 var(--rm-border-width); +``` + +## Available tokens and their definitions + + diff --git a/src/stories/Breakpoint.stories.mdx b/src/stories/Breakpoint.stories.mdx new file mode 100644 index 00000000..6255ffe8 --- /dev/null +++ b/src/stories/Breakpoint.stories.mdx @@ -0,0 +1,31 @@ +import { Meta } from '@storybook/addon-docs' +import { DesignTokenDocBlock } from 'storybook-design-token/dist/doc-blocks' + + + +# Breakpoint + +Breakpoint tokens are used to define common device sizes for use within media queries. + +We use SCSS variables to define these breakpoints. +Custom properties (css variables) currently cannot be used in a media query since they get defined in an element scope (`:root` in our case). +Media queries exist at the document level and therefore cannot access custom properties. + +[CSS ENV Variables](https://drafts.csswg.org/css-env-1/) aims at addressing this by allowing variables at the global document level. + +[SCSS Workaround](https://bholmes.dev/blog/alternative-to-css-variable-media-queries/) is the pattern we follow to achieve this. + +## Usage + +These tokens can be applied in a media query to create responsive behavior. + +```css +@media (width > $breakpoint-medium) { + background-color: var(--rm-color-primary-base); + color: var(--rm-color-primary-on-base); +} +``` + +## Available tokens and their definitions + + diff --git a/src/stories/ColorScale.stories.mdx b/src/stories/ColorScale.stories.mdx new file mode 100644 index 00000000..68d9d0ea --- /dev/null +++ b/src/stories/ColorScale.stories.mdx @@ -0,0 +1,63 @@ +import { Meta } from '@storybook/addon-docs' +import { DesignTokenDocBlock } from 'storybook-design-token/dist/doc-blocks' +import LinkTo from '@storybook/addon-links/react' + + + +# Color Scales + +This will be filled in in the future + +## Available tokens and their definitions + +### Light Mode + +#### Primary + + + +#### Neutral + + + +#### Alerts Warning + + + +#### Alerts Danger + + + +#### Alerts Info + + + +#### Alerts Notice + + + +### Dark Mode + +#### Primary + + + +#### Neutral + + + +#### Alerts Warning + + + +#### Alerts Danger + + + +#### Alerts Info + + + +#### Alerts Notice + + diff --git a/src/stories/Container.stories.js b/src/stories/Container.stories.js new file mode 100644 index 00000000..4a0f8893 --- /dev/null +++ b/src/stories/Container.stories.js @@ -0,0 +1,48 @@ +import { createContainer } from './Container/Container.js' +import ContainerDocs from './Container/Container.mdx' + +export default { + title: 'Utilities/Container', + argTypes: { + size: { + control: { type: 'select' }, + options: ['', 'sm', 'xs'], + }, + padding: { + control: { type: 'select' }, + options: ['', 'sm', 'md'], + }, + }, + parameters: { + docs: { + page: ContainerDocs, + }, + }, +} + +const Template = ({ size, ...args }) => { + return createContainer({ size, ...args }) +} + +export const Default = Template.bind({}) +Default.args = {} + +export const SizeSmall = Template.bind({}) +SizeSmall.args = { + size: 'sm', +} + +export const SizeExtraSmall = Template.bind({}) +SizeExtraSmall.args = { + size: 'xs', +} + +export const PaddingSmall = Template.bind({}) +PaddingSmall.args = { + padding: 'sm', +} + +export const PaddingMedium = Template.bind({}) +PaddingMedium.args = { + padding: 'md', +} diff --git a/src/stories/Container/Container.js b/src/stories/Container/Container.js new file mode 100644 index 00000000..b6f8c65a --- /dev/null +++ b/src/stories/Container/Container.js @@ -0,0 +1,22 @@ +export const createContainer = ({ size = '', padding = '' }) => { + const page = document.createElement('div') + page.style.backgroundColor = 'var(--rm-color-alerts-warning-base)' + page.style.height = '30rem' + + const container = document.createElement('div') + container.style.backgroundColor = 'var(--rm-color-alerts-notice-base)' + container.style.height = '100%' + + container.className = ['container', size ? `container--${size}` : '', padding ? `container--${padding}-padding` : ''] + .filter(Boolean) + .join(' ') + + const innerContents = document.createElement('div') + innerContents.style.backgroundColor = 'var(--rm-color-primary-base)' + innerContents.style.height = '100%' + + container.appendChild(innerContents) + page.appendChild(container) + + return page +} diff --git a/src/stories/Container/Container.mdx b/src/stories/Container/Container.mdx new file mode 100644 index 00000000..3900dfb7 --- /dev/null +++ b/src/stories/Container/Container.mdx @@ -0,0 +1,52 @@ +import { Primary, ArgsTable, Canvas, Story } from '@storybook/addon-docs' + +# Container + +Container utility classes are used to create a centered content area for your application. + +You may need to zoom the demos out depending on your screen size to see the full effect. + +## Default + +`.container` Create a container area set to be the size of `$breakpoint-medium` with a padding of `--rm-space-large` + + + + + +## Small Size + +`.container--sm` Change the container size to `$breakpoint-small` + + + + + +## Extra Small Size + +`.container--xs` Change the container size to `$breakpoint-x-small` + + + + + +## Small Padding + +`.container--sm-padding` Change the padding of the container to use the `--rm-space-small` token + + + + + +## Medium Padding + +`.container--md-padding` Change the padding of the container to use the `--rm-space-medium` token + + + + + +## Playground + + + diff --git a/src/stories/EncodedImage.stories.mdx b/src/stories/EncodedImage.stories.mdx new file mode 100644 index 00000000..629ddde4 --- /dev/null +++ b/src/stories/EncodedImage.stories.mdx @@ -0,0 +1,27 @@ +import { Canvas, Story } from '@storybook/addon-docs' +import { Meta } from '@storybook/addon-docs' +import { DesignTokenDocBlock } from 'storybook-design-token/dist/doc-blocks' + + + +# Encoded Image + +Encoded Image tokens are primarily used to create the dropdown arrow on `` elements using the `.form-control` class. + +It is a data-encoded URI SVG which can be set as a background image and then positioned as needed. + + + + + +## Usage + +These tokens can be applied as a background image and the width for position. + +```css +background: var(--rm-form-dropdown-arrow) center right no-repeat; +``` + +## Available tokens and their definitions + + diff --git a/src/stories/Flex.stories.js b/src/stories/Flex.stories.js new file mode 100644 index 00000000..22299767 --- /dev/null +++ b/src/stories/Flex.stories.js @@ -0,0 +1,155 @@ +import { createFlex } from './Flex/Flex.js' +import FlexDocs from './Flex/Flex.mdx' + +export default { + title: 'Utilities/Flex', + argTypes: { + flex: { control: 'boolean' }, + flexDirection: { + control: { type: 'select' }, + options: ['row', 'col'], + }, + flexWrap: { + control: { type: 'select' }, + options: ['no-wrap', 'wrap'], + }, + flexGrowOne: { control: 'boolean' }, + justifyContent: { + control: { type: 'select' }, + options: ['start', 'center', 'end', 'between', 'around'], + }, + alignItems: { + control: { type: 'select' }, + options: ['stretch', 'start', 'center', 'end', 'baseline'], + }, + alignSelf: { + control: { type: 'select' }, + options: ['auto', 'stretch', 'start', 'center', 'end', 'baseline'], + }, + }, + parameters: { + docs: { + page: FlexDocs, + }, + }, +} + +const Template = ({ flex, ...args }) => { + return createFlex({ flex, ...args }) +} + +export const With = Template.bind({}) +With.args = { + flex: true, +} + +export const Without = Template.bind({}) +Without.args = { + flex: false, +} + +export const FlexRow = Template.bind({}) +FlexRow.args = { + flexDirection: 'row', +} + +export const FlexCol = Template.bind({}) +FlexCol.args = { + flexDirection: 'col', +} + +export const FlexWrap = Template.bind({}) +FlexWrap.args = { + flexWrap: 'wrap', +} + +export const FlexNoWrap = Template.bind({}) +FlexNoWrap.args = { + flexWrap: 'no-wrap', +} + +export const FlexGrowOne = Template.bind({}) +FlexGrowOne.args = { + flexGrowOne: true, +} + +export const JustifyStart = Template.bind({}) +JustifyStart.args = { + justifyContent: 'start', +} + +export const JustifyCenter = Template.bind({}) +JustifyCenter.args = { + justifyContent: 'center', +} + +export const JustifyEnd = Template.bind({}) +JustifyEnd.args = { + justifyContent: 'end', +} + +export const JustifyBetween = Template.bind({}) +JustifyBetween.args = { + justifyContent: 'between', +} + +export const JustifyAround = Template.bind({}) +JustifyAround.args = { + justifyContent: 'around', +} + +export const AlignStretch = Template.bind({}) +AlignStretch.args = { + alignItems: 'stretch', +} + +export const AlignStart = Template.bind({}) +AlignStart.args = { + alignItems: 'start', +} + +export const AlignCenter = Template.bind({}) +AlignCenter.args = { + alignItems: 'center', +} + +export const AlignEnd = Template.bind({}) +AlignEnd.args = { + alignItems: 'end', +} + +export const AlignBaseline = Template.bind({}) +AlignBaseline.args = { + alignItems: 'baseline', +} + +export const AlignSelfAuto = Template.bind({}) +AlignSelfAuto.args = { + alignSelf: 'auto', +} + +export const AlignSelfStretch = Template.bind({}) +AlignSelfStretch.args = { + alignItems: 'center', + alignSelf: 'stretch', +} + +export const AlignSelfStart = Template.bind({}) +AlignSelfStart.args = { + alignSelf: 'start', +} + +export const AlignSelfCenter = Template.bind({}) +AlignSelfCenter.args = { + alignSelf: 'center', +} + +export const AlignSelfEnd = Template.bind({}) +AlignSelfEnd.args = { + alignSelf: 'end', +} + +export const AlignSelfBaseline = Template.bind({}) +AlignSelfBaseline.args = { + alignSelf: 'baseline', +} diff --git a/src/stories/Flex/Flex.js b/src/stories/Flex/Flex.js new file mode 100644 index 00000000..80975b39 --- /dev/null +++ b/src/stories/Flex/Flex.js @@ -0,0 +1,42 @@ +import { createChildren } from '../helpers/utils' + +export const createFlex = ({ + flex = true, + flexDirection = '', + flexWrap = '', + flexGrowOne = false, + justifyContent = '', + alignItems = '', + alignSelf = '', +}) => { + const wrapper = document.createElement('div') + wrapper.style.height = '10rem' + + wrapper.className = [ + flex ? 'flex gap-xxs' : '', + flexDirection ? `flex-${flexDirection}` : '', + flexWrap ? `flex-${flexWrap}` : '', + justifyContent ? `justify-${justifyContent}` : '', + alignItems ? `items-${alignItems}` : '', + ] + .filter(Boolean) + .join(' ') + + createChildren(wrapper, 5) + + if (flexWrap) { + Array.from(wrapper.children).forEach((box) => { + box.style.width = '30rem' + }) + } + + if (flexGrowOne) { + wrapper.children[0].className = 'flex-grow-1' + } + + if (alignSelf) { + wrapper.children[0].className = `self-${alignSelf}` + } + + return wrapper +} diff --git a/src/stories/Flex/Flex.mdx b/src/stories/Flex/Flex.mdx new file mode 100644 index 00000000..4299451d --- /dev/null +++ b/src/stories/Flex/Flex.mdx @@ -0,0 +1,200 @@ +import { Primary, ArgsTable, Canvas, Story } from '@storybook/addon-docs' + +# Flex + +Flex utility classes are used to quickly lay out a page using the flex engine. + +[CSS Tricks: A Guide to Flexbox](https://css-tricks.com/snippets/css/a-guide-to-flexbox/) is an excellent resource in understanding how the flexbox layout engine works + +[Flexbox Froggy](https://codepip.com/games/flexbox-froggy/) is another excellent resource for practicing your Flexbox knowledge + +Note: the `gap-xxs` utility in these examples is not necessary for the flex utilities to work. It is here to distinguish each item. + +## Without + +A normal `div` without the flex utility + + + + + +## Flex Property + +`.flex` Sets the display property to flex. + + + + + +## Flex Direction Row + +`.flex-row` sets the flex axis to row. This is the default direction of a flex container and doesn't need to be applied unless you are overriding something that is set to column. + + + + + +## Flex Direction Column + +`.flex-col` sets the flex axis to column. This will affect all justify and align properties. + + + + + +## Flex Wrap + +`.flex-wrap` Tells the flex container to wrap items if too large. + + + + + +## Flex No Wrap + +`.flex-no-wrap` Forces the flex container to not wrap items if too large. + + + + + +## Flex Grow + +`.flex-grow-1` can be added to an item within a flex container to force it to take up as much space as is available. + + + + + +## Justify Content Start + +`.justify-start` justifies the contents to the start of the flex axis. This is the default justification of a flex container and doesn't need to be applied unless you are overriding something set differently. + + + + + +## Justify Content Center + +`.justify-center` justifies the contents to the center of the flex axis. + + + + + +## Justify Content End + +`.justify-end` justifies the contents to the end of the flex axis. + + + + + +## Justify Content Between + +`.justify-between` justifies the contents to spread evenly across the flex axis with spacing in between each item. + + + + + +## Justify Content Around + +`.justify-around` justifies the contents to spread evenly across the flex axis with spacing around each item. + + + + + +## Align Items Stretch + +`.items-stretch` Stretches each flex item across the cross axis. This is the default alignment and doesn't need to be applied unless you are overriding something set differently. + + + + + +## Align Items Start + +`.items-start` places each flex item at the start of the cross axis. + + + + + +## Align Items Center + +`.items-center` places each flex item at the center of the cross axis. + + + + + +## Align Items End + +`.items-end` places each flex item at the end of the cross axis. + + + + + +## Align Items Baseline + +`.items-baseline` places each flex item at the text baseline of the cross axis. + + + + + +## Align Self Auto + +`.self-auto` changes a specific flex item to inherit its alignment from the container. This is the default alignment and doesn't need to be applied unless you are overriding something set differently. + + + + + +## Align Self Stretch + +`.self-stretch` Stretches a specific flex item across the cross axis. + + + + + +## Align Self Start + +`.self-start` places a specific flex item at the start of the cross axis. + + + + + +## Align Self Center + +`.self-center` places a specific flex item at the center of the cross axis. + + + + + +## Align Self End + +`.self-end` places a specific flex item at the end of the cross axis. + + + + + +## Align Self Baseline + +`.self-baseline` places a specific flex item at the text baseline of the cross axis. + + + + + +## Playground + + + diff --git a/src/stories/Font/Font.js b/src/stories/Font/Font.js index 27aa106d..d6565651 100644 --- a/src/stories/Font/Font.js +++ b/src/stories/Font/Font.js @@ -8,31 +8,3 @@ export const createFontFamily = ({ family = 'Noto Sans' }) => { return element } - -export const createFontWeight = ({ weight = 'normal' }) => { - const element = document.createElement('p') - const weightStyle = `var(--rm-font-weight-${weight})` - element.innerText = `Font Weight Demo using: ${weightStyle}` - element.style.fontWeight = weightStyle - return element -} - -export const createLineHeight = ({ lineHeight = 'base' }) => { - const wrapper = document.createElement('div') - - const lineHeightStyle = `var(--rm-line-height-${lineHeight})` - wrapper.innerHTML = ` - First Line - Line Height Demo using: ${lineHeightStyle} - Second Line - ` - return wrapper -} - -export const createFontSize = ({ size = 'medium' }) => { - const element = document.createElement('p') - const sizeStyle = `var(--rm-font-${size})` - element.innerText = `Font Size Demo using: ${sizeStyle}` - element.style.fontSize = sizeStyle - return element -} diff --git a/src/stories/Font/FontFamily.mdx b/src/stories/Font/FontFamily.mdx index 6f1feed0..cc4fdbd2 100644 --- a/src/stories/Font/FontFamily.mdx +++ b/src/stories/Font/FontFamily.mdx @@ -1,4 +1,5 @@ -import { Primary, ArgsTable, Canvas, Story } from '@storybook/addon-docs' +import { Primary, ArgsTable } from '@storybook/addon-docs' +import { DesignTokenDocBlock } from 'storybook-design-token/dist/doc-blocks' import LinkTo from '@storybook/addon-links/react' # Font Family @@ -24,9 +25,7 @@ html { ## Available tokens and their definitions -```css ---rm-font-family: 'Noto Sans', 'Noto Serif', sans-serif; -``` + ## Custom Font diff --git a/src/stories/Font/FontSize.mdx b/src/stories/Font/FontSize.mdx deleted file mode 100644 index 808d81c6..00000000 --- a/src/stories/Font/FontSize.mdx +++ /dev/null @@ -1,39 +0,0 @@ -import { Primary, ArgsTable, Canvas, Story } from '@storybook/addon-docs' -import LinkTo from '@storybook/addon-links/react' - -# Font Size - -Font Size tokens can be used to change the size of text. - -## Usage - -These tokens can be applied like: - -```css -font-size: var(--rm-font-large); -``` - -## Available tokens and their definitions - -```css ---rm-font-x-small: calc(var(--rm-font-scale-unit) * 1.2); // 12px ---rm-font-small: calc(var(--rm-font-scale-unit) * 1.4); // 14px ---rm-font-medium: calc(var(--rm-font-scale-unit) * 1.6); // 16px ---rm-font-large: calc(var(--rm-font-scale-unit) * 1.8); // 18px ---rm-font-x-large: calc(var(--rm-font-scale-unit) * 2.4); // 24px ---rm-font-2x-large: calc(var(--rm-font-scale-unit) * 2.8); // 28px ---rm-font-3x-large: calc(var(--rm-font-scale-unit) * 3.2); // 32px ---rm-font-4x-large: calc(var(--rm-font-scale-unit) * 3.6); // 36px ---rm-font-5x-large: calc(var(--rm-font-scale-unit) * 4.8); // 48px -``` - -The scale unit is also defined and can be used for scale overriding - -```css ---rm-font-scale-unit: 1rem; // 10px; -``` - -## Playground - - - diff --git a/src/stories/FontSize.stories.js b/src/stories/FontSize.stories.js deleted file mode 100644 index 16f31c6d..00000000 --- a/src/stories/FontSize.stories.js +++ /dev/null @@ -1,36 +0,0 @@ -import { createFontSize } from './Font/Font.js' -import FontSizeDocs from './Font/FontSize.mdx' - -export default { - title: 'Tokens/Typography/Font Size', - argTypes: { - size: { - control: { type: 'select' }, - options: ['x-small', 'small', 'medium', 'large', 'x-large', '2x-large', '3x-large', '4x-large', '5x-large'], - }, - }, - parameters: { - docs: { - page: FontSizeDocs, - }, - }, -} - -const Template = ({ size, ...args }) => { - return createFontSize({ size, ...args }) -} - -export const Small = Template.bind({}) -Small.args = { - size: 'small', -} - -export const Medium = Template.bind({}) -Medium.args = { - size: 'medium', -} - -export const Large = Template.bind({}) -Large.args = { - size: 'large', -} diff --git a/src/stories/FontSize.stories.mdx b/src/stories/FontSize.stories.mdx new file mode 100644 index 00000000..166df0ca --- /dev/null +++ b/src/stories/FontSize.stories.mdx @@ -0,0 +1,23 @@ +import { Meta } from '@storybook/addon-docs' +import { DesignTokenDocBlock } from 'storybook-design-token/dist/doc-blocks' +import LinkTo from '@storybook/addon-links/react' + + + +# Font Size + +Font Size tokens can be used to change the size of text. + +## Usage + +These tokens can be applied like: + +```css +font-size: var(--rm-font-large); +``` + +## Available tokens and their definitions + + + +The scale unit is also defined and can be used for scale overriding diff --git a/src/stories/FontWeight.stories.js b/src/stories/FontWeight.stories.js deleted file mode 100644 index 52ec0618..00000000 --- a/src/stories/FontWeight.stories.js +++ /dev/null @@ -1,31 +0,0 @@ -import { createFontWeight } from './Font/Font.js' -import FontWeightDocs from './Font/FontWeight.mdx' - -export default { - title: 'Tokens/Typography/Font Weight', - argTypes: { - weight: { - control: { type: 'select' }, - options: ['thin', 'extra-light', 'light', 'normal', 'semi-bold', 'bold', 'extra-bold', 'black'], - }, - }, - parameters: { - docs: { - page: FontWeightDocs, - }, - }, -} - -const Template = ({ weight, ...args }) => { - return createFontWeight({ weight, ...args }) -} - -export const Normal = Template.bind({}) -Normal.args = { - weight: 'normal', -} - -export const Bold = Template.bind({}) -Bold.args = { - weight: 'bold', -} diff --git a/src/stories/Font/FontWeight.mdx b/src/stories/FontWeight.stories.mdx similarity index 53% rename from src/stories/Font/FontWeight.mdx rename to src/stories/FontWeight.stories.mdx index dd9bcdc1..58dd02a7 100644 --- a/src/stories/Font/FontWeight.mdx +++ b/src/stories/FontWeight.stories.mdx @@ -1,6 +1,9 @@ -import { Primary, ArgsTable, Canvas, Story } from '@storybook/addon-docs' +import { Meta } from '@storybook/addon-docs' +import { DesignTokenDocBlock } from 'storybook-design-token/dist/doc-blocks' import LinkTo from '@storybook/addon-links/react' + + # Font Weight Font Weight tokens can be used to change the font weight of text. @@ -17,19 +20,4 @@ font-weight: var(--rm-font-weight-bold); ## Available tokens and their definitions -```css ---rm-font-weight-thin: 100; ---rm-font-weight-extra-light: 200; ---rm-font-weight-light: 300; ---rm-font-weight-normal: 400; ---rm-font-weight-medium: 500; ---rm-font-weight-semi-bold: 600; ---rm-font-weight-bold: 700; ---rm-font-weight-extra-bold: 800; ---rm-font-weight-black: 900; -``` - -## Playground - - - + diff --git a/src/stories/Gap.stories.js b/src/stories/Gap.stories.js new file mode 100644 index 00000000..95349685 --- /dev/null +++ b/src/stories/Gap.stories.js @@ -0,0 +1,50 @@ +import { createGap } from './Gap/Gap.js' +import GapDocs from './Gap/Gap.mdx' + +export default { + title: 'Utilities/Gap', + argTypes: { + size: { + control: { type: 'select' }, + options: ['xxs', 'xs', 'sm', 'md', 'lg', 'xl'], + }, + }, + parameters: { + docs: { + page: GapDocs, + }, + }, +} + +const Template = ({ size, ...args }) => { + return createGap({ size, ...args }) +} + +export const ExtraExtraSmall = Template.bind({}) +ExtraExtraSmall.args = { + size: 'xxs', +} + +export const ExtraSmall = Template.bind({}) +ExtraSmall.args = { + size: 'xs', +} + +export const Small = Template.bind({}) +Small.args = { + size: 'sm', +} + +export const Medium = Template.bind({}) +Medium.args = { + size: 'md', +} + +export const Large = Template.bind({}) +Large.args = { + size: 'lg', +} +export const ExtraLarge = Template.bind({}) +ExtraLarge.args = { + size: 'xl', +} diff --git a/src/stories/Gap/Gap.js b/src/stories/Gap/Gap.js new file mode 100644 index 00000000..5fb58908 --- /dev/null +++ b/src/stories/Gap/Gap.js @@ -0,0 +1,10 @@ +import { createChildren } from '../helpers/utils' + +export const createGap = ({ size = 'md' }) => { + const wrapper = document.createElement('div') + wrapper.className = `flex gap-${size}` + + createChildren(wrapper, 5) + + return wrapper +} diff --git a/src/stories/Gap/Gap.mdx b/src/stories/Gap/Gap.mdx new file mode 100644 index 00000000..765cc4e2 --- /dev/null +++ b/src/stories/Gap/Gap.mdx @@ -0,0 +1,82 @@ +import { Primary, ArgsTable, Canvas, Story } from '@storybook/addon-docs' + +# Gap + +Gap utility classes can be used to set the spacing between items within a flex or grid container. + +## Cascade + +When using a gap utility, `--rm-gap` will be set to the same spacing value as gap. This can be used in styles nested to match the container gap. + +```css +.special-item { + display: flex; + gap: var(--rm-gap, var(--rm-space-sm)); // Include a fallback in case the wrapping gap is missing. +} +``` + +```html + + 1 + 2 + + a + b + c + + 4 + +``` + +## Extra Extra Small + +`.gap-xxs` This will use `--rm-space-2x-small` for the item spacing. + + + + + +## Extra Small + +`.gap-xs` This will use `--rm-space-x-small` for the item spacing. + + + + + +## Small + +`.gap-sm` This will use `--rm-space-small` for the item spacing. + + + + + +## Medium + +`.gap-md` This will use `--rm-space-medium` for the item spacing. + + + + + +## Large + +`.gap-lg` This will use `--rm-space-large` for the item spacing. + + + + + +## Extra Large + +`.gap-xl` This will use `--rm-space-xl` for the item spacing. + + + + + +## Playground + + + diff --git a/src/stories/InputFocus.stories.mdx b/src/stories/InputFocus.stories.mdx new file mode 100644 index 00000000..90e53de5 --- /dev/null +++ b/src/stories/InputFocus.stories.mdx @@ -0,0 +1,20 @@ +import { Meta } from '@storybook/addon-docs' +import { DesignTokenDocBlock } from 'storybook-design-token/dist/doc-blocks' + + + +# Input Focus + +Input Focus tokens are used to define a button or form controls focus state. + +## Usage + +These tokens can be applied to anything that uses a box shadow. + +```css +box-shadow: var(--rm-input-focus); +``` + +## Available tokens and their definitions + + diff --git a/src/stories/InputHeight.stories.mdx b/src/stories/InputHeight.stories.mdx new file mode 100644 index 00000000..94108ff4 --- /dev/null +++ b/src/stories/InputHeight.stories.mdx @@ -0,0 +1,24 @@ +import { Meta } from '@storybook/addon-docs' +import { DesignTokenDocBlock } from 'storybook-design-token/dist/doc-blocks' + + + +# Input Height + +Input Height tokens are used to define a button or form controls height. + +## Usage + +These tokens can be applied to anything that requires a users input and needs a height. + +```css +height: var(--rm-input-height-large); +// or +max-height: var(--rm-input-height-small); +// or +min-height: var(--rm-input-height-medium); +``` + +## Available tokens and their definitions + + diff --git a/src/stories/ItemWidth.stories.js b/src/stories/ItemWidth.stories.js new file mode 100644 index 00000000..a80aae5e --- /dev/null +++ b/src/stories/ItemWidth.stories.js @@ -0,0 +1,82 @@ +import { createItemWidth } from './ItemWidth/ItemWidth.js' +import ItemWidthDocs from './ItemWidth/ItemWidth.mdx' + +export default { + title: 'Utilities/Item Width', + argTypes: { + width: { + control: { type: 'select' }, + options: [ + 'half', + 'full', + 'one-fifth', + 'two-fifths', + 'three-fifths', + 'four-fifths', + 'one-quarter', + 'three-quarters', + 'one-third', + 'two-thirds', + ], + }, + }, + parameters: { + docs: { + page: ItemWidthDocs, + }, + }, +} + +const Template = ({ width, ...args }) => { + return createItemWidth({ width, ...args }) +} + +export const Half = Template.bind({}) +Half.args = { + width: 'half', +} + +export const Full = Template.bind({}) +Full.args = { + width: 'full', +} + +export const OneFifth = Template.bind({}) +OneFifth.args = { + width: 'one-fifth', +} + +export const TwoFifths = Template.bind({}) +TwoFifths.args = { + width: 'two-fifths', +} + +export const ThreeFifths = Template.bind({}) +ThreeFifths.args = { + width: 'three-fifths', +} + +export const FourFifths = Template.bind({}) +FourFifths.args = { + width: 'four-fifths', +} + +export const OneQuarter = Template.bind({}) +OneQuarter.args = { + width: 'one-quarter', +} + +export const ThreeQuarters = Template.bind({}) +ThreeQuarters.args = { + width: 'three-quarters', +} + +export const OneThird = Template.bind({}) +OneThird.args = { + width: 'one-third', +} + +export const TwoThirds = Template.bind({}) +TwoThirds.args = { + width: 'two-thirds', +} diff --git a/src/stories/ItemWidth/ItemWidth.js b/src/stories/ItemWidth/ItemWidth.js new file mode 100644 index 00000000..98e480d2 --- /dev/null +++ b/src/stories/ItemWidth/ItemWidth.js @@ -0,0 +1,7 @@ +export const createItemWidth = ({ width = 'full' }) => { + const element = document.createElement('div') + element.innerText = `${width} width` + element.className = `${width}-width card` + + return element +} diff --git a/src/stories/ItemWidth/ItemWidth.mdx b/src/stories/ItemWidth/ItemWidth.mdx new file mode 100644 index 00000000..ba237f25 --- /dev/null +++ b/src/stories/ItemWidth/ItemWidth.mdx @@ -0,0 +1,90 @@ +import { Primary, ArgsTable, Canvas, Story } from '@storybook/addon-docs' + +# Item Width + +Item Width utility classes can be used to set an element's width relative to its parent. + +## Half + +`.half-width` This item will be half the width of its parent. + + + + + +## Full + +`.full-width` This item will be the entire width of its parent. + + + + + +## One-Fifth + +`.one-fifth-width` This item will be one-fifth's width of its parent. + + + + + +## Two-Fifths + +`.two-fifths-width` This item will be two-fifths' width of its parent. + + + + + +## Three-Fifths + +`.three-fifths-width` This item will be three-fifths' width of its parent. + + + + + +## Four-Fifths + +`.four-fifths-width` This item will be four-fifths' width of its parent. + + + + + +## One-Quarter + +`.one-quarter-width` This item will be one-quarter's width of its parent. + + + + + +## Three-Quarters + +`.three-quarters-width` This item will be three-quarters' width of its parent. + + + + + +## One-Third + +`.one-third-width` This item will be one-third's width of its parent. + + + + + +## Two-Thirds + +`.two-thirds-width` This item will be two-thirds' width of its parent. + + + + + +## Playground + + + diff --git a/src/stories/LetterSpacing.stories.js b/src/stories/LetterSpacing.stories.js deleted file mode 100644 index 6c2c19f2..00000000 --- a/src/stories/LetterSpacing.stories.js +++ /dev/null @@ -1,31 +0,0 @@ -import { createLetterSpacing } from './LetterSpacing/LetterSpacing.js' -import LetterSpacingDocs from './LetterSpacing/LetterSpacing.mdx' - -export default { - title: 'Tokens/Typography/Letter Spacing', - argTypes: { - spacing: { - control: { type: 'select' }, - options: ['label', 'navigation'], - }, - }, - parameters: { - docs: { - page: LetterSpacingDocs, - }, - }, -} - -const Template = ({ spacing, ...args }) => { - return createLetterSpacing({ spacing, ...args }) -} - -export const Default = Template.bind({}) -Default.args = { - spacing: 'label', -} - -export const Navigation = Template.bind({}) -Navigation.args = { - spacing: 'navigation', -} diff --git a/src/stories/LetterSpacing/LetterSpacing.mdx b/src/stories/LetterSpacing.stories.mdx similarity index 50% rename from src/stories/LetterSpacing/LetterSpacing.mdx rename to src/stories/LetterSpacing.stories.mdx index a613a3b4..6dab1e5e 100644 --- a/src/stories/LetterSpacing/LetterSpacing.mdx +++ b/src/stories/LetterSpacing.stories.mdx @@ -1,4 +1,7 @@ -import { Primary, ArgsTable, Canvas, Story } from '@storybook/addon-docs' +import { Meta } from '@storybook/addon-docs' +import { DesignTokenDocBlock } from 'storybook-design-token/dist/doc-blocks' + + # Letter Spacing @@ -14,12 +17,4 @@ letter-spacing: var(--rm-letter-spacing-label); ## Available tokens and their definitions -```css ---rm-letter-spacing-navigation: 0.01rem; ---rm-letter-spacing-label: 0.04rem; -``` - -## Playground - - - + diff --git a/src/stories/LetterSpacing/LetterSpacing.js b/src/stories/LetterSpacing/LetterSpacing.js deleted file mode 100644 index 8cabd8aa..00000000 --- a/src/stories/LetterSpacing/LetterSpacing.js +++ /dev/null @@ -1,8 +0,0 @@ -export const createLetterSpacing = ({ spacing = 'label' }) => { - const element = document.createElement('div') - - element.innerText = 'Spacing' - element.style.letterSpacing = `var(--rm-letter-spacing-${spacing})` - - return element -} diff --git a/src/stories/LineHeight.stories.js b/src/stories/LineHeight.stories.js deleted file mode 100644 index 672fe7b6..00000000 --- a/src/stories/LineHeight.stories.js +++ /dev/null @@ -1,31 +0,0 @@ -import { createLineHeight } from './Font/Font.js' -import LineHeightDocs from './Font/LineHeight.mdx' - -export default { - title: 'Tokens/Typography/Line Height', - argTypes: { - lineHeight: { - control: { type: 'select' }, - options: ['none', 'densest', 'denser', 'dense', 'base', 'loose', 'looser', 'loosest'], - }, - }, - parameters: { - docs: { - page: LineHeightDocs, - }, - }, -} - -const Template = ({ lineHeight, ...args }) => { - return createLineHeight({ lineHeight, ...args }) -} - -export const Base = Template.bind({}) -Base.args = { - lineHeight: 'base', -} - -export const Loosest = Template.bind({}) -Loosest.args = { - lineHeight: 'loosest', -} diff --git a/src/stories/Font/LineHeight.mdx b/src/stories/LineHeight.stories.mdx similarity index 63% rename from src/stories/Font/LineHeight.mdx rename to src/stories/LineHeight.stories.mdx index 26d38def..5b333959 100644 --- a/src/stories/Font/LineHeight.mdx +++ b/src/stories/LineHeight.stories.mdx @@ -1,6 +1,9 @@ -import { Primary, ArgsTable, Canvas, Story } from '@storybook/addon-docs' +import { Meta } from '@storybook/addon-docs' +import { DesignTokenDocBlock } from 'storybook-design-token/dist/doc-blocks' import LinkTo from '@storybook/addon-links/react' + + # Line Height Line height tokens can be used to change the line height of text. @@ -15,16 +18,7 @@ line-height: var(--rm-line-height-dense); ## Available tokens and their definitions -```css ---rm-line-height-none: 0; ---rm-line-height-densest: 1; ---rm-line-height-denser: 1.15; ---rm-line-height-dense: 1.3; ---rm-line-height-base: 1.5; ---rm-line-height-loose: 1.6; ---rm-line-height-looser: 1.7; ---rm-line-height-loosest: 1.8; -``` + ## Custom Font @@ -37,8 +31,3 @@ Not all fonts have the same baseline line height. This can cause alignment issue --rm-line-height-looser: 3; } ``` - -## Playground - - - diff --git a/src/stories/Margin.stories.js b/src/stories/Margin.stories.js new file mode 100644 index 00000000..4fc5ab74 --- /dev/null +++ b/src/stories/Margin.stories.js @@ -0,0 +1,260 @@ +import { createMargin } from './Margin/Margin.js' +import MarginDocs from './Margin/Margin.mdx' + +export default { + title: 'Utilities/Margin', + argTypes: { + margin: { + control: { type: 'select' }, + options: ['', 'none', 'auto', 'xs', 'sm', 'md', 'lg', 'xl'], + }, + marginY: { + control: { type: 'select' }, + options: ['', 'none', 'xs', 'sm', 'md', 'lg', 'xl'], + }, + marginX: { + control: { type: 'select' }, + options: ['', 'none', 'xs', 'sm', 'md', 'lg', 'xl'], + }, + marginTop: { + control: { type: 'select' }, + options: ['', 'none', 'xs', 'sm', 'md', 'lg', 'xl'], + }, + marginBottom: { + control: { type: 'select' }, + options: ['', 'none', 'xs', 'sm', 'md', 'lg', 'xl'], + }, + marginLeft: { + control: { type: 'select' }, + options: ['', 'none', 'xs', 'sm', 'md', 'lg', 'xl'], + }, + marginRight: { + control: { type: 'select' }, + options: ['', 'none', 'xs', 'sm', 'md', 'lg', 'xl'], + }, + }, + parameters: { + docs: { + page: MarginDocs, + }, + }, +} + +const Template = ({ margin, ...args }) => { + return createMargin({ margin, ...args }) +} + +export const MarginNone = Template.bind({}) +MarginNone.args = { + margin: 'none', +} + +export const MarginAuto = Template.bind({}) +MarginAuto.args = { + margin: 'auto', +} + +export const MarginExtraSmall = Template.bind({}) +MarginExtraSmall.args = { + margin: 'xs', +} + +export const MarginSmall = Template.bind({}) +MarginSmall.args = { + margin: 'sm', +} + +export const MarginMedium = Template.bind({}) +MarginMedium.args = { + margin: 'md', +} + +export const MarginLarge = Template.bind({}) +MarginLarge.args = { + margin: 'lg', +} + +export const MarginExtraLarge = Template.bind({}) +MarginExtraLarge.args = { + margin: 'xl', +} + +export const MarginYNone = Template.bind({}) +MarginYNone.args = { + marginY: 'none', +} + +export const MarginYExtraSmall = Template.bind({}) +MarginYExtraSmall.args = { + marginY: 'xs', +} + +export const MarginYSmall = Template.bind({}) +MarginYSmall.args = { + marginY: 'sm', +} + +export const MarginYMedium = Template.bind({}) +MarginYMedium.args = { + marginY: 'md', +} + +export const MarginYLarge = Template.bind({}) +MarginYLarge.args = { + marginY: 'lg', +} + +export const MarginYExtraLarge = Template.bind({}) +MarginYExtraLarge.args = { + marginY: 'xl', +} + +export const MarginXNone = Template.bind({}) +MarginXNone.args = { + marginX: 'none', +} + +export const MarginXExtraSmall = Template.bind({}) +MarginXExtraSmall.args = { + marginX: 'xs', +} + +export const MarginXSmall = Template.bind({}) +MarginXSmall.args = { + marginX: 'sm', +} + +export const MarginXMedium = Template.bind({}) +MarginXMedium.args = { + marginX: 'md', +} + +export const MarginXLarge = Template.bind({}) +MarginXLarge.args = { + marginX: 'lg', +} + +export const MarginXExtraLarge = Template.bind({}) +MarginXExtraLarge.args = { + marginX: 'xl', +} + +export const MarginTopNone = Template.bind({}) +MarginTopNone.args = { + marginTop: 'none', +} + +export const MarginTopExtraSmall = Template.bind({}) +MarginTopExtraSmall.args = { + marginTop: 'xs', +} + +export const MarginTopSmall = Template.bind({}) +MarginTopSmall.args = { + marginTop: 'sm', +} + +export const MarginTopMedium = Template.bind({}) +MarginTopMedium.args = { + marginTop: 'md', +} + +export const MarginTopLarge = Template.bind({}) +MarginTopLarge.args = { + marginTop: 'lg', +} + +export const MarginTopExtraLarge = Template.bind({}) +MarginTopExtraLarge.args = { + marginTop: 'xl', +} + +export const MarginBottomNone = Template.bind({}) +MarginBottomNone.args = { + marginBottom: 'none', +} + +export const MarginBottomExtraSmall = Template.bind({}) +MarginBottomExtraSmall.args = { + marginBottom: 'xs', +} + +export const MarginBottomSmall = Template.bind({}) +MarginBottomSmall.args = { + marginBottom: 'sm', +} + +export const MarginBottomMedium = Template.bind({}) +MarginBottomMedium.args = { + marginBottom: 'md', +} + +export const MarginBottomLarge = Template.bind({}) +MarginBottomLarge.args = { + marginBottom: 'lg', +} + +export const MarginBottomExtraLarge = Template.bind({}) +MarginBottomExtraLarge.args = { + marginBottom: 'xl', +} + +export const MarginLeftNone = Template.bind({}) +MarginLeftNone.args = { + marginLeft: 'none', +} + +export const MarginLeftExtraSmall = Template.bind({}) +MarginLeftExtraSmall.args = { + marginLeft: 'xs', +} + +export const MarginLeftSmall = Template.bind({}) +MarginLeftSmall.args = { + marginLeft: 'sm', +} + +export const MarginLeftMedium = Template.bind({}) +MarginLeftMedium.args = { + marginLeft: 'md', +} + +export const MarginLeftLarge = Template.bind({}) +MarginLeftLarge.args = { + marginLeft: 'lg', +} + +export const MarginLeftExtraLarge = Template.bind({}) +MarginLeftExtraLarge.args = { + marginLeft: 'xl', +} + +export const MarginRightNone = Template.bind({}) +MarginRightNone.args = { + marginRight: 'none', +} + +export const MarginRightExtraSmall = Template.bind({}) +MarginRightExtraSmall.args = { + marginRight: 'xs', +} + +export const MarginRightSmall = Template.bind({}) +MarginRightSmall.args = { + marginRight: 'sm', +} + +export const MarginRightMedium = Template.bind({}) +MarginRightMedium.args = { + marginRight: 'md', +} + +export const MarginRightLarge = Template.bind({}) +MarginRightLarge.args = { + marginRight: 'lg', +} + +export const MarginRightExtraLarge = Template.bind({}) +MarginRightExtraLarge.args = { + marginRight: 'xl', +} diff --git a/src/stories/Margin/Margin.js b/src/stories/Margin/Margin.js new file mode 100644 index 00000000..018eda1f --- /dev/null +++ b/src/stories/Margin/Margin.js @@ -0,0 +1,39 @@ +export const createMargin = ({ + margin = '', + marginY = '', + marginX = '', + marginTop = '', + marginBottom = '', + marginLeft = '', + marginRight = '', +}) => { + const wrapper = document.createElement('div') + wrapper.style.display = 'flex' + wrapper.style.backgroundColor = 'var(--rm-color-alerts-warning-base)' + + const container = document.createElement('div') + container.style.backgroundColor = 'var(--rm-color-primary-base)' + container.style.color = 'var(--rm-color-primary-on-base)' + container.style.width = 'var(--rm-space-x-large)' + container.style.minHeight = 'var(--rm-space-x-large)' + + container.className = [ + margin ? `margin-${margin}` : '', + marginY ? `margin-y-${marginY}` : '', + marginX ? `margin-x-${marginX}` : '', + marginTop ? `margin-top-${marginTop}` : '', + marginBottom ? `margin-bottom-${marginBottom}` : '', + marginLeft ? `margin-left-${marginLeft}` : '', + marginRight ? `margin-right-${marginRight}` : '', + ] + .filter(Boolean) + .join(' ') + + if (!margin) { + wrapper.style.display = 'inline-flex' + } + + wrapper.appendChild(container) + + return wrapper +} diff --git a/src/stories/Margin/Margin.mdx b/src/stories/Margin/Margin.mdx new file mode 100644 index 00000000..71f67dc4 --- /dev/null +++ b/src/stories/Margin/Margin.mdx @@ -0,0 +1,354 @@ +import { Primary, ArgsTable, Canvas, Story } from '@storybook/addon-docs' + +# Margin + +Margin utility classes are used to add margin to an element. + +## Margin None + +`.margin-none` Set margin to 0 + + + + + +## Margin Auto + +`.margin-auto` Set margin to auto + + + + + +## Margin Extra Small + +`.margin-xs` Set margin to use the `--rm-space-xs` token + + + + + +## Margin Small + +`.margin-sm` Set margin to use the `--rm-space-sm` token + + + + + +## Margin Medium + +`.margin-md` Set margin to use the `--rm-space-md` token + + + + + +## Margin Large + +`.margin-lg` Set margin to use the `--rm-space-lg` token + + + + + +## Margin Extra Large + +`.margin-xl` Set margin to use the `--rm-space-xl` token + + + + + +## Margin Y None + +`.margin-y-none` Set top and bottom margin to 0 + + + + + +## Margin Y Extra Small + +`.margin-y-xs` Set top and bottom margin to use the `--rm-space-xs` token + + + + + +## Margin Y Small + +`.margin-y-sm` Set top and bottom margin to use the `--rm-space-sm` token + + + + + +## Margin Y Medium + +`.margin-y-md` Set top and bottom margin to use the `--rm-space-md` token + + + + + +## Margin Y Large + +`.margin-y-lg` Set top and bottom margin to use the `--rm-space-lg` token + + + + + +## Margin Y Extra Large + +`.margin-y-xl` Set top and bottom margin to use the `--rm-space-xl` token + + + + + +## Margin X None + +`.margin-x-none` Set left and right margin to 0 + + + + + +## Margin X Extra Small + +`.margin-x-xs` Set left and right margin to use the `--rm-space-xs` token + + + + + +## Margin X Small + +`.margin-x-sm` Set left and right margin to use the `--rm-space-sm` token + + + + + +## Margin X Medium + +`.margin-x-md` Set left and right margin to use the `--rm-space-md` token + + + + + +## Margin X Large + +`.margin-x-lg` Set left and right margin to use the `--rm-space-lg` token + + + + + +## Margin X Extra Large + +`.margin-x-xl` Set left and right margin to use the `--rm-space-xl` token + + + + + +## Margin Top None + +`.margin-top-none` Set top margin to 0 + + + + + +## Margin Top Extra Small + +`.margin-top-xs` Set top margin to use the `--rm-space-xs` token + + + + + +## Margin Top Small + +`.margin-top-sm` Set top margin to use the `--rm-space-sm` token + + + + + +## Margin Top Medium + +`.margin-top-md` Set top margin to use the `--rm-space-md` token + + + + + +## Margin Top Large + +`.margin-top-lg` Set top margin to use the `--rm-space-lg` token + + + + + +## Margin Top Extra Large + +`.margin-top-xl` Set top margin to use the `--rm-space-xl` token + + + + + +## Margin Bottom None + +`.margin-bottom-none` Set bottom margin to 0 + + + + + +## Margin Bottom Extra Small + +`.margin-bottom-xs` Set bottom margin to use the `--rm-space-xs` token + + + + + +## Margin Bottom Small + +`.margin-bottom-sm` Set bottom margin to use the `--rm-space-sm` token + + + + + +## Margin Bottom Medium + +`.margin-bottom-md` Set bottom margin to use the `--rm-space-md` token + + + + + +## Margin Bottom Large + +`.margin-bottom-lg` Set bottom margin to use the `--rm-space-lg` token + + + + + +## Margin Bottom Extra Large + +`.margin-bottom-xl` Set bottom margin to use the `--rm-space-xl` token + + + + + +## Margin Left None + +`.margin-left-none` Set left margin to 0 + + + + + +## Margin Left Extra Small + +`.margin-left-xs` Set left margin to use the `--rm-space-xs` token + + + + + +## Margin Left Small + +`.margin-left-sm` Set left margin to use the `--rm-space-sm` token + + + + + +## Margin Left Medium + +`.margin-left-md` Set left margin to use the `--rm-space-md` token + + + + + +## Margin Left Large + +`.margin-left-lg` Set left margin to use the `--rm-space-lg` token + + + + + +## Margin Left Extra Large + +`.margin-left-xl` Set left margin to use the `--rm-space-xl` token + + + + + +## Margin Right None + +`.margin-right-none` Set right margin to 0 + + + + + +## Margin Right Extra Small + +`.margin-right-xs` Set right margin to use the `--rm-space-xs` token + + + + + +## Margin Right Small + +`.margin-right-sm` Set right margin to use the `--rm-space-sm` token + + + + + +## Margin Right Medium + +`.margin-right-md` Set right margin to use the `--rm-space-md` token + + + + + +## Margin Right Large + +`.margin-right-lg` Set right margin to use the `--rm-space-lg` token + + + + + +## Margin Right Extra Large + +`.margin-right-xl` Set right margin to use the `--rm-space-xl` token + + + + + +## Playground + + + diff --git a/src/stories/Shadow.stories.js b/src/stories/Shadow.stories.js deleted file mode 100644 index 54308411..00000000 --- a/src/stories/Shadow.stories.js +++ /dev/null @@ -1,51 +0,0 @@ -import { createCard } from './Card/Card.js' -import ShadowDocs from './Shadow/Shadow.mdx' - -export default { - title: 'Tokens/Shadow', - argTypes: { - shadow: { - control: { type: 'select' }, - options: ['x-small', 'small', 'medium', 'large', 'x-large'], - }, - }, - parameters: { - docs: { - page: ShadowDocs, - }, - }, -} - -const Template = ({ shadow, ...args }) => { - return createCard({ padded: true, shadow, ...args }) -} - -export const XSmall = Template.bind({}) -XSmall.args = { - shadow: 'x-small', - label: 'X Small', -} - -export const Small = Template.bind({}) -Small.args = { - shadow: 'small', - label: 'Small', -} - -export const Medium = Template.bind({}) -Medium.args = { - shadow: 'medium', - label: 'Medium', -} - -export const Large = Template.bind({}) -Large.args = { - shadow: 'large', - label: 'Large', -} - -export const XLarge = Template.bind({}) -XLarge.args = { - shadow: 'x-large', - label: 'X Large', -} diff --git a/src/stories/Shadow.stories.mdx b/src/stories/Shadow.stories.mdx new file mode 100644 index 00000000..19ab7f11 --- /dev/null +++ b/src/stories/Shadow.stories.mdx @@ -0,0 +1,29 @@ +import { Meta } from '@storybook/addon-docs' +import { DesignTokenDocBlock } from 'storybook-design-token/dist/doc-blocks' +import LinkTo from '@storybook/addon-links/react' + + + +# Shadow + +Shadow tokens can be used to create an elevation effect on any element. There are also Card classes to create an elevated card effect. + +## Usage + +These tokens can be applied as box shadows. + +```css +box-shadow: var(--rm-shadow-x-small); +// or +box-shadow: var(--rm-shadow-x-large); +``` + +## Available tokens and their definitions + +### Light Mode + + + +### Dark Mode + + diff --git a/src/stories/Shadow/Shadow.js b/src/stories/Shadow/Shadow.js deleted file mode 100644 index 60be2922..00000000 --- a/src/stories/Shadow/Shadow.js +++ /dev/null @@ -1,7 +0,0 @@ -export const createShadow = ({ size = 'medium' }) => { - const shadowElement = document.createElement('div') - shadowElement.innerText = size - shadowElement.className = `card-padded shadow-${size}` - - return shadowElement -} diff --git a/src/stories/Shadow/Shadow.mdx b/src/stories/Shadow/Shadow.mdx deleted file mode 100644 index a14ff518..00000000 --- a/src/stories/Shadow/Shadow.mdx +++ /dev/null @@ -1,33 +0,0 @@ -import { Primary, ArgsTable, Canvas, Story } from '@storybook/addon-docs' -import LinkTo from '@storybook/addon-links/react' - -# Shadow - -Shadow tokens can be used to create an elevation effect on any element. There are also Card classes to create an elevated card effect. - -## Usage - -These tokens can be applied as box shadows. - -```css -box-shadow: var(--rm-shadow-x-small); -// or -box-shadow: var(--rm-shadow-x-large); -``` - -## Available tokens and their definitions - - -```css ---rm-shadow-x-small: 0px 1px 2px hsla(0, 0%, 0%, 0.3), 0px 1px 3px hsla(0, 0%, 0%, 0.15); ---rm-shadow-small: 0px 1px 2px hsla(0, 0%, 0%, 0.3), 0px 2px 6px hsla(0, 0%, 0%, 0.15); ---rm-shadow-medium: 0px 4px 8px hsla(0, 0%, 0%, 0.15), 0px 1px 3px hsla(0, 0%, 0%, 0.3); ---rm-shadow-large: 0px 6px 10px hsla(0, 0%, 0%, 0.15), 0px 2px 3px hsla(0, 0%, 0%, 0.3); ---rm-shadow-x-large: 0px 8px 12px hsla(0, 0%, 0%, 0.15), 0px 4px 4px hsla(0, 0%, 0%, 0.3); -``` - - -## Playground - - - diff --git a/src/stories/Spacing.stories.mdx b/src/stories/Spacing.stories.mdx new file mode 100644 index 00000000..3f8ed60c --- /dev/null +++ b/src/stories/Spacing.stories.mdx @@ -0,0 +1,29 @@ +import { Meta } from '@storybook/addon-docs' +import { DesignTokenDocBlock } from 'storybook-design-token/dist/doc-blocks' +import LinkTo from '@storybook/addon-links/react' + + + +# Spacing Size + +Spacing Size tokens can be used for a wide variety of cases. The can be used for margin, padding, width, height, gap, and anything else that uses pixel values. + +## Usage + +These tokens can be applied like: + +```css +margin-left: var(--rm-space-small); +/* Or */ +padding-top: var(--rm-space-medium); +/* Or */ +gap: var(--rm-space-large); +/* Or */ +width: var(--rm-space-4x-large); +``` + +## Available tokens and their definitions + + + +The scale unit is also defined and can be used for scale overriding diff --git a/src/stories/TextAlignment.stories.js b/src/stories/TextAlignment.stories.js new file mode 100644 index 00000000..99664414 --- /dev/null +++ b/src/stories/TextAlignment.stories.js @@ -0,0 +1,41 @@ +import { createTextAlignment } from './TextAlignment/TextAlignment.js' +import TextAlignmentDocs from './TextAlignment/TextAlignment.mdx' + +export default { + title: 'Utilities/Text Alignment', + argTypes: { + alignment: { + control: { type: 'select' }, + options: ['left', 'center', 'right', 'justify'], + }, + }, + parameters: { + docs: { + page: TextAlignmentDocs, + }, + }, +} + +const Template = ({ alignment, ...args }) => { + return createTextAlignment({ alignment, ...args }) +} + +export const Left = Template.bind({}) +Left.args = { + alignment: 'left', +} + +export const Center = Template.bind({}) +Center.args = { + alignment: 'center', +} + +export const Right = Template.bind({}) +Right.args = { + alignment: 'right', +} + +export const Justify = Template.bind({}) +Justify.args = { + alignment: 'justify', +} diff --git a/src/stories/TextAlignment/TextAlignment.js b/src/stories/TextAlignment/TextAlignment.js new file mode 100644 index 00000000..7045c1f7 --- /dev/null +++ b/src/stories/TextAlignment/TextAlignment.js @@ -0,0 +1,7 @@ +export const createTextAlignment = ({ alignment = 'left' }) => { + const element = document.createElement('div') + element.innerText = alignment + element.className = `text-${alignment}` + + return element +} diff --git a/src/stories/TextAlignment/TextAlignment.mdx b/src/stories/TextAlignment/TextAlignment.mdx new file mode 100644 index 00000000..c9d89cd7 --- /dev/null +++ b/src/stories/TextAlignment/TextAlignment.mdx @@ -0,0 +1,42 @@ +import { Primary, ArgsTable, Canvas, Story } from '@storybook/addon-docs' + +# Text Alignment + +Text Alignment utility classes can be used to align text in an element. + +## Left + +`.text-left` The inline contents are aligned to the left edge of the line box. Left is the default for most text so this is primarily for overriding alternate behavior. + + + + + +## Center + +`.text-center` The inline contents are centered within the line box. + + + + + +## Right + +`.text-right` The inline contents are aligned to the right edge of the line box. + + + + + +## Justify + +`.text-justify` The inline contents are justified. Text should be spaced to line up its left and right edges to the left and right edges of the line box, except for the last line. + + + + + +## Playground + + + diff --git a/src/stories/Transition/Transition.mdx b/src/stories/Transition/Transition.mdx index eb966be2..71913b2f 100644 --- a/src/stories/Transition/Transition.mdx +++ b/src/stories/Transition/Transition.mdx @@ -1,4 +1,5 @@ -import { Primary, ArgsTable, Canvas, Story } from '@storybook/addon-docs' +import { Primary, ArgsTable } from '@storybook/addon-docs' +import { DesignTokenDocBlock } from 'storybook-design-token/dist/doc-blocks' # Transition @@ -16,16 +17,7 @@ animation-duration: var(--rm-transition-input); ## Available tokens and their definitions - -```css ---rm-transition-input: 120ms; ---rm-transition-navigation: 200ms; ---rm-transition-sidebar: 300ms; ---rm-transition-modal: 300ms; ---rm-transition-panel: 400ms; ---rm-transition-flash: 5s; -``` - + ## Playground diff --git a/src/stories/ZIndex.stories.mdx b/src/stories/ZIndex.stories.mdx new file mode 100644 index 00000000..6aec7afd --- /dev/null +++ b/src/stories/ZIndex.stories.mdx @@ -0,0 +1,18 @@ +import { Meta } from '@storybook/addon-docs' +import { DesignTokenDocBlock } from 'storybook-design-token/dist/doc-blocks' + + + +# Z-Index + +Z-Index tokens can be used to define the page z-index of an element. + +## Usage + +```css +z-index: var(--rm-z-index-header); +``` + +## Available tokens and their definitions + + diff --git a/src/stories/helpers/utils.js b/src/stories/helpers/utils.js new file mode 100644 index 00000000..e7e144b7 --- /dev/null +++ b/src/stories/helpers/utils.js @@ -0,0 +1,9 @@ +export const createChildren = (element, count) => { + Array.from(Array(count)).forEach((_, _i) => { + const box = document.createElement('div') + box.style.width = 'var(--rm-space-x-large)' + box.style.minHeight = 'var(--rm-space-x-large)' + box.style.backgroundColor = 'var(--rm-color-primary-original)' + element.appendChild(box) + }) +}
First Line
Line Height Demo using: ${lineHeightStyle}
Second Line