diff --git a/CHANGELOG.md b/CHANGELOG.md index fefe8bf2aa..41be10b58f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.149.0-next.10](https://github.com/carbon-design-system/carbon-addons-iot-react/compare/v2.149.0-next.9...v2.149.0-next.10) (2022-02-23) + +**Note:** Version bump only for package ibm-ai-applications + + + + + # [2.149.0-next.9](https://github.com/carbon-design-system/carbon-addons-iot-react/compare/v2.149.0-next.8...v2.149.0-next.9) (2022-02-22) diff --git a/lerna.json b/lerna.json index 2275d57e8b..c43548ff97 100644 --- a/lerna.json +++ b/lerna.json @@ -3,6 +3,6 @@ "packages/*" ], "useWorkspaces": true, - "version": "2.149.0-next.9", + "version": "2.149.0-next.10", "npmClient": "yarn" } diff --git a/packages/react/.storybook/main.js b/packages/react/.storybook/main.js index bd7e9a7620..02874bc506 100644 --- a/packages/react/.storybook/main.js +++ b/packages/react/.storybook/main.js @@ -10,6 +10,7 @@ module.exports = { '@storybook/addon-a11y', 'storybook-addon-rtl', '@storybook/addon-docs', + 'storybook-addon-turbo-build', ], babel: async (options) => { // ensure all plugins are using loose: false (the default) @@ -29,7 +30,7 @@ module.exports = { // High quality 'original source' sourcemaps are slow to generate on initial builds and rebuilds. // Using cheap-module-eval-source-map speeds up builds and rebuilds in development while not sacrificing too much source map quality. - config.devtool = configType === 'DEVELOPMENT' ? 'cheap-module-eval-source-map' : 'source-map'; + config.devtool = configType === 'DEVELOPMENT' ? 'cheap-module-eval-source-map' : ''; // Moment.js is quite large, the locales that they bundle in the core as of v2.18 are ignored to keep our bundle size down. // https://webpack.js.org/plugins/ignore-plugin/#example-of-ignoring-moment-locales diff --git a/packages/react/CHANGELOG.md b/packages/react/CHANGELOG.md index dfe6e27a20..1ff16b61f7 100644 --- a/packages/react/CHANGELOG.md +++ b/packages/react/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.149.0-next.10](https://github.com/carbon-design-system/carbon-addons-iot-react/compare/v2.149.0-next.9...v2.149.0-next.10) (2022-02-23) + +**Note:** Version bump only for package carbon-addons-iot-react + + + + + # [2.149.0-next.9](https://github.com/carbon-design-system/carbon-addons-iot-react/compare/v2.149.0-next.8...v2.149.0-next.9) (2022-02-22) diff --git a/packages/react/package.json b/packages/react/package.json index 3bf57e2bf6..f1f3b36b91 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -329,6 +329,7 @@ "rollup-plugin-uglify": "^6.0.4", "sass": "^1.42.1", "storybook-addon-rtl": "^0.2.2", + "storybook-addon-turbo-build": "^1.0.1", "style-loader": "^0.23.1", "stylelint": "^10.1.0", "stylelint-config-recommended-scss": "^3.3.0", @@ -339,7 +340,7 @@ "whatwg-fetch": "^3.0.0" }, "sideEffects": false, - "version": "2.149.0-next.9", + "version": "2.149.0-next.10", "resolutions": { "chokidar": "3.3.1", "react-grid-layout": "1.2.2" diff --git a/packages/react/src/components/Table/Table.main.story.jsx b/packages/react/src/components/Table/Table.main.story.jsx index d94fd4bae0..73ef3082aa 100644 --- a/packages/react/src/components/Table/Table.main.story.jsx +++ b/packages/react/src/components/Table/Table.main.story.jsx @@ -1,4 +1,4 @@ -import React, { useState, createElement } from 'react'; +import React from 'react'; import { action } from '@storybook/addon-actions'; import { object, select, boolean } from '@storybook/addon-knobs'; import { merge, uniqueId } from 'lodash-es'; @@ -8,6 +8,7 @@ import Button from '../Button'; import EmptyState from '../EmptyState'; import { DragAndDrop } from '../../utils/DragAndDropUtils'; import RuleBuilder from '../RuleBuilder/RuleBuilder'; +import useStoryState from '../../internal/storyState'; import TableREADME from './mdx/Table.mdx'; import SortingREADME from './mdx/Sorting.mdx'; @@ -65,8 +66,8 @@ export default { */ export const Playground = () => { // STATES - const [showRowEditBar, setShowRowEditBar] = useState(false); - const [rowActionsState, setRowActionsState] = useState(getRowActionStates()); + const [showRowEditBar, setShowRowEditBar] = useStoryState(false); + const [rowActionsState, setRowActionsState] = useStoryState(getRowActionStates()); // KNOBS // The order of appearance is defined function getTableKnobs. @@ -216,13 +217,24 @@ export const Playground = () => { ); // INITIAL DATA STATE - const [data, setData] = useState( + const [data, setData] = useStoryState( [...(demoEmptyState || demoCustomEmptyState ? [] : getTableData())] .slice(0, numberOfRows) .map((row, index) => (hasRowActions ? addRowAction(row, hasSingleRowEdit, index) : row)) .map((row, index) => (hasRowNesting ? addChildRows(row, index) : row)) .map((row) => (!selectionCheckboxEnabled ? { ...row, isSelectable: false } : row)) - .map((row) => (demoHasLoadMore ? { ...row, hasLoadMore: true } : row)) + .map((row) => (demoHasLoadMore ? { ...row, hasLoadMore: true } : row)), + // Reset initial state and trigger a story re-render when any + // of the following values change + [ + demoEmptyState, + demoCustomEmptyState, + hasRowActions, + hasSingleRowEdit, + hasRowNesting, + selectionCheckboxEnabled, + demoHasLoadMore, + ] ); const onRowLoadMore = (parentId) => { @@ -275,95 +287,94 @@ export const Playground = () => { const errorState = demoCustomErrorState ? customErrorState : undefined; const error = demoCustomErrorState ? 'Error!' : undefined; - const knobRegeneratedKey = `table${demoInitialColumnSizes}${JSON.stringify(aggregationsColumns)}`; + // For demo and test purposes we generate an new key for the table when + // some knobs change that normally wouldn't trigger a rerender in the StatefulTable. + const knobRegeneratedKey = `table${demoInitialColumnSizes}${JSON.stringify(aggregationsColumns)} + ${aggregationLabel}${demoCustomEmptyState}${loadingRowCount}${loadingColumnCount}${maxPages} + ${isItemPerPageHidden}${paginationSize}${demoToolbarActions}${toolbarIsDisabled}`; return ( - + + toolbar: { + activeBar, + isDisabled: toolbarIsDisabled, + customToolbarContent, + toolbarActions, + rowEditBarButtons, + batchActions, + }, + table: { + emptyState, + errorState, + expandedIds, + selectedIds, + rowActions: rowActionsState, + singleRowEditButtons, + loadingState: { + isLoading: tableIsLoading, + rowCount: loadingRowCount, + columnCount: loadingColumnCount, + }, + ordering, + }, + pagination: { + pageSizes, + maxPages, + isItemPerPageHidden, + size: paginationSize, + }, + }} + i18n={getI18nKnobs()} + error={error} + locale={locale} + /> + ); }; Playground.storyName = 'Playground'; -Playground.decorators = [ - (Story) => ( - - - - ), -]; export const WithSorting = () => { const { selectedTableType, demoSingleSort, hasMultiSort } = getTableKnobs({ @@ -390,30 +401,25 @@ export const WithSorting = () => { }); return ( - + + + ); }; WithSorting.storyName = 'With sorting'; -WithSorting.decorators = [ - (Story) => ( - - - - ), -]; WithSorting.parameters = { component: Table, docs: { @@ -463,7 +469,6 @@ export const WithRowExpansion = () => { }; WithRowExpansion.storyName = 'With row expansion'; -WithRowExpansion.decorators = [createElement]; WithRowExpansion.parameters = { component: Table, docs: { @@ -486,13 +491,13 @@ export const WithRowNesting = () => { ], enableKnob: () => true, }); - const initiallyExpandedIds = object('Expanded ids (view.table.expandedIds)', ['row-1']); + const initiallyExpandedIds = object('Expanded ids (view.table.expandedIds)', ['row-1']); + const demoDeepNesting = !hasRowNesting.hasSingleNestedHierarchy; const MyTable = selectedTableType === 'StatefulTable' ? StatefulTable : Table; const initialData = getTableData() .slice(0, 10) .map((row, index) => { - const demoDeepNesting = !hasRowNesting.hasSingleNestedHierarchy; return addChildRows(row, index, demoDeepNesting); }) .map((row) => ({ @@ -502,9 +507,9 @@ export const WithRowNesting = () => { const columns = getTableColumns(); const actions = getTableActions(); - const [loadingMoreIds, setLoadingMoreIds] = useState([]); - const [data, setData] = useState(initialData); - const [expandedIds, setExpandedIds] = useState(initiallyExpandedIds); + const [loadingMoreIds, setLoadingMoreIds] = useStoryState([]); + const [data, setData] = useStoryState(initialData, [demoHasLoadMore, demoDeepNesting]); + const [expandedIds, setExpandedIds] = useStoryState(initiallyExpandedIds, initiallyExpandedIds); const onRowLoadMore = (parentId) => { action('onRowLoadMore')(parentId); @@ -523,9 +528,8 @@ export const WithRowNesting = () => { const onRowExpanded = (rowId, expanded) => { action('onRowExpanded')(rowId, expanded); - setExpandedIds((currentlyExpanded) => - expanded ? [...currentlyExpanded, rowId] : currentlyExpanded.filter((id) => id !== rowId) - ); + const temp = expanded ? [...expandedIds, rowId] : expandedIds.filter((id) => id !== rowId); + setExpandedIds(temp); }; return ( { }; WithRowNesting.storyName = 'With row nesting'; -WithRowNesting.decorators = [createElement]; WithRowNesting.parameters = { component: Table, docs: { @@ -602,8 +605,8 @@ export const WithFiltering = () => { } // Advanced filter settings - const [showBuilder, setShowBuilder] = useState(false); - const [advancedFilters, setAdvancedFilters] = useState( + const [showBuilder, setShowBuilder] = useStoryState(false); + const [advancedFilters, setAdvancedFilters] = useStoryState( hasAdvancedFilter ? getAdvancedFilters() : undefined ); const selectedAdvancedFilterIds = hasAdvancedFilter @@ -619,10 +622,12 @@ export const WithFiltering = () => { ) : null; + const knobRegeneratedKey = `${JSON.stringify(activeFilters)}`; return ( <> {storyNotice} { }; WithFiltering.storyName = 'With filtering'; -WithFiltering.decorators = [createElement]; WithFiltering.parameters = { component: Table, docs: { @@ -726,7 +730,6 @@ export const WithSelectionAndBatchActions = () => { }; WithSelectionAndBatchActions.storyName = 'With selection and batch actions'; -WithSelectionAndBatchActions.decorators = [createElement]; WithSelectionAndBatchActions.parameters = { component: Table, docs: { @@ -787,7 +790,6 @@ export const WithInlineActions = () => { ); }; WithInlineActions.storyName = 'With inline actions'; -WithInlineActions.decorators = [createElement]; WithInlineActions.parameters = { component: Table, docs: { diff --git a/packages/react/src/components/Table/Table.story.helpers.jsx b/packages/react/src/components/Table/Table.story.helpers.jsx index 67a1e21f0d..fb74586405 100644 --- a/packages/react/src/components/Table/Table.story.helpers.jsx +++ b/packages/react/src/components/Table/Table.story.helpers.jsx @@ -1052,7 +1052,7 @@ export const getTableKnobs = ({ knobsToCreate, enableKnob, useGroups = false }) ) : null, batchActions: shouldCreate('batchActions') - ? object( + ? objectWithSubstitution( 'Batch actions for selected rows (view.toolbar.batchActions)', getBatchActions(), SELECTIONS_ACTIONS_GROUP diff --git a/packages/react/src/components/Table/TableToolbar/TableToolbarAdvancedFilterFlyout.jsx b/packages/react/src/components/Table/TableToolbar/TableToolbarAdvancedFilterFlyout.jsx index 357096f88a..f636c5e732 100644 --- a/packages/react/src/components/Table/TableToolbar/TableToolbarAdvancedFilterFlyout.jsx +++ b/packages/react/src/components/Table/TableToolbar/TableToolbarAdvancedFilterFlyout.jsx @@ -278,7 +278,7 @@ const TableToolbarAdvancedFilterFlyout = ({ {ordering .filter((column) => { const fullColumn = columns.find((item) => column.columnId === item.id); - return !column.isHidden && fullColumn.isFilterable === true; + return !column.isHidden && fullColumn?.isFilterable === true; }) .reduce((chunks, item, index) => { const newChunks = [...chunks]; diff --git a/packages/react/src/components/Table/TableToolbar/TableToolbarAdvancedFilterFlyout.test.jsx b/packages/react/src/components/Table/TableToolbar/TableToolbarAdvancedFilterFlyout.test.jsx index a313f59694..1e8569dbcc 100644 --- a/packages/react/src/components/Table/TableToolbar/TableToolbarAdvancedFilterFlyout.test.jsx +++ b/packages/react/src/components/Table/TableToolbar/TableToolbarAdvancedFilterFlyout.test.jsx @@ -671,4 +671,50 @@ describe('TableToolbarAdvancedFilterFlyout', () => { 'true' ); }); + + it('should not break on empty column array prop', () => { + const onApplyAdvancedFilter = jest.fn(); + const onCancelAdvancedFilter = jest.fn(); + render( + + ); + + expect(screen.getByTestId('advanced-filter-flyout-container')).toBeVisible(); + }); }); diff --git a/packages/react/src/internal/storyState.js b/packages/react/src/internal/storyState.js new file mode 100644 index 0000000000..f0eac65fdd --- /dev/null +++ b/packages/react/src/internal/storyState.js @@ -0,0 +1,80 @@ +// eslint-disable-next-line import/no-extraneous-dependencies +import addons from '@storybook/addons'; +// eslint-disable-next-line import/no-extraneous-dependencies +import { FORCE_RE_RENDER, STORY_RENDERED, STORY_CHANGED } from '@storybook/core-events'; +import { isEqual } from 'lodash-es'; + +let callOrder = 0; +let states = []; +let dependencies = []; + +addons.getChannel().addListener(STORY_CHANGED, () => { + // Clear the global state and reset the call order when + // the user selects another story + callOrder = 0; + states = []; + dependencies = []; +}); + +addons.getChannel().addListener(STORY_RENDERED, () => { + // Reset on every render so that the index of the useStoryState + // doesn't keep increasing. + callOrder = 0; +}); + +/** + * useStoryState can be used as a substitute for React's useState when you for + * performance reasons don't want to wrap the story in a react element. + * For more advanced stories it is also possible to add dependencies to the state + * that when changed will force the state to use the value passed in (i.e. a new initial value) + * and trigger a force rerender of the story to show the modified changes. + * + * Example 1 + * The dependencies can be a one or more knob values affecting the initial value like the Table's + * 'hasLoadMore' affects the 'data' prop. + * + * Example 2 + * The dependencies can be the value of a knob representing the same table prop as the state does + * so that that they can be used together, i.e. when the knob is modified the state + * is also updated with the same value. + * @param {any} initialValue The inital value of the state + * @param {any} currentDep The dependencies that when changed will force a reset to the + * initial value and re-render + * @returns + */ +export default function useStoryState(initialValue, currentDep) { + // The call order is the "id" used to link a stored state with the actual + // call of the useStoryState function. The 'callOrder' const has to be reassigned + // so that the update function can use the index matching this closure. + const index = callOrder; + + // Set the value to the initialValue if this is the first render, if not + // the value stays unchanged + const isInitialRender = states[index] === undefined; + const value = isInitialRender ? initialValue : states[index]; + states[index] = value; + + // If the dependencies has changed the state is "reset" to use the + // new initial value and force a rerender of the story just like + // a normal update would, thus the reset value is picked up during + // next render + const previousDep = dependencies[index]; + const dependenciesHasChanged = !isEqual(previousDep, currentDep); + if (dependenciesHasChanged) { + states[index] = initialValue; + dependencies[index] = currentDep; + if (!isInitialRender) { + addons.getChannel().emit(FORCE_RE_RENDER); + } + } + + callOrder += 1; + + // The update function returned together with the value + const update = (newValue) => { + states[index] = typeof newValue === 'function' ? newValue(states[index]) : newValue; + addons.getChannel().emit(FORCE_RE_RENDER); + }; + + return [value, update]; +} diff --git a/yarn.lock b/yarn.lock index 9394086e65..381cf7d133 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10045,9 +10045,9 @@ chokidar@^2.0.0, chokidar@^2.0.3, chokidar@^2.0.4, chokidar@^2.1.1, chokidar@^2. fsevents "^1.2.7" chokidar@^3.4.1, chokidar@^3.4.2, chokidar@^3.5.1: - version "3.5.2" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" - integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== dependencies: anymatch "~3.1.2" braces "~3.0.2" @@ -13279,6 +13279,138 @@ es6-weak-map@^2.0.1: es6-iterator "^2.0.3" es6-symbol "^3.1.1" +esbuild-android-arm64@0.14.23: + version "0.14.23" + resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.23.tgz#c89b3c50b4f47668dcbeb0b34ee4615258818e71" + integrity sha512-k9sXem++mINrZty1v4FVt6nC5BQCFG4K2geCIUUqHNlTdFnuvcqsY7prcKZLFhqVC1rbcJAr9VSUGFL/vD4vsw== + +esbuild-darwin-64@0.14.23: + version "0.14.23" + resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.23.tgz#1c131e8cb133ed935ca32f824349a117c896a15b" + integrity sha512-lB0XRbtOYYL1tLcYw8BoBaYsFYiR48RPrA0KfA/7RFTr4MV7Bwy/J4+7nLsVnv9FGuQummM3uJ93J3ptaTqFug== + +esbuild-darwin-arm64@0.14.23: + version "0.14.23" + resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.23.tgz#3c6245a50109dd84953f53d7833bd3b4f0e8c6fa" + integrity sha512-yat73Z/uJ5tRcfRiI4CCTv0FSnwErm3BJQeZAh+1tIP0TUNh6o+mXg338Zl5EKChD+YGp6PN+Dbhs7qa34RxSw== + +esbuild-freebsd-64@0.14.23: + version "0.14.23" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.23.tgz#0cdc54e72d3dd9cd992f9c2960055e68a7f8650c" + integrity sha512-/1xiTjoLuQ+LlbfjJdKkX45qK/M7ARrbLmyf7x3JhyQGMjcxRYVR6Dw81uH3qlMHwT4cfLW4aEVBhP1aNV7VsA== + +esbuild-freebsd-arm64@0.14.23: + version "0.14.23" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.23.tgz#1d11faed3a0c429e99b7dddef84103eb509788b2" + integrity sha512-uyPqBU/Zcp6yEAZS4LKj5jEE0q2s4HmlMBIPzbW6cTunZ8cyvjG6YWpIZXb1KK3KTJDe62ltCrk3VzmWHp+iLg== + +esbuild-linux-32@0.14.23: + version "0.14.23" + resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.23.tgz#fd9f033fc27dcab61100cb1eb1c936893a68c841" + integrity sha512-37R/WMkQyUfNhbH7aJrr1uCjDVdnPeTHGeDhZPUNhfoHV0lQuZNCKuNnDvlH/u/nwIYZNdVvz1Igv5rY/zfrzQ== + +esbuild-linux-64@0.14.23: + version "0.14.23" + resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.23.tgz#c04c438514f1359ecb1529205d0c836d4165f198" + integrity sha512-H0gztDP60qqr8zoFhAO64waoN5yBXkmYCElFklpd6LPoobtNGNnDe99xOQm28+fuD75YJ7GKHzp/MLCLhw2+vQ== + +esbuild-linux-arm64@0.14.23: + version "0.14.23" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.23.tgz#d1b3ab2988ab0734886eb9e811726f7db099ab96" + integrity sha512-c4MLOIByNHR55n3KoYf9hYDfBRghMjOiHLaoYLhkQkIabb452RWi+HsNgB41sUpSlOAqfpqKPFNg7VrxL3UX9g== + +esbuild-linux-arm@0.14.23: + version "0.14.23" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.23.tgz#df7558b6a5076f5eb9fd387c8704f768b61d97fb" + integrity sha512-x64CEUxi8+EzOAIpCUeuni0bZfzPw/65r8tC5cy5zOq9dY7ysOi5EVQHnzaxS+1NmV+/RVRpmrzGw1QgY2Xpmw== + +esbuild-linux-mips64le@0.14.23: + version "0.14.23" + resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.23.tgz#bb4c47fccc9493d460ffeb1f88e8a97a98a14f8b" + integrity sha512-kHKyKRIAedYhKug2EJpyJxOUj3VYuamOVA1pY7EimoFPzaF3NeY7e4cFBAISC/Av0/tiV0xlFCt9q0HJ68IBIw== + +esbuild-linux-ppc64le@0.14.23: + version "0.14.23" + resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.23.tgz#a332dbc8a1b4e30cfe1261bfaa5cef57c9c8c02a" + integrity sha512-7ilAiJEPuJJnJp/LiDO0oJm5ygbBPzhchJJh9HsHZzeqO+3PUzItXi+8PuicY08r0AaaOe25LA7sGJ0MzbfBag== + +esbuild-linux-riscv64@0.14.23: + version "0.14.23" + resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.23.tgz#85675f3f931f5cd7cfb238fd82f77a62ffcb6d86" + integrity sha512-fbL3ggK2wY0D8I5raPIMPhpCvODFE+Bhb5QGtNP3r5aUsRR6TQV+ZBXIaw84iyvKC8vlXiA4fWLGhghAd/h/Zg== + +esbuild-linux-s390x@0.14.23: + version "0.14.23" + resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.23.tgz#a526282a696e6d846f4c628f5315475518c0c0f0" + integrity sha512-GHMDCyfy7+FaNSO8RJ8KCFsnax8fLUsOrj9q5Gi2JmZMY0Zhp75keb5abTFCq2/Oy6KVcT0Dcbyo/bFb4rIFJA== + +esbuild-loader@^2.10.0: + version "2.18.0" + resolved "https://registry.yarnpkg.com/esbuild-loader/-/esbuild-loader-2.18.0.tgz#7b9548578ab954574fd94655693d22aa5ec74120" + integrity sha512-AKqxM3bI+gvGPV8o6NAhR+cBxVO8+dh+O0OXBHIXXwuSGumckbPWHzZ17subjBGI2YEGyJ1STH7Haj8aCrwL/w== + dependencies: + esbuild "^0.14.6" + joycon "^3.0.1" + json5 "^2.2.0" + loader-utils "^2.0.0" + tapable "^2.2.0" + webpack-sources "^2.2.0" + +esbuild-netbsd-64@0.14.23: + version "0.14.23" + resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.23.tgz#8e456605694719aa1be4be266d6cd569c06dfaf5" + integrity sha512-ovk2EX+3rrO1M2lowJfgMb/JPN1VwVYrx0QPUyudxkxLYrWeBxDKQvc6ffO+kB4QlDyTfdtAURrVzu3JeNdA2g== + +esbuild-openbsd-64@0.14.23: + version "0.14.23" + resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.23.tgz#f2fc51714b4ddabc86e4eb30ca101dd325db2f7d" + integrity sha512-uYYNqbVR+i7k8ojP/oIROAHO9lATLN7H2QeXKt2H310Fc8FJj4y3Wce6hx0VgnJ4k1JDrgbbiXM8rbEgQyg8KA== + +esbuild-sunos-64@0.14.23: + version "0.14.23" + resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.23.tgz#a408f33ea20e215909e20173a0fd78b1aaad1f8e" + integrity sha512-hAzeBeET0+SbScknPzS2LBY6FVDpgE+CsHSpe6CEoR51PApdn2IB0SyJX7vGelXzlyrnorM4CAsRyb9Qev4h9g== + +esbuild-windows-32@0.14.23: + version "0.14.23" + resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.23.tgz#b9005bbff54dac3975ff355d5de2b5e37165d128" + integrity sha512-Kttmi3JnohdaREbk6o9e25kieJR379TsEWF0l39PQVHXq3FR6sFKtVPgY8wk055o6IB+rllrzLnbqOw/UV60EA== + +esbuild-windows-64@0.14.23: + version "0.14.23" + resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.23.tgz#2b5a99befeaca6aefdad32d738b945730a60a060" + integrity sha512-JtIT0t8ymkpl6YlmOl6zoSWL5cnCgyLaBdf/SiU/Eg3C13r0NbHZWNT/RDEMKK91Y6t79kTs3vyRcNZbfu5a8g== + +esbuild-windows-arm64@0.14.23: + version "0.14.23" + resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.23.tgz#edc560bbadb097eb45fc235aeacb942cb94a38c0" + integrity sha512-cTFaQqT2+ik9e4hePvYtRZQ3pqOvKDVNarzql0VFIzhc0tru/ZgdLoXd6epLiKT+SzoSce6V9YJ+nn6RCn6SHw== + +esbuild@^0.14.6: + version "0.14.23" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.23.tgz#95e842cb22bc0c7d82c140adc16788aac91469fe" + integrity sha512-XjnIcZ9KB6lfonCa+jRguXyRYcldmkyZ99ieDksqW/C8bnyEX299yA4QH2XcgijCgaddEZePPTgvx/2imsq7Ig== + optionalDependencies: + esbuild-android-arm64 "0.14.23" + esbuild-darwin-64 "0.14.23" + esbuild-darwin-arm64 "0.14.23" + esbuild-freebsd-64 "0.14.23" + esbuild-freebsd-arm64 "0.14.23" + esbuild-linux-32 "0.14.23" + esbuild-linux-64 "0.14.23" + esbuild-linux-arm "0.14.23" + esbuild-linux-arm64 "0.14.23" + esbuild-linux-mips64le "0.14.23" + esbuild-linux-ppc64le "0.14.23" + esbuild-linux-riscv64 "0.14.23" + esbuild-linux-s390x "0.14.23" + esbuild-netbsd-64 "0.14.23" + esbuild-openbsd-64 "0.14.23" + esbuild-sunos-64 "0.14.23" + esbuild-windows-32 "0.14.23" + esbuild-windows-64 "0.14.23" + esbuild-windows-arm64 "0.14.23" + escalade@^3.0.2, escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" @@ -17852,6 +17984,11 @@ jest@^25.5.1: import-local "^3.0.2" jest-cli "^25.5.1" +joycon@^3.0.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/joycon/-/joycon-3.1.1.tgz#bce8596d6ae808f8b68168f5fc69280996894f03" + integrity sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw== + js-file-download@^0.4.7: version "0.4.7" resolved "https://registry.yarnpkg.com/js-file-download/-/js-file-download-0.4.7.tgz#cafea2f7230b63fa1747e80efe1257649b59143e" @@ -18068,7 +18205,7 @@ json5@^2.1.2: dependencies: minimist "^1.2.5" -json5@^2.1.3: +json5@^2.1.3, json5@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== @@ -25243,6 +25380,13 @@ storybook-addon-rtl@^0.2.2: prop-types "^15.7.2" styled-components "^4.1.3" +storybook-addon-turbo-build@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/storybook-addon-turbo-build/-/storybook-addon-turbo-build-1.0.1.tgz#e1cd8ec41c5f6539885bdb3ee904dd752b90a688" + integrity sha512-nuuwZGMmxl16g+qbwruC1zyp/QELdF6r59wFBMO2mjR07iSoKYJc2Z81tSEtLCvVrRl7jN5iFjlVJK5m2K6DmA== + dependencies: + esbuild-loader "^2.10.0" + stream-browserify@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" @@ -27660,6 +27804,14 @@ webpack-sources@^1.3.0: source-list-map "^2.0.0" source-map "~0.6.1" +webpack-sources@^2.2.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.3.1.tgz#570de0af163949fe272233c2cefe1b56f74511fd" + integrity sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA== + dependencies: + source-list-map "^2.0.1" + source-map "^0.6.1" + webpack-subresource-integrity@1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/webpack-subresource-integrity/-/webpack-subresource-integrity-1.5.2.tgz#e40b6578d3072e2d24104975249c52c66e9a743e"