Enables adding alt text to image uploads

It also allows editing other a11y features, like making
the image presentational or embedding it as a link.

It splits out the Image Options form from the editor tray
to avoid copy/pasting too much. The logic and state are
still separated between the upload and edit forms, since
they don't overlap super well.

It also edits the logic around uploading and embedding
images to support the extra attributes.

A few Jest tests were added to check for appropriate
attributes being added.

Test Plan:
With RCE Enhancements enabled, visit an RCE page
Open the image upload modal and choose an image
Notice the image attributes form underneath.
Add alt text. Adjust the other attributes as desired.
Upload the image
Open the Raw HTML Editor.
Notice that the alt text is added to your image, along
with whatever other attributes you changed.
Decoration Images are given the `role="presentation"`
attribute; Display As "Link" embeds the image as a
link.

Fixes LS-445

flag = rce_enhancements

Change-Id: I462e2c322a3b39fc4fa9f47b675426c581c3a398
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/242736
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Jeremy Stanley <jeremy@instructure.com>
QA-Review: Robin Kuss <rkuss@instructure.com>
Product-Review: Peyton Craighill <pcraighill@instructure.com>
This commit is contained in:
Alex Anderson 2020-07-15 17:11:24 -04:00
parent e5d36e0649
commit 590f43aa32
9 changed files with 755 additions and 151 deletions

View File

@ -252,7 +252,7 @@
"karma-verbose-reporter": "^0.0.6",
"karma-webpack": "^3",
"lint-staged": "^9",
"merge-stream": "^1",
"merge-stream": "^2",
"mockdate": "^2.0.2",
"moment-timezone-data-webpack-plugin": "^1.0.3",
"moxios": "^0.4",

View File

@ -58,30 +58,37 @@
"@instructure/k5uploader": ">=1",
"@instructure/media-capture": "~7.1.0",
"@instructure/ui-a11y": "6",
"@instructure/ui-a11y-content": "^7.1.1",
"@instructure/ui-alerts": "6",
"@instructure/ui-billboard": "6",
"@instructure/ui-buttons": "6",
"@instructure/ui-checkbox": "^7.1.1",
"@instructure/ui-color-utils": "6",
"@instructure/ui-elements": "6",
"@instructure/ui-flex": "6",
"@instructure/ui-focusable": "6",
"@instructure/ui-form-field": "6",
"@instructure/ui-forms": "6",
"@instructure/ui-heading": "^7.1.1",
"@instructure/ui-icons": "6",
"@instructure/ui-layout": "6",
"@instructure/ui-media-player": "^5.54.0",
"@instructure/ui-motion": "6",
"@instructure/ui-overlays": "6",
"@instructure/ui-pagination": "6",
"@instructure/ui-radio-input": "^7.1.1",
"@instructure/ui-react-utils": "6",
"@instructure/ui-spinner": "6",
"@instructure/ui-svg-images": "6",
"@instructure/ui-tabs": "6",
"@instructure/ui-text": "6",
"@instructure/ui-text-area": "^7.1.1",
"@instructure/ui-text-input": "6",
"@instructure/ui-themeable": "6",
"@instructure/ui-themes": "6",
"@instructure/ui-toggle-details": "6",
"@instructure/ui-tooltip": "^7.1.1",
"@instructure/ui-tray": "^7.1.1",
"@instructure/ui-tree-browser": "6",
"@instructure/ui-utils": "6",
"@instructure/ui-view": "6",
@ -120,9 +127,9 @@
"@instructure/browserslist-config-canvas-lms": ">=2",
"@instructure/ui-babel-preset": "6",
"@testing-library/dom": "^6",
"@testing-library/jest-dom": "^4",
"@testing-library/react": "^9",
"@testing-library/user-event": "^4.2.0",
"@testing-library/jest-dom": "^4",
"axe-testcafe": "^3",
"babel-loader": "^8.0.0",
"babel-plugin-dynamic-import-node": "^2.2.0",

View File

@ -66,16 +66,20 @@ export function renderLinkedImage(linkElem, image) {
}
export function constructJSXImageElement(image, opts = {}) {
const {href, url, title, display_name, alt_text, link, ...otherAttributes} = image
const {
href,
url,
title,
display_name,
alt_text,
isDecorativeImage,
link,
...otherAttributes
} = image
const src = href || url
let altText = title || display_name
if (alt_text) {
if (alt_text.decorativeSelected) {
altText = alt_text.altText || ' '
otherAttributes.role = 'presentation'
} else {
altText = alt_text.altText
}
const altText = alt_text || title || display_name || ''
if (isDecorativeImage) {
otherAttributes.role = 'presentation'
}
const ret = (

View File

@ -18,25 +18,16 @@
import React, {useState} from 'react'
import {bool, func, number, shape, string} from 'prop-types'
import {ScreenReaderContent} from '@instructure/ui-a11y'
import {Button, CloseButton} from '@instructure/ui-buttons'
import {CloseButton} from '@instructure/ui-buttons'
import {Heading} from '@instructure/ui-elements'
import {Checkbox, RadioInput, RadioInputGroup, Select, TextArea} from '@instructure/ui-forms'
import {IconQuestionLine} from '@instructure/ui-icons'
import {Flex, View} from '@instructure/ui-layout'
import {Tooltip, Tray} from '@instructure/ui-overlays'
import {Heading} from '@instructure/ui-heading'
import {Flex} from '@instructure/ui-flex'
import {Tray} from '@instructure/ui-tray'
import {
CUSTOM,
MIN_HEIGHT,
MIN_WIDTH,
imageSizes,
labelForImageSize,
scaleToSize
} from '../ImageEmbedOptions'
import {CUSTOM, MIN_HEIGHT, MIN_WIDTH, scaleToSize} from '../ImageEmbedOptions'
import formatMessage from '../../../../format-message'
import DimensionsInput, {useDimensionsState} from '../../shared/DimensionsInput'
import {useDimensionsState} from '../../shared/DimensionsInput'
import ImageOptionsForm from '../../shared/ImageOptionsForm'
export default function ImageOptionsTray(props) {
const {imageOptions, onRequestClose, open} = props
@ -57,8 +48,6 @@ export default function ImageOptionsTray(props) {
minWidth: MIN_WIDTH
})
const imageSizeOption = {label: labelForImageSize(imageSize), value: imageSize}
function handleAltTextChange(event) {
setAltText(event.target.value)
}
@ -103,29 +92,6 @@ export default function ImageOptionsTray(props) {
})
}
const tooltipText = formatMessage('Used by screen readers to describe the content of an image')
const textAreaLabel = (
<Flex alignItems="center">
<Flex.Item>{formatMessage('Alt Text')}</Flex.Item>
<Flex.Item margin="0 0 0 xx-small">
<Tooltip
on={['hover', 'focus']}
placement="top"
tip={
<View display="block" id="alt-text-label-tooltip" maxWidth="14rem">
{tooltipText}
</View>
}
>
<Button icon={IconQuestionLine} size="small" variant="icon">
<ScreenReaderContent>{tooltipText}</ScreenReaderContent>
</Button>
</Tooltip>
</Flex.Item>
</Flex>
)
const messagesForSize = []
if (imageSize !== CUSTOM) {
messagesForSize.push({
@ -134,10 +100,6 @@ export default function ImageOptionsTray(props) {
})
}
const saveDisabled =
displayAs === 'embed' &&
((!isDecorativeImage && altText === '') || (imageSize === CUSTOM && !dimensionsState.isValid))
return (
<Tray
data-mce-component
@ -167,88 +129,19 @@ export default function ImageOptionsTray(props) {
</Flex.Item>
<Flex.Item as="form" grow margin="none" shrink>
<Flex justifyItems="space-between" direction="column" height="100%">
<Flex.Item grow padding="small" shrink>
<Flex direction="column">
<Flex.Item padding="small">
<TextArea
aria-describedby="alt-text-label-tooltip"
height="4rem"
label={textAreaLabel}
onChange={handleAltTextChange}
placeholder={formatMessage('(Describe the image)')}
resize="vertical"
value={altText}
/>
</Flex.Item>
<Flex.Item padding="small">
<Checkbox
checked={isDecorativeImage}
disabled={displayAs === 'link'}
label={formatMessage('Decorative Image')}
onChange={handleIsDecorativeChange}
/>
</Flex.Item>
<Flex.Item margin="small none none none" padding="small">
<RadioInputGroup
description={formatMessage('Display Options')}
name="display-image-as"
onChange={handleDisplayAsChange}
value={displayAs}
>
<RadioInput label={formatMessage('Embed Image')} value="embed" />
<RadioInput
label={formatMessage('Display Text Link (Opens in a new tab)')}
value="link"
/>
</RadioInputGroup>
</Flex.Item>
<Flex.Item margin="small none xx-small none">
<View as="div" padding="small small xx-small small">
<Select
disabled={displayAs !== 'embed'}
label={formatMessage('Size')}
messages={messagesForSize}
onChange={handleImageSizeChange}
selectedOption={imageSizeOption}
>
{imageSizes.map(size => (
<option key={size} value={size}>
{labelForImageSize(size)}
</option>
))}
</Select>
</View>
{imageSize === CUSTOM && (
<View as="div" padding="xx-small small">
<DimensionsInput
dimensionsState={dimensionsState}
disabled={displayAs !== 'embed'}
minHeight={MIN_HEIGHT}
minWidth={MIN_WIDTH}
/>
</View>
)}
</Flex.Item>
</Flex>
</Flex.Item>
<Flex.Item
background="light"
borderWidth="small none none none"
padding="small medium"
textAlign="end"
>
<Button disabled={saveDisabled} onClick={handleSave} variant="primary">
{formatMessage('Done')}
</Button>
</Flex.Item>
</Flex>
<ImageOptionsForm
imageSize={imageSize}
displayAs={displayAs}
isDecorativeImage={isDecorativeImage}
altText={altText}
dimensionsState={dimensionsState}
handleAltTextChange={handleAltTextChange}
handleIsDecorativeChange={handleIsDecorativeChange}
handleDisplayAsChange={handleDisplayAsChange}
handleImageSizeChange={handleImageSizeChange}
messagesForSize={messagesForSize}
handleSave={handleSave}
/>
</Flex.Item>
</Flex>
</Tray>

View File

@ -0,0 +1,177 @@
/*
* Copyright (C) 2020 - present Instructure, Inc.
*
* This file is part of Canvas.
*
* Canvas is free software: you can redistribute it and/or modify it under
* the terms of the GNU Affero General Public License as published by the Free
* Software Foundation, version 3 of the License.
*
* Canvas is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
* A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
* details.
*
* You should have received a copy of the GNU Affero General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
import React from 'react'
import {ScreenReaderContent} from '@instructure/ui-a11y-content'
import {Button} from '@instructure/ui-buttons'
import {Select} from '@instructure/ui-forms'
import {RadioInput, RadioInputGroup} from '@instructure/ui-radio-input'
import {TextArea} from '@instructure/ui-text-area'
import {Checkbox} from '@instructure/ui-checkbox'
import {IconQuestionLine} from '@instructure/ui-icons'
import {Flex} from '@instructure/ui-flex'
import {View} from '@instructure/ui-view'
import {Tooltip} from '@instructure/ui-tooltip'
import {
CUSTOM,
MIN_HEIGHT,
MIN_WIDTH,
imageSizes,
labelForImageSize
} from '../instructure_image/ImageEmbedOptions'
import formatMessage from '../../../format-message'
import DimensionsInput from './DimensionsInput'
const ImageOptionsForm = ({
imageSize,
displayAs,
isDecorativeImage,
altText,
dimensionsState,
handleAltTextChange,
handleIsDecorativeChange,
handleDisplayAsChange,
handleImageSizeChange,
messagesForSize,
handleSave,
hideDimensions
}) => {
const imageSizeOption = {label: labelForImageSize(imageSize), value: imageSize}
const tooltipText = formatMessage('Used by screen readers to describe the content of an image')
const textAreaLabel = (
<Flex alignItems="center">
<Flex.Item>{formatMessage('Alt Text')}</Flex.Item>
<Flex.Item margin="0 0 0 xx-small">
<Tooltip
on={['hover', 'focus']}
placement="top"
tip={
<View display="block" id="alt-text-label-tooltip" maxWidth="14rem">
{tooltipText}
</View>
}
>
<Button icon={IconQuestionLine} size="small" variant="icon">
<ScreenReaderContent>{tooltipText}</ScreenReaderContent>
</Button>
</Tooltip>
</Flex.Item>
</Flex>
)
const saveDisabled =
displayAs === 'embed' &&
((!isDecorativeImage && altText === '') || (imageSize === CUSTOM && !dimensionsState?.isValid))
return (
<Flex justifyItems="space-between" direction="column" height="100%">
<Flex.Item grow padding="small" shrink>
<Flex direction="column">
<Flex.Item padding="small">
<TextArea
disabled={isDecorativeImage}
aria-describedby="alt-text-label-tooltip"
height="4rem"
label={textAreaLabel}
onChange={handleAltTextChange}
placeholder={formatMessage('(Describe the image)')}
resize="vertical"
value={altText}
/>
</Flex.Item>
<Flex.Item padding="small">
<Checkbox
checked={isDecorativeImage}
disabled={displayAs === 'link'}
label={formatMessage('Decorative Image')}
onChange={handleIsDecorativeChange}
/>
</Flex.Item>
<Flex.Item margin="small none none none" padding="small">
<RadioInputGroup
description={formatMessage('Display Options')}
name="display-image-as"
onChange={handleDisplayAsChange}
value={displayAs}
>
<RadioInput label={formatMessage('Embed Image')} value="embed" />
<RadioInput
disabled={isDecorativeImage}
label={formatMessage('Display Text Link (Opens in a new tab)')}
value="link"
/>
</RadioInputGroup>
</Flex.Item>
{!hideDimensions && (
<Flex.Item margin="small none xx-small none">
<View as="div" padding="small small xx-small small">
<Select
disabled={displayAs !== 'embed'}
label={formatMessage('Size')}
messages={messagesForSize}
onChange={handleImageSizeChange}
selectedOption={imageSizeOption}
>
{imageSizes.map(size => (
<option key={size} value={size}>
{labelForImageSize(size)}
</option>
))}
</Select>
</View>
{imageSize === CUSTOM && (
<View as="div" padding="xx-small small">
<DimensionsInput
dimensionsState={dimensionsState}
disabled={displayAs !== 'embed'}
minHeight={MIN_HEIGHT}
minWidth={MIN_WIDTH}
/>
</View>
)}
</Flex.Item>
)}
</Flex>
</Flex.Item>
{handleSave && (
<Flex.Item
background="light"
borderWidth="small none none none"
padding="small medium"
textAlign="end"
>
<Button disabled={saveDisabled} onClick={handleSave} variant="primary">
{formatMessage('Done')}
</Button>
</Flex.Item>
)}
</Flex>
)
}
export default ImageOptionsForm

View File

@ -33,6 +33,7 @@ import indicate from '../../../../common/indicate'
import {StoreProvider} from '../StoreContext'
import RceApiSource from '../../../../sidebar/sources/api'
import Bridge from '../../../../bridge'
import ImageOptionsForm from '../ImageOptionsForm'
const ComputerPanel = React.lazy(() => import('./ComputerPanel'))
const UrlPanel = React.lazy(() => import('./UrlPanel'))
@ -51,6 +52,7 @@ export const handleSubmit = (
afterInsert = () => {}
) => {
Bridge.focusEditor(editor.rceWrapper) // necessary since it blurred when the modal opened
const {altText, isDecorativeImage, displayAs} = uploadData?.imageOptions || {}
switch (selectedPanel) {
case 'COMPUTER': {
const {theFile} = uploadData
@ -59,7 +61,10 @@ export const handleSubmit = (
name: theFile.name,
size: theFile.size,
contentType: theFile.type,
domObject: theFile
domObject: theFile,
altText,
isDecorativeImage,
displayAs
}
let tabContext = 'documents'
if (isImage(theFile.type)) {
@ -73,18 +78,34 @@ export const handleSubmit = (
case 'UNSPLASH': {
const {unsplashData} = uploadData
source.pingbackUnsplash(unsplashData.id)
editor.insertContent(
editor.dom.createHTML('img', {src: unsplashData.url, alt: unsplashData.alt})
)
let editorHtml
if (displayAs !== 'link' && /image/.test(accept)) {
editorHtml = editor.dom.createHTML('img', {
src: unsplashData.url,
alt: altText || unsplashData.alt,
role: isDecorativeImage ? 'presentation' : undefined
})
} else {
editorHtml = editor.dom.createHTML(
'a',
{href: unsplashData.url},
altText || unsplashData.url
)
}
editor.insertContent(editorHtml)
break
}
case 'URL': {
const {fileUrl} = uploadData
let editorHtml
if (/image/.test(accept)) {
editorHtml = editor.dom.createHTML('img', {src: fileUrl})
if (displayAs !== 'link' && /image/.test(accept)) {
editorHtml = editor.dom.createHTML('img', {
src: fileUrl,
alt: altText,
role: isDecorativeImage ? 'presentation' : undefined
})
} else {
editorHtml = editor.dom.createHTML('a', {href: fileUrl})
editorHtml = editor.dom.createHTML('a', {href: fileUrl}, altText || fileUrl)
}
editor.insertContent(editorHtml)
break
@ -131,6 +152,23 @@ export function UploadFile({
const [modalBodyHeight, setModalBodyHeight] = useState(undefined)
const bodyRef = React.createRef()
// Image options props
const [altText, setAltText] = useState('')
const [isDecorativeImage, setIsDecorativeImage] = useState(false)
const [displayAs, setDisplayAs] = useState('embed')
function handleAltTextChange(event) {
setAltText(event.target.value)
}
function handleIsDecorativeChange(event) {
setIsDecorativeImage(event.target.checked)
}
function handleDisplayAsChange(event) {
setDisplayAs(event.target.value)
}
trayProps = trayProps || Bridge.trayProps.get(editor)
const source =
@ -246,7 +284,12 @@ export function UploadFile({
editor,
accept,
selectedPanel,
{fileUrl, theFile, unsplashData},
{
fileUrl,
theFile,
unsplashData,
imageOptions: {altText, isDecorativeImage, displayAs}
},
contentProps,
source,
onDismiss
@ -266,6 +309,17 @@ export function UploadFile({
<Tabs onRequestTabChange={(event, {index}) => setSelectedPanel(panels[index])}>
{renderTabs()}
</Tabs>
{/image/.test(accept) && (
<ImageOptionsForm
altText={altText}
isDecorativeImage={isDecorativeImage}
displayAs={displayAs}
handleAltTextChange={handleAltTextChange}
handleIsDecorativeChange={handleIsDecorativeChange}
handleDisplayAsChange={handleDisplayAsChange}
hideDimensions
/>
)}
</Modal.Body>
<Modal.Footer>
<Button onClick={onDismiss}>{formatMessage('Close')}</Button>&nbsp;

View File

@ -241,6 +241,13 @@ describe('UploadFile', () => {
handleSubmit(fakeEditor, 'images/*', 'URL', {fileUrl: 'http://fake/path'})
expect(fakeEditor.content).toEqual('<img src="http://fake/path" />')
})
it('inserts the image with url source and includes alt text', () => {
handleSubmit(fakeEditor, 'images/*', 'URL', {
fileUrl: 'http://fake/path',
imageOptions: {altText: '(╯°□°)╯︵ ┻━┻'}
})
expect(fakeEditor.content).toEqual('<img src="http://fake/path" alt="(╯°□°)╯︵ ┻━┻" />')
})
describe('contentProps.startMediaUpload', () => {
it('called for images when Computer panel is selected', () => {
@ -288,6 +295,35 @@ describe('UploadFile', () => {
domObject: fakeFile
})
})
it('called for images when Computer panel is selected and includes image options', () => {
const fakeMediaUpload = jest.fn()
const fakeFile = {
name: 'foo.png',
size: 3000,
type: 'image/png'
}
handleSubmit(
fakeEditor,
'images/*',
'COMPUTER',
{
theFile: fakeFile,
imageOptions: {altText: '(╯°□°)╯︵ ┻━┻', displayAs: 'embed', isDecorativeImage: true}
},
{startMediaUpload: fakeMediaUpload}
)
expect(fakeMediaUpload).toHaveBeenCalledWith('images', {
altText: '(╯°□°)╯︵ ┻━┻',
displayAs: 'embed',
isDecorativeImage: true,
parentFolderId: 'media',
name: 'foo.png',
size: 3000,
contentType: 'image/png',
domObject: fakeFile
})
})
it('called for audio media when Computer panel is selected', () => {
const fakeMediaUpload = jest.fn()

View File

@ -135,13 +135,18 @@ function linkingExistingContent() {
}
export function embedUploadResult(results, selectedTabType) {
const embedData = fileEmbed(results)
if (selectedTabType === 'images' && isImage(embedData.type) && !linkingExistingContent()) {
if (
selectedTabType === 'images' &&
isImage(embedData.type) &&
!linkingExistingContent() &&
results.displayAs !== 'link'
) {
const file_props = {
href: results.href || results.url,
title: results.title,
display_name: results.display_name || results.name || results.title || results.filename,
alt_text: results.alt_text,
isDecorativeImage: results.isDecorativeImage,
content_type: results['content-type'],
contextType: results.contextType,
contextId: results.contextId,
@ -169,7 +174,12 @@ export function embedUploadResult(results, selectedTabType) {
{
'data-canvas-previewable': isPreviewable(results['content-type']),
href: results.href || results.url,
title: results.display_name || results.name || results.title || results.filename,
title:
results.alt_text ||
results.display_name ||
results.name ||
results.title ||
results.filename,
content_type: results['content-type'],
embed: embedData,
target: '_blank',
@ -357,6 +367,15 @@ export function uploadPreflight(tabContext, fileMetaProps) {
.then(results => {
return setAltText(fileMetaProps.altText, results)
})
.then(results => {
if (fileMetaProps.isDecorativeImage) {
results.isDecorativeImage = fileMetaProps.isDecorativeImage
}
if (fileMetaProps.displayAs) {
results.displayAs = fileMetaProps.displayAs
}
return results
})
.then(results => {
// This may or may not be necessary depending on the upload
dispatch(removePlaceholdersFor(fileMetaProps.name))

418
yarn.lock
View File

@ -1156,6 +1156,15 @@
"@babel/helper-module-imports" "^7.8.3"
babel-plugin-macros "^2.8.0"
"@instructure/console@^7.1.1":
version "7.1.1"
resolved "https://registry.yarnpkg.com/@instructure/console/-/console-7.1.1.tgz#33a6aa23f7ff1bd20515e96baa4eac95d20df066"
integrity sha512-Y+7OY3gpWbLdfuhrhCyYjq4Vy15LhNr9BCTtuTK8U5xWEYV/weF/99X4J9J4JwsGabfSmfdRUzXKV2XFhKRxXw==
dependencies:
"@babel/helper-annotate-as-pure" "^7.8.3"
"@babel/helper-module-imports" "^7.8.3"
babel-plugin-macros "^2.8.0"
"@instructure/debounce@6", "@instructure/debounce@^6.24.0", "@instructure/debounce@^6.26.0":
version "6.26.0"
resolved "https://registry.yarnpkg.com/@instructure/debounce/-/debounce-6.26.0.tgz#8a093eaf4f2f71337daba26f6eb19ce01856e1ec"
@ -1170,6 +1179,13 @@
dependencies:
"@babel/runtime" "^7"
"@instructure/debounce@^7.1.1":
version "7.1.1"
resolved "https://registry.yarnpkg.com/@instructure/debounce/-/debounce-7.1.1.tgz#f67c9837d746512dbdd571c2c5dbfb12d6b82e5c"
integrity sha512-bcf3YHoZA9kMZoU0CUOotGn2H854yw+sM2E29qze6j49mpQcq7nABCD1fWTAkFTWwT0AcTMpF9Ob06I7P4tO8Q==
dependencies:
"@babel/runtime" "^7.9.2"
"@instructure/instructure-theme@^6.24.0":
version "6.24.0"
resolved "https://registry.yarnpkg.com/@instructure/instructure-theme/-/instructure-theme-6.24.0.tgz#fd7554aa4852d97d84fe70bcf8058396346e89c7"
@ -1317,6 +1333,21 @@
keycode "^2"
prop-types "^15"
"@instructure/ui-a11y-content@^7.1.1":
version "7.1.1"
resolved "https://registry.yarnpkg.com/@instructure/ui-a11y-content/-/ui-a11y-content-7.1.1.tgz#53c988ce0caf11803a81438568e1df0504f73191"
integrity sha512-9Ny5m47FYr7zNZguZ4uNiH36tj9aUVBQ0Cr5bWj/iuAfqOVmMTfdgMo5fSschN8PJTu2jg02YPKpPWhJhU+KrA==
dependencies:
"@babel/runtime" "^7.9.2"
"@instructure/console" "^7.1.1"
"@instructure/ui-dom-utils" "^7.1.1"
"@instructure/ui-react-utils" "^7.1.1"
"@instructure/ui-themeable" "^7.1.1"
"@instructure/ui-utils" "^7.1.1"
"@instructure/uid" "^7.1.1"
keycode "^2"
prop-types "^15"
"@instructure/ui-a11y-utils@^6.24.0", "@instructure/ui-a11y-utils@^6.26.0":
version "6.26.0"
resolved "https://registry.yarnpkg.com/@instructure/ui-a11y-utils/-/ui-a11y-utils-6.26.0.tgz#bb48a28b67d8bc1081cfe1f223f64fd2efe22874"
@ -1333,6 +1364,22 @@
keycode "^2"
prop-types "^15"
"@instructure/ui-a11y-utils@^7.1.1":
version "7.1.1"
resolved "https://registry.yarnpkg.com/@instructure/ui-a11y-utils/-/ui-a11y-utils-7.1.1.tgz#21719dea2a71df9141a6c2a47b505a3705b96693"
integrity sha512-CBIQ20RNXMprD3TGJD08qbejGTok62mmzB7x1OGoYj07bqtfYV7IxMASChU+KRTSSeteGSIHo+cJiT9F05Pvug==
dependencies:
"@babel/runtime" "^7.9.2"
"@instructure/console" "^7.1.1"
"@instructure/ui-a11y-content" "^7.1.1"
"@instructure/ui-dom-utils" "^7.1.1"
"@instructure/ui-react-utils" "^7.1.1"
"@instructure/ui-testable" "^7.1.1"
"@instructure/ui-themeable" "^7.1.1"
"@instructure/uid" "^7.1.1"
keycode "^2"
prop-types "^15"
"@instructure/ui-a11y@6", "@instructure/ui-a11y@^6.17.0", "@instructure/ui-a11y@^6.9.0":
version "6.24.0"
resolved "https://registry.yarnpkg.com/@instructure/ui-a11y/-/ui-a11y-6.24.0.tgz#18c1005fe0f3607e53ecccaebf41fe3c1140e309"
@ -1591,6 +1638,27 @@
keycode "^2"
prop-types "^15"
"@instructure/ui-checkbox@^7.1.1":
version "7.1.1"
resolved "https://registry.yarnpkg.com/@instructure/ui-checkbox/-/ui-checkbox-7.1.1.tgz#ada839030b29c7925406fabaf19ff36d8fd2ca15"
integrity sha512-gk2oNryqCfqmmJfdNNGVS9eyLRUzhT358sNCjeWFVEtOgVk7cUICH6Jh02+OW4Nwat4EqiEqA7p4CjfK28xMCA==
dependencies:
"@babel/runtime" "^7.9.2"
"@instructure/console" "^7.1.1"
"@instructure/ui-dom-utils" "^7.1.1"
"@instructure/ui-form-field" "^7.1.1"
"@instructure/ui-icons" "^7.1.1"
"@instructure/ui-prop-types" "^7.1.1"
"@instructure/ui-react-utils" "^7.1.1"
"@instructure/ui-svg-images" "^7.1.1"
"@instructure/ui-testable" "^7.1.1"
"@instructure/ui-themeable" "^7.1.1"
"@instructure/ui-utils" "^7.1.1"
"@instructure/uid" "^7.1.1"
classnames "^2"
keycode "^2"
prop-types "^15"
"@instructure/ui-color-utils@6", "@instructure/ui-color-utils@^6.17.0", "@instructure/ui-color-utils@^6.22.0", "@instructure/ui-color-utils@^6.24.0", "@instructure/ui-color-utils@^6.26.0":
version "6.26.0"
resolved "https://registry.yarnpkg.com/@instructure/ui-color-utils/-/ui-color-utils-6.26.0.tgz#00485a8b265f4ef6ef9c5593b6439ac5fee1824d"
@ -1599,6 +1667,14 @@
"@babel/runtime" "^7.9.2"
tinycolor2 "^1.4.1"
"@instructure/ui-color-utils@^7.1.1":
version "7.1.1"
resolved "https://registry.yarnpkg.com/@instructure/ui-color-utils/-/ui-color-utils-7.1.1.tgz#6032374b038603d8811555e97f0d06997352954e"
integrity sha512-0Bdv1SIw1FI9nhHdeHaf47gat1VZNiNVCJmtsAkC9nJxMa3IzFg24j++ns2z+cIqoivkrKLPFHozjXPWpyrT6g==
dependencies:
"@babel/runtime" "^7.9.2"
tinycolor2 "^1.4.1"
"@instructure/ui-container@^5.52.3":
version "5.52.3"
resolved "https://registry.yarnpkg.com/@instructure/ui-container/-/ui-container-5.52.3.tgz#0c60a0c16ada533d20f119673c949094aab9c427"
@ -1677,6 +1753,13 @@
dependencies:
"@babel/runtime" "^7"
"@instructure/ui-decorator@^7.1.1":
version "7.1.1"
resolved "https://registry.yarnpkg.com/@instructure/ui-decorator/-/ui-decorator-7.1.1.tgz#0c532277194acd8b32709dddfb72efd4723d0e12"
integrity sha512-1s6F+GEiUkURDy69xsaViNQyrQr+JRR8RqpW8Blgm1cdGATE4oUJ+bM7HsQicFUPOoGDNSnBQyqJ+I84ZXI52w==
dependencies:
"@babel/runtime" "^7.9.2"
"@instructure/ui-dialog@^6.24.0", "@instructure/ui-dialog@^6.26.0":
version "6.26.0"
resolved "https://registry.yarnpkg.com/@instructure/ui-dialog/-/ui-dialog-6.26.0.tgz#7bbab4b2f8ebedc81b406dd1cfde65a919535405"
@ -1690,6 +1773,19 @@
"@instructure/ui-themeable" "^6.26.0"
prop-types "^15"
"@instructure/ui-dialog@^7.1.1":
version "7.1.1"
resolved "https://registry.yarnpkg.com/@instructure/ui-dialog/-/ui-dialog-7.1.1.tgz#e21cc2d390c5f9a686ec4dcdb45039da1bb33ac8"
integrity sha512-yScoq9hkoiqz0ydTlMFJFaxJ2pwnkxzCLLhRTLsb0lFLkcMpnIDnerTvmLGMzYfdX1VNgG/p0t7ml0t6jdXIXg==
dependencies:
"@babel/runtime" "^7.9.2"
"@instructure/ui-a11y-utils" "^7.1.1"
"@instructure/ui-dom-utils" "^7.1.1"
"@instructure/ui-react-utils" "^7.1.1"
"@instructure/ui-testable" "^7.1.1"
"@instructure/ui-themeable" "^7.1.1"
prop-types "^15"
"@instructure/ui-dom-utils@^6.22.0", "@instructure/ui-dom-utils@^6.24.0", "@instructure/ui-dom-utils@^6.26.0":
version "6.26.0"
resolved "https://registry.yarnpkg.com/@instructure/ui-dom-utils/-/ui-dom-utils-6.26.0.tgz#0fed75df3b223041b1f8fa60d963e3991cf17c07"
@ -1698,6 +1794,14 @@
"@babel/runtime" "^7.9.2"
"@instructure/console" "^6.26.0"
"@instructure/ui-dom-utils@^7.1.1":
version "7.1.1"
resolved "https://registry.yarnpkg.com/@instructure/ui-dom-utils/-/ui-dom-utils-7.1.1.tgz#9b93df2fa4351d0c288efbf852c5b793a18725a3"
integrity sha512-t0MspHL52Rnn+ZYea1ZONVhV7b32wcjIzEasq0BFfQzNBDRnKpLvxs+uTaZ1+9MdbwAJQi/B2y2eaU/P6hX15Q==
dependencies:
"@babel/runtime" "^7.9.2"
"@instructure/console" "^7.1.1"
"@instructure/ui-editable@6":
version "6.26.0"
resolved "https://registry.yarnpkg.com/@instructure/ui-editable/-/ui-editable-6.26.0.tgz#19621b219b08875b0896ce5a1767a82090c0bddd"
@ -1875,6 +1979,24 @@
classnames "^2"
prop-types "^15"
"@instructure/ui-form-field@^7.1.1":
version "7.1.1"
resolved "https://registry.yarnpkg.com/@instructure/ui-form-field/-/ui-form-field-7.1.1.tgz#e74f1915927a0d2f7d53b3e7afd97684a8f86f57"
integrity sha512-RuRX9NK1j5iL2pGp1syXVjCVtqjGIMT050KT9xwBQgppSn8cO6S/G9+k3NLEUdyR+LHyE42yRHi/QgZV8/zNrA==
dependencies:
"@babel/runtime" "^7.9.2"
"@instructure/console" "^7.1.1"
"@instructure/ui-a11y-content" "^7.1.1"
"@instructure/ui-a11y-utils" "^7.1.1"
"@instructure/ui-grid" "^7.1.1"
"@instructure/ui-icons" "^7.1.1"
"@instructure/ui-react-utils" "^7.1.1"
"@instructure/ui-themeable" "^7.1.1"
"@instructure/ui-utils" "^7.1.1"
"@instructure/uid" "^7.1.1"
classnames "^2"
prop-types "^15"
"@instructure/ui-forms@6", "@instructure/ui-forms@^6.17.0":
version "6.24.0"
resolved "https://registry.yarnpkg.com/@instructure/ui-forms/-/ui-forms-6.24.0.tgz#61cf4dad7c874641e5db26c01081276206560974"
@ -1958,6 +2080,21 @@
classnames "^2"
prop-types "^15"
"@instructure/ui-grid@^7.1.1":
version "7.1.1"
resolved "https://registry.yarnpkg.com/@instructure/ui-grid/-/ui-grid-7.1.1.tgz#c7bb4ae6034012497676330bac9cb49eaa53a230"
integrity sha512-QmsmVdCB0Tpn/q8YVXnpnnGUOJC/vCGXN52HCvSL2ath2p2kLMhyOWZo3jMCTF6KzqOzoG7lF1e56rLMrVymDA==
dependencies:
"@babel/runtime" "^7.9.2"
"@instructure/ui-a11y-content" "^7.1.1"
"@instructure/ui-prop-types" "^7.1.1"
"@instructure/ui-react-utils" "^7.1.1"
"@instructure/ui-testable" "^7.1.1"
"@instructure/ui-themeable" "^7.1.1"
"@instructure/ui-utils" "^7.1.1"
classnames "^2"
prop-types "^15"
"@instructure/ui-heading@6", "@instructure/ui-heading@^6.24.0":
version "6.24.0"
resolved "https://registry.yarnpkg.com/@instructure/ui-heading/-/ui-heading-6.24.0.tgz#4ccab7c156af05fe9a4bdda865d95f980cf31fb3"
@ -1973,6 +2110,21 @@
classnames "^2"
prop-types "^15"
"@instructure/ui-heading@^7.1.1":
version "7.1.1"
resolved "https://registry.yarnpkg.com/@instructure/ui-heading/-/ui-heading-7.1.1.tgz#6d109c18d391fbc32d2e9ce103c19df0be09ed55"
integrity sha512-PPajypdvsAN5sWB+iH+QgNrQHqhX93ra03wzWZbVjYTpXo3dNmY5cRKBaY0m4ByP5eNGayQSRzj5xVnsS2OchQ==
dependencies:
"@babel/runtime" "^7.9.2"
"@instructure/console" "^7.1.1"
"@instructure/ui-prop-types" "^7.1.1"
"@instructure/ui-react-utils" "^7.1.1"
"@instructure/ui-testable" "^7.1.1"
"@instructure/ui-themeable" "^7.1.1"
"@instructure/ui-view" "^7.1.1"
classnames "^2"
prop-types "^15"
"@instructure/ui-i18n@6", "@instructure/ui-i18n@^6.24.0", "@instructure/ui-i18n@^6.26.0":
version "6.26.0"
resolved "https://registry.yarnpkg.com/@instructure/ui-i18n/-/ui-i18n-6.26.0.tgz#e509fc65ebdc400d546a30d8f8ad1405d45c1b0d"
@ -2001,6 +2153,21 @@
moment-timezone "^0.5"
prop-types "^15"
"@instructure/ui-i18n@^7.1.1":
version "7.1.1"
resolved "https://registry.yarnpkg.com/@instructure/ui-i18n/-/ui-i18n-7.1.1.tgz#6be9d9232cf430aa9595f2a7bd794ef13bdb6dd5"
integrity sha512-1qIl3WEf+KF53UTtdTH2K4Yu4NfwcnyE9vVTXnbX8HviDUklU1EjdkRYqCqw+JTbdymbqVOxHM7gnxCY+k6jpw==
dependencies:
"@babel/runtime" "^7.9.2"
"@instructure/ui-decorator" "^7.1.1"
"@instructure/ui-dom-utils" "^7.1.1"
"@instructure/ui-prop-types" "^7.1.1"
"@instructure/ui-react-utils" "^7.1.1"
"@instructure/ui-utils" "^7.1.1"
decimal.js "^10"
moment-timezone "^0.5"
prop-types "^15"
"@instructure/ui-icons@6", "@instructure/ui-icons@^6.17.0", "@instructure/ui-icons@^6.22.0", "@instructure/ui-icons@^6.24.0", "@instructure/ui-icons@^6.26.0":
version "6.26.0"
resolved "https://registry.yarnpkg.com/@instructure/ui-icons/-/ui-icons-6.26.0.tgz#fec37dffe5a477c29eb92089df2b8ed6138f80ec"
@ -2019,6 +2186,15 @@
"@instructure/ui-svg-images" "^5.52.3"
prop-types "^15"
"@instructure/ui-icons@^7.1.1":
version "7.1.1"
resolved "https://registry.yarnpkg.com/@instructure/ui-icons/-/ui-icons-7.1.1.tgz#191e008073a5f92255d3be57ab1cfd641416af0a"
integrity sha512-mOz885dY5s26FsEPsHETCGQfVNOwQQ5SbJNRctTY6YMafDbBU7D3VTj3LbygFKLA6iDmYDF0SJ3iXx2bh3ChEg==
dependencies:
"@babel/runtime" "^7.9.2"
"@instructure/ui-svg-images" "^7.1.1"
prop-types "^15"
"@instructure/ui-img@6", "@instructure/ui-img@^6.24.0":
version "6.26.0"
resolved "https://registry.yarnpkg.com/@instructure/ui-img/-/ui-img-6.26.0.tgz#266429eb4d3be59f30d0a2e93868b7d2890bb77a"
@ -2223,6 +2399,19 @@
"@instructure/ui-utils" "^5.52.3"
prop-types "^15"
"@instructure/ui-motion@^7.1.1":
version "7.1.1"
resolved "https://registry.yarnpkg.com/@instructure/ui-motion/-/ui-motion-7.1.1.tgz#00d58d452a39287863378ee044f73af581abaac0"
integrity sha512-WJhW3HINIkUuyF56rvdKSh6LWbL4BVm6zmXC42eTwct48w3dFcOREN3e88C28LJ2RxhpnSc0WLUvzg8soblHtg==
dependencies:
"@babel/runtime" "^7.9.2"
"@instructure/ui-dom-utils" "^7.1.1"
"@instructure/ui-react-utils" "^7.1.1"
"@instructure/ui-testable" "^7.1.1"
"@instructure/ui-themeable" "^7.1.1"
"@instructure/ui-utils" "^7.1.1"
prop-types "^15"
"@instructure/ui-number-input@6", "@instructure/ui-number-input@^6.24.0":
version "6.26.0"
resolved "https://registry.yarnpkg.com/@instructure/ui-number-input/-/ui-number-input-6.26.0.tgz#3960ff5c98c3d5fdf7f5540553cf94acb46afaa9"
@ -2389,6 +2578,28 @@
keycode "^2"
prop-types "^15"
"@instructure/ui-popover@^7.1.1":
version "7.1.1"
resolved "https://registry.yarnpkg.com/@instructure/ui-popover/-/ui-popover-7.1.1.tgz#9223c315dc676d074fac31ab4ac8aed0d78495f4"
integrity sha512-nM6AWO2mUkRuO3Tcwf0+cpO/m7fExR1uGqpkVHinVeVnNu5f3NKqd5kyZIL/MTvqKUJ6iiXezMnsVk/MdVAPfA==
dependencies:
"@babel/runtime" "^7.9.2"
"@instructure/console" "^7.1.1"
"@instructure/ui-a11y-utils" "^7.1.1"
"@instructure/ui-dialog" "^7.1.1"
"@instructure/ui-dom-utils" "^7.1.1"
"@instructure/ui-i18n" "^7.1.1"
"@instructure/ui-position" "^7.1.1"
"@instructure/ui-prop-types" "^7.1.1"
"@instructure/ui-react-utils" "^7.1.1"
"@instructure/ui-testable" "^7.1.1"
"@instructure/ui-themeable" "^7.1.1"
"@instructure/ui-utils" "^7.1.1"
"@instructure/ui-view" "^7.1.1"
"@instructure/uid" "^7.1.1"
keycode "^2"
prop-types "^15"
"@instructure/ui-portal@6", "@instructure/ui-portal@^6.24.0", "@instructure/ui-portal@^6.26.0":
version "6.26.0"
resolved "https://registry.yarnpkg.com/@instructure/ui-portal/-/ui-portal-6.26.0.tgz#ec48a0e4d6cef880e8fe3b2d4d06c537a6120427"
@ -2413,6 +2624,18 @@
"@instructure/ui-utils" "^5.52.3"
prop-types "^15"
"@instructure/ui-portal@^7.1.1":
version "7.1.1"
resolved "https://registry.yarnpkg.com/@instructure/ui-portal/-/ui-portal-7.1.1.tgz#af57fbf1e9a93f049065e7f5e40e1b8579654038"
integrity sha512-7j4Et5p+v/EaCwzGQwfMDBNX/sf3gDe4RmFLD1tTmvNUtZ4JDbouJT+nkS6R+jxduqiAk/8W3/QX2I6aj8aSbw==
dependencies:
"@babel/runtime" "^7.9.2"
"@instructure/ui-i18n" "^7.1.1"
"@instructure/ui-prop-types" "^7.1.1"
"@instructure/ui-react-utils" "^7.1.1"
"@instructure/ui-utils" "^7.1.1"
prop-types "^15"
"@instructure/ui-position@^6.24.0", "@instructure/ui-position@^6.26.0":
version "6.26.0"
resolved "https://registry.yarnpkg.com/@instructure/ui-position/-/ui-position-6.26.0.tgz#9d8a218e17a09d0e973c4b0b4f9be87f83880ac3"
@ -2431,6 +2654,24 @@
classnames "^2"
prop-types "^15"
"@instructure/ui-position@^7.1.1":
version "7.1.1"
resolved "https://registry.yarnpkg.com/@instructure/ui-position/-/ui-position-7.1.1.tgz#3dfe92de89e63eb326b543f3df00836415ca90b7"
integrity sha512-nq/PslzVmtg75Hu1yLm/A0LM+DvUsEsHbTIb0TNFlthI+vZ3OPDx4Guq14IdrPXGwc+iCsdU9rIAPAY6ZgVhKA==
dependencies:
"@babel/runtime" "^7.9.2"
"@instructure/debounce" "^7.1.1"
"@instructure/ui-dom-utils" "^7.1.1"
"@instructure/ui-portal" "^7.1.1"
"@instructure/ui-prop-types" "^7.1.1"
"@instructure/ui-react-utils" "^7.1.1"
"@instructure/ui-testable" "^7.1.1"
"@instructure/ui-themeable" "^7.1.1"
"@instructure/ui-utils" "^7.1.1"
"@instructure/uid" "^7.1.1"
classnames "^2"
prop-types "^15"
"@instructure/ui-postcss-config@^6.24.0":
version "6.24.0"
resolved "https://registry.yarnpkg.com/@instructure/ui-postcss-config/-/ui-postcss-config-6.24.0.tgz#925ae862208f0a96ddc6b6b1dfe1089ad95bd7b9"
@ -2484,6 +2725,14 @@
"@babel/runtime" "^7"
prop-types ">= 15.7.0"
"@instructure/ui-prop-types@^7.1.1":
version "7.1.1"
resolved "https://registry.yarnpkg.com/@instructure/ui-prop-types/-/ui-prop-types-7.1.1.tgz#fbb622855474f13311264825f2b41248c9a0a93d"
integrity sha512-xajwC9diO7PfpgebPi9PP6oZjVs3Tak9vj5Ad9k569vIyTwPQ6yz8A1QlvtMFeJKBlDalkN5Vnu8PxrXOM2bVA==
dependencies:
"@babel/runtime" "^7.9.2"
prop-types ">= 15.7.0"
"@instructure/ui-radio-input@6", "@instructure/ui-radio-input@^6.24.0":
version "6.26.0"
resolved "https://registry.yarnpkg.com/@instructure/ui-radio-input/-/ui-radio-input-6.26.0.tgz#ecf53783110f319b0a89641ee51885d17ee48a46"
@ -2500,6 +2749,22 @@
classnames "^2"
prop-types "^15"
"@instructure/ui-radio-input@^7.1.1":
version "7.1.1"
resolved "https://registry.yarnpkg.com/@instructure/ui-radio-input/-/ui-radio-input-7.1.1.tgz#361db61029304f107c32f5f69008234678a8ef69"
integrity sha512-QGmMLbUQLSQePM/NrIgrTHswbQ7KccIpQYEijhIQleiq8UJumpR9bl4UV6yzwdGEGlGhB68l7EGNAufj1lK3PQ==
dependencies:
"@babel/runtime" "^7.9.2"
"@instructure/ui-dom-utils" "^7.1.1"
"@instructure/ui-form-field" "^7.1.1"
"@instructure/ui-prop-types" "^7.1.1"
"@instructure/ui-react-utils" "^7.1.1"
"@instructure/ui-testable" "^7.1.1"
"@instructure/ui-themeable" "^7.1.1"
"@instructure/uid" "^7.1.1"
classnames "^2"
prop-types "^15"
"@instructure/ui-range-input@^6.24.0":
version "6.24.0"
resolved "https://registry.yarnpkg.com/@instructure/ui-range-input/-/ui-range-input-6.24.0.tgz#7d517a1d9b92925f2ae8cf48aae328b04940d7bc"
@ -2534,6 +2799,19 @@
prop-types "^15"
react-lifecycles-compat "^3.0.4"
"@instructure/ui-react-utils@^7.1.1":
version "7.1.1"
resolved "https://registry.yarnpkg.com/@instructure/ui-react-utils/-/ui-react-utils-7.1.1.tgz#145141921c8d05bcd26eb9e9c5f0c638e00c7f44"
integrity sha512-nfiS91oOsTrQjzN3YSbMyGSpo1D92WvnpE7N/lKsmZ9xKkTqgI3IyA3IFRvK2RDpKW2sQ6+Tb8Bqi3SVFBGV5g==
dependencies:
"@babel/runtime" "^7.9.2"
"@emotion/is-prop-valid" "^0.8.3"
"@instructure/console" "^7.1.1"
"@instructure/ui-decorator" "^7.1.1"
"@instructure/ui-dom-utils" "^7.1.1"
"@instructure/ui-utils" "^7.1.1"
prop-types "^15"
"@instructure/ui-responsive@6":
version "6.26.0"
resolved "https://registry.yarnpkg.com/@instructure/ui-responsive/-/ui-responsive-6.26.0.tgz#85a280d16592fbac96259134db5da4badb64344c"
@ -2638,6 +2916,14 @@
"@babel/runtime" "^7.9.2"
glamor "^2.20.40"
"@instructure/ui-stylesheet@^7.1.1":
version "7.1.1"
resolved "https://registry.yarnpkg.com/@instructure/ui-stylesheet/-/ui-stylesheet-7.1.1.tgz#830aa6d1500e6ca01a2f5ed632853f7db04265ec"
integrity sha512-1FxRlSXig/gKO3liUjw8698eedQNcPCCH8f/i+E2TvHML5aiqVF4RoBiNbA6iSqjoYolaHzMRF2vSNYi2lO+Og==
dependencies:
"@babel/runtime" "^7.9.2"
glamor "^2.20.40"
"@instructure/ui-svg-images@6", "@instructure/ui-svg-images@^6.24.0", "@instructure/ui-svg-images@^6.26.0":
version "6.26.0"
resolved "https://registry.yarnpkg.com/@instructure/ui-svg-images/-/ui-svg-images-6.26.0.tgz#331896ca24a0bb4477d05648c0463ea736387603"
@ -2665,6 +2951,20 @@
classnames "^2"
prop-types "^15"
"@instructure/ui-svg-images@^7.1.1":
version "7.1.1"
resolved "https://registry.yarnpkg.com/@instructure/ui-svg-images/-/ui-svg-images-7.1.1.tgz#6c1be8b54d54c75e6dcfd59764eae57b427f71b9"
integrity sha512-3jlogGGNzJ4VoYyeX3xZUeqd4HUIWegbzYSV/49gbj1wQvH/sDiJimdB+9xH/b+L7QiNUiQ46eWgJUHEqUneXg==
dependencies:
"@babel/runtime" "^7.9.2"
"@instructure/ui-react-utils" "^7.1.1"
"@instructure/ui-testable" "^7.1.1"
"@instructure/ui-themeable" "^7.1.1"
"@instructure/ui-utils" "^7.1.1"
"@instructure/uid" "^7.1.1"
classnames "^2"
prop-types "^15"
"@instructure/ui-table@6":
version "6.26.0"
resolved "https://registry.yarnpkg.com/@instructure/ui-table/-/ui-table-6.26.0.tgz#7ea2140a2d803be3d9e4db26784a59392629fb9f"
@ -2754,6 +3054,14 @@
dependencies:
"@instructure/ui-decorator" "^6.26.0"
"@instructure/ui-testable@^7.1.1":
version "7.1.1"
resolved "https://registry.yarnpkg.com/@instructure/ui-testable/-/ui-testable-7.1.1.tgz#62534d7da4013444a2ff2e4fc63e06d6b853ef47"
integrity sha512-7mEwTEH7dJce3NFi1rpevLHdizUQcem7SH1mtrQNRIjWyTqwY6vxTOTbadBXxNQt1Q+WJLt+4SMpcv/zVlUuVg==
dependencies:
"@babel/runtime" "^7.9.2"
"@instructure/ui-decorator" "^7.1.1"
"@instructure/ui-text-area@6", "@instructure/ui-text-area@^6.24.0":
version "6.24.0"
resolved "https://registry.yarnpkg.com/@instructure/ui-text-area/-/ui-text-area-6.24.0.tgz#4fdcc63bf998af68d0650bbcb07370ce8aa99a9d"
@ -2772,6 +3080,24 @@
classnames "^2"
prop-types "^15"
"@instructure/ui-text-area@^7.1.1":
version "7.1.1"
resolved "https://registry.yarnpkg.com/@instructure/ui-text-area/-/ui-text-area-7.1.1.tgz#4ff42d70d1662abaa9998d8f6131bd20700ca150"
integrity sha512-uKfdTL91w/ioB7zERfP3P0pqPDuBDQvXgOm0wRddhQ5aD6wPXxaD5rW7wpjjjehWpNNtvn41hJ81ShvK4cfxJQ==
dependencies:
"@babel/runtime" "^7.9.2"
"@instructure/debounce" "^7.1.1"
"@instructure/ui-dom-utils" "^7.1.1"
"@instructure/ui-form-field" "^7.1.1"
"@instructure/ui-prop-types" "^7.1.1"
"@instructure/ui-react-utils" "^7.1.1"
"@instructure/ui-testable" "^7.1.1"
"@instructure/ui-themeable" "^7.1.1"
"@instructure/ui-utils" "^7.1.1"
"@instructure/uid" "^7.1.1"
classnames "^2"
prop-types "^15"
"@instructure/ui-text-input@6", "@instructure/ui-text-input@^6.17.0", "@instructure/ui-text-input@^6.22.0", "@instructure/ui-text-input@^6.24.0", "@instructure/ui-text-input@^6.26.0":
version "6.26.0"
resolved "https://registry.yarnpkg.com/@instructure/ui-text-input/-/ui-text-input-6.26.0.tgz#bca8609c7457db69a0a30115fc415dfe7785e3f1"
@ -2834,6 +3160,22 @@
prop-types "^15"
tinycolor2 "^1.4.1"
"@instructure/ui-themeable@^7.1.1":
version "7.1.1"
resolved "https://registry.yarnpkg.com/@instructure/ui-themeable/-/ui-themeable-7.1.1.tgz#ef23fb7d61d2ed6515484e9086681ad973255673"
integrity sha512-+N4Ld5Gzb6qqz7eZotUVJVKsuw8b8gQ+hHBR2TxJiJ/xOS8iA54F0FAQ5xsf5MAnq5JETBSDjniFoUpshHamfg==
dependencies:
"@babel/runtime" "^7.9.2"
"@instructure/console" "^7.1.1"
"@instructure/ui-color-utils" "^7.1.1"
"@instructure/ui-decorator" "^7.1.1"
"@instructure/ui-dom-utils" "^7.1.1"
"@instructure/ui-react-utils" "^7.1.1"
"@instructure/ui-stylesheet" "^7.1.1"
"@instructure/ui-utils" "^7.1.1"
"@instructure/uid" "^7.1.1"
prop-types "^15"
"@instructure/ui-themes@6", "@instructure/ui-themes@^6.17.0":
version "6.24.0"
resolved "https://registry.yarnpkg.com/@instructure/ui-themes/-/ui-themes-6.24.0.tgz#b0c25beda44f4137fd3e44fe06bd047d5faa0b71"
@ -2911,6 +3253,41 @@
"@instructure/uid" "^6.26.0"
prop-types "^15"
"@instructure/ui-tooltip@^7.1.1":
version "7.1.1"
resolved "https://registry.yarnpkg.com/@instructure/ui-tooltip/-/ui-tooltip-7.1.1.tgz#91688a78baf38f0c0dd2894ef3914d41062ae09f"
integrity sha512-vX6aFYO+D+urfSfKoBojtcLp6flMyoM2LzNwpXd1cczojDjo7t0X7rvzXoVpdvOj5vY5BUvmi001DsNhi+Zsng==
dependencies:
"@babel/runtime" "^7.9.2"
"@instructure/ui-popover" "^7.1.1"
"@instructure/ui-position" "^7.1.1"
"@instructure/ui-prop-types" "^7.1.1"
"@instructure/ui-react-utils" "^7.1.1"
"@instructure/ui-testable" "^7.1.1"
"@instructure/ui-themeable" "^7.1.1"
"@instructure/uid" "^7.1.1"
prop-types "^15"
"@instructure/ui-tray@^7.1.1":
version "7.1.1"
resolved "https://registry.yarnpkg.com/@instructure/ui-tray/-/ui-tray-7.1.1.tgz#6c199b45a2c6aca66a23c13e10e010665c7a8e88"
integrity sha512-NSrgR3CHF1jEjRXrbO8U6HCsq39BSjPHexa6hmvoRR0jURZ8TjesHm1Vjua0MglG+ejfFrftxRSIiUNOTST+Zg==
dependencies:
"@babel/runtime" "^7.9.2"
"@instructure/console" "^7.1.1"
"@instructure/ui-dialog" "^7.1.1"
"@instructure/ui-i18n" "^7.1.1"
"@instructure/ui-motion" "^7.1.1"
"@instructure/ui-portal" "^7.1.1"
"@instructure/ui-position" "^7.1.1"
"@instructure/ui-prop-types" "^7.1.1"
"@instructure/ui-react-utils" "^7.1.1"
"@instructure/ui-testable" "^7.1.1"
"@instructure/ui-themeable" "^7.1.1"
"@instructure/ui-utils" "^7.1.1"
classnames "^2"
prop-types "^15"
"@instructure/ui-tree-browser@6", "@instructure/ui-tree-browser@^6.17.0":
version "6.24.0"
resolved "https://registry.yarnpkg.com/@instructure/ui-tree-browser/-/ui-tree-browser-6.24.0.tgz#00d1cf56ddb581dd2024e394ec52ece38152a58b"
@ -2993,6 +3370,19 @@
numeral "^2"
prop-types "^15"
"@instructure/ui-utils@^7.1.1":
version "7.1.1"
resolved "https://registry.yarnpkg.com/@instructure/ui-utils/-/ui-utils-7.1.1.tgz#91ffc6c60d8e1d837e2126dbbcba4166dedb1805"
integrity sha512-ae0kx6fXq91gunCsfpBIYVEOQ/SSNNq7dBb+QZ3NojbZW0WeIzli0xfV7MX82pRFWrLrIKK74eB8fAIOkNNdog==
dependencies:
"@babel/runtime" "^7.9.2"
"@instructure/console" "^7.1.1"
"@instructure/ui-dom-utils" "^7.1.1"
bowser "^1.9.4"
fast-deep-equal "^2"
json-stable-stringify "^1.0.1"
keycode "^2"
"@instructure/ui-view@6", "@instructure/ui-view@^6.17.0", "@instructure/ui-view@^6.24.0", "@instructure/ui-view@^6.26.0":
version "6.26.0"
resolved "https://registry.yarnpkg.com/@instructure/ui-view/-/ui-view-6.26.0.tgz#d38d842b4b2038d3aea583955c365e5466844001"
@ -3010,6 +3400,23 @@
classnames "^2"
prop-types "^15"
"@instructure/ui-view@^7.1.1":
version "7.1.1"
resolved "https://registry.yarnpkg.com/@instructure/ui-view/-/ui-view-7.1.1.tgz#b3391987cf658c88a0be569dd001e271b0797263"
integrity sha512-/ljjuow9H6UUoILt/KuElpoujnT75/PlPax/UnRVJ0Yb9c0r+3iG8uOY/pWuBM/wdm3PAnxti2DMFO38qT32MQ==
dependencies:
"@babel/runtime" "^7.9.2"
"@instructure/console" "^7.1.1"
"@instructure/ui-color-utils" "^7.1.1"
"@instructure/ui-dom-utils" "^7.1.1"
"@instructure/ui-i18n" "^7.1.1"
"@instructure/ui-position" "^7.1.1"
"@instructure/ui-prop-types" "^7.1.1"
"@instructure/ui-react-utils" "^7.1.1"
"@instructure/ui-themeable" "^7.1.1"
classnames "^2"
prop-types "^15"
"@instructure/uid@6", "@instructure/uid@^6.22.0", "@instructure/uid@^6.24.0", "@instructure/uid@^6.26.0":
version "6.26.0"
resolved "https://registry.yarnpkg.com/@instructure/uid/-/uid-6.26.0.tgz#a98b873c64a5c18db6c41b91a7242fca0b1fcfe7"
@ -3024,6 +3431,13 @@
dependencies:
"@babel/runtime" "^7"
"@instructure/uid@^7.1.1":
version "7.1.1"
resolved "https://registry.yarnpkg.com/@instructure/uid/-/uid-7.1.1.tgz#d57571bd3c0044db67d07ba7e305e5305d42bf7c"
integrity sha512-KndoAF+dvntATwnk0OXNLML8t7KvAoaKPP70Q3xxvKnKwhkEvxl+TrdqocPiSQ8B6tj63eyVunQQsZ3v3VJmfw==
dependencies:
"@babel/runtime" "^7.9.2"
"@jest/console@^24.7.1", "@jest/console@^24.9.0":
version "24.9.0"
resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.9.0.tgz#79b1bc06fb74a8cfb01cbdedf945584b1b9707f0"
@ -14599,14 +15013,14 @@ merge-source-map@^1.1.0:
dependencies:
source-map "^0.6.1"
merge-stream@^1, merge-stream@^1.0.1:
merge-stream@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1"
integrity sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=
dependencies:
readable-stream "^2.0.1"
merge-stream@^2.0.0:
merge-stream@^2, merge-stream@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==