diff --git a/configs/mocha-config-compass/register/jsdom-extra-mocks-register.js b/configs/mocha-config-compass/register/jsdom-extra-mocks-register.js index c8e938dc10b..e631609c475 100644 --- a/configs/mocha-config-compass/register/jsdom-extra-mocks-register.js +++ b/configs/mocha-config-compass/register/jsdom-extra-mocks-register.js @@ -35,6 +35,25 @@ Object.assign(tabbable, { origTabbable.isTabbable(node, { ...options, displayCheck: 'none' }), }); +// Workaround for missing HTMLDialogElement in jsdom +// See https://github.com/jsdom/jsdom/issues/3294 + +Object.assign(HTMLDialogElement.prototype, { + show() { + this.open = true; + this.style.display = ''; + }, + showModal() { + this.open = true; + this.style.display = ''; + }, + close(returnValue) { + this.open = false; + this.returnValue = returnValue; + this.style.display = 'none'; + }, +}); + // leafygreen (through `clipboard` library) uses deprecated API check that is // not working in jsdom if copy / paste APIs are supported if (!window.document.queryCommandSupported) { diff --git a/configs/testing-library-compass/src/assertions.ts b/configs/testing-library-compass/src/assertions.ts new file mode 100644 index 00000000000..a90be9b3b22 --- /dev/null +++ b/configs/testing-library-compass/src/assertions.ts @@ -0,0 +1,43 @@ +import { Assertion, util } from 'chai'; + +// TODO(COMPASS-10119): Move declaration into a separate .d.ts and implementation into a *-register.js file as we do with other global patching code intended for tests. + +declare global { + // eslint-disable-next-line @typescript-eslint/no-namespace -- We're following a pattern established in the `@types/chai-as-promised` package to add a Chai assertion property. + export namespace Chai { + interface Assertion { + /** Asserts that a dialog is open */ + get open(): Assertion; + /** Asserts that a dialog is closed */ + get closed(): Assertion; + } + } +} + +util.addProperty( + Assertion.prototype, + 'open', + function (this: typeof Assertion) { + const obj = util.flag(this, 'object'); + new Assertion(obj).to.be.instanceof(HTMLDialogElement); + new Assertion(obj as HTMLDialogElement).has.property( + 'open', + true, + 'Expected dialog to be open' + ); + } +); + +util.addProperty( + Assertion.prototype, + 'closed', + function (this: typeof Assertion) { + const obj = util.flag(this, 'object'); + new Assertion(obj).to.be.instanceof(HTMLDialogElement); + new Assertion(obj as HTMLDialogElement).has.property( + 'open', + false, + 'Expected dialog to be closed' + ); + } +); diff --git a/configs/testing-library-compass/src/index.tsx b/configs/testing-library-compass/src/index.tsx index 1b66ca01177..5bbd02ea9f3 100644 --- a/configs/testing-library-compass/src/index.tsx +++ b/configs/testing-library-compass/src/index.tsx @@ -73,6 +73,8 @@ import { expect } from 'chai'; import { Provider } from 'react-redux'; import ConnectionString from 'mongodb-connection-string-url'; +import './assertions'; + function wait(ms: number) { return new Promise((resolve) => { setTimeout(resolve, ms); diff --git a/package-lock.json b/package-lock.json index 623c5a596c7..63945e9a15a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6399,9 +6399,9 @@ } }, "node_modules/@floating-ui/react/node_modules/tabbable": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", - "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.3.0.tgz", + "integrity": "sha512-EIHvdY5bPLuWForiR/AN2Bxngzpuwn1is4asboytXtpTgsArc+WmSJKVLlhdh71u7jFcryDqB2A8lQvj78MkyQ==", "license": "MIT" }, "node_modules/@floating-ui/utils": { @@ -6799,12 +6799,6 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@juggle/resize-observer": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.4.0.tgz", - "integrity": "sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==", - "license": "Apache-2.0" - }, "node_modules/@kwsites/file-exists": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", @@ -6834,17 +6828,17 @@ } }, "node_modules/@leafygreen-ui/avatar": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/avatar/-/avatar-3.1.5.tgz", - "integrity": "sha512-msQ7z5/Igr7mE2n8amopsv+gc7XLoC5KrgmU7xy0RZcgtaL18ORP0nULAK9hNs3v+LCXe2324WcRqfSU2OLQlA==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/avatar/-/avatar-3.1.6.tgz", + "integrity": "sha512-OOvVraABcH060IzVwd5zHyHTzoYmYiBhQipb148KG9EDoHaxf9HL1OtMciNrh0eKCZafmCYXxF9g7MCJTgHyvw==", "license": "Apache-2.0", "dependencies": { "@leafygreen-ui/emotion": "^5.1.0", - "@leafygreen-ui/icon": "^14.7.0", + "@leafygreen-ui/icon": "^14.7.1", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/logo": "^11.1.0", "@leafygreen-ui/palette": "^5.0.2", - "@leafygreen-ui/tokens": "^4.0.0", + "@leafygreen-ui/tokens": "^4.1.0", "lodash": "^4.17.21" }, "peerDependencies": { @@ -6867,18 +6861,18 @@ } }, "node_modules/@leafygreen-ui/banner": { - "version": "10.2.3", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/banner/-/banner-10.2.3.tgz", - "integrity": "sha512-yzyP5oAJ9DCZlNJythfReFBLN8s9Khz9KCBDpRCmtNI6gJXGMNURF+kZM6VbT+XNe7wPN4mjkj6fGZ6grPL2rA==", + "version": "10.2.4", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/banner/-/banner-10.2.4.tgz", + "integrity": "sha512-GFH+LYnu67vOik2ulSLt6UpWaPeTmIDp3cPyc74UgTgg0MGLbFGS1maY+LSmL/nsumM3zCWF2RPQ7rkMM+n0CA==", "license": "Apache-2.0", "dependencies": { "@leafygreen-ui/emotion": "^5.1.0", - "@leafygreen-ui/icon": "^14.7.0", - "@leafygreen-ui/icon-button": "^17.1.3", + "@leafygreen-ui/icon": "^14.7.1", + "@leafygreen-ui/icon-button": "^17.1.4", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/typography": "^22.2.2" + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/typography": "^22.2.3" }, "peerDependencies": { "@leafygreen-ui/leafygreen-provider": "^5.0.0 || ^4.0.0 || ^3.2.0" @@ -6920,9 +6914,9 @@ } }, "node_modules/@leafygreen-ui/checkbox": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/checkbox/-/checkbox-18.1.3.tgz", - "integrity": "sha512-DwrJSVEo3J/rdWUpBcvHSaSVbyIb1Quvdu8Ok5Lmy6vT/ARfM1aM2KzheDQ25E2ArY7c/lsBf0T0qmIvYu2J3w==", + "version": "18.1.4", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/checkbox/-/checkbox-18.1.4.tgz", + "integrity": "sha512-aWVkalPdUUuUCt0iUaDg+z1ktusu18PfUbcR5zoLpQyIymeZK9mhsM/LdKAkQKt7mT2ExLeFzMzuSenRLVG8jg==", "license": "Apache-2.0", "dependencies": { "@leafygreen-ui/a11y": "^3.0.5", @@ -6930,8 +6924,8 @@ "@leafygreen-ui/hooks": "^9.3.0", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/typography": "^22.2.2", + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/typography": "^22.2.3", "@lg-tools/test-harnesses": "^0.3.4", "react-transition-group": "^4.4.5" }, @@ -6940,41 +6934,41 @@ } }, "node_modules/@leafygreen-ui/chip": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/chip/-/chip-4.0.9.tgz", - "integrity": "sha512-TDk63YkB1WVfb4yDMOC0qq4OVkI4EVqOnQ/kIFna7MGy0W74829M5qqPg4Emzb8E0ayhfoCzyqonPdobdUvkmQ==", + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/chip/-/chip-4.0.10.tgz", + "integrity": "sha512-+zJxpwo9hVxryJEmiayjKm8W20+MOF61ngh3eOzebaK8JWPVut0TL+vcNh1Ja4mvhdIn3RtLAAmhZKx/nGfvSg==", "license": "Apache-2.0", "dependencies": { "@leafygreen-ui/emotion": "^5.1.0", - "@leafygreen-ui/icon": "^14.7.0", - "@leafygreen-ui/inline-definition": "^9.1.3", + "@leafygreen-ui/icon": "^14.7.1", + "@leafygreen-ui/inline-definition": "^9.1.4", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", - "@leafygreen-ui/tokens": "^4.0.0" + "@leafygreen-ui/tokens": "^4.1.0" }, "peerDependencies": { "@leafygreen-ui/leafygreen-provider": "^5.0.0 || ^4.0.0 || ^3.2.0" } }, "node_modules/@leafygreen-ui/code": { - "version": "20.2.3", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/code/-/code-20.2.3.tgz", - "integrity": "sha512-fcsrNdh9WSh5q+bJyq38eFsKok/tn6EXNWKP+emxLPz0mmxyRSHq1b0olQzFUVm75SIR1KOBVgdbFesdozoAaw==", + "version": "20.2.5", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/code/-/code-20.2.5.tgz", + "integrity": "sha512-/gX0OKgO1HKIkIwsiXIlmxio5pVltTuz/LDmedNnNd5ZLJO2ZAsfK2JKHis4pxwfZHhtE+Ootq3jvMygbXbOwg==", "license": "Apache-2.0", "dependencies": { "@leafygreen-ui/a11y": "^3.0.5", "@leafygreen-ui/button": "^25.1.3", "@leafygreen-ui/emotion": "^5.1.0", "@leafygreen-ui/hooks": "^9.3.0", - "@leafygreen-ui/icon": "^14.7.0", - "@leafygreen-ui/icon-button": "^17.1.3", + "@leafygreen-ui/icon": "^14.7.1", + "@leafygreen-ui/icon-button": "^17.1.4", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", - "@leafygreen-ui/select": "^17.0.1", - "@leafygreen-ui/skeleton-loader": "^3.0.9", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/tooltip": "^14.2.3", - "@leafygreen-ui/typography": "^22.2.2", + "@leafygreen-ui/select": "^17.0.2", + "@leafygreen-ui/skeleton-loader": "^3.0.10", + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/tooltip": "^14.3.0", + "@leafygreen-ui/typography": "^22.2.3", "@lg-tools/test-harnesses": "^0.3.4", "@types/facepaint": "^1.2.1", "@types/highlight.js": "^10.1.0", @@ -6990,24 +6984,24 @@ } }, "node_modules/@leafygreen-ui/combobox": { - "version": "12.2.1", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/combobox/-/combobox-12.2.1.tgz", - "integrity": "sha512-nppvD3nWO3KmAlMQBVDlgRlll1bATnbcpoXo/gEws3bf2Jn8Yq54ywf783bSX1HkZysSCsjpVLxgIGhbcX7nwA==", + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/combobox/-/combobox-12.3.0.tgz", + "integrity": "sha512-NjRydZxbp7Ah4bzUNSHDU4glmvMxhtQBv8C0Zagg9EWoqq+q1YIbhC4yQT2k3LhatdYMXTZq8fSC9liVe+QI7Q==", "license": "Apache-2.0", "dependencies": { - "@leafygreen-ui/checkbox": "^18.1.3", - "@leafygreen-ui/chip": "^4.0.9", + "@leafygreen-ui/checkbox": "^18.1.4", + "@leafygreen-ui/chip": "^4.0.10", "@leafygreen-ui/emotion": "^5.1.0", - "@leafygreen-ui/form-field": "^4.0.7", + "@leafygreen-ui/form-field": "^4.0.8", "@leafygreen-ui/hooks": "^9.3.0", - "@leafygreen-ui/icon": "^14.7.0", - "@leafygreen-ui/icon-button": "^17.1.3", - "@leafygreen-ui/input-option": "^4.1.3", + "@leafygreen-ui/icon": "^14.7.1", + "@leafygreen-ui/icon-button": "^17.1.4", + "@leafygreen-ui/input-option": "^4.1.4", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", "@leafygreen-ui/popover": "^14.3.1", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/typography": "^22.2.2", + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/typography": "^22.2.3", "chalk": "^4.1.2", "lodash": "^4.17.21", "polished": "^4.2.2" @@ -7017,40 +7011,40 @@ } }, "node_modules/@leafygreen-ui/confirmation-modal": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/confirmation-modal/-/confirmation-modal-8.0.1.tgz", - "integrity": "sha512-tZGavYwuBQ0EiL8LPJivM/qo1JQn/frBKj2/g1/9Ul+1vwr3EX2krtnWUV+66T4xSkLCZID3JtDftdohlc7Kkg==", + "version": "10.2.3", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/confirmation-modal/-/confirmation-modal-10.2.3.tgz", + "integrity": "sha512-c6vniV0UPZB69E16rEGDFfGoBRURj+k74OA/0la3vFR0IUh8q7vlIPXT1RZE7PJZNv4M+BxHe86vkJ42vDU8Lg==", "license": "Apache-2.0", "dependencies": { - "@leafygreen-ui/button": "^24.0.1", - "@leafygreen-ui/emotion": "^5.0.0", - "@leafygreen-ui/icon": "^14.0.0", - "@leafygreen-ui/lib": "^15.0.0", - "@leafygreen-ui/modal": "^18.0.1", - "@leafygreen-ui/palette": "^5.0.0", - "@leafygreen-ui/text-input": "^15.0.1", - "@leafygreen-ui/tokens": "^3.1.0", - "@leafygreen-ui/typography": "^21.0.1" + "@leafygreen-ui/button": "^25.1.3", + "@leafygreen-ui/emotion": "^5.1.0", + "@leafygreen-ui/icon": "^14.7.1", + "@leafygreen-ui/lib": "^15.6.2", + "@leafygreen-ui/modal": "^20.3.3", + "@leafygreen-ui/palette": "^5.0.2", + "@leafygreen-ui/text-input": "^16.2.2", + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/typography": "^22.2.3" }, "peerDependencies": { - "@leafygreen-ui/leafygreen-provider": "^5.0.0" + "@leafygreen-ui/leafygreen-provider": "^5.0.0 || ^4.0.0 || ^3.2.0" } }, "node_modules/@leafygreen-ui/copyable": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/copyable/-/copyable-12.0.1.tgz", - "integrity": "sha512-tf6mjjHQu/ZtuHSu88Vv71ZB+wVE4QT+ahRbPC61CSPY34EjHdKXic4/k/DF5Pl40DTB2vQZbU/T4aqVAaZgYQ==", + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/copyable/-/copyable-12.0.2.tgz", + "integrity": "sha512-tE23eBGVPn7u16gdFAt9182lrqMOf2y8DOZi/vHp9L2JtI4+0bwFxFVkJqjn+Y10UtD3Fe8/NY2yJ11kpMTlhA==", "license": "Apache-2.0", "dependencies": { "@leafygreen-ui/button": "^25.1.3", "@leafygreen-ui/emotion": "^5.1.0", "@leafygreen-ui/hooks": "^9.3.0", - "@leafygreen-ui/icon": "^14.7.0", + "@leafygreen-ui/icon": "^14.7.1", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/tooltip": "^14.2.3", - "@leafygreen-ui/typography": "^22.2.2", + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/tooltip": "^14.3.0", + "@leafygreen-ui/typography": "^22.2.3", "clipboard": "^2.0.6", "polished": "^4.2.2" }, @@ -7073,24 +7067,24 @@ } }, "node_modules/@leafygreen-ui/drawer": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/drawer/-/drawer-5.1.3.tgz", - "integrity": "sha512-mKZhcAcdmvTt2SAiVsp5aoRm7xZXxalKvV5dpbWOh4p0YfDZJ3AtXhdLouTUe6u/90x4JWTcb3R3K2FdDwsNAw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/drawer/-/drawer-5.2.0.tgz", + "integrity": "sha512-6HK481NmDWddRdSKK61A2vWLazqF5BxnONnNtjn+kBjlOndKaVCguEhrMqMSIPL6y2BstBhpcq5EYK8x5PjDdQ==", "license": "Apache-2.0", "dependencies": { "@leafygreen-ui/button": "^25.1.3", "@leafygreen-ui/emotion": "^5.1.0", "@leafygreen-ui/hooks": "^9.3.0", - "@leafygreen-ui/icon": "^14.7.0", - "@leafygreen-ui/icon-button": "^17.1.3", + "@leafygreen-ui/icon": "^14.7.1", + "@leafygreen-ui/icon-button": "^17.1.4", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", "@leafygreen-ui/polymorphic": "^3.1.0", "@leafygreen-ui/resizable": "^0.1.3", - "@leafygreen-ui/tabs": "^17.0.7", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/toolbar": "^1.1.3", - "@leafygreen-ui/typography": "^22.2.2", + "@leafygreen-ui/tabs": "^17.0.8", + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/toolbar": "^1.2.0", + "@leafygreen-ui/typography": "^22.2.3", "@lg-tools/test-harnesses": "^0.3.4", "polished": "^4.2.2", "react-intersection-observer": "^8.25.1" @@ -7110,40 +7104,40 @@ } }, "node_modules/@leafygreen-ui/form-field": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/form-field/-/form-field-4.0.7.tgz", - "integrity": "sha512-yCTCdPnHJbrmzV4HyZrXebzDacL0ElfCz6o4MWZlwRazQFGQnB6L3Ewf3fFUo53w6oO4o10iygCpXeuvrUaj7A==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/form-field/-/form-field-4.0.8.tgz", + "integrity": "sha512-rkdC0aXUEx8O/Y7ktFAFpqzNo3TcAYi7LyxrCy6RxnKSfqMheRl4cvb4XYrU5s84/BzKtBCPSmUav0kxN8PWDg==", "license": "Apache-2.0", "dependencies": { "@leafygreen-ui/emotion": "^5.1.0", "@leafygreen-ui/hooks": "^9.3.0", - "@leafygreen-ui/icon": "^14.7.0", + "@leafygreen-ui/icon": "^14.7.1", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/typography": "^22.2.2" + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/typography": "^22.2.3" }, "peerDependencies": { "@leafygreen-ui/leafygreen-provider": "^5.0.0 || ^4.0.0 || ^3.2.0" } }, "node_modules/@leafygreen-ui/guide-cue": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/guide-cue/-/guide-cue-8.1.1.tgz", - "integrity": "sha512-daef5lBRwCCmjoqh1EGv/00kJdlWx2Gw78fxYeJcaRSQ/D3Q97xZldul7UKNl8w/PVmBDMonnXUjrcNSPbHiww==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/guide-cue/-/guide-cue-8.2.0.tgz", + "integrity": "sha512-YDNcu+DA4aOE9QxI/TujT/v7h0YXz07rQpBcrew+7dIhDp3NcuNLN39SYegz5Gi6br+rhEQh8n7dowBHhVM6iw==", "license": "Apache-2.0", "dependencies": { "@leafygreen-ui/a11y": "^3.0.5", "@leafygreen-ui/button": "^25.1.3", "@leafygreen-ui/emotion": "^5.1.0", "@leafygreen-ui/hooks": "^9.3.0", - "@leafygreen-ui/icon": "^14.7.0", - "@leafygreen-ui/icon-button": "^17.1.3", + "@leafygreen-ui/icon": "^14.7.1", + "@leafygreen-ui/icon-button": "^17.1.4", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", "@leafygreen-ui/popover": "^14.3.1", - "@leafygreen-ui/tooltip": "^14.2.3", - "@leafygreen-ui/typography": "^22.2.2", + "@leafygreen-ui/tooltip": "^14.3.0", + "@leafygreen-ui/typography": "^22.2.3", "focus-trap": "6.9.4", "focus-trap-react": "9.0.2", "polished": "^4.2.2" @@ -7175,18 +7169,18 @@ } }, "node_modules/@leafygreen-ui/icon-button": { - "version": "17.1.3", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/icon-button/-/icon-button-17.1.3.tgz", - "integrity": "sha512-NQVIS31OYRcXQ3tiQcmhIWu9RVMzL8bM4xr+lg+gxVQFx3l2fdlcodtk2DqRbMvxckGGwGAofOKhWqeJbK8vEQ==", + "version": "17.1.4", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/icon-button/-/icon-button-17.1.4.tgz", + "integrity": "sha512-n7EQ72FXs5fR4aN1y88NG4JIXTSOiWqGnfV4qB0FxNzkB4bpIhZoDPA+InokVV/xYDGuDmV2ngTRExoeJSMTuw==", "license": "Apache-2.0", "dependencies": { "@leafygreen-ui/a11y": "^3.0.5", "@leafygreen-ui/emotion": "^5.1.0", - "@leafygreen-ui/icon": "^14.7.0", + "@leafygreen-ui/icon": "^14.7.1", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", "@leafygreen-ui/polymorphic": "^3.1.0", - "@leafygreen-ui/tokens": "^4.0.0", + "@leafygreen-ui/tokens": "^4.1.0", "polished": "^4.2.2" }, "peerDependencies": { @@ -7194,42 +7188,42 @@ } }, "node_modules/@leafygreen-ui/info-sprinkle": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/info-sprinkle/-/info-sprinkle-5.0.9.tgz", - "integrity": "sha512-gkluPoZj5j5kbkwDVhaaVBAzgyEtonTJ/Vo4neFp8i1ngcxqF3iYF0biLq2BWK1wRnO7qT0P5/pUBX1VjczJ1g==", + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/info-sprinkle/-/info-sprinkle-5.0.10.tgz", + "integrity": "sha512-t9oJsRGfvgdTenR27EdwIxAExhBaHuYkFWWoYD+48RWQHh+fpVWUIGEHtehjI4/WNOI9MBRMAKrds2dkt6s6Ig==", "license": "Apache-2.0", "dependencies": { "@leafygreen-ui/emotion": "^5.1.0", - "@leafygreen-ui/icon": "^14.7.0", + "@leafygreen-ui/icon": "^14.7.1", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/tooltip": "^14.2.3" + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/tooltip": "^14.3.0" }, "peerDependencies": { "@leafygreen-ui/leafygreen-provider": "^5.0.0 || ^4.0.0 || ^3.2.0" } }, "node_modules/@leafygreen-ui/inline-definition": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/inline-definition/-/inline-definition-9.1.3.tgz", - "integrity": "sha512-X+Zde5bdZI5oyd3Lk9lRAK4qOHDyWZPtL62Mf39UBtSxwW5/6qVubohXmdVXIll54LDVyoBP43Ip2ZpVKVvsvA==", + "version": "9.1.4", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/inline-definition/-/inline-definition-9.1.4.tgz", + "integrity": "sha512-97Sv/dO/ePXPH+MGQZf0O4ccjuoxurIBgim4fKcWp/FFL98SqE6opHvYM9LDvbZfXxHokCQSW3/EXtbCRbUpGw==", "license": "Apache-2.0", "dependencies": { "@leafygreen-ui/emotion": "^5.1.0", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/tooltip": "^14.2.3" + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/tooltip": "^14.3.0" }, "peerDependencies": { "@leafygreen-ui/leafygreen-provider": "^5.0.0 || ^4.0.0 || ^3.2.0" } }, "node_modules/@leafygreen-ui/input-option": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/input-option/-/input-option-4.1.3.tgz", - "integrity": "sha512-IdSpT4c4DeQ+Jt34nPg/2t5//U8ZMdv9G2tYVvKkxqHuBpzGt//doAFwrHYJQtGtTSPYltrBOJaOvau/0JUnvA==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/input-option/-/input-option-4.1.4.tgz", + "integrity": "sha512-HQ3fnfP7tcRcQKbWsMO8b2avR9M7X6m3seHk4jw/EQmiu+P2npt7s5Yo7IDNyMSokOYsaSY6RG9ZpcIgmLlLLg==", "license": "Apache-2.0", "dependencies": { "@leafygreen-ui/a11y": "^3.0.5", @@ -7237,8 +7231,8 @@ "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", "@leafygreen-ui/polymorphic": "^3.1.0", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/typography": "^22.2.2" + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/typography": "^22.2.3" }, "peerDependencies": { "@leafygreen-ui/leafygreen-provider": "^5.0.0 || ^4.0.0 || ^3.2.0" @@ -7279,41 +7273,41 @@ } }, "node_modules/@leafygreen-ui/marketing-modal": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/marketing-modal/-/marketing-modal-6.1.0.tgz", - "integrity": "sha512-rqElAWR0ObLQ4lH+QxZu9In1mJMvmHU9MDqkRXH8nlIGYm4YTJHtf0UrkzaqOxOnrsB06l48q8uKDpc5nGb35A==", + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/marketing-modal/-/marketing-modal-8.1.6.tgz", + "integrity": "sha512-09tUiYol35+PCT0U5HFcLJ3DwDVbva604v1W2SWGMuiUri9MfYMaq4csSEzNQ+VVs9Zth36Fjc4MTjiGjGBH+g==", "license": "Apache-2.0", "dependencies": { - "@leafygreen-ui/button": "^25.0.1", - "@leafygreen-ui/emotion": "^5.0.0", - "@leafygreen-ui/lib": "^15.2.0", - "@leafygreen-ui/modal": "^19.0.1", - "@leafygreen-ui/palette": "^5.0.0", - "@leafygreen-ui/tokens": "^3.2.1", - "@leafygreen-ui/typography": "^22.1.0" + "@leafygreen-ui/button": "^25.1.3", + "@leafygreen-ui/emotion": "^5.1.0", + "@leafygreen-ui/lib": "^15.6.2", + "@leafygreen-ui/modal": "^20.3.3", + "@leafygreen-ui/palette": "^5.0.2", + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/typography": "^22.2.3" }, "peerDependencies": { - "@leafygreen-ui/leafygreen-provider": "^5.0.2" + "@leafygreen-ui/leafygreen-provider": "^5.0.0 || ^4.0.0 || ^3.2.0" } }, "node_modules/@leafygreen-ui/menu": { - "version": "33.0.1", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/menu/-/menu-33.0.1.tgz", - "integrity": "sha512-D4S8r39YHPRNJ7g9UPMYRdj0FDLSQNxBHyx9jjMRbFR8mgxeqo+fYzwQmpEXo4nTor6mO8rOOSjVBAGrDLhiqQ==", + "version": "33.1.0", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/menu/-/menu-33.1.0.tgz", + "integrity": "sha512-vY4F4PzqcL7WyHWY+sUc4WpitCjPs0e3BuNSK+yEAHCixABiAu+wyEA42MIff4+4BqrJkwRE0z/iU6kVvwU84w==", "license": "Apache-2.0", "dependencies": { "@leafygreen-ui/descendants": "^3.0.6", "@leafygreen-ui/emotion": "^5.1.0", "@leafygreen-ui/hooks": "^9.3.0", - "@leafygreen-ui/icon": "^14.7.0", - "@leafygreen-ui/icon-button": "^17.1.3", - "@leafygreen-ui/input-option": "^4.1.3", + "@leafygreen-ui/icon": "^14.7.1", + "@leafygreen-ui/icon-button": "^17.1.4", + "@leafygreen-ui/input-option": "^4.1.4", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", "@leafygreen-ui/polymorphic": "^3.1.0", "@leafygreen-ui/popover": "^14.3.1", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/typography": "^22.2.2", + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/typography": "^22.2.3", "lodash": "^4.17.21", "polished": "^4.3.1", "react-transition-group": "^4.4.5" @@ -7323,27 +7317,23 @@ } }, "node_modules/@leafygreen-ui/modal": { - "version": "18.0.1", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/modal/-/modal-18.0.1.tgz", - "integrity": "sha512-PTJ+jSf8wEgZhm2ZPSRw3QXGDAYMIGckPUGRVeRAI24lcr9ZHWEXng45zBaS5OUqoWn4LFufLpUjq5RN/H8nuw==", + "version": "20.3.3", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/modal/-/modal-20.3.3.tgz", + "integrity": "sha512-Cz1+uBIuKa9nw4zP/Y+QGSEze087wz0ohs2bYxqXK+n6LZQMNaiOtKHHeDNOJSMVPCp3DJ7Y53lG4a5OTUz8gA==", "license": "Apache-2.0", "dependencies": { - "@leafygreen-ui/emotion": "^5.0.0", - "@leafygreen-ui/hooks": "^9.0.0", - "@leafygreen-ui/icon": "^14.0.0", - "@leafygreen-ui/icon-button": "^17.0.1", - "@leafygreen-ui/lib": "^15.0.0", - "@leafygreen-ui/palette": "^5.0.0", - "@leafygreen-ui/portal": "^7.0.0", - "@leafygreen-ui/tokens": "^3.1.0", - "@lg-tools/test-harnesses": "^0.3.1", - "focus-trap": "6.9.4", - "focus-trap-react": "^9.0.2", - "polished": "^4.2.2", - "react-transition-group": "^4.4.5" + "@leafygreen-ui/emotion": "^5.1.0", + "@leafygreen-ui/hooks": "^9.3.0", + "@leafygreen-ui/icon": "^14.7.1", + "@leafygreen-ui/icon-button": "^17.1.4", + "@leafygreen-ui/lib": "^15.6.2", + "@leafygreen-ui/palette": "^5.0.2", + "@leafygreen-ui/tokens": "^4.1.0", + "@lg-tools/test-harnesses": "^0.3.4", + "polished": "^4.2.2" }, "peerDependencies": { - "@leafygreen-ui/leafygreen-provider": "^5.0.0" + "@leafygreen-ui/leafygreen-provider": "^5.0.0 || ^4.0.0 || ^3.2.0" } }, "node_modules/@leafygreen-ui/palette": { @@ -7353,18 +7343,18 @@ "license": "Apache-2.0" }, "node_modules/@leafygreen-ui/pipeline": { - "version": "8.0.8", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/pipeline/-/pipeline-8.0.8.tgz", - "integrity": "sha512-oFRNB+5AH4ASXm0Rt4N6HT395Q3i58e0KMXliI3FKNcsAjjQeydDV3YlyTPxgWqLCokVrRCfnN/jOhymQ1b9iA==", + "version": "8.0.9", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/pipeline/-/pipeline-8.0.9.tgz", + "integrity": "sha512-OMzttGdSPuPYA7tCdmUecsZpeM9Fh11htOkmtqeI++eP/Jwj+7euCDUgnMUXpiY+O41qP27ona4FvzmFkswilA==", "license": "Apache-2.0", "dependencies": { "@leafygreen-ui/emotion": "^5.1.0", "@leafygreen-ui/hooks": "^9.3.0", - "@leafygreen-ui/icon": "^14.7.0", + "@leafygreen-ui/icon": "^14.7.1", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/tooltip": "^14.2.3", + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/tooltip": "^14.3.0", "react-intersection-observer": "^8.25.1" }, "peerDependencies": { @@ -7431,17 +7421,17 @@ } }, "node_modules/@leafygreen-ui/radio-group": { - "version": "13.0.10", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/radio-group/-/radio-group-13.0.10.tgz", - "integrity": "sha512-ui59w/8B9QvR6s84WCsR8Hk2VTktQ1MlNsDDfV47K8cShA86AMo/tHTBpL0eUEkf1mefbl4n6iqLZiU4+fV5CA==", + "version": "13.0.11", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/radio-group/-/radio-group-13.0.11.tgz", + "integrity": "sha512-2FE716AspLbY5PchLwgkZs2PfIOXPdNjxrTOzAGOzkamt8oheq1n3KxDeQ5N3FFaTA4kUOVMFFKdgCRlYG+FcA==", "license": "Apache-2.0", "dependencies": { "@leafygreen-ui/emotion": "^5.1.0", "@leafygreen-ui/hooks": "^9.3.0", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/typography": "^22.2.2" + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/typography": "^22.2.3" }, "peerDependencies": { "@leafygreen-ui/leafygreen-provider": "^5.0.0 || ^4.0.0 || ^3.2.0" @@ -7468,23 +7458,23 @@ } }, "node_modules/@leafygreen-ui/search-input": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/search-input/-/search-input-6.1.1.tgz", - "integrity": "sha512-IcSHDZtG/CSSXVMXQ7Mxa+FpKbDsz7tU+Ph4LM6/2VPUhtPw0QCnXP4FtsFQJsddvoTLVieZeVfVxf4dVkNckg==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/search-input/-/search-input-6.1.2.tgz", + "integrity": "sha512-ET2rmzrN1fVFzkdVIofuxGwUZES9eTuZweMmEVd9mTrOHCvwOfecgKTBe0GQgpuycm0JolywZOO+3TmFwEedrQ==", "license": "Apache-2.0", "dependencies": { "@leafygreen-ui/a11y": "^3.0.5", "@leafygreen-ui/emotion": "^5.1.0", "@leafygreen-ui/hooks": "^9.3.0", - "@leafygreen-ui/icon": "^14.7.0", - "@leafygreen-ui/icon-button": "^17.1.3", - "@leafygreen-ui/input-option": "^4.1.3", + "@leafygreen-ui/icon": "^14.7.1", + "@leafygreen-ui/icon-button": "^17.1.4", + "@leafygreen-ui/input-option": "^4.1.4", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", "@leafygreen-ui/polymorphic": "^3.1.0", "@leafygreen-ui/popover": "^14.3.1", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/typography": "^22.2.2", + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/typography": "^22.2.3", "lodash": "^4.17.21", "polished": "^4.2.2" }, @@ -7493,19 +7483,19 @@ } }, "node_modules/@leafygreen-ui/segmented-control": { - "version": "11.0.11", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/segmented-control/-/segmented-control-11.0.11.tgz", - "integrity": "sha512-ACheq8dbVz20qwK4u+FKT35mF0WqEStILwEdfcU54dh3/JzjBmA/+/5aJ7+W25N+Lbx6Gh/aZXEMhnJjj5LHCQ==", + "version": "11.0.12", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/segmented-control/-/segmented-control-11.0.12.tgz", + "integrity": "sha512-VU2ZNhIm6WL/kv8hPoPXeVG7VX/bTlx/rzARUZ8QrLbr+6Wp4VntE22nM2XmuZ3gQLMALamBA6Mi/Dlv8CnSNg==", "license": "Apache-2.0", "dependencies": { "@leafygreen-ui/emotion": "^5.1.0", "@leafygreen-ui/hooks": "^9.3.0", - "@leafygreen-ui/icon": "^14.7.0", + "@leafygreen-ui/icon": "^14.7.1", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", "@leafygreen-ui/polymorphic": "^3.1.0", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/typography": "^22.2.2", + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/typography": "^22.2.3", "lodash": "^4.17.21", "polished": "^4.2.2" }, @@ -7514,22 +7504,22 @@ } }, "node_modules/@leafygreen-ui/select": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/select/-/select-17.0.1.tgz", - "integrity": "sha512-sfHsI9DRIqVm94/gatGu2KADaWvuWwqzX4lVd36ckICPIyzVtyiq8HMwAfcid3HeZfm0n99pTVl7+RiR8BkIXQ==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/select/-/select-17.0.2.tgz", + "integrity": "sha512-7TjzWft/jsbUdNkfZFmyeCNn+aIiDlGutiD7aWV54x5s9DsUZLvL30vN0wxd9fX+1GXFO+vDtev4So7UgkfW4g==", "license": "Apache-2.0", "dependencies": { "@leafygreen-ui/button": "^25.1.3", "@leafygreen-ui/emotion": "^5.1.0", - "@leafygreen-ui/form-field": "^4.0.7", + "@leafygreen-ui/form-field": "^4.0.8", "@leafygreen-ui/hooks": "^9.3.0", - "@leafygreen-ui/icon": "^14.7.0", - "@leafygreen-ui/input-option": "^4.1.3", + "@leafygreen-ui/icon": "^14.7.1", + "@leafygreen-ui/input-option": "^4.1.4", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", "@leafygreen-ui/popover": "^14.3.1", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/typography": "^22.2.2", + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/typography": "^22.2.3", "@lg-tools/test-harnesses": "^0.3.4", "@types/react-is": "^18.0.0", "lodash": "^4.17.21", @@ -7547,19 +7537,19 @@ "license": "MIT" }, "node_modules/@leafygreen-ui/skeleton-loader": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/skeleton-loader/-/skeleton-loader-3.0.9.tgz", - "integrity": "sha512-XcXmTclhg6vZHRpQg0b2wQLuxSFYoYXWnZjZRNq7j3qCxgCMKD+fh6RHJR/Lg8t9yuaDxnT4kN77qY0QFLQ+fQ==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/skeleton-loader/-/skeleton-loader-3.0.10.tgz", + "integrity": "sha512-QrKAr8Heap0F3xVpq448OrCUOhO7JP/4seFhcPB9arI4iQ5AlEzpJBLk6HZiH6lE7Fu+d+R1rEAtnFQ8PVH72A==", "license": "Apache-2.0", "dependencies": { "@leafygreen-ui/a11y": "^3.0.5", "@leafygreen-ui/card": "^13.2.1", "@leafygreen-ui/emotion": "^5.1.0", - "@leafygreen-ui/icon": "^14.7.0", + "@leafygreen-ui/icon": "^14.7.1", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/typography": "^22.2.2", + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/typography": "^22.2.3", "lodash": "^4.17.21" }, "peerDependencies": { @@ -7567,42 +7557,41 @@ } }, "node_modules/@leafygreen-ui/split-button": { - "version": "6.1.7", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/split-button/-/split-button-6.1.7.tgz", - "integrity": "sha512-TGpJHUKB2jcUgBp76usP339Q4e3XIjQwMjNLhSebXqNF1mov9CgtkREP6cPsmUkPO6Gj44QfM6bdwniP3abthg==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/split-button/-/split-button-6.2.0.tgz", + "integrity": "sha512-i/h83Z6nK+Eot3pnuI87qT+psz26nlGe1eHJ5BnOUDfwnxhb5yPZeV+zAmSoKOKtT8JTrHooEKxqNovsg4vJwg==", "license": "Apache-2.0", "dependencies": { "@leafygreen-ui/button": "^25.1.3", "@leafygreen-ui/emotion": "^5.1.0", "@leafygreen-ui/hooks": "^9.3.0", - "@leafygreen-ui/icon": "^14.7.0", + "@leafygreen-ui/icon": "^14.7.1", "@leafygreen-ui/lib": "^15.6.2", - "@leafygreen-ui/menu": "^33.0.1", + "@leafygreen-ui/menu": "^33.1.0", "@leafygreen-ui/palette": "^5.0.2", "@leafygreen-ui/polymorphic": "^3.1.0", - "@leafygreen-ui/popover": "^14.3.1", - "@leafygreen-ui/tokens": "^4.0.0" + "@leafygreen-ui/tokens": "^4.1.0" }, "peerDependencies": { "@leafygreen-ui/leafygreen-provider": "^5.0.0 || ^4.0.0 || ^3.2.0" } }, "node_modules/@leafygreen-ui/table": { - "version": "15.2.1", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/table/-/table-15.2.1.tgz", - "integrity": "sha512-0NRUKTV4sFSuyEzwAz8JCvKYpL43PDNVZMvVP834RMCpKqeXEfTTb8xEt5xGXPiYP0t/efXc8r/ON4AaJ6TwWQ==", + "version": "15.2.2", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/table/-/table-15.2.2.tgz", + "integrity": "sha512-KAkloT8It3L+PbZYAGvSiTtRx4zbLjiyzIHifA0y+DvYo7aoDh2x6hHf4PsD7hn/Tu3NkxQrvxC/wykAMdB39g==", "license": "Apache-2.0", "dependencies": { - "@leafygreen-ui/checkbox": "^18.1.3", + "@leafygreen-ui/checkbox": "^18.1.4", "@leafygreen-ui/emotion": "^5.1.0", "@leafygreen-ui/hooks": "^9.3.0", - "@leafygreen-ui/icon": "^14.7.0", - "@leafygreen-ui/icon-button": "^17.1.3", + "@leafygreen-ui/icon": "^14.7.1", + "@leafygreen-ui/icon-button": "^17.1.4", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", "@leafygreen-ui/polymorphic": "^3.1.0", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/typography": "^22.2.2", + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/typography": "^22.2.3", "@lg-tools/test-harnesses": "^0.3.4", "@tanstack/react-table": "^8.20.5", "@tanstack/react-virtual": "^3.10.7", @@ -7616,9 +7605,9 @@ } }, "node_modules/@leafygreen-ui/tabs": { - "version": "17.0.7", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/tabs/-/tabs-17.0.7.tgz", - "integrity": "sha512-UIqk8lk/sy4Wdyn7tEX7JusPTqYEbJHBHZeBJaRSfFGa3jEcsX8s9G4XBbZ7Blpdo+GB/6E4+Q0ycZRCVqNmkw==", + "version": "17.0.8", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/tabs/-/tabs-17.0.8.tgz", + "integrity": "sha512-US3LKkHfRBJW4LqSpYCWlQUdQx7P25fkk+YvrZlw49fTME0RXu9OnTXFk/H0/VXOOFRKnqswTv3lL0ndpytTpg==", "license": "Apache-2.0", "dependencies": { "@leafygreen-ui/a11y": "^3.0.5", @@ -7628,8 +7617,8 @@ "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", "@leafygreen-ui/polymorphic": "^3.1.0", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/typography": "^22.2.2", + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/typography": "^22.2.3", "@lg-tools/test-harnesses": "^0.3.4" }, "peerDependencies": { @@ -7637,19 +7626,19 @@ } }, "node_modules/@leafygreen-ui/text-area": { - "version": "12.1.3", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/text-area/-/text-area-12.1.3.tgz", - "integrity": "sha512-Y+0eFmqShTFqrjhNbrMUPIxT/WgulyFB96cxhhT0SIZHRqWdB8cM2rm+rHyQwiMQW9qLvopSlgXuuNwHGxlMQQ==", + "version": "12.1.4", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/text-area/-/text-area-12.1.4.tgz", + "integrity": "sha512-HkncILBoWWoCvebW8uT8hy+iD/w3eOGvUoqTyPL0zP2fUM4dKCCb2brvvHct6SvKxPDuuoG3fECb4HgyDq+stw==", "license": "Apache-2.0", "dependencies": { "@leafygreen-ui/emotion": "^5.1.0", - "@leafygreen-ui/form-field": "^4.0.7", + "@leafygreen-ui/form-field": "^4.0.8", "@leafygreen-ui/hooks": "^9.3.0", - "@leafygreen-ui/icon": "^14.7.0", + "@leafygreen-ui/icon": "^14.7.1", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/typography": "^22.2.2", + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/typography": "^22.2.3", "@lg-tools/test-harnesses": "^0.3.4" }, "peerDependencies": { @@ -7657,17 +7646,17 @@ } }, "node_modules/@leafygreen-ui/text-input": { - "version": "16.2.1", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/text-input/-/text-input-16.2.1.tgz", - "integrity": "sha512-x+UKq1k2jQmRwpux0gAH4TKk7u7iu640fVBwgJUDoLTO0foN/4gc7uHyDFeyUtxFumDaHkCdnUP3Bxl080qcCw==", + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/text-input/-/text-input-16.2.2.tgz", + "integrity": "sha512-Pt6vvfXLDUcnYyOArfMOLAn2HrBKEy4zD7QOb+tuFKkrDqdD8G3656QFpynwuwatXqs0ftbS1gEySJ2F4LV0kQ==", "license": "Apache-2.0", "dependencies": { "@leafygreen-ui/emotion": "^5.1.0", - "@leafygreen-ui/form-field": "^4.0.7", + "@leafygreen-ui/form-field": "^4.0.8", "@leafygreen-ui/hooks": "^9.3.0", "@leafygreen-ui/lib": "^15.6.2", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/typography": "^22.2.2", + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/typography": "^22.2.3", "@lg-tools/test-harnesses": "^0.3.4" }, "peerDependencies": { @@ -7675,20 +7664,20 @@ } }, "node_modules/@leafygreen-ui/toast": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/toast/-/toast-8.1.1.tgz", - "integrity": "sha512-idM7iADi/FxyyB5mMEP5xJMC36PVeuMxId+fvgB+9z80ZSvElCbuNgd2/VaIRiTpeDMFJpgcysC/HN8uTHtpUQ==", + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/toast/-/toast-8.1.2.tgz", + "integrity": "sha512-jWdYPaxxSW6dfnla1HSY0ee9hNrt4DfweWHXDtaNS53GyOewKSGDNCIDPkR+VvMLKvKP/wzdz1R7lKq2loAhrA==", "license": "Apache-2.0", "dependencies": { "@leafygreen-ui/emotion": "^5.1.0", "@leafygreen-ui/hooks": "^9.3.0", - "@leafygreen-ui/icon": "^14.7.0", - "@leafygreen-ui/icon-button": "^17.1.3", + "@leafygreen-ui/icon": "^14.7.1", + "@leafygreen-ui/icon-button": "^17.1.4", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", "@leafygreen-ui/portal": "^7.1.0", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/typography": "^22.2.2", + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/typography": "^22.2.3", "lodash": "^4.17.21", "polished": "^4.2.2", "react-transition-group": "^4.4.5" @@ -7698,17 +7687,17 @@ } }, "node_modules/@leafygreen-ui/toggle": { - "version": "12.1.3", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/toggle/-/toggle-12.1.3.tgz", - "integrity": "sha512-pKsHmvLObWt87NT53v+29xNazwubVCNQhh1lZg3uYsVf9rHB1tG6aGuLd0pzaF0rI8kPVF5nFQ4e/b8EKfopTQ==", + "version": "12.1.4", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/toggle/-/toggle-12.1.4.tgz", + "integrity": "sha512-2KuNmbNGCL+M0zFwLgDeEbG1Kczw8pE108mnozmqBMIa1xGyV1AkZta67w5v1T1l/lpTDCE7R1dzZEVZNosgqA==", "license": "Apache-2.0", "dependencies": { "@leafygreen-ui/a11y": "^3.0.5", "@leafygreen-ui/emotion": "^5.1.0", - "@leafygreen-ui/icon": "^14.7.0", + "@leafygreen-ui/icon": "^14.7.1", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", - "@leafygreen-ui/tokens": "^4.0.0", + "@leafygreen-ui/tokens": "^4.1.0", "@lg-tools/test-harnesses": "^0.3.4" }, "peerDependencies": { @@ -7716,9 +7705,9 @@ } }, "node_modules/@leafygreen-ui/tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/tokens/-/tokens-4.0.0.tgz", - "integrity": "sha512-8S3/zM+y0ht5mh6sFoTaJYhjMbmhFMvqxpeg38LkIL7rUCVsBNVEJshGx8LouUJbM8ptLCUDTB//mBI236MOog==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/tokens/-/tokens-4.1.0.tgz", + "integrity": "sha512-5GfNFP0iRT4O+CnqYHpvtCUiT3aStUa2EhrV3tkrTwffemHN10M4G5nc/DhLGLNp2aQDP1+ppAtjZI5zczDSiA==", "license": "Apache-2.0", "dependencies": { "@leafygreen-ui/emotion": "^5.1.0", @@ -7727,20 +7716,20 @@ } }, "node_modules/@leafygreen-ui/toolbar": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/toolbar/-/toolbar-1.1.3.tgz", - "integrity": "sha512-0LiLO3BwR7Rlyzupyxh0f45WZTsKhOwOPoA6VZX6m+1cGf5ICud1oDX/wbiv9mAtMEuBAzkitaLD+J0ewDY8HQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/toolbar/-/toolbar-1.2.0.tgz", + "integrity": "sha512-fP9ybklYsKf07JQDF3/njWGIe9OPL/A4rZpf40eWzRffqeybJXEUqWAWn4CL316Myb/FhuOpbWBLi8J5mWCAkQ==", "license": "Apache-2.0", "dependencies": { "@leafygreen-ui/descendants": "^3.0.6", "@leafygreen-ui/emotion": "^5.1.0", "@leafygreen-ui/hooks": "^9.3.0", - "@leafygreen-ui/icon": "^14.7.0", - "@leafygreen-ui/icon-button": "^17.1.3", + "@leafygreen-ui/icon": "^14.7.1", + "@leafygreen-ui/icon-button": "^17.1.4", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/tooltip": "^14.2.3", + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/tooltip": "^14.3.0", "@lg-tools/test-harnesses": "^0.3.4" }, "peerDependencies": { @@ -7748,19 +7737,19 @@ } }, "node_modules/@leafygreen-ui/tooltip": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/tooltip/-/tooltip-14.2.3.tgz", - "integrity": "sha512-WLY/7xUa1j17Ajflsj3ZDbzJXscjt9D46HCIEEXX9RrpF3VkLWzwPHCdoK+5dsCt1W/h1VPXqkyY2hEpy41rlQ==", + "version": "14.3.0", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/tooltip/-/tooltip-14.3.0.tgz", + "integrity": "sha512-EYtsck4ctBH8gZZd9u0tw2zHPr5ZW5VCypNKSOVzNlR5u+w6dwiVw2WRdCVxSNegPIxwhH0ms547qdF6/Cjp5A==", "license": "Apache-2.0", "dependencies": { "@leafygreen-ui/emotion": "^5.1.0", "@leafygreen-ui/hooks": "^9.3.0", - "@leafygreen-ui/icon": "^14.7.0", + "@leafygreen-ui/icon": "^14.7.1", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", "@leafygreen-ui/popover": "^14.3.1", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/typography": "^22.2.2", + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/typography": "^22.2.3", "lodash": "^4.17.21", "polished": "^4.2.2" }, @@ -7769,17 +7758,17 @@ } }, "node_modules/@leafygreen-ui/typography": { - "version": "22.2.2", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/typography/-/typography-22.2.2.tgz", - "integrity": "sha512-xpdxPvxvGVu7gGK6aem1qwKPwuX2TtT7Zc66ukrmtYtoBHDBnA3SVzbNcPxzDYwKcjbRrQnFdtW2lbfX4IS6Dg==", + "version": "22.2.3", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/typography/-/typography-22.2.3.tgz", + "integrity": "sha512-zOfPAFyUrUU0G9wPv7lFSMr4FvKi2NiulDMHhy5zea+J4gDn1yuiU0mItG6cwbWxpWSiBeF0gfsZoDuHgKppUg==", "license": "Apache-2.0", "dependencies": { "@leafygreen-ui/emotion": "^5.1.0", - "@leafygreen-ui/icon": "^14.7.0", + "@leafygreen-ui/icon": "^14.7.1", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", "@leafygreen-ui/polymorphic": "^3.1.0", - "@leafygreen-ui/tokens": "^4.0.0" + "@leafygreen-ui/tokens": "^4.1.0" }, "peerDependencies": { "@leafygreen-ui/leafygreen-provider": "^5.0.0 || ^4.0.0 || ^3.2.0" @@ -9315,71 +9304,52 @@ "@lezer/common": "^1.0.0" } }, - "node_modules/@lg-chat/avatar": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@lg-chat/avatar/-/avatar-8.0.1.tgz", - "integrity": "sha512-cGjZfBlDKs50XCAl8/H5vfAd9PYLZsQMG6s0ItJM/sTP3eTLqvVkmstbkyEnI2SoingxghI/ylPUtTOfplh0Tg==", - "deprecated": "This package is deprecated. Instead, use @leafygreen-ui/avatar", + "node_modules/@lg-chat/chat-window": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@lg-chat/chat-window/-/chat-window-6.0.0.tgz", + "integrity": "sha512-5kZOCRO0HhdZ2u3O8kIbBKYOw2P1VBQGnZnkFdgx2nSuRwComT/+KjUzsAttGxm6eUoJEX0Y4Mu7cvu+BITCkg==", "license": "Apache-2.0", "dependencies": { - "@leafygreen-ui/avatar": "^3.1.4", "@leafygreen-ui/emotion": "^5.1.0", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", - "@leafygreen-ui/tokens": "^4.0.0" - }, - "peerDependencies": { - "@leafygreen-ui/leafygreen-provider": ">=3.2.0", - "@lg-chat/leafygreen-chat-provider": "^5.1.0" - } - }, - "node_modules/@lg-chat/chat-window": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@lg-chat/chat-window/-/chat-window-4.1.6.tgz", - "integrity": "sha512-6hXu/22fVDQzPTRD0r3DFhNDxnQ9uJdLPI0c29rCjh+JtHptOHFOEange0+J/H1iYcgzop8Fe4K7nzP2I6c5Nw==", - "license": "Apache-2.0", - "dependencies": { - "@leafygreen-ui/emotion": "^5.0.3", - "@leafygreen-ui/lib": "^15.6.1", - "@leafygreen-ui/palette": "^5.0.2", - "@leafygreen-ui/tokens": "^3.2.4", - "@lg-chat/title-bar": "^4.0.8", + "@leafygreen-ui/tokens": "^4.0.0", + "@lg-chat/title-bar": "^5.0.0", "react-keyed-flatten-children": "^2.2.1" }, "peerDependencies": { - "@leafygreen-ui/leafygreen-provider": "^5.0.4", - "@lg-chat/leafygreen-chat-provider": "^5.0.2" + "@leafygreen-ui/leafygreen-provider": "^5.0.0 || ^4.0.0 || ^3.2.0", + "@lg-chat/leafygreen-chat-provider": "^6.0.0" } }, "node_modules/@lg-chat/input-bar": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/@lg-chat/input-bar/-/input-bar-10.1.0.tgz", - "integrity": "sha512-mkQwyR7JG5vElockcgQDILOQjN1/Rka0EBbXJp9JobCOPSSLSO5NQg/hdvnf4QS1bUKE6hGbGWQUlCdG91Xscw==", + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@lg-chat/input-bar/-/input-bar-12.1.0.tgz", + "integrity": "sha512-B6IvFe6mafd6TXoq1bCfZssp6b2yx/JOlClF8ygGYhX1oMl8zb25JaR8H84ldhQ9b1Y4PiK8hmtQKH1VP+nl/w==", "license": "Apache-2.0", "dependencies": { - "@leafygreen-ui/avatar": "^3.1.2", - "@leafygreen-ui/badge": "^10.1.3", - "@leafygreen-ui/banner": "^10.1.1", - "@leafygreen-ui/button": "^25.0.4", - "@leafygreen-ui/emotion": "^5.0.3", - "@leafygreen-ui/hooks": "^9.1.4", - "@leafygreen-ui/icon": "^14.5.1", - "@leafygreen-ui/icon-button": "^17.0.6", - "@leafygreen-ui/input-option": "^4.0.5", - "@leafygreen-ui/lib": "^15.5.0", + "@leafygreen-ui/avatar": "^3.1.6", + "@leafygreen-ui/banner": "^10.2.4", + "@leafygreen-ui/button": "^25.1.3", + "@leafygreen-ui/emotion": "^5.1.0", + "@leafygreen-ui/hooks": "^9.3.0", + "@leafygreen-ui/icon": "^14.7.1", + "@leafygreen-ui/icon-button": "^17.1.4", + "@leafygreen-ui/input-option": "^4.1.4", + "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", "@leafygreen-ui/polymorphic": "^3.1.0", - "@leafygreen-ui/popover": "^14.0.6", - "@leafygreen-ui/search-input": "^6.0.6", - "@leafygreen-ui/tokens": "^3.2.4", - "@leafygreen-ui/typography": "^22.1.3", + "@leafygreen-ui/popover": "^14.3.1", + "@leafygreen-ui/search-input": "^6.1.2", + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/typography": "^22.2.3", "lodash": "^4.17.21", "react-keyed-flatten-children": "^1.3.0", - "react-textarea-autosize": "^8.3.2" + "react-textarea-autosize": "^8.5.9" }, "peerDependencies": { - "@leafygreen-ui/leafygreen-provider": "^5.0.4", - "@lg-chat/leafygreen-chat-provider": "^5.0.2" + "@leafygreen-ui/leafygreen-provider": "^5.0.0 || ^4.0.0 || ^3.2.0", + "@lg-chat/leafygreen-chat-provider": "^6.0.0" } }, "node_modules/@lg-chat/input-bar/node_modules/react-is": { @@ -9401,101 +9371,98 @@ } }, "node_modules/@lg-chat/leafygreen-chat-provider": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@lg-chat/leafygreen-chat-provider/-/leafygreen-chat-provider-5.1.0.tgz", - "integrity": "sha512-L0fGWaRBcR4a9x3cbsKAZrO166I235zYHlrWT1SWhDAnrnvT5SAp5qfnJ4/iiod4YTKsRavagxOu9IxJfst5bQ==", - "license": "Apache-2.0", - "dependencies": { - "use-resize-observer": "^9.1.0" - } + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@lg-chat/leafygreen-chat-provider/-/leafygreen-chat-provider-6.0.0.tgz", + "integrity": "sha512-zhvqAPpHX0VVOvrsVKs7H37ImIEOGuTLarULXEW4dwglKGqhbagmdN2UEje++wDAD/JqnAYEaQYzrPFH2EIgWQ==", + "license": "Apache-2.0" }, "node_modules/@lg-chat/lg-markdown": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@lg-chat/lg-markdown/-/lg-markdown-4.2.2.tgz", - "integrity": "sha512-WUib0r6Xq1L/25+kAWyExrWIFJVrSMJRkpQ/f1DF5dmLyUsmP8fp3Cve+KAZMQEjF9UEoDOizBKpdEWoAO32NQ==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@lg-chat/lg-markdown/-/lg-markdown-5.0.2.tgz", + "integrity": "sha512-gjjFb+6GvuUKNFbZqUpNqRAz2oEjNSGgscBPzPsGQ2HoKBlbz04LSIOj2ZKV+4auqJ2GAs2/nbSkeJAW9MzhVQ==", "license": "Apache-2.0", "dependencies": { - "@leafygreen-ui/code": "^20.2.1", + "@leafygreen-ui/code": "^20.2.5", "@leafygreen-ui/emotion": "^5.1.0", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/typography": "^22.2.0", + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/typography": "^22.2.3", "react-markdown": "^8.0.7" }, "peerDependencies": { - "@leafygreen-ui/leafygreen-provider": ">=3.2.0" + "@leafygreen-ui/leafygreen-provider": "^5.0.0 || ^4.0.0 || ^3.2.0" } }, "node_modules/@lg-chat/message": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/@lg-chat/message/-/message-8.2.1.tgz", - "integrity": "sha512-bdRYy0UC/OR5+glUA/Bg8gYky2pi+9XhjokvBSRiWPftpLZh4NZEujL6Kd9+uBp2zkCxiLwW2f9K+nwtO9gB3A==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/@lg-chat/message/-/message-10.1.1.tgz", + "integrity": "sha512-TM1Iydq9FHrbGyDpCUyNEpZizeaqgSgHe/YYH3RlDIW7Q7egyJvWzCCIYkXp5abkmqa/3ll+Ho/SW9Ktz5sSdQ==", "license": "Apache-2.0", "dependencies": { - "@leafygreen-ui/avatar": "^3.1.2", - "@leafygreen-ui/badge": "^10.2.0", - "@leafygreen-ui/banner": "^10.1.1", - "@leafygreen-ui/emotion": "^5.0.3", - "@leafygreen-ui/hooks": "^9.2.0", - "@leafygreen-ui/icon": "^14.6.0", - "@leafygreen-ui/icon-button": "^17.1.0", - "@leafygreen-ui/lib": "^15.6.1", + "@leafygreen-ui/avatar": "^3.1.6", + "@leafygreen-ui/badge": "^10.2.3", + "@leafygreen-ui/banner": "^10.2.4", + "@leafygreen-ui/emotion": "^5.1.0", + "@leafygreen-ui/hooks": "^9.3.0", + "@leafygreen-ui/icon": "^14.7.1", + "@leafygreen-ui/icon-button": "^17.1.4", + "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", "@leafygreen-ui/polymorphic": "^3.1.0", - "@leafygreen-ui/tokens": "^3.2.4", - "@leafygreen-ui/typography": "^22.1.3", - "@lg-chat/lg-markdown": "^4.2.0", - "@lg-chat/message-feedback": "^7.0.3", - "@lg-chat/message-rating": "^5.0.3", - "@lg-chat/rich-links": "^4.0.1" + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/tooltip": "^14.3.0", + "@leafygreen-ui/typography": "^22.2.3", + "@lg-chat/lg-markdown": "^5.0.2", + "@lg-chat/message-feedback": "^9.0.1", + "@lg-chat/message-rating": "^7.1.0", + "@lg-chat/rich-links": "^4.0.6" }, "peerDependencies": { - "@leafygreen-ui/leafygreen-provider": "^5.0.4", - "@lg-chat/leafygreen-chat-provider": "^5.0.2" + "@leafygreen-ui/leafygreen-provider": "^5.0.0 || ^4.0.0 || ^3.2.0", + "@lg-chat/leafygreen-chat-provider": "^6.0.0" } }, "node_modules/@lg-chat/message-feedback": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@lg-chat/message-feedback/-/message-feedback-7.1.0.tgz", - "integrity": "sha512-MataQS9poiMWZjKdxnFR50h+SznxKCTQJTzAwkc93SEQMiXnvYDaiphPdb63M4EAc9feioMivt9IEoksVeckGQ==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@lg-chat/message-feedback/-/message-feedback-9.0.1.tgz", + "integrity": "sha512-pt/rBKB13IaHNPFnzGomFmYvt0LO5LIZESh5uPZKN6+g71N4ImODMouzrVOQB3IWjDbBspgkiQkxKDU3DUslZA==", "license": "Apache-2.0", "dependencies": { - "@leafygreen-ui/button": "^25.1.0", - "@leafygreen-ui/emotion": "^5.0.3", - "@leafygreen-ui/hooks": "^9.2.1", - "@leafygreen-ui/icon": "^14.6.0", - "@leafygreen-ui/icon-button": "^17.1.0", + "@leafygreen-ui/button": "^25.1.3", + "@leafygreen-ui/emotion": "^5.1.0", + "@leafygreen-ui/hooks": "^9.3.0", + "@leafygreen-ui/icon": "^14.7.1", + "@leafygreen-ui/icon-button": "^17.1.4", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", - "@leafygreen-ui/popover": "^14.1.0", - "@leafygreen-ui/text-area": "^12.1.0", - "@leafygreen-ui/tokens": "^3.2.4", - "@leafygreen-ui/typography": "^22.1.3" + "@leafygreen-ui/text-area": "^12.1.4", + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/typography": "^22.2.3" }, "peerDependencies": { - "@leafygreen-ui/leafygreen-provider": "^5.0.4", - "@lg-chat/leafygreen-chat-provider": "^5.0.2" + "@leafygreen-ui/leafygreen-provider": "^5.0.0 || ^4.0.0 || ^3.2.0", + "@lg-chat/leafygreen-chat-provider": "^6.0.0" } }, "node_modules/@lg-chat/message-rating": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@lg-chat/message-rating/-/message-rating-5.0.3.tgz", - "integrity": "sha512-ZcFYmtFIaYUAVw6+yzc0Vlfwl5Dgdct0mtaDsxcSGyDONSMsFZIBSmtbSObliwkzzGepvtAEdx5Kfs3+u8jgxg==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@lg-chat/message-rating/-/message-rating-7.1.0.tgz", + "integrity": "sha512-lE3pbsb6Z03WwY9KNHj2eQ34fKyetIJld83yd9M9OpbElwYWP71cOlEQTcxq4WLzKMWXr7PuE0PuvEfT3tcI5g==", "license": "Apache-2.0", "dependencies": { - "@leafygreen-ui/emotion": "^5.0.3", - "@leafygreen-ui/hooks": "^9.1.4", - "@leafygreen-ui/icon": "^14.5.1", - "@leafygreen-ui/icon-button": "^17.0.6", - "@leafygreen-ui/lib": "^15.4.0", + "@leafygreen-ui/emotion": "^5.1.0", + "@leafygreen-ui/hooks": "^9.3.0", + "@leafygreen-ui/icon": "^14.7.1", + "@leafygreen-ui/icon-button": "^17.1.4", + "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", - "@leafygreen-ui/tokens": "^3.2.4", - "@leafygreen-ui/typography": "^22.1.3" + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/tooltip": "^14.3.0" }, "peerDependencies": { - "@leafygreen-ui/leafygreen-provider": "^5.0.4", - "@lg-chat/leafygreen-chat-provider": "^5.0.2" + "@leafygreen-ui/leafygreen-provider": "^5.0.0 || ^4.0.0 || ^3.2.0", + "@lg-chat/leafygreen-chat-provider": "^6.0.0" } }, "node_modules/@lg-chat/rich-links": { @@ -9518,23 +9485,20 @@ } }, "node_modules/@lg-chat/title-bar": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@lg-chat/title-bar/-/title-bar-4.2.0.tgz", - "integrity": "sha512-kNdTqPRe+bd5cL96b1PrySmbXF+1Bd2WBJndPrJ9hBdOD6itJmKfMLV8W6sbMhixaN2Q01jMQDPd37CMMGuUAA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@lg-chat/title-bar/-/title-bar-5.0.1.tgz", + "integrity": "sha512-KYhjll2YmjHKe+Rg5a+MUFqhRND9gVUmF6wV008kiRsbKbMy8JkS5sdCU1yHUs2ucIh9cv03FmBdLZytR0t4Sg==", "license": "Apache-2.0", "dependencies": { - "@leafygreen-ui/badge": "^10.2.2", + "@leafygreen-ui/badge": "^10.2.3", "@leafygreen-ui/emotion": "^5.1.0", - "@leafygreen-ui/icon": "^14.7.0", - "@leafygreen-ui/icon-button": "^17.1.2", "@leafygreen-ui/lib": "^15.6.2", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/typography": "^22.2.0", - "@lg-chat/avatar": "^8.0.1" + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/typography": "^22.2.3" }, "peerDependencies": { - "@leafygreen-ui/leafygreen-provider": "^3.2.0 || workspace:^4.0.0 || workspace:^5.0.0", - "@lg-chat/leafygreen-chat-provider": "^5.1.0" + "@leafygreen-ui/leafygreen-provider": "^5.0.0 || ^4.0.0 || ^3.2.0", + "@lg-chat/leafygreen-chat-provider": "^6.0.0" } }, "node_modules/@lg-tools/test-harnesses": { @@ -10092,9 +10056,9 @@ } }, "node_modules/@mongodb-js/diagramming": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@mongodb-js/diagramming/-/diagramming-2.2.1.tgz", - "integrity": "sha512-xUaQSyMnyNeXILT+tPl0JoC+hlh38cYltYuL6uniyg36g20cPuCXZ9geQp0sbVt5/p1BtfgdqsKMfox+oaOlIQ==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@mongodb-js/diagramming/-/diagramming-2.2.2.tgz", + "integrity": "sha512-GCI+L9TBC7sbuEeJaazhdz1ELcvPRi6cjuOf9Lhx/9FhyV+7IpIGCQbm4V7OflBrqBTfZD4XrwzlkuZ55hRLaA==", "license": "MIT", "dependencies": { "@emotion/react": "^11.14.0", @@ -10103,6 +10067,7 @@ "@leafygreen-ui/inline-definition": "^9.0.5", "@leafygreen-ui/leafygreen-provider": "^5.0.2", "@leafygreen-ui/palette": "^5.0.0", + "@leafygreen-ui/select": "^16.2.0", "@leafygreen-ui/tokens": "^3.2.1", "@leafygreen-ui/tooltip": "^14.2.1", "@leafygreen-ui/typography": "^22.1.0", @@ -45364,19 +45329,6 @@ } } }, - "node_modules/use-resize-observer": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/use-resize-observer/-/use-resize-observer-9.1.0.tgz", - "integrity": "sha512-R25VqO9Wb3asSD4eqtcxk8sJalvIOYBqS8MNZlpDSQ4l4xMQxC/J7Id9HoTqPq8FwULIn0PVW+OAqF2dyYbjow==", - "license": "MIT", - "dependencies": { - "@juggle/resize-observer": "^3.3.1" - }, - "peerDependencies": { - "react": "16.8.0 - 18", - "react-dom": "16.8.0 - 18" - } - }, "node_modules/use-sync-external-store": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz", @@ -48236,7 +48188,7 @@ "@leafygreen-ui/chip": "^4.0.9", "@leafygreen-ui/code": "^20.2.3", "@leafygreen-ui/combobox": "^12.2.1", - "@leafygreen-ui/confirmation-modal": "^8.0.0", + "@leafygreen-ui/confirmation-modal": "^10.2.1", "@leafygreen-ui/copyable": "^12.0.1", "@leafygreen-ui/drawer": "^5.1.3", "@leafygreen-ui/emotion": "^5.1.0", @@ -48248,9 +48200,9 @@ "@leafygreen-ui/input-option": "^4.1.3", "@leafygreen-ui/leafygreen-provider": "^5.0.4", "@leafygreen-ui/logo": "^11.1.0", - "@leafygreen-ui/marketing-modal": "^6.0.0", + "@leafygreen-ui/marketing-modal": "^8.1.4", "@leafygreen-ui/menu": "^33.0.1", - "@leafygreen-ui/modal": "^18.0.0", + "@leafygreen-ui/modal": "^20.3.1", "@leafygreen-ui/palette": "^5.0.2", "@leafygreen-ui/pipeline": "^8.0.8", "@leafygreen-ui/polymorphic": "^3.1.0", @@ -48260,7 +48212,7 @@ "@leafygreen-ui/radio-group": "^13.0.10", "@leafygreen-ui/search-input": "^6.1.1", "@leafygreen-ui/segmented-control": "^11.0.11", - "@leafygreen-ui/select": "^17.0.1", + "@leafygreen-ui/select": "^17.0.2", "@leafygreen-ui/skeleton-loader": "^3.0.9", "@leafygreen-ui/split-button": "^6.1.7", "@leafygreen-ui/table": "^15.2.1", @@ -48272,12 +48224,12 @@ "@leafygreen-ui/tokens": "^4.0.0", "@leafygreen-ui/tooltip": "^14.2.3", "@leafygreen-ui/typography": "^22.2.2", - "@lg-chat/chat-window": "^4.1.5", - "@lg-chat/input-bar": "^10.1.0", - "@lg-chat/leafygreen-chat-provider": "^5.0.2", - "@lg-chat/message": "^8.2.0", + "@lg-chat/chat-window": "^6.0.0", + "@lg-chat/input-bar": "^12.1.0", + "@lg-chat/leafygreen-chat-provider": "^6.0.0", + "@lg-chat/message": "^10.1.1", "@mongodb-js/compass-context-menu": "^0.3.1", - "@mongodb-js/diagramming": "^2.2.1", + "@mongodb-js/diagramming": "^2.2.2", "@react-aria/interactions": "^3.9.1", "@react-aria/utils": "^3.13.1", "@react-aria/visually-hidden": "^3.3.1", @@ -58285,9 +58237,9 @@ }, "dependencies": { "tabbable": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", - "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.3.0.tgz", + "integrity": "sha512-EIHvdY5bPLuWForiR/AN2Bxngzpuwn1is4asboytXtpTgsArc+WmSJKVLlhdh71u7jFcryDqB2A8lQvj78MkyQ==" } } }, @@ -58593,11 +58545,6 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "@juggle/resize-observer": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.4.0.tgz", - "integrity": "sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==" - }, "@kwsites/file-exists": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", @@ -58624,16 +58571,16 @@ } }, "@leafygreen-ui/avatar": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/avatar/-/avatar-3.1.5.tgz", - "integrity": "sha512-msQ7z5/Igr7mE2n8amopsv+gc7XLoC5KrgmU7xy0RZcgtaL18ORP0nULAK9hNs3v+LCXe2324WcRqfSU2OLQlA==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/avatar/-/avatar-3.1.6.tgz", + "integrity": "sha512-OOvVraABcH060IzVwd5zHyHTzoYmYiBhQipb148KG9EDoHaxf9HL1OtMciNrh0eKCZafmCYXxF9g7MCJTgHyvw==", "requires": { "@leafygreen-ui/emotion": "^5.1.0", - "@leafygreen-ui/icon": "^14.7.0", + "@leafygreen-ui/icon": "^14.7.1", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/logo": "^11.1.0", "@leafygreen-ui/palette": "^5.0.2", - "@leafygreen-ui/tokens": "^4.0.0", + "@leafygreen-ui/tokens": "^4.1.0", "lodash": "^4.17.21" } }, @@ -58649,17 +58596,17 @@ } }, "@leafygreen-ui/banner": { - "version": "10.2.3", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/banner/-/banner-10.2.3.tgz", - "integrity": "sha512-yzyP5oAJ9DCZlNJythfReFBLN8s9Khz9KCBDpRCmtNI6gJXGMNURF+kZM6VbT+XNe7wPN4mjkj6fGZ6grPL2rA==", + "version": "10.2.4", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/banner/-/banner-10.2.4.tgz", + "integrity": "sha512-GFH+LYnu67vOik2ulSLt6UpWaPeTmIDp3cPyc74UgTgg0MGLbFGS1maY+LSmL/nsumM3zCWF2RPQ7rkMM+n0CA==", "requires": { "@leafygreen-ui/emotion": "^5.1.0", - "@leafygreen-ui/icon": "^14.7.0", - "@leafygreen-ui/icon-button": "^17.1.3", + "@leafygreen-ui/icon": "^14.7.1", + "@leafygreen-ui/icon-button": "^17.1.4", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/typography": "^22.2.2" + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/typography": "^22.2.3" } }, "@leafygreen-ui/button": { @@ -58690,52 +58637,52 @@ } }, "@leafygreen-ui/checkbox": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/checkbox/-/checkbox-18.1.3.tgz", - "integrity": "sha512-DwrJSVEo3J/rdWUpBcvHSaSVbyIb1Quvdu8Ok5Lmy6vT/ARfM1aM2KzheDQ25E2ArY7c/lsBf0T0qmIvYu2J3w==", + "version": "18.1.4", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/checkbox/-/checkbox-18.1.4.tgz", + "integrity": "sha512-aWVkalPdUUuUCt0iUaDg+z1ktusu18PfUbcR5zoLpQyIymeZK9mhsM/LdKAkQKt7mT2ExLeFzMzuSenRLVG8jg==", "requires": { "@leafygreen-ui/a11y": "^3.0.5", "@leafygreen-ui/emotion": "^5.1.0", "@leafygreen-ui/hooks": "^9.3.0", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/typography": "^22.2.2", + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/typography": "^22.2.3", "@lg-tools/test-harnesses": "^0.3.4", "react-transition-group": "^4.4.5" } }, "@leafygreen-ui/chip": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/chip/-/chip-4.0.9.tgz", - "integrity": "sha512-TDk63YkB1WVfb4yDMOC0qq4OVkI4EVqOnQ/kIFna7MGy0W74829M5qqPg4Emzb8E0ayhfoCzyqonPdobdUvkmQ==", + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/chip/-/chip-4.0.10.tgz", + "integrity": "sha512-+zJxpwo9hVxryJEmiayjKm8W20+MOF61ngh3eOzebaK8JWPVut0TL+vcNh1Ja4mvhdIn3RtLAAmhZKx/nGfvSg==", "requires": { "@leafygreen-ui/emotion": "^5.1.0", - "@leafygreen-ui/icon": "^14.7.0", - "@leafygreen-ui/inline-definition": "^9.1.3", + "@leafygreen-ui/icon": "^14.7.1", + "@leafygreen-ui/inline-definition": "^9.1.4", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", - "@leafygreen-ui/tokens": "^4.0.0" + "@leafygreen-ui/tokens": "^4.1.0" } }, "@leafygreen-ui/code": { - "version": "20.2.3", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/code/-/code-20.2.3.tgz", - "integrity": "sha512-fcsrNdh9WSh5q+bJyq38eFsKok/tn6EXNWKP+emxLPz0mmxyRSHq1b0olQzFUVm75SIR1KOBVgdbFesdozoAaw==", + "version": "20.2.5", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/code/-/code-20.2.5.tgz", + "integrity": "sha512-/gX0OKgO1HKIkIwsiXIlmxio5pVltTuz/LDmedNnNd5ZLJO2ZAsfK2JKHis4pxwfZHhtE+Ootq3jvMygbXbOwg==", "requires": { "@leafygreen-ui/a11y": "^3.0.5", "@leafygreen-ui/button": "^25.1.3", "@leafygreen-ui/emotion": "^5.1.0", "@leafygreen-ui/hooks": "^9.3.0", - "@leafygreen-ui/icon": "^14.7.0", - "@leafygreen-ui/icon-button": "^17.1.3", + "@leafygreen-ui/icon": "^14.7.1", + "@leafygreen-ui/icon-button": "^17.1.4", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", - "@leafygreen-ui/select": "^17.0.1", - "@leafygreen-ui/skeleton-loader": "^3.0.9", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/tooltip": "^14.2.3", - "@leafygreen-ui/typography": "^22.2.2", + "@leafygreen-ui/select": "^17.0.2", + "@leafygreen-ui/skeleton-loader": "^3.0.10", + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/tooltip": "^14.3.0", + "@leafygreen-ui/typography": "^22.2.3", "@lg-tools/test-harnesses": "^0.3.4", "@types/facepaint": "^1.2.1", "@types/highlight.js": "^10.1.0", @@ -58748,58 +58695,58 @@ } }, "@leafygreen-ui/combobox": { - "version": "12.2.1", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/combobox/-/combobox-12.2.1.tgz", - "integrity": "sha512-nppvD3nWO3KmAlMQBVDlgRlll1bATnbcpoXo/gEws3bf2Jn8Yq54ywf783bSX1HkZysSCsjpVLxgIGhbcX7nwA==", + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/combobox/-/combobox-12.3.0.tgz", + "integrity": "sha512-NjRydZxbp7Ah4bzUNSHDU4glmvMxhtQBv8C0Zagg9EWoqq+q1YIbhC4yQT2k3LhatdYMXTZq8fSC9liVe+QI7Q==", "requires": { - "@leafygreen-ui/checkbox": "^18.1.3", - "@leafygreen-ui/chip": "^4.0.9", + "@leafygreen-ui/checkbox": "^18.1.4", + "@leafygreen-ui/chip": "^4.0.10", "@leafygreen-ui/emotion": "^5.1.0", - "@leafygreen-ui/form-field": "^4.0.7", + "@leafygreen-ui/form-field": "^4.0.8", "@leafygreen-ui/hooks": "^9.3.0", - "@leafygreen-ui/icon": "^14.7.0", - "@leafygreen-ui/icon-button": "^17.1.3", - "@leafygreen-ui/input-option": "^4.1.3", + "@leafygreen-ui/icon": "^14.7.1", + "@leafygreen-ui/icon-button": "^17.1.4", + "@leafygreen-ui/input-option": "^4.1.4", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", "@leafygreen-ui/popover": "^14.3.1", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/typography": "^22.2.2", + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/typography": "^22.2.3", "chalk": "^4.1.2", "lodash": "^4.17.21", "polished": "^4.2.2" } }, "@leafygreen-ui/confirmation-modal": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/confirmation-modal/-/confirmation-modal-8.0.1.tgz", - "integrity": "sha512-tZGavYwuBQ0EiL8LPJivM/qo1JQn/frBKj2/g1/9Ul+1vwr3EX2krtnWUV+66T4xSkLCZID3JtDftdohlc7Kkg==", + "version": "10.2.3", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/confirmation-modal/-/confirmation-modal-10.2.3.tgz", + "integrity": "sha512-c6vniV0UPZB69E16rEGDFfGoBRURj+k74OA/0la3vFR0IUh8q7vlIPXT1RZE7PJZNv4M+BxHe86vkJ42vDU8Lg==", "requires": { "@leafygreen-ui/button": "^25.1.3", - "@leafygreen-ui/emotion": "^5.0.0", - "@leafygreen-ui/icon": "^14.0.0", - "@leafygreen-ui/lib": "^15.0.0", - "@leafygreen-ui/modal": "^18.0.0", - "@leafygreen-ui/palette": "^5.0.0", - "@leafygreen-ui/text-input": "^16.2.1", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/typography": "^22.2.2" + "@leafygreen-ui/emotion": "^5.1.0", + "@leafygreen-ui/icon": "^14.7.1", + "@leafygreen-ui/lib": "^15.6.2", + "@leafygreen-ui/modal": "^20.3.3", + "@leafygreen-ui/palette": "^5.0.2", + "@leafygreen-ui/text-input": "^16.2.2", + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/typography": "^22.2.3" } }, "@leafygreen-ui/copyable": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/copyable/-/copyable-12.0.1.tgz", - "integrity": "sha512-tf6mjjHQu/ZtuHSu88Vv71ZB+wVE4QT+ahRbPC61CSPY34EjHdKXic4/k/DF5Pl40DTB2vQZbU/T4aqVAaZgYQ==", + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/copyable/-/copyable-12.0.2.tgz", + "integrity": "sha512-tE23eBGVPn7u16gdFAt9182lrqMOf2y8DOZi/vHp9L2JtI4+0bwFxFVkJqjn+Y10UtD3Fe8/NY2yJ11kpMTlhA==", "requires": { "@leafygreen-ui/button": "^25.1.3", "@leafygreen-ui/emotion": "^5.1.0", "@leafygreen-ui/hooks": "^9.3.0", - "@leafygreen-ui/icon": "^14.7.0", + "@leafygreen-ui/icon": "^14.7.1", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/tooltip": "^14.2.3", - "@leafygreen-ui/typography": "^22.2.2", + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/tooltip": "^14.3.0", + "@leafygreen-ui/typography": "^22.2.3", "clipboard": "^2.0.6", "polished": "^4.2.2" } @@ -58815,23 +58762,23 @@ } }, "@leafygreen-ui/drawer": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/drawer/-/drawer-5.1.3.tgz", - "integrity": "sha512-mKZhcAcdmvTt2SAiVsp5aoRm7xZXxalKvV5dpbWOh4p0YfDZJ3AtXhdLouTUe6u/90x4JWTcb3R3K2FdDwsNAw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/drawer/-/drawer-5.2.0.tgz", + "integrity": "sha512-6HK481NmDWddRdSKK61A2vWLazqF5BxnONnNtjn+kBjlOndKaVCguEhrMqMSIPL6y2BstBhpcq5EYK8x5PjDdQ==", "requires": { "@leafygreen-ui/button": "^25.1.3", "@leafygreen-ui/emotion": "^5.1.0", "@leafygreen-ui/hooks": "^9.3.0", - "@leafygreen-ui/icon": "^14.7.0", - "@leafygreen-ui/icon-button": "^17.1.3", + "@leafygreen-ui/icon": "^14.7.1", + "@leafygreen-ui/icon-button": "^17.1.4", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", "@leafygreen-ui/polymorphic": "^3.1.0", "@leafygreen-ui/resizable": "^0.1.3", - "@leafygreen-ui/tabs": "^17.0.7", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/toolbar": "^1.1.3", - "@leafygreen-ui/typography": "^22.2.2", + "@leafygreen-ui/tabs": "^17.0.8", + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/toolbar": "^1.2.0", + "@leafygreen-ui/typography": "^22.2.3", "@lg-tools/test-harnesses": "^0.3.4", "polished": "^4.2.2", "react-intersection-observer": "^8.25.1" @@ -58847,35 +58794,35 @@ } }, "@leafygreen-ui/form-field": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/form-field/-/form-field-4.0.7.tgz", - "integrity": "sha512-yCTCdPnHJbrmzV4HyZrXebzDacL0ElfCz6o4MWZlwRazQFGQnB6L3Ewf3fFUo53w6oO4o10iygCpXeuvrUaj7A==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/form-field/-/form-field-4.0.8.tgz", + "integrity": "sha512-rkdC0aXUEx8O/Y7ktFAFpqzNo3TcAYi7LyxrCy6RxnKSfqMheRl4cvb4XYrU5s84/BzKtBCPSmUav0kxN8PWDg==", "requires": { "@leafygreen-ui/emotion": "^5.1.0", "@leafygreen-ui/hooks": "^9.3.0", - "@leafygreen-ui/icon": "^14.7.0", + "@leafygreen-ui/icon": "^14.7.1", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/typography": "^22.2.2" + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/typography": "^22.2.3" } }, "@leafygreen-ui/guide-cue": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/guide-cue/-/guide-cue-8.1.1.tgz", - "integrity": "sha512-daef5lBRwCCmjoqh1EGv/00kJdlWx2Gw78fxYeJcaRSQ/D3Q97xZldul7UKNl8w/PVmBDMonnXUjrcNSPbHiww==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/guide-cue/-/guide-cue-8.2.0.tgz", + "integrity": "sha512-YDNcu+DA4aOE9QxI/TujT/v7h0YXz07rQpBcrew+7dIhDp3NcuNLN39SYegz5Gi6br+rhEQh8n7dowBHhVM6iw==", "requires": { "@leafygreen-ui/a11y": "^3.0.5", "@leafygreen-ui/button": "^25.1.3", "@leafygreen-ui/emotion": "^5.1.0", "@leafygreen-ui/hooks": "^9.3.0", - "@leafygreen-ui/icon": "^14.7.0", - "@leafygreen-ui/icon-button": "^17.1.3", + "@leafygreen-ui/icon": "^14.7.1", + "@leafygreen-ui/icon-button": "^17.1.4", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", "@leafygreen-ui/popover": "^14.3.1", - "@leafygreen-ui/tooltip": "^14.2.3", - "@leafygreen-ui/typography": "^22.2.2", + "@leafygreen-ui/tooltip": "^14.3.0", + "@leafygreen-ui/typography": "^22.2.3", "focus-trap": "6.9.4", "focus-trap-react": "9.0.2", "polished": "^4.2.2" @@ -58902,57 +58849,57 @@ } }, "@leafygreen-ui/icon-button": { - "version": "17.1.3", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/icon-button/-/icon-button-17.1.3.tgz", - "integrity": "sha512-NQVIS31OYRcXQ3tiQcmhIWu9RVMzL8bM4xr+lg+gxVQFx3l2fdlcodtk2DqRbMvxckGGwGAofOKhWqeJbK8vEQ==", + "version": "17.1.4", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/icon-button/-/icon-button-17.1.4.tgz", + "integrity": "sha512-n7EQ72FXs5fR4aN1y88NG4JIXTSOiWqGnfV4qB0FxNzkB4bpIhZoDPA+InokVV/xYDGuDmV2ngTRExoeJSMTuw==", "requires": { "@leafygreen-ui/a11y": "^3.0.5", "@leafygreen-ui/emotion": "^5.1.0", - "@leafygreen-ui/icon": "^14.7.0", + "@leafygreen-ui/icon": "^14.7.1", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", "@leafygreen-ui/polymorphic": "^3.1.0", - "@leafygreen-ui/tokens": "^4.0.0", + "@leafygreen-ui/tokens": "^4.1.0", "polished": "^4.2.2" } }, "@leafygreen-ui/info-sprinkle": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/info-sprinkle/-/info-sprinkle-5.0.9.tgz", - "integrity": "sha512-gkluPoZj5j5kbkwDVhaaVBAzgyEtonTJ/Vo4neFp8i1ngcxqF3iYF0biLq2BWK1wRnO7qT0P5/pUBX1VjczJ1g==", + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/info-sprinkle/-/info-sprinkle-5.0.10.tgz", + "integrity": "sha512-t9oJsRGfvgdTenR27EdwIxAExhBaHuYkFWWoYD+48RWQHh+fpVWUIGEHtehjI4/WNOI9MBRMAKrds2dkt6s6Ig==", "requires": { "@leafygreen-ui/emotion": "^5.1.0", - "@leafygreen-ui/icon": "^14.7.0", + "@leafygreen-ui/icon": "^14.7.1", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/tooltip": "^14.2.3" + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/tooltip": "^14.3.0" } }, "@leafygreen-ui/inline-definition": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/inline-definition/-/inline-definition-9.1.3.tgz", - "integrity": "sha512-X+Zde5bdZI5oyd3Lk9lRAK4qOHDyWZPtL62Mf39UBtSxwW5/6qVubohXmdVXIll54LDVyoBP43Ip2ZpVKVvsvA==", + "version": "9.1.4", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/inline-definition/-/inline-definition-9.1.4.tgz", + "integrity": "sha512-97Sv/dO/ePXPH+MGQZf0O4ccjuoxurIBgim4fKcWp/FFL98SqE6opHvYM9LDvbZfXxHokCQSW3/EXtbCRbUpGw==", "requires": { "@leafygreen-ui/emotion": "^5.1.0", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/tooltip": "^14.2.3" + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/tooltip": "^14.3.0" } }, "@leafygreen-ui/input-option": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/input-option/-/input-option-4.1.3.tgz", - "integrity": "sha512-IdSpT4c4DeQ+Jt34nPg/2t5//U8ZMdv9G2tYVvKkxqHuBpzGt//doAFwrHYJQtGtTSPYltrBOJaOvau/0JUnvA==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/input-option/-/input-option-4.1.4.tgz", + "integrity": "sha512-HQ3fnfP7tcRcQKbWsMO8b2avR9M7X6m3seHk4jw/EQmiu+P2npt7s5Yo7IDNyMSokOYsaSY6RG9ZpcIgmLlLLg==", "requires": { "@leafygreen-ui/a11y": "^3.0.5", "@leafygreen-ui/emotion": "^5.1.0", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", "@leafygreen-ui/polymorphic": "^3.1.0", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/typography": "^22.2.2" + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/typography": "^22.2.3" } }, "@leafygreen-ui/leafygreen-provider": { @@ -58984,59 +58931,55 @@ } }, "@leafygreen-ui/marketing-modal": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/marketing-modal/-/marketing-modal-6.1.0.tgz", - "integrity": "sha512-rqElAWR0ObLQ4lH+QxZu9In1mJMvmHU9MDqkRXH8nlIGYm4YTJHtf0UrkzaqOxOnrsB06l48q8uKDpc5nGb35A==", + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/marketing-modal/-/marketing-modal-8.1.6.tgz", + "integrity": "sha512-09tUiYol35+PCT0U5HFcLJ3DwDVbva604v1W2SWGMuiUri9MfYMaq4csSEzNQ+VVs9Zth36Fjc4MTjiGjGBH+g==", "requires": { "@leafygreen-ui/button": "^25.1.3", - "@leafygreen-ui/emotion": "^5.0.0", - "@leafygreen-ui/lib": "^15.2.0", - "@leafygreen-ui/modal": "^18.0.0", - "@leafygreen-ui/palette": "^5.0.0", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/typography": "^22.2.2" + "@leafygreen-ui/emotion": "^5.1.0", + "@leafygreen-ui/lib": "^15.6.2", + "@leafygreen-ui/modal": "^20.3.3", + "@leafygreen-ui/palette": "^5.0.2", + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/typography": "^22.2.3" } }, "@leafygreen-ui/menu": { - "version": "33.0.1", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/menu/-/menu-33.0.1.tgz", - "integrity": "sha512-D4S8r39YHPRNJ7g9UPMYRdj0FDLSQNxBHyx9jjMRbFR8mgxeqo+fYzwQmpEXo4nTor6mO8rOOSjVBAGrDLhiqQ==", + "version": "33.1.0", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/menu/-/menu-33.1.0.tgz", + "integrity": "sha512-vY4F4PzqcL7WyHWY+sUc4WpitCjPs0e3BuNSK+yEAHCixABiAu+wyEA42MIff4+4BqrJkwRE0z/iU6kVvwU84w==", "requires": { "@leafygreen-ui/descendants": "^3.0.6", "@leafygreen-ui/emotion": "^5.1.0", "@leafygreen-ui/hooks": "^9.3.0", - "@leafygreen-ui/icon": "^14.7.0", - "@leafygreen-ui/icon-button": "^17.1.3", - "@leafygreen-ui/input-option": "^4.1.3", + "@leafygreen-ui/icon": "^14.7.1", + "@leafygreen-ui/icon-button": "^17.1.4", + "@leafygreen-ui/input-option": "^4.1.4", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", "@leafygreen-ui/polymorphic": "^3.1.0", "@leafygreen-ui/popover": "^14.3.1", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/typography": "^22.2.2", + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/typography": "^22.2.3", "lodash": "^4.17.21", "polished": "^4.3.1", "react-transition-group": "^4.4.5" } }, "@leafygreen-ui/modal": { - "version": "18.0.1", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/modal/-/modal-18.0.1.tgz", - "integrity": "sha512-PTJ+jSf8wEgZhm2ZPSRw3QXGDAYMIGckPUGRVeRAI24lcr9ZHWEXng45zBaS5OUqoWn4LFufLpUjq5RN/H8nuw==", - "requires": { - "@leafygreen-ui/emotion": "^5.0.0", - "@leafygreen-ui/hooks": "^9.0.0", - "@leafygreen-ui/icon": "^14.0.0", - "@leafygreen-ui/icon-button": "^17.0.1", - "@leafygreen-ui/lib": "^15.0.0", - "@leafygreen-ui/palette": "^5.0.0", - "@leafygreen-ui/portal": "^7.0.0", - "@leafygreen-ui/tokens": "^4.0.0", - "@lg-tools/test-harnesses": "^0.3.1", - "focus-trap": "6.9.4", - "focus-trap-react": "^9.0.2", - "polished": "^4.2.2", - "react-transition-group": "^4.4.5" + "version": "20.3.3", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/modal/-/modal-20.3.3.tgz", + "integrity": "sha512-Cz1+uBIuKa9nw4zP/Y+QGSEze087wz0ohs2bYxqXK+n6LZQMNaiOtKHHeDNOJSMVPCp3DJ7Y53lG4a5OTUz8gA==", + "requires": { + "@leafygreen-ui/emotion": "^5.1.0", + "@leafygreen-ui/hooks": "^9.3.0", + "@leafygreen-ui/icon": "^14.7.1", + "@leafygreen-ui/icon-button": "^17.1.4", + "@leafygreen-ui/lib": "^15.6.2", + "@leafygreen-ui/palette": "^5.0.2", + "@leafygreen-ui/tokens": "^4.1.0", + "@lg-tools/test-harnesses": "^0.3.4", + "polished": "^4.2.2" } }, "@leafygreen-ui/palette": { @@ -59045,17 +58988,17 @@ "integrity": "sha512-+PrfGeJSv4goxm/vKpfJJDOP7t/uElj+14K8jiIyu3qR3TcFRIZ5h1VMvICTUgqvRc8W+xIZYQwsLa2XCu2lvw==" }, "@leafygreen-ui/pipeline": { - "version": "8.0.8", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/pipeline/-/pipeline-8.0.8.tgz", - "integrity": "sha512-oFRNB+5AH4ASXm0Rt4N6HT395Q3i58e0KMXliI3FKNcsAjjQeydDV3YlyTPxgWqLCokVrRCfnN/jOhymQ1b9iA==", + "version": "8.0.9", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/pipeline/-/pipeline-8.0.9.tgz", + "integrity": "sha512-OMzttGdSPuPYA7tCdmUecsZpeM9Fh11htOkmtqeI++eP/Jwj+7euCDUgnMUXpiY+O41qP27ona4FvzmFkswilA==", "requires": { "@leafygreen-ui/emotion": "^5.1.0", "@leafygreen-ui/hooks": "^9.3.0", - "@leafygreen-ui/icon": "^14.7.0", + "@leafygreen-ui/icon": "^14.7.1", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/tooltip": "^14.2.3", + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/tooltip": "^14.3.0", "react-intersection-observer": "^8.25.1" } }, @@ -59106,16 +59049,16 @@ } }, "@leafygreen-ui/radio-group": { - "version": "13.0.10", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/radio-group/-/radio-group-13.0.10.tgz", - "integrity": "sha512-ui59w/8B9QvR6s84WCsR8Hk2VTktQ1MlNsDDfV47K8cShA86AMo/tHTBpL0eUEkf1mefbl4n6iqLZiU4+fV5CA==", + "version": "13.0.11", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/radio-group/-/radio-group-13.0.11.tgz", + "integrity": "sha512-2FE716AspLbY5PchLwgkZs2PfIOXPdNjxrTOzAGOzkamt8oheq1n3KxDeQ5N3FFaTA4kUOVMFFKdgCRlYG+FcA==", "requires": { "@leafygreen-ui/emotion": "^5.1.0", "@leafygreen-ui/hooks": "^9.3.0", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/typography": "^22.2.2" + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/typography": "^22.2.3" } }, "@leafygreen-ui/resizable": { @@ -59137,59 +59080,59 @@ } }, "@leafygreen-ui/search-input": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/search-input/-/search-input-6.1.1.tgz", - "integrity": "sha512-IcSHDZtG/CSSXVMXQ7Mxa+FpKbDsz7tU+Ph4LM6/2VPUhtPw0QCnXP4FtsFQJsddvoTLVieZeVfVxf4dVkNckg==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/search-input/-/search-input-6.1.2.tgz", + "integrity": "sha512-ET2rmzrN1fVFzkdVIofuxGwUZES9eTuZweMmEVd9mTrOHCvwOfecgKTBe0GQgpuycm0JolywZOO+3TmFwEedrQ==", "requires": { "@leafygreen-ui/a11y": "^3.0.5", "@leafygreen-ui/emotion": "^5.1.0", "@leafygreen-ui/hooks": "^9.3.0", - "@leafygreen-ui/icon": "^14.7.0", - "@leafygreen-ui/icon-button": "^17.1.3", - "@leafygreen-ui/input-option": "^4.1.3", + "@leafygreen-ui/icon": "^14.7.1", + "@leafygreen-ui/icon-button": "^17.1.4", + "@leafygreen-ui/input-option": "^4.1.4", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", "@leafygreen-ui/polymorphic": "^3.1.0", "@leafygreen-ui/popover": "^14.3.1", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/typography": "^22.2.2", + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/typography": "^22.2.3", "lodash": "^4.17.21", "polished": "^4.2.2" } }, "@leafygreen-ui/segmented-control": { - "version": "11.0.11", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/segmented-control/-/segmented-control-11.0.11.tgz", - "integrity": "sha512-ACheq8dbVz20qwK4u+FKT35mF0WqEStILwEdfcU54dh3/JzjBmA/+/5aJ7+W25N+Lbx6Gh/aZXEMhnJjj5LHCQ==", + "version": "11.0.12", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/segmented-control/-/segmented-control-11.0.12.tgz", + "integrity": "sha512-VU2ZNhIm6WL/kv8hPoPXeVG7VX/bTlx/rzARUZ8QrLbr+6Wp4VntE22nM2XmuZ3gQLMALamBA6Mi/Dlv8CnSNg==", "requires": { "@leafygreen-ui/emotion": "^5.1.0", "@leafygreen-ui/hooks": "^9.3.0", - "@leafygreen-ui/icon": "^14.7.0", + "@leafygreen-ui/icon": "^14.7.1", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", "@leafygreen-ui/polymorphic": "^3.1.0", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/typography": "^22.2.2", + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/typography": "^22.2.3", "lodash": "^4.17.21", "polished": "^4.2.2" } }, "@leafygreen-ui/select": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/select/-/select-17.0.1.tgz", - "integrity": "sha512-sfHsI9DRIqVm94/gatGu2KADaWvuWwqzX4lVd36ckICPIyzVtyiq8HMwAfcid3HeZfm0n99pTVl7+RiR8BkIXQ==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/select/-/select-17.0.2.tgz", + "integrity": "sha512-7TjzWft/jsbUdNkfZFmyeCNn+aIiDlGutiD7aWV54x5s9DsUZLvL30vN0wxd9fX+1GXFO+vDtev4So7UgkfW4g==", "requires": { "@leafygreen-ui/button": "^25.1.3", "@leafygreen-ui/emotion": "^5.1.0", - "@leafygreen-ui/form-field": "^4.0.7", + "@leafygreen-ui/form-field": "^4.0.8", "@leafygreen-ui/hooks": "^9.3.0", - "@leafygreen-ui/icon": "^14.7.0", - "@leafygreen-ui/input-option": "^4.1.3", + "@leafygreen-ui/icon": "^14.7.1", + "@leafygreen-ui/input-option": "^4.1.4", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", "@leafygreen-ui/popover": "^14.3.1", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/typography": "^22.2.2", + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/typography": "^22.2.3", "@lg-tools/test-harnesses": "^0.3.4", "@types/react-is": "^18.0.0", "lodash": "^4.17.21", @@ -59205,53 +59148,52 @@ } }, "@leafygreen-ui/skeleton-loader": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/skeleton-loader/-/skeleton-loader-3.0.9.tgz", - "integrity": "sha512-XcXmTclhg6vZHRpQg0b2wQLuxSFYoYXWnZjZRNq7j3qCxgCMKD+fh6RHJR/Lg8t9yuaDxnT4kN77qY0QFLQ+fQ==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/skeleton-loader/-/skeleton-loader-3.0.10.tgz", + "integrity": "sha512-QrKAr8Heap0F3xVpq448OrCUOhO7JP/4seFhcPB9arI4iQ5AlEzpJBLk6HZiH6lE7Fu+d+R1rEAtnFQ8PVH72A==", "requires": { "@leafygreen-ui/a11y": "^3.0.5", "@leafygreen-ui/card": "^13.2.1", "@leafygreen-ui/emotion": "^5.1.0", - "@leafygreen-ui/icon": "^14.7.0", + "@leafygreen-ui/icon": "^14.7.1", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/typography": "^22.2.2", + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/typography": "^22.2.3", "lodash": "^4.17.21" } }, "@leafygreen-ui/split-button": { - "version": "6.1.7", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/split-button/-/split-button-6.1.7.tgz", - "integrity": "sha512-TGpJHUKB2jcUgBp76usP339Q4e3XIjQwMjNLhSebXqNF1mov9CgtkREP6cPsmUkPO6Gj44QfM6bdwniP3abthg==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/split-button/-/split-button-6.2.0.tgz", + "integrity": "sha512-i/h83Z6nK+Eot3pnuI87qT+psz26nlGe1eHJ5BnOUDfwnxhb5yPZeV+zAmSoKOKtT8JTrHooEKxqNovsg4vJwg==", "requires": { "@leafygreen-ui/button": "^25.1.3", "@leafygreen-ui/emotion": "^5.1.0", "@leafygreen-ui/hooks": "^9.3.0", - "@leafygreen-ui/icon": "^14.7.0", + "@leafygreen-ui/icon": "^14.7.1", "@leafygreen-ui/lib": "^15.6.2", - "@leafygreen-ui/menu": "^33.0.1", + "@leafygreen-ui/menu": "^33.1.0", "@leafygreen-ui/palette": "^5.0.2", "@leafygreen-ui/polymorphic": "^3.1.0", - "@leafygreen-ui/popover": "^14.3.1", - "@leafygreen-ui/tokens": "^4.0.0" + "@leafygreen-ui/tokens": "^4.1.0" } }, "@leafygreen-ui/table": { - "version": "15.2.1", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/table/-/table-15.2.1.tgz", - "integrity": "sha512-0NRUKTV4sFSuyEzwAz8JCvKYpL43PDNVZMvVP834RMCpKqeXEfTTb8xEt5xGXPiYP0t/efXc8r/ON4AaJ6TwWQ==", + "version": "15.2.2", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/table/-/table-15.2.2.tgz", + "integrity": "sha512-KAkloT8It3L+PbZYAGvSiTtRx4zbLjiyzIHifA0y+DvYo7aoDh2x6hHf4PsD7hn/Tu3NkxQrvxC/wykAMdB39g==", "requires": { - "@leafygreen-ui/checkbox": "^18.1.3", + "@leafygreen-ui/checkbox": "^18.1.4", "@leafygreen-ui/emotion": "^5.1.0", "@leafygreen-ui/hooks": "^9.3.0", - "@leafygreen-ui/icon": "^14.7.0", - "@leafygreen-ui/icon-button": "^17.1.3", + "@leafygreen-ui/icon": "^14.7.1", + "@leafygreen-ui/icon-button": "^17.1.4", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", "@leafygreen-ui/polymorphic": "^3.1.0", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/typography": "^22.2.2", + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/typography": "^22.2.3", "@lg-tools/test-harnesses": "^0.3.4", "@tanstack/react-table": "^8.20.5", "@tanstack/react-virtual": "^3.10.7", @@ -59262,9 +59204,9 @@ } }, "@leafygreen-ui/tabs": { - "version": "17.0.7", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/tabs/-/tabs-17.0.7.tgz", - "integrity": "sha512-UIqk8lk/sy4Wdyn7tEX7JusPTqYEbJHBHZeBJaRSfFGa3jEcsX8s9G4XBbZ7Blpdo+GB/6E4+Q0ycZRCVqNmkw==", + "version": "17.0.8", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/tabs/-/tabs-17.0.8.tgz", + "integrity": "sha512-US3LKkHfRBJW4LqSpYCWlQUdQx7P25fkk+YvrZlw49fTME0RXu9OnTXFk/H0/VXOOFRKnqswTv3lL0ndpytTpg==", "requires": { "@leafygreen-ui/a11y": "^3.0.5", "@leafygreen-ui/descendants": "^3.0.6", @@ -59273,78 +59215,78 @@ "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", "@leafygreen-ui/polymorphic": "^3.1.0", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/typography": "^22.2.2", + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/typography": "^22.2.3", "@lg-tools/test-harnesses": "^0.3.4" } }, "@leafygreen-ui/text-area": { - "version": "12.1.3", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/text-area/-/text-area-12.1.3.tgz", - "integrity": "sha512-Y+0eFmqShTFqrjhNbrMUPIxT/WgulyFB96cxhhT0SIZHRqWdB8cM2rm+rHyQwiMQW9qLvopSlgXuuNwHGxlMQQ==", + "version": "12.1.4", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/text-area/-/text-area-12.1.4.tgz", + "integrity": "sha512-HkncILBoWWoCvebW8uT8hy+iD/w3eOGvUoqTyPL0zP2fUM4dKCCb2brvvHct6SvKxPDuuoG3fECb4HgyDq+stw==", "requires": { "@leafygreen-ui/emotion": "^5.1.0", - "@leafygreen-ui/form-field": "^4.0.7", + "@leafygreen-ui/form-field": "^4.0.8", "@leafygreen-ui/hooks": "^9.3.0", - "@leafygreen-ui/icon": "^14.7.0", + "@leafygreen-ui/icon": "^14.7.1", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/typography": "^22.2.2", + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/typography": "^22.2.3", "@lg-tools/test-harnesses": "^0.3.4" } }, "@leafygreen-ui/text-input": { - "version": "16.2.1", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/text-input/-/text-input-16.2.1.tgz", - "integrity": "sha512-x+UKq1k2jQmRwpux0gAH4TKk7u7iu640fVBwgJUDoLTO0foN/4gc7uHyDFeyUtxFumDaHkCdnUP3Bxl080qcCw==", + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/text-input/-/text-input-16.2.2.tgz", + "integrity": "sha512-Pt6vvfXLDUcnYyOArfMOLAn2HrBKEy4zD7QOb+tuFKkrDqdD8G3656QFpynwuwatXqs0ftbS1gEySJ2F4LV0kQ==", "requires": { "@leafygreen-ui/emotion": "^5.1.0", - "@leafygreen-ui/form-field": "^4.0.7", + "@leafygreen-ui/form-field": "^4.0.8", "@leafygreen-ui/hooks": "^9.3.0", "@leafygreen-ui/lib": "^15.6.2", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/typography": "^22.2.2", + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/typography": "^22.2.3", "@lg-tools/test-harnesses": "^0.3.4" } }, "@leafygreen-ui/toast": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/toast/-/toast-8.1.1.tgz", - "integrity": "sha512-idM7iADi/FxyyB5mMEP5xJMC36PVeuMxId+fvgB+9z80ZSvElCbuNgd2/VaIRiTpeDMFJpgcysC/HN8uTHtpUQ==", + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/toast/-/toast-8.1.2.tgz", + "integrity": "sha512-jWdYPaxxSW6dfnla1HSY0ee9hNrt4DfweWHXDtaNS53GyOewKSGDNCIDPkR+VvMLKvKP/wzdz1R7lKq2loAhrA==", "requires": { "@leafygreen-ui/emotion": "^5.1.0", "@leafygreen-ui/hooks": "^9.3.0", - "@leafygreen-ui/icon": "^14.7.0", - "@leafygreen-ui/icon-button": "^17.1.3", + "@leafygreen-ui/icon": "^14.7.1", + "@leafygreen-ui/icon-button": "^17.1.4", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", "@leafygreen-ui/portal": "^7.1.0", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/typography": "^22.2.2", + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/typography": "^22.2.3", "lodash": "^4.17.21", "polished": "^4.2.2", "react-transition-group": "^4.4.5" } }, "@leafygreen-ui/toggle": { - "version": "12.1.3", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/toggle/-/toggle-12.1.3.tgz", - "integrity": "sha512-pKsHmvLObWt87NT53v+29xNazwubVCNQhh1lZg3uYsVf9rHB1tG6aGuLd0pzaF0rI8kPVF5nFQ4e/b8EKfopTQ==", + "version": "12.1.4", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/toggle/-/toggle-12.1.4.tgz", + "integrity": "sha512-2KuNmbNGCL+M0zFwLgDeEbG1Kczw8pE108mnozmqBMIa1xGyV1AkZta67w5v1T1l/lpTDCE7R1dzZEVZNosgqA==", "requires": { "@leafygreen-ui/a11y": "^3.0.5", "@leafygreen-ui/emotion": "^5.1.0", - "@leafygreen-ui/icon": "^14.7.0", + "@leafygreen-ui/icon": "^14.7.1", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", - "@leafygreen-ui/tokens": "^4.0.0", + "@leafygreen-ui/tokens": "^4.1.0", "@lg-tools/test-harnesses": "^0.3.4" } }, "@leafygreen-ui/tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/tokens/-/tokens-4.0.0.tgz", - "integrity": "sha512-8S3/zM+y0ht5mh6sFoTaJYhjMbmhFMvqxpeg38LkIL7rUCVsBNVEJshGx8LouUJbM8ptLCUDTB//mBI236MOog==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/tokens/-/tokens-4.1.0.tgz", + "integrity": "sha512-5GfNFP0iRT4O+CnqYHpvtCUiT3aStUa2EhrV3tkrTwffemHN10M4G5nc/DhLGLNp2aQDP1+ppAtjZI5zczDSiA==", "requires": { "@leafygreen-ui/emotion": "^5.1.0", "@leafygreen-ui/lib": "^15.6.2", @@ -59352,50 +59294,50 @@ } }, "@leafygreen-ui/toolbar": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/toolbar/-/toolbar-1.1.3.tgz", - "integrity": "sha512-0LiLO3BwR7Rlyzupyxh0f45WZTsKhOwOPoA6VZX6m+1cGf5ICud1oDX/wbiv9mAtMEuBAzkitaLD+J0ewDY8HQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/toolbar/-/toolbar-1.2.0.tgz", + "integrity": "sha512-fP9ybklYsKf07JQDF3/njWGIe9OPL/A4rZpf40eWzRffqeybJXEUqWAWn4CL316Myb/FhuOpbWBLi8J5mWCAkQ==", "requires": { "@leafygreen-ui/descendants": "^3.0.6", "@leafygreen-ui/emotion": "^5.1.0", "@leafygreen-ui/hooks": "^9.3.0", - "@leafygreen-ui/icon": "^14.7.0", - "@leafygreen-ui/icon-button": "^17.1.3", + "@leafygreen-ui/icon": "^14.7.1", + "@leafygreen-ui/icon-button": "^17.1.4", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/tooltip": "^14.2.3", + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/tooltip": "^14.3.0", "@lg-tools/test-harnesses": "^0.3.4" } }, "@leafygreen-ui/tooltip": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/tooltip/-/tooltip-14.2.3.tgz", - "integrity": "sha512-WLY/7xUa1j17Ajflsj3ZDbzJXscjt9D46HCIEEXX9RrpF3VkLWzwPHCdoK+5dsCt1W/h1VPXqkyY2hEpy41rlQ==", + "version": "14.3.0", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/tooltip/-/tooltip-14.3.0.tgz", + "integrity": "sha512-EYtsck4ctBH8gZZd9u0tw2zHPr5ZW5VCypNKSOVzNlR5u+w6dwiVw2WRdCVxSNegPIxwhH0ms547qdF6/Cjp5A==", "requires": { "@leafygreen-ui/emotion": "^5.1.0", "@leafygreen-ui/hooks": "^9.3.0", - "@leafygreen-ui/icon": "^14.7.0", + "@leafygreen-ui/icon": "^14.7.1", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", "@leafygreen-ui/popover": "^14.3.1", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/typography": "^22.2.2", + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/typography": "^22.2.3", "lodash": "^4.17.21", "polished": "^4.2.2" } }, "@leafygreen-ui/typography": { - "version": "22.2.2", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/typography/-/typography-22.2.2.tgz", - "integrity": "sha512-xpdxPvxvGVu7gGK6aem1qwKPwuX2TtT7Zc66ukrmtYtoBHDBnA3SVzbNcPxzDYwKcjbRrQnFdtW2lbfX4IS6Dg==", + "version": "22.2.3", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/typography/-/typography-22.2.3.tgz", + "integrity": "sha512-zOfPAFyUrUU0G9wPv7lFSMr4FvKi2NiulDMHhy5zea+J4gDn1yuiU0mItG6cwbWxpWSiBeF0gfsZoDuHgKppUg==", "requires": { "@leafygreen-ui/emotion": "^5.1.0", - "@leafygreen-ui/icon": "^14.7.0", + "@leafygreen-ui/icon": "^14.7.1", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", "@leafygreen-ui/polymorphic": "^3.1.0", - "@leafygreen-ui/tokens": "^4.0.0" + "@leafygreen-ui/tokens": "^4.1.0" } }, "@leichtgewicht/base64-codec": { @@ -60605,55 +60547,42 @@ "@lezer/common": "^1.0.0" } }, - "@lg-chat/avatar": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@lg-chat/avatar/-/avatar-8.0.1.tgz", - "integrity": "sha512-cGjZfBlDKs50XCAl8/H5vfAd9PYLZsQMG6s0ItJM/sTP3eTLqvVkmstbkyEnI2SoingxghI/ylPUtTOfplh0Tg==", + "@lg-chat/chat-window": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@lg-chat/chat-window/-/chat-window-6.0.0.tgz", + "integrity": "sha512-5kZOCRO0HhdZ2u3O8kIbBKYOw2P1VBQGnZnkFdgx2nSuRwComT/+KjUzsAttGxm6eUoJEX0Y4Mu7cvu+BITCkg==", "requires": { - "@leafygreen-ui/avatar": "^3.1.4", "@leafygreen-ui/emotion": "^5.1.0", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", - "@leafygreen-ui/tokens": "^4.0.0" - } - }, - "@lg-chat/chat-window": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@lg-chat/chat-window/-/chat-window-4.1.6.tgz", - "integrity": "sha512-6hXu/22fVDQzPTRD0r3DFhNDxnQ9uJdLPI0c29rCjh+JtHptOHFOEange0+J/H1iYcgzop8Fe4K7nzP2I6c5Nw==", - "requires": { - "@leafygreen-ui/emotion": "^5.0.3", - "@leafygreen-ui/lib": "^15.6.1", - "@leafygreen-ui/palette": "^5.0.2", "@leafygreen-ui/tokens": "^4.0.0", - "@lg-chat/title-bar": "^4.0.8", + "@lg-chat/title-bar": "^5.0.0", "react-keyed-flatten-children": "^2.2.1" } }, "@lg-chat/input-bar": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/@lg-chat/input-bar/-/input-bar-10.1.0.tgz", - "integrity": "sha512-mkQwyR7JG5vElockcgQDILOQjN1/Rka0EBbXJp9JobCOPSSLSO5NQg/hdvnf4QS1bUKE6hGbGWQUlCdG91Xscw==", + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@lg-chat/input-bar/-/input-bar-12.1.0.tgz", + "integrity": "sha512-B6IvFe6mafd6TXoq1bCfZssp6b2yx/JOlClF8ygGYhX1oMl8zb25JaR8H84ldhQ9b1Y4PiK8hmtQKH1VP+nl/w==", "requires": { - "@leafygreen-ui/avatar": "^3.1.2", - "@leafygreen-ui/badge": "^10.1.3", - "@leafygreen-ui/banner": "^10.1.1", + "@leafygreen-ui/avatar": "^3.1.6", + "@leafygreen-ui/banner": "^10.2.4", "@leafygreen-ui/button": "^25.1.3", - "@leafygreen-ui/emotion": "^5.0.3", - "@leafygreen-ui/hooks": "^9.1.4", - "@leafygreen-ui/icon": "^14.5.1", - "@leafygreen-ui/icon-button": "^17.0.6", - "@leafygreen-ui/input-option": "^4.0.5", - "@leafygreen-ui/lib": "^15.5.0", + "@leafygreen-ui/emotion": "^5.1.0", + "@leafygreen-ui/hooks": "^9.3.0", + "@leafygreen-ui/icon": "^14.7.1", + "@leafygreen-ui/icon-button": "^17.1.4", + "@leafygreen-ui/input-option": "^4.1.4", + "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", "@leafygreen-ui/polymorphic": "^3.1.0", - "@leafygreen-ui/popover": "^14.0.6", - "@leafygreen-ui/search-input": "^6.0.6", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/typography": "^22.2.2", + "@leafygreen-ui/popover": "^14.3.1", + "@leafygreen-ui/search-input": "^6.1.2", + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/typography": "^22.2.3", "lodash": "^4.17.21", "react-keyed-flatten-children": "^1.3.0", - "react-textarea-autosize": "^8.3.2" + "react-textarea-autosize": "^8.5.9" }, "dependencies": { "react-is": { @@ -60672,81 +60601,78 @@ } }, "@lg-chat/leafygreen-chat-provider": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@lg-chat/leafygreen-chat-provider/-/leafygreen-chat-provider-5.1.0.tgz", - "integrity": "sha512-L0fGWaRBcR4a9x3cbsKAZrO166I235zYHlrWT1SWhDAnrnvT5SAp5qfnJ4/iiod4YTKsRavagxOu9IxJfst5bQ==", - "requires": { - "use-resize-observer": "^9.1.0" - } + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@lg-chat/leafygreen-chat-provider/-/leafygreen-chat-provider-6.0.0.tgz", + "integrity": "sha512-zhvqAPpHX0VVOvrsVKs7H37ImIEOGuTLarULXEW4dwglKGqhbagmdN2UEje++wDAD/JqnAYEaQYzrPFH2EIgWQ==" }, "@lg-chat/lg-markdown": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@lg-chat/lg-markdown/-/lg-markdown-4.2.2.tgz", - "integrity": "sha512-WUib0r6Xq1L/25+kAWyExrWIFJVrSMJRkpQ/f1DF5dmLyUsmP8fp3Cve+KAZMQEjF9UEoDOizBKpdEWoAO32NQ==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@lg-chat/lg-markdown/-/lg-markdown-5.0.2.tgz", + "integrity": "sha512-gjjFb+6GvuUKNFbZqUpNqRAz2oEjNSGgscBPzPsGQ2HoKBlbz04LSIOj2ZKV+4auqJ2GAs2/nbSkeJAW9MzhVQ==", "requires": { - "@leafygreen-ui/code": "^20.2.1", + "@leafygreen-ui/code": "^20.2.5", "@leafygreen-ui/emotion": "^5.1.0", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/typography": "^22.2.2", + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/typography": "^22.2.3", "react-markdown": "^8.0.7" } }, "@lg-chat/message": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/@lg-chat/message/-/message-8.2.1.tgz", - "integrity": "sha512-bdRYy0UC/OR5+glUA/Bg8gYky2pi+9XhjokvBSRiWPftpLZh4NZEujL6Kd9+uBp2zkCxiLwW2f9K+nwtO9gB3A==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/@lg-chat/message/-/message-10.1.1.tgz", + "integrity": "sha512-TM1Iydq9FHrbGyDpCUyNEpZizeaqgSgHe/YYH3RlDIW7Q7egyJvWzCCIYkXp5abkmqa/3ll+Ho/SW9Ktz5sSdQ==", "requires": { - "@leafygreen-ui/avatar": "^3.1.2", - "@leafygreen-ui/badge": "^10.2.0", - "@leafygreen-ui/banner": "^10.1.1", - "@leafygreen-ui/emotion": "^5.0.3", - "@leafygreen-ui/hooks": "^9.2.0", - "@leafygreen-ui/icon": "^14.6.0", - "@leafygreen-ui/icon-button": "^17.1.0", - "@leafygreen-ui/lib": "^15.6.1", + "@leafygreen-ui/avatar": "^3.1.6", + "@leafygreen-ui/badge": "^10.2.3", + "@leafygreen-ui/banner": "^10.2.4", + "@leafygreen-ui/emotion": "^5.1.0", + "@leafygreen-ui/hooks": "^9.3.0", + "@leafygreen-ui/icon": "^14.7.1", + "@leafygreen-ui/icon-button": "^17.1.4", + "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", "@leafygreen-ui/polymorphic": "^3.1.0", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/typography": "^22.2.2", - "@lg-chat/lg-markdown": "^4.2.0", - "@lg-chat/message-feedback": "^7.0.3", - "@lg-chat/message-rating": "^5.0.3", - "@lg-chat/rich-links": "^4.0.1" + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/tooltip": "^14.3.0", + "@leafygreen-ui/typography": "^22.2.3", + "@lg-chat/lg-markdown": "^5.0.2", + "@lg-chat/message-feedback": "^9.0.1", + "@lg-chat/message-rating": "^7.1.0", + "@lg-chat/rich-links": "^4.0.6" } }, "@lg-chat/message-feedback": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@lg-chat/message-feedback/-/message-feedback-7.1.0.tgz", - "integrity": "sha512-MataQS9poiMWZjKdxnFR50h+SznxKCTQJTzAwkc93SEQMiXnvYDaiphPdb63M4EAc9feioMivt9IEoksVeckGQ==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@lg-chat/message-feedback/-/message-feedback-9.0.1.tgz", + "integrity": "sha512-pt/rBKB13IaHNPFnzGomFmYvt0LO5LIZESh5uPZKN6+g71N4ImODMouzrVOQB3IWjDbBspgkiQkxKDU3DUslZA==", "requires": { "@leafygreen-ui/button": "^25.1.3", - "@leafygreen-ui/emotion": "^5.0.3", - "@leafygreen-ui/hooks": "^9.2.1", - "@leafygreen-ui/icon": "^14.6.0", - "@leafygreen-ui/icon-button": "^17.1.0", + "@leafygreen-ui/emotion": "^5.1.0", + "@leafygreen-ui/hooks": "^9.3.0", + "@leafygreen-ui/icon": "^14.7.1", + "@leafygreen-ui/icon-button": "^17.1.4", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", - "@leafygreen-ui/popover": "^14.1.0", - "@leafygreen-ui/text-area": "^12.1.0", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/typography": "^22.2.2" + "@leafygreen-ui/text-area": "^12.1.4", + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/typography": "^22.2.3" } }, "@lg-chat/message-rating": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@lg-chat/message-rating/-/message-rating-5.0.3.tgz", - "integrity": "sha512-ZcFYmtFIaYUAVw6+yzc0Vlfwl5Dgdct0mtaDsxcSGyDONSMsFZIBSmtbSObliwkzzGepvtAEdx5Kfs3+u8jgxg==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@lg-chat/message-rating/-/message-rating-7.1.0.tgz", + "integrity": "sha512-lE3pbsb6Z03WwY9KNHj2eQ34fKyetIJld83yd9M9OpbElwYWP71cOlEQTcxq4WLzKMWXr7PuE0PuvEfT3tcI5g==", "requires": { - "@leafygreen-ui/emotion": "^5.0.3", - "@leafygreen-ui/hooks": "^9.1.4", - "@leafygreen-ui/icon": "^14.5.1", - "@leafygreen-ui/icon-button": "^17.0.6", - "@leafygreen-ui/lib": "^15.4.0", + "@leafygreen-ui/emotion": "^5.1.0", + "@leafygreen-ui/hooks": "^9.3.0", + "@leafygreen-ui/icon": "^14.7.1", + "@leafygreen-ui/icon-button": "^17.1.4", + "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/typography": "^22.2.2" + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/tooltip": "^14.3.0" } }, "@lg-chat/rich-links": { @@ -60760,23 +60686,20 @@ "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/palette": "^5.0.2", "@leafygreen-ui/polymorphic": "^3.1.0", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/typography": "^22.2.2" + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/typography": "^22.2.3" } }, "@lg-chat/title-bar": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@lg-chat/title-bar/-/title-bar-4.2.0.tgz", - "integrity": "sha512-kNdTqPRe+bd5cL96b1PrySmbXF+1Bd2WBJndPrJ9hBdOD6itJmKfMLV8W6sbMhixaN2Q01jMQDPd37CMMGuUAA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@lg-chat/title-bar/-/title-bar-5.0.1.tgz", + "integrity": "sha512-KYhjll2YmjHKe+Rg5a+MUFqhRND9gVUmF6wV008kiRsbKbMy8JkS5sdCU1yHUs2ucIh9cv03FmBdLZytR0t4Sg==", "requires": { - "@leafygreen-ui/badge": "^10.2.2", + "@leafygreen-ui/badge": "^10.2.3", "@leafygreen-ui/emotion": "^5.1.0", - "@leafygreen-ui/icon": "^14.7.0", - "@leafygreen-ui/icon-button": "^17.1.2", "@leafygreen-ui/lib": "^15.6.2", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/typography": "^22.2.2", - "@lg-chat/avatar": "^8.0.1" + "@leafygreen-ui/tokens": "^4.1.0", + "@leafygreen-ui/typography": "^22.2.3" } }, "@lg-tools/test-harnesses": { @@ -61547,7 +61470,7 @@ "@leafygreen-ui/chip": "^4.0.9", "@leafygreen-ui/code": "^20.2.3", "@leafygreen-ui/combobox": "^12.2.1", - "@leafygreen-ui/confirmation-modal": "^8.0.0", + "@leafygreen-ui/confirmation-modal": "^10.2.1", "@leafygreen-ui/copyable": "^12.0.1", "@leafygreen-ui/drawer": "^5.1.3", "@leafygreen-ui/emotion": "^5.1.0", @@ -61560,9 +61483,9 @@ "@leafygreen-ui/leafygreen-provider": "^5.0.4", "@leafygreen-ui/lib": "^15.6.2", "@leafygreen-ui/logo": "^11.1.0", - "@leafygreen-ui/marketing-modal": "^6.0.0", + "@leafygreen-ui/marketing-modal": "^8.1.4", "@leafygreen-ui/menu": "^33.0.1", - "@leafygreen-ui/modal": "^18.0.0", + "@leafygreen-ui/modal": "^20.3.1", "@leafygreen-ui/palette": "^5.0.2", "@leafygreen-ui/pipeline": "^8.0.8", "@leafygreen-ui/polymorphic": "^3.1.0", @@ -61572,7 +61495,7 @@ "@leafygreen-ui/radio-group": "^13.0.10", "@leafygreen-ui/search-input": "^6.1.1", "@leafygreen-ui/segmented-control": "^11.0.11", - "@leafygreen-ui/select": "^17.0.1", + "@leafygreen-ui/select": "^17.0.2", "@leafygreen-ui/skeleton-loader": "^3.0.9", "@leafygreen-ui/split-button": "^6.1.7", "@leafygreen-ui/table": "^15.2.1", @@ -61584,12 +61507,12 @@ "@leafygreen-ui/tokens": "^4.0.0", "@leafygreen-ui/tooltip": "^14.2.3", "@leafygreen-ui/typography": "^22.2.2", - "@lg-chat/chat-window": "^4.1.5", - "@lg-chat/input-bar": "^10.1.0", - "@lg-chat/leafygreen-chat-provider": "^5.0.2", - "@lg-chat/message": "^8.2.0", + "@lg-chat/chat-window": "^6.0.0", + "@lg-chat/input-bar": "^12.1.0", + "@lg-chat/leafygreen-chat-provider": "^6.0.0", + "@lg-chat/message": "^10.1.1", "@mongodb-js/compass-context-menu": "^0.3.1", - "@mongodb-js/diagramming": "^2.2.1", + "@mongodb-js/diagramming": "^2.2.2", "@mongodb-js/eslint-config-compass": "^1.4.12", "@mongodb-js/mocha-config-compass": "^1.7.2", "@mongodb-js/prettier-config-compass": "^1.2.9", @@ -65068,19 +64991,20 @@ } }, "@mongodb-js/diagramming": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@mongodb-js/diagramming/-/diagramming-2.2.1.tgz", - "integrity": "sha512-xUaQSyMnyNeXILT+tPl0JoC+hlh38cYltYuL6uniyg36g20cPuCXZ9geQp0sbVt5/p1BtfgdqsKMfox+oaOlIQ==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@mongodb-js/diagramming/-/diagramming-2.2.2.tgz", + "integrity": "sha512-GCI+L9TBC7sbuEeJaazhdz1ELcvPRi6cjuOf9Lhx/9FhyV+7IpIGCQbm4V7OflBrqBTfZD4XrwzlkuZ55hRLaA==", "requires": { "@emotion/react": "^11.14.0", "@emotion/styled": "^11.14.0", "@leafygreen-ui/icon": "^14.3.0", "@leafygreen-ui/inline-definition": "^9.0.5", - "@leafygreen-ui/leafygreen-provider": "^5.0.4", + "@leafygreen-ui/leafygreen-provider": "^5.0.2", "@leafygreen-ui/palette": "^5.0.0", - "@leafygreen-ui/tokens": "^4.0.0", + "@leafygreen-ui/select": "^17.0.2", + "@leafygreen-ui/tokens": "^4.1.0", "@leafygreen-ui/tooltip": "^14.2.1", - "@leafygreen-ui/typography": "^22.2.2", + "@leafygreen-ui/typography": "^22.1.0", "@xyflow/react": "12.5.1", "d3-path": "^3.1.0", "elkjs": "^0.11.0", @@ -94221,14 +94145,6 @@ "use-isomorphic-layout-effect": "^1.1.1" } }, - "use-resize-observer": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/use-resize-observer/-/use-resize-observer-9.1.0.tgz", - "integrity": "sha512-R25VqO9Wb3asSD4eqtcxk8sJalvIOYBqS8MNZlpDSQ4l4xMQxC/J7Id9HoTqPq8FwULIn0PVW+OAqF2dyYbjow==", - "requires": { - "@juggle/resize-observer": "^3.3.1" - } - }, "use-sync-external-store": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz", diff --git a/package.json b/package.json index e18aede4776..da3a4098975 100644 --- a/package.json +++ b/package.json @@ -111,15 +111,9 @@ "eslint-plugin-react": "^7.37.5", "eslint-plugin-react-hooks": "^7.0.1" }, - "@leafygreen-ui/button": "^25.1.3", - "@leafygreen-ui/confirmation-modal": "^8.0.0", - "@leafygreen-ui/form-field": "^4.0.7", - "@leafygreen-ui/leafygreen-provider": "^5.0.4", - "@leafygreen-ui/marketing-modal": "^6.0.0", - "@leafygreen-ui/modal": "^18.0.0", - "@leafygreen-ui/select": "^17.0.1", - "@leafygreen-ui/text-input": "^16.2.1", - "@leafygreen-ui/tokens": "^4.0.0", - "@leafygreen-ui/typography": "^22.2.2" + "@mongodb-js/diagramming": { + "@leafygreen-ui/select": "^17.0.2", + "@leafygreen-ui/tokens": "^4.1.0" + } } } diff --git a/packages/compass-aggregations/src/components/focus-mode/focus-mode.spec.tsx b/packages/compass-aggregations/src/components/focus-mode/focus-mode.spec.tsx index 36dd66899d9..cefe8bd0bec 100644 --- a/packages/compass-aggregations/src/components/focus-mode/focus-mode.spec.tsx +++ b/packages/compass-aggregations/src/components/focus-mode/focus-mode.spec.tsx @@ -18,12 +18,8 @@ describe('FocusMode', function () { it('does not show modal when closed', async function () { const store = await renderFocusMode(); - store.dispatch(disableFocusMode() as any); - await waitFor(() => { - expect(() => { - screen.getByTestId('focus-mode-modal'); - }).to.throw(); - }); + store.dispatch(disableFocusMode()); + expect(screen.getByTestId('focus-mode-modal')).to.be.closed; }); it('shows modal when open', async function () { @@ -36,14 +32,12 @@ describe('FocusMode', function () { it('hides modal when close button is clicked', async function () { const store = await renderFocusMode(); - store.dispatch(enableFocusMode(0) as any); + store.dispatch(enableFocusMode(0)); await waitFor(() => { screen.getByLabelText(/close modal/i).click(); }); - await waitFor(() => { - expect(screen.queryByTestId('focus-mode-modal')).to.not.exist; - }); + expect(screen.queryByTestId('focus-mode-modal')).to.be.closed; }); }); diff --git a/packages/compass-assistant/src/compass-assistant-provider.spec.tsx b/packages/compass-assistant/src/compass-assistant-provider.spec.tsx index c5368006fb6..62e65902a57 100644 --- a/packages/compass-assistant/src/compass-assistant-provider.spec.tsx +++ b/packages/compass-assistant/src/compass-assistant-provider.spec.tsx @@ -5,7 +5,6 @@ import { screen, userEvent, waitFor, - waitForElementToBeRemoved, within, } from '@mongodb-js/testing-library-compass'; import { @@ -564,8 +563,9 @@ describe('CompassAssistantProvider', function () { userEvent.click(clearButton); await waitFor(() => { - expect(screen.getByTestId('assistant-confirm-clear-chat-modal')).to - .exist; + expect( + screen.getByTestId('assistant-confirm-clear-chat-modal').firstChild + ).to.exist; }); // There should be messages in the chat @@ -576,9 +576,11 @@ describe('CompassAssistantProvider', function () { const confirmButton = within(modal).getByText('Clear chat'); userEvent.click(confirmButton); - await waitForElementToBeRemoved(() => - screen.getByTestId('assistant-confirm-clear-chat-modal') - ); + await waitFor(() => { + expect( + screen.getByTestId('assistant-confirm-clear-chat-modal').firstChild + ).to.not.exist; + }); expect(mockChat.messages).to.be.empty; expect(screen.queryByTestId('assistant-message-1')).to.not.exist; @@ -594,8 +596,9 @@ describe('CompassAssistantProvider', function () { userEvent.click(clearButton); await waitFor(() => { - expect(screen.getByTestId('assistant-confirm-clear-chat-modal')).to - .exist; + expect( + screen.getByTestId('assistant-confirm-clear-chat-modal').firstChild + ).to.exist; }); // There should be messages in the chat @@ -606,9 +609,11 @@ describe('CompassAssistantProvider', function () { const cancelButton = within(modal).getByText('Cancel'); userEvent.click(cancelButton); - await waitForElementToBeRemoved(() => - screen.getByTestId('assistant-confirm-clear-chat-modal') - ); + await waitFor(() => { + expect( + screen.getByTestId('assistant-confirm-clear-chat-modal').firstChild + ).to.not.exist; + }); expect(mockChat.messages).to.deep.equal(mockMessages); expect(screen.getByTestId('assistant-message-1')).to.exist; @@ -626,8 +631,9 @@ describe('CompassAssistantProvider', function () { userEvent.click(clearButton); await waitFor(() => { - expect(screen.getByTestId('assistant-confirm-clear-chat-modal')).to - .exist; + expect( + screen.getByTestId('assistant-confirm-clear-chat-modal').firstChild + ).to.exist; }); // There should be messages in the chat @@ -640,9 +646,11 @@ describe('CompassAssistantProvider', function () { const confirmButton = within(modal).getByText('Clear chat'); userEvent.click(confirmButton); - await waitForElementToBeRemoved(() => - screen.getByTestId('assistant-confirm-clear-chat-modal') - ); + await waitFor(() => { + expect( + screen.getByTestId('assistant-confirm-clear-chat-modal').firstChild + ).to.not.exist; + }); // The non-genuine warning message should still be in the chat expect(screen.getByTestId('assistant-message-non-genuine-warning')).to diff --git a/packages/compass-assistant/src/components/assistant-chat.spec.tsx b/packages/compass-assistant/src/components/assistant-chat.spec.tsx index 5f15954f15a..62f0dcddfc5 100644 --- a/packages/compass-assistant/src/components/assistant-chat.spec.tsx +++ b/packages/compass-assistant/src/components/assistant-chat.spec.tsx @@ -121,8 +121,7 @@ describe('AssistantChat', function () { it('displays the disclaimer and welcome text', function () { renderWithChat(createMockChat({ messages: [] })); - expect(screen.getByText(/AI can make mistakes, so review for accuracy/)).to - .exist; + expect(screen.getByText(/Review answers for accuracy/)).to.exist; }); it('displays the welcome text when there are no messages', function () { diff --git a/packages/compass-assistant/src/components/assistant-chat.tsx b/packages/compass-assistant/src/components/assistant-chat.tsx index 1af46a9072f..1a00a25a9dd 100644 --- a/packages/compass-assistant/src/components/assistant-chat.tsx +++ b/packages/compass-assistant/src/components/assistant-chat.tsx @@ -42,11 +42,6 @@ const assistantChatFixesStyles = css({ listStyleType: 'decimal', }, - // Remove extra padding - '> div, > div > div, > div > div > div, > div > div > div': { - height: '100%', - padding: 0, - }, // This is currently set to 'pre-wrap' which causes list items to be on a different line than the list markers. 'li, ol': { whiteSpace: 'normal', @@ -134,9 +129,7 @@ const messageFeedFixesStyles = css({ display: 'flex', flexDirection: 'column-reverse', overflowY: 'auto', - width: '100%', wordBreak: 'break-word', - flex: 1, padding: spacing[400], gap: spacing[400], @@ -145,11 +138,6 @@ const messageFeedFixesStyles = css({ fontWeight: 600, }, }); -const chatWindowFixesStyles = css({ - height: '100%', - display: 'flex', - flexDirection: 'column', -}); const welcomeMessageStyles = css({ paddingBottom: spacing[400], paddingLeft: spacing[400], @@ -161,14 +149,6 @@ const noWrapFixesStyles = css({ whiteSpace: 'nowrap', }); -/** TODO(COMPASS-9751): This should be handled by Leafygreen's disclaimers update */ -const inputBarStyleFixes = css({ - width: '100%', - paddingLeft: spacing[400], - paddingRight: spacing[400], - paddingBottom: spacing[100], -}); - function makeErrorMessage(message: string) { message = message || 'An error occurred'; return `${message}. Try clearing the chat if the error persists.`; @@ -367,7 +347,7 @@ export const AssistantChat: React.FunctionComponent = ({ style={chatContainerOverrideStyle} > - +
= ({

)} -
- - void handleMessageSend(messageBody) - } - state={status === 'submitted' ? 'loading' : undefined} - textareaProps={inputBarTextareaProps} - /> -
+ void handleMessageSend(messageBody)} + state={status === 'submitted' ? 'loading' : undefined} + textareaProps={inputBarTextareaProps} + />
diff --git a/packages/compass-collection/src/components/mock-data-generator-modal/mock-data-generator-modal.spec.tsx b/packages/compass-collection/src/components/mock-data-generator-modal/mock-data-generator-modal.spec.tsx index 55f13900643..0dbb3eabdcf 100644 --- a/packages/compass-collection/src/components/mock-data-generator-modal/mock-data-generator-modal.spec.tsx +++ b/packages/compass-collection/src/components/mock-data-generator-modal/mock-data-generator-modal.spec.tsx @@ -133,23 +133,23 @@ describe('MockDataGeneratorModal', () => { it('renders the modal when isOpen is true', async () => { await renderModal(); - expect(screen.getByTestId('generate-mock-data-modal')).to.exist; + expect(screen.getByTestId('generate-mock-data-modal')).to.be.open; }); it('does not render the modal when isOpen is false', async () => { await renderModal({ isOpen: false }); - expect(screen.queryByTestId('generate-mock-data-modal')).to.not.exist; + expect(screen.getByTestId('generate-mock-data-modal')).to.be.closed; }); it('closes the modal when the close button is clicked', async () => { await renderModal(); - expect(screen.getByTestId('generate-mock-data-modal')).to.exist; + expect(screen.getByTestId('generate-mock-data-modal')).to.be.open; userEvent.click(screen.getByLabelText('Close modal')); await waitFor( () => - expect(screen.queryByTestId('generate-mock-data-modal')).to.not.exist + expect(screen.getByTestId('generate-mock-data-modal')).to.be.closed ); }); @@ -171,11 +171,11 @@ describe('MockDataGeneratorModal', () => { it('closes the modal when the cancel button is clicked', async () => { await renderModal(); - expect(screen.getByTestId('generate-mock-data-modal')).to.exist; + expect(screen.getByTestId('generate-mock-data-modal')).to.be.open; userEvent.click(screen.getByText('Cancel')); await waitFor( () => - expect(screen.queryByTestId('generate-mock-data-modal')).to.not.exist + expect(screen.getByTestId('generate-mock-data-modal')).to.be.closed ); }); @@ -1097,11 +1097,11 @@ describe('MockDataGeneratorModal', () => { }, }); - expect(screen.getByTestId('generate-mock-data-modal')).to.exist; + expect(screen.getByTestId('generate-mock-data-modal')).to.be.open; userEvent.click(screen.getByText('Done')); await waitFor( () => - expect(screen.queryByTestId('generate-mock-data-modal')).to.not.exist + expect(screen.getByTestId('generate-mock-data-modal')).to.be.closed ); }); diff --git a/packages/compass-components/package.json b/packages/compass-components/package.json index 9f1d7085936..0a758b35785 100644 --- a/packages/compass-components/package.json +++ b/packages/compass-components/package.json @@ -44,7 +44,7 @@ "@leafygreen-ui/chip": "^4.0.9", "@leafygreen-ui/code": "^20.2.3", "@leafygreen-ui/combobox": "^12.2.1", - "@leafygreen-ui/confirmation-modal": "^8.0.0", + "@leafygreen-ui/confirmation-modal": "^10.2.1", "@leafygreen-ui/copyable": "^12.0.1", "@leafygreen-ui/drawer": "^5.1.3", "@leafygreen-ui/emotion": "^5.1.0", @@ -56,9 +56,9 @@ "@leafygreen-ui/input-option": "^4.1.3", "@leafygreen-ui/leafygreen-provider": "^5.0.4", "@leafygreen-ui/logo": "^11.1.0", - "@leafygreen-ui/marketing-modal": "^6.0.0", + "@leafygreen-ui/marketing-modal": "^8.1.4", "@leafygreen-ui/menu": "^33.0.1", - "@leafygreen-ui/modal": "^18.0.0", + "@leafygreen-ui/modal": "^20.3.1", "@leafygreen-ui/palette": "^5.0.2", "@leafygreen-ui/pipeline": "^8.0.8", "@leafygreen-ui/polymorphic": "^3.1.0", @@ -68,7 +68,7 @@ "@leafygreen-ui/radio-group": "^13.0.10", "@leafygreen-ui/search-input": "^6.1.1", "@leafygreen-ui/segmented-control": "^11.0.11", - "@leafygreen-ui/select": "^17.0.1", + "@leafygreen-ui/select": "^17.0.2", "@leafygreen-ui/skeleton-loader": "^3.0.9", "@leafygreen-ui/split-button": "^6.1.7", "@leafygreen-ui/table": "^15.2.1", @@ -80,12 +80,12 @@ "@leafygreen-ui/tokens": "^4.0.0", "@leafygreen-ui/tooltip": "^14.2.3", "@leafygreen-ui/typography": "^22.2.2", - "@lg-chat/chat-window": "^4.1.5", - "@lg-chat/input-bar": "^10.1.0", - "@lg-chat/leafygreen-chat-provider": "^5.0.2", - "@lg-chat/message": "^8.2.0", + "@lg-chat/chat-window": "^6.0.0", + "@lg-chat/input-bar": "^12.1.0", + "@lg-chat/leafygreen-chat-provider": "^6.0.0", + "@lg-chat/message": "^10.1.1", "@mongodb-js/compass-context-menu": "^0.3.1", - "@mongodb-js/diagramming": "^2.2.1", + "@mongodb-js/diagramming": "^2.2.2", "@react-aria/interactions": "^3.9.1", "@react-aria/utils": "^3.13.1", "@react-aria/visually-hidden": "^3.3.1", diff --git a/packages/compass-components/src/components/content-with-fallback.spec.tsx b/packages/compass-components/src/components/content-with-fallback.spec.tsx index d8329bc8751..d526a695297 100644 --- a/packages/compass-components/src/components/content-with-fallback.spec.tsx +++ b/packages/compass-components/src/components/content-with-fallback.spec.tsx @@ -58,19 +58,24 @@ describe('ContentWithFallback', function () { { container } ); - expect(container.children.length).to.equal(2); - const [contentContainer, contextMenuContainer] = Array.from( - container.children - ); + expect(container.children.length).to.equal(3); + const [contentContainer, contextMenuContainer, confirmationModal] = + Array.from(container.children); + expect(contentContainer.children.length).to.equal(1); expect(contextMenuContainer.getAttribute('data-testid')).to.equal( 'context-menu-container' ); + const copyPasteContextMenu = contentContainer.children[0]; expect(copyPasteContextMenu.children.length).to.equal(0); expect(copyPasteContextMenu.getAttribute('data-testid')).to.equal( 'copy-paste-context-menu-container' ); + + expect(confirmationModal.getAttribute('data-testid')).to.equal( + 'confirmation-modal' + ); }); it('should render fallback when the timeout passes', async function () { diff --git a/packages/compass-components/src/components/modals/confirmation-modal.spec.tsx b/packages/compass-components/src/components/modals/confirmation-modal.spec.tsx index fc1a1ed0640..392709a3ab2 100644 --- a/packages/compass-components/src/components/modals/confirmation-modal.spec.tsx +++ b/packages/compass-components/src/components/modals/confirmation-modal.spec.tsx @@ -1,5 +1,10 @@ import React from 'react'; -import { render, screen, cleanup } from '@mongodb-js/testing-library-compass'; +import { + render, + screen, + cleanup, + within, +} from '@mongodb-js/testing-library-compass'; import { expect } from 'chai'; import ConfirmationModal from './confirmation-modal'; @@ -23,8 +28,8 @@ describe('ConfirmationModal Component', function () { }); it('should show the modal button', function () { - renderModal(); - const button = screen.getByText('Confirm').closest('button'); + const { container } = renderModal(); + const button = within(container).getByText('Confirm').closest('button'); expect(button).to.not.match('disabled'); }); diff --git a/packages/compass-components/src/components/modals/confirmation-modal.tsx b/packages/compass-components/src/components/modals/confirmation-modal.tsx index c824cc59859..b92ca889c63 100644 --- a/packages/compass-components/src/components/modals/confirmation-modal.tsx +++ b/packages/compass-components/src/components/modals/confirmation-modal.tsx @@ -6,12 +6,15 @@ import { } from '../leafygreen'; import { withStackedComponentStyles } from '../../hooks/use-stacked-component'; +export type ConfirmationModalProps = Omit< + React.ComponentProps, + 'backdropClassName' +>; + function ConfirmationModal({ children, ...props -}: React.ComponentProps< - typeof LeafyGreenConfirmationModal ->): React.ReactElement { +}: ConfirmationModalProps): React.ReactElement { return ( {children} diff --git a/packages/compass-components/src/components/modals/info-modal.tsx b/packages/compass-components/src/components/modals/info-modal.tsx index 6905465a925..c1f731cd610 100644 --- a/packages/compass-components/src/components/modals/info-modal.tsx +++ b/packages/compass-components/src/components/modals/info-modal.tsx @@ -31,7 +31,7 @@ function InfoModal({ return ( diff --git a/packages/compass-components/src/components/modals/marketing-modal.tsx b/packages/compass-components/src/components/modals/marketing-modal.tsx index 6277d545861..14fbf72dd99 100644 --- a/packages/compass-components/src/components/modals/marketing-modal.tsx +++ b/packages/compass-components/src/components/modals/marketing-modal.tsx @@ -5,10 +5,15 @@ import { } from '../leafygreen'; import { withStackedComponentStyles } from '../../hooks/use-stacked-component'; +export type MarketingModalProps = Omit< + React.ComponentProps, + 'backdropClassName' +>; + function MarketingModal({ children, ...props -}: React.ComponentProps): React.ReactElement { +}: MarketingModalProps): React.ReactElement { return ( {children} diff --git a/packages/compass-components/src/components/modals/modal.spec.tsx b/packages/compass-components/src/components/modals/modal.spec.tsx new file mode 100644 index 00000000000..5b8e184f3f0 --- /dev/null +++ b/packages/compass-components/src/components/modals/modal.spec.tsx @@ -0,0 +1,25 @@ +import React from 'react'; +import { render, screen } from '@mongodb-js/testing-library-compass'; +import { expect } from 'chai'; + +import { Modal } from './modal'; + +describe('Modal Component', function () { + it('opens and closes', () => { + const { rerender } = render( + +

The content!

+
+ ); + + expect(screen.getByTestId('modal')).to.be.closed; + + rerender( + +

The content!

+
+ ); + + expect(screen.getByTestId('modal')).to.be.open; + }); +}); diff --git a/packages/compass-components/src/components/modals/modal.tsx b/packages/compass-components/src/components/modals/modal.tsx index f3ade3779eb..81123f8ef9b 100644 --- a/packages/compass-components/src/components/modals/modal.tsx +++ b/packages/compass-components/src/components/modals/modal.tsx @@ -1,11 +1,9 @@ import React from 'react'; import { css, cx } from '@leafygreen-ui/emotion'; -import { spacing } from '@leafygreen-ui/tokens'; import { Body, Modal as LeafyGreenModal } from '../leafygreen'; -import { useScrollbars } from '../../hooks/use-scrollbars'; import { withStackedComponentStyles } from '../../hooks/use-stacked-component'; -const contentStyles = css({ +const styles = css({ width: '600px', letterSpacing: 0, padding: 0, @@ -13,24 +11,14 @@ const contentStyles = css({ // content and this messes up the autocompleter within the modal. So we clear // the transform here. transform: 'none', -}); - -const modalFullScreenStyles = css({ - '& > div': { - paddingTop: spacing[600], - paddingBottom: spacing[600], - paddingLeft: spacing[800], - paddingRight: spacing[800], - height: '100vh', - maxHeight: '100vh', + '&:not([open])': { + pointerEvents: 'none', }, }); -const contentFullScreenStyles = css({ +const fullScreenStyles = css({ width: '100%', height: '100%', - maxHeight: '100%', - margin: 0, alignSelf: 'stretch', '& > div': { height: '100%', @@ -40,32 +28,19 @@ const contentFullScreenStyles = css({ function UnwrappedModal({ className, - contentClassName, children, fullScreen = false, ...props -}: React.ComponentProps & { +}: Omit, 'backdropClassName'> & { fullScreen?: boolean; }): React.ReactElement { - // NOTE: We supply scrollbar styles to the `Modal` content as - // there is currently a bug in `LeafyGreen` with the portal providers - // where our top level `portalContainer` we supply to the `LeafyGreenProvider` - // in home.tsx is not used by Modals. - // Once this issue is fixed we can remove these styles here. - const { className: scrollbarStyles } = useScrollbars(); - return ( {children} diff --git a/packages/compass-components/src/hooks/use-confirmation.spec.tsx b/packages/compass-components/src/hooks/use-confirmation.spec.tsx index 15b436401d1..962d9ee1499 100644 --- a/packages/compass-components/src/hooks/use-confirmation.spec.tsx +++ b/packages/compass-components/src/hooks/use-confirmation.spec.tsx @@ -2,7 +2,6 @@ import { render, screen, waitFor, - waitForElementToBeRemoved, within, userEvent, } from '@mongodb-js/testing-library-compass'; @@ -49,18 +48,14 @@ describe('use-confirmation', function () { it('handles cancel action', async function () { userEvent.click(within(modal).getByText('Cancel')); - await waitForElementToBeRemoved(() => - screen.getByTestId('confirmation-modal') - ); + await waitFor(() => expect(modal).to.not.be.displayed); const confirmed = await response; expect(confirmed).to.be.false; }); it('handles confirm action', async function () { userEvent.click(within(modal).getByText('Yes')); - await waitForElementToBeRemoved(() => - screen.getByTestId('confirmation-modal') - ); + await waitFor(() => expect(modal).to.not.be.displayed); const confirmed = await response; expect(confirmed).to.be.true; }); diff --git a/packages/compass-components/src/hooks/use-confirmation.tsx b/packages/compass-components/src/hooks/use-confirmation.tsx index 71991c226c4..369710a77b7 100644 --- a/packages/compass-components/src/hooks/use-confirmation.tsx +++ b/packages/compass-components/src/hooks/use-confirmation.tsx @@ -18,7 +18,10 @@ export { ConfirmationModalVariant }; type ConfirmationModalProps = React.ComponentProps; type ConfirmationProperties = Partial< - Pick + Pick< + ConfirmationModalProps, + 'title' | 'variant' | 'requiredInputText' | 'initialFocus' + > > & { buttonText?: React.ReactNode; confirmButtonProps?: Omit; @@ -188,6 +191,7 @@ const ConfirmationModalStateHandler: React.FunctionComponent = ({ children: confirmationProps.buttonText ?? 'Confirm', onClick: handleConfirm, ...confirmationProps.confirmButtonProps, + 'data-lgid': 'lg-confirmation_modal-footer-confirm_button', }} cancelButtonProps={{ className: confirmationProps.hideCancelButton @@ -196,6 +200,10 @@ const ConfirmationModalStateHandler: React.FunctionComponent = ({ onClick: handleCancel, }} requiredInputText={confirmationProps.requiredInputText ?? undefined} + initialFocus={ + confirmationProps.initialFocus ?? + '[data-lgid=lg-confirmation_modal-footer-confirm_button]' + } > {confirmationProps.description} {confirmationProps.warning && ( diff --git a/packages/compass-components/src/hooks/use-error-details.tsx b/packages/compass-components/src/hooks/use-error-details.tsx index c9491389949..50a6ae270db 100644 --- a/packages/compass-components/src/hooks/use-error-details.tsx +++ b/packages/compass-components/src/hooks/use-error-details.tsx @@ -25,7 +25,6 @@ export const showErrorDetails = function showErrorDetails({ buttonText: closeAction.replace(/\b\w/g, (c) => c.toUpperCase()), confirmButtonProps: { variant: ButtonVariant.Default, - autoFocus: true, }, }); }; diff --git a/packages/compass-crud/src/components/bulk-delete-modal.tsx b/packages/compass-crud/src/components/bulk-delete-modal.tsx index 31408f6f1c1..38ee689798e 100644 --- a/packages/compass-crud/src/components/bulk-delete-modal.tsx +++ b/packages/compass-crud/src/components/bulk-delete-modal.tsx @@ -94,12 +94,7 @@ const BulkDeleteModal: React.FunctionComponent = ({ const exportButtonId = useId(); return ( - + = ({ onClick={onExportToLanguage} data-testid="export-button" id={exportButtonId} + // eslint-disable-next-line jsx-a11y/no-autofocus + autoFocus > Export diff --git a/packages/compass-crud/src/components/bulk-update-modal.tsx b/packages/compass-crud/src/components/bulk-update-modal.tsx index 9d9a0b7ef14..01a21c4c94e 100644 --- a/packages/compass-crud/src/components/bulk-update-modal.tsx +++ b/packages/compass-crud/src/components/bulk-update-modal.tsx @@ -405,8 +405,7 @@ export default function BulkUpdateModal({ open={isOpen} setOpen={closeBulkUpdateModal} data-testid="bulk-update-modal" - contentClassName={enablePreview ? modalContentStyles : undefined} - initialFocus={`#${bulkUpdateUpdateId} .cm-content`} + className={enablePreview ? modalContentStyles : undefined} > @@ -441,6 +440,8 @@ export default function BulkUpdateModal({ onBlur={() => ({})} annotations={annotations} minLines={12} + // eslint-disable-next-line jsx-a11y/no-autofocus + autoFocus />
diff --git a/packages/compass-crud/src/components/insert-document-dialog.tsx b/packages/compass-crud/src/components/insert-document-dialog.tsx index c7227ae9d8c..a2c4d8962ea 100644 --- a/packages/compass-crud/src/components/insert-document-dialog.tsx +++ b/packages/compass-crud/src/components/insert-document-dialog.tsx @@ -297,7 +297,6 @@ const InsertDocumentDialog: React.FC = ({ { - const createModalElement = browser.$(Selectors.CreateCollectionModal); - await createModalElement.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.CreateCollectionModal); await browser.setValueVisible( Selectors.CreateDatabaseCollectionName, @@ -216,5 +215,7 @@ export async function addCollection( } await browser.clickVisible(Selectors.CreateCollectionCreateButton); - await createModalElement.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.CreateCollectionModal, { + reverse: true, + }); } diff --git a/packages/compass-e2e-tests/helpers/commands/add-database.ts b/packages/compass-e2e-tests/helpers/commands/add-database.ts index 2e235fda161..13603ee4c62 100644 --- a/packages/compass-e2e-tests/helpers/commands/add-database.ts +++ b/packages/compass-e2e-tests/helpers/commands/add-database.ts @@ -10,8 +10,7 @@ export async function addDatabase( collectionOptions?: AddCollectionOptions, screenshotPath?: string ): Promise { - const createModalElement = browser.$(Selectors.CreateDatabaseModal); - await createModalElement.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.CreateDatabaseModal); await browser.setValueVisible(Selectors.CreateDatabaseDatabaseName, dbName); await browser.setValueVisible( Selectors.CreateDatabaseCollectionName, @@ -25,5 +24,7 @@ export async function addDatabase( } await createButton.click(); - await createModalElement.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.CreateDatabaseModal, { + reverse: true, + }); } diff --git a/packages/compass-e2e-tests/helpers/commands/click-confirmation-action.ts b/packages/compass-e2e-tests/helpers/commands/click-confirmation-action.ts index 85e3d0706bc..a87de56ac71 100644 --- a/packages/compass-e2e-tests/helpers/commands/click-confirmation-action.ts +++ b/packages/compass-e2e-tests/helpers/commands/click-confirmation-action.ts @@ -9,8 +9,7 @@ export async function clickConfirmationAction( ) { await browser.clickVisible(actionButtonSelector); - const confirmationModal = browser.$(Selectors.ConfirmationModal); - await confirmationModal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.ConfirmationModal); if (confirmationText) { await browser.setValueVisible( @@ -24,5 +23,7 @@ export async function clickConfirmationAction( } await browser.clickVisible(Selectors.confirmationModalConfirmButton()); - await confirmationModal.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.ConfirmationModal, { + reverse: true, + }); } diff --git a/packages/compass-e2e-tests/helpers/commands/close-settings-modal.ts b/packages/compass-e2e-tests/helpers/commands/close-settings-modal.ts index e397e8a2eef..05376d44c01 100644 --- a/packages/compass-e2e-tests/helpers/commands/close-settings-modal.ts +++ b/packages/compass-e2e-tests/helpers/commands/close-settings-modal.ts @@ -4,16 +4,11 @@ import * as Selectors from '../selectors'; export async function closeSettingsModal( browser: CompassBrowser ): Promise { - if (!(await browser.existsEventually(Selectors.SettingsModal))) { + if (!(await browser.isModalEventuallyOpen(Selectors.SettingsModal))) { return; } - const settingsModalElement = browser.$(Selectors.SettingsModal); - - await settingsModalElement.waitForDisplayed(); - + await browser.waitForOpenModal(Selectors.SettingsModal); await browser.clickVisible(Selectors.CloseSettingsModalButton); - await settingsModalElement.waitForDisplayed({ - reverse: true, - }); + await browser.waitForOpenModal(Selectors.SettingsModal, { reverse: true }); } diff --git a/packages/compass-e2e-tests/helpers/commands/close-welcome-modal.ts b/packages/compass-e2e-tests/helpers/commands/close-welcome-modal.ts index 2a71aa79ff1..16d418f3616 100644 --- a/packages/compass-e2e-tests/helpers/commands/close-welcome-modal.ts +++ b/packages/compass-e2e-tests/helpers/commands/close-welcome-modal.ts @@ -4,17 +4,13 @@ import * as Selectors from '../selectors'; export async function closeWelcomeModal( browser: CompassBrowser ): Promise { - if (!(await browser.existsEventually(Selectors.WelcomeModal))) { + if (!(await browser.isModalEventuallyOpen(Selectors.WelcomeModal))) { return; } - const welcomeModalElement = browser.$(Selectors.WelcomeModal); - await welcomeModalElement.waitForDisplayed(); - + await browser.waitForOpenModal(Selectors.WelcomeModal); await browser.clickVisible(Selectors.CloseWelcomeModalButton); - await welcomeModalElement.waitForDisplayed({ - reverse: true, - }); + await browser.waitForOpenModal(Selectors.WelcomeModal, { reverse: true }); // By setting a feature after closing the welcome modal we know that // preferences will have been saved to disk and therefore showedNetworkOptIn diff --git a/packages/compass-e2e-tests/helpers/commands/connect-form.ts b/packages/compass-e2e-tests/helpers/commands/connect-form.ts index 497e13623e8..326df829b6f 100644 --- a/packages/compass-e2e-tests/helpers/commands/connect-form.ts +++ b/packages/compass-e2e-tests/helpers/commands/connect-form.ts @@ -13,13 +13,11 @@ import { getConnectionTitle } from '@mongodb-js/connection-info'; const debug = Debug('compass-e2e-tests'); export async function resetConnectForm(browser: CompassBrowser): Promise { - if (await browser.$(Selectors.ConnectionModal).isDisplayed()) { + if (await browser.isModalOpen(Selectors.ConnectionModal)) { await browser.clickVisible(Selectors.ConnectionModalCloseButton); - await browser - .$(Selectors.ConnectionModal) - .waitForDisplayed({ reverse: true }); } + await browser.waitForOpenModal(Selectors.ConnectionModal, { reverse: true }); await browser.clickVisible(Selectors.SidebarNewConnectionButton); const connectionTitleSelector = Selectors.ConnectionModalTitle; @@ -919,9 +917,7 @@ export async function saveConnection( ): Promise { await browser.setConnectFormState(state); await browser.clickVisible(Selectors.ConnectionModalSaveButton); - await browser - .$(Selectors.ConnectionModal) - .waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.ConnectionModal, { reverse: true }); } let screenshotCounter = 0; diff --git a/packages/compass-e2e-tests/helpers/commands/connect.ts b/packages/compass-e2e-tests/helpers/commands/connect.ts index 60fbc9d6d2d..13e37896057 100644 --- a/packages/compass-e2e-tests/helpers/commands/connect.ts +++ b/packages/compass-e2e-tests/helpers/commands/connect.ts @@ -63,9 +63,7 @@ export async function connectWithConnectionString( // if the modal is still animating away when we're connecting again, things // are going to get confused - await browser - .$(Selectors.ConnectionModal) - .waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.ConnectionModal, { reverse: true }); // if a connection with this name already exists, remove it otherwise we'll // add a duplicate and things will get complicated fast @@ -77,7 +75,7 @@ export async function connectWithConnectionString( } await browser.clickVisible(Selectors.SidebarNewConnectionButton); - await browser.$(Selectors.ConnectionModal).waitForDisplayed(); + await browser.waitForOpenModal(Selectors.ConnectionModal); await browser.setValueVisible( Selectors.ConnectionFormStringInput, diff --git a/packages/compass-e2e-tests/helpers/commands/create-index.ts b/packages/compass-e2e-tests/helpers/commands/create-index.ts index 847f674ddd4..76326f23517 100644 --- a/packages/compass-e2e-tests/helpers/commands/create-index.ts +++ b/packages/compass-e2e-tests/helpers/commands/create-index.ts @@ -51,8 +51,8 @@ export async function createIndex( } else { await browser.clickVisible(Selectors.CreateIndexButton); } - const createModal = browser.$(Selectors.CreateIndexModal); - await createModal.waitForDisplayed(); + + await browser.waitForOpenModal(Selectors.CreateIndexModal); // Select / type field name await browser.setComboBoxValue( @@ -114,7 +114,7 @@ export async function createIndex( await browser.clickVisible(Selectors.CreateIndexConfirmButton); // Assert that modal goes away - await createModal.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.CreateIndexModal, { reverse: true }); // Assert that index does come in table const indexComponentSelector = Selectors.indexComponent(indexName); diff --git a/packages/compass-e2e-tests/helpers/commands/drop-index.ts b/packages/compass-e2e-tests/helpers/commands/drop-index.ts index 263c202599e..cc8c6517e2d 100644 --- a/packages/compass-e2e-tests/helpers/commands/drop-index.ts +++ b/packages/compass-e2e-tests/helpers/commands/drop-index.ts @@ -15,8 +15,7 @@ export async function dropIndex( `${indexComponentSelector} ${Selectors.IndexesTableDropIndexButton}` ); - const dropModal = browser.$(Selectors.DropIndexModal); - await dropModal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.DropIndexModal); await browser.setValueVisible( Selectors.DropIndexModalConfirmNameInput, @@ -29,7 +28,7 @@ export async function dropIndex( await browser.clickVisible(Selectors.DropIndexModalConfirmButton); - await dropModal.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.DropIndexModal, { reverse: true }); await indexComponent.waitForDisplayed({ reverse: true }); } diff --git a/packages/compass-e2e-tests/helpers/commands/drop-namespace.ts b/packages/compass-e2e-tests/helpers/commands/drop-namespace.ts index e3c55b5899b..3d5a6c1207b 100644 --- a/packages/compass-e2e-tests/helpers/commands/drop-namespace.ts +++ b/packages/compass-e2e-tests/helpers/commands/drop-namespace.ts @@ -5,8 +5,7 @@ export async function dropNamespace( browser: CompassBrowser, collectionName: string ): Promise { - const dropModalElement = browser.$(Selectors.DropNamespaceModal); - await dropModalElement.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.DropNamespaceModal); await browser.setValueVisible( Selectors.DropNamespaceConfirmNameInput, collectionName @@ -15,6 +14,9 @@ export async function dropNamespace( await confirmButton.waitForEnabled(); await confirmButton.click(); + await browser.waitForOpenModal(Selectors.DropNamespaceModal, { + reverse: true, + }); const successToast = browser.$(Selectors.DropNamespaceSuccessToast); await successToast.waitForDisplayed(); diff --git a/packages/compass-e2e-tests/helpers/commands/export-to-language.ts b/packages/compass-e2e-tests/helpers/commands/export-to-language.ts index a0cd3a19f2b..452e89e4735 100644 --- a/packages/compass-e2e-tests/helpers/commands/export-to-language.ts +++ b/packages/compass-e2e-tests/helpers/commands/export-to-language.ts @@ -12,8 +12,7 @@ export async function exportToLanguage( language: string, options?: ExportToLanguageOptions ): Promise { - const exportModal = browser.$(Selectors.ExportToLanguageModal); - await exportModal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.ExportToLanguageModal); // pick the language await browser.waitUntil(async () => { @@ -65,7 +64,9 @@ export async function exportToLanguage( // close the modal again await browser.clickVisible(Selectors.ExportToLanguageCloseButton); - await exportModal.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.ExportToLanguageModal, { + reverse: true, + }); // normalize copied text so that it's the same for all platforms return text.replace(/\r\n/g, '\n').replace(/\n+/g, '\n'); diff --git a/packages/compass-e2e-tests/helpers/commands/get-open-modals.ts b/packages/compass-e2e-tests/helpers/commands/get-open-modals.ts new file mode 100644 index 00000000000..830d6eb73f5 --- /dev/null +++ b/packages/compass-e2e-tests/helpers/commands/get-open-modals.ts @@ -0,0 +1,29 @@ +import { Selectors } from '../compass'; +import type { CompassBrowser } from '../compass-browser'; + +import Debug from 'debug'; + +const debug = Debug('compass-e2e-tests'); + +// TODO: Wait for any animation to settle before resolving? +export function getOpenModals( + browser: CompassBrowser, + selector: Parameters[0] = Selectors.LGModal +): Promise { + return browser.$$(selector).filter(async (element) => { + try { + const tagName = await element.getTagName(); + if (tagName !== 'dialog') { + throw new Error( + `Expected selector to match dialogs, matched '${tagName}'` + ); + } + const open = await element.getAttribute('open'); + return open === 'true'; + } catch (err) { + // Most likely, the element disappeared after it got selected + debug('ignoring', err instanceof Error ? err.stack : err); + return false; + } + }); +} diff --git a/packages/compass-e2e-tests/helpers/commands/hide-visible-modal.ts b/packages/compass-e2e-tests/helpers/commands/hide-visible-modal.ts index 11125cc4e83..f0f92917564 100644 --- a/packages/compass-e2e-tests/helpers/commands/hide-visible-modal.ts +++ b/packages/compass-e2e-tests/helpers/commands/hide-visible-modal.ts @@ -10,15 +10,16 @@ export async function hideVisibleModal(browser: CompassBrowser): Promise { // the same time we're trying to close the modal, then make it error out // quickly so it can be ignored and we move on. - if (await browser.$(Selectors.LGModal).isDisplayed()) { - // close any modals that might be in the way - const waitOptions = { timeout: 2_000 }; + const openModals = await browser.getOpenModals(Selectors.LGModal); + for (const modal of openModals) { try { - await browser.clickVisible(Selectors.LGModalClose, waitOptions); - await browser.$(Selectors.LGModal).waitForDisplayed({ reverse: true }); + await browser.clickVisible(browser.$(modal).$(Selectors.LGModalClose), { + timeout: 2_000, + }); + await browser.waitForOpenModal(modal, { reverse: true, timeout: 2_000 }); } catch (err) { // if the modal disappears by itself in the meantime, that's fine - debug('ignoring', err); + debug('ignoring', err instanceof Error ? err.stack : err); } } } diff --git a/packages/compass-e2e-tests/helpers/commands/index.ts b/packages/compass-e2e-tests/helpers/commands/index.ts index 3b56971674b..f5a6da81efb 100644 --- a/packages/compass-e2e-tests/helpers/commands/index.ts +++ b/packages/compass-e2e-tests/helpers/commands/index.ts @@ -67,3 +67,7 @@ export * from './read-stage-operators'; export * from './click-confirmation-action'; export * from './get-input-by-label'; export * from './resize-window'; +export * from './get-open-modals'; +export * from './is-modal-open'; +export * from './is-modal-eventually-open'; +export * from './wait-for-open-modal'; diff --git a/packages/compass-e2e-tests/helpers/commands/is-modal-eventually-open.ts b/packages/compass-e2e-tests/helpers/commands/is-modal-eventually-open.ts new file mode 100644 index 00000000000..a871e6ceb90 --- /dev/null +++ b/packages/compass-e2e-tests/helpers/commands/is-modal-eventually-open.ts @@ -0,0 +1,16 @@ +import { Selectors } from '../compass'; +import type { CompassBrowser } from '../compass-browser'; + +export async function isModalEventuallyOpen( + browser: CompassBrowser, + selector: Parameters[0] = Selectors.LGModal, + timeout?: number +): Promise { + try { + await browser.waitForOpenModal(selector, { timeout }); + // return true if it opens before the timeout expires + return true; + } catch { + return false; + } +} diff --git a/packages/compass-e2e-tests/helpers/commands/is-modal-open.ts b/packages/compass-e2e-tests/helpers/commands/is-modal-open.ts new file mode 100644 index 00000000000..f0581051f75 --- /dev/null +++ b/packages/compass-e2e-tests/helpers/commands/is-modal-open.ts @@ -0,0 +1,10 @@ +import { Selectors } from '../compass'; +import type { CompassBrowser } from '../compass-browser'; + +export async function isModalOpen( + browser: CompassBrowser, + selector: Parameters[0] = Selectors.LGModal +): Promise { + const modals = await browser.getOpenModals(selector); + return modals.length > 0; +} diff --git a/packages/compass-e2e-tests/helpers/commands/open-settings-modal.ts b/packages/compass-e2e-tests/helpers/commands/open-settings-modal.ts index bee67004904..934690a46a5 100644 --- a/packages/compass-e2e-tests/helpers/commands/open-settings-modal.ts +++ b/packages/compass-e2e-tests/helpers/commands/open-settings-modal.ts @@ -10,8 +10,7 @@ export async function openSettingsModal( require('electron').ipcRenderer.emit('window:show-settings'); }); - const settingsModalElement = browser.$(Selectors.SettingsModal); - await settingsModalElement.waitForExist(); + await browser.waitForOpenModal(Selectors.SettingsModal); if (tab) { await browser.clickVisible(Selectors.SettingsModalTabSelector(tab)); } diff --git a/packages/compass-e2e-tests/helpers/commands/save-aggregation-pipeline.ts b/packages/compass-e2e-tests/helpers/commands/save-aggregation-pipeline.ts index f0f9c580be7..01878d67c35 100644 --- a/packages/compass-e2e-tests/helpers/commands/save-aggregation-pipeline.ts +++ b/packages/compass-e2e-tests/helpers/commands/save-aggregation-pipeline.ts @@ -34,8 +34,7 @@ export async function saveAggregationPipeline( await browser.clickVisible(Selectors.SavePipelineSaveAsAction); // wait for the modal to appear - const savePipelineModal = browser.$(Selectors.SavePipelineModal); - await savePipelineModal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.SavePipelineModal); // set aggregation name await browser.waitForAnimations(Selectors.SavePipelineNameInput); @@ -49,7 +48,9 @@ export async function saveAggregationPipeline( await createButton.click(); // wait for the modal to disappear - await savePipelineModal.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.SavePipelineModal, { + reverse: true, + }); // Wait for the aggregation's name to be displayed. await browser.waitForAnimations(Selectors.AggregationPipelineName); diff --git a/packages/compass-e2e-tests/helpers/commands/save-favorite.ts b/packages/compass-e2e-tests/helpers/commands/save-favorite.ts index 4b53e0ba15c..9f72ed9a304 100644 --- a/packages/compass-e2e-tests/helpers/commands/save-favorite.ts +++ b/packages/compass-e2e-tests/helpers/commands/save-favorite.ts @@ -20,6 +20,5 @@ export async function saveFavorite( }); await browser.clickVisible(Selectors.ConnectionModalSaveButton); - await browser.$(Selectors.ConnectionModal).waitForExist({ reverse: true }); - return; + await browser.waitForOpenModal(Selectors.ConnectionModal, { reverse: true }); } diff --git a/packages/compass-e2e-tests/helpers/commands/try-to-insert-document.ts b/packages/compass-e2e-tests/helpers/commands/try-to-insert-document.ts index 87334159004..bb5a90201cd 100644 --- a/packages/compass-e2e-tests/helpers/commands/try-to-insert-document.ts +++ b/packages/compass-e2e-tests/helpers/commands/try-to-insert-document.ts @@ -13,8 +13,7 @@ export async function tryToInsertDocument( await browser.clickVisible(Selectors.InsertDocumentOption); // wait for the modal to appear - const insertDialog = browser.$(Selectors.InsertDialog); - await insertDialog.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.InsertDialog); if (document) { // set the text in the editor @@ -27,7 +26,7 @@ export async function tryToInsertDocument( // confirm const insertConfirm = browser.$(Selectors.InsertConfirm); // this selector is very brittle, so just make sure it works - expect(await insertConfirm.isDisplayed()).to.be.true; + await insertConfirm.waitForDisplayed(); expect(await insertConfirm.getText()).to.equal('Insert'); await insertConfirm.waitForEnabled(); await browser.clickVisible(Selectors.InsertConfirm); diff --git a/packages/compass-e2e-tests/helpers/commands/wait-for-open-modal.ts b/packages/compass-e2e-tests/helpers/commands/wait-for-open-modal.ts new file mode 100644 index 00000000000..8ac214fd460 --- /dev/null +++ b/packages/compass-e2e-tests/helpers/commands/wait-for-open-modal.ts @@ -0,0 +1,34 @@ +import { inspect } from 'node:util'; +import type { WaitForOptions } from 'webdriverio'; +import type { CompassBrowser } from '../compass-browser'; + +export async function waitForOpenModal( + browser: CompassBrowser, + selector: Parameters[0], + { reverse = false, ...options }: WaitForOptions = {} +): Promise { + await browser.waitUntil( + async () => { + const modals = await browser.getOpenModals(selector); + if (reverse) { + return modals.length === 0; + } else { + for (const modal of modals) { + // Ensure any modals are interactable if open + await modal.waitForClickable({ + timeout: 500, + timeoutMsg: 'Timeout waiting for open modal to become clickable', + }); + } + return modals.length > 0; + } + }, + { + timeout: 2_000, + timeoutMsg: `Timeout waiting for modal '${inspect(selector)}' to ${ + reverse ? 'close' : 'open' + }`, + ...options, + } + ); +} diff --git a/packages/compass-e2e-tests/helpers/commands/workspace-tabs.ts b/packages/compass-e2e-tests/helpers/commands/workspace-tabs.ts index 068d24e7dd8..20848ab69ff 100644 --- a/packages/compass-e2e-tests/helpers/commands/workspace-tabs.ts +++ b/packages/compass-e2e-tests/helpers/commands/workspace-tabs.ts @@ -38,13 +38,13 @@ async function closeTab( if (autoConfirmTabClose) { // Tabs in "dirty" state can't be closed without confirmation - if (await browser.$(Selectors.ConfirmTabCloseModal).isExisting()) { + if (await browser.isModalOpen(Selectors.ConfirmTabCloseModal)) { await browser.clickVisible( browser.$(Selectors.ConfirmTabCloseModal).$('button=Close tab') ); - await browser - .$(Selectors.ConfirmTabCloseModal) - .waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.ConfirmTabCloseModal, { + reverse: true, + }); } } return ( diff --git a/packages/compass-e2e-tests/helpers/selectors.ts b/packages/compass-e2e-tests/helpers/selectors.ts index 878243c1a25..47340afcaf1 100644 --- a/packages/compass-e2e-tests/helpers/selectors.ts +++ b/packages/compass-e2e-tests/helpers/selectors.ts @@ -25,8 +25,8 @@ export const SettingsInputElement = (settingName: string): string => { }; // LG Modals -export const LGModal = '[data-testid="lg-modal"]'; -export const LGModalClose = '[data-testid="lg-modal-close"]'; +export const LGModal = '[data-lgid="lg-modal"]'; +export const LGModalClose = '[data-lgid="lg-modal-close"]'; // LG Toasts container (these test ids are used by LG in the toast and are not in the code anywhere). export const LGToastContainer = '[data-testid="lg-toast-scroll-container"]'; @@ -1330,11 +1330,11 @@ export const ConfirmationModalInput = `${ConfirmationModal} input`; export const confirmationModalConfirmButton = ( modalSelector = ConfirmationModal -) => `${modalSelector} [role=dialog] [data-testid*="confirm_button"]`; +) => `${modalSelector} [data-testid*="confirm_button"]`; export const confirmationModalCancelButton = ( modalSelector = ConfirmationModal -) => `${modalSelector} [role=dialog] [data-testid*="cancel_button"]`; +) => `${modalSelector} [data-testid*="cancel_button"]`; // New pipeline from text modal export const NewPipelineFromTextModal = '[data-testid="import-pipeline-modal"]'; diff --git a/packages/compass-e2e-tests/tests/assistant.test.ts b/packages/compass-e2e-tests/tests/assistant.test.ts index f4c060210ce..a2a18746e6c 100644 --- a/packages/compass-e2e-tests/tests/assistant.test.ts +++ b/packages/compass-e2e-tests/tests/assistant.test.ts @@ -230,8 +230,7 @@ describe('MongoDB Assistant', function () { await browser.clickVisible(Selectors.AIOptInModalDeclineLink); - const optInModal = browser.$(Selectors.AIOptInModal); - await optInModal.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.AIOptInModal, { reverse: true }); const chatInput = browser.$(Selectors.AssistantChatInputTextArea); expect(await chatInput.getValue()).not.to.equal(testMessage); @@ -251,13 +250,13 @@ describe('MongoDB Assistant', function () { browser.$(Selectors.ConnectionToastErrorDebugButton) ); - const optInModal = browser.$(Selectors.AIOptInModal); - await optInModal.waitForDisplayed(); - expect(await optInModal.isDisplayed()).to.be.true; + await browser.waitForOpenModal(Selectors.AIOptInModal); await browser.clickVisible(Selectors.AIOptInModalDeclineLink); - await optInModal.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.AIOptInModal, { + reverse: true, + }); expect( await browser.$(Selectors.AssistantChatMessages).isDisplayed() @@ -267,13 +266,12 @@ describe('MongoDB Assistant', function () { it('should display opt-in modal for explain plan entry point', async function () { await useExplainPlanEntryPoint(browser, { waitForMessages: false }); - const optInModal = browser.$(Selectors.AIOptInModal); - await optInModal.waitForDisplayed(); - expect(await optInModal.isDisplayed()).to.be.true; + await browser.waitForOpenModal(Selectors.AIOptInModal); await browser.clickVisible(Selectors.AIOptInModalDeclineLink); - - await optInModal.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.AIOptInModal, { + reverse: true, + }); expect( await browser.$(Selectors.AssistantChatMessages).isDisplayed() @@ -296,13 +294,10 @@ describe('MongoDB Assistant', function () { it('sends the message if the user opts in', async function () { await sendMessage(testMessage, { expectedResult: 'opt-in' }); - const optInModal = browser.$(Selectors.AIOptInModal); - await optInModal.waitForDisplayed(); - expect(await optInModal.isDisplayed()).to.be.true; + await browser.waitForOpenModal(Selectors.AIOptInModal); await browser.clickVisible(Selectors.AIOptInModalAcceptButton); - - await optInModal.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.AIOptInModal, { reverse: true }); const chatInput = browser.$(Selectors.AssistantChatInputTextArea); expect(await chatInput.getValue()).to.equal(''); @@ -622,7 +617,7 @@ async function useExplainPlanEntryPoint( await browser.clickVisible(Selectors.ExplainPlanInterpretButton); - await browser.$(Selectors.AggregationExplainModal).waitForDisplayed({ + await browser.waitForOpenModal(Selectors.AggregationExplainModal, { reverse: true, }); diff --git a/packages/compass-e2e-tests/tests/auto-connect.test.ts b/packages/compass-e2e-tests/tests/auto-connect.test.ts index 6d9e302a62c..f978dcffe5b 100644 --- a/packages/compass-e2e-tests/tests/auto-connect.test.ts +++ b/packages/compass-e2e-tests/tests/auto-connect.test.ts @@ -201,7 +201,7 @@ describe('Automatically connecting from the command line', function () { ); expect(error).to.include('Authentication failed'); await browser.clickVisible(Selectors.ConnectionToastErrorReviewButton); - await browser.$(Selectors.ConnectionModal).waitForDisplayed(); + await browser.waitForOpenModal(Selectors.ConnectionModal); const connectFormState = await browser.getConnectFormState(); expect(connectFormState.defaultUsername).to.equal('doesnotexist'); expect(connectFormState.defaultPassword).to.equal('asdf/'); diff --git a/packages/compass-e2e-tests/tests/collection-aggregations-tab.test.ts b/packages/compass-e2e-tests/tests/collection-aggregations-tab.test.ts index fa9c346f181..c402b55b7c5 100644 --- a/packages/compass-e2e-tests/tests/collection-aggregations-tab.test.ts +++ b/packages/compass-e2e-tests/tests/collection-aggregations-tab.test.ts @@ -383,8 +383,7 @@ describe('Collection aggregations tab', function () { await browser.clickVisible(Selectors.SavePipelineCreateViewAction); // wait for the modal to appear - const createViewModal = browser.$(Selectors.CreateViewModal); - await createViewModal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.CreateViewModal); // set view name await browser.setValueVisible( @@ -409,10 +408,9 @@ describe('Collection aggregations tab', function () { 'my-view-from-pipeline', 'duplicate-view' ); - const duplicateModal = browser.$(Selectors.DuplicateViewModal); // wait for the modal, fill out the modal, confirm - await duplicateModal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.DuplicateViewModal); await browser.setValueVisible( Selectors.DuplicateViewModalTextInput, 'duplicated-view' @@ -423,7 +421,9 @@ describe('Collection aggregations tab', function () { await confirmDuplicateButton.waitForEnabled(); await confirmDuplicateButton.click(); - await duplicateModal.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.DuplicateViewModal, { + reverse: true, + }); // wait for the active tab to become the newly duplicated view await waitForTab(browser, 'test.duplicated-view'); @@ -479,8 +479,8 @@ describe('Collection aggregations tab', function () { await browser.setFeature('maxTimeMS', 1); } else { await browser.openSettingsModal(); - const settingsModal = browser.$(Selectors.SettingsModal); - await settingsModal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.SettingsModal); + await browser.clickVisible(Selectors.GeneralSettingsButton); await browser.setValueVisible( @@ -565,10 +565,9 @@ describe('Collection aggregations tab', function () { await browser.clickVisible(Selectors.RunPipelineButton); // confirm the write operation - const writeOperationConfirmationModal = browser.$( + await browser.waitForOpenModal( Selectors.AggregationWriteOperationConfirmationModal ); - await writeOperationConfirmationModal.waitForDisplayed(); const description = await browser .$(Selectors.AggregationWriteOperationConfirmationModalDescription) @@ -581,7 +580,10 @@ describe('Collection aggregations tab', function () { Selectors.AggregationWriteOperationConfirmButton ); - await writeOperationConfirmationModal.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal( + Selectors.AggregationWriteOperationConfirmationModal, + { reverse: true } + ); // go to the new collection const goToCollectionButton = browser.$(Selectors.GoToCollectionButton); @@ -642,10 +644,9 @@ describe('Collection aggregations tab', function () { await browser.clickVisible(Selectors.RunPipelineButton); // confirm the write operation - const writeOperationConfirmationModal = browser.$( + await browser.waitForOpenModal( Selectors.AggregationWriteOperationConfirmationModal ); - await writeOperationConfirmationModal.waitForDisplayed(); const description = await browser .$(Selectors.AggregationWriteOperationConfirmationModalDescription) @@ -657,7 +658,10 @@ describe('Collection aggregations tab', function () { Selectors.AggregationWriteOperationConfirmButton ); - await writeOperationConfirmationModal.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal( + Selectors.AggregationWriteOperationConfirmationModal, + { reverse: true } + ); const errorElement = browser.$(Selectors.AggregationErrorBanner); await errorElement.waitForDisplayed(); @@ -673,17 +677,14 @@ describe('Collection aggregations tab', function () { await errorElement.waitForDisplayed(); await errorDetailsBtn.click(); - const errorDetailsJson = browser.$(Selectors.ErrorDetailsJson); - await errorDetailsJson.waitForDisplayed(); + await browser.$(Selectors.ErrorDetailsJson).waitForDisplayed(); - // exit details - // leafygreen autofocus triggers a tooltip on the error code element, - // "Tab" to remove the focus - await browser.keys('Tab'); // now click the close button await browser.clickVisible(Selectors.confirmationModalConfirmButton()); // wait for the modal to go away - await errorDetailsJson.waitForDisplayed({ reverse: true }); + await browser.$(Selectors.ErrorDetailsJson).waitForDisplayed({ + reverse: true, + }); }); }); @@ -714,10 +715,9 @@ describe('Collection aggregations tab', function () { await browser.clickVisible(Selectors.RunPipelineButton); // confirm the write operation - const writeOperationConfirmationModal = browser.$( + await browser.waitForOpenModal( Selectors.AggregationWriteOperationConfirmationModal ); - await writeOperationConfirmationModal.waitForDisplayed(); const description = await browser .$(Selectors.AggregationWriteOperationConfirmationModalDescription) @@ -727,7 +727,10 @@ describe('Collection aggregations tab', function () { expect(description).to.contain('test.numbers'); await browser.clickVisible(Selectors.AggregationWriteOperationCancelButton); - await writeOperationConfirmationModal.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal( + Selectors.AggregationWriteOperationConfirmationModal, + { reverse: true } + ); // the pipeline can be futher edited await waitForAnyText(browser, browser.$(Selectors.stageContent(0))); @@ -762,10 +765,9 @@ describe('Collection aggregations tab', function () { await browser.clickVisible(Selectors.RunPipelineButton); // confirm the write operation - const writeOperationConfirmationModal = browser.$( + await browser.waitForOpenModal( Selectors.AggregationWriteOperationConfirmationModal ); - await writeOperationConfirmationModal.waitForDisplayed(); const description = await browser .$(Selectors.AggregationWriteOperationConfirmationModalDescription) @@ -778,7 +780,10 @@ describe('Collection aggregations tab', function () { Selectors.AggregationWriteOperationConfirmButton ); - await writeOperationConfirmationModal.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal( + Selectors.AggregationWriteOperationConfirmationModal, + { reverse: true } + ); // go to the new collection const goToCollectionButton = browser.$(Selectors.GoToCollectionButton); @@ -824,10 +829,9 @@ describe('Collection aggregations tab', function () { await browser.clickVisible(Selectors.RunPipelineButton); // confirm the write operation - const writeOperationConfirmationModal = browser.$( + await browser.waitForOpenModal( Selectors.AggregationWriteOperationConfirmationModal ); - await writeOperationConfirmationModal.waitForDisplayed(); const description = await browser .$(Selectors.AggregationWriteOperationConfirmationModalDescription) @@ -837,7 +841,10 @@ describe('Collection aggregations tab', function () { expect(description).to.contain('test.numbers'); await browser.clickVisible(Selectors.AggregationWriteOperationCancelButton); - await writeOperationConfirmationModal.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal( + Selectors.AggregationWriteOperationConfirmationModal, + { reverse: true } + ); // the pipeline can be futher edited await waitForAnyText(browser, browser.$(Selectors.stageContent(0))); @@ -981,8 +988,7 @@ describe('Collection aggregations tab', function () { // Open the modal. await browser.clickVisible(Selectors.ExportAggregationResultsButton); - const exportModal = browser.$(Selectors.ExportModal); - await exportModal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.ExportModal); // Make sure the aggregation is shown in the modal. const exportModalAggregationTextElement = browser.$( @@ -1001,10 +1007,7 @@ describe('Collection aggregations tab', function () { await browser.setExportFilename(filename); // Wait for the modal to go away. - const exportModalElement = browser.$(Selectors.ExportModal); - await exportModalElement.waitForDisplayed({ - reverse: true, - }); + await browser.waitForOpenModal(Selectors.ExportModal, { reverse: true }); await browser.waitForExportToFinishAndCloseToast(); @@ -1028,15 +1031,16 @@ describe('Collection aggregations tab', function () { await browser.clickVisible(Selectors.AggregationExplainButton); await browser.waitForAnimations(Selectors.AggregationExplainModal); + await browser.waitForOpenModal(Selectors.AggregationExplainModal); - const modal = browser.$(Selectors.AggregationExplainModal); - await modal.waitForDisplayed(); - await browser.waitForAnimations(Selectors.AggregationExplainModal); - - expect(await modal.getText()).to.contain('Query Performance Summary'); + expect( + await browser.$(Selectors.AggregationExplainModal).getText() + ).to.contain('Query Performance Summary'); await browser.clickVisible(Selectors.AggregationExplainModalCloseButton); - await modal.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.AggregationExplainModal, { + reverse: true, + }); }); it('shows confirmation modal when create new pipeline is clicked and aggregation is modified', async function () { @@ -1309,8 +1313,8 @@ describe('Collection aggregations tab', function () { '{ i: 5 }' ); await browser.clickVisible(Selectors.stageFocusModeButton(0)); - const modal = browser.$(Selectors.FocusModeModal); - await modal.waitForDisplayed(); + + await browser.waitForOpenModal(Selectors.FocusModeModal); await browser.$(Selectors.FocusModeStageInput).waitForDisplayed(); await browser.$(Selectors.FocusModeStageEditor).waitForDisplayed(); @@ -1318,7 +1322,9 @@ describe('Collection aggregations tab', function () { await browser.clickVisible(Selectors.FocusModeCloseModalButton); - await modal.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.FocusModeModal, { + reverse: true, + }); }); it('navigates between stages', async function () { @@ -1342,8 +1348,7 @@ describe('Collection aggregations tab', function () { ); await browser.clickVisible(Selectors.stageFocusModeButton(0)); - const modal = browser.$(Selectors.FocusModeModal); - await modal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.FocusModeModal); const nextButton = browser.$(Selectors.FocusModeNextStageButton); const previousButton = browser.$(Selectors.FocusModePreviousStageButton); @@ -1387,7 +1392,9 @@ describe('Collection aggregations tab', function () { await browser.clickVisible(Selectors.FocusModeCloseModalButton); - await modal.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.FocusModeModal, { + reverse: true, + }); }); it('adds a new stage before or after current stage', async function () { @@ -1398,8 +1405,7 @@ describe('Collection aggregations tab', function () { ); await browser.clickVisible(Selectors.stageFocusModeButton(0)); - const modal = browser.$(Selectors.FocusModeModal); - await modal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.FocusModeModal); await browser.waitUntil(async () => { const activeStage = browser.$(Selectors.FocusModeActiveStageLabel); @@ -1439,7 +1445,9 @@ describe('Collection aggregations tab', function () { await browser.clickVisible(Selectors.FocusModeCloseModalButton); - await modal.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.FocusModeModal, { + reverse: true, + }); }); it('hides stage input and output when preview is disabled', async function () { @@ -1452,8 +1460,7 @@ describe('Collection aggregations tab', function () { ); await browser.clickVisible(Selectors.stageFocusModeButton(0)); - const modal = browser.$(Selectors.FocusModeModal); - await modal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.FocusModeModal); await browser .$(Selectors.FocusModeStageInput) @@ -1472,8 +1479,7 @@ describe('Collection aggregations tab', function () { ); await browser.clickVisible(Selectors.stageFocusModeButton(0)); - const modal = browser.$(Selectors.FocusModeModal); - await modal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.FocusModeModal); await browser.waitUntil(async () => { const outputElem = browser.$(Selectors.FocusModeStageOutput); @@ -1490,8 +1496,7 @@ describe('Collection aggregations tab', function () { ); await browser.clickVisible(Selectors.stageFocusModeButton(0)); - const modal = browser.$(Selectors.FocusModeModal); - await modal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.FocusModeModal); await browser.waitUntil(async () => { const outputElem = browser.$(Selectors.FocusModeStageOutput); @@ -1505,8 +1510,7 @@ describe('Collection aggregations tab', function () { await browser.setCodemirrorEditorValue(Selectors.stageEditor(0), '{}'); await browser.clickVisible(Selectors.stageFocusModeButton(0)); - const modal = browser.$(Selectors.FocusModeModal); - await modal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.FocusModeModal); await browser.waitUntil(async () => { const outputElem = browser.$(Selectors.FocusModeStageOutput); @@ -1713,8 +1717,7 @@ describe('Collection aggregations tab', function () { await browser.setCodemirrorEditorValue(Selectors.stageEditor(1), '1'); await browser.clickVisible(Selectors.stageFocusModeButton(0)); - const modal = browser.$(Selectors.FocusModeModal); - await modal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.FocusModeModal); await browser.$(Selectors.FocusModeStageInput).waitForDisplayed(); await browser.$(Selectors.FocusModeStageEditor).waitForDisplayed(); diff --git a/packages/compass-e2e-tests/tests/collection-bulk-delete.test.ts b/packages/compass-e2e-tests/tests/collection-bulk-delete.test.ts index 297b9dee1a2..ca3749541f9 100644 --- a/packages/compass-e2e-tests/tests/collection-bulk-delete.test.ts +++ b/packages/compass-e2e-tests/tests/collection-bulk-delete.test.ts @@ -57,7 +57,7 @@ describe('Bulk Delete', function () { // Open the modal. await browser.clickVisible(Selectors.OpenBulkDeleteButton); - await browser.$(Selectors.BulkDeleteModal).waitForDisplayed(); + await browser.waitForOpenModal(Selectors.BulkDeleteModal); // Check the telemetry const openedEvent = await telemetryEntry('Bulk Delete Opened'); @@ -84,12 +84,15 @@ describe('Bulk Delete', function () { await browser.clickVisible(Selectors.BulkDeleteModalDeleteButton); // The modal should go away - await browser - .$(Selectors.BulkDeleteModal) - .waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.BulkDeleteModal, { + reverse: true, + }); // Press delete in the confirmation modal await browser.clickVisible(Selectors.confirmationModalConfirmButton()); + await browser.waitForOpenModal(Selectors.ConfirmationModal, { + reverse: true, + }); await browser.runFindOperation('Documents', '{ i: 5 }'); // Check the telemetry @@ -131,7 +134,7 @@ describe('Bulk Delete', function () { // Open the modal. await browser.clickVisible(Selectors.OpenBulkDeleteButton); - await browser.$(Selectors.BulkDeleteModal).waitForDisplayed(); + await browser.waitForOpenModal(Selectors.BulkDeleteModal); // Check that it will update the expected number of documents expect(await browser.$(Selectors.BulkDeleteModalTitle).getText()).to.equal( @@ -146,9 +149,9 @@ describe('Bulk Delete', function () { await browser.clickVisible(Selectors.BulkDeleteModalDeleteButton); // The modal should go away - await browser - .$(Selectors.BulkDeleteModal) - .waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.BulkDeleteModal, { + reverse: true, + }); // Press cancel in the confirmation modal await browser.clickVisible(Selectors.confirmationModalCancelButton()); @@ -173,7 +176,7 @@ describe('Bulk Delete', function () { // Open the modal. await browser.clickVisible(Selectors.OpenBulkDeleteButton); - await browser.$(Selectors.BulkDeleteModal).waitForDisplayed(); + await browser.waitForOpenModal(Selectors.BulkDeleteModal); // Click the export button await browser.clickVisible(Selectors.BulkDeleteModalExportButton); diff --git a/packages/compass-e2e-tests/tests/collection-bulk-update.test.ts b/packages/compass-e2e-tests/tests/collection-bulk-update.test.ts index 39a41421ec4..ebf333a63eb 100644 --- a/packages/compass-e2e-tests/tests/collection-bulk-update.test.ts +++ b/packages/compass-e2e-tests/tests/collection-bulk-update.test.ts @@ -57,7 +57,7 @@ describe('Bulk Update', () => { // Open the modal. await browser.clickVisible(Selectors.OpenBulkUpdateButton); - await browser.$(Selectors.BulkUpdateModal).waitForDisplayed(); + await browser.waitForOpenModal(Selectors.BulkUpdateModal); // Check the telemetry const openedEvent = await telemetryEntry('Bulk Update Opened'); @@ -105,9 +105,9 @@ describe('Bulk Update', () => { await browser.clickVisible(Selectors.BulkUpdateUpdateButton); // The modal should go away - await browser - .$(Selectors.BulkUpdateModal) - .waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.BulkUpdateModal, { + reverse: true, + }); // The success toast is displayed await browser.$(Selectors.BulkUpdateSuccessToast).waitForDisplayed(); @@ -152,7 +152,7 @@ describe('Bulk Update', () => { // Open the modal. await browser.clickVisible(Selectors.OpenBulkUpdateButton); - await browser.$(Selectors.BulkUpdateModal).waitForDisplayed(); + await browser.waitForOpenModal(Selectors.BulkUpdateModal); // Change the update text await browser.setCodemirrorEditorValue( @@ -186,9 +186,9 @@ describe('Bulk Update', () => { await browser.clickVisible(Selectors.BulkUpdateCancelButton); // Wait for the modal to go away - await browser - .$(Selectors.BulkUpdateModal) - .waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.BulkUpdateModal, { + reverse: true, + }); // Open the dropdown await browser.clickVisible(Selectors.QueryBarHistoryButton); @@ -216,7 +216,7 @@ describe('Bulk Update', () => { }); // The modal should open - await browser.$(Selectors.BulkUpdateModal).waitForDisplayed(); + await browser.waitForOpenModal(Selectors.BulkUpdateModal); // Make sure the query is shown in the modal. expect( diff --git a/packages/compass-e2e-tests/tests/collection-documents-tab.test.ts b/packages/compass-e2e-tests/tests/collection-documents-tab.test.ts index c489500d18e..2b90b38decb 100644 --- a/packages/compass-e2e-tests/tests/collection-documents-tab.test.ts +++ b/packages/compass-e2e-tests/tests/collection-documents-tab.test.ts @@ -287,8 +287,7 @@ describe('Collection documents tab', function () { await browser.setFeature('maxTimeMS', 1); } else { await browser.openSettingsModal(); - const settingsModal = browser.$(Selectors.SettingsModal); - await settingsModal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.SettingsModal); await browser.clickVisible(Selectors.GeneralSettingsButton); await browser.setValueVisible( @@ -296,7 +295,9 @@ describe('Collection documents tab', function () { '1' ); await browser.clickVisible(Selectors.SaveSettingsButton); - await settingsModal.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.SettingsModal, { + reverse: true, + }); } } @@ -588,8 +589,7 @@ FindIterable result = collection.find(filter);`); await browser.clickVisible(Selectors.CloneDocumentButton); // wait for the modal to appear - const insertDialog = browser.$(Selectors.InsertDialog); - await insertDialog.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.InsertDialog); // set the text in the editor and insert the document await browser.setCodemirrorEditorValue( @@ -599,7 +599,7 @@ FindIterable result = collection.find(filter);`); const insertConfirm = browser.$(Selectors.InsertConfirm); await insertConfirm.waitForEnabled(); await browser.clickVisible(Selectors.InsertConfirm); - await insertDialog.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.InsertDialog, { reverse: true }); await browser.runFindOperation('Documents', '{ i: 10042 }'); @@ -724,17 +724,14 @@ FindIterable result = collection.find(filter);`); await errorElement.waitForDisplayed(); await errorDetailsBtn.click(); - const errorDetailsJson = browser.$(Selectors.ErrorDetailsJson); - await errorDetailsJson.waitForDisplayed(); + await browser.$(Selectors.ErrorDetailsJson).waitForDisplayed(); - // exit details - // leafygreen autofocus triggers a tooltip on the error code element, - // "Tab" to remove the focus - await browser.keys('Tab'); // now click the close button await browser.clickVisible(Selectors.confirmationModalConfirmButton()); // wait for the modal to go away - await errorDetailsJson.waitForDisplayed({ reverse: true }); + await browser.$(Selectors.ErrorDetailsJson).waitForDisplayed({ + reverse: true, + }); }); describe('Editing', function () { @@ -781,12 +778,13 @@ FindIterable result = collection.find(filter);`); await errorDetailsBtn.waitForDisplayed(); await errorDetailsBtn.click(); - const errorDetailsJson = browser.$(Selectors.ErrorDetailsJson); - await errorDetailsJson.waitForDisplayed(); + await browser.$(Selectors.ErrorDetailsJson).waitForDisplayed(); // exit details await browser.clickVisible(Selectors.confirmationModalConfirmButton()); - await errorDetailsJson.waitForDisplayed({ reverse: true }); + await browser.$(Selectors.ErrorDetailsJson).waitForDisplayed({ + reverse: true, + }); }); it('shows error info when editing via json view', async function () { @@ -830,12 +828,13 @@ FindIterable result = collection.find(filter);`); await errorDetailsBtn.waitForDisplayed(); await errorDetailsBtn.click(); - const errorDetailsJson = browser.$(Selectors.ErrorDetailsJson); - await errorDetailsJson.waitForDisplayed(); + await browser.$(Selectors.ErrorDetailsJson).waitForDisplayed(); // exit details await browser.clickVisible(Selectors.confirmationModalConfirmButton()); - await errorDetailsJson.waitForDisplayed({ reverse: true }); + await browser.$(Selectors.ErrorDetailsJson).waitForDisplayed({ + reverse: true, + }); }); it('shows error info when editing via table view', async function () { @@ -876,12 +875,13 @@ FindIterable result = collection.find(filter);`); await errorDetailsBtn.waitForDisplayed(); await errorDetailsBtn.click(); - const errorDetailsJson = browser.$(Selectors.ErrorDetailsJson); - await errorDetailsJson.waitForDisplayed(); + await browser.$(Selectors.ErrorDetailsJson).waitForDisplayed(); // exit details await browser.clickVisible(Selectors.confirmationModalConfirmButton()); - await errorDetailsJson.waitForDisplayed({ reverse: true }); + await browser.$(Selectors.ErrorDetailsJson).waitForDisplayed({ + reverse: true, + }); }); }); }); diff --git a/packages/compass-e2e-tests/tests/collection-export.test.ts b/packages/compass-e2e-tests/tests/collection-export.test.ts index dd6c90ac463..d225a997f7a 100644 --- a/packages/compass-e2e-tests/tests/collection-export.test.ts +++ b/packages/compass-e2e-tests/tests/collection-export.test.ts @@ -90,8 +90,7 @@ describe('Collection export', function () { // Open the modal. await browser.clickVisible(Selectors.ExportCollectionMenuButton); await browser.clickVisible(Selectors.ExportCollectionQueryOption); - const exportModal = browser.$(Selectors.ExportModal); - await exportModal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.ExportModal); // Make sure the query is shown in the modal. const exportModalQueryTextElement = browser.$( @@ -126,8 +125,7 @@ describe('Collection export', function () { await browser.setExportFilename(filename); // Wait for the modal to go away. - const exportModalElement = browser.$(Selectors.ExportModal); - await exportModalElement.waitForDisplayed({ + await browser.waitForOpenModal(Selectors.ExportModal, { reverse: true, }); @@ -172,8 +170,7 @@ describe('Collection export', function () { // Open the modal. await browser.clickVisible(Selectors.ExportCollectionMenuButton); await browser.clickVisible(Selectors.ExportCollectionQueryOption); - const exportModal = browser.$(Selectors.ExportModal); - await exportModal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.ExportModal); const exportModalQueryTextElement = browser.$( Selectors.ExportModalCodePreview @@ -198,8 +195,7 @@ describe('Collection export', function () { await browser.setExportFilename(filename); // Wait for the modal to go away. - const exportModalElement = browser.$(Selectors.ExportModal); - await exportModalElement.waitForDisplayed({ + await browser.waitForOpenModal(Selectors.ExportModal, { reverse: true, }); @@ -240,8 +236,7 @@ describe('Collection export', function () { // Open the modal. await browser.clickVisible(Selectors.ExportCollectionMenuButton); await browser.clickVisible(Selectors.ExportCollectionQueryOption); - const exportModal = browser.$(Selectors.ExportModal); - await exportModal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.ExportModal); // Make sure the query is shown in the modal. const exportModalQueryTextElement = browser.$( @@ -262,8 +257,7 @@ describe('Collection export', function () { await browser.setExportFilename(filename); // Wait for the modal to go away. - const exportModalElement = browser.$(Selectors.ExportModal); - await exportModalElement.waitForDisplayed({ + await browser.waitForOpenModal(Selectors.ExportModal, { reverse: true, }); @@ -307,8 +301,7 @@ describe('Collection export', function () { await browser.clickVisible( Selectors.ExportCollectionFullCollectionOption ); - const exportModal = browser.$(Selectors.ExportModal); - await exportModal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.ExportModal); // Export the entire collection. await selectExportFileTypeCSV(browser); @@ -318,8 +311,7 @@ describe('Collection export', function () { await browser.setExportFilename(filename); // Wait for the modal to go away. - const exportModalElement = browser.$(Selectors.ExportModal); - await exportModalElement.waitForDisplayed({ + await browser.waitForOpenModal(Selectors.ExportModal, { reverse: true, }); @@ -357,8 +349,7 @@ describe('Collection export', function () { // Open the modal. await browser.clickVisible(Selectors.ExportCollectionMenuButton); await browser.clickVisible(Selectors.ExportCollectionQueryOption); - const exportModal = browser.$(Selectors.ExportModal); - await exportModal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.ExportModal); // Make sure the query is shown in the modal. const exportModalQueryTextElement = browser.$( @@ -390,8 +381,7 @@ describe('Collection export', function () { await browser.setExportFilename(filename); // Wait for the modal to go away. - const exportModalElement = browser.$(Selectors.ExportModal); - await exportModalElement.waitForDisplayed({ + await browser.waitForOpenModal(Selectors.ExportModal, { reverse: true, }); @@ -436,8 +426,7 @@ describe('Collection export', function () { // Open the modal. await browser.clickVisible(Selectors.ExportCollectionMenuButton); await browser.clickVisible(Selectors.ExportCollectionQueryOption); - const exportModal = browser.$(Selectors.ExportModal); - await exportModal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.ExportModal); const exportModalQueryTextElement = browser.$( Selectors.ExportModalCodePreview @@ -462,8 +451,7 @@ describe('Collection export', function () { await browser.setExportFilename(filename); // Wait for the modal to go away. - const exportModalElement = browser.$(Selectors.ExportModal); - await exportModalElement.waitForDisplayed({ + await browser.waitForOpenModal(Selectors.ExportModal, { reverse: true, }); @@ -503,8 +491,7 @@ describe('Collection export', function () { await browser.clickVisible( Selectors.ExportCollectionFullCollectionOption ); - const exportModal = browser.$(Selectors.ExportModal); - await exportModal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.ExportModal); await browser.clickVisible(Selectors.ExportModalExportButton); @@ -513,8 +500,7 @@ describe('Collection export', function () { await browser.setExportFilename(filename); // Wait for the modal to go away. - const exportModalElement = browser.$(Selectors.ExportModal); - await exportModalElement.waitForDisplayed({ + await browser.waitForOpenModal(Selectors.ExportModal, { reverse: true, }); @@ -554,8 +540,7 @@ describe('Collection export', function () { await browser.clickVisible( Selectors.ExportCollectionFullCollectionOption ); - const exportModal = browser.$(Selectors.ExportModal); - await exportModal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.ExportModal); // Set the json format to canonical. await browser.clickVisible(Selectors.ExportJSONFormatAccordion); @@ -568,8 +553,7 @@ describe('Collection export', function () { await browser.setExportFilename(filename); // Wait for the modal to go away. - const exportModalElement = browser.$(Selectors.ExportModal); - await exportModalElement.waitForDisplayed({ + await browser.waitForOpenModal(Selectors.ExportModal, { reverse: true, }); @@ -610,8 +594,7 @@ describe('Collection export', function () { // Open the modal. await browser.clickVisible(Selectors.ExportCollectionMenuButton); await browser.clickVisible(Selectors.ExportCollectionQueryOption); - const exportModal = browser.$(Selectors.ExportModal); - await exportModal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.ExportModal); // Choose to export select fields. await browser.clickVisible(Selectors.ExportQuerySelectFieldsOption); @@ -632,8 +615,7 @@ describe('Collection export', function () { await browser.setExportFilename(filename); // Wait for the modal to go away. - const exportModalElement = browser.$(Selectors.ExportModal); - await exportModalElement.waitForDisplayed({ + await browser.waitForOpenModal(Selectors.ExportModal, { reverse: true, }); @@ -705,8 +687,7 @@ describe('Collection export', function () { // Open the modal. await browser.clickVisible(Selectors.ExportCollectionMenuButton); await browser.clickVisible(Selectors.ExportCollectionQueryOption); - const exportModal = browser.$(Selectors.ExportModal); - await exportModal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.ExportModal); // Choose to export select fields. await browser.clickVisible(Selectors.ExportQuerySelectFieldsOption); @@ -725,8 +706,7 @@ describe('Collection export', function () { await browser.setExportFilename(filename); // Wait for the modal to go away. - const exportModalElement = browser.$(Selectors.ExportModal); - await exportModalElement.waitForDisplayed({ + await browser.waitForOpenModal(Selectors.ExportModal, { reverse: true, }); @@ -792,8 +772,7 @@ describe('Collection export', function () { // Open the modal. await browser.clickVisible(Selectors.ExportCollectionMenuButton); await browser.clickVisible(Selectors.ExportCollectionQueryOption); - const exportModal = browser.$(Selectors.ExportModal); - await exportModal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.ExportModal); // Choose to export select fields. await browser.clickVisible(Selectors.ExportQuerySelectFieldsOption); @@ -814,8 +793,7 @@ describe('Collection export', function () { await browser.setExportFilename(filename); // Wait for the modal to go away. - const exportModalElement = browser.$(Selectors.ExportModal); - await exportModalElement.waitForDisplayed({ + await browser.waitForOpenModal(Selectors.ExportModal, { reverse: true, }); @@ -901,8 +879,7 @@ describe('Collection export', function () { // Open the modal. await browser.clickVisible(Selectors.ExportCollectionMenuButton); await browser.clickVisible(Selectors.ExportCollectionQueryOption); - const exportModal = browser.$(Selectors.ExportModal); - await exportModal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.ExportModal); // Make sure the query is shown in the modal. const exportModalQueryTextElement = browser.$( @@ -949,8 +926,7 @@ describe('Collection export', function () { await browser.setExportFilename(filename); // Wait for the modal to go away. - const exportModalElement = browser.$(Selectors.ExportModal); - await exportModalElement.waitForDisplayed({ + await browser.waitForOpenModal(Selectors.ExportModal, { reverse: true, }); @@ -1000,8 +976,7 @@ describe('Collection export', function () { // Open the modal. await browser.clickVisible(Selectors.ExportCollectionMenuButton); await browser.clickVisible(Selectors.ExportCollectionQueryOption); - const exportModal = browser.$(Selectors.ExportModal); - await exportModal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.ExportModal); // Make sure the query is shown in the modal. const exportModalQueryTextElement = browser.$( @@ -1048,8 +1023,7 @@ describe('Collection export', function () { await browser.setExportFilename(filename); // Wait for the modal to go away. - const exportModalElement = browser.$(Selectors.ExportModal); - await exportModalElement.waitForDisplayed({ + await browser.waitForOpenModal(Selectors.ExportModal, { reverse: true, }); diff --git a/packages/compass-e2e-tests/tests/collection-import.test.ts b/packages/compass-e2e-tests/tests/collection-import.test.ts index b9a0ce483cd..18331b39652 100644 --- a/packages/compass-e2e-tests/tests/collection-import.test.ts +++ b/packages/compass-e2e-tests/tests/collection-import.test.ts @@ -36,14 +36,15 @@ async function importJSONFile(browser: CompassBrowser, jsonPath: string) { await browser.selectFile(Selectors.ImportFileInput, jsonPath); // Wait for the modal to appear. - const importModal = browser.$(Selectors.ImportModal); - await importModal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.ImportModal); // Confirm import. await browser.clickVisible(Selectors.ImportConfirm); // Wait for the modal to go away. - await importModal.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.ImportModal, { + reverse: true, + }); // Wait for the done toast to appear and close it. const toastElement = browser.$(Selectors.ImportToast); @@ -162,8 +163,7 @@ describe('Collection import', function () { await browser.clickVisible(Selectors.InsertDocumentOption); // wait for the modal to appear - const insertDialog = browser.$(Selectors.InsertDialog); - await insertDialog.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.InsertDialog); // set the text in the editor await browser.setCodemirrorEditorValue( @@ -180,7 +180,9 @@ describe('Collection import', function () { await browser.clickVisible(Selectors.InsertConfirm); // wait for the modal to go away - await insertDialog.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.InsertDialog, { + reverse: true, + }); // make sure the documents appear in the collection const messageElement = browser.$(Selectors.DocumentListActionBarMessage); @@ -223,8 +225,7 @@ describe('Collection import', function () { await browser.clickVisible(Selectors.InsertDocumentOption); // wait for the modal to appear - const insertDialog = browser.$(Selectors.InsertDialog); - await insertDialog.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.InsertDialog); // pick list view await browser.clickVisible( @@ -275,7 +276,9 @@ describe('Collection import', function () { await browser.clickVisible(Selectors.InsertConfirm); // wait for the modal to go away - await insertDialog.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.InsertDialog, { + reverse: true, + }); // make sure the documents appear in the collection const messageElement = browser.$(Selectors.DocumentListActionBarMessage); @@ -315,8 +318,7 @@ describe('Collection import', function () { await browser.clickVisible(Selectors.InsertDocumentOption); // wait for the modal to appear - const insertDialog = browser.$(Selectors.InsertDialog); - await insertDialog.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.InsertDialog); // set the text in the editor await browser.setCodemirrorEditorValue(Selectors.InsertJSONEditor, json); @@ -331,7 +333,9 @@ describe('Collection import', function () { await browser.clickVisible(Selectors.InsertConfirm); // wait for the modal to go away - await insertDialog.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.InsertDialog, { + reverse: true, + }); // make sure the documents appear in the collection const messageElement = browser.$(Selectors.DocumentListActionBarMessage); @@ -368,8 +372,7 @@ describe('Collection import', function () { await browser.clickVisible(Selectors.InsertDocumentOption); // wait for the modal to appear - const insertDialog = browser.$(Selectors.InsertDialog); - await insertDialog.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.InsertDialog); // set the text in the editor await browser.setCodemirrorEditorValue(Selectors.InsertJSONEditor, json); @@ -385,7 +388,9 @@ describe('Collection import', function () { // cancel and wait for the modal to go away await browser.clickVisible(Selectors.InsertCancel); - await insertDialog.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.InsertDialog, { + reverse: true, + }); }); it('supports JSON files', async function () { @@ -504,14 +509,15 @@ describe('Collection import', function () { // Select the file. await browser.selectFile(Selectors.ImportFileInput, jsonPath); // Wait for the modal to appear. - const importModal = browser.$(Selectors.ImportModal); - await importModal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.ImportModal); // Confirm import. await browser.clickVisible(Selectors.ImportConfirm); // Wait for the modal to go away. - await importModal.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.ImportModal, { + reverse: true, + }); // Wait for the error toast to appear and close it. const toastElement = browser.$(Selectors.ImportToast); @@ -564,8 +570,7 @@ describe('Collection import', function () { // Select the file. await browser.selectFile(Selectors.ImportFileInput, jsonPath); // Wait for the modal to appear. - const importModal = browser.$(Selectors.ImportModal); - await importModal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.ImportModal); // Click the stop on errors checkbox. const stopOnErrorsCheckbox = browser.$( @@ -578,7 +583,9 @@ describe('Collection import', function () { await browser.clickVisible(Selectors.ImportConfirm); // Wait for the modal to go away. - await importModal.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.ImportModal, { + reverse: true, + }); // Wait for the error toast to appear const toastElement = browser.$(Selectors.ImportToast); @@ -597,9 +604,6 @@ describe('Collection import', function () { expect(await errorDetailsJson.getText()).to.include( 'schemaRulesNotSatisfied' ); - // leafygreen autofocus triggers a tooltip on the error code element, - // "Tab" to remove the focus - await browser.keys('Tab'); // now click the close button await browser.clickVisible(Selectors.confirmationModalConfirmButton()); // wait for the modal to go away @@ -621,14 +625,15 @@ describe('Collection import', function () { // Select the file. await browser.selectFile(Selectors.ImportFileInput, csvPath); // Wait for the modal to appear. - const importModal = browser.$(Selectors.ImportModal); - await importModal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.ImportModal); // Confirm import. await browser.clickVisible(Selectors.ImportConfirm); // Wait for the modal to go away. - await importModal.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.ImportModal, { + reverse: true, + }); // Wait for the error toast to appear const toastElement = browser.$(Selectors.ImportToast); @@ -688,8 +693,7 @@ describe('Collection import', function () { await browser.selectFile(Selectors.ImportFileInput, csvPath); // Wait for the modal to appear. - const importModal = browser.$(Selectors.ImportModal); - await importModal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.ImportModal); // wait for it to finish analyzing await browser.$(Selectors.ImportConfirm).waitForDisplayed(); @@ -726,7 +730,9 @@ describe('Collection import', function () { await browser.clickVisible(Selectors.ImportConfirm); // Wait for the modal to go away. - await importModal.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.ImportModal, { + reverse: true, + }); // Wait for the done toast to appear and close it. const toastElement = browser.$(Selectors.ImportToast); @@ -816,8 +822,7 @@ describe('Collection import', function () { await browser.selectFile(Selectors.ImportFileInput, csvPath); // Wait for the modal to appear. - const importModal = browser.$(Selectors.ImportModal); - await importModal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.ImportModal); // wait for it to finish analyzing await browser.$(Selectors.ImportConfirm).waitForDisplayed(); @@ -923,7 +928,9 @@ describe('Collection import', function () { await browser.clickVisible(Selectors.ImportConfirm); // Wait for the modal to go away. - await importModal.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.ImportModal, { + reverse: true, + }); // Wait for the done toast to appear and close it. const toastElement = browser.$(Selectors.ImportToast); @@ -973,8 +980,7 @@ describe('Collection import', function () { await browser.selectFile(Selectors.ImportFileInput, csvPath); // Wait for the modal to appear. - const importModal = browser.$(Selectors.ImportModal); - await importModal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.ImportModal); // it now autodetects the delimiter const importDelimiterSelectButton = browser.$( @@ -1007,7 +1013,9 @@ describe('Collection import', function () { await browser.clickVisible(Selectors.ImportConfirm); // Wait for the modal to go away. - await importModal.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.ImportModal, { + reverse: true, + }); // Wait for the done toast to appear and close it. const toastElement = browser.$(Selectors.ImportToast); @@ -1063,8 +1071,7 @@ describe('Collection import', function () { await browser.selectFile(Selectors.ImportFileInput, csvPath); // Wait for the modal to appear. - const importModal = browser.$(Selectors.ImportModal); - await importModal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.ImportModal); // wait for it to finish analyzing await browser.$(Selectors.ImportConfirm).waitForDisplayed(); @@ -1079,7 +1086,9 @@ describe('Collection import', function () { await browser.clickVisible(Selectors.ImportConfirm); // Wait for the modal to go away. - await importModal.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.ImportModal, { + reverse: true, + }); // Wait for the error toast to appear and close it. const toastElement = browser.$(Selectors.ImportToast); @@ -1122,8 +1131,7 @@ describe('Collection import', function () { await browser.selectFile(Selectors.ImportFileInput, csvPath); // wait for the modal to appear - const importModal = browser.$(Selectors.ImportModal); - await importModal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.ImportModal); // it now autodetects the delimiter correctly const importDelimiterSelectButton = browser.$( @@ -1153,7 +1161,9 @@ describe('Collection import', function () { await browser.clickVisible(Selectors.ImportConfirm); // Wait for the modal to go away. - await importModal.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.ImportModal, { + reverse: true, + }); // Wait for the done toast to appear and close it. const toastElement = browser.$(Selectors.ImportToast); @@ -1211,8 +1221,7 @@ describe('Collection import', function () { await browser.selectFile(Selectors.ImportFileInput, jsonPath); // wait for the modal to appear - const importModal = browser.$(Selectors.ImportModal); - await importModal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.ImportModal); // Click the stop on errors checkbox. const stopOnErrorsCheckbox = browser.$( @@ -1225,7 +1234,9 @@ describe('Collection import', function () { await browser.clickVisible(Selectors.ImportConfirm); // Wait for the modal to go away. - await importModal.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.ImportModal, { + reverse: true, + }); // Wait for the error toast to appear and close it. const toastElement = browser.$(Selectors.ImportToast); @@ -1267,14 +1278,15 @@ describe('Collection import', function () { await browser.selectFile(Selectors.ImportFileInput, jsonPath); // Wait for the modal to appear. - const importModal = browser.$(Selectors.ImportModal); - await importModal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.ImportModal); // Confirm import. await browser.clickVisible(Selectors.ImportConfirm); // Wait for the modal to go away. - await importModal.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.ImportModal, { + reverse: true, + }); // Wait for the error toast to appear. const toastElement = browser.$(Selectors.ImportToast); @@ -1341,8 +1353,7 @@ describe('Collection import', function () { await browser.selectFile(Selectors.ImportFileInput, csvPath); // Wait for the modal to appear. - const importModal = browser.$(Selectors.ImportModal); - await importModal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.ImportModal); // Wait for the import button to become available because detect can take // a while @@ -1487,8 +1498,7 @@ describe('Collection import', function () { await browser.selectFile(Selectors.ImportFileInput, csvPath); // Wait for the modal to appear. - const importModal = browser.$(Selectors.ImportModal); - await importModal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.ImportModal); // Confirm import. await browser.clickVisible(Selectors.ImportConfirm); diff --git a/packages/compass-e2e-tests/tests/collection-indexes-tab.test.ts b/packages/compass-e2e-tests/tests/collection-indexes-tab.test.ts index 7552d67e694..6742e75407f 100644 --- a/packages/compass-e2e-tests/tests/collection-indexes-tab.test.ts +++ b/packages/compass-e2e-tests/tests/collection-indexes-tab.test.ts @@ -120,8 +120,7 @@ describe('Collection indexes tab', function () { await browser.clickVisible(Selectors.CreateIndexButton); - const createModal = browser.$(Selectors.CreateIndexModal); - await createModal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.CreateIndexModal); // Select i filed name from Combobox. const fieldNameSelect = browser.$( @@ -156,7 +155,9 @@ describe('Collection indexes tab', function () { await browser.clickVisible(Selectors.CreateIndexConfirmButton); - await createModal.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.CreateIndexModal, { + reverse: true, + }); const indexComponent = browser.$(Selectors.indexComponent('columnstore')); await indexComponent.waitForDisplayed(); @@ -168,8 +169,7 @@ describe('Collection indexes tab', function () { }` ); - const dropModal = browser.$(Selectors.DropIndexModal); - await dropModal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.DropIndexModal); await browser.setValueVisible( Selectors.DropIndexModalConfirmButton, @@ -181,7 +181,9 @@ describe('Collection indexes tab', function () { ); await browser.clickVisible(ConfirmButtonSelector); - await dropModal.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.DropIndexModal, { + reverse: true, + }); await indexComponent.waitForDisplayed({ reverse: true }); }); diff --git a/packages/compass-e2e-tests/tests/collection-rename.test.ts b/packages/compass-e2e-tests/tests/collection-rename.test.ts index 6633c803314..da354a122f1 100644 --- a/packages/compass-e2e-tests/tests/collection-rename.test.ts +++ b/packages/compass-e2e-tests/tests/collection-rename.test.ts @@ -37,13 +37,11 @@ class RenameCollectionModal { } async isVisible() { - const modal = this.browser.$(Selectors.RenameCollectionModal); - await modal.waitForDisplayed(); + await this.browser.waitForOpenModal(Selectors.RenameCollectionModal); } async isNotVisible() { - const modal = this.browser.$(Selectors.RenameCollectionModal); - return modal.waitForDisplayed({ + await this.browser.waitForOpenModal(Selectors.RenameCollectionModal, { reverse: true, }); } diff --git a/packages/compass-e2e-tests/tests/connection.test.ts b/packages/compass-e2e-tests/tests/connection.test.ts index 8e5c1f14342..e0d8641e434 100644 --- a/packages/compass-e2e-tests/tests/connection.test.ts +++ b/packages/compass-e2e-tests/tests/connection.test.ts @@ -173,9 +173,8 @@ async function assertCannotInsertData( ); // cancel and wait for the modal to go away - const insertDialog = browser.$(Selectors.InsertDialog); await browser.clickVisible(Selectors.InsertCancel); - await insertDialog.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.InsertDialog, { reverse: true }); } async function assertCannotCreateDb( @@ -196,8 +195,7 @@ async function assertCannotCreateDb( false ); - const createModalElement = browser.$(Selectors.CreateDatabaseModal); - await createModalElement.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.CreateDatabaseModal); await browser.setValueVisible(Selectors.CreateDatabaseDatabaseName, dbName); await browser.setValueVisible( Selectors.CreateDatabaseCollectionName, @@ -216,7 +214,9 @@ async function assertCannotCreateDb( // cancel and wait for the modal to go away await browser.clickVisible(Selectors.CreateDatabaseCancelButton); - await createModalElement.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.CreateDatabaseModal, { + reverse: true, + }); } async function assertCannotCreateCollection( @@ -235,8 +235,7 @@ async function assertCannotCreateCollection( await browser.hover(Selectors.sidebarDatabase(connectionId, dbName)); await browser.clickVisible(Selectors.CreateCollectionButton); - const createModalElement = browser.$(Selectors.CreateCollectionModal); - await createModalElement.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.CreateCollectionModal); await browser.setValueVisible( Selectors.CreateDatabaseCollectionName, collectionName @@ -253,7 +252,9 @@ async function assertCannotCreateCollection( // cancel and wait for the modal to go away await browser.clickVisible(Selectors.CreateCollectionCancelButton); - await createModalElement.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.CreateCollectionModal, { + reverse: true, + }); } function assertNotError(result: any) { @@ -320,7 +321,7 @@ describe('Connection string', function () { // click the review button in the toast await browser.clickVisible(Selectors.ConnectionToastErrorReviewButton); - await browser.$(Selectors.ConnectionModal).waitForDisplayed(); + await browser.waitForOpenModal(Selectors.ConnectionModal); const errorText = await browser .$(Selectors.ConnectionFormErrorMessage) .getText(); @@ -328,9 +329,9 @@ describe('Connection string', function () { // close the modal await browser.clickVisible(Selectors.ConnectionModalCloseButton); - await browser - .$(Selectors.ConnectionModal) - .waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.ConnectionModal, { + reverse: true, + }); }); it('can connect to an Atlas replicaset without srv', async function () { @@ -1012,7 +1013,7 @@ describe('Connection form', function () { await browser.$(toastSelector).waitForDisplayed({ reverse: true }); // make sure the connection form is populated with this connection - await browser.$(Selectors.ConnectionModal).waitForDisplayed(); + await browser.waitForOpenModal(Selectors.ConnectionModal); const errorText = await browser .$(Selectors.ConnectionFormErrorMessage) .getText(); @@ -1024,9 +1025,9 @@ describe('Connection form', function () { // close the modal await browser.clickVisible(Selectors.ConnectionModalCloseButton); - await browser - .$(Selectors.ConnectionModal) - .waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.ConnectionModal, { + reverse: true, + }); } }); }); diff --git a/packages/compass-e2e-tests/tests/data-modeling-tab.test.ts b/packages/compass-e2e-tests/tests/data-modeling-tab.test.ts index 2b2ec05e273..f97edb92931 100644 --- a/packages/compass-e2e-tests/tests/data-modeling-tab.test.ts +++ b/packages/compass-e2e-tests/tests/data-modeling-tab.test.ts @@ -429,8 +429,7 @@ describe('Data Modeling tab', function () { }); await browser.clickVisible(Selectors.DataModelExportButton); - const exportModal = browser.$(Selectors.DataModelExportModal); - await exportModal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.DataModelExportModal); await browser.clickParent(Selectors.DataModelExportJsonOption); await browser.clickVisible(Selectors.DataModelExportModalConfirmButton); @@ -505,8 +504,7 @@ describe('Data Modeling tab', function () { }); await browser.clickVisible(Selectors.DataModelExportButton); - const exportModal = browser.$(Selectors.DataModelExportModal); - await exportModal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.DataModelExportModal); await browser.clickParent(Selectors.DataModelExportPngOption); await browser.clickVisible(Selectors.DataModelExportModalConfirmButton); @@ -558,8 +556,7 @@ describe('Data Modeling tab', function () { await browser.waitForAnimations(dataModelEditor); await browser.clickVisible(Selectors.DataModelExportButton); - const exportModal = browser.$(Selectors.DataModelExportModal); - await exportModal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.DataModelExportModal); await browser.clickParent(Selectors.DataModelExportDiagramOption); await browser.clickVisible(Selectors.DataModelExportModalConfirmButton); diff --git a/packages/compass-e2e-tests/tests/import-export-connections.test.ts b/packages/compass-e2e-tests/tests/import-export-connections.test.ts index 0bfb360b6ed..efe3c28ee1e 100644 --- a/packages/compass-e2e-tests/tests/import-export-connections.test.ts +++ b/packages/compass-e2e-tests/tests/import-export-connections.test.ts @@ -288,7 +288,7 @@ describe('Connection Import / Export', function () { await browser.selectConnectionsMenuItem( Selectors.ExportConnectionsModalOpen ); - await browser.$(Selectors.ExportConnectionsModal).waitForDisplayed(); + await browser.waitForOpenModal(Selectors.ExportConnectionsModal); } // Enter filename and adjust secrets handling @@ -350,7 +350,7 @@ describe('Connection Import / Export', function () { await browser.selectConnectionsMenuItem( Selectors.ImportConnectionsModalOpen ); - await browser.$(Selectors.ImportConnectionsModal).waitForDisplayed(); + await browser.waitForOpenModal(Selectors.ImportConnectionsModal); } // Enter filename and adjust secrets handling diff --git a/packages/compass-e2e-tests/tests/in-use-encryption.test.ts b/packages/compass-e2e-tests/tests/in-use-encryption.test.ts index 2201812c81c..776c9f956c0 100644 --- a/packages/compass-e2e-tests/tests/in-use-encryption.test.ts +++ b/packages/compass-e2e-tests/tests/in-use-encryption.test.ts @@ -560,8 +560,7 @@ describe('CSFLE / QE', function () { await browser.clickVisible(Selectors.InsertDocumentOption); // wait for the modal to appear - const insertDialog = browser.$(Selectors.InsertDialog); - await insertDialog.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.InsertDialog); // set the text in the editor await browser.setCodemirrorEditorValue( @@ -582,7 +581,9 @@ describe('CSFLE / QE', function () { await browser.clickVisible(Selectors.InsertConfirm); // wait for the modal to go away - await insertDialog.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.InsertDialog, { + reverse: true, + }); const result = await browser.getFirstListDocument(); @@ -901,8 +902,7 @@ describe('CSFLE / QE', function () { await browser.clickVisible(Selectors.CloneDocumentButton); // wait for the modal to appear - const insertDialog = browser.$(Selectors.InsertDialog); - await insertDialog.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.InsertDialog); // set the text in the editor await browser.setCodemirrorEditorValue( @@ -923,7 +923,9 @@ describe('CSFLE / QE', function () { await browser.clickVisible(Selectors.InsertConfirm); // wait for the modal to go away - await insertDialog.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.InsertDialog, { + reverse: true, + }); await browser.runFindOperation('Documents', "{ name: 'Third' }"); @@ -993,14 +995,14 @@ describe('CSFLE / QE', function () { ) ); - await browser.$(Selectors.CSFLEConnectionModal).waitForDisplayed(); + await browser.waitForOpenModal(Selectors.CSFLEConnectionModal); await browser.clickVisible(Selectors.SetCSFLEEnabledLabel); await browser.clickVisible(Selectors.CSFLEConnectionModalCloseButton); - await browser - .$(Selectors.CSFLEConnectionModal) - .waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.CSFLEConnectionModal, { + reverse: true, + }); const encryptedResult = await browser.getFirstListDocument(); @@ -1019,14 +1021,14 @@ describe('CSFLE / QE', function () { ) ); - await browser.$(Selectors.CSFLEConnectionModal).waitForDisplayed(); + await browser.waitForOpenModal(Selectors.CSFLEConnectionModal); await browser.clickVisible(Selectors.SetCSFLEEnabledLabel); await browser.clickVisible(Selectors.CSFLEConnectionModalCloseButton); - await browser - .$(Selectors.CSFLEConnectionModal) - .waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.CSFLEConnectionModal, { + reverse: true, + }); decryptedResult = await browser.getFirstListDocument(); diff --git a/packages/compass-e2e-tests/tests/instance-sidebar.test.ts b/packages/compass-e2e-tests/tests/instance-sidebar.test.ts index a55a70f020a..070dd638be5 100644 --- a/packages/compass-e2e-tests/tests/instance-sidebar.test.ts +++ b/packages/compass-e2e-tests/tests/instance-sidebar.test.ts @@ -51,11 +51,11 @@ describe('Instance sidebar', function () { Selectors.ClusterInfoItem ); - const modal = browser.$(Selectors.ConnectionInfoModal); - await modal.waitForDisplayed(); - + await browser.waitForOpenModal(Selectors.ConnectionInfoModal); await browser.clickVisible(Selectors.ConnectionInfoModalCloseButton); - await modal.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.ConnectionInfoModal, { + reverse: true, + }); }); it('contains a dbs/collections tree view', async function () { diff --git a/packages/compass-e2e-tests/tests/my-queries-tab.test.ts b/packages/compass-e2e-tests/tests/my-queries-tab.test.ts index cb4561df752..28d2380e4e5 100644 --- a/packages/compass-e2e-tests/tests/my-queries-tab.test.ts +++ b/packages/compass-e2e-tests/tests/my-queries-tab.test.ts @@ -133,8 +133,7 @@ async function saveAggregation( await browser.clickVisible(Selectors.SavePipelineSaveAsAction); // wait for the modal to appear - const savePipelineModal = browser.$(Selectors.SavePipelineModal); - await savePipelineModal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.SavePipelineModal); // set aggregation name await browser.waitForAnimations(Selectors.SavePipelineNameInput); @@ -145,8 +144,10 @@ async function saveAggregation( // click save button const createButton = browser.$(Selectors.SavePipelineModal).$('button=Save'); - await createButton.click(); + await browser.waitForOpenModal(Selectors.SavePipelineModal, { + reverse: true, + }); } describe('My Queries tab', function () { @@ -241,15 +242,16 @@ describe('My Queries tab', function () { // rename the query await browser.clickVisible(Selectors.SavedItemMenuItemRename); - const renameModal = browser.$(Selectors.RenameSavedItemModal); - await renameModal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.RenameSavedItemModal); await browser.setValueVisible( Selectors.RenameSavedItemModalTextInput, newFavoriteQueryName ); await browser.clickVisible(Selectors.RenameSavedItemModalSubmit); - await renameModal.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.RenameSavedItemModal, { + reverse: true, + }); // rename the collection associated with the query to force the open item modal await client_1 @@ -271,8 +273,8 @@ describe('My Queries tab', function () { ); // the open item modal - select a new collection - const openModal = browser.$(Selectors.OpenSavedItemModal); - await openModal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.OpenSavedItemModal); + await browser.selectOption({ selectSelector: `${Selectors.OpenSavedItemDatabaseField} button`, optionText: 'test', @@ -282,7 +284,9 @@ describe('My Queries tab', function () { optionText: 'numbers-renamed', }); await browser.clickVisible(Selectors.OpenSavedItemModalConfirmButton); - await openModal.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.OpenSavedItemModal, { + reverse: true, + }); // we should eventually arrive on the collection const namespace = await browser.getActiveTabNamespace(); @@ -399,8 +403,7 @@ describe('My Queries tab', function () { await browser.clickVisible(Selectors.myQueriesItem(favoriteQueryName)); // the open item modal - select a new collection - const openModal = browser.$(Selectors.OpenSavedItemModal); - await openModal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.OpenSavedItemModal); await browser.selectOption({ selectSelector: `${Selectors.OpenSavedItemDatabaseField} button`, optionText: 'test', @@ -415,7 +418,9 @@ describe('My Queries tab', function () { ); await browser.clickVisible(Selectors.OpenSavedItemModalConfirmButton); - await openModal.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.OpenSavedItemModal, { + reverse: true, + }); await browser.navigateToMyQueries(); @@ -513,8 +518,7 @@ describe('My Queries tab', function () { await browser.clickVisible(Selectors.myQueriesItem(favoriteQueryName)); // the open item modal - select a new connection, database and collection - const openModal = browser.$(Selectors.OpenSavedItemModal); - await openModal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.OpenSavedItemModal); await browser.selectOption({ selectSelector: `${Selectors.OpenSavedItemConnectionField} button`, optionText: DEFAULT_CONNECTION_NAME_2, @@ -530,7 +534,9 @@ describe('My Queries tab', function () { await browser.clickVisible(Selectors.OpenSavedItemModalConfirmButton); - await openModal.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.OpenSavedItemModal, { + reverse: true, + }); // we should land on connection-2 because that's the one we just selected await browser.waitUntil(async () => { @@ -577,8 +583,7 @@ describe('My Queries tab', function () { await browser.clickVisible(Selectors.myQueriesItem(favoriteQueryName)); // the open item modal - select a new connection, database and collection - const selectModal = browser.$(Selectors.SelectConnectionModal); - await selectModal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.SelectConnectionModal); const connectionId = await browser.getConnectionIdByName( DEFAULT_CONNECTION_NAME_2 @@ -595,7 +600,9 @@ describe('My Queries tab', function () { Selectors.SelectConnectionModalConfirmButton ); - await selectModal.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.SelectConnectionModal, { + reverse: true, + }); // we should land on connection-2 because that's the one we just selected await browser.waitUntil(async () => { diff --git a/packages/compass-e2e-tests/tests/oidc.test.ts b/packages/compass-e2e-tests/tests/oidc.test.ts index 400d1815df9..86aae580a0a 100644 --- a/packages/compass-e2e-tests/tests/oidc.test.ts +++ b/packages/compass-e2e-tests/tests/oidc.test.ts @@ -265,7 +265,8 @@ describe('OIDC integration', function () { await browser.removeConnection(connectionName); await browser.clickVisible(Selectors.SidebarNewConnectionButton); - await browser.$(Selectors.ConnectionModal).waitForDisplayed(); + await browser.waitForOpenModal(Selectors.ConnectionModal); + await browser.setValueVisible( Selectors.ConnectionFormStringInput, connectionString @@ -323,7 +324,7 @@ describe('OIDC integration', function () { await browser.removeConnection(connectionName); await browser.clickVisible(Selectors.SidebarNewConnectionButton); - await browser.$(Selectors.ConnectionModal).waitForDisplayed(); + await browser.waitForOpenModal(Selectors.ConnectionModal); await browser.setValueVisible( Selectors.ConnectionFormStringInput, connectionString @@ -342,7 +343,7 @@ describe('OIDC integration', function () { false ); - await browser.$(Selectors.ConfirmationModal).waitForDisplayed(); + await browser.waitForOpenModal(Selectors.ConfirmationModal); const modalHeader = browser.$(Selectors.ConfirmationModalHeading); expect(await modalHeader.getText()).to.include('Authentication expired'); @@ -368,7 +369,7 @@ describe('OIDC integration', function () { await browser.removeConnection(connectionName); await browser.clickVisible(Selectors.SidebarNewConnectionButton); - await browser.$(Selectors.ConnectionModal).waitForDisplayed(); + await browser.waitForOpenModal(Selectors.ConnectionModal); await browser.setValueVisible( Selectors.ConnectionFormStringInput, connectionString @@ -387,7 +388,7 @@ describe('OIDC integration', function () { false ); - await browser.$(Selectors.ConfirmationModal).waitForDisplayed(); + await browser.waitForOpenModal(Selectors.ConfirmationModal); const modalHeader = browser.$(Selectors.ConfirmationModalHeading); expect(await modalHeader.getText()).to.include('Authentication expired'); diff --git a/packages/compass-e2e-tests/tests/read-only.test.ts b/packages/compass-e2e-tests/tests/read-only.test.ts index 7a4538ec904..db5c269f581 100644 --- a/packages/compass-e2e-tests/tests/read-only.test.ts +++ b/packages/compass-e2e-tests/tests/read-only.test.ts @@ -21,8 +21,7 @@ async function setReadOnlyFeatureViaSettingsModal( } await browser.openSettingsModal(); - const settingsModal = browser.$(Selectors.SettingsModal); - await settingsModal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.SettingsModal); await browser.waitUntil(async () => { await browser.clickVisible(Selectors.GeneralSettingsButton); @@ -48,7 +47,7 @@ async function setReadOnlyFeatureViaSettingsModal( } // wait for the modal to go away - await settingsModal.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.SettingsModal, { reverse: true }); } describe('readOnly: true / Read-Only Edition', function () { diff --git a/packages/compass-e2e-tests/tests/search-indexes.test.ts b/packages/compass-e2e-tests/tests/search-indexes.test.ts index 0bbd3c529c6..35b3fb91249 100644 --- a/packages/compass-e2e-tests/tests/search-indexes.test.ts +++ b/packages/compass-e2e-tests/tests/search-indexes.test.ts @@ -64,8 +64,7 @@ async function createSearchIndex( Selectors.createIndexDropdownAction('search-indexes') ); - const modal = browser.$(Selectors.SearchIndexModal); - await modal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.SearchIndexModal); await browser.setValueVisible(Selectors.SearchIndexName, indexName); await browser.setCodemirrorEditorValue( @@ -74,7 +73,7 @@ async function createSearchIndex( ); await browser.clickVisible(Selectors.SearchIndexConfirmButton); - await modal.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.SearchIndexModal, { reverse: true }); } async function updateSearchIndex( @@ -89,8 +88,7 @@ async function updateSearchIndex( await browser.hover(indexRowSelector); await browser.clickVisible(Selectors.searchIndexEditButton(indexName)); - const modal = browser.$(Selectors.SearchIndexModal); - await modal.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.SearchIndexModal); await browser.setCodemirrorEditorValue( Selectors.SearchIndexDefinition, @@ -98,7 +96,7 @@ async function updateSearchIndex( ); await browser.clickVisible(Selectors.SearchIndexConfirmButton); - await modal.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.SearchIndexModal, { reverse: true }); } async function dropSearchIndex(browser: CompassBrowser, indexName: string) { diff --git a/packages/compass-e2e-tests/tests/shell.test.ts b/packages/compass-e2e-tests/tests/shell.test.ts index 4704c7bd5ae..7f74c2e2cff 100644 --- a/packages/compass-e2e-tests/tests/shell.test.ts +++ b/packages/compass-e2e-tests/tests/shell.test.ts @@ -53,11 +53,10 @@ describe('Shell', function () { await browser.openShell(DEFAULT_CONNECTION_NAME_1); await browser.clickVisible(Selectors.ShellInfoButton); - const infoModalElement = browser.$(Selectors.ShellInfoModal); - await infoModalElement.waitForDisplayed(); + await browser.waitForOpenModal(Selectors.ShellInfoModal); await browser.clickVisible(Selectors.ShellInfoModalCloseButton); - await infoModalElement.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.ShellInfoModal, { reverse: true }); await browser.closeShell(DEFAULT_CONNECTION_NAME_1); }); @@ -73,15 +72,13 @@ describe('Shell', function () { ).to.be.equal(true); await browser.openSettingsModal(); - const settingsModal = browser.$(Selectors.SettingsModal); - await settingsModal.waitForDisplayed(); await browser.clickVisible(Selectors.GeneralSettingsButton); await browser.clickParent(Selectors.SettingsInputElement('enableShell')); await browser.clickVisible(Selectors.SaveSettingsButton); // wait for the modal to go away - await settingsModal.waitForDisplayed({ reverse: true }); + await browser.waitForOpenModal(Selectors.SettingsModal, { reverse: true }); expect( await browser.hasConnectionMenuItem( diff --git a/packages/compass-e2e-tests/tests/tabs.test.ts b/packages/compass-e2e-tests/tests/tabs.test.ts index d363384eea8..08264f5ea17 100644 --- a/packages/compass-e2e-tests/tests/tabs.test.ts +++ b/packages/compass-e2e-tests/tests/tabs.test.ts @@ -114,14 +114,14 @@ describe('Global Tabs', function () { }) ); await browser.clickVisible(Selectors.CloseWorkspaceTab); - await browser.$(Selectors.ConfirmTabCloseModal).waitForDisplayed(); + await browser.waitForOpenModal(Selectors.ConfirmTabCloseModal); await browser.clickVisible( browser.$(Selectors.ConfirmTabCloseModal).$('button=Cancel') ); - await browser - .$(Selectors.ConfirmTabCloseModal) - .waitForExist({ reverse: true }); + await browser.waitForOpenModal(Selectors.ConfirmTabCloseModal, { + reverse: true, + }); // Checking first that cancel leaves the tab on the screen expect(await browser.$$(Selectors.workspaceTab()).length).to.equal(1); @@ -133,14 +133,14 @@ describe('Global Tabs', function () { }) ); await browser.clickVisible(Selectors.CloseWorkspaceTab); - await browser.$(Selectors.ConfirmTabCloseModal).waitForDisplayed(); + await browser.waitForOpenModal(Selectors.ConfirmTabCloseModal); await browser.clickVisible( browser.$(Selectors.ConfirmTabCloseModal).$('button=Close tab') ); - await browser - .$(Selectors.ConfirmTabCloseModal) - .waitForExist({ reverse: true }); + await browser.waitForOpenModal(Selectors.ConfirmTabCloseModal, { + reverse: true, + }); // When confirmed, should remove the tab expect(await browser.$$(Selectors.workspaceTab()).length).to.equal(0); diff --git a/packages/compass-explain-plan/src/components/explain-plan-modal.tsx b/packages/compass-explain-plan/src/components/explain-plan-modal.tsx index 09fb024f4bb..127ef98bab8 100644 --- a/packages/compass-explain-plan/src/components/explain-plan-modal.tsx +++ b/packages/compass-explain-plan/src/components/explain-plan-modal.tsx @@ -115,7 +115,7 @@ export const ExplainPlanModal: React.FunctionComponent< return ( ` - 0 0 0 2px ${color}, - 0 0 0 4px ${palette.blue.light1}; -`; -const disabledButtonStyles: Record = { - [Theme.Light]: css({ - [leafyGreenButtonSelector]: { - [`&, ${hoverSelector}, ${activeSelector}`]: { - backgroundColor: palette.gray.light2, - borderColor: palette.gray.light1, - color: palette.gray.base, - boxShadow: 'none', - cursor: 'not-allowed', - }, - - [focusSelector]: { - color: palette.gray.base, - boxShadow: focusBoxShadow(palette.white), - }, - }, - }), - - [Theme.Dark]: css({ - [leafyGreenButtonSelector]: { - [`&, ${hoverSelector}, ${activeSelector}`]: { - backgroundColor: palette.gray.dark3, - borderColor: palette.gray.dark2, - color: palette.gray.dark1, - boxShadow: 'none', - cursor: 'not-allowed', - }, - - [focusSelector]: { - color: palette.gray.dark1, - boxShadow: focusBoxShadow(palette.black), - }, - }, - }), -}; - const CloudAIOptInBannerContent: React.FunctionComponent<{ isProjectAIEnabled: boolean; isSampleDocumentPassingEnabled: boolean; @@ -178,8 +131,6 @@ export const AIOptInModal: React.FunctionComponent = ({ ); const track = useTelemetry(); const darkMode = useDarkMode(); - const currentDisabledButtonStyles = - disabledButtonStyles[darkMode ? Theme.Dark : Theme.Light]; useEffect(() => { if (isOptInModalVisible) { @@ -207,10 +158,11 @@ export const AIOptInModal: React.FunctionComponent = ({ open={isOptInModalVisible} onClose={handleModalClose} data-testid="ai-optin-modal" - // TODO Button Disabling - className={!isProjectAIEnabled ? currentDisabledButtonStyles : undefined} - buttonText="Use AI Features" - onButtonClick={onConfirmClick} + buttonProps={{ + children: 'Use AI Features', + onClick: onConfirmClick, + disabled: !isProjectAIEnabled, + }} linkText="Not now" onLinkClick={onOptInModalClose} graphic={} diff --git a/packages/compass-import-export/src/components/export-code-view.tsx b/packages/compass-import-export/src/components/export-code-view.tsx index 2edfcc2ad7f..3e9272a5c06 100644 --- a/packages/compass-import-export/src/components/export-code-view.tsx +++ b/packages/compass-import-export/src/components/export-code-view.tsx @@ -78,6 +78,8 @@ function ExportCodeView({ data-testid="export-collection-code-preview-wrapper" id={codeElementId} language="javascript" + // eslint-disable-next-line jsx-a11y/no-autofocus + autoFocus={true} > {code} diff --git a/packages/compass-import-export/src/components/export-modal.tsx b/packages/compass-import-export/src/components/export-modal.tsx index 786ae9c02f0..9d4d98cf174 100644 --- a/packages/compass-import-export/src/components/export-modal.tsx +++ b/packages/compass-import-export/src/components/export-modal.tsx @@ -30,7 +30,7 @@ import type { ExportStatus, FieldsToExportOption } from '../modules/export'; import type { RootExportState } from '../stores/export-store'; import { SelectFileType } from './select-file-type'; import { ExportSelectFields } from './export-select-fields'; -import { codeElementId, ExportCodeView } from './export-code-view'; +import { ExportCodeView } from './export-code-view'; import type { ExportAggregation, ExportQuery } from '../export/export-types'; import { queryHasProjection } from '../utils/query-has-projection'; import { FieldsToExportOptions } from './export-field-options'; @@ -246,12 +246,7 @@ function ExportModal({ }, [isOpen, resetExportFormState]); return ( - + + diff --git a/packages/compass-schema/src/components/export-schema-modal.tsx b/packages/compass-schema/src/components/export-schema-modal.tsx index c674708ca8d..b7e1cdd3b4d 100644 --- a/packages/compass-schema/src/components/export-schema-modal.tsx +++ b/packages/compass-schema/src/components/export-schema-modal.tsx @@ -149,7 +149,7 @@ const ExportSchemaModal: React.FunctionComponent<{ ); return ( - +