diff --git a/package-lock.json b/package-lock.json index f09e9f122f..8f3ecde863 100644 --- a/package-lock.json +++ b/package-lock.json @@ -53845,28 +53845,652 @@ "license": "MIT", "dependencies": { "@babel/runtime": "^7.22.15", - "@instructure/emotion": "8.44.0", - "@instructure/shared-types": "8.44.0", - "@instructure/ui-icons": "8.44.0", - "@instructure/ui-link": "8.44.0", - "@instructure/ui-prop-types": "8.44.0", - "@instructure/ui-react-utils": "8.44.0", - "@instructure/ui-testable": "8.44.0", - "@instructure/ui-truncate-text": "8.44.0", - "@instructure/ui-utils": "8.44.0", - "@instructure/ui-view": "8.44.0", + "@instructure/emotion": "8.45.0", + "@instructure/shared-types": "8.45.0", + "@instructure/ui-icons": "8.45.0", + "@instructure/ui-link": "8.45.0", + "@instructure/ui-prop-types": "8.45.0", + "@instructure/ui-react-utils": "8.45.0", + "@instructure/ui-testable": "8.45.0", + "@instructure/ui-truncate-text": "8.45.0", + "@instructure/ui-utils": "8.45.0", + "@instructure/ui-view": "8.45.0", "prop-types": "^15.8.1" }, "devDependencies": { - "@instructure/ui-babel-preset": "8.44.0", - "@instructure/ui-test-locator": "8.44.0", - "@instructure/ui-test-utils": "8.44.0", - "@instructure/ui-themes": "8.44.0" + "@instructure/ui-axe-check": "8.45.0", + "@instructure/ui-babel-preset": "8.45.0", + "@instructure/ui-test-utils": "8.45.0", + "@instructure/ui-themes": "8.45.0", + "@testing-library/jest-dom": "^5.17.0", + "@testing-library/react": "^14.0.0" + }, + "peerDependencies": { + "react": ">=16.8 <=18" + } + }, + "packages/ui-breadcrumb/node_modules/@instructure/babel-plugin-transform-imports": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/babel-plugin-transform-imports/-/babel-plugin-transform-imports-8.45.0.tgz", + "integrity": "sha512-gZPyyt5vaKLb/9wA9c5lIY62mtJh0d+rOZKXQWNhpNRJ5iTvzoj0Ql8HEQ5f99T6ySIWvA5mFdVavcnt/xHa3w==", + "dev": true, + "dependencies": { + "globby": "^11.1.0" + } + }, + "packages/ui-breadcrumb/node_modules/@instructure/browserslist-config-instui": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/browserslist-config-instui/-/browserslist-config-instui-8.45.0.tgz", + "integrity": "sha512-zoKbMpVPYTjlRVSu+xuqXmz22byZPx1HSEasUDYj+OAWCRAQL0CxAkYQTxuq9Wo5/tyHVNSjD7s5e76d+hFVzg==", + "dev": true + }, + "packages/ui-breadcrumb/node_modules/@instructure/canvas-high-contrast-theme": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/canvas-high-contrast-theme/-/canvas-high-contrast-theme-8.45.0.tgz", + "integrity": "sha512-SUIafllHhHD+BulCY1xXqPcfKVsWVaEk8IgFtGPGVqKIJnBLulVtrnJneHAIjTybKOnPOmONNLdpN0vm1T97Rg==", + "dependencies": { + "@babel/runtime": "^7.22.15", + "@instructure/shared-types": "8.45.0", + "@instructure/theme-registry": "8.45.0", + "@instructure/ui-theme-tokens": "8.45.0" + } + }, + "packages/ui-breadcrumb/node_modules/@instructure/canvas-theme": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/canvas-theme/-/canvas-theme-8.45.0.tgz", + "integrity": "sha512-5DuiqFjMRjSVgUWT8BfJ9cQuLwioVfCGUblQAdcCSdfd8qsITmaWfT4KSx/j7CTIbo8LzAWmbGN985Pm79Pzvg==", + "dependencies": { + "@babel/runtime": "^7.22.15", + "@instructure/shared-types": "8.45.0", + "@instructure/theme-registry": "8.45.0", + "@instructure/ui-theme-tokens": "8.45.0" + } + }, + "packages/ui-breadcrumb/node_modules/@instructure/console": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/console/-/console-8.45.0.tgz", + "integrity": "sha512-3Ab41QxVP/SmHEoMutsz2dojPgNoMj+sBPOGcif9GejX8IYPXesUnUWsDqZqtkDVmoTGQ/c1X0frWIt3rARZzg==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-module-imports": "^7.22.15", + "babel-plugin-macros": "^3.1.0" + }, + "peerDependencies": { + "react": ">=16.8 <=18" + } + }, + "packages/ui-breadcrumb/node_modules/@instructure/debounce": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/debounce/-/debounce-8.45.0.tgz", + "integrity": "sha512-dG16cqoNo8JsM0xpTzvHfe7BL22LZTJsd4fPFPKCgyC9Ze9XGxrAJYhEYzNsRUxtZw5HjehPUQ7CHG8wqVXmuQ==", + "dependencies": { + "@babel/runtime": "^7.22.15" + } + }, + "packages/ui-breadcrumb/node_modules/@instructure/emotion": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/emotion/-/emotion-8.45.0.tgz", + "integrity": "sha512-rZcFlIEgfmCL73kyvoCPcGhWOAwq8rbRYTfqAsbrZQfGGumrcTMUT7vBU9CWkZdUBEzDf9FQvpPOAytgS7kiDQ==", + "dependencies": { + "@babel/runtime": "^7.22.15", + "@emotion/react": "^11.11.1", + "@instructure/console": "8.45.0", + "@instructure/shared-types": "8.45.0", + "@instructure/theme-registry": "8.45.0", + "@instructure/ui-decorator": "8.45.0", + "@instructure/ui-i18n": "8.45.0", + "@instructure/ui-react-utils": "8.45.0", + "@instructure/ui-themes": "8.45.0", + "@instructure/ui-utils": "8.45.0", + "hoist-non-react-statics": "^3.3.2", + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "react": ">=16.8 <=18" + } + }, + "packages/ui-breadcrumb/node_modules/@instructure/instructure-theme": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/instructure-theme/-/instructure-theme-8.45.0.tgz", + "integrity": "sha512-u/Tnk05+p0+E329mju2j97/NDoUSQcrWWPNCT/F/OY06dDdSjldYvL6lpPeNhMAaJz7qvVX9G6XjJlqnRpZlKQ==", + "dependencies": { + "@babel/runtime": "^7.22.15", + "@instructure/shared-types": "8.45.0", + "@instructure/theme-registry": "8.45.0", + "@instructure/ui-theme-tokens": "8.45.0" + } + }, + "packages/ui-breadcrumb/node_modules/@instructure/shared-types": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/shared-types/-/shared-types-8.45.0.tgz", + "integrity": "sha512-KP+/SlXy6q46Lr0Div+NqKK3/GaWkVhEdXiB2SnVUhCryKFq8h8mnTR0iTyJidpuBoRDENHzBHYE9/69HRP+5w==", + "dependencies": { + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "react": ">=16.8 <=18" + } + }, + "packages/ui-breadcrumb/node_modules/@instructure/theme-registry": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/theme-registry/-/theme-registry-8.45.0.tgz", + "integrity": "sha512-JWT5EwjyiEMM8rlKlI7zONPfHFuTKzxde4cymRj5XBWw3jcI8BSKkAwoeGPNkI25kudNyeL6OYe+TIukxyXvHg==", + "dependencies": { + "@babel/runtime": "^7.22.15", + "@instructure/console": "8.45.0", + "@instructure/shared-types": "8.45.0", + "@instructure/ui-utils": "8.45.0" + } + }, + "packages/ui-breadcrumb/node_modules/@instructure/ui-a11y-content": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-a11y-content/-/ui-a11y-content-8.45.0.tgz", + "integrity": "sha512-CdWNWLgHAL0fYdT7YryQdy/OSG3UrxCep6OYMb0IbUc/Q1yKSCyO53pXsdwjePpYrVydc618ujqyDJPBaCvSvw==", + "dependencies": { + "@babel/runtime": "^7.22.15", + "@instructure/console": "8.45.0", + "@instructure/emotion": "8.45.0", + "@instructure/shared-types": "8.45.0", + "@instructure/ui-dom-utils": "8.45.0", + "@instructure/ui-prop-types": "8.45.0", + "@instructure/ui-react-utils": "8.45.0", + "@instructure/ui-utils": "8.45.0", + "@instructure/uid": "8.45.0", + "keycode": "^2.2.1", + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "react": ">=16.8 <=18" + } + }, + "packages/ui-breadcrumb/node_modules/@instructure/ui-a11y-utils": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-a11y-utils/-/ui-a11y-utils-8.45.0.tgz", + "integrity": "sha512-mbuZyOO0+RPYQCn6FyHnLGiUFNWOj6JvRW9AWPCkuBkmJ2Mhuc/oO73awYyCsJHLm12RdtfIdl/BBP6la4HXQg==", + "dependencies": { + "@babel/runtime": "^7.22.15", + "@instructure/console": "8.45.0", + "@instructure/ui-a11y-content": "8.45.0", + "@instructure/ui-dom-utils": "8.45.0", + "@instructure/ui-react-utils": "8.45.0", + "@instructure/ui-testable": "8.45.0", + "@instructure/uid": "8.45.0", + "keycode": "^2.2.1", + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "react": ">=16.8 <=18" + } + }, + "packages/ui-breadcrumb/node_modules/@instructure/ui-axe-check": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-axe-check/-/ui-axe-check-8.45.0.tgz", + "integrity": "sha512-S6KjrMeu6DGwtwYvlLz0FCrqHbUCp88bPt0bkjoWbMpErSVxOGJO33tyDavpdYzQwTS1esSR6jHxNue2o16G7w==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.22.15", + "axe-core": "^4.7.2" + } + }, + "packages/ui-breadcrumb/node_modules/@instructure/ui-babel-preset": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-babel-preset/-/ui-babel-preset-8.45.0.tgz", + "integrity": "sha512-M0VqOjWxDeGRFhm1N6oeDBs6lP8QnrWY1KcMCUCqw72OaAfRfMFGLYf4L7n46/cJDeWZsoj2Rip6bpaZGgTjag==", + "dev": true, + "dependencies": { + "@babel/core": "^7.22.15", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-decorators": "^7.22.15", + "@babel/plugin-proposal-export-default-from": "^7.22.5", + "@babel/plugin-proposal-optional-chaining": "^7.21.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-classes": "^7.22.15", + "@babel/plugin-transform-destructuring": "^7.22.15", + "@babel/plugin-transform-react-constant-elements": "^7.22.5", + "@babel/plugin-transform-react-display-name": "^7.22.5", + "@babel/plugin-transform-runtime": "^7.22.15", + "@babel/preset-env": "^7.22.15", + "@babel/preset-react": "^7.22.15", + "@babel/preset-typescript": "^7.22.15", + "@babel/runtime": "^7.22.15", + "@instructure/babel-plugin-transform-imports": "8.45.0", + "@instructure/browserslist-config-instui": "8.45.0", + "babel-loader": "^9.1.3", + "babel-plugin-dynamic-import-node": "^2.3.3", + "babel-plugin-istanbul": "^6.1.1", + "babel-plugin-macros": "^3.1.0", + "babel-plugin-transform-ensure-ignore": "^0.1.0", + "babel-plugin-transform-remove-console": "^6.9.4", + "babel-plugin-transform-undefined-to-void": "^6.9.4", + "core-js": "3.32.1" + } + }, + "packages/ui-breadcrumb/node_modules/@instructure/ui-color-utils": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-color-utils/-/ui-color-utils-8.45.0.tgz", + "integrity": "sha512-KLALK09SiqSkw4LH5qH13sLGoLEBp3TZr4r4RI04300405kzfkHenhFrsRpOr7ztU3QQeb4/fMNi6pdNZ0CWTQ==", + "dependencies": { + "@babel/runtime": "^7.22.15", + "tinycolor2": "^1.6.0" + } + }, + "packages/ui-breadcrumb/node_modules/@instructure/ui-decorator": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-decorator/-/ui-decorator-8.45.0.tgz", + "integrity": "sha512-/FB0VIfV1jB9rmJd244XPmvbSKIzZW6q8U0tfWVnqxZgfHsPWxacyKSd+aZ7HL+yfmKE+LhypCVrq3HuddFOYQ==", + "dependencies": { + "@babel/runtime": "^7.22.15" + } + }, + "packages/ui-breadcrumb/node_modules/@instructure/ui-dom-utils": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-dom-utils/-/ui-dom-utils-8.45.0.tgz", + "integrity": "sha512-+Iig7/svpb1n+wD3F0r9aXjJ7j7BRCs2s2+ueIamZLn0Yh4JVhKRuqtRL94GTPHTWGVVORMEcV1uxsZM6KzTdA==", + "dependencies": { + "@babel/runtime": "^7.22.15", + "@instructure/console": "8.45.0", + "@instructure/shared-types": "8.45.0" + }, + "peerDependencies": { + "react": ">=16.8 <=18", + "react-dom": ">=16.8 <=18" + } + }, + "packages/ui-breadcrumb/node_modules/@instructure/ui-i18n": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-i18n/-/ui-i18n-8.45.0.tgz", + "integrity": "sha512-bZmNwhH4E1a32UKQf0uSrxykWzmqd9dgzYaJAiJaUcLUkX272A4fNr9T6KA+8fBlzDJbyCp081AIz6BYzQ/EVg==", + "dependencies": { + "@babel/runtime": "^7.22.15", + "@instructure/shared-types": "8.45.0", + "@instructure/ui-decorator": "8.45.0", + "@instructure/ui-dom-utils": "8.45.0", + "@instructure/ui-prop-types": "8.45.0", + "@instructure/ui-react-utils": "8.45.0", + "@instructure/ui-utils": "8.45.0", + "hoist-non-react-statics": "^3.3.2", + "moment-timezone": "^0.5.43", + "prop-types": "^15.8.1" }, "peerDependencies": { "react": ">=16.8 <=18" } }, + "packages/ui-breadcrumb/node_modules/@instructure/ui-icons": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-icons/-/ui-icons-8.45.0.tgz", + "integrity": "sha512-t/gGx+U5H2wn0ifZtGoQR7WNi3YvECiloVAwjJyoW+0aQyQHFjRcx6qObW0Qc/f9xdzEDC0deEIvkAsJKM303w==", + "dependencies": { + "@babel/runtime": "^7.22.15", + "@instructure/ui-svg-images": "8.45.0", + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "react": ">=16.8 <=18" + } + }, + "packages/ui-breadcrumb/node_modules/@instructure/ui-link": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-link/-/ui-link-8.45.0.tgz", + "integrity": "sha512-Puu7QRoSmfItbt1qgSsdbeJb/tKMlc7aKp1q9o0SD8WJGi1DuUFLW8xrciv9/+S+VI7WjfjpSF9DmiHwK84Ajw==", + "dependencies": { + "@babel/runtime": "^7.22.15", + "@instructure/console": "8.45.0", + "@instructure/emotion": "8.45.0", + "@instructure/shared-types": "8.45.0", + "@instructure/ui-a11y-utils": "8.45.0", + "@instructure/ui-color-utils": "8.45.0", + "@instructure/ui-dom-utils": "8.45.0", + "@instructure/ui-icons": "8.45.0", + "@instructure/ui-prop-types": "8.45.0", + "@instructure/ui-react-utils": "8.45.0", + "@instructure/ui-testable": "8.45.0", + "@instructure/ui-view": "8.45.0", + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "react": ">=16.8 <=18" + } + }, + "packages/ui-breadcrumb/node_modules/@instructure/ui-portal": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-portal/-/ui-portal-8.45.0.tgz", + "integrity": "sha512-m/EzFY0EOpwE0vyc/rO4C3kAoGYNjuqTFfOt0bYZMvRlMkixvFisHJuwKYIhG7afeGTBrgSRZTtAQ8cE3z8gCA==", + "dependencies": { + "@babel/runtime": "^7.22.15", + "@instructure/shared-types": "8.45.0", + "@instructure/ui-dom-utils": "8.45.0", + "@instructure/ui-i18n": "8.45.0", + "@instructure/ui-prop-types": "8.45.0", + "@instructure/ui-react-utils": "8.45.0", + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "react": ">=16.8 <=18", + "react-dom": ">=16.8 <=18" + } + }, + "packages/ui-breadcrumb/node_modules/@instructure/ui-position": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-position/-/ui-position-8.45.0.tgz", + "integrity": "sha512-Li/uEJlIE5Nbz1leJCLbzbE1hVE9lemse8y0cWug8APoqpcz0gft/pAR2QKLnaatKI8Oxt76QGasO1Y19pu7lw==", + "dependencies": { + "@babel/runtime": "^7.22.15", + "@instructure/debounce": "8.45.0", + "@instructure/emotion": "8.45.0", + "@instructure/shared-types": "8.45.0", + "@instructure/ui-dom-utils": "8.45.0", + "@instructure/ui-portal": "8.45.0", + "@instructure/ui-prop-types": "8.45.0", + "@instructure/ui-react-utils": "8.45.0", + "@instructure/ui-testable": "8.45.0", + "@instructure/ui-utils": "8.45.0", + "@instructure/uid": "8.45.0", + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "react": ">=16.8 <=18" + } + }, + "packages/ui-breadcrumb/node_modules/@instructure/ui-prop-types": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-prop-types/-/ui-prop-types-8.45.0.tgz", + "integrity": "sha512-IwOuXrwo+09RYxzohmsp1aXd6l1GJ3e0RlETwPDlldvP7uMonlDrzbhGZxdEw8N1yKCwI+KoisIBir6YxHnB4g==", + "dependencies": { + "@babel/runtime": "^7.22.15", + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "react": ">=16.8 <=18" + } + }, + "packages/ui-breadcrumb/node_modules/@instructure/ui-react-utils": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-react-utils/-/ui-react-utils-8.45.0.tgz", + "integrity": "sha512-vvS3xdmKezyV2F2vIz+CFqoXmkx1X+X5+PhlON3ugmUjEx37ktGXW6qCwUrHhS7ShlOfnSVXxkZjbzamMzTRIw==", + "dependencies": { + "@babel/runtime": "^7.22.15", + "@emotion/is-prop-valid": "^1.2.1", + "@instructure/console": "8.45.0", + "@instructure/shared-types": "8.45.0", + "@instructure/ui-decorator": "8.45.0", + "@instructure/ui-dom-utils": "8.45.0", + "@instructure/ui-utils": "8.45.0", + "hoist-non-react-statics": "^3.3.2", + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "react": ">=16.8 <=18", + "react-dom": ">=16.8 <=18" + } + }, + "packages/ui-breadcrumb/node_modules/@instructure/ui-svg-images": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-svg-images/-/ui-svg-images-8.45.0.tgz", + "integrity": "sha512-j7GMSSogbwxJQXTOuYdflhiHi2Mbfe8fYOvFNMdC7XpJxBrJWx+0XB9lDfpIPjsA8QVADUEjlPtehT3gLSqpAw==", + "dependencies": { + "@babel/runtime": "^7.22.15", + "@instructure/emotion": "8.45.0", + "@instructure/shared-types": "8.45.0", + "@instructure/ui-react-utils": "8.45.0", + "@instructure/ui-testable": "8.45.0", + "@instructure/ui-utils": "8.45.0", + "@instructure/uid": "8.45.0", + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "react": ">=16.8 <=18" + } + }, + "packages/ui-breadcrumb/node_modules/@instructure/ui-test-locator": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-test-locator/-/ui-test-locator-8.45.0.tgz", + "integrity": "sha512-hYtfz057HWkanibiTpXesuQ/W+JcP65WETs7m4g28OBGFiEc8WgmCCSN+eWqp+n47lEoD0bakTcCg/vXnOk13g==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.22.15", + "@instructure/ui-test-queries": "8.45.0" + } + }, + "packages/ui-breadcrumb/node_modules/@instructure/ui-test-queries": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-test-queries/-/ui-test-queries-8.45.0.tgz", + "integrity": "sha512-zDM2gxMhUvAqg9R1E2DrpSJr5CX5naN6x+yAkGzJJNoyfI2k2k5iGZTa0JK+ILyi6VO4geedJywLAv8oYDQShQ==", + "dev": true, + "dependencies": { + "@instructure/debounce": "8.45.0", + "@instructure/ui-axe-check": "8.45.0", + "@instructure/ui-test-sandbox": "8.45.0", + "keycode": "^2.2.1", + "pretty-format": "^29.6.3", + "sizzle": "^2.3.10" + } + }, + "packages/ui-breadcrumb/node_modules/@instructure/ui-test-sandbox": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-test-sandbox/-/ui-test-sandbox-8.45.0.tgz", + "integrity": "sha512-uZ7qh4uuK08HYDErKHXaFKQhaadgdsYS9c06FFHklHxaynRF0hHZ1zN2FigdqKmS//BLxFejhqC0Mk86ADbtzA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.22.15", + "sinon": "^15.2.0" + }, + "peerDependencies": { + "react": ">=16.8 <=18", + "react-dom": ">=16.8 <=18" + } + }, + "packages/ui-breadcrumb/node_modules/@instructure/ui-test-utils": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-test-utils/-/ui-test-utils-8.45.0.tgz", + "integrity": "sha512-N2laK8Zeo1uOjT2LJJ50b0x2gJBiLvrLSXoo+bt5rhl/D/5dg6SDN7v9Gsq+gYhrdteEb0AUwNOInhcS9bI2vA==", + "dev": true, + "dependencies": { + "@instructure/ui-test-locator": "8.45.0", + "@instructure/ui-test-queries": "8.45.0", + "@instructure/ui-test-sandbox": "8.45.0", + "@sheerun/mutationobserver-shim": "^0.3.3", + "chai": "^4.3.8", + "chai-as-promised": "^7.1.1", + "chai-exclude": "^2.1.0", + "chai-string": "^1.5.0", + "dirty-chai": "^2.0.1", + "nanoid": "^4.0.2", + "sinon-chai": "^3.7.0", + "wait-for-expect": "^3.0.2" + }, + "peerDependencies": { + "react": ">=16.8 <=18", + "react-dom": ">=16.8 <=18" + } + }, + "packages/ui-breadcrumb/node_modules/@instructure/ui-testable": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-testable/-/ui-testable-8.45.0.tgz", + "integrity": "sha512-xqFNzw0WD5kmcFgGreTP5C4cll4XkmZC68L6zirUOIHqNfcoU/DZMrtUBBqSuUF05SODuWwZTesy5H3Y/xlMcg==", + "dependencies": { + "@babel/runtime": "^7.22.15", + "@instructure/ui-decorator": "8.45.0", + "@instructure/ui-dom-utils": "8.45.0" + }, + "peerDependencies": { + "react": ">=16.8 <=18", + "react-dom": ">=16.8 <=18" + } + }, + "packages/ui-breadcrumb/node_modules/@instructure/ui-theme-tokens": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-theme-tokens/-/ui-theme-tokens-8.45.0.tgz", + "integrity": "sha512-qkuIL5eWVMGp/PH9uq3g+dynbieZFrkNliVbulB4hLkL9Hd6/FcdjIgLAX6/DHx7ptoQphph++Wi8HKbk24wLQ==", + "dependencies": { + "@babel/runtime": "^7.22.15", + "@instructure/shared-types": "8.45.0" + } + }, + "packages/ui-breadcrumb/node_modules/@instructure/ui-themes": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-themes/-/ui-themes-8.45.0.tgz", + "integrity": "sha512-kQ6+NZE0D/JT01XPnsyuqTRj9/RoAySVEO+bOf1YzJroh25YCgFc3Y+/WKLum8S+anAYwXjmMk0qoL+wcMBQqg==", + "dependencies": { + "@instructure/canvas-high-contrast-theme": "8.45.0", + "@instructure/canvas-theme": "8.45.0", + "@instructure/instructure-theme": "8.45.0", + "@instructure/shared-types": "8.45.0" + } + }, + "packages/ui-breadcrumb/node_modules/@instructure/ui-truncate-text": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-truncate-text/-/ui-truncate-text-8.45.0.tgz", + "integrity": "sha512-LEGfc7AaeAS1kleDEOo98WgYwgjml0KGMBI8hGyIxAAa+p8DM6QzuQ6aQ5IeqBdaLQIeBl1O2FwhFA0Lo6HDGg==", + "dependencies": { + "@babel/runtime": "^7.22.15", + "@instructure/console": "8.45.0", + "@instructure/debounce": "8.45.0", + "@instructure/emotion": "8.45.0", + "@instructure/shared-types": "8.45.0", + "@instructure/ui-dom-utils": "8.45.0", + "@instructure/ui-react-utils": "8.45.0", + "@instructure/ui-testable": "8.45.0", + "@instructure/ui-utils": "8.45.0", + "escape-html": "^1.0.3", + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "react": ">=16.8 <=18" + } + }, + "packages/ui-breadcrumb/node_modules/@instructure/ui-utils": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-utils/-/ui-utils-8.45.0.tgz", + "integrity": "sha512-Y9xEA3OU3ZJGMVEQVlXlCDH62ig4GUuQeP+Rf9bD3a1Xozrbw6paPKoC01e4WBubA9kgLJEHClibrEwOK1t6MA==", + "dependencies": { + "@babel/runtime": "^7.22.15", + "@instructure/console": "8.45.0", + "@instructure/ui-dom-utils": "8.45.0", + "@types/ua-parser-js": "^0.7.37", + "bowser": "^2.11.0", + "fast-deep-equal": "^3.1.3", + "json-stable-stringify": "^1.0.2", + "keycode": "^2.2.1", + "ua-parser-js": "^1.0.36" + }, + "peerDependencies": { + "react": ">=16.8 <=18", + "react-dom": ">=16.8 <=18" + } + }, + "packages/ui-breadcrumb/node_modules/@instructure/ui-view": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-view/-/ui-view-8.45.0.tgz", + "integrity": "sha512-q7Vlfq44c3q6ZuFG12KA27XMw4UkJYw5+U9D3kGLB4fsm+Hr4cNiviORXyoWsmi/dbzhKQiLIbHpZ09WAom79g==", + "dependencies": { + "@babel/runtime": "^7.22.15", + "@instructure/console": "8.45.0", + "@instructure/emotion": "8.45.0", + "@instructure/shared-types": "8.45.0", + "@instructure/ui-color-utils": "8.45.0", + "@instructure/ui-dom-utils": "8.45.0", + "@instructure/ui-i18n": "8.45.0", + "@instructure/ui-position": "8.45.0", + "@instructure/ui-prop-types": "8.45.0", + "@instructure/ui-react-utils": "8.45.0", + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "react": ">=16.8 <=18" + } + }, + "packages/ui-breadcrumb/node_modules/@instructure/uid": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/uid/-/uid-8.45.0.tgz", + "integrity": "sha512-gawzh6jUK4u8vndYmar05FQMLcI4oz16T1mIljKt6cxu5iT+OVzDgEwz3Cb4wlN0GhvB9CO9BDJDn3r2iHoXeA==", + "dependencies": { + "@babel/runtime": "^7.22.15" + } + }, + "packages/ui-breadcrumb/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "packages/ui-breadcrumb/node_modules/core-js": { + "version": "3.32.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.32.1.tgz", + "integrity": "sha512-lqufgNn9NLnESg5mQeYsxQP5w7wrViSj0jr/kv6ECQiByzQkrn1MKvV0L3acttpDqfQrHLwr2KCMgX5b8X+lyQ==", + "dev": true, + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "packages/ui-breadcrumb/node_modules/nanoid": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-4.0.2.tgz", + "integrity": "sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.js" + }, + "engines": { + "node": "^14 || ^16 || >=18" + } + }, + "packages/ui-breadcrumb/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "packages/ui-breadcrumb/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "packages/ui-breadcrumb/node_modules/ua-parser-js": { + "version": "1.0.36", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.36.tgz", + "integrity": "sha512-znuyCIXzl8ciS3+y3fHJI/2OhQIXbXw9MWC/o3qwyR+RGppjZHrM27CGFSKCJXi2Kctiz537iOu2KnXs1lMQhw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } + ], + "engines": { + "node": "*" + } + }, "packages/ui-buttons": { "name": "@instructure/ui-buttons", "version": "8.44.0", @@ -59428,21 +60052,537 @@ "version": "file:packages/ui-breadcrumb", "requires": { "@babel/runtime": "^7.22.15", - "@instructure/emotion": "8.44.0", - "@instructure/shared-types": "8.44.0", - "@instructure/ui-babel-preset": "8.44.0", - "@instructure/ui-icons": "8.44.0", - "@instructure/ui-link": "8.44.0", - "@instructure/ui-prop-types": "8.44.0", - "@instructure/ui-react-utils": "8.44.0", - "@instructure/ui-test-locator": "8.44.0", - "@instructure/ui-test-utils": "8.44.0", - "@instructure/ui-testable": "8.44.0", - "@instructure/ui-themes": "8.44.0", - "@instructure/ui-truncate-text": "8.44.0", - "@instructure/ui-utils": "8.44.0", - "@instructure/ui-view": "8.44.0", + "@instructure/emotion": "8.45.0", + "@instructure/shared-types": "8.45.0", + "@instructure/ui-axe-check": "8.45.0", + "@instructure/ui-babel-preset": "8.45.0", + "@instructure/ui-icons": "8.45.0", + "@instructure/ui-link": "8.45.0", + "@instructure/ui-prop-types": "8.45.0", + "@instructure/ui-react-utils": "8.45.0", + "@instructure/ui-test-utils": "8.45.0", + "@instructure/ui-testable": "8.45.0", + "@instructure/ui-themes": "8.45.0", + "@instructure/ui-truncate-text": "8.45.0", + "@instructure/ui-utils": "8.45.0", + "@instructure/ui-view": "8.45.0", + "@testing-library/jest-dom": "^5.17.0", + "@testing-library/react": "^14.0.0", "prop-types": "^15.8.1" + }, + "dependencies": { + "@instructure/babel-plugin-transform-imports": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/babel-plugin-transform-imports/-/babel-plugin-transform-imports-8.45.0.tgz", + "integrity": "sha512-gZPyyt5vaKLb/9wA9c5lIY62mtJh0d+rOZKXQWNhpNRJ5iTvzoj0Ql8HEQ5f99T6ySIWvA5mFdVavcnt/xHa3w==", + "dev": true, + "requires": { + "globby": "^11.1.0" + } + }, + "@instructure/browserslist-config-instui": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/browserslist-config-instui/-/browserslist-config-instui-8.45.0.tgz", + "integrity": "sha512-zoKbMpVPYTjlRVSu+xuqXmz22byZPx1HSEasUDYj+OAWCRAQL0CxAkYQTxuq9Wo5/tyHVNSjD7s5e76d+hFVzg==", + "dev": true + }, + "@instructure/canvas-high-contrast-theme": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/canvas-high-contrast-theme/-/canvas-high-contrast-theme-8.45.0.tgz", + "integrity": "sha512-SUIafllHhHD+BulCY1xXqPcfKVsWVaEk8IgFtGPGVqKIJnBLulVtrnJneHAIjTybKOnPOmONNLdpN0vm1T97Rg==", + "requires": { + "@babel/runtime": "^7.22.15", + "@instructure/shared-types": "8.45.0", + "@instructure/theme-registry": "8.45.0", + "@instructure/ui-theme-tokens": "8.45.0" + } + }, + "@instructure/canvas-theme": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/canvas-theme/-/canvas-theme-8.45.0.tgz", + "integrity": "sha512-5DuiqFjMRjSVgUWT8BfJ9cQuLwioVfCGUblQAdcCSdfd8qsITmaWfT4KSx/j7CTIbo8LzAWmbGN985Pm79Pzvg==", + "requires": { + "@babel/runtime": "^7.22.15", + "@instructure/shared-types": "8.45.0", + "@instructure/theme-registry": "8.45.0", + "@instructure/ui-theme-tokens": "8.45.0" + } + }, + "@instructure/console": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/console/-/console-8.45.0.tgz", + "integrity": "sha512-3Ab41QxVP/SmHEoMutsz2dojPgNoMj+sBPOGcif9GejX8IYPXesUnUWsDqZqtkDVmoTGQ/c1X0frWIt3rARZzg==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-module-imports": "^7.22.15", + "babel-plugin-macros": "^3.1.0" + } + }, + "@instructure/debounce": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/debounce/-/debounce-8.45.0.tgz", + "integrity": "sha512-dG16cqoNo8JsM0xpTzvHfe7BL22LZTJsd4fPFPKCgyC9Ze9XGxrAJYhEYzNsRUxtZw5HjehPUQ7CHG8wqVXmuQ==", + "requires": { + "@babel/runtime": "^7.22.15" + } + }, + "@instructure/emotion": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/emotion/-/emotion-8.45.0.tgz", + "integrity": "sha512-rZcFlIEgfmCL73kyvoCPcGhWOAwq8rbRYTfqAsbrZQfGGumrcTMUT7vBU9CWkZdUBEzDf9FQvpPOAytgS7kiDQ==", + "requires": { + "@babel/runtime": "^7.22.15", + "@emotion/react": "^11.11.1", + "@instructure/console": "8.45.0", + "@instructure/shared-types": "8.45.0", + "@instructure/theme-registry": "8.45.0", + "@instructure/ui-decorator": "8.45.0", + "@instructure/ui-i18n": "8.45.0", + "@instructure/ui-react-utils": "8.45.0", + "@instructure/ui-themes": "8.45.0", + "@instructure/ui-utils": "8.45.0", + "hoist-non-react-statics": "^3.3.2", + "prop-types": "^15.8.1" + } + }, + "@instructure/instructure-theme": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/instructure-theme/-/instructure-theme-8.45.0.tgz", + "integrity": "sha512-u/Tnk05+p0+E329mju2j97/NDoUSQcrWWPNCT/F/OY06dDdSjldYvL6lpPeNhMAaJz7qvVX9G6XjJlqnRpZlKQ==", + "requires": { + "@babel/runtime": "^7.22.15", + "@instructure/shared-types": "8.45.0", + "@instructure/theme-registry": "8.45.0", + "@instructure/ui-theme-tokens": "8.45.0" + } + }, + "@instructure/shared-types": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/shared-types/-/shared-types-8.45.0.tgz", + "integrity": "sha512-KP+/SlXy6q46Lr0Div+NqKK3/GaWkVhEdXiB2SnVUhCryKFq8h8mnTR0iTyJidpuBoRDENHzBHYE9/69HRP+5w==", + "requires": { + "prop-types": "^15.8.1" + } + }, + "@instructure/theme-registry": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/theme-registry/-/theme-registry-8.45.0.tgz", + "integrity": "sha512-JWT5EwjyiEMM8rlKlI7zONPfHFuTKzxde4cymRj5XBWw3jcI8BSKkAwoeGPNkI25kudNyeL6OYe+TIukxyXvHg==", + "requires": { + "@babel/runtime": "^7.22.15", + "@instructure/console": "8.45.0", + "@instructure/shared-types": "8.45.0", + "@instructure/ui-utils": "8.45.0" + } + }, + "@instructure/ui-a11y-content": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-a11y-content/-/ui-a11y-content-8.45.0.tgz", + "integrity": "sha512-CdWNWLgHAL0fYdT7YryQdy/OSG3UrxCep6OYMb0IbUc/Q1yKSCyO53pXsdwjePpYrVydc618ujqyDJPBaCvSvw==", + "requires": { + "@babel/runtime": "^7.22.15", + "@instructure/console": "8.45.0", + "@instructure/emotion": "8.45.0", + "@instructure/shared-types": "8.45.0", + "@instructure/ui-dom-utils": "8.45.0", + "@instructure/ui-prop-types": "8.45.0", + "@instructure/ui-react-utils": "8.45.0", + "@instructure/ui-utils": "8.45.0", + "@instructure/uid": "8.45.0", + "keycode": "^2.2.1", + "prop-types": "^15.8.1" + } + }, + "@instructure/ui-a11y-utils": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-a11y-utils/-/ui-a11y-utils-8.45.0.tgz", + "integrity": "sha512-mbuZyOO0+RPYQCn6FyHnLGiUFNWOj6JvRW9AWPCkuBkmJ2Mhuc/oO73awYyCsJHLm12RdtfIdl/BBP6la4HXQg==", + "requires": { + "@babel/runtime": "^7.22.15", + "@instructure/console": "8.45.0", + "@instructure/ui-a11y-content": "8.45.0", + "@instructure/ui-dom-utils": "8.45.0", + "@instructure/ui-react-utils": "8.45.0", + "@instructure/ui-testable": "8.45.0", + "@instructure/uid": "8.45.0", + "keycode": "^2.2.1", + "prop-types": "^15.8.1" + } + }, + "@instructure/ui-axe-check": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-axe-check/-/ui-axe-check-8.45.0.tgz", + "integrity": "sha512-S6KjrMeu6DGwtwYvlLz0FCrqHbUCp88bPt0bkjoWbMpErSVxOGJO33tyDavpdYzQwTS1esSR6jHxNue2o16G7w==", + "dev": true, + "requires": { + "@babel/runtime": "^7.22.15", + "axe-core": "^4.7.2" + } + }, + "@instructure/ui-babel-preset": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-babel-preset/-/ui-babel-preset-8.45.0.tgz", + "integrity": "sha512-M0VqOjWxDeGRFhm1N6oeDBs6lP8QnrWY1KcMCUCqw72OaAfRfMFGLYf4L7n46/cJDeWZsoj2Rip6bpaZGgTjag==", + "dev": true, + "requires": { + "@babel/core": "^7.22.15", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-decorators": "^7.22.15", + "@babel/plugin-proposal-export-default-from": "^7.22.5", + "@babel/plugin-proposal-optional-chaining": "^7.21.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-classes": "^7.22.15", + "@babel/plugin-transform-destructuring": "^7.22.15", + "@babel/plugin-transform-react-constant-elements": "^7.22.5", + "@babel/plugin-transform-react-display-name": "^7.22.5", + "@babel/plugin-transform-runtime": "^7.22.15", + "@babel/preset-env": "^7.22.15", + "@babel/preset-react": "^7.22.15", + "@babel/preset-typescript": "^7.22.15", + "@babel/runtime": "^7.22.15", + "@instructure/babel-plugin-transform-imports": "8.45.0", + "@instructure/browserslist-config-instui": "8.45.0", + "babel-loader": "^9.1.3", + "babel-plugin-dynamic-import-node": "^2.3.3", + "babel-plugin-istanbul": "^6.1.1", + "babel-plugin-macros": "^3.1.0", + "babel-plugin-transform-ensure-ignore": "^0.1.0", + "babel-plugin-transform-remove-console": "^6.9.4", + "babel-plugin-transform-undefined-to-void": "^6.9.4", + "core-js": "3.32.1" + } + }, + "@instructure/ui-color-utils": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-color-utils/-/ui-color-utils-8.45.0.tgz", + "integrity": "sha512-KLALK09SiqSkw4LH5qH13sLGoLEBp3TZr4r4RI04300405kzfkHenhFrsRpOr7ztU3QQeb4/fMNi6pdNZ0CWTQ==", + "requires": { + "@babel/runtime": "^7.22.15", + "tinycolor2": "^1.6.0" + } + }, + "@instructure/ui-decorator": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-decorator/-/ui-decorator-8.45.0.tgz", + "integrity": "sha512-/FB0VIfV1jB9rmJd244XPmvbSKIzZW6q8U0tfWVnqxZgfHsPWxacyKSd+aZ7HL+yfmKE+LhypCVrq3HuddFOYQ==", + "requires": { + "@babel/runtime": "^7.22.15" + } + }, + "@instructure/ui-dom-utils": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-dom-utils/-/ui-dom-utils-8.45.0.tgz", + "integrity": "sha512-+Iig7/svpb1n+wD3F0r9aXjJ7j7BRCs2s2+ueIamZLn0Yh4JVhKRuqtRL94GTPHTWGVVORMEcV1uxsZM6KzTdA==", + "requires": { + "@babel/runtime": "^7.22.15", + "@instructure/console": "8.45.0", + "@instructure/shared-types": "8.45.0" + } + }, + "@instructure/ui-i18n": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-i18n/-/ui-i18n-8.45.0.tgz", + "integrity": "sha512-bZmNwhH4E1a32UKQf0uSrxykWzmqd9dgzYaJAiJaUcLUkX272A4fNr9T6KA+8fBlzDJbyCp081AIz6BYzQ/EVg==", + "requires": { + "@babel/runtime": "^7.22.15", + "@instructure/shared-types": "8.45.0", + "@instructure/ui-decorator": "8.45.0", + "@instructure/ui-dom-utils": "8.45.0", + "@instructure/ui-prop-types": "8.45.0", + "@instructure/ui-react-utils": "8.45.0", + "@instructure/ui-utils": "8.45.0", + "hoist-non-react-statics": "^3.3.2", + "moment-timezone": "^0.5.43", + "prop-types": "^15.8.1" + } + }, + "@instructure/ui-icons": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-icons/-/ui-icons-8.45.0.tgz", + "integrity": "sha512-t/gGx+U5H2wn0ifZtGoQR7WNi3YvECiloVAwjJyoW+0aQyQHFjRcx6qObW0Qc/f9xdzEDC0deEIvkAsJKM303w==", + "requires": { + "@babel/runtime": "^7.22.15", + "@instructure/ui-svg-images": "8.45.0", + "prop-types": "^15.8.1" + } + }, + "@instructure/ui-link": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-link/-/ui-link-8.45.0.tgz", + "integrity": "sha512-Puu7QRoSmfItbt1qgSsdbeJb/tKMlc7aKp1q9o0SD8WJGi1DuUFLW8xrciv9/+S+VI7WjfjpSF9DmiHwK84Ajw==", + "requires": { + "@babel/runtime": "^7.22.15", + "@instructure/console": "8.45.0", + "@instructure/emotion": "8.45.0", + "@instructure/shared-types": "8.45.0", + "@instructure/ui-a11y-utils": "8.45.0", + "@instructure/ui-color-utils": "8.45.0", + "@instructure/ui-dom-utils": "8.45.0", + "@instructure/ui-icons": "8.45.0", + "@instructure/ui-prop-types": "8.45.0", + "@instructure/ui-react-utils": "8.45.0", + "@instructure/ui-testable": "8.45.0", + "@instructure/ui-view": "8.45.0", + "prop-types": "^15.8.1" + } + }, + "@instructure/ui-portal": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-portal/-/ui-portal-8.45.0.tgz", + "integrity": "sha512-m/EzFY0EOpwE0vyc/rO4C3kAoGYNjuqTFfOt0bYZMvRlMkixvFisHJuwKYIhG7afeGTBrgSRZTtAQ8cE3z8gCA==", + "requires": { + "@babel/runtime": "^7.22.15", + "@instructure/shared-types": "8.45.0", + "@instructure/ui-dom-utils": "8.45.0", + "@instructure/ui-i18n": "8.45.0", + "@instructure/ui-prop-types": "8.45.0", + "@instructure/ui-react-utils": "8.45.0", + "prop-types": "^15.8.1" + } + }, + "@instructure/ui-position": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-position/-/ui-position-8.45.0.tgz", + "integrity": "sha512-Li/uEJlIE5Nbz1leJCLbzbE1hVE9lemse8y0cWug8APoqpcz0gft/pAR2QKLnaatKI8Oxt76QGasO1Y19pu7lw==", + "requires": { + "@babel/runtime": "^7.22.15", + "@instructure/debounce": "8.45.0", + "@instructure/emotion": "8.45.0", + "@instructure/shared-types": "8.45.0", + "@instructure/ui-dom-utils": "8.45.0", + "@instructure/ui-portal": "8.45.0", + "@instructure/ui-prop-types": "8.45.0", + "@instructure/ui-react-utils": "8.45.0", + "@instructure/ui-testable": "8.45.0", + "@instructure/ui-utils": "8.45.0", + "@instructure/uid": "8.45.0", + "prop-types": "^15.8.1" + } + }, + "@instructure/ui-prop-types": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-prop-types/-/ui-prop-types-8.45.0.tgz", + "integrity": "sha512-IwOuXrwo+09RYxzohmsp1aXd6l1GJ3e0RlETwPDlldvP7uMonlDrzbhGZxdEw8N1yKCwI+KoisIBir6YxHnB4g==", + "requires": { + "@babel/runtime": "^7.22.15", + "prop-types": "^15.8.1" + } + }, + "@instructure/ui-react-utils": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-react-utils/-/ui-react-utils-8.45.0.tgz", + "integrity": "sha512-vvS3xdmKezyV2F2vIz+CFqoXmkx1X+X5+PhlON3ugmUjEx37ktGXW6qCwUrHhS7ShlOfnSVXxkZjbzamMzTRIw==", + "requires": { + "@babel/runtime": "^7.22.15", + "@emotion/is-prop-valid": "^1.2.1", + "@instructure/console": "8.45.0", + "@instructure/shared-types": "8.45.0", + "@instructure/ui-decorator": "8.45.0", + "@instructure/ui-dom-utils": "8.45.0", + "@instructure/ui-utils": "8.45.0", + "hoist-non-react-statics": "^3.3.2", + "prop-types": "^15.8.1" + } + }, + "@instructure/ui-svg-images": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-svg-images/-/ui-svg-images-8.45.0.tgz", + "integrity": "sha512-j7GMSSogbwxJQXTOuYdflhiHi2Mbfe8fYOvFNMdC7XpJxBrJWx+0XB9lDfpIPjsA8QVADUEjlPtehT3gLSqpAw==", + "requires": { + "@babel/runtime": "^7.22.15", + "@instructure/emotion": "8.45.0", + "@instructure/shared-types": "8.45.0", + "@instructure/ui-react-utils": "8.45.0", + "@instructure/ui-testable": "8.45.0", + "@instructure/ui-utils": "8.45.0", + "@instructure/uid": "8.45.0", + "prop-types": "^15.8.1" + } + }, + "@instructure/ui-test-locator": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-test-locator/-/ui-test-locator-8.45.0.tgz", + "integrity": "sha512-hYtfz057HWkanibiTpXesuQ/W+JcP65WETs7m4g28OBGFiEc8WgmCCSN+eWqp+n47lEoD0bakTcCg/vXnOk13g==", + "dev": true, + "requires": { + "@babel/runtime": "^7.22.15", + "@instructure/ui-test-queries": "8.45.0" + } + }, + "@instructure/ui-test-queries": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-test-queries/-/ui-test-queries-8.45.0.tgz", + "integrity": "sha512-zDM2gxMhUvAqg9R1E2DrpSJr5CX5naN6x+yAkGzJJNoyfI2k2k5iGZTa0JK+ILyi6VO4geedJywLAv8oYDQShQ==", + "dev": true, + "requires": { + "@instructure/debounce": "8.45.0", + "@instructure/ui-axe-check": "8.45.0", + "@instructure/ui-test-sandbox": "8.45.0", + "keycode": "^2.2.1", + "pretty-format": "^29.6.3", + "sizzle": "^2.3.10" + } + }, + "@instructure/ui-test-sandbox": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-test-sandbox/-/ui-test-sandbox-8.45.0.tgz", + "integrity": "sha512-uZ7qh4uuK08HYDErKHXaFKQhaadgdsYS9c06FFHklHxaynRF0hHZ1zN2FigdqKmS//BLxFejhqC0Mk86ADbtzA==", + "dev": true, + "requires": { + "@babel/runtime": "^7.22.15", + "sinon": "^15.2.0" + } + }, + "@instructure/ui-test-utils": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-test-utils/-/ui-test-utils-8.45.0.tgz", + "integrity": "sha512-N2laK8Zeo1uOjT2LJJ50b0x2gJBiLvrLSXoo+bt5rhl/D/5dg6SDN7v9Gsq+gYhrdteEb0AUwNOInhcS9bI2vA==", + "dev": true, + "requires": { + "@instructure/ui-test-locator": "8.45.0", + "@instructure/ui-test-queries": "8.45.0", + "@instructure/ui-test-sandbox": "8.45.0", + "@sheerun/mutationobserver-shim": "^0.3.3", + "chai": "^4.3.8", + "chai-as-promised": "^7.1.1", + "chai-exclude": "^2.1.0", + "chai-string": "^1.5.0", + "dirty-chai": "^2.0.1", + "nanoid": "^4.0.2", + "sinon-chai": "^3.7.0", + "wait-for-expect": "^3.0.2" + } + }, + "@instructure/ui-testable": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-testable/-/ui-testable-8.45.0.tgz", + "integrity": "sha512-xqFNzw0WD5kmcFgGreTP5C4cll4XkmZC68L6zirUOIHqNfcoU/DZMrtUBBqSuUF05SODuWwZTesy5H3Y/xlMcg==", + "requires": { + "@babel/runtime": "^7.22.15", + "@instructure/ui-decorator": "8.45.0", + "@instructure/ui-dom-utils": "8.45.0" + } + }, + "@instructure/ui-theme-tokens": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-theme-tokens/-/ui-theme-tokens-8.45.0.tgz", + "integrity": "sha512-qkuIL5eWVMGp/PH9uq3g+dynbieZFrkNliVbulB4hLkL9Hd6/FcdjIgLAX6/DHx7ptoQphph++Wi8HKbk24wLQ==", + "requires": { + "@babel/runtime": "^7.22.15", + "@instructure/shared-types": "8.45.0" + } + }, + "@instructure/ui-themes": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-themes/-/ui-themes-8.45.0.tgz", + "integrity": "sha512-kQ6+NZE0D/JT01XPnsyuqTRj9/RoAySVEO+bOf1YzJroh25YCgFc3Y+/WKLum8S+anAYwXjmMk0qoL+wcMBQqg==", + "requires": { + "@instructure/canvas-high-contrast-theme": "8.45.0", + "@instructure/canvas-theme": "8.45.0", + "@instructure/instructure-theme": "8.45.0", + "@instructure/shared-types": "8.45.0" + } + }, + "@instructure/ui-truncate-text": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-truncate-text/-/ui-truncate-text-8.45.0.tgz", + "integrity": "sha512-LEGfc7AaeAS1kleDEOo98WgYwgjml0KGMBI8hGyIxAAa+p8DM6QzuQ6aQ5IeqBdaLQIeBl1O2FwhFA0Lo6HDGg==", + "requires": { + "@babel/runtime": "^7.22.15", + "@instructure/console": "8.45.0", + "@instructure/debounce": "8.45.0", + "@instructure/emotion": "8.45.0", + "@instructure/shared-types": "8.45.0", + "@instructure/ui-dom-utils": "8.45.0", + "@instructure/ui-react-utils": "8.45.0", + "@instructure/ui-testable": "8.45.0", + "@instructure/ui-utils": "8.45.0", + "escape-html": "^1.0.3", + "prop-types": "^15.8.1" + } + }, + "@instructure/ui-utils": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-utils/-/ui-utils-8.45.0.tgz", + "integrity": "sha512-Y9xEA3OU3ZJGMVEQVlXlCDH62ig4GUuQeP+Rf9bD3a1Xozrbw6paPKoC01e4WBubA9kgLJEHClibrEwOK1t6MA==", + "requires": { + "@babel/runtime": "^7.22.15", + "@instructure/console": "8.45.0", + "@instructure/ui-dom-utils": "8.45.0", + "@types/ua-parser-js": "^0.7.37", + "bowser": "^2.11.0", + "fast-deep-equal": "^3.1.3", + "json-stable-stringify": "^1.0.2", + "keycode": "^2.2.1", + "ua-parser-js": "^1.0.36" + } + }, + "@instructure/ui-view": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/ui-view/-/ui-view-8.45.0.tgz", + "integrity": "sha512-q7Vlfq44c3q6ZuFG12KA27XMw4UkJYw5+U9D3kGLB4fsm+Hr4cNiviORXyoWsmi/dbzhKQiLIbHpZ09WAom79g==", + "requires": { + "@babel/runtime": "^7.22.15", + "@instructure/console": "8.45.0", + "@instructure/emotion": "8.45.0", + "@instructure/shared-types": "8.45.0", + "@instructure/ui-color-utils": "8.45.0", + "@instructure/ui-dom-utils": "8.45.0", + "@instructure/ui-i18n": "8.45.0", + "@instructure/ui-position": "8.45.0", + "@instructure/ui-prop-types": "8.45.0", + "@instructure/ui-react-utils": "8.45.0", + "prop-types": "^15.8.1" + } + }, + "@instructure/uid": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@instructure/uid/-/uid-8.45.0.tgz", + "integrity": "sha512-gawzh6jUK4u8vndYmar05FQMLcI4oz16T1mIljKt6cxu5iT+OVzDgEwz3Cb4wlN0GhvB9CO9BDJDn3r2iHoXeA==", + "requires": { + "@babel/runtime": "^7.22.15" + } + }, + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, + "core-js": { + "version": "3.32.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.32.1.tgz", + "integrity": "sha512-lqufgNn9NLnESg5mQeYsxQP5w7wrViSj0jr/kv6ECQiByzQkrn1MKvV0L3acttpDqfQrHLwr2KCMgX5b8X+lyQ==", + "dev": true + }, + "nanoid": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-4.0.2.tgz", + "integrity": "sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw==", + "dev": true + }, + "pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "requires": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + } + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "ua-parser-js": { + "version": "1.0.36", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.36.tgz", + "integrity": "sha512-znuyCIXzl8ciS3+y3fHJI/2OhQIXbXw9MWC/o3qwyR+RGppjZHrM27CGFSKCJXi2Kctiz537iOu2KnXs1lMQhw==" + } } }, "@instructure/ui-buttons": { diff --git a/packages/ui-breadcrumb/package.json b/packages/ui-breadcrumb/package.json index d69d31bff2..c9cd9be0aa 100644 --- a/packages/ui-breadcrumb/package.json +++ b/packages/ui-breadcrumb/package.json @@ -23,23 +23,25 @@ }, "license": "MIT", "devDependencies": { - "@instructure/ui-babel-preset": "8.44.0", - "@instructure/ui-test-locator": "8.44.0", - "@instructure/ui-test-utils": "8.44.0", - "@instructure/ui-themes": "8.44.0" + "@instructure/ui-axe-check": "8.45.0", + "@instructure/ui-babel-preset": "8.45.0", + "@instructure/ui-test-utils": "8.45.0", + "@instructure/ui-themes": "8.45.0", + "@testing-library/jest-dom": "^5.17.0", + "@testing-library/react": "^14.0.0" }, "dependencies": { "@babel/runtime": "^7.22.15", - "@instructure/emotion": "8.44.0", - "@instructure/shared-types": "8.44.0", - "@instructure/ui-icons": "8.44.0", - "@instructure/ui-link": "8.44.0", - "@instructure/ui-prop-types": "8.44.0", - "@instructure/ui-react-utils": "8.44.0", - "@instructure/ui-testable": "8.44.0", - "@instructure/ui-truncate-text": "8.44.0", - "@instructure/ui-utils": "8.44.0", - "@instructure/ui-view": "8.44.0", + "@instructure/emotion": "8.45.0", + "@instructure/shared-types": "8.45.0", + "@instructure/ui-icons": "8.45.0", + "@instructure/ui-link": "8.45.0", + "@instructure/ui-prop-types": "8.45.0", + "@instructure/ui-react-utils": "8.45.0", + "@instructure/ui-testable": "8.45.0", + "@instructure/ui-truncate-text": "8.45.0", + "@instructure/ui-utils": "8.45.0", + "@instructure/ui-view": "8.45.0", "prop-types": "^15.8.1" }, "peerDependencies": { diff --git a/packages/ui-breadcrumb/src/Breadcrumb/BreadcrumbLink/BreadcrumbLinkLocator.ts b/packages/ui-breadcrumb/src/Breadcrumb/BreadcrumbLink/BreadcrumbLinkLocator.ts deleted file mode 100644 index cf798db80e..0000000000 --- a/packages/ui-breadcrumb/src/Breadcrumb/BreadcrumbLink/BreadcrumbLinkLocator.ts +++ /dev/null @@ -1,29 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2015 - present Instructure, Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -import { locator } from '@instructure/ui-test-locator' - -import { BreadcrumbLink } from './index' - -// @ts-expect-error ts-migrate(2339) FIXME: Property 'selector' does not exist on type 'typeof... Remove this comment to see the full error message -export const BreadcrumbLinkLocator = locator(BreadcrumbLink.selector) diff --git a/packages/ui-breadcrumb/src/Breadcrumb/BreadcrumbLink/__new-tests__/BreadcrumbLink.test.tsx b/packages/ui-breadcrumb/src/Breadcrumb/BreadcrumbLink/__new-tests__/BreadcrumbLink.test.tsx new file mode 100644 index 0000000000..71f308a319 --- /dev/null +++ b/packages/ui-breadcrumb/src/Breadcrumb/BreadcrumbLink/__new-tests__/BreadcrumbLink.test.tsx @@ -0,0 +1,123 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2015 - present Instructure, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +import React from 'react' +import { fireEvent, render, screen } from '@testing-library/react' +import '@testing-library/jest-dom/extend-expect' + +import { runAxeCheck } from '@instructure/ui-axe-check' +import { BreadcrumbLink } from '../index' + +const TEST_TEXT_01 = 'Account' +const TEST_LINK = 'http://instructure-test.com' +const TEST_TO = '/example' + +const originalResizeObserver = global.ResizeObserver + +describe('', () => { + beforeAll(() => { + // Mock for ResizeObserver browser API + global.ResizeObserver = jest.fn().mockImplementation(() => ({ + observe: jest.fn(), + unobserve: jest.fn(), + disconnect: jest.fn() + })) + }) + + it('should render an anchor tag when given a href prop', () => { + render({TEST_TEXT_01}) + const anchor = screen.getByRole('link') + + expect(anchor).toHaveAttribute('href', TEST_LINK) + }) + + it('should render as a button and respond to onClick event', () => { + const onClick = jest.fn() + + render({TEST_TEXT_01}) + const button = screen.getByRole('button') + + fireEvent.click(button) + + expect(onClick).toHaveBeenCalledTimes(1) + }) + + it('should allow to prop to pass through', () => { + const { container } = render( + {TEST_TEXT_01} + ) + const link = container.querySelector('a') + + expect(link).toBeInTheDocument() + expect(link).toHaveAttribute('to', TEST_TO) + }) + + it('should not render a link when not given an href prop', () => { + const { container } = render( + {TEST_TEXT_01} + ) + const elementWithHref = container.querySelector('[href]') + const anchor = container.querySelector('a') + const span = container.querySelector('span') + + expect(elementWithHref).toBeNull() + expect(anchor).toBeNull() + expect(span).toBeInTheDocument() + expect(span).toHaveTextContent(TEST_TEXT_01) + }) + + it('should not render a button when not given an onClick prop', () => { + const { container } = render( + {TEST_TEXT_01} + ) + const button = container.querySelector('button') + const span = container.querySelector('span') + + expect(button).toBeNull() + expect(span).toBeInTheDocument() + expect(span).toHaveTextContent(TEST_TEXT_01) + }) + + it('should meet a11y standards as a link', async () => { + const { container } = render( + {TEST_TEXT_01} + ) + const axeCheck = await runAxeCheck(container) + + expect(axeCheck).toBe(true) + }) + + it('should meet a11y standards as a span', async () => { + const { container } = render( + {TEST_TEXT_01} + ) + const axeCheck = await runAxeCheck(container) + + expect(axeCheck).toBe(true) + }) + + afterAll(() => { + global.ResizeObserver = originalResizeObserver + }) +}) diff --git a/packages/ui-breadcrumb/src/Breadcrumb/BreadcrumbLink/__tests__/BreadcrumbLink.test.tsx b/packages/ui-breadcrumb/src/Breadcrumb/BreadcrumbLink/__tests__/BreadcrumbLink.test.tsx deleted file mode 100644 index 5d10a6f87b..0000000000 --- a/packages/ui-breadcrumb/src/Breadcrumb/BreadcrumbLink/__tests__/BreadcrumbLink.test.tsx +++ /dev/null @@ -1,91 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2015 - present Instructure, Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -import React from 'react' - -import { expect, mount, stub } from '@instructure/ui-test-utils' - -import { BreadcrumbLink } from '../index' -import { BreadcrumbLinkLocator } from '../BreadcrumbLinkLocator' - -describe('', async () => { - it('should render a anchor tag when given an href prop', async () => { - await mount(Test) - const link = await BreadcrumbLinkLocator.find() - const anchor = await link.find('a') - - expect(anchor.getAttribute('href')).to.equal('#') - }) - - it('should render as a button and respond to onClick event', async () => { - const onClick = stub() - await mount(Test) - const link = await BreadcrumbLinkLocator.find() - const button = await link.find('button') - - await button.click() - - expect(onClick).to.have.been.calledOnce() - }) - - it('should allow to prop to pass through', async () => { - await mount(Test) - const link = await BreadcrumbLinkLocator.find() - expect(link.getAttribute('to')).to.equal('/example') - }) - - it('should not render a link when not given an href prop', async () => { - await mount(Test) - const link = await BreadcrumbLinkLocator.find() - const tagName = link.getTagName() - - expect(tagName).to.not.equal('button') - expect(tagName).to.not.equal('a') - expect(tagName).to.equal('span') - }) - - it('should not render a button when not given an onClick prop', async () => { - await mount(Test) - const link = await BreadcrumbLinkLocator.find() - const tagName = link.getTagName() - - expect(tagName).to.not.equal('button') - expect(tagName).to.not.equal('a') - expect(tagName).to.equal('span') - }) - - it('should meet a11y standards as a link', async () => { - await mount(Test) - const link = await BreadcrumbLinkLocator.find() - - expect(await link.accessible()).to.be.true() - }) - - it('should meet a11y standards as a span', async () => { - await mount(Test) - const link = await BreadcrumbLinkLocator.find() - - expect(await link.accessible()).to.be.true() - }) -}) diff --git a/packages/ui-breadcrumb/src/Breadcrumb/BreadcrumbLink/locator.ts b/packages/ui-breadcrumb/src/Breadcrumb/BreadcrumbLink/locator.ts deleted file mode 100644 index 55dc0a5374..0000000000 --- a/packages/ui-breadcrumb/src/Breadcrumb/BreadcrumbLink/locator.ts +++ /dev/null @@ -1,27 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2015 - present Instructure, Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -import { BreadcrumbLinkLocator } from './BreadcrumbLinkLocator' - -export { BreadcrumbLinkLocator } -export default BreadcrumbLinkLocator diff --git a/packages/ui-breadcrumb/src/Breadcrumb/BreadcrumbLocator.ts b/packages/ui-breadcrumb/src/Breadcrumb/BreadcrumbLocator.ts deleted file mode 100644 index 49838c8424..0000000000 --- a/packages/ui-breadcrumb/src/Breadcrumb/BreadcrumbLocator.ts +++ /dev/null @@ -1,39 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2015 - present Instructure, Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -import { locator } from '@instructure/ui-test-locator' - -import { Breadcrumb } from './index' -import { BreadcrumbLinkLocator } from './BreadcrumbLink/BreadcrumbLinkLocator' - -export { BreadcrumbLinkLocator } - -// @ts-expect-error ts-migrate(2339) FIXME: Property 'selector' does not exist on type 'typeof... Remove this comment to see the full error message -export const BreadcrumbLocator = locator(Breadcrumb.selector, { - findAllLinks: (...args: any[]) => { - return BreadcrumbLinkLocator.findAll(...args) - }, - findLink: (...args: any[]) => { - return BreadcrumbLinkLocator.find(...args) - } -}) diff --git a/packages/ui-breadcrumb/src/Breadcrumb/__new-tests__/Breadcrumb.test.tsx b/packages/ui-breadcrumb/src/Breadcrumb/__new-tests__/Breadcrumb.test.tsx new file mode 100644 index 0000000000..f394259a1b --- /dev/null +++ b/packages/ui-breadcrumb/src/Breadcrumb/__new-tests__/Breadcrumb.test.tsx @@ -0,0 +1,90 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2015 - present Instructure, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +import React from 'react' +import { render, screen } from '@testing-library/react' +import '@testing-library/jest-dom/extend-expect' + +import { runAxeCheck } from '@instructure/ui-axe-check' +import { Breadcrumb } from '../index' + +const TEST_LABEL = 'You are here:' +const TEST_TEXT_01 = 'Account' +const TEST_TEXT_02 = 'Settings' +const TEST_LINK = 'http://instructure-test.com' + +const originalResizeObserver = global.ResizeObserver + +describe('', () => { + beforeAll(() => { + // Mock for ResizeObserver browser API + global.ResizeObserver = jest.fn().mockImplementation(() => ({ + observe: jest.fn(), + unobserve: jest.fn(), + disconnect: jest.fn() + })) + }) + + it('should be accessible', async () => { + const { container } = render( + + {TEST_TEXT_01} + {TEST_TEXT_02} + + ) + const axeCheck = await runAxeCheck(container) + + expect(axeCheck).toBe(true) + }) + + it('should render the label as an aria-label attribute', () => { + render( + + {TEST_TEXT_01} + + ) + + const label = screen.getByLabelText(TEST_LABEL) + + expect(label).toBeInTheDocument() + expect(label).toHaveAttribute('aria-label', TEST_LABEL) + }) + + it('should render an icon as a separator', () => { + const { container } = render( + + {TEST_TEXT_01} + {TEST_TEXT_02} + + ) + const icon = container.querySelector('svg') + + expect(icon).toBeInTheDocument() + expect(icon).toHaveAttribute('aria-hidden', 'true') + }) + + afterAll(() => { + global.ResizeObserver = originalResizeObserver + }) +}) diff --git a/packages/ui-breadcrumb/src/Breadcrumb/__tests__/Breadcrumb.test.tsx b/packages/ui-breadcrumb/src/Breadcrumb/__tests__/Breadcrumb.test.tsx deleted file mode 100644 index 418cce0548..0000000000 --- a/packages/ui-breadcrumb/src/Breadcrumb/__tests__/Breadcrumb.test.tsx +++ /dev/null @@ -1,62 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2015 - present Instructure, Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -import React from 'react' - -import { expect, mount, generateA11yTests } from '@instructure/ui-test-utils' - -import { Breadcrumb } from '../index' -import { BreadcrumbLocator } from '../BreadcrumbLocator' -import BreadcrumbExamples from '../__examples__/Breadcrumb.examples' - -describe('', async () => { - it('should render the label as an aria-label attribute', async () => { - await mount( - - Account - - ) - const breadcrumb = await BreadcrumbLocator.find() - const label = await breadcrumb.find(':label(Settings)') - - expect(label.getAttribute('aria-label')).to.equal('Settings') - }) - - describe('with generated examples', async () => { - generateA11yTests(Breadcrumb, BreadcrumbExamples) - }) - - it('should render an icon as a separator', async () => { - await mount( - - Account - Settings - - ) - const breadcrumb = await BreadcrumbLocator.find() - const icon = await breadcrumb.find('svg') - - expect(icon.getAttribute('aria-hidden')).to.equal('true') - }) -}) diff --git a/packages/ui-breadcrumb/src/Breadcrumb/locator.ts b/packages/ui-breadcrumb/src/Breadcrumb/locator.ts deleted file mode 100644 index bdde46db87..0000000000 --- a/packages/ui-breadcrumb/src/Breadcrumb/locator.ts +++ /dev/null @@ -1,27 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2015 - present Instructure, Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -import { BreadcrumbLocator } from './BreadcrumbLocator' - -export { BreadcrumbLocator } -export default BreadcrumbLocator diff --git a/packages/ui-breadcrumb/tsconfig.build.json b/packages/ui-breadcrumb/tsconfig.build.json index dee617ff5f..0f5a55a596 100644 --- a/packages/ui-breadcrumb/tsconfig.build.json +++ b/packages/ui-breadcrumb/tsconfig.build.json @@ -8,7 +8,6 @@ "include": ["src"], "references": [ { "path": "../ui-babel-preset/tsconfig.build.json" }, - { "path": "../ui-test-locator/tsconfig.build.json" }, { "path": "../ui-test-utils/tsconfig.build.json" }, { "path": "../ui-themes/tsconfig.build.json" }, { "path": "../emotion/tsconfig.build.json" }, @@ -20,6 +19,7 @@ { "path": "../ui-testable/tsconfig.build.json" }, { "path": "../ui-truncate-text/tsconfig.build.json" }, { "path": "../ui-utils/tsconfig.build.json" }, - { "path": "../ui-view/tsconfig.build.json" } + { "path": "../ui-view/tsconfig.build.json" }, + { "path": "../ui-axe-check/tsconfig.build.json" } ] }