From 25adc30d9af17fe479a20e0fcc931383620689ac Mon Sep 17 00:00:00 2001 From: Nathan Young <1447339+nathanyoung@users.noreply.github.com> Date: Wed, 14 Dec 2022 21:15:15 -0800 Subject: [PATCH 01/40] chore: react-select 3.1.0 to 4.3.1 (#811) --- package.json | 2 +- .../FormikSelectInput.test.jsx | 12 +- .../FormikTimePicker.test.tsx | 2 +- .../SelectInput/SelectInput.test.jsx | 2 +- yarn.lock | 138 ++++++++++++++++-- 5 files changed, 129 insertions(+), 27 deletions(-) diff --git a/package.json b/package.json index 0c6746e50..f8f5b6b7e 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "react-datepicker": "^3.3.0", "react-merge-refs": "^1.1.0", "react-popper": "^2.2.3", - "react-select": "^3.1.0", + "react-select": "^4.3.1", "uuid": "^8.3.2" }, "peerDependencies": { diff --git a/src/components/Formik/FormikSelectInput/FormikSelectInput.test.jsx b/src/components/Formik/FormikSelectInput/FormikSelectInput.test.jsx index 49e13fb11..bec0ffcc6 100644 --- a/src/components/Formik/FormikSelectInput/FormikSelectInput.test.jsx +++ b/src/components/Formik/FormikSelectInput/FormikSelectInput.test.jsx @@ -45,16 +45,6 @@ const renderForm = (initialValue, props, testValueKey = testLabelName) => ( ); -function getByTextWithMarkup(text) { - return (content, element) => { - const hasText = node => node.textContent === text; - const elementHasText = hasText(element); - const childrenDontHaveText = Array.from(element.children).every(child => !hasText(child)); - - return elementHasText && childrenDontHaveText; - }; -} - describe('FormikSelectInput', () => { describe('States', () => { describe('Hidden label, with a placeholder', () => { @@ -121,7 +111,7 @@ describe('FormikSelectInput', () => { test('it disables the input', () => { render(renderForm([], { isDisabled: true })); - expect(screen.getByRole('textbox')).toBeDisabled(); + expect(screen.getByLabelText(testLabelName)).toBeDisabled(); }); }); diff --git a/src/components/Formik/FormikTimePicker/FormikTimePicker.test.tsx b/src/components/Formik/FormikTimePicker/FormikTimePicker.test.tsx index 883572dbd..bbda9b8de 100644 --- a/src/components/Formik/FormikTimePicker/FormikTimePicker.test.tsx +++ b/src/components/Formik/FormikTimePicker/FormikTimePicker.test.tsx @@ -132,7 +132,7 @@ describe('FormikTimePicker', () => { test('it disables the input', () => { render(renderForm([], { isDisabled: true })); - expect(screen.getByRole('textbox')).toBeDisabled(); + expect(screen.getByLabelText(testLabelName)).toBeDisabled(); }); }); diff --git a/src/components/SelectInput/SelectInput.test.jsx b/src/components/SelectInput/SelectInput.test.jsx index 0d5fb2669..e9be64605 100644 --- a/src/components/SelectInput/SelectInput.test.jsx +++ b/src/components/SelectInput/SelectInput.test.jsx @@ -236,7 +236,7 @@ describe('SelectInput', () => { />, ); - expect(screen.getByRole('textbox')).toBeDisabled(); + expect(screen.getByLabelText('Select Label')).toBeDisabled(); }); }); diff --git a/yarn.lock b/yarn.lock index b1959965d..1c52234e1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -863,6 +863,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-syntax-jsx@^7.17.12": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0" + integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" @@ -1525,13 +1532,20 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.8", "@babel/runtime@^7.16.3", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.0", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.8", "@babel/runtime@^7.16.3", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.0", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": version "7.17.2" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.2.tgz#66f68591605e59da47523c631416b18508779941" integrity sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw== dependencies: regenerator-runtime "^0.13.4" +"@babel/runtime@^7.12.0", "@babel/runtime@^7.18.3": + version "7.20.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.6.tgz#facf4879bfed9b5326326273a64220f099b0fce3" + integrity sha512-Q+8MqP7TiHMWzSfwiJwXCjyf4GYA4Dgw3emg/7xmwsdLJOZUp+nMqcOwOzzYheuM1rhDu8FSj2l0aoMygEuXuA== + dependencies: + regenerator-runtime "^0.13.11" + "@babel/runtime@^7.17.8", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.9.tgz#b4fcfce55db3d2e5e080d2490f608a3b9f407f4a" @@ -1662,7 +1676,25 @@ resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.6.tgz#d5e0706cf8c6acd8c6032f8d54070af261bbbb2f" integrity sha512-ws57AidsDvREKrZKYffXddNkyaF14iHNHm8VQnZH6t99E8gczjNN0GpvcGny0imC80yQ0tHz1xVUKk/KFQSUyA== -"@emotion/cache@^10.0.27", "@emotion/cache@^10.0.9": +"@emotion/babel-plugin@^11.10.5": + version "11.10.5" + resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.10.5.tgz#65fa6e1790ddc9e23cc22658a4c5dea423c55c3c" + integrity sha512-xE7/hyLHJac7D2Ve9dKroBBZqBT7WuPQmWcq7HSGb84sUuP4mlOWoB8dvVfD9yk5DHkU1m6RW7xSoDtnQHNQeA== + dependencies: + "@babel/helper-module-imports" "^7.16.7" + "@babel/plugin-syntax-jsx" "^7.17.12" + "@babel/runtime" "^7.18.3" + "@emotion/hash" "^0.9.0" + "@emotion/memoize" "^0.8.0" + "@emotion/serialize" "^1.1.1" + babel-plugin-macros "^3.1.0" + convert-source-map "^1.5.0" + escape-string-regexp "^4.0.0" + find-root "^1.1.0" + source-map "^0.5.7" + stylis "4.1.3" + +"@emotion/cache@^10.0.27": version "10.0.29" resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-10.0.29.tgz#87e7e64f412c060102d589fe7c6dc042e6f9d1e0" integrity sha512-fU2VtSVlHiF27empSbxi1O2JFdNWZO+2NFHfwO0pxgTep6Xa3uGb+3pVKfLww2l/IBGLNEZl5Xf/++A4wAYDYQ== @@ -1672,7 +1704,18 @@ "@emotion/utils" "0.11.3" "@emotion/weak-memoize" "0.2.5" -"@emotion/core@^10.0.9", "@emotion/core@^10.1.1": +"@emotion/cache@^11.10.5", "@emotion/cache@^11.4.0": + version "11.10.5" + resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.10.5.tgz#c142da9351f94e47527ed458f7bbbbe40bb13c12" + integrity sha512-dGYHWyzTdmK+f2+EnIGBpkz1lKc4Zbj2KHd4cX3Wi8/OWr5pKslNjc3yABKH4adRGCvSX4VDC0i04mrrq0aiRA== + dependencies: + "@emotion/memoize" "^0.8.0" + "@emotion/sheet" "^1.2.1" + "@emotion/utils" "^1.2.0" + "@emotion/weak-memoize" "^0.3.0" + stylis "4.1.3" + +"@emotion/core@^10.1.1": version "10.3.1" resolved "https://registry.yarnpkg.com/@emotion/core/-/core-10.3.1.tgz#4021b6d8b33b3304d48b0bb478485e7d7421c69d" integrity sha512-447aUEjPIm0MnE6QYIaFz9VQOHSXf4Iu6EWOIqq11EAPqinkSZmfymPTmlOE3QjLv846lH4JVZBUOtwGbuQoww== @@ -1684,7 +1727,7 @@ "@emotion/sheet" "0.9.4" "@emotion/utils" "0.11.3" -"@emotion/css@^10.0.27", "@emotion/css@^10.0.9": +"@emotion/css@^10.0.27": version "10.0.27" resolved "https://registry.yarnpkg.com/@emotion/css/-/css-10.0.27.tgz#3a7458198fbbebb53b01b2b87f64e5e21241e14c" integrity sha512-6wZjsvYeBhyZQYNrGoR5yPMYbMBNEnanDrqmsqS1mzDm1cOTu12shvl2j4QHNS36UaTE0USIJawCH9C8oW34Zw== @@ -1698,6 +1741,11 @@ resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413" integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow== +"@emotion/hash@^0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.0.tgz#c5153d50401ee3c027a57a177bc269b16d889cb7" + integrity sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ== + "@emotion/is-prop-valid@0.8.8", "@emotion/is-prop-valid@^0.8.6": version "0.8.8" resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz#db28b1c4368a259b60a97311d6a952d4fd01ac1a" @@ -1710,6 +1758,25 @@ resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb" integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw== +"@emotion/memoize@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.0.tgz#f580f9beb67176fa57aae70b08ed510e1b18980f" + integrity sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA== + +"@emotion/react@^11.1.1": + version "11.10.5" + resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.10.5.tgz#95fff612a5de1efa9c0d535384d3cfa115fe175d" + integrity sha512-TZs6235tCJ/7iF6/rvTaOH4oxQg2gMAcdHemjwLKIjKz4rRuYe1HJ2TQJKnAcRAfOUDdU8XoDadCe1rl72iv8A== + dependencies: + "@babel/runtime" "^7.18.3" + "@emotion/babel-plugin" "^11.10.5" + "@emotion/cache" "^11.10.5" + "@emotion/serialize" "^1.1.1" + "@emotion/use-insertion-effect-with-fallbacks" "^1.0.0" + "@emotion/utils" "^1.2.0" + "@emotion/weak-memoize" "^0.3.0" + hoist-non-react-statics "^3.3.1" + "@emotion/serialize@^0.11.15", "@emotion/serialize@^0.11.16": version "0.11.16" resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-0.11.16.tgz#dee05f9e96ad2fb25a5206b6d759b2d1ed3379ad" @@ -1721,11 +1788,27 @@ "@emotion/utils" "0.11.3" csstype "^2.5.7" +"@emotion/serialize@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.1.tgz#0595701b1902feded8a96d293b26be3f5c1a5cf0" + integrity sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA== + dependencies: + "@emotion/hash" "^0.9.0" + "@emotion/memoize" "^0.8.0" + "@emotion/unitless" "^0.8.0" + "@emotion/utils" "^1.2.0" + csstype "^3.0.2" + "@emotion/sheet@0.9.4": version "0.9.4" resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-0.9.4.tgz#894374bea39ec30f489bbfc3438192b9774d32e5" integrity sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA== +"@emotion/sheet@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.2.1.tgz#0767e0305230e894897cadb6c8df2c51e61a6c2c" + integrity sha512-zxRBwl93sHMsOj4zs+OslQKg/uhF38MB+OMKoCrVuS0nyTkqnau+BM3WGEoOptg9Oz45T/aIGs1qbVAsEFo3nA== + "@emotion/styled-base@^10.3.0": version "10.3.0" resolved "https://registry.yarnpkg.com/@emotion/styled-base/-/styled-base-10.3.0.tgz#9aa2c946100f78b47316e4bc6048321afa6d4e36" @@ -1754,16 +1837,36 @@ resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed" integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== +"@emotion/unitless@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.8.0.tgz#a4a36e9cbdc6903737cd20d38033241e1b8833db" + integrity sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw== + +"@emotion/use-insertion-effect-with-fallbacks@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz#ffadaec35dbb7885bd54de3fa267ab2f860294df" + integrity sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A== + "@emotion/utils@0.11.3": version "0.11.3" resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-0.11.3.tgz#a759863867befa7e583400d322652a3f44820924" integrity sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw== +"@emotion/utils@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.2.0.tgz#9716eaccbc6b5ded2ea5a90d65562609aab0f561" + integrity sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw== + "@emotion/weak-memoize@0.2.5": version "0.2.5" resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46" integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA== +"@emotion/weak-memoize@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz#ea89004119dc42db2e1dba0f97d553f7372f6fcb" + integrity sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg== + "@eslint/eslintrc@^0.4.3": version "0.4.3" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" @@ -11338,7 +11441,7 @@ hmac-drbg@^1.0.1: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0: +hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.1: version "3.3.2" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== @@ -17552,15 +17655,14 @@ react-select-event@^4.1.4: dependencies: "@testing-library/dom" ">=5" -react-select@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/react-select/-/react-select-3.2.0.tgz#de9284700196f5f9b5277c5d850a9ce85f5c72fe" - integrity sha512-B/q3TnCZXEKItO0fFN/I0tWOX3WJvi/X2wtdffmwSQVRwg5BpValScTO1vdic9AxlUgmeSzib2hAZAwIUQUZGQ== +react-select@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/react-select/-/react-select-4.3.1.tgz#389fc07c9bc7cf7d3c377b7a05ea18cd7399cb81" + integrity sha512-HBBd0dYwkF5aZk1zP81Wx5UsLIIT2lSvAY2JiJo199LjoLHoivjn9//KsmvQMEFGNhe58xyuOITjfxKCcGc62Q== dependencies: - "@babel/runtime" "^7.4.4" - "@emotion/cache" "^10.0.9" - "@emotion/core" "^10.0.9" - "@emotion/css" "^10.0.9" + "@babel/runtime" "^7.12.0" + "@emotion/cache" "^11.4.0" + "@emotion/react" "^11.1.1" memoize-one "^5.0.0" prop-types "^15.6.0" react-input-autosize "^3.0.0" @@ -17796,6 +17898,11 @@ regenerate@^1.4.2: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== +regenerator-runtime@^0.13.11: + version "0.13.11" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== + regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.7, regenerator-runtime@^0.13.9: version "0.13.9" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" @@ -19688,6 +19795,11 @@ stylelint@^13.6.0: v8-compile-cache "^2.3.0" write-file-atomic "^3.0.3" +stylis@4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.1.3.tgz#fd2fbe79f5fed17c55269e16ed8da14c84d069f7" + integrity sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA== + sugarss@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/sugarss/-/sugarss-2.0.0.tgz#ddd76e0124b297d40bf3cca31c8b22ecb43bc61d" From 935c3615456e7ca8d8b2b51f0c13d6e0f6985f2d Mon Sep 17 00:00:00 2001 From: Nathan Young <1447339+nathanyoung@users.noreply.github.com> Date: Fri, 2 Feb 2024 10:28:10 -0800 Subject: [PATCH 02/40] BREAKING CHANGE: New Buttons (#865) BREAKING CHANGE: * wip * more wip * fix errors * form label help text tokens * mediamodal close button * Update Theming.stories.mdx * fix build * Update Button.VisualTests.stories.tsx * Update Button.VisualTests.stories.tsx * cleanup --- .../Box/Box.VisualTests.stories.tsx | 60 ++- .../Button/Button.Overview.stories.mdx | 368 +++++++------- .../Button/Button.Playground.stories.tsx | 6 - .../Button/Button.VisualTests.stories.tsx | 145 ++---- src/components/Button/Button.constants.ts | 12 +- src/components/Button/Button.module.scss | 470 ++++++++++++------ src/components/Button/Button.test.jsx | 159 +++--- src/components/Button/Button.tsx | 306 +++++++----- .../Card/Card.Codesandbox.stories.mdx | 6 +- src/components/Card/Card.Overview.stories.mdx | 8 +- .../Drawer/Drawer.Overview.stories.mdx | 24 +- .../Drawer/Drawer.Playground.stories.tsx | 2 +- .../FileUpload.Overview.stories.mdx | 95 +--- .../FileUpload.Playground.stories.tsx | 3 - src/components/FileUpload/FileUpload.test.tsx | 83 +++- src/components/FileUpload/FileUpload.tsx | 329 ++++++------ src/components/FormControl/FormControl.tsx | 3 +- .../FormLabel/FormLabel.module.scss | 5 +- src/components/FormLabel/FormLabel.tsx | 1 - .../MediaModal.Codesandbox.stories.mdx | 2 +- .../MediaModal.Overview.stories.mdx | 45 +- .../MediaModal.Playground.stories.tsx | 2 +- .../MediaModal/MediaModal.module.scss | 8 +- .../MediaModal/MediaModal.stories.tsx | 2 +- src/components/MediaModal/MediaModal.tsx | 61 ++- .../Modal/Modal.Codesandbox.stories.mdx | 4 +- .../Modal/Modal.Overview.stories.mdx | 18 +- .../Modal/Modal.VisualTests.stories.jsx | 34 +- src/components/Modal/Modal.stories.tsx | 11 +- src/components/Pagination/Pagination.tsx | 6 +- .../Popover/Popover.Codesandbox.stories.mdx | 2 +- .../Popover/Popover.Overview.stories.mdx | 20 +- .../Popover/Popover.VisualTests.stories.tsx | 13 +- .../Toast/Toast.Overview.stories.mdx | 11 +- src/docs/FormTheming.stories.mdx | 9 +- src/docs/Theming.stories.mdx | 103 ++-- .../useOpenClose.Overview.stories.mdx | 2 +- src/stories/FormControls.stories.mdx | 82 ++- src/styles/variables/forms.scss | 9 +- 39 files changed, 1386 insertions(+), 1143 deletions(-) diff --git a/src/components/Box/Box.VisualTests.stories.tsx b/src/components/Box/Box.VisualTests.stories.tsx index 89330642a..3a9017ea0 100644 --- a/src/components/Box/Box.VisualTests.stories.tsx +++ b/src/components/Box/Box.VisualTests.stories.tsx @@ -9,6 +9,7 @@ import { BRAND_COLOR_NAMES, SPACING_OPTIONS, FONT_FAMILY_OPTIONS, + FONT_WEIGHT_OPTIONS, } from '../../lib/tokens'; import { BrandColor } from '../../types'; import { RESPONSIVE_STORY } from '../../docs/constants'; @@ -362,24 +363,27 @@ export const AllFontColors: React.FunctionComponent = () => ( ); -export const AllFontSizes: React.FunctionComponent = () => ( - <> - {[...FONT_SIZE_OPTIONS].reverse().map((fontSize, i) => ( - - {`${fontSize} font size`} - - ))} - -); - -export const AllFontFamilies: React.FunctionComponent = () => ( - <> - {[...FONT_FAMILY_OPTIONS].map((fontFamily, i) => ( - - {`${fontFamily} font size`} +export const AllFontSizesWeightsFamily: React.FunctionComponent = () => ( + + {[...FONT_FAMILY_OPTIONS].map((fontFamily, l) => ( + + {[...FONT_WEIGHT_OPTIONS].map((fontWeight, j) => ( + + {[...FONT_SIZE_OPTIONS].reverse().map((fontSize, i) => ( + + {`${fontWeight} ${fontSize} font size`} + + ))} + + ))} ))} - + ); export const AllMargin: React.FunctionComponent = () => ( @@ -459,7 +463,11 @@ const BoxTemplate: Story = ({ propertyName, ...args }) => {

{`Breakpoint: ${activeBreakpoint.name}`}

-

{`${propertyName}: ${args[propertyName][activeBreakpoint.name]}`}

+

+ {`${propertyName}: ${ + args[propertyName][activeBreakpoint.name] + }`} +

); @@ -676,7 +684,11 @@ const BoxChildrenTemplate: Story = ({ propertyName, ...args }) => { alignItems="center" >

{`Breakpoint: ${activeBreakpoint.name}`}

-

{`${propertyName}: ${args[propertyName][activeBreakpoint.name]}`}

+

+ {`${propertyName}: ${ + args[propertyName][activeBreakpoint.name] + }`} +

= ({ propertyName, ...args }) => { alignItems="center" >

{`Breakpoint: ${activeBreakpoint.name}`}

-

{`${propertyName}: ${args[propertyName][activeBreakpoint.name]}`}

+

+ {`${propertyName}: ${ + args[propertyName][activeBreakpoint.name] + }`} +

= ({ propertyName, ...args }) => { alignItems="center" >

{`Breakpoint: ${activeBreakpoint.name}`}

-

{`${propertyName}: ${args[propertyName][activeBreakpoint.name]}`}

+

+ {`${propertyName}: ${ + args[propertyName][activeBreakpoint.name] + }`} +

); diff --git a/src/components/Button/Button.Overview.stories.mdx b/src/components/Button/Button.Overview.stories.mdx index a204a2de7..62e592b20 100644 --- a/src/components/Button/Button.Overview.stories.mdx +++ b/src/components/Button/Button.Overview.stories.mdx @@ -21,68 +21,35 @@ Actions almost always occur on the same page. -## Color Variants +## Variants -The `variant` prop determines which color variant to render. +The `variant` prop determines which color visual weight to render. - + - - - - - - - - + + + + + - - - - -## Outlined - -Use `isOutlined` to render an outline button. This is helpful for adding a secondary CTA in an application which matches -the color of the primary CTA but makes the hierarchy clear. The background is transparent in the default state. - - - - - - - - - - - + + + + + + + + + @@ -93,7 +60,7 @@ the color of the primary CTA but makes the hierarchy clear. The background is tr Set the size of the button to `xs`, `sm`, `md` or `lg`. `md` is the default size. The button also takes a `ResponsiveProp` object so it can have different sizes at different breakpoints. - + - - - - + + + + -## Naked - -When you need a button with no styles but want to use utility classes. - - - - - - - - - ## Full Width Use the `fullWidth` prop to allow the button to grow to its container's full width. - + - - - - + @@ -162,42 +106,32 @@ Use the `fullWidth` prop to allow the button to grow to its container's full wid Add an icon to the left or right inside the Button using the `iconPrefix` and `iconSuffix` props respectively. - + - - - - - - - -## Icon Only Button +## Icon Button -Use a combination of `isNaked` and an named icon to make an icon a button. Be sure to include an `aria-label` for screen readers to know what action the button will perform when pressed. +Use a combination of `tertiary-*` variant and a named icon to make an icon a button. Be sure to include an `aria-label` for screen readers to know what action the button will perform when pressed. - + - + + + + + @@ -217,9 +159,19 @@ The width of the button will remain consistent to prevent content from shifting. Use for actions that aren’t currently available, such as immediately after a form submission. The interface should make it clear why the button is disabled and what needs to be done to enable it. - + - + + + + + @@ -227,7 +179,7 @@ The interface should make it clear why the button is disabled and what needs to Callback functions can be passed to `onClick`, `onBlur`, and `onFocus` events. - + - - - + + + + @@ -319,101 +279,111 @@ The Button component can be themed by base tokens, or component specific tokens. const tokens = { '--button-font-family': '--asset-fonts-body', '--button-font-weight': '--size-font-weight-bold', - '--button-size-xs-border-radius': '--form-control-size-sm-border-radius', + '--button-size-xs-border-radius': + '--form-control-size-sm-border-radius', '--button-size-xs-font-size': '--form-control-size-xs-font-size', '--button-size-xs-padding-vertical': '--size-spacing-2xs', '--button-size-xs-padding-horizontal': '--size-spacing-xs', - '--button-size-sm-border-radius': '--form-control-size-sm-border-radius', + '--button-size-sm-border-radius': + '--form-control-size-sm-border-radius', '--button-size-sm-font-size': '--form-control-size-sm-font-size', '--button-size-sm-padding-vertical': '--form-control-size-sm-padding', '--button-size-sm-padding-horizontal': '--size-spacing-sm', - '--button-size-md-border-radius': '--form-control-size-md-border-radius', + '--button-size-md-border-radius': + '--form-control-size-md-border-radius', '--button-size-md-font-size': '--form-control-size-md-font-size', '--button-size-md-padding-vertical': '--form-control-size-md-padding', '--button-size-md-padding-horizontal': '--size-spacing-md', - '--button-size-lg-border-radius': '--form-control-size-lg-border-radius', + '--button-size-lg-border-radius': + '--form-control-size-lg-border-radius', '--button-size-lg-font-size': '--form-control-size-lg-font-size', '--button-size-lg-padding-vertical': '--form-control-size-lg-padding', '--button-size-lg-padding-horizontal': '--size-spacing-lg', - '--button-primary-background-color': '--color-brand-primary-500', + '--button-primary-background-color': '--color-brand-primary-500;', '--button-primary-background-color-hover': '--color-brand-primary-600', + '--button-primary-background-color-active': '--color-brand-primary-700', '--button-primary-font-color': '--color-brand-white-base', '--button-primary-font-color-hover': '--color-brand-white-base', - '--button-primary-outline-border-color': '--color-brand-primary-500', - '--button-primary-outline-border-color-hover': '--color-brand-primary-500', - '--button-primary-outline-background-color': 'transparent', - '--button-primary-outline-background-color-hover': '--color-brand-primary-50', - '--button-primary-outline-font-color': '--color-brand-primary-500', - '--button-primary-outline-font-color-hover': '--color-brand-primary-600', - '--button-primary-box-shadow-focus': 'form-control-box-shadow-focus', - '--button-success-background-color': '--color-brand-success-500', - '--button-success-background-color-hover': '--color-brand-success-600', - '--button-success-font-color': '--color-brand-white-base', - '--button-success-font-color-hover': '--color-brand-white-base', - '--button-success-outline-background-color': 'transparent', - '--button-success-outline-background-color-hover': '--color-brand-success-50', - '--button-success-outline-border-color': '--color-brand-success-500', - '--button-success-outline-border-color-hover': '--color-brand-success-500', - '--button-success-outline-font-color': '--color-brand-success-500', - '--button-success-outline-font-color-hover': '--color-brand-success-600', - '--button-success-box-shadow-focus': 'form-control-box-shadow-focus', - '--button-danger-background-color': '--color-brand-danger-500', - '--button-danger-background-color-hover': '--color-brand-danger-600', - '--button-danger-font-color': '--color-brand-white-base', - '--button-danger-font-color-hover': '--color-brand-white-base', - '--button-danger-outline-background-color': 'transparent', - '--button-danger-outline-background-color-hover': '--color-brand-danger-50', - '--button-danger-outline-border-color': '--color-brand-danger-500', - '--button-danger-outline-border-hover-color': '--color-brand-danger-500', - '--button-danger-outline-font-color': '--color-brand-danger-500', - '--button-danger-outline-font-color-hover': '--color-brand-danger-500', - '--button-danger-box-shadow-focus': '0 0 0 4px --color-brand-danger-200', - '--button-dark-background-color': '--color-brand-dark-base', - '--button-dark-background-color-hover': '--color-brand-black-base', - '--button-dark-font-color': '--color-brand-white-base', - '--button-dark-font-color-hover': '--color-brand-white-base', - '--button-dark-outline-background-color': 'transparent', - '--button-dark-outline-background-color-hover': '--color-brand-grey-50', - '--button-dark-outline-border-color': '--color-brand-dark-base', - '--button-dark-outline-border-hover-color': '--color-brand-grey-900', - '--button-dark-outline-font-color': '--color-brand-dark-base', - '--button-dark-outline-font-color-hover': '--color-brand-white-base', - '--button-dark-box-shadow-focus': '0 0 0 4px --color-brand-grey-200', - '--button-light-background-color': '--color-brand-grey-100', - '--button-light-background-color-hover': '--color-brand-grey-200', - '--button-light-font-color': '--color-brand-dark-base', - '--button-light-font-color-hover': '--color-brand-dark-base', - '--button-light-outline-background-color': 'transparent', - '--button-light-outline-background-color-hover': '--color-brand-grey-50', - '--button-light-outline-border-color': '--color-brand-light-base', - '--button-light-outline-border-color-hover': '--color-brand-grey-300', - '--button-light-outline-font-color': '--color-brand-dark-base', - '--button-light-outline-font-color-hover': '--color-brand-dark-base', - '--button-light-box-shadow-focus': '0 0 0 4px --color-brand-grey-200', - '--button-white-background-color': '--color-brand-white-base', - '--button-white-background-color-hover': '--color-brand-grey-50', - '--button-white-font-color': '--color-brand-grey-600', - '--button-white-font-color-hover': '--color-brand-grey-700', - '--button-white-outline-background-color': 'transparent', - '--button-white-outline-background-color-hover': 'rgba(255, 255, 255, .1)', - '--button-white-outline-border-color': '--color-brand-white-base', - '--button-white-outline-border-color-hover': '--color-brand-white-base', - '--button-white-outline-font-color': '--color-brand-white-base', - '--button-white-outline-font-color-hover': '--color-brand-white-base', - '--button-white-box-shadow-focus': '0 0 0 4px --color-brand-grey-200', - '--button-naked-font-color': '', + '--button-secondary-background-color': '--color-brand-white-base', + '--button-secondary-background-color-hover': '--color-brand-primary-50', + '--button-secondary-background-color-active': + '--color-brand-primary-100', + '--button-secondary-border-color': '--color-brand-grey-200', + '--button-secondary-border-color-hover': '--color-brand-primary-100', + '--button-secondary-font-color': '--color-brand-primary-500', + '--button-secondary-font-color-hover': '--color-brand-primary-500', + '--button-tertiary-background-color': 'transparent', + '--button-tertiary-background-color-hover': '--color-brand-primary-50', + '--button-tertiary-background-color-active': + '--color-brand-primary-100', + '--button-tertiary-font-color': '--color-brand-primary-500', + '--button-tertiary-font-color-hover': '--color-brand-primary-500', + '--button-primary-neutral-background-color': '--color-brand-grey-100', + '--button-primary-neutral-background-color-hover': + '--color-brand-grey-200', + '--button-primary-neutral-background-color-active': + '--color-brand-grey-300', + '--button-primary-neutral-font-color': '--color-brand-grey-700', + '--button-primary-neutral-font-color-hover': '--color-brand-grey-700', + '--button-secondary-neutral-background-color': + '--color-brand-white-base', + '--button-secondary-neutral-background-color-hover': + '--color-brand-grey-100', + '--button-secondary-neutral-background-color-active': + '--color-brand-grey-200', + '--button-secondary-neutral-border-color': '--color-brand-grey-200', + '--button-secondary-neutral-border-color-hover': + '--color-brand-grey-100', + '--button-secondary-neutral-font-color': '--color-brand-grey-700', + '--button-secondary-neutral-font-color-hover': '--color-brand-grey-700', + '--button-tertiary-neutral-background-color': 'transparent', + '--button-tertiary-neutral-background-color-hover': + '--color-brand-grey-100', + '--button-tertiary-neutral-background-color-active': + '--color-brand-grey-200', + '--button-tertiary-neutral-font-color': '--color-brand-grey-700', + '--button-tertiary-neutral-font-color-hover': '--color-brand-grey-700', + '--button-primary-danger-background-color': '--color-brand-danger-500', + '--button-primary-danger-background-color-hover': + '--color-brand-danger-600', + '--button-primary-danger-background-color-active': + '--color-brand-danger-700', + '--button-primary-danger-font-color': '--color-brand-white-base', + '--button-primary-danger-font-color-hover': '--color-brand-white-base', + '--button-secondary-danger-background-color': + '--color-brand-white-base', + '--button-secondary-danger-background-color-hover': + '--color-brand-danger-50', + '--button-secondary-danger-background-color-active': + '--color-brand-danger-100', + '--button-secondary-danger-border-color': '--color-brand-grey-200', + '--button-secondary-danger-border-color-hover': + '--color-brand-danger-100', + '--button-secondary-danger-font-color': '--color-brand-danger-500', + '--button-secondary-danger-font-color-hover': + '--color-brand-danger-500', + '--button-tertiary-danger-background-color': 'transparent', + '--button-tertiary-danger-background-color-hover': + '--color-brand-danger-50', + '--button-tertiary-danger-background-color-active': + '--color-brand-danger-100', + '--button-tertiary-danger-font-color': '--color-brand-danger-500', + '--button-tertiary-danger-font-color-hover': '--color-brand-danger-500', + '--button-box-shadow-focus': '0 0 0 4px --color-brand-primary-200', + '--button-neutral-box-shadow-focus': '0 0 0 4px --color-brand-grey-200', + '--button-danger-box-shadow-focus': + '0 0 0 4px --color-brand-danger-200', }; -return Object.entries(tokens).map(([name, entry], i) => ( - - - - {name} - - - {entry} - - -)); })()} - + return Object.entries(tokens).map(([name, entry], i) => ( + + + {name} + + + {entry} + + + )); + })()} diff --git a/src/components/Button/Button.Playground.stories.tsx b/src/components/Button/Button.Playground.stories.tsx index 868844737..1ea77e04b 100644 --- a/src/components/Button/Button.Playground.stories.tsx +++ b/src/components/Button/Button.Playground.stories.tsx @@ -23,12 +23,6 @@ export default { options: BUTTON_SIZES, }, }, - isNaked: { - control: 'boolean', - }, - isOutlined: { - control: 'boolean', - }, fullWidth: { control: 'boolean', }, diff --git a/src/components/Button/Button.VisualTests.stories.tsx b/src/components/Button/Button.VisualTests.stories.tsx index b5bcccec7..6d60ee68d 100644 --- a/src/components/Button/Button.VisualTests.stories.tsx +++ b/src/components/Button/Button.VisualTests.stories.tsx @@ -1,6 +1,6 @@ import React from 'react'; import { Meta, Story } from '@storybook/react/types-6-0'; -import { within } from '@storybook/testing-library'; +import { within } from '@testing-library/react'; import { Button, ButtonProps } from './Button'; import { BUTTON_SIZES, BUTTON_VARIANTS } from './Button.constants'; import { Box } from '../Box/Box'; @@ -11,37 +11,20 @@ export default { component: Button, } as Meta; -const Template: Story = (args, showIconButton) => ( - - {BUTTON_SIZES.map(size => ( - +const Template: Story = ( + args, + showIconButton, +) => ( + + {BUTTON_VARIANTS.map(variant => ( + - {BUTTON_VARIANTS.map(variant => ( - - ))} - {showIconButton && ( - - )} - - - {BUTTON_VARIANTS.map(variant => ( + {BUTTON_SIZES.map(size => ( @@ -49,24 +32,21 @@ const Template: Story = (args, showI {showIconButton && ( )} ))} - - + + + ); @@ -89,11 +69,15 @@ export const Disabled = Template.bind({}); Disabled.args = { isDisabled: true, showIconButton: true }; export const WithIcons = Template.bind({}); -WithIcons.args = { iconPrefix: 'mail', iconSuffix: 'chat' }; +WithIcons.args = { + iconPrefix: 'add', + iconSuffix: 'property-agreement', + showIconButton: false, +}; -export const PrimaryFocus = SingleButtonTemplate.bind({}); +export const SecondaryFocus = SingleButtonTemplate.bind({}); -PrimaryFocus.play = async ({ canvasElement }) => { +SecondaryFocus.play = async ({ canvasElement }) => { // Starts querying the component from its root const canvas = within(canvasElement); @@ -101,93 +85,26 @@ PrimaryFocus.play = async ({ canvasElement }) => { canvas.getByRole('button').focus(); }; -export const SuccessFocus = SingleButtonTemplate.bind({}); -SuccessFocus.args = { variant: 'success' }; +export const PrimaryFocus = SingleButtonTemplate.bind({}); +PrimaryFocus.args = { variant: 'primary' }; -SuccessFocus.play = async ({ canvasElement }) => { +PrimaryFocus.play = async ({ canvasElement }) => { const canvas = within(canvasElement); canvas.getByRole('button').focus(); }; export const DangerFocus = SingleButtonTemplate.bind({}); -DangerFocus.args = { variant: 'danger' }; +DangerFocus.args = { variant: 'primary-danger' }; DangerFocus.play = async ({ canvasElement }) => { const canvas = within(canvasElement); canvas.getByRole('button').focus(); }; -export const LightFocus = SingleButtonTemplate.bind({}); -LightFocus.args = { variant: 'light' }; - -LightFocus.play = async ({ canvasElement }) => { - const canvas = within(canvasElement); - canvas.getByRole('button').focus(); -}; - -export const DarkFocus = SingleButtonTemplate.bind({}); -DarkFocus.args = { variant: 'dark' }; - -DarkFocus.play = async ({ canvasElement }) => { - const canvas = within(canvasElement); - canvas.getByRole('button').focus(); -}; - -export const WhiteFocus = SingleButtonTemplate.bind({}); -WhiteFocus.args = { variant: 'white' }; - -WhiteFocus.play = async ({ canvasElement }) => { - const canvas = within(canvasElement); - canvas.getByRole('button').focus(); -}; - -export const PrimaryOutlinedFocus = SingleButtonTemplate.bind({}); -PrimaryOutlinedFocus.args = { isOutlined: true }; - -PrimaryOutlinedFocus.play = async ({ canvasElement }) => { - // Starts querying the component from its root - const canvas = within(canvasElement); - - // Looks up the button and interacts with it. - canvas.getByRole('button').focus(); -}; - -export const SuccessOutlinedFocus = SingleButtonTemplate.bind({}); -SuccessOutlinedFocus.args = { variant: 'success', isOutlined: true }; - -SuccessOutlinedFocus.play = async ({ canvasElement }) => { - const canvas = within(canvasElement); - canvas.getByRole('button').focus(); -}; - -export const DangerOutlinedFocus = SingleButtonTemplate.bind({}); -DangerOutlinedFocus.args = { variant: 'danger', isOutlined: true }; - -DangerOutlinedFocus.play = async ({ canvasElement }) => { - const canvas = within(canvasElement); - canvas.getByRole('button').focus(); -}; - -export const LightOutlinedFocus = SingleButtonTemplate.bind({}); -LightOutlinedFocus.args = { variant: 'light', isOutlined: true }; - -LightOutlinedFocus.play = async ({ canvasElement }) => { - const canvas = within(canvasElement); - canvas.getByRole('button').focus(); -}; - -export const DarkOutlinedFocus = SingleButtonTemplate.bind({}); -DarkOutlinedFocus.args = { variant: 'dark', isOutlined: true }; - -DarkOutlinedFocus.play = async ({ canvasElement }) => { - const canvas = within(canvasElement); - canvas.getByRole('button').focus(); -}; - -export const WhiteOutlinedFocus = SingleButtonTemplate.bind({}); -WhiteOutlinedFocus.args = { variant: 'white', isOutlined: true }; +export const TertiaryFocus = SingleButtonTemplate.bind({}); +TertiaryFocus.args = { variant: 'tertiary' }; -WhiteOutlinedFocus.play = async ({ canvasElement }) => { +TertiaryFocus.play = async ({ canvasElement }) => { const canvas = within(canvasElement); canvas.getByRole('button').focus(); }; diff --git a/src/components/Button/Button.constants.ts b/src/components/Button/Button.constants.ts index 6db37c246..9fc5d9d5a 100644 --- a/src/components/Button/Button.constants.ts +++ b/src/components/Button/Button.constants.ts @@ -1,5 +1,15 @@ import { ButtonVariant, ButtonSize } from './Button'; -export const BUTTON_VARIANTS: ButtonVariant[] = ['primary', 'danger', 'light', 'dark', 'success', 'white']; +export const BUTTON_VARIANTS: ButtonVariant[] = [ + 'primary', + 'secondary', + 'tertiary', + 'primary-neutral', + 'secondary-neutral', + 'tertiary-neutral', + 'primary-danger', + 'secondary-danger', + 'tertiary-danger', +]; export const BUTTON_SIZES: ButtonSize[] = ['xs', 'sm', 'md', 'lg']; diff --git a/src/components/Button/Button.module.scss b/src/components/Button/Button.module.scss index 07451339c..b55ab7ebd 100644 --- a/src/components/Button/Button.module.scss +++ b/src/components/Button/Button.module.scss @@ -1,15 +1,97 @@ @import '~@palmetto/palmetto-design-tokens/build/scss/variables-size'; +:root { + --button-primary-background-color: var(--color-brand-primary-500); + --button-primary-background-color-hover: var(--color-brand-primary-600); + --button-primary-background-color-active: var(--color-brand-primary-700); + --button-primary-font-color: var(--color-brand-white-base); + --button-primary-font-color-hover: var(--color-brand-white-base); + --button-secondary-background-color: var(--color-brand-white-base); + --button-secondary-background-color-hover: var(--color-brand-primary-50); + --button-secondary-background-color-active: var(--color-brand-primary-100); + --button-secondary-border-color: var(--color-brand-grey-200); + --button-secondary-border-color-hover: var(--color-brand-primary-100); + --button-secondary-font-color: var(--color-brand-primary-500); + --button-secondary-font-color-hover: var(--color-brand-primary-500); + --button-tertiary-background-color: transparent; + --button-tertiary-background-color-hover: var(--color-brand-primary-50); + --button-tertiary-background-color-active: var(--color-brand-primary-100); + --button-tertiary-font-color: var(--color-brand-primary-500); + --button-tertiary-font-color-hover: var(--color-brand-primary-500); + --button-primary-neutral-background-color: var(--color-brand-grey-100); + --button-primary-neutral-background-color-hover: var(--color-brand-grey-200); + --button-primary-neutral-background-color-active: var(--color-brand-grey-300); + --button-primary-neutral-font-color: var(--color-brand-grey-700); + --button-primary-neutral-font-color-hover: var(--color-brand-grey-700); + --button-secondary-neutral-background-color: var(--color-brand-white-base); + --button-secondary-neutral-background-color-hover: var( + --color-brand-grey-100 + ); + --button-secondary-neutral-background-color-active: var( + --color-brand-grey-200 + ); + --button-secondary-neutral-border-color: var(--color-brand-grey-200); + --button-secondary-neutral-border-color-hover: var(--color-brand-grey-100); + --button-secondary-neutral-font-color: var(--color-brand-grey-700); + --button-secondary-neutral-font-color-hover: var(--color-brand-grey-700); + --button-tertiary-neutral-background-color: transparent; + --button-tertiary-neutral-background-color-hover: var(--color-brand-grey-100); + --button-tertiary-neutral-background-color-active: var( + --color-brand-grey-200 + ); + --button-tertiary-neutral-font-color: var(--color-brand-grey-700); + --button-tertiary-neutral-font-color-hover: var(--color-brand-grey-700); + --button-primary-danger-background-color: var(--color-brand-danger-500); + --button-primary-danger-background-color-hover: var(--color-brand-danger-600); + --button-primary-danger-background-color-active: var( + --color-brand-danger-700 + ); + --button-primary-danger-font-color: var(--color-brand-white-base); + --button-primary-danger-font-color-hover: var(--color-brand-white-base); + --button-secondary-danger-background-color: var(--color-brand-white-base); + --button-secondary-danger-background-color-hover: var( + --color-brand-danger-50 + ); + --button-secondary-danger-background-color-active: var( + --color-brand-danger-100 + ); + --button-secondary-danger-border-color: var(--color-brand-grey-200); + --button-secondary-danger-border-color-hover: var(--color-brand-danger-100); + --button-secondary-danger-font-color: var(--color-brand-danger-500); + --button-secondary-danger-font-color-hover: var(--color-brand-danger-500); + --button-tertiary-danger-background-color: transparent; + --button-tertiary-danger-background-color-hover: var(--color-brand-danger-50); + --button-tertiary-danger-background-color-active: var( + --color-brand-danger-100 + ); + --button-tertiary-danger-font-color: var(--color-brand-danger-500); + --button-tertiary-danger-font-color-hover: var(--color-brand-danger-500); + --button-box-shadow-focus: 0 0 0 4px var(--color-brand-primary-200); + --button-neutral-box-shadow-focus: 0 0 0 4px var(--color-brand-grey-200); + --button-danger-box-shadow-focus: 0 0 0 4px var(--color-brand-danger-200); +} + @mixin size-xs { - border-radius: var(--button-size-xs-border-radius, var(--INTERNAL_form-control-size-sm-border-radius)); - padding: var(--button-size-xs-padding-vertical, var(--size-spacing-2xs)) var(--button-size-xs-padding-horizontal, var(--size-spacing-xs)); + border-radius: var( + --button-size-xs-border-radius, + var(--INTERNAL_form-control-size-sm-border-radius) + ); + padding: var(--button-size-xs-padding-vertical, var(--size-spacing-2xs)) + var(--button-size-xs-padding-horizontal, var(--size-spacing-xs)); min-height: 20px; - font-size: var(--button-size-xs-font-size, var(--INTERNAL_form-control-size-xs-font-size)); + font-size: var( + --button-size-xs-font-size, + var(--INTERNAL_form-control-size-xs-font-size) + ); letter-spacing: 0.2px; &.outline { - padding: calc(var(--button-size-xs-padding-vertical, var(--size-spacing-2xs)) - 1px) - calc(var(--button-size-xs-padding-horizontal, var(--size-spacing-xs)) - 1px); + padding: calc( + var(--button-size-xs-padding-vertical, var(--size-spacing-2xs)) - 1px + ) + calc( + var(--button-size-xs-padding-horizontal, var(--size-spacing-xs)) - 1px + ); } } @@ -22,16 +104,34 @@ } @mixin size-sm { - border-radius: var(--button-size-sm-border-radius, var(--INTERNAL_form-control-size-sm-border-radius)); - padding: var(--button-size-sm-padding-vertical, var(--INTERNAL_form-control-size-sm-padding)) - var(--button-size-sm-padding-horizontal, var(--size-spacing-sm)); + border-radius: var( + --button-size-sm-border-radius, + var(--INTERNAL_form-control-size-sm-border-radius) + ); + padding: calc( + var( + --button-size-sm-padding-vertical, + var(--INTERNAL_form-control-size-sm-padding) + ) - 1px + ) + calc(var(--button-size-sm-padding-horizontal, var(--size-spacing-sm)) - 1px); min-height: 32px; - font-size: var(--button-size-sm-font-size, var(--INTERNAL_form-control-size-sm-font-size)); + font-size: var( + --button-size-sm-font-size, + var(--INTERNAL_form-control-size-sm-font-size) + ); letter-spacing: 0.2px; &.outline { - padding: calc(var(--button-size-sm-padding-vertical, var(--INTERNAL_form-control-size-sm-padding)) - 1px) - calc(var(--button-size-sm-padding-horizontal, var(--size-spacing-sm)) - 1px); + padding: calc( + var( + --button-size-sm-padding-vertical, + var(--INTERNAL_form-control-size-sm-padding) + ) - 1px + ) + calc( + var(--button-size-sm-padding-horizontal, var(--size-spacing-sm)) - 1px + ); } } @@ -44,16 +144,33 @@ } @mixin size-md { - border-radius: var(--button-size-md-border-radius, var(--INTERNAL_form-control-size-md-border-radius)); - padding: var(--button-size-md-padding-vertical, var(--INTERNAL_form-control-size-md-padding)) - var(--button-size-md-padding-horizontal, var(--size-spacing-md)); - min-height: 42px; - font-size: var(--button-size-md-font-size, var(--INTERNAL_form-control-size-md-font-size)); + border-radius: var( + --button-size-md-border-radius, + var(--INTERNAL_form-control-size-md-border-radius) + ); + padding: calc( + var( + --button-size-md-padding-vertical, + var(--INTERNAL_form-control-size-md-padding) + ) - 1px + ) + calc(var(--button-size-md-padding-horizontal, var(--size-spacing-md)) - 1px); + font-size: var( + --button-size-md-font-size, + var(--INTERNAL_form-control-size-md-font-size) + ); letter-spacing: 0.2px; &.outline { - padding: calc(var(--button-size-md-padding-vertical, var(--INTERNAL_form-control-size-md-padding)) - 1px) - calc(var(--button-size-md-padding-horizontal, var(--size-spacing-md)) - 1px); + padding: calc( + var( + --button-size-md-padding-vertical, + var(--INTERNAL_form-control-size-md-padding) + ) - 1px + ) + calc( + var(--button-size-md-padding-horizontal, var(--size-spacing-md)) - 1px + ); } } @@ -66,17 +183,23 @@ } @mixin size-lg { - border-radius: var(--button-size-lg-border-radius, var(--INTERNAL_form-control-size-lg-border-radius)); - padding: var(--button-size-lg-padding-vertical, var(--INTERNAL_form-control-size-lg-padding)) - var(--button-size-lg-padding-horizontal, var(--size-spacing-lg)); + border-radius: var( + --button-size-lg-border-radius, + var(--INTERNAL_form-control-size-lg-border-radius) + ); + padding: calc( + var( + --button-size-lg-padding-vertical, + var(--INTERNAL_form-control-size-lg-padding) + ) - 1px + ) + calc(var(--button-size-lg-padding-horizontal, var(--size-spacing-lg)) - 1px); min-height: 55px; letter-spacing: 1px; - font-size: var(--button-size-lg-font-size, var(--INTERNAL_form-control-size-lg-font-size)); - - &.outline { - padding: calc(var(--button-size-lg-padding-vertical, var(--INTERNAL_form-control-size-lg-padding)) - 1px) - calc(var(--button-size-lg-padding-horizontal, var(--size-spacing-lg)) - 1px); - } + font-size: var( + --button-size-lg-font-size, + var(--INTERNAL_form-control-size-lg-font-size) + ); } %size-lg { @@ -88,26 +211,23 @@ } .button { - border: 0; + border: 1px solid transparent; cursor: pointer; background-color: transparent; padding: 0; color: inherit; - line-height: 1; + line-height: var(--size-line-height-input); font-family: var(--button-font-family, var(--asset-fonts-body)); - - &:not(.naked) { - display: inline-flex; - align-items: center; - justify-content: center; - position: relative; - transition-duration: 0.2s; - transition-property: background-color, border, box-shadow, color; - transition-timing-function: cubic-bezier(0.67, 0.83, 0.67); - text-align: center; - text-decoration: none; - font-weight: var(--button-font-weight, var(--size-font-weight-bold)); - } + display: inline-flex; + align-items: center; + justify-content: center; + position: relative; + transition-duration: 0.1s; + transition-property: background-color, border, box-shadow, color; + transition-timing-function: cubic-bezier(0.67, 0.83, 0.67); + text-align: center; + text-decoration: none; + font-weight: var(--button-font-weight, var(--size-font-weight-medium)); &:hover { text-decoration: none; @@ -118,24 +238,19 @@ cursor: not-allowed; } - &.outline { - border: 1px solid; - } - &.primary { - background-color: var(--button-primary-background-color, var(--color-brand-primary-500)); - color: var(--button-primary-font-color, var(--color-brand-white-base)); - + background-color: var(--button-primary-background-color); + color: var(--button-primary-font-color); &:focus { outline: 0; - box-shadow: var(--button-primary-box-shadow-focus, var(--INTERNAL_form-control-box-shadow-focus)); + box-shadow: var(--button-box-shadow-focus); } // Show focus styles on keyboard focus. &:focus-visible { outline: 0; - box-shadow: var(--button-primary-box-shadow-focus, var(--INTERNAL_form-control-box-shadow-focus)); + box-shadow: var(--button-box-shadow-focus); } // Hide focus styles if they are not needed, for example, @@ -146,76 +261,61 @@ } &:not(:disabled):hover { - background-color: var(--button-primary-background-color-hover, var(--color-brand-primary-600)); - color: var(--button-primary-font-color-hover, var(--color-brand-white-base)); + background-color: var(--button-primary-background-color-hover); + color: var(--button-primary-font-color-hover); } - &.outline { - border-color: var(--button-primary-outline-border-color, var(--color-brand-primary-500)); - background-color: var(--button-primary-outline-background-color, transparent); - color: var(--button-primary-outline-font-color, var(--color-brand-primary-500)); - - &:not(:disabled):hover { - border-color: var(--button-primary-outline-border-color-hover, var(--color-brand-primary-500)); - background-color: var(--button-primary-outline-background-color-hover, var(--color-brand-primary-50)); - color: var(--button-primary-outline-font-color-hover, var(--color-brand-primary-500)); - } + &:not(:disabled):active { + background-color: var(--button-primary-background-color-active); } } - &.success { - background-color: var(--button-success-background-color, var(--color-brand-success-500)); - color: var(--button-success-font-color, var(--color-brand-white-base)); - + &.secondary { + border: 1px solid; + border-color: var(--button-secondary-border-color); + background-color: var(--button-secondary-background-color); + color: var(--button-secondary-font-color); &:focus { outline: 0; - box-shadow: var(--button-success-box-shadow-focus, var(--INTERNAL_form-control-box-shadow-focus)); + box-shadow: var(--button-box-shadow-focus); } // Show focus styles on keyboard focus. &:focus-visible { outline: 0; - box-shadow: var(--button-success-box-shadow-focus, var(--INTERNAL_form-control-box-shadow-focus)); + box-shadow: var(--button-box-shadow-focus); } - // Hide focus styles if they are not needed, for example, - // when an element receives focus via the mouse. &:focus:not(:focus-visible) { outline: 0; box-shadow: none; } &:not(:disabled):hover { - background-color: var(--button-success-background-color-hover, var(--color-brand-success-600)); - color: var(--button-success-font-color-hover, var(--color-brand-white-base)); + border-color: var(--button-secondary-border-color-hover); + background-color: var(--button-secondary-background-color-hover); + color: var(--button-secondary-font-color-hover); } - &.outline { - border-color: var(--button-success-outline-border-color, var(--color-brand-success-500)); - background-color: transparent; - color: var(--button-success-font-color, var(--color-brand-success-500)); - - &:not(:disabled):hover { - border-color: var(--button-success-outline-border-color-hover, var(--color-brand-success-500)); - background-color: var(--button-success-outline-background-color-hover, var(--color-brand-success-50)); - color: var(--button-success-outline-font-color-hover, var(--color-brand-success-500)); - } + &:not(:disabled):active { + background-color: var(--button-secondary-background-color-active); } } - &.danger { - background-color: var(--button-danger-background-color, var(--color-brand-danger-500)); - color: var(--button-danger-font-color, var(--color-brand-white-base)); + &.tertiary { + background-color: var(--button-tertiary-background-color); + color: var(--button-tertiary-font-color); &:focus { outline: 0; - box-shadow: var(--button-focus-box-shadow-danger, 0 0 0 4px var(--color-brand-danger-200)); + box-shadow: var(--button-box-shadow-focus); } + // Show focus styles on keyboard focus. &:focus-visible { outline: 0; - box-shadow: var(--button-focus-box-shadow-danger, 0 0 0 4px var(--color-brand-danger-200)); + box-shadow: var(--button-box-shadow-focus); } &:focus:not(:focus-visible) { @@ -224,40 +324,61 @@ } &:not(:disabled):hover { - background-color: var(--button-danger-background-color-hover, var(--color-brand-danger-600)); - color: var(--button-danger-font-color-hover, var(--color-brand-white-base)); + background-color: var(--button-tertiary-background-color-hover); + border-color: var(--button-tertiary-background-color-hover); + color: var(--button-tertiary-font-color-hover); } - &.outline { - border-color: var(--button-danger-outline-border-color, var(--color-brand-danger-500)); - background-color: transparent; - color: var(--button-danger-font-color, var(--color-brand-danger-500)); - - &:not(:disabled):hover { - border-color: var(--button-danger-outline-border-color-hover, var(--color-brand-danger-500)); - background-color: var(--button-danger-outline-background-color-hover, var(--color-brand-danger-50)); - color: var(--button-danger-outline-font-color-hover, var(--color-brand-danger-500)); - } + &:not(:disabled):active { + background-color: var(--button-tertiary-background-color-active); + border-color: var(--button-tertiary-background-color-active); } } - &.dark { - background-color: var(--button-dark-background-color, var(--color-brand-dark-base)); - color: var(--button-dark-font-color, var(--color-brand-white-base)); + &.primary-neutral { + background-color: var(--button-primary-neutral-background-color); + color: var(--button-primary-neutral-font-color); &:focus { outline: 0; - box-shadow: var(--button-dark-box-shadow-focus, 0 0 0 4px var(--color-brand-grey-200)); + box-shadow: var(--button-neutral-box-shadow-focus); } &:focus-visible { outline: 0; - box-shadow: var(--button-dark-box-shadow-focus, 0 0 0 4px var(--color-brand-grey-200)); + box-shadow: var(--button-neutral-box-shadow-focus); + } + + &:focus:not(:focus-visible) { + outline: 0; + box-shadow: none; } &:not(:disabled):hover { - background-color: var(--button-dark-background-color-hover, var(--color-brand-black-base)); - color: var(--button-dark-font-color-hover, var(--color-brand-white-base)); + background-color: var(--button-primary-neutral-background-color-hover); + color: var(--button-primary-neutral-font-color-hover); + } + + &:not(:disabled):active { + background-color: var(--button-primary-neutral-background-color-active); + } + } + + &.secondary-neutral { + background-color: var(--button-secondary-neutral-background-color); + border: 1px solid; + border-color: var(--button-secondary-neutral-border-color); + color: var(--button-secondary-neutral-font-color); + + &:focus { + outline: 0; + box-shadow: var(--button-neutral-box-shadow-focus); + } + + // Show focus styles on keyboard focus. + &:focus-visible { + outline: 0; + box-shadow: var(--button-neutral-box-shadow-focus); } &:focus:not(:focus-visible) { @@ -265,36 +386,59 @@ box-shadow: none; } - &.outline { - border-color: var(--button-border-color-dark-outline); - background-color: transparent; - color: var(--button-font-color-dark-outline, var(--color-brand-dark-base)); + &:not(:disabled):hover { + border-color: var(--button-secondary-neutral-border-color-hover); + background-color: var(--button-secondary-neutral-background-color-hover); + color: var(--button-secondary-neutral-font-color-hover); + } - &:not(:disabled):hover { - border-color: var(--button-dark-outline-border-color, var(--color-brand-dark-base)); - background-color: var(--button-dark-outline-background-color-hover, var(--color-brand-grey-50)); - color: var(--button-font-color-dark-outline, var(--color-brand-dark-base)); - } + &:not(:disabled):active { + background-color: var(--button-secondary-neutral-background-color-active); } } - &.light { - background-color: var(--button-light-background-color, var(--color-brand-light-base)); - color: var(--button-light-font-color, var(--color-brand-dark-base)); + &.tertiary-neutral { + background-color: var(--button-tertiary-neutral-background-color); + color: var(--button-tertiary-neutral-font-color); &:focus { outline: 0; - box-shadow: var(--button-light-box-shadow-focus, 0 0 0 4px var(--color-brand-grey-200)); + box-shadow: var(--button-neutral-box-shadow-focus); } + // Show focus styles on keyboard focus. &:focus-visible { outline: 0; - box-shadow: var(--button-light-box-shadow-focus, 0 0 0 4px var(--color-brand-grey-200)); + box-shadow: var(--button-neutral-box-shadow-focus); + } + + &:focus:not(:focus-visible) { + outline: 0; + box-shadow: none; } &:not(:disabled):hover { - background-color: var(--button-light-background-color-hover, var(--color-brand-grey-200)); - color: var(--button-light-font-color-hover, var(--color-brand-dark-base)); + background-color: var(--button-tertiary-neutral-background-color-hover); + color: var(--button-tertiary-neutral-font-color-hover); + } + + &:not(:disabled):active { + background-color: var(--button-tertiary-neutral-background-color-active); + } + } + + &.primary-danger { + background-color: var(--button-primary-danger-background-color); + color: var(--button-primary-danger-font-color); + + &:focus { + outline: 0; + box-shadow: var(--button-danger-box-shadow-focus); + } + + &:focus-visible { + outline: 0; + box-shadow: var(--button-danger-box-shadow-focus); } &:focus:not(:focus-visible) { @@ -302,36 +446,60 @@ box-shadow: none; } - &.outline { - border-color: var(--button-light-outline-border-color, var(--color-brand-light-base)); - background-color: transparent; - color: var(--button-font-color-light-outline); + &:not(:disabled):hover { + background-color: var(--button-primary-danger-background-color-hover); + color: var(--button-primary-danger-font-color-hover); + } - &:not(:disabled):hover { - border-color: var(--button-light-outline-border-color-hover, var(--color-brand-grey-300)); - background-color: var(--button-light-outline-background-color-hover, var(--color-brand-grey-50)); - color: var(--button-font-color-light-outline-hover, var(--color-brand-dark-base)); - } + &:not(:disabled):active { + background-color: var(--button-primary-danger-background-color-active); } } - &.white { - background-color: var(--button-white-background-color, var(--color-brand-white-base)); - color: var(--button-white-font-color, var(--color-brand-grey-600)); + &.secondary-danger { + background-color: var(--button-secondary-danger-background-color); + border: 1px solid; + border-color: var(--button-secondary-danger-border-color); + color: var(--button-secondary-danger-font-color); &:focus { outline: 0; - box-shadow: var(--button-white-box-shadow-focus, 0 0 0 4px var(--color-brand-grey-200)); + box-shadow: var(--button-danger-box-shadow-focus); } &:focus-visible { outline: 0; - box-shadow: var(--button-white-box-shadow-focus, 0 0 0 4px var(--color-brand-grey-200)); + box-shadow: var(--button-danger-box-shadow-focus); + } + + &:focus:not(:focus-visible) { + outline: 0; + box-shadow: none; } &:not(:disabled):hover { - background-color: var(--button-white-background-color-hover, var(--color-brand-grey-50)); - color: var(--button-white-font-color-hover, var(--color-brand-grey-700)); + border-color: var(--button-secondary-danger-border-color-hover); + background-color: var(--button-secondary-danger-background-color-hover); + color: var(--button-secondary-danger-font-color-hover); + } + + &:not(:disabled):active { + background-color: var(--button-secondary-danger-background-color-active); + } + } + + &.tertiary-danger { + background-color: var(--button-tertiary-danger-background-color); + color: var(--button-tertiary-danger-font-color); + + &:focus { + outline: 0; + box-shadow: var(--button-danger-box-shadow-focus); + } + + &:focus-visible { + outline: 0; + box-shadow: var(--button-danger-box-shadow-focus); } &:focus:not(:focus-visible) { @@ -339,33 +507,33 @@ box-shadow: none; } - &.outline { - border-color: var(--button-white-outline-border-color, var(--color-brand-white-base)); - background-color: transparent; - color: var(--button-font-color-white-outline, var(--color-brand-white-base)); + &:not(:disabled):hover { + background-color: var(--button-tertiary-danger-background-color-hover); + color: var(--button-tertiary-danger-font-color-hover); + } - &:not(:disabled):hover { - border-color: var(--button-white-outline-border-color-hover, var(--color-brand-white-base)); - background-color: var(--button-white-outline-background-color-hover, rgb(255 255 255 / 10%)); - color: var(--button-font-color-white-outline-hover, var(--color-brand-white-base)); - } + &:not(:disabled):active { + background-color: var(--button-tertiary-danger-background-color-active); } } &.xs { border-radius: var(--button-size-xs-border-radius); - padding: var(--button-size-xs-padding-vertical) var(--button-size-xs-padding-horizontal); + padding: var(--button-size-xs-padding-vertical) + var(--button-size-xs-padding-horizontal); min-height: 20px; font-size: var(--button-size-xs-font-size); &.outline { - padding: calc(var(--button-size-xs-padding-vertical) - 1px) calc(var(--button-size-xs-padding-horizontal) - 1px); + padding: calc(var(--button-size-xs-padding-vertical) - 1px) + calc(var(--button-size-xs-padding-horizontal) - 1px); } } &.sm { border-radius: var(--button-size-sm-border-radius); - padding: var(--button-size-sm-padding-vertical) var(--button-size-sm-padding-horizontal); + padding: var(--button-size-sm-padding-vertical) + var(--button-size-sm-padding-horizontal); min-height: 32px; font-size: var(--button-size-sm-font-size); } diff --git a/src/components/Button/Button.test.jsx b/src/components/Button/Button.test.jsx index 7ddc17168..e7ed9fa42 100644 --- a/src/components/Button/Button.test.jsx +++ b/src/components/Button/Button.test.jsx @@ -57,12 +57,10 @@ describe('Button', () => { expect(screen.getByTestId('suffixIcon')).toBeInTheDocument(); }); test('Renders gap between icon and text', () => { - render( - , - ); - expect(screen.getByText('Alarm Button').parentElement.classList).toContain('g-xs'); + render(); + expect( + screen.getByText('Alarm Button').parentElement.classList, + ).toContain('g-xs'); }); test('Renders smaller gap between icon and text for xs sized buttons', () => { render( @@ -70,26 +68,30 @@ describe('Button', () => { Alarm Button , ); - expect(screen.getByText('Alarm Button').parentElement.classList).toContain('g-2xs'); + expect( + screen.getByText('Alarm Button').parentElement.classList, + ).toContain('g-2xs'); }); }); describe('Sizes', () => { - BUTTON_SIZES.map(size => describe(`${BUTTON_SIZES}`, () => { - test(`it has a ${size} class applied to it`, () => { - render(); + BUTTON_SIZES.map(size => + describe(`${BUTTON_SIZES}`, () => { + test(`it has a ${size} class applied to it`, () => { + render(); - const btn = screen.getByText(`${size} Button`).closest('button'); + const btn = screen.getByText(`${size} Button`).closest('button'); - expect(btn.getAttribute('class')).toContain(`size-${size}`); - }); - })); + expect(btn.getAttribute('class')).toContain(`size-${size}`); + }); + }), + ); test('It applies responsive classes', () => { render( + , ); const btn = screen.getByText('button').closest('button'); @@ -102,15 +104,17 @@ describe('Button', () => { }); describe('Variants', () => { - BUTTON_VARIANTS.map(variant => describe(`${BUTTON_VARIANTS}`, () => { - test(`it has a ${variant} class applied to it`, () => { - render(); + BUTTON_VARIANTS.map(variant => + describe(`${BUTTON_VARIANTS}`, () => { + test(`it has a ${variant} class applied to it`, () => { + render(); - const btn = screen.getByText(`${variant} Button`).closest('button'); + const btn = screen.getByText(`${variant} Button`).closest('button'); - expect(btn.getAttribute('class')).toContain(variant); - }); - })); + expect(btn.getAttribute('class')).toContain(variant); + }); + }), + ); }); describe('Callback Handling', () => { @@ -139,7 +143,11 @@ describe('Button', () => { const mockedHandleClick = jest.fn(event => event.preventDefault()); const mockedNavigate = jest.fn(() => null); - render(); + render( + , + ); fireEvent.click(screen.getByText('Click').closest('button')); expect(mockedHandleClick).toBeCalledTimes(1); @@ -217,7 +225,9 @@ describe('Button', () => { test('it does not have a disabled attribute', () => { render(); - expect(screen.getByText('Not Disabled Button').closest('button')).not.toBeDisabled(); + expect( + screen.getByText('Not Disabled Button').closest('button'), + ).not.toBeDisabled(); }); test('it renders an empty button when no children are passed', () => { @@ -233,31 +243,25 @@ describe('Button', () => { test('it has a fullWidth class applied to it', () => { render(); - const fullWidthBtn = screen.getByText('Full Width Button').closest('button'); + const fullWidthBtn = screen + .getByText('Full Width Button') + .closest('button'); expect(fullWidthBtn.getAttribute('class')).toContain('full-width'); }); }); - describe('Naked', () => { - test('it has no styles appliedo there than the .naked class', () => { - render(); - - const nakedButton = screen.getByText('Naked').closest('button'); - - expect(nakedButton.getAttribute('class')).toContain('naked'); - expect(nakedButton.getAttribute('class')).not.toContain('md'); - expect(nakedButton.getAttribute('class')).not.toContain('primary'); - }); - }); - describe('Custom ClassName', () => { test('if a ClassName is provided, its added to the button', () => { render(); - const customClassNameBtn = screen.getByText('Custom ClassName').closest('button'); + const customClassNameBtn = screen + .getByText('Custom ClassName') + .closest('button'); - expect(customClassNameBtn.getAttribute('class')).toContain('custom-class'); + expect(customClassNameBtn.getAttribute('class')).toContain( + 'custom-class', + ); }); }); @@ -265,7 +269,9 @@ describe('Button', () => { test('it has a disabled attribute', () => { render(); - expect(screen.getByText('Disabled Button').closest('button')).toBeDisabled(); + expect( + screen.getByText('Disabled Button').closest('button'), + ).toBeDisabled(); }); }); @@ -274,28 +280,45 @@ describe('Button', () => { render(); const spinnerElement = document.getElementsByClassName('spinner')[0]; expect(spinnerElement).toBeInTheDocument(); - expect(spinnerElement).toHaveClass('font-color-white'); + expect(spinnerElement).toHaveClass('font-color-dark'); }); - test('it renders the grey spinning indicator if button variant is light', () => { - render(); + test('it renders the grey spinning indicator if button variant is secondary-neutral', () => { + render( + , + ); const spinnerElement = document.getElementsByClassName('spinner')[0]; expect(spinnerElement).toBeInTheDocument(); - expect(spinnerElement).toHaveClass('font-color-grey'); + expect(spinnerElement).toHaveClass('font-color-dark'); }); - test('it renders the spinning loading indicator with outline button', () => { + test('it keeps the button text in the dom so the button width does not change', () => { + render(); + expect(screen.getByText('Button is loading')).toBeInTheDocument(); + }); + + test('it renders white spinning indicator when button is primary', () => { render( - , ); - expect(document.getElementsByClassName('spinner')[0]).toBeInTheDocument(); + const spinnerElement = document.getElementsByClassName('spinner')[0]; + expect(spinnerElement).toBeInTheDocument(); + expect(spinnerElement).toHaveClass('font-color-white'); }); - test('it keeps the button text in the dom so the button width does not change', () => { - render(); - expect(screen.getByText('Button is loading')).toBeInTheDocument(); + test('it renders white spinning indicator when button is primary-danger', () => { + render( + , + ); + const spinnerElement = document.getElementsByClassName('spinner')[0]; + expect(spinnerElement).toBeInTheDocument(); + expect(spinnerElement).toHaveClass('font-color-white'); }); }); @@ -307,34 +330,32 @@ describe('Button', () => { , ); - expect(screen.getByText('Disabled and Loading Button').closest('button')).toBeDisabled(); + expect( + screen.getByText('Disabled and Loading Button').closest('button'), + ).toBeDisabled(); }); }); describe('Color Variations', () => { - test('Renders button with default variant primary', () => { + test('Renders button with default variant neutral', () => { render(); - expect(screen.getByText('primary').closest('button')).toHaveClass('primary'); + expect(screen.getByText('primary').closest('button')).toHaveClass( + 'primary-neutral', + ); }); const variants = ['primary', 'success', 'danger', 'light', 'dark']; variants.forEach(variant => { test(`It renders component with variant: ${variant} when passed`, () => { render(); - expect(screen.getByText(variant).closest('button')).toHaveClass(variant); + expect(screen.getByText(variant).closest('button')).toHaveClass( + variant, + ); }); }); }); - describe('Outlined', () => { - test('Renders button with outline class if prop passed', () => { - render(); - - expect(screen.getByText('primary').closest('button')).toHaveClass('outline'); - }); - }); - describe('Anchor', () => { test('it renders an anchor tag if as prop `a` is passed', () => { render( @@ -399,7 +420,11 @@ describe('Button', () => { describe('React Router', () => { it('fires navigate callback when included', () => { const mockedNavigate = jest.fn(() => {}); - render(); + render( + , + ); fireEvent.click(screen.getByText('react router link').closest('a')); @@ -408,7 +433,11 @@ describe('Button', () => { it('does not fire navigate callback if target is _blank', () => { const mockedNavigate = jest.fn(() => {}); - render(); + render( + , + ); fireEvent.click(screen.getByText('react router link').closest('a')); diff --git a/src/components/Button/Button.tsx b/src/components/Button/Button.tsx index 6c7a54946..717bca5e2 100644 --- a/src/components/Button/Button.tsx +++ b/src/components/Button/Button.tsx @@ -1,5 +1,11 @@ import React, { - ReactNode, MouseEvent, FocusEvent, forwardRef, createElement, AnchorHTMLAttributes, ButtonHTMLAttributes, + ReactNode, + MouseEvent, + FocusEvent, + forwardRef, + createElement, + AnchorHTMLAttributes, + ButtonHTMLAttributes, } from 'react'; import classNames from 'classnames'; import { IconName, ResponsiveProp } from '../../types'; @@ -11,102 +17,118 @@ import { getElementType } from '../../lib/getElementType'; import { Spinner } from '../Spinner/Spinner'; import styles from './Button.module.scss'; -export type ButtonVariant = 'primary' | 'success' | 'danger' | 'light' | 'dark' | 'white'; +export type ButtonVariant = + | 'primary' + | 'secondary' + | 'tertiary' + | 'primary-neutral' + | 'secondary-neutral' + | 'tertiary-neutral' + | 'primary-danger' + | 'secondary-danger' + | 'tertiary-danger'; export type ButtonSize = 'xs' | 'sm' | 'md' | 'lg'; export interface BaseButtonProps { - /** - * Contents of the button. - */ - children?: ReactNode; - /** - * Additional ClassNames to add to button. - */ - className?: string; - /** - * Button takes up the full width of its parent container. - */ - fullWidth?: boolean; - /** - * Name of the icon to include before the button text - */ - iconPrefix?: IconName; - /** - * Name of the icon to include after the button text - */ - iconSuffix?: IconName; - /** - * A unique identifier for the button. - */ - id?: string; - /** - * URL to navigate to when clicked. Passing this attribute automatically - * renders an anchor tag, NOT a - - diff --git a/src/components/Card/Card.Overview.stories.mdx b/src/components/Card/Card.Overview.stories.mdx index a0562d2da..2685a9bb6 100644 --- a/src/components/Card/Card.Overview.stories.mdx +++ b/src/components/Card/Card.Overview.stories.mdx @@ -83,15 +83,15 @@ It consists of three child components that are automatically included with the ` overflow="hidden" gap="md" > - - - - diff --git a/src/components/Drawer/Drawer.Overview.stories.mdx b/src/components/Drawer/Drawer.Overview.stories.mdx index feb7f3f93..c3e17e343 100644 --- a/src/components/Drawer/Drawer.Overview.stories.mdx +++ b/src/components/Drawer/Drawer.Overview.stories.mdx @@ -33,7 +33,7 @@ A Drawer is a panel that slides in from one edge of the viewport and overlays co } = useOpenClose(); return ( <> - - - - {widths.map(width => ( drawer content @@ -431,7 +431,7 @@ By default the first focusable element will receive focus when the drawer opens, const ref = useRef(); return ( <> - drawer content - @@ -489,7 +489,7 @@ Render the Drawer within a containing div using `containerRef`. padding="lg" overflow="hidden" > - - = ({ ...args }) => { } = useOpenClose(); return ( <> - diff --git a/src/components/FileUpload/FileUpload.Overview.stories.mdx b/src/components/FileUpload/FileUpload.Overview.stories.mdx index 9e2169664..ade344fcd 100644 --- a/src/components/FileUpload/FileUpload.Overview.stories.mdx +++ b/src/components/FileUpload/FileUpload.Overview.stories.mdx @@ -172,15 +172,13 @@ The default button text for `FileUpload` is 'Upload File'. However, you can expl ## Variants -Light, dark, primary and white variations are available. +Leverage the same variants as the Button component to customize the look and feel of the FileUpload button. {() => { const [files, setFiles] = useState(null); const [lightFiles, setLightFiles] = useState(null); - const [primaryFiles, setPrimaryFiles] = useState(null); - const [whiteFiles, setWhiteFiles] = useState(null); const handleChange = event => { setFiles(event.target.files); }; @@ -193,111 +191,28 @@ Light, dark, primary and white variations are available. return ( - - - - - - - ); - }} - - - -## Outlined - -Use `isOutlined` to render an outline button. - - - - {() => { - const [files, setFiles] = useState(null); - const [lightFiles, setLightFiles] = useState(null); - const [primaryFiles, setPrimaryFiles] = useState(null); - const [whiteFiles, setWhiteFiles] = useState(null); - const handleChange = event => { - setFiles(event.target.files); - }; - const handleLightChange = event => { - setLightFiles(event.target.files); - }; - const handlePrimaryChange = event => { - setPrimaryFiles(event.target.files); - }; - return ( - - - - - - ); }} + ## Sizes Set the size of the FileUpload button to `xs`, `sm`, `md` or `lg`. `md` is the default size. diff --git a/src/components/FileUpload/FileUpload.Playground.stories.tsx b/src/components/FileUpload/FileUpload.Playground.stories.tsx index b20c1e78b..7991b01be 100644 --- a/src/components/FileUpload/FileUpload.Playground.stories.tsx +++ b/src/components/FileUpload/FileUpload.Playground.stories.tsx @@ -38,9 +38,6 @@ export default { isDisabled: { control: 'boolean', }, - isOutlined: { - control: 'boolean', - }, isRequired: { control: 'boolean', }, diff --git a/src/components/FileUpload/FileUpload.test.tsx b/src/components/FileUpload/FileUpload.test.tsx index 2a217ab50..d725e7af5 100644 --- a/src/components/FileUpload/FileUpload.test.tsx +++ b/src/components/FileUpload/FileUpload.test.tsx @@ -5,7 +5,14 @@ import { FileUpload } from './FileUpload'; describe('FileUpload', () => { describe('Default', () => { it('renders a file upload input with default props', () => { - render( null} />); + render( + null} + />, + ); const fileInput = screen.getByLabelText('myFileUpload'); const button = screen.getByText('Upload File').closest('button'); @@ -13,21 +20,27 @@ describe('FileUpload', () => { expect(fileInput).toBeInTheDocument(); expect(button).toBeInTheDocument(); - expect(button).toHaveClass('light', 'size-md'); + expect(button).toHaveClass('primary-neutral', 'size-md'); expect(uploadIcon).toBeInTheDocument(); }); }); describe('Button Variations', () => { it('renders a file upload button in different styles based on props', () => { - interface Props { color?: 'dark' | 'light' | 'primary'; size?: 'sm' | 'md' | 'lg'; } - const UploadComponent: FC = ({ color = 'light', size = 'md' }) => ( + interface Props { + variant?: 'secondary' | 'primary'; + size?: 'sm' | 'md' | 'lg'; + } + const UploadComponent: FC = ({ + variant = 'secondary', + size = 'md', + }) => ( null} - variant={color} + variant={variant} size={size} /> ); @@ -36,21 +49,21 @@ describe('FileUpload', () => { button = screen.getByText('Upload File').closest('button'); expect(button).toBeInTheDocument(); - expect(button).toHaveClass('light', 'size-md'); + expect(button).toHaveClass('secondary', 'size-md'); - rerender(); + rerender(); button = screen.getByText('Upload File').closest('button'); expect(button).toBeInTheDocument(); - expect(button).toHaveClass('dark', 'size-sm'); + expect(button).toHaveClass('secondary', 'size-sm'); - rerender(); + rerender(); button = screen.getByText('Upload File').closest('button'); expect(button).toBeInTheDocument(); - expect(button).toHaveClass('dark', 'size-lg'); + expect(button).toHaveClass('secondary', 'size-lg'); - rerender(); + rerender(); button = screen.getByText('Upload File').closest('button'); expect(button).toBeInTheDocument(); @@ -136,7 +149,9 @@ describe('FileUpload', () => { />, ); - const file = new File(['(⌐□_□)'], 'chucknorris.png', { type: 'image/png' }); + const file = new File(['(⌐□_□)'], 'chucknorris.png', { + type: 'image/png', + }); const fileUploadInput = screen.getByLabelText('myFileUpload'); fireEvent.change(fileUploadInput, { target: { files: [file] } }); @@ -157,7 +172,9 @@ describe('FileUpload', () => { />, ); - const file = new File(['(⌐□_□)'], 'chucknorris.png', { type: 'image/png' }); + const file = new File(['(⌐□_□)'], 'chucknorris.png', { + type: 'image/png', + }); const fileUploadInput = screen.getByLabelText('myFileUpload'); fireEvent.change(fileUploadInput, { target: { files: [file] } }); @@ -167,7 +184,11 @@ describe('FileUpload', () => { it('fires the onClear callback when clear button is clicked', () => { const mockedHandleClear = jest.fn(); - const file = new File(['(⌐□_□)'], 'super-duper--duper-long-file-name.png', { type: 'image/png' }); + const file = new File( + ['(⌐□_□)'], + 'super-duper--duper-long-file-name.png', + { type: 'image/png' }, + ); const fileList: any = []; // eslint-disable-line fileList[0] = file; fileList.item = (index: number) => fileList[index]; @@ -193,7 +214,14 @@ describe('FileUpload', () => { describe('Open File Reader', () => { it('opens the native filereader when button is clicked', () => { - render( null} />); + render( + null} + />, + ); const button = screen.getByText('Upload File').closest('button'); @@ -207,7 +235,11 @@ describe('FileUpload', () => { describe('Showing Files', () => { it('File names shown when filelist is passed', () => { - const file = new File(['(⌐□_□)'], 'super-duper--duper-long-file-name.png', { type: 'image/png' }); + const file = new File( + ['(⌐□_□)'], + 'super-duper--duper-long-file-name.png', + { type: 'image/png' }, + ); const fileList: any = []; // eslint-disable-line fileList[0] = file; fileList.item = (index: number) => fileList[index]; @@ -222,13 +254,19 @@ describe('FileUpload', () => { />, ); - const fileName = screen.getByText('super-duper--duper-long-file-name.png'); + const fileName = screen.getByText( + 'super-duper--duper-long-file-name.png', + ); expect(fileName).toBeInTheDocument(); }); it('File names are truncated based on fileNameMaxLength prop', () => { - const file = new File(['(⌐□_□)'], 'super-duper--duper-long-file-name.png', { type: 'image/png' }); + const file = new File( + ['(⌐□_□)'], + 'super-duper--duper-long-file-name.png', + { type: 'image/png' }, + ); const fileList: any = []; // eslint-disable-line fileList[0] = file; fileList.item = (index: number) => fileList[index]; @@ -284,7 +322,9 @@ describe('FileUpload', () => { }); it('is shows an error when prop is passed', () => { - interface Props { size?: 'sm' | 'md' | 'lg'; } + interface Props { + size?: 'sm' | 'md' | 'lg'; + } const UploadComponent: FC = ({ size = 'md' }) => ( { />, ); - expect(screen.getByLabelText('myFileUpload')).toHaveAttribute('data-testid', 'hello'); + expect(screen.getByLabelText('myFileUpload')).toHaveAttribute( + 'data-testid', + 'hello', + ); }); }); }); diff --git a/src/components/FileUpload/FileUpload.tsx b/src/components/FileUpload/FileUpload.tsx index d81a83ebb..a148b8044 100644 --- a/src/components/FileUpload/FileUpload.tsx +++ b/src/components/FileUpload/FileUpload.tsx @@ -1,13 +1,11 @@ -import React, { - useRef, FC, ReactNode, ChangeEvent, MouseEvent, -} from 'react'; +import React, { useRef, FC, ReactNode, ChangeEvent, MouseEvent } from 'react'; import mergeRefs from 'react-merge-refs'; import classNames from 'classnames'; import { Box, BoxProps } from '../Box/Box'; import { Icon } from '../Icon/Icon'; import { FormLabel } from '../FormLabel/FormLabel'; import { InputValidationMessage } from '../InputValidationMessage/InputValidationMessage'; -import { Button, ButtonSize } from '../Button/Button'; +import { Button, ButtonSize, ButtonVariant } from '../Button/Button'; import styles from './FileUpload.module.scss'; import { IconName } from '../../types'; @@ -82,10 +80,6 @@ export interface FileUploadProps extends BoxProps { * Whether the file upload is disabled */ isDisabled?: boolean; - /** - * Renders an outline version of the button. With a transparent background. - */ - isOutlined?: boolean; /** * Determines if input is required or not */ @@ -97,7 +91,9 @@ export interface FileUploadProps extends BoxProps { /** * Input `multiple` attribute, pass `true` if you wish to upload multiple files. */ - onClearFiles?: (event: MouseEvent) => void; + onClearFiles?: ( + event: MouseEvent, + ) => void; /** * Visual indicator that the field is required, that gets appended to the label */ @@ -107,9 +103,9 @@ export interface FileUploadProps extends BoxProps { */ size?: ButtonSize; /** - * Color for button component. Matches a curated subset of button variants. + * Color and visual weight for the button. */ - variant?: 'light' | 'dark' | 'primary' | 'white' ; + variant?: ButtonVariant; /** * Additional props to be spread. IMPORTANT: these will be spread ONLY to the * `input` element in the component since it is the actual semantic file input @@ -118,158 +114,189 @@ export interface FileUploadProps extends BoxProps { [x: string]: any; // eslint-disable-line } -export const FileUpload: FC = React.forwardRef(( - { - id, - labelText, - name, - onChange, - accept = undefined, - buttonText = 'Upload File', - className = undefined, - error = null, - fileNameMaxLength = null, - files = null, - fullWidth = false, - hasIcon = true, - helpText = undefined, - iconName = 'upload', - inputProps = undefined, - isDisabled = false, - isOutlined = false, - isRequired = false, - multiple = false, - onClearFiles = undefined, - requiredIndicator = <> *, - size = 'md', - variant = 'light', - ...restProps - }, - ref, -) => { - const hiddenFileInput = useRef(null); +export const FileUpload: FC = React.forwardRef< + HTMLDivElement, + FileUploadProps +>( + ( + { + id, + labelText, + name, + onChange, + accept = undefined, + buttonText = 'Upload File', + className = undefined, + error = null, + fileNameMaxLength = null, + files = null, + fullWidth = false, + hasIcon = true, + helpText = undefined, + iconName = 'upload', + inputProps = undefined, + isDisabled = false, + isRequired = false, + multiple = false, + onClearFiles = undefined, + requiredIndicator = <> *, + size = 'md', + variant = 'primary-neutral', + ...restProps + }, + ref, + ) => { + const hiddenFileInput = useRef(null); - const handleClick = (e: MouseEvent) => { - e.stopPropagation(); - if (hiddenFileInput?.current) hiddenFileInput.current.click(); - }; + const handleClick = (e: MouseEvent) => { + e.stopPropagation(); + if (hiddenFileInput?.current) hiddenFileInput.current.click(); + }; - const handleInputChange = (event: ChangeEvent) => { - if (inputProps?.onChange) { - inputProps.onChange(event); - } + const handleInputChange = (event: ChangeEvent) => { + if (inputProps?.onChange) { + inputProps.onChange(event); + } - onChange(event); - }; + onChange(event); + }; - const truncateFileName = (fileName: string, maxLength: number): string => { - const half = Math.floor(maxLength / 2); + const truncateFileName = (fileName: string, maxLength: number): string => { + const half = Math.floor(maxLength / 2); - return `${fileName.substr(0, half)}...${fileName.substr( - fileName.length - half, - fileName.length, - )}`; - }; + return `${fileName.substr(0, half)}...${fileName.substr( + fileName.length - half, + fileName.length, + )}`; + }; - const messageFontSize = () => { - let fontSize: 'xs' | 'sm' | 'md' = 'sm'; - if (size === 'sm') { - fontSize = 'xs'; - } else if (size === 'lg') { - fontSize = 'md'; - } + const messageFontSize = () => { + let fontSize: 'xs' | 'sm' | 'md' = 'sm'; + if (size === 'sm') { + fontSize = 'xs'; + } else if (size === 'lg') { + fontSize = 'md'; + } - return fontSize; - }; + return fontSize; + }; - const renderFiles = () => files && ( - - {[...Array.from(files)].map((file: File) => ( -

- - {fileNameMaxLength ? truncateFileName(file.name, fileNameMaxLength) : file.name} -

- ))} -
- ); + const renderFiles = () => files && ( + + {[...Array.from(files)].map((file: File) => ( +

+ + {fileNameMaxLength + ? truncateFileName(file.name, fileNameMaxLength) + : file.name} +

+ ))} +
+ ); - return ( - - - {labelText} - + return ( - - {helpText && ( - - {helpText} - + {buttonText && ( + {buttonText} + )} + {isRequired && requiredIndicator && ( + {requiredIndicator} + )} + + + + {helpText && ( + + {helpText} + + )} + + {error && error !== true && ( + + {error} + + )} + {renderFiles()} + {files && onClearFiles && ( + )} - {error && error !== true && ( - {error} - )} - {renderFiles()} - {files && onClearFiles && ( - - )} - - ); -}); + ); + }, +); diff --git a/src/components/FormControl/FormControl.tsx b/src/components/FormControl/FormControl.tsx index 5deade453..4504ee725 100644 --- a/src/components/FormControl/FormControl.tsx +++ b/src/components/FormControl/FormControl.tsx @@ -50,7 +50,6 @@ export const FormControl = React.forwardRef(( helpText, isDisabled, requiredIndicator, - width = '100', ...restProps }, ref, @@ -65,7 +64,7 @@ export const FormControl = React.forwardRef(( }; return ( - + {label && !hideLabel && {label}} {children} {error && error !== true && {error}} diff --git a/src/components/FormLabel/FormLabel.module.scss b/src/components/FormLabel/FormLabel.module.scss index 37eaef2df..620043719 100644 --- a/src/components/FormLabel/FormLabel.module.scss +++ b/src/components/FormLabel/FormLabel.module.scss @@ -1,6 +1,6 @@ .label { font-family: var(--form-control-font-family, var(--INTERNAL_form-control-font-family)); - color: var(--color-brand-dark-base); + color: var(--form-control-label-font-color, var(--INTERNAL_form-control-label-font-color)); font-size: var(--form-control-size-md-label-size, var(--INTERNAL_form-control-size-md-label-size)); font-weight: var(--form-control-label-font-weight, var(--INTERNAL_form-control-label-font-weight)); @@ -13,7 +13,8 @@ } .help-text { + color: var(--form-control-help-text-font-color, var(--INTERNAL_form-control-help-text-font-color)); margin-top: var(--form-control-help-margin, var(--INTERNAL_form-control-help-margin)); - font-weight: 400; + font-weight: var(--form-control-help-text-font-weight, var(--INTERNAL_form-control-help-text-font-weight)); } } diff --git a/src/components/FormLabel/FormLabel.tsx b/src/components/FormLabel/FormLabel.tsx index 4396abdce..61880120a 100644 --- a/src/components/FormLabel/FormLabel.tsx +++ b/src/components/FormLabel/FormLabel.tsx @@ -85,7 +85,6 @@ export const FormLabel: FC = ({ as="p" display="block" fontSize="sm" - color="grey" className={styles['help-text']} > {helpText} diff --git a/src/components/MediaModal/MediaModal.Codesandbox.stories.mdx b/src/components/MediaModal/MediaModal.Codesandbox.stories.mdx index fdcc54b1b..49b21dbb0 100644 --- a/src/components/MediaModal/MediaModal.Codesandbox.stories.mdx +++ b/src/components/MediaModal/MediaModal.Codesandbox.stories.mdx @@ -25,7 +25,7 @@ export default () => { } = useOpenClose(); return (
- - - - Custom Styled Title - - - + + + ); const footerItems = ( - - + - = ({ ...args }) => { } = useOpenClose(); return ( <> - { return (
- = forwardRef( +export const MediaModal: React.FC = forwardRef< + HTMLDivElement, + MediaModalProps +>( ( { ariaLabel, @@ -103,17 +106,36 @@ export const MediaModal: React.FC = forwardRef + + + ); + const renderHeader = () => { if (closeButton && !showHeaderBar) { return ( - - { /> Modal content - diff --git a/src/components/Modal/Modal.Overview.stories.mdx b/src/components/Modal/Modal.Overview.stories.mdx index 16c4b0b47..65361a40c 100644 --- a/src/components/Modal/Modal.Overview.stories.mdx +++ b/src/components/Modal/Modal.Overview.stories.mdx @@ -43,7 +43,7 @@ In order to hide or show the Modal, set the Modal's `isOpen` prop to `true` or ` } = useOpenClose(); return (
- Modal content - @@ -97,7 +97,7 @@ Use the `Modal.Body` and `Modal.Footer` to add body and footer content. These co } = useOpenClose(); return (
- - ` to render a minimal modal without a header. } = useOpenClose(); return (
- ` to render a minimal modal without a header. > Modal content - @@ -223,7 +223,7 @@ Use `fullScreenMobile` to enable fullscreen at mobile viewport widths. } = useOpenClose(); return (
- Modal content - @@ -272,7 +272,7 @@ maxWidth, use existing tokens only. } = useOpenClose(); return ( <> - ( @@ -27,7 +31,7 @@ export const BasicExample = () => ( null} /> Modal content - @@ -54,7 +58,7 @@ export const WithoutHeader = () => ( null}> Modal content - @@ -64,10 +68,14 @@ export const WithoutHeader = () => ( export const FullScreenOnMobile = () => ( null}> - null} /> + null} + /> Modal content - @@ -77,10 +85,14 @@ export const FullScreenOnMobile = () => ( export const WithMaxWidth = () => ( null}> - null} /> + null} + /> Modal content - @@ -95,10 +107,14 @@ export const WithResponsiveMaxWidth = () => ( isOpen onDismiss={() => null} > - null} /> + null} + /> Modal content - diff --git a/src/components/Modal/Modal.stories.tsx b/src/components/Modal/Modal.stories.tsx index 0540ef815..f799684d9 100644 --- a/src/components/Modal/Modal.stories.tsx +++ b/src/components/Modal/Modal.stories.tsx @@ -17,7 +17,7 @@ export const WithCustomPortalTarget: Story = () => { return (
- { maxWidth="4xl" containerRef={ref} > - setShowModal(false)} /> + setShowModal(false)} + /> - This modal is rendered inside it's containing div, rather than the document.body + This modal is rendered inside it's containing div, rather than + the document.body
diff --git a/src/components/Pagination/Pagination.tsx b/src/components/Pagination/Pagination.tsx index 867672e04..b0cff370c 100644 --- a/src/components/Pagination/Pagination.tsx +++ b/src/components/Pagination/Pagination.tsx @@ -108,7 +108,7 @@ export const Pagination: FC = ({ gap={isCompact ? 'xs' : 'sm'} > diff --git a/src/components/Popover/Popover.Overview.stories.mdx b/src/components/Popover/Popover.Overview.stories.mdx index 30e80bf05..234481a04 100644 --- a/src/components/Popover/Popover.Overview.stories.mdx +++ b/src/components/Popover/Popover.Overview.stories.mdx @@ -49,7 +49,7 @@ of uses for a popover include: }} onClickOutside={closePopover} > - @@ -100,7 +100,7 @@ You can apply a custom class to your popover with the `className` prop. Here we className="font-color-danger" onClickOutside={closePopover} > - @@ -175,7 +175,7 @@ the entire gamut of styling options. radius: popoverRadius.value, }} > - @@ -290,7 +290,7 @@ prevent the content from getting cut off. > @@ -353,7 +353,7 @@ in order to render the element anywhere on the page. portalTarget={document.body} onClickOutside={closePopover} > - @@ -409,7 +409,7 @@ NOTE: this should be use sparingly since context dependent on hover, isn't an op @@ -468,7 +468,7 @@ in cases where the click target includes the Popover trigger or content nodes. background: 'primary-light', }} > - @@ -529,7 +529,7 @@ Use the `trapFocus` prop to constrain focus to popover content elements. onClickOutside={closePopover} trapFocus > - @@ -575,7 +575,7 @@ Render the popover with no arrow by passing `hasArrow` false. }} onClickOutside={closePopover} > - @@ -627,7 +627,7 @@ Place the popover closer or farther from its trigger with the `offsetFromTarget` hasArrow={false} offsetFromTarget={offset} > - diff --git a/src/components/Popover/Popover.VisualTests.stories.tsx b/src/components/Popover/Popover.VisualTests.stories.tsx index d22184cc4..55de54abd 100644 --- a/src/components/Popover/Popover.VisualTests.stories.tsx +++ b/src/components/Popover/Popover.VisualTests.stories.tsx @@ -136,7 +136,7 @@ export const Demo: Story = () => { withPortal portalTarget={document.body} > - @@ -160,7 +160,7 @@ export const Default: Story = () => { padding: 'sm', }} > - @@ -226,7 +226,10 @@ export const Placement: Story = () => { color: 'white', }} > - @@ -267,7 +270,7 @@ export const HideArrow: Story = () => { onClickOutside={closePopover} hasArrow={false} > - @@ -303,7 +306,7 @@ export const Offset: Story = () => { hasArrow={false} offsetFromTarget={20} > - diff --git a/src/components/Toast/Toast.Overview.stories.mdx b/src/components/Toast/Toast.Overview.stories.mdx index a79ff1f75..d9d1913f9 100644 --- a/src/components/Toast/Toast.Overview.stories.mdx +++ b/src/components/Toast/Toast.Overview.stories.mdx @@ -314,8 +314,7 @@ For these cases, you can use `toast.dismiss`. Show Toast @@ -438,7 +437,7 @@ To give toasts an additional visual indication of feedback, `success`, `loading` promise you can pass a function to the toasts in question, see code example.

- diff --git a/src/docs/FormTheming.stories.mdx b/src/docs/FormTheming.stories.mdx index 938fcfb3d..53f9ee801 100644 --- a/src/docs/FormTheming.stories.mdx +++ b/src/docs/FormTheming.stories.mdx @@ -180,8 +180,9 @@ The following tokens are shared by all form controls to maintain a consistent ap 'form-control-label-margin': '--size-spacing-xs', 'form-control-help-margin': '--size-spacing-2xs', 'form-control-line-height': '--size-line-height-input', - 'form-control-label-font-weight': '--size-font-weight-bold', - 'form-control-legend-font-weight': '--size-font-weight-bold', + 'form-control-help-text-font-weight': 'var(--size-font-weight-regular)', + 'form-control-label-font-weight': 'var(--size-font-weight-medium)', + 'form-control-legend-font-weight': 'var(--size-font-weight-medium)', 'form-control-box-shadow': '0 3px 0 rgba(0, 0, 0, 0.05)', 'form-control-font-family': '--asset-fonts-body', 'form-control-size-xs-border-radius': '--size-border-radius-sm', @@ -207,10 +208,12 @@ The following tokens are shared by all form controls to maintain a consistent ap 'form-control-border-color-hover': '--color-brand-grey-300', 'form-control-border-color-selected': '--color-brand-primary-500', 'form-control-border-color-selected-hover': '--color-brand-primary-500', - 'form-control-font-color': '--color-brand-dark-base', + 'form-control-font-color': '--color-brand-grey-700', 'form-control-font-color-disabled': '--color-brand-grey-300', 'form-control-font-color-error': '--color-brand-danger-base', 'form-control-font-color-error-disabled': '--color-brand-danger-200', + 'form-control-help-text-font-color': 'var(--color-brand-grey-500)', + 'form-control-label-font-color': 'var(--color-brand-grey-700)', 'form-control-description-color': '--color-brand-grey-600', 'form-control-icon-color': '--color-brand-grey-300', 'form-control-icon-color-hover': '--color-brand-grey', diff --git a/src/docs/Theming.stories.mdx b/src/docs/Theming.stories.mdx index d94d8891b..d0a5c6234 100644 --- a/src/docs/Theming.stories.mdx +++ b/src/docs/Theming.stories.mdx @@ -162,8 +162,24 @@ Here is an example where all three token types are used to create a customized a '--button-size-md-border-radius': '0', '--button-size-md-padding-vertical': '.5rem', '--button-size-md-padding-horizontal': '.5rem', - '--button-primary-box-shadow-focus': '0 0 0 4px var(--color-brand-primary-200)', + '--button-primary-box-shadow-focus': + '0 0 0 4px var(--color-brand-primary-200)', '--button-font-family': 'Consolas,monaco,monospace', + '--button-primary-background-color': 'var(--color-brand-primary-500)', + '--button-primary-background-color-hover': 'var(--color-brand-primary-600)', + '--button-primary-background-color-active': 'var(--color-brand-primary-700)', + '--button-secondary-background-color': 'var(--color-brand-white-base)', + '--button-secondary-background-color-hover': 'var(--color-brand-primary-50)', + '--button-secondary-background-color-active': 'var(--color-brand-primary-100)', + '--button-secondary-border-color': 'var(--color-brand-grey-200)', + '--button-secondary-border-color-hover': 'var(--color-brand-primary-100)', + '--button-secondary-font-color': 'var(--color-brand-primary-500)', + '--button-secondary-font-color-hover': 'var(--color-brand-primary-500)', + '--button-tertiary-background-color': 'transparent', + '--button-tertiary-background-color-hover': 'var(--color-brand-primary-50)', + '--button-tertiary-background-color-active': 'var(--color-brand-primary-100)', + '--button-tertiary-font-color': 'var(--color-brand-primary-500)', + '--button-tertiary-font-color-hover': 'var(--color-brand-primary-500)', }; return ( - setIsThemed(event.target.checked)} isChecked={isThemed} size="lg" /> + setIsThemed(event.target.checked)} + isChecked={isThemed} + size="lg" + /> Leading the world toward a clean energy future @@ -195,13 +217,26 @@ Here is an example where all three token types are used to create a customized a Unselected Selected - - handleChange('selectedTab', index)}> + + handleChange('selectedTab', index)} + > Tab 1 Tab 2 Tab 3 - handleChange('selectedTabSlider', index)}> + + handleChange('selectedTabSlider', index) + } + > Tab 1 Tab 2 Tab 3 @@ -209,31 +244,14 @@ Here is an example where all three token types are used to create a customized a - - - - - - - - - - - - - + + + + + + + + @@ -249,7 +267,9 @@ Here is an example where all three token types are used to create a customized a handleChange('selectValue', event.target.value)} + onChange={event => + handleChange('selectValue', event.target.value) + } options={options} value={themeExampleValues.selectValue} /> @@ -261,7 +281,9 @@ Here is an example where all three token types are used to create a customized a value={themeExampleValues.multiSelectValue} menuPortalTarget={document.body} options={options} - onChange={event => handleChange('multiSelectValue', event.target.value)} + onChange={event => + handleChange('multiSelectValue', event.target.value) + } /> handleChange('textareaValue', e.target.value)} /> - {}} isChecked /> - {}} /> + {}} + isChecked + /> + {}} + /> handleChange('optionTileGroupValue', event.target.value)} + onChange={event => + handleChange('optionTileGroupValue', event.target.value) + } options={options} direction="row" /> diff --git a/src/hooks/useOpenClose/useOpenClose.Overview.stories.mdx b/src/hooks/useOpenClose/useOpenClose.Overview.stories.mdx index 67107c664..9aba364a4 100644 --- a/src/hooks/useOpenClose/useOpenClose.Overview.stories.mdx +++ b/src/hooks/useOpenClose/useOpenClose.Overview.stories.mdx @@ -29,7 +29,7 @@ The `useOpenClose` hook helps handle common open, close, or toggle scenarios. It }); return (
- handleChange('textInputSm', event.target.value)} + onChange={event => + handleChange('textInputSm', event.target.value) + } /> @@ -64,7 +66,9 @@ Sizes for form controls likes inputs and buttons, should match so that they can id="mdText" value={formValues.textInputMd} placeholder="Medium" - onChange={event => handleChange('textInputMd', event.target.value)} + onChange={event => + handleChange('textInputMd', event.target.value) + } /> @@ -73,18 +77,20 @@ Sizes for form controls likes inputs and buttons, should match so that they can value={formValues.textInputLg} placeholder="Large" size="lg" - onChange={event => handleChange('textInputLg', event.target.value)} + onChange={event => + handleChange('textInputLg', event.target.value) + } /> - - - @@ -92,7 +98,9 @@ Sizes for form controls likes inputs and buttons, should match so that they can handleChange('selectInput', event.target.value)} + onChange={event => + handleChange('selectInput', event.target.value) + } options={options} value={formValues.selectInput} hideLabel @@ -101,7 +109,9 @@ Sizes for form controls likes inputs and buttons, should match so that they can handleChange('selectInput', event.target.value)} + onChange={event => + handleChange('selectInput', event.target.value) + } options={options} value={formValues.selectInput} hideLabel @@ -110,7 +120,9 @@ Sizes for form controls likes inputs and buttons, should match so that they can handleChange('selectInput', event.target.value)} + onChange={event => + handleChange('selectInput', event.target.value) + } options={options} value={formValues.selectInput} hideLabel @@ -121,7 +133,9 @@ Sizes for form controls likes inputs and buttons, should match so that they can handleChange('selectInput', event.target.value)} + onChange={event => + handleChange('selectInput', event.target.value) + } options={options} value={formValues.selectInput} hideLabel @@ -130,7 +144,9 @@ Sizes for form controls likes inputs and buttons, should match so that they can handleChange('selectInput', event.target.value)} + onChange={event => + handleChange('selectInput', event.target.value) + } options={options} value={formValues.selectInput} hideLabel @@ -139,7 +155,9 @@ Sizes for form controls likes inputs and buttons, should match so that they can handleChange('selectInput', event.target.value)} + onChange={event => + handleChange('selectInput', event.target.value) + } options={options} value={formValues.selectInput} hideLabel @@ -150,7 +168,9 @@ Sizes for form controls likes inputs and buttons, should match so that they can handleChange('selectInput', event.target.value)} + onChange={event => + handleChange('selectInput', event.target.value) + } options={options} value={formValues.selectInput} hideLabel @@ -160,7 +180,9 @@ Sizes for form controls likes inputs and buttons, should match so that they can handleChange('selectInput', event.target.value)} + onChange={event => + handleChange('selectInput', event.target.value) + } options={options} value={formValues.selectInput} hideLabel @@ -170,7 +192,9 @@ Sizes for form controls likes inputs and buttons, should match so that they can handleChange('selectInput', event.target.value)} + onChange={event => + handleChange('selectInput', event.target.value) + } options={options} value={formValues.selectInput} hideLabel @@ -184,7 +208,9 @@ Sizes for form controls likes inputs and buttons, should match so that they can id="smToggle" label="small toggle" hideLabel - onChange={event => handleChange('toggleValue', event.target.checked)} + onChange={event => + handleChange('toggleValue', event.target.checked) + } isChecked={formValues.toggleValue} size="sm" /> @@ -194,7 +220,9 @@ Sizes for form controls likes inputs and buttons, should match so that they can id="mdToggle" label="medium toggle" hideLabel - onChange={event => handleChange('toggleValue', event.target.checked)} + onChange={event => + handleChange('toggleValue', event.target.checked) + } isChecked={formValues.toggleValue} size="md" /> @@ -204,7 +232,9 @@ Sizes for form controls likes inputs and buttons, should match so that they can id="lgToggle" label="large toggle" hideLabel - onChange={event => handleChange('toggleValue', event.target.checked)} + onChange={event => + handleChange('toggleValue', event.target.checked) + } isChecked={formValues.toggleValue} size="lg" /> @@ -244,7 +274,7 @@ Inline form sizes with labels. ]; return (
- + - + - + - + - + - + - + - + Date: Fri, 2 Feb 2024 18:30:42 +0000 Subject: [PATCH 03/40] chore(release): 1.0.0-beta.1 [skip ci] # [1.0.0-beta.1](https://github.com/palmetto/palmetto-components/compare/v0.157.7...v1.0.0-beta.1) (2024-02-02) * BREAKING CHANGE: New Buttons (#865) ([935c361](https://github.com/palmetto/palmetto-components/commit/935c3615456e7ca8d8b2b51f0c13d6e0f6985f2d)), closes [#865](https://github.com/palmetto/palmetto-components/issues/865) ### BREAKING CHANGES * * wip * more wip * fix errors * form label help text tokens * mediamodal close button * Update Theming.stories.mdx * fix build * Update Button.VisualTests.stories.tsx * Update Button.VisualTests.stories.tsx * cleanup --- CHANGELOG.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index fb1b99a36..2a23caf77 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,33 @@ Changelog +# [1.0.0-beta.1](https://github.com/palmetto/palmetto-components/compare/v0.157.7...v1.0.0-beta.1) (2024-02-02) + + +* BREAKING CHANGE: New Buttons (#865) ([935c361](https://github.com/palmetto/palmetto-components/commit/935c3615456e7ca8d8b2b51f0c13d6e0f6985f2d)), closes [#865](https://github.com/palmetto/palmetto-components/issues/865) + + +### BREAKING CHANGES + +* * wip + +* more wip + +* fix errors + +* form label help text tokens + +* mediamodal close button + +* Update Theming.stories.mdx + +* fix build + +* Update Button.VisualTests.stories.tsx + +* Update Button.VisualTests.stories.tsx + +* cleanup + ## [0.157.7](https://github.com/palmetto/palmetto-components/compare/v0.157.6...v0.157.7) (2024-01-29) From dbde3f36b686462d788578518ccf806634fc13a4 Mon Sep 17 00:00:00 2001 From: Nathan Young <1447339+nathanyoung@users.noreply.github.com> Date: Fri, 2 Feb 2024 12:16:01 -0800 Subject: [PATCH 04/40] fix(Button): secondary neutral hover color (#866) --- src/components/Button/Button.module.scss | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/Button/Button.module.scss b/src/components/Button/Button.module.scss index b55ab7ebd..3d655a0c7 100644 --- a/src/components/Button/Button.module.scss +++ b/src/components/Button/Button.module.scss @@ -25,13 +25,13 @@ --button-primary-neutral-font-color-hover: var(--color-brand-grey-700); --button-secondary-neutral-background-color: var(--color-brand-white-base); --button-secondary-neutral-background-color-hover: var( - --color-brand-grey-100 + --color-brand-grey-50 ); --button-secondary-neutral-background-color-active: var( --color-brand-grey-200 ); --button-secondary-neutral-border-color: var(--color-brand-grey-200); - --button-secondary-neutral-border-color-hover: var(--color-brand-grey-100); + --button-secondary-neutral-border-color-hover: var(--color-brand-grey-200); --button-secondary-neutral-font-color: var(--color-brand-grey-700); --button-secondary-neutral-font-color-hover: var(--color-brand-grey-700); --button-tertiary-neutral-background-color: transparent; From 9c158ffca79a64600eb88e29fb08da0b6ea43338 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Fri, 2 Feb 2024 20:18:36 +0000 Subject: [PATCH 05/40] chore(release): 1.0.0-beta.2 [skip ci] # [1.0.0-beta.2](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.1...v1.0.0-beta.2) (2024-02-02) ### Bug Fixes * **Button:** secondary neutral hover color ([#866](https://github.com/palmetto/palmetto-components/issues/866)) ([dbde3f3](https://github.com/palmetto/palmetto-components/commit/dbde3f36b686462d788578518ccf806634fc13a4)) --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2a23caf77..66cc5ae99 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ Changelog +# [1.0.0-beta.2](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.1...v1.0.0-beta.2) (2024-02-02) + + +### Bug Fixes + +* **Button:** secondary neutral hover color ([#866](https://github.com/palmetto/palmetto-components/issues/866)) ([dbde3f3](https://github.com/palmetto/palmetto-components/commit/dbde3f36b686462d788578518ccf806634fc13a4)) + # [1.0.0-beta.1](https://github.com/palmetto/palmetto-components/compare/v0.157.7...v1.0.0-beta.1) (2024-02-02) From 918eeeab347d9e7f13a54b41ad027dfc40d79605 Mon Sep 17 00:00:00 2001 From: Nathan Young <1447339+nathanyoung@users.noreply.github.com> Date: Fri, 9 Feb 2024 12:05:17 -0800 Subject: [PATCH 06/40] feat(Button): tone prop (#867) * add tone prop * fix up * update FileUpload * Update FileUpload.Overview.stories.mdx * Update Table.Overview.stories.mdx * Update Toast.Overview.stories.mdx --- .../Button/Button.Overview.stories.mdx | 81 ++-- .../Button/Button.Playground.stories.tsx | 8 +- .../Button/Button.VisualTests.stories.tsx | 48 ++- src/components/Button/Button.constants.ts | 14 +- src/components/Button/Button.module.scss | 374 +++++++++--------- src/components/Button/Button.test.jsx | 12 +- src/components/Button/Button.tsx | 31 +- .../Card/Card.Codesandbox.stories.mdx | 14 +- src/components/Card/Card.Overview.stories.mdx | 6 +- .../Drawer/Drawer.Overview.stories.mdx | 36 +- .../Drawer/Drawer.Playground.stories.tsx | 2 +- .../FileUpload.Overview.stories.mdx | 9 +- .../FileUpload.Playground.stories.tsx | 12 +- src/components/FileUpload/FileUpload.test.tsx | 2 +- src/components/FileUpload/FileUpload.tsx | 18 +- .../MediaModal.Codesandbox.stories.mdx | 2 +- .../MediaModal.Overview.stories.mdx | 19 +- .../MediaModal.Playground.stories.tsx | 2 +- .../MediaModal/MediaModal.stories.tsx | 2 +- .../Modal/Modal.Codesandbox.stories.mdx | 4 +- .../Modal/Modal.Overview.stories.mdx | 18 +- .../Modal/Modal.VisualTests.stories.jsx | 10 +- src/components/Modal/Modal.stories.tsx | 6 +- src/components/Pagination/Pagination.tsx | 14 +- .../Popover/Popover.Codesandbox.stories.mdx | 7 +- .../Popover/Popover.Overview.stories.mdx | 22 +- .../Popover/Popover.VisualTests.stories.tsx | 16 +- .../Table/Table.Overview.stories.mdx | 2 +- .../Toast/Toast.Overview.stories.mdx | 59 +-- src/docs/Theming.stories.mdx | 47 ++- .../useOpenClose.Overview.stories.mdx | 7 +- 31 files changed, 528 insertions(+), 376 deletions(-) diff --git a/src/components/Button/Button.Overview.stories.mdx b/src/components/Button/Button.Overview.stories.mdx index 62e592b20..99cfef4b1 100644 --- a/src/components/Button/Button.Overview.stories.mdx +++ b/src/components/Button/Button.Overview.stories.mdx @@ -14,7 +14,17 @@ They are used in forms, toolbars, modal dialogs and as stand-alone action trigge Actions almost always occur on the same page. - + + + ## Props @@ -31,7 +41,7 @@ The `variant` prop determines which color visual weight to render. parameters={{ design: { type: 'figma', - url: 'https://www.figma.com/file/k1kOsplTGXvSSMQQCzhCND/Palmetto-Design-System?type=design&node-id=4065%3A1337&mode=design&t=y5ghcijLJzWx4apI-1', + url: 'https://www.figma.com/file/k1kOsplTGXvSSMQQCzhCND/Palmetto-Design-System?type=design&node-id=4032%3A11&mode=design&t=ht1ehQlCvlWB3tJ2-1', }, }} > @@ -42,14 +52,26 @@ The `variant` prop determines which color visual weight to render. - - - + + + - - - + + + @@ -66,15 +88,23 @@ so it can have different sizes at different breakpoints. parameters={{ design: { type: 'figma', - url: 'https://www.figma.com/file/k1kOsplTGXvSSMQQCzhCND/Palmetto-Design-System?node-id=2115%3A24829', + url: 'https://www.figma.com/file/k1kOsplTGXvSSMQQCzhCND/Palmetto-Design-System?type=design&node-id=4032%3A11&mode=design&t=ht1ehQlCvlWB3tJ2-1', }, }} > - - - - + + + + @@ -96,7 +127,7 @@ Use the `fullWidth` prop to allow the button to grow to its container's full wid - @@ -109,10 +140,10 @@ Add an icon to the left or right inside the Button using the `iconPrefix` and `i - - @@ -127,11 +158,17 @@ Use a combination of `tertiary-*` variant and a named icon to make an icon a but - - diff --git a/src/components/Button/Button.Playground.stories.tsx b/src/components/Button/Button.Playground.stories.tsx index 1ea77e04b..ea13addfb 100644 --- a/src/components/Button/Button.Playground.stories.tsx +++ b/src/components/Button/Button.Playground.stories.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { Meta, Story } from '@storybook/react/types-6-0'; import { ICON_NAMES } from '../../lib/tokens'; import { Button, ButtonProps } from './Button'; -import { BUTTON_SIZES, BUTTON_VARIANTS } from './Button.constants'; +import { BUTTON_SIZES, BUTTON_VARIANTS, BUTTON_TONE } from './Button.constants'; export default { title: 'Components/Button/Playground', @@ -17,6 +17,12 @@ export default { options: BUTTON_VARIANTS, }, }, + tone: { + control: { + type: 'select', + options: BUTTON_TONE, + }, + }, size: { control: { type: 'select', diff --git a/src/components/Button/Button.VisualTests.stories.tsx b/src/components/Button/Button.VisualTests.stories.tsx index 6d60ee68d..c6c8c3b80 100644 --- a/src/components/Button/Button.VisualTests.stories.tsx +++ b/src/components/Button/Button.VisualTests.stories.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { Meta, Story } from '@storybook/react/types-6-0'; import { within } from '@testing-library/react'; import { Button, ButtonProps } from './Button'; -import { BUTTON_SIZES, BUTTON_VARIANTS } from './Button.constants'; +import { BUTTON_SIZES, BUTTON_TONE, BUTTON_VARIANTS } from './Button.constants'; import { Box } from '../Box/Box'; import { RESPONSIVE_STORY } from '../../docs/constants'; @@ -15,38 +15,46 @@ const Template: Story = ( args, showIconButton, ) => ( - - {BUTTON_VARIANTS.map(variant => ( + + {BUTTON_TONE.map(tone => BUTTON_VARIANTS.map(variant => ( {BUTTON_SIZES.map(size => ( ))} {showIconButton && ( - + )} - ))} + )))} - - - + + + ); @@ -76,7 +84,7 @@ WithIcons.args = { }; export const SecondaryFocus = SingleButtonTemplate.bind({}); - +SecondaryFocus.args = { variant: 'secondary' }; SecondaryFocus.play = async ({ canvasElement }) => { // Starts querying the component from its root const canvas = within(canvasElement); @@ -94,7 +102,7 @@ PrimaryFocus.play = async ({ canvasElement }) => { }; export const DangerFocus = SingleButtonTemplate.bind({}); -DangerFocus.args = { variant: 'primary-danger' }; +DangerFocus.args = { tone: 'danger' }; DangerFocus.play = async ({ canvasElement }) => { const canvas = within(canvasElement); diff --git a/src/components/Button/Button.constants.ts b/src/components/Button/Button.constants.ts index 9fc5d9d5a..4d3ec3668 100644 --- a/src/components/Button/Button.constants.ts +++ b/src/components/Button/Button.constants.ts @@ -1,15 +1,15 @@ -import { ButtonVariant, ButtonSize } from './Button'; +import { ButtonVariant, ButtonSize, ButtonTone } from './Button'; export const BUTTON_VARIANTS: ButtonVariant[] = [ 'primary', 'secondary', 'tertiary', - 'primary-neutral', - 'secondary-neutral', - 'tertiary-neutral', - 'primary-danger', - 'secondary-danger', - 'tertiary-danger', +]; + +export const BUTTON_TONE: ButtonTone[] = [ + 'primary', + 'neutral', + 'danger', ]; export const BUTTON_SIZES: ButtonSize[] = ['xs', 'sm', 'md', 'lg']; diff --git a/src/components/Button/Button.module.scss b/src/components/Button/Button.module.scss index 3d655a0c7..59bf345a9 100644 --- a/src/components/Button/Button.module.scss +++ b/src/components/Button/Button.module.scss @@ -24,9 +24,7 @@ --button-primary-neutral-font-color: var(--color-brand-grey-700); --button-primary-neutral-font-color-hover: var(--color-brand-grey-700); --button-secondary-neutral-background-color: var(--color-brand-white-base); - --button-secondary-neutral-background-color-hover: var( - --color-brand-grey-50 - ); + --button-secondary-neutral-background-color-hover: var(--color-brand-grey-50); --button-secondary-neutral-background-color-active: var( --color-brand-grey-200 ); @@ -268,6 +266,64 @@ &:not(:disabled):active { background-color: var(--button-primary-background-color-active); } + + &.neutral { + background-color: var(--button-primary-neutral-background-color); + color: var(--button-primary-neutral-font-color); + + &:focus { + outline: 0; + box-shadow: var(--button-neutral-box-shadow-focus); + } + + &:focus-visible { + outline: 0; + box-shadow: var(--button-neutral-box-shadow-focus); + } + + &:focus:not(:focus-visible) { + outline: 0; + box-shadow: none; + } + + &:not(:disabled):hover { + background-color: var(--button-primary-neutral-background-color-hover); + color: var(--button-primary-neutral-font-color-hover); + } + + &:not(:disabled):active { + background-color: var(--button-primary-neutral-background-color-active); + } + } + + &.danger { + background-color: var(--button-primary-danger-background-color); + color: var(--button-primary-danger-font-color); + + &:focus { + outline: 0; + box-shadow: var(--button-danger-box-shadow-focus); + } + + &:focus-visible { + outline: 0; + box-shadow: var(--button-danger-box-shadow-focus); + } + + &:focus:not(:focus-visible) { + outline: 0; + box-shadow: none; + } + + &:not(:disabled):hover { + background-color: var(--button-primary-danger-background-color-hover); + color: var(--button-primary-danger-font-color-hover); + } + + &:not(:disabled):active { + background-color: var(--button-primary-danger-background-color-active); + } + } } &.secondary { @@ -301,6 +357,77 @@ &:not(:disabled):active { background-color: var(--button-secondary-background-color-active); } + + &.neutral { + background-color: var(--button-secondary-neutral-background-color); + border: 1px solid; + border-color: var(--button-secondary-neutral-border-color); + color: var(--button-secondary-neutral-font-color); + + &:focus { + outline: 0; + box-shadow: var(--button-neutral-box-shadow-focus); + } + + // Show focus styles on keyboard focus. + &:focus-visible { + outline: 0; + box-shadow: var(--button-neutral-box-shadow-focus); + } + + &:focus:not(:focus-visible) { + outline: 0; + box-shadow: none; + } + + &:not(:disabled):hover { + border-color: var(--button-secondary-neutral-border-color-hover); + background-color: var( + --button-secondary-neutral-background-color-hover + ); + color: var(--button-secondary-neutral-font-color-hover); + } + + &:not(:disabled):active { + background-color: var( + --button-secondary-neutral-background-color-active + ); + } + } + + &.danger { + background-color: var(--button-secondary-danger-background-color); + border: 1px solid; + border-color: var(--button-secondary-danger-border-color); + color: var(--button-secondary-danger-font-color); + + &:focus { + outline: 0; + box-shadow: var(--button-danger-box-shadow-focus); + } + + &:focus-visible { + outline: 0; + box-shadow: var(--button-danger-box-shadow-focus); + } + + &:focus:not(:focus-visible) { + outline: 0; + box-shadow: none; + } + + &:not(:disabled):hover { + border-color: var(--button-secondary-danger-border-color-hover); + background-color: var(--button-secondary-danger-background-color-hover); + color: var(--button-secondary-danger-font-color-hover); + } + + &:not(:disabled):active { + background-color: var( + --button-secondary-danger-background-color-active + ); + } + } } &.tertiary { @@ -333,187 +460,68 @@ background-color: var(--button-tertiary-background-color-active); border-color: var(--button-tertiary-background-color-active); } - } - - &.primary-neutral { - background-color: var(--button-primary-neutral-background-color); - color: var(--button-primary-neutral-font-color); - &:focus { - outline: 0; - box-shadow: var(--button-neutral-box-shadow-focus); - } - - &:focus-visible { - outline: 0; - box-shadow: var(--button-neutral-box-shadow-focus); - } - - &:focus:not(:focus-visible) { - outline: 0; - box-shadow: none; - } - - &:not(:disabled):hover { - background-color: var(--button-primary-neutral-background-color-hover); - color: var(--button-primary-neutral-font-color-hover); - } - - &:not(:disabled):active { - background-color: var(--button-primary-neutral-background-color-active); - } - } - - &.secondary-neutral { - background-color: var(--button-secondary-neutral-background-color); - border: 1px solid; - border-color: var(--button-secondary-neutral-border-color); - color: var(--button-secondary-neutral-font-color); - - &:focus { - outline: 0; - box-shadow: var(--button-neutral-box-shadow-focus); - } - - // Show focus styles on keyboard focus. - &:focus-visible { - outline: 0; - box-shadow: var(--button-neutral-box-shadow-focus); - } - - &:focus:not(:focus-visible) { - outline: 0; - box-shadow: none; - } - - &:not(:disabled):hover { - border-color: var(--button-secondary-neutral-border-color-hover); - background-color: var(--button-secondary-neutral-background-color-hover); - color: var(--button-secondary-neutral-font-color-hover); - } - - &:not(:disabled):active { - background-color: var(--button-secondary-neutral-background-color-active); - } - } - - &.tertiary-neutral { - background-color: var(--button-tertiary-neutral-background-color); - color: var(--button-tertiary-neutral-font-color); - - &:focus { - outline: 0; - box-shadow: var(--button-neutral-box-shadow-focus); - } - - // Show focus styles on keyboard focus. - &:focus-visible { - outline: 0; - box-shadow: var(--button-neutral-box-shadow-focus); - } - - &:focus:not(:focus-visible) { - outline: 0; - box-shadow: none; - } - - &:not(:disabled):hover { - background-color: var(--button-tertiary-neutral-background-color-hover); - color: var(--button-tertiary-neutral-font-color-hover); - } - - &:not(:disabled):active { - background-color: var(--button-tertiary-neutral-background-color-active); - } - } - - &.primary-danger { - background-color: var(--button-primary-danger-background-color); - color: var(--button-primary-danger-font-color); - - &:focus { - outline: 0; - box-shadow: var(--button-danger-box-shadow-focus); - } - - &:focus-visible { - outline: 0; - box-shadow: var(--button-danger-box-shadow-focus); - } - - &:focus:not(:focus-visible) { - outline: 0; - box-shadow: none; - } - - &:not(:disabled):hover { - background-color: var(--button-primary-danger-background-color-hover); - color: var(--button-primary-danger-font-color-hover); - } - - &:not(:disabled):active { - background-color: var(--button-primary-danger-background-color-active); - } - } - - &.secondary-danger { - background-color: var(--button-secondary-danger-background-color); - border: 1px solid; - border-color: var(--button-secondary-danger-border-color); - color: var(--button-secondary-danger-font-color); - - &:focus { - outline: 0; - box-shadow: var(--button-danger-box-shadow-focus); - } - - &:focus-visible { - outline: 0; - box-shadow: var(--button-danger-box-shadow-focus); - } - - &:focus:not(:focus-visible) { - outline: 0; - box-shadow: none; - } - - &:not(:disabled):hover { - border-color: var(--button-secondary-danger-border-color-hover); - background-color: var(--button-secondary-danger-background-color-hover); - color: var(--button-secondary-danger-font-color-hover); - } - - &:not(:disabled):active { - background-color: var(--button-secondary-danger-background-color-active); - } - } - - &.tertiary-danger { - background-color: var(--button-tertiary-danger-background-color); - color: var(--button-tertiary-danger-font-color); - - &:focus { - outline: 0; - box-shadow: var(--button-danger-box-shadow-focus); - } - - &:focus-visible { - outline: 0; - box-shadow: var(--button-danger-box-shadow-focus); - } - - &:focus:not(:focus-visible) { - outline: 0; - box-shadow: none; - } - - &:not(:disabled):hover { - background-color: var(--button-tertiary-danger-background-color-hover); - color: var(--button-tertiary-danger-font-color-hover); - } - - &:not(:disabled):active { - background-color: var(--button-tertiary-danger-background-color-active); + &.neutral { + background-color: var(--button-tertiary-neutral-background-color); + color: var(--button-tertiary-neutral-font-color); + + &:focus { + outline: 0; + box-shadow: var(--button-neutral-box-shadow-focus); + } + + // Show focus styles on keyboard focus. + &:focus-visible { + outline: 0; + box-shadow: var(--button-neutral-box-shadow-focus); + } + + &:focus:not(:focus-visible) { + outline: 0; + box-shadow: none; + } + + &:not(:disabled):hover { + background-color: var(--button-tertiary-neutral-background-color-hover); + border-color: var(--button-tertiary-neutral-background-color-hover); + color: var(--button-tertiary-neutral-font-color-hover); + } + + &:not(:disabled):active { + background-color: var( + --button-tertiary-neutral-background-color-active + ); + } + } + + &.danger { + background-color: var(--button-tertiary-danger-background-color); + color: var(--button-tertiary-danger-font-color); + + &:focus { + outline: 0; + box-shadow: var(--button-danger-box-shadow-focus); + } + + &:focus-visible { + outline: 0; + box-shadow: var(--button-danger-box-shadow-focus); + } + + &:focus:not(:focus-visible) { + outline: 0; + box-shadow: none; + } + + &:not(:disabled):hover { + background-color: var(--button-tertiary-danger-background-color-hover); + border-color: var(--button-tertiary-danger-background-color-hover); + color: var(--button-tertiary-danger-font-color-hover); + } + + &:not(:disabled):active { + background-color: var(--button-tertiary-danger-background-color-active); + } } } diff --git a/src/components/Button/Button.test.jsx b/src/components/Button/Button.test.jsx index e7ed9fa42..9547ec3e3 100644 --- a/src/components/Button/Button.test.jsx +++ b/src/components/Button/Button.test.jsx @@ -277,15 +277,15 @@ describe('Button', () => { describe('Loading', () => { test('it renders the spinning loading indicator', () => { - render(); + render(); const spinnerElement = document.getElementsByClassName('spinner')[0]; expect(spinnerElement).toBeInTheDocument(); expect(spinnerElement).toHaveClass('font-color-dark'); }); - test('it renders the grey spinning indicator if button variant is secondary-neutral', () => { + test('it renders the grey spinning indicator if button variant is secondary with neutral tone', () => { render( - , ); @@ -310,9 +310,9 @@ describe('Button', () => { expect(spinnerElement).toHaveClass('font-color-white'); }); - test('it renders white spinning indicator when button is primary-danger', () => { + test('it renders white spinning indicator when button is primary with tone danger', () => { render( - , ); @@ -341,7 +341,7 @@ describe('Button', () => { render(); expect(screen.getByText('primary').closest('button')).toHaveClass( - 'primary-neutral', + 'primary', ); }); diff --git a/src/components/Button/Button.tsx b/src/components/Button/Button.tsx index 717bca5e2..38b69d5f5 100644 --- a/src/components/Button/Button.tsx +++ b/src/components/Button/Button.tsx @@ -17,17 +17,8 @@ import { getElementType } from '../../lib/getElementType'; import { Spinner } from '../Spinner/Spinner'; import styles from './Button.module.scss'; -export type ButtonVariant = - | 'primary' - | 'secondary' - | 'tertiary' - | 'primary-neutral' - | 'secondary-neutral' - | 'tertiary-neutral' - | 'primary-danger' - | 'secondary-danger' - | 'tertiary-danger'; - +export type ButtonVariant = 'primary' | 'secondary' | 'tertiary'; +export type ButtonTone = 'primary' | 'neutral' | 'danger'; export type ButtonSize = 'xs' | 'sm' | 'md' | 'lg'; export interface BaseButtonProps { @@ -97,7 +88,11 @@ export interface BaseButtonProps { */ size?: ButtonSize | ResponsiveProp; /** - * The color variant of the button + * Indicate the intent of the action the button performs. + */ + tone?: ButtonTone; + /** + * The level of visual weight of the button */ variant?: ButtonVariant; /** @@ -149,7 +144,8 @@ export const Button = forwardRef< target = undefined, type = undefined, size = 'md', - variant = 'primary-neutral', + tone = 'primary', + variant = 'primary', ...restProps }, ref, @@ -169,6 +165,7 @@ export const Button = forwardRef< { [styles.loading]: isLoading, [styles[variant]]: variant, + [styles[tone]]: tone, [styles['full-width']]: fullWidth, }, ); @@ -188,7 +185,9 @@ export const Button = forwardRef< }; const getSpinnerVariant = () => { - if (variant === 'primary' || variant === 'primary-danger') return 'white'; + if (variant === 'primary' && (tone === 'primary' || tone === 'danger')) { + return 'white'; + } return 'dark'; }; @@ -260,9 +259,7 @@ export const Button = forwardRef< disabled, target: as === 'a' && href ? target : null, onBlur: handleBlur, - onClick: ( - event: MouseEvent, - ) => handleClick(event, onClick, target, navigate), + onClick: (event: MouseEvent) => handleClick(event, onClick, target, navigate), onFocus: handleFocus, ref, type: type || (as !== 'a' && !href ? 'button' : undefined), diff --git a/src/components/Card/Card.Codesandbox.stories.mdx b/src/components/Card/Card.Codesandbox.stories.mdx index 2662e50c2..a24972953 100644 --- a/src/components/Card/Card.Codesandbox.stories.mdx +++ b/src/components/Card/Card.Codesandbox.stories.mdx @@ -71,16 +71,22 @@ export default () => ( - + - - - diff --git a/src/components/Card/Card.Overview.stories.mdx b/src/components/Card/Card.Overview.stories.mdx index 2685a9bb6..c260c7ea1 100644 --- a/src/components/Card/Card.Overview.stories.mdx +++ b/src/components/Card/Card.Overview.stories.mdx @@ -84,14 +84,14 @@ It consists of three child components that are automatically included with the ` gap="md" > - - - diff --git a/src/components/Drawer/Drawer.Overview.stories.mdx b/src/components/Drawer/Drawer.Overview.stories.mdx index c3e17e343..d35d9ac28 100644 --- a/src/components/Drawer/Drawer.Overview.stories.mdx +++ b/src/components/Drawer/Drawer.Overview.stories.mdx @@ -33,7 +33,7 @@ A Drawer is a panel that slides in from one edge of the viewport and overlays co } = useOpenClose(); return ( <> - - - - {widths.map(width => ( drawer content @@ -431,7 +438,7 @@ By default the first focusable element will receive focus when the drawer opens, const ref = useRef(); return ( <> - drawer content - @@ -489,7 +501,7 @@ Render the Drawer within a containing div using `containerRef`. padding="lg" overflow="hidden" > - - = ({ ...args }) => { } = useOpenClose(); return ( <> - diff --git a/src/components/FileUpload/FileUpload.Overview.stories.mdx b/src/components/FileUpload/FileUpload.Overview.stories.mdx index ade344fcd..8ef0165ad 100644 --- a/src/components/FileUpload/FileUpload.Overview.stories.mdx +++ b/src/components/FileUpload/FileUpload.Overview.stories.mdx @@ -191,7 +191,7 @@ Leverage the same variants as the Button component to customize the look and fee return ( ); }} + - ## Sizes Set the size of the FileUpload button to `xs`, `sm`, `md` or `lg`. `md` is the default size. diff --git a/src/components/FileUpload/FileUpload.Playground.stories.tsx b/src/components/FileUpload/FileUpload.Playground.stories.tsx index 7991b01be..9f7c8d6d7 100644 --- a/src/components/FileUpload/FileUpload.Playground.stories.tsx +++ b/src/components/FileUpload/FileUpload.Playground.stories.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { Meta, Story } from '@storybook/react/types-6-0'; import { FileUpload, FileUploadProps } from './FileUpload'; import { ICON_NAMES } from '../../lib/tokens'; -import { BUTTON_SIZES } from '../Button/Button.constants'; +import { BUTTON_SIZES, BUTTON_TONE, BUTTON_VARIANTS } from '../Button/Button.constants'; export default { title: 'Components/FileUpload/Playground', @@ -55,8 +55,14 @@ export default { }, variant: { control: { - type: 'radio', - options: ['light', 'dark', 'primary', 'white'], + type: 'select', + options: BUTTON_VARIANTS, + }, + }, + tone: { + control: { + type: 'select', + options: BUTTON_TONE, }, }, size: { diff --git a/src/components/FileUpload/FileUpload.test.tsx b/src/components/FileUpload/FileUpload.test.tsx index d725e7af5..7719c4fbd 100644 --- a/src/components/FileUpload/FileUpload.test.tsx +++ b/src/components/FileUpload/FileUpload.test.tsx @@ -20,7 +20,7 @@ describe('FileUpload', () => { expect(fileInput).toBeInTheDocument(); expect(button).toBeInTheDocument(); - expect(button).toHaveClass('primary-neutral', 'size-md'); + expect(button).toHaveClass('primary', 'size-md'); expect(uploadIcon).toBeInTheDocument(); }); }); diff --git a/src/components/FileUpload/FileUpload.tsx b/src/components/FileUpload/FileUpload.tsx index a148b8044..e8aa51e46 100644 --- a/src/components/FileUpload/FileUpload.tsx +++ b/src/components/FileUpload/FileUpload.tsx @@ -5,7 +5,12 @@ import { Box, BoxProps } from '../Box/Box'; import { Icon } from '../Icon/Icon'; import { FormLabel } from '../FormLabel/FormLabel'; import { InputValidationMessage } from '../InputValidationMessage/InputValidationMessage'; -import { Button, ButtonSize, ButtonVariant } from '../Button/Button'; +import { + Button, + ButtonSize, + ButtonTone, + ButtonVariant, +} from '../Button/Button'; import styles from './FileUpload.module.scss'; import { IconName } from '../../types'; @@ -102,6 +107,10 @@ export interface FileUploadProps extends BoxProps { * Size of component. Matches Button sizes. */ size?: ButtonSize; + /** + * Indicate the intent of the action the button performs. + */ + tone?: ButtonTone; /** * Color and visual weight for the button. */ @@ -141,7 +150,8 @@ export const FileUpload: FC = React.forwardRef< onClearFiles = undefined, requiredIndicator = <> *, size = 'md', - variant = 'primary-neutral', + tone = 'neutral', + variant = 'primary', ...restProps }, ref, @@ -220,6 +230,7 @@ export const FileUpload: FC = React.forwardRef< onClick={handleClick} aria-controls={id} isDisabled={isDisabled} + tone={tone} variant={variant} size={size} fullWidth={fullWidth} @@ -288,7 +299,8 @@ export const FileUpload: FC = React.forwardRef< {renderFiles()} {files && onClearFiles && ( - - - - = ({ ...args }) => { } = useOpenClose(); return ( <> - { return (
- { return (
- { /> Modal content - diff --git a/src/components/Modal/Modal.Overview.stories.mdx b/src/components/Modal/Modal.Overview.stories.mdx index 65361a40c..59071bf6b 100644 --- a/src/components/Modal/Modal.Overview.stories.mdx +++ b/src/components/Modal/Modal.Overview.stories.mdx @@ -43,7 +43,7 @@ In order to hide or show the Modal, set the Modal's `isOpen` prop to `true` or ` } = useOpenClose(); return (
- Modal content - @@ -97,7 +97,7 @@ Use the `Modal.Body` and `Modal.Footer` to add body and footer content. These co } = useOpenClose(); return (
- - ` to render a minimal modal without a header. } = useOpenClose(); return (
- ` to render a minimal modal without a header. > Modal content - @@ -223,7 +223,7 @@ Use `fullScreenMobile` to enable fullscreen at mobile viewport widths. } = useOpenClose(); return (
- Modal content - @@ -272,7 +272,7 @@ maxWidth, use existing tokens only. } = useOpenClose(); return ( <> - ( null} /> Modal content - @@ -58,7 +58,7 @@ export const WithoutHeader = () => ( null}> Modal content - @@ -75,7 +75,7 @@ export const FullScreenOnMobile = () => ( /> Modal content - @@ -92,7 +92,7 @@ export const WithMaxWidth = () => ( /> Modal content - @@ -114,7 +114,7 @@ export const WithResponsiveMaxWidth = () => ( /> Modal content - diff --git a/src/components/Modal/Modal.stories.tsx b/src/components/Modal/Modal.stories.tsx index f799684d9..c6043c410 100644 --- a/src/components/Modal/Modal.stories.tsx +++ b/src/components/Modal/Modal.stories.tsx @@ -17,7 +17,11 @@ export const WithCustomPortalTarget: Story = () => { return (
- = ({ gap={isCompact ? 'xs' : 'sm'} > diff --git a/src/components/Popover/Popover.Overview.stories.mdx b/src/components/Popover/Popover.Overview.stories.mdx index 234481a04..87fae2e7a 100644 --- a/src/components/Popover/Popover.Overview.stories.mdx +++ b/src/components/Popover/Popover.Overview.stories.mdx @@ -49,7 +49,7 @@ of uses for a popover include: }} onClickOutside={closePopover} > - @@ -100,7 +100,7 @@ You can apply a custom class to your popover with the `className` prop. Here we className="font-color-danger" onClickOutside={closePopover} > - @@ -175,7 +175,7 @@ the entire gamut of styling options. radius: popoverRadius.value, }} > - @@ -290,7 +290,8 @@ prevent the content from getting cut off. > @@ -353,7 +354,7 @@ in order to render the element anywhere on the page. portalTarget={document.body} onClickOutside={closePopover} > - @@ -409,7 +410,8 @@ NOTE: this should be use sparingly since context dependent on hover, isn't an op @@ -468,7 +470,7 @@ in cases where the click target includes the Popover trigger or content nodes. background: 'primary-light', }} > - @@ -529,7 +531,7 @@ Use the `trapFocus` prop to constrain focus to popover content elements. onClickOutside={closePopover} trapFocus > - @@ -575,7 +577,7 @@ Render the popover with no arrow by passing `hasArrow` false. }} onClickOutside={closePopover} > - @@ -627,7 +629,7 @@ Place the popover closer or farther from its trigger with the `offsetFromTarget` hasArrow={false} offsetFromTarget={offset} > - diff --git a/src/components/Popover/Popover.VisualTests.stories.tsx b/src/components/Popover/Popover.VisualTests.stories.tsx index 55de54abd..660b96238 100644 --- a/src/components/Popover/Popover.VisualTests.stories.tsx +++ b/src/components/Popover/Popover.VisualTests.stories.tsx @@ -136,7 +136,12 @@ export const Demo: Story = () => { withPortal portalTarget={document.body} > - @@ -160,7 +165,7 @@ export const Default: Story = () => { padding: 'sm', }} > - @@ -228,7 +233,8 @@ export const Placement: Story = () => { > @@ -270,7 +276,7 @@ export const HideArrow: Story = () => { onClickOutside={closePopover} hasArrow={false} > - @@ -306,7 +312,7 @@ export const Offset: Story = () => { hasArrow={false} offsetFromTarget={20} > - diff --git a/src/components/Table/Table.Overview.stories.mdx b/src/components/Table/Table.Overview.stories.mdx index a617864e4..e37359814 100644 --- a/src/components/Table/Table.Overview.stories.mdx +++ b/src/components/Table/Table.Overview.stories.mdx @@ -794,7 +794,7 @@ See `Based on cell/row` example below. { heading: 'ID', dataKey: 'id' }, { heading: 'Color', dataKey: 'color' }, { heading: 'Based on the cell/row', dataKey: 'flavor', render: renderFlavor }, - { heading: 'Any custom JSX', render: () => }, + { heading: 'Any custom JSX', render: () => }, ]; const tableData = [ { id: 1, color: 'red', flavor: { name: 'vanilla', href: 'www.vanilla.com' } }, diff --git a/src/components/Toast/Toast.Overview.stories.mdx b/src/components/Toast/Toast.Overview.stories.mdx index d9d1913f9..cf0bc214e 100644 --- a/src/components/Toast/Toast.Overview.stories.mdx +++ b/src/components/Toast/Toast.Overview.stories.mdx @@ -75,7 +75,9 @@ Keep the contents of a toast as short as possible by placing only the most impor const handleClick = () => toast('Proposal saved', { duration: 5000 }); return ( <> - + ); }} @@ -204,18 +206,22 @@ toast('my toast', { duration: 3000, position: 'top-center' }); return ( <> - - + - - + - - @@ -244,7 +250,7 @@ We've included sensible defaults for the duration of a toast before it disappear return ( <> - @@ -275,7 +281,9 @@ without the user being able to clear it, you can use `canDismiss: false`. return ( <> - + ); @@ -310,11 +318,12 @@ For these cases, you can use `toast.dismiss`. return ( <> - - - + ); }} @@ -372,16 +379,18 @@ To give toasts an additional visual indication of feedback, `success`, `loading` Basic Types - - - + @@ -427,7 +436,11 @@ To give toasts an additional visual indication of feedback, `success`, `loading` handle displaying different toast variations based on the state of the passed promise.

- @@ -437,7 +450,7 @@ To give toasts an additional visual indication of feedback, `success`, `loading` promise you can pass a function to the toasts in question, see code example.

- diff --git a/src/docs/Theming.stories.mdx b/src/docs/Theming.stories.mdx index d0a5c6234..6497384c3 100644 --- a/src/docs/Theming.stories.mdx +++ b/src/docs/Theming.stories.mdx @@ -166,18 +166,25 @@ Here is an example where all three token types are used to create a customized a '0 0 0 4px var(--color-brand-primary-200)', '--button-font-family': 'Consolas,monaco,monospace', '--button-primary-background-color': 'var(--color-brand-primary-500)', - '--button-primary-background-color-hover': 'var(--color-brand-primary-600)', - '--button-primary-background-color-active': 'var(--color-brand-primary-700)', + '--button-primary-background-color-hover': + 'var(--color-brand-primary-600)', + '--button-primary-background-color-active': + 'var(--color-brand-primary-700)', '--button-secondary-background-color': 'var(--color-brand-white-base)', - '--button-secondary-background-color-hover': 'var(--color-brand-primary-50)', - '--button-secondary-background-color-active': 'var(--color-brand-primary-100)', + '--button-secondary-background-color-hover': + 'var(--color-brand-primary-50)', + '--button-secondary-background-color-active': + 'var(--color-brand-primary-100)', '--button-secondary-border-color': 'var(--color-brand-grey-200)', - '--button-secondary-border-color-hover': 'var(--color-brand-primary-100)', + '--button-secondary-border-color-hover': + 'var(--color-brand-primary-100)', '--button-secondary-font-color': 'var(--color-brand-primary-500)', '--button-secondary-font-color-hover': 'var(--color-brand-primary-500)', - '--button-tertiary-background-color': 'transparent', - '--button-tertiary-background-color-hover': 'var(--color-brand-primary-50)', - '--button-tertiary-background-color-active': 'var(--color-brand-primary-100)', + '--button-tertiary-background-color': 'transparent', + '--button-tertiary-background-color-hover': + 'var(--color-brand-primary-50)', + '--button-tertiary-background-color-active': + 'var(--color-brand-primary-100)', '--button-tertiary-font-color': 'var(--color-brand-primary-500)', '--button-tertiary-font-color-hover': 'var(--color-brand-primary-500)', }; @@ -246,12 +253,24 @@ Here is an example where all three token types are used to create a customized a - - - - - - + + + + + + diff --git a/src/hooks/useOpenClose/useOpenClose.Overview.stories.mdx b/src/hooks/useOpenClose/useOpenClose.Overview.stories.mdx index 9aba364a4..04ea335bc 100644 --- a/src/hooks/useOpenClose/useOpenClose.Overview.stories.mdx +++ b/src/hooks/useOpenClose/useOpenClose.Overview.stories.mdx @@ -29,7 +29,12 @@ The `useOpenClose` hook helps handle common open, close, or toggle scenarios. It }); return (
- Date: Fri, 9 Feb 2024 20:07:54 +0000 Subject: [PATCH 07/40] chore(release): 1.0.0-beta.3 [skip ci] # [1.0.0-beta.3](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.2...v1.0.0-beta.3) (2024-02-09) ### Features * **Button:** tone prop ([#867](https://github.com/palmetto/palmetto-components/issues/867)) ([918eeea](https://github.com/palmetto/palmetto-components/commit/918eeeab347d9e7f13a54b41ad027dfc40d79605)) --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 66cc5ae99..5e33d03ec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ Changelog +# [1.0.0-beta.3](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.2...v1.0.0-beta.3) (2024-02-09) + + +### Features + +* **Button:** tone prop ([#867](https://github.com/palmetto/palmetto-components/issues/867)) ([918eeea](https://github.com/palmetto/palmetto-components/commit/918eeeab347d9e7f13a54b41ad027dfc40d79605)) + # [1.0.0-beta.2](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.1...v1.0.0-beta.2) (2024-02-02) From 96c93c9890e31a01705bca797a8cd3c3f6ecf916 Mon Sep 17 00:00:00 2001 From: Nathan Young <1447339+nathanyoung@users.noreply.github.com> Date: Tue, 13 Feb 2024 09:44:14 -0800 Subject: [PATCH 08/40] fix(Button): loading state icon color (#868) * fix(Button): loading state icon color * Update MediaModal.VisualTests.stories.tsx --- src/components/Button/Button.VisualTests.stories.tsx | 2 +- src/components/Button/Button.tsx | 8 ++++++++ .../MediaModal/MediaModal.VisualTests.stories.tsx | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/components/Button/Button.VisualTests.stories.tsx b/src/components/Button/Button.VisualTests.stories.tsx index c6c8c3b80..20451baa5 100644 --- a/src/components/Button/Button.VisualTests.stories.tsx +++ b/src/components/Button/Button.VisualTests.stories.tsx @@ -36,7 +36,7 @@ const Template: Story = ( iconPrefix="add" iconSuffix="property-agreement" variant={variant} - tone="neutral" + tone={tone} key={`${variant}-icon`} > {`${variant} ${tone} icon`} diff --git a/src/components/Button/Button.tsx b/src/components/Button/Button.tsx index 38b69d5f5..b9a502dcb 100644 --- a/src/components/Button/Button.tsx +++ b/src/components/Button/Button.tsx @@ -185,6 +185,14 @@ export const Button = forwardRef< }; const getSpinnerVariant = () => { + if (tone === 'primary' && (variant === 'secondary' || variant === 'tertiary')) { + return 'primary'; + } + + if (tone === 'danger' && (variant === 'secondary' || variant === 'tertiary')) { + return 'danger'; + } + if (variant === 'primary' && (tone === 'primary' || tone === 'danger')) { return 'white'; } diff --git a/src/components/MediaModal/MediaModal.VisualTests.stories.tsx b/src/components/MediaModal/MediaModal.VisualTests.stories.tsx index 7ead0dcfc..ba7eecd35 100644 --- a/src/components/MediaModal/MediaModal.VisualTests.stories.tsx +++ b/src/components/MediaModal/MediaModal.VisualTests.stories.tsx @@ -79,7 +79,7 @@ VimeoVideo.args = { ariaLabel: 'test MediaModal', isOpen: true, children: ( - + ), From afbc23682a6779cb3beaad0b2f13d9a6069989e7 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Tue, 13 Feb 2024 17:46:46 +0000 Subject: [PATCH 09/40] chore(release): 1.0.0-beta.4 [skip ci] # [1.0.0-beta.4](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.3...v1.0.0-beta.4) (2024-02-13) ### Bug Fixes * **Button:** loading state icon color ([#868](https://github.com/palmetto/palmetto-components/issues/868)) ([96c93c9](https://github.com/palmetto/palmetto-components/commit/96c93c9890e31a01705bca797a8cd3c3f6ecf916)) --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5e33d03ec..2441d8f60 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ Changelog +# [1.0.0-beta.4](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.3...v1.0.0-beta.4) (2024-02-13) + + +### Bug Fixes + +* **Button:** loading state icon color ([#868](https://github.com/palmetto/palmetto-components/issues/868)) ([96c93c9](https://github.com/palmetto/palmetto-components/commit/96c93c9890e31a01705bca797a8cd3c3f6ecf916)) + # [1.0.0-beta.3](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.2...v1.0.0-beta.3) (2024-02-09) From 45223d0de0bfd05002944d36bb3dedabca23b022 Mon Sep 17 00:00:00 2001 From: Nathan Young <1447339+nathanyoung@users.noreply.github.com> Date: Tue, 13 Feb 2024 12:52:38 -0800 Subject: [PATCH 10/40] docs(Button): tone documentation (#869) * Update Button.Overview.stories.mdx * Update Button.Overview.stories.mdx --- src/components/Button/Button.Overview.stories.mdx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/Button/Button.Overview.stories.mdx b/src/components/Button/Button.Overview.stories.mdx index 99cfef4b1..1c1edfd49 100644 --- a/src/components/Button/Button.Overview.stories.mdx +++ b/src/components/Button/Button.Overview.stories.mdx @@ -31,13 +31,13 @@ Actions almost always occur on the same page. -## Variants +## Variants & Tone -The `variant` prop determines which color visual weight to render. +The `variant` prop determines the visual weight, while `tone` indicates the intent of the action the button performs. Date: Tue, 13 Feb 2024 20:55:12 +0000 Subject: [PATCH 11/40] chore(release): 1.0.0-beta.5 [skip ci] # [1.0.0-beta.5](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.4...v1.0.0-beta.5) (2024-02-13) --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2441d8f60..8ca5f4b8b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ Changelog +# [1.0.0-beta.5](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.4...v1.0.0-beta.5) (2024-02-13) + # [1.0.0-beta.4](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.3...v1.0.0-beta.4) (2024-02-13) From a78ba2ee4b938bd7d51e1f8b208d062ea99be39f Mon Sep 17 00:00:00 2001 From: Nathan Young <1447339+nathanyoung@users.noreply.github.com> Date: Tue, 13 Feb 2024 15:31:25 -0800 Subject: [PATCH 12/40] fix(FormControls): specify width 100 instead of relying on flex auto (#870) --- src/components/FormControl/FormControl.tsx | 3 +- src/stories/FormControls.stories.mdx | 55 ++++++++++++++++++++++ 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/src/components/FormControl/FormControl.tsx b/src/components/FormControl/FormControl.tsx index 4504ee725..0fd1f9abe 100644 --- a/src/components/FormControl/FormControl.tsx +++ b/src/components/FormControl/FormControl.tsx @@ -50,6 +50,7 @@ export const FormControl = React.forwardRef(( helpText, isDisabled, requiredIndicator, + width = '100%', ...restProps }, ref, @@ -64,7 +65,7 @@ export const FormControl = React.forwardRef(( }; return ( - + {label && !hideLabel && {label}} {children} {error && error !== true && {error}} diff --git a/src/stories/FormControls.stories.mdx b/src/stories/FormControls.stories.mdx index 45e4c9435..fcd8b6d61 100644 --- a/src/stories/FormControls.stories.mdx +++ b/src/stories/FormControls.stories.mdx @@ -685,3 +685,58 @@ Inline form sizes with labels and error states. }} + + + + {() => { + const [value, setValue] = useState(''); + const [value1, setValue1] = useState(''); + const [value2, setValue2] = useState(''); + const [value3, setValue3] = useState(''); + const options = [ + { + value: 'chocolate', + label: 'Chocolate', + }, + { + value: 'strawberry', + label: 'Strawberry', + }, + { + value: 'vanilla', + label: 'Vanilla', + }, + ]; + return ( + + setValue(event.target.value)} + /> + setValue1(event.target.value)} + options={options} + value={value1} + /> + setValue2(event.target.value)} + options={options} + value={value2} + /> + setValue3(event.target.value)} + /> + + ); + }} + + From 20c3fbbcdfd35f732a8fe2b1dcc65c1b74c42a53 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Tue, 13 Feb 2024 23:33:54 +0000 Subject: [PATCH 13/40] chore(release): 1.0.0-beta.6 [skip ci] # [1.0.0-beta.6](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.5...v1.0.0-beta.6) (2024-02-13) ### Bug Fixes * **FormControls:** specify width 100 instead of relying on flex auto ([#870](https://github.com/palmetto/palmetto-components/issues/870)) ([a78ba2e](https://github.com/palmetto/palmetto-components/commit/a78ba2ee4b938bd7d51e1f8b208d062ea99be39f)) --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8ca5f4b8b..43d747d43 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ Changelog +# [1.0.0-beta.6](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.5...v1.0.0-beta.6) (2024-02-13) + + +### Bug Fixes + +* **FormControls:** specify width 100 instead of relying on flex auto ([#870](https://github.com/palmetto/palmetto-components/issues/870)) ([a78ba2e](https://github.com/palmetto/palmetto-components/commit/a78ba2ee4b938bd7d51e1f8b208d062ea99be39f)) + # [1.0.0-beta.5](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.4...v1.0.0-beta.5) (2024-02-13) # [1.0.0-beta.4](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.3...v1.0.0-beta.4) (2024-02-13) From a19211b558e9fb9652820b35c272c302dfee0254 Mon Sep 17 00:00:00 2001 From: Nathan Young <1447339+nathanyoung@users.noreply.github.com> Date: Thu, 29 Feb 2024 15:42:18 -0800 Subject: [PATCH 14/40] feat(TextInputFloating): new component (#874) * wip * wip * lint * Create TextInputFloating.test.tsx * style lint * update prefix and suffix styles * div wrapper * safari workaround * Update FormControls.stories.mdx * Update FormTheming.stories.mdx * Create TextInputFloating.Playground.stories.tsx * visual tests --- .../TextInputFloating.Overview.stories.mdx | 295 ++++++++++++ .../TextInputFloating.Playground.stories.tsx | 88 ++++ .../TextInputFloating.VisualTest.stories.tsx | 140 ++++++ .../TextInputFloating.module.scss | 440 ++++++++++++++++++ .../TextInputFloating.test.tsx | 242 ++++++++++ .../TextInputFloating/TextInputFloating.tsx | 269 +++++++++++ src/components/index.ts | 1 + src/docs/FormTheming.stories.mdx | 21 +- src/stories/FormControls.stories.mdx | 280 ++++++++--- 9 files changed, 1700 insertions(+), 76 deletions(-) create mode 100644 src/components/TextInputFloating/TextInputFloating.Overview.stories.mdx create mode 100644 src/components/TextInputFloating/TextInputFloating.Playground.stories.tsx create mode 100644 src/components/TextInputFloating/TextInputFloating.VisualTest.stories.tsx create mode 100644 src/components/TextInputFloating/TextInputFloating.module.scss create mode 100644 src/components/TextInputFloating/TextInputFloating.test.tsx create mode 100644 src/components/TextInputFloating/TextInputFloating.tsx diff --git a/src/components/TextInputFloating/TextInputFloating.Overview.stories.mdx b/src/components/TextInputFloating/TextInputFloating.Overview.stories.mdx new file mode 100644 index 000000000..f80d60ce1 --- /dev/null +++ b/src/components/TextInputFloating/TextInputFloating.Overview.stories.mdx @@ -0,0 +1,295 @@ +import { useState } from 'react'; +import { action } from '@storybook/addon-actions'; +import { Meta, Story, Canvas, ArgsTable } from '@storybook/addon-docs'; +import { TextInputFloating } from './TextInputFloating'; +import { Box } from '../Box/Box'; +import { Icon } from '../Icon/Icon'; + + + +# TextInputFloating + +Use `TextInputFloating` to create a floating label input field. It is a controlled component, which means that you need to provide a value and an `onChange` handler to update the value. + + + + {() => { + const [value, setValue] = useState(''); + const [valuePw, setValuePw] = useState(''); + return ( + + setValue(event.target.value)} + /> + setValuePw(event.target.value)} + helpText="Password must be at least 8 characters long" + /> + + ); + }} + + + +## Props + + + +### Required + +Use the `isRequired` prop to set the `required` and `aria-required` on the underlying input element. + + + + {() => { + const [value, setValue] = useState(''); + return ( + setValue(event.target.value)} + isRequired + /> + ); + }} + + + +Customize the required indicator with the `requiredIndicator` prop. + + + + {() => { + const [value, setValue] = useState(''); + return ( + setValue(event.target.value)} + isRequired + requiredIndicator=" (required)" + /> + ); + }} + + + +### Help Text + +Use `helpText` to provide additional information about the input field. + + + + {() => { + const [value, setValue] = useState(''); + return ( + setValue(event.target.value)} + helpText="Must be from the approved vendor list" + /> + ); + }} + + + +### Validation Error + +Use the `error` prop to mark the input as invalid. `error` accepts a `boolean`, `string`, or `node`. + + + + {() => { + const [value, setValue] = useState(''); + const [value2, setValue2] = useState('Invalid Value'); + return ( + + setValue(event.target.value)} + isRequired + /> + setValue2(event.target.value)} + /> + + ); + }} + + + +### Disabled + +Add `isDisabled`to give it a grayed out appearance, remove pointer events, and prevent focusing. + + + + {() => { + const [value, setValue] = useState(''); + const [value2, setValue2] = useState('Value'); + return ( + + setValue(event.target.value)} + isDisabled + /> + setValue2(event.target.value)} + isDisabled + /> + + ); + }} + + + +### Clearable + +Use the `onClear` prop to display a clear icon (x) when the input has a value. `onClear` will fire +a callback function when the clear icon is clicked, which can then be handled to clear the value. + + + + {() => { + const [value, setValue] = useState('clear me'); + return ( + setValue(event.target.value)} + onClear={event => setValue('')} + isRequired + /> + ); + }} + + + +### Prefix and Suffix + +All that is required to render a basic version of the TextInput is a unique `id`, `label`, `value`, and an onchange event handler passed to the `onChange` prop. + + + + {() => { + const [prefixValue0, setPrefixValue0] = useState(''); + const [prefixValue1, setPrefixValue1] = useState('palmettosolar'); + const [prefixValue2, setPrefixValue2] = useState('2.51'); + const [prefixValue3, setPrefixValue3] = useState(''); + const [prefixValue4, setPrefixValue4] = useState('Pre-populated Value'); + return ( + + setPrefixValue0(event.target.value)} + prefix="https://" + placeholder="Enter your website address" + /> + setPrefixValue1(event.target.value)} + prefix="@" + /> + setPrefixValue2(event.target.value)} + prefix="$" + suffix="/watt" + /> + setPrefixValue3(event.target.value)} + suffix={} + /> + setPrefixValue4(event.target.value)} + onClear={event => setPrefixValue4('')} + suffix={} + /> + + ); + }} + + + +### Sizes + +There are only two sizes for TextInputFloating, `md` and `lg`, with `md` being the default. + + + + {() => { + const [value1, setValue1] = useState(''); + const [value2, setValue2] = useState(''); + return ( + + setValue1(event.target.value)} + /> + setValue2(event.target.value)} + /> + + ); + }} + + + +## Component Design Tokens + +This component shares component design tokens with all form controls. For a complete list of tokens, see the [Theming Form Controls documentation](/docs/theming-form-controls--custom-theme-form). diff --git a/src/components/TextInputFloating/TextInputFloating.Playground.stories.tsx b/src/components/TextInputFloating/TextInputFloating.Playground.stories.tsx new file mode 100644 index 000000000..c24ea0a22 --- /dev/null +++ b/src/components/TextInputFloating/TextInputFloating.Playground.stories.tsx @@ -0,0 +1,88 @@ +import React from 'react'; +import { Meta, Story } from '@storybook/react/types-6-0'; +import { TextInputFloating, TextInputFloatingProps } from './TextInputFloating'; + +export default { + title: 'Components/TextInputFloating/Playground', + component: TextInputFloating, + argTypes: { + autoComplete: { + control: 'boolean', + }, + id: { + control: 'text', + }, + label: { + control: 'text', + }, + name: { + control: 'text', + }, + value: { + control: 'text', + }, + autoFocus: { + control: 'boolean', + }, + error: { + control: 'text', + }, + helpText: { + control: 'text', + }, + hideLabel: { + control: 'boolean', + }, + isClearable: { + control: 'boolean', + }, + isDisabled: { + control: 'boolean', + }, + isRequired: { + control: 'boolean', + }, + className: { + control: 'text', + }, + placeholder: { + control: 'text', + }, + prefix: { + control: 'text', + }, + suffix: { + control: 'text', + }, + maxLength: { + control: 'number', + }, + size: { + control: { + type: 'radio', + options: ['md', 'lg'], + }, + }, + requiredIndicator: { + control: 'text', + }, + type: { + control: { + type: 'select', + options: ['text', 'password', 'email', 'tel', 'url', 'search'], + }, + }, + }, +} as Meta; + +const Template: Story = ({ ...args }) => ( + +); + +export const Playground = Template.bind({}); +Playground.args = { + id: 'playgroundTextInputFloating ', + label: 'Playground TextInputFloating ', + helpText: 'Helpful text', + name: 'playgroundTextInputFloating ', +}; diff --git a/src/components/TextInputFloating/TextInputFloating.VisualTest.stories.tsx b/src/components/TextInputFloating/TextInputFloating.VisualTest.stories.tsx new file mode 100644 index 000000000..96c4af67a --- /dev/null +++ b/src/components/TextInputFloating/TextInputFloating.VisualTest.stories.tsx @@ -0,0 +1,140 @@ +import React, { ReactElement, useState } from 'react'; +import { Meta, Story } from '@storybook/react/types-6-0'; +import { within } from '@storybook/testing-library'; +import { TextInputFloating, TextInputFloatingProps } from './TextInputFloating'; +import { Icon } from '../Icon/Icon'; +import { Box } from '../Box/Box'; +import { RESPONSIVE_STORY } from '../../docs/constants'; + +export default { + title: 'Components/TextInputFloating/Visual Regression Tests', + component: TextInputFloating, +} as Meta; + +const Template: Story = args => ( + {}} // eslint-disable-line + /> +); + +export const DefaultFocus = Template.bind({}); + +DefaultFocus.args = { + label: 'Default Focus', +}; + +DefaultFocus.play = async ({ canvasElement }) => { + const canvas = within(canvasElement); + canvas.getByLabelText('Default Focus').focus(); +}; + +export const ErrorFocus = Template.bind({}); + +ErrorFocus.args = { + label: 'Error Focus', + error: 'validation message', +}; + +ErrorFocus.play = async ({ canvasElement }) => { + const canvas = within(canvasElement); + canvas.getByLabelText('Error Focus').focus(); +}; + +export const ResponsiveSize = Template.bind({}); +ResponsiveSize.args = { + size: { + base: 'md', + tablet: 'lg', + desktop: 'md', + hd: 'lg', + }, + label: 'label', + value: 'responsive', + suffix: '00', + prefix: '$', +}; +ResponsiveSize.parameters = RESPONSIVE_STORY; + +export const PrefixSuffixSizes: React.FC = (): ReactElement => { + const [prefixValue, setPrefixValue] = useState('palmettosolar'); + const [prefixValue2, setPrefixValue2] = useState(''); + const [prefixValue3, setPrefixValue3] = useState(''); + const [prefixValue4, setPrefixValue4] = useState('Pre-populated Value'); + return ( + + + ) => setPrefixValue(event.target.value)} + prefix="@" + /> + ) => setPrefixValue2(event.target.value)} + prefix="$" + suffix=".99" + /> + ) => setPrefixValue3(event.target.value)} + suffix={} + /> + ) => setPrefixValue4(event.target.value)} + onClear={() => setPrefixValue4('')} + suffix={} + /> + + + ) => setPrefixValue(event.target.value)} + prefix="@" + size="lg" + /> + ) => setPrefixValue2(event.target.value)} + prefix="$" + suffix=".99" + size="lg" + /> + ) => setPrefixValue3(event.target.value)} + suffix={} + size="lg" + /> + ) => setPrefixValue4(event.target.value)} + onClear={() => setPrefixValue4('')} + suffix={} + size="lg" + /> + + + ); +}; diff --git a/src/components/TextInputFloating/TextInputFloating.module.scss b/src/components/TextInputFloating/TextInputFloating.module.scss new file mode 100644 index 000000000..9f9a5d5c8 --- /dev/null +++ b/src/components/TextInputFloating/TextInputFloating.module.scss @@ -0,0 +1,440 @@ +@import '~@palmetto/palmetto-design-tokens/build/scss/variables-size'; + +@mixin floating-label-minimize-md { + opacity: 0.75; + transform: scale(0.6875) translateY(-0.3rem) translateX(0.15rem); +} + +@mixin floating-label-minimize-lg { + opacity: 0.75; + transform: scale(0.75) translateY(-0.3rem) translateX(0.15rem); +} + +@mixin size-md { + border-radius: var( + --form-control-size-md-border-radius, + var(--INTERNAL_form-control-size-md-border-radius) + ); + font-size: var( + --form-control-size-sm-font-size, + var(--INTERNAL_form-control-size-sm-font-size) + ); + + .text-input-label { + padding: var( + --form-control-size-md-padding, + var(--INTERNAL_form-control-size-md-padding) + ); + } + + input { + padding: calc( + var( + --form-control-size-lg-padding, + var(--INTERNAL_form-control-size-lg-padding) + ) + 3px + ) + var( + --form-control-size-md-padding, + var(--INTERNAL_form-control-size-md-padding) + ) + calc( + var( + --form-control-size-md-padding, + var(--INTERNAL_form-control-size-md-padding) + ) - 5px + ) + var( + --form-control-size-md-padding, + var(--INTERNAL_form-control-size-md-padding) + ); + border-radius: var( + --form-control-size-md-border-radius, + var(--INTERNAL_form-control-size-md-border-radius) + ); + + &:focus { + + .text-input-label { + @include floating-label-minimize-md; + } + } + + &:not(:placeholder-shown) ~ label { + @include floating-label-minimize-md; + } + } + + .prefix { + padding: var( + --form-control-size-lg-padding, + var(--INTERNAL_form-control-size-md-padding) + ); + } + + .suffix { + padding: var( + --form-control-size-md-padding, + var(--INTERNAL_form-control-size-md-padding) + ); + } + + .clear-button { + padding: var( + --form-control-size-md-padding, + var(--INTERNAL_form-control-size-md-padding) + ); + } +} + +%size-md { + @include size-md; +} + +.size-md { + @extend %size-md; +} + +@mixin size-lg { + border-radius: var( + --form-control-size-lg-border-radius, + var(--INTERNAL_form-control-size-lg-border-radius) + ); + font-size: var( + --form-control-size-md-font-size, + var(--INTERNAL_form-control-size-md-font-size) + ); + + .text-input-label { + padding: var( + --form-control-size-lg-padding, + var(--INTERNAL_form-control-size-lg-padding) + ); + } + + input { + padding: calc( + var( + --form-control-size-lg-padding, + var(--INTERNAL_form-control-size-lg-padding) + ) + 10px + ) + var( + --form-control-size-lg-padding, + var(--INTERNAL_form-control-size-lg-padding) + ) + calc( + var( + --form-control-size-lg-padding, + var(--INTERNAL_form-control-size-lg-padding) + ) - 5px + ) + var( + --form-control-size-lg-padding, + var(--INTERNAL_form-control-size-lg-padding) + ); + border-radius: var( + --form-control-size-lg-border-radius, + var(--INTERNAL_form-control-size-lg-border-radius) + ); + + &:focus { + + .text-input-label { + @include floating-label-minimize-lg; + } + } + + &:not(:placeholder-shown) ~ label { + @include floating-label-minimize-lg; + } + } + + .prefix { + padding: var( + --form-control-size-lg-padding, + var(--INTERNAL_form-control-size-lg-padding) + ); + } + + .suffix { + padding: var( + --form-control-size-lg-padding, + var(--INTERNAL_form-control-size-lg-padding) + ); + } + + .clear-button { + padding: var( + --form-control-size-lg-padding, + var(--INTERNAL_form-control-size-lg-padding) + ) + var( + --form-control-size-lg-padding, + var(--INTERNAL_form-control-size-lg-padding) + ) + var( + --form-control-size-lg-padding, + var(--INTERNAL_form-control-size-lg-padding) + ) + 0; + } +} + +%size-lg { + @include size-lg; +} + +.size-lg { + @extend %size-lg; +} + +// https://stackoverflow.com/questions/262158/disabled-input-text-color-on-ios +%disabled-base { + background-color: var( + --form-control-background-color-disabled, + var(--INTERNAL_form-control-background-color-disabled) + ); + color: var( + --form-control-font-color-disabled, + var(--INTERNAL_form-control-font-color-disabled) + ); + -webkit-text-fill-color: var( + --form-control-font-color-disabled, + var(--INTERNAL_form-control-font-color-disabled) + ); + opacity: 1; + + &:hover { + cursor: not-allowed; + } +} + +.text-input-label { + position: absolute; + top: 0; + font-size: 1rem; + transform-origin: 0 0; + transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out; + font-weight: --form-control-label-font-weight, + var(--INTERNAL_form-control-label-font-weigh); + color: --form-control-label-font-color, + var(--INTERNAL_form-control-label-font-color); + cursor: text; + white-space: nowrap; +} + +.prefix { + border: 1px solid + var(--form-control-border-color, var(--INTERNAL_form-control-border-color)); + background-color: var(--color-brand-grey-50); + border-top-left-radius: var( + --form-control-size-md-border-radius, + var(--INTERNAL_form-control-size-md-border-radius) + ); + border-bottom-left-radius: var( + --form-control-size-md-border-radius, + var(--INTERNAL_form-control-size-md-border-radius) + ); +} + +.suffix { + border: 1px solid + var(--form-control-border-color, var(--INTERNAL_form-control-border-color)); + background-color: var(--color-brand-grey-50); + border-top-right-radius: var( + --form-control-size-md-border-radius, + var(--INTERNAL_form-control-size-md-border-radius) + ); + border-bottom-right-radius: var( + --form-control-size-md-border-radius, + var(--INTERNAL_form-control-size-md-border-radius) + ); +} + +.text-input-wrapper { + font-family: var( + --form-control-font-family, + var(--INTERNAL_form-control-font-family) + ); + position: relative; + box-shadow: var( + --form-control-box-shadow, + var(--INTERNAL_form-control-box-shadow) + ), + inset 0 0 0 1px + var( + --form-control-border-color, + var(--INTERNAL_form-control-border-color) + ); + background-color: var( + --form-control-background-color, + var(--INTERNAL_form-control-background-color) + ); + + &.size-md { + .label-input-wrapper { + @extend %size-md; + } + } + + &.size-lg { + .label-input-wrapper { + @extend %size-lg; + } + } + + @media (min-width: $size-breakpoint-tablet) { + &.size-md-tablet { + @include size-md; + } + + &.size-lg-tablet { + @include size-lg; + } + } + + @media (min-width: $size-breakpoint-desktop) { + &.size-md-desktop { + @include size-md; + } + + &.size-lg-desktop { + @include size-lg; + } + } + + @media (min-width: $size-breakpoint-hd) { + &.size-md-hd { + @include size-md; + } + + &.size-lg-hd { + @include size-lg; + } + } + + // border and background is set on the text-input-wrapper + input { + box-sizing: border-box; + display: flex; + transition-duration: 300ms; + transition-property: border, background-color; + transition-timing-function: cubic-bezier(0.2, 0.8, 0.4, 1); + border: none; + background-color: transparent; + width: 100%; + line-height: var( + --form-control-line-height, + var(--INTERNAL_form-control-line-height) + ); + color: var( + --form-control-font-color, + var(--INTERNAL_form-control-font-color) + ); + + &::placeholder { + color: transparent; + } + + &:focus { + outline: none; + border-color: var( + --form-control-border-color-focus, + var(--INTERNAL_form-control-border-color-focus) + ); + } + + &:disabled { + @extend %disabled-base; + + background-color: transparent; + + + .text-input-label { + cursor: not-allowed; + } + } + } + + &.error { + box-shadow: var( + --form-control-box-shadow, + var(--INTERNAL_form-control-box-shadow) + ), + inset 0 0 0 1px + var( + --form-control-border-color-error, + var(--INTERNAL_form-control-border-color-error) + ); + background-color: var( + --form-control-background-color-error, + var(--INTERNAL_form-control-background-color-error) + ); + + &:focus-within { + background-color: var( + --form-control-background-color, + var(--INTERNAL_form-control-background-color) + ); + } + + input:focus { + outline: none; + background-color: transparent; + } + } + + //Necessary so that inset shadow that we use for border does not get covered by child elements. + &:not(.error) { + > * { + &:focus, + &.disabled { + &:not(input) { + box-shadow: inset 0 1px 0 0 + var( + --form-control-box-shadow-focus, + var(--INTERNAL_form-control-box-shadow-focus) + ), + inset 0 -1px 0 0 var(--form-control-border-color-focus, var(--INTERNAL_form-control-border-color-focus)); + } + } + } + } + + &:focus-within { + outline: none; + box-shadow: var( + --form-control-box-shadow-focus, + var(--INTERNAL_form-control-box-shadow-focus) + ), + inset 0 0 0 1px + var( + --form-control-border-color-focus, + var(--INTERNAL_form-control-border-color-focus) + ); + } + + &.disabled { + @extend %disabled-base; + } + + // Reset default button styles + .clear-button { + transition-duration: 0.2s; + transition-property: color; + border: 0; + border-radius: 0; + background: none; + cursor: pointer; + color: var( + --form-control-icon-color, + var(--INTERNAL_form-control-icon-color) + ); + font-style: inherit; + + &:hover { + color: var( + --form-control-icon-hover-color, + var(--INTERNAL_form-control-icon-hover-color) + ); + } + } +} diff --git a/src/components/TextInputFloating/TextInputFloating.test.tsx b/src/components/TextInputFloating/TextInputFloating.test.tsx new file mode 100644 index 000000000..4986299c8 --- /dev/null +++ b/src/components/TextInputFloating/TextInputFloating.test.tsx @@ -0,0 +1,242 @@ +import React from 'react'; +import { render, fireEvent, screen } from '@testing-library/react'; +import { TextInputFloating } from './TextInputFloating'; + +const baseProps = { + name: 'firstName', + id: 'firstName', + label: 'first name', + value: 'hello', + onChange: () => null, + onClear: undefined, +}; + +describe('TextInput', () => { + describe('Callback Handling', () => { + describe('onChange', () => { + test('onChange event fires callback function', () => { + const mockedHandleChange = jest.fn(() => null); + + render( + , + ); + const inputElement = screen.getByDisplayValue(baseProps.value); + + fireEvent.change(inputElement, { target: { value: 'good bye' } }); + expect(mockedHandleChange).toHaveBeenCalledTimes(1); + }); + + test('Input value is updated properly when upper state changes', () => { + let value = 'hello'; + const mockedHandleChange = jest.fn(event => { + value = event.target.value; + }); + const { rerender } = render( + , + ); + + const inputElement = screen.getByDisplayValue( + 'hello', + ) as HTMLInputElement; + expect(inputElement.value).toBe('hello'); + + fireEvent.change(inputElement, { target: { value: 'good bye' } }); + expect(mockedHandleChange).toHaveBeenCalledTimes(1); + + rerender( + , + ); + expect(inputElement.value).toBe('good bye'); + }); + }); + + describe('onClear', () => { + test('onClear prop renders clear icon when input has value', () => { + render( null} />); + const clearButton = screen.getByTestId('text-input-clear-button'); + expect(clearButton).toBeInTheDocument(); + }); + + test('onClear event fires callback function', () => { + const mockedHandleClear = jest.fn(() => null); + + render( + , + ); + const clearButton = screen.getByTestId('text-input-clear-button'); + expect(clearButton).toBeInTheDocument(); + + fireEvent.click(clearButton); + expect(mockedHandleClear).toHaveBeenCalledTimes(1); + fireEvent.keyUp(clearButton, { keyCode: 13 }); + expect(mockedHandleClear).toHaveBeenCalledTimes(2); + fireEvent.keyUp(clearButton, { keyCode: 99 }); + expect(mockedHandleClear).toHaveBeenCalledTimes(2); + }); + }); + + describe('onFocus', () => { + test('Input fires onFocus callback', () => { + const mockedHandleFocus = jest.fn(); + render( + , + ); + const inputElement = screen.getByDisplayValue(baseProps.value); + fireEvent.focus(inputElement); + expect(mockedHandleFocus).toBeCalledTimes(1); + }); + }); + + describe('onBlur', () => { + test('Input fires onBlur callback', () => { + const mockedHandleBlur = jest.fn(); + render(); + const inputElement = screen.getByDisplayValue(baseProps.value); + fireEvent.focus(inputElement); + fireEvent.blur(inputElement); + expect(mockedHandleBlur).toBeCalledTimes(1); + }); + }); + }); + + describe('States', () => { + describe('Label', () => { + test('it renders a label', () => { + render(); + + const labelElement = screen.getByText(baseProps.label); + + expect(labelElement).toBeInTheDocument(); + }); + }); + + describe('Autofocused', () => { + test('Input autofocuses if "autoFocus" prop is set to true', () => { + render(); + const inputElement = screen.getByDisplayValue(baseProps.value); + expect(document.activeElement).toEqual(inputElement); + }); + }); + + describe('Autocomplete', () => { + test('Input correctly assigns autocomplete value of "on" when bool true is provided', () => { + render(); + const inputElement = screen.getByDisplayValue(baseProps.value); + expect(inputElement).toHaveAttribute('autocomplete', 'on'); + }); + + test('Input correctly assigns autocomplete value of "off" when bool false is provided', () => { + render(); + const inputElement = screen.getByDisplayValue('hello'); + expect(inputElement).toHaveAttribute('autocomplete', 'off'); + }); + + test('Input correctly assigns autocomplete specific value when provided', () => { + render(); + const inputElement = screen.getByDisplayValue('hello'); + expect(inputElement).toHaveAttribute('autocomplete', 'email'); + }); + }); + + describe('Required', () => { + test('it correctly assigns the "aria-required" attribute when "isRequired" prop is true', () => { + render(); + + const inputElement = screen.getByDisplayValue('hello'); + + expect(inputElement).toHaveAttribute('aria-required', 'true'); + }); + }); + + describe('Error', () => { + test('Input correctly displays error message if provided', () => { + render(); + + const validationMessageElement = screen.getByText('You silly goose'); + + expect(validationMessageElement).toBeInTheDocument(); + expect(validationMessageElement).toHaveTextContent('You silly goose'); + }); + }); + + describe('Help Text', () => { + test('Input renders help text', async () => { + const { getByText } = render( + , + ); + + expect(getByText('i am help text')).toBeDefined(); + }); + }); + + describe('Max Length', () => { + test('Input correctly passes maxlength property if prop is passed', async () => { + render(); + + const inputElement = screen.getByLabelText(baseProps.label); + expect(inputElement).toBeInTheDocument(); + expect(inputElement).toHaveAttribute('maxlength'); + expect(inputElement.getAttribute('maxlength')).toBe('3'); + }); + }); + + describe('Name', () => { + test('Input correctly passes name property if prop is passed', async () => { + render( + , + ); + + const inputElement = screen.getByLabelText(baseProps.label); + expect(inputElement).toBeInTheDocument(); + expect(inputElement).toHaveAttribute('name'); + expect(inputElement.getAttribute('name')).toBe('test floating label'); + }); + }); + + describe('Aria-labelledby', () => { + test('assigns the "aria-labelledby" attribute and renders label with correct id, when label is provided', () => { + render(); + const inputElement = screen.getByDisplayValue(baseProps.value); + expect(inputElement).toHaveAttribute( + 'aria-labelledby', + `${baseProps.id}Label`, + ); + expect(document.getElementById(baseProps.id)).toBeInTheDocument(); + }); + + test('does not assign "aria-labelledby" attribute when a label is hidden', () => { + render(); + const inputElement = screen.getByLabelText(baseProps.label); + expect(inputElement).not.toHaveAttribute('aria-labelledby'); + }); + }); + + describe('Prefix and Suffix', () => { + test('renders the prefix if specified', () => { + render(); + expect(screen.getByText('prefixValue')).toBeInTheDocument(); + }); + + test('renders the suffix if specified', () => { + render(); + expect(screen.getByText('suffixValue')).toBeInTheDocument(); + }); + }); + }); +}); diff --git a/src/components/TextInputFloating/TextInputFloating.tsx b/src/components/TextInputFloating/TextInputFloating.tsx new file mode 100644 index 000000000..60c060511 --- /dev/null +++ b/src/components/TextInputFloating/TextInputFloating.tsx @@ -0,0 +1,269 @@ +import React, { + ChangeEvent, + forwardRef, + MouseEvent, + KeyboardEvent, + FocusEvent, + ForwardRefExoticComponent, + ReactNode, + HTMLProps, + InputHTMLAttributes, +} from 'react'; +import classNames from 'classnames'; +import { ChangeEvent as CleaveChangeEvent } from 'cleave.js/react/props'; +import { ResponsiveProp } from '../../types'; +import { generateResponsiveClasses } from '../../lib/generateResponsiveClasses'; + +import { Box, BoxProps } from '../Box/Box'; +import { Icon } from '../Icon/Icon'; +import { getAutoCompleteValue } from '../../lib/getAutoCompleteValue'; +import styles from './TextInputFloating.module.scss'; +import { InputValidationMessage } from '../InputValidationMessage/InputValidationMessage'; + +export type TextInputFloatingSize = 'md' | 'lg'; +export interface TextInputFloatingProps { + /** + * The input's id attribute. Used to programmatically tie the input with its label. + */ + id: string; + /** + * Custom content to be displayed above the input. If the label is hidden, will be used to set aria-label attribute. + */ + label: string; + /** + * Callback function to call on change event. + */ + onChange: ( + event: ChangeEvent | CleaveChangeEvent, + ) => void; + /** + * The text value of the input. Required since our Input is a controlled component. + */ + value: InputHTMLAttributes['value']; + /** + * Automatically focus the input when the page is loaded. + */ + autoFocus?: boolean; + /** + * Custom class to be added to standard input classes. + */ + className?: string; + /** + * Mark the input field as invalid and display a validation message. + * Pass a string or node to render a validation message below the input. + */ + error?: ReactNode; + /** + * Visually hide the label. + */ + hideLabel?: boolean; + /** + * Additional clarifying text to help describe the input + */ + helpText?: ReactNode; + /** + * Props passed directly to the input element of the component + */ + inputProps?: BoxProps & HTMLProps; + /** + * The input's disabled attribute + */ + isDisabled?: boolean; + /** + * The required and aria-required attributes on the input + */ + isRequired?: boolean; + /** + * The input's 'maxlength' attribute. + * NOTE: initializing the input with a value longer than the desired maxlength will not trim this value. + */ + maxLength?: number; + /** + * The input's 'name' attribute. + */ + name?: string; + /** + * Callback function to call on blur event. + */ + onBlur?: (event: FocusEvent) => void; + /** + * Callback function to call when input us cleared. When this is passed, + * the input will display an icon on the right side, for triggering this callback. + */ + onClear?: ( + event: MouseEvent | KeyboardEvent, + ) => void; + /** + * Callback function to call on focus event. + */ + onFocus?: (event: FocusEvent) => void; + /** + * The input placeholder attribute. + */ + placeholder?: string; + /** + * An input helper rendered before the input field value + */ + prefix?: ReactNode; + /** + * Visual indicator that the field is required, that gets appended to the label + */ + requiredIndicator?: ReactNode; + /** + * The size of the text input. + */ + size?: TextInputFloatingSize | ResponsiveProp; + /** + * An input helper rendered after the input field value + */ + suffix?: ReactNode; + /** + * The input 'type' value. Defaults to type 'text'. + */ + type?: InputHTMLAttributes['type']; + /** + * Additional props to be spread to rendered element + */ + [x: string]: any; // eslint-disable-line +} + +export const TextInputFloating: ForwardRefExoticComponent = forwardRef( + ( + { + id, + label, + onChange, + value, + autoComplete = false, + autoFocus = false, + error = false, + helpText, + hideLabel = false, + inputProps = {}, + isDisabled = false, + isRequired = false, + maxLength = undefined, + name = '', + onBlur = undefined, + onClear = undefined, + onFocus = undefined, + prefix = undefined, + placeholder = ' ', + requiredIndicator = ' *', + suffix = undefined, + size = 'md', + type = 'text', + }, + ref, + ) => { + const responsiveClasses = generateResponsiveClasses('size', size); + + const inputWrapperClasses = classNames( + 'palmetto-components__variables__form-control', + styles['text-input-wrapper'], + ...responsiveClasses.map(c => styles[c]), + { + [styles.error]: error, + [styles.disabled]: isDisabled, + [styles['is-clearable']]: onClear, + }, + ); + + const clearBtnClasses = classNames(styles['clear-button'], styles.md); + + const renderClearIcon = (): ReactNode => { + const handleKeyPress = ( + event: KeyboardEvent, + ): void => { + if (event.keyCode === 13 && onClear) onClear(event); + }; + + return ( + + ); + }; + + const computedInputProps: TextInputFloatingProps['inputProps'] = { + ...inputProps, // These are spread first so that we don't have top level props overwritten by the user. + 'aria-required': isRequired, + 'aria-invalid': !!error, + 'aria-label': label, + 'aria-labelledby': label && !hideLabel ? `${id}Label` : undefined, + autoComplete: getAutoCompleteValue(autoComplete), + autoFocus, + disabled: isDisabled, + id, + maxLength, + name, + onBlur, + onChange, + onFocus, + placeholder, + required: isRequired, + type, + value, + className: classNames(inputProps.className), + }; + + return ( +
+ + {prefix && ( + + {prefix} + + )} + + + {!!onClear && !!value && renderClearIcon()} + + + {suffix && ( + + {suffix} + + )} + + {helpText && ( + + {helpText} + + )} + {error && error !== true && ( + {error} + )} +
+ ); + }, +); diff --git a/src/components/index.ts b/src/components/index.ts index b82e88ec0..28a52945e 100644 --- a/src/components/index.ts +++ b/src/components/index.ts @@ -46,6 +46,7 @@ export * from './Tabs/Tabs'; export * from './TabsSlider/TabsSlider'; export * from './Table/Table'; export * from './TextInput/TextInput'; +export * from './TextInputFloating/TextInputFloating'; export * from './TextareaInput/TextareaInput'; export * from './TextLink/TextLink'; export * from './ThemeProvider/ThemeProvider'; diff --git a/src/docs/FormTheming.stories.mdx b/src/docs/FormTheming.stories.mdx index 53f9ee801..f39e7c00e 100644 --- a/src/docs/FormTheming.stories.mdx +++ b/src/docs/FormTheming.stories.mdx @@ -1,6 +1,7 @@ import { Meta, Story, Canvas } from '@storybook/addon-docs'; import { useState } from 'react'; import { TextInput } from '../components/TextInput/TextInput'; +import { TextInputFloating } from '../components/TextInputFloating/TextInputFloating'; import { CheckboxInput } from '../components/CheckboxInput/CheckboxInput'; import { SelectInput } from '../components/SelectInput/SelectInput'; import { SelectInputNative } from '../components/SelectInputNative/SelectInputNative'; @@ -57,6 +58,7 @@ Form controls share tokens since they are designed to have a consistent appearan selectValue: options[0].value, textValue: 'hello world', textareaValue: 'hello world', + emptyValue: '', }); const handleChange = (key, value) => { setThemeExampleValues(prevFields => ({ @@ -82,10 +84,9 @@ Form controls share tokens since they are designed to have a consistent appearan }; return ( setIsThemed(e.target.checked)} /> + handleChange('emptyValue', event.target.value)} + /> + handleChange('textValue', event.target.value)} + /> @@ -49,6 +50,32 @@ Sizes for form controls likes inputs and buttons, should match so that they can }; return ( + + + + + handleChange('textInputMd', event.target.value) + } + /> + + + + handleChange('textInputLg', event.target.value) + } + /> + + handleChange('selectInput', event.target.value) @@ -107,7 +134,7 @@ Sizes for form controls likes inputs and buttons, should match so that they can size="sm" /> handleChange('selectInput', event.target.value) @@ -118,7 +145,7 @@ Sizes for form controls likes inputs and buttons, should match so that they can size="md" /> handleChange('selectInput', event.target.value) @@ -253,11 +280,16 @@ Inline form sizes with labels. {() => { - const [value, setValue] = useState(''); - const [value1, setValue1] = useState(''); - const [value2, setValue2] = useState(''); - const [value3, setValue3] = useState(''); - const [valueLabel4, setValueLabel4] = useState(); + const [formValues, setFormValues] = useState({ + textInputSm: '', + textInputMd: '', + textInputLg: '', + selectInput: { + value: 'chocolate', + label: 'Chocolate', + }, + toggleValue: false, + }); const options = [ { value: 'chocolate', @@ -272,17 +304,26 @@ Inline form sizes with labels. label: 'Vanilla', }, ]; + const handleChange = (key, value) => { + setFormValues(prevFields => ({ + ...prevFields, + [key]: value, + })); + }; return (
+ setValue(event.target.value)} + onChange={event => + handleChange('textInputSm', event.target.value) + } /> @@ -294,9 +335,11 @@ Inline form sizes with labels. setValue3(event.target.value)} + onChange={event => + handleChange('selectInput', event.target.value) + } options={options} - value={value3} + value={formValues.selectInput} size="sm" /> @@ -304,20 +347,36 @@ Inline form sizes with labels. setValueLabel4(event.target.checked)} - isChecked={valueLabel4} + onChange={event => + handleChange('toggleValue', event.target.checked) + } + isChecked={formValues.toggleValue} size="sm" /> - + + + + handleChange('textInputMd', event.target.value) + } + /> + setValue1(event.target.value)} + onChange={event => + handleChange('textInputMd', event.target.value) + } /> @@ -327,9 +386,11 @@ Inline form sizes with labels. setValue3(event.target.value)} + onChange={event => + handleChange('selectInput', event.target.value) + } options={options} - value={value3} + value={formValues.selectInput} size="md" /> @@ -337,21 +398,37 @@ Inline form sizes with labels. setValueLabel4(event.target.checked)} - isChecked={valueLabel4} + onChange={event => + handleChange('toggleValue', event.target.checked) + } + isChecked={formValues.toggleValue} size="md" /> - + + + + handleChange('textInputLg', event.target.value) + } + /> + setValue2(event.target.value)} + onChange={event => + handleChange('textInputLg', event.target.value) + } /> @@ -363,9 +440,11 @@ Inline form sizes with labels. setValue3(event.target.value)} + onChange={event => + handleChange('selectInput', event.target.value) + } options={options} - value={value3} + value={formValues.selectInput} size="lg" /> @@ -373,8 +452,10 @@ Inline form sizes with labels. setValueLabel4(event.target.checked)} - isChecked={valueLabel4} + onChange={event => + handleChange('toggleValue', event.target.checked) + } + isChecked={formValues.toggleValue} size="lg" /> @@ -392,11 +473,16 @@ Inline form sizes with error states. {() => { - const [value, setValue] = useState(''); - const [value1, setValue1] = useState(''); - const [value2, setValue2] = useState(''); - const [value3, setValue3] = useState(); - const [valueError4, setValueError4] = useState(); + const [formValues, setFormValues] = useState({ + textInputSm: '', + textInputMd: '', + textInputLg: '', + selectInput: { + value: 'chocolate', + label: 'Chocolate', + }, + toggleValue: false, + }); const options = [ { value: 'chocolate', @@ -411,122 +497,170 @@ Inline form sizes with error states. label: 'Vanilla', }, ]; + const handleChange = (key, value) => { + setFormValues(prevFields => ({ + ...prevFields, + [key]: value, + })); + }; const errorMsg = 'Error message'; return (
+ + handleChange('textInputSm', event.target.value) + } error={errorMsg} - onChange={event => setValue(event.target.value)} /> - + setValue3(event.target.value)} + onChange={event => + handleChange('selectInput', event.target.value) + } options={options} - value={value3} - hideLabel + value={formValues.selectInput} size="sm" error={errorMsg} /> setValueError4(event.target.checked)} - isChecked={valueError4} + onChange={event => + handleChange('toggleValue', event.target.checked) + } + isChecked={formValues.toggleValue} size="sm" - hideLabel error={errorMsg} /> - + + + + handleChange('textInputMd', event.target.value) + } + error={errorMsg} + /> + + handleChange('textInputMd', event.target.value) + } error={errorMsg} - onChange={event => setValue1(event.target.value)} /> - + setValue3(event.target.value)} + onChange={event => + handleChange('selectInput', event.target.value) + } options={options} - value={value3} - hideLabel + value={formValues.selectInput} + size="md" error={errorMsg} /> setValueError4(event.target.checked)} - isChecked={valueError4} + id="mdToggleLabel" + label="medium toggle" + onChange={event => + handleChange('toggleValue', event.target.checked) + } + isChecked={formValues.toggleValue} size="md" - hideLabel error={errorMsg} /> - + + + + handleChange('textInputLg', event.target.value) + } + error={errorMsg} + /> + + handleChange('textInputLg', event.target.value) + } error={errorMsg} - onChange={event => setValue2(event.target.value)} /> - + setValue3(event.target.value)} + onChange={event => + handleChange('selectInput', event.target.value) + } options={options} - value={value3} - hideLabel + value={formValues.selectInput} size="lg" - isClearable error={errorMsg} /> setValueError4(event.target.checked)} - isChecked={valueError4} + onChange={event => + handleChange('toggleValue', event.target.checked) + } + isChecked={formValues.toggleValue} size="lg" - hideLabel error={errorMsg} /> From 7e40be3677519387d454efedb5699249888ac868 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 29 Feb 2024 23:44:49 +0000 Subject: [PATCH 15/40] chore(release): 1.0.0-beta.7 [skip ci] # [1.0.0-beta.7](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.6...v1.0.0-beta.7) (2024-02-29) ### Features * **TextInputFloating:** new component ([#874](https://github.com/palmetto/palmetto-components/issues/874)) ([a19211b](https://github.com/palmetto/palmetto-components/commit/a19211b558e9fb9652820b35c272c302dfee0254)) --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 43d747d43..371436b92 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ Changelog +# [1.0.0-beta.7](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.6...v1.0.0-beta.7) (2024-02-29) + + +### Features + +* **TextInputFloating:** new component ([#874](https://github.com/palmetto/palmetto-components/issues/874)) ([a19211b](https://github.com/palmetto/palmetto-components/commit/a19211b558e9fb9652820b35c272c302dfee0254)) + # [1.0.0-beta.6](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.5...v1.0.0-beta.6) (2024-02-13) From 7e90a7c43f46ae56a09b5980a44a7ce4f76167d1 Mon Sep 17 00:00:00 2001 From: Nathan Young <1447339+nathanyoung@users.noreply.github.com> Date: Thu, 29 Feb 2024 17:10:31 -0800 Subject: [PATCH 16/40] fix(TextInputFloating): prefix/suffix focus styles, clear icon (#875) * fix(TextInputFloating): prefix and suffix focus styling * remove-light clear icon --- src/components/TextInput/TextInput.tsx | 2 +- .../TextInputFloating.module.scss | 36 +++++++++++++++++++ .../TextInputFloating/TextInputFloating.tsx | 2 +- 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/src/components/TextInput/TextInput.tsx b/src/components/TextInput/TextInput.tsx index 3cd0d7016..50a972882 100644 --- a/src/components/TextInput/TextInput.tsx +++ b/src/components/TextInput/TextInput.tsx @@ -191,7 +191,7 @@ export const TextInput: ForwardRefExoticComponent = forwardRef - + ); }; diff --git a/src/components/TextInputFloating/TextInputFloating.module.scss b/src/components/TextInputFloating/TextInputFloating.module.scss index 9f9a5d5c8..db89696f2 100644 --- a/src/components/TextInputFloating/TextInputFloating.module.scss +++ b/src/components/TextInputFloating/TextInputFloating.module.scss @@ -410,6 +410,42 @@ --form-control-border-color-focus, var(--INTERNAL_form-control-border-color-focus) ); + + .prefix { + border-top: 1px solid + var( + --form-control-border-color-focus, + var(--INTERNAL_form-control-border-color-focus) + ); + border-bottom: 1px solid + var( + --form-control-border-color-focus, + var(--INTERNAL_form-control-border-color-focus) + ); + border-left: 1px solid + var( + --form-control-border-color-focus, + var(--INTERNAL_form-control-border-color-focus) + ); + } + + .suffix { + border-top: 1px solid + var( + --form-control-border-color-focus, + var(--INTERNAL_form-control-border-color-focus) + ); + border-bottom: 1px solid + var( + --form-control-border-color-focus, + var(--INTERNAL_form-control-border-color-focus) + ); + border-right: 1px solid + var( + --form-control-border-color-focus, + var(--INTERNAL_form-control-border-color-focus) + ); + } } &.disabled { diff --git a/src/components/TextInputFloating/TextInputFloating.tsx b/src/components/TextInputFloating/TextInputFloating.tsx index 60c060511..e8880f45c 100644 --- a/src/components/TextInputFloating/TextInputFloating.tsx +++ b/src/components/TextInputFloating/TextInputFloating.tsx @@ -187,7 +187,7 @@ export const TextInputFloating: ForwardRefExoticComponent - + ); }; From 2068200f007b679bc1e337d2e44b0e749afb5420 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Fri, 1 Mar 2024 01:13:08 +0000 Subject: [PATCH 17/40] chore(release): 1.0.0-beta.8 [skip ci] # [1.0.0-beta.8](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.7...v1.0.0-beta.8) (2024-03-01) ### Bug Fixes * **TextInputFloating:** prefix/suffix focus styles, clear icon ([#875](https://github.com/palmetto/palmetto-components/issues/875)) ([7e90a7c](https://github.com/palmetto/palmetto-components/commit/7e90a7c43f46ae56a09b5980a44a7ce4f76167d1)) --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 371436b92..a2abe1efb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ Changelog +# [1.0.0-beta.8](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.7...v1.0.0-beta.8) (2024-03-01) + + +### Bug Fixes + +* **TextInputFloating:** prefix/suffix focus styles, clear icon ([#875](https://github.com/palmetto/palmetto-components/issues/875)) ([7e90a7c](https://github.com/palmetto/palmetto-components/commit/7e90a7c43f46ae56a09b5980a44a7ce4f76167d1)) + # [1.0.0-beta.7](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.6...v1.0.0-beta.7) (2024-02-29) From 62dc89457ca214aa3f48928bd226a58bb5fc0b0a Mon Sep 17 00:00:00 2001 From: Nathan Young <1447339+nathanyoung@users.noreply.github.com> Date: Tue, 5 Mar 2024 17:24:16 -0800 Subject: [PATCH 18/40] feat(SelectInputNativeFloating): new component (#877) * feat(SelectInputNativeFloating): new component * Update SelectInputNativeFloating.test.tsx * helpText component * use HelpText component everywhere * wip * Update FormControls.stories.mdx * Update FormTheming.stories.mdx * Update Toggle.tsx * Update Toggle.tsx * fix toggle alignment * more documentation --- package.json | 1 - .../FileUpload.Overview.stories.mdx | 20 +- src/components/FileUpload/FileUpload.tsx | 7 +- src/components/FormControl/FormControl.tsx | 2 +- .../FormLabel/FormLabel.module.scss | 6 - src/components/FormLabel/FormLabel.tsx | 12 +- src/components/HelpText/HelpText.module.scss | 22 + src/components/HelpText/HelpText.tsx | 31 ++ ...ctInputNativeFloating.Overview.stories.mdx | 263 +++++++++++ ...InputNativeFloating.Playground.stories.tsx | 79 ++++ .../SelectInputNativeFloating.module.scss | 429 ++++++++++++++++++ .../SelectInputNativeFloating.test.tsx | 305 +++++++++++++ .../SelectInputNativeFloating.tsx | 239 ++++++++++ .../TextInputFloating.Overview.stories.mdx | 50 +- .../TextInputFloating.test.tsx | 6 - .../TextInputFloating/TextInputFloating.tsx | 18 +- src/components/Toggle/Toggle.tsx | 56 ++- src/components/index.ts | 1 + src/docs/FormTheming.stories.mdx | 9 + src/stories/FormControls.stories.mdx | 2 +- src/styles/variables/forms.scss | 32 +- yarn.lock | 8 +- 22 files changed, 1481 insertions(+), 117 deletions(-) create mode 100644 src/components/HelpText/HelpText.module.scss create mode 100644 src/components/HelpText/HelpText.tsx create mode 100644 src/components/SelectInputNativeFloating/SelectInputNativeFloating.Overview.stories.mdx create mode 100644 src/components/SelectInputNativeFloating/SelectInputNativeFloating.Playground.stories.tsx create mode 100644 src/components/SelectInputNativeFloating/SelectInputNativeFloating.module.scss create mode 100644 src/components/SelectInputNativeFloating/SelectInputNativeFloating.test.tsx create mode 100644 src/components/SelectInputNativeFloating/SelectInputNativeFloating.tsx diff --git a/package.json b/package.json index 6507f4787..4748e87d1 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,6 @@ "@palmetto/dialog": "^0.16.4", "@palmetto/palmetto-design-tokens": "0.78.0", "@popperjs/core": "^2.5.3", - "caniuse-lite": "^1.0.30001523", "classnames": "^2.2.6", "cleave.js": "^1.6.0", "date-fns": "^2.16.1", diff --git a/src/components/FileUpload/FileUpload.Overview.stories.mdx b/src/components/FileUpload/FileUpload.Overview.stories.mdx index 8ef0165ad..d2feee711 100644 --- a/src/components/FileUpload/FileUpload.Overview.stories.mdx +++ b/src/components/FileUpload/FileUpload.Overview.stories.mdx @@ -17,17 +17,7 @@ import { Button } from '../Button/Button'; Use FileUpload to capture files for upload in forms or elsewhere. - - - - -## Props - - - -## Default - - + {() => { const [files, setFiles] = useState(null); @@ -46,6 +36,10 @@ Use FileUpload to capture files for upload in forms or elsewhere. +## Props + + + ## Custom Button Text Customize the button text with `buttonText`. @@ -148,7 +142,7 @@ Remove the icon on the button with the handy `hasIcon` boolean. ## Without Button Text -The default button text for `FileUpload` is 'Upload File'. However, you can explicitely pass `null` to the `buttonText` prop to remove all text. +The default button text for `FileUpload` is 'Upload File'. However, you can explicitly pass `null` to the `buttonText` prop to remove all text. @@ -205,12 +199,10 @@ Leverage the same variants as the Button component to customize the look and fee onChange={handleLightChange} files={lightFiles} variant="secondary" - /> ); }} - diff --git a/src/components/FileUpload/FileUpload.tsx b/src/components/FileUpload/FileUpload.tsx index e8aa51e46..dac43bd97 100644 --- a/src/components/FileUpload/FileUpload.tsx +++ b/src/components/FileUpload/FileUpload.tsx @@ -4,6 +4,7 @@ import classNames from 'classnames'; import { Box, BoxProps } from '../Box/Box'; import { Icon } from '../Icon/Icon'; import { FormLabel } from '../FormLabel/FormLabel'; +import { HelpText } from '../HelpText/HelpText'; import { InputValidationMessage } from '../InputValidationMessage/InputValidationMessage'; import { Button, @@ -285,11 +286,7 @@ export const FileUpload: FC = React.forwardRef< aria-required={isRequired} /> - {helpText && ( - - {helpText} - - )} + {helpText && {helpText}} {error && error !== true && ( diff --git a/src/components/FormControl/FormControl.tsx b/src/components/FormControl/FormControl.tsx index 0fd1f9abe..5deade453 100644 --- a/src/components/FormControl/FormControl.tsx +++ b/src/components/FormControl/FormControl.tsx @@ -50,7 +50,7 @@ export const FormControl = React.forwardRef(( helpText, isDisabled, requiredIndicator, - width = '100%', + width = '100', ...restProps }, ref, diff --git a/src/components/FormLabel/FormLabel.module.scss b/src/components/FormLabel/FormLabel.module.scss index 620043719..45bf132f6 100644 --- a/src/components/FormLabel/FormLabel.module.scss +++ b/src/components/FormLabel/FormLabel.module.scss @@ -11,10 +11,4 @@ &.disabled { color: var(--color-brand-grey-light); } - - .help-text { - color: var(--form-control-help-text-font-color, var(--INTERNAL_form-control-help-text-font-color)); - margin-top: var(--form-control-help-margin, var(--INTERNAL_form-control-help-margin)); - font-weight: var(--form-control-help-text-font-weight, var(--INTERNAL_form-control-help-text-font-weight)); - } } diff --git a/src/components/FormLabel/FormLabel.tsx b/src/components/FormLabel/FormLabel.tsx index 61880120a..db5d0377d 100644 --- a/src/components/FormLabel/FormLabel.tsx +++ b/src/components/FormLabel/FormLabel.tsx @@ -1,6 +1,7 @@ import React, { FC, ReactNode } from 'react'; import classNames from 'classnames'; import { Box, BoxProps } from '../Box/Box'; +import { HelpText } from '../HelpText/HelpText'; import styles from './FormLabel.module.scss'; export interface FormLabelProps extends BoxProps { @@ -80,16 +81,7 @@ export const FormLabel: FC = ({ > {children} {isFieldRequired && requiredIndicator && {requiredIndicator}} - {helpText && ( - - {helpText} - - )} + {helpText && {helpText}} ); }; diff --git a/src/components/HelpText/HelpText.module.scss b/src/components/HelpText/HelpText.module.scss new file mode 100644 index 000000000..359d3f2e0 --- /dev/null +++ b/src/components/HelpText/HelpText.module.scss @@ -0,0 +1,22 @@ +.help-text { + color: var( + --form-control-help-text-font-color, + var(--INTERNAL_form-control-help-text-font-color) + ); + font-family: var( + --form-control-font-family, + var(--INTERNAL_form-control-font-family) + ); + font-size: var( + --form-control-help-text-font-size, + var(--INTERNAL_form-control-help-text-font-size) + ); + margin-top: var( + --form-control-help-margin, + var(--INTERNAL_form-control-help-margin) + ); + font-weight: var( + --form-control-help-text-font-weight, + var(--INTERNAL_form-control-help-text-font-weight) + ); +} diff --git a/src/components/HelpText/HelpText.tsx b/src/components/HelpText/HelpText.tsx new file mode 100644 index 000000000..018797f95 --- /dev/null +++ b/src/components/HelpText/HelpText.tsx @@ -0,0 +1,31 @@ +import React, { forwardRef } from 'react'; +import classNames from 'classnames'; +import { Box } from '../Box/Box'; +import styles from './HelpText.module.scss'; + +export interface HelpTextProps { + /** + * Contents of the help text. + */ + children?: React.ReactNode; + /** + * Additional class names to add. + */ + className?: string; +} + +export const HelpText = forwardRef( + ({ children, className }, ref) => ( + + {children} + + ), +); diff --git a/src/components/SelectInputNativeFloating/SelectInputNativeFloating.Overview.stories.mdx b/src/components/SelectInputNativeFloating/SelectInputNativeFloating.Overview.stories.mdx new file mode 100644 index 000000000..89d5aad44 --- /dev/null +++ b/src/components/SelectInputNativeFloating/SelectInputNativeFloating.Overview.stories.mdx @@ -0,0 +1,263 @@ +import { useState } from 'react'; +import { action } from '@storybook/addon-actions'; +import { Meta, Story, Canvas, ArgsTable } from '@storybook/addon-docs'; +import { SelectInputNativeFloating } from './SelectInputNativeFloating'; +import { RESPONSIVE_STORY } from '../../docs/constants'; +import { Box } from '../Box/Box'; +import { Icon } from '../Icon/Icon'; + + + +# SelectInputNativeFloating + +Use `SelectInputNativeFloating` to create a floating label input field, but unlike `TextInputFloating` they always show the `label` in the floated state. It is a controlled component, which means that you need to provide a value and an `onChange` handler to update the value. + + + + {() => { + const [value, setValue] = useState(''); + const options = [ + { value: 'chocolate', label: 'Chocolate' }, + { value: 'strawberry', label: 'Strawberry' }, + { value: 'vanilla', label: 'Vanilla' }, + ]; + return ( + { + setValue(event.target.value); + }} + options={options} + value={value} + /> + ); + }} + + + +## Props + + + +### Required + +Use the `isRequired` prop to display an `*` after the label and set the `required` and `aria-required` on the underlying input element. You can also use the `requiredIndicator` prop to customize the indicator that appears next to the label. + + + + {() => { + const [value, setValue] = useState(''); + const options = [ + { value: 'chocolate', label: 'Chocolate' }, + { value: 'strawberry', label: 'Strawberry' }, + { value: 'vanilla', label: 'Vanilla' }, + ]; + return ( + + { + setValue(event.target.value); + }} + options={options} + value={value} + isRequired + /> + { + setValue(event.target.value); + }} + options={options} + value={value} + isRequired + requiredIndicator=" (required)" + /> + + ); + }} + + + +### Help Text + +Use `helpText` to provide additional information about the input field. + + + + {() => { + const [value, setValue] = useState(''); + const options = [ + { value: 'Enphase', label: 'Enphase' }, + { value: 'SolarEdge', label: 'SolarEdge' }, + { value: 'Tesla', label: 'Tesla' }, + ]; + return ( + { + setValue(event.target.value); + }} + options={options} + value={value} + /> + ); + }} + + + +### Validation Error + +Use the `error` prop to mark the input as invalid. `error` accepts a `boolean`, `string`, or `node`. + + + + {() => { + const [value, setValue] = useState(''); + const options = [ + { value: 'Enphase', label: 'Enphase' }, + { value: 'SolarEdge', label: 'SolarEdge' }, + { value: 'Tesla', label: 'Tesla' }, + ]; + return ( + { + setValue(event.target.value); + }} + options={options} + value={value} + error="Required Input" + /> + ); + }} + + + +### Disabled + +Add `isDisabled`to give it a grayed out appearance, remove pointer events, and prevent focusing. + + + + {() => { + const [value, setValue] = useState(''); + const options = [ + { value: 'Enphase', label: 'Enphase' }, + { value: 'SolarEdge', label: 'SolarEdge' }, + { value: 'Tesla', label: 'Tesla' }, + ]; + return ( + { + setValue(event.target.value); + }} + options={options} + value={value} + isDisabled + /> + ); + }} + + + +### Clearable + +Use the `onClear` prop to display a clear icon (x) when the input has a value. `onClear` will fire +a callback function when the clear icon is clicked, which can then be handled to clear the value. + + + + {() => { + const [value, setValue] = useState('Clear Me'); + const options = [ + { value: 'clear', label: 'Clear Me' }, + { value: 'option2', label: 'Option 2' }, + { value: 'option3', label: 'Option 3' }, + ]; + return ( + { + setValue(event.target.value); + }} + options={options} + value={value} + onClear={event => setValue('')} + /> + ); + }} + + + +### Sizes + +Two sizes, `md` and `lg` are available, with `md` being the default. + + + + {() => { + const [value, setValue] = useState(''); + const options = [ + { value: 'chocolate', label: 'Chocolate' }, + { value: 'strawberry', label: 'Strawberry' }, + { value: 'vanilla', label: 'Vanilla' }, + ]; + return ( + + setValue(event.target.value)} + options={options} + /> + setValue(event.target.value)} + options={options} + /> + setValue(event.target.value)} + options={options} + /> + + ); + }} + + + +## Component Design Tokens + +This component shares component design tokens with all form controls. For a complete list of tokens, see the [Theming Form Controls documentation](/docs/theming-form-controls--custom-theme-form). diff --git a/src/components/SelectInputNativeFloating/SelectInputNativeFloating.Playground.stories.tsx b/src/components/SelectInputNativeFloating/SelectInputNativeFloating.Playground.stories.tsx new file mode 100644 index 000000000..3202070de --- /dev/null +++ b/src/components/SelectInputNativeFloating/SelectInputNativeFloating.Playground.stories.tsx @@ -0,0 +1,79 @@ +import React from 'react'; +import { Meta, Story } from '@storybook/react/types-6-0'; +import { boxPropsKeys } from '../Box/Box'; +import { + SelectInputNativeFloating, + SelectInputNativeFloatingProps, +} from './SelectInputNativeFloating'; + +export default { + title: 'Components/SelectInputNativeFloating/Playground', + component: SelectInputNativeFloating, + argTypes: { + id: { + control: 'text', + }, + label: { + control: 'text', + }, + value: { + control: { + type: 'radio', + options: ['chocolate', 'strawberry', 'vanilla'], + }, + }, + autoFocus: { + control: 'boolean', + }, + error: { + control: 'text', + }, + helpText: { + control: 'text', + }, + isDisabled: { + control: 'boolean', + }, + isRequired: { + control: 'boolean', + }, + className: { + control: 'text', + }, + size: { + control: { + type: 'radio', + options: ['md', 'lg'], + }, + }, + placeholder: { + control: 'text', + }, + options: { + control: 'object', + }, + requiredIndicator: { + control: 'text', + }, + ...boxPropsKeys.reduce( + (acc, curr) => ({ ...acc, [curr]: { table: { disable: true } } }), + {}, + ), + }, +} as Meta; + +const Template: Story = ({ ...args }) => ( + +); + +export const Playground = Template.bind({}); +Playground.args = { + id: 'playgroundSelectInputNativeFloating', + label: 'Playground SelectInputNativeFloating', + name: 'playgroundSelectInputNativeFloating', + options: [ + { value: 'chocolate', label: 'Chocolate' }, + { value: 'strawberry', label: 'Strawberry' }, + { value: 'vanilla', label: 'Vanilla' }, + ], +}; diff --git a/src/components/SelectInputNativeFloating/SelectInputNativeFloating.module.scss b/src/components/SelectInputNativeFloating/SelectInputNativeFloating.module.scss new file mode 100644 index 000000000..87e10aad2 --- /dev/null +++ b/src/components/SelectInputNativeFloating/SelectInputNativeFloating.module.scss @@ -0,0 +1,429 @@ +@import '~@palmetto/palmetto-design-tokens/build/scss/variables-size'; + +@mixin floating-label-minimize-md { + opacity: 0.75; + transform: scale(0.6875) translateY(-0.3rem) translateX(0.15rem); +} + +@mixin floating-label-minimize-lg { + opacity: 0.75; + transform: scale(0.75) translateY(-0.3rem) translateX(0.15rem); +} + +@mixin size-md { + border-radius: var( + --form-control-size-md-border-radius, + var(--INTERNAL_form-control-size-md-border-radius) + ); + font-size: var( + --form-control-size-sm-font-size, + var(--INTERNAL_form-control-size-sm-font-size) + ); + + .select-input-label { + padding: var( + --form-control-size-md-padding, + var(--INTERNAL_form-control-size-md-padding) + ); + } + + &::before, + &::after { + width: 14px; + height: 4px; + top: calc(var(--size-spacing-md) + 3px); + } + + &::before { + right: calc(var(--size-spacing-sm) + 11px); + } + + &::after { + right: calc(var(--size-spacing-sm) + 3px); + } + + select { + padding: calc( + var( + --form-control-size-lg-padding, + var(--INTERNAL_form-control-size-lg-padding) + ) + 3px + ) + var(--size-spacing-3xl) + calc( + var( + --form-control-size-md-padding, + var(--INTERNAL_form-control-size-md-padding) + ) - 5px + ) + var( + --form-control-size-md-padding, + var(--INTERNAL_form-control-size-sm-padding) + ); + border-radius: var( + --form-control-size-md-border-radius, + var(--INTERNAL_form-control-size-md-border-radius) + ); + + &:focus { + + .select-input-label { + @include floating-label-minimize-md; + } + } + + &:not(:placeholder-shown) ~ label { + @include floating-label-minimize-md; + } + } + + .clear-button { + padding: var( + --form-control-size-md-padding, + var(--INTERNAL_form-control-size-md-padding) + ); + } +} + +%size-md { + @include size-md; +} + +.size-md { + @extend %size-md; +} + +@mixin size-lg { + border-radius: var( + --form-control-size-lg-border-radius, + var(--INTERNAL_form-control-size-lg-border-radius) + ); + font-size: var( + --form-control-size-md-font-size, + var(--INTERNAL_form-control-size-md-font-size) + ); + + .select-input-label { + padding: var( + --form-control-size-lg-padding, + var(--INTERNAL_form-control-size-lg-padding) + ); + } + + &::before, + &::after { + width: 14px; + height: 4px; + top: calc(var(--size-spacing-md) + 9px); + } + + &::before { + right: calc(var(--size-spacing-sm) + 11px); + } + + &::after { + right: calc(var(--size-spacing-sm) + 3px); + } + + select { + padding: calc( + var( + --form-control-size-lg-padding, + var(--INTERNAL_form-control-size-lg-padding) + ) + 10px + ) + var(--size-spacing-3xl) + calc( + var( + --form-control-size-lg-padding, + var(--INTERNAL_form-control-size-lg-padding) + ) - 5px + ) + var( + --form-control-size-lg-padding, + var(--INTERNAL_form-control-size-md-padding) + ); + border-radius: var( + --form-control-size-lg-border-radius, + var(--INTERNAL_form-control-size-lg-border-radius) + ); + + &:focus { + + .select-input-label { + @include floating-label-minimize-lg; + } + } + + &:not(:placeholder-shown) ~ label { + @include floating-label-minimize-lg; + } + } + + .clear-button { + padding: var( + --form-control-size-lg-padding, + var(--INTERNAL_form-control-size-lg-padding) + ) + var( + --form-control-size-lg-padding, + var(--INTERNAL_form-control-size-lg-padding) + ) + var( + --form-control-size-lg-padding, + var(--INTERNAL_form-control-size-lg-padding) + ) + 0; + } +} + +%size-lg { + @include size-lg; +} + +.size-lg { + @extend %size-lg; +} + +// https://stackoverflow.com/questions/262158/disabled-input-text-color-on-ios +%disabled-base { + background-color: var( + --form-control-background-color-disabled, + var(--INTERNAL_form-control-background-color-disabled) + ); + color: var( + --form-control-font-color-disabled, + var(--INTERNAL_form-control-font-color-disabled) + ); + -webkit-text-fill-color: var( + --form-control-font-color-disabled, + var(--INTERNAL_form-control-font-color-disabled) + ); + opacity: 1; + + &:hover { + cursor: not-allowed; + } +} + +.select-input-label { + position: absolute; + top: 0; + font-size: 1rem; + transform-origin: 0 0; + transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out; + font-weight: --form-control-label-font-weight, + var(--INTERNAL_form-control-label-font-weigh); + color: --form-control-label-font-color, + var(--INTERNAL_form-control-label-font-color); + cursor: text; + white-space: nowrap; +} + +.text-input-wrapper { + font-family: var( + --form-control-font-family, + var(--INTERNAL_form-control-font-family) + ); + position: relative; + box-shadow: var( + --form-control-box-shadow, + var(--INTERNAL_form-control-box-shadow) + ), + inset 0 0 0 1px + var( + --form-control-border-color, + var(--INTERNAL_form-control-border-color) + ); + background-color: var( + --form-control-background-color, + var(--INTERNAL_form-control-background-color) + ); + + &::before, + &::after { + border-radius: 100px; + content: ''; + position: absolute; + background: var(--color-brand-grey-light); + pointer-events: none; + } + + //change the stacking context so this half of the chevron stays above the disabled background color. + &::before { + transform-origin: 50% 50%; + transform: rotate(42deg); + z-index: 1; + } + + &::after { + transform-origin: 50% 50%; + transform: rotate(-42deg); + } + + &.size-md { + @extend %size-md; + } + + &.size-lg { + @extend %size-lg; + } + + @media (min-width: $size-breakpoint-tablet) { + &.size-md-tablet { + @include size-md; + } + + &.size-lg-tablet { + @include size-lg; + } + } + + @media (min-width: $size-breakpoint-desktop) { + &.size-md-desktop { + @include size-md; + } + + &.size-lg-desktop { + @include size-lg; + } + } + + @media (min-width: $size-breakpoint-hd) { + &.size-md-hd { + @include size-md; + } + + &.size-lg-hd { + @include size-lg; + } + } + + // border and background is set on the text-input-wrapper + select { + appearance: none; + box-sizing: border-box; + display: flex; + transition-duration: 300ms; + transition-property: border, background-color; + transition-timing-function: cubic-bezier(0.2, 0.8, 0.4, 1); + border: none; + background-color: transparent; + width: 100%; + line-height: var( + --form-control-line-height, + var(--INTERNAL_form-control-line-height) + ); + color: var( + --form-control-font-color, + var(--INTERNAL_form-control-font-color) + ); + + &::placeholder { + color: transparent; + } + + &:focus { + outline: none; + border-color: var( + --form-control-border-color-focus, + var(--INTERNAL_form-control-border-color-focus) + ); + } + + &:disabled { + @extend %disabled-base; + + background-color: transparent; + + + .select-input-label { + cursor: not-allowed; + } + } + } + + &.error { + box-shadow: var( + --form-control-box-shadow, + var(--INTERNAL_form-control-box-shadow) + ), + inset 0 0 0 1px + var( + --form-control-border-color-error, + var(--INTERNAL_form-control-border-color-error) + ); + background-color: var( + --form-control-background-color-error, + var(--INTERNAL_form-control-background-color-error) + ); + + &:focus-within { + background-color: var( + --form-control-background-color, + var(--INTERNAL_form-control-background-color) + ); + } + + select:focus { + outline: none; + background-color: transparent; + } + } + + //Necessary so that inset shadow that we use for border does not get covered by child elements. + &:not(.error) { + > * { + &:focus, + &.disabled { + &:not(input) { + box-shadow: inset 0 1px 0 0 + var( + --form-control-box-shadow-focus, + var(--INTERNAL_form-control-box-shadow-focus) + ), + inset 0 -1px 0 0 var(--form-control-border-color-focus, var(--INTERNAL_form-control-border-color-focus)); + } + } + } + } + + &:focus-within { + outline: none; + box-shadow: var( + --form-control-box-shadow-focus, + var(--INTERNAL_form-control-box-shadow-focus) + ), + inset 0 0 0 1px + var( + --form-control-border-color-focus, + var(--INTERNAL_form-control-border-color-focus) + ); + } + + &.disabled { + @extend %disabled-base; + } + + // Reset default button styles + .clear-button { + position: absolute; + right: var(--size-spacing-2xl); + transition-duration: 0.2s; + transition-property: color; + border: 0; + border-radius: 0; + background: none; + cursor: pointer; + color: var( + --form-control-icon-color, + var(--INTERNAL_form-control-icon-color) + ); + font-style: inherit; + height: 100%; + + &:hover { + color: var( + --form-control-icon-hover-color, + var(--INTERNAL_form-control-icon-hover-color) + ); + } + } +} diff --git a/src/components/SelectInputNativeFloating/SelectInputNativeFloating.test.tsx b/src/components/SelectInputNativeFloating/SelectInputNativeFloating.test.tsx new file mode 100644 index 000000000..e47ae9a9e --- /dev/null +++ b/src/components/SelectInputNativeFloating/SelectInputNativeFloating.test.tsx @@ -0,0 +1,305 @@ +import React from 'react'; +import { render, fireEvent, screen } from '@testing-library/react'; +import { BreakpointSize } from '../../types'; +import { SelectInputNativeFloating } from './SelectInputNativeFloating'; + +const selectOptions = [ + { value: 'chocolate', label: 'Chocolate' }, + { value: 'strawberry', label: 'Strawberry' }, + { value: 'vanilla', label: 'Vanilla' }, +]; + +describe('SelectInputNativeFloating', () => { + describe('Callback Handling', () => { + test('it fires onChange callback on change', async () => { + const mockedHandleChange = jest.fn(); + + const { getByLabelText } = render( + , + ); + + await fireEvent.change(getByLabelText('onchange test')); + + expect(mockedHandleChange).toBeCalledTimes(1); + }); + + test('it fires onFocus callback on focus', () => { + const mockedHandleChange = jest.fn(); + const mockedHandleFocus = jest.fn(); + + render( + , + ); + const select = screen.getByLabelText('onfocus test'); + fireEvent.focus(select); + + expect(mockedHandleFocus).toBeCalledTimes(1); + }); + + test('it fires onBlur callback on blur', () => { + const mockedHandleChange = jest.fn(); + const mockedHandleBlur = jest.fn(); + + render( + , + ); + + const select = screen.getByLabelText('onblur test'); + fireEvent.blur(select); + + expect(mockedHandleBlur).toBeCalledTimes(1); + }); + }); + + describe('onClear', () => { + test('onClear prop renders clear icon when input has value', () => { + const mockedHandleChange = jest.fn(); + render( + null} + />, + ); + const clearButton = screen.getByTestId('text-input-clear-button'); + expect(clearButton).toBeInTheDocument(); + }); + + test('onClear event fires callback function', () => { + const mockedHandleChange = jest.fn(); + const mockedHandleClear = jest.fn(() => null); + + render( + , + ); + const clearButton = screen.getByTestId('text-input-clear-button'); + expect(clearButton).toBeInTheDocument(); + + fireEvent.click(clearButton); + expect(mockedHandleClear).toHaveBeenCalledTimes(1); + fireEvent.keyUp(clearButton, { keyCode: 13 }); + expect(mockedHandleClear).toHaveBeenCalledTimes(2); + fireEvent.keyUp(clearButton, { keyCode: 99 }); + expect(mockedHandleClear).toHaveBeenCalledTimes(2); + }); + }); + + describe('States', () => { + describe('With a label, and no custom placeholder', () => { + test('it renders input with a label, and with a default placeholder', () => { + const mockedHandleChange = jest.fn(); + + render( + , + ); + + expect(screen.getByLabelText('Select Label')).toBeInTheDocument(); + expect(screen.getByText('Select...')).toBeInTheDocument(); + }); + + test('assigns the "aria-labelledby" attribute and renders label correct id, when a label is provided', () => { + render( + null} + />, + ); + const inputElement = screen.getByLabelText('test label'); + expect(inputElement).toHaveAttribute( + 'aria-labelledby', + 'testInputLabel', + ); + expect(document.getElementById('testInputLabel')).toBeInTheDocument(); + }); + }); + + describe('Is Required', () => { + test('it sets the required and aria-required properties on the input', () => { + const mockedHandleChange = jest.fn(); + + render( + , + ); + + const inputElement = screen.getByLabelText('Required Select'); + expect(inputElement).toHaveAttribute('aria-required', 'true'); + expect(inputElement).toHaveAttribute('required'); + }); + + test('it renders an asterisk in the label by default', () => { + const mockedHandleChange = jest.fn(); + + render( + , + ); + + expect(screen.getByText('*')).toBeInTheDocument(); + }); + }); + + describe('Is Disabled', () => { + test('it disables the input', () => { + const mockedHandleChange = jest.fn(); + + render( + , + ); + const select = screen.getByLabelText('disabled test'); + expect(select).toBeDisabled(); + }); + }); + + describe('Is Invalid, with a helpful message', () => { + test('it renders the helpful message', () => { + const mockedHandleChange = jest.fn(); + + render( + , + ); + + expect(screen.getByText('Helpful message')).toBeInTheDocument(); + }); + }); + }); + + describe('Sizes', () => { + const mockedHandleChange = jest.fn(); + const sizes = ['md', 'lg'] as ('md' | 'lg')[]; + + const breakpoints: BreakpointSize[] = ['tablet', 'desktop', 'hd']; + + sizes.forEach(size => { + test(`it has a ${size} class applied to it`, () => { + render( + , + ); + const select = screen.getByLabelText('size test'); + const selectParent = select.closest('div'); + expect(selectParent?.getAttribute('class')).toContain(size); + }); + + breakpoints.forEach(breakpoint => { + test(`it applies responsive classes for breakpoint: ${breakpoint} and size: ${size}`, () => { + render( + , + ); + const select = screen.getByLabelText('size test'); + const selectParent = select.closest('div'); + + expect(selectParent?.getAttribute('class')).toContain( + `size-${size}-${breakpoint}`, + ); + }); + }); + }); + + test('It applies responsive classes when multiple are applied', () => { + render( + , + ); + const select = screen.getByLabelText('size test'); + const selectParent = select.closest('div'); + + expect(selectParent?.getAttribute('class')).toContain('size-md'); + expect(selectParent?.getAttribute('class')).toContain('size-md-tablet'); + expect(selectParent?.getAttribute('class')).toContain('size-lg-desktop'); + expect(selectParent?.getAttribute('class')).toContain('size-lg-hd'); + }); + }); +}); diff --git a/src/components/SelectInputNativeFloating/SelectInputNativeFloating.tsx b/src/components/SelectInputNativeFloating/SelectInputNativeFloating.tsx new file mode 100644 index 000000000..9537febd0 --- /dev/null +++ b/src/components/SelectInputNativeFloating/SelectInputNativeFloating.tsx @@ -0,0 +1,239 @@ +import React, { + ChangeEvent, + forwardRef, + MouseEvent, + KeyboardEvent, + FocusEvent, + ForwardRefExoticComponent, + ReactNode, + HTMLProps, +} from 'react'; +import classNames from 'classnames'; +import { ChangeEvent as CleaveChangeEvent } from 'cleave.js/react/props'; +import { ResponsiveProp } from '../../types'; +import { generateResponsiveClasses } from '../../lib/generateResponsiveClasses'; + +import { Box, BoxProps } from '../Box/Box'; +import { HelpText } from '../HelpText/HelpText'; +import { Icon } from '../Icon/Icon'; +import { getAutoCompleteValue } from '../../lib/getAutoCompleteValue'; +import styles from './SelectInputNativeFloating.module.scss'; +import { InputValidationMessage } from '../InputValidationMessage/InputValidationMessage'; + +export type SelectInputNativeFloatingSize = 'md' | 'lg'; +export interface SelectInputNativeFloatingProps { + /** + * The input's id attribute. Used to programmatically tie the input with its label. + */ + id: string; + /** + * Custom content to be displayed above the input. If the label is hidden, will be used to set aria-label attribute. + */ + label: string; + /** + * List of options for the select input. + */ + options: { value: string | number; label: string | number; }[]; + /** + * Callback function to call on change event. + */ + onChange: ( + event: ChangeEvent | CleaveChangeEvent, + ) => void; + /** + * Value of selected option. Should match the value key in the option object. + */ + value: string | number | null; + /** + * Automatically focus the input when the page is loaded. + */ + autoFocus?: boolean; + /** + * Custom class to be added to standard input classes. + */ + className?: string; + /** + * Mark the input field as invalid and display a validation message. + * Pass a string or node to render a validation message below the input. + */ + error?: ReactNode; + /** + * Additional clarifying text to help describe the input + */ + helpText?: ReactNode; + /** + * Props passed directly to the input element of the component + */ + inputProps?: BoxProps & HTMLProps; + /** + * The input's disabled attribute + */ + isDisabled?: boolean; + /** + * The required and aria-required attributes on the input + */ + isRequired?: boolean; + /** + * The input's 'name' attribute. + */ + name?: string; + /** + * Callback function to call on blur event. + */ + onBlur?: (event: FocusEvent) => void; + /** + * Callback function to call when input us cleared. When this is passed, + * the input will display an icon on the right side, for triggering this callback. + */ + onClear?: ( + event: MouseEvent | KeyboardEvent, + ) => void; + /** + * Callback function to call on focus event. + */ + onFocus?: (event: FocusEvent) => void; + /** + * The input placeholder attribute. + */ + placeholder?: string; + /** + * Visual indicator that the field is required, that gets appended to the label + */ + requiredIndicator?: ReactNode; + /** + * The size of the text input. + */ + size?: + | SelectInputNativeFloatingSize + | ResponsiveProp; + /** + * Additional props to be spread to rendered element + */ + [x: string]: any; // eslint-disable-line +} + +export const SelectInputNativeFloating: ForwardRefExoticComponent = forwardRef( + ( + { + id, + label, + onChange, + value, + autoComplete = false, + autoFocus = false, + error = false, + helpText, + inputProps = {}, + isDisabled = false, + isRequired = false, + name = '', + onBlur = undefined, + onClear = undefined, + onFocus = undefined, + options, + placeholder = 'Select...', + requiredIndicator = ' *', + size = 'md', + }, + ref, + ) => { + const placeholderOption = { value: '', label: placeholder }; + const optionsWithPlaceholder = [{ ...placeholderOption }, ...options]; + + const responsiveClasses = generateResponsiveClasses('size', size); + + const inputWrapperClasses = classNames( + 'palmetto-components__variables__form-control', + styles['text-input-wrapper'], + ...responsiveClasses.map(c => styles[c]), + { + [styles.error]: error, + [styles.disabled]: isDisabled, + [styles['is-clearable']]: onClear, + }, + ); + + const clearBtnClasses = classNames(styles['clear-button'], styles.md); + + const renderClearIcon = (): ReactNode => { + const handleKeyPress = ( + event: KeyboardEvent, + ): void => { + if (event.keyCode === 13 && onClear) onClear(event); + }; + + return ( + + ); + }; + + const computedInputProps: SelectInputNativeFloatingProps['inputProps'] = { + ...inputProps, // These are spread first so that we don't have top level props overwritten by the user. + 'aria-required': isRequired, + 'aria-invalid': !!error, + 'aria-label': label, + 'aria-labelledby': label ? `${id}Label` : undefined, + autoComplete: getAutoCompleteValue(autoComplete), + autoFocus, + disabled: isDisabled, + id, + name, + onBlur, + onChange, + onFocus, + required: isRequired, + value: value ?? '', + className: classNames(inputProps.className), + }; + + return ( +
+ + + {optionsWithPlaceholder.map(option => ( + + ))} + + {!!onClear && !!value && renderClearIcon()} + + + {helpText && {helpText}} + {error && error !== true && ( + {error} + )} +
+ ); + }, +); diff --git a/src/components/TextInputFloating/TextInputFloating.Overview.stories.mdx b/src/components/TextInputFloating/TextInputFloating.Overview.stories.mdx index f80d60ce1..d1a39ae79 100644 --- a/src/components/TextInputFloating/TextInputFloating.Overview.stories.mdx +++ b/src/components/TextInputFloating/TextInputFloating.Overview.stories.mdx @@ -52,41 +52,31 @@ Use `TextInputFloating` to create a floating label input field. It is a controll ### Required -Use the `isRequired` prop to set the `required` and `aria-required` on the underlying input element. +Use the `isRequired` prop to display an `*` after the label and set the `required` and `aria-required` on the underlying input element. You can also use the `requiredIndicator` prop to customize the indicator that appears next to the label. {() => { const [value, setValue] = useState(''); return ( - setValue(event.target.value)} - isRequired - /> - ); - }} - - - -Customize the required indicator with the `requiredIndicator` prop. - - - - {() => { - const [value, setValue] = useState(''); - return ( - setValue(event.target.value)} - isRequired - requiredIndicator=" (required)" - /> + + setValue(event.target.value)} + isRequired + /> + setValue(event.target.value)} + isRequired + requiredIndicator=" (required)" + /> + ); }} @@ -261,7 +251,7 @@ All that is required to render a basic version of the TextInput is a unique `id` ### Sizes -There are only two sizes for TextInputFloating, `md` and `lg`, with `md` being the default. +Two sizes, `md` and `lg` are available, with `md` being the default. diff --git a/src/components/TextInputFloating/TextInputFloating.test.tsx b/src/components/TextInputFloating/TextInputFloating.test.tsx index 4986299c8..ef181632c 100644 --- a/src/components/TextInputFloating/TextInputFloating.test.tsx +++ b/src/components/TextInputFloating/TextInputFloating.test.tsx @@ -219,12 +219,6 @@ describe('TextInput', () => { ); expect(document.getElementById(baseProps.id)).toBeInTheDocument(); }); - - test('does not assign "aria-labelledby" attribute when a label is hidden', () => { - render(); - const inputElement = screen.getByLabelText(baseProps.label); - expect(inputElement).not.toHaveAttribute('aria-labelledby'); - }); }); describe('Prefix and Suffix', () => { diff --git a/src/components/TextInputFloating/TextInputFloating.tsx b/src/components/TextInputFloating/TextInputFloating.tsx index e8880f45c..33a55b296 100644 --- a/src/components/TextInputFloating/TextInputFloating.tsx +++ b/src/components/TextInputFloating/TextInputFloating.tsx @@ -15,6 +15,7 @@ import { ResponsiveProp } from '../../types'; import { generateResponsiveClasses } from '../../lib/generateResponsiveClasses'; import { Box, BoxProps } from '../Box/Box'; +import { HelpText } from '../HelpText/HelpText'; import { Icon } from '../Icon/Icon'; import { getAutoCompleteValue } from '../../lib/getAutoCompleteValue'; import styles from './TextInputFloating.module.scss'; @@ -53,10 +54,6 @@ export interface TextInputFloatingProps { * Pass a string or node to render a validation message below the input. */ error?: ReactNode; - /** - * Visually hide the label. - */ - hideLabel?: boolean; /** * Additional clarifying text to help describe the input */ @@ -138,7 +135,6 @@ export const TextInputFloating: ForwardRefExoticComponent + {prefix && ( )} - {helpText && ( - - {helpText} - - )} + {helpText && {helpText}} {error && error !== true && ( {error} )} -
+
); }, ); diff --git a/src/components/Toggle/Toggle.tsx b/src/components/Toggle/Toggle.tsx index 4d83d2f37..d7782877b 100644 --- a/src/components/Toggle/Toggle.tsx +++ b/src/components/Toggle/Toggle.tsx @@ -1,12 +1,11 @@ -import React, { - FC, ChangeEvent, FocusEvent, ReactNode, -} from 'react'; +import React, { FC, ChangeEvent, FocusEvent, ReactNode } from 'react'; import classNames from 'classnames'; import { ResponsiveProp } from '../../types'; import { generateResponsiveClasses } from '../../lib/generateResponsiveClasses'; import { InputValidationMessage } from '../InputValidationMessage/InputValidationMessage'; import { FormLabel } from '../FormLabel/FormLabel'; import { Box, BoxProps } from '../Box/Box'; +import { HelpText } from '../HelpText/HelpText'; import styles from './Toggle.module.scss'; export type ToggleSize = 'sm' | 'md' | 'lg'; @@ -99,17 +98,20 @@ export const Toggle: FC = ({ if (onFocus) onFocus(event); }; - const wrapperClasses = classNames('palmetto-components__variables__form-control', { [styles.disabled]: isDisabled }); + const wrapperClasses = classNames( + 'palmetto-components__variables__form-control', + { [styles.disabled]: isDisabled }, + ); const trackClasses = classNames( styles['toggle-track'], - ...generateResponsiveClasses('track-size', size).map(c => (styles[c])), + ...generateResponsiveClasses('track-size', size).map(c => styles[c]), { [styles.error]: error, }, ); const thumbClasses = classNames( styles['toggle-thumb'], - ...generateResponsiveClasses('thumb-size', size).map(c => (styles[c])), + ...generateResponsiveClasses('thumb-size', size).map(c => styles[c]), ); const inputProps = { @@ -134,35 +136,53 @@ export const Toggle: FC = ({ display: 'flex' as BoxProps['display'], direction: 'row' as BoxProps['direction'], childGap: 'xs' as BoxProps['childGap'], - alignItems: helpText ? 'flex-start' : 'center' as BoxProps['alignItems'], + alignItems: 'flex-start' as BoxProps['alignItems'], isFieldRequired: isRequired, requiredIndicator, }; + const getLabelTopMargin = (toggleSize: ToggleSize) => { + if (toggleSize === 'lg') return 'xs 0 0 0'; + if (toggleSize === 'md') return '2xs 0 0 0'; + return '0'; + }; + + const labelTopMargin = typeof size === 'object' + ? Object.keys(size).reduce( + (a, v) => ({ + ...a, + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + // not sure how to fix this type error? + [v]: getLabelTopMargin(size[v]), + }), + {}, + ) + : getLabelTopMargin(size); + return ( - - {error && error !== true && {error}} + {error && error !== true && ( + {error} + )} ); }; diff --git a/src/components/index.ts b/src/components/index.ts index 28a52945e..730a73949 100644 --- a/src/components/index.ts +++ b/src/components/index.ts @@ -29,6 +29,7 @@ export * from './Formik/FormikTimePickerNative/FormikTimePickerNative'; export * from './Formik/FormikToggle/FormikToggle'; export * from './FormLabel/FormLabel'; export * from './Heading/Heading'; +export * from './HelpText/HelpText'; export * from './Icon/Icon'; export * from './MediaModal/MediaModal'; export * from './Modal/Modal'; diff --git a/src/docs/FormTheming.stories.mdx b/src/docs/FormTheming.stories.mdx index f39e7c00e..c37a1765c 100644 --- a/src/docs/FormTheming.stories.mdx +++ b/src/docs/FormTheming.stories.mdx @@ -5,6 +5,7 @@ import { TextInputFloating } from '../components/TextInputFloating/TextInputFloa import { CheckboxInput } from '../components/CheckboxInput/CheckboxInput'; import { SelectInput } from '../components/SelectInput/SelectInput'; import { SelectInputNative } from '../components/SelectInputNative/SelectInputNative'; +import { SelectInputNativeFloating } from '../components/SelectInputNativeFloating/SelectInputNativeFloating'; import { OptionTileGroup } from '../components/OptionTileGroup/OptionTileGroup'; import { RadioGroup } from '../components/RadioGroup/RadioGroup'; import { TextareaInput } from '../components/TextareaInput/TextareaInput'; @@ -121,6 +122,13 @@ Form controls share tokens since they are designed to have a consistent appearan options={options} value={themeExampleValues.selectValue} /> + handleChange('selectValue', event.target.value)} + options={options} + value={themeExampleValues.selectValue} + /> setValue3(event.target.value)} /> diff --git a/src/styles/variables/forms.scss b/src/styles/variables/forms.scss index ec5b884ac..ae73c6c62 100644 --- a/src/styles/variables/forms.scss +++ b/src/styles/variables/forms.scss @@ -1,14 +1,18 @@ .palmetto-components__variables__form-control { // ----GLOBALS---- - --INTERNAL_form-control-box-shadow-focus: 0 0 0 4px var(--color-brand-primary-200); + --INTERNAL_form-control-box-shadow-focus: 0 0 0 4px + var(--color-brand-primary-200); --INTERNAL_form-control-label-margin: var(--size-spacing-xs); --INTERNAL_form-control-help-margin: var(--size-spacing-2xs); --INTERNAL_form-control-line-height: var(--size-line-height-input); - --INTERNAL_form-control-help-text-font-weight: var(--size-font-weight-regular); + --INTERNAL_form-control-help-text-font-weight: var( + --size-font-weight-regular + ); --INTERNAL_form-control-label-font-weight: var(--size-font-weight-medium); --INTERNAL_form-control-legend-font-weight: var(--size-font-weight-medium); --INTERNAL_form-control-box-shadow: 0 3px 0 rgb(0 0 0 / 5%); --INTERNAL_form-control-font-family: var(--asset-fonts-body); + --INTERNAL_form-control-help-text-font-size: var(--size-font-sm); // --SIZES-- @@ -37,19 +41,29 @@ --INTERNAL_form-control-background-color: var(--color-brand-white-base); --INTERNAL_form-control-background-color-disabled: var(--color-brand-grey-50); --INTERNAL_form-control-background-color-error: var(--color-brand-danger-50); - --INTERNAL_form-control-background-color-selected: var(--color-brand-primary-50); + --INTERNAL_form-control-background-color-selected: var( + --color-brand-primary-50 + ); --INTERNAL_form-control-border-color: var(--color-brand-grey-100); --INTERNAL_form-control-border-color-error: var(--color-brand-danger-100); - --INTERNAL_form-control-border-color-error-disabled: var(--color-brand-danger-100); + --INTERNAL_form-control-border-color-error-disabled: var( + --color-brand-danger-100 + ); --INTERNAL_form-control-border-color-focus: var(--color-brand-grey-600); --INTERNAL_form-control-border-color-hover: var(--color-brand-grey-300); --INTERNAL_form-control-border-color-selected: var(--color-brand-primary-500); - --INTERNAL_form-control-border-color-selected-error: var(--color-brand-danger-500); - --INTERNAL_form-control-border-color-selected-hover: var(--color-brand-primary-500); + --INTERNAL_form-control-border-color-selected-error: var( + --color-brand-danger-500 + ); + --INTERNAL_form-control-border-color-selected-hover: var( + --color-brand-primary-500 + ); --INTERNAL_form-control-font-color: var(--color-brand-grey-700); --INTERNAL_form-control-font-color-disabled: var(--color-brand-grey-300); --INTERNAL_form-control-font-color-error: var(--color-brand-danger-500); - --INTERNAL_form-control-font-color-error-disabled: var(--color-brand-danger-200); + --INTERNAL_form-control-font-color-error-disabled: var( + --color-brand-danger-200 + ); --INTERNAL_form-control-help-text-font-color: var(--color-brand-grey-500); --INTERNAL_form-control-label-font-color: var(--color-brand-grey-700); --INTERNAL_form-control-description-color: var(--color-brand-grey-600); @@ -58,7 +72,9 @@ --INTERNAL_form-control-placeholder-color: var(--color-brand-grey-300); // ----RADIO GROUP---- - --INTERNAL_form-control-radio-group-description-spacing: var(--size-spacing-xs); + --INTERNAL_form-control-radio-group-description-spacing: var( + --size-spacing-xs + ); --INTERNAL_form-control-radio-group-options-spacing: var(--size-spacing-md); // ----SELECT INPUT---- diff --git a/yarn.lock b/yarn.lock index 9de648096..cef06db5a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7942,10 +7942,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001312, caniuse-lite@^1.0.30001317, caniuse-lite@^1.0.30001400, caniuse-lite@^1.0.30001449, caniuse-lite@^1.0.30001523: - version "1.0.30001523" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001523.tgz#b838f70b1a98c556776b998fafb47d2b64146d4f" - integrity sha512-I5q5cisATTPZ1mc588Z//pj/Ox80ERYDfR71YnvY7raS/NOk8xXlZcB0sF7JdqaV//kOaa6aus7lRfpdnt1eBA== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001312, caniuse-lite@^1.0.30001317, caniuse-lite@^1.0.30001400, caniuse-lite@^1.0.30001449: + version "1.0.30001594" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001594.tgz" + integrity sha512-VblSX6nYqyJVs8DKFMldE2IVCJjZ225LW00ydtUWwh5hk9IfkTOffO6r8gJNsH0qqqeAF8KrbMYA2VEwTlGW5g== capture-exit@^2.0.0: version "2.0.0" From 7ff620a9a4f9cc1fedad1aca644da26bcc9e56e1 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 6 Mar 2024 01:26:48 +0000 Subject: [PATCH 19/40] chore(release): 1.0.0-beta.9 [skip ci] # [1.0.0-beta.9](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.8...v1.0.0-beta.9) (2024-03-06) ### Features * **SelectInputNativeFloating:** new component ([#877](https://github.com/palmetto/palmetto-components/issues/877)) ([62dc894](https://github.com/palmetto/palmetto-components/commit/62dc89457ca214aa3f48928bd226a58bb5fc0b0a)) --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a2abe1efb..ba0af5bca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ Changelog +# [1.0.0-beta.9](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.8...v1.0.0-beta.9) (2024-03-06) + + +### Features + +* **SelectInputNativeFloating:** new component ([#877](https://github.com/palmetto/palmetto-components/issues/877)) ([62dc894](https://github.com/palmetto/palmetto-components/commit/62dc89457ca214aa3f48928bd226a58bb5fc0b0a)) + # [1.0.0-beta.8](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.7...v1.0.0-beta.8) (2024-03-01) From c3e0b3a7604ec698b62044aa8dce17018698fd00 Mon Sep 17 00:00:00 2001 From: Nathan Young <1447339+nathanyoung@users.noreply.github.com> Date: Wed, 6 Mar 2024 11:07:05 -0800 Subject: [PATCH 20/40] feat(TextareaInputFloating): new component (#878) * feat(TextareaInputFloating): new component * lint --- ...TextareaInputFloating.Overview.stories.mdx | 228 ++++++++++++ ...xtareaInputFloating.Playground.stories.tsx | 91 +++++ ...xtareaInputFloating.VisualTest.stories.tsx | 58 +++ .../TextareaInputFloating.module.scss | 339 ++++++++++++++++++ .../TextareaInputFloating.test.tsx | 206 +++++++++++ .../TextareaInputFloating.tsx | 215 +++++++++++ src/docs/FormTheming.stories.mdx | 10 + 7 files changed, 1147 insertions(+) create mode 100644 src/components/TextareaInputFloating/TextareaInputFloating.Overview.stories.mdx create mode 100644 src/components/TextareaInputFloating/TextareaInputFloating.Playground.stories.tsx create mode 100644 src/components/TextareaInputFloating/TextareaInputFloating.VisualTest.stories.tsx create mode 100644 src/components/TextareaInputFloating/TextareaInputFloating.module.scss create mode 100644 src/components/TextareaInputFloating/TextareaInputFloating.test.tsx create mode 100644 src/components/TextareaInputFloating/TextareaInputFloating.tsx diff --git a/src/components/TextareaInputFloating/TextareaInputFloating.Overview.stories.mdx b/src/components/TextareaInputFloating/TextareaInputFloating.Overview.stories.mdx new file mode 100644 index 000000000..da0b592a4 --- /dev/null +++ b/src/components/TextareaInputFloating/TextareaInputFloating.Overview.stories.mdx @@ -0,0 +1,228 @@ +import { useState } from 'react'; +import { action } from '@storybook/addon-actions'; +import { Meta, Story, Canvas, ArgsTable } from '@storybook/addon-docs'; +import { TextareaInputFloating } from './TextareaInputFloating'; +import { Box } from '../Box/Box'; +import { Icon } from '../Icon/Icon'; + + + +# TextareaInputFloating + +Use `TextareaInputFloating` to create a floating label input field. It is a controlled component, which means that you need to provide a value and an `onChange` handler to update the value. + + + + {() => { + const [value, setValue] = useState(''); + const [valuePw, setValuePw] = useState(''); + return ( + + setValue(event.target.value)} + /> + + ); + }} + + + +## Props + + + +### Required + +Use the `isRequired` prop to display an `*` after the label and set the `required` and `aria-required` on the underlying input element. You can also use the `requiredIndicator` prop to customize the indicator that appears next to the label. + + + + {() => { + const [value, setValue] = useState(''); + return ( + + setValue(event.target.value)} + isRequired + /> + setValue(event.target.value)} + isRequired + requiredIndicator=" (required)" + /> + + ); + }} + + + +### Help Text + +Use `helpText` to provide additional information about the input field. + + + + {() => { + const [value, setValue] = useState(''); + return ( + setValue(event.target.value)} + helpText="Describe what design changes you would like to make" + /> + ); + }} + + + +### Validation Error + +Use the `error` prop to mark the input as invalid. `error` accepts a `boolean`, `string`, or `node`. + + + + {() => { + const [value, setValue] = useState(''); + const [value2, setValue2] = useState( + 'We are on a mission to stop climate change before we reach an irreversible tipping point. This requires urgency and change on a massive scale but technological advancements have put it within reach.', + ); + return ( + + setValue(event.target.value)} + isRequired + /> + setValue2(event.target.value)} + isRequired + /> + + ); + }} + + + +### Disabled + +Add `isDisabled`to give it a grayed out appearance, remove pointer events, and prevent focusing. + + + + {() => { + const [value, setValue] = useState(''); + const [value2, setValue2] = useState( + 'We are on a mission to stop climate change before we reach an irreversible tipping point. This requires urgency and change on a massive scale but technological advancements have put it within reach.', + ); + return ( + + setValue(event.target.value)} + isDisabled + /> + setValue2(event.target.value)} + isDisabled + /> + + ); + }} + + + +### Sizes + +Two sizes, `md` and `lg` are available, with `md` being the default. + + + + {() => { + const [value, setValue] = useState(''); + return ( + + setValue(event.target.value)} + /> + setValue(event.target.value)} + /> + + ); + }} + + + +## Resize + +The `resize` prop accepts `horizontal`, `vertical`, `both` or `none` to control the users ability to resize the input. + + + + {() => { + const [value, setValue] = useState(''); + return ( + + setValue(event.target.value)} + resize="both" + /> + setValue(event.target.value)} + resize="none" + /> + + ); + }} + + + +## Component Design Tokens + +This component shares component design tokens with all form controls. For a complete list of tokens, see the [Theming Form Controls documentation](/docs/theming-form-controls--custom-theme-form). diff --git a/src/components/TextareaInputFloating/TextareaInputFloating.Playground.stories.tsx b/src/components/TextareaInputFloating/TextareaInputFloating.Playground.stories.tsx new file mode 100644 index 000000000..4f7efe218 --- /dev/null +++ b/src/components/TextareaInputFloating/TextareaInputFloating.Playground.stories.tsx @@ -0,0 +1,91 @@ +import React from 'react'; +import { Meta, Story } from '@storybook/react/types-6-0'; +import { + TextareaInputFloating, + TextareaInputFloatingProps, +} from './TextareaInputFloating'; + +export default { + title: 'Components/TextareaInputFloating/Playground', + component: TextareaInputFloating, + argTypes: { + autoComplete: { + control: 'boolean', + }, + id: { + control: 'text', + }, + label: { + control: 'text', + }, + name: { + control: 'text', + }, + value: { + control: 'text', + }, + autoFocus: { + control: 'boolean', + }, + error: { + control: 'text', + }, + helpText: { + control: 'text', + }, + hideLabel: { + control: 'boolean', + }, + isClearable: { + control: 'boolean', + }, + isDisabled: { + control: 'boolean', + }, + isRequired: { + control: 'boolean', + }, + className: { + control: 'text', + }, + placeholder: { + control: 'text', + }, + prefix: { + control: 'text', + }, + suffix: { + control: 'text', + }, + maxLength: { + control: 'number', + }, + size: { + control: { + type: 'radio', + options: ['md', 'lg'], + }, + }, + requiredIndicator: { + control: 'text', + }, + type: { + control: { + type: 'select', + options: ['text', 'password', 'email', 'tel', 'url', 'search'], + }, + }, + }, +} as Meta; + +const Template: Story = ({ ...args }) => ( + +); + +export const Playground = Template.bind({}); +Playground.args = { + id: 'playgroundTextareaInputFloating ', + label: 'Playground TextareaInputFloating ', + helpText: 'Helpful text', + name: 'playgroundTextareaInputFloating ', +}; diff --git a/src/components/TextareaInputFloating/TextareaInputFloating.VisualTest.stories.tsx b/src/components/TextareaInputFloating/TextareaInputFloating.VisualTest.stories.tsx new file mode 100644 index 000000000..00fe99320 --- /dev/null +++ b/src/components/TextareaInputFloating/TextareaInputFloating.VisualTest.stories.tsx @@ -0,0 +1,58 @@ +import React from 'react'; +import { Meta, Story } from '@storybook/react/types-6-0'; +import { within } from '@storybook/testing-library'; +import { + TextareaInputFloating, + TextareaInputFloatingProps, +} from './TextareaInputFloating'; +import { RESPONSIVE_STORY } from '../../docs/constants'; + +export default { + title: 'Components/TextareaInputFloating/Visual Regression Tests', + component: TextareaInputFloating, +} as Meta; + +const Template: Story = args => ( + {}} // eslint-disable-line + /> +); + +export const DefaultFocus = Template.bind({}); + +DefaultFocus.args = { + label: 'Default Focus', +}; + +DefaultFocus.play = async ({ canvasElement }) => { + const canvas = within(canvasElement); + canvas.getByLabelText('Default Focus').focus(); +}; + +export const ErrorFocus = Template.bind({}); + +ErrorFocus.args = { + label: 'Error Focus', + error: 'validation message', +}; + +ErrorFocus.play = async ({ canvasElement }) => { + const canvas = within(canvasElement); + canvas.getByLabelText('Error Focus').focus(); +}; + +export const ResponsiveSize = Template.bind({}); +ResponsiveSize.args = { + size: { + base: 'md', + tablet: 'lg', + desktop: 'md', + hd: 'lg', + }, + label: 'label', + value: 'responsive', + suffix: '00', + prefix: '$', +}; +ResponsiveSize.parameters = RESPONSIVE_STORY; diff --git a/src/components/TextareaInputFloating/TextareaInputFloating.module.scss b/src/components/TextareaInputFloating/TextareaInputFloating.module.scss new file mode 100644 index 000000000..1c6c2fb27 --- /dev/null +++ b/src/components/TextareaInputFloating/TextareaInputFloating.module.scss @@ -0,0 +1,339 @@ +@import '~@palmetto/palmetto-design-tokens/build/scss/variables-size'; + +@mixin floating-label-minimize-md { + opacity: 0.75; + transform: scale(0.6875) translateY(-0.3rem) translateX(0.15rem); +} + +@mixin floating-label-minimize-lg { + opacity: 0.75; + transform: scale(0.75) translateY(-0.3rem) translateX(0.15rem); +} + +@mixin size-md { + border-radius: var( + --form-control-size-md-border-radius, + var(--INTERNAL_form-control-size-md-border-radius) + ); + font-size: var( + --form-control-size-sm-font-size, + var(--INTERNAL_form-control-size-sm-font-size) + ); + + .text-input-label { + padding: var( + --form-control-size-md-padding, + var(--INTERNAL_form-control-size-md-padding) + ); + } + + textarea { + padding: calc( + var( + --form-control-size-lg-padding, + var(--INTERNAL_form-control-size-lg-padding) + ) + 3px + ) + var( + --form-control-size-md-padding, + var(--INTERNAL_form-control-size-md-padding) + ) + calc( + var( + --form-control-size-md-padding, + var(--INTERNAL_form-control-size-md-padding) + ) - 5px + ) + var( + --form-control-size-md-padding, + var(--INTERNAL_form-control-size-md-padding) + ); + border-radius: var( + --form-control-size-md-border-radius, + var(--INTERNAL_form-control-size-md-border-radius) + ); + + &:focus { + + .text-input-label { + @include floating-label-minimize-md; + } + } + + &:not(:placeholder-shown) ~ label { + @include floating-label-minimize-md; + } + } +} + +%size-md { + @include size-md; +} + +.size-md { + @extend %size-md; +} + +@mixin size-lg { + border-radius: var( + --form-control-size-lg-border-radius, + var(--INTERNAL_form-control-size-lg-border-radius) + ); + font-size: var( + --form-control-size-md-font-size, + var(--INTERNAL_form-control-size-md-font-size) + ); + + .text-input-label { + padding: var( + --form-control-size-lg-padding, + var(--INTERNAL_form-control-size-lg-padding) + ); + } + + textarea { + padding: calc( + var( + --form-control-size-lg-padding, + var(--INTERNAL_form-control-size-lg-padding) + ) + 10px + ) + var( + --form-control-size-lg-padding, + var(--INTERNAL_form-control-size-lg-padding) + ) + calc( + var( + --form-control-size-lg-padding, + var(--INTERNAL_form-control-size-lg-padding) + ) - 5px + ) + var( + --form-control-size-lg-padding, + var(--INTERNAL_form-control-size-lg-padding) + ); + border-radius: var( + --form-control-size-lg-border-radius, + var(--INTERNAL_form-control-size-lg-border-radius) + ); + + &:focus { + + .text-input-label { + @include floating-label-minimize-lg; + } + } + + &:not(:placeholder-shown) ~ label { + @include floating-label-minimize-lg; + } + } +} + +%size-lg { + @include size-lg; +} + +.size-lg { + @extend %size-lg; +} + +// https://stackoverflow.com/questions/262158/disabled-input-text-color-on-ios +%disabled-base { + background-color: var( + --form-control-background-color-disabled, + var(--INTERNAL_form-control-background-color-disabled) + ); + color: var( + --form-control-font-color-disabled, + var(--INTERNAL_form-control-font-color-disabled) + ); + -webkit-text-fill-color: var( + --form-control-font-color-disabled, + var(--INTERNAL_form-control-font-color-disabled) + ); + opacity: 1; + + &:hover { + cursor: not-allowed; + } +} + +.text-input-label { + position: absolute; + top: 0; + font-size: 1rem; + transform-origin: 0 0; + transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out; + font-weight: --form-control-label-font-weight, + var(--INTERNAL_form-control-label-font-weigh); + color: --form-control-label-font-color, + var(--INTERNAL_form-control-label-font-color); + cursor: text; + white-space: nowrap; +} + +.text-input-wrapper { + font-family: var( + --form-control-font-family, + var(--INTERNAL_form-control-font-family) + ); + position: relative; + + &.size-md { + @extend %size-md; + } + + &.size-lg { + @extend %size-lg; + } + + @media (min-width: $size-breakpoint-tablet) { + &.size-md-tablet { + @include size-md; + } + + &.size-lg-tablet { + @include size-lg; + } + } + + @media (min-width: $size-breakpoint-desktop) { + &.size-md-desktop { + @include size-md; + } + + &.size-lg-desktop { + @include size-lg; + } + } + + @media (min-width: $size-breakpoint-hd) { + &.size-md-hd { + @include size-md; + } + + &.size-lg-hd { + @include size-lg; + } + } + + textarea { + box-sizing: border-box; + transition-duration: 300ms; + transition-property: border, background-color; + transition-timing-function: cubic-bezier(0.2, 0.8, 0.4, 1); + border: 1px solid + var( + --form-control-border-color, + var(--INTERNAL_form-control-border-color) + ); + box-shadow: 0 3px 0 rgb(0 0 0 / 5%); + background-color: var( + --form-control-background-color, + var(--INTERNAL_form-control-background-color) + ); + width: 100%; + line-height: var( + --form-control-line-height, + var(--INTERNAL_form-control-line-height) + ); + color: var( + --form-control-font-color, + var(--INTERNAL_form-control-font-color) + ); + + &::placeholder { + color: transparent; + } + + &:focus { + outline: none; + border-color: var( + --form-control-border-color-focus, + var(--INTERNAL_form-control-border-color-focus) + ); + box-shadow: var( + --form-control-box-shadow-focus, + var(--INTERNAL_form-control-box-shadow-focus) + ), + inset 0 0 0 1px + var( + --form-control-border-color-focus, + var(--INTERNAL_form-control-border-color-focus) + ); + } + + &:disabled { + @extend %disabled-base; + + background-color: transparent; + + + .text-input-label { + cursor: not-allowed; + } + } + } + + .error { + box-shadow: var( + --form-control-box-shadow, + var(--INTERNAL_form-control-box-shadow) + ), + inset 0 0 0 1px + var( + --form-control-border-color-error, + var(--INTERNAL_form-control-border-color-error) + ); + background-color: var( + --form-control-background-color-error, + var(--INTERNAL_form-control-background-color-error) + ); + + &:focus-within { + background-color: var( + --form-control-background-color, + var(--INTERNAL_form-control-background-color) + ); + } + + textarea:focus { + outline: none; + background-color: transparent; + } + } + + //Necessary so that inset shadow that we use for border does not get covered by child elements. + &:not(.error) { + > * { + &.disabled { + &:not(textarea) { + box-shadow: inset 0 1px 0 0 + var( + --form-control-box-shadow-focus, + var(--INTERNAL_form-control-box-shadow-focus) + ), + inset 0 -1px 0 0 var(--form-control-border-color-focus, var(--INTERNAL_form-control-border-color-focus)); + } + } + } + } + + &.disabled { + @extend %disabled-base; + } +} + +.textarea-resize-both { + resize: both; +} + +.textarea-resize-horizontal { + resize: horizontal; +} + +.textarea-resize-vertical { + resize: vertical; +} + +.textarea-resize-none { + resize: none; +} diff --git a/src/components/TextareaInputFloating/TextareaInputFloating.test.tsx b/src/components/TextareaInputFloating/TextareaInputFloating.test.tsx new file mode 100644 index 000000000..3c11f49ad --- /dev/null +++ b/src/components/TextareaInputFloating/TextareaInputFloating.test.tsx @@ -0,0 +1,206 @@ +import React from 'react'; +import { render, fireEvent, screen } from '@testing-library/react'; +import { TextareaInputFloating } from './TextareaInputFloating'; + +const baseProps = { + name: 'firstName', + id: 'firstName', + label: 'first name', + value: 'hello', + onChange: () => null, + onClear: undefined, +}; + +describe('TextInput', () => { + describe('Callback Handling', () => { + describe('onChange', () => { + test('onChange event fires callback function', () => { + const mockedHandleChange = jest.fn(() => null); + + render( + , + ); + const inputElement = screen.getByDisplayValue(baseProps.value); + + fireEvent.change(inputElement, { target: { value: 'good bye' } }); + expect(mockedHandleChange).toHaveBeenCalledTimes(1); + }); + + test('Input value is updated properly when upper state changes', () => { + let value = 'hello'; + const mockedHandleChange = jest.fn(event => { + value = event.target.value; + }); + const { rerender } = render( + , + ); + + const inputElement = screen.getByDisplayValue( + 'hello', + ) as HTMLInputElement; + expect(inputElement.value).toBe('hello'); + + fireEvent.change(inputElement, { target: { value: 'good bye' } }); + expect(mockedHandleChange).toHaveBeenCalledTimes(1); + + rerender( + , + ); + expect(inputElement.value).toBe('good bye'); + }); + }); + + describe('onFocus', () => { + test('Input fires onFocus callback', () => { + const mockedHandleFocus = jest.fn(); + render( + , + ); + const inputElement = screen.getByDisplayValue(baseProps.value); + fireEvent.focus(inputElement); + expect(mockedHandleFocus).toBeCalledTimes(1); + }); + }); + + describe('onBlur', () => { + test('Input fires onBlur callback', () => { + const mockedHandleBlur = jest.fn(); + render( + , + ); + const inputElement = screen.getByDisplayValue(baseProps.value); + fireEvent.focus(inputElement); + fireEvent.blur(inputElement); + expect(mockedHandleBlur).toBeCalledTimes(1); + }); + }); + }); + + describe('States', () => { + describe('Label', () => { + test('it renders a label', () => { + render(); + + const labelElement = screen.getByText(baseProps.label); + + expect(labelElement).toBeInTheDocument(); + }); + }); + + describe('Autofocused', () => { + test('Input autofocuses if "autoFocus" prop is set to true', () => { + render(); + const inputElement = screen.getByDisplayValue(baseProps.value); + expect(document.activeElement).toEqual(inputElement); + }); + }); + + describe('Autocomplete', () => { + test('Input correctly assigns autocomplete value of "on" when bool true is provided', () => { + render(); + const inputElement = screen.getByDisplayValue(baseProps.value); + expect(inputElement).toHaveAttribute('autocomplete', 'on'); + }); + + test('Input correctly assigns autocomplete value of "off" when bool false is provided', () => { + render(); + const inputElement = screen.getByDisplayValue('hello'); + expect(inputElement).toHaveAttribute('autocomplete', 'off'); + }); + + test('Input correctly assigns autocomplete specific value when provided', () => { + render(); + const inputElement = screen.getByDisplayValue('hello'); + expect(inputElement).toHaveAttribute('autocomplete', 'email'); + }); + }); + + describe('Required', () => { + test('it correctly assigns the "aria-required" attribute when "isRequired" prop is true', () => { + render(); + + const inputElement = screen.getByDisplayValue('hello'); + + expect(inputElement).toHaveAttribute('aria-required', 'true'); + }); + }); + + describe('Error', () => { + test('Input correctly displays error message if provided', () => { + render( + , + ); + + const validationMessageElement = screen.getByText('You silly goose'); + + expect(validationMessageElement).toBeInTheDocument(); + expect(validationMessageElement).toHaveTextContent('You silly goose'); + }); + }); + + describe('Help Text', () => { + test('Input renders help text', async () => { + const { getByText } = render( + , + ); + + expect(getByText('i am help text')).toBeDefined(); + }); + }); + + describe('Max Length', () => { + test('Input correctly passes maxlength property if prop is passed', async () => { + render(); + + const inputElement = screen.getByLabelText(baseProps.label); + expect(inputElement).toBeInTheDocument(); + expect(inputElement).toHaveAttribute('maxlength'); + expect(inputElement.getAttribute('maxlength')).toBe('3'); + }); + }); + + describe('Name', () => { + test('Input correctly passes name property if prop is passed', async () => { + render( + , + ); + + const inputElement = screen.getByLabelText(baseProps.label); + expect(inputElement).toBeInTheDocument(); + expect(inputElement).toHaveAttribute('name'); + expect(inputElement.getAttribute('name')).toBe('test floating label'); + }); + }); + + describe('Aria-labelledby', () => { + test('assigns the "aria-labelledby" attribute and renders label with correct id, when label is provided', () => { + render(); + const inputElement = screen.getByDisplayValue(baseProps.value); + expect(inputElement).toHaveAttribute( + 'aria-labelledby', + `${baseProps.id}Label`, + ); + expect(document.getElementById(baseProps.id)).toBeInTheDocument(); + }); + }); + }); +}); diff --git a/src/components/TextareaInputFloating/TextareaInputFloating.tsx b/src/components/TextareaInputFloating/TextareaInputFloating.tsx new file mode 100644 index 000000000..52d678967 --- /dev/null +++ b/src/components/TextareaInputFloating/TextareaInputFloating.tsx @@ -0,0 +1,215 @@ +import React, { + ChangeEvent, + forwardRef, + FocusEvent, + ForwardRefExoticComponent, + ReactNode, + HTMLProps, + InputHTMLAttributes, +} from 'react'; +import classNames from 'classnames'; +import { ChangeEvent as CleaveChangeEvent } from 'cleave.js/react/props'; +import { ResponsiveProp } from '../../types'; +import { generateResponsiveClasses } from '../../lib/generateResponsiveClasses'; + +import { Box, BoxProps } from '../Box/Box'; +import { HelpText } from '../HelpText/HelpText'; +import { getAutoCompleteValue } from '../../lib/getAutoCompleteValue'; +import styles from './TextareaInputFloating.module.scss'; +import { InputValidationMessage } from '../InputValidationMessage/InputValidationMessage'; + +export type TextareaInputFloatingSize = 'md' | 'lg'; +export interface TextareaInputFloatingProps { + /** + * The input's id attribute. Used to programmatically tie the input with its label. + */ + id: string; + /** + * Custom content to be displayed above the input. If the label is hidden, will be used to set aria-label attribute. + */ + label: string; + /** + * Callback function to call on change event. + */ + onChange: ( + event: ChangeEvent | CleaveChangeEvent, + ) => void; + /** + * The text value of the input. Required since our Input is a controlled component. + */ + value: InputHTMLAttributes['value']; + /** + * Automatically focus the input when the page is loaded. + */ + autoFocus?: boolean; + /** + * Custom class to be added to standard input classes. + */ + className?: string; + /** + * Mark the input field as invalid and display a validation message. + * Pass a string or node to render a validation message below the input. + */ + error?: ReactNode; + /** + * Additional clarifying text to help describe the input + */ + helpText?: ReactNode; + /** + * Props passed directly to the input element of the component + */ + inputProps?: BoxProps & HTMLProps; + /** + * The input's disabled attribute + */ + isDisabled?: boolean; + /** + * The required and aria-required attributes on the input + */ + isRequired?: boolean; + /** + * The input's 'maxlength' attribute. + * NOTE: initializing the input with a value longer than the desired maxlength will not trim this value. + */ + maxLength?: number; + /** + * The input's 'name' attribute. + */ + name?: string; + /** + * Callback function to call on blur event. + */ + onBlur?: (event: FocusEvent) => void; + /** + * Callback function to call on focus event. + */ + onFocus?: (event: FocusEvent) => void; + /** + * The input placeholder attribute. + */ + placeholder?: string; + /** + * An input helper rendered before the input field value + */ + prefix?: ReactNode; + /** + * Visual indicator that the field is required, that gets appended to the label + */ + requiredIndicator?: ReactNode; + /** + * Textarea resize behavior + */ + resize?: 'vertical' | 'horizontal' | 'none' | 'both'; + /** + * number of visible text lines for the control. + */ + rows?: number; + /** + * The size of the text input. + */ + size?: TextareaInputFloatingSize | ResponsiveProp; + /** + * An input helper rendered after the input field value + */ + suffix?: ReactNode; + /** + * The input 'type' value. Defaults to type 'text'. + */ + type?: InputHTMLAttributes['type']; + /** + * Additional props to be spread to rendered element + */ + [x: string]: any; // eslint-disable-line +} + +export const TextareaInputFloating: ForwardRefExoticComponent = forwardRef( + ( + { + id, + label, + onChange, + value, + autoComplete = false, + autoFocus = false, + className, + error = false, + helpText, + inputProps = {}, + isDisabled = false, + isRequired = false, + maxLength = undefined, + name = '', + onBlur = undefined, + onFocus = undefined, + placeholder = ' ', + requiredIndicator = ' *', + resize = 'vertical', + rows = 5, + size = 'md', + type = 'text', + }, + ref, + ) => { + const responsiveClasses = generateResponsiveClasses('size', size); + + const inputWrapperClasses = classNames( + 'palmetto-components__variables__form-control', + styles['text-input-wrapper'], + ...responsiveClasses.map(c => styles[c]), + { + [styles.disabled]: isDisabled, + }, + ); + + const computedInputProps: TextareaInputFloatingProps['inputProps'] = { + ...inputProps, // These are spread first so that we don't have top level props overwritten by the user. + 'aria-required': isRequired, + 'aria-invalid': !!error, + 'aria-label': label, + 'aria-labelledby': label ? `${id}Label` : undefined, + autoComplete: getAutoCompleteValue(autoComplete), + autoFocus, + className: classNames(styles[`textarea-resize-${resize}`], { + [styles.error]: error, + }), + disabled: isDisabled, + id, + maxLength, + name, + onBlur, + onChange, + onFocus, + placeholder, + required: isRequired, + rows, + type, + value, + }; + + return ( + + + + + + {helpText && {helpText}} + {error && error !== true && ( + {error} + )} + + ); + }, +); diff --git a/src/docs/FormTheming.stories.mdx b/src/docs/FormTheming.stories.mdx index c37a1765c..9603273ca 100644 --- a/src/docs/FormTheming.stories.mdx +++ b/src/docs/FormTheming.stories.mdx @@ -9,6 +9,7 @@ import { SelectInputNativeFloating } from '../components/SelectInputNativeFloati import { OptionTileGroup } from '../components/OptionTileGroup/OptionTileGroup'; import { RadioGroup } from '../components/RadioGroup/RadioGroup'; import { TextareaInput } from '../components/TextareaInput/TextareaInput'; +import { TextareaInputFloating } from '../components/TextareaInputFloating/TextareaInputFloating'; import { Toggle } from '../components/Toggle/Toggle'; import { Button } from '../components/Button/Button'; import { Box } from '../components/Box/Box'; @@ -148,6 +149,13 @@ Form controls share tokens since they are designed to have a consistent appearan value={themeExampleValues.textareaValue} onChange={e => handleChange('textareaValue', e.target.value)} /> + handleChange('textareaValue', e.target.value)} + /> +import {TextareaInputFloating} from +'src/components/TextareaInputFloating/TextareaInputFloating'; From 8ae79e4a4d1f472ef26ffaabd0de5433035afda6 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 6 Mar 2024 19:09:41 +0000 Subject: [PATCH 21/40] chore(release): 1.0.0-beta.10 [skip ci] # [1.0.0-beta.10](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.9...v1.0.0-beta.10) (2024-03-06) ### Features * **TextareaInputFloating:** new component ([#878](https://github.com/palmetto/palmetto-components/issues/878)) ([c3e0b3a](https://github.com/palmetto/palmetto-components/commit/c3e0b3a7604ec698b62044aa8dce17018698fd00)) --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ba0af5bca..478537be3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ Changelog +# [1.0.0-beta.10](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.9...v1.0.0-beta.10) (2024-03-06) + + +### Features + +* **TextareaInputFloating:** new component ([#878](https://github.com/palmetto/palmetto-components/issues/878)) ([c3e0b3a](https://github.com/palmetto/palmetto-components/commit/c3e0b3a7604ec698b62044aa8dce17018698fd00)) + # [1.0.0-beta.9](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.8...v1.0.0-beta.9) (2024-03-06) From d6de673942402549ac163d43298dbd7fb1115436 Mon Sep 17 00:00:00 2001 From: Nathan Young <1447339+nathanyoung@users.noreply.github.com> Date: Wed, 6 Mar 2024 14:51:04 -0800 Subject: [PATCH 22/40] docs: floating and default input examples (#879) --- .../FormControls.VisualTests.stories.tsx | 237 +++++ src/stories/FormControls.stories.mdx | 862 ++---------------- 2 files changed, 307 insertions(+), 792 deletions(-) create mode 100644 src/stories/FormControls.VisualTests.stories.tsx diff --git a/src/stories/FormControls.VisualTests.stories.tsx b/src/stories/FormControls.VisualTests.stories.tsx new file mode 100644 index 000000000..6cbc298c4 --- /dev/null +++ b/src/stories/FormControls.VisualTests.stories.tsx @@ -0,0 +1,237 @@ +import React, { useState } from 'react'; +import { Meta, Story } from '@storybook/react/types-6-0'; +import { Box } from '../components/Box/Box'; +import { SelectInput } from '../components/SelectInput/SelectInput'; +import { SelectInputNative } from '../components/SelectInputNative/SelectInputNative'; +import { TextInput } from '../components/TextInput/TextInput'; +import { TextInputFloating } from '../components/TextInputFloating/TextInputFloating'; +import { Toggle } from '../components/Toggle/Toggle'; + +export default { + title: 'Patterns/Form Controls/Visual Regression Tests', +} as Meta; + +const Template: Story = args => { + const [formValues, setFormValues] = useState({ + textInputSm: '', + textInputMd: '', + textInputLg: '', + selectInput: { + value: 'chocolate', + label: 'Chocolate', + }, + toggleValue: false, + }); + const options = [ + { + value: 'chocolate', + label: 'Chocolate', + }, + { + value: 'strawberry', + label: 'Strawberry', + }, + { + value: 'vanilla', + label: 'Vanilla', + }, + ]; + const handleChange = (key: string, value: unknown) => { + setFormValues(prevFields => ({ + ...prevFields, + [key]: value, + })); + }; + return ( + + + + + handleChange('textInputMd', event.target.value)} + {...args} + /> + + + handleChange('textInputLg', event.target.value)} + {...args} + /> + + + + + handleChange('textInputSm', event.target.value)} + {...args} + /> + + + handleChange('textInputMd', event.target.value)} + {...args} + /> + + + handleChange('textInputLg', event.target.value)} + {...args} + /> + + + + handleChange('selectInput', event.target.value)} + options={options} + value={formValues.selectInput.value} + size="sm" + {...args} + /> + handleChange('selectInput', event.target.value)} + options={options} + value={formValues.selectInput.value} + size="md" + {...args} + /> + handleChange('selectInput', event.target.value)} + options={options} + value={formValues.selectInput.value} + size="lg" + {...args} + /> + + + handleChange('selectInput', event.target.value)} + options={options} + value={formValues.selectInput} + size="sm" + {...args} + /> + handleChange('selectInput', event.target.value)} + options={options} + value={formValues.selectInput} + size="md" + {...args} + /> + handleChange('selectInput', event.target.value)} + options={options} + value={formValues.selectInput} + size="lg" + {...args} + /> + + + handleChange('selectInput', event.target.value)} + options={options} + value={formValues.selectInput} + isMulti + size="sm" + {...args} + /> + handleChange('selectInput', event.target.value)} + options={options} + value={formValues.selectInput} + isMulti + size="md" + {...args} + /> + handleChange('selectInput', event.target.value)} + options={options} + value={formValues.selectInput} + isMulti + size="lg" + {...args} + /> + + + handleChange('toggleValue', event.target.checked)} + isChecked={formValues.toggleValue} + size="sm" + {...args} + /> + handleChange('toggleValue', event.target.checked)} + isChecked={formValues.toggleValue} + size="md" + {...args} + /> + handleChange('toggleValue', event.target.checked)} + isChecked={formValues.toggleValue} + size="lg" + {...args} + /> + + + ); +}; + +export const SizesWithoutLabels = Template.bind({}); +SizesWithoutLabels.args = { hideLabel: true }; + +export const SizesWithoutLabelsAndErrors = Template.bind({}); +SizesWithoutLabelsAndErrors.args = { + hideLabel: true, + error: 'validation error message', +}; + +export const SizesWithLabels = Template.bind({}); + +export const SizesWithLabelsAndErrors = Template.bind({}); +SizesWithLabelsAndErrors.args = { error: 'validation error message' }; diff --git a/src/stories/FormControls.stories.mdx b/src/stories/FormControls.stories.mdx index 7770bc8cb..3d901905c 100644 --- a/src/stories/FormControls.stories.mdx +++ b/src/stories/FormControls.stories.mdx @@ -2,30 +2,28 @@ import { useState } from 'react'; import { action } from '@storybook/addon-actions'; import { Meta, Story, Canvas, ArgsTable } from '@storybook/addon-docs'; import { Box } from '../components/Box/Box'; -import { SelectInput } from '../components/SelectInput/SelectInput'; -import { SelectInputNative } from '../components/SelectInputNative/SelectInputNative'; import { Button } from '../components/Button/Button'; import { TextInput } from '../components/TextInput/TextInput'; import { TextInputFloating } from '../components/TextInputFloating/TextInputFloating'; +import { TextareaInput } from '../components/TextareaInput/TextareaInput'; +import { TextareaInputFloating } from '../components/TextareaInputFloating/TextareaInputFloating'; +import { SelectInputNative } from '../components/SelectInputNative/SelectInputNative'; +import { SelectInputNativeFloating } from '../components/SelectInputNativeFloating/SelectInputNativeFloating'; import { Toggle } from '../components/Toggle/Toggle'; -## Sizes +## Floating Inputs -Sizes for form controls likes inputs and buttons, should match so that they can be placed inline. +Try not to mix Floating style inputs with regular inputs in the same form. - + {() => { const [formValues, setFormValues] = useState({ - textInputSm: '', - textInputMd: '', - textInputLg: '', - selectInput: { - value: 'chocolate', - label: 'Chocolate', - }, + emailInput: '', + passwordInput: '', + notesInput: '', toggleValue: false, }); const options = [ @@ -49,438 +47,53 @@ Sizes for form controls likes inputs and buttons, should match so that they can })); }; return ( - - - - - - handleChange('textInputMd', event.target.value) - } - /> - - - - handleChange('textInputLg', event.target.value) - } - /> - - - - - - handleChange('textInputSm', event.target.value) - } - /> - - - - handleChange('textInputMd', event.target.value) - } - /> - - - - handleChange('textInputLg', event.target.value) - } - /> - - - - - - - - - - handleChange('selectInput', event.target.value) - } - options={options} - value={formValues.selectInput} - hideLabel - size="sm" - /> - - handleChange('selectInput', event.target.value) - } - options={options} - value={formValues.selectInput} - hideLabel - size="md" - /> - - handleChange('selectInput', event.target.value) - } - options={options} - value={formValues.selectInput} - hideLabel - size="lg" - /> - - - - handleChange('selectInput', event.target.value) - } - options={options} - value={formValues.selectInput} - hideLabel - size="sm" - /> - - handleChange('selectInput', event.target.value) - } - options={options} - value={formValues.selectInput} - hideLabel - size="md" - /> - - handleChange('selectInput', event.target.value) - } - options={options} - value={formValues.selectInput} - hideLabel - size="lg" - /> - - - - handleChange('selectInput', event.target.value) - } - options={options} - value={formValues.selectInput} - hideLabel - isMulti - size="sm" - /> - - handleChange('selectInput', event.target.value) - } - options={options} - value={formValues.selectInput} - hideLabel - isMulti - size="md" - /> - - handleChange('selectInput', event.target.value) - } - options={options} - value={formValues.selectInput} - hideLabel - isMulti - size="lg" - /> - - - - - handleChange('toggleValue', event.target.checked) - } - isChecked={formValues.toggleValue} - size="sm" - /> - - - - handleChange('toggleValue', event.target.checked) - } - isChecked={formValues.toggleValue} - size="md" - /> - - - - handleChange('toggleValue', event.target.checked) - } - isChecked={formValues.toggleValue} - size="lg" - /> - - + + handleChange('emailInput', event.target.value)} + /> + + handleChange('passwordInput', event.target.value) + } + /> + handleChange('notesInput', event.target.value)} + /> + handleChange('selectInput', event.target.value)} + options={options} + value={formValues.selectInput} + size="md" + /> ); }} -## Sizes with Labels - -Inline form sizes with labels. - - - - {() => { - const [formValues, setFormValues] = useState({ - textInputSm: '', - textInputMd: '', - textInputLg: '', - selectInput: { - value: 'chocolate', - label: 'Chocolate', - }, - toggleValue: false, - }); - const options = [ - { - value: 'chocolate', - label: 'Chocolate', - }, - { - value: 'strawberry', - label: 'Strawberry', - }, - { - value: 'vanilla', - label: 'Vanilla', - }, - ]; - const handleChange = (key, value) => { - setFormValues(prevFields => ({ - ...prevFields, - [key]: value, - })); - }; - return ( -
- - - - - handleChange('textInputSm', event.target.value) - } - /> - - - - - - - handleChange('selectInput', event.target.value) - } - options={options} - value={formValues.selectInput} - size="sm" - /> - - - - handleChange('toggleValue', event.target.checked) - } - isChecked={formValues.toggleValue} - size="sm" - /> - - - - - - handleChange('textInputMd', event.target.value) - } - /> - - - - handleChange('textInputMd', event.target.value) - } - /> - - - - - - - handleChange('selectInput', event.target.value) - } - options={options} - value={formValues.selectInput} - size="md" - /> - - - - handleChange('toggleValue', event.target.checked) - } - isChecked={formValues.toggleValue} - size="md" - /> - - - - - - handleChange('textInputLg', event.target.value) - } - /> - - - - handleChange('textInputLg', event.target.value) - } - /> - - - - - - - handleChange('selectInput', event.target.value) - } - options={options} - value={formValues.selectInput} - size="lg" - /> - - - - handleChange('toggleValue', event.target.checked) - } - isChecked={formValues.toggleValue} - size="lg" - /> - - -
- ); - }} -
-
- -## Sizes with Error States +## Default Inputs -Inline form sizes with error states. +All of the inputs in this section are using the default style where the label is above the input. - + {() => { const [formValues, setFormValues] = useState({ - textInputSm: '', - textInputMd: '', - textInputLg: '', - selectInput: { - value: 'chocolate', - label: 'Chocolate', - }, + emailInput: '', + passwordInput: '', + notesInput: '', toggleValue: false, }); const options = [ @@ -503,371 +116,36 @@ Inline form sizes with error states. [key]: value, })); }; - const errorMsg = 'Error message'; - return ( -
- - - - - handleChange('textInputSm', event.target.value) - } - error={errorMsg} - /> - - - - - - - handleChange('selectInput', event.target.value) - } - options={options} - value={formValues.selectInput} - size="sm" - error={errorMsg} - /> - - - - handleChange('toggleValue', event.target.checked) - } - isChecked={formValues.toggleValue} - size="sm" - error={errorMsg} - /> - - - - - - handleChange('textInputMd', event.target.value) - } - error={errorMsg} - /> - - - - handleChange('textInputMd', event.target.value) - } - error={errorMsg} - /> - - - - - - - handleChange('selectInput', event.target.value) - } - options={options} - value={formValues.selectInput} - size="md" - error={errorMsg} - /> - - - - handleChange('toggleValue', event.target.checked) - } - isChecked={formValues.toggleValue} - size="md" - error={errorMsg} - /> - - - - - - handleChange('textInputLg', event.target.value) - } - error={errorMsg} - /> - - - - handleChange('textInputLg', event.target.value) - } - error={errorMsg} - /> - - - - - - - handleChange('selectInput', event.target.value) - } - options={options} - value={formValues.selectInput} - size="lg" - error={errorMsg} - /> - - - - handleChange('toggleValue', event.target.checked) - } - isChecked={formValues.toggleValue} - size="lg" - error={errorMsg} - /> - - -
- ); - }} -
-
- -## Sizes with Labels and Error States - -Inline form sizes with labels and error states. - - - - {() => { - const [value, setValue] = useState(''); - const [value1, setValue1] = useState(''); - const [value2, setValue2] = useState(''); - const [value3, setValue3] = useState(''); - const [valueErrorLabel4, setValueErrorLabel4] = useState(); - const options = [ - { - value: 'chocolate', - label: 'Chocolate', - }, - { - value: 'strawberry', - label: 'Strawberry', - }, - { - value: 'vanilla', - label: 'Vanilla', - }, - ]; - const errorMsg = 'Error message'; - return ( -
- - - setValue(event.target.value)} - /> - - - - - - setValue3(event.target.value)} - options={options} - value={value3} - size="sm" - error={errorMsg} - /> - - - setValueErrorLabel4(event.target.checked)} - isChecked={valueErrorLabel4} - size="sm" - error={errorMsg} - /> - - - - - setValue1(event.target.value)} - /> - - - - - - setValue3(event.target.value)} - options={options} - value={value3} - size="md" - error={errorMsg} - /> - - - setValueErrorLabel4(event.target.checked)} - isChecked={valueErrorLabel4} - size="md" - error={errorMsg} - /> - - - - - setValue2(event.target.value)} - /> - - - - - - setValue3(event.target.value)} - options={options} - value={value3} - size="lg" - error={errorMsg} - /> - - - setValueErrorLabel4(event.target.checked)} - isChecked={valueErrorLabel4} - size="lg" - error={errorMsg} - /> - - -
- ); - }} -
-
- - - - {() => { - const [value, setValue] = useState(''); - const [value1, setValue1] = useState(''); - const [value2, setValue2] = useState(''); - const [value3, setValue3] = useState(''); - const options = [ - { - value: 'chocolate', - label: 'Chocolate', - }, - { - value: 'strawberry', - label: 'Strawberry', - }, - { - value: 'vanilla', - label: 'Vanilla', - }, - ]; return ( - + setValue(event.target.value)} + label="Email" + id="defaultEmailInput" + value={formValues.textInputMd} + onChange={event => handleChange('emailInput', event.target.value)} /> - setValue1(event.target.value)} - options={options} - value={value1} + + handleChange('passwordInput', event.target.value) + } + /> + handleChange('notesInput', event.target.value)} /> setValue2(event.target.value)} + id="defaultSelectInputNative" + label="Flavor" + onChange={event => handleChange('selectInput', event.target.value)} options={options} - value={value2} - /> - setValue3(event.target.value)} + value={formValues.selectInput} + size="md" /> ); From 5a819dac3f1e4339dba9ae20cda27622fdae27b8 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 6 Mar 2024 22:53:42 +0000 Subject: [PATCH 23/40] chore(release): 1.0.0-beta.11 [skip ci] # [1.0.0-beta.11](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.10...v1.0.0-beta.11) (2024-03-06) --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 478537be3..6154ae54b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ Changelog +# [1.0.0-beta.11](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.10...v1.0.0-beta.11) (2024-03-06) + # [1.0.0-beta.10](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.9...v1.0.0-beta.10) (2024-03-06) From b13ab19d1c47b42b4e4e0a54fe0c67e4738c5198 Mon Sep 17 00:00:00 2001 From: Nathan Young <1447339+nathanyoung@users.noreply.github.com> Date: Wed, 6 Mar 2024 16:08:21 -0800 Subject: [PATCH 24/40] fix: rename floating inputs to inset (#880) * cleanup * fix: rename floating inputs to inset * lint --- ...lectInputNativeInset.Overview.stories.mdx} | 32 +++++------ ...ctInputNativeInset.Playground.stories.tsx} | 20 +++---- .../SelectInputNativeInset.module.scss} | 0 .../SelectInputNativeInset.test.tsx} | 32 +++++------ .../SelectInputNativeInset.tsx} | 14 ++--- .../TextInputInset.Overview.stories.mdx} | 46 +++++++-------- .../TextInputInset.Playground.stories.tsx} | 16 +++--- .../TextInputInset.VisualTest.stories.tsx} | 26 ++++----- .../TextInputInset.module.scss} | 0 .../TextInputInset.test.tsx} | 56 +++++++------------ .../TextInputInset.tsx} | 12 ++-- .../TextareaInputInset.Overview.stories.mdx} | 36 ++++++------ ...TextareaInputInset.Playground.stories.tsx} | 41 +++++--------- ...TextareaInputInset.VisualTest.stories.tsx} | 14 ++--- .../TextareaInputInset.module.scss} | 0 .../TextareaInputInset.test.tsx} | 41 ++++++-------- .../TextareaInputInset.tsx} | 12 ++-- src/components/index.ts | 4 +- src/docs/FormTheming.stories.mdx | 29 +++++----- .../FormControls.VisualTests.stories.tsx | 10 ++-- src/stories/FormControls.stories.mdx | 20 +++---- 21 files changed, 213 insertions(+), 248 deletions(-) rename src/components/{SelectInputNativeFloating/SelectInputNativeFloating.Overview.stories.mdx => SelectInputNativeInset/SelectInputNativeInset.Overview.stories.mdx} (88%) rename src/components/{SelectInputNativeFloating/SelectInputNativeFloating.Playground.stories.tsx => SelectInputNativeInset/SelectInputNativeInset.Playground.stories.tsx} (73%) rename src/components/{SelectInputNativeFloating/SelectInputNativeFloating.module.scss => SelectInputNativeInset/SelectInputNativeInset.module.scss} (100%) rename src/components/{SelectInputNativeFloating/SelectInputNativeFloating.test.tsx => SelectInputNativeInset/SelectInputNativeInset.test.tsx} (93%) rename src/components/{SelectInputNativeFloating/SelectInputNativeFloating.tsx => SelectInputNativeInset/SelectInputNativeInset.tsx} (92%) rename src/components/{TextInputFloating/TextInputFloating.Overview.stories.mdx => TextInputInset/TextInputInset.Overview.stories.mdx} (89%) rename src/components/{TextInputFloating/TextInputFloating.Playground.stories.tsx => TextInputInset/TextInputInset.Playground.stories.tsx} (77%) rename src/components/{TextInputFloating/TextInputFloating.VisualTest.stories.tsx => TextInputInset/TextInputInset.VisualTest.stories.tsx} (89%) rename src/components/{TextInputFloating/TextInputFloating.module.scss => TextInputInset/TextInputInset.module.scss} (100%) rename src/components/{TextInputFloating/TextInputFloating.test.tsx => TextInputInset/TextInputInset.test.tsx} (80%) rename src/components/{TextInputFloating/TextInputFloating.tsx => TextInputInset/TextInputInset.tsx} (94%) rename src/components/{TextareaInputFloating/TextareaInputFloating.Overview.stories.mdx => TextareaInputInset/TextareaInputInset.Overview.stories.mdx} (87%) rename src/components/{TextareaInputFloating/TextareaInputFloating.Playground.stories.tsx => TextareaInputInset/TextareaInputInset.Playground.stories.tsx} (57%) rename src/components/{TextareaInputFloating/TextareaInputFloating.VisualTest.stories.tsx => TextareaInputInset/TextareaInputInset.VisualTest.stories.tsx} (79%) rename src/components/{TextareaInputFloating/TextareaInputFloating.module.scss => TextareaInputInset/TextareaInputInset.module.scss} (100%) rename src/components/{TextareaInputFloating/TextareaInputFloating.test.tsx => TextareaInputInset/TextareaInputInset.test.tsx} (83%) rename src/components/{TextareaInputFloating/TextareaInputFloating.tsx => TextareaInputInset/TextareaInputInset.tsx} (92%) diff --git a/src/components/SelectInputNativeFloating/SelectInputNativeFloating.Overview.stories.mdx b/src/components/SelectInputNativeInset/SelectInputNativeInset.Overview.stories.mdx similarity index 88% rename from src/components/SelectInputNativeFloating/SelectInputNativeFloating.Overview.stories.mdx rename to src/components/SelectInputNativeInset/SelectInputNativeInset.Overview.stories.mdx index 89d5aad44..689cba3b2 100644 --- a/src/components/SelectInputNativeFloating/SelectInputNativeFloating.Overview.stories.mdx +++ b/src/components/SelectInputNativeInset/SelectInputNativeInset.Overview.stories.mdx @@ -1,22 +1,22 @@ import { useState } from 'react'; import { action } from '@storybook/addon-actions'; import { Meta, Story, Canvas, ArgsTable } from '@storybook/addon-docs'; -import { SelectInputNativeFloating } from './SelectInputNativeFloating'; +import { SelectInputNativeInset } from './SelectInputNativeInset'; import { RESPONSIVE_STORY } from '../../docs/constants'; import { Box } from '../Box/Box'; import { Icon } from '../Icon/Icon'; -# SelectInputNativeFloating +# SelectInputNativeInset -Use `SelectInputNativeFloating` to create a floating label input field, but unlike `TextInputFloating` they always show the `label` in the floated state. It is a controlled component, which means that you need to provide a value and an `onChange` handler to update the value. +Use `SelectInputNativeInset` to create a floating label input field, but unlike `TextInputInset` they always show the `label` in the floated state. It is a controlled component, which means that you need to provide a value and an `onChange` handler to update the value. { @@ -52,7 +52,7 @@ Use `SelectInputNativeFloating` to create a floating label input field, but unli ## Props - + ### Required @@ -69,7 +69,7 @@ Use the `isRequired` prop to display an `*` after the label and set the `require ]; return ( - { @@ -79,7 +79,7 @@ Use the `isRequired` prop to display an `*` after the label and set the `require value={value} isRequired /> - { @@ -110,7 +110,7 @@ Use `helpText` to provide additional information about the input field. { value: 'Tesla', label: 'Tesla' }, ]; return ( - { @@ -199,7 +199,7 @@ a callback function when the clear icon is clicked, which can then be handled to { value: 'option3', label: 'Option 3' }, ]; return ( - { @@ -229,14 +229,14 @@ Two sizes, `md` and `lg` are available, with `md` being the default. ]; return ( - setValue(event.target.value)} options={options} /> - setValue(event.target.value)} options={options} /> - = ({ ...args }) => ( - +const Template: Story = ({ ...args }) => ( + ); export const Playground = Template.bind({}); Playground.args = { - id: 'playgroundSelectInputNativeFloating', - label: 'Playground SelectInputNativeFloating', - name: 'playgroundSelectInputNativeFloating', + id: 'playgroundSelectInputNativeInset', + label: 'Playground SelectInputNativeInset', + name: 'playgroundSelectInputNativeInset', options: [ { value: 'chocolate', label: 'Chocolate' }, { value: 'strawberry', label: 'Strawberry' }, diff --git a/src/components/SelectInputNativeFloating/SelectInputNativeFloating.module.scss b/src/components/SelectInputNativeInset/SelectInputNativeInset.module.scss similarity index 100% rename from src/components/SelectInputNativeFloating/SelectInputNativeFloating.module.scss rename to src/components/SelectInputNativeInset/SelectInputNativeInset.module.scss diff --git a/src/components/SelectInputNativeFloating/SelectInputNativeFloating.test.tsx b/src/components/SelectInputNativeInset/SelectInputNativeInset.test.tsx similarity index 93% rename from src/components/SelectInputNativeFloating/SelectInputNativeFloating.test.tsx rename to src/components/SelectInputNativeInset/SelectInputNativeInset.test.tsx index e47ae9a9e..9d062e426 100644 --- a/src/components/SelectInputNativeFloating/SelectInputNativeFloating.test.tsx +++ b/src/components/SelectInputNativeInset/SelectInputNativeInset.test.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { render, fireEvent, screen } from '@testing-library/react'; import { BreakpointSize } from '../../types'; -import { SelectInputNativeFloating } from './SelectInputNativeFloating'; +import { SelectInputNativeInset } from './SelectInputNativeInset'; const selectOptions = [ { value: 'chocolate', label: 'Chocolate' }, @@ -9,13 +9,13 @@ const selectOptions = [ { value: 'vanilla', label: 'Vanilla' }, ]; -describe('SelectInputNativeFloating', () => { +describe('SelectInputNativeInset', () => { describe('Callback Handling', () => { test('it fires onChange callback on change', async () => { const mockedHandleChange = jest.fn(); const { getByLabelText } = render( - { const mockedHandleFocus = jest.fn(); render( - { const mockedHandleBlur = jest.fn(); render( - { test('onClear prop renders clear icon when input has value', () => { const mockedHandleChange = jest.fn(); render( - { const mockedHandleClear = jest.fn(() => null); render( - { const mockedHandleChange = jest.fn(); render( - { test('assigns the "aria-labelledby" attribute and renders label correct id, when a label is provided', () => { render( - { const mockedHandleChange = jest.fn(); render( - { const mockedHandleChange = jest.fn(); render( - { const mockedHandleChange = jest.fn(); render( - { const mockedHandleChange = jest.fn(); render( - { sizes.forEach(size => { test(`it has a ${size} class applied to it`, () => { render( - { breakpoints.forEach(breakpoint => { test(`it applies responsive classes for breakpoint: ${breakpoint} and size: ${size}`, () => { render( - { test('It applies responsive classes when multiple are applied', () => { render( - ; + | SelectInputNativeInsetSize + | ResponsiveProp; /** * Additional props to be spread to rendered element */ [x: string]: any; // eslint-disable-line } -export const SelectInputNativeFloating: ForwardRefExoticComponent = forwardRef( +export const SelectInputNativeInset: ForwardRefExoticComponent = forwardRef( ( { id, @@ -176,7 +176,7 @@ export const SelectInputNativeFloating: ForwardRefExoticComponent -# TextInputFloating +# TextInputInset -Use `TextInputFloating` to create a floating label input field. It is a controlled component, which means that you need to provide a value and an `onChange` handler to update the value. +Use `TextInputInset` to create a floating label input field. It is a controlled component, which means that you need to provide a value and an `onChange` handler to update the value. @@ -24,14 +24,14 @@ Use `TextInputFloating` to create a floating label input field. It is a controll const [valuePw, setValuePw] = useState(''); return ( - setValue(event.target.value)} /> - + ### Required @@ -60,7 +60,7 @@ Use the `isRequired` prop to display an `*` after the label and set the `require const [value, setValue] = useState(''); return ( - setValue(event.target.value)} isRequired /> - { const [value, setValue] = useState(''); return ( - - setValue(event.target.value)} isRequired /> - - setValue(event.target.value)} isDisabled /> - { const [value, setValue] = useState('clear me'); return ( - - - setPrefixValue1(event.target.value)} prefix="@" /> - - setPrefixValue3(event.target.value)} suffix={} /> - - setValue1(event.target.value)} /> - = ({ ...args }) => ( - +const Template: Story = ({ ...args }) => ( + ); export const Playground = Template.bind({}); Playground.args = { - id: 'playgroundTextInputFloating ', - label: 'Playground TextInputFloating ', + id: 'playgroundTextInputInset ', + label: 'Playground TextInputInset ', helpText: 'Helpful text', - name: 'playgroundTextInputFloating ', + name: 'playgroundTextInputInset ', }; diff --git a/src/components/TextInputFloating/TextInputFloating.VisualTest.stories.tsx b/src/components/TextInputInset/TextInputInset.VisualTest.stories.tsx similarity index 89% rename from src/components/TextInputFloating/TextInputFloating.VisualTest.stories.tsx rename to src/components/TextInputInset/TextInputInset.VisualTest.stories.tsx index 96c4af67a..912537330 100644 --- a/src/components/TextInputFloating/TextInputFloating.VisualTest.stories.tsx +++ b/src/components/TextInputInset/TextInputInset.VisualTest.stories.tsx @@ -1,18 +1,18 @@ import React, { ReactElement, useState } from 'react'; import { Meta, Story } from '@storybook/react/types-6-0'; import { within } from '@storybook/testing-library'; -import { TextInputFloating, TextInputFloatingProps } from './TextInputFloating'; +import { TextInputInset, TextInputInsetProps } from './TextInputInset'; import { Icon } from '../Icon/Icon'; import { Box } from '../Box/Box'; import { RESPONSIVE_STORY } from '../../docs/constants'; export default { - title: 'Components/TextInputFloating/Visual Regression Tests', - component: TextInputFloating, + title: 'Components/TextInputInset/Visual Regression Tests', + component: TextInputInset, } as Meta; -const Template: Story = args => ( - = args => ( + {}} // eslint-disable-line /> @@ -64,14 +64,14 @@ export const PrefixSuffixSizes: React.FC = (): ReactElement => { return ( - ) => setPrefixValue(event.target.value)} prefix="@" /> - { prefix="$" suffix=".99" /> - { onChange={(event: React.ChangeEvent) => setPrefixValue3(event.target.value)} suffix={} /> - { /> - { prefix="@" size="lg" /> - { suffix=".99" size="lg" /> - { suffix={} size="lg" /> - { test('onChange event fires callback function', () => { const mockedHandleChange = jest.fn(() => null); - render( - , - ); + render(); const inputElement = screen.getByDisplayValue(baseProps.value); fireEvent.change(inputElement, { target: { value: 'good bye' } }); @@ -32,7 +30,7 @@ describe('TextInput', () => { value = event.target.value; }); const { rerender } = render( - { expect(mockedHandleChange).toHaveBeenCalledTimes(1); rerender( - { describe('onClear', () => { test('onClear prop renders clear icon when input has value', () => { - render( null} />); + render( null} />); const clearButton = screen.getByTestId('text-input-clear-button'); expect(clearButton).toBeInTheDocument(); }); @@ -68,9 +66,7 @@ describe('TextInput', () => { test('onClear event fires callback function', () => { const mockedHandleClear = jest.fn(() => null); - render( - , - ); + render(); const clearButton = screen.getByTestId('text-input-clear-button'); expect(clearButton).toBeInTheDocument(); @@ -86,9 +82,7 @@ describe('TextInput', () => { describe('onFocus', () => { test('Input fires onFocus callback', () => { const mockedHandleFocus = jest.fn(); - render( - , - ); + render(); const inputElement = screen.getByDisplayValue(baseProps.value); fireEvent.focus(inputElement); expect(mockedHandleFocus).toBeCalledTimes(1); @@ -98,7 +92,7 @@ describe('TextInput', () => { describe('onBlur', () => { test('Input fires onBlur callback', () => { const mockedHandleBlur = jest.fn(); - render(); + render(); const inputElement = screen.getByDisplayValue(baseProps.value); fireEvent.focus(inputElement); fireEvent.blur(inputElement); @@ -110,7 +104,7 @@ describe('TextInput', () => { describe('States', () => { describe('Label', () => { test('it renders a label', () => { - render(); + render(); const labelElement = screen.getByText(baseProps.label); @@ -120,7 +114,7 @@ describe('TextInput', () => { describe('Autofocused', () => { test('Input autofocuses if "autoFocus" prop is set to true', () => { - render(); + render(); const inputElement = screen.getByDisplayValue(baseProps.value); expect(document.activeElement).toEqual(inputElement); }); @@ -128,19 +122,19 @@ describe('TextInput', () => { describe('Autocomplete', () => { test('Input correctly assigns autocomplete value of "on" when bool true is provided', () => { - render(); + render(); const inputElement = screen.getByDisplayValue(baseProps.value); expect(inputElement).toHaveAttribute('autocomplete', 'on'); }); test('Input correctly assigns autocomplete value of "off" when bool false is provided', () => { - render(); + render(); const inputElement = screen.getByDisplayValue('hello'); expect(inputElement).toHaveAttribute('autocomplete', 'off'); }); test('Input correctly assigns autocomplete specific value when provided', () => { - render(); + render(); const inputElement = screen.getByDisplayValue('hello'); expect(inputElement).toHaveAttribute('autocomplete', 'email'); }); @@ -148,7 +142,7 @@ describe('TextInput', () => { describe('Required', () => { test('it correctly assigns the "aria-required" attribute when "isRequired" prop is true', () => { - render(); + render(); const inputElement = screen.getByDisplayValue('hello'); @@ -158,7 +152,7 @@ describe('TextInput', () => { describe('Error', () => { test('Input correctly displays error message if provided', () => { - render(); + render(); const validationMessageElement = screen.getByText('You silly goose'); @@ -170,11 +164,7 @@ describe('TextInput', () => { describe('Help Text', () => { test('Input renders help text', async () => { const { getByText } = render( - , + , ); expect(getByText('i am help text')).toBeDefined(); @@ -183,7 +173,7 @@ describe('TextInput', () => { describe('Max Length', () => { test('Input correctly passes maxlength property if prop is passed', async () => { - render(); + render(); const inputElement = screen.getByLabelText(baseProps.label); expect(inputElement).toBeInTheDocument(); @@ -195,11 +185,7 @@ describe('TextInput', () => { describe('Name', () => { test('Input correctly passes name property if prop is passed', async () => { render( - , + , ); const inputElement = screen.getByLabelText(baseProps.label); @@ -211,7 +197,7 @@ describe('TextInput', () => { describe('Aria-labelledby', () => { test('assigns the "aria-labelledby" attribute and renders label with correct id, when label is provided', () => { - render(); + render(); const inputElement = screen.getByDisplayValue(baseProps.value); expect(inputElement).toHaveAttribute( 'aria-labelledby', @@ -223,12 +209,12 @@ describe('TextInput', () => { describe('Prefix and Suffix', () => { test('renders the prefix if specified', () => { - render(); + render(); expect(screen.getByText('prefixValue')).toBeInTheDocument(); }); test('renders the suffix if specified', () => { - render(); + render(); expect(screen.getByText('suffixValue')).toBeInTheDocument(); }); }); diff --git a/src/components/TextInputFloating/TextInputFloating.tsx b/src/components/TextInputInset/TextInputInset.tsx similarity index 94% rename from src/components/TextInputFloating/TextInputFloating.tsx rename to src/components/TextInputInset/TextInputInset.tsx index 33a55b296..071dbc8d7 100644 --- a/src/components/TextInputFloating/TextInputFloating.tsx +++ b/src/components/TextInputInset/TextInputInset.tsx @@ -18,11 +18,11 @@ import { Box, BoxProps } from '../Box/Box'; import { HelpText } from '../HelpText/HelpText'; import { Icon } from '../Icon/Icon'; import { getAutoCompleteValue } from '../../lib/getAutoCompleteValue'; -import styles from './TextInputFloating.module.scss'; +import styles from './TextInputInset.module.scss'; import { InputValidationMessage } from '../InputValidationMessage/InputValidationMessage'; -export type TextInputFloatingSize = 'md' | 'lg'; -export interface TextInputFloatingProps { +export type TextInputInsetSize = 'md' | 'lg'; +export interface TextInputInsetProps { /** * The input's id attribute. Used to programmatically tie the input with its label. */ @@ -109,7 +109,7 @@ export interface TextInputFloatingProps { /** * The size of the text input. */ - size?: TextInputFloatingSize | ResponsiveProp; + size?: TextInputInsetSize | ResponsiveProp; /** * An input helper rendered after the input field value */ @@ -124,7 +124,7 @@ export interface TextInputFloatingProps { [x: string]: any; // eslint-disable-line } -export const TextInputFloating: ForwardRefExoticComponent = forwardRef( +export const TextInputInset: ForwardRefExoticComponent = forwardRef( ( { id, @@ -188,7 +188,7 @@ export const TextInputFloating: ForwardRefExoticComponent -# TextareaInputFloating +# TextareaInputInset -Use `TextareaInputFloating` to create a floating label input field. It is a controlled component, which means that you need to provide a value and an `onChange` handler to update the value. +Use `TextareaInputInset` to create a floating label input field. It is a controlled component, which means that you need to provide a value and an `onChange` handler to update the value. @@ -24,7 +24,7 @@ Use `TextareaInputFloating` to create a floating label input field. It is a cont const [valuePw, setValuePw] = useState(''); return ( - + ### Required @@ -51,7 +51,7 @@ Use the `isRequired` prop to display an `*` after the label and set the `require const [value, setValue] = useState(''); return ( - setValue(event.target.value)} isRequired /> - { const [value, setValue] = useState(''); return ( - - setValue(event.target.value)} isRequired /> - - setValue(event.target.value)} isDisabled /> - - setValue(event.target.value)} /> - - setValue(event.target.value)} resize="both" /> - = ({ ...args }) => ( - +const Template: Story = ({ ...args }) => ( + ); export const Playground = Template.bind({}); Playground.args = { - id: 'playgroundTextareaInputFloating ', - label: 'Playground TextareaInputFloating ', + id: 'playgroundTextareaInputInset ', + label: 'Playground TextareaInputInset ', helpText: 'Helpful text', - name: 'playgroundTextareaInputFloating ', + name: 'playgroundTextareaInputInset ', }; diff --git a/src/components/TextareaInputFloating/TextareaInputFloating.VisualTest.stories.tsx b/src/components/TextareaInputInset/TextareaInputInset.VisualTest.stories.tsx similarity index 79% rename from src/components/TextareaInputFloating/TextareaInputFloating.VisualTest.stories.tsx rename to src/components/TextareaInputInset/TextareaInputInset.VisualTest.stories.tsx index 00fe99320..ae83ba1d5 100644 --- a/src/components/TextareaInputFloating/TextareaInputFloating.VisualTest.stories.tsx +++ b/src/components/TextareaInputInset/TextareaInputInset.VisualTest.stories.tsx @@ -2,18 +2,18 @@ import React from 'react'; import { Meta, Story } from '@storybook/react/types-6-0'; import { within } from '@storybook/testing-library'; import { - TextareaInputFloating, - TextareaInputFloatingProps, -} from './TextareaInputFloating'; + TextareaInputInset, + TextareaInputInsetProps, +} from './TextareaInputInset'; import { RESPONSIVE_STORY } from '../../docs/constants'; export default { - title: 'Components/TextareaInputFloating/Visual Regression Tests', - component: TextareaInputFloating, + title: 'Components/TextareaInputInset/Visual Regression Tests', + component: TextareaInputInset, } as Meta; -const Template: Story = args => ( - = args => ( + {}} // eslint-disable-line /> diff --git a/src/components/TextareaInputFloating/TextareaInputFloating.module.scss b/src/components/TextareaInputInset/TextareaInputInset.module.scss similarity index 100% rename from src/components/TextareaInputFloating/TextareaInputFloating.module.scss rename to src/components/TextareaInputInset/TextareaInputInset.module.scss diff --git a/src/components/TextareaInputFloating/TextareaInputFloating.test.tsx b/src/components/TextareaInputInset/TextareaInputInset.test.tsx similarity index 83% rename from src/components/TextareaInputFloating/TextareaInputFloating.test.tsx rename to src/components/TextareaInputInset/TextareaInputInset.test.tsx index 3c11f49ad..11ff2d614 100644 --- a/src/components/TextareaInputFloating/TextareaInputFloating.test.tsx +++ b/src/components/TextareaInputInset/TextareaInputInset.test.tsx @@ -1,6 +1,6 @@ import React from 'react'; import { render, fireEvent, screen } from '@testing-library/react'; -import { TextareaInputFloating } from './TextareaInputFloating'; +import { TextareaInputInset } from './TextareaInputInset'; const baseProps = { name: 'firstName', @@ -18,10 +18,7 @@ describe('TextInput', () => { const mockedHandleChange = jest.fn(() => null); render( - , + , ); const inputElement = screen.getByDisplayValue(baseProps.value); @@ -35,7 +32,7 @@ describe('TextInput', () => { value = event.target.value; }); const { rerender } = render( - { expect(mockedHandleChange).toHaveBeenCalledTimes(1); rerender( - { test('Input fires onFocus callback', () => { const mockedHandleFocus = jest.fn(); render( - , + , ); const inputElement = screen.getByDisplayValue(baseProps.value); fireEvent.focus(inputElement); @@ -76,9 +73,7 @@ describe('TextInput', () => { describe('onBlur', () => { test('Input fires onBlur callback', () => { const mockedHandleBlur = jest.fn(); - render( - , - ); + render(); const inputElement = screen.getByDisplayValue(baseProps.value); fireEvent.focus(inputElement); fireEvent.blur(inputElement); @@ -90,7 +85,7 @@ describe('TextInput', () => { describe('States', () => { describe('Label', () => { test('it renders a label', () => { - render(); + render(); const labelElement = screen.getByText(baseProps.label); @@ -100,7 +95,7 @@ describe('TextInput', () => { describe('Autofocused', () => { test('Input autofocuses if "autoFocus" prop is set to true', () => { - render(); + render(); const inputElement = screen.getByDisplayValue(baseProps.value); expect(document.activeElement).toEqual(inputElement); }); @@ -108,19 +103,19 @@ describe('TextInput', () => { describe('Autocomplete', () => { test('Input correctly assigns autocomplete value of "on" when bool true is provided', () => { - render(); + render(); const inputElement = screen.getByDisplayValue(baseProps.value); expect(inputElement).toHaveAttribute('autocomplete', 'on'); }); test('Input correctly assigns autocomplete value of "off" when bool false is provided', () => { - render(); + render(); const inputElement = screen.getByDisplayValue('hello'); expect(inputElement).toHaveAttribute('autocomplete', 'off'); }); test('Input correctly assigns autocomplete specific value when provided', () => { - render(); + render(); const inputElement = screen.getByDisplayValue('hello'); expect(inputElement).toHaveAttribute('autocomplete', 'email'); }); @@ -128,7 +123,7 @@ describe('TextInput', () => { describe('Required', () => { test('it correctly assigns the "aria-required" attribute when "isRequired" prop is true', () => { - render(); + render(); const inputElement = screen.getByDisplayValue('hello'); @@ -138,9 +133,7 @@ describe('TextInput', () => { describe('Error', () => { test('Input correctly displays error message if provided', () => { - render( - , - ); + render(); const validationMessageElement = screen.getByText('You silly goose'); @@ -152,7 +145,7 @@ describe('TextInput', () => { describe('Help Text', () => { test('Input renders help text', async () => { const { getByText } = render( - { describe('Max Length', () => { test('Input correctly passes maxlength property if prop is passed', async () => { - render(); + render(); const inputElement = screen.getByLabelText(baseProps.label); expect(inputElement).toBeInTheDocument(); @@ -177,7 +170,7 @@ describe('TextInput', () => { describe('Name', () => { test('Input correctly passes name property if prop is passed', async () => { render( - { describe('Aria-labelledby', () => { test('assigns the "aria-labelledby" attribute and renders label with correct id, when label is provided', () => { - render(); + render(); const inputElement = screen.getByDisplayValue(baseProps.value); expect(inputElement).toHaveAttribute( 'aria-labelledby', diff --git a/src/components/TextareaInputFloating/TextareaInputFloating.tsx b/src/components/TextareaInputInset/TextareaInputInset.tsx similarity index 92% rename from src/components/TextareaInputFloating/TextareaInputFloating.tsx rename to src/components/TextareaInputInset/TextareaInputInset.tsx index 52d678967..94db2d230 100644 --- a/src/components/TextareaInputFloating/TextareaInputFloating.tsx +++ b/src/components/TextareaInputInset/TextareaInputInset.tsx @@ -15,11 +15,11 @@ import { generateResponsiveClasses } from '../../lib/generateResponsiveClasses'; import { Box, BoxProps } from '../Box/Box'; import { HelpText } from '../HelpText/HelpText'; import { getAutoCompleteValue } from '../../lib/getAutoCompleteValue'; -import styles from './TextareaInputFloating.module.scss'; +import styles from './TextareaInputInset.module.scss'; import { InputValidationMessage } from '../InputValidationMessage/InputValidationMessage'; -export type TextareaInputFloatingSize = 'md' | 'lg'; -export interface TextareaInputFloatingProps { +export type TextareaInputInsetSize = 'md' | 'lg'; +export interface TextareaInputInsetProps { /** * The input's id attribute. Used to programmatically tie the input with its label. */ @@ -107,7 +107,7 @@ export interface TextareaInputFloatingProps { /** * The size of the text input. */ - size?: TextareaInputFloatingSize | ResponsiveProp; + size?: TextareaInputInsetSize | ResponsiveProp; /** * An input helper rendered after the input field value */ @@ -122,7 +122,7 @@ export interface TextareaInputFloatingProps { [x: string]: any; // eslint-disable-line } -export const TextareaInputFloating: ForwardRefExoticComponent = forwardRef( +export const TextareaInputInset: ForwardRefExoticComponent = forwardRef( ( { id, @@ -161,7 +161,7 @@ export const TextareaInputFloating: ForwardRefExoticComponent setIsThemed(e.target.checked)} /> - handleChange('emptyValue', event.target.value)} /> - handleChange('textValue', event.target.value)} /> @@ -123,9 +123,9 @@ Form controls share tokens since they are designed to have a consistent appearan options={options} value={themeExampleValues.selectValue} /> - handleChange('selectValue', event.target.value)} options={options} value={themeExampleValues.selectValue} @@ -149,10 +149,10 @@ Form controls share tokens since they are designed to have a consistent appearan value={themeExampleValues.textareaValue} onChange={e => handleChange('textareaValue', e.target.value)} /> - handleChange('textareaValue', e.target.value)} /> @@ -277,5 +277,4 @@ The following tokens are shared by all form controls to maintain a consistent ap })()} -import {TextareaInputFloating} from -'src/components/TextareaInputFloating/TextareaInputFloating'; +import {TextareaInputInset} from 'src/components/TextareaInputInset/TextareaInputInset'; diff --git a/src/stories/FormControls.VisualTests.stories.tsx b/src/stories/FormControls.VisualTests.stories.tsx index 6cbc298c4..2592165c9 100644 --- a/src/stories/FormControls.VisualTests.stories.tsx +++ b/src/stories/FormControls.VisualTests.stories.tsx @@ -4,7 +4,7 @@ import { Box } from '../components/Box/Box'; import { SelectInput } from '../components/SelectInput/SelectInput'; import { SelectInputNative } from '../components/SelectInputNative/SelectInputNative'; import { TextInput } from '../components/TextInput/TextInput'; -import { TextInputFloating } from '../components/TextInputFloating/TextInputFloating'; +import { TextInputInset } from '../components/TextInputInset/TextInputInset'; import { Toggle } from '../components/Toggle/Toggle'; export default { @@ -47,9 +47,9 @@ const Template: Story = args => { - handleChange('textInputMd', event.target.value)} @@ -57,9 +57,9 @@ const Template: Story = args => { /> - -## Floating Inputs +## Inset Inputs -Try not to mix Floating style inputs with regular inputs in the same form. +Try not to mix Inset style inputs with regular inputs in the same form. - + {() => { const [formValues, setFormValues] = useState({ emailInput: '', @@ -48,13 +48,13 @@ Try not to mix Floating style inputs with regular inputs in the same form. }; return ( - handleChange('emailInput', event.target.value)} /> - - handleChange('notesInput', event.target.value)} /> - handleChange('selectInput', event.target.value)} From 1ec3a598d4b630392ae23bfa752a3f18e402077d Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 7 Mar 2024 00:10:56 +0000 Subject: [PATCH 25/40] chore(release): 1.0.0-beta.12 [skip ci] # [1.0.0-beta.12](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.11...v1.0.0-beta.12) (2024-03-07) ### Bug Fixes * rename floating inputs to inset ([#880](https://github.com/palmetto/palmetto-components/issues/880)) ([b13ab19](https://github.com/palmetto/palmetto-components/commit/b13ab19d1c47b42b4e4e0a54fe0c67e4738c5198)) --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6154ae54b..2649d3023 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ Changelog +# [1.0.0-beta.12](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.11...v1.0.0-beta.12) (2024-03-07) + + +### Bug Fixes + +* rename floating inputs to inset ([#880](https://github.com/palmetto/palmetto-components/issues/880)) ([b13ab19](https://github.com/palmetto/palmetto-components/commit/b13ab19d1c47b42b4e4e0a54fe0c67e4738c5198)) + # [1.0.0-beta.11](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.10...v1.0.0-beta.11) (2024-03-06) # [1.0.0-beta.10](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.9...v1.0.0-beta.10) (2024-03-06) From f3f9cbcd88d6fb75f937de9c1e0bea7772e20ffe Mon Sep 17 00:00:00 2001 From: Nathan Young <1447339+nathanyoung@users.noreply.github.com> Date: Fri, 15 Mar 2024 08:34:26 -0700 Subject: [PATCH 26/40] chore(deps): bump palmetto-design-tokens from 0.78.0 to 0.78.1 (#881) --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 4748e87d1..f306b96de 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ }, "dependencies": { "@palmetto/dialog": "^0.16.4", - "@palmetto/palmetto-design-tokens": "0.78.0", + "@palmetto/palmetto-design-tokens": "0.78.1", "@popperjs/core": "^2.5.3", "classnames": "^2.2.6", "cleave.js": "^1.6.0", diff --git a/yarn.lock b/yarn.lock index cef06db5a..13207dd39 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3346,10 +3346,10 @@ react-remove-scroll "^2.4.3" tslib "^2.3.0" -"@palmetto/palmetto-design-tokens@0.78.0": - version "0.78.0" - resolved "https://registry.yarnpkg.com/@palmetto/palmetto-design-tokens/-/palmetto-design-tokens-0.78.0.tgz#945221489bdfe3fc0932de0c26dba4378d7a67da" - integrity sha512-KBCav98XuUPuVtkQWJXyOc/l4rNdPuKmgd/x0TbbRksPh26SHGzhIXJ/gvpYnlmSz1Blg8VtU6VGNO+XMsueag== +"@palmetto/palmetto-design-tokens@0.78.1": + version "0.78.1" + resolved "https://registry.yarnpkg.com/@palmetto/palmetto-design-tokens/-/palmetto-design-tokens-0.78.1.tgz#d5c3236aa3a0be1d4b4f96a72d94c65f8d634cea" + integrity sha512-XafWtXSlAMQNFwBB/kOZ/z0aXur0JRH5RmfgY6h1P6O7eU9MUrbCFZK5CSp4mb6xa6gpOVTr/4oDvxhomhHEaA== "@pmmmwh/react-refresh-webpack-plugin@^0.5.3": version "0.5.10" From 3c9a80c524e9b22421b0fb8567783bb5f6651728 Mon Sep 17 00:00:00 2001 From: Nathan Young <1447339+nathanyoung@users.noreply.github.com> Date: Fri, 15 Mar 2024 11:03:19 -0700 Subject: [PATCH 27/40] feat(SelectInputs): make dropdown indicator match icon (#882) * feat(SelectInputs): make dropdown indicator match icon * Update SelectInputNativeInset.module.scss --- .../FormLabel/FormLabel.module.scss | 2 +- .../SelectInput/SelectInput.module.scss | 178 +++++++++++---- .../SelectInput/SelectInput.test.jsx | 23 +- src/components/SelectInput/SelectInput.tsx | 25 ++- .../SelectInputNative.module.scss | 202 ++++++++++++------ .../SelectInputNativeInset.module.scss | 28 +-- 6 files changed, 304 insertions(+), 154 deletions(-) diff --git a/src/components/FormLabel/FormLabel.module.scss b/src/components/FormLabel/FormLabel.module.scss index 45bf132f6..ddddecfab 100644 --- a/src/components/FormLabel/FormLabel.module.scss +++ b/src/components/FormLabel/FormLabel.module.scss @@ -9,6 +9,6 @@ } &.disabled { - color: var(--color-brand-grey-light); + color: var(--color-brand-grey-300); } } diff --git a/src/components/SelectInput/SelectInput.module.scss b/src/components/SelectInput/SelectInput.module.scss index 4e0cf6228..ee6d975e9 100644 --- a/src/components/SelectInput/SelectInput.module.scss +++ b/src/components/SelectInput/SelectInput.module.scss @@ -4,10 +4,16 @@ @mixin react-select-icon { padding: 0; padding-right: 2px; - color: var(--form-control-icon-color, var(--INTERNAL_form-control-icon-color)); + color: var( + --form-control-icon-color, + var(--INTERNAL_form-control-icon-color) + ); &:hover { - color: var(--form-control-icon-color-hover, var(--INTERNAL_form-control-icon-color-hover)); + color: var( + --form-control-icon-color-hover, + var(--INTERNAL_form-control-icon-color-hover) + ); } } @@ -22,7 +28,10 @@ // stylelint-disable @mixin size-sm { :global(.react-select__control) { - border-radius: var(--form-control-size-sm-border-radius, var(--INTERNAL_form-control-size-sm-border-radius)); + border-radius: var( + --form-control-size-sm-border-radius, + var(--INTERNAL_form-control-size-sm-border-radius) + ); padding: 0 8px; min-height: 32px; } @@ -30,11 +39,17 @@ :global(.react-select__option), :global(.react-select__placeholder), :global(.react-select__single-value) { - font-size: var(--form-control-size-sm-font-size, var(--INTERNAL_form-control-size-sm-font-size)); + font-size: var( + --form-control-size-sm-font-size, + var(--INTERNAL_form-control-size-sm-font-size) + ); } :global(.react-select__multi-value__label) { - font-size: var(--form-control-size-sm-font-size, var(--INTERNAL_form-control-size-sm-font-size)); + font-size: var( + --form-control-size-sm-font-size, + var(--INTERNAL_form-control-size-sm-font-size) + ); } :global(.react-select__dropdown-indicator) { @@ -45,8 +60,14 @@ @include react-select-icon; svg { - width: var(--form-control-select-sm-icon-size, var(--INTERNAL_form-control-select-sm-icon-size)); - height: var(--form-control-select-sm-icon-size, var(--INTERNAL_form-control-select-sm-icon-size)); + width: var( + --form-control-select-sm-icon-size, + var(--INTERNAL_form-control-select-sm-icon-size) + ); + height: var( + --form-control-select-sm-icon-size, + var(--INTERNAL_form-control-select-sm-icon-size) + ); } } } @@ -61,16 +82,25 @@ @mixin size-md { :global(.react-select__control) { - border-radius: var(--form-control-size-md-border-radius, var(--INTERNAL_form-control-size-md-border-radius)); - padding: 4px 8px; + border-radius: var( + --form-control-size-md-border-radius, + var(--INTERNAL_form-control-size-md-border-radius) + ); + padding: 5px 8px; } :global(.react-select__single-value) { - font-size: var(--form-control-size-md-font-size, var(--INTERNAL_form-control-size-md-font-size)); + font-size: var( + --form-control-size-md-font-size, + var(--INTERNAL_form-control-size-md-font-size) + ); } :global(.react-select__multi-value__label) { - font-size: var(--form-control-size-md-font-size, var(--INTERNAL_form-control-size-md-font-size)); + font-size: var( + --form-control-size-md-font-size, + var(--INTERNAL_form-control-size-md-font-size) + ); } :global(.react-select__dropdown-indicator) { @@ -81,8 +111,14 @@ @include react-select-icon; svg { - width: var(--form-control-select-md-icon-size, var(--INTERNAL_form-control-select-md-icon-size)); - height: var(--form-control-select-md-icon-size, var(--INTERNAL_form-control-select-md-icon-size)); + width: var( + --form-control-select-md-icon-size, + var(--INTERNAL_form-control-select-md-icon-size) + ); + height: var( + --form-control-select-md-icon-size, + var(--INTERNAL_form-control-select-md-icon-size) + ); } } } @@ -97,19 +133,28 @@ @mixin size-lg { :global(.react-select__control) { - padding: 9px 8px 10px; - border-radius: var(--form-control-size-md-border-radius, var(--INTERNAL_form-control-size-md-border-radius)); + padding: 11px 8px 12px 8px; + border-radius: var( + --form-control-size-md-border-radius, + var(--INTERNAL_form-control-size-md-border-radius) + ); } :global(.react-select__option), :global(.react-select__placeholder), :global(.react-select__single-value) { - font-size: var(--form-control-size-lg-font-size, var(--INTERNAL_form-control-size-lg-font-size)); + font-size: var( + --form-control-size-lg-font-size, + var(--INTERNAL_form-control-size-lg-font-size) + ); } :global(.react-select__multi-value__label) { - font-size: var(--form-control-size-lg-font-size, var(--INTERNAL_form-control-size-lg-font-size)); - padding: 2px 6px 3px; + font-size: var( + --form-control-size-lg-font-size, + var(--INTERNAL_form-control-size-lg-font-size) + ); + padding: 2px 6px 1px; } :global(.react-select__dropdown-indicator) { @@ -120,8 +165,14 @@ @include react-select-icon; svg { - width: var(--form-control-select-lg-icon-size, var(--INTERNAL_form-control-select-lg-icon-size)); - height: var(--form-control-select-lg-icon-size, var(--INTERNAL_form-control-select-lg-icon-size)); + width: var( + --form-control-select-lg-icon-size, + var(--INTERNAL_form-control-select-lg-icon-size) + ); + height: var( + --form-control-select-lg-icon-size, + var(--INTERNAL_form-control-select-lg-icon-size) + ); } } } @@ -135,27 +186,45 @@ } :global(.select-input-wrapper) { - font-family: var(--form-control-font-family, var(--INTERNAL_form-control-font-family)); + font-family: var( + --form-control-font-family, + var(--INTERNAL_form-control-font-family) + ); :global(.react-select) { &:hover { :global(.react-select__dropdown-indicator) { - color: var(--form-control-border-color-focus, var(--INTERNAL_form-control-border-color-focus)); + color: var( + --form-control-border-color-focus, + var(--INTERNAL_form-control-border-color-focus) + ); } } :global(.react-select__control) { - line-height: var(--form-control-line-height, var(--INTERNAL_form-control-line-height)); - border-color: var(--form-control-border-color, var(--INTERNAL_form-control-border-color)); + line-height: var( + --form-control-line-height, + var(--INTERNAL_form-control-line-height) + ); + border-color: var( + --form-control-border-color, + var(--INTERNAL_form-control-border-color) + ); box-shadow: 0 3px 0 rgba(0, 0, 0, 0.05); - background-color: var(--form-control-background-color, var(--INTERNAL_form-control-background-color)); + background-color: var( + --form-control-background-color, + var(--INTERNAL_form-control-background-color) + ); :global(.react-select__value-container) { padding: 0; } :global(.react-select__placeholder) { - color: var(--form-control-placeholder-color, var(--INTERNAL_form-control-placeholder-color)); + color: var( + --form-control-placeholder-color, + var(--INTERNAL_form-control-placeholder-color) + ); } :global(.react-select__clear-indicator) { @@ -166,21 +235,28 @@ display: none; } - :global(.react-select__clear-indicator) { - @extend .react-select-icon; - - margin-right: var(--form-control-select-clear-icon-margin, var(--INTERNAL_form-control-select-clear-icon-margin)); - } - &:global(.react-select__control--is-focused) { - border-color: var(--form-control-border-color-focus, var(--INTERNAL_form-control-border-color-focus)); - box-shadow: var(--form-control-box-shadow, var(--INTERNAL_form-control-box-shadow-focus)), - inset 0 0 0 1px var(--form-control-border-color-focus, var(--INTERNAL_form-control-border-color-focus)); + border-color: var( + --form-control-border-color-focus, + var(--INTERNAL_form-control-border-color-focus) + ); + box-shadow: var( + --form-control-box-shadow, + var(--INTERNAL_form-control-box-shadow-focus) + ), + inset 0 0 0 1px + var( + --form-control-border-color-focus, + var(--INTERNAL_form-control-border-color-focus) + ); } &:global(.react-select__control--is-disabled) { :global(.react-select__dropdown-indicator) { - color: var(--form-control-placeholder-color, var(--INTERNAL_form-control-placeholder-color)); + color: var( + --form-control-placeholder-color, + var(--INTERNAL_form-control-placeholder-color) + ); } } } @@ -191,13 +267,25 @@ &.error { :global(.react-select__control) { - border-color: var(--form-control-border-color-error, var(--INTERNAL_form-control-border-color-error)); - background-color: var(--form-control-background-color-error, var(--INTERNAL_form-control-background-color-error)); + border-color: var( + --form-control-border-color-error, + var(--INTERNAL_form-control-border-color-error) + ); + background-color: var( + --form-control-background-color-error, + var(--INTERNAL_form-control-background-color-error) + ); &:global(.react-select__control--is-focused) { outline: none; - border-color: var(--form-control-border-color, var(--INTERNAL_form-control-border-color)); - background-color: var(--form-control-background-color, var(--INTERNAL_form-control-background-color)); + border-color: var( + --form-control-border-color, + var(--INTERNAL_form-control-border-color) + ); + background-color: var( + --form-control-background-color, + var(--INTERNAL_form-control-background-color) + ); } } } @@ -251,7 +339,10 @@ &.disabled { :global(.react-select__control--is-disabled) { - background-color: var(--form-control-background-color-disabled, var(--INTERNAL_form-control-background-color-disabled)); + background-color: var( + --form-control-background-color-disabled, + var(--INTERNAL_form-control-background-color-disabled) + ); } } } @@ -259,5 +350,8 @@ // while we try to avoid important statements, this one is necessary to override bootstrap utilities that are currently in use by some of our teams .select-input-label { - margin-bottom: var(--form-control-label-margin, var(--INTERNAL_form-control-label-margin)) !important; + margin-bottom: var( + --form-control-label-margin, + var(--INTERNAL_form-control-label-margin) + ) !important; } diff --git a/src/components/SelectInput/SelectInput.test.jsx b/src/components/SelectInput/SelectInput.test.jsx index e9be64605..3c86176cf 100644 --- a/src/components/SelectInput/SelectInput.test.jsx +++ b/src/components/SelectInput/SelectInput.test.jsx @@ -259,29 +259,10 @@ describe('SelectInput', () => { }); describe('Is Clearable', () => { - test('it does not render the X icon if input has value but is not clearable', () => { - const mockedHandleChange = jest.fn(); - - const { container } = render( - , - ); - - expect( - container.querySelector('.react-select__clear-indicator'), - ).not.toBeInTheDocument(); - }); - test('it renders the X icon if input has value and is clearable', () => { const mockedHandleChange = jest.fn(); - const { container } = render( + render( { ); expect( - container.querySelector('.react-select__clear-indicator'), + screen.getByTestId('icon-testid--remove-light'), ).toBeInTheDocument(); }); }); diff --git a/src/components/SelectInput/SelectInput.tsx b/src/components/SelectInput/SelectInput.tsx index b1f661f75..01cfabdfc 100644 --- a/src/components/SelectInput/SelectInput.tsx +++ b/src/components/SelectInput/SelectInput.tsx @@ -18,7 +18,9 @@ import { FormLabel } from '../FormLabel/FormLabel'; import { InputValidationMessage } from '../InputValidationMessage/InputValidationMessage'; import styles from './SelectInput.module.scss'; -export type SelectInputOptions = GroupedOptionsType | OptionsType; +export type SelectInputOptions = + | GroupedOptionsType + | OptionsType; export interface SelectInputProps { /** @@ -164,7 +166,7 @@ export const SelectInput: FC = ({ 'palmetto-components__variables__form-control', 'select-input-wrapper', className, - ...responsiveClasses.map(c => (styles[c])), + ...responsiveClasses.map(c => styles[c]), { [styles.disabled]: isDisabled, }, @@ -183,7 +185,15 @@ export const SelectInput: FC = ({ const ClearIndicator = (props: IndicatorProps) => ( - + + + ); + + const DropdownIndicator = ( + props: IndicatorProps, + ) => ( + + ); @@ -194,7 +204,7 @@ export const SelectInput: FC = ({ {...restProps} inputId={id} aria-label={label} - components={{ ClearIndicator }} + components={{ ClearIndicator, DropdownIndicator }} aria-labelledby={label && !hideLabel ? `${id}Label` : undefined} className={inputClasses} classNamePrefix="react-select" @@ -209,7 +219,12 @@ export const SelectInput: FC = ({ onChange={handleChange} onFocus={handleFocus} onBlur={handleBlur} - styles={{ menuPortal: base => ({ ...base, zIndex: Number(Z_INDEX_VALUES.popover) }) }} + styles={{ + menuPortal: base => ({ + ...base, + zIndex: Number(Z_INDEX_VALUES.popover), + }), + }} value={value} /> {error && typeof error !== 'boolean' && ( diff --git a/src/components/SelectInputNative/SelectInputNative.module.scss b/src/components/SelectInputNative/SelectInputNative.module.scss index 488643949..62e390087 100644 --- a/src/components/SelectInputNative/SelectInputNative.module.scss +++ b/src/components/SelectInputNative/SelectInputNative.module.scss @@ -1,8 +1,14 @@ @import '~@palmetto/palmetto-design-tokens/build/scss/variables-size'; %disabled-base { - background-color: var(--form-control-background-color-disabled, var(--INTERNAL_form-control-background-color-disabled)); - color: var(--form-control-font-color-disabled, var(--INTERNAL_form-control-font-color-disabled)); + background-color: var( + --form-control-background-color-disabled, + var(--INTERNAL_form-control-background-color-disabled) + ); + color: var( + --form-control-font-color-disabled, + var(--INTERNAL_form-control-font-color-disabled) + ); opacity: 1; &:hover { @@ -16,31 +22,43 @@ } @mixin size-sm { - border-radius: var(--form-control-size-sm-border-radius, var(--INTERNAL_form-control-size-sm-border-radius)); - font-size: var(--form-control-size-sm-font-size, var(--INTERNAL_form-control-size-sm-font-size)); + border-radius: var( + --form-control-size-sm-border-radius, + var(--INTERNAL_form-control-size-sm-border-radius) + ); + font-size: var( + --form-control-size-sm-font-size, + var(--INTERNAL_form-control-size-sm-font-size) + ); > select { - border-radius: var(--form-control-size-lg-border-radius, var(--INTERNAL_form-control-size-lg-border-radius)); - padding-left: var(--form-control-size-sm-padding, var(--INTERNAL_form-control-size-sm-padding)); + border-radius: var( + --form-control-size-lg-border-radius, + var(--INTERNAL_form-control-size-lg-border-radius) + ); + padding-left: var( + --form-control-size-sm-padding, + var(--INTERNAL_form-control-size-sm-padding) + ); padding-right: var(--size-spacing-2xl); - padding-top: calc(var(--form-control-size-sm-padding, var(--INTERNAL_form-control-size-sm-padding))); - padding-bottom: calc(var(--form-control-size-sm-padding, var(--INTERNAL_form-control-size-sm-padding))); + padding-top: calc( + var( + --form-control-size-sm-padding, + var(--INTERNAL_form-control-size-sm-padding) + ) + ); + padding-bottom: calc( + var( + --form-control-size-sm-padding, + var(--INTERNAL_form-control-size-sm-padding) + ) + ); } &::before, &::after { - width: 8px; - height: 2px; top: calc(var(--size-spacing-sm) + 3px); } - - &::before { - right: calc(var(--size-spacing-sm) + 8px); - } - - &::after { - right: calc(var(--size-spacing-sm) + 3px); - } } %size-sm { @@ -52,31 +70,39 @@ } @mixin size-md { - border-radius: var(--form-control-size-md-border-radius, var(--INTERNAL_form-control-size-md-border-radius)); - font-size: var(--form-control-size-md-font-size, var(--INTERNAL_form-control-size-md-font-size)); + border-radius: var( + --form-control-size-md-border-radius, + var(--INTERNAL_form-control-size-md-border-radius) + ); + font-size: var( + --form-control-size-md-font-size, + var(--INTERNAL_form-control-size-md-font-size) + ); > select { - border-radius: var(--form-control-size-lg-border-radius, var(--INTERNAL_form-control-size-lg-border-radius)); - padding-left: var(--form-control-size-md-padding, var(--INTERNAL_form-control-size-md-padding)); + border-radius: var( + --form-control-size-lg-border-radius, + var(--INTERNAL_form-control-size-lg-border-radius) + ); + padding-left: var( + --form-control-size-md-padding, + var(--INTERNAL_form-control-size-md-padding) + ); padding-right: var(--size-spacing-3xl); - padding-top: calc(var(--form-control-size-md-padding, var(--INTERNAL_form-control-size-md-padding))); - padding-bottom: calc(var(--form-control-size-md-padding, var(--INTERNAL_form-control-size-md-padding))); + padding-top: var( + --form-control-size-md-padding, + var(--INTERNAL_form-control-size-md-padding) + ); + padding-bottom: var( + --form-control-size-md-padding, + var(--INTERNAL_form-control-size-md-padding) + ); } &::before, &::after { - width: 14px; - height: 4px; top: calc(var(--size-spacing-md) + 3px); } - - &::before { - right: calc(var(--size-spacing-sm) + 11px); - } - - &::after { - right: calc(var(--size-spacing-sm) + 3px); - } } %size-md { @@ -88,31 +114,39 @@ } @mixin size-lg { - border-radius: var(--form-control-size-lg-border-radius, var(--INTERNAL_form-control-size-lg-border-radius)); - font-size: var(--form-control-size-lg-font-size, var(--INTERNAL_form-control-size-lg-font-size)); + border-radius: var( + --form-control-size-lg-border-radius, + var(--INTERNAL_form-control-size-lg-border-radius) + ); + font-size: var( + --form-control-size-lg-font-size, + var(--INTERNAL_form-control-size-lg-font-size) + ); > select { - border-radius: var(--form-control-size-lg-border-radius, var(--INTERNAL_form-control-size-lg-border-radius)); - padding-left: var(--form-control-size-lg-padding, var(--INTERNAL_form-control-size-lg-padding)); + border-radius: var( + --form-control-size-lg-border-radius, + var(--INTERNAL_form-control-size-lg-border-radius) + ); + padding-left: var( + --form-control-size-lg-padding, + var(--INTERNAL_form-control-size-lg-padding) + ); padding-right: var(--size-spacing-3xl); - padding-top: calc(var(--form-control-size-lg-padding, var(--INTERNAL_form-control-size-lg-padding)) - 1px); - padding-bottom: calc(var(--form-control-size-lg-padding, var(--INTERNAL_form-control-size-lg-padding)) - 1px); + padding-top: var( + --form-control-size-lg-padding, + var(--INTERNAL_form-control-size-lg-padding) + ); + padding-bottom: var( + --form-control-size-lg-padding, + var(--INTERNAL_form-control-size-lg-padding) + ); } &::before, &::after { - width: 14px; - height: 4px; top: calc(var(--size-spacing-md) + 9px); } - - &::before { - right: calc(var(--size-spacing-sm) + 11px); - } - - &::after { - right: calc(var(--size-spacing-sm) + 3px); - } } %size-lg { @@ -124,16 +158,36 @@ } .select-input-native-wrapper { - font-family: var(--form-control-font-family, var(--INTERNAL_form-control-font-family)); + font-family: var( + --form-control-font-family, + var(--INTERNAL_form-control-font-family) + ); position: relative; - box-shadow: var(--form-control-box-shadow, var(--INTERNAL_form-control-box-shadow)), - inset 0 0 0 1px var(--form-control-border-color, var(--INTERNAL_form-control-border-color)); - background-color: var(--form-control-background-color, var(--INTERNAL_form-control-background-color)); + box-shadow: var( + --form-control-box-shadow, + var(--INTERNAL_form-control-box-shadow) + ), + inset 0 0 0 1px + var( + --form-control-border-color, + var(--INTERNAL_form-control-border-color) + ); + background-color: var( + --form-control-background-color, + var(--INTERNAL_form-control-background-color) + ); &:focus-within { outline: none; - box-shadow: var(--form-control-box-shadow, var(--INTERNAL_form-control-box-shadow-focus)), - inset 0 0 0 1px var(--form-control-border-color-focus, var(--INTERNAL_form-control-border-color-focus)); + box-shadow: var( + --form-control-box-shadow, + var(--INTERNAL_form-control-box-shadow-focus) + ), + inset 0 0 0 1px + var( + --form-control-border-color-focus, + var(--INTERNAL_form-control-border-color-focus) + ); } &::before, @@ -141,18 +195,22 @@ border-radius: 100px; content: ''; position: absolute; - background: var(--color-brand-grey-light); + background: var(--color-brand-grey-300); pointer-events: none; + width: 10px; + height: 2px; } //change the stacking context so this half of the chevron stays above the disabled background color. &::before { + right: calc(var(--size-spacing-sm) + 7px); transform-origin: 50% 50%; transform: rotate(42deg); z-index: 1; } &::after { + right: calc(var(--size-spacing-sm) + 1px); transform-origin: 50% 50%; transform: rotate(-42deg); } @@ -170,11 +228,17 @@ border: none; background: transparent; width: 100%; - line-height: var(--form-control-line-height, var(--INTERNAL_form-control-line-height)); + line-height: var( + --form-control-line-height, + var(--INTERNAL_form-control-line-height) + ); &:focus { outline: none; - border-color: var(--form-control-border-color-focus, var(--INTERNAL_form-control-border-color-focus)); + border-color: var( + --form-control-border-color-focus, + var(--INTERNAL_form-control-border-color-focus) + ); } &:disabled { @@ -239,17 +303,29 @@ } &.error { - border-color: var(--form-control-border-color-error, var(--INTERNAL_form-control-border-color-error)); - background-color: var(--form-control-border-color-error, var(--INTERNAL_form-control-background-color-error)); + border-color: var( + --form-control-border-color-error, + var(--INTERNAL_form-control-border-color-error) + ); + background-color: var( + --form-control-border-color-error, + var(--INTERNAL_form-control-background-color-error) + ); select:focus { outline: none; - border-color: var(--form-control-border-color-focus, var(--INTERNAL_form-control-border-color-focus)); + border-color: var( + --form-control-border-color-focus, + var(--INTERNAL_form-control-border-color-focus) + ); background-color: transparent; } } } .text-input-label { - margin-bottom: var(--form-control-label-margin, var(--INTERNAL_form-control-label-margin)); + margin-bottom: var( + --form-control-label-margin, + var(--INTERNAL_form-control-label-margin) + ); } diff --git a/src/components/SelectInputNativeInset/SelectInputNativeInset.module.scss b/src/components/SelectInputNativeInset/SelectInputNativeInset.module.scss index 87e10aad2..78c5ca2a4 100644 --- a/src/components/SelectInputNativeInset/SelectInputNativeInset.module.scss +++ b/src/components/SelectInputNativeInset/SelectInputNativeInset.module.scss @@ -29,19 +29,9 @@ &::before, &::after { - width: 14px; - height: 4px; top: calc(var(--size-spacing-md) + 3px); } - &::before { - right: calc(var(--size-spacing-sm) + 11px); - } - - &::after { - right: calc(var(--size-spacing-sm) + 3px); - } - select { padding: calc( var( @@ -111,19 +101,9 @@ &::before, &::after { - width: 14px; - height: 4px; top: calc(var(--size-spacing-md) + 9px); } - &::before { - right: calc(var(--size-spacing-sm) + 11px); - } - - &::after { - right: calc(var(--size-spacing-sm) + 3px); - } - select { padding: calc( var( @@ -243,18 +223,22 @@ border-radius: 100px; content: ''; position: absolute; - background: var(--color-brand-grey-light); + background: var(--color-brand-grey-300); pointer-events: none; + width: 10px; + height: 2px; } //change the stacking context so this half of the chevron stays above the disabled background color. &::before { + right: calc(var(--size-spacing-sm) + 7px); transform-origin: 50% 50%; transform: rotate(42deg); z-index: 1; } &::after { + right: calc(var(--size-spacing-sm) + 1px); transform-origin: 50% 50%; transform: rotate(-42deg); } @@ -405,7 +389,7 @@ // Reset default button styles .clear-button { position: absolute; - right: var(--size-spacing-2xl); + right: var(--size-spacing-xl); transition-duration: 0.2s; transition-property: color; border: 0; From 03b4b4591f62ba867bd07761104cf8bcfca07264 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Fri, 15 Mar 2024 18:05:54 +0000 Subject: [PATCH 28/40] chore(release): 1.0.0-beta.13 [skip ci] # [1.0.0-beta.13](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.12...v1.0.0-beta.13) (2024-03-15) ### Features * **SelectInputs:** make dropdown indicator match icon ([#882](https://github.com/palmetto/palmetto-components/issues/882)) ([3c9a80c](https://github.com/palmetto/palmetto-components/commit/3c9a80c524e9b22421b0fb8567783bb5f6651728)) --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2649d3023..91fb79838 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ Changelog +# [1.0.0-beta.13](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.12...v1.0.0-beta.13) (2024-03-15) + + +### Features + +* **SelectInputs:** make dropdown indicator match icon ([#882](https://github.com/palmetto/palmetto-components/issues/882)) ([3c9a80c](https://github.com/palmetto/palmetto-components/commit/3c9a80c524e9b22421b0fb8567783bb5f6651728)) + # [1.0.0-beta.12](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.11...v1.0.0-beta.12) (2024-03-07) From bfaacd71bfc1e8152c0288c1057202ac40439d22 Mon Sep 17 00:00:00 2001 From: Nathan Young <1447339+nathanyoung@users.noreply.github.com> Date: Fri, 15 Mar 2024 11:38:54 -0700 Subject: [PATCH 29/40] fix(SelectInputInset): rename SelectInputNativeInset to SelectInputInset (#883) --- .../SelectInputInset.Overview.stories.mdx} | 32 +++++++++---------- .../SelectInputInset.Playground.stories.tsx} | 19 +++++------ .../SelectInputInset.module.scss} | 0 .../SelectInputInset.test.tsx} | 32 +++++++++---------- .../SelectInputInset.tsx} | 14 ++++---- src/components/index.ts | 2 +- src/docs/FormTheming.stories.mdx | 4 +-- src/stories/FormControls.stories.mdx | 4 +-- 8 files changed, 51 insertions(+), 56 deletions(-) rename src/components/{SelectInputNativeInset/SelectInputNativeInset.Overview.stories.mdx => SelectInputInset/SelectInputInset.Overview.stories.mdx} (88%) rename src/components/{SelectInputNativeInset/SelectInputNativeInset.Playground.stories.tsx => SelectInputInset/SelectInputInset.Playground.stories.tsx} (74%) rename src/components/{SelectInputNativeInset/SelectInputNativeInset.module.scss => SelectInputInset/SelectInputInset.module.scss} (100%) rename src/components/{SelectInputNativeInset/SelectInputNativeInset.test.tsx => SelectInputInset/SelectInputInset.test.tsx} (93%) rename src/components/{SelectInputNativeInset/SelectInputNativeInset.tsx => SelectInputInset/SelectInputInset.tsx} (93%) diff --git a/src/components/SelectInputNativeInset/SelectInputNativeInset.Overview.stories.mdx b/src/components/SelectInputInset/SelectInputInset.Overview.stories.mdx similarity index 88% rename from src/components/SelectInputNativeInset/SelectInputNativeInset.Overview.stories.mdx rename to src/components/SelectInputInset/SelectInputInset.Overview.stories.mdx index 689cba3b2..25f3a7b32 100644 --- a/src/components/SelectInputNativeInset/SelectInputNativeInset.Overview.stories.mdx +++ b/src/components/SelectInputInset/SelectInputInset.Overview.stories.mdx @@ -1,22 +1,22 @@ import { useState } from 'react'; import { action } from '@storybook/addon-actions'; import { Meta, Story, Canvas, ArgsTable } from '@storybook/addon-docs'; -import { SelectInputNativeInset } from './SelectInputNativeInset'; +import { SelectInputInset } from './SelectInputInset'; import { RESPONSIVE_STORY } from '../../docs/constants'; import { Box } from '../Box/Box'; import { Icon } from '../Icon/Icon'; -# SelectInputNativeInset +# SelectInputInset -Use `SelectInputNativeInset` to create a floating label input field, but unlike `TextInputInset` they always show the `label` in the floated state. It is a controlled component, which means that you need to provide a value and an `onChange` handler to update the value. +Use `SelectInputInset` to create a floating label input field, but unlike `TextInputInset` they always show the `label` in the floated state. It is a controlled component, which means that you need to provide a value and an `onChange` handler to update the value. { @@ -52,7 +52,7 @@ Use `SelectInputNativeInset` to create a floating label input field, but unlike ## Props - + ### Required @@ -69,7 +69,7 @@ Use the `isRequired` prop to display an `*` after the label and set the `require ]; return ( - { @@ -79,7 +79,7 @@ Use the `isRequired` prop to display an `*` after the label and set the `require value={value} isRequired /> - { @@ -110,7 +110,7 @@ Use `helpText` to provide additional information about the input field. { value: 'Tesla', label: 'Tesla' }, ]; return ( - { @@ -199,7 +199,7 @@ a callback function when the clear icon is clicked, which can then be handled to { value: 'option3', label: 'Option 3' }, ]; return ( - { @@ -229,14 +229,14 @@ Two sizes, `md` and `lg` are available, with `md` being the default. ]; return ( - setValue(event.target.value)} options={options} /> - setValue(event.target.value)} options={options} /> - = ({ ...args }) => ( - +const Template: Story = ({ ...args }) => ( + ); export const Playground = Template.bind({}); Playground.args = { - id: 'playgroundSelectInputNativeInset', - label: 'Playground SelectInputNativeInset', - name: 'playgroundSelectInputNativeInset', + id: 'playgroundSelectInputInset', + label: 'Playground SelectInputInset', + name: 'playgroundSelectInputInset', options: [ { value: 'chocolate', label: 'Chocolate' }, { value: 'strawberry', label: 'Strawberry' }, diff --git a/src/components/SelectInputNativeInset/SelectInputNativeInset.module.scss b/src/components/SelectInputInset/SelectInputInset.module.scss similarity index 100% rename from src/components/SelectInputNativeInset/SelectInputNativeInset.module.scss rename to src/components/SelectInputInset/SelectInputInset.module.scss diff --git a/src/components/SelectInputNativeInset/SelectInputNativeInset.test.tsx b/src/components/SelectInputInset/SelectInputInset.test.tsx similarity index 93% rename from src/components/SelectInputNativeInset/SelectInputNativeInset.test.tsx rename to src/components/SelectInputInset/SelectInputInset.test.tsx index 9d062e426..f235eef9b 100644 --- a/src/components/SelectInputNativeInset/SelectInputNativeInset.test.tsx +++ b/src/components/SelectInputInset/SelectInputInset.test.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { render, fireEvent, screen } from '@testing-library/react'; import { BreakpointSize } from '../../types'; -import { SelectInputNativeInset } from './SelectInputNativeInset'; +import { SelectInputInset } from './SelectInputInset'; const selectOptions = [ { value: 'chocolate', label: 'Chocolate' }, @@ -9,13 +9,13 @@ const selectOptions = [ { value: 'vanilla', label: 'Vanilla' }, ]; -describe('SelectInputNativeInset', () => { +describe('SelectInputInset', () => { describe('Callback Handling', () => { test('it fires onChange callback on change', async () => { const mockedHandleChange = jest.fn(); const { getByLabelText } = render( - { const mockedHandleFocus = jest.fn(); render( - { const mockedHandleBlur = jest.fn(); render( - { test('onClear prop renders clear icon when input has value', () => { const mockedHandleChange = jest.fn(); render( - { const mockedHandleClear = jest.fn(() => null); render( - { const mockedHandleChange = jest.fn(); render( - { test('assigns the "aria-labelledby" attribute and renders label correct id, when a label is provided', () => { render( - { const mockedHandleChange = jest.fn(); render( - { const mockedHandleChange = jest.fn(); render( - { const mockedHandleChange = jest.fn(); render( - { const mockedHandleChange = jest.fn(); render( - { sizes.forEach(size => { test(`it has a ${size} class applied to it`, () => { render( - { breakpoints.forEach(breakpoint => { test(`it applies responsive classes for breakpoint: ${breakpoint} and size: ${size}`, () => { render( - { test('It applies responsive classes when multiple are applied', () => { render( - ; + size?: SelectInputInsetSize | ResponsiveProp; /** * Additional props to be spread to rendered element */ [x: string]: any; // eslint-disable-line } -export const SelectInputNativeInset: ForwardRefExoticComponent = forwardRef( +export const SelectInputInset: ForwardRefExoticComponent = forwardRef( ( { id, @@ -176,7 +174,7 @@ export const SelectInputNativeInset: ForwardRefExoticComponent - handleChange('selectValue', event.target.value)} diff --git a/src/stories/FormControls.stories.mdx b/src/stories/FormControls.stories.mdx index a28900bfa..efc4c2c54 100644 --- a/src/stories/FormControls.stories.mdx +++ b/src/stories/FormControls.stories.mdx @@ -8,7 +8,7 @@ import { TextInputInset } from '../components/TextInputInset/TextInputInset'; import { TextareaInput } from '../components/TextareaInput/TextareaInput'; import { TextareaInputInset } from '../components/TextareaInputInset/TextareaInputInset'; import { SelectInputNative } from '../components/SelectInputNative/SelectInputNative'; -import { SelectInputNativeInset } from '../components/SelectInputNativeInset/SelectInputNativeInset'; +import { SelectInputInset } from '../components/SelectInputInset/SelectInputInset'; import { Toggle } from '../components/Toggle/Toggle'; @@ -69,7 +69,7 @@ Try not to mix Inset style inputs with regular inputs in the same form. value={formValues.textInputMd} onChange={event => handleChange('notesInput', event.target.value)} /> - handleChange('selectInput', event.target.value)} From 89f0f64143ac64405b2d52314d405dd795e6507f Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Fri, 15 Mar 2024 18:41:26 +0000 Subject: [PATCH 30/40] chore(release): 1.0.0-beta.14 [skip ci] # [1.0.0-beta.14](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.13...v1.0.0-beta.14) (2024-03-15) ### Bug Fixes * **SelectInputInset:** rename SelectInputNativeInset to SelectInputInset ([#883](https://github.com/palmetto/palmetto-components/issues/883)) ([bfaacd7](https://github.com/palmetto/palmetto-components/commit/bfaacd71bfc1e8152c0288c1057202ac40439d22)) --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 91fb79838..33d76d0d3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ Changelog +# [1.0.0-beta.14](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.13...v1.0.0-beta.14) (2024-03-15) + + +### Bug Fixes + +* **SelectInputInset:** rename SelectInputNativeInset to SelectInputInset ([#883](https://github.com/palmetto/palmetto-components/issues/883)) ([bfaacd7](https://github.com/palmetto/palmetto-components/commit/bfaacd71bfc1e8152c0288c1057202ac40439d22)) + # [1.0.0-beta.13](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.12...v1.0.0-beta.13) (2024-03-15) From 189b80935c49d32fb9b929a6c4cd21c3dbde06e2 Mon Sep 17 00:00:00 2001 From: Nathan Young <1447339+nathanyoung@users.noreply.github.com> Date: Fri, 5 Apr 2024 11:07:58 -0700 Subject: [PATCH 31/40] feat: update drop shadows (#885) * feat: update dropshadows * prevent false positives --- src/components/MediaModal/MediaModal.Overview.stories.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/MediaModal/MediaModal.Overview.stories.mdx b/src/components/MediaModal/MediaModal.Overview.stories.mdx index 2098ca768..9f79b8892 100644 --- a/src/components/MediaModal/MediaModal.Overview.stories.mdx +++ b/src/components/MediaModal/MediaModal.Overview.stories.mdx @@ -295,7 +295,7 @@ If `headerContent` is defined, then the `title` and `description` will not be re isOpen={isMediaModalOpen} onDismiss={closeMediaModal} > - + From f1defdac73bb67258c56e5c4abfe9b1172db617e Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Fri, 5 Apr 2024 18:13:10 +0000 Subject: [PATCH 32/40] chore(release): 1.0.0-beta.15 [skip ci] # [1.0.0-beta.15](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.14...v1.0.0-beta.15) (2024-04-05) ### Features * update drop shadows ([#885](https://github.com/palmetto/palmetto-components/issues/885)) ([189b809](https://github.com/palmetto/palmetto-components/commit/189b80935c49d32fb9b929a6c4cd21c3dbde06e2)) --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 33d76d0d3..045a1b0e4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ Changelog +# [1.0.0-beta.15](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.14...v1.0.0-beta.15) (2024-04-05) + + +### Features + +* update drop shadows ([#885](https://github.com/palmetto/palmetto-components/issues/885)) ([189b809](https://github.com/palmetto/palmetto-components/commit/189b80935c49d32fb9b929a6c4cd21c3dbde06e2)) + # [1.0.0-beta.14](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.13...v1.0.0-beta.14) (2024-03-15) From bc78fa2a776d6b0506865ae2d76456401b0c686f Mon Sep 17 00:00:00 2001 From: Nathan Young <1447339+nathanyoung@users.noreply.github.com> Date: Fri, 5 Apr 2024 11:21:21 -0700 Subject: [PATCH 33/40] feat: update drop shadows (#886) --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index f306b96de..f03370a93 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ }, "dependencies": { "@palmetto/dialog": "^0.16.4", - "@palmetto/palmetto-design-tokens": "0.78.1", + "@palmetto/palmetto-design-tokens": "0.79.0", "@popperjs/core": "^2.5.3", "classnames": "^2.2.6", "cleave.js": "^1.6.0", diff --git a/yarn.lock b/yarn.lock index 13207dd39..0966b1fa1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3346,10 +3346,10 @@ react-remove-scroll "^2.4.3" tslib "^2.3.0" -"@palmetto/palmetto-design-tokens@0.78.1": - version "0.78.1" - resolved "https://registry.yarnpkg.com/@palmetto/palmetto-design-tokens/-/palmetto-design-tokens-0.78.1.tgz#d5c3236aa3a0be1d4b4f96a72d94c65f8d634cea" - integrity sha512-XafWtXSlAMQNFwBB/kOZ/z0aXur0JRH5RmfgY6h1P6O7eU9MUrbCFZK5CSp4mb6xa6gpOVTr/4oDvxhomhHEaA== +"@palmetto/palmetto-design-tokens@0.79.0": + version "0.79.0" + resolved "https://registry.yarnpkg.com/@palmetto/palmetto-design-tokens/-/palmetto-design-tokens-0.79.0.tgz#9dd2c90a24974fa710d43f89aaa43738ffc6fb71" + integrity sha512-pKOV8a298BP4z2B9URK8SSFpTSU8aFeIrC5PWtePr318onwkuAIAi7QzRBuNBXDMjdjkxwFuNVGgtsq0RYDd0w== "@pmmmwh/react-refresh-webpack-plugin@^0.5.3": version "0.5.10" From 4635701f4ea591060316c51b4066206b648ded78 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Fri, 5 Apr 2024 18:23:53 +0000 Subject: [PATCH 34/40] chore(release): 1.0.0-beta.16 [skip ci] # [1.0.0-beta.16](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.15...v1.0.0-beta.16) (2024-04-05) ### Features * update drop shadows ([#886](https://github.com/palmetto/palmetto-components/issues/886)) ([bc78fa2](https://github.com/palmetto/palmetto-components/commit/bc78fa2a776d6b0506865ae2d76456401b0c686f)) --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 045a1b0e4..f0ef7c3a3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ Changelog +# [1.0.0-beta.16](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.15...v1.0.0-beta.16) (2024-04-05) + + +### Features + +* update drop shadows ([#886](https://github.com/palmetto/palmetto-components/issues/886)) ([bc78fa2](https://github.com/palmetto/palmetto-components/commit/bc78fa2a776d6b0506865ae2d76456401b0c686f)) + # [1.0.0-beta.15](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.14...v1.0.0-beta.15) (2024-04-05) From dc80427d4c7011068fcda861e2b299fc34feafbc Mon Sep 17 00:00:00 2001 From: Nathan Young <1447339+nathanyoung@users.noreply.github.com> Date: Fri, 12 Apr 2024 10:05:44 -0700 Subject: [PATCH 35/40] build: package updates (#888) * build(deps): bump tar from 6.1.14 to 6.2.1 (#887) Bumps [tar](https://github.com/isaacs/node-tar) from 6.1.14 to 6.2.1. - [Release notes](https://github.com/isaacs/node-tar/releases) - [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md) - [Commits](https://github.com/isaacs/node-tar/compare/v6.1.14...v6.2.1) --- updated-dependencies: - dependency-name: tar dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Nathan Young <1447339+nathanyoung@users.noreply.github.com> * build(deps): bump express from 4.18.2 to 4.19.2 (#884) Bumps [express](https://github.com/expressjs/express) from 4.18.2 to 4.19.2. - [Release notes](https://github.com/expressjs/express/releases) - [Changelog](https://github.com/expressjs/express/blob/master/History.md) - [Commits](https://github.com/expressjs/express/compare/4.18.2...4.19.2) --- updated-dependencies: - dependency-name: express dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Nathan Young <1447339+nathanyoung@users.noreply.github.com> * build(deps): bump es5-ext from 0.10.53 to 0.10.63 (#872) Bumps [es5-ext](https://github.com/medikoo/es5-ext) from 0.10.53 to 0.10.63. - [Release notes](https://github.com/medikoo/es5-ext/releases) - [Changelog](https://github.com/medikoo/es5-ext/blob/main/CHANGELOG.md) - [Commits](https://github.com/medikoo/es5-ext/compare/v0.10.53...v0.10.63) --- updated-dependencies: - dependency-name: es5-ext dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 112 ++++++++++++++++++++++++++++++------------------------ 1 file changed, 62 insertions(+), 50 deletions(-) diff --git a/yarn.lock b/yarn.lock index 0966b1fa1..77f13dd86 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7364,13 +7364,13 @@ bn.js@^5.0.0, bn.js@^5.2.1: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== -body-parser@1.20.1: - version "1.20.1" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" - integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== +body-parser@1.20.2: + version "1.20.2" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" + integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== dependencies: bytes "3.1.2" - content-type "~1.0.4" + content-type "~1.0.5" debug "2.6.9" depd "2.0.0" destroy "1.2.0" @@ -7378,7 +7378,7 @@ body-parser@1.20.1: iconv-lite "0.4.24" on-finished "2.4.1" qs "6.11.0" - raw-body "2.5.1" + raw-body "2.5.2" type-is "~1.6.18" unpipe "1.0.0" @@ -8592,7 +8592,7 @@ content-disposition@0.5.4: dependencies: safe-buffer "5.2.1" -content-type@~1.0.4: +content-type@~1.0.4, content-type@~1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== @@ -8669,10 +8669,10 @@ cookie-signature@1.0.6: resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== -cookie@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" - integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== +cookie@0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051" + integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== copy-concurrently@^1.0.0: version "1.0.5" @@ -10338,24 +10338,25 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -es5-ext@^0.10.35, es5-ext@^0.10.50: - version "0.10.53" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" - integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== +es5-ext@^0.10.35, es5-ext@^0.10.50, es5-ext@^0.10.62, es5-ext@~0.10.14: + version "0.10.63" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.63.tgz#9c222a63b6a332ac80b1e373b426af723b895bd6" + integrity sha512-hUCZd2Byj/mNKjfP9jXrdVZ62B8KuA/VoK7X8nUh5qT+AxDmcbvZz041oDVZdbIN1qW6XY9VDNwzkvKnZvK2TQ== dependencies: - es6-iterator "~2.0.3" - es6-symbol "~3.1.3" - next-tick "~1.0.0" + es6-iterator "^2.0.3" + es6-symbol "^3.1.3" + esniff "^2.0.1" + next-tick "^1.1.0" es5-shim@^4.5.13: version "4.6.7" resolved "https://registry.yarnpkg.com/es5-shim/-/es5-shim-4.6.7.tgz#bc67ae0fc3dd520636e0a1601cc73b450ad3e955" integrity sha512-jg21/dmlrNQI7JyyA2w7n+yifSxBng0ZralnSfVZjoCawgNTCnS+yBCyVM9DL5itm7SUnDGgv7hcq2XCZX4iRQ== -es6-iterator@2.0.3, es6-iterator@~2.0.3: +es6-iterator@2.0.3, es6-iterator@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" - integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= + integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== dependencies: d "1" es5-ext "^0.10.35" @@ -10378,7 +10379,7 @@ es6-shim@^0.35.5: resolved "https://registry.yarnpkg.com/es6-shim/-/es6-shim-0.35.8.tgz#89216f6fbf8bacba3f897c8c0e814d2a41c05fb7" integrity sha512-Twf7I2v4/1tLoIXMT8HlqaBSS5H2wQTs2wx3MNYCI8K1R1/clXyCazrcVCPm/FuO9cyV8+leEaZOWD5C253NDg== -es6-symbol@^3.1.1, es6-symbol@~3.1.3: +es6-symbol@^3.1.1, es6-symbol@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== @@ -10755,6 +10756,16 @@ eslint@^8.7.0: text-table "^0.2.0" v8-compile-cache "^2.0.3" +esniff@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/esniff/-/esniff-2.0.1.tgz#a4d4b43a5c71c7ec51c51098c1d8a29081f9b308" + integrity sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg== + dependencies: + d "^1.0.1" + es5-ext "^0.10.62" + event-emitter "^0.3.5" + type "^2.7.2" + espree@^7.3.0, espree@^7.3.1: version "7.3.1" resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" @@ -10836,6 +10847,14 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== +event-emitter@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" + integrity sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA== + dependencies: + d "1" + es5-ext "~0.10.14" + eventemitter3@^4.0.0, eventemitter3@^4.0.4: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" @@ -10976,16 +10995,16 @@ expect@^29.0.0: jest-util "^29.3.1" express@^4.17.1: - version "4.18.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" - integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== + version "4.19.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.19.2.tgz#e25437827a3aa7f2a827bc8171bbbb664a356465" + integrity sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q== dependencies: accepts "~1.3.8" array-flatten "1.1.1" - body-parser "1.20.1" + body-parser "1.20.2" content-disposition "0.5.4" content-type "~1.0.4" - cookie "0.5.0" + cookie "0.6.0" cookie-signature "1.0.6" debug "2.6.9" depd "2.0.0" @@ -15741,10 +15760,10 @@ nested-error-stacks@^2.0.0, nested-error-stacks@^2.1.0: resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-2.1.1.tgz#26c8a3cee6cc05fbcf1e333cd2fc3e003326c0b5" integrity sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw== -next-tick@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" - integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= +next-tick@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" + integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== nice-try@^1.0.4: version "1.0.5" @@ -18352,10 +18371,10 @@ range-parser@^1.2.1, range-parser@~1.2.1: resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== +raw-body@2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== dependencies: bytes "3.1.2" http-errors "2.0.0" @@ -21074,10 +21093,10 @@ tar-stream@^1.1.2, tar-stream@^1.5.4: to-buffer "^1.1.1" xtend "^4.0.0" -tar@^6.0.2: - version "6.1.14" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.14.tgz#e87926bec1cfe7c9e783a77a79f3e81c1cfa3b66" - integrity sha512-piERznXu0U7/pW7cdSn7hjqySIVTYT6F76icmFk7ptU7dDYlXTm5r9A6K04R2vU3olYgoKeo1Cg3eeu5nhftAw== +tar@^6.0.2, tar@^6.1.0, tar@^6.1.11, tar@^6.1.2: + version "6.2.1" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" + integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== dependencies: chownr "^2.0.0" fs-minipass "^2.0.0" @@ -21086,18 +21105,6 @@ tar@^6.0.2: mkdirp "^1.0.3" yallist "^4.0.0" -tar@^6.1.0, tar@^6.1.11, tar@^6.1.2: - version "6.1.11" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" - integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^3.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - telejson@^5.3.2, telejson@^5.3.3: version "5.3.3" resolved "https://registry.yarnpkg.com/telejson/-/telejson-5.3.3.tgz#fa8ca84543e336576d8734123876a9f02bf41d2e" @@ -21655,6 +21662,11 @@ type@^2.5.0: resolved "https://registry.yarnpkg.com/type/-/type-2.6.0.tgz#3ca6099af5981d36ca86b78442973694278a219f" integrity sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ== +type@^2.7.2: + version "2.7.2" + resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" + integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== + typed-array-length@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" From b403ae287739bcbf00d028ee1a2fc0cc6a2c502a Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Fri, 12 Apr 2024 17:08:23 +0000 Subject: [PATCH 36/40] chore(release): 1.0.0-beta.17 [skip ci] # [1.0.0-beta.17](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.16...v1.0.0-beta.17) (2024-04-12) --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f0ef7c3a3..c1084930e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ Changelog +# [1.0.0-beta.17](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.16...v1.0.0-beta.17) (2024-04-12) + # [1.0.0-beta.16](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.15...v1.0.0-beta.16) (2024-04-05) From 7fc6188263d9c6f2968e7f9395e2fec174bc1537 Mon Sep 17 00:00:00 2001 From: Nathan Young <1447339+nathanyoung@users.noreply.github.com> Date: Mon, 29 Apr 2024 12:33:41 -0700 Subject: [PATCH 37/40] bump(deps): package bumps (#890) * bump(deps): dependency updates * update chromatic * Update yarn.lock * babel * Update yarn.lock --- .gitignore | 1 + package.json | 2 +- yarn.lock | 2497 ++++++++++++++++++++++++++++++++++---------------- 3 files changed, 1719 insertions(+), 781 deletions(-) diff --git a/.gitignore b/.gitignore index 62fb9b839..d1661c88b 100644 --- a/.gitignore +++ b/.gitignore @@ -26,3 +26,4 @@ npm-debug.log* yarn-debug.log* yarn-error.log* +build-storybook.log diff --git a/package.json b/package.json index f03370a93..254f5b481 100644 --- a/package.json +++ b/package.json @@ -118,7 +118,7 @@ "babel-loader": "^8.1.0", "babel-plugin-typescript-to-proptypes": "^1.4.0", "babel-preset-react-app": "^9.1.2", - "chromatic": "^10.2.0", + "chromatic": "^11.3.0", "clean-webpack-plugin": "^3.0.0", "cross-env": "^7.0.3", "css-loader": "^3.6.0", diff --git a/yarn.lock b/yarn.lock index 77f13dd86..300371f47 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7,7 +7,15 @@ resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.3.2.tgz#a6abc715fb6884851fca9dad37fc34739a04fd11" integrity sha512-DA5a1C0gD/pLOvhv33YMrbf2FK3oUzwNl9oOJqE4XVjuEtt6XIakRcsd7eLiOSPkp1kTRQGICTA8cKra/vFbjw== -"@ampproject/remapping@^2.1.0", "@ampproject/remapping@^2.2.0": +"@ampproject/remapping@^2.1.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" + integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" + +"@ampproject/remapping@^2.2.0": version "2.2.1" resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== @@ -22,7 +30,15 @@ dependencies: "@babel/highlight" "^7.10.4" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.21.4", "@babel/code-frame@^7.5.5", "@babel/code-frame@^7.8.3": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.5", "@babel/code-frame@^7.24.2": + version "7.24.2" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.2.tgz#718b4b19841809a58b29b68cde80bc5e1aa6d9ae" + integrity sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ== + dependencies: + "@babel/highlight" "^7.24.2" + picocolors "^1.0.0" + +"@babel/code-frame@^7.10.4", "@babel/code-frame@^7.21.4", "@babel/code-frame@^7.5.5", "@babel/code-frame@^7.8.3": version "7.21.4" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.21.4.tgz#d0fa9e4413aca81f2b23b9442797bda1826edb39" integrity sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g== @@ -43,20 +59,17 @@ dependencies: "@babel/highlight" "^7.18.6" -"@babel/code-frame@^7.22.13": - version "7.22.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" - integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== - dependencies: - "@babel/highlight" "^7.22.13" - chalk "^2.4.2" - "@babel/compat-data@^7.16.4", "@babel/compat-data@^7.16.8", "@babel/compat-data@^7.17.0": version "7.20.10" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.10.tgz#9d92fa81b87542fff50e848ed585b4212c1d34ec" integrity sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg== -"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.5", "@babel/compat-data@^7.21.5": +"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.21.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.5": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.4.tgz#6f102372e9094f25d908ca0d34fc74c74606059a" + integrity sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ== + +"@babel/compat-data@^7.20.5": version "7.21.7" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.21.7.tgz#61caffb60776e49a57ba61a88f02bedd8714f6bc" integrity sha512-KYMqFYTaenzMK4yUtf4EW9wc4N9ef80FsbMtkwool5zpwl4YrT1SdWYSTRcT94KO4hannogdS+LxY7L+arP3gA== @@ -132,25 +145,25 @@ semver "^6.3.0" "@babel/core@^7.10.3": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.20.7.tgz#37072f951bd4d28315445f66e0ec9f6ae0c8c35f" - integrity sha512-t1ZjCluspe5DW24bn2Rr1CDb2v9rn/hROtg9a2tmd0+QYf4bsloYfLQzjG4qHPNMhWtKdGC33R5AxGR2Af2cBw== + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.5.tgz#15ab5b98e101972d171aeef92ac70d8d6718f06a" + integrity sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA== dependencies: - "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.20.7" - "@babel/helper-compilation-targets" "^7.20.7" - "@babel/helper-module-transforms" "^7.20.7" - "@babel/helpers" "^7.20.7" - "@babel/parser" "^7.20.7" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.20.7" - "@babel/types" "^7.20.7" - convert-source-map "^1.7.0" + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.24.2" + "@babel/generator" "^7.24.5" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-module-transforms" "^7.24.5" + "@babel/helpers" "^7.24.5" + "@babel/parser" "^7.24.5" + "@babel/template" "^7.24.0" + "@babel/traverse" "^7.24.5" + "@babel/types" "^7.24.5" + convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" - json5 "^2.2.1" - semver "^6.3.0" + json5 "^2.2.3" + semver "^6.3.1" "@babel/core@^7.17.5", "@babel/core@^7.7.2", "@babel/core@^7.8.0": version "7.17.9" @@ -173,7 +186,7 @@ json5 "^2.2.1" semver "^6.3.0" -"@babel/generator@^7.12.11", "@babel/generator@^7.12.5", "@babel/generator@^7.20.7", "@babel/generator@^7.21.5": +"@babel/generator@^7.12.11", "@babel/generator@^7.12.5", "@babel/generator@^7.21.5": version "7.21.5" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.21.5.tgz#c0c0e5449504c7b7de8236d99338c3e2a340745f" integrity sha512-SrKK/sRv8GesIW1bDagf9cCG38IOMYZusoe1dfg0D8aiUe3Amvoj1QtjTPAWcfrZFvIwlleLb0gxzQidL9w14w== @@ -192,14 +205,14 @@ jsesc "^2.5.1" source-map "^0.5.0" -"@babel/generator@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420" - integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g== +"@babel/generator@^7.23.0", "@babel/generator@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.5.tgz#e5afc068f932f05616b66713e28d0f04e99daeb3" + integrity sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA== dependencies: - "@babel/types" "^7.23.0" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" + "@babel/types" "^7.24.5" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" jsesc "^2.5.1" "@babel/generator@^7.9.0": @@ -211,13 +224,20 @@ jsesc "^2.5.1" source-map "^0.5.0" -"@babel/helper-annotate-as-pure@^7.16.7", "@babel/helper-annotate-as-pure@^7.18.6": +"@babel/helper-annotate-as-pure@^7.16.7": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== dependencies: "@babel/types" "^7.18.6" +"@babel/helper-annotate-as-pure@^7.18.6", "@babel/helper-annotate-as-pure@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" + integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== + dependencies: + "@babel/types" "^7.22.5" + "@babel/helper-builder-binary-assignment-operator-visitor@^7.16.7": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz#acd4edfd7a566d1d51ea975dff38fd52906981bb" @@ -233,7 +253,7 @@ dependencies: "@babel/types" "^7.21.5" -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.21.5": +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.21.5": version "7.21.5" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.5.tgz#631e6cc784c7b660417421349aac304c94115366" integrity sha512-1RkbFGUKex4lvsB9yhIfWltJM5cZKUftB2eNajaDv3dCMEp49iBG0K14uH8NnX9IPux2+mK7JGEOB0jn48/J6w== @@ -255,6 +275,17 @@ lru-cache "^5.1.1" semver "^6.3.0" +"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" + integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== + dependencies: + "@babel/compat-data" "^7.23.5" + "@babel/helper-validator-option" "^7.23.5" + browserslist "^4.22.2" + lru-cache "^5.1.1" + semver "^6.3.1" + "@babel/helper-compilation-targets@^7.8.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz#06e66c5f299601e6c7da350049315e83209d551b" @@ -349,17 +380,28 @@ resolve "^1.14.2" semver "^6.1.2" +"@babel/helper-define-polyfill-provider@^0.6.1", "@babel/helper-define-polyfill-provider@^0.6.2": + version "0.6.2" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz#18594f789c3594acb24cfdb4a7f7b7d2e8bd912d" + integrity sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ== + dependencies: + "@babel/helper-compilation-targets" "^7.22.6" + "@babel/helper-plugin-utils" "^7.22.5" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + "@babel/helper-environment-visitor@^7.16.7": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== -"@babel/helper-environment-visitor@^7.18.9", "@babel/helper-environment-visitor@^7.21.5": +"@babel/helper-environment-visitor@^7.18.9": version "7.21.5" resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.21.5.tgz#c769afefd41d171836f7cb63e295bedf689d48ba" integrity sha512-IYl4gZ3ETsWocUWgsFZLM5i1BYx9SoemminVEXadgLBa9TdeorzgLKm8wWLA6J1N/kT3Kch8XIk1laNzYoHKvQ== -"@babel/helper-environment-visitor@^7.22.20": +"@babel/helper-environment-visitor@^7.21.5", "@babel/helper-environment-visitor@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== @@ -437,14 +479,21 @@ dependencies: "@babel/types" "^7.16.7" -"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.18.6", "@babel/helper-module-imports@^7.21.4": +"@babel/helper-module-imports@^7.12.13": version "7.21.4" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz#ac88b2f76093637489e718a90cec6cf8a9b029af" integrity sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg== dependencies: "@babel/types" "^7.21.4" -"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.20.11", "@babel/helper-module-transforms@^7.20.7", "@babel/helper-module-transforms@^7.21.5": +"@babel/helper-module-imports@^7.18.6", "@babel/helper-module-imports@^7.21.4", "@babel/helper-module-imports@^7.22.15", "@babel/helper-module-imports@^7.24.3": + version "7.24.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz#6ac476e6d168c7c23ff3ba3cf4f7841d46ac8128" + integrity sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg== + dependencies: + "@babel/types" "^7.24.0" + +"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.20.11", "@babel/helper-module-transforms@^7.21.5": version "7.21.5" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.21.5.tgz#d937c82e9af68d31ab49039136a222b17ac0b420" integrity sha512-bI2Z9zBGY2q5yMHoBvJ2a9iX3ZOAzJPm7Q8Yz6YeoUjU/Cvhmi2G4QyTNyPBqqXSgTjUxRg3L0xV45HvkNWWBw== @@ -486,6 +535,17 @@ "@babel/traverse" "^7.17.3" "@babel/types" "^7.17.0" +"@babel/helper-module-transforms@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.24.5.tgz#ea6c5e33f7b262a0ae762fd5986355c45f54a545" + integrity sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-module-imports" "^7.24.3" + "@babel/helper-simple-access" "^7.24.5" + "@babel/helper-split-export-declaration" "^7.24.5" + "@babel/helper-validator-identifier" "^7.24.5" + "@babel/helper-module-transforms@^7.9.0": version "7.17.6" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.17.6.tgz#3c3b03cc6617e33d68ef5a27a67419ac5199ccd0" @@ -512,11 +572,16 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.21.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.21.5" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.21.5.tgz#345f2377d05a720a4e5ecfa39cbf4474a4daed56" integrity sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg== +"@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.21.5", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.0": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.5.tgz#a924607dd254a65695e5bd209b98b902b3b2f11a" + integrity sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ== + "@babel/helper-remap-async-to-generator@^7.16.8", "@babel/helper-remap-async-to-generator@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz#997458a0e3357080e54e1d79ec347f8a8cd28519" @@ -565,63 +630,77 @@ dependencies: "@babel/types" "^7.17.0" -"@babel/helper-simple-access@^7.20.2", "@babel/helper-simple-access@^7.21.5": +"@babel/helper-simple-access@^7.20.2": version "7.21.5" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz#d697a7971a5c39eac32c7e63c0921c06c8a249ee" integrity sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg== dependencies: "@babel/types" "^7.21.5" -"@babel/helper-skip-transparent-expression-wrappers@^7.16.0", "@babel/helper-skip-transparent-expression-wrappers@^7.20.0": +"@babel/helper-simple-access@^7.21.5", "@babel/helper-simple-access@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.24.5.tgz#50da5b72f58c16b07fbd992810be6049478e85ba" + integrity sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ== + dependencies: + "@babel/types" "^7.24.5" + +"@babel/helper-skip-transparent-expression-wrappers@^7.16.0": version "7.20.0" resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz#fbe4c52f60518cab8140d77101f0e63a8a230684" integrity sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg== dependencies: "@babel/types" "^7.20.0" -"@babel/helper-split-export-declaration@^7.16.7", "@babel/helper-split-export-declaration@^7.18.6": +"@babel/helper-skip-transparent-expression-wrappers@^7.20.0", "@babel/helper-skip-transparent-expression-wrappers@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" + integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-split-export-declaration@^7.16.7": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== dependencies: "@babel/types" "^7.18.6" -"@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" - integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== +"@babel/helper-split-export-declaration@^7.18.6", "@babel/helper-split-export-declaration@^7.22.6", "@babel/helper-split-export-declaration@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.5.tgz#b9a67f06a46b0b339323617c8c6213b9055a78b6" + integrity sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q== dependencies: - "@babel/types" "^7.22.5" + "@babel/types" "^7.24.5" -"@babel/helper-string-parser@^7.19.4", "@babel/helper-string-parser@^7.21.5": +"@babel/helper-string-parser@^7.19.4": version "7.21.5" resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz#2b3eea65443c6bdc31c22d037c65f6d323b6b2bd" integrity sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w== -"@babel/helper-string-parser@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" - integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== +"@babel/helper-string-parser@^7.21.5", "@babel/helper-string-parser@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz#f99c36d3593db9540705d0739a1f10b5e20c696e" + integrity sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ== -"@babel/helper-validator-identifier@^7.16.7", "@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": +"@babel/helper-validator-identifier@^7.16.7": version "7.19.1" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== -"@babel/helper-validator-identifier@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" - integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== +"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1", "@babel/helper-validator-identifier@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz#918b1a7fa23056603506370089bd990d8720db62" + integrity sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA== "@babel/helper-validator-option@^7.16.7": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== -"@babel/helper-validator-option@^7.18.6", "@babel/helper-validator-option@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz#8224c7e13ace4bafdc4004da2cf064ef42673180" - integrity sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ== +"@babel/helper-validator-option@^7.18.6", "@babel/helper-validator-option@^7.21.0", "@babel/helper-validator-option@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" + integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== "@babel/helper-wrap-function@^7.18.9": version "7.20.5" @@ -633,7 +712,7 @@ "@babel/traverse" "^7.20.5" "@babel/types" "^7.20.5" -"@babel/helpers@^7.12.5", "@babel/helpers@^7.20.7", "@babel/helpers@^7.21.5": +"@babel/helpers@^7.12.5", "@babel/helpers@^7.21.5": version "7.21.5" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.21.5.tgz#5bac66e084d7a4d2d9696bdf0175a93f7fb63c08" integrity sha512-BSY+JSlHxOmGsPTydUkPf1MdMQ3M81x5xGCOVgWM3G8XH77sJ292Y2oqcp0CbbgxhqBuI46iUz1tT7hqP7EfgA== @@ -651,6 +730,15 @@ "@babel/traverse" "^7.17.9" "@babel/types" "^7.17.0" +"@babel/helpers@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.5.tgz#fedeb87eeafa62b621160402181ad8585a22a40a" + integrity sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q== + dependencies: + "@babel/template" "^7.24.0" + "@babel/traverse" "^7.24.5" + "@babel/types" "^7.24.5" + "@babel/helpers@^7.9.0": version "7.17.2" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.17.2.tgz#23f0a0746c8e287773ccd27c14be428891f63417" @@ -669,7 +757,7 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/highlight@^7.16.7", "@babel/highlight@^7.18.6": +"@babel/highlight@^7.16.7": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== @@ -678,21 +766,22 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/highlight@^7.22.13": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" - integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== +"@babel/highlight@^7.18.6", "@babel/highlight@^7.24.2": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.5.tgz#bc0613f98e1dd0720e99b2a9ee3760194a704b6e" + integrity sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw== dependencies: - "@babel/helper-validator-identifier" "^7.22.20" + "@babel/helper-validator-identifier" "^7.24.5" chalk "^2.4.2" js-tokens "^4.0.0" + picocolors "^1.0.0" "@babel/parser@^7.1.0", "@babel/parser@^7.9.0": version "7.17.3" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.3.tgz#b07702b982990bf6fdc1da5049a23fece4c5c3d0" integrity sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA== -"@babel/parser@^7.12.11", "@babel/parser@^7.12.7", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.21.8": +"@babel/parser@^7.12.11", "@babel/parser@^7.12.7", "@babel/parser@^7.14.7", "@babel/parser@^7.21.8": version "7.21.8" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.8.tgz#642af7d0333eab9c0ad70b14ac5e76dbde7bfdf8" integrity sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA== @@ -707,10 +796,10 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.9.tgz#9c94189a6062f0291418ca021077983058e171ef" integrity sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg== -"@babel/parser@^7.22.15", "@babel/parser@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" - integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== +"@babel/parser@^7.20.7", "@babel/parser@^7.23.0", "@babel/parser@^7.24.0", "@babel/parser@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.5.tgz#4a4d5ab4315579e5398a82dcf636ca80c3392790" + integrity sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg== "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": version "7.18.6" @@ -1143,13 +1232,20 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-syntax-jsx@^7.18.6", "@babel/plugin-syntax-jsx@^7.21.4": +"@babel/plugin-syntax-jsx@^7.18.6": version "7.21.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz#f264ed7bf40ffc9ec239edabc17a50c4f5b6fea2" integrity sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ== dependencies: "@babel/helper-plugin-utils" "^7.20.2" +"@babel/plugin-syntax-jsx@^7.21.4", "@babel/plugin-syntax-jsx@^7.23.3": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz#3f6ca04b8c841811dbc3c5c5f837934e0d626c10" + integrity sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" @@ -1694,13 +1790,20 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-react-display-name@^7.16.7", "@babel/plugin-transform-react-display-name@^7.18.6": +"@babel/plugin-transform-react-display-name@^7.16.7": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz#8b1125f919ef36ebdfff061d664e266c666b9415" integrity sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA== dependencies: "@babel/helper-plugin-utils" "^7.18.6" +"@babel/plugin-transform-react-display-name@^7.18.6", "@babel/plugin-transform-react-display-name@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.1.tgz#554e3e1a25d181f040cf698b93fd289a03bfdcdb" + integrity sha512-mvoQg2f9p2qlpDQRBC7M3c3XTr0k7cp/0+kFKKO/7Gtu0LSw16eKB+Fabe2bDT/UpsyasTBBkAnbdsLrkD5XMw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/plugin-transform-react-display-name@^7.8.3": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz#7b6d40d232f4c0f550ea348593db3b21e2404340" @@ -1708,13 +1811,20 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-react-jsx-development@^7.16.7", "@babel/plugin-transform-react-jsx-development@^7.18.6": +"@babel/plugin-transform-react-jsx-development@^7.16.7": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz#dbe5c972811e49c7405b630e4d0d2e1380c0ddc5" integrity sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA== dependencies: "@babel/plugin-transform-react-jsx" "^7.18.6" +"@babel/plugin-transform-react-jsx-development@^7.18.6", "@babel/plugin-transform-react-jsx-development@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz#e716b6edbef972a92165cd69d92f1255f7e73e87" + integrity sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A== + dependencies: + "@babel/plugin-transform-react-jsx" "^7.22.5" + "@babel/plugin-transform-react-jsx-development@^7.9.0": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz#43a00724a3ed2557ed3f276a01a929e6686ac7b8" @@ -1736,7 +1846,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-react-jsx@^7.12.12", "@babel/plugin-transform-react-jsx@^7.18.6": +"@babel/plugin-transform-react-jsx@^7.12.12": version "7.21.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.21.5.tgz#bd98f3b429688243e4fa131fe1cbb2ef31ce6f38" integrity sha512-ELdlq61FpoEkHO6gFRpfj0kUgSwQTGoaEU8eMRoS8Dv3v6e7BjEAj5WMtIBRdHUeAioMhKP5HyxNzNnP+heKbA== @@ -1758,6 +1868,17 @@ "@babel/plugin-syntax-jsx" "^7.18.6" "@babel/types" "^7.20.7" +"@babel/plugin-transform-react-jsx@^7.18.6", "@babel/plugin-transform-react-jsx@^7.22.5", "@babel/plugin-transform-react-jsx@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz#393f99185110cea87184ea47bcb4a7b0c2e39312" + integrity sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-jsx" "^7.23.3" + "@babel/types" "^7.23.4" + "@babel/plugin-transform-react-jsx@^7.9.1": version "7.17.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.3.tgz#eac1565da176ccb1a715dae0b4609858808008c1" @@ -1769,7 +1890,7 @@ "@babel/plugin-syntax-jsx" "^7.16.7" "@babel/types" "^7.17.0" -"@babel/plugin-transform-react-pure-annotations@^7.16.7", "@babel/plugin-transform-react-pure-annotations@^7.18.6": +"@babel/plugin-transform-react-pure-annotations@^7.16.7": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz#561af267f19f3e5d59291f9950fd7b9663d0d844" integrity sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ== @@ -1777,7 +1898,23 @@ "@babel/helper-annotate-as-pure" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-regenerator@^7.10.4", "@babel/plugin-transform-regenerator@^7.16.7": +"@babel/plugin-transform-react-pure-annotations@^7.18.6", "@babel/plugin-transform-react-pure-annotations@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.1.tgz#c86bce22a53956331210d268e49a0ff06e392470" + integrity sha512-+pWEAaDJvSm9aFvJNpLiM2+ktl2Sn2U5DdyiWdZBxmLc6+xGt88dvFqsHiAiDS+8WqUwbDfkKz9jRxK3M0k+kA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" + +"@babel/plugin-transform-regenerator@^7.10.4": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.1.tgz#625b7545bae52363bdc1fbbdc7252b5046409c8c" + integrity sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.0" + regenerator-transform "^0.15.2" + +"@babel/plugin-transform-regenerator@^7.16.7": version "7.20.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz#57cda588c7ffb7f4f8483cc83bdcea02a907f04d" integrity sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ== @@ -1825,16 +1962,16 @@ semver "^5.5.1" "@babel/plugin-transform-runtime@^7.10.4": - version "7.19.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz#9d2a9dbf4e12644d6f46e5e75bfbf02b5d6e9194" - integrity sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw== + version "7.24.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.3.tgz#dc58ad4a31810a890550365cc922e1ff5acb5d7f" + integrity sha512-J0BuRPNlNqlMTRJ72eVptpt9VcInbxO6iP3jaxr+1NPhC0UkKL+6oeX6VXMEYdADnuqmMmsBspt4d5w8Y/TCbQ== dependencies: - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-plugin-utils" "^7.19.0" - babel-plugin-polyfill-corejs2 "^0.3.3" - babel-plugin-polyfill-corejs3 "^0.6.0" - babel-plugin-polyfill-regenerator "^0.4.1" - semver "^6.3.0" + "@babel/helper-module-imports" "^7.24.3" + "@babel/helper-plugin-utils" "^7.24.0" + babel-plugin-polyfill-corejs2 "^0.4.10" + babel-plugin-polyfill-corejs3 "^0.10.1" + babel-plugin-polyfill-regenerator "^0.6.1" + semver "^6.3.1" "@babel/plugin-transform-shorthand-properties@^7.12.1", "@babel/plugin-transform-shorthand-properties@^7.16.7", "@babel/plugin-transform-shorthand-properties@^7.18.6": version "7.18.6" @@ -1850,7 +1987,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-spread@^7.12.1", "@babel/plugin-transform-spread@^7.13.0", "@babel/plugin-transform-spread@^7.16.7", "@babel/plugin-transform-spread@^7.20.7": +"@babel/plugin-transform-spread@^7.12.1", "@babel/plugin-transform-spread@^7.16.7", "@babel/plugin-transform-spread@^7.20.7": version "7.20.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz#c2d83e0b99d3bf83e07b11995ee24bf7ca09401e" integrity sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw== @@ -1858,6 +1995,14 @@ "@babel/helper-plugin-utils" "^7.20.2" "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" +"@babel/plugin-transform-spread@^7.13.0": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz#a1acf9152cbf690e4da0ba10790b3ac7d2b2b391" + integrity sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g== + dependencies: + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/plugin-transform-spread@^7.8.3": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz#a303e2122f9f12e0105daeedd0f30fb197d8ff44" @@ -2225,7 +2370,19 @@ "@babel/plugin-transform-react-jsx-self" "^7.9.0" "@babel/plugin-transform-react-jsx-source" "^7.9.0" -"@babel/preset-react@^7.10.4", "@babel/preset-react@^7.12.10": +"@babel/preset-react@^7.10.4": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.24.1.tgz#2450c2ac5cc498ef6101a6ca5474de251e33aa95" + integrity sha512-eFa8up2/8cZXLIpkafhaADTXSnl7IsUFCYenRWrARBz0/qZwcT0RBXpys0LJU4+WfPoF2ZG6ew6s2V6izMCwRA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-validator-option" "^7.23.5" + "@babel/plugin-transform-react-display-name" "^7.24.1" + "@babel/plugin-transform-react-jsx" "^7.23.4" + "@babel/plugin-transform-react-jsx-development" "^7.22.5" + "@babel/plugin-transform-react-pure-annotations" "^7.24.1" + +"@babel/preset-react@^7.12.10": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.18.6.tgz#979f76d6277048dc19094c217b507f3ad517dd2d" integrity sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg== @@ -2299,7 +2456,7 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.17.8", "@babel/runtime@^7.5.0", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.17.8", "@babel/runtime@^7.5.0", "@babel/runtime@^7.7.6": version "7.21.5" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.5.tgz#8492dddda9644ae3bda3b45eabe87382caee7200" integrity sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q== @@ -2313,6 +2470,13 @@ dependencies: regenerator-runtime "^0.13.4" +"@babel/runtime@^7.21.0", "@babel/runtime@^7.8.4": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.5.tgz#230946857c053a36ccc66e1dd03b17dd0c4ed02c" + integrity sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g== + dependencies: + regenerator-runtime "^0.14.0" + "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.9.tgz#b4fcfce55db3d2e5e080d2490f608a3b9f407f4a" @@ -2327,7 +2491,7 @@ dependencies: regenerator-runtime "^0.13.11" -"@babel/template@^7.12.7", "@babel/template@^7.16.7", "@babel/template@^7.18.10", "@babel/template@^7.20.7": +"@babel/template@^7.12.7", "@babel/template@^7.16.7", "@babel/template@^7.18.10": version "7.20.7" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== @@ -2336,14 +2500,14 @@ "@babel/parser" "^7.20.7" "@babel/types" "^7.20.7" -"@babel/template@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" - integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== +"@babel/template@^7.20.7", "@babel/template@^7.22.15", "@babel/template@^7.24.0": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.0.tgz#c6a524aa93a4a05d66aaf31654258fae69d87d50" + integrity sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA== dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/parser" "^7.22.15" - "@babel/types" "^7.22.15" + "@babel/code-frame" "^7.23.5" + "@babel/parser" "^7.24.0" + "@babel/types" "^7.24.0" "@babel/template@^7.3.3", "@babel/template@^7.8.6": version "7.16.7" @@ -2354,7 +2518,7 @@ "@babel/parser" "^7.16.7" "@babel/types" "^7.16.7" -"@babel/traverse@^7.1.6", "@babel/traverse@^7.12.11", "@babel/traverse@^7.12.9", "@babel/traverse@^7.13.0", "@babel/traverse@^7.17.0", "@babel/traverse@^7.17.3", "@babel/traverse@^7.17.9", "@babel/traverse@^7.20.10", "@babel/traverse@^7.20.5", "@babel/traverse@^7.20.7", "@babel/traverse@^7.21.5", "@babel/traverse@^7.7.2", "@babel/traverse@^7.9.0": +"@babel/traverse@^7.1.6", "@babel/traverse@^7.12.11", "@babel/traverse@^7.12.9", "@babel/traverse@^7.13.0", "@babel/traverse@^7.17.0", "@babel/traverse@^7.17.3", "@babel/traverse@^7.17.9", "@babel/traverse@^7.20.10", "@babel/traverse@^7.20.5", "@babel/traverse@^7.7.2", "@babel/traverse@^7.9.0": version "7.23.2" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.2.tgz#329c7a06735e144a506bdb2cad0268b7f46f4ad8" integrity sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw== @@ -2370,6 +2534,22 @@ debug "^4.1.0" globals "^11.1.0" +"@babel/traverse@^7.20.7", "@babel/traverse@^7.21.5", "@babel/traverse@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.5.tgz#972aa0bc45f16983bf64aa1f877b2dd0eea7e6f8" + integrity sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA== + dependencies: + "@babel/code-frame" "^7.24.2" + "@babel/generator" "^7.24.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.24.5" + "@babel/parser" "^7.24.5" + "@babel/types" "^7.24.5" + debug "^4.3.1" + globals "^11.1.0" + "@babel/types@^7.0.0", "@babel/types@^7.12.6", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.9.0": version "7.17.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.0.tgz#a826e368bccb6b3d84acd76acad5c0d87342390b" @@ -2378,7 +2558,7 @@ "@babel/helper-validator-identifier" "^7.16.7" to-fast-properties "^2.0.0" -"@babel/types@^7.12.11", "@babel/types@^7.12.7", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.0", "@babel/types@^7.2.0", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.4", "@babel/types@^7.21.5", "@babel/types@^7.4.4": +"@babel/types@^7.12.11", "@babel/types@^7.12.7", "@babel/types@^7.18.9", "@babel/types@^7.19.0", "@babel/types@^7.2.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.21.0", "@babel/types@^7.4.4": version "7.21.5" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.5.tgz#18dfbd47c39d3904d5db3d3dc2cc80bedb60e5b6" integrity sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q== @@ -2396,13 +2576,13 @@ "@babel/helper-validator-identifier" "^7.19.1" to-fast-properties "^2.0.0" -"@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb" - integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg== +"@babel/types@^7.18.6", "@babel/types@^7.20.0", "@babel/types@^7.20.7", "@babel/types@^7.21.4", "@babel/types@^7.21.5", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.4", "@babel/types@^7.24.0", "@babel/types@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.5.tgz#7661930afc638a5383eb0c4aee59b74f38db84d7" + integrity sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ== dependencies: - "@babel/helper-string-parser" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.20" + "@babel/helper-string-parser" "^7.24.1" + "@babel/helper-validator-identifier" "^7.24.5" to-fast-properties "^2.0.0" "@base2/pretty-print-object@1.0.1": @@ -2440,25 +2620,25 @@ dependencies: "@cspotcode/source-map-consumer" "0.8.0" -"@csstools/css-parser-algorithms@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.0.tgz#0cc3a656dc2d638370ecf6f98358973bfbd00141" - integrity sha512-dTKSIHHWc0zPvcS5cqGP+/TPFUJB0ekJ9dGKvMAFoNuBFhDPBt9OMGNZiIA5vTiNdGHHBeScYPXIGBMnVOahsA== +"@csstools/css-parser-algorithms@^2.3.1": + version "2.6.1" + resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.1.tgz#c45440d1efa2954006748a01697072dae5881bcd" + integrity sha512-ubEkAaTfVZa+WwGhs5jbo5Xfqpeaybr/RvWzvFxRs4jfq16wH8l8Ty/QEEpINxll4xhuGfdMbipRyz5QZh9+FA== -"@csstools/css-tokenizer@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-2.1.1.tgz#07ae11a0a06365d7ec686549db7b729bc036528e" - integrity sha512-GbrTj2Z8MCTUv+52GE0RbFGM527xuXZ0Xa5g0Z+YN573uveS4G0qi6WNOMyz3yrFM/jaILTTwJ0+umx81EzqfA== +"@csstools/css-tokenizer@^2.2.0": + version "2.2.4" + resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-2.2.4.tgz#a4b8718ed7fcd2dcd555de16b31ca59ad4b96a06" + integrity sha512-PuWRAewQLbDhGeTvFuq2oClaSCKPIBmHyIobCV39JHRYN0byDcUWJl5baPeNUcqrjtdMNqFooE0FGl31I3JOqw== -"@csstools/media-query-list-parser@^2.1.2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.2.tgz#6ef642b728d30c1009bfbba3211c7e4c11302728" - integrity sha512-M8cFGGwl866o6++vIY7j1AKuq9v57cf+dGepScwCcbut9ypJNr4Cj+LLTWligYUZ0uyhEoJDKt5lvyBfh2L3ZQ== +"@csstools/media-query-list-parser@^2.1.4": + version "2.1.9" + resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.9.tgz#feb4b7268f998956eb3ded69507869e73d005dda" + integrity sha512-qqGuFfbn4rUmyOB0u8CVISIp5FfJ5GAR3mBrZ9/TKndHakdnm6pY0L/fbLcpPnrzwCyyTEZl1nUcXAYHEWneTA== "@csstools/selector-specificity@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-3.0.0.tgz#798622546b63847e82389e473fd67f2707d82247" - integrity sha512-hBI9tfBtuPIi885ZsZ32IMEU/5nlZH/KOVYJCOh7gyMxaVLGmLedYqFN6Ui1LXkI8JlC8IsuC0rF0btcRZKd5g== + version "3.0.3" + resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-3.0.3.tgz#208a3929ee614967a1fc8cd6cb758d9fcbf0caae" + integrity sha512-KEPNw4+WW5AVEIyzC80rTbWEUatTW2lXpN8+8ILC8PiPeWPjwUzrPZDIOZ2wwqDmeqOYTdSGyL3+vE5GC3FB3Q== "@discoveryjs/json-ext@^0.5.3": version "0.5.7" @@ -2613,9 +2793,16 @@ "@lit-labs/react" "^1.0.2" "@fullstory/browser@^1.4.9": - version "1.6.2" - resolved "https://registry.yarnpkg.com/@fullstory/browser/-/browser-1.6.2.tgz#fa636a4579779fe23fa87a11dd175be25c67185c" - integrity sha512-r3kPrTKijI/LkdSW7t1GlXPn4jPuZL4AFGDJBWMj4E4HLeF2lCvZtSOZ1YTwZtJFciLp/+KOIW3qBDkqqXC2qw== + version "1.7.1" + resolved "https://registry.yarnpkg.com/@fullstory/browser/-/browser-1.7.1.tgz#eb94fcb5e21b13a1b30de58951480ac344e61cdd" + integrity sha512-IBPisG+xRyTHHX8XkZJkQRbP2hVYNMZUYW8R3YiB582dl/VZImkFN+LopIAfPqB97FAZgUTofi7flkrHT4Qmtg== + dependencies: + "@fullstory/snippet" "1.3.1" + +"@fullstory/snippet@1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@fullstory/snippet/-/snippet-1.3.1.tgz#6817ea94601e071e630b25262e703ca356a5f537" + integrity sha512-NgrBWGHH5i8zejlRFSyJNhovkNqHAXsWKrcXIWaABrgESwbkdGETjOU7BD7d1ZeT0X+QXL/2yr/1y4xnWfVkwQ== "@gar/promisify@^1.0.1", "@gar/promisify@^1.1.3": version "1.1.3" @@ -2901,24 +3088,29 @@ "@types/yargs" "^17.0.8" chalk "^4.0.0" -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" + integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== dependencies: - "@jridgewell/set-array" "^1.0.1" + "@jridgewell/set-array" "^1.2.1" "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/trace-mapping" "^0.3.24" "@jridgewell/resolve-uri@3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== "@jridgewell/source-map@^0.3.2": version "0.3.3" @@ -2933,12 +3125,12 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== -"@jridgewell/sourcemap-codec@^1.4.10": +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": version "1.4.15" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": +"@jridgewell/trace-mapping@^0.3.12": version "0.3.18" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== @@ -2946,6 +3138,14 @@ "@jridgewell/resolve-uri" "3.1.0" "@jridgewell/sourcemap-codec" "1.4.14" +"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + "@lit-labs/react@^1.0.2": version "1.0.8" resolved "https://registry.yarnpkg.com/@lit-labs/react/-/react-1.0.8.tgz#faba6383e08e4349685fc58a2d316a225924e79a" @@ -3034,10 +3234,10 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@npmcli/arborist@^5.0.0", "@npmcli/arborist@^5.0.4": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-5.4.0.tgz#beef01e0b47c682b74cae4c9266f5720bf1cdf0a" - integrity sha512-gWDDQjoRndukgV9DLDXLqgzY2sIbUJ0D7JNgNlLuMFbei4Gm7EWYulpOyIjYxdYXM9b0L3sAniOOlOVMkMNMXA== +"@npmcli/arborist@^5.6.3": + version "5.6.3" + resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-5.6.3.tgz#40810080272e097b4a7a4f56108f4a31638a9874" + integrity sha512-/7hbqEM6YuRjwTcQXkK1+xKslEblY5kFQe0tZ7jKyMlIR6x4iOmhLErIkBBGtTKvYxRKdpcxnFXjCobg3UqmsA== dependencies: "@isaacs/string-locale-compare" "^1.1.0" "@npmcli/installed-package-contents" "^1.0.7" @@ -3047,20 +3247,21 @@ "@npmcli/name-from-folder" "^1.0.1" "@npmcli/node-gyp" "^2.0.0" "@npmcli/package-json" "^2.0.0" - "@npmcli/query" "^1.1.1" + "@npmcli/query" "^1.2.0" "@npmcli/run-script" "^4.1.3" - bin-links "^3.0.0" - cacache "^16.0.6" + bin-links "^3.0.3" + cacache "^16.1.3" common-ancestor-path "^1.0.1" + hosted-git-info "^5.2.1" json-parse-even-better-errors "^2.3.1" json-stringify-nice "^1.1.4" minimatch "^5.1.0" mkdirp "^1.0.4" mkdirp-infer-owner "^2.0.0" - nopt "^5.0.0" + nopt "^6.0.0" npm-install-checks "^5.0.0" npm-package-arg "^9.0.0" - npm-pick-manifest "^7.0.0" + npm-pick-manifest "^7.0.2" npm-registry-fetch "^13.0.0" npmlog "^6.0.2" pacote "^13.6.1" @@ -3081,15 +3282,15 @@ resolved "https://registry.yarnpkg.com/@npmcli/ci-detect/-/ci-detect-2.0.0.tgz#e63c91bcd4185ac1e85720a34fc48e164ece5b89" integrity sha512-8yQtQ9ArHh/TzdUDKQwEvwCgpDuhSWTDAbiKMl3854PcT+Dk4UmWaiawuFTLy9n5twzXOBXVflWe+90/ffXQrA== -"@npmcli/config@^4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@npmcli/config/-/config-4.2.0.tgz#62b5d2b9cbf93fb2bc9f7cc947f25d7659ef849f" - integrity sha512-imWNz5dNWb2u+y41jyxL2WB389tkhu3a01Rchn16O/ur6GrnKySgOqdNG3N/9Z+mqxdISMEGKXI/POCauzz0dA== +"@npmcli/config@^4.2.1": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@npmcli/config/-/config-4.2.2.tgz#2e3334dda84f48d059309c53d152e66b05ca24b7" + integrity sha512-5GNcLd+0c4bYBnFop53+26CO5GQP0R9YcxlernohpHDWdIgzUg9I0+GEMk3sNHnLntATVU39d283A4OO+W402w== dependencies: "@npmcli/map-workspaces" "^2.0.2" ini "^3.0.0" mkdirp-infer-owner "^2.0.0" - nopt "^5.0.0" + nopt "^6.0.0" proc-log "^2.0.0" read-package-json-fast "^2.0.3" semver "^7.3.5" @@ -3111,17 +3312,17 @@ semver "^7.3.5" "@npmcli/fs@^2.1.0", "@npmcli/fs@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-2.1.1.tgz#c0c480b03450d8b9fc086816a50cb682668a48bf" - integrity sha512-1Q0uzx6c/NVNGszePbr5Gc2riSU1zLpNlo/1YWntH+eaPmMgBssAW0qXofCVkpdj3ce4swZtlDYQu+NKiYcptg== + version "2.1.2" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-2.1.2.tgz#a9e2541a4a2fec2e69c29b35e6060973da79b865" + integrity sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ== dependencies: "@gar/promisify" "^1.1.3" semver "^7.3.5" "@npmcli/git@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-3.0.1.tgz#049b99b1381a2ddf7dc56ba3e91eaf76ca803a8d" - integrity sha512-UU85F/T+F1oVn3IsB/L6k9zXIMpXBuUBE25QDH0SsURwT6IOBqkC7M16uqo2vVZIyji3X1K4XH9luip7YekH1A== + version "3.0.2" + resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-3.0.2.tgz#5c5de6b4d70474cf2d09af149ce42e4e1dacb931" + integrity sha512-CAcd08y3DWBJqJDpfuVL0uijlq5oaXaOJEKHKc4wqrjd00gkvTZB+nFuLn+doOOKddaQS9JfqtNoFCO2LCvA3w== dependencies: "@npmcli/promise-spawn" "^3.0.0" lru-cache "^7.4.4" @@ -3170,9 +3371,9 @@ rimraf "^3.0.2" "@npmcli/move-file@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-2.0.0.tgz#417f585016081a0184cef3e38902cd917a9bbd02" - integrity sha512-UR6D5f4KEGWJV6BGPH3Qb2EtgH+t+1XQ1Tt85c7qicN6cezzuHPdZwwAxqZr4JLtnQu0LZsTza/5gmNmSl8XLg== + version "2.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-2.0.1.tgz#26f6bdc379d87f75e55739bab89db525b06100e4" + integrity sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ== dependencies: mkdirp "^1.0.4" rimraf "^3.0.2" @@ -3201,19 +3402,19 @@ dependencies: infer-owner "^1.0.4" -"@npmcli/query@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/query/-/query-1.1.1.tgz#462c4268473ae39e89d5fefbad94d9af7e1217c4" - integrity sha512-UF3I0fD94wzQ84vojMO2jDB8ibjRSTqhi8oz2mzVKiJ9gZHbeGlu9kzPvgHuGDK0Hf2cARhWtTfCDHNEwlL9hg== +"@npmcli/query@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@npmcli/query/-/query-1.2.0.tgz#46468d583cf013aa92102970700f9555314aabe4" + integrity sha512-uWglsUM3PjBLgTSmZ3/vygeGdvWEIZ3wTUnzGFbprC/RtvQSaT+GAXu1DXmSFj2bD3oOZdcRm1xdzsV2z1YWdw== dependencies: npm-package-arg "^9.1.0" postcss-selector-parser "^6.0.10" semver "^7.3.7" -"@npmcli/run-script@^4.1.0", "@npmcli/run-script@^4.1.3", "@npmcli/run-script@^4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-4.2.0.tgz#2c25758f80831ba138afe25225d456e89acedac3" - integrity sha512-e/QgLg7j2wSJp1/7JRl0GC8c7PMX+uYlA/1Tb+IDOLdSM4T7K1VQ9mm9IGU3WRtY5vEIObpqCLb3aCNCug18DA== +"@npmcli/run-script@^4.1.0", "@npmcli/run-script@^4.1.3", "@npmcli/run-script@^4.2.0", "@npmcli/run-script@^4.2.1": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-4.2.1.tgz#c07c5c71bc1c70a5f2a06b0d4da976641609b946" + integrity sha512-7dqywvVudPSrRCW5nTHpHgeWnbBtz8cFkOuKrecm6ih+oO9ciydhWt6OF7HlqupRRmB8Q/gECVdB9LMfToJbRg== dependencies: "@npmcli/node-gyp" "^2.0.0" "@npmcli/promise-spawn" "^3.0.0" @@ -3222,117 +3423,102 @@ which "^2.0.2" "@octokit/auth-token@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-3.0.0.tgz#6f22c5fc56445c496628488ba6810131558fa4a9" - integrity sha512-MDNFUBcJIptB9At7HiV7VCvU3NcL4GnfCQaP8C5lrxWrRPMJBnemYtehaKSOlaM7AYxeRyj9etenu8LVpSpVaQ== - dependencies: - "@octokit/types" "^6.0.3" + version "3.0.4" + resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-3.0.4.tgz#70e941ba742bdd2b49bdb7393e821dea8520a3db" + integrity sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ== -"@octokit/core@^4.0.0": - version "4.0.4" - resolved "https://registry.yarnpkg.com/@octokit/core/-/core-4.0.4.tgz#335d9b377691e3264ce57a9e5a1f6cda783e5838" - integrity sha512-sUpR/hc4Gc7K34o60bWC7WUH6Q7T6ftZ2dUmepSyJr9PRF76/qqkWjE2SOEzCqLA5W83SaISymwKtxks+96hPQ== +"@octokit/core@^4.2.1": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@octokit/core/-/core-4.2.4.tgz#d8769ec2b43ff37cc3ea89ec4681a20ba58ef907" + integrity sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ== dependencies: "@octokit/auth-token" "^3.0.0" "@octokit/graphql" "^5.0.0" "@octokit/request" "^6.0.0" "@octokit/request-error" "^3.0.0" - "@octokit/types" "^6.0.3" + "@octokit/types" "^9.0.0" before-after-hook "^2.2.0" universal-user-agent "^6.0.0" "@octokit/endpoint@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-7.0.0.tgz#be758a1236d68d6bbb505e686dd50881c327a519" - integrity sha512-Kz/mIkOTjs9rV50hf/JK9pIDl4aGwAtT8pry6Rpy+hVXkAPhXanNQRxMoq6AeRgDCZR6t/A1zKniY2V1YhrzlQ== + version "7.0.6" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-7.0.6.tgz#791f65d3937555141fb6c08f91d618a7d645f1e2" + integrity sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg== dependencies: - "@octokit/types" "^6.0.3" + "@octokit/types" "^9.0.0" is-plain-object "^5.0.0" universal-user-agent "^6.0.0" "@octokit/graphql@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-5.0.0.tgz#2cc6eb3bf8e0278656df1a7d0ca0d7591599e3b3" - integrity sha512-1ZZ8tX4lUEcLPvHagfIVu5S2xpHYXAmgN0+95eAOPoaVPzCfUXJtA5vASafcpWcO86ze0Pzn30TAx72aB2aguQ== + version "5.0.6" + resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-5.0.6.tgz#9eac411ac4353ccc5d3fca7d76736e6888c5d248" + integrity sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw== dependencies: "@octokit/request" "^6.0.0" - "@octokit/types" "^6.0.3" + "@octokit/types" "^9.0.0" universal-user-agent "^6.0.0" -"@octokit/openapi-types@^11.2.0": - version "11.2.0" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-11.2.0.tgz#b38d7fc3736d52a1e96b230c1ccd4a58a2f400a6" - integrity sha512-PBsVO+15KSlGmiI8QAzaqvsNlZlrDlyAJYcrXBCvVUxCp7VnXjkwPoFHgjEJXx3WF9BAwkA6nfCUA7i9sODzKA== - -"@octokit/openapi-types@^12.11.0": - version "12.11.0" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-12.11.0.tgz#da5638d64f2b919bca89ce6602d059f1b52d3ef0" - integrity sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ== +"@octokit/openapi-types@^18.0.0": + version "18.1.1" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-18.1.1.tgz#09bdfdabfd8e16d16324326da5148010d765f009" + integrity sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw== -"@octokit/plugin-paginate-rest@^3.0.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-3.1.0.tgz#86f8be759ce2d6d7c879a31490fd2f7410b731f0" - integrity sha512-+cfc40pMzWcLkoDcLb1KXqjX0jTGYXjKuQdFQDc6UAknISJHnZTiBqld6HDwRJvD4DsouDKrWXNbNV0lE/3AXA== +"@octokit/plugin-paginate-rest@^6.1.2": + version "6.1.2" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.1.2.tgz#f86456a7a1fe9e58fec6385a85cf1b34072341f8" + integrity sha512-qhrmtQeHU/IivxucOV1bbI/xZyC/iOBhclokv7Sut5vnejAIAEXVcGQeRpQlU39E0WwK9lNvJHphHri/DB6lbQ== dependencies: - "@octokit/types" "^6.41.0" + "@octokit/tsconfig" "^1.0.2" + "@octokit/types" "^9.2.3" -"@octokit/plugin-request-log@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85" - integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== +"@octokit/plugin-retry@^4.1.3": + version "4.1.6" + resolved "https://registry.yarnpkg.com/@octokit/plugin-retry/-/plugin-retry-4.1.6.tgz#e33b1e520f0bd24d515c9901676b55df64dfc795" + integrity sha512-obkYzIgEC75r8+9Pnfiiqy3y/x1bc3QLE5B7qvv9wi9Kj0R5tGQFC6QMBg1154WQ9lAVypuQDGyp3hNpp15gQQ== + dependencies: + "@octokit/types" "^9.0.0" + bottleneck "^2.15.3" -"@octokit/plugin-rest-endpoint-methods@^6.0.0": - version "6.2.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.2.0.tgz#c06359d2f94436f8c67d345093cb02dedd31d974" - integrity sha512-PZ+yfkbZAuRUtqu6Y191/V3eM0KBPx+Yq7nh+ONPdpm3EX4pd5UnK2y2XgO/0AtNum5a4aJCDjqsDuUZ2hWRXw== +"@octokit/plugin-throttling@^5.2.3": + version "5.2.3" + resolved "https://registry.yarnpkg.com/@octokit/plugin-throttling/-/plugin-throttling-5.2.3.tgz#9f552a14dcee5c7326dd9dee64a71ea76b108814" + integrity sha512-C9CFg9mrf6cugneKiaI841iG8DOv6P5XXkjmiNNut+swePxQ7RWEdAZRp5rJoE1hjsIqiYcKa/ZkOQ+ujPI39Q== dependencies: - "@octokit/types" "^6.41.0" - deprecation "^2.3.1" + "@octokit/types" "^9.0.0" + bottleneck "^2.15.3" "@octokit/request-error@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-3.0.0.tgz#f527d178f115a3b62d76ce4804dd5bdbc0270a81" - integrity sha512-WBtpzm9lR8z4IHIMtOqr6XwfkGvMOOILNLxsWvDwtzm/n7f5AWuqJTXQXdDtOvPfTDrH4TPhEvW2qMlR4JFA2w== + version "3.0.3" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-3.0.3.tgz#ef3dd08b8e964e53e55d471acfe00baa892b9c69" + integrity sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ== dependencies: - "@octokit/types" "^6.0.3" + "@octokit/types" "^9.0.0" deprecation "^2.0.0" once "^1.4.0" "@octokit/request@^6.0.0": - version "6.2.0" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-6.2.0.tgz#9c25606df84e6f2ccbcc2c58e1d35438e20b688b" - integrity sha512-7IAmHnaezZrgUqtRShMlByJK33MT9ZDnMRgZjnRrRV9a/jzzFwKGz0vxhFU6i7VMLraYcQ1qmcAOin37Kryq+Q== + version "6.2.8" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-6.2.8.tgz#aaf480b32ab2b210e9dadd8271d187c93171d8eb" + integrity sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw== dependencies: "@octokit/endpoint" "^7.0.0" "@octokit/request-error" "^3.0.0" - "@octokit/types" "^6.16.1" + "@octokit/types" "^9.0.0" is-plain-object "^5.0.0" node-fetch "^2.6.7" universal-user-agent "^6.0.0" -"@octokit/rest@^19.0.0": - version "19.0.3" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-19.0.3.tgz#b9a4e8dc8d53e030d611c053153ee6045f080f02" - integrity sha512-5arkTsnnRT7/sbI4fqgSJ35KiFaN7zQm0uQiQtivNQLI8RQx8EHwJCajcTUwmaCMNDg7tdCvqAnc7uvHHPxrtQ== - dependencies: - "@octokit/core" "^4.0.0" - "@octokit/plugin-paginate-rest" "^3.0.0" - "@octokit/plugin-request-log" "^1.0.4" - "@octokit/plugin-rest-endpoint-methods" "^6.0.0" - -"@octokit/types@^6.0.3", "@octokit/types@^6.16.1": - version "6.34.0" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.34.0.tgz#c6021333334d1ecfb5d370a8798162ddf1ae8218" - integrity sha512-s1zLBjWhdEI2zwaoSgyOFoKSl109CUcVBCc7biPJ3aAf6LGLU6szDvi31JPU7bxfla2lqfhjbbg/5DdFNxOwHw== - dependencies: - "@octokit/openapi-types" "^11.2.0" +"@octokit/tsconfig@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@octokit/tsconfig/-/tsconfig-1.0.2.tgz#59b024d6f3c0ed82f00d08ead5b3750469125af7" + integrity sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA== -"@octokit/types@^6.41.0": - version "6.41.0" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.41.0.tgz#e58ef78d78596d2fb7df9c6259802464b5f84a04" - integrity sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg== +"@octokit/types@^9.0.0", "@octokit/types@^9.2.3": + version "9.3.2" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-9.3.2.tgz#3f5f89903b69f6a2d196d78ec35f888c0013cac5" + integrity sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA== dependencies: - "@octokit/openapi-types" "^12.11.0" + "@octokit/openapi-types" "^18.0.0" "@palmetto/dialog@^0.16.4": version "0.16.4" @@ -3366,15 +3552,36 @@ schema-utils "^3.0.0" source-map "^0.7.3" +"@pnpm/config.env-replace@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz#ab29da53df41e8948a00f2433f085f54de8b3a4c" + integrity sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w== + +"@pnpm/network.ca-file@^1.0.1": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz#2ab05e09c1af0cdf2fcf5035bea1484e222f7983" + integrity sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA== + dependencies: + graceful-fs "4.2.10" + +"@pnpm/npm-conf@^2.1.0": + version "2.2.2" + resolved "https://registry.yarnpkg.com/@pnpm/npm-conf/-/npm-conf-2.2.2.tgz#0058baf1c26cbb63a828f0193795401684ac86f0" + integrity sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA== + dependencies: + "@pnpm/config.env-replace" "^1.1.0" + "@pnpm/network.ca-file" "^1.0.1" + config-chain "^1.1.11" + "@polka/url@^1.0.0-next.20": version "1.0.0-next.21" resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1" integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g== "@popperjs/core@^2.5.3": - version "2.11.6" - resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.6.tgz#cee20bd55e68a1720bdab363ecf0c821ded4cd45" - integrity sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw== + version "2.11.8" + resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" + integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== "@popperjs/core@^2.5.4", "@popperjs/core@^2.6.0": version "2.11.2" @@ -3507,7 +3714,7 @@ lodash "^4.17.4" micromatch "^4.0.2" -"@semantic-release/error@^2.1.0", "@semantic-release/error@^2.2.0": +"@semantic-release/error@^2.1.0": version "2.2.0" resolved "https://registry.yarnpkg.com/@semantic-release/error/-/error-2.2.0.tgz#ee9d5a09c9969eade1ec864776aeda5c5cddbbf0" integrity sha512-9Tj/qn+y2j+sjCI3Jd+qseGtHjOAeg7dU2/lVcqIQ9TV3QDaDXDYXcoOHU+7o2Hwh8L8ymL4gfuO7KxDs3q2zg== @@ -3532,43 +3739,44 @@ p-reduce "^2.0.0" "@semantic-release/github@^8.0.0": - version "8.0.5" - resolved "https://registry.yarnpkg.com/@semantic-release/github/-/github-8.0.5.tgz#73a128b7989bf3b4f8968c6cf2fa802dda27dfd2" - integrity sha512-9pGxRM3gv1hgoZ/muyd4pWnykdIUVfCiev6MXE9lOyGQof4FQy95GFE26nDcifs9ZG7bBzV8ue87bo/y1zVf0g== + version "8.1.0" + resolved "https://registry.yarnpkg.com/@semantic-release/github/-/github-8.1.0.tgz#c31fc5852d32975648445804d1984cd96e72c4d0" + integrity sha512-erR9E5rpdsz0dW1I7785JtndQuMWN/iDcemcptf67tBNOmBUN0b2YNOgcjYUnBpgRpZ5ozfBHrK7Bz+2ets/Dg== dependencies: - "@octokit/rest" "^19.0.0" - "@semantic-release/error" "^2.2.0" + "@octokit/core" "^4.2.1" + "@octokit/plugin-paginate-rest" "^6.1.2" + "@octokit/plugin-retry" "^4.1.3" + "@octokit/plugin-throttling" "^5.2.3" + "@semantic-release/error" "^3.0.0" aggregate-error "^3.0.0" - bottleneck "^2.18.1" debug "^4.0.0" dir-glob "^3.0.0" - fs-extra "^10.0.0" + fs-extra "^11.0.0" globby "^11.0.0" - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.0" + http-proxy-agent "^7.0.0" + https-proxy-agent "^7.0.0" issue-parser "^6.0.0" lodash "^4.17.4" mime "^3.0.0" p-filter "^2.0.0" - p-retry "^4.0.0" url-join "^4.0.0" "@semantic-release/npm@^9.0.0": - version "9.0.1" - resolved "https://registry.yarnpkg.com/@semantic-release/npm/-/npm-9.0.1.tgz#d81828eb1fb771e2767b3a8ee989915e1af27075" - integrity sha512-I5nVZklxBzfMFwemhRNbSrkiN/dsH3c7K9+KSk6jUnq0rdLFUuJt7EBsysq4Ir3moajQgFkfEryEHPqiKJj20g== + version "9.0.2" + resolved "https://registry.yarnpkg.com/@semantic-release/npm/-/npm-9.0.2.tgz#0f0903b4df6e93ef237372146bc376087fed4e1d" + integrity sha512-zgsynF6McdzxPnFet+a4iO9HpAlARXOM5adz7VGVCvj0ne8wtL2ZOQoDV2wZPDmdEotDIbVeJjafhelZjs9j6g== dependencies: "@semantic-release/error" "^3.0.0" aggregate-error "^3.0.0" execa "^5.0.0" - fs-extra "^10.0.0" + fs-extra "^11.0.0" lodash "^4.17.15" nerf-dart "^1.0.0" normalize-url "^6.0.0" npm "^8.3.0" rc "^1.2.8" read-pkg "^5.0.0" - registry-auth-token "^4.0.0" + registry-auth-token "^5.0.0" semver "^7.1.2" tempy "^1.0.0" @@ -5513,6 +5721,14 @@ resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.11.tgz#56588b17ae8f50c53983a524fc3cc47437969d64" integrity sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA== +"@types/hoist-non-react-statics@^3.3.1": + version "3.3.5" + resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz#dab7867ef789d87e2b4b0003c9d65c49cc44a494" + integrity sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg== + dependencies: + "@types/react" "*" + hoist-non-react-statics "^3.3.0" + "@types/html-minifier-terser@^5.0.0": version "5.1.2" resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz#693b316ad323ea97eed6b38ed1a3cc02b1672b57" @@ -5558,7 +5774,7 @@ jest-matcher-utils "^27.0.0" pretty-format "^27.0.0" -"@types/json-schema@*", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": +"@types/json-schema@*", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.9": version "7.0.11" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== @@ -5568,6 +5784,11 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== +"@types/json-schema@^7.0.8": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + "@types/json5@^0.0.29": version "0.0.29" resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" @@ -5591,9 +5812,9 @@ integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== "@types/minimist@^1.2.0", "@types/minimist@^1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" - integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== + version "1.2.5" + resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.5.tgz#ec10755e871497bcd83efe927e43ec46e8c0747e" + integrity sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag== "@types/node-fetch@^2.5.7": version "2.6.3" @@ -5604,9 +5825,11 @@ form-data "^3.0.0" "@types/node@*": - version "20.1.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.1.0.tgz#258805edc37c327cf706e64c6957f241ca4c4c20" - integrity sha512-O+z53uwx64xY7D6roOi4+jApDGFg0qn6WHcxe5QeqjMaTezBO/mxdfFXIVAVVyNWKx84OmPB3L8kbVYOTeN34A== + version "20.12.7" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.7.tgz#04080362fa3dd6c5822061aa3124f5c152cff384" + integrity sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg== + dependencies: + undici-types "~5.26.4" "@types/node@^14.0.10": version "14.18.12" @@ -5624,9 +5847,9 @@ integrity sha512-GZ7bu5A6+4DtG7q9GsoHXy3ALcgeIHP4NnL0Vv2wu0uUB/yQex26v0tf6/na1mm0+bS9Uw+0DFex7aaKr2qawQ== "@types/normalize-package-data@^2.4.0": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" - integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== + version "2.4.4" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901" + integrity sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA== "@types/npmlog@^4.1.2": version "4.1.4" @@ -5639,9 +5862,9 @@ integrity sha512-V25YHbSoKQN35UasHf0EKD9U2vcmexRSp78qa8UglxFH8H3D+adEa9zGZwrqpH4TdvqeMrgMqVqsLB4woAryrQ== "@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" + integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== "@types/parse5@^5.0.0": version "5.0.3" @@ -5766,11 +5989,6 @@ dependencies: "@types/node" "*" -"@types/retry@^0.12.0": - version "0.12.1" - resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.1.tgz#d8f1c0d0dc23afad6dc16a9e993a0865774b4065" - integrity sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g== - "@types/scheduler@*": version "0.16.2" resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" @@ -6297,7 +6515,7 @@ abab@^2.0.3, abab@^2.0.5: resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== -abbrev@1, abbrev@~1.1.1: +abbrev@^1.0.0, abbrev@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== @@ -6385,6 +6603,13 @@ agent-base@6, agent-base@^6.0.2: dependencies: debug "4" +agent-base@^7.0.2, agent-base@^7.1.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.1.tgz#bdbded7dfb096b751a2a087eeeb9664725b2e317" + integrity sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA== + dependencies: + debug "^4.3.4" + agentkeepalive@^3.3.0: version "3.5.2" resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.5.2.tgz#a113924dd3fa24a0bc3b78108c450c2abee00f67" @@ -6393,12 +6618,10 @@ agentkeepalive@^3.3.0: humanize-ms "^1.2.1" agentkeepalive@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.2.1.tgz#a7975cbb9f83b367f06c90cc51ff28fe7d499717" - integrity sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA== + version "4.5.0" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" + integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== dependencies: - debug "^4.1.0" - depd "^1.1.2" humanize-ms "^1.2.1" aggregate-error@^3.0.0: @@ -6453,9 +6676,9 @@ ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: uri-js "^4.2.2" ajv@^8.0.1: - version "8.10.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.10.0.tgz#e573f719bd3af069017e3b66538ab968d040e54d" - integrity sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw== + version "8.12.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== dependencies: fast-deep-equal "^3.1.1" json-schema-traverse "^1.0.0" @@ -6510,12 +6733,10 @@ ansi-escapes@^4.2.1, ansi-escapes@^4.3.1, ansi-escapes@^4.3.2: dependencies: type-fest "^0.21.3" -ansi-escapes@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-5.0.0.tgz#b6a0caf0eef0c41af190e9a749e0c00ec04bb2a6" - integrity sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA== - dependencies: - type-fest "^1.0.2" +ansi-escapes@^6.2.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-6.2.1.tgz#76c54ce9b081dad39acec4b5d53377913825fb0f" + integrity sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig== ansi-html-community@0.0.8, ansi-html-community@^0.0.8: version "0.0.8" @@ -6571,7 +6792,7 @@ ansi-to-html@^0.6.11: ansicolors@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" - integrity sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk= + integrity sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg== anymatch@^2.0.0: version "2.0.0" @@ -6607,7 +6828,7 @@ aproba@^1.1.1: archy@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" - integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= + integrity sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw== are-we-there-yet@^2.0.0: version "2.0.0" @@ -6645,7 +6866,7 @@ argparse@^2.0.1: argv-formatter@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/argv-formatter/-/argv-formatter-1.0.0.tgz#a0ca0cbc29a5b73e836eebe1cbf6c5e0e4eb82f9" - integrity sha1-oMoMvCmltz6Dbuvhy/bF4OTrgvk= + integrity sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw== aria-query@^4.2.2: version "4.2.2" @@ -6690,6 +6911,14 @@ array-buffer-byte-length@^1.0.0: call-bind "^1.0.2" is-array-buffer "^3.0.1" +array-buffer-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" + integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== + dependencies: + call-bind "^1.0.5" + is-array-buffer "^3.0.4" + array-find-index@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" @@ -6708,7 +6937,7 @@ array-flatten@^2.1.0: array-ify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" - integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4= + integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== array-includes@^3.0.3: version "3.1.6" @@ -6814,10 +7043,24 @@ array.prototype.reduce@^1.0.5: es-array-method-boxes-properly "^1.0.0" is-string "^1.0.7" +arraybuffer.prototype.slice@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" + integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== + dependencies: + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.2.1" + get-intrinsic "^1.2.3" + is-array-buffer "^3.0.4" + is-shared-array-buffer "^1.0.2" + arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= + integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== arrify@^2.0.1: version "2.0.1" @@ -6827,7 +7070,7 @@ arrify@^2.0.1: asap@^2.0.0: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== asn1.js@^5.2.0: version "5.4.1" @@ -6886,10 +7129,10 @@ async@^2.6.2: dependencies: lodash "^4.17.14" -async@^3.2.0: - version "3.2.4" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" - integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== +async@^3.2.3: + version "3.2.5" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" + integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== asynckit@^0.4.0: version "0.4.0" @@ -6929,6 +7172,13 @@ available-typed-arrays@^1.0.5: resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== +available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" + axe-core@^4.2.0, axe-core@^4.3.5: version "4.4.1" resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.4.1.tgz#7dbdc25989298f9ad006645cd396782443757413" @@ -7106,6 +7356,15 @@ babel-plugin-polyfill-corejs2@^0.3.0, babel-plugin-polyfill-corejs2@^0.3.3: "@babel/helper-define-polyfill-provider" "^0.3.3" semver "^6.1.1" +babel-plugin-polyfill-corejs2@^0.4.10: + version "0.4.11" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz#30320dfe3ffe1a336c15afdcdafd6fd615b25e33" + integrity sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q== + dependencies: + "@babel/compat-data" "^7.22.6" + "@babel/helper-define-polyfill-provider" "^0.6.2" + semver "^6.3.1" + babel-plugin-polyfill-corejs3@^0.1.0: version "0.1.7" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz#80449d9d6f2274912e05d9e182b54816904befd0" @@ -7114,6 +7373,14 @@ babel-plugin-polyfill-corejs3@^0.1.0: "@babel/helper-define-polyfill-provider" "^0.1.5" core-js-compat "^3.8.1" +babel-plugin-polyfill-corejs3@^0.10.1: + version "0.10.4" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz#789ac82405ad664c20476d0233b485281deb9c77" + integrity sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.6.1" + core-js-compat "^3.36.1" + babel-plugin-polyfill-corejs3@^0.5.0: version "0.5.3" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz#d7e09c9a899079d71a8b670c6181af56ec19c5c7" @@ -7144,6 +7411,13 @@ babel-plugin-polyfill-regenerator@^0.4.1: dependencies: "@babel/helper-define-polyfill-provider" "^0.3.3" +babel-plugin-polyfill-regenerator@^0.6.1: + version "0.6.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz#addc47e240edd1da1058ebda03021f382bba785e" + integrity sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.6.2" + babel-plugin-react-docgen@^4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/babel-plugin-react-docgen/-/babel-plugin-react-docgen-4.2.1.tgz#7cc8e2f94e8dc057a06e953162f0810e4e72257b" @@ -7277,9 +7551,9 @@ batch@0.6.1: integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= before-after-hook@^2.2.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.2.tgz#a6e8ca41028d90ee2c24222f201c90956091613e" - integrity sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ== + version "2.2.3" + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" + integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== better-opn@^2.1.1: version "2.1.1" @@ -7298,14 +7572,14 @@ big.js@^5.2.2: resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== -bin-links@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-3.0.1.tgz#cc70ffb481988b22c527d3e6e454787876987a49" - integrity sha512-9vx+ypzVhASvHTS6K+YSGf7nwQdANoz7v6MTC0aCtYnOEZ87YvMf81aY737EZnGZdpbRM3sfWjO9oWkKmuIvyQ== +bin-links@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-3.0.3.tgz#3842711ef3db2cd9f16a5f404a996a12db355a6e" + integrity sha512-zKdnMPWEdh4F5INR07/eBrodC7QrF5JKvqskjz/ZZRXg5YSAZIbn8zGhbhUrElzHBZ2fvEQdOU59RHcTG3GiwA== dependencies: cmd-shim "^5.0.0" mkdirp-infer-owner "^2.0.0" - npm-normalize-package-bin "^1.0.0" + npm-normalize-package-bin "^2.0.0" read-cmd-shim "^3.0.0" rimraf "^3.0.0" write-file-atomic "^4.0.0" @@ -7316,9 +7590,9 @@ binary-extensions@^1.0.0: integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== binary-extensions@^2.0.0, binary-extensions@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + version "2.3.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== binaryextensions@^2.1.2: version "2.3.0" @@ -7399,7 +7673,7 @@ boolbase@^1.0.0, boolbase@~1.0.0: resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== -bottleneck@^2.18.1: +bottleneck@^2.15.3: version "2.19.5" resolved "https://registry.yarnpkg.com/bottleneck/-/bottleneck-2.19.5.tgz#5df0b90f59fd47656ebe63c78a98419205cadd91" integrity sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw== @@ -7563,7 +7837,7 @@ browserslist@^4.0.0: node-releases "^2.0.2" picocolors "^1.0.0" -browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.21.3, browserslist@^4.21.4, browserslist@^4.21.5: +browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.21.4: version "4.21.5" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== @@ -7594,6 +7868,16 @@ browserslist@^4.17.5, browserslist@^4.19.1: node-releases "^2.0.6" update-browserslist-db "^1.0.9" +browserslist@^4.21.3, browserslist@^4.21.5, browserslist@^4.22.2, browserslist@^4.23.0: + version "4.23.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" + integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== + dependencies: + caniuse-lite "^1.0.30001587" + electron-to-chromium "^1.4.668" + node-releases "^2.0.14" + update-browserslist-db "^1.0.13" + bs-logger@0.x: version "0.2.6" resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" @@ -7674,9 +7958,9 @@ builtins@^1.0.3: integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= builtins@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" - integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== + version "5.1.0" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.1.0.tgz#6d85eeb360c4ebc166c3fdef922a15aa7316a5e8" + integrity sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg== dependencies: semver "^7.0.0" @@ -7777,10 +8061,10 @@ cacache@^15.0.5: tar "^6.0.2" unique-filename "^1.1.1" -cacache@^16.0.0, cacache@^16.0.6, cacache@^16.1.0, cacache@^16.1.1: - version "16.1.1" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-16.1.1.tgz#4e79fb91d3efffe0630d5ad32db55cc1b870669c" - integrity sha512-VDKN+LHyCQXaaYZ7rA/qtkURU+/yYhviUdvqEv2LT6QPZU8jpyzEkEVAcKlKLt5dJ5BRp11ym8lo3NKLluEPLg== +cacache@^16.0.0, cacache@^16.1.0, cacache@^16.1.3: + version "16.1.3" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-16.1.3.tgz#a02b9f34ecfaf9a78c9f4bc16fceb94d5d67a38e" + integrity sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ== dependencies: "@npmcli/fs" "^2.1.0" "@npmcli/move-file" "^2.0.0" @@ -7799,7 +8083,7 @@ cacache@^16.0.0, cacache@^16.0.6, cacache@^16.1.0, cacache@^16.1.1: rimraf "^3.0.2" ssri "^9.0.0" tar "^6.1.11" - unique-filename "^1.1.1" + unique-filename "^2.0.0" cacache@^9.2.9: version "9.3.0" @@ -7843,6 +8127,17 @@ call-bind@^1.0.0, call-bind@^1.0.2: function-bind "^1.1.1" get-intrinsic "^1.0.2" +call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" + call-me-maybe@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.2.tgz#03f964f19522ba643b1b0693acb9152fe2074baa" @@ -7942,11 +8237,16 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001312, caniuse-lite@^1.0.30001317, caniuse-lite@^1.0.30001400, caniuse-lite@^1.0.30001449: +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001312, caniuse-lite@^1.0.30001317, caniuse-lite@^1.0.30001400: version "1.0.30001594" resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001594.tgz" integrity sha512-VblSX6nYqyJVs8DKFMldE2IVCJjZ225LW00ydtUWwh5hk9IfkTOffO6r8gJNsH0qqqeAF8KrbMYA2VEwTlGW5g== +caniuse-lite@^1.0.30001449, caniuse-lite@^1.0.30001587: + version "1.0.30001614" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001614.tgz#f894b4209376a0bf923d67d9c361d96b1dfebe39" + integrity sha512-jmZQ1VpmlRwHgdP1/uiKzgiAuGOfLEJsYFP4+GBou/QQ4U6IOJCB4NP1c+1p9RGLpwObcT94jA5/uO+F1vBbog== + capture-exit@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" @@ -7962,7 +8262,7 @@ capture-stack-trace@^1.0.0: cardinal@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/cardinal/-/cardinal-2.1.1.tgz#7cc1055d822d212954d07b085dea251cc7bc5505" - integrity sha1-fMEFXYItISlU0HsIXeolHMe8VQU= + integrity sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw== dependencies: ansicolors "~0.3.2" redeyed "~2.1.0" @@ -8002,10 +8302,10 @@ chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.0.1.tgz#ca57d71e82bb534a296df63bbacc4a1c22b2a4b6" - integrity sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w== +chalk@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" + integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== char-regex@^1.0.2: version "1.0.2" @@ -8032,10 +8332,10 @@ chardet@^0.7.0: resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== -"chokidar@>=3.0.0 <4.0.0", chokidar@^3.4.1, chokidar@^3.4.2, chokidar@^3.5.1: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== +"chokidar@>=3.0.0 <4.0.0": + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== dependencies: anymatch "~3.1.2" braces "~3.0.2" @@ -8066,6 +8366,21 @@ chokidar@^2.1.8: optionalDependencies: fsevents "^1.2.7" +chokidar@^3.4.1, chokidar@^3.4.2, chokidar@^3.5.1: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + chownr@^1.0.1, chownr@^1.1.1: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" @@ -8076,10 +8391,10 @@ chownr@^2.0.0: resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== -chromatic@^10.2.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/chromatic/-/chromatic-10.2.0.tgz#04c96ce86c39a2ef54153bb5f98427912386c99b" - integrity sha512-UDVGWa2Fx9CLCpwnyfvFHGr0vGF0ooB1TugUdgOcjC9pJXiFa67i7oaXMyTfVRIFxlt/QkqOJwdqDqqlLFffCw== +chromatic@^11.3.0: + version "11.3.0" + resolved "https://registry.yarnpkg.com/chromatic/-/chromatic-11.3.0.tgz#d46b7aac1a0eaed29a765645eaf93c484220174c" + integrity sha512-q1ZtJDJrjLGnz60ivpC16gmd7KFzcaA4eTb7gcytCqbaKqlHhCFr1xQmcUDsm14CK7JsqdkFU6S+JQdOd2ZNJg== chrome-trace-event@^1.0.2: version "1.0.3" @@ -8142,9 +8457,9 @@ classnames@*: integrity sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA== classnames@^2.2.6: - version "2.3.2" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924" - integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== + version "2.5.1" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.5.1.tgz#ba774c614be0f016da105c858e7159eae8e7687b" + integrity sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow== clean-css@^4.2.3: version "4.2.4" @@ -8213,19 +8528,10 @@ cli-spinners@^2.5.0: resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== -cli-table3@^0.6.1: - version "0.6.3" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2" - integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg== - dependencies: - string-width "^4.2.0" - optionalDependencies: - "@colors/colors" "1.5.0" - -cli-table3@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.2.tgz#aaf5df9d8b5bf12634dc8b3040806a0c07120d2a" - integrity sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw== +cli-table3@^0.6.1, cli-table3@^0.6.2, cli-table3@^0.6.3: + version "0.6.4" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.4.tgz#d1c536b8a3f2e7bec58f67ac9e5769b1b30088b0" + integrity sha512-Lm3L0p+/npIQWNIiyF/nAn7T5dnOwR3xNTHXYEBFBFVPXzCVNZ5lqEC/1eo/EVfpDsQ1I+TX4ORPQgp+UI0CRw== dependencies: string-width "^4.2.0" optionalDependencies: @@ -8275,7 +8581,7 @@ clone-deep@^4.0.1: clone@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== clsx@^1.1.1: version "1.1.1" @@ -8548,6 +8854,14 @@ concat-with-sourcemaps@^1.1.0: dependencies: source-map "^0.6.1" +config-chain@^1.1.11: + version "1.1.13" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" + integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + configstore@^3.0.0: version "3.1.5" resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.5.tgz#e9af331fadc14dabd544d3e7e76dc446a09a530f" @@ -8664,6 +8978,11 @@ convert-source-map@^1.5.0: dependencies: safe-buffer "~5.1.1" +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" @@ -8705,12 +9024,12 @@ core-js-compat@^3.20.2, core-js-compat@^3.21.0: dependencies: browserslist "^4.21.4" -core-js-compat@^3.25.1, core-js-compat@^3.8.1: - version "3.30.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.30.1.tgz#961541e22db9c27fc48bfc13a3cafa8734171dfe" - integrity sha512-d690npR7MC6P0gq4npTl5n2VQeNAmUrJ90n+MHiKS7W2+xno4o3F5GDEuylSdi6EJ3VssibSGXOa1r3YXD3Mhw== +core-js-compat@^3.25.1, core-js-compat@^3.36.1: + version "3.37.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.37.0.tgz#d9570e544163779bb4dff1031c7972f44918dc73" + integrity sha512-vYq4L+T8aS5UuFg4UwDhc7YNRWVeVZwltad9C/jV3R2LgVOpS9BDr7l/WL6BN0dbV3k1XejPTHqqEzJgsa0frA== dependencies: - browserslist "^4.21.5" + browserslist "^4.23.0" core-js-compat@^3.6.2: version "3.21.1" @@ -8720,6 +9039,13 @@ core-js-compat@^3.6.2: browserslist "^4.19.1" semver "7.0.0" +core-js-compat@^3.8.1: + version "3.30.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.30.1.tgz#961541e22db9c27fc48bfc13a3cafa8734171dfe" + integrity sha512-d690npR7MC6P0gq4npTl5n2VQeNAmUrJ90n+MHiKS7W2+xno4o3F5GDEuylSdi6EJ3VssibSGXOa1r3YXD3Mhw== + dependencies: + browserslist "^4.21.5" + core-js-pure@^3.20.2, core-js-pure@^3.8.2: version "3.21.1" resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.21.1.tgz#8c4d1e78839f5f46208de7230cebfb72bc3bdb51" @@ -8778,13 +9104,13 @@ cosmiconfig@^7.0.0: yaml "^1.10.0" cosmiconfig@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.2.0.tgz#f7d17c56a590856cd1e7cee98734dca272b0d8fd" - integrity sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ== + version "8.3.6" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" + integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== dependencies: - import-fresh "^3.2.1" + import-fresh "^3.3.0" js-yaml "^4.1.0" - parse-json "^5.0.0" + parse-json "^5.2.0" path-type "^4.0.0" cp-file@^7.0.0: @@ -8943,10 +9269,10 @@ css-declaration-sorter@^6.2.2: resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.2.2.tgz#bfd2f6f50002d6a3ae779a87d3a0c5d5b10e0f02" integrity sha512-Ufadglr88ZLsrvS11gjeu/40Lw74D9Am/Jpr3LlYm5Q4ZP5KdlUhG+6u2EjyXeZcxmZ2h1ebCKngDjolpeLHpg== -css-functions-list@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/css-functions-list/-/css-functions-list-3.2.0.tgz#8290b7d064bf483f48d6559c10e98dc4d1ad19ee" - integrity sha512-d/jBMPyYybkkLVypgtGv12R+pIFw4/f/IHtCTxWpZc8ofTYOPigIgmA6vu5rMHartZC+WuXhBUHfnyNUIQSYrg== +css-functions-list@^3.2.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/css-functions-list/-/css-functions-list-3.2.2.tgz#9a54c6dd8416ed25c1079cd88234e927526c1922" + integrity sha512-c+N0v6wbKVxTu5gOBBFkr9BEdBWaqqjQeiJ8QvSRIJOf+UxlJh930m8e6/WNeODIK0mYLFkoONrnj16i2EcvfQ== css-loader@^3.6.0: version "3.6.0" @@ -9304,6 +9630,33 @@ data-urls@^2.0.0: whatwg-mimetype "^2.3.0" whatwg-url "^8.0.0" +data-view-buffer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2" + integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz#90721ca95ff280677eb793749fce1011347669e2" + integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz#5e0bbfb4828ed2d1b9b400cd8a7d119bca0ff18a" + integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + datauri@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/datauri/-/datauri-3.0.0.tgz#6196997e9a7bbbee81b60e8c8acb1a2c871e2349" @@ -9318,9 +9671,11 @@ date-fns@^2.0.1: integrity sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw== date-fns@^2.16.1: - version "2.29.3" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.29.3.tgz#27402d2fc67eb442b511b70bbdf98e6411cd68a8" - integrity sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA== + version "2.30.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" + integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw== + dependencies: + "@babel/runtime" "^7.21.0" dateformat@^3.0.0: version "3.0.3" @@ -9341,7 +9696,7 @@ debug@3.1.0, debug@=3.1.0: dependencies: ms "2.0.0" -debug@4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: +debug@4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -9358,12 +9713,12 @@ debug@^3.0.0, debug@^3.1.0, debug@^3.1.1, debug@^3.2.6, debug@^3.2.7: debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" - integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= + integrity sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw== decamelize-keys@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" - integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= + version "1.1.1" + resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8" + integrity sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg== dependencies: decamelize "^1.1.0" map-obj "^1.0.0" @@ -9371,7 +9726,7 @@ decamelize-keys@^1.1.0: decamelize@^1.1.0, decamelize@^1.1.2, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== decamelize@^5.0.0: version "5.0.1" @@ -9469,12 +9824,21 @@ default-gateway@^4.2.0: ip-regex "^2.1.0" defaults@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" - integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= + version "1.0.4" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" + integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== dependencies: clone "^1.0.2" +define-data-property@^1.0.1, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + define-lazy-prop@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" @@ -9488,6 +9852,15 @@ define-properties@^1.1.2, define-properties@^1.1.3, define-properties@^1.1.4, de has-property-descriptors "^1.0.0" object-keys "^1.1.1" +define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + define-property@^0.2.5: version "0.2.5" resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" @@ -9538,9 +9911,9 @@ del@^5.1.0: slash "^3.0.0" del@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/del/-/del-6.0.0.tgz#0b40d0332cea743f1614f818be4feb717714c952" - integrity sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ== + version "6.1.1" + resolved "https://registry.yarnpkg.com/del/-/del-6.1.1.tgz#3b70314f1ec0aa325c6b14eb36b95786671edb7a" + integrity sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg== dependencies: globby "^11.0.1" graceful-fs "^4.2.4" @@ -9566,12 +9939,12 @@ depd@2.0.0: resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== -depd@^1.1.2, depd@~1.1.2: +depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= -deprecation@^2.0.0, deprecation@^2.3.1: +deprecation@^2.0.0: version "2.3.1" resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== @@ -9637,9 +10010,9 @@ detect-port@^1.3.0: debug "4" dezalgo@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" - integrity sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY= + version "1.0.4" + resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.4.tgz#751235260469084c132157dfa857f386d4c33d81" + integrity sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig== dependencies: asap "^2.0.0" wrappy "1" @@ -9659,10 +10032,10 @@ diff@^4.0.1: resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== -diff@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" - integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== +diff@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.2.0.tgz#26ded047cd1179b78b9537d5ef725503ce1ae531" + integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A== diffie-hellman@^5.0.0: version "5.0.3" @@ -9949,7 +10322,7 @@ dts-cli@^1.5.0: duplexer2@~0.1.0: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" - integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME= + integrity sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA== dependencies: readable-stream "^2.0.2" @@ -9986,11 +10359,16 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.4.251, electron-to-chromium@^1.4.284: +electron-to-chromium@^1.4.251: version "1.4.385" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.385.tgz#1afd8d6280d510145148777b899ff481c65531ff" integrity sha512-L9zlje9bIw0h+CwPQumiuVlfMcV4boxRjFIWDcLfFqTZNbkwOExBzfmswytHawObQX4OUhtNv8gIiB21kOurIg== +electron-to-chromium@^1.4.284, electron-to-chromium@^1.4.668: + version "1.4.751" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.751.tgz#b5b19742a435c589de02f60c16618150498bbd59" + integrity sha512-2DEPi++qa89SMGRhufWTiLmzqyuGmNF3SK4+PQetW1JKiZdEpF4XQonJXJCzyuYSA6mauiMhbyVhqYAP45Hvfw== + electron-to-chromium@^1.4.71: version "1.4.284" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz#61046d1e4cab3a25238f6bf7413795270f125592" @@ -10274,11 +10652,75 @@ es-abstract@^1.19.1: string.prototype.trimstart "^1.0.6" unbox-primitive "^1.0.2" +es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0: + version "1.23.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" + integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== + dependencies: + array-buffer-byte-length "^1.0.1" + arraybuffer.prototype.slice "^1.0.3" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + data-view-buffer "^1.0.1" + data-view-byte-length "^1.0.1" + data-view-byte-offset "^1.0.0" + es-define-property "^1.0.0" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-set-tostringtag "^2.0.3" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.4" + get-symbol-description "^1.0.2" + globalthis "^1.0.3" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + has-proto "^1.0.3" + has-symbols "^1.0.3" + hasown "^2.0.2" + internal-slot "^1.0.7" + is-array-buffer "^3.0.4" + is-callable "^1.2.7" + is-data-view "^1.0.1" + is-negative-zero "^2.0.3" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.3" + is-string "^1.0.7" + is-typed-array "^1.1.13" + is-weakref "^1.0.2" + object-inspect "^1.13.1" + object-keys "^1.1.1" + object.assign "^4.1.5" + regexp.prototype.flags "^1.5.2" + safe-array-concat "^1.1.2" + safe-regex-test "^1.0.3" + string.prototype.trim "^1.2.9" + string.prototype.trimend "^1.0.8" + string.prototype.trimstart "^1.0.8" + typed-array-buffer "^1.0.2" + typed-array-byte-length "^1.0.1" + typed-array-byte-offset "^1.0.2" + typed-array-length "^1.0.6" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.15" + es-array-method-boxes-properly@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" + +es-errors@^1.2.1, es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + es-get-iterator@^1.0.2: version "1.1.3" resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" @@ -10313,6 +10755,13 @@ es-module-lexer@^1.2.1: resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.2.1.tgz#ba303831f63e6a394983fde2f97ad77b22324527" integrity sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg== +es-object-atoms@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941" + integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== + dependencies: + es-errors "^1.3.0" + es-set-tostringtag@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" @@ -10322,6 +10771,15 @@ es-set-tostringtag@^2.0.1: has "^1.0.3" has-tostringtag "^1.0.0" +es-set-tostringtag@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" + integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== + dependencies: + get-intrinsic "^1.2.4" + has-tostringtag "^1.0.2" + hasown "^2.0.1" + es-shim-unscopables@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" @@ -10388,9 +10846,9 @@ es6-symbol@^3.1.1, es6-symbol@^3.1.3: ext "^1.1.2" escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + version "3.1.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== escape-html@~1.0.3: version "1.0.3" @@ -10994,6 +11452,11 @@ expect@^29.0.0: jest-message-util "^29.3.1" jest-util "^29.3.1" +exponential-backoff@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6" + integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== + express@^4.17.1: version "4.19.2" resolved "https://registry.yarnpkg.com/express/-/express-4.19.2.tgz#e25437827a3aa7f2a827bc8171bbbb664a356465" @@ -11103,7 +11566,7 @@ fast-glob@^2.2.6: merge2 "^1.2.3" micromatch "^3.1.10" -fast-glob@^3.0.3, fast-glob@^3.2.9, fast-glob@^3.3.0: +fast-glob@^3.0.3: version "3.3.0" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.0.tgz#7c40cb491e1e2ed5664749e87bfb516dbe8727c0" integrity sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA== @@ -11114,6 +11577,17 @@ fast-glob@^3.0.3, fast-glob@^3.2.9, fast-glob@^3.3.0: merge2 "^1.3.0" micromatch "^4.0.4" +fast-glob@^3.2.9, fast-glob@^3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + fast-json-parse@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/fast-json-parse/-/fast-json-parse-1.0.3.tgz#43e5c61ee4efa9265633046b770fb682a7577c4d" @@ -11135,9 +11609,9 @@ fastest-levenshtein@^1.0.12, fastest-levenshtein@^1.0.16: integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== fastq@^1.6.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" - integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + version "1.17.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== dependencies: reusify "^1.0.4" @@ -11180,7 +11654,7 @@ figlet@^1.5.2: figures@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= + integrity sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA== dependencies: escape-string-regexp "^1.0.5" @@ -11198,6 +11672,13 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" +file-entry-cache@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-7.0.2.tgz#2d61bb70ba89b9548e3035b7c9173fe91deafff0" + integrity sha512-TfW7/1iI4Cy7Y8L6iqNdZQVvdXn0f8B4QcIXmkIbtTIe/Okm/nSlHb4IwGzRVOd3WfSieCgvf5cMzEfySAIl0g== + dependencies: + flat-cache "^3.2.0" + file-loader@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" @@ -11357,18 +11838,19 @@ findup-sync@^3.0.0: micromatch "^3.0.4" resolve-dir "^1.0.1" -flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== +flat-cache@^3.0.4, flat-cache@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== dependencies: - flatted "^3.1.0" + flatted "^3.2.9" + keyv "^4.5.3" rimraf "^3.0.2" -flatted@^3.1.0: - version "3.2.7" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" - integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== +flatted@^3.2.9: + version "3.3.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" + integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== flush-write-stream@^1.0.0: version "1.1.1" @@ -11478,17 +11960,18 @@ format@^0.2.0: integrity sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs= formik@^2.2.9: - version "2.2.9" - resolved "https://registry.yarnpkg.com/formik/-/formik-2.2.9.tgz#8594ba9c5e2e5cf1f42c5704128e119fc46232d0" - integrity sha512-LQLcISMmf1r5at4/gyJigGn0gOwFbeEAlji+N9InZF6LIMXnFNkO42sCI8Jt84YZggpD4cPWObAZaxpEFtSzNA== + version "2.4.6" + resolved "https://registry.yarnpkg.com/formik/-/formik-2.4.6.tgz#4da75ca80f1a827ab35b08fd98d5a76e928c9686" + integrity sha512-A+2EI7U7aG296q2TLGvNapDNTZp1khVt5Vk0Q/fyfSROss0V/V6+txt2aJnwEos44IxTCW/LYAi/zgWzlevj+g== dependencies: + "@types/hoist-non-react-statics" "^3.3.1" deepmerge "^2.1.1" hoist-non-react-statics "^3.3.0" lodash "^4.17.21" lodash-es "^4.17.21" react-fast-compare "^2.0.1" tiny-warning "^1.0.2" - tslib "^1.10.0" + tslib "^2.0.0" forwarded@0.2.0: version "0.2.0" @@ -11530,19 +12013,19 @@ fs-exists-sync@^0.1.0: resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add" integrity sha1-mC1ok6+RjnLQjeyehnP/K1qNat0= -fs-extra@^10.0.0: - version "10.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.0.1.tgz#27de43b4320e833f6867cc044bfce29fdf0ef3b8" - integrity sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag== +fs-extra@^10.0.0, fs-extra@^10.0.1, fs-extra@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== dependencies: graceful-fs "^4.2.0" jsonfile "^6.0.1" universalify "^2.0.0" -fs-extra@^10.0.1, fs-extra@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== +fs-extra@^11.0.0: + version "11.2.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" + integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== dependencies: graceful-fs "^4.2.0" jsonfile "^6.0.1" @@ -11611,15 +12094,20 @@ fsevents@^1.2.7: bindings "^1.5.0" nan "^2.12.1" -fsevents@^2.1.2, fsevents@^2.3.2, fsevents@~2.3.2: +fsevents@^2.1.2, fsevents@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +fsevents@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.1, function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== function.prototype.name@^1.1.0, function.prototype.name@^1.1.5: version "1.1.5" @@ -11631,6 +12119,16 @@ function.prototype.name@^1.1.0, function.prototype.name@^1.1.5: es-abstract "^1.19.0" functions-have-names "^1.2.2" +function.prototype.name@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" + integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + functions-have-names "^1.2.3" + functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" @@ -11706,6 +12204,17 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@ has "^1.0.3" has-symbols "^1.0.3" +get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + get-nonce@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/get-nonce/-/get-nonce-1.0.1.tgz#fdf3f0278073820d2ce9426c18f07481b1e0cdf3" @@ -11753,6 +12262,15 @@ get-symbol-description@^1.0.0: call-bind "^1.0.2" get-intrinsic "^1.1.1" +get-symbol-description@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" + integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== + dependencies: + call-bind "^1.0.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" @@ -11780,7 +12298,7 @@ git-hooks-list@1.0.3: git-log-parser@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/git-log-parser/-/git-log-parser-1.2.0.tgz#2e6a4c1b13fc00028207ba795a7ac31667b9fd4a" - integrity sha1-LmpMGxP8AAKCB7p5WnrDFme5/Uo= + integrity sha512-rnCVNfkTL8tdNryFuaY0fYiBWEBcgF748O6ZI61rslBvr2o7U65c2/6npCRqH40vuAhtgtDiqLTJjBVdrejCzA== dependencies: argv-formatter "~1.0.0" spawn-error-forwarder "~1.0.0" @@ -11890,9 +12408,9 @@ glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.2.0: path-is-absolute "^1.0.0" glob@^8.0.1: - version "8.0.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.0.3.tgz#415c6eb2deed9e502c68fa44a272e6da6eeca42e" - integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -12075,7 +12593,7 @@ globby@^9.2.0: globjoin@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/globjoin/-/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43" - integrity sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM= + integrity sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg== globrex@^0.1.2: version "0.1.2" @@ -12106,16 +12624,16 @@ got@^6.7.1: unzip-response "^2.0.1" url-parse-lax "^1.0.0" -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.9: - version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -graceful-fs@^4.2.10, graceful-fs@^4.2.2, graceful-fs@^4.2.6: +graceful-fs@4.2.10, graceful-fs@^4.2.2: version "4.2.10" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.10, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + gud@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0" @@ -12134,12 +12652,12 @@ handle-thing@^2.0.0: integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== handlebars@^4.7.7: - version "4.7.7" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" - integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== + version "4.7.8" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9" + integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== dependencies: minimist "^1.2.5" - neo-async "^2.6.0" + neo-async "^2.6.2" source-map "^0.6.1" wordwrap "^1.0.0" optionalDependencies: @@ -12184,11 +12702,23 @@ has-property-descriptors@^1.0.0: dependencies: get-intrinsic "^1.1.1" +has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + has-proto@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== +has-proto@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== + has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" @@ -12201,6 +12731,13 @@ has-tostringtag@^1.0.0: dependencies: has-symbols "^1.0.2" +has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + has-unicode@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" @@ -12237,13 +12774,18 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" -has@^1.0.0, has@^1.0.3: +has@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: function-bind "^1.1.1" +has@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.4.tgz#2eb2860e000011dae4f1406a86fe80e530fb2ec6" + integrity sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ== + hash-base@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" @@ -12261,6 +12803,13 @@ hash.js@^1.0.0, hash.js@^1.0.3: inherits "^2.0.3" minimalistic-assert "^1.0.1" +hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + hast-to-hyperscript@^9.0.0: version "9.0.1" resolved "https://registry.yarnpkg.com/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz#9b67fd188e4c81e8ad66f803855334173920218d" @@ -12410,10 +12959,10 @@ hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: dependencies: lru-cache "^6.0.0" -hosted-git-info@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-5.0.0.tgz#df7a06678b4ebd722139786303db80fdf302ea56" - integrity sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q== +hosted-git-info@^5.0.0, hosted-git-info@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-5.2.1.tgz#0ba1c97178ef91f3ab30842ae63d6a272341156f" + integrity sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw== dependencies: lru-cache "^7.5.1" @@ -12525,9 +13074,9 @@ http-cache-semantics@^3.8.0: integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== http-cache-semantics@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + version "4.1.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== http-deceiver@^1.2.7: version "1.2.7" @@ -12586,6 +13135,14 @@ http-proxy-agent@^5.0.0: agent-base "6" debug "4" +http-proxy-agent@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" + integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== + dependencies: + agent-base "^7.1.0" + debug "^4.3.4" + http-proxy-middleware@0.19.1: version "0.19.1" resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" @@ -12619,13 +13176,21 @@ https-proxy-agent@^2.1.0: debug "^3.1.0" https-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" - integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== dependencies: agent-base "6" debug "4" +https-proxy-agent@^7.0.0: + version "7.0.4" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz#8e97b841a029ad8ddc8731f26595bad868cb4168" + integrity sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg== + dependencies: + agent-base "^7.0.2" + debug "4" + human-signals@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" @@ -12644,7 +13209,7 @@ humanize-duration@^3.15.3: humanize-ms@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" - integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0= + integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== dependencies: ms "^2.0.0" @@ -12718,11 +13283,16 @@ ignore@^4.0.3, ignore@^4.0.6: resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -ignore@^5.1.1, ignore@^5.1.8, ignore@^5.2.0, ignore@^5.2.4: +ignore@^5.1.1, ignore@^5.1.8: version "5.2.4" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== +ignore@^5.2.0, ignore@^5.2.4: + version "5.3.1" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" + integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== + image-size@0.8.3: version "0.8.3" resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.8.3.tgz#f0b568857e034f29baffd37013587f2c0cad8b46" @@ -12731,9 +13301,9 @@ image-size@0.8.3: queue "6.0.1" immutable@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.0.0.tgz#b86f78de6adef3608395efb269a91462797e2c23" - integrity sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw== + version "4.3.5" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.5.tgz#f8b436e66d59f99760dc577f5c99a4fd2a5cc5a0" + integrity sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw== import-cwd@^2.0.0: version "2.1.0" @@ -12757,7 +13327,7 @@ import-fresh@^2.0.0: caller-path "^2.0.0" resolve-from "^3.0.0" -import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: +import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1, import-fresh@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -12870,10 +13440,10 @@ ini@^1.3.3, ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -ini@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ini/-/ini-3.0.0.tgz#2f6de95006923aa75feed8894f5686165adc08f1" - integrity sha512-TxYQaeNW/N8ymDvwAxPyRbhMBtnEwuvaTYpOQkFx1nSeusgezHniEc/l35Vo4iCq/mMiTJbpD7oYxN98hFlfmw== +ini@^3.0.0, ini@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ini/-/ini-3.0.1.tgz#c76ec81007875bc44d544ff7a11a55d12294102d" + integrity sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ== init-package-json@^3.0.2: version "3.0.2" @@ -12929,6 +13499,15 @@ internal-slot@^1.0.3, internal-slot@^1.0.4, internal-slot@^1.0.5: has "^1.0.3" side-channel "^1.0.4" +internal-slot@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" + integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== + dependencies: + es-errors "^1.3.0" + hasown "^2.0.0" + side-channel "^1.0.4" + interpret@^1.0.0, interpret@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" @@ -12954,6 +13533,14 @@ invariant@^2.2.2, invariant@^2.2.4: dependencies: loose-envify "^1.0.0" +ip-address@^9.0.5: + version "9.0.5" + resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a" + integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g== + dependencies: + jsbn "1.1.0" + sprintf-js "^1.1.3" + ip-regex@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" @@ -12970,9 +13557,9 @@ ip@^1.1.0, ip@^1.1.4, ip@^1.1.5: integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= ip@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" - integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== + version "2.0.1" + resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.1.tgz#e8f3595d33a3ea66490204234b77636965307105" + integrity sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ== ipaddr.js@1.9.1, ipaddr.js@^1.9.0: version "1.9.1" @@ -13033,6 +13620,14 @@ is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: get-intrinsic "^1.2.0" is-typed-array "^1.1.10" +is-array-buffer@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" + integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" @@ -13120,24 +13715,24 @@ is-color-stop@^1.0.0: rgb-regex "^1.0.1" rgba-regex "^1.0.0" -is-core-module@^2.11.0, is-core-module@^2.9.0: - version "2.12.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.0.tgz#36ad62f6f73c8253fd6472517a12483cf03e7ec4" - integrity sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ== +is-core-module@^2.11.0, is-core-module@^2.13.0, is-core-module@^2.5.0, is-core-module@^2.8.1: + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== dependencies: - has "^1.0.3" + hasown "^2.0.0" -is-core-module@^2.2.0, is-core-module@^2.5.0, is-core-module@^2.8.0: +is-core-module@^2.2.0, is-core-module@^2.8.0: version "2.8.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== dependencies: has "^1.0.3" -is-core-module@^2.8.1: - version "2.11.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" - integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== +is-core-module@^2.9.0: + version "2.12.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.0.tgz#36ad62f6f73c8253fd6472517a12483cf03e7ec4" + integrity sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ== dependencies: has "^1.0.3" @@ -13153,7 +13748,14 @@ is-data-descriptor@^1.0.0: resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== dependencies: - kind-of "^6.0.0" + kind-of "^6.0.0" + +is-data-view@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.1.tgz#4b4d3a511b70f3dc26d42c03ca9ca515d847759f" + integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w== + dependencies: + is-typed-array "^1.1.13" is-date-object@^1.0.1, is-date-object@^1.0.5: version "1.0.5" @@ -13280,7 +13882,7 @@ is-interactive@^1.0.0: is-lambda@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" - integrity sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU= + integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== is-map@^2.0.1, is-map@^2.0.2: version "2.0.2" @@ -13297,6 +13899,11 @@ is-negative-zero@^2.0.2: resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== +is-negative-zero@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" + integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== + is-npm@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" @@ -13375,7 +13982,7 @@ is-plain-obj@2.1.0, is-plain-obj@^2.0.0: is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== is-plain-object@5.0.0, is-plain-object@^5.0.0: version "5.0.0" @@ -13441,6 +14048,13 @@ is-shared-array-buffer@^1.0.2: dependencies: call-bind "^1.0.2" +is-shared-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" + integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== + dependencies: + call-bind "^1.0.7" + is-ssh@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.4.0.tgz#4f8220601d2839d8fa624b3106f8e8884f01b8b2" @@ -13475,7 +14089,7 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: is-text-path@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" - integrity sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4= + integrity sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w== dependencies: text-extensions "^1.0.0" @@ -13490,6 +14104,13 @@ is-typed-array@^1.1.10, is-typed-array@^1.1.9: gopd "^1.0.1" has-tostringtag "^1.0.0" +is-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" + integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== + dependencies: + which-typed-array "^1.1.14" + is-typedarray@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" @@ -14221,7 +14842,7 @@ jest-worker@^26.2.1, jest-worker@^26.5.0, jest-worker@^26.6.2: merge-stream "^2.0.0" supports-color "^7.0.0" -jest-worker@^27.3.1, jest-worker@^27.4.5, jest-worker@^27.5.1: +jest-worker@^27.4.5, jest-worker@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== @@ -14230,6 +14851,15 @@ jest-worker@^27.3.1, jest-worker@^27.4.5, jest-worker@^27.5.1: merge-stream "^2.0.0" supports-color "^8.0.0" +jest-worker@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-28.1.3.tgz#7e3c4ce3fa23d1bb6accb169e7f396f98ed4bb98" + integrity sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + jest@^27.4.7, jest@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest/-/jest-27.5.1.tgz#dadf33ba70a779be7a6fc33015843b51494f63fc" @@ -14269,6 +14899,11 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" +jsbn@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" + integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== + jsdom@^16.6.0: version "16.7.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" @@ -14312,6 +14947,11 @@ jsesc@~0.5.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -14345,7 +14985,7 @@ json-stringify-nice@^1.1.4: json-stringify-safe@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== json3@^3.3.3: version "3.3.3" @@ -14395,7 +15035,7 @@ jsonfile@^6.0.1: jsonparse@^1.2.0, jsonparse@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= + integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== "jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.2.1: version "3.2.1" @@ -14411,14 +15051,21 @@ junk@^3.1.0: integrity sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ== just-diff-apply@^5.2.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/just-diff-apply/-/just-diff-apply-5.4.1.tgz#1debed059ad009863b4db0e8d8f333d743cdd83b" - integrity sha512-AAV5Jw7tsniWwih8Ly3fXxEZ06y+6p5TwQMsw0dzZ/wPKilzyDgdAnL0Ug4NNIquPUOh1vfFWEHbmXUqM5+o8g== + version "5.5.0" + resolved "https://registry.yarnpkg.com/just-diff-apply/-/just-diff-apply-5.5.0.tgz#771c2ca9fa69f3d2b54e7c3f5c1dfcbcc47f9f0f" + integrity sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw== just-diff@^5.0.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-5.1.1.tgz#8da6414342a5ed6d02ccd64f5586cbbed3146202" - integrity sha512-u8HXJ3HlNrTzY7zrYYKjNEfBlyjqhdBkoyTVdjtn7p02RJD5NvR8rIClzeGA7t+UYP1/7eAkWNLU0+P3QrEqKQ== + version "5.2.0" + resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-5.2.0.tgz#60dca55891cf24cd4a094e33504660692348a241" + integrity sha512-6ufhP9SHjb7jibNFrNxyFZ6od3g+An6Ai9mhGRvcYe8UJlH0prseN64M+6ZBBUoKYHZsitDP42gAJ8+eVWr3lw== + +keyv@^4.5.3: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" killable@^1.0.1: version "1.0.1" @@ -14459,10 +15106,10 @@ klona@^2.0.4: resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.6.tgz#85bffbf819c03b2f53270412420a4555ef882e22" integrity sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA== -known-css-properties@^0.27.0: - version "0.27.0" - resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.27.0.tgz#82a9358dda5fe7f7bd12b5e7142c0a205393c0c5" - integrity sha512-uMCj6+hZYDoffuvAJjFAPz56E9uoowFHmTkqRtRq5WyC5Q6Cu/fTZKNQpX/RbzChBYLLl3lo8CjFZBAZXq9qFg== +known-css-properties@^0.29.0: + version "0.29.0" + resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.29.0.tgz#e8ba024fb03886f23cb882e806929f32d814158f" + integrity sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ== language-subtag-registry@~0.3.2: version "0.3.21" @@ -14535,36 +15182,36 @@ levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -libnpmaccess@^6.0.2: - version "6.0.3" - resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-6.0.3.tgz#473cc3e4aadb2bc713419d92e45d23b070d8cded" - integrity sha512-4tkfUZprwvih2VUZYMozL7EMKgQ5q9VW2NtRyxWtQWlkLTAWHRklcAvBN49CVqEkhUw7vTX2fNgB5LzgUucgYg== +libnpmaccess@^6.0.4: + version "6.0.4" + resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-6.0.4.tgz#2dd158bd8a071817e2207d3b201d37cf1ad6ae6b" + integrity sha512-qZ3wcfIyUoW0+qSFkMBovcTrSGJ3ZeyvpR7d5N9pEYv/kXs8sHP2wiqEIXBKLFrZlmM0kR0RJD7mtfLngtlLag== dependencies: aproba "^2.0.0" minipass "^3.1.1" npm-package-arg "^9.0.1" npm-registry-fetch "^13.0.0" -libnpmdiff@^4.0.2: - version "4.0.4" - resolved "https://registry.yarnpkg.com/libnpmdiff/-/libnpmdiff-4.0.4.tgz#487ccb609dacd7f558f089feef3153933e157d02" - integrity sha512-bUz12309DdkeFL/K0sKhW1mbg8DARMbNI0vQKrJp1J8lxhxqkAjzSQ3eQCacFjSwCz4xaf630ogwuOkSt61ZEQ== +libnpmdiff@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/libnpmdiff/-/libnpmdiff-4.0.5.tgz#ffaf93fa9440ea759444b8830fdb5c661b09a7c0" + integrity sha512-9fICQIzmH892UwHHPmb+Seup50UIBWcMIK2FdxvlXm9b4kc1nSH0b/BuY1mORJQtB6ydPMnn+BLzOTmd/SKJmw== dependencies: "@npmcli/disparity-colors" "^2.0.0" "@npmcli/installed-package-contents" "^1.0.7" binary-extensions "^2.2.0" - diff "^5.0.0" + diff "^5.1.0" minimatch "^5.0.1" npm-package-arg "^9.0.1" pacote "^13.6.1" tar "^6.1.0" -libnpmexec@^4.0.2: - version "4.0.9" - resolved "https://registry.yarnpkg.com/libnpmexec/-/libnpmexec-4.0.9.tgz#6bfff09cc05bc60eea023e1c818fa6159ade3954" - integrity sha512-w+m/ximjFJQ1ndGu8dTR3K/sZcmSuetOCflFBkwVFXvf2JPd1BT8ETBrmYISMYBo2kuHn8HzvwZZtAeZBvrZbQ== +libnpmexec@^4.0.14: + version "4.0.14" + resolved "https://registry.yarnpkg.com/libnpmexec/-/libnpmexec-4.0.14.tgz#9ad44232434b374e477eb2c2e4548baaf698f773" + integrity sha512-dwmzv2K29SdoAHBOa7QR6CfQbFG/PiZDRF6HZrlI6C4DLt2hNgOHTFaUGOpqE2C+YGu0ZwYTDywxRe0eOnf0ZA== dependencies: - "@npmcli/arborist" "^5.0.0" + "@npmcli/arborist" "^5.6.3" "@npmcli/ci-detect" "^2.0.0" "@npmcli/fs" "^2.1.1" "@npmcli/run-script" "^4.2.0" @@ -14579,42 +15226,42 @@ libnpmexec@^4.0.2: semver "^7.3.7" walk-up-path "^1.0.0" -libnpmfund@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/libnpmfund/-/libnpmfund-3.0.2.tgz#7da0827950f0db2cce0acb0dc7652d1834a8b239" - integrity sha512-wmFMP/93Wjy+jDg5LaSldDgAhSgCyA64JUUmp806Kae7y3YP9Qv5m1vUhPxT4yebxgB2v/I6G1/RUcNb1y0kVg== +libnpmfund@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/libnpmfund/-/libnpmfund-3.0.5.tgz#817f9e2120889beb483d9ba8eda142bb84293e4e" + integrity sha512-KdeRoG/dem8H3PcEU2/0SKi3ip7AWwczgS72y/3PE+PBrz/s/G52FNIA9jeLnBirkLC0sOyQHfeM3b7e24ZM+g== dependencies: - "@npmcli/arborist" "^5.0.0" + "@npmcli/arborist" "^5.6.3" -libnpmhook@^8.0.2: - version "8.0.3" - resolved "https://registry.yarnpkg.com/libnpmhook/-/libnpmhook-8.0.3.tgz#9628518a63455d21dafda312ee46175275707ff5" - integrity sha512-TEdNI1mC5zS+w/juCgxrwwQnpbq9lY76NDOS0N37pn6pWIUxB1Yq8mwy6MUEXR1TgH4HurSQyKT6I6Kp9Wjm4A== +libnpmhook@^8.0.4: + version "8.0.4" + resolved "https://registry.yarnpkg.com/libnpmhook/-/libnpmhook-8.0.4.tgz#6c58e5fe763ff5d600ae9c20457ea9a69d1f7d87" + integrity sha512-nuD6e+Nx0OprjEi0wOeqASMl6QIH235th/Du2/8upK3evByFhzIgdfOeP1OhstavW4xtsl0hk5Vw4fAWWuSUgA== dependencies: aproba "^2.0.0" npm-registry-fetch "^13.0.0" -libnpmorg@^4.0.2: - version "4.0.3" - resolved "https://registry.yarnpkg.com/libnpmorg/-/libnpmorg-4.0.3.tgz#a85cbdb3665ad4f7c7279d239a4581ec2eeef5a6" - integrity sha512-r4CpmCEF+e5PbFMBi64xSXmqn0uGgV4T7NWpGL4/A6KT/DTtIxALILQZq+l0ZdN1xm4RjOvqSDR22oT4il8rAQ== +libnpmorg@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/libnpmorg/-/libnpmorg-4.0.4.tgz#2a01d49372cf0df90d79a61e69bddaf2ed704311" + integrity sha512-1bTpD7iub1rDCsgiBguhJhiDufLQuc8DEti20euqsXz9O0ncXVpCYqf2SMmHR4GEdmAvAj2r7FMiyA9zGdaTpA== dependencies: aproba "^2.0.0" npm-registry-fetch "^13.0.0" -libnpmpack@^4.0.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/libnpmpack/-/libnpmpack-4.1.2.tgz#9234a3b1ae433f922c19e97cd3a8a0b135b5f4cc" - integrity sha512-megSAPeZGv9jnDM4KovKbczjyuy/EcPxCIU/iaWsDU1IEAVtBJ0qHqNUm5yN2AgN501Tb3CL6KeFGYdG4E31rQ== +libnpmpack@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/libnpmpack/-/libnpmpack-4.1.3.tgz#025cfe39829acd8260662bf259e3a9331fc1e4b2" + integrity sha512-rYP4X++ME3ZiFO+2iN3YnXJ4LB4Gsd0z5cgszWJZxaEpDN4lRIXirSyynGNsN/hn4taqnlxD+3DPlFDShvRM8w== dependencies: "@npmcli/run-script" "^4.1.3" npm-package-arg "^9.0.1" pacote "^13.6.1" -libnpmpublish@^6.0.2: - version "6.0.4" - resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-6.0.4.tgz#adb41ec6b0c307d6f603746a4d929dcefb8f1a0b" - integrity sha512-lvAEYW8mB8QblL6Q/PI/wMzKNvIrF7Kpujf/4fGS/32a2i3jzUXi04TNyIBcK6dQJ34IgywfaKGh+Jq4HYPFmg== +libnpmpublish@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-6.0.5.tgz#5a894f3de2e267d62f86be2a508e362599b5a4b1" + integrity sha512-LUR08JKSviZiqrYTDfywvtnsnxr+tOvBU0BF8H+9frt7HMvc6Qn6F8Ubm72g5hDTHbq8qupKfDvDAln2TVPvFg== dependencies: normalize-package-data "^4.0.0" npm-package-arg "^9.0.1" @@ -14622,25 +15269,25 @@ libnpmpublish@^6.0.2: semver "^7.3.7" ssri "^9.0.0" -libnpmsearch@^5.0.2: - version "5.0.3" - resolved "https://registry.yarnpkg.com/libnpmsearch/-/libnpmsearch-5.0.3.tgz#ed502a4c2c70ea36723180455fae1357546b2184" - integrity sha512-Ofq76qKAPhxbiyzPf/5LPjJln26VTKwU9hIU0ACxQ6tNtBJ1CHmI7iITrdp7vNezhZc0FlkXwrIpqXjhBJZgLQ== +libnpmsearch@^5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/libnpmsearch/-/libnpmsearch-5.0.4.tgz#b32aa2b23051c00cdcc0912274d0d416e6655d81" + integrity sha512-XHDmsvpN5+pufvGnfLRqpy218gcGGbbbXR6wPrDJyd1em6agKdYByzU5ccskDHH9iVm2UeLydpDsW1ksYuU0cg== dependencies: npm-registry-fetch "^13.0.0" -libnpmteam@^4.0.2: - version "4.0.3" - resolved "https://registry.yarnpkg.com/libnpmteam/-/libnpmteam-4.0.3.tgz#9335fbbd032b3770f5c9b7ffc6203f47d1ed144a" - integrity sha512-LsYYLz4TlTpcqkusInY5MhKjiHFaCx1GV0LmydXJ/QMh+3IWBJpUhes4ynTZuFoJKkDIFjxyMU09ul+RZixgdg== +libnpmteam@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/libnpmteam/-/libnpmteam-4.0.4.tgz#ac26068808d93b1051d926457db14e4b3ff669ef" + integrity sha512-rzKSwi6MLzwwevbM/vl+BBQTErgn24tCfgPUdzBlszrw3j5necOu7WnTzgvZMDv6maGUwec6Ut1rxszOgH0l+Q== dependencies: aproba "^2.0.0" npm-registry-fetch "^13.0.0" -libnpmversion@^3.0.1: - version "3.0.6" - resolved "https://registry.yarnpkg.com/libnpmversion/-/libnpmversion-3.0.6.tgz#a4a476d38a44d38db9ac424a5e7334479e7fb8b9" - integrity sha512-+lI+AO7cZwDxyAeWCIR8+n9XEfgSDAqmNbv4zy+H6onGthsk/+E3aa+5zIeBpyG5g268zjpc0qrBch0Q3w0nBA== +libnpmversion@^3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/libnpmversion/-/libnpmversion-3.0.7.tgz#e4c6c07ee28cf351ce1e2293a5ac9922b09ea94d" + integrity sha512-O0L4eNMUIMQ+effi1HsZPKp2N6wecwqGqB8PvkvmLPWN7EsdabdzAVG48nv0p/OjlbIai5KQg/L+qMMfCA4ZjA== dependencies: "@npmcli/git" "^3.0.0" "@npmcli/run-script" "^4.1.3" @@ -14701,7 +15348,7 @@ load-json-file@^1.0.0: load-json-file@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" - integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= + integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== dependencies: graceful-fs "^4.1.2" parse-json "^4.0.0" @@ -14771,7 +15418,7 @@ loader-utils@^3.2.0: locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== dependencies: p-locate "^2.0.0" path-exists "^3.0.0" @@ -14811,7 +15458,7 @@ lodash.camelcase@^4.3.0: lodash.capitalize@^4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz#f826c9b4e2a8511d84e3aca29db05e1a4f3b72a9" - integrity sha1-+CbJtOKoUR2E46yinbBeGk87cqk= + integrity sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw== lodash.debounce@^4.0.8: version "4.0.8" @@ -14821,22 +15468,22 @@ lodash.debounce@^4.0.8: lodash.escaperegexp@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" - integrity sha1-ZHYsSGGAglGKw99Mz11YhtriA0c= + integrity sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw== lodash.ismatch@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" - integrity sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc= + integrity sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g== lodash.isplainobject@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" - integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= + integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== lodash.isstring@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" - integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= + integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== lodash.memoize@4.x, lodash.memoize@^4.1.2: version "4.1.2" @@ -14851,7 +15498,7 @@ lodash.merge@^4.6.2: lodash.truncate@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= + integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== lodash.uniq@4.5.0, lodash.uniq@^4.5.0: version "4.5.0" @@ -14861,7 +15508,7 @@ lodash.uniq@4.5.0, lodash.uniq@^4.5.0: lodash.uniqby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz#d99c07a669e9e6d24e1362dfe266c67616af1302" - integrity sha1-2ZwHpmnp5tJOE2Lf4mbGdhavEwI= + integrity sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww== lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.7.0: version "4.17.21" @@ -14963,9 +15610,9 @@ lru-cache@^6.0.0: yallist "^4.0.0" lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: - version "7.13.2" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.13.2.tgz#bb5d3f1deea3f3a7a35c1c44345566a612e09cd0" - integrity sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA== + version "7.18.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" + integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== lz-string@^1.4.4: version "1.4.4" @@ -15014,9 +15661,9 @@ make-error@1.x, make-error@^1.1.1: integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== make-fetch-happen@^10.0.3, make-fetch-happen@^10.0.6, make-fetch-happen@^10.2.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.2.0.tgz#0bde3914f2f82750b5d48c6d2294d2c74f985e5b" - integrity sha512-OnEfCLofQVJ5zgKwGk55GaqosqKjaR6khQlJY3dBAA+hM25Bc5CmX5rKUfVut+rYA3uidA7zb7AvcglU87rPRg== + version "10.2.1" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz#f5e3835c5e9817b617f2770870d9492d28678164" + integrity sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w== dependencies: agentkeepalive "^4.2.1" cacache "^16.1.0" @@ -15097,21 +15744,21 @@ markdown-to-jsx@^7.1.3: integrity sha512-1wrIGZYwIG2gR3yfRmbr4FlQmhaAKoKTpRo4wur4fp9p0njU1Hi7vR8fj0AUKKIcPduiJmPprzmCB5B/GvlC7g== marked-terminal@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/marked-terminal/-/marked-terminal-5.1.1.tgz#d2edc2991841d893ee943b44b40b2ee9518b4d9f" - integrity sha512-+cKTOx9P4l7HwINYhzbrBSyzgxO2HaHKGZGuB1orZsMIgXYaJyfidT81VXRdpelW/PcHEWxywscePVgI/oUF6g== + version "5.2.0" + resolved "https://registry.yarnpkg.com/marked-terminal/-/marked-terminal-5.2.0.tgz#c5370ec2bae24fb2b34e147b731c94fa933559d3" + integrity sha512-Piv6yNwAQXGFjZSaiNljyNFw7jKDdGrw70FSbtxEyldLsyeuV5ZHm/1wW++kWbrOF1VPnUgYOhB2oLL0ZpnekA== dependencies: - ansi-escapes "^5.0.0" + ansi-escapes "^6.2.0" cardinal "^2.1.1" - chalk "^5.0.0" - cli-table3 "^0.6.1" + chalk "^5.2.0" + cli-table3 "^0.6.3" node-emoji "^1.11.0" - supports-hyperlinks "^2.2.0" + supports-hyperlinks "^2.3.0" marked@^4.0.10: - version "4.0.18" - resolved "https://registry.yarnpkg.com/marked/-/marked-4.0.18.tgz#cd0ac54b2e5610cfb90e8fd46ccaa8292c9ed569" - integrity sha512-wbLDJ7Zh0sqA0Vdg6aqlbT+yPxqLblpAZh1mK2+AO2twQkPywvvqQNfEPVwSSRjZ7dZcdeVBIAgiO7MMp3Dszw== + version "4.3.0" + resolved "https://registry.yarnpkg.com/marked/-/marked-4.3.0.tgz#796362821b019f734054582038b116481b456cf3" + integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A== mathml-tag-names@^2.1.3: version "2.1.3" @@ -15445,9 +16092,9 @@ minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: brace-expansion "^1.1.7" minimatch@^5.0.1, minimatch@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7" - integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== dependencies: brace-expansion "^2.0.1" @@ -15478,9 +16125,9 @@ minipass-collect@^1.0.2: minipass "^3.0.0" minipass-fetch@^2.0.3: - version "2.1.0" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-2.1.0.tgz#ca1754a5f857a3be99a9271277246ac0b44c3ff8" - integrity sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg== + version "2.1.2" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-2.1.2.tgz#95560b50c472d81a3bc76f20ede80eaed76d8add" + integrity sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA== dependencies: minipass "^3.1.6" minipass-sized "^1.0.3" @@ -15517,20 +16164,13 @@ minipass-sized@^1.0.3: dependencies: minipass "^3.0.0" -minipass@^3.0.0, minipass@^3.1.1: +minipass@^3.0.0, minipass@^3.1.1, minipass@^3.1.6: version "3.3.6" resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== dependencies: yallist "^4.0.0" -minipass@^3.1.6: - version "3.3.4" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.4.tgz#ca99f95dd77c43c7a76bf51e6d200025eee0ffae" - integrity sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw== - dependencies: - yallist "^4.0.0" - minipass@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" @@ -15713,11 +16353,16 @@ nanoid@^2.1.0: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-2.1.11.tgz#ec24b8a758d591561531b4176a01e3ab4f0f0280" integrity sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA== -nanoid@^3.1.23, nanoid@^3.3.1, nanoid@^3.3.6: +nanoid@^3.1.23, nanoid@^3.3.1: version "3.3.6" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== +nanoid@^3.3.6, nanoid@^3.3.7: + version "3.3.7" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" + integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== + nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" @@ -15745,7 +16390,7 @@ negotiator@0.6.3, negotiator@^0.6.3: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== -neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1, neo-async@^2.6.2: +neo-async@^2.5.0, neo-async@^2.6.1, neo-async@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== @@ -15753,7 +16398,7 @@ neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1, neo-async@^2.6.2: nerf-dart@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/nerf-dart/-/nerf-dart-1.0.0.tgz#e6dab7febf5ad816ea81cf5c629c5a0ebde72c1a" - integrity sha1-5tq3/r9a2Bbqgc9cYpxaDr3nLBo= + integrity sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g== nested-error-stacks@^2.0.0, nested-error-stacks@^2.1.0: version "2.1.1" @@ -15809,28 +16454,36 @@ node-fetch@^1.0.1: encoding "^0.1.11" is-stream "^1.0.1" -node-fetch@^2.6.1, node-fetch@^2.6.7: +node-fetch@^2.6.1: version "2.6.9" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.9.tgz#7c7f744b5cc6eb5fd404e0c7a9fec630a55657e6" integrity sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg== dependencies: whatwg-url "^5.0.0" +node-fetch@^2.6.7: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + node-forge@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== -node-gyp@^9.0.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.1.0.tgz#c8d8e590678ea1f7b8097511dedf41fc126648f8" - integrity sha512-HkmN0ZpQJU7FLbJauJTHkHlSVAXlNGDAzH/VYFZGDOnFyn/Na3GlNJfkudmufOdS6/jNFhy88ObzL7ERz9es1g== +node-gyp@^9.0.0, node-gyp@^9.1.0: + version "9.4.1" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.4.1.tgz#8a1023e0d6766ecb52764cc3a734b36ff275e185" + integrity sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ== dependencies: env-paths "^2.2.0" + exponential-backoff "^3.1.1" glob "^7.1.4" graceful-fs "^4.2.6" make-fetch-happen "^10.0.3" - nopt "^5.0.0" + nopt "^6.0.0" npmlog "^6.0.0" rimraf "^3.0.2" semver "^7.3.5" @@ -15871,22 +16524,27 @@ node-libs-browser@^2.2.1: util "^0.11.0" vm-browserify "^1.0.1" +node-releases@^2.0.14, node-releases@^2.0.8: + version "2.0.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== + node-releases@^2.0.2: version "2.0.8" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.8.tgz#0f349cdc8fcfa39a92ac0be9bc48b7706292b9ae" integrity sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A== -node-releases@^2.0.6, node-releases@^2.0.8: +node-releases@^2.0.6: version "2.0.10" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f" integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w== -nopt@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" - integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== +nopt@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-6.0.0.tgz#245801d8ebf409c6df22ab9d95b65e1309cdb16d" + integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g== dependencies: - abbrev "1" + abbrev "^1.0.0" normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.4.0, normalize-package-data@^2.5.0: version "2.5.0" @@ -15909,9 +16567,9 @@ normalize-package-data@^3.0.0, normalize-package-data@^3.0.2: validate-npm-package-license "^3.0.1" normalize-package-data@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-4.0.0.tgz#1122d5359af21d4cd08718b92b058a658594177c" - integrity sha512-m+GL22VXJKkKbw62ZaBBjv8u6IE3UI4Mh5QakIqs3fWiKe0Xyi6L97hakwZK41/LD4R/2ly71Bayx0NLMwLA/g== + version "4.0.1" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-4.0.1.tgz#b46b24e0616d06cadf9d5718b29b6d445a82a62c" + integrity sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg== dependencies: hosted-git-info "^5.0.0" is-core-module "^2.8.1" @@ -15962,13 +16620,20 @@ npm-audit-report@^3.0.0: dependencies: chalk "^4.0.0" -npm-bundled@^1.1.1, npm-bundled@^1.1.2: +npm-bundled@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1" integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ== dependencies: npm-normalize-package-bin "^1.0.1" +npm-bundled@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-2.0.1.tgz#94113f7eb342cd7a67de1e789f896b04d2c600f4" + integrity sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw== + dependencies: + npm-normalize-package-bin "^2.0.0" + npm-install-checks@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-5.0.0.tgz#5ff27d209a4e3542b8ac6b0c1db6063506248234" @@ -15976,11 +16641,16 @@ npm-install-checks@^5.0.0: dependencies: semver "^7.1.1" -npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: +npm-normalize-package-bin@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== +npm-normalize-package-bin@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz#9447a1adaaf89d8ad0abe24c6c84ad614a675fff" + integrity sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ== + npm-package-arg@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-5.1.2.tgz#fb18d17bb61e60900d6312619919bd753755ab37" @@ -15992,9 +16662,9 @@ npm-package-arg@^5.1.2: validate-npm-package-name "^3.0.0" npm-package-arg@^9.0.0, npm-package-arg@^9.0.1, npm-package-arg@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-9.1.0.tgz#a60e9f1e7c03e4e3e4e994ea87fff8b90b522987" - integrity sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw== + version "9.1.2" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-9.1.2.tgz#fc8acecb00235f42270dda446f36926ddd9ac2bc" + integrity sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg== dependencies: hosted-git-info "^5.0.0" proc-log "^2.0.1" @@ -16002,14 +16672,14 @@ npm-package-arg@^9.0.0, npm-package-arg@^9.0.1, npm-package-arg@^9.1.0: validate-npm-package-name "^4.0.0" npm-packlist@^5.1.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-5.1.1.tgz#79bcaf22a26b6c30aa4dd66b976d69cc286800e0" - integrity sha512-UfpSvQ5YKwctmodvPPkK6Fwk603aoVsf8AEbmVKAEECrfvL8SSe1A2YIwrJ6xmTHAITKPwwZsWo7WwEbNk0kxw== + version "5.1.3" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-5.1.3.tgz#69d253e6fd664b9058b85005905012e00e69274b" + integrity sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg== dependencies: glob "^8.0.1" ignore-walk "^5.0.1" - npm-bundled "^1.1.2" - npm-normalize-package-bin "^1.0.1" + npm-bundled "^2.0.0" + npm-normalize-package-bin "^2.0.0" npm-pick-manifest@^1.0.4: version "1.0.4" @@ -16019,13 +16689,13 @@ npm-pick-manifest@^1.0.4: npm-package-arg "^5.1.2" semver "^5.3.0" -npm-pick-manifest@^7.0.0, npm-pick-manifest@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-7.0.1.tgz#76dda30a7cd6b99be822217a935c2f5eacdaca4c" - integrity sha512-IA8+tuv8KujbsbLQvselW2XQgmXWS47t3CB0ZrzsRZ82DbDfkcFunOaPm4X7qNuhMfq+FmV7hQT4iFVpHqV7mg== +npm-pick-manifest@^7.0.0, npm-pick-manifest@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-7.0.2.tgz#1d372b4e7ea7c6712316c0e99388a73ed3496e84" + integrity sha512-gk37SyRmlIjvTfcYl6RzDbSmS9Y4TOBXfsPnoYqTHARNgWbyDiCSMLUpmALDj4jjcTZpURiEfsSHJj9k7EV4Rw== dependencies: npm-install-checks "^5.0.0" - npm-normalize-package-bin "^1.0.1" + npm-normalize-package-bin "^2.0.0" npm-package-arg "^9.0.0" semver "^7.3.5" @@ -16037,10 +16707,10 @@ npm-profile@^6.2.0: npm-registry-fetch "^13.0.1" proc-log "^2.0.0" -npm-registry-fetch@^13.0.0, npm-registry-fetch@^13.0.1, npm-registry-fetch@^13.3.0: - version "13.3.0" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-13.3.0.tgz#0ce10fa4a699a1e70685ecf41bbfb4150d74231b" - integrity sha512-10LJQ/1+VhKrZjIuY9I/+gQTvumqqlgnsCufoXETHAPFTS3+M+Z5CFhZRDHGavmJ6rOye3UvNga88vl8n1r6gg== +npm-registry-fetch@^13.0.0, npm-registry-fetch@^13.0.1, npm-registry-fetch@^13.3.1: + version "13.3.1" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-13.3.1.tgz#bb078b5fa6c52774116ae501ba1af2a33166af7e" + integrity sha512-eukJPi++DKRTjSBRcDZSDDsGqRK3ehbxfFUcgaRd0Yp6kRwOwh2WVn0r+8rMB4nnuzvAk6rQVzl6K5CkYOmnvw== dependencies: make-fetch-happen "^10.0.6" minipass "^3.1.6" @@ -16070,69 +16740,71 @@ npm-user-validate@^1.0.1: integrity sha512-uQwcd/tY+h1jnEaze6cdX/LrhWhoBxfSknxentoqmIuStxUExxjWd3ULMLFPiFUrZKbOVMowH6Jq2FRWfmhcEw== npm@^8.3.0: - version "8.16.0" - resolved "https://registry.yarnpkg.com/npm/-/npm-8.16.0.tgz#d385060093f3af10fabe6d8205d41bbf2a34ff9d" - integrity sha512-UfLT/hCbcpV9uiTEBthyrOlQxwk8LG5tAGn283g7f7pRx41KcwFiHV7HYgYm2y2GabfnPtf897ptrXRQwxJWzQ== + version "8.19.4" + resolved "https://registry.yarnpkg.com/npm/-/npm-8.19.4.tgz#65ad6a2dfdd157a4ef4467fb86e8dcd35a43493f" + integrity sha512-3HANl8i9DKnUA89P4KEgVNN28EjSeDCmvEqbzOAuxCFDzdBZzjUl99zgnGpOUumvW5lvJo2HKcjrsc+tfyv1Hw== dependencies: "@isaacs/string-locale-compare" "^1.1.0" - "@npmcli/arborist" "^5.0.4" + "@npmcli/arborist" "^5.6.3" "@npmcli/ci-detect" "^2.0.0" - "@npmcli/config" "^4.2.0" + "@npmcli/config" "^4.2.1" "@npmcli/fs" "^2.1.0" "@npmcli/map-workspaces" "^2.0.3" "@npmcli/package-json" "^2.0.0" - "@npmcli/run-script" "^4.2.0" + "@npmcli/run-script" "^4.2.1" abbrev "~1.1.1" archy "~1.0.0" - cacache "^16.1.1" + cacache "^16.1.3" chalk "^4.1.2" chownr "^2.0.0" cli-columns "^4.0.0" cli-table3 "^0.6.2" columnify "^1.6.0" fastest-levenshtein "^1.0.12" + fs-minipass "^2.1.0" glob "^8.0.1" graceful-fs "^4.2.10" - hosted-git-info "^5.0.0" - ini "^3.0.0" + hosted-git-info "^5.2.1" + ini "^3.0.1" init-package-json "^3.0.2" is-cidr "^4.0.2" json-parse-even-better-errors "^2.3.1" - libnpmaccess "^6.0.2" - libnpmdiff "^4.0.2" - libnpmexec "^4.0.2" - libnpmfund "^3.0.1" - libnpmhook "^8.0.2" - libnpmorg "^4.0.2" - libnpmpack "^4.0.2" - libnpmpublish "^6.0.2" - libnpmsearch "^5.0.2" - libnpmteam "^4.0.2" - libnpmversion "^3.0.1" + libnpmaccess "^6.0.4" + libnpmdiff "^4.0.5" + libnpmexec "^4.0.14" + libnpmfund "^3.0.5" + libnpmhook "^8.0.4" + libnpmorg "^4.0.4" + libnpmpack "^4.1.3" + libnpmpublish "^6.0.5" + libnpmsearch "^5.0.4" + libnpmteam "^4.0.4" + libnpmversion "^3.0.7" make-fetch-happen "^10.2.0" + minimatch "^5.1.0" minipass "^3.1.6" minipass-pipeline "^1.2.4" mkdirp "^1.0.4" mkdirp-infer-owner "^2.0.0" ms "^2.1.2" - node-gyp "^9.0.0" - nopt "^5.0.0" + node-gyp "^9.1.0" + nopt "^6.0.0" npm-audit-report "^3.0.0" npm-install-checks "^5.0.0" npm-package-arg "^9.1.0" - npm-pick-manifest "^7.0.1" + npm-pick-manifest "^7.0.2" npm-profile "^6.2.0" - npm-registry-fetch "^13.3.0" + npm-registry-fetch "^13.3.1" npm-user-validate "^1.0.1" npmlog "^6.0.2" opener "^1.5.2" p-map "^4.0.0" - pacote "^13.6.1" + pacote "^13.6.2" parse-conflict-json "^2.0.2" proc-log "^2.0.1" qrcode-terminal "^0.12.0" read "~1.0.7" - read-package-json "^5.0.1" + read-package-json "^5.0.2" read-package-json-fast "^2.0.3" readdir-scoped-modules "^1.1.0" rimraf "^3.0.2" @@ -16214,6 +16886,11 @@ object-inspect@^1.12.2, object-inspect@^1.12.3, object-inspect@^1.9.0: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== +object-inspect@^1.13.1: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== + object-is@^1.0.1, object-is@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" @@ -16244,6 +16921,16 @@ object.assign@^4.1.0, object.assign@^4.1.2, object.assign@^4.1.4: has-symbols "^1.0.3" object-keys "^1.1.1" +object.assign@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + has-symbols "^1.0.3" + object-keys "^1.1.1" + object.entries@^1.1.0: version "1.1.6" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.6.tgz#9737d0e5b8291edd340a3e3264bb8a3b00d5fa23" @@ -16578,7 +17265,7 @@ p-limit@^3.0.2, p-limit@^3.1.0: p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== dependencies: p-limit "^1.1.0" @@ -16642,14 +17329,6 @@ p-retry@^3.0.1: dependencies: retry "^0.12.0" -p-retry@^4.0.0: - version "4.6.1" - resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.1.tgz#8fcddd5cdf7a67a0911a9cf2ef0e5df7f602316c" - integrity sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA== - dependencies: - "@types/retry" "^0.12.0" - retry "^0.13.1" - p-timeout@^3.1.0, p-timeout@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" @@ -16660,7 +17339,7 @@ p-timeout@^3.1.0, p-timeout@^3.2.0: p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== p-try@^2.0.0: version "2.2.0" @@ -16677,10 +17356,10 @@ package-json@^4.0.0: registry-url "^3.0.3" semver "^5.1.0" -pacote@^13.0.3, pacote@^13.6.1: - version "13.6.1" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-13.6.1.tgz#ac6cbd9032b4c16e5c1e0c60138dfe44e4cc589d" - integrity sha512-L+2BI1ougAPsFjXRyBhcKmfT016NscRFLv6Pz5EiNf1CCFJFU0pSKKQwsZTyAQB+sTuUL4TyFyp6J1Ork3dOqw== +pacote@^13.0.3, pacote@^13.6.1, pacote@^13.6.2: + version "13.6.2" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-13.6.2.tgz#0d444ba3618ab3e5cd330b451c22967bbd0ca48a" + integrity sha512-Gu8fU3GsvOPkak2CkbojR7vjs3k3P9cA6uazKTHdsdV0gpCEQq2opelnEv30KRQWgVzP5Vd/5umjcedma3MKtg== dependencies: "@npmcli/git" "^3.0.0" "@npmcli/installed-package-contents" "^1.0.7" @@ -16831,7 +17510,7 @@ parse-json@^2.2.0: parse-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== dependencies: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" @@ -17061,7 +17740,7 @@ pirates@^4.0.1, pirates@^4.0.4, pirates@^4.0.5: pkg-conf@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-2.1.0.tgz#2126514ca6f2abfebd168596df18ba57867f0058" - integrity sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg= + integrity sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g== dependencies: find-up "^2.0.0" load-json-file "^4.0.0" @@ -17127,6 +17806,11 @@ posix-character-classes@^0.1.0: resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== +possible-typed-array-names@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" + integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== + postcss-calc@^7.0.1: version "7.0.5" resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.5.tgz#f8a6e99f12e619c2ebc23cf6c486fdc15860933e" @@ -17836,7 +18520,7 @@ postcss-reduce-transforms@^5.1.0: postcss-resolve-nested-selector@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz#29ccbc7c37dedfac304e9fff0bf1596b3f6a0e4e" - integrity sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4= + integrity sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw== postcss-safe-parser@^6.0.0: version "6.0.0" @@ -17857,7 +18541,7 @@ postcss-selector-parser@^3.0.0: indexes-of "^1.0.1" uniq "^1.0.1" -postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.13, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: +postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: version "6.0.13" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b" integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ== @@ -17865,6 +18549,14 @@ postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.10, postcss-selecto cssesc "^3.0.0" util-deprecate "^1.0.2" +postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.13: + version "6.0.16" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz#3b88b9f5c5abd989ef4e2fc9ec8eedd34b20fb04" + integrity sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + postcss-sorting@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/postcss-sorting/-/postcss-sorting-5.0.1.tgz#10d5d0059eea8334dacc820c0121864035bc3f11" @@ -17948,7 +18640,7 @@ postcss@7.0.36: source-map "^0.6.1" supports-color "^6.1.0" -postcss@^8.2.1, postcss@^8.2.15, postcss@^8.2.4, postcss@^8.4.12, postcss@^8.4.24, postcss@^8.4.8: +postcss@^8.2.1, postcss@^8.2.15, postcss@^8.2.4, postcss@^8.4.12, postcss@^8.4.8: version "8.4.31" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== @@ -17957,6 +18649,15 @@ postcss@^8.2.1, postcss@^8.2.15, postcss@^8.2.4, postcss@^8.4.12, postcss@^8.4.2 picocolors "^1.0.0" source-map-js "^1.0.2" +postcss@^8.4.28: + version "8.4.38" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e" + integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A== + dependencies: + nanoid "^3.3.7" + picocolors "^1.0.0" + source-map-js "^1.2.0" + pre-commit@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/pre-commit/-/pre-commit-1.2.2.tgz#dbcee0ee9de7235e57f79c56d7ce94641a69eec6" @@ -18085,9 +18786,9 @@ promise-all-reject-late@^1.0.0: integrity sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw== promise-call-limit@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-call-limit/-/promise-call-limit-1.0.1.tgz#4bdee03aeb85674385ca934da7114e9bcd3c6e24" - integrity sha512-3+hgaa19jzCGLuSCbieeRsu5C2joKfYn8pY6JAuXFRVfF4IO+L7UPpFWNTeWT9pM7uhskvbPPd/oEOktCn317Q== + version "1.0.2" + resolved "https://registry.yarnpkg.com/promise-call-limit/-/promise-call-limit-1.0.2.tgz#f64b8dd9ef7693c9c7613e7dfe8d6d24de3031ea" + integrity sha512-1vTUnfI2hzui8AEIixbdAJlFY4LFDXqQswy/2eOlThAscXCY4It8FdVuI0fMJGAB2aWGbdQf/gv0skKYXmdrHA== promise-inflight@^1.0.1: version "1.0.1" @@ -18147,7 +18848,7 @@ prompts@^2.0.1, prompts@^2.4.0: promzard@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" - integrity sha1-JqXW7ox97kyxIggwWs+5O6OCqe4= + integrity sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw== dependencies: read "1" @@ -18167,6 +18868,11 @@ property-information@^5.0.0, property-information@^5.3.0: dependencies: xtend "^4.0.0" +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== + protocols@^2.0.0, protocols@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/protocols/-/protocols-2.0.1.tgz#8f155da3fc0f32644e83c5782c8e8212ccf70a86" @@ -18258,9 +18964,9 @@ punycode@^1.2.4: integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== punycode@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== punycode@^2.1.1: version "2.1.1" @@ -18270,7 +18976,7 @@ punycode@^2.1.1: q@^1.1.2, q@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= + integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== qrcode-terminal@^0.12.0: version "0.12.0" @@ -18744,9 +19450,9 @@ react@^16.13.1: prop-types "^15.6.2" read-cmd-shim@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-3.0.0.tgz#62b8c638225c61e6cc607f8f4b779f3b8238f155" - integrity sha512-KQDVjGqhZk92PPNRj9ZEXEuqg8bUobSKRw+q0YQ3TKI5xkce7bUJobL4Z/OtiEbAAv70yEpYIXp4iQ9L8oPVog== + version "3.0.1" + resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-3.0.1.tgz#868c235ec59d1de2db69e11aec885bc095aea087" + integrity sha512-kEmDUoYf/CDy8yZbLTmhB1X9kkjf9Q80PCNsDMb7ufrGd6zZSQA1+UyjrO+pZm5K/S4OXCWJeiIt1JA8kAsa6g== read-package-json-fast@^2.0.2, read-package-json-fast@^2.0.3: version "2.0.3" @@ -18756,15 +19462,15 @@ read-package-json-fast@^2.0.2, read-package-json-fast@^2.0.3: json-parse-even-better-errors "^2.3.0" npm-normalize-package-bin "^1.0.1" -read-package-json@^5.0.0, read-package-json@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-5.0.1.tgz#1ed685d95ce258954596b13e2e0e76c7d0ab4c26" - integrity sha512-MALHuNgYWdGW3gKzuNMuYtcSSZbGQm94fAp16xt8VsYTLBjUSc55bLMKe6gzpWue0Tfi6CBgwCSdDAqutGDhMg== +read-package-json@^5.0.0, read-package-json@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-5.0.2.tgz#b8779ccfd169f523b67208a89cc912e3f663f3fa" + integrity sha512-BSzugrt4kQ/Z0krro8zhTwV1Kd79ue25IhNN/VtHFy1mG/6Tluyi+msc0UpwaoQzxSHa28mntAjIZY6kEgfR9Q== dependencies: glob "^8.0.1" json-parse-even-better-errors "^2.3.1" normalize-package-data "^4.0.0" - npm-normalize-package-bin "^1.0.1" + npm-normalize-package-bin "^2.0.0" read-pkg-up@^1.0.1: version "1.0.1" @@ -18824,7 +19530,7 @@ read-pkg@^6.0.0: read@1, read@^1.0.7, read@~1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" - integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= + integrity sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ== dependencies: mute-stream "~0.0.4" @@ -18841,10 +19547,10 @@ read@1, read@^1.0.7, read@~1.0.7: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.6: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== +readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.4.0, readable-stream@^3.6.0, readable-stream@^3.6.2: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" @@ -18863,10 +19569,10 @@ readable-stream@^2.3.0, readable-stream@^2.3.5: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.4.0, readable-stream@^3.6.0, readable-stream@^3.6.2: - version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== +readable-stream@^3.0.6: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" @@ -18939,7 +19645,7 @@ redent@^4.0.0: redeyed@~2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/redeyed/-/redeyed-2.1.1.tgz#8984b5815d99cb220469c99eeeffe38913e6cc0b" - integrity sha1-iYS1gV2ZyyIEacme7v/jiRPmzAs= + integrity sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ== dependencies: esprima "~4.0.0" @@ -18974,6 +19680,11 @@ regenerator-runtime@^0.13.9: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== +regenerator-runtime@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== + regenerator-transform@^0.14.2: version "0.14.5" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" @@ -18981,10 +19692,10 @@ regenerator-transform@^0.14.2: dependencies: "@babel/runtime" "^7.8.4" -regenerator-transform@^0.15.1: - version "0.15.1" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.1.tgz#f6c4e99fc1b4591f780db2586328e4d9a9d8dc56" - integrity sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg== +regenerator-transform@^0.15.1, regenerator-transform@^0.15.2: + version "0.15.2" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" + integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== dependencies: "@babel/runtime" "^7.8.4" @@ -19027,6 +19738,16 @@ regexp.prototype.flags@^1.4.3: define-properties "^1.2.0" functions-have-names "^1.2.3" +regexp.prototype.flags@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" + integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== + dependencies: + call-bind "^1.0.6" + define-properties "^1.2.1" + es-errors "^1.3.0" + set-function-name "^2.0.1" + regexpp@^3.1.0, regexpp@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" @@ -19052,12 +19773,12 @@ registry-auth-token@^3.0.1: rc "^1.1.6" safe-buffer "^5.0.1" -registry-auth-token@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250" - integrity sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw== +registry-auth-token@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-5.0.2.tgz#8b026cc507c8552ebbe06724136267e63302f756" + integrity sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ== dependencies: - rc "^1.2.8" + "@pnpm/npm-conf" "^2.1.0" registry-url@^3.0.3: version "3.1.0" @@ -19347,12 +20068,12 @@ resolve@^1.1.6, resolve@^1.12.0: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@^1.10.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.3.2: - version "1.22.2" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" - integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== +resolve@^1.10.0, resolve@^1.14.2: + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== dependencies: - is-core-module "^2.11.0" + is-core-module "^2.13.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" @@ -19365,6 +20086,15 @@ resolve@^1.17.0, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.8.1: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +resolve@^1.19.0, resolve@^1.3.2: + version "1.22.2" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" + integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== + dependencies: + is-core-module "^2.11.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + resolve@^2.0.0-next.3: version "2.0.0-next.3" resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.3.tgz#d41016293d4a8586a39ca5d9b5f15cbea1f55e46" @@ -19402,12 +20132,7 @@ retry@^0.10.0: retry@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= - -retry@^0.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" - integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== reusify@^1.0.4: version "1.0.4" @@ -19621,6 +20346,16 @@ safe-array-concat@^1.0.0: has-symbols "^1.0.3" isarray "^2.0.5" +safe-array-concat@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" + integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== + dependencies: + call-bind "^1.0.7" + get-intrinsic "^1.2.4" + has-symbols "^1.0.3" + isarray "^2.0.5" + safe-buffer@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" @@ -19650,6 +20385,15 @@ safe-regex-test@^1.0.0: get-intrinsic "^1.1.3" is-regex "^1.1.4" +safe-regex-test@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" + integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-regex "^1.1.4" + safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" @@ -19689,19 +20433,19 @@ sass-loader@^8.0.2: semver "^6.3.0" sass-resources-loader@^2.0.3: - version "2.2.4" - resolved "https://registry.yarnpkg.com/sass-resources-loader/-/sass-resources-loader-2.2.4.tgz#1a86fba499e74a88cb7ce95f0c98449f348d360e" - integrity sha512-hIQhBygYky+rLf+4cuoGYONZ623CEH4Swo1fs1WRJkukbqdvN1VIu2KCL59du6vX92bNELzNkGPLx+NorN73xA== + version "2.2.5" + resolved "https://registry.yarnpkg.com/sass-resources-loader/-/sass-resources-loader-2.2.5.tgz#75131cdb26bae51fcffc007d8155d57b5e825ca7" + integrity sha512-po8rfETH9cOQACWxubT/1CCu77KjxwRtCDm6QAXZH99aUHBydwSoxdIjC40SGp/dcS/FkSNJl0j1VEojGZqlvQ== dependencies: - async "^3.2.0" + async "^3.2.3" chalk "^4.1.0" glob "^7.1.6" loader-utils "^2.0.0" sass@^1.26.8: - version "1.49.9" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.49.9.tgz#b15a189ecb0ca9e24634bae5d1ebc191809712f9" - integrity sha512-YlYWkkHP9fbwaFRZQRXgDi3mXZShslVmmo+FVK3kHLUELHHEYrCmL1x6IUjC7wLS6VuJSAFXRQS/DxdsC4xL1A== + version "1.75.0" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.75.0.tgz#91bbe87fb02dfcc34e052ddd6ab80f60d392be6c" + integrity sha512-ShMYi3WkrDWxExyxSZPst4/okE9ts46xZmJDSawJQrnte7M1V9fScVB+uNXOVKRBt0PggHOwoZcn8mYX4trnBw== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" @@ -19754,7 +20498,7 @@ schema-utils@^2.6.1, schema-utils@^2.6.5, schema-utils@^2.7.0: ajv "^6.12.4" ajv-keywords "^3.5.2" -schema-utils@^3.0.0, schema-utils@^3.1.1, schema-utils@^3.1.2: +schema-utils@^3.0.0, schema-utils@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.2.tgz#36c10abca6f7577aeae136c804b0c741edeadc99" integrity sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg== @@ -19763,6 +20507,15 @@ schema-utils@^3.0.0, schema-utils@^3.1.1, schema-utils@^3.1.2: ajv "^6.12.5" ajv-keywords "^3.5.2" +schema-utils@^3.1.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" + integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + select-hose@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" @@ -19776,9 +20529,9 @@ selfsigned@^1.10.8: node-forge "^0.10.0" semantic-release@^19.0.3: - version "19.0.3" - resolved "https://registry.yarnpkg.com/semantic-release/-/semantic-release-19.0.3.tgz#9291053ad9890052f28e7c5921d4741530d516fd" - integrity sha512-HaFbydST1cDKZHuFZxB8DTrBLJVK/AnDExpK0s3EqLIAAUAHUgnd+VSJCUtTYQKkAkauL8G9CucODrVCc7BuAA== + version "19.0.5" + resolved "https://registry.yarnpkg.com/semantic-release/-/semantic-release-19.0.5.tgz#d7fab4b33fc20f1288eafd6c441e5d0938e5e174" + integrity sha512-NMPKdfpXTnPn49FDogMBi36SiBfXkSOJqCkk0E4iWOY1tusvvgBwqUmxTX1kmlT6kIYed9YwNKD1sfPpqa5yaA== dependencies: "@semantic-release/commit-analyzer" "^9.0.2" "@semantic-release/error" "^3.0.0" @@ -19845,18 +20598,25 @@ semver@7.3.5: dependencies: lru-cache "^6.0.0" -semver@7.x, semver@^7.0.0, semver@^7.1.1, semver@^7.1.2, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7: +semver@7.x, semver@^7.2.1: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== dependencies: lru-cache "^6.0.0" -semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: +semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== +semver@^7.0.0, semver@^7.1.1, semver@^7.1.2, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7: + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== + dependencies: + lru-cache "^6.0.0" + send@0.18.0: version "0.18.0" resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" @@ -19936,6 +20696,28 @@ set-blocking@^2.0.0: resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== +set-function-length@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + +set-function-name@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.2" + set-value@^2.0.0, set-value@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" @@ -20036,9 +20818,9 @@ signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== signal-exit@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.0.2.tgz#ff55bb1d9ff2114c13b400688fa544ac63c36967" - integrity sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q== + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== signale@^1.2.1: version "1.4.0" @@ -20190,11 +20972,11 @@ socks@^1.1.10: smart-buffer "^1.0.13" socks@^2.6.2: - version "2.7.0" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.0.tgz#f9225acdb841e874dca25f870e9130990f3913d0" - integrity sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA== + version "2.8.3" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.3.tgz#1ebd0f09c52ba95a09750afe3f3f9f724a800cb5" + integrity sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw== dependencies: - ip "^2.0.0" + ip-address "^9.0.5" smart-buffer "^4.2.0" sort-keys@^1.0.0: @@ -20226,10 +21008,10 @@ source-list-map@^2.0.0: resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== -"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.1, source-map-js@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== +"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.1, source-map-js@^1.0.2, source-map-js@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" + integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: version "0.5.3" @@ -20291,7 +21073,7 @@ space-separated-tokens@^1.0.0: spawn-error-forwarder@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz#1afd94738e999b0346d7b9fc373be55e07577029" - integrity sha1-Gv2Uc46ZmwNG17n8NzvlXgdXcCk= + integrity sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g== spawn-sync@^1.0.15: version "1.0.15" @@ -20310,9 +21092,9 @@ spdx-correct@^3.0.0: spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + version "2.5.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" + integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== spdx-expression-parse@^3.0.0: version "3.0.1" @@ -20323,9 +21105,9 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.13" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz#7189a474c46f8d47c7b0da4b987bb45e908bd2d5" - integrity sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w== + version "3.0.17" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz#887da8aa73218e51a1d917502d79863161a93f9c" + integrity sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg== spdy-transport@^3.0.0: version "3.0.0" @@ -20372,7 +21154,7 @@ split2@^3.0.0: split2@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/split2/-/split2-1.0.0.tgz#52e2e221d88c75f9a73f90556e263ff96772b314" - integrity sha1-UuLiIdiMdfmnP5BVbiY/+WdysxQ= + integrity sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg== dependencies: through2 "~2.0.0" @@ -20383,6 +21165,11 @@ split@^1.0.0: dependencies: through "2" +sprintf-js@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" + integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -20498,7 +21285,7 @@ stream-browserify@^2.0.1: stream-combiner2@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" - integrity sha1-+02KFCDqNidk4hrUeAOXvry0HL4= + integrity sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw== dependencies: duplexer2 "~0.1.0" readable-stream "^2.0.2" @@ -20636,6 +21423,16 @@ string.prototype.trim@^1.2.7: define-properties "^1.1.4" es-abstract "^1.20.4" +string.prototype.trim@^1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4" + integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.0" + es-object-atoms "^1.0.0" + string.prototype.trimend@^1.0.4, string.prototype.trimend@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" @@ -20645,6 +21442,15 @@ string.prototype.trimend@^1.0.4, string.prototype.trimend@^1.0.6: define-properties "^1.1.4" es-abstract "^1.20.4" +string.prototype.trimend@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz#3651b8513719e8a9f48de7f2f77640b26652b229" + integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + string.prototype.trimstart@^1.0.4, string.prototype.trimstart@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" @@ -20654,6 +21460,15 @@ string.prototype.trimstart@^1.0.4, string.prototype.trimstart@^1.0.6: define-properties "^1.1.4" es-abstract "^1.20.4" +string.prototype.trimstart@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" + integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + string_decoder@^1.0.0, string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" @@ -20706,7 +21521,7 @@ strip-bom@^2.0.0: strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== strip-bom@^4.0.0: version "4.0.0" @@ -20752,7 +21567,7 @@ strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== structured-source@^3.0.2: version "3.0.2" @@ -20785,7 +21600,7 @@ style-loader@^2.0.0: style-search@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902" - integrity sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI= + integrity sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg== style-to-object@0.3.0, style-to-object@^0.3.0: version "0.3.0" @@ -20876,35 +21691,35 @@ stylelint-scss@^4.4.0: postcss-value-parser "^4.2.0" stylelint-webpack-plugin@^2.0.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/stylelint-webpack-plugin/-/stylelint-webpack-plugin-2.3.2.tgz#edb849250fb829349ddb41bc07d343c39d3391ce" - integrity sha512-gjerWQ7nY+4JdebL3LTDPp80DV10O1OOWtM+v+W29+ThzLsKGz3UptEVd0jVdFpWEohEXVilbnan2b/YXxakqA== + version "2.5.0" + resolved "https://registry.yarnpkg.com/stylelint-webpack-plugin/-/stylelint-webpack-plugin-2.5.0.tgz#8dd1e8db5adfea7895c475af9ff0e9e386b6a93e" + integrity sha512-UX+A4FzHM98VI+mnN4ZGDXnDOf3RC4+xk26nyveUQmIDx43dFYbZQHsZNVFl17La9+VQFpwOHh3c5Zv/kwAI3g== dependencies: arrify "^2.0.1" - globby "^11.0.4" - jest-worker "^27.3.1" - micromatch "^4.0.4" + globby "^11.1.0" + jest-worker "^28.1.3" + micromatch "^4.0.5" normalize-path "^3.0.0" schema-utils "^3.1.1" stylelint@^15.10.1: - version "15.10.1" - resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-15.10.1.tgz#93f189958687e330c106b010cbec0c41dcae506d" - integrity sha512-CYkzYrCFfA/gnOR+u9kJ1PpzwG10WLVnoxHDuBA/JiwGqdM9+yx9+ou6SE/y9YHtfv1mcLo06fdadHTOx4gBZQ== + version "15.11.0" + resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-15.11.0.tgz#3ff8466f5f5c47362bc7c8c9d382741c58bc3292" + integrity sha512-78O4c6IswZ9TzpcIiQJIN49K3qNoXTM8zEJzhaTE/xRTCZswaovSEVIa/uwbOltZrk16X4jAxjaOhzz/hTm1Kw== dependencies: - "@csstools/css-parser-algorithms" "^2.3.0" - "@csstools/css-tokenizer" "^2.1.1" - "@csstools/media-query-list-parser" "^2.1.2" + "@csstools/css-parser-algorithms" "^2.3.1" + "@csstools/css-tokenizer" "^2.2.0" + "@csstools/media-query-list-parser" "^2.1.4" "@csstools/selector-specificity" "^3.0.0" balanced-match "^2.0.0" colord "^2.9.3" cosmiconfig "^8.2.0" - css-functions-list "^3.1.0" + css-functions-list "^3.2.1" css-tree "^2.3.1" debug "^4.3.4" - fast-glob "^3.3.0" + fast-glob "^3.3.1" fastest-levenshtein "^1.0.16" - file-entry-cache "^6.0.1" + file-entry-cache "^7.0.0" global-modules "^2.0.0" globby "^11.1.0" globjoin "^0.1.4" @@ -20913,13 +21728,13 @@ stylelint@^15.10.1: import-lazy "^4.0.0" imurmurhash "^0.1.4" is-plain-object "^5.0.0" - known-css-properties "^0.27.0" + known-css-properties "^0.29.0" mathml-tag-names "^2.1.3" meow "^10.1.5" micromatch "^4.0.5" normalize-path "^3.0.0" picocolors "^1.0.0" - postcss "^8.4.24" + postcss "^8.4.28" postcss-resolve-nested-selector "^0.1.1" postcss-safe-parser "^6.0.0" postcss-selector-parser "^6.0.13" @@ -20961,7 +21776,7 @@ supports-color@^8.0.0: dependencies: has-flag "^4.0.0" -supports-hyperlinks@^2.0.0, supports-hyperlinks@^2.2.0: +supports-hyperlinks@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== @@ -20969,6 +21784,14 @@ supports-hyperlinks@^2.0.0, supports-hyperlinks@^2.2.0: has-flag "^4.0.0" supports-color "^7.0.0" +supports-hyperlinks@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" + integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + supports-hyperlinks@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-3.0.0.tgz#c711352a5c89070779b4dad54c05a2f14b15c94b" @@ -20990,7 +21813,7 @@ svg-parser@^2.0.2: svg-tags@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" - integrity sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q= + integrity sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA== svgo@^1.0.0, svgo@^1.2.2: version "1.3.2" @@ -21049,7 +21872,7 @@ tabbable@^5.3.3: resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-5.3.3.tgz#aac0ff88c73b22d6c3c5a50b1586310006b47fbf" integrity sha512-QD9qKY3StfbZqWOPLp0++pOrAVb/HbUi5xCc8cUo4XjP19808oaMiDzn0leBY5mCespIBM0CIZePzZjgzR83kA== -table@^6.0.9, table@^6.8.1: +table@^6.0.9: version "6.8.1" resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf" integrity sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA== @@ -21060,6 +21883,17 @@ table@^6.0.9, table@^6.8.1: string-width "^4.2.3" strip-ansi "^6.0.1" +table@^6.8.1: + version "6.8.2" + resolved "https://registry.yarnpkg.com/table/-/table-6.8.2.tgz#c5504ccf201213fa227248bdc8c5569716ac6c58" + integrity sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA== + dependencies: + ajv "^8.0.1" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + tapable@^1.0.0, tapable@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" @@ -21286,7 +22120,7 @@ through2@^4.0.0: through@2, "through@>=2.2.7 <3", through@^2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== thunky@^1.0.2: version "1.1.0" @@ -21444,11 +22278,20 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== -traverse@^0.6.6, traverse@~0.6.6: +traverse@^0.6.6: version "0.6.6" resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" integrity sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc= +traverse@~0.6.6: + version "0.6.9" + resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.9.tgz#76cfdbacf06382d460b76f8b735a44a6209d8b81" + integrity sha512-7bBrcF+/LQzSgFmT0X5YclVqQxtv7TDJ1f8Wj7ibBu/U6BMLeOpUxuZjV7rMc44UtKxlnMFigdhFAIszSX1DMg== + dependencies: + gopd "^1.0.1" + typedarray.prototype.slice "^1.0.3" + which-typed-array "^1.1.15" + treeverse@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-2.0.0.tgz#036dcef04bc3fd79a9b79a68d4da03e882d8a9ca" @@ -21558,7 +22401,7 @@ tsconfig-paths@^3.14.1: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@^1.0.0, tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: +tslib@^1.0.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== @@ -21634,7 +22477,7 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -type-fest@^1.0.1, type-fest@^1.0.2, type-fest@^1.2.1, type-fest@^1.2.2: +type-fest@^1.0.1, type-fest@^1.2.1, type-fest@^1.2.2: version "1.4.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== @@ -21667,6 +22510,38 @@ type@^2.7.2: resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== +typed-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" + integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-typed-array "^1.1.13" + +typed-array-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" + integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + +typed-array-byte-offset@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" + integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + typed-array-length@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" @@ -21676,6 +22551,18 @@ typed-array-length@^1.0.4: for-each "^0.3.3" is-typed-array "^1.1.9" +typed-array-length@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.6.tgz#57155207c76e64a3457482dfdc1c9d1d3c4c73a3" + integrity sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" + typed-styles@^0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/typed-styles/-/typed-styles-0.0.7.tgz#93392a008794c4595119ff62dde6809dbc40a3d9" @@ -21688,6 +22575,18 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" +typedarray.prototype.slice@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typedarray.prototype.slice/-/typedarray.prototype.slice-1.0.3.tgz#bce2f685d3279f543239e4d595e0d021731d2d1a" + integrity sha512-8WbVAQAUlENo1q3c3zZYuy5k9VzBQvp8AX9WOtbvyWlLM1v5JaSRmjubLjzHF4JFtptjH/5c/i95yaElvcjC0A== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.0" + es-errors "^1.3.0" + typed-array-buffer "^1.0.2" + typed-array-byte-offset "^1.0.2" + typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" @@ -21718,6 +22617,11 @@ underscore@~1.8.3: resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022" integrity sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI= +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + unfetch@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/unfetch/-/unfetch-4.2.0.tgz#7e21b0ef7d363d8d9af0fb929a5555f6ef97a3be" @@ -21805,6 +22709,13 @@ unique-filename@^1.1.0, unique-filename@^1.1.1: dependencies: unique-slug "^2.0.0" +unique-filename@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-2.0.1.tgz#e785f8675a9a7589e0ac77e0b5c34d2eaeac6da2" + integrity sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A== + dependencies: + unique-slug "^3.0.0" + unique-slug@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" @@ -21812,6 +22723,13 @@ unique-slug@^2.0.0: dependencies: imurmurhash "^0.1.4" +unique-slug@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-3.0.0.tgz#6d347cf57c8a7a7a6044aabd0e2d74e4d76dc7c9" + integrity sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w== + dependencies: + imurmurhash "^0.1.4" + unique-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" @@ -21916,9 +22834,9 @@ unist-util-visit@^1.1.0: unist-util-visit-parents "^2.0.0" universal-user-agent@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" - integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== + version "6.0.1" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.1.tgz#15f20f55da3c930c57bddbf1734c6654d5fd35aa" + integrity sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ== universalify@^0.1.0: version "0.1.2" @@ -21931,9 +22849,9 @@ universalify@^0.2.0: integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" @@ -21979,7 +22897,15 @@ upath@^1.1.1: resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== -update-browserslist-db@^1.0.10, update-browserslist-db@^1.0.9: +update-browserslist-db@^1.0.10, update-browserslist-db@^1.0.13: + version "1.0.13" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" + integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +update-browserslist-db@^1.0.9: version "1.0.11" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== @@ -22634,6 +23560,17 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q== +which-typed-array@^1.1.14, which-typed-array@^1.1.15: + version "1.1.15" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" + integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.2" + which-typed-array@^1.1.8, which-typed-array@^1.1.9: version "1.1.9" resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" @@ -22772,9 +23709,9 @@ write-file-atomic@^3.0.0: typedarray-to-buffer "^3.1.5" write-file-atomic@^4.0.0, write-file-atomic@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.1.tgz#9faa33a964c1c85ff6f849b80b42a88c2c537c8f" - integrity sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ== + version "4.0.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== dependencies: imurmurhash "^0.1.4" signal-exit "^3.0.7" From 427a18a1b13fa473cdd7c0556e856b7cb149127b Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Tue, 30 Apr 2024 16:01:12 +0000 Subject: [PATCH 38/40] chore(release): 1.0.0-beta.18 [skip ci] # [1.0.0-beta.18](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.17...v1.0.0-beta.18) (2024-04-30) ### Features * update drop shadows ([#885](https://github.com/palmetto/palmetto-components/issues/885)) ([7aae6b1](https://github.com/palmetto/palmetto-components/commit/7aae6b1c3a7354bebb9a3b70d33b6586002c2151)) --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a960fb648..d96b33116 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ Changelog +# [1.0.0-beta.18](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.17...v1.0.0-beta.18) (2024-04-30) + + +### Features + +* update drop shadows ([#885](https://github.com/palmetto/palmetto-components/issues/885)) ([7aae6b1](https://github.com/palmetto/palmetto-components/commit/7aae6b1c3a7354bebb9a3b70d33b6586002c2151)) + # [1.0.0-beta.17](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.16...v1.0.0-beta.17) (2024-04-12) # [1.0.0-beta.16](https://github.com/palmetto/palmetto-components/compare/v1.0.0-beta.15...v1.0.0-beta.16) (2024-04-05) From a40fa634f33942a3971c01feae689cd42731f6e5 Mon Sep 17 00:00:00 2001 From: nathanyoung <1447339+nathanyoung@users.noreply.github.com> Date: Tue, 30 Apr 2024 09:14:43 -0700 Subject: [PATCH 39/40] Update package.json --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 04cba0e05..c1978d3db 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ }, "dependencies": { "@palmetto/dialog": "^0.16.4", - "@palmetto/palmetto-design-tokens": "0.79.0", + "@palmetto/palmetto-design-tokens": "0.79.2", "@popperjs/core": "^2.5.3", "classnames": "^2.2.6", "cleave.js": "^1.6.0", From 5920f0d4302b45b476cf7692f485e511597ec0a6 Mon Sep 17 00:00:00 2001 From: nathanyoung <1447339+nathanyoung@users.noreply.github.com> Date: Tue, 30 Apr 2024 09:15:10 -0700 Subject: [PATCH 40/40] palmetto-design-tokens 0.79.2 --- yarn.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/yarn.lock b/yarn.lock index 5aac2ff4b..30e110afb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3532,10 +3532,10 @@ react-remove-scroll "^2.4.3" tslib "^2.3.0" -"@palmetto/palmetto-design-tokens@0.79.0": - version "0.79.0" - resolved "https://registry.yarnpkg.com/@palmetto/palmetto-design-tokens/-/palmetto-design-tokens-0.79.0.tgz#9dd2c90a24974fa710d43f89aaa43738ffc6fb71" - integrity sha512-pKOV8a298BP4z2B9URK8SSFpTSU8aFeIrC5PWtePr318onwkuAIAi7QzRBuNBXDMjdjkxwFuNVGgtsq0RYDd0w== +"@palmetto/palmetto-design-tokens@0.79.2": + version "0.79.2" + resolved "https://registry.yarnpkg.com/@palmetto/palmetto-design-tokens/-/palmetto-design-tokens-0.79.2.tgz#6236ed70252c05119375754529fb6a3d06d6c65d" + integrity sha512-9K36ykZSpZjCSPIKTEFgoEO8HdtCiSC7CF27gKVc2BEhAJ6XdT+vlp4j7Rr2Wto8CwM/hQZXSe+XqYL6VRrmGg== "@pmmmwh/react-refresh-webpack-plugin@^0.5.3": version "0.5.10"