diff --git a/sanityv3/colorConfig.js b/sanityv3/colorConfig.js new file mode 100644 index 000000000..379a1cea1 --- /dev/null +++ b/sanityv3/colorConfig.js @@ -0,0 +1,32 @@ +//IMPORTANT +// Keep web/colorConfig in sync with this +export default { + white: { + 100: 'hsl(0, 0%, 100%)', + }, + 'moss-green': { + //moss-green-light + 50: 'hsl(184, 30%, 96%)', + }, + 'spruce-wood': { + 90: 'hsl(25, 100%, 94%)', + }, + 'energy-red': { + 100: 'hsl(348, 100%, 54%)', + }, + 'mist-blue': { + 100: 'hsl(199, 58%, 90%)', + }, + green: { + 50: '#c3e4ce', + }, + yellow: { + 50: '#fff5b8', + }, + blue: { + 50: '#49709c', + }, + orange: { + 50: '#f8d1af', + }, +} diff --git a/sanityv3/pnpm-lock.yaml b/sanityv3/pnpm-lock.yaml index d8dd51d84..afc152af7 100644 --- a/sanityv3/pnpm-lock.yaml +++ b/sanityv3/pnpm-lock.yaml @@ -1,9 +1,5 @@ lockfileVersion: '6.0' -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - dependencies: '@equinor/eds-icons': specifier: ^0.17.0 @@ -22,7 +18,7 @@ dependencies: version: 1.2.4(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0)(sanity@3.21.1)(typescript@4.0.2) '@sanity/document-internationalization': specifier: ^1.1.1 - version: 1.1.1(lodash@4.17.21)(react-dom@18.2.0)(react-is@18.2.0)(react-router-dom@5.3.4)(react-router@5.3.4)(react@18.2.0)(rxjs@7.8.0)(sanity@3.21.1)(styled-components@5.3.6) + version: 1.1.1(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0)(rxjs@7.8.0)(sanity@3.21.1)(styled-components@5.3.6) '@sanity/icons': specifier: ^2.3.1 version: 2.3.1(react@18.2.0) @@ -37,7 +33,7 @@ dependencies: version: 3.0.2 '@sanity/vision': specifier: ^3.19.1 - version: 3.19.1(@babel/runtime@7.23.2)(@codemirror/lint@6.4.2)(@codemirror/state@6.3.1)(@codemirror/theme-one-dark@6.1.2)(@lezer/common@1.1.0)(codemirror@6.0.1)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0)(styled-components@5.3.6) + version: 3.19.1(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0)(styled-components@5.3.6) buffer: specifier: ^6.0.3 version: 6.0.3 @@ -160,7 +156,7 @@ packages: '@babel/traverse': 7.23.0 '@babel/types': 7.23.0 convert-source-map: 2.0.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -183,7 +179,7 @@ packages: '@babel/traverse': 7.23.6 '@babel/types': 7.23.6 convert-source-map: 2.0.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -326,7 +322,7 @@ packages: '@babel/core': 7.23.0 '@babel/helper-compilation-targets': 7.22.15 '@babel/helper-plugin-utils': 7.22.5 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 lodash.debounce: 4.0.8 resolve: 1.22.2 transitivePeerDependencies: @@ -1577,7 +1573,6 @@ packages: engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.0 - dev: false /@babel/template@7.22.15: resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} @@ -1626,7 +1621,7 @@ packages: '@babel/helper-split-export-declaration': 7.22.6 '@babel/parser': 7.23.0 '@babel/types': 7.23.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -1644,7 +1639,7 @@ packages: '@babel/helper-split-export-declaration': 7.22.6 '@babel/parser': 7.23.6 '@babel/types': 7.23.6 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -1675,13 +1670,8 @@ packages: to-fast-properties: 2.0.0 dev: false - /@codemirror/autocomplete@6.10.2(@codemirror/language@6.9.2)(@codemirror/state@6.3.1)(@codemirror/view@6.22.0)(@lezer/common@1.1.0): + /@codemirror/autocomplete@6.10.2: resolution: {integrity: sha512-3dCL7b0j2GdtZzWN5j7HDpRAJ26ip07R4NGYz7QYthIYMiX8I4E4TNrYcdTayPJGeVQtd/xe7lWU4XL7THFb/w==} - peerDependencies: - '@codemirror/language': ^6.0.0 - '@codemirror/state': ^6.0.0 - '@codemirror/view': ^6.0.0 - '@lezer/common': ^1.0.0 dependencies: '@codemirror/language': 6.9.2 '@codemirror/state': 6.3.1 @@ -1701,7 +1691,7 @@ packages: /@codemirror/lang-javascript@6.2.1: resolution: {integrity: sha512-jlFOXTejVyiQCW3EQwvKH0m99bUYIw40oPmFjSX2VS78yzfe0HELZ+NEo9Yfo1MkGRpGlj3Gnu4rdxV1EnAs5A==} dependencies: - '@codemirror/autocomplete': 6.10.2(@codemirror/language@6.9.2)(@codemirror/state@6.3.1)(@codemirror/view@6.22.0)(@lezer/common@1.1.0) + '@codemirror/autocomplete': 6.10.2 '@codemirror/language': 6.9.2 '@codemirror/lint': 6.4.2 '@codemirror/state': 6.3.1 @@ -1829,7 +1819,7 @@ packages: resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==} dependencies: '@babel/helper-module-imports': 7.22.5 - '@babel/runtime': 7.22.6 + '@babel/runtime': 7.23.2 '@emotion/hash': 0.9.1 '@emotion/memoize': 0.8.1 '@emotion/serialize': 1.1.2 @@ -1888,7 +1878,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.22.6 + '@babel/runtime': 7.23.2 '@emotion/babel-plugin': 11.11.0 '@emotion/cache': 11.11.0 '@emotion/serialize': 1.1.2 @@ -2363,7 +2353,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 espree: 9.5.2 globals: 13.20.0 ignore: 5.2.4 @@ -2420,7 +2410,7 @@ packages: engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 1.2.1 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -2824,7 +2814,7 @@ packages: '@sanity/diff-match-patch': 3.1.1 dev: false - /@sanity/document-internationalization@1.1.1(lodash@4.17.21)(react-dom@18.2.0)(react-is@18.2.0)(react-router-dom@5.3.4)(react-router@5.3.4)(react@18.2.0)(rxjs@7.8.0)(sanity@3.21.1)(styled-components@5.3.6): + /@sanity/document-internationalization@1.1.1(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0)(rxjs@7.8.0)(sanity@3.21.1)(styled-components@5.3.6): resolution: {integrity: sha512-8NQG7fPKr9LkwE2T/3ROjo7q4ZSYDQ0TNeNxCL2ZhW4JmJVNBUlVHnbf3hTlx0ZOFWNiaKV72ulAm66xZnYnzg==} engines: {node: '>=14'} peerDependencies: @@ -2847,13 +2837,10 @@ packages: just-omit: 2.2.0 just-safe-get: 4.2.0 just-split: 3.2.0 - lodash: 4.17.21 pinst: 2.1.6 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-fast-compare: 3.2.2 - react-router: 5.3.4(react@18.2.0) - react-router-dom: 5.3.4(react@18.2.0) react-twemoji: 0.5.0(react@18.2.0) rxjs: 7.8.0 sanity: 3.21.1(@types/react@18.0.9)(react-dom@18.2.0)(react@18.2.0)(styled-components@5.3.6) @@ -3112,7 +3099,7 @@ packages: '@vvo/tzdb': 6.108.0 date-fns: 2.30.0 date-fns-tz: 2.0.0(date-fns@2.30.0) - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 lodash: 4.17.21 pluralize: 8.0.0 react: 18.2.0 @@ -3312,13 +3299,13 @@ packages: uuid: 8.3.2 dev: false - /@sanity/vision@3.19.1(@babel/runtime@7.23.2)(@codemirror/lint@6.4.2)(@codemirror/state@6.3.1)(@codemirror/theme-one-dark@6.1.2)(@lezer/common@1.1.0)(codemirror@6.0.1)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0)(styled-components@5.3.6): + /@sanity/vision@3.19.1(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0)(styled-components@5.3.6): resolution: {integrity: sha512-LlzY4MbrL0BGx5BLzJ/+axZQl0Z+0Ia5DookM/cA7rR1MDDDZJzWDWs6xbjf9bWVvABYrG4QXHr1Vj3q8EymkQ==} peerDependencies: react: ^18 styled-components: ^5.2 || ^6 dependencies: - '@codemirror/autocomplete': 6.10.2(@codemirror/language@6.9.2)(@codemirror/state@6.3.1)(@codemirror/view@6.22.0)(@lezer/common@1.1.0) + '@codemirror/autocomplete': 6.10.2 '@codemirror/commands': 6.3.0 '@codemirror/lang-javascript': 6.2.1 '@codemirror/language': 6.9.2 @@ -3331,7 +3318,7 @@ packages: '@sanity/color': 2.2.5 '@sanity/icons': 2.7.0(react@18.2.0) '@sanity/ui': 1.8.3(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0)(styled-components@5.3.6) - '@uiw/react-codemirror': 4.21.20(@babel/runtime@7.23.2)(@codemirror/autocomplete@6.10.2)(@codemirror/language@6.9.2)(@codemirror/lint@6.4.2)(@codemirror/search@6.5.4)(@codemirror/state@6.3.1)(@codemirror/theme-one-dark@6.1.2)(@codemirror/view@6.22.0)(codemirror@6.0.1)(react-dom@18.2.0)(react@18.2.0) + '@uiw/react-codemirror': 4.21.20(@codemirror/autocomplete@6.10.2)(@codemirror/language@6.9.2)(@codemirror/search@6.5.4)(@codemirror/view@6.22.0)(react-dom@18.2.0)(react@18.2.0) hashlru: 2.3.0 is-hotkey: 0.1.8 json5: 2.2.3 @@ -3339,12 +3326,6 @@ packages: react: 18.2.0 styled-components: 5.3.6(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) transitivePeerDependencies: - - '@babel/runtime' - - '@codemirror/lint' - - '@codemirror/state' - - '@codemirror/theme-one-dark' - - '@lezer/common' - - codemirror - react-dom - react-is dev: false @@ -3358,7 +3339,7 @@ packages: conventional-changelog-angular: 7.0.0 conventional-commits-filter: 4.0.0 conventional-commits-parser: 5.0.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 import-from: 4.0.0 lodash-es: 4.17.21 micromatch: 4.0.5 @@ -3384,7 +3365,7 @@ packages: '@octokit/plugin-throttling': 8.1.2(@octokit/core@5.0.1) '@semantic-release/error': 4.0.0 aggregate-error: 5.0.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 dir-glob: 3.0.1 globby: 13.2.2 http-proxy-agent: 7.0.0 @@ -3431,7 +3412,7 @@ packages: conventional-changelog-writer: 7.0.1 conventional-commits-filter: 4.0.0 conventional-commits-parser: 5.0.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 get-stream: 7.0.1 import-from: 4.0.0 into-stream: 7.0.0 @@ -3670,7 +3651,7 @@ packages: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/type-utils': 5.62.0(eslint@8.6.0)(typescript@4.0.2) '@typescript-eslint/utils': 5.62.0(eslint@8.6.0)(typescript@4.0.2) - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 eslint: 8.6.0 graphemer: 1.4.0 ignore: 5.2.4 @@ -3695,7 +3676,7 @@ packages: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.0.2) - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 eslint: 8.6.0 typescript: 4.0.2 transitivePeerDependencies: @@ -3722,7 +3703,7 @@ packages: dependencies: '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.0.2) '@typescript-eslint/utils': 5.62.0(eslint@8.6.0)(typescript@4.0.2) - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 eslint: 8.6.0 tsutils: 3.21.0(typescript@4.0.2) typescript: 4.0.2 @@ -3746,7 +3727,7 @@ packages: dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.2 @@ -3784,18 +3765,16 @@ packages: eslint-visitor-keys: 3.4.1 dev: true - /@uiw/codemirror-extensions-basic-setup@4.21.20(@codemirror/autocomplete@6.10.2)(@codemirror/commands@6.3.0)(@codemirror/language@6.9.2)(@codemirror/lint@6.4.2)(@codemirror/search@6.5.4)(@codemirror/state@6.3.1)(@codemirror/view@6.22.0): + /@uiw/codemirror-extensions-basic-setup@4.21.20(@codemirror/autocomplete@6.10.2)(@codemirror/commands@6.3.0)(@codemirror/language@6.9.2)(@codemirror/search@6.5.4)(@codemirror/view@6.22.0): resolution: {integrity: sha512-Wyi9q4uw0xGYd/tJ6bULG7tkCLqcUsQT0AQBfCDtnkV3LdiLU0LceTrzJoHJyIKSHsKDJxFQxa1qg3QLt4gIUA==} peerDependencies: '@codemirror/autocomplete': '>=6.0.0' '@codemirror/commands': '>=6.0.0' '@codemirror/language': '>=6.0.0' - '@codemirror/lint': '>=6.0.0' '@codemirror/search': '>=6.0.0' - '@codemirror/state': '>=6.0.0' '@codemirror/view': '>=6.0.0' dependencies: - '@codemirror/autocomplete': 6.10.2(@codemirror/language@6.9.2)(@codemirror/state@6.3.1)(@codemirror/view@6.22.0)(@lezer/common@1.1.0) + '@codemirror/autocomplete': 6.10.2 '@codemirror/commands': 6.3.0 '@codemirror/language': 6.9.2 '@codemirror/lint': 6.4.2 @@ -3804,14 +3783,10 @@ packages: '@codemirror/view': 6.22.0 dev: false - /@uiw/react-codemirror@4.21.20(@babel/runtime@7.23.2)(@codemirror/autocomplete@6.10.2)(@codemirror/language@6.9.2)(@codemirror/lint@6.4.2)(@codemirror/search@6.5.4)(@codemirror/state@6.3.1)(@codemirror/theme-one-dark@6.1.2)(@codemirror/view@6.22.0)(codemirror@6.0.1)(react-dom@18.2.0)(react@18.2.0): + /@uiw/react-codemirror@4.21.20(@codemirror/autocomplete@6.10.2)(@codemirror/language@6.9.2)(@codemirror/search@6.5.4)(@codemirror/view@6.22.0)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-PdyewPvNXnvT3JHj888yjpbWsAGw5qlxW6w1sMdsqJ0R6vPV++ob1iZXCGrM1FVpbqPK0DNfpXvjzp2gIr3lYw==} peerDependencies: - '@babel/runtime': '>=7.11.0' - '@codemirror/state': '>=6.0.0' - '@codemirror/theme-one-dark': '>=6.0.0' '@codemirror/view': '>=6.0.0' - codemirror: '>=6.0.0' react: '>=16.8.0' react-dom: '>=16.8.0' dependencies: @@ -3820,14 +3795,13 @@ packages: '@codemirror/state': 6.3.1 '@codemirror/theme-one-dark': 6.1.2 '@codemirror/view': 6.22.0 - '@uiw/codemirror-extensions-basic-setup': 4.21.20(@codemirror/autocomplete@6.10.2)(@codemirror/commands@6.3.0)(@codemirror/language@6.9.2)(@codemirror/lint@6.4.2)(@codemirror/search@6.5.4)(@codemirror/state@6.3.1)(@codemirror/view@6.22.0) - codemirror: 6.0.1(@lezer/common@1.1.0) + '@uiw/codemirror-extensions-basic-setup': 4.21.20(@codemirror/autocomplete@6.10.2)(@codemirror/commands@6.3.0)(@codemirror/language@6.9.2)(@codemirror/search@6.5.4)(@codemirror/view@6.22.0) + codemirror: 6.0.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: - '@codemirror/autocomplete' - '@codemirror/language' - - '@codemirror/lint' - '@codemirror/search' dev: false @@ -3904,7 +3878,7 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} dependencies: - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 transitivePeerDependencies: - supports-color dev: false @@ -3913,7 +3887,7 @@ packages: resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} engines: {node: '>= 14'} dependencies: - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 transitivePeerDependencies: - supports-color dev: false @@ -4129,7 +4103,7 @@ packages: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} engines: {node: '>=10', npm: '>=6'} dependencies: - '@babel/runtime': 7.22.6 + '@babel/runtime': 7.23.2 cosmiconfig: 7.1.0 resolve: 1.22.2 dev: false @@ -4421,18 +4395,16 @@ packages: wrap-ansi: 7.0.0 dev: false - /codemirror@6.0.1(@lezer/common@1.1.0): + /codemirror@6.0.1: resolution: {integrity: sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg==} dependencies: - '@codemirror/autocomplete': 6.10.2(@codemirror/language@6.9.2)(@codemirror/state@6.3.1)(@codemirror/view@6.22.0)(@lezer/common@1.1.0) + '@codemirror/autocomplete': 6.10.2 '@codemirror/commands': 6.3.0 '@codemirror/language': 6.9.2 '@codemirror/lint': 6.4.2 '@codemirror/search': 6.5.4 '@codemirror/state': 6.3.1 '@codemirror/view': 6.22.0 - transitivePeerDependencies: - - '@lezer/common' dev: false /color-convert@1.9.3: @@ -4779,6 +4751,17 @@ packages: ms: 2.1.3 dev: false + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + /debug@4.3.4(supports-color@5.5.0): resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} @@ -4790,6 +4773,7 @@ packages: dependencies: ms: 2.1.2 supports-color: 5.5.0 + dev: false /decimal.js@10.4.3: resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} @@ -4874,7 +4858,7 @@ packages: /dom-helpers@5.2.1: resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} dependencies: - '@babel/runtime': 7.22.6 + '@babel/runtime': 7.23.2 csstype: 3.1.2 dev: false @@ -5087,7 +5071,7 @@ packages: peerDependencies: esbuild: '>=0.12 <1' dependencies: - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 esbuild: 0.19.9 transitivePeerDependencies: - supports-color @@ -5286,7 +5270,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 doctrine: 3.0.0 enquirer: 2.3.6 escape-string-regexp: 4.0.0 @@ -5583,7 +5567,7 @@ packages: debug: optional: true dependencies: - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 dev: false /for-each@0.3.3: @@ -5772,7 +5756,7 @@ packages: resolution: {integrity: sha512-Pu3pnJfnYuLEhwJgMlFqk19ugvtazzTxh7rg8wATaBL4c5Fy4ahM5B+bGdluiNSNYYK89F5vSa+N3sTa/qqtlg==} engines: {node: '>=14.0.0'} dependencies: - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 decompress-response: 7.0.0 follow-redirects: 1.15.3(debug@4.3.4) into-stream: 6.0.0 @@ -6061,17 +6045,6 @@ packages: space-separated-tokens: 1.1.5 dev: false - /history@4.10.1: - resolution: {integrity: sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==} - dependencies: - '@babel/runtime': 7.23.2 - loose-envify: 1.4.0 - resolve-pathname: 3.0.0 - tiny-invariant: 1.3.1 - tiny-warning: 1.0.3 - value-equal: 1.0.1 - dev: false - /history@5.3.0: resolution: {integrity: sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==} dependencies: @@ -6150,7 +6123,7 @@ packages: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 transitivePeerDependencies: - supports-color dev: false @@ -6160,7 +6133,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 transitivePeerDependencies: - supports-color dev: false @@ -6170,7 +6143,7 @@ packages: engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 transitivePeerDependencies: - supports-color dev: false @@ -6180,7 +6153,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 transitivePeerDependencies: - supports-color dev: false @@ -7560,12 +7533,6 @@ packages: /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - /path-to-regexp@1.8.0: - resolution: {integrity: sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==} - dependencies: - isarray: 0.0.1 - dev: false - /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -7777,7 +7744,7 @@ packages: peerDependencies: react: ^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 dependencies: - '@babel/runtime': 7.22.6 + '@babel/runtime': 7.23.2 react: 18.2.0 dev: false @@ -7955,38 +7922,6 @@ packages: engines: {node: '>=0.10.0'} dev: false - /react-router-dom@5.3.4(react@18.2.0): - resolution: {integrity: sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==} - peerDependencies: - react: '>=15' - dependencies: - '@babel/runtime': 7.23.2 - history: 4.10.1 - loose-envify: 1.4.0 - prop-types: 15.8.1 - react: 18.2.0 - react-router: 5.3.4(react@18.2.0) - tiny-invariant: 1.3.1 - tiny-warning: 1.0.3 - dev: false - - /react-router@5.3.4(react@18.2.0): - resolution: {integrity: sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==} - peerDependencies: - react: '>=15' - dependencies: - '@babel/runtime': 7.23.2 - history: 4.10.1 - hoist-non-react-statics: 3.3.2 - loose-envify: 1.4.0 - path-to-regexp: 1.8.0 - prop-types: 15.8.1 - react: 18.2.0 - react-is: 16.13.1 - tiny-invariant: 1.3.1 - tiny-warning: 1.0.3 - dev: false - /react-rx@2.1.3(react@18.2.0)(rxjs@7.8.0): resolution: {integrity: sha512-4dppkgEFAldr75IUUz14WyxuI2cJhpXYrrIM+4gvG6slKzaMUCmcgiiykx9Hst0UmtwNt247nRoOFDmN0Q7GJw==} peerDependencies: @@ -8032,7 +7967,7 @@ packages: react: '>=16.6.0' react-dom: '>=16.6.0' dependencies: - '@babel/runtime': 7.22.6 + '@babel/runtime': 7.23.2 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -8241,7 +8176,7 @@ packages: /regenerator-transform@0.15.2: resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} dependencies: - '@babel/runtime': 7.22.10 + '@babel/runtime': 7.23.2 dev: true /regexp.prototype.flags@1.5.0: @@ -8306,10 +8241,6 @@ packages: engines: {node: '>=8'} dev: false - /resolve-pathname@3.0.0: - resolution: {integrity: sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==} - dev: false - /resolve@1.22.2: resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} hasBin: true @@ -8673,7 +8604,7 @@ packages: '@semantic-release/release-notes-generator': 12.0.0(semantic-release@22.0.6) aggregate-error: 5.0.0 cosmiconfig: 8.3.6(typescript@4.0.2) - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 env-ci: 10.0.0 execa: 8.0.1 figures: 6.0.1 @@ -9577,10 +9508,6 @@ packages: spdx-expression-parse: 3.0.1 dev: false - /value-equal@1.0.1: - resolution: {integrity: sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==} - dev: false - /vite@4.5.0: resolution: {integrity: sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==} engines: {node: ^14.18.0 || >=16.0.0} @@ -9808,3 +9735,7 @@ packages: /zod@3.22.2: resolution: {integrity: sha512-wvWkphh5WQsJbVk1tbx1l1Ly4yg+XecD+Mq280uBGt9wa5BKSWf4Mhp6GmrkPixhMxmabYY7RbzlwVP32pbGCg==} dev: false + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false diff --git a/sanityv3/schemas/components/ColorSelector/ColorSelector.tsx b/sanityv3/schemas/components/ColorSelector/ColorSelector.tsx index 9a8042086..61aa58c08 100644 --- a/sanityv3/schemas/components/ColorSelector/ColorSelector.tsx +++ b/sanityv3/schemas/components/ColorSelector/ColorSelector.tsx @@ -3,7 +3,7 @@ import { useCallback } from 'react' import { set } from 'sanity' import type { ObjectInputProps } from 'sanity' import styled from 'styled-components' -import { defaultColors } from './defaultColors' +import { defaultColors } from '../../defaultColors' const Circle = styled.div<{ active: boolean }>` display: inline-block; @@ -23,6 +23,9 @@ const InnerCircle = styled.div<{ color: string }>` export type ColorSelectorValue = { title: string value: string + dark?: boolean + key?: string + onlyTextColor?: boolean } type ColorCircleProps = { @@ -64,6 +67,8 @@ export const ColorSelector = ({ value, onChange, schemaType }: ColorSelectorProp onChange(set(selected.title, ['title'])) onChange(set(selected.value, ['value'])) + onChange(set(selected.dark, ['dark'])) + onChange(set(selected.key, ['key'])) }, [onChange, value], ) @@ -73,16 +78,18 @@ export const ColorSelector = ({ value, onChange, schemaType }: ColorSelectorProp {colors && ( - {colors.map((colorItem: ColorSelectorValue) => { - return ( - - ) - })} + {colors + .filter((colorItem: ColorSelectorValue) => !colorItem?.onlyTextColor) + .map((colorItem: ColorSelectorValue) => { + return ( + + ) + })} )} diff --git a/sanityv3/schemas/components/ColorSelector/defaultColors.ts b/sanityv3/schemas/components/ColorSelector/defaultColors.ts deleted file mode 100644 index d41f2cec2..000000000 --- a/sanityv3/schemas/components/ColorSelector/defaultColors.ts +++ /dev/null @@ -1,12 +0,0 @@ -export const defaultColors = [ - { title: 'White', value: 'hsl(0, 0%, 100%)' }, - //{ title: 'Moss Green', value: 'hsl(184, 31%, 74%)' }, - { title: 'Moss Green Light', value: 'hsl(184, 30%, 96%)' }, - { title: 'Spruce Wood', value: 'hsl(25, 100%, 94%)' }, - { title: 'Mist Blue', value: 'hsl(199, 58%, 90%)' }, - // { title: 'Slate Blue', value: 'hsl(206, 34%, 14%)' }, - { title: 'Mid Yellow', value: '#FFF5B8' }, - { title: 'Mid Orange', value: '#F8D1AF' }, - { title: 'Mid Blue', value: '#49709C' }, - { title: 'Mid Green', value: '#C3E4CE' }, -] diff --git a/sanityv3/schemas/components/ColorSelector/index.ts b/sanityv3/schemas/components/ColorSelector/index.ts index 796008274..38cabdfb6 100644 --- a/sanityv3/schemas/components/ColorSelector/index.ts +++ b/sanityv3/schemas/components/ColorSelector/index.ts @@ -1,2 +1 @@ export * from './ColorSelector' -export * from './defaultColors' diff --git a/sanityv3/schemas/components/ThemeSelector/ThemeSelector.tsx b/sanityv3/schemas/components/ThemeSelector/ThemeSelector.tsx index fbf6c6d53..e854181c2 100644 --- a/sanityv3/schemas/components/ThemeSelector/ThemeSelector.tsx +++ b/sanityv3/schemas/components/ThemeSelector/ThemeSelector.tsx @@ -3,7 +3,7 @@ import { useCallback } from 'react' import { set } from 'sanity' import type { ObjectInputProps } from 'sanity' import styled from 'styled-components' -import { defaultColors, getColorForTheme } from './defaultColors' +import { themeColors, getColorForTheme } from './themeColors' import { EdsIcon } from '../../../icons' import { text_field } from '@equinor/eds-icons' @@ -52,7 +52,7 @@ const ColorCircle = ({ color, active, onClickHandler }: ColorCircleProps) => { portal > onClickHandler(color)}> - + @@ -65,7 +65,7 @@ type ThemeSelectorProps = ObjectInputProps export const ThemeSelector = ({ value, onChange, schemaType }: ThemeSelectorProps) => { const { options } = schemaType - const colors = (options?.colors as ThemeSelectorValue[]) || defaultColors + const colors = (options?.colors as ThemeSelectorValue[]) || themeColors const handleSelect = useCallback( (selected: ThemeSelectorValue) => { @@ -86,7 +86,7 @@ export const ThemeSelector = ({ value, onChange, schemaType }: ThemeSelectorProp const { background } = getColorForTheme(colorItem.value) return ( { - switch (pattern) { - case 1: - return { background: 'hsl(184, 30%, 96%)', highlight: 'hsl(348, 100%, 54%)' } - case 2: - return { background: 'hsl(25, 100%, 94%)', highlight: 'hsl(348, 100%, 54%)' } - case 3: - return { background: 'hsl(199, 58%, 90%)', highlight: 'hsl(348, 100%, 54%)' } - case 4: - return { background: '#FFF5B8', highlight: 'hsl(348, 100%, 54%)' } - case 5: - return { background: '#F8D1AF', highlight: 'hsl(348, 100%, 54%)' } - case 6: - return { background: '#49709C', highlight: '#F8D1AF' } - case 7: - return { background: '#49709C', highlight: '#FFF5B8' } - case 8: - return { background: '#C3E4CE', highlight: 'hsl(348, 100%, 54%)' } - - case 0: - default: - return { background: 'hsl(0, 0%, 100%)', highlight: 'hsl(348, 100%, 54%)' } - } -} diff --git a/sanityv3/schemas/components/ThemeSelector/index.ts b/sanityv3/schemas/components/ThemeSelector/index.ts index 943f0fb99..88981a532 100644 --- a/sanityv3/schemas/components/ThemeSelector/index.ts +++ b/sanityv3/schemas/components/ThemeSelector/index.ts @@ -1,2 +1,2 @@ export * from './ThemeSelector' -export * from './defaultColors' +export * from './themeColors' diff --git a/sanityv3/schemas/components/ThemeSelector/themeColors.ts b/sanityv3/schemas/components/ThemeSelector/themeColors.ts new file mode 100644 index 000000000..77c1f178a --- /dev/null +++ b/sanityv3/schemas/components/ThemeSelector/themeColors.ts @@ -0,0 +1,121 @@ +import { defaultColors } from '../../defaultColors' + +//Keep in sync with web/pageComponents/shared/textTeaser/theme +export const themeColors = [ + { title: 'White', value: 0 }, + { title: 'Moss Green Light', value: 1 }, + { title: 'Spruce Wood', value: 2 }, + { title: 'Mist Blue', value: 3 }, + { title: 'Mid Yellow', value: 4 }, + { title: 'Mid Orange', value: 5 }, + { title: 'Mid Blue 1', value: 6 }, + { title: 'Mid Blue 2', value: 7 }, + { title: 'Mid Green', value: 8 }, +] + +//Keep in sync with web/pageComponents/shared/textTeaser/theme +export const getColorForTheme = (pattern: number) => { + switch (pattern) { + case 1: + return { + background: { + value: defaultColors[1].value, + key: defaultColors[1].key, + }, + highlight: { + value: defaultColors[8].value, + key: defaultColors[8].key, + }, + } + case 2: + return { + background: { + value: defaultColors[2].value, + key: defaultColors[2].key, + }, + highlight: { + value: defaultColors[8].value, + key: defaultColors[8].key, + }, + } + case 3: + return { + background: { + value: defaultColors[3].value, + key: defaultColors[3].key, + }, + highlight: { + value: defaultColors[8].value, + key: defaultColors[8].key, + }, + } + case 4: + return { + background: { + value: defaultColors[4].value, + key: defaultColors[4].key, + }, + highlight: { + value: defaultColors[8].value, + key: defaultColors[8].key, + }, + } + case 5: + return { + background: { + value: defaultColors[5].value, + key: defaultColors[5].key, + }, + highlight: { + value: defaultColors[8].value, + key: defaultColors[8].key, + }, + } + case 6: + return { + background: { + value: defaultColors[6].value, + key: defaultColors[6].key, + }, + highlight: { + value: defaultColors[5].value, + key: defaultColors[5].key, + }, + } + case 7: + return { + background: { + value: defaultColors[6].value, + key: defaultColors[6].key, + }, + highlight: { + value: defaultColors[4].value, + key: defaultColors[4].key, + }, + } + case 8: + return { + background: { + value: defaultColors[7].value, + key: defaultColors[7].key, + }, + highlight: { + value: defaultColors[8].value, + key: defaultColors[8].key, + }, + } + + case 0: + default: + return { + background: { + value: defaultColors[0].value, + key: defaultColors[0].key, + }, + highlight: { + value: defaultColors[8].value, + key: defaultColors[8].key, + }, + } + } +} diff --git a/sanityv3/schemas/defaultColors.js b/sanityv3/schemas/defaultColors.js new file mode 100644 index 000000000..ca25f7f27 --- /dev/null +++ b/sanityv3/schemas/defaultColors.js @@ -0,0 +1,28 @@ +import colors from '../colorConfig' + +export const defaultColors = [ + { + title: 'White', + value: colors.white[100], + key: 'white-100', + dark: false, + }, + { + title: 'Moss Green Light', + value: colors['moss-green'][50], + key: 'moss-green-50', + dark: false, + }, + { + title: 'Spruce Wood', + value: colors['spruce-wood'][90], + key: 'spruce-wood-90', + dark: false, + }, + { title: 'Mist Blue', value: colors['mist-blue'][100], key: 'mist-blue-100', dark: false }, + { title: 'Mid Yellow', value: colors.yellow[50], key: 'yellow-50', dark: false }, + { title: 'Mid Orange', value: colors.orange[50], key: 'orange-50', dark: false }, + { title: 'Mid Blue', value: colors.blue[50], key: 'blue-50', dark: true }, + { title: 'Mid Green', value: colors.green[50], key: 'green-50', dark: false }, + { title: 'Energy Red', value: colors['energy-red'][100], key: 'energy-red-50', dark: false, onlyTextColor: true }, +] diff --git a/sanityv3/schemas/documents/404.ts b/sanityv3/schemas/documents/404.ts index 1f153ee51..517e54d48 100644 --- a/sanityv3/schemas/documents/404.ts +++ b/sanityv3/schemas/documents/404.ts @@ -9,7 +9,6 @@ import { configureBlockContent } from '../editors/blockContentType' const titleContentType = configureTitleBlockContent() const textContentType = configureBlockContent({ - h1: false, h2: true, h3: false, h4: false, diff --git a/sanityv3/schemas/documents/500.ts b/sanityv3/schemas/documents/500.ts index bdd4a81e4..73cb127a4 100644 --- a/sanityv3/schemas/documents/500.ts +++ b/sanityv3/schemas/documents/500.ts @@ -9,7 +9,6 @@ import { configureBlockContent } from '../editors/blockContentType' const titleContentType = configureTitleBlockContent() const textContentType = configureBlockContent({ - h1: false, h2: true, h3: false, h4: false, diff --git a/sanityv3/schemas/documents/event.ts b/sanityv3/schemas/documents/event.ts index 89ff775f2..539b12d46 100644 --- a/sanityv3/schemas/documents/event.ts +++ b/sanityv3/schemas/documents/event.ts @@ -12,7 +12,6 @@ import type { RelatedLinksArray } from '../objects/relatedLinks' const titleContentType = configureTitleBlockContent() const blockContentType = configureBlockContent() const ingressContentType = configureBlockContent({ - h1: false, h2: false, h3: false, h4: false, diff --git a/sanityv3/schemas/documents/header/sharedHeaderFields.ts b/sanityv3/schemas/documents/header/sharedHeaderFields.ts index 6ddd08f05..64792a3e1 100644 --- a/sanityv3/schemas/documents/header/sharedHeaderFields.ts +++ b/sanityv3/schemas/documents/header/sharedHeaderFields.ts @@ -15,7 +15,6 @@ type Hero = { const titleContentType = configureTitleBlockContent() const ingressContentType = configureBlockContent({ - h1: false, h2: false, h3: false, h4: false, diff --git a/sanityv3/schemas/documents/landingPage.ts b/sanityv3/schemas/documents/landingPage.ts index bdef88ce8..1fc9c875e 100644 --- a/sanityv3/schemas/documents/landingPage.ts +++ b/sanityv3/schemas/documents/landingPage.ts @@ -10,7 +10,6 @@ import { configureBlockContent } from '../editors/blockContentType' const titleContentType = configureTitleBlockContent() const ingressContentType = configureBlockContent({ - h1: false, h2: false, h3: false, h4: false, diff --git a/sanityv3/schemas/documents/magazine.ts b/sanityv3/schemas/documents/magazine.ts index ac8106ee8..47f683066 100644 --- a/sanityv3/schemas/documents/magazine.ts +++ b/sanityv3/schemas/documents/magazine.ts @@ -2,7 +2,7 @@ import type { Rule, SanityDocument } from 'sanity' import slugify from 'slugify' import { magazineSlug } from '../../../satellitesConfig' import blocksToText from '../../helpers/blocksToText' -import { defaultColors } from '../components/ColorSelector' +import { defaultColors } from '../defaultColors' import { defaultLanguage } from '../../languages' import { Flags } from '../../src/lib/datasetHelpers' import SlugInput from '../components/SlugInput' @@ -15,7 +15,6 @@ import { EdsIcon } from '../../icons' import { bookmarks } from '@equinor/eds-icons' const ingressBlockContentType = configureBlockContent({ - h1: false, h2: false, h3: false, h4: false, diff --git a/sanityv3/schemas/documents/magazineIndexPage.ts b/sanityv3/schemas/documents/magazineIndexPage.ts index 26fb1777d..95c598b31 100644 --- a/sanityv3/schemas/documents/magazineIndexPage.ts +++ b/sanityv3/schemas/documents/magazineIndexPage.ts @@ -9,7 +9,6 @@ import { bookmarks } from '@equinor/eds-icons' import type { PortableTextBlock, Rule } from 'sanity' const textContentType = configureBlockContent({ - h1: false, h2: true, h3: true, h4: false, diff --git a/sanityv3/schemas/documents/news/sharedNewsFields.ts b/sanityv3/schemas/documents/news/sharedNewsFields.ts index 20528943c..f70a16c78 100644 --- a/sanityv3/schemas/documents/news/sharedNewsFields.ts +++ b/sanityv3/schemas/documents/news/sharedNewsFields.ts @@ -4,7 +4,6 @@ import type { Rule, ValidationContext } from 'sanity' const blockContentType = configureBlockContent() const ingressBlockContentType = configureBlockContent({ - h1: false, h2: false, h3: false, h4: false, diff --git a/sanityv3/schemas/documents/newsroom.ts b/sanityv3/schemas/documents/newsroom.ts index 4d926a227..45dcf9d95 100644 --- a/sanityv3/schemas/documents/newsroom.ts +++ b/sanityv3/schemas/documents/newsroom.ts @@ -9,7 +9,6 @@ import type { PortableTextBlock, Rule } from 'sanity' const titleContentType = configureTitleBlockContent() const textContentType = configureBlockContent({ - h1: false, h2: true, h3: false, h4: false, diff --git a/sanityv3/schemas/documents/page.ts b/sanityv3/schemas/documents/page.ts index 913d4409e..c6a3629ac 100644 --- a/sanityv3/schemas/documents/page.ts +++ b/sanityv3/schemas/documents/page.ts @@ -1,5 +1,5 @@ import blocksToText from '../../helpers/blocksToText' -import { defaultColors } from '../components/ColorSelector' +import { defaultColors } from '../defaultColors' import { Flags } from '../../src/lib/datasetHelpers' import { i18n } from '../documentTranslation' import { HeroTypes } from '../HeroTypes' diff --git a/sanityv3/schemas/documents/subMenu.tsx b/sanityv3/schemas/documents/subMenu.tsx index 4353d5853..5eb57e6a0 100644 --- a/sanityv3/schemas/documents/subMenu.tsx +++ b/sanityv3/schemas/documents/subMenu.tsx @@ -21,7 +21,6 @@ export type SubMenu = { } const introBlockContentType = configureBlockContent({ - h1: false, h2: false, h3: false, h4: false, diff --git a/sanityv3/schemas/editors/blockContentType.tsx b/sanityv3/schemas/editors/blockContentType.tsx index 0c765f339..7f506779b 100644 --- a/sanityv3/schemas/editors/blockContentType.tsx +++ b/sanityv3/schemas/editors/blockContentType.tsx @@ -5,11 +5,14 @@ import { EdsBlockEditorIcon, EdsIcon, IconSubScript, IconSuperScript } from '../ import { Flags } from '../../src/lib/datasetHelpers' import { ExternalLinkRenderer, SubScriptRenderer, SuperScriptRenderer } from '../components' import routes from '../routes' +import { component } from 'sanity/desk' +import { defaultColors } from '../defaultColors' export type BlockContentProps = { - h1?: boolean h2?: boolean + useH2BaseStyle?: boolean h3?: boolean + useH3BaseStyle?: boolean h4?: boolean internalLink?: boolean externalLink?: boolean @@ -29,20 +32,38 @@ export const textColorConfig = { value: 'highlight', icon: EdsBlockEditorIcon(format_color_text), component: ({ children }: { children: React.ReactNode }) => { - return {children} + return {children} }, } +const round = (num: number) => + num + .toFixed(7) + .replace(/(\.[0-9]+?)0+$/, '$1') + .replace(/\.0$/, '') +const em = (px: number, base: number) => `${round(px / base)}em` + const SmallTextRender = (props: any) => { const { children } = props return {children} } +const Level2BaseStyle = (props: any) => { + const { children } = props + return {children} +} + +const Level3BaseStyle = (props: any) => { + const { children } = props + return {children} +} +// H1 not allowed in block content since it should be a document title. export const configureBlockContent = (options: BlockContentProps = {}): BlockDefinition => { const { - h1 = false, h2 = true, + useH2BaseStyle = true, h3 = true, + useH3BaseStyle = true, h4 = false, internalLink = true, externalLink = true, @@ -85,10 +106,11 @@ export const configureBlockContent = (options: BlockContentProps = {}): BlockDef }, } - const h1Config = { title: 'Title (h1)', value: 'h1' } - const h2Config = { title: 'Title (h2)', value: 'h2' } - const h3Config = { title: 'Subtitle (h3)', value: 'h3' } - const h4Config = { title: 'Subtitle (h4)', value: 'h4' } + const h2DefaultConfig = { title: 'Heading 2', value: 'h2' } + const h2BaseConfig = { title: 'Heading 2', value: 'h2', component: Level2BaseStyle } + const h3DefaultConfig = { title: 'Heading 3', value: 'h3' } + const h3BaseConfig = { title: 'Heading 3', value: 'h3', component: Level3BaseStyle } + const h4Config = { title: 'Heading 3', value: 'h4' } const smallTextConfig = { title: 'Small text', value: 'smallText', @@ -219,16 +241,20 @@ export const configureBlockContent = (options: BlockContentProps = {}): BlockDef ], } - if (h1) { - config?.styles?.push(h1Config) - } - if (h2) { - config?.styles?.push(h2Config) + if (useH2BaseStyle) { + config?.styles?.push(h2BaseConfig) + } else { + config?.styles?.push(h2DefaultConfig) + } } if (h3) { - config?.styles?.push(h3Config) + if (useH3BaseStyle) { + config?.styles?.push(h3BaseConfig) + } else { + config?.styles?.push(h3DefaultConfig) + } } if (h4) { diff --git a/sanityv3/schemas/editors/titleEditorContentType.tsx b/sanityv3/schemas/editors/titleEditorContentType.tsx index f5acf61cb..bd904c3a2 100644 --- a/sanityv3/schemas/editors/titleEditorContentType.tsx +++ b/sanityv3/schemas/editors/titleEditorContentType.tsx @@ -3,6 +3,7 @@ import { IconSuperScript, IconSubScript, EdsBlockEditorIcon } from '../../icons' import { StrikethroughIcon } from '@sanity/icons' import { BlockDefinition, BlockStyleDefinition } from 'sanity' import { format_color_text } from '@equinor/eds-icons' +import { defaultColors } from '../defaultColors' export type TitleContentProps = { styles?: BlockStyleDefinition[] @@ -60,7 +61,7 @@ export const configureTitleBlockContent = ( value: 'highlight', icon: EdsBlockEditorIcon(format_color_text), component: ({ children }: { children: React.ReactNode }) => { - return {children} + return {children} }, } diff --git a/sanityv3/schemas/index.js b/sanityv3/schemas/index.js index aef6ed6b1..9795140e9 100644 --- a/sanityv3/schemas/index.js +++ b/sanityv3/schemas/index.js @@ -89,6 +89,7 @@ import hlsVideo from './objects/hlsVideo' import themeList from './objects/themeList' import keyNumbers from './objects/keyNumbers' import keyNumberItem from './objects/keyNumberItem' +import keyValue from './objects/keyValue' const routeSchemas = languages.map(({ name, title }) => { return route(name, title) @@ -172,6 +173,7 @@ const RemainingSchemas = [ themeList, keyNumbers, keyNumberItem, + keyValue, ] // Then we give our schema to the builder and provide the result to Sanity diff --git a/sanityv3/schemas/objects/accordion.tsx b/sanityv3/schemas/objects/accordion.tsx index 8fae5a788..fa27b7503 100644 --- a/sanityv3/schemas/objects/accordion.tsx +++ b/sanityv3/schemas/objects/accordion.tsx @@ -18,7 +18,6 @@ export type Accordion = { const titleContentType = configureTitleBlockContent() const ingressContentType = configureBlockContent({ - h1: false, h2: false, h3: false, h4: false, diff --git a/sanityv3/schemas/objects/accordionItem.tsx b/sanityv3/schemas/objects/accordionItem.tsx index fdc475f6d..b5c1c2d36 100644 --- a/sanityv3/schemas/objects/accordionItem.tsx +++ b/sanityv3/schemas/objects/accordionItem.tsx @@ -10,7 +10,6 @@ export type AccordionItem = { } const contentType = configureBlockContent({ - h1: false, h2: false, h3: false, h4: false, diff --git a/sanityv3/schemas/objects/colorList.tsx b/sanityv3/schemas/objects/colorList.tsx index d29bc2750..ba6b0c687 100644 --- a/sanityv3/schemas/objects/colorList.tsx +++ b/sanityv3/schemas/objects/colorList.tsx @@ -1,9 +1,12 @@ -import { ColorSelector, defaultColors } from '../components/ColorSelector' +import { ColorSelector } from '../components/ColorSelector' +import { defaultColors } from '../defaultColors' import { defineType, defineField } from 'sanity' export type ColorType = { title: string value: string + key: string + dark: boolean } export default defineType({ @@ -23,6 +26,8 @@ export default defineType({ initialValue: { title: defaultColors[0].title, value: defaultColors[0].value, + key: defaultColors[0].key, + dark: defaultColors[0].dark, }, components: { input: (props) => { diff --git a/sanityv3/schemas/objects/factbox.tsx b/sanityv3/schemas/objects/factbox.tsx index 9b52ad0e1..23e2191b3 100644 --- a/sanityv3/schemas/objects/factbox.tsx +++ b/sanityv3/schemas/objects/factbox.tsx @@ -12,7 +12,6 @@ const imageAlignmentOptions = [ ] const blockContentType = configureBlockContent({ - h1: false, h2: false, h3: false, h4: false, diff --git a/sanityv3/schemas/objects/form.tsx b/sanityv3/schemas/objects/form.tsx index 7b1849f00..1d7b2f918 100644 --- a/sanityv3/schemas/objects/form.tsx +++ b/sanityv3/schemas/objects/form.tsx @@ -23,7 +23,6 @@ type FormType = | 'careerFairAndVisitsForm' const ingressContentType = configureBlockContent({ - h1: false, h2: false, h3: false, h4: false, diff --git a/sanityv3/schemas/objects/iframe.tsx b/sanityv3/schemas/objects/iframe.tsx index dfd1d9cf6..56cf66708 100644 --- a/sanityv3/schemas/objects/iframe.tsx +++ b/sanityv3/schemas/objects/iframe.tsx @@ -19,7 +19,6 @@ import { } from './iframe/sharedIframeFields' const ingressContentType = configureBlockContent({ - h1: false, h2: false, h3: false, h4: false, diff --git a/sanityv3/schemas/objects/iframe/sharedIframeFields.tsx b/sanityv3/schemas/objects/iframe/sharedIframeFields.tsx index 07c08b85e..82693b5a0 100644 --- a/sanityv3/schemas/objects/iframe/sharedIframeFields.tsx +++ b/sanityv3/schemas/objects/iframe/sharedIframeFields.tsx @@ -6,7 +6,6 @@ import type { IFrame } from '../iframe' const titleContentType = configureTitleBlockContent() const descriptionContentType = configureBlockContent({ - h1: false, h2: false, h3: false, h4: false, diff --git a/sanityv3/schemas/objects/keyNumbers.tsx b/sanityv3/schemas/objects/keyNumbers.tsx index 67c72b047..50816ceb2 100644 --- a/sanityv3/schemas/objects/keyNumbers.tsx +++ b/sanityv3/schemas/objects/keyNumbers.tsx @@ -6,7 +6,6 @@ import blocksToText from '../../helpers/blocksToText' const titleContentType = configureTitleBlockContent() const ingressContentType = configureBlockContent({ - h1: false, h2: false, h3: false, h4: false, @@ -14,7 +13,6 @@ const ingressContentType = configureBlockContent({ }) const disclaimerContentType = configureBlockContent({ - h1: false, h2: false, h3: false, h4: false, diff --git a/sanityv3/schemas/objects/keyValue.tsx b/sanityv3/schemas/objects/keyValue.tsx new file mode 100644 index 000000000..70ee34336 --- /dev/null +++ b/sanityv3/schemas/objects/keyValue.tsx @@ -0,0 +1,17 @@ +import { defineType, defineField } from 'sanity' + +export default defineType({ + name: 'keyValue', + title: 'KeyValue', + type: 'object', + fields: [ + defineField({ + name: 'key', + type: 'string', + }), + defineField({ + name: 'value', + type: 'string', + }), + ], +}) diff --git a/sanityv3/schemas/objects/magazineFooterComponent.tsx b/sanityv3/schemas/objects/magazineFooterComponent.tsx index 8066c1a63..23d3e0fc9 100644 --- a/sanityv3/schemas/objects/magazineFooterComponent.tsx +++ b/sanityv3/schemas/objects/magazineFooterComponent.tsx @@ -20,7 +20,6 @@ const imageAlignmentOptions = [ ] const blockContentType = configureBlockContent({ - h1: false, h2: false, h3: false, h4: false, diff --git a/sanityv3/schemas/objects/promotion/promoteTopic.tsx b/sanityv3/schemas/objects/promotion/promoteTopic.tsx index d82da868e..98238c416 100644 --- a/sanityv3/schemas/objects/promotion/promoteTopic.tsx +++ b/sanityv3/schemas/objects/promotion/promoteTopic.tsx @@ -8,7 +8,6 @@ import { Flags } from '../../../src/lib/datasetHelpers' import routes from '../../routes' const introBlockContentType = configureBlockContent({ - h1: false, h2: false, h3: false, h4: false, diff --git a/sanityv3/schemas/objects/promotion/promotion.tsx b/sanityv3/schemas/objects/promotion/promotion.tsx index 536144017..c4ca6ea71 100644 --- a/sanityv3/schemas/objects/promotion/promotion.tsx +++ b/sanityv3/schemas/objects/promotion/promotion.tsx @@ -47,7 +47,6 @@ type PromotionType = 'promoteTopics' | 'promoteNews' | 'promotePeople' | 'promot const titleContentType = configureTitleBlockContent() const ingressContentType = configureBlockContent({ - h1: false, h2: false, h3: false, h4: false, diff --git a/sanityv3/schemas/objects/table/index.tsx b/sanityv3/schemas/objects/table/index.tsx index c6de8c8f3..ce0fac456 100644 --- a/sanityv3/schemas/objects/table/index.tsx +++ b/sanityv3/schemas/objects/table/index.tsx @@ -1,5 +1,5 @@ import blocksToText from '../../../helpers/blocksToText' -import { defaultColors } from '../../components/ColorSelector' +import { defaultColors } from '../../defaultColors' import CompactBlockEditor from '../../components/CompactBlockEditor' import { configureBlockContent, configureTitleBlockContent } from '../../editors' @@ -35,7 +35,6 @@ const themes: ColorType[] = [ ] const ingressContentType = configureBlockContent({ - h1: false, h2: false, h3: false, h4: false, @@ -43,7 +42,6 @@ const ingressContentType = configureBlockContent({ }) const headerCellContentType = configureBlockContent({ - h1: false, h2: false, h3: false, h4: false, diff --git a/sanityv3/schemas/objects/teaser.tsx b/sanityv3/schemas/objects/teaser.tsx index db77b5f72..e738943ec 100644 --- a/sanityv3/schemas/objects/teaser.tsx +++ b/sanityv3/schemas/objects/teaser.tsx @@ -26,7 +26,6 @@ const imageAlignmentOptions = [ ] const blockConfig = { - h1: false, h2: false, h3: false, h4: false, diff --git a/sanityv3/schemas/objects/textBlock.tsx b/sanityv3/schemas/objects/textBlock.tsx index 7e10bc4f8..7b424c65c 100644 --- a/sanityv3/schemas/objects/textBlock.tsx +++ b/sanityv3/schemas/objects/textBlock.tsx @@ -9,7 +9,6 @@ import { configureBlockContent, configureTitleBlockContent } from '../editors' import { validateComponentAnchor } from '../validations/validateAnchorReference' const blockContentType = configureBlockContent({ - h1: false, h2: false, h3: true, h4: false, @@ -17,7 +16,6 @@ const blockContentType = configureBlockContent({ }) const ingressContentType = configureBlockContent({ - h1: false, h2: false, h3: false, h4: false, @@ -25,7 +23,6 @@ const ingressContentType = configureBlockContent({ }) const blockContentTypeForBigText = configureBlockContent({ - h1: false, h2: false, h3: false, h4: false, diff --git a/sanityv3/schemas/objects/textTeaser.tsx b/sanityv3/schemas/objects/textTeaser.tsx index 1b1c76cf9..af8f75ab2 100644 --- a/sanityv3/schemas/objects/textTeaser.tsx +++ b/sanityv3/schemas/objects/textTeaser.tsx @@ -29,7 +29,6 @@ const titleAlignmentOptions = [ ] const blockConfig = { - h1: false, h2: false, h3: false, h4: false, diff --git a/sanityv3/schemas/objects/textWithIcon.tsx b/sanityv3/schemas/objects/textWithIcon.tsx index a6766223c..a9baa258a 100644 --- a/sanityv3/schemas/objects/textWithIcon.tsx +++ b/sanityv3/schemas/objects/textWithIcon.tsx @@ -4,7 +4,6 @@ import { EdsIcon } from '../../icons' import { configureBlockContent } from '../editors/blockContentType' const blockContentType = configureBlockContent({ - h1: false, h2: false, h3: false, h4: false, diff --git a/sanityv3/schemas/objects/themeList.tsx b/sanityv3/schemas/objects/themeList.tsx index 98dc86af6..35ef5afc6 100644 --- a/sanityv3/schemas/objects/themeList.tsx +++ b/sanityv3/schemas/objects/themeList.tsx @@ -1,4 +1,4 @@ -import { ThemeSelector, defaultColors } from '../components/ThemeSelector' +import { ThemeSelector, themeColors } from '../components/ThemeSelector' import { defineType, defineField } from 'sanity' export default defineType({ @@ -16,8 +16,8 @@ export default defineType({ }), ], initialValue: { - title: defaultColors[0].title, - value: defaultColors[0].value, + title: themeColors[0].title, + value: themeColors[0].value, }, components: { input: (props) => { diff --git a/sanityv3/schemas/objects/twitterEmbed.tsx b/sanityv3/schemas/objects/twitterEmbed.tsx index abd8db4f6..ade41a20e 100644 --- a/sanityv3/schemas/objects/twitterEmbed.tsx +++ b/sanityv3/schemas/objects/twitterEmbed.tsx @@ -12,7 +12,6 @@ export type TwitterEmbed = { const titleContentType = configureTitleBlockContent() const ingressContentType = configureBlockContent({ - h1: false, h2: false, h3: false, h4: false, diff --git a/sanityv3/schemas/objects/videoPlayer.tsx b/sanityv3/schemas/objects/videoPlayer.tsx index 4cd28f0ba..5f02cf524 100644 --- a/sanityv3/schemas/objects/videoPlayer.tsx +++ b/sanityv3/schemas/objects/videoPlayer.tsx @@ -10,7 +10,6 @@ import { ImageWithAlt } from './imageWithAlt' const titleContentType = configureTitleBlockContent() const ingressContentType = configureBlockContent({ - h1: false, h2: false, h3: false, h4: false, diff --git a/sanityv3/schemas/objects/videoPlayerCarousel.tsx b/sanityv3/schemas/objects/videoPlayerCarousel.tsx index 1e3ff0cab..d84e03cac 100644 --- a/sanityv3/schemas/objects/videoPlayerCarousel.tsx +++ b/sanityv3/schemas/objects/videoPlayerCarousel.tsx @@ -5,7 +5,7 @@ import type { Reference, Rule, PortableTextBlock } from 'sanity' import { title } from './iframe/sharedIframeFields' import { configureTitleBlockContent } from '../editors' import CompactBlockEditor from '../components/CompactBlockEditor' -import { defaultColors } from '../components/ColorSelector' +import { defaultColors } from '../defaultColors' const titleContentType = configureTitleBlockContent() diff --git a/web/colorConfig.js b/web/colorConfig.js new file mode 100644 index 000000000..64c151c89 --- /dev/null +++ b/web/colorConfig.js @@ -0,0 +1,32 @@ +//IMPORTANT +// Sanityv3/colorConfig in sync with this +module.exports = { + white: { + 100: 'hsl(0, 0%, 100%)', + }, + 'moss-green': { + //moss-green-light + 50: 'hsl(184, 30%, 96%)', + }, + 'spruce-wood': { + 90: 'hsl(25, 100%, 94%)', + }, + 'mist-blue': { + 100: 'hsl(199, 58%, 90%)', + }, + 'energy-red': { + 100: 'hsl(348, 100%, 54%)', + }, + green: { + 50: '#c3e4ce', + }, + yellow: { + 50: '#fff5b8', + }, + blue: { + 50: '#49709c', + }, + orange: { + 50: '#f8d1af', + }, +} diff --git a/web/components/src/Heading/Heading.tsx b/web/components/src/Heading/Heading.tsx index 6ee9c24e6..45dabf6b6 100644 --- a/web/components/src/Heading/Heading.tsx +++ b/web/components/src/Heading/Heading.tsx @@ -3,8 +3,8 @@ import { Typography } from '@equinor/eds-core-react' import styled from 'styled-components' type StyledHeadingProps = { - center: boolean -} + $center: boolean +} & HTMLAttributes const StyledHeading = styled(Typography)` font-size: var(--size); @@ -12,8 +12,8 @@ const StyledHeading = styled(Typography)` font-weight: var(--font-weight); text-transform: var(--text-transform); - ${({ center }) => - center && { + ${({ $center }) => + $center && { textAlign: 'center', }} color: var(--color-on-background); @@ -64,7 +64,7 @@ const fontWeights = { '5xl': 'var(--fontWeight-regular)', } -export const Heading = forwardRef(function Heading( +export const Heading = forwardRef(function Heading( { size = 'lg', level = 'h3', regular = false, center = false, uppercase = false, style, children, ...rest }, ref, ) { @@ -72,7 +72,7 @@ export const Heading = forwardRef(function Heading +type TextProps = HTMLAttributes const StyledText = styled.div` p { @@ -10,5 +10,6 @@ const StyledText = styled.div` ` export const Text = ({ children, ...rest }: TextProps) => { + console.log('children', children) return {children} } diff --git a/web/core/Heading.tsx b/web/core/Heading.tsx new file mode 100644 index 000000000..d41c5ae7e --- /dev/null +++ b/web/core/Heading.tsx @@ -0,0 +1,33 @@ +import { forwardRef, HTMLAttributes } from 'react' +import { OverridableComponent } from '@equinor/eds-utils' +import { twMerge } from 'tailwind-merge' + +export type HeadingProps = { + size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl' | '5xl' + level?: '1' | '2' | '3' | '4' | '5' | '6' +} & HTMLAttributes + +const variants = { + xs: 'text-xs leading-earthy font-normal', + sm: 'text-base leading-inherit font-normal', + md: 'text-md leading-inherit font-normal', + lg: 'text-lg leading-inherit font-normal', + xl: 'text-xl leading-inherit font-normal', + '2xl': 'text-2xl leading-cloudy font-normal', + '3xl': 'text-3xl leading-earthy font-normal', + '4xl': 'text-4xl leading-earthy font-normal', + '5xl': 'text-5xl leading-earthy font-normal', +} + +export const Heading: OverridableComponent = forwardRef(function Heading( + { size = 'xl', level = '2', className = '', as, children, ...rest }, + ref, +) { + const HeadingTag = as ?? (`h${level}` as React.ElementType) + + return ( + + {children} + + ) +}) diff --git a/web/lib/queries/common/newsSubqueries.ts b/web/lib/queries/common/newsSubqueries.ts index bf029a457..a882c5251 100644 --- a/web/lib/queries/common/newsSubqueries.ts +++ b/web/lib/queries/common/newsSubqueries.ts @@ -3,7 +3,7 @@ import downloadableImageFields from './actions/downloadableImageFields' import linkSelectorFields from './actions/linkSelectorFields' import markDefs from './blockEditorMarks' -export const iframeForNewsQuery = /* groq */ `iframe { +export const iframeForNewsQuery = /* groq */ `defined(iframe) { title, frameTitle, url, diff --git a/web/lib/queries/common/pageContentFields.ts b/web/lib/queries/common/pageContentFields.ts index 4d63d844c..ba246f183 100644 --- a/web/lib/queries/common/pageContentFields.ts +++ b/web/lib/queries/common/pageContentFields.ts @@ -30,6 +30,8 @@ _type == "keyNumbers" =>{ ), "designOptions": { "background": coalesce(background.title, 'White'), + "dark": coalesce(background.dark, false), + "utility": coalesce(background.key, ""), "imagePosition": coalesce(imagePosition, 'left'), imageSize, }, @@ -82,6 +84,8 @@ _type == "keyNumbers" =>{ anchor, "designOptions": { "background": coalesce(background.title, 'White'), + "dark": coalesce(background.dark, false), + "utility": coalesce(background.key, ""), }, }, _type == "fullWidthImage"=>{ @@ -114,6 +118,8 @@ _type == "keyNumbers" =>{ }, "designOptions": { "background": coalesce(background.title, 'White'), + "dark": coalesce(background.dark, false), + "utility": coalesce(background.key, ""), }, }, _type == "textWithIconArray"=>{ @@ -131,6 +137,8 @@ _type == "keyNumbers" =>{ "designOptions": { "background": coalesce(background.title, 'none'), + "dark": coalesce(background.dark, false), + "utility": coalesce(background.key, ""), }, }, _type == "pullQuote" => { @@ -143,6 +151,8 @@ _type == "keyNumbers" =>{ "designOptions": { "background": coalesce(background.title, 'White'), "imagePosition": coalesce(imagePosition, 'right'), + "dark": coalesce(background.dark, false), + "utility": coalesce(background.key, ""), } }, _type == "accordion" => { @@ -166,6 +176,8 @@ _type == "keyNumbers" =>{ anchor, "designOptions": { "background": coalesce(background.title, 'none'), + "dark": coalesce(background.dark, false), + "utility": coalesce(background.key, ""), } }, _type == "promoTileArray"=>{ @@ -201,6 +213,8 @@ _type == "keyNumbers" =>{ }, "designOptions": { "background": coalesce(background.title, 'none'), + "utility": coalesce(background.key, ""), + "dark": coalesce(background.dark, false), }, }, }, @@ -225,6 +239,8 @@ _type == "keyNumbers" =>{ "designOptions": { "aspectRatio": coalesce(aspectRatio, '16:9'), "background": coalesce(background.title, 'none'), + "dark": coalesce(background.dark, false), + "utility": coalesce(background.key, ""), height, }, }, @@ -393,6 +409,8 @@ _type == "keyNumbers" =>{ }, "designOptions": { "background": coalesce(background.title, 'none'), + "dark": coalesce(background.dark, false), + "utility": coalesce(background.key, ""), }, }, _type == "cookieDeclaration" => { @@ -462,6 +480,8 @@ _type == "keyNumbers" =>{ "id": _key, "designOptions": { "background": coalesce(background.title, 'White'), + "dark": coalesce(background.dark, false), + "utility": coalesce(background.key, ""), }, }, @@ -477,6 +497,8 @@ _type == "keyNumbers" =>{ }, "designOptions": { "background": coalesce(background.title, 'White'), + "utility": coalesce(background.key, ""), + "dark": coalesce(background.dark, false), }, }, diff --git a/web/package.json b/web/package.json index d6eca11ac..2f7258678 100644 --- a/web/package.json +++ b/web/package.json @@ -80,6 +80,7 @@ "styled-normalize": "^8.0.7", "swiper": "^9.2.3", "swr": "^1.3.0", + "tailwind-merge": "^2.2.1", "uuid": "^9.0.0", "xml2js": "^0.6.0" }, @@ -96,6 +97,7 @@ "@storybook/nextjs": "^7.0.6", "@storybook/react": "^7.0.6", "@storybook/react-vite": "^7.0.6", + "@tailwindcss/typography": "^0.5.10", "@testing-library/jest-dom": "^6.1.4", "@testing-library/react": "^14.0.0", "@types/http-proxy": "^1.17.10", @@ -107,6 +109,7 @@ "@types/styled-components": "^5.1.26", "@types/testing-library__jest-dom": "^5.14.5", "babel-plugin-styled-components": "^2.1.1", + "color": "^4.2.3", "jest": "^28.1.0", "jest-environment-jsdom": "^28.1.0", "jest-styled-components": "^7.0.8", @@ -116,6 +119,10 @@ "storybook-css-modules-preset": "^1.1.1", "styled-jsx": "^5.1.2", "typescript": "4.8.4", + "tailwindcss": "^3.4.1", + "postcss": "^8.4.35", + "postcss-import": "^16.0.1", + "autoprefixer": "^10.4.17", "vite": "^4.2.2", "webpack": "^5.88.2" } diff --git a/web/pageComponents/pageTemplates/News.tsx b/web/pageComponents/pageTemplates/News.tsx index a38d3a96e..777af24ff 100644 --- a/web/pageComponents/pageTemplates/News.tsx +++ b/web/pageComponents/pageTemplates/News.tsx @@ -4,7 +4,6 @@ import { Heading, FormattedDateTime, BackgroundContainer } from '@components' import styled from 'styled-components' import { Icon } from '@equinor/eds-core-react' import { calendar } from '@equinor/eds-icons' -import NewsText from '../shared/portableText/NewsText' import DefaulHeroImage from '../shared/Hero/DefaultHeroImage' import IngressText from '../shared/portableText/IngressText' import RelatedContent from '../shared/RelatedContent' @@ -15,6 +14,8 @@ import { getFullUrl } from '../../common/helpers/getFullUrl' import { metaTitleSuffix } from '../../languages' import type { NewsSchema } from '../../types/types' import { toPlainText } from '@portabletext/react' +import Blocks from '../shared/portableText/Blocks' +import { twMerge } from 'tailwind-merge' const NewsLayout = styled.div` --banner-paddingHorizontal: clamp(16px, calc(-69.1942px + 22.7184vw), 367px); @@ -95,49 +96,6 @@ const LeadParagraph = styled.div` } ` -const Content = styled.div` - & h2, - & h3 { - margin: var(--space-small) 0; - } - - /* The max-width makes things easier with 50% floating images */ - max-width: var(--maxViewportWidth); - margin-left: auto; - margin-right: auto; - - /* Clear floats if two left or right aligned images are adjacent siblings*/ - .float-left + .float-left, - .float-right + .float-right { - clear: both; - } - - /* "Remove" margin top from FactBox if the following element is also a FactBox */ - - .fact-box:not(.fact-box--none) + .fact-box--colored, - .fact-box.fact-box--image + .fact-box.fact-box--colored { - margin-top: calc(-1 * var(--space-3xLarge)); - } - - .fact-box:not(.fact-box--image).fact-box--bg-moss-green + .fact-box.fact-box--bg-moss-green, - .fact-box:not(.fact-box--image).fact-box--bg-slate-blue + .fact-box.fact-box--bg-slate-blue, - .fact-box:not(.fact-box--image).fact-box--bg-mist-blue + .fact-box.fact-box--bg-mist-blue, - .fact-box:not(.fact-box--image).fact-box--bg-moss-green-light + .fact-box.fact-box--bg-moss-green-light, - .fact-box:not(.fact-box--image).fact-box--bg-spruce-wood + .fact-box.fact-box--bg-spruce-wood, - .fact-box:not(.fact-box--image).fact-box--bg-mid-blue + .fact-box.fact-box--bg-mid-blue, - .fact-box:not(.fact-box--image).fact-box--bg-mid-green + .fact-box.fact-box--bg-mid-green, - .fact-box:not(.fact-box--image).fact-box--bg-mid-orange + .fact-box.fact-box--bg-mid-orange, - .fact-box:not(.fact-box--image).fact-box--bg-mid-yellow + .fact-box.fact-box--bg-mid-yellow { - margin-top: calc(-2 * var(--space-3xLarge)); - } -` - -const Related = styled.div<{ reduceMargin: boolean }>` - padding: 0 var(--layout-paddingHorizontal-large); - max-width: 1700px; - margin: ${(reduceMargin) => (reduceMargin ? '0 auto var(--space-3xLarge) auto' : 'var(--space-3xLarge) auto')}; -` - const Latest = styled.div` padding: 0 var(--space-medium); margin: var(--space-4xLarge) auto 0; @@ -257,18 +215,21 @@ const NewsPage = ({ data: news }: ArticleProps) => { )} - {content && content.length > 0 && ( - - - - )} + {content && content.length > 0 && } {iframe && } {relatedLinks?.links && relatedLinks.links.length > 0 && ( - - - + )} {latestNews && latestNews.length > 0 && ( diff --git a/web/pageComponents/shared/RelatedContent.tsx b/web/pageComponents/shared/RelatedContent.tsx index 9c69c84ab..5d57c0597 100644 --- a/web/pageComponents/shared/RelatedContent.tsx +++ b/web/pageComponents/shared/RelatedContent.tsx @@ -1,4 +1,4 @@ -import { Fragment } from 'react' +import { Fragment, HTMLAttributes } from 'react' import { Heading, List } from '@components' import type { RelatedLinksData, LinkData } from '../../types/types' import styled from 'styled-components' @@ -13,7 +13,7 @@ const { Item } = List type RelatedContentProps = { data: RelatedLinksData -} +} & HTMLAttributes const RelatedContent = ({ data, ...rest }: RelatedContentProps) => { return ( diff --git a/web/pageComponents/shared/portableText/Blocks.tsx b/web/pageComponents/shared/portableText/Blocks.tsx new file mode 100644 index 000000000..dad3760e6 --- /dev/null +++ b/web/pageComponents/shared/portableText/Blocks.tsx @@ -0,0 +1,123 @@ +/* eslint-disable @typescript-eslint/ban-ts-comment */ +import { PortableText } from '@portabletext/react' +import { PortableTextBlock } from '@portabletext/types' +import { FigureWithLayout, Quote, Fact, Sub, Sup, ExternalLink, InternalLink } from './components' +/* import { Heading } from '@components/Heading' */ +import isEmpty from './helpers/isEmpty' + +const blockSerializer = { + block: { + normal: ({ children }: PortableTextBlock) => { + if (isEmpty(children)) return null + return ( +

+ <>{children} +

+ ) + }, + smallText: ({ children }: PortableTextBlock) => { + if (isEmpty(children)) return null + return ( +

+ <>{children} +

+ ) + }, + }, + marks: { + sub: Sub, + sup: Sup, + link: ExternalLink, + internalLink: InternalLink, + }, + types: { + //@ts-ignore + positionedInlineImage: (props) => , + //@ts-ignore + pullQuote: Quote, + }, +} + +type Props = { + value: PortableTextBlock[] +} + +const inlineBlockTypes = ['block', 'positionedInlineImage', 'pullQuote'] + +//@ts-ignore +export default function Blocks({ value }: Props) { + let div: PortableTextBlock[] = [] + return ( + <> + {value.map((block, i, blocks) => { + // Normal text blocks (p, h1, h2, etc.) — these are grouped so we can wrap them in a prose div + if (inlineBlockTypes.includes(block._type)) { + div.push(block) + + // If the next block is also text/pullQuote, group it with this one + if (inlineBlockTypes.includes(blocks[i + 1]?._type)) return null + + // Otherwise, render the group of text blocks we have + const value = div + div = [] + + return ( +
+ +
+ ) + } else if (block._type === 'factbox') { + let marginOverride = '' + // If the next block is a factbox, remove margin bottom + if (blocks[i + 1]?._type === 'factbox') { + marginOverride = 'mb-0' + } + // If the previous block was a factbox, remove margin top + if (blocks[i - 1]?._type === 'factbox') { + marginOverride = 'mt-0' + } + + return ( + , + }, + }} + /> + ) + } else { + // Non-text blocks (modules, sections, etc.) — note that these can recursively render text + // blocks again + return ( + + ) + } + })} + + ) +} diff --git a/web/pageComponents/shared/portableText/NewsText.tsx b/web/pageComponents/shared/portableText/NewsText.tsx deleted file mode 100644 index f633c212a..000000000 --- a/web/pageComponents/shared/portableText/NewsText.tsx +++ /dev/null @@ -1,91 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -import { PortableText, PortableTextProps } from '@portabletext/react' -import { Text, List } from '@components' -import styled from 'styled-components' - -import { Sub, Sup, ExternalLink, InternalLink, FigureWithLayout, Quote, Fact, h2Heading, h3Heading } from './components' -import isEmpty from './helpers/isEmpty' -import type { PortableTextBlock } from '@portabletext/types' - -const { Item } = List - -const Container = styled.div` - padding: 0 var(--layout-paddingHorizontal-large); - max-width: var(--maxViewportWidth); - margin-left: auto; - margin-right: auto; -` -const ContainerWithBottomSpace = styled(Container)` - margin-bottom: var(--space-medium); - - :only-child { - padding: 0; - } -` - -const defaultSerializers = { - block: { - h2: (props: { children: React.ReactNode }) => {h2Heading(props)}, - h3: (props: { children: React.ReactNode }) => {h3Heading(props)}, - normal: ({ children }: PortableTextBlock) => { - if (isEmpty(children)) return null - return ( - - - <>{children} - - - ) - }, - smallText: ({ children }: PortableTextBlock) => { - if (isEmpty(children)) return null - return ( - - - <>{children} - - - ) - }, - }, - - marks: { sub: Sub, sup: Sup, link: ExternalLink, internalLink: InternalLink }, - types: { - positionedInlineImage: FigureWithLayout, - factbox: Fact, - pullQuote: Quote, - }, - list: { - bullet: ({ children }: PortableTextBlock) => ( - - - <>{children} - - - ), - number: ({ children }: PortableTextBlock) => ( - - - <>{children} - - - ), - }, - listItem: ({ children }: PortableTextBlock) => ( - - <>{children} - - ), -} - -const NewsText = ({ value, components = {}, ...props }: PortableTextProps) => ( - -) - -export default NewsText diff --git a/web/pageComponents/shared/portableText/TitleText.tsx b/web/pageComponents/shared/portableText/TitleText.tsx index b72d5bbe3..035606c1b 100644 --- a/web/pageComponents/shared/portableText/TitleText.tsx +++ b/web/pageComponents/shared/portableText/TitleText.tsx @@ -22,11 +22,13 @@ const defaultComponents = ({ size, level, className }: DefaultComponents) => { ) }, - extraLarge: ({ children }: PortableTextBlock) => ( - - <>{children} - - ), + extraLarge: ({ children }: PortableTextBlock) => { + return ( + + <>{children} + + ) + }, }, marks: { sub: Sub, sup: Sup, s: Strikethrough, highlight: Highlight }, } diff --git a/web/pageComponents/shared/portableText/components/news/Fact.tsx b/web/pageComponents/shared/portableText/components/news/Fact.tsx index 16496e6b7..17e8f1d7f 100644 --- a/web/pageComponents/shared/portableText/components/news/Fact.tsx +++ b/web/pageComponents/shared/portableText/components/news/Fact.tsx @@ -8,6 +8,7 @@ import type { PortableTextBlock } from '@portabletext/types' import type { BackgroundColours, ImageWithAlt } from '../../../../../types/types' import { urlFor } from '../../../../../common/helpers' +import { twMerge } from 'tailwind-merge' type FactboxProps = { title: string @@ -18,9 +19,7 @@ type FactboxProps = { dynamicHeight: boolean } -const FactBoxWithPadding = styled(FactBox)` - margin: var(--space-3xLarge) 0; -` +const FactBoxWithPadding = styled(FactBox)`` const FactBoxContentWithPadding = styled(FactBox.Content)<{ hasColumns: boolean @@ -41,10 +40,11 @@ const FactBoxContentWithPadding = styled(FactBox.Content)<{ type BlockProps = { isInline: boolean value: FactboxProps + className?: string } & PortableTextBlock export const Fact = (block: BlockProps) => { - const { value } = block + const { value, className } = block const { title, content, background, image, imagePosition, dynamicHeight } = value const bgTitle = (background ? background?.title : 'White') as BackgroundColours if (!content || content.length === 0) { @@ -61,11 +61,14 @@ export const Fact = (block: BlockProps) => { const hasImage = imageSrc ? true : false const hasBgColor = bgTitle !== 'White' + const classNames = twMerge('my-3xl', className) + return ( diff --git a/web/pageComponents/shared/portableText/components/news/FigureWithLayout.tsx b/web/pageComponents/shared/portableText/components/news/FigureWithLayout.tsx index 11df42fb8..192669184 100644 --- a/web/pageComponents/shared/portableText/components/news/FigureWithLayout.tsx +++ b/web/pageComponents/shared/portableText/components/news/FigureWithLayout.tsx @@ -1,45 +1,11 @@ import type { PortableTextBlock } from '@portabletext/types' - +import { twMerge } from 'tailwind-merge' import { FigureCaption } from '@components' -import styled from 'styled-components' import Image from '../../../SanityImage' import type { ImageWithAlt } from '../../../../../types/types' type Layout = 'full' | 'left' | 'right' -type FigureStyles = { - layout: Layout -} - -const FigureTest = styled.figure.attrs(({ layout }) => ({ - className: `float-${layout}`, -}))` - padding: 0 var(--layout-paddingHorizontal-medium); - max-width: var(--maxViewportWidth); - margin: var(--space-3xLarge) auto; - /* img { - object-fit: contain; - } */ - @media (min-width: 800px) { - ${({ layout }) => - layout === 'right' && { - width: '50%', - paddingLeft: 'var(--space-small)', - marginTop: '0', - marginBottom: 'var(--space-small)', - float: 'right', - }} - ${({ layout }) => - layout === 'left' && { - width: '50%', - paddingRight: 'var(--space-small)', - marginBottom: 'var(--space-small)', - marginTop: '0', - float: 'left', - }} - } -` - type FigureNode = { _key: string _type: 'imageWithAltAndCaption' @@ -60,7 +26,20 @@ export const FigureWithLayout = (block: BlockProps) => { if (!image) return null return ( - +
{layout === 'full' ? ( { {attribution && {attribution}} )} - +
) } diff --git a/web/pageComponents/shared/portableText/components/news/Quote.tsx b/web/pageComponents/shared/portableText/components/news/Quote.tsx index 5e7669cfb..59e6612b5 100644 --- a/web/pageComponents/shared/portableText/components/news/Quote.tsx +++ b/web/pageComponents/shared/portableText/components/news/Quote.tsx @@ -5,7 +5,6 @@ import type { PortableTextBlock } from '@portabletext/types' import type { QuoteData } from '../../../../../types/types' const Container = styled.div` - padding: 0 var(--layout-paddingHorizontal-medium); margin: var(--space-3xLarge) auto; clear: both; ` @@ -29,7 +28,7 @@ export const Quote = (quote: BlockProps) => { } return ( - + ) diff --git a/web/pageComponents/shared/textTeaser/TextTeaser.tsx b/web/pageComponents/shared/textTeaser/TextTeaser.tsx index 6582f1d7a..00bce5a70 100644 --- a/web/pageComponents/shared/textTeaser/TextTeaser.tsx +++ b/web/pageComponents/shared/textTeaser/TextTeaser.tsx @@ -42,9 +42,7 @@ const StyledContent = styled(Content)` export const StyledTeaser = styled.article` overflow-y: hidden; ` -const StyledLink = styled(Link)` - font-size: var(--typeScale-1); -` + const StyledTitleText = styled(TitleText)` padding: 0 0 var(--space-large) 0; @media (min-width: 750px) { @@ -78,7 +76,6 @@ const TextTeaser = ({ data, anchor }: TextTeaserProps) => { const { background, highlight } = getColorForTheme(theme) const style = highlight ? ({ '--title-highlight-color': `${highlight} ` } as CSSProperties) : undefined - return ( diff --git a/web/pageComponents/shared/textTeaser/theme.ts b/web/pageComponents/shared/textTeaser/theme.ts index 408a66b7e..c4e677dd7 100644 --- a/web/pageComponents/shared/textTeaser/theme.ts +++ b/web/pageComponents/shared/textTeaser/theme.ts @@ -4,6 +4,63 @@ export type ThemeColors = { background: BackgroundColours highlight?: string } +//Keep in sync with sanityv3/schemas/components/ThemeSelector/themeColors +// When converting to tailwind +/* export const getColorForTheme = (pattern: number) => { + switch (pattern) { + case 1: + return { + background: 'bg-moss-green-50', + highlight: 'text-energy-red-100', + } + case 2: + return { + background: 'bg-spruce-wood-90', + highlight: 'text-energy-red-100', + } + case 3: + return { + background: 'bg-mist-blue-100', + highlight: 'text-energy-red-100', + } + case 4: + return { + background: 'bg-yellow-50', + highlight: 'text-energy-red-100', + } + case 5: + return { + background: 'bg-orange-50', + highlight: 'text-energy-red-100', + } + case 6: + return { + background: 'bg-blue-50', + dark: true, + highlight: 'text-orange-50', + } + case 7: + return { + background: 'bg-blue-50', + dark: true, + highlight: 'text-yellow-50', + } + case 8: + return { + background: 'bg-green-50', + highlight: 'text-energy-red-100', + } + + case 0: + default: + return { + background: 'bg-white-100', + highlight: 'text-energy-red-100 ', + } + } +} + */ + export const getColorForTheme = (pattern: number): ThemeColors => { switch (pattern) { case 1: diff --git a/web/pages/_app.tsx b/web/pages/_app.tsx index ca9ec80f5..471da8942 100644 --- a/web/pages/_app.tsx +++ b/web/pages/_app.tsx @@ -4,6 +4,7 @@ import type { ReactNode } from 'react' import Head from 'next/head' import { useRouter } from 'next/router' import { GlobalStyle } from '../styles/globalStyles' +import '../styles/tailwind.css' import 'focus-visible' import { useEffect } from 'react' import { GTM_ID, pageview } from '../lib/gtm' diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml index b8907f2c8..b14cfd255 100644 --- a/web/pnpm-lock.yaml +++ b/web/pnpm-lock.yaml @@ -178,6 +178,9 @@ dependencies: swr: specifier: ^1.3.0 version: 1.3.0(react@18.2.0) + tailwind-merge: + specifier: ^2.2.1 + version: 2.2.1 uuid: specifier: ^9.0.0 version: 9.0.0 @@ -222,6 +225,9 @@ devDependencies: '@storybook/react-vite': specifier: ^7.0.6 version: 7.0.6(react-dom@18.2.0)(react@18.2.0)(typescript@4.8.4)(vite@4.2.2) + '@tailwindcss/typography': + specifier: ^0.5.10 + version: 0.5.10(tailwindcss@3.4.1) '@testing-library/jest-dom': specifier: ^6.1.4 version: 6.4.2(@types/jest@29.5.12)(jest@28.1.0) @@ -252,9 +258,15 @@ devDependencies: '@types/testing-library__jest-dom': specifier: ^5.14.5 version: 5.14.5 + autoprefixer: + specifier: ^10.4.17 + version: 10.4.17(postcss@8.4.35) babel-plugin-styled-components: specifier: ^2.1.1 version: 2.1.1(styled-components@5.3.9) + color: + specifier: ^4.2.3 + version: 4.2.3 jest: specifier: ^28.1.0 version: 28.1.0(@types/node@17.0.35) @@ -264,6 +276,12 @@ devDependencies: jest-styled-components: specifier: ^7.0.8 version: 7.0.8(styled-components@5.3.9) + postcss: + specifier: ^8.4.35 + version: 8.4.35 + postcss-import: + specifier: ^16.0.1 + version: 16.0.1(postcss@8.4.35) prettier: specifier: 2.6.2 version: 2.6.2 @@ -279,6 +297,9 @@ devDependencies: styled-jsx: specifier: ^5.1.2 version: 5.1.2(@babel/core@7.21.4)(react@18.2.0) + tailwindcss: + specifier: ^3.4.1 + version: 3.4.1 typescript: specifier: 4.8.4 version: 4.8.4 @@ -401,6 +422,11 @@ packages: resolution: {integrity: sha512-a7mYHf/GVQfhAx/HRiMveKkFvHspQv/REdG+C/FIOosiSmNZxX7QebDwJkrGSmDWdXO12D0Qv1xn3AytFcEDlQ==} dev: false + /@alloc/quick-lru@5.2.0: + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + dev: true + /@ampproject/remapping@2.2.1: resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} @@ -3753,6 +3779,18 @@ packages: typescript: 4.8.4 dev: false + /@isaacs/cliui@8.0.2: + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + dependencies: + string-width: 5.1.2 + string-width-cjs: /string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: /strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: /wrap-ansi@7.0.0 + dev: true + /@istanbuljs/load-nyc-config@1.1.0: resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} engines: {node: '>=8'} @@ -4229,6 +4267,13 @@ packages: fastq: 1.15.0 dev: true + /@pkgjs/parseargs@0.11.0: + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + requiresBuild: true + dev: true + optional: true + /@pmmmwh/react-refresh-webpack-plugin@0.5.10(react-refresh@0.11.0)(webpack@5.88.2): resolution: {integrity: sha512-j0Ya0hCFZPd4x40qLzbhGsh9TMtdb+CJQiso+WxLOPNasohq9cc5SNUcwsZaRH6++Xh91Xkm/xHCkuIiIu0LUA==} engines: {node: '>= 10.13'} @@ -5320,8 +5365,8 @@ packages: loader-utils: 3.2.1 next: 13.5.6(@babel/core@7.21.4)(react-dom@18.2.0)(react@18.2.0) pnp-webpack-plugin: 1.7.0(typescript@4.8.4) - postcss: 8.4.24 - postcss-loader: 7.3.3(postcss@8.4.24)(webpack@5.88.2) + postcss: 8.4.35 + postcss-loader: 7.3.3(postcss@8.4.35)(webpack@5.88.2) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) resolve-url-loader: 5.0.0 @@ -5563,7 +5608,7 @@ packages: fetch-retry: 5.0.6 fs-extra: 11.1.1 isomorphic-unfetch: 3.1.0 - nanoid: 3.3.6 + nanoid: 3.3.7 read-pkg-up: 7.0.1 transitivePeerDependencies: - encoding @@ -5596,7 +5641,19 @@ packages: /@swc/helpers@0.5.2: resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==} dependencies: - tslib: 2.6.1 + tslib: 2.6.2 + + /@tailwindcss/typography@0.5.10(tailwindcss@3.4.1): + resolution: {integrity: sha512-Pe8BuPJQJd3FfRnm6H0ulKIGoMEQS+Vq01R6M5aCrFB/ccR/shT+0kXLjouGC1gFLm9hopTFN+DMP0pfwRWzPw==} + peerDependencies: + tailwindcss: '>=3.0.0 || insiders' + dependencies: + lodash.castarray: 4.4.0 + lodash.isplainobject: 4.0.6 + lodash.merge: 4.6.2 + postcss-selector-parser: 6.0.10 + tailwindcss: 3.4.1 + dev: true /@tanstack/react-virtual@3.0.0-beta.54(react@18.2.0): resolution: {integrity: sha512-D1mDMf4UPbrtHRZZriCly5bXTBMhylslm4dhcHqTtDJ6brQcgGmk8YD9JdWBGWfGSWPKoh2x1H3e7eh+hgPXtQ==} @@ -6454,6 +6511,11 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} + /ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + dev: true + /ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} @@ -6471,6 +6533,15 @@ packages: engines: {node: '>=10'} dev: true + /ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + dev: true + + /any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + dev: true + /anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} @@ -6495,6 +6566,10 @@ packages: readable-stream: 3.6.2 dev: true + /arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + dev: true + /argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} dependencies: @@ -6553,7 +6628,7 @@ packages: resolution: {integrity: sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==} engines: {node: '>=4'} dependencies: - tslib: 2.5.3 + tslib: 2.6.2 dev: true /ast-types@0.15.2: @@ -6587,6 +6662,22 @@ packages: hasBin: true dev: true + /autoprefixer@10.4.17(postcss@8.4.35): + resolution: {integrity: sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + dependencies: + browserslist: 4.23.0 + caniuse-lite: 1.0.30001589 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.0.0 + postcss: 8.4.35 + postcss-value-parser: 4.2.0 + dev: true + /available-typed-arrays@1.0.5: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} @@ -6963,7 +7054,7 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001518 + caniuse-lite: 1.0.30001589 electron-to-chromium: 1.4.480 node-releases: 2.0.13 update-browserslist-db: 1.0.11(browserslist@4.21.10) @@ -6974,10 +7065,21 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001518 - electron-to-chromium: 1.4.480 - node-releases: 2.0.13 - update-browserslist-db: 1.0.11(browserslist@4.21.9) + caniuse-lite: 1.0.30001589 + electron-to-chromium: 1.4.680 + node-releases: 2.0.14 + update-browserslist-db: 1.0.13(browserslist@4.21.9) + + /browserslist@4.23.0: + resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001589 + electron-to-chromium: 1.4.680 + node-releases: 2.0.14 + update-browserslist-db: 1.0.13(browserslist@4.23.0) + dev: true /bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} @@ -7050,6 +7152,11 @@ packages: tslib: 2.6.2 dev: true + /camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + dev: true + /camelcase@5.3.1: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} @@ -7065,6 +7172,9 @@ packages: /caniuse-lite@1.0.30001518: resolution: {integrity: sha512-rup09/e3I0BKjncL+FesTayKtPrdwKhUufQFd3riFw1hHg8JmIFoInYfB102cFcY/pPgGmdyl/iy+jgiDi2vdA==} + /caniuse-lite@1.0.30001589: + resolution: {integrity: sha512-vNQWS6kI+q6sBlHbh71IIeC+sRwK2N3EDySc/updIGhIee2x5z00J4c1242/5/d6EpEMdOnk/m+6tuk4/tcsqg==} + /case-sensitive-paths-webpack-plugin@2.4.0: resolution: {integrity: sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==} engines: {node: '>=4'} @@ -7227,7 +7337,6 @@ packages: dependencies: color-name: 1.1.4 simple-swizzle: 0.2.2 - dev: false /color-support@1.1.3: resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} @@ -7244,7 +7353,6 @@ packages: dependencies: color-convert: 2.0.1 color-string: 1.9.1 - dev: false /colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} @@ -7260,6 +7368,11 @@ packages: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} dev: true + /commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + dev: true + /commander@6.2.1: resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} engines: {node: '>= 6'} @@ -7362,7 +7475,7 @@ packages: /core-js-compat@3.31.0: resolution: {integrity: sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==} dependencies: - browserslist: 4.21.10 + browserslist: 4.23.0 dev: true /core-js-pure@3.31.0: @@ -7427,12 +7540,12 @@ packages: peerDependencies: webpack: ^5.0.0 dependencies: - icss-utils: 5.1.0(postcss@8.4.24) - postcss: 8.4.24 - postcss-modules-extract-imports: 3.0.0(postcss@8.4.24) - postcss-modules-local-by-default: 4.0.3(postcss@8.4.24) - postcss-modules-scope: 3.0.0(postcss@8.4.24) - postcss-modules-values: 4.0.0(postcss@8.4.24) + icss-utils: 5.1.0(postcss@8.4.35) + postcss: 8.4.35 + postcss-modules-extract-imports: 3.0.0(postcss@8.4.35) + postcss-modules-local-by-default: 4.0.3(postcss@8.4.35) + postcss-modules-scope: 3.0.0(postcss@8.4.35) + postcss-modules-values: 4.0.0(postcss@8.4.35) postcss-value-parser: 4.2.0 semver: 7.5.4 webpack: 5.88.2 @@ -7718,6 +7831,10 @@ packages: - supports-color dev: true + /didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + dev: true + /diff-sequences@28.1.1: resolution: {integrity: sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} @@ -7740,6 +7857,10 @@ packages: path-type: 4.0.0 dev: true + /dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + dev: true + /doctrine@3.0.0: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} @@ -7838,6 +7959,10 @@ packages: stream-shift: 1.0.1 dev: true + /eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + dev: true + /easy-soap-request@5.6.1: resolution: {integrity: sha512-Sbq59ZHUYcND8w0Y2XZ13X7hbF6gUZQlWC8pBwCaqULLE44FY7Ph6UdG0c+ndBUJt9r77M4VCteieHg1JooeJA==} dependencies: @@ -7860,6 +7985,10 @@ packages: /electron-to-chromium@1.4.480: resolution: {integrity: sha512-IXTgg+bITkQv/FLP9FjX6f9KFCs5hQWeh5uNSKxB9mqYj/JXhHDbu+ekS43LVvbkL3eW6/oZy4+r9Om6lan1Uw==} + dev: true + + /electron-to-chromium@1.4.680: + resolution: {integrity: sha512-4nToZ5jlPO14W82NkF32wyjhYqQByVaDmLy4J2/tYcAbJfgO2TKJC780Az1V13gzq4l73CJ0yuyalpXvxXXD9A==} /emittery@0.10.2: resolution: {integrity: sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==} @@ -7869,6 +7998,10 @@ packages: /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + /emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + dev: true + /emojis-list@3.0.0: resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} engines: {node: '>= 4'} @@ -8214,8 +8347,8 @@ packages: resolution: {integrity: sha512-IgfweLvEpwyA4WgiQe9Nx6VV2QkML2NkvZnk1oKnIzXgXdWxuhF7zw4DvLTPZJn6PIUneiAXPF24QmoEqHTjyw==} dev: false - /fast-glob@3.2.12: - resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} + /fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} dependencies: '@nodelib/fs.stat': 2.0.5 @@ -8418,6 +8551,14 @@ packages: signal-exit: 3.0.7 dev: true + /foreground-child@3.1.1: + resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} + engines: {node: '>=14'} + dependencies: + cross-spawn: 7.0.3 + signal-exit: 4.1.0 + dev: true + /fork-ts-checker-webpack-plugin@7.3.0(typescript@4.8.4)(webpack@5.88.2): resolution: {integrity: sha512-IN+XTzusCjR5VgntYFgxbxVx3WraPRnKehBFrf00cMSrtUuW9MsG9dhL6MWpY6MkjC3wVwoujfCDgZZCQwbswA==} engines: {node: '>=12.13.0', yarn: '>=1.0.0'} @@ -8467,6 +8608,10 @@ packages: engines: {node: '>= 0.6'} dev: true + /fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + dev: true + /framer-motion@6.0.0(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-wVI+hVRkvQeWSvkxk8z5bTg+jBs9vfEZOist2s0e9tQzZvt+OBuAoAcvCvl+ADmFd4ncC2934vkwiJPZ8nSvMg==} peerDependencies: @@ -8680,6 +8825,13 @@ packages: is-glob: 4.0.3 dev: true + /glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 + dev: true + /glob-promise@4.2.2(glob@7.2.3): resolution: {integrity: sha512-xcUzJ8NWN5bktoTIX7eOclO1Npxd/dyVqUJxlLIDasT4C7KZyqlPIwkdJ0Ypiy3p2ZKahTjK4M9uC3sNSfNMzw==} engines: {node: '>=12'} @@ -8703,6 +8855,18 @@ packages: /glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + /glob@10.3.10: + resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + dependencies: + foreground-child: 3.1.1 + jackspeak: 2.3.6 + minimatch: 9.0.3 + minipass: 5.0.0 + path-scurry: 1.10.1 + dev: true + /glob@7.1.7: resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} dependencies: @@ -8746,7 +8910,7 @@ packages: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.2.12 + fast-glob: 3.3.2 ignore: 5.2.4 merge2: 1.4.1 slash: 3.0.0 @@ -9013,13 +9177,13 @@ packages: yup: 0.32.11 dev: false - /icss-utils@5.1.0(postcss@8.4.24): + /icss-utils@5.1.0(postcss@8.4.35): resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.24 + postcss: 8.4.35 dev: true /ieee754@1.2.1: @@ -9195,7 +9359,6 @@ packages: /is-arrayish@0.3.2: resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} - dev: false /is-bigint@1.0.4: resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} @@ -9478,6 +9641,15 @@ packages: istanbul-lib-report: 3.0.0 dev: true + /jackspeak@2.3.6: + resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} + engines: {node: '>=14'} + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + dev: true + /jake@10.8.7: resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} engines: {node: '>=10'} @@ -10030,8 +10202,8 @@ packages: - ts-node dev: true - /jiti@1.18.2: - resolution: {integrity: sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==} + /jiti@1.21.0: + resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} hasBin: true dev: true @@ -10238,6 +10410,16 @@ packages: type-check: 0.3.2 dev: true + /lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + dev: true + + /lilconfig@3.1.1: + resolution: {integrity: sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==} + engines: {node: '>=14'} + dev: true + /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} @@ -10286,10 +10468,22 @@ packages: resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} dev: false + /lodash.castarray@4.4.0: + resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==} + dev: true + /lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} dev: true + /lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + dev: true + + /lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: true + /lodash.mergewith@4.6.2: resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} dev: false @@ -10313,6 +10507,11 @@ packages: tslib: 2.6.2 dev: true + /lru-cache@10.2.0: + resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} + engines: {node: 14 || >=16.14} + dev: true + /lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: @@ -10840,6 +11039,13 @@ packages: brace-expansion: 2.0.1 dev: true + /minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: true + /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} @@ -10909,6 +11115,14 @@ packages: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} dev: true + /mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + dev: true + /nanoclone@0.2.1: resolution: {integrity: sha512-wynEP02LmIbLpcYw8uBKpcfF6dmg2vcpKqxeH5UcoKEYdExslsdUA4ugFauuaeYdTB76ez6gJW8XAZ6CgkXYxA==} dev: false @@ -10917,6 +11131,12 @@ packages: resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + dev: false + + /nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true /napi-build-utils@1.0.2: resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==} @@ -11078,6 +11298,10 @@ packages: /node-releases@2.0.13: resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} + dev: true + + /node-releases@2.0.14: + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} /nopt@1.0.10: resolution: {integrity: sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==} @@ -11100,6 +11324,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + dev: true + /npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} @@ -11134,6 +11363,11 @@ packages: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} + /object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + dev: true + /object-inspect@1.12.3: resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} @@ -11355,6 +11589,14 @@ packages: /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + /path-scurry@1.10.1: + resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + lru-cache: 10.2.0 + minipass: 5.0.0 + dev: true + /path-to-regexp@0.1.7: resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} dev: true @@ -11386,6 +11628,11 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} + /pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + dev: true + /pify@4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} @@ -11442,7 +11689,58 @@ packages: tslib: 2.6.2 dev: false - /postcss-loader@7.3.3(postcss@8.4.24)(webpack@5.88.2): + /postcss-import@15.1.0(postcss@8.4.35): + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + dependencies: + postcss: 8.4.35 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.2 + dev: true + + /postcss-import@16.0.1(postcss@8.4.35): + resolution: {integrity: sha512-i2Pci0310NaLHr/5JUFSw1j/8hf1CzwMY13g6ZDxgOavmRHQi2ba3PmUHoihO+sjaum+KmCNzskNsw7JDrg03g==} + engines: {node: '>=18.0.0'} + peerDependencies: + postcss: ^8.0.0 + dependencies: + postcss: 8.4.35 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.2 + dev: true + + /postcss-js@4.0.1(postcss@8.4.35): + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + dependencies: + camelcase-css: 2.0.1 + postcss: 8.4.35 + dev: true + + /postcss-load-config@4.0.2(postcss@8.4.35): + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 3.1.1 + postcss: 8.4.35 + yaml: 2.3.4 + dev: true + + /postcss-loader@7.3.3(postcss@8.4.35)(webpack@5.88.2): resolution: {integrity: sha512-YgO/yhtevGO/vJePCQmTxiaEwER94LABZN0ZMT4A0vsak9TpO+RvKRs7EmJ8peIlB9xfXCsS7M8LjqncsUZ5HA==} engines: {node: '>= 14.15.0'} peerDependencies: @@ -11450,51 +11748,69 @@ packages: webpack: ^5.0.0 dependencies: cosmiconfig: 8.2.0 - jiti: 1.18.2 - postcss: 8.4.24 + jiti: 1.21.0 + postcss: 8.4.35 semver: 7.5.4 webpack: 5.88.2 dev: true - /postcss-modules-extract-imports@3.0.0(postcss@8.4.24): + /postcss-modules-extract-imports@3.0.0(postcss@8.4.35): resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.24 + postcss: 8.4.35 dev: true - /postcss-modules-local-by-default@4.0.3(postcss@8.4.24): + /postcss-modules-local-by-default@4.0.3(postcss@8.4.35): resolution: {integrity: sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - icss-utils: 5.1.0(postcss@8.4.24) - postcss: 8.4.24 + icss-utils: 5.1.0(postcss@8.4.35) + postcss: 8.4.35 postcss-selector-parser: 6.0.13 postcss-value-parser: 4.2.0 dev: true - /postcss-modules-scope@3.0.0(postcss@8.4.24): + /postcss-modules-scope@3.0.0(postcss@8.4.35): resolution: {integrity: sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.24 + postcss: 8.4.35 postcss-selector-parser: 6.0.13 dev: true - /postcss-modules-values@4.0.0(postcss@8.4.24): + /postcss-modules-values@4.0.0(postcss@8.4.35): resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - icss-utils: 5.1.0(postcss@8.4.24) - postcss: 8.4.24 + icss-utils: 5.1.0(postcss@8.4.35) + postcss: 8.4.35 + dev: true + + /postcss-nested@6.0.1(postcss@8.4.35): + resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + dependencies: + postcss: 8.4.35 + postcss-selector-parser: 6.0.13 + dev: true + + /postcss-selector-parser@6.0.10: + resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 dev: true /postcss-selector-parser@6.0.13: @@ -11508,22 +11824,22 @@ packages: /postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - /postcss@8.4.24: - resolution: {integrity: sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==} + /postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} dependencies: - nanoid: 3.3.6 + nanoid: 3.3.7 picocolors: 1.0.0 source-map-js: 1.0.2 - dev: true - /postcss@8.4.31: - resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + /postcss@8.4.35: + resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==} engines: {node: ^10 || ^12 || >=14} dependencies: - nanoid: 3.3.6 + nanoid: 3.3.7 picocolors: 1.0.0 source-map-js: 1.0.2 + dev: true /preact@10.15.1: resolution: {integrity: sha512-qs2ansoQEwzNiV5eAcRT1p1EC/dmEzaATVDJNiB3g2sRDWdA7b7MurXdJjB2+/WQktGWZwxvDrnuRFbWuIr64g==} @@ -12089,6 +12405,12 @@ packages: dependencies: loose-envify: 1.4.0 + /read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + dependencies: + pify: 2.3.0 + dev: true + /read-pkg-up@7.0.1: resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} engines: {node: '>=8'} @@ -12305,7 +12627,7 @@ packages: adjust-sourcemap-loader: 4.0.0 convert-source-map: 1.9.0 loader-utils: 2.0.4 - postcss: 8.4.24 + postcss: 8.4.35 source-map: 0.6.1 dev: true @@ -12609,6 +12931,11 @@ packages: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} dev: true + /signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + dev: true + /simple-concat@1.0.1: resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} dev: false @@ -12625,7 +12952,6 @@ packages: resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} dependencies: is-arrayish: 0.3.2 - dev: false /simple-update-notifier@1.1.0: resolution: {integrity: sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==} @@ -12819,6 +13145,15 @@ packages: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 + /string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + dev: true + /string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} dependencies: @@ -12835,6 +13170,13 @@ packages: dependencies: ansi-regex: 5.0.1 + /strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + dependencies: + ansi-regex: 6.0.1 + dev: true + /strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} @@ -12952,6 +13294,20 @@ packages: resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} dev: false + /sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + commander: 4.1.1 + glob: 10.3.10 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.6 + ts-interface-checker: 0.1.13 + dev: true + /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -13018,6 +13374,43 @@ packages: resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} dev: false + /tailwind-merge@2.2.1: + resolution: {integrity: sha512-o+2GTLkthfa5YUt4JxPfzMIpQzZ3adD1vLVkvKE1Twl9UAhGsEbIZhHHZVRttyW177S8PDJI3bTQNaebyofK3Q==} + dependencies: + '@babel/runtime': 7.23.9 + dev: false + + /tailwindcss@3.4.1: + resolution: {integrity: sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==} + engines: {node: '>=14.0.0'} + hasBin: true + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.5.3 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.2 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.21.0 + lilconfig: 2.1.0 + micromatch: 4.0.5 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.0.0 + postcss: 8.4.35 + postcss-import: 15.1.0(postcss@8.4.35) + postcss-js: 4.0.1(postcss@8.4.35) + postcss-load-config: 4.0.2(postcss@8.4.35) + postcss-nested: 6.0.1(postcss@8.4.35) + postcss-selector-parser: 6.0.13 + resolve: 1.22.2 + sucrase: 3.35.0 + transitivePeerDependencies: + - ts-node + dev: true + /tapable@2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} @@ -13154,6 +13547,19 @@ packages: minimatch: 3.1.2 dev: true + /thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + dependencies: + thenify: 3.3.1 + dev: true + + /thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + dependencies: + any-promise: 1.3.0 + dev: true + /throttle-debounce@5.0.0: resolution: {integrity: sha512-2iQTSgkkc1Zyk0MeVrt/3BvuOXYPl/R8Z0U2xxo9rjwNciaHDG3R+Lm6dh4EeUci49DanvBnuqI6jshoQQRGEg==} engines: {node: '>=12.22'} @@ -13231,6 +13637,10 @@ packages: engines: {node: '>=6.10'} dev: true + /ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + dev: true + /ts-pnp@1.2.0(typescript@4.8.4): resolution: {integrity: sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==} engines: {node: '>=6'} @@ -13275,9 +13685,7 @@ packages: /tslib@2.5.3: resolution: {integrity: sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==} - - /tslib@2.6.1: - resolution: {integrity: sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==} + dev: false /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} @@ -13485,8 +13893,8 @@ packages: picocolors: 1.0.0 dev: true - /update-browserslist-db@1.0.11(browserslist@4.21.9): - resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} + /update-browserslist-db@1.0.13(browserslist@4.21.9): + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -13495,6 +13903,17 @@ packages: escalade: 3.1.1 picocolors: 1.0.0 + /update-browserslist-db@1.0.13(browserslist@4.23.0): + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.23.0 + escalade: 3.1.1 + picocolors: 1.0.0 + dev: true + /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: @@ -13669,7 +14088,7 @@ packages: dependencies: '@types/node': 17.0.35 esbuild: 0.17.19 - postcss: 8.4.24 + postcss: 8.4.35 resolve: 1.22.2 rollup: 3.25.1 optionalDependencies: @@ -13915,6 +14334,15 @@ packages: strip-ansi: 6.0.1 dev: true + /wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + dev: true + /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} @@ -14015,6 +14443,11 @@ packages: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} + /yaml@2.3.4: + resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} + engines: {node: '>= 14'} + dev: true + /yargs-parser@20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} engines: {node: '>=10'} diff --git a/web/postcss.config.cjs b/web/postcss.config.cjs new file mode 100644 index 000000000..d0ffab7e4 --- /dev/null +++ b/web/postcss.config.cjs @@ -0,0 +1,7 @@ +module.exports = { + plugins: { + 'postcss-import': {}, + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/web/styles/settings.ts b/web/styles/settings.ts index 6ce3c2b2a..90427eadb 100644 --- a/web/styles/settings.ts +++ b/web/styles/settings.ts @@ -1,6 +1,7 @@ import { Flags } from '../common/helpers/datasetHelpers' import { css } from 'styled-components' +// If migrate to tailwind put these variables in base layer export const colors = css` :root { /* Primary colours */ @@ -136,6 +137,7 @@ export const typography = css` } ` +// tw -> Use break-keep to prevent line breaks from being applied to Chinese/Japanese/Korean (CJK) text. export const strictLineBreak = Flags.HAS_LINE_BREAK_TYPO ? css` :root { diff --git a/web/styles/tailwind.css b/web/styles/tailwind.css new file mode 100644 index 000000000..84a2e69e0 --- /dev/null +++ b/web/styles/tailwind.css @@ -0,0 +1,47 @@ +@import 'tailwindcss/base'; +@import 'tailwindcss/components'; +@import 'tailwindcss/utilities'; + +@layer base { +} + +@layer utilities { + .block-wrapper { + @apply grid; + grid-template-areas: 'col-1 col-2 col-3'; + grid-template-columns: 4.2vw min(65ch, 100%) 4.2vw; + } + .block-wrapper > * { + grid-area: col-2; + } + + @media (min-width: 750px) { + .block-wrapper { + @apply grid w-screen; + grid-template-areas: 'col-1 col-2 col-3 col-4 col-5'; + grid-template-columns: + 1fr + 6.87vw + minmax(65ch, 920px) + 6.87vw + 1fr; + } + .pre-indent { + @apply w-full; + grid-column: 2 / 3; + } + .post-indent { + @apply w-full; + grid-column: 3 / 4; + } + .block-wrapper > * { + @apply w-full; + grid-area: col-3; + } + } + + .full-bleed { + @apply w-full; + grid-column: 1 / -1; + } +} diff --git a/web/tailwind.config.cjs b/web/tailwind.config.cjs new file mode 100644 index 000000000..93a042ad9 --- /dev/null +++ b/web/tailwind.config.cjs @@ -0,0 +1,264 @@ +/** @type {import('tailwindcss').Config} */ +// eslint-disable-next-line @typescript-eslint/no-var-requires +const plugin = require('tailwindcss/plugin') +// eslint-disable-next-line @typescript-eslint/no-var-requires +const colors = require('./colorConfig') + +const round = (num) => + num + .toFixed(7) + .replace(/(\.[0-9]+?)0+$/, '$1') + .replace(/\.0$/, '') +// eslint-disable-next-line @typescript-eslint/no-unused-vars +const rem = (px) => `${round(px / 16)}rem` +const em = (px, base) => `${round(px / base)}em` + +module.exports = { + content: ['./components/**/*.{js,ts,tsx}', './pageComponents/**/*.{js,ts,tsx}'], + /* + Now instead of dark:{class} classes being applied based on prefers-color-scheme, + they will be applied whenever the dark class is present earlier in the HTML tree. + inverted -> dark + */ + darkMode: 'selector', + theme: { + extend: { + colors: ({ theme }) => ({ + 'moss-green': { + 100: 'hsl(184, 100%, 17%)', + 95: 'hsl(184, 100%, 24%)', + 90: 'hsl(184, 31%, 58%)', + 80: 'hsl(184, 31%, 74%)', + 70: 'hsl(184, 30%, 84%)', + 60: 'hsl(184, 31%, 89%)', + 50: colors['moss-green'][50], + }, + 'energy-red': { + 100: colors['energy-red'][100], + 90: 'hsl(348, 100%, 67%)', + 80: 'hsl(347, 100%, 77%)', + 70: 'hsl(347, 100%, 86%)', + 60: 'hsl(349, 100%, 91%)', + 50: 'hsl(347, 100%, 96%)', + }, + black: { + 100: 'hsl(0, 0%, 0%)', + 80: 'hsl(0, 0%, 20%)', + }, + white: { + 100: colors.white[100], + }, + 'slate-blue': { + //--bg-slate-blue + 100: 'hsl(206, 34%, 14%)', + //--bg-slate-blue-95 + 95: 'hsl(206, 32%, 21%)', + 90: 'hsl(207, 14%, 37%)', + 80: 'hsl(207, 8%, 53%)', + 70: 'hsl(206, 9%, 68%)', + 60: 'hsl(206, 9%, 84%)', + 50: 'hsl(210, 8%, 90%)', + }, + 'mist-blue': { + 100: colors['mist-blue'][100], + 60: 'hsl(200, 56%, 94%)', + }, + 'lichen-green': { + 100: 'hsl(138, 67%, 94%)', + }, + 'spruce-wood': { + 100: 'hsl(25, 100%, 92%)', + 90: colors['spruce-wood'][90], + }, + 'heritage-red': { + 100: 'hsl(343, 100%, 25%)', + 90: 'hsl(343, 42%, 43%)', + 80: 'hsl(344, 32%, 62%)', + 70: 'hsl(344, 32%, 77%)', + 60: 'hsl(340, 32%, 91%)', + }, + 'clear-red': { + 100: 'hsl(0, 100%, 46%)', + 90: 'hsl(0, 85%, 68%)', + 80: 'hsl(0, 85%, 78%)', + 70: 'hsl(0, 86%, 86%)', + 60: 'hsl(0, 88%, 94%)', + }, + slate: { + //--default-text + 80: 'rgba(61, 61, 61, 1)', + }, + green: { + 100: 'hsl(118, 44%, 35%)', + 90: 'hsl(118, 44%, 50%)', + //--mid-green + //--bg-moss-green + //--bg-mid-green + 50: colors.green[50], + }, + yellow: { + //--mid-yellow + //--bg-mid-yellow + 50: colors.yellow[50], + }, + blue: { + //--mid-blue + //--bg-mid-blue + 50: colors.blue[50], + }, + orange: { + 100: 'hsl(34, 100%, 34%)', + 90: 'hsl(34, 100%, 50%)', + //--mid-orange + //--bg-mid-orange + 50: colors.orange[50], + }, + grey: { + 100: 'hsl(0, 0%, 9%)', + 90: 'hsl(0, 0%, 24%)', + 80: 'hsl(0, 0%, 34%)', + 70: 'hsl(0, 0%, 40%)', + 60: 'hsl(0, 0%, 44%)', + 50: 'hsl(0, 0%, 55%)', + 40: 'hsl(0, 0%, 75%)', + 30: 'hsl(0, 0%, 86%)', + 20: 'hsl(0, 0%, 92%)', + 10: 'hsl(0, 0%, 97%)', + }, + 'transparent-black': 'theme(colors.black.100)/20', + 'transparent-white': 'theme(colors.white.100)/20', + }), + spacing: ({ theme }) => ({ + xs: 'calc((4 / 16) * theme(fontSize.base))', + sm: 'calc((8 / 16) * theme(fontSize.base))', + md: 'calc((16 / 16) * theme(fontSize.base))', + lg: 'calc((24 / 16) * theme(fontSize.base))', + xl: 'calc((32 / 16) * theme(fontSize.base))', + '2xl': 'calc((40 / 16) * theme(fontSize.base))', + '3xl': 'calc((56 / 16) * theme(fontSize.base))', + '4xl': 'calc((96 / 16) * theme(fontSize.base))', + }), + fontSize: { + //--typeScale-00 + xs: ['clamp(calc(11.11 / 16 * 1rem), 0.19vw + 0.65rem, calc(14.08 / 16 * 1rem))'], + //--typeScale-05 + sm: ['clamp(calc(14.61 / 16 * 1rem), 0.33vw + 0.84rem, calc(19.68 / 16 * 1rem))'], + //--typeScale-1 + base: ['clamp(calc(16.00 / 16 * 1rem), 0.39vw + 0.91rem, calc(22.00 / 16 * 1rem))'], + //--typeScale-2 + md: ['clamp(calc(19.20 / 16 * 1rem), 0.54vw + 1.07rem, calc(27.50 / 16 * 1rem))'], + //--typeScale-3 + lg: ['clamp(calc(23.04 / 16 * 1rem), 0.73vw + 1.27rem, calc(34.38 / 16 * 1rem))'], + //--typeScale-4 + xl: ['clamp(calc(27.65 / 16 * 1rem), 0.99vw + 1.5rem, calc(42.97 / 16 * 1rem))'], + //--typeScale-4_5 + '2xl': ['clamp(calc(33.73 / 16 * 1rem), 1.38vw + 1.785rem, calc(55.055 / 16 * 1rem))'], + //--typeScale-5 + '3xl': ['clamp(calc(39.81 / 16 * 1rem), 1.77vw + 2.07rem, calc(67.14 / 16 * 1rem))'], + //--typeScale-6 + '4xl': ['clamp(calc(45.89 / 16 * 1rem), 2.16vw + 2.355rem, calc(79.225 / 16 * 1rem))'], + //--typeScale-7 + '5xl': ['clamp(calc(51.97 / 16 * 1rem), 2.55vw + 2.64rem, calc(91.31 / 16 * 1rem))'], + }, + fontWeight: { + semibolder: 650, + //--fontWeight-bold: tw -> semibold + //--fontWeight-medium: tw -> medium + //--fontWeight-regular: tw -> normal + }, + lineHeight: { + //--lineHeight-1 + inherit: 'inherit', + //--lineHeight-2 + earthy: 1.2, + //--lineHeight-2_5 + cloudy: 1.35, + //-lineHeight-3 + planetary: 1.5, + }, + maxWidth: { + viewport: '1920px', + }, + minWidth: { + viewport: '375', + }, + padding: { + 'layout-sm': 'clamp(16px, calc(-38.3689px + 14.4984vw), 250px)', + 'layout-md': 'clamp(16px, calc(-69.4369px + 22.7832vw), 368px)', + 'layout-lg': 'clamp(16px, calc(-101.4757px + 31.3269vw), 500px)', + }, + typography: (theme) => ({ + DEFAULT: { + css: { + fontSize: theme('fontSize.base'), + lineHeight: theme('lineHeight.planetary'), + h2: { + fontSize: em(18, 16), //theme('fontSize.base'), + lineHeight: theme('lineHeight.inherit'), + fontWeight: theme('fontWeight.medium'), + marginTop: theme('spacing.sm'), + marginBottom: theme('spacing.sm'), + paddingLeft: theme('padding.layout-lg'), + paddingRight: theme('padding.layout-lg'), + }, + h3: { + fontSize: em(16, 16), //theme('fontSize.base'), + lineHeight: theme('lineHeight.inherit'), + fontWeight: theme('fontWeight.medium'), + marginTop: theme('spacing.sm'), + marginBottom: theme('spacing.sm'), + paddingLeft: theme('padding.layout-lg'), + paddingRight: theme('padding.layout-lg'), + }, + ol: { + marginLeft: theme('padding.layout-lg'), + marginRight: theme('padding.layout-lg'), + }, + ul: { + marginLeft: theme('padding.layout-lg'), + marginRight: theme('padding.layout-lg'), + }, + 'ul ul, ul ol, ol ul, ol ol': { + paddingLeft: em(38, 24), + marginLeft: '0px', + marginRight: '0px', + }, + 'ol > li': { + marginLeft: em(8, 14), + }, + 'ul > li': { + marginLeft: em(8, 14), + }, + }, + }, + envis: { + css: { + '--tw-prose-body': theme('colors.slate.80'), + '--tw-prose-bullets': theme('colors.slate.80'), + '--tw-prose-counters': theme('colors.slate.80'), + //inverted + '--tw-prose-invert-headings': theme('colors.white.100'), + }, + }, + }), + }, + }, + plugins: [ + require('@tailwindcss/typography'), + plugin(function ({ matchVariant }) { + matchVariant( + 'nth', + (value) => { + return `&:nth-child(${value})` + }, + { + values: { + 1: '1', + 2: '2', + 3: '3', + }, + }, + ) + }), + ], +} diff --git a/web/types/types.ts b/web/types/types.ts index 3f3b238da..d6b71568d 100644 --- a/web/types/types.ts +++ b/web/types/types.ts @@ -267,6 +267,8 @@ export type BackgroundColours = export type DesignOptions = { background?: BackgroundColours + utility: string + dark: boolean imagePosition?: TeaserImagePosition imageSize?: TeaserImageSize }