From 3df04990a50b77ce88050c8eef9b9b0632497869 Mon Sep 17 00:00:00 2001 From: Tisha Soumya Date: Fri, 30 Aug 2024 09:01:38 +0530 Subject: [PATCH 001/209] Place the actions-storybook in correct folder (#6275) --- packages/volto/news/6275.bugfix | 1 + .../volto/src}/components/manage/Actions/Actions.stories.jsx | 0 2 files changed, 1 insertion(+) create mode 100644 packages/volto/news/6275.bugfix rename {src => packages/volto/src}/components/manage/Actions/Actions.stories.jsx (100%) diff --git a/packages/volto/news/6275.bugfix b/packages/volto/news/6275.bugfix new file mode 100644 index 0000000000..47f0ea53ba --- /dev/null +++ b/packages/volto/news/6275.bugfix @@ -0,0 +1 @@ +Place actions storybook in correct path. @Tishasoumya-02 \ No newline at end of file diff --git a/src/components/manage/Actions/Actions.stories.jsx b/packages/volto/src/components/manage/Actions/Actions.stories.jsx similarity index 100% rename from src/components/manage/Actions/Actions.stories.jsx rename to packages/volto/src/components/manage/Actions/Actions.stories.jsx From e49fb93c04a0e4a6048013a1114ffbbf835376f8 Mon Sep 17 00:00:00 2001 From: Faakhir Zahid <110815427+Faakhir30@users.noreply.github.com> Date: Fri, 30 Aug 2024 13:32:40 +0500 Subject: [PATCH 002/209] Added make i18n to volto (#6274) Co-authored-by: Steve Piercy --- Makefile | 4 ++++ packages/volto/Makefile | 4 ++++ packages/volto/news/6274.internal | 1 + 3 files changed, 9 insertions(+) create mode 100644 packages/volto/news/6274.internal diff --git a/Makefile b/Makefile index 568b297d80..4ff9cb9510 100644 --- a/Makefile +++ b/Makefile @@ -147,6 +147,10 @@ packages/components/dist: $(shell find packages/components/src -type f) .PHONY: build-deps build-deps: packages/registry/dist ## Build dependencies +.PHONY: i18n +i18n: ## Converts your po files into json to translate volto frontend + $(MAKE) -C "./packages/volto/" i18n + ## Storybook .PHONY: storybook-start diff --git a/packages/volto/Makefile b/packages/volto/Makefile index abc6ce0dda..8139f5b8a5 100644 --- a/packages/volto/Makefile +++ b/packages/volto/Makefile @@ -81,6 +81,10 @@ cypress-install: ## Install Cypress for acceptance tests .PHONY: build-deps build-deps: ../registry/dist ## Build dependencies +.PHONY: i18n +i18n: ## Extract and compile translations + pnpm i18n + ## Storybook .PHONY: storybook-start diff --git a/packages/volto/news/6274.internal b/packages/volto/news/6274.internal new file mode 100644 index 0000000000..d56fc85f27 --- /dev/null +++ b/packages/volto/news/6274.internal @@ -0,0 +1 @@ +Add `make i18n` command. @Faakhir30 From 41da257edaba21dd479f385b9d53d688283d093e Mon Sep 17 00:00:00 2001 From: Raman-Luhach <150381737+Raman-Luhach@users.noreply.github.com> Date: Wed, 4 Sep 2024 10:19:47 +0530 Subject: [PATCH 003/209] Refactor DatetimeWidget (#6213) Co-authored-by: Tisha Soumya Co-authored-by: David Glick --- packages/volto/news/6213.feature | 2 + .../manage/Widgets/DatetimeWidget.jsx | 296 +++++++----------- 2 files changed, 123 insertions(+), 175 deletions(-) create mode 100644 packages/volto/news/6213.feature diff --git a/packages/volto/news/6213.feature b/packages/volto/news/6213.feature new file mode 100644 index 0000000000..76fbceecdc --- /dev/null +++ b/packages/volto/news/6213.feature @@ -0,0 +1,2 @@ + +Refactor the `DatetimeWidget` component from a class component to a functional component. @Raman-Luhach diff --git a/packages/volto/src/components/manage/Widgets/DatetimeWidget.jsx b/packages/volto/src/components/manage/Widgets/DatetimeWidget.jsx index 546f57e22a..bfa4cfe6fb 100644 --- a/packages/volto/src/components/manage/Widgets/DatetimeWidget.jsx +++ b/packages/volto/src/components/manage/Widgets/DatetimeWidget.jsx @@ -1,12 +1,6 @@ -/** - * DatetimeWidget component. - * @module components/manage/Widgets/DatetimeWidget - */ -import React, { Component } from 'react'; -import { compose } from 'redux'; +import React, { useState, useEffect } from 'react'; import PropTypes from 'prop-types'; -import { defineMessages, injectIntl } from 'react-intl'; -import { connect } from 'react-redux'; +import { defineMessages, useIntl } from 'react-intl'; import loadable from '@loadable/component'; import cx from 'classnames'; import { Icon } from '@plone/volto/components'; @@ -50,6 +44,7 @@ const PrevIcon = () => ( ); + const NextIcon = () => (
{ + const { + id, + resettable, + reactDates, + widgetOptions, + moment, + value, + onChange, + dateOnly, + widget, + noPastDates: propNoPastDates, + isDisabled, + } = props; + + const intl = useIntl(); + const lang = intl.locale; + + const [focused, setFocused] = useState(false); + const [isDefault, setIsDefault] = useState(false); + + const { SingleDatePicker } = reactDates; + + useEffect(() => { + const parsedDateTime = parseDateTime( + toBackendLang(lang), + value, undefined, - this.moment, + moment.default, + ); + setIsDefault( + parsedDateTime?.toISOString() === moment.default().utc().toISOString(), ); - } + }, [value, lang, moment]); - getDateOnly() { - return this.props.dateOnly || this.props.widget === 'date'; - } + const getInternalValue = () => { + return parseDateTime(toBackendLang(lang), value, undefined, moment.default); + }; + + const getDateOnly = () => { + return dateOnly || widget === 'date'; + }; - /** - * Update date storage - * @method onDateChange - * @param {Object} date updated momentjs Object for date - * @returns {undefined} - */ - onDateChange = (date) => { + const onDateChange = (date) => { if (date) { - const moment = this.props.moment.default; - const isDateOnly = this.getDateOnly(); - const base = (this.getInternalValue() || moment()).set({ + const isDateOnly = getDateOnly(); + const base = (getInternalValue() || moment.default()).set({ year: date.year(), month: date.month(), date: date.date(), @@ -142,125 +122,100 @@ export class DatetimeWidgetComponent extends Component { const dateValue = isDateOnly ? base.format('YYYY-MM-DD') : base.toISOString(); - this.props.onChange(this.props.id, dateValue); + onChange(id, dateValue); } - this.setState({ isDefault: false }); + setIsDefault(false); }; - /** - * Update date storage - * @method onTimeChange - * @param {Object} time updated momentjs Object for time - * @returns {undefined} - */ - onTimeChange = (time) => { - const moment = this.props.moment.default; + const onTimeChange = (time) => { if (time) { - const base = (this.getInternalValue() || moment()).set({ + const base = (getInternalValue() || moment.default()).set({ hours: time?.hours() ?? 0, minutes: time?.minutes() ?? 0, seconds: 0, }); const dateValue = base.toISOString(); - this.props.onChange(this.props.id, dateValue); + onChange(id, dateValue); } }; - onResetDates = () => { - this.setState({ isDefault: false }); - this.props.onChange(this.props.id, null); + const onResetDates = () => { + setIsDefault(false); + onChange(id, null); }; - /** - * Handle SingleDatePicker focus - * @method onFocusChange - * @param {boolean} focused component focus state. - * @returns {undefined} - */ - onFocusChange = ({ focused }) => this.setState({ focused }); - - render() { - const { id, resettable, intl, reactDates, widgetOptions, lang } = - this.props; - const noPastDates = - this.props.noPastDates || widgetOptions?.pattern_options?.noPastDates; - const moment = this.props.moment.default; - const datetime = this.getInternalValue(); - const dateOnly = this.getDateOnly(); - const { SingleDatePicker } = reactDates; - - return ( - -
+ const onFocusChange = ({ focused }) => setFocused(focused); + + const noPastDates = + propNoPastDates || widgetOptions?.pattern_options?.noPastDates; + const datetime = getInternalValue(); + const isDateOnly = getDateOnly(); + + return ( + +
+
+ false })} + onFocusChange={onFocusChange} + noBorder + displayFormat={moment.default + .localeData(toBackendLang(lang)) + .longDateFormat('L')} + navPrev={} + navNext={} + id={`${id}-date`} + placeholder={intl.formatMessage(messages.date)} + /> +
+ {!isDateOnly && (
- false })} - onFocusChange={this.onFocusChange} - noBorder - displayFormat={moment + } - navNext={} - id={`${id}-date`} - placeholder={intl.formatMessage(messages.date)} + .longDateFormat('LT')} + placeholder={intl.formatMessage(messages.time)} + focusOnOpen + placement="bottomRight" />
- {!dateOnly && ( -
- -
- )} - {resettable && ( - - )} -
-
- ); - } -} + )} + {resettable && ( + + )} +
+
+ ); +}; -/** - * Property types. - * @property {Object} propTypes Property types. - * @static - */ DatetimeWidgetComponent.propTypes = { id: PropTypes.string.isRequired, title: PropTypes.string.isRequired, @@ -275,11 +230,6 @@ DatetimeWidgetComponent.propTypes = { resettable: PropTypes.bool, }; -/** - * Default properties. - * @property {Object} defaultProps Default properties. - * @static - */ DatetimeWidgetComponent.defaultProps = { description: null, required: false, @@ -290,10 +240,6 @@ DatetimeWidgetComponent.defaultProps = { resettable: true, }; -export default compose( - injectLazyLibs(['reactDates', 'moment']), - connect((state) => ({ - lang: state.intl.locale, - })), - injectIntl, -)(DatetimeWidgetComponent); +export default injectLazyLibs(['reactDates', 'moment'])( + DatetimeWidgetComponent, +); From 3be1e6bfc2348e2bcbae606f0efb0dbfe2c94d6c Mon Sep 17 00:00:00 2001 From: Wesley Barroso Lopes Date: Wed, 4 Sep 2024 18:11:23 -0300 Subject: [PATCH 004/209] Remove "Generate tabs for items other than folders" field from navigation control panel (#6278) --- packages/volto/news/6278.bugfix | 1 + packages/volto/src/config/ControlPanels.js | 1 + packages/volto/src/config/config.test.js | 1 + 3 files changed, 3 insertions(+) create mode 100644 packages/volto/news/6278.bugfix diff --git a/packages/volto/news/6278.bugfix b/packages/volto/news/6278.bugfix new file mode 100644 index 0000000000..df2d41d358 --- /dev/null +++ b/packages/volto/news/6278.bugfix @@ -0,0 +1 @@ +Remove `Generate tabs for items other than folders` field from navigation control panel. @wesleybl diff --git a/packages/volto/src/config/ControlPanels.js b/packages/volto/src/config/ControlPanels.js index 8b7dca7461..1aaeabf488 100644 --- a/packages/volto/src/config/ControlPanels.js +++ b/packages/volto/src/config/ControlPanels.js @@ -90,6 +90,7 @@ export const unwantedControlPanelsFields = { navigation: [ 'generate_tabs', 'navigation_depth', + 'nonfolderish_tabs', 'sort_tabs_on', 'sort_tabs_reversed', 'sitemap_depth', diff --git a/packages/volto/src/config/config.test.js b/packages/volto/src/config/config.test.js index dcef327e32..59ae1dcc8a 100644 --- a/packages/volto/src/config/config.test.js +++ b/packages/volto/src/config/config.test.js @@ -221,6 +221,7 @@ test('test navigation controlpanel fields', () => { const not_in_navigation = [ 'generate_tabs', 'navigation_depth', + 'nonfolderish_tabs', 'sort_tabs_on', 'sort_tabs_reversed', 'sitemap_depth', From 8c4c15670ff5f596f7b8f3904d4ed9d3ac86f7fb Mon Sep 17 00:00:00 2001 From: Nishanth <69671750+lorstenoplo@users.noreply.github.com> Date: Thu, 5 Sep 2024 11:00:08 +0530 Subject: [PATCH 005/209] Refactored SelectMetadataField.jsx to functional component (#5570) Co-authored-by: Steve Piercy --- packages/volto/news/5570.internal | 1 + .../Search/widgets/SelectMetadataField.jsx | 283 +++++++----------- 2 files changed, 108 insertions(+), 176 deletions(-) create mode 100644 packages/volto/news/5570.internal diff --git a/packages/volto/news/5570.internal b/packages/volto/news/5570.internal new file mode 100644 index 0000000000..7b26c18db0 --- /dev/null +++ b/packages/volto/news/5570.internal @@ -0,0 +1 @@ +Refactored the `SelectWidget` component to a functional component. @lorstenoplo \ No newline at end of file diff --git a/packages/volto/src/components/manage/Blocks/Search/widgets/SelectMetadataField.jsx b/packages/volto/src/components/manage/Blocks/Search/widgets/SelectMetadataField.jsx index 79b1feadef..1b4f9a6841 100644 --- a/packages/volto/src/components/manage/Blocks/Search/widgets/SelectMetadataField.jsx +++ b/packages/volto/src/components/manage/Blocks/Search/widgets/SelectMetadataField.jsx @@ -3,8 +3,8 @@ * @module components/manage/Widgets/SelectWidget */ -import { map, intersection, filter, toPairs, groupBy } from 'lodash'; -import React, { Component } from 'react'; +import { map, filter, toPairs, groupBy } from 'lodash'; +import { useEffect } from 'react'; import PropTypes from 'prop-types'; import { injectLazyLibs } from '@plone/volto/helpers/Loadable/Loadable'; import { compose } from 'redux'; @@ -30,187 +30,118 @@ const messages = defineMessages({ }); /** - * SelectWidget component class. + * SelectWidget component function. * @function SelectWidget * @returns {string} Markup of the component. */ -class SelectWidget extends Component { - /** - * Property types. - * @property {Object} propTypes Property types. - * @static - */ - static propTypes = { - id: PropTypes.string.isRequired, - title: PropTypes.string.isRequired, - description: PropTypes.string, - required: PropTypes.bool, - error: PropTypes.arrayOf(PropTypes.string), - loading: PropTypes.bool, - value: PropTypes.oneOfType([ - PropTypes.object, - PropTypes.string, - PropTypes.bool, - ]), - onChange: PropTypes.func.isRequired, - onBlur: PropTypes.func, - onClick: PropTypes.func, - onEdit: PropTypes.func, - onDelete: PropTypes.func, - wrapped: PropTypes.bool, - querystring: PropTypes.object, - }; +const SelectWidget = (props) => { + const { choices, vocabBaseUrl, getVocabulary } = props; - /** - * Default properties - * @property {Object} defaultProps Default properties. - * @static - */ - static defaultProps = { - description: null, - required: false, - items: { - vocabulary: null, - }, - widgetOptions: { - vocabulary: null, - }, - error: [], - choices: [], - loading: false, - value: null, - onChange: () => {}, - onBlur: () => {}, - onClick: () => {}, - onEdit: null, - onDelete: null, - }; - - state = { - selectedOption: this.props.value - ? { label: this.props.value.title, value: this.props.value.value } - : {}, - }; - - /** - * Component did mount - * @method componentDidMount - * @returns {undefined} - */ - componentDidMount() { - if (!this.props.choices && this.props.vocabBaseUrl) { - this.props.getVocabulary({ vocabNameOrURL: this.props.vocabBaseUrl }); + useEffect(() => { + if (!choices && vocabBaseUrl) { + getVocabulary({ vocabNameOrURL: vocabBaseUrl }); } - } - - /** - * Initiate search with new query - * @method loadOptions - * @param {string} search Search query. - * @param {string} previousOptions The previous options rendered. - * @param {string} additional Additional arguments to pass to the next loadOptions. - * @returns {undefined} - */ - loadOptions = (search, previousOptions, additional) => { - let hasMore = this.props.itemsTotal > previousOptions.length; - if (hasMore) { - const offset = this.state.search !== search ? 0 : additional.offset; - this.props.getVocabulary({ - vocabNameOrURL: this.props.vocabBaseUrl, - query: search, - start: offset, - }); - this.setState({ search }); - - return { - options: - intersection(previousOptions, this.props.choices).length === - this.props.choices.length - ? [] - : this.props.choices, - hasMore: hasMore, - additional: { - offset: offset === additional.offset ? offset + 25 : offset, - }, - }; - } - return null; - }; - - /* Customized to pass object instead of plain string value */ - handleChange = (selectedOption) => { - this.setState({ selectedOption }); - this.props.onChange(this.props.id, { - value: selectedOption.value, - title: selectedOption.label, - }); - }; - - /** - * Render method. - * @method render - * @returns {string} Markup for the component. - */ - render() { - const { - id, - // choices, - value, - onChange, - placeholder, - querystring, - filterOptions = identity, - } = this.props; - const isDisabled = false; - const { indexes = [] } = querystring; - - const Select = this.props.reactSelect.default; - - return ( - - item[1].group), + ), + (group) => ({ + label: group[0], + options: map( + filter(group[1], (item) => item[1].enabled), + (field) => ({ + label: field[1].title, + value: field[0], + }), ), - (group) => ({ - label: group[0], - options: map( - filter(group[1], (item) => item[1].enabled), - (field) => ({ - label: field[1].title, - value: field[0], - }), - ), - }), - )} - styles={customSelectStyles} - theme={selectTheme} - components={{ DropdownIndicator, Option }} - value={{ value: value?.value, label: indexes[value?.value]?.title }} - onChange={(data) => { - let dataValue = []; - if (Array.isArray(data)) { - for (let obj of data) { - dataValue.push(obj.value); - } - return onChange(id, dataValue); + }), + )} + styles={customSelectStyles} + theme={selectTheme} + components={{ DropdownIndicator, Option }} + value={{ + value: value?.value, + label: indexes[value?.value]?.title, + }} + onChange={(data) => { + let dataValue = []; + if (Array.isArray(data)) { + for (let obj of data) { + dataValue.push(obj.value); } - return onChange(id, data); - }} - /> - - ); - } -} + return onChange(id, dataValue); + } + return onChange(id, data); + }} + /> + + ); +}; + +SelectWidget.propTypes = { + id: PropTypes.string.isRequired, + title: PropTypes.string.isRequired, + description: PropTypes.string, + required: PropTypes.bool, + error: PropTypes.arrayOf(PropTypes.string), + loading: PropTypes.bool, + value: PropTypes.oneOfType([ + PropTypes.object, + PropTypes.string, + PropTypes.bool, + ]), + onChange: PropTypes.func.isRequired, + onBlur: PropTypes.func, + onClick: PropTypes.func, + onEdit: PropTypes.func, + onDelete: PropTypes.func, + wrapped: PropTypes.bool, + querystring: PropTypes.object, +}; + +SelectWidget.defaultProps = { + description: null, + required: false, + items: { + vocabulary: null, + }, + widgetOptions: { + vocabulary: null, + }, + error: [], + choices: [], + loading: false, + value: null, + onChange: () => {}, + onBlur: () => {}, + onClick: () => {}, + onEdit: null, + onDelete: null, +}; export default compose( withQueryString, From 3a3b56d7996de2be8879e30cc197a90872a89862 Mon Sep 17 00:00:00 2001 From: Wesley Barroso Lopes Date: Fri, 6 Sep 2024 14:22:29 -0300 Subject: [PATCH 006/209] Passes the `user` to the `restricted` function of the block settings (#6271) Co-authored-by: Steve Piercy --- .../source/development/how-to-restrict-blocks.md | 8 ++++++-- packages/volto-slate/news/6264.feature | 1 + .../volto-slate/src/blocks/Text/SlashMenu.jsx | 16 +++++++++++++++- packages/volto/news/6264.feature | 1 + .../manage/BlockChooser/BlockChooser.jsx | 10 +++++++++- 5 files changed, 32 insertions(+), 4 deletions(-) create mode 100644 packages/volto-slate/news/6264.feature create mode 100644 packages/volto/news/6264.feature diff --git a/docs/source/development/how-to-restrict-blocks.md b/docs/source/development/how-to-restrict-blocks.md index 15fee224ed..ed274ee37b 100644 --- a/docs/source/development/how-to-restrict-blocks.md +++ b/docs/source/development/how-to-restrict-blocks.md @@ -22,12 +22,16 @@ The function has this signature: block: BlockConfigBase; navRoot: Content; contentType: string; + user: Object }) => boolean; } ``` -Where `properties` is the current object data and `block` is the block being evaluated in `BlockChooser`. -`navRoot` is the nearest navigation root object and `contentType` is the current content type. +`properties` is the current object data. +`block` is the block being evaluated in `BlockChooser`. +`navRoot` is the nearest navigation root object. +`contentType` is the current content type. +`user` is an object that represents the currently authenticated user. In the following configuration example, you can restrict a block so that it cannot be added unless the content type is `News Item` or the content item is in a specific path in the content tree (`/folder`): diff --git a/packages/volto-slate/news/6264.feature b/packages/volto-slate/news/6264.feature new file mode 100644 index 0000000000..02fa752b0f --- /dev/null +++ b/packages/volto-slate/news/6264.feature @@ -0,0 +1 @@ +Pass `user`, `navRoot` and `contentType` objects to the `restricted` function of the block settings. @wesleybl diff --git a/packages/volto-slate/src/blocks/Text/SlashMenu.jsx b/packages/volto-slate/src/blocks/Text/SlashMenu.jsx index 6fd5ed2f30..2a26c39cfe 100644 --- a/packages/volto-slate/src/blocks/Text/SlashMenu.jsx +++ b/packages/volto-slate/src/blocks/Text/SlashMenu.jsx @@ -4,6 +4,7 @@ import { filter, isEmpty } from 'lodash'; import { Menu } from 'semantic-ui-react'; import { useIntl, FormattedMessage } from 'react-intl'; import { Icon } from '@plone/volto/components'; +import { useSelector } from 'react-redux'; const emptySlateBlock = () => ({ value: [ @@ -105,9 +106,13 @@ const PersistentSlashMenu = ({ editor }) => { selected, allowedBlocks, detached, + navRoot, + contentType, } = props; const disableNewBlocks = data?.disableNewBlocks || detached; + const user = useSelector((state) => state.users?.user); + const [slashMenuSelected, setSlashMenuSelected] = React.useState(0); const hasAllowedBlocks = !isEmpty(allowedBlocks); @@ -122,7 +127,13 @@ const PersistentSlashMenu = ({ editor }) => { hasAllowedBlocks ? allowedBlocks.includes(item.id) : typeof item.restricted === 'function' - ? !item.restricted({ properties, block: item }) + ? !item.restricted({ + properties, + block: item, + navRoot, + contentType, + user, + }) : !item.restricted, ) .filter((block) => Boolean(block.title && block.id)) @@ -152,6 +163,9 @@ const PersistentSlashMenu = ({ editor }) => { properties, slashCommand, hasAllowedBlocks, + navRoot, + contentType, + user, ], ); diff --git a/packages/volto/news/6264.feature b/packages/volto/news/6264.feature new file mode 100644 index 0000000000..e8a31aaf20 --- /dev/null +++ b/packages/volto/news/6264.feature @@ -0,0 +1 @@ +Pass the `user`, `navRoot` and `contentType` objects to the `restricted` function of the block settings. @wesleybl diff --git a/packages/volto/src/components/manage/BlockChooser/BlockChooser.jsx b/packages/volto/src/components/manage/BlockChooser/BlockChooser.jsx index 69b3d87c38..80c5142e81 100644 --- a/packages/volto/src/components/manage/BlockChooser/BlockChooser.jsx +++ b/packages/volto/src/components/manage/BlockChooser/BlockChooser.jsx @@ -1,4 +1,5 @@ import React from 'react'; +import { useSelector } from 'react-redux'; import PropTypes from 'prop-types'; import { filter, map, groupBy, isEmpty } from 'lodash'; import { Accordion, Button } from 'semantic-ui-react'; @@ -35,6 +36,7 @@ const BlockChooser = ({ contentType, }) => { const intl = useIntl(); + const user = useSelector((state) => state.users?.user); const hasAllowedBlocks = !isEmpty(allowedBlocks); const filteredBlocksConfig = filter(blocksConfig, (item) => { @@ -57,7 +59,13 @@ const BlockChooser = ({ // depending on this function, given properties (current present blocks) and the // block being evaluated return typeof item.restricted === 'function' - ? !item.restricted({ properties, block: item, navRoot, contentType }) + ? !item.restricted({ + properties, + block: item, + navRoot, + contentType, + user, + }) : !item.restricted; } } From 7690677589ad881d794a9484d9a8ee1aa005fbcf Mon Sep 17 00:00:00 2001 From: Tisha Soumya Date: Sun, 8 Sep 2024 10:02:30 +0530 Subject: [PATCH 007/209] Refactor Content upload modal (#5047) Co-authored-by: David Glick --- packages/volto/news/5047.feature | 1 + .../manage/Contents/ContentsUploadModal.jsx | 553 ++++++++---------- .../Contents/ContentsUploadModal.stories.jsx | 56 ++ 3 files changed, 287 insertions(+), 323 deletions(-) create mode 100644 packages/volto/news/5047.feature create mode 100644 packages/volto/src/components/manage/Contents/ContentsUploadModal.stories.jsx diff --git a/packages/volto/news/5047.feature b/packages/volto/news/5047.feature new file mode 100644 index 0000000000..0e0d81f8ff --- /dev/null +++ b/packages/volto/news/5047.feature @@ -0,0 +1 @@ +Refactor Contents/ContentsUploadModal & Storybook-@Tishasoumya-02 \ No newline at end of file diff --git a/packages/volto/src/components/manage/Contents/ContentsUploadModal.jsx b/packages/volto/src/components/manage/Contents/ContentsUploadModal.jsx index 4290a3d95f..0d83026e2d 100644 --- a/packages/volto/src/components/manage/Contents/ContentsUploadModal.jsx +++ b/packages/volto/src/components/manage/Contents/ContentsUploadModal.jsx @@ -1,12 +1,6 @@ -/** - * Contents upload modal. - * @module components/manage/Contents/ContentsUploadModal - */ - -import React, { Component } from 'react'; +import { useState, useEffect } from 'react'; import PropTypes from 'prop-types'; -import { connect } from 'react-redux'; -import { compose } from 'redux'; +import { shallowEqual, useDispatch, useSelector } from 'react-redux'; import { Button, Dimmer, @@ -23,10 +17,10 @@ import loadable from '@loadable/component'; import { concat, filter, map } from 'lodash'; import filesize from 'filesize'; import { readAsDataURL } from 'promise-file-reader'; -import { FormattedMessage, defineMessages, injectIntl } from 'react-intl'; +import { FormattedMessage, defineMessages, useIntl } from 'react-intl'; import { FormattedRelativeDate } from '@plone/volto/components'; import { createContent } from '@plone/volto/actions'; -import { validateFileUploadSize } from '@plone/volto/helpers'; +import { validateFileUploadSize, usePrevious } from '@plone/volto/helpers'; const Dropzone = loadable(() => import('react-dropzone')); @@ -52,154 +46,77 @@ const messages = defineMessages({ const SUBREQUEST = 'batch-upload'; -/** - * ContentsUploadModal class. - * @class ContentsUploadModal - * @extends Component - */ -class ContentsUploadModal extends Component { - /** - * Property types. - * @property {Object} propTypes Property types. - * @static - */ - static propTypes = { - createContent: PropTypes.func.isRequired, - pathname: PropTypes.string.isRequired, - request: PropTypes.shape({ - loading: PropTypes.bool, - loaded: PropTypes.bool, - }).isRequired, - open: PropTypes.bool.isRequired, - onOk: PropTypes.func.isRequired, - onCancel: PropTypes.func.isRequired, - uploadedFiles: PropTypes.number, - multiple: PropTypes.bool, - minSize: PropTypes.number, - maxSize: PropTypes.number, - accept: PropTypes.oneOfType([ - PropTypes.string, - PropTypes.arrayOf(PropTypes.string), - ]), - }; +const ContentsUploadModal = (props) => { + const intl = useIntl(); + const dispatch = useDispatch(); + const request = useSelector( + (state) => state.content.subrequests?.[SUBREQUEST] || {}, + shallowEqual, + ); + const uploadedFiles = useSelector((state) => state.content.uploadedFiles); - /** - * Constructor - * @method constructor - * @param {Object} props Component properties - * @constructs ContentsUploadModal - */ - constructor(props) { - super(props); - this.onRemoveFile = this.onRemoveFile.bind(this); - this.onDrop = this.onDrop.bind(this); - this.onCancel = this.onCancel.bind(this); - this.onSubmit = this.onSubmit.bind(this); - this.state = { - files: [], - totalFiles: 0, - }; - } - /** - * Component will receive props - * @method componentWillReceiveProps - * @param {Object} nextProps Next properties - * @returns {undefined} - */ - UNSAFE_componentWillReceiveProps(nextProps) { - if (this.props.request.loading && nextProps.request.loaded) { - this.props.onOk(); - this.setState({ - files: [], - }); + const prevrequestloading = usePrevious(request.loading); + const [files, setFiles] = useState([]); + const [totalFiles, setTotalFiles] = useState(0); + const { onOk } = props; + useEffect(() => { + if (prevrequestloading && request.loaded) { + onOk(); + setFiles([]); } - } + }, [prevrequestloading, request.loaded, onOk]); - /** - * Remove file handler - * @method onRemoveFile - * @param {Object} event Event object - * @returns {undefined} - */ - onRemoveFile(event) { - this.setState({ - files: filter( - this.state.files, + const onRemoveFile = (event) => { + setFiles( + filter( + files, (file, index) => index !== parseInt(event.target.getAttribute('value'), 10), ), - }); - this.setState((prevState) => ({ totalFiles: prevState.totalFiles - 1 })); - } + ); + setTotalFiles(totalFiles - 1); + }; - /** - * Drop handler - * @method onDrop - * @param {array} files File objects - * @returns {undefined} - */ - onDrop = async (files) => { + const onDrop = async (newFiles) => { const validFiles = []; - for (let i = 0; i < files.length; i++) { - if (validateFileUploadSize(files[i], this.props.intl.formatMessage)) { - await readAsDataURL(files[i]).then((data) => { + for (let i = 0; i < newFiles.length; i++) { + if (validateFileUploadSize(newFiles[i], intl.formatMessage)) { + await readAsDataURL(newFiles[i]).then((data) => { const fields = data.match(/^data:(.*);(.*),(.*)$/); - files[i].preview = fields[0]; + newFiles[i].preview = fields[0]; }); - validFiles.push(files[i]); + validFiles.push(newFiles[i]); } } - this.setState({ - files: concat(this.state.files, validFiles), - }); - - this.setState({ totalFiles: validFiles.length }); + setFiles(concat(files, validFiles)); + setTotalFiles(validFiles.length); }; - /** - * Cancel handler - * @method onCancel - * @returns {undefined} - */ - onCancel() { - this.props.onCancel(); - this.setState({ - files: [], - }); - this.setState({ totalFiles: 0 }); - } - /** - * Name change handler - * @method onChangeFileName - * @returns {undefined} - */ + const onCancel = () => { + props.onCancel(); + setFiles([]); + setTotalFiles(0); + }; - onChangeFileName(e, index) { - let copyOfFiles = [...this.state.files]; - let originalFile = this.state.files[index]; + const onChangeFileName = (e, index) => { + let copyOfFiles = [...files]; + let originalFile = files[index]; let newFile = new File([originalFile], e.target.value, { type: originalFile.type, }); newFile.preview = originalFile.preview; newFile.path = e.target.value; copyOfFiles[index] = newFile; - this.setState({ - files: copyOfFiles, - }); - } + setFiles(copyOfFiles); + }; - /** - * Submit handlers - * @method onSubmit - * @returns {undefined} - */ - onSubmit() { - Promise.all(map(this.state.files, (file) => readAsDataURL(file))).then( - (files) => { - this.props.createContent( - this.props.pathname, - map(this.state.files, (file, index) => { - const fields = files[index].match(/^data:(.*);(.*),(.*)$/); + const onSubmit = () => { + Promise.all(map(files, (file) => readAsDataURL(file))).then((dataUrls) => { + dispatch( + createContent( + props.pathname, + map(files, (file, index) => { + const fields = dataUrls[index].match(/^data:(.*);(.*),(.*)$/); const image = fields[1].split('/')[0] === 'image'; return { '@type': image ? 'Image' : 'File', @@ -213,205 +130,195 @@ class ContentsUploadModal extends Component { }; }), SUBREQUEST, - ); - }, - ); - } - - /** - * Render method. - * @method render - * @returns {string} Markup for the component. - */ - render() { - const { - multiple = true, - minSize = null, - maxSize = null, - accept = null, - disabled = false, - } = this.props; - - const dropzoneOptions = { - multiple, - minSize, - maxSize, - accept, - disabled, - }; + ), + ); + }); + }; - return ( - this.props.open && ( - -
- -
+ const { + multiple = true, + minSize = null, + maxSize = null, + accept = null, + disabled = false, + } = props; + const dropzoneOptions = { + multiple, + minSize, + maxSize, + accept, + disabled, + }; - -
- - {this.props.intl.formatMessage(messages.filesUploaded, { - uploadedFiles: this.props.uploadedFiles, - })} -
- {this.props.intl.formatMessage(messages.totalFilesToUpload, { - totalFiles: this.state.totalFiles, - })} -
-
-
- - +
+ +
+ +
+ - {({ getRootProps, getInputProps }) => ( -
- - - - - + {intl.formatMessage(messages.filesUploaded, { + uploadedFiles, + })} +
+ {intl.formatMessage(messages.totalFilesToUpload, { + totalFiles, + })} + + + + + + {({ getRootProps, getInputProps }) => ( +
+ +
+ + + + + + + - - - - -
-
-
- )} - - {this.state.files.length > 0 && ( - - - - - - - - + + + + +
+ +
+ )} +
+ {files.length > 0 && ( + + + + + + + + + + + + + + + + + + + + {map(files, (file, index) => ( + + + onChangeFileName(e, index)} /> - - - + + {file.lastModifiedDate && ( + + )} + + {filesize(file.size, { round: 0 })} + + {file.type.split('/')[0] === 'image' && ( + + )} + + + - - - - - + - - - {map(this.state.files, (file, index) => ( - - - this.onChangeFileName(e, index)} - /> - - - {file.lastModifiedDate && ( - - )} - - - {filesize(file.size, { round: 0 })} - - - {file.type.split('/')[0] === 'image' && ( - - )} - - - - - - ))} - -
- )} -
- - {this.state.files.length > 0 && ( - 0 })} + className={cx('text', { + errored: errors && Object.keys(errors).length > 0, + })} > {config.blocks.blocksConfig[data?.['@type']]?.icon && ( Date: Fri, 13 Sep 2024 16:46:27 +0200 Subject: [PATCH 011/209] Update to Volto 6.0.13 (#6285) --- packages/volto/news/6285.internal | 1 + variables.mk | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) create mode 100644 packages/volto/news/6285.internal diff --git a/packages/volto/news/6285.internal b/packages/volto/news/6285.internal new file mode 100644 index 0000000000..80fab2721e --- /dev/null +++ b/packages/volto/news/6285.internal @@ -0,0 +1 @@ +Update to Volto 6.0.13 @sneridagh diff --git a/variables.mk b/variables.mk index 9d880bf43a..3a40d4a3ca 100644 --- a/variables.mk +++ b/variables.mk @@ -1,7 +1,7 @@ INSTANCE_PORT=8080 -DOCKER_IMAGE=plone/server-dev:6.0.11 -DOCKER_IMAGE_ACCEPTANCE=plone/server-acceptance:6.0.11 -KGS=plone.restapi==9.7.0 +DOCKER_IMAGE=plone/server-dev:6.0.13 +DOCKER_IMAGE_ACCEPTANCE=plone/server-acceptance:6.0.13 +KGS= NODEBIN = ./node_modules/.bin SCRIPTSPACKAGE = ./packages/scripts From f789b9083f327b2f1060c5694c577c2b612688cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Fern=C3=A1ndez=20de=20Alba?= Date: Fri, 13 Sep 2024 18:12:43 +0200 Subject: [PATCH 012/209] Fix typo in Changelog for #6285 (#6287) --- packages/volto/news/6285.internal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/volto/news/6285.internal b/packages/volto/news/6285.internal index 80fab2721e..f402fb0975 100644 --- a/packages/volto/news/6285.internal +++ b/packages/volto/news/6285.internal @@ -1 +1 @@ -Update to Volto 6.0.13 @sneridagh +Update to Plone 6.0.13 @sneridagh From 30db865db7ce7df699c6cd0138d64684d2d7bdf3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Fern=C3=A1ndez=20de=20Alba?= Date: Fri, 13 Sep 2024 18:17:15 +0200 Subject: [PATCH 013/209] Added a notice in the upgrade guide for CookiePlone as the recommended way for generating projects and add-on boilerplate (#6286) Co-authored-by: David Glick --- docs/source/upgrade-guide/index.md | 15 +++++++++++++++ packages/volto/news/6286.documentation | 1 + 2 files changed, 16 insertions(+) create mode 100644 packages/volto/news/6286.documentation diff --git a/docs/source/upgrade-guide/index.md b/docs/source/upgrade-guide/index.md index b199673aea..9aab23d148 100644 --- a/docs/source/upgrade-guide/index.md +++ b/docs/source/upgrade-guide/index.md @@ -450,6 +450,21 @@ schema: { The `Tags` component has been moved to the `belowContent` slot. It now receives the `content` property instead of the `tags` property. +### CookiePlone is now the recommended project and add-on generator for Volto 18 + +```{versionadded} 18.0.0-alpha.43 +``` +The recommended way for developing Volto projects will be using [Cookieplone](https://github.com/plone/cookieplone) as a boilerplate generator. +Cookieplone uses the frontend code installed using `pnpm` instead of `yarn`. +This affects the way that we generate the official Docker images, since they have to be compatible with the `pnpm` setup. + +From Volto `18.0.0-alpha.43` the official `plone-frontend` Docker image will be the one using `pnpm`. +During all the 18 series, a new image with the suffix `-yarn` (`plone-frontend:18-yarn`) will be generated as well for those of you that won't migrate your boilerplate and code to the new setup yet. When Volto 19 is out, we won't support it nor build it anymore. + +```{deprecated} 18.0.0-alpha.43 +The `yarn`-based generator `@plone/generator-volto` package and project boilerplates generated with it are deprecated and will not receive any further updates. The recommended way of generating a project boilerplate is Cookieplone. Please update your code to the `pnpm` based setup. +``` + (volto-upgrade-guide-17.x.x)= ## Upgrading to Volto 17.x.x diff --git a/packages/volto/news/6286.documentation b/packages/volto/news/6286.documentation new file mode 100644 index 0000000000..bc8643c1dd --- /dev/null +++ b/packages/volto/news/6286.documentation @@ -0,0 +1 @@ +Added upgrade guide notice about CookiePlone as the recommended way for generating projects and add-on boilerplate @sneridagh From 88eb9d80fcc384e1437ab2eaedda20cc13717902 Mon Sep 17 00:00:00 2001 From: Victor Fernandez de Alba Date: Fri, 13 Sep 2024 18:18:35 +0200 Subject: [PATCH 014/209] Release @plone/client 1.0.0-alpha.17 --- packages/client/CHANGELOG.md | 6 ++++++ packages/client/news/6076.documentation | 1 - packages/client/package.json | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) delete mode 100644 packages/client/news/6076.documentation diff --git a/packages/client/CHANGELOG.md b/packages/client/CHANGELOG.md index b609e68f8e..37a57ad33b 100644 --- a/packages/client/CHANGELOG.md +++ b/packages/client/CHANGELOG.md @@ -8,6 +8,12 @@ +## 1.0.0-alpha.17 (2024-09-13) + +### Documentation + +- Add documentation about optional `token` parameter for `ploneClient` initialization. @MAX-786 [#6076](https://github.com/plone/volto/pull/6076) + ## 1.0.0-alpha.16 (2024-06-06) ### Bugfix diff --git a/packages/client/news/6076.documentation b/packages/client/news/6076.documentation deleted file mode 100644 index 138045af4e..0000000000 --- a/packages/client/news/6076.documentation +++ /dev/null @@ -1 +0,0 @@ -Add documentation about optional `token` parameter for `ploneClient` initialization. @MAX-786 \ No newline at end of file diff --git a/packages/client/package.json b/packages/client/package.json index e3563d194d..2b9104397b 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -8,7 +8,7 @@ } ], "license": "MIT", - "version": "1.0.0-alpha.16", + "version": "1.0.0-alpha.17", "repository": { "type": "git", "url": "git@github.com:plone/volto.git" From 6584d620a63b552788482ae680ddc88ff0e537ab Mon Sep 17 00:00:00 2001 From: Victor Fernandez de Alba Date: Fri, 13 Sep 2024 18:19:38 +0200 Subject: [PATCH 015/209] Release @plone/slate 18.0.0-alpha.18 --- packages/volto-slate/CHANGELOG.md | 6 ++++++ packages/volto-slate/news/6264.feature | 1 - packages/volto-slate/package.json | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) delete mode 100644 packages/volto-slate/news/6264.feature diff --git a/packages/volto-slate/CHANGELOG.md b/packages/volto-slate/CHANGELOG.md index 554619a18d..c7e8ee3c2f 100644 --- a/packages/volto-slate/CHANGELOG.md +++ b/packages/volto-slate/CHANGELOG.md @@ -8,6 +8,12 @@ +## 18.0.0-alpha.18 (2024-09-13) + +### Feature + +- Pass `user`, `navRoot` and `contentType` objects to the `restricted` function of the block settings. @wesleybl [#6264](https://github.com/plone/volto/issues/6264) + ## 18.0.0-alpha.17 (2024-07-05) ### Feature diff --git a/packages/volto-slate/news/6264.feature b/packages/volto-slate/news/6264.feature deleted file mode 100644 index 02fa752b0f..0000000000 --- a/packages/volto-slate/news/6264.feature +++ /dev/null @@ -1 +0,0 @@ -Pass `user`, `navRoot` and `contentType` objects to the `restricted` function of the block settings. @wesleybl diff --git a/packages/volto-slate/package.json b/packages/volto-slate/package.json index c64a51372f..5e5b6118bd 100644 --- a/packages/volto-slate/package.json +++ b/packages/volto-slate/package.json @@ -1,6 +1,6 @@ { "name": "@plone/volto-slate", - "version": "18.0.0-alpha.17", + "version": "18.0.0-alpha.18", "description": "Slate.js integration with Volto", "main": "src/index.js", "author": "European Environment Agency: IDM2 A-Team", From 1e01070176d05fc5c36bd330a141d0acd61543d2 Mon Sep 17 00:00:00 2001 From: Victor Fernandez de Alba Date: Fri, 13 Sep 2024 18:24:14 +0200 Subject: [PATCH 016/209] Release 18.0.0-alpha.43 --- docs/source/release-notes/index.md | 72 ++++++++++++++++ packages/volto/CHANGELOG.md | 72 ++++++++++++++++ packages/volto/news/4077.feature | 1 - packages/volto/news/4819.feature | 1 - packages/volto/news/4861.feature | 1 - packages/volto/news/4955.feature | 1 - packages/volto/news/4959.feature | 1 - packages/volto/news/4960.feature | 1 - packages/volto/news/4985.feature | 1 - packages/volto/news/4986.feature | 1 - packages/volto/news/4993.feature | 1 - packages/volto/news/4995.feature | 1 - packages/volto/news/5044.feature | 1 - packages/volto/news/5045.feature | 1 - packages/volto/news/5046.feature | 1 - packages/volto/news/5047.feature | 1 - packages/volto/news/5048.feature | 1 - packages/volto/news/5049.feature | 1 - packages/volto/news/5055.bugfix | 1 - packages/volto/news/5066.feature | 1 - packages/volto/news/5093.feature | 1 - packages/volto/news/5274.bugfix | 1 - packages/volto/news/5570.internal | 1 - packages/volto/news/5971.bugfix | 1 - packages/volto/news/6071.bugfix | 1 - packages/volto/news/6147.bugfix | 1 - packages/volto/news/6167.feature | 1 - packages/volto/news/6186.feature | 1 - packages/volto/news/6213.feature | 2 - packages/volto/news/6226.bugfix | 1 - packages/volto/news/6230.bugfix | 1 - packages/volto/news/6231.internal | 1 - packages/volto/news/6232.internal | 1 - packages/volto/news/6235.bugfix | 1 - packages/volto/news/6237.bugfix | 1 - packages/volto/news/6239.documentation | 1 - packages/volto/news/6240.bugfix | 2 - packages/volto/news/6241.internal | 1 - packages/volto/news/6242.internal | 1 - packages/volto/news/6244.bugfix | 1 - packages/volto/news/6247.bugfix | 1 - packages/volto/news/6248.feature | 2 - packages/volto/news/6252.bugfix | 1 - packages/volto/news/6258.bugfix | 1 - packages/volto/news/6262.documentation | 1 - packages/volto/news/6264.feature | 1 - packages/volto/news/6269.breaking | 1 - packages/volto/news/6273.bugfix | 1 - packages/volto/news/6274.internal | 1 - packages/volto/news/6275.bugfix | 1 - packages/volto/news/6278.bugfix | 1 - packages/volto/news/6279.bugfix | 1 - packages/volto/news/6284.bugfix | 1 - packages/volto/news/6285.internal | 1 - packages/volto/news/6286.documentation | 1 - packages/volto/package.json | 2 +- .../manage/Actions/Actions.stories.d.ts | 8 ++ .../manage/Blocks/LeadImage/Edit.d.ts | 19 +++-- .../Search/widgets/SelectMetadataField.d.ts | 5 -- .../components/manage/Blocks/ToC/Edit.d.ts | 7 +- .../components/manage/Blocks/Video/Edit.d.ts | 2 +- .../manage/Blocks/Video/Edit.stories.d.ts | 8 ++ .../Contents/ContentsBreadcrumbs.stories.d.ts | 8 ++ .../manage/Contents/ContentsUploadModal.d.ts | 16 +++- .../Contents/ContentsUploadModal.stories.d.ts | 8 ++ .../components/manage/Contents/index.d.ts | 2 +- .../Controlpanels/AddonsControlpanel.d.ts | 4 +- .../manage/Controlpanels/Aliases.d.ts | 4 +- .../manage/Controlpanels/Aliases.stories.d.ts | 8 ++ .../Controlpanels/DatabaseInformation.d.ts | 4 +- .../Controlpanels/Groups/RenderGroups.d.ts | 15 ++-- .../manage/Controlpanels/index.d.ts | 8 +- .../manage/Display/Display.stories.d.ts | 8 ++ .../manage/Preferences/ChangePassword.d.ts | 4 +- .../Preferences/ChangePassword.stories.d.ts | 8 ++ .../Preferences/PersonalInformation.d.ts | 9 +- .../Preferences/PersonalPreferences.d.ts | 6 +- .../PersonalPreferences.stories.d.ts | 8 ++ .../types/components/manage/Toolbar/More.d.ts | 13 +-- .../manage/Widgets/DatetimeWidget.d.ts | 85 ------------------- .../Widgets/DatetimeWidget.stories.d.ts | 1 - .../manage/Widgets/ReferenceWidget.d.ts | 29 ++++++- .../components/manage/Widgets/index.d.ts | 2 +- .../components/theme/Register/Register.d.ts | 4 +- .../theme/Register/Register.stories.d.ts | 9 ++ .../types/components/theme/Tags/Tags.d.ts | 22 +++-- .../components/theme/View/AlbumView.d.ts | 20 +---- .../volto/types/config/ControlPanels.d.ts | 8 ++ packages/volto/types/config/Widgets.d.ts | 2 +- packages/volto/types/config/slots.d.ts | 21 +++++ .../volto/types/helpers/Blocks/Blocks.d.ts | 6 ++ .../FormValidation/FormValidation.d.ts | 1 + packages/volto/types/helpers/index.d.ts | 4 +- packages/volto/types/middleware/index.d.ts | 1 + .../types/middleware/userSessionReset.d.ts | 5 ++ 95 files changed, 384 insertions(+), 220 deletions(-) delete mode 100644 packages/volto/news/4077.feature delete mode 100644 packages/volto/news/4819.feature delete mode 100644 packages/volto/news/4861.feature delete mode 100644 packages/volto/news/4955.feature delete mode 100644 packages/volto/news/4959.feature delete mode 100644 packages/volto/news/4960.feature delete mode 100644 packages/volto/news/4985.feature delete mode 100644 packages/volto/news/4986.feature delete mode 100644 packages/volto/news/4993.feature delete mode 100644 packages/volto/news/4995.feature delete mode 100644 packages/volto/news/5044.feature delete mode 100644 packages/volto/news/5045.feature delete mode 100644 packages/volto/news/5046.feature delete mode 100644 packages/volto/news/5047.feature delete mode 100644 packages/volto/news/5048.feature delete mode 100644 packages/volto/news/5049.feature delete mode 100644 packages/volto/news/5055.bugfix delete mode 100644 packages/volto/news/5066.feature delete mode 100644 packages/volto/news/5093.feature delete mode 100644 packages/volto/news/5274.bugfix delete mode 100644 packages/volto/news/5570.internal delete mode 100644 packages/volto/news/5971.bugfix delete mode 100644 packages/volto/news/6071.bugfix delete mode 100644 packages/volto/news/6147.bugfix delete mode 100644 packages/volto/news/6167.feature delete mode 100644 packages/volto/news/6186.feature delete mode 100644 packages/volto/news/6213.feature delete mode 100644 packages/volto/news/6226.bugfix delete mode 100644 packages/volto/news/6230.bugfix delete mode 100644 packages/volto/news/6231.internal delete mode 100644 packages/volto/news/6232.internal delete mode 100644 packages/volto/news/6235.bugfix delete mode 100644 packages/volto/news/6237.bugfix delete mode 100644 packages/volto/news/6239.documentation delete mode 100644 packages/volto/news/6240.bugfix delete mode 100644 packages/volto/news/6241.internal delete mode 100644 packages/volto/news/6242.internal delete mode 100644 packages/volto/news/6244.bugfix delete mode 100644 packages/volto/news/6247.bugfix delete mode 100644 packages/volto/news/6248.feature delete mode 100644 packages/volto/news/6252.bugfix delete mode 100644 packages/volto/news/6258.bugfix delete mode 100644 packages/volto/news/6262.documentation delete mode 100644 packages/volto/news/6264.feature delete mode 100644 packages/volto/news/6269.breaking delete mode 100644 packages/volto/news/6273.bugfix delete mode 100644 packages/volto/news/6274.internal delete mode 100644 packages/volto/news/6275.bugfix delete mode 100644 packages/volto/news/6278.bugfix delete mode 100644 packages/volto/news/6279.bugfix delete mode 100644 packages/volto/news/6284.bugfix delete mode 100644 packages/volto/news/6285.internal delete mode 100644 packages/volto/news/6286.documentation create mode 100644 packages/volto/types/components/manage/Actions/Actions.stories.d.ts create mode 100644 packages/volto/types/components/manage/Blocks/Video/Edit.stories.d.ts create mode 100644 packages/volto/types/components/manage/Contents/ContentsBreadcrumbs.stories.d.ts create mode 100644 packages/volto/types/components/manage/Contents/ContentsUploadModal.stories.d.ts create mode 100644 packages/volto/types/components/manage/Controlpanels/Aliases.stories.d.ts create mode 100644 packages/volto/types/components/manage/Display/Display.stories.d.ts create mode 100644 packages/volto/types/components/manage/Preferences/ChangePassword.stories.d.ts create mode 100644 packages/volto/types/components/manage/Preferences/PersonalPreferences.stories.d.ts create mode 100644 packages/volto/types/components/theme/Register/Register.stories.d.ts create mode 100644 packages/volto/types/config/slots.d.ts create mode 100644 packages/volto/types/middleware/userSessionReset.d.ts diff --git a/docs/source/release-notes/index.md b/docs/source/release-notes/index.md index 91db671d96..8a11d4dcff 100644 --- a/docs/source/release-notes/index.md +++ b/docs/source/release-notes/index.md @@ -17,6 +17,78 @@ myst: +## 18.0.0-alpha.43 (2024-09-13) + +### Breaking + +- Move `Tags` component to the slot `belowContent`. @wesleybl [#6269](https://github.com/plone/volto/issues/6269) + +### Feature + +- Refactor AlbumView from class to functional component. @Tishasoumya-02 [#4077](https://github.com/plone/volto/issues/4077) +- Add setting `unwantedControlPanelsFields` and use it in the function `filterControlPanelsSchema`. @wesleybl [#4819](https://github.com/plone/volto/issues/4819) +- Refactor the `Register` component from class-based to functional. @Tishasoumya-02 [#4861](https://github.com/plone/volto/issues/4861) +- Refactor Toolbar/More component from class to functional component. @Tishasoumya-02 [#4955](https://github.com/plone/volto/issues/4955) +- Refactor Blocks/LeadImage/Edit component from class to functional component. @Tishasoumya-02 [#4959](https://github.com/plone/volto/issues/4959) +- Refactor Blocks/Video/Edit component from class to functional component. @Tishasoumya-02 [#4960](https://github.com/plone/volto/issues/4960) +- Refactor ControlPanel/Users/Aliases component , replacing class component lifecycle methods with functional hooks. @Tishasoumya-02 [#4985](https://github.com/plone/volto/issues/4985) +- Refactor Controlpanel databaseInformation from class component to functional component. @Tishasoumya-02 [#4986](https://github.com/plone/volto/issues/4986) +- Refactor ControlPanels/Groups RenderGroups from class components to functional component. @Tishasoumya-02 [#4993](https://github.com/plone/volto/issues/4993) +- Refactor AddonsControlpanel from class to functional components. @Tishasoumya [#4995](https://github.com/plone/volto/issues/4995) +- Refactor Preference/Change Password from class to functional component. @Tishasoumya-02 [#5044](https://github.com/plone/volto/issues/5044) +- Refactor Preference/PersonalPreferences from class to functional component. @Tishasoumya-02 [#5045](https://github.com/plone/volto/issues/5045) +- Refactor Preference/PersonalInformation from Class to Functional component. @Tishasoumya-02 [#5046](https://github.com/plone/volto/issues/5046) +- Refactor Contents/ContentsUploadModal & Storybook-@Tishasoumya-02 [#5047](https://github.com/plone/volto/issues/5047) +- Storybook test for ContentBreadcrumbs component. @Tishasoumya [#5048](https://github.com/plone/volto/issues/5048) +- Storybook Actions component test. @Tishasoumya-02 [#5049](https://github.com/plone/volto/issues/5049) +- Refactor Display from class to functional component. @Tishasoumya-02 [#5066](https://github.com/plone/volto/issues/5066) +- Refactor `ReferenceWidget` from class-based to functional component. @Tishasoumya [#5093](https://github.com/plone/volto/issues/5093) +- Refactor the table of contents block component from a class component to a functional component. @Prince0906 [#6167](https://github.com/plone/volto/issues/6167) +- Improved URL regex to allow non-public or intranet URLs, such as `https://intranet/` or `file://server/share`. @mamico [#6186](https://github.com/plone/volto/issues/6186) +- Refactor the `DatetimeWidget` component from a class component to a functional component. @Raman-Luhach [#6213](https://github.com/plone/volto/issues/6213) +- The schema for the `ContentsPropertiesModal` can be enhanced using the `contentPropertiesSchemaEnhancer` setting. + Also, the properties form is now prepopulated with values if all selected items share the same value. @davisagli [#6248](https://github.com/plone/volto/issues/6248) +- Pass the `user`, `navRoot` and `contentType` objects to the `restricted` function of the block settings. @wesleybl [#6264](https://github.com/plone/volto/issues/6264) + +### Bugfix + +- Fix search block showing no option select in sort on property @iRohitSingh [#5055](https://github.com/plone/volto/issues/5055) +- Displays validation error messages on control panel forms. @wesleybl [#5274](https://github.com/plone/volto/issues/5274) +- Fix `initialValue` block setting. @wesleybl [#5971](https://github.com/plone/volto/issues/5971) +- When user changes location, set the `userSession.token` value based on cookie. This fixes the login status not being properly determined by the application. @tiberiu-ichim [#6071](https://github.com/plone/volto/issues/6071) +- Fix `Teaser` block image override option to render external images and internal images pointing to image scales. @Tishasoumya-02 [#6147](https://github.com/plone/volto/issues/6147) +- Add Cypress test for search block sort on property. @iRohitSingh [#6226](https://github.com/plone/volto/issues/6226) +- Remove unused i18n message for SortOn component. @davisagli [#6230](https://github.com/plone/volto/issues/6230) +- Return a 302 response for server-side rendering of the Link view for unauthenticated users. @davisagli [#6235](https://github.com/plone/volto/issues/6235) +- Fix loading of .cjs in webpack. @davisagli [#6237](https://github.com/plone/volto/issues/6237) +- fixed change of form.ui.hovered when editing blocks, because if you have a FormBlock component inside another one, + onMouseOver fires for all stacked blocks and you cannot use the nested form. @giuliaghisini [#6240](https://github.com/plone/volto/issues/6240) +- Changed imports from relative to absolute to avoid type errors in add-on tests. @wesleybl [#6244](https://github.com/plone/volto/issues/6244) +- In the URL Management control panel, allow external URLs as targets. @davisagli [#6247](https://github.com/plone/volto/issues/6247) +- Disable save button when loading POST query @sabrina-bongiovanni [#6252](https://github.com/plone/volto/issues/6252) +- Fix `TypeError: values[0] is undefined` in Contents properties modal. @davisagli [#6258](https://github.com/plone/volto/issues/6258) +- Fix error in `SortOn` component when no sort is selected. @davisagli [#6273](https://github.com/plone/volto/issues/6273) +- Place actions storybook in correct path. @Tishasoumya-02 [#6275](https://github.com/plone/volto/issues/6275) +- Remove `Generate tabs for items other than folders` field from navigation control panel. @wesleybl [#6278](https://github.com/plone/volto/issues/6278) +- Fix error rendering empty grid blocks. @MAX-786 [#6279](https://github.com/plone/volto/issues/6279) +- Fixed instant error on click on an item of the "Order" tab @sneridagh [#6284](https://github.com/plone/volto/issues/6284) + +### Internal + +- Refactored the `SelectWidget` component to a functional component. @lorstenoplo [#5570](https://github.com/plone/volto/issues/5570) +- Allow setting the language for `make backend-docker-start`. Default is `en`. Added usage documentation in Contributing > Develop Volto core, and reorganized it. Cleaned up Configuration > Multilingual. @stevepiercy [#6231](https://github.com/plone/volto/issues/6231) +- Revert rename of `.gitkeep`. @stevepiercy [#6232](https://github.com/plone/volto/issues/6232) +- Upgrade Cypress to 13.13.2. @wesleybl [#6241](https://github.com/plone/volto/issues/6241) +- Complete upgrade Cypress to 13.13.2. Bump actions/upload-artifact@v1 to v4. @stevepiercy [#6242](https://github.com/plone/volto/issues/6242) +- Add `make i18n` command. @Faakhir30 [#6274](https://github.com/plone/volto/issues/6274) +- Update to Plone 6.0.13 @sneridagh [#6285](https://github.com/plone/volto/issues/6285) + +### Documentation + +- Fix redirect of link in documentation to testing Redux store blog post. @stevepiercy [#6239](https://github.com/plone/volto/issues/6239) +- Fix redirect to Docker documentation. @stevepiercy [#6262](https://github.com/plone/volto/issues/6262) +- Added upgrade guide notice about CookiePlone as the recommended way for generating projects and add-on boilerplate @sneridagh [#6286](https://github.com/plone/volto/issues/6286) + ## 18.0.0-alpha.42 (2024-07-30) ### Breaking diff --git a/packages/volto/CHANGELOG.md b/packages/volto/CHANGELOG.md index 91db671d96..8a11d4dcff 100644 --- a/packages/volto/CHANGELOG.md +++ b/packages/volto/CHANGELOG.md @@ -17,6 +17,78 @@ myst: +## 18.0.0-alpha.43 (2024-09-13) + +### Breaking + +- Move `Tags` component to the slot `belowContent`. @wesleybl [#6269](https://github.com/plone/volto/issues/6269) + +### Feature + +- Refactor AlbumView from class to functional component. @Tishasoumya-02 [#4077](https://github.com/plone/volto/issues/4077) +- Add setting `unwantedControlPanelsFields` and use it in the function `filterControlPanelsSchema`. @wesleybl [#4819](https://github.com/plone/volto/issues/4819) +- Refactor the `Register` component from class-based to functional. @Tishasoumya-02 [#4861](https://github.com/plone/volto/issues/4861) +- Refactor Toolbar/More component from class to functional component. @Tishasoumya-02 [#4955](https://github.com/plone/volto/issues/4955) +- Refactor Blocks/LeadImage/Edit component from class to functional component. @Tishasoumya-02 [#4959](https://github.com/plone/volto/issues/4959) +- Refactor Blocks/Video/Edit component from class to functional component. @Tishasoumya-02 [#4960](https://github.com/plone/volto/issues/4960) +- Refactor ControlPanel/Users/Aliases component , replacing class component lifecycle methods with functional hooks. @Tishasoumya-02 [#4985](https://github.com/plone/volto/issues/4985) +- Refactor Controlpanel databaseInformation from class component to functional component. @Tishasoumya-02 [#4986](https://github.com/plone/volto/issues/4986) +- Refactor ControlPanels/Groups RenderGroups from class components to functional component. @Tishasoumya-02 [#4993](https://github.com/plone/volto/issues/4993) +- Refactor AddonsControlpanel from class to functional components. @Tishasoumya [#4995](https://github.com/plone/volto/issues/4995) +- Refactor Preference/Change Password from class to functional component. @Tishasoumya-02 [#5044](https://github.com/plone/volto/issues/5044) +- Refactor Preference/PersonalPreferences from class to functional component. @Tishasoumya-02 [#5045](https://github.com/plone/volto/issues/5045) +- Refactor Preference/PersonalInformation from Class to Functional component. @Tishasoumya-02 [#5046](https://github.com/plone/volto/issues/5046) +- Refactor Contents/ContentsUploadModal & Storybook-@Tishasoumya-02 [#5047](https://github.com/plone/volto/issues/5047) +- Storybook test for ContentBreadcrumbs component. @Tishasoumya [#5048](https://github.com/plone/volto/issues/5048) +- Storybook Actions component test. @Tishasoumya-02 [#5049](https://github.com/plone/volto/issues/5049) +- Refactor Display from class to functional component. @Tishasoumya-02 [#5066](https://github.com/plone/volto/issues/5066) +- Refactor `ReferenceWidget` from class-based to functional component. @Tishasoumya [#5093](https://github.com/plone/volto/issues/5093) +- Refactor the table of contents block component from a class component to a functional component. @Prince0906 [#6167](https://github.com/plone/volto/issues/6167) +- Improved URL regex to allow non-public or intranet URLs, such as `https://intranet/` or `file://server/share`. @mamico [#6186](https://github.com/plone/volto/issues/6186) +- Refactor the `DatetimeWidget` component from a class component to a functional component. @Raman-Luhach [#6213](https://github.com/plone/volto/issues/6213) +- The schema for the `ContentsPropertiesModal` can be enhanced using the `contentPropertiesSchemaEnhancer` setting. + Also, the properties form is now prepopulated with values if all selected items share the same value. @davisagli [#6248](https://github.com/plone/volto/issues/6248) +- Pass the `user`, `navRoot` and `contentType` objects to the `restricted` function of the block settings. @wesleybl [#6264](https://github.com/plone/volto/issues/6264) + +### Bugfix + +- Fix search block showing no option select in sort on property @iRohitSingh [#5055](https://github.com/plone/volto/issues/5055) +- Displays validation error messages on control panel forms. @wesleybl [#5274](https://github.com/plone/volto/issues/5274) +- Fix `initialValue` block setting. @wesleybl [#5971](https://github.com/plone/volto/issues/5971) +- When user changes location, set the `userSession.token` value based on cookie. This fixes the login status not being properly determined by the application. @tiberiu-ichim [#6071](https://github.com/plone/volto/issues/6071) +- Fix `Teaser` block image override option to render external images and internal images pointing to image scales. @Tishasoumya-02 [#6147](https://github.com/plone/volto/issues/6147) +- Add Cypress test for search block sort on property. @iRohitSingh [#6226](https://github.com/plone/volto/issues/6226) +- Remove unused i18n message for SortOn component. @davisagli [#6230](https://github.com/plone/volto/issues/6230) +- Return a 302 response for server-side rendering of the Link view for unauthenticated users. @davisagli [#6235](https://github.com/plone/volto/issues/6235) +- Fix loading of .cjs in webpack. @davisagli [#6237](https://github.com/plone/volto/issues/6237) +- fixed change of form.ui.hovered when editing blocks, because if you have a FormBlock component inside another one, + onMouseOver fires for all stacked blocks and you cannot use the nested form. @giuliaghisini [#6240](https://github.com/plone/volto/issues/6240) +- Changed imports from relative to absolute to avoid type errors in add-on tests. @wesleybl [#6244](https://github.com/plone/volto/issues/6244) +- In the URL Management control panel, allow external URLs as targets. @davisagli [#6247](https://github.com/plone/volto/issues/6247) +- Disable save button when loading POST query @sabrina-bongiovanni [#6252](https://github.com/plone/volto/issues/6252) +- Fix `TypeError: values[0] is undefined` in Contents properties modal. @davisagli [#6258](https://github.com/plone/volto/issues/6258) +- Fix error in `SortOn` component when no sort is selected. @davisagli [#6273](https://github.com/plone/volto/issues/6273) +- Place actions storybook in correct path. @Tishasoumya-02 [#6275](https://github.com/plone/volto/issues/6275) +- Remove `Generate tabs for items other than folders` field from navigation control panel. @wesleybl [#6278](https://github.com/plone/volto/issues/6278) +- Fix error rendering empty grid blocks. @MAX-786 [#6279](https://github.com/plone/volto/issues/6279) +- Fixed instant error on click on an item of the "Order" tab @sneridagh [#6284](https://github.com/plone/volto/issues/6284) + +### Internal + +- Refactored the `SelectWidget` component to a functional component. @lorstenoplo [#5570](https://github.com/plone/volto/issues/5570) +- Allow setting the language for `make backend-docker-start`. Default is `en`. Added usage documentation in Contributing > Develop Volto core, and reorganized it. Cleaned up Configuration > Multilingual. @stevepiercy [#6231](https://github.com/plone/volto/issues/6231) +- Revert rename of `.gitkeep`. @stevepiercy [#6232](https://github.com/plone/volto/issues/6232) +- Upgrade Cypress to 13.13.2. @wesleybl [#6241](https://github.com/plone/volto/issues/6241) +- Complete upgrade Cypress to 13.13.2. Bump actions/upload-artifact@v1 to v4. @stevepiercy [#6242](https://github.com/plone/volto/issues/6242) +- Add `make i18n` command. @Faakhir30 [#6274](https://github.com/plone/volto/issues/6274) +- Update to Plone 6.0.13 @sneridagh [#6285](https://github.com/plone/volto/issues/6285) + +### Documentation + +- Fix redirect of link in documentation to testing Redux store blog post. @stevepiercy [#6239](https://github.com/plone/volto/issues/6239) +- Fix redirect to Docker documentation. @stevepiercy [#6262](https://github.com/plone/volto/issues/6262) +- Added upgrade guide notice about CookiePlone as the recommended way for generating projects and add-on boilerplate @sneridagh [#6286](https://github.com/plone/volto/issues/6286) + ## 18.0.0-alpha.42 (2024-07-30) ### Breaking diff --git a/packages/volto/news/4077.feature b/packages/volto/news/4077.feature deleted file mode 100644 index 062a72de76..0000000000 --- a/packages/volto/news/4077.feature +++ /dev/null @@ -1 +0,0 @@ -Refactor AlbumView from class to functional component. @Tishasoumya-02 \ No newline at end of file diff --git a/packages/volto/news/4819.feature b/packages/volto/news/4819.feature deleted file mode 100644 index fe12773f69..0000000000 --- a/packages/volto/news/4819.feature +++ /dev/null @@ -1 +0,0 @@ -Add setting `unwantedControlPanelsFields` and use it in the function `filterControlPanelsSchema`. @wesleybl diff --git a/packages/volto/news/4861.feature b/packages/volto/news/4861.feature deleted file mode 100644 index c5521a45f1..0000000000 --- a/packages/volto/news/4861.feature +++ /dev/null @@ -1 +0,0 @@ -Refactor the `Register` component from class-based to functional. @Tishasoumya-02 diff --git a/packages/volto/news/4955.feature b/packages/volto/news/4955.feature deleted file mode 100644 index 4884c96572..0000000000 --- a/packages/volto/news/4955.feature +++ /dev/null @@ -1 +0,0 @@ -Refactor Toolbar/More component from class to functional component. @Tishasoumya-02 \ No newline at end of file diff --git a/packages/volto/news/4959.feature b/packages/volto/news/4959.feature deleted file mode 100644 index 81e63b0f64..0000000000 --- a/packages/volto/news/4959.feature +++ /dev/null @@ -1 +0,0 @@ -Refactor Blocks/LeadImage/Edit component from class to functional component. @Tishasoumya-02 \ No newline at end of file diff --git a/packages/volto/news/4960.feature b/packages/volto/news/4960.feature deleted file mode 100644 index 6b28eeee61..0000000000 --- a/packages/volto/news/4960.feature +++ /dev/null @@ -1 +0,0 @@ -Refactor Blocks/Video/Edit component from class to functional component. @Tishasoumya-02 \ No newline at end of file diff --git a/packages/volto/news/4985.feature b/packages/volto/news/4985.feature deleted file mode 100644 index 1ba74856d9..0000000000 --- a/packages/volto/news/4985.feature +++ /dev/null @@ -1 +0,0 @@ -Refactor ControlPanel/Users/Aliases component , replacing class component lifecycle methods with functional hooks. @Tishasoumya-02 \ No newline at end of file diff --git a/packages/volto/news/4986.feature b/packages/volto/news/4986.feature deleted file mode 100644 index caaac5aa19..0000000000 --- a/packages/volto/news/4986.feature +++ /dev/null @@ -1 +0,0 @@ -Refactor Controlpanel databaseInformation from class component to functional component. @Tishasoumya-02 \ No newline at end of file diff --git a/packages/volto/news/4993.feature b/packages/volto/news/4993.feature deleted file mode 100644 index f5f831e506..0000000000 --- a/packages/volto/news/4993.feature +++ /dev/null @@ -1 +0,0 @@ -Refactor ControlPanels/Groups RenderGroups from class components to functional component. @Tishasoumya-02 \ No newline at end of file diff --git a/packages/volto/news/4995.feature b/packages/volto/news/4995.feature deleted file mode 100644 index 9e38ddfcec..0000000000 --- a/packages/volto/news/4995.feature +++ /dev/null @@ -1 +0,0 @@ -Refactor AddonsControlpanel from class to functional components. @Tishasoumya \ No newline at end of file diff --git a/packages/volto/news/5044.feature b/packages/volto/news/5044.feature deleted file mode 100644 index 60833498c6..0000000000 --- a/packages/volto/news/5044.feature +++ /dev/null @@ -1 +0,0 @@ -Refactor Preference/Change Password from class to functional component. @Tishasoumya-02 diff --git a/packages/volto/news/5045.feature b/packages/volto/news/5045.feature deleted file mode 100644 index b5385619ac..0000000000 --- a/packages/volto/news/5045.feature +++ /dev/null @@ -1 +0,0 @@ -Refactor Preference/PersonalPreferences from class to functional component. @Tishasoumya-02 diff --git a/packages/volto/news/5046.feature b/packages/volto/news/5046.feature deleted file mode 100644 index acf69da56f..0000000000 --- a/packages/volto/news/5046.feature +++ /dev/null @@ -1 +0,0 @@ -Refactor Preference/PersonalInformation from Class to Functional component. @Tishasoumya-02 \ No newline at end of file diff --git a/packages/volto/news/5047.feature b/packages/volto/news/5047.feature deleted file mode 100644 index 0e0d81f8ff..0000000000 --- a/packages/volto/news/5047.feature +++ /dev/null @@ -1 +0,0 @@ -Refactor Contents/ContentsUploadModal & Storybook-@Tishasoumya-02 \ No newline at end of file diff --git a/packages/volto/news/5048.feature b/packages/volto/news/5048.feature deleted file mode 100644 index 756b8f5891..0000000000 --- a/packages/volto/news/5048.feature +++ /dev/null @@ -1 +0,0 @@ -Storybook test for ContentBreadcrumbs component. @Tishasoumya \ No newline at end of file diff --git a/packages/volto/news/5049.feature b/packages/volto/news/5049.feature deleted file mode 100644 index 8dc75b2192..0000000000 --- a/packages/volto/news/5049.feature +++ /dev/null @@ -1 +0,0 @@ -Storybook Actions component test. @Tishasoumya-02 \ No newline at end of file diff --git a/packages/volto/news/5055.bugfix b/packages/volto/news/5055.bugfix deleted file mode 100644 index d089f7d0b4..0000000000 --- a/packages/volto/news/5055.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fix search block showing no option select in sort on property @iRohitSingh \ No newline at end of file diff --git a/packages/volto/news/5066.feature b/packages/volto/news/5066.feature deleted file mode 100644 index 347026cf08..0000000000 --- a/packages/volto/news/5066.feature +++ /dev/null @@ -1 +0,0 @@ -Refactor Display from class to functional component. @Tishasoumya-02 \ No newline at end of file diff --git a/packages/volto/news/5093.feature b/packages/volto/news/5093.feature deleted file mode 100644 index cb0a0ab525..0000000000 --- a/packages/volto/news/5093.feature +++ /dev/null @@ -1 +0,0 @@ -Refactor `ReferenceWidget` from class-based to functional component. @Tishasoumya \ No newline at end of file diff --git a/packages/volto/news/5274.bugfix b/packages/volto/news/5274.bugfix deleted file mode 100644 index da9be01184..0000000000 --- a/packages/volto/news/5274.bugfix +++ /dev/null @@ -1 +0,0 @@ -Displays validation error messages on control panel forms. @wesleybl diff --git a/packages/volto/news/5570.internal b/packages/volto/news/5570.internal deleted file mode 100644 index 7b26c18db0..0000000000 --- a/packages/volto/news/5570.internal +++ /dev/null @@ -1 +0,0 @@ -Refactored the `SelectWidget` component to a functional component. @lorstenoplo \ No newline at end of file diff --git a/packages/volto/news/5971.bugfix b/packages/volto/news/5971.bugfix deleted file mode 100644 index 71d9814b79..0000000000 --- a/packages/volto/news/5971.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fix `initialValue` block setting. @wesleybl diff --git a/packages/volto/news/6071.bugfix b/packages/volto/news/6071.bugfix deleted file mode 100644 index a6ac978c83..0000000000 --- a/packages/volto/news/6071.bugfix +++ /dev/null @@ -1 +0,0 @@ -When user changes location, set the `userSession.token` value based on cookie. This fixes the login status not being properly determined by the application. @tiberiu-ichim diff --git a/packages/volto/news/6147.bugfix b/packages/volto/news/6147.bugfix deleted file mode 100644 index f8636db7f6..0000000000 --- a/packages/volto/news/6147.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fix `Teaser` block image override option to render external images and internal images pointing to image scales. @Tishasoumya-02 diff --git a/packages/volto/news/6167.feature b/packages/volto/news/6167.feature deleted file mode 100644 index bfa7da310f..0000000000 --- a/packages/volto/news/6167.feature +++ /dev/null @@ -1 +0,0 @@ -Refactor the table of contents block component from a class component to a functional component. @Prince0906 \ No newline at end of file diff --git a/packages/volto/news/6186.feature b/packages/volto/news/6186.feature deleted file mode 100644 index bd02ea020f..0000000000 --- a/packages/volto/news/6186.feature +++ /dev/null @@ -1 +0,0 @@ -Improved URL regex to allow non-public or intranet URLs, such as `https://intranet/` or `file://server/share`. @mamico diff --git a/packages/volto/news/6213.feature b/packages/volto/news/6213.feature deleted file mode 100644 index 76fbceecdc..0000000000 --- a/packages/volto/news/6213.feature +++ /dev/null @@ -1,2 +0,0 @@ - -Refactor the `DatetimeWidget` component from a class component to a functional component. @Raman-Luhach diff --git a/packages/volto/news/6226.bugfix b/packages/volto/news/6226.bugfix deleted file mode 100644 index a571bd1d1e..0000000000 --- a/packages/volto/news/6226.bugfix +++ /dev/null @@ -1 +0,0 @@ -Add Cypress test for search block sort on property. @iRohitSingh diff --git a/packages/volto/news/6230.bugfix b/packages/volto/news/6230.bugfix deleted file mode 100644 index 7e8bc151cb..0000000000 --- a/packages/volto/news/6230.bugfix +++ /dev/null @@ -1 +0,0 @@ -Remove unused i18n message for SortOn component. @davisagli diff --git a/packages/volto/news/6231.internal b/packages/volto/news/6231.internal deleted file mode 100644 index 99beab7a0c..0000000000 --- a/packages/volto/news/6231.internal +++ /dev/null @@ -1 +0,0 @@ -Allow setting the language for `make backend-docker-start`. Default is `en`. Added usage documentation in Contributing > Develop Volto core, and reorganized it. Cleaned up Configuration > Multilingual. @stevepiercy diff --git a/packages/volto/news/6232.internal b/packages/volto/news/6232.internal deleted file mode 100644 index d9d32916c7..0000000000 --- a/packages/volto/news/6232.internal +++ /dev/null @@ -1 +0,0 @@ -Revert rename of `.gitkeep`. @stevepiercy diff --git a/packages/volto/news/6235.bugfix b/packages/volto/news/6235.bugfix deleted file mode 100644 index 8967eedb2a..0000000000 --- a/packages/volto/news/6235.bugfix +++ /dev/null @@ -1 +0,0 @@ -Return a 302 response for server-side rendering of the Link view for unauthenticated users. @davisagli diff --git a/packages/volto/news/6237.bugfix b/packages/volto/news/6237.bugfix deleted file mode 100644 index 7bb075eac5..0000000000 --- a/packages/volto/news/6237.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fix loading of .cjs in webpack. @davisagli diff --git a/packages/volto/news/6239.documentation b/packages/volto/news/6239.documentation deleted file mode 100644 index 84013472bd..0000000000 --- a/packages/volto/news/6239.documentation +++ /dev/null @@ -1 +0,0 @@ -Fix redirect of link in documentation to testing Redux store blog post. @stevepiercy diff --git a/packages/volto/news/6240.bugfix b/packages/volto/news/6240.bugfix deleted file mode 100644 index f69fbc8a6c..0000000000 --- a/packages/volto/news/6240.bugfix +++ /dev/null @@ -1,2 +0,0 @@ -fixed change of form.ui.hovered when editing blocks, because if you have a FormBlock component inside another one, -onMouseOver fires for all stacked blocks and you cannot use the nested form. @giuliaghisini diff --git a/packages/volto/news/6241.internal b/packages/volto/news/6241.internal deleted file mode 100644 index d157a14bc8..0000000000 --- a/packages/volto/news/6241.internal +++ /dev/null @@ -1 +0,0 @@ -Upgrade Cypress to 13.13.2. @wesleybl diff --git a/packages/volto/news/6242.internal b/packages/volto/news/6242.internal deleted file mode 100644 index f362b022e0..0000000000 --- a/packages/volto/news/6242.internal +++ /dev/null @@ -1 +0,0 @@ -Complete upgrade Cypress to 13.13.2. Bump actions/upload-artifact@v1 to v4. @stevepiercy diff --git a/packages/volto/news/6244.bugfix b/packages/volto/news/6244.bugfix deleted file mode 100644 index 4b9b29e635..0000000000 --- a/packages/volto/news/6244.bugfix +++ /dev/null @@ -1 +0,0 @@ -Changed imports from relative to absolute to avoid type errors in add-on tests. @wesleybl diff --git a/packages/volto/news/6247.bugfix b/packages/volto/news/6247.bugfix deleted file mode 100644 index c74a667f3b..0000000000 --- a/packages/volto/news/6247.bugfix +++ /dev/null @@ -1 +0,0 @@ -In the URL Management control panel, allow external URLs as targets. @davisagli diff --git a/packages/volto/news/6248.feature b/packages/volto/news/6248.feature deleted file mode 100644 index 8f809c135e..0000000000 --- a/packages/volto/news/6248.feature +++ /dev/null @@ -1,2 +0,0 @@ -The schema for the `ContentsPropertiesModal` can be enhanced using the `contentPropertiesSchemaEnhancer` setting. -Also, the properties form is now prepopulated with values if all selected items share the same value. @davisagli diff --git a/packages/volto/news/6252.bugfix b/packages/volto/news/6252.bugfix deleted file mode 100644 index ac84782906..0000000000 --- a/packages/volto/news/6252.bugfix +++ /dev/null @@ -1 +0,0 @@ -Disable save button when loading POST query @sabrina-bongiovanni diff --git a/packages/volto/news/6258.bugfix b/packages/volto/news/6258.bugfix deleted file mode 100644 index 44a9fe4b9a..0000000000 --- a/packages/volto/news/6258.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fix `TypeError: values[0] is undefined` in Contents properties modal. @davisagli diff --git a/packages/volto/news/6262.documentation b/packages/volto/news/6262.documentation deleted file mode 100644 index 0018dd38ef..0000000000 --- a/packages/volto/news/6262.documentation +++ /dev/null @@ -1 +0,0 @@ -Fix redirect to Docker documentation. @stevepiercy diff --git a/packages/volto/news/6264.feature b/packages/volto/news/6264.feature deleted file mode 100644 index e8a31aaf20..0000000000 --- a/packages/volto/news/6264.feature +++ /dev/null @@ -1 +0,0 @@ -Pass the `user`, `navRoot` and `contentType` objects to the `restricted` function of the block settings. @wesleybl diff --git a/packages/volto/news/6269.breaking b/packages/volto/news/6269.breaking deleted file mode 100644 index a361dd27fc..0000000000 --- a/packages/volto/news/6269.breaking +++ /dev/null @@ -1 +0,0 @@ -Move `Tags` component to the slot `belowContent`. @wesleybl diff --git a/packages/volto/news/6273.bugfix b/packages/volto/news/6273.bugfix deleted file mode 100644 index 6caa1e8e5e..0000000000 --- a/packages/volto/news/6273.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fix error in `SortOn` component when no sort is selected. @davisagli diff --git a/packages/volto/news/6274.internal b/packages/volto/news/6274.internal deleted file mode 100644 index d56fc85f27..0000000000 --- a/packages/volto/news/6274.internal +++ /dev/null @@ -1 +0,0 @@ -Add `make i18n` command. @Faakhir30 diff --git a/packages/volto/news/6275.bugfix b/packages/volto/news/6275.bugfix deleted file mode 100644 index 47f0ea53ba..0000000000 --- a/packages/volto/news/6275.bugfix +++ /dev/null @@ -1 +0,0 @@ -Place actions storybook in correct path. @Tishasoumya-02 \ No newline at end of file diff --git a/packages/volto/news/6278.bugfix b/packages/volto/news/6278.bugfix deleted file mode 100644 index df2d41d358..0000000000 --- a/packages/volto/news/6278.bugfix +++ /dev/null @@ -1 +0,0 @@ -Remove `Generate tabs for items other than folders` field from navigation control panel. @wesleybl diff --git a/packages/volto/news/6279.bugfix b/packages/volto/news/6279.bugfix deleted file mode 100644 index 598e7ba4e3..0000000000 --- a/packages/volto/news/6279.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fix error rendering empty grid blocks. @MAX-786 \ No newline at end of file diff --git a/packages/volto/news/6284.bugfix b/packages/volto/news/6284.bugfix deleted file mode 100644 index bb9b4c0b7b..0000000000 --- a/packages/volto/news/6284.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fixed instant error on click on an item of the "Order" tab @sneridagh diff --git a/packages/volto/news/6285.internal b/packages/volto/news/6285.internal deleted file mode 100644 index f402fb0975..0000000000 --- a/packages/volto/news/6285.internal +++ /dev/null @@ -1 +0,0 @@ -Update to Plone 6.0.13 @sneridagh diff --git a/packages/volto/news/6286.documentation b/packages/volto/news/6286.documentation deleted file mode 100644 index bc8643c1dd..0000000000 --- a/packages/volto/news/6286.documentation +++ /dev/null @@ -1 +0,0 @@ -Added upgrade guide notice about CookiePlone as the recommended way for generating projects and add-on boilerplate @sneridagh diff --git a/packages/volto/package.json b/packages/volto/package.json index 03ee312ad8..9b31c08fde 100644 --- a/packages/volto/package.json +++ b/packages/volto/package.json @@ -9,7 +9,7 @@ } ], "license": "MIT", - "version": "18.0.0-alpha.42", + "version": "18.0.0-alpha.43", "repository": { "type": "git", "url": "git@github.com:plone/volto.git" diff --git a/packages/volto/types/components/manage/Actions/Actions.stories.d.ts b/packages/volto/types/components/manage/Actions/Actions.stories.d.ts new file mode 100644 index 0000000000..d10a5d29a4 --- /dev/null +++ b/packages/volto/types/components/manage/Actions/Actions.stories.d.ts @@ -0,0 +1,8 @@ +export const Actions: any; +declare namespace _default { + export let title: string; + export { Actions as component }; + export let decorators: ((Story: any) => import("react/jsx-runtime").JSX.Element)[]; + export let argTypes: {}; +} +export default _default; diff --git a/packages/volto/types/components/manage/Blocks/LeadImage/Edit.d.ts b/packages/volto/types/components/manage/Blocks/LeadImage/Edit.d.ts index c4a5a9776a..8b15800766 100644 --- a/packages/volto/types/components/manage/Blocks/LeadImage/Edit.d.ts +++ b/packages/volto/types/components/manage/Blocks/LeadImage/Edit.d.ts @@ -1,5 +1,14 @@ -declare const _default: React.FC> & { - WrappedComponent: React.ComponentType; -}; -export default _default; -import React from 'react'; +export default Edit; +declare function Edit(props: any): import("react/jsx-runtime").JSX.Element; +declare namespace Edit { + namespace propTypes { + let properties: any; + let selected: any; + let block: any; + let index: any; + let data: any; + let pathname: any; + let onChangeBlock: any; + let openObjectBrowser: any; + } +} diff --git a/packages/volto/types/components/manage/Blocks/Search/widgets/SelectMetadataField.d.ts b/packages/volto/types/components/manage/Blocks/Search/widgets/SelectMetadataField.d.ts index 24d035eb05..007d6061c3 100644 --- a/packages/volto/types/components/manage/Blocks/Search/widgets/SelectMetadataField.d.ts +++ b/packages/volto/types/components/manage/Blocks/Search/widgets/SelectMetadataField.d.ts @@ -1,10 +1,5 @@ declare const _default: { (props: any): import("react/jsx-runtime").JSX.Element; - /** - * Property types. - * @property {Object} propTypes Property types. - * @static - */ displayName: string; }; export default _default; diff --git a/packages/volto/types/components/manage/Blocks/ToC/Edit.d.ts b/packages/volto/types/components/manage/Blocks/ToC/Edit.d.ts index a8c57888ad..2b00584490 100644 --- a/packages/volto/types/components/manage/Blocks/ToC/Edit.d.ts +++ b/packages/volto/types/components/manage/Blocks/ToC/Edit.d.ts @@ -1,7 +1,2 @@ export default Edit; -declare class Edit extends React.Component { - constructor(props: any); - constructor(props: any, context: any); - render(): import("react/jsx-runtime").JSX.Element; -} -import React from 'react'; +declare function Edit(props: any): import("react/jsx-runtime").JSX.Element; diff --git a/packages/volto/types/components/manage/Blocks/Video/Edit.d.ts b/packages/volto/types/components/manage/Blocks/Video/Edit.d.ts index 5298df7f0f..c17a3f4a2e 100644 --- a/packages/volto/types/components/manage/Blocks/Video/Edit.d.ts +++ b/packages/volto/types/components/manage/Blocks/Video/Edit.d.ts @@ -1,2 +1,2 @@ -declare const _default: any; +declare const _default: (props: any) => import("react/jsx-runtime").JSX.Element; export default _default; diff --git a/packages/volto/types/components/manage/Blocks/Video/Edit.stories.d.ts b/packages/volto/types/components/manage/Blocks/Video/Edit.stories.d.ts new file mode 100644 index 0000000000..25e7b03027 --- /dev/null +++ b/packages/volto/types/components/manage/Blocks/Video/Edit.stories.d.ts @@ -0,0 +1,8 @@ +export const Video: any; +declare namespace _default { + export let title: string; + export { Video as component }; + export let decorators: ((Story: any) => import("react/jsx-runtime").JSX.Element)[]; + export let argTypes: {}; +} +export default _default; diff --git a/packages/volto/types/components/manage/Contents/ContentsBreadcrumbs.stories.d.ts b/packages/volto/types/components/manage/Contents/ContentsBreadcrumbs.stories.d.ts new file mode 100644 index 0000000000..ecead73652 --- /dev/null +++ b/packages/volto/types/components/manage/Contents/ContentsBreadcrumbs.stories.d.ts @@ -0,0 +1,8 @@ +export const ContentBreadcrumbs: any; +declare namespace _default { + export let title: string; + export { ContentBreadcrumbs as component }; + export let decorators: ((Story: any) => import("react/jsx-runtime").JSX.Element)[]; + export let argTypes: {}; +} +export default _default; diff --git a/packages/volto/types/components/manage/Contents/ContentsUploadModal.d.ts b/packages/volto/types/components/manage/Contents/ContentsUploadModal.d.ts index 5298df7f0f..30685e62c4 100644 --- a/packages/volto/types/components/manage/Contents/ContentsUploadModal.d.ts +++ b/packages/volto/types/components/manage/Contents/ContentsUploadModal.d.ts @@ -1,2 +1,14 @@ -declare const _default: any; -export default _default; +export default ContentsUploadModal; +declare function ContentsUploadModal(props: any): import("react/jsx-runtime").JSX.Element; +declare namespace ContentsUploadModal { + namespace propTypes { + let pathname: any; + let open: any; + let onOk: any; + let onCancel: any; + let multiple: any; + let minSize: any; + let maxSize: any; + let accept: any; + } +} diff --git a/packages/volto/types/components/manage/Contents/ContentsUploadModal.stories.d.ts b/packages/volto/types/components/manage/Contents/ContentsUploadModal.stories.d.ts new file mode 100644 index 0000000000..7583bd54e5 --- /dev/null +++ b/packages/volto/types/components/manage/Contents/ContentsUploadModal.stories.d.ts @@ -0,0 +1,8 @@ +export const ContentUploadModal: any; +declare namespace _default { + export let title: string; + export { ContentUploadModal as component }; + export let decorators: ((Story: any) => import("react/jsx-runtime").JSX.Element)[]; + export let argTypes: {}; +} +export default _default; diff --git a/packages/volto/types/components/manage/Contents/index.d.ts b/packages/volto/types/components/manage/Contents/index.d.ts index aeec19b41e..8aa4ed627e 100644 --- a/packages/volto/types/components/manage/Contents/index.d.ts +++ b/packages/volto/types/components/manage/Contents/index.d.ts @@ -3,7 +3,7 @@ export declare const ContentsRenameModal: import("@loadable/component").Loadable export declare const ContentsBreadcrumbs: import("@loadable/component").LoadableComponent; export declare const ContentsIndexHeader: import("@loadable/component").LoadableClassComponent; export declare const ContentsItem: import("@loadable/component").LoadableClassComponent; -export declare const ContentsUploadModal: import("@loadable/component").LoadableClassComponent; +export declare const ContentsUploadModal: import("@loadable/component").LoadableComponent; export declare const ContentsPropertiesModal: import("@loadable/component").LoadableComponent; export declare const ContentsWorkflowModal: import("@loadable/component").LoadableComponent; export declare const ContentsTagsModal: import("@loadable/component").LoadableComponent; diff --git a/packages/volto/types/components/manage/Controlpanels/AddonsControlpanel.d.ts b/packages/volto/types/components/manage/Controlpanels/AddonsControlpanel.d.ts index 5298df7f0f..45e5b13f6f 100644 --- a/packages/volto/types/components/manage/Controlpanels/AddonsControlpanel.d.ts +++ b/packages/volto/types/components/manage/Controlpanels/AddonsControlpanel.d.ts @@ -1,2 +1,2 @@ -declare const _default: any; -export default _default; +export default AddonsControlpanel; +declare function AddonsControlpanel(props: any): import("react/jsx-runtime").JSX.Element; diff --git a/packages/volto/types/components/manage/Controlpanels/Aliases.d.ts b/packages/volto/types/components/manage/Controlpanels/Aliases.d.ts index 5298df7f0f..ac792068a2 100644 --- a/packages/volto/types/components/manage/Controlpanels/Aliases.d.ts +++ b/packages/volto/types/components/manage/Controlpanels/Aliases.d.ts @@ -1,2 +1,2 @@ -declare const _default: any; -export default _default; +export default Aliases; +declare function Aliases(props: any): import("react/jsx-runtime").JSX.Element; diff --git a/packages/volto/types/components/manage/Controlpanels/Aliases.stories.d.ts b/packages/volto/types/components/manage/Controlpanels/Aliases.stories.d.ts new file mode 100644 index 0000000000..c20c2498c9 --- /dev/null +++ b/packages/volto/types/components/manage/Controlpanels/Aliases.stories.d.ts @@ -0,0 +1,8 @@ +export const Aliases: any; +declare namespace _default { + export let title: string; + export { Aliases as component }; + export let decorators: ((Story: any) => import("react/jsx-runtime").JSX.Element)[]; + export let argTypes: {}; +} +export default _default; diff --git a/packages/volto/types/components/manage/Controlpanels/DatabaseInformation.d.ts b/packages/volto/types/components/manage/Controlpanels/DatabaseInformation.d.ts index 5298df7f0f..dd8dfda20b 100644 --- a/packages/volto/types/components/manage/Controlpanels/DatabaseInformation.d.ts +++ b/packages/volto/types/components/manage/Controlpanels/DatabaseInformation.d.ts @@ -1,2 +1,2 @@ -declare const _default: any; -export default _default; +export default DatabaseInformation; +declare function DatabaseInformation(): import("react/jsx-runtime").JSX.Element; diff --git a/packages/volto/types/components/manage/Controlpanels/Groups/RenderGroups.d.ts b/packages/volto/types/components/manage/Controlpanels/Groups/RenderGroups.d.ts index c4a5a9776a..49fea42a00 100644 --- a/packages/volto/types/components/manage/Controlpanels/Groups/RenderGroups.d.ts +++ b/packages/volto/types/components/manage/Controlpanels/Groups/RenderGroups.d.ts @@ -1,5 +1,10 @@ -declare const _default: React.FC> & { - WrappedComponent: React.ComponentType; -}; -export default _default; -import React from 'react'; +export default RenderGroups; +declare function RenderGroups(props: any): import("react/jsx-runtime").JSX.Element; +declare namespace RenderGroups { + namespace propTypes { + let group: any; + let roles: any; + let inheritedRole: any; + let onDelete: any; + } +} diff --git a/packages/volto/types/components/manage/Controlpanels/index.d.ts b/packages/volto/types/components/manage/Controlpanels/index.d.ts index 630f51095d..8feb23523b 100644 --- a/packages/volto/types/components/manage/Controlpanels/index.d.ts +++ b/packages/volto/types/components/manage/Controlpanels/index.d.ts @@ -9,11 +9,11 @@ export declare const UsersControlpanel: import("@loadable/component").LoadableCl export declare const RenderUsers: import("@loadable/component").LoadableClassComponent; export declare const UserGroupMembershipControlPanel: import("@loadable/component").LoadableComponent; export declare const GroupsControlpanel: import("@loadable/component").LoadableClassComponent; -export declare const RenderGroups: import("@loadable/component").LoadableComponent>; +export declare const RenderGroups: import("@loadable/component").LoadableComponent; export declare const RelationsControlpanel: import("@loadable/component").LoadableComponent; -export declare const AliasesControlpanel: import("@loadable/component").LoadableClassComponent; +export declare const AliasesControlpanel: import("@loadable/component").LoadableComponent; export declare const UndoControlpanel: import("@loadable/component").LoadableClassComponent; -export declare const AddonsControlpanel: import("@loadable/component").LoadableClassComponent; +export declare const AddonsControlpanel: import("@loadable/component").LoadableComponent; export declare const ContentType: import("@loadable/component").LoadableClassComponent; export declare const ContentTypeLayout: import("@loadable/component").LoadableClassComponent; export declare const ContentTypeSchema: import("@loadable/component").LoadableClassComponent; @@ -29,4 +29,4 @@ export declare const VersionOverview: import("@loadable/component").LoadableComp }>; export declare const UpgradeControlPanel: import("@loadable/component").LoadableClassComponent; export declare const ModerateComments: import("@loadable/component").LoadableClassComponent; -export declare const DatabaseInformation: import("@loadable/component").LoadableClassComponent; +export declare const DatabaseInformation: import("@loadable/component").LoadableComponent; diff --git a/packages/volto/types/components/manage/Display/Display.stories.d.ts b/packages/volto/types/components/manage/Display/Display.stories.d.ts new file mode 100644 index 0000000000..37780b6109 --- /dev/null +++ b/packages/volto/types/components/manage/Display/Display.stories.d.ts @@ -0,0 +1,8 @@ +export const Display: any; +declare namespace _default { + export let title: string; + export { Display as component }; + export let decorators: ((Story: any) => import("react/jsx-runtime").JSX.Element)[]; + export let argTypes: {}; +} +export default _default; diff --git a/packages/volto/types/components/manage/Preferences/ChangePassword.d.ts b/packages/volto/types/components/manage/Preferences/ChangePassword.d.ts index 5298df7f0f..9d3f83be5a 100644 --- a/packages/volto/types/components/manage/Preferences/ChangePassword.d.ts +++ b/packages/volto/types/components/manage/Preferences/ChangePassword.d.ts @@ -1,2 +1,2 @@ -declare const _default: any; -export default _default; +export default ChangePassword; +declare function ChangePassword(): import("react/jsx-runtime").JSX.Element; diff --git a/packages/volto/types/components/manage/Preferences/ChangePassword.stories.d.ts b/packages/volto/types/components/manage/Preferences/ChangePassword.stories.d.ts new file mode 100644 index 0000000000..4491427fb1 --- /dev/null +++ b/packages/volto/types/components/manage/Preferences/ChangePassword.stories.d.ts @@ -0,0 +1,8 @@ +export const ChangePassword: any; +declare namespace _default { + export let title: string; + export { ChangePassword as component }; + export let decorators: ((Story: any) => import("react/jsx-runtime").JSX.Element)[]; + export let argTypes: {}; +} +export default _default; diff --git a/packages/volto/types/components/manage/Preferences/PersonalInformation.d.ts b/packages/volto/types/components/manage/Preferences/PersonalInformation.d.ts index 5298df7f0f..316390f912 100644 --- a/packages/volto/types/components/manage/Preferences/PersonalInformation.d.ts +++ b/packages/volto/types/components/manage/Preferences/PersonalInformation.d.ts @@ -1,2 +1,7 @@ -declare const _default: any; -export default _default; +export default PersonalInformation; +declare function PersonalInformation(props: any): import("react/jsx-runtime").JSX.Element; +declare namespace PersonalInformation { + namespace propTypes { + let closeMenu: any; + } +} diff --git a/packages/volto/types/components/manage/Preferences/PersonalPreferences.d.ts b/packages/volto/types/components/manage/Preferences/PersonalPreferences.d.ts index 5298df7f0f..bfffbce82a 100644 --- a/packages/volto/types/components/manage/Preferences/PersonalPreferences.d.ts +++ b/packages/volto/types/components/manage/Preferences/PersonalPreferences.d.ts @@ -1,2 +1,6 @@ -declare const _default: any; +declare const _default: import("react").ComponentType<{ + [x: string]: any; + [x: number]: any; + [x: symbol]: any; +}>; export default _default; diff --git a/packages/volto/types/components/manage/Preferences/PersonalPreferences.stories.d.ts b/packages/volto/types/components/manage/Preferences/PersonalPreferences.stories.d.ts new file mode 100644 index 0000000000..ea462d4d80 --- /dev/null +++ b/packages/volto/types/components/manage/Preferences/PersonalPreferences.stories.d.ts @@ -0,0 +1,8 @@ +export const PersonalPreferences: any; +declare namespace _default { + export let title: string; + export { PersonalPreferences as component }; + export let decorators: ((Story: any) => import("react/jsx-runtime").JSX.Element)[]; + export let argTypes: {}; +} +export default _default; diff --git a/packages/volto/types/components/manage/Toolbar/More.d.ts b/packages/volto/types/components/manage/Toolbar/More.d.ts index 6152d8214b..4ef65634f8 100644 --- a/packages/volto/types/components/manage/Toolbar/More.d.ts +++ b/packages/volto/types/components/manage/Toolbar/More.d.ts @@ -1,5 +1,8 @@ -declare const _default: React.ForwardRefExoticComponent>, "ref"> & React.RefAttributes>>> & { - WrappedComponent: React.ComponentType>; -}; -export default _default; -import React from 'react'; +export default More; +declare function More(props: any): import("react/jsx-runtime").JSX.Element; +declare namespace More { + namespace propTypes { + let loadComponent: any; + let closeMenu: any; + } +} diff --git a/packages/volto/types/components/manage/Widgets/DatetimeWidget.d.ts b/packages/volto/types/components/manage/Widgets/DatetimeWidget.d.ts index 2d758f99e5..5298df7f0f 100644 --- a/packages/volto/types/components/manage/Widgets/DatetimeWidget.d.ts +++ b/packages/volto/types/components/manage/Widgets/DatetimeWidget.d.ts @@ -1,87 +1,2 @@ -/** - * DatetimeWidget component class - * @class DatetimeWidget - * @extends Component - * - * To use it, in schema properties, declare a field like: - * - * ```jsx - * { - * title: "Publish date", - * type: 'datetime', - * } - * ``` - */ -export class DatetimeWidgetComponent extends React.Component { - /** - * Constructor - * @method constructor - * @param {Object} props Component properties - * @constructs DatetimeWidget - */ - constructor(props: any); - moment: any; - state: { - focused: boolean; - isDefault: boolean; - }; - getInternalValue(): any; - getDateOnly(): any; - /** - * Update date storage - * @method onDateChange - * @param {Object} date updated momentjs Object for date - * @returns {undefined} - */ - onDateChange: (date: any) => undefined; - /** - * Update date storage - * @method onTimeChange - * @param {Object} time updated momentjs Object for time - * @returns {undefined} - */ - onTimeChange: (time: any) => undefined; - onResetDates: () => void; - /** - * Handle SingleDatePicker focus - * @method onFocusChange - * @param {boolean} focused component focus state. - * @returns {undefined} - */ - onFocusChange: ({ focused }: boolean) => undefined; - render(): import("react/jsx-runtime").JSX.Element; -} -export namespace DatetimeWidgetComponent { - namespace propTypes { - let id: any; - let title: any; - let description: any; - let required: any; - let error: any; - let dateOnly: any; - let noPastDates: any; - let value: any; - let onChange: any; - let wrapped: any; - let resettable: any; - } - namespace defaultProps { - let description_1: any; - export { description_1 as description }; - let required_1: boolean; - export { required_1 as required }; - let error_1: any[]; - export { error_1 as error }; - let dateOnly_1: boolean; - export { dateOnly_1 as dateOnly }; - let noPastDates_1: boolean; - export { noPastDates_1 as noPastDates }; - let value_1: any; - export { value_1 as value }; - let resettable_1: boolean; - export { resettable_1 as resettable }; - } -} declare const _default: any; export default _default; -import React from 'react'; diff --git a/packages/volto/types/components/manage/Widgets/DatetimeWidget.stories.d.ts b/packages/volto/types/components/manage/Widgets/DatetimeWidget.stories.d.ts index 4b1343e87e..3b96761e57 100644 --- a/packages/volto/types/components/manage/Widgets/DatetimeWidget.stories.d.ts +++ b/packages/volto/types/components/manage/Widgets/DatetimeWidget.stories.d.ts @@ -6,4 +6,3 @@ declare namespace _default { export let argTypes: {}; } export default _default; -import { DatetimeWidgetComponent } from './DatetimeWidget'; diff --git a/packages/volto/types/components/manage/Widgets/ReferenceWidget.d.ts b/packages/volto/types/components/manage/Widgets/ReferenceWidget.d.ts index 5298df7f0f..de68889e6d 100644 --- a/packages/volto/types/components/manage/Widgets/ReferenceWidget.d.ts +++ b/packages/volto/types/components/manage/Widgets/ReferenceWidget.d.ts @@ -1,2 +1,27 @@ -declare const _default: any; -export default _default; +export default ReferenceWidget; +declare function ReferenceWidget(props: any): import("react/jsx-runtime").JSX.Element; +declare namespace ReferenceWidget { + namespace propTypes { + let id: any; + let title: any; + let description: any; + let required: any; + let multiple: any; + let error: any; + let value: any; + let onChange: any; + let wrapped: any; + } + namespace defaultProps { + let description_1: any; + export { description_1 as description }; + let required_1: boolean; + export { required_1 as required }; + let error_1: any[]; + export { error_1 as error }; + let value_1: any; + export { value_1 as value }; + let multiple_1: boolean; + export { multiple_1 as multiple }; + } +} diff --git a/packages/volto/types/components/manage/Widgets/index.d.ts b/packages/volto/types/components/manage/Widgets/index.d.ts index df8702be76..e6b763ead7 100644 --- a/packages/volto/types/components/manage/Widgets/index.d.ts +++ b/packages/volto/types/components/manage/Widgets/index.d.ts @@ -99,7 +99,7 @@ export declare const EmailWidget: import("@loadable/component").LoadableComponen export declare const NumberWidget: import("@loadable/component").LoadableComponent>; export declare const ImageSizeWidget: import("@loadable/component").LoadableComponent>; export declare const RegistryImageWidget: import("@loadable/component").LoadableComponent>; -export declare const ReferenceWidget: import("@loadable/component").LoadableClassComponent; +export declare const ReferenceWidget: import("@loadable/component").LoadableComponent; export declare const ObjectBrowserWidget: import("@loadable/component").LoadableComponent>, "ref"> & import("react").RefAttributes>>>; export declare const ObjectWidget: import("@loadable/component").LoadableComponent<{ [x: string]: any; diff --git a/packages/volto/types/components/theme/Register/Register.d.ts b/packages/volto/types/components/theme/Register/Register.d.ts index 5298df7f0f..e527e67850 100644 --- a/packages/volto/types/components/theme/Register/Register.d.ts +++ b/packages/volto/types/components/theme/Register/Register.d.ts @@ -1,2 +1,2 @@ -declare const _default: any; -export default _default; +export default Register; +declare function Register(): import("react/jsx-runtime").JSX.Element; diff --git a/packages/volto/types/components/theme/Register/Register.stories.d.ts b/packages/volto/types/components/theme/Register/Register.stories.d.ts new file mode 100644 index 0000000000..68062de641 --- /dev/null +++ b/packages/volto/types/components/theme/Register/Register.stories.d.ts @@ -0,0 +1,9 @@ +export const Default: any; +declare namespace _default { + export let title: string; + export { RegisterComponent as component }; + export let decorators: ((Story: any) => import("react/jsx-runtime").JSX.Element)[]; + export let argTypes: {}; +} +export default _default; +import RegisterComponent from './Register'; diff --git a/packages/volto/types/components/theme/Tags/Tags.d.ts b/packages/volto/types/components/theme/Tags/Tags.d.ts index 536bfb86f2..9f2155c77f 100644 --- a/packages/volto/types/components/theme/Tags/Tags.d.ts +++ b/packages/volto/types/components/theme/Tags/Tags.d.ts @@ -1,17 +1,25 @@ export default Tags; /** - * Tags component class. + * Tags component. * @function Tags - * @param {array} tags Array of tags. - * @returns {string} Markup of the component. + * @param {Object} props Component properties. + * @param {Object} props.content Content object that may contain subjects. + * @param {Array} [props.content.subjects] Optional array of tags (subjects). + * @returns {JSX.Element|null} Markup of the component or null if no tags are available. */ -declare function Tags({ tags }: any[]): string; +declare function Tags({ content }: { + content: { + subjects?: any[]; + }; +}): JSX.Element | null; declare namespace Tags { namespace propTypes { - let tags: any; + let content: any; } namespace defaultProps { - let tags_1: any; - export { tags_1 as tags }; + export namespace content_1 { + let subjects: any[]; + } + export { content_1 as content }; } } diff --git a/packages/volto/types/components/theme/View/AlbumView.d.ts b/packages/volto/types/components/theme/View/AlbumView.d.ts index 03b217830c..ca7e94e69f 100644 --- a/packages/volto/types/components/theme/View/AlbumView.d.ts +++ b/packages/volto/types/components/theme/View/AlbumView.d.ts @@ -1,23 +1,9 @@ export default AlbumView; -/** - * Album view component class. - * @function AlbumView - * @param {Object} content Content object. - * @returns {string} Markup of the component. - */ -declare class AlbumView extends React.Component { - constructor(props: any); - state: { - openIndex: any; - }; - closeModal(): void; - nextImage(): void; - prevImage(): void; - render(): import("react/jsx-runtime").JSX.Element; -} +declare function AlbumView({ content }: { + content: any; +}): import("react/jsx-runtime").JSX.Element; declare namespace AlbumView { namespace propTypes { let content: any; } } -import React from 'react'; diff --git a/packages/volto/types/config/ControlPanels.d.ts b/packages/volto/types/config/ControlPanels.d.ts index d6b4f4b325..680475c85f 100644 --- a/packages/volto/types/config/ControlPanels.d.ts +++ b/packages/volto/types/config/ControlPanels.d.ts @@ -22,4 +22,12 @@ export const controlPanelsIcons: { relations: string; }; export function filterControlPanels(controlpanels?: any[]): any[]; +export namespace unwantedControlPanelsFields { + let language: string[]; + let search: string[]; + let site: string[]; + let editing: string[]; + let imaging: string[]; + let navigation: string[]; +} export function filterControlPanelsSchema(controlpanel: any): any; diff --git a/packages/volto/types/config/Widgets.d.ts b/packages/volto/types/config/Widgets.d.ts index 935fad5d80..07ad442ae9 100644 --- a/packages/volto/types/config/Widgets.d.ts +++ b/packages/volto/types/config/Widgets.d.ts @@ -40,7 +40,7 @@ export namespace widgetMapping { }; export let factory: { 'Relation List': import("@loadable/component").LoadableComponent>, "ref"> & import("react").RefAttributes>>>; - 'Relation Choice': import("@loadable/component").LoadableClassComponent; + 'Relation Choice': import("@loadable/component").LoadableComponent; }; export { SelectWidget as choices }; export namespace type { diff --git a/packages/volto/types/config/slots.d.ts b/packages/volto/types/config/slots.d.ts new file mode 100644 index 0000000000..059b38b8d0 --- /dev/null +++ b/packages/volto/types/config/slots.d.ts @@ -0,0 +1,21 @@ +export default slots; +declare namespace slots { + let belowContent: { + name: string; + component: { + ({ content }: { + content: { + subjects?: any[]; + }; + }): JSX.Element; + propTypes: { + content: any; + }; + defaultProps: { + content: { + subjects: any[]; + }; + }; + }; + }[]; +} diff --git a/packages/volto/types/helpers/Blocks/Blocks.d.ts b/packages/volto/types/helpers/Blocks/Blocks.d.ts index 9a323690a6..82f74f7fe3 100644 --- a/packages/volto/types/helpers/Blocks/Blocks.d.ts +++ b/packages/volto/types/helpers/Blocks/Blocks.d.ts @@ -158,6 +158,12 @@ export function findBlocks(blocks: any, types: any, result?: any[]): any[]; */ export function moveBlockEnhanced(formData: any, { source, destination }: number): any; export function getBlocks(properties: any): any[]; +export function applyBlockInitialValue({ id, value, blocksConfig, formData, }: { + id: any; + value: any; + blocksConfig: any; + formData: any; +}): any; export function styleToClassName(key: any, value: any, prefix?: string): any; export function buildStyleClassNamesFromData(obj?: {}, prefix?: string): any; export function buildStyleClassNamesExtenders({ block, content, data, classNames, }: any): any[]; diff --git a/packages/volto/types/helpers/FormValidation/FormValidation.d.ts b/packages/volto/types/helpers/FormValidation/FormValidation.d.ts index 28d094562b..80887c1ef3 100644 --- a/packages/volto/types/helpers/FormValidation/FormValidation.d.ts +++ b/packages/volto/types/helpers/FormValidation/FormValidation.d.ts @@ -2,6 +2,7 @@ export function validationMessage(isValid: boolean, criterion: string, valueToCo export function tryParseJSON(requestItem: string): any; export default FormValidation; export function validateFileUploadSize(file: File, intlFunc: Function): boolean; +export function extractInvariantErrors(erros: any[]): any[]; declare class FormValidation { /** * The first Fieldset (Tab) that has any errors diff --git a/packages/volto/types/helpers/index.d.ts b/packages/volto/types/helpers/index.d.ts index aafd2dc8dc..8c43edc466 100644 --- a/packages/volto/types/helpers/index.d.ts +++ b/packages/volto/types/helpers/index.d.ts @@ -20,10 +20,10 @@ export { ContentTypeCondition } from "./Slots"; export { getAuthToken, persistAuthToken } from "@plone/volto/helpers/AuthToken/AuthToken"; export { addAppURL, expandToBackendURL, flattenHTMLToAppURL, flattenToAppURL, stripQuerystring, toPublicURL, isInternalURL, getParentUrl, getBaseUrl, getView, isCmsUi, getId, isUrl, normalizeUrl, removeProtocol, URLUtils, flattenScales, getFieldURL } from "@plone/volto/helpers/Url/Url"; export { nestContent, getLayoutFieldname, getContentIcon, getLanguageIndependentFields } from "@plone/volto/helpers/Content/Content"; -export { addBlock, insertBlock, blockHasValue, changeBlock, deleteBlock, emptyBlocksForm, getBlocks, getBlocksFieldname, getBlocksLayoutFieldname, hasBlocksData, moveBlock, mutateBlock, nextBlockId, previousBlockId, applyBlockDefaults, applySchemaDefaults, blocksFormGenerator, buildStyleClassNamesFromData, buildStyleClassNamesExtenders, buildStyleObjectFromData, getPreviousNextBlock, findBlocks, getBlocksHierarchy, moveBlockEnhanced } from "@plone/volto/helpers/Blocks/Blocks"; +export { applyBlockInitialValue, addBlock, insertBlock, blockHasValue, changeBlock, deleteBlock, emptyBlocksForm, getBlocks, getBlocksFieldname, getBlocksLayoutFieldname, hasBlocksData, moveBlock, mutateBlock, nextBlockId, previousBlockId, applyBlockDefaults, applySchemaDefaults, blocksFormGenerator, buildStyleClassNamesFromData, buildStyleClassNamesExtenders, buildStyleObjectFromData, getPreviousNextBlock, findBlocks, getBlocksHierarchy, moveBlockEnhanced } from "@plone/volto/helpers/Blocks/Blocks"; export { getSimpleDefaultBlocks, getDefaultBlocks } from "@plone/volto/helpers/Blocks/defaultBlocks"; export { getBoolean, getVocabName, getVocabFromHint, getVocabFromField, getVocabFromItems, getFieldsVocabulary } from "@plone/volto/helpers/Vocabularies/Vocabularies"; -export { default as FormValidation, validateFileUploadSize, tryParseJSON } from "./FormValidation/FormValidation"; +export { default as FormValidation, validateFileUploadSize, tryParseJSON, extractInvariantErrors } from "./FormValidation/FormValidation"; export { difference, getColor, getInitials, safeWrapper, applyConfig, withServerErrorCode, parseDateTime, toGettextLang, normalizeLanguageName, toReactIntlLang, toLangUnderscoreRegion, toBackendLang, hasApiExpander, replaceItemOfArray, cloneDeepSchema, insertInArray, removeFromArray, arrayRange, reorderArray, isInteractiveElement, slugify, normalizeString } from "@plone/volto/helpers/Utils/Utils"; export { withBlockSchemaEnhancer, withVariationSchemaEnhancer, withBlockExtensions, applySchemaEnhancer, resolveExtension, resolveBlockExtensions, addStyling, composeSchema } from "./Extensions"; export { userHasRoles, isManager, canAssignGroup, canAssignRole } from "./User/User"; diff --git a/packages/volto/types/middleware/index.d.ts b/packages/volto/types/middleware/index.d.ts index d65350b2a8..daa57524cb 100644 --- a/packages/volto/types/middleware/index.d.ts +++ b/packages/volto/types/middleware/index.d.ts @@ -1,3 +1,4 @@ export { default as api } from "@plone/volto/middleware/api"; export { default as blacklistRoutes } from "./blacklistRoutes"; +export { default as userSessionReset } from "./userSessionReset"; export { protectLoadStart, protectLoadEnd, loadProtector } from "@plone/volto/middleware/storeProtectLoadUtils"; diff --git a/packages/volto/types/middleware/userSessionReset.d.ts b/packages/volto/types/middleware/userSessionReset.d.ts new file mode 100644 index 0000000000..78d14d37bd --- /dev/null +++ b/packages/volto/types/middleware/userSessionReset.d.ts @@ -0,0 +1,5 @@ +export default userSessionReset; +declare function userSessionReset({ dispatch, getState }: { + dispatch: any; + getState: any; +}): (next: any) => (action: any) => any; From 08aab5a3781c9f892aef3f951706295ddf152d26 Mon Sep 17 00:00:00 2001 From: Steve Piercy Date: Sat, 14 Sep 2024 09:51:08 -0700 Subject: [PATCH 017/209] Upgrade Guide Cookieplone review (#6290) --- docs/source/upgrade-guide/index.md | 53 +++++++++++++++----------- packages/volto/news/6290.documentation | 1 + 2 files changed, 32 insertions(+), 22 deletions(-) create mode 100644 packages/volto/news/6290.documentation diff --git a/docs/source/upgrade-guide/index.md b/docs/source/upgrade-guide/index.md index 9aab23d148..e2bac7815c 100644 --- a/docs/source/upgrade-guide/index.md +++ b/docs/source/upgrade-guide/index.md @@ -40,7 +40,7 @@ For this purpose, we have developed a {ref}`new utility =8.42.0) installed in the backend to work properly. ``` @@ -742,11 +751,11 @@ From Volto 16.0.0-alpha.15 onwards, `volto-slate` is integrated into Volto core The previous text block `text` based on `draftJS` is now deprecated and is restricted (hidden) in Volto bootstrap. This is a major change and should be planned in advance before you install 16.0.0-alpha.15 or later. -```{versionadded} 16.0.0-alpha.15 +```{versionadded} Volto 16.0.0-alpha.15 `volto-slate` added to Volto core as the default text block. ``` -```{deprecated} 16.0.0-alpha.15 +```{deprecated} Volto 16.0.0-alpha.15 `text` text block based on `draftJS` is now deprecated and will be removed from core in Volto 18. ``` @@ -840,7 +849,7 @@ Version 16 is recommended. ### Upgraded to Razzle 4 -```{versionadded} 16.0.0-alpha.38 +```{versionadded} Volto 16.0.0-alpha.38 Volto has upgraded from Razzle 3 to Razzle 4. You should perform these steps in case you are upgrading to this version or above. ``` @@ -1143,7 +1152,7 @@ It maintains signature compatibility with `registry.resolve`, but introduces new See documentation for more information. -````{versionchanged} 16.0.0-alpha.23 +````{versionchanged} Volto 16.0.0-alpha.23 The `component` argument changed in 16.0.0-alpha.23. The `component` key has been flattened for simplification and now it's mapped directly to the `component` argument of `registerComponent`: @@ -1222,7 +1231,7 @@ During the alpha stage, we received feedback and determined that it's too diffic We decided it is best to deal with it as any other schema field and enhance it via schema enhancers. This improves the developer experience, especially when dealing with variations that can provide their own styles and other schema fields. -```{deprecated} 16.0.0-alpha.46 +```{deprecated} Volto 16.0.0-alpha.46 The options `enableStyling` and `stylesSchema` no longer work. You need to provide them using your own block schema. If you are extending an existing one, you should add it as a normal `schemaEnhancer` modification. @@ -1239,7 +1248,7 @@ Since then, the add-on story has improved. It now makes sense to extract this feature into its own add-on. Integrate Sentry in your app with [`@plone-collective/volto-sentry`](https://www.npmjs.com/package/@plone-collective/volto-sentry). -```{versionchanged} 16.0.0.alpha.45 +```{versionchanged} Volto 16.0.0.alpha.45 ``` ### Upgrade `husky` to latest version @@ -1260,7 +1269,7 @@ You can copy over the Volto ones (take a look in Volto's `.husky` folder). ### Better defaults handling -````{versionadded} 16.0.0-alpha.51 +````{versionadded} Volto 16.0.0-alpha.51 Prior to this version, we handled default values in schemas for blocks settings in a faulty and buggy manner. The state inferred was not deterministic and depended on the fields with defaults present. @@ -1376,7 +1385,7 @@ A new `@root` alias has been set up to replace the `~` alias. Support for the `~` alias is still in place, but we now mark it as deprecated. The use of `~` will be removed in Volto 16. -```{deprecated} 15.0 +```{deprecated} Volto 15.0 ``` ## Upgrading to Volto 14.x.x diff --git a/packages/volto/news/6290.documentation b/packages/volto/news/6290.documentation new file mode 100644 index 0000000000..d31cc808d4 --- /dev/null +++ b/packages/volto/news/6290.documentation @@ -0,0 +1 @@ +- Revised Cookieplone section in the Upgrade Guide. @stevepiercy From 6429d49ca3bbb5de2b915c9897d9445d106c79ed Mon Sep 17 00:00:00 2001 From: Steffen Lindner Date: Tue, 24 Sep 2024 10:59:39 +0200 Subject: [PATCH 018/209] Add missing for-attribute (#6249) Co-authored-by: ichim-david --- packages/volto/news/6249.bugfix | 1 + .../manage/Blocks/Search/components/CheckboxFacet.jsx | 1 + .../__snapshots__/CheckboxFacet.test.jsx.snap | 10 ++++++++-- 3 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 packages/volto/news/6249.bugfix diff --git a/packages/volto/news/6249.bugfix b/packages/volto/news/6249.bugfix new file mode 100644 index 0000000000..6e28743161 --- /dev/null +++ b/packages/volto/news/6249.bugfix @@ -0,0 +1 @@ +Add missing `for` attribute to checkbox label to improve accessibility. @gomez \ No newline at end of file diff --git a/packages/volto/src/components/manage/Blocks/Search/components/CheckboxFacet.jsx b/packages/volto/src/components/manage/Blocks/Search/components/CheckboxFacet.jsx index c4b86c1147..7d0665054f 100644 --- a/packages/volto/src/components/manage/Blocks/Search/components/CheckboxFacet.jsx +++ b/packages/volto/src/components/manage/Blocks/Search/components/CheckboxFacet.jsx @@ -21,6 +21,7 @@ const CheckboxFacet = (props) => { {choices.map(({ label, value }, i) => (
-
@@ -47,11 +50,14 @@ exports[`CheckboxFacet renders a facet component with checkboxes 1`] = ` -
From 2c55abb80fd1ee6dfee155b6e0e7dc43300b66bb Mon Sep 17 00:00:00 2001 From: Giulia Ghisini <51911425+giuliaghisini@users.noreply.github.com> Date: Tue, 24 Sep 2024 11:26:20 +0200 Subject: [PATCH 019/209] Fixed find blocks method if fieldname is similiar to 'blocks' (#6299) --- packages/volto/news/6299.bugfix | 1 + packages/volto/src/helpers/Blocks/Blocks.js | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 packages/volto/news/6299.bugfix diff --git a/packages/volto/news/6299.bugfix b/packages/volto/news/6299.bugfix new file mode 100644 index 0000000000..0d8ad4608a --- /dev/null +++ b/packages/volto/news/6299.bugfix @@ -0,0 +1 @@ +Fixed findBlocks when no blocks are passed. @giuliaghisini diff --git a/packages/volto/src/helpers/Blocks/Blocks.js b/packages/volto/src/helpers/Blocks/Blocks.js index 88f1a5ed15..6b24de9080 100644 --- a/packages/volto/src/helpers/Blocks/Blocks.js +++ b/packages/volto/src/helpers/Blocks/Blocks.js @@ -718,7 +718,7 @@ export function isBlockContainer(block) { * @param {Object} types A list with the list of types to be matched * @return {Array} An array of block ids */ -export function findBlocks(blocks, types, result = []) { +export function findBlocks(blocks = {}, types, result = []) { Object.keys(blocks).forEach((blockId) => { const block = blocks[blockId]; // check blocks from data as well since some add-ons use that From 2dcf6841a012d25fb1065888f5c2e9389885ba73 Mon Sep 17 00:00:00 2001 From: Giulia Ghisini <51911425+giuliaghisini@users.noreply.github.com> Date: Tue, 24 Sep 2024 11:40:22 +0200 Subject: [PATCH 020/209] Updated publicUi routes to not have cms-ui in public nonContentRoutes (#6173) Co-authored-by: Piero Nicolli Co-authored-by: Steve Piercy Co-authored-by: Mauro Amico Co-authored-by: ichim-david --- docs/source/configuration/how-to.md | 30 ++++++++++++++++++- packages/volto/news/6173.feature | 1 + .../src/config/NonContentRoutesPublic.jsx | 15 ++++++++++ packages/volto/src/config/index.js | 2 ++ packages/volto/src/helpers/Url/Url.js | 5 +++- packages/volto/src/helpers/Url/Url.test.js | 20 +++++++++++-- packages/volto/test-setup-config.jsx | 2 ++ 7 files changed, 70 insertions(+), 5 deletions(-) create mode 100644 packages/volto/news/6173.feature create mode 100644 packages/volto/src/config/NonContentRoutesPublic.jsx diff --git a/docs/source/configuration/how-to.md b/docs/source/configuration/how-to.md index 5d4eafd897..a1023c1837 100644 --- a/docs/source/configuration/how-to.md +++ b/docs/source/configuration/how-to.md @@ -20,7 +20,7 @@ then access any of its internal configuration to retrieve the configuration you like: ```js -const absoluteUrl = `${config.settings.apiPath}/${content.url}` +const absoluteUrl = `${config.settings.apiPath}/${content.url}`; ``` Both the main project and individual add-ons can extend Volto's configuration registry. @@ -150,3 +150,31 @@ export default function applyConfig(config) { return config; } +``` + +## `nonContentRoutes` and `nonContentRoutesPublic` + +`nonContentRoutes` is a list of routes reserved in Volto for its functionality as a content management system. +These functions include user authentication and registration, changing settings through control panels, generating a site map, and other functions. +Examples of these routes include `/login`, `/register`, and `/\/controlpanel\/.*$/`. +Editors can't use them for content. +The HTML attribute class value `cms-ui` is applied to members of `nonContentRoutes`. +You can configure `nonContentRoutes` with either a regular expression or a string representing the end of the URI. + +`nonContentRoutesPublic` is a subset of `nonContentRoutes`. +These routes are used for public sections of a Volto site that do not require authentication. +This subset includes `/login`, `/search`, and `/sitemap`. + +The following example shows how to configure settings for `nonContentRoutes` and `nonContentRoutesPublic`. + +```js +export default function applyConfig(config) { + config.settings = { + ...config.settings, + nonContentRoutes:[....], + nonContentRoutesPublic: [....] + }; + + return config; +} +``` diff --git a/packages/volto/news/6173.feature b/packages/volto/news/6173.feature new file mode 100644 index 0000000000..1d887eae5d --- /dev/null +++ b/packages/volto/news/6173.feature @@ -0,0 +1 @@ +Added `config.settings.nonContentRoutesPublic` to avoid `isCmsUi` issues in these public routes. @giuliaghisini diff --git a/packages/volto/src/config/NonContentRoutesPublic.jsx b/packages/volto/src/config/NonContentRoutesPublic.jsx new file mode 100644 index 0000000000..30583c15f3 --- /dev/null +++ b/packages/volto/src/config/NonContentRoutesPublic.jsx @@ -0,0 +1,15 @@ +// PublicUi routes that are nonContentRoutes, and should not be members of isCmsUi +// You can include either RegEx or a string representing the ending of the +// nonContentRoute. For example, '/add' will match '/foo/bar/add'. +export const nonContentRoutesPublic = [ + '/login', + '/logout', + '/sitemap', + '/register', + '/search', + '/change-password', + '/contact-form', + '/register', + /\/passwordreset\/.*$/, + '/passwordreset', +]; diff --git a/packages/volto/src/config/index.js b/packages/volto/src/config/index.js index 5dea078810..803048b14d 100644 --- a/packages/volto/src/config/index.js +++ b/packages/volto/src/config/index.js @@ -8,6 +8,7 @@ import { layoutViewsNamesMapping, } from './Views'; import { nonContentRoutes } from './NonContentRoutes'; +import { nonContentRoutesPublic } from './NonContentRoutesPublic'; import { groupBlocksOrder, requiredBlocks, @@ -113,6 +114,7 @@ let config = { legacyTraverse: process.env.RAZZLE_LEGACY_TRAVERSE || false, cookieExpires: 15552000, //in seconds. Default is 6 month (15552000) nonContentRoutes, + nonContentRoutesPublic, imageObjects: ['Image'], reservedIds: ['login', 'layout', 'plone', 'zip', 'properties'], downloadableObjects: ['File'], //list of content-types for which the direct download of the file will be carried out if the user is not authenticated diff --git a/packages/volto/src/helpers/Url/Url.js b/packages/volto/src/helpers/Url/Url.js index fe58098824..889d2c04a2 100644 --- a/packages/volto/src/helpers/Url/Url.js +++ b/packages/volto/src/helpers/Url/Url.js @@ -139,7 +139,10 @@ export const isCmsUi = memoize((currentPathname) => { // because the regexp test does not take that into account // https://github.com/plone/volto/issues/870 return settings.nonContentRoutes.reduce( - (acc, route) => acc || new RegExp(route).test(`/${fullPath}`), + (acc, route) => + acc || + (!settings.nonContentRoutesPublic?.includes(route) && + new RegExp(route).test(fullPath)), false, ); }); diff --git a/packages/volto/src/helpers/Url/Url.test.js b/packages/volto/src/helpers/Url/Url.test.js index b85ef9fc3a..d5ca89fb3f 100644 --- a/packages/volto/src/helpers/Url/Url.test.js +++ b/packages/volto/src/helpers/Url/Url.test.js @@ -151,15 +151,29 @@ describe('Url', () => { describe('isCmsUi', () => { [...settings.nonContentRoutes, '/controlpanel/mypanel'].forEach((route) => { if (typeof route === 'string') { - it(`matches non-content-route ${route}`, () => { - expect(isCmsUi(`/mycontent/${route}`)).toBe(true); - }); + if (settings.nonContentRoutesPublic.includes(route)) { + it(`matches non-content-route-public ${route}`, () => { + expect(isCmsUi(route)).toBe(false); + }); + } else { + it(`matches non-content-route ${route}`, () => { + expect(isCmsUi(`/mycontent/${route}`)).toBe(true); + }); + } } }); it('returns false on non-cms-ui views', () => { expect(isCmsUi('/mycontent')).toBe(false); }); + + it('returns true on non content routes', () => { + expect(isCmsUi('/mycontent/historyview')).toBe(true); + }); + + it('returns false on public non content routes', () => { + expect(isCmsUi('/mycontent/login')).toBe(false); + }); }); describe('flattenHTMLToAppURL', () => { diff --git a/packages/volto/test-setup-config.jsx b/packages/volto/test-setup-config.jsx index 59cb64257f..890205193a 100644 --- a/packages/volto/test-setup-config.jsx +++ b/packages/volto/test-setup-config.jsx @@ -10,6 +10,7 @@ import React from 'react'; import config from '@plone/volto/registry'; import { loadables } from '@plone/volto/config/Loadables'; import { nonContentRoutes } from '@plone/volto/config/NonContentRoutes'; +import { nonContentRoutesPublic } from '@plone/volto/config/NonContentRoutesPublic'; import { contentIcons } from '@plone/volto/config/ContentIcons'; import { styleClassNameConverters, @@ -35,6 +36,7 @@ config.set('settings', { showTags: true, isMultilingual: false, nonContentRoutes, + nonContentRoutesPublic, contentIcons: contentIcons, loadables, lazyBundles: { From 0e4f5083a9b6d37aa18d754b79b3172e366aa890 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89rico=20Andrei?= Date: Tue, 24 Sep 2024 12:09:59 +0200 Subject: [PATCH 021/209] Update Brazilian Portuguese translations (#6292) Co-authored-by: ichim-david --- .../locales/pt_BR/LC_MESSAGES/volto.po | 205 ++++++++++++++++++ .../volto-slate/news/+update_pt_br.feature | 1 + .../volto/locales/pt_BR/LC_MESSAGES/volto.po | 132 +++++------ packages/volto/news/+update_pt_br.feature | 1 + 4 files changed, 273 insertions(+), 66 deletions(-) create mode 100644 packages/volto-slate/locales/pt_BR/LC_MESSAGES/volto.po create mode 100644 packages/volto-slate/news/+update_pt_br.feature create mode 100644 packages/volto/news/+update_pt_br.feature diff --git a/packages/volto-slate/locales/pt_BR/LC_MESSAGES/volto.po b/packages/volto-slate/locales/pt_BR/LC_MESSAGES/volto.po new file mode 100644 index 0000000000..867d80478b --- /dev/null +++ b/packages/volto-slate/locales/pt_BR/LC_MESSAGES/volto.po @@ -0,0 +1,205 @@ +msgid "" +msgstr "" +"Project-Id-Version: Plone\n" +"POT-Creation-Date: 2022-07-20T12:45:09.681Z\n" +"PO-Revision-Date: \n" +"Last-Translator: Érico Andrei \n" +"Language-Team: Plone i18n \n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language-Code: en\n" +"Language-Name: English\n" +"Preferred-Encodings: utf-8\n" +"Domain: volto\n" +"X-Generator: Poedit 3.5\n" + +# defaultMessage: Add link +#: editor/plugins/Link/index +msgid "Add link" +msgstr "Adicionar link" + +# defaultMessage: An error has occurred while editing "{name}" field. We have been notified and we are looking into it. Please save your work and retry. If the issue persists please contact the site administrator. +#: widgets/HtmlSlateWidget +#, fuzzy +msgid "An error has occurred while editing \"{name}\" field. We have been notified and we are looking into it. Please save your work and retry. If the issue persists please contact the site administrator." +msgstr "Ocorreu um erro ao editar o campo \"{name}\". Fomos notificados e estamos analisando o problema. Salve seu trabalho e tente novamente. Se o problema persistir, entre em contato com o administrador do site." + +# defaultMessage: An error has occurred while rendering "{name}" field. We have been notified and we are looking into it. If the issue persists please contact the site administrator. +#: widgets/RichTextWidgetView +#, fuzzy +msgid "An error has occurred while rendering \"{name}\" field. We have been notified and we are looking into it. If the issue persists please contact the site administrator." +msgstr "Ocorreu um erro ao renderizar o campo \"{name}\". Fomos notificados e estamos analisando o problema. Se o problema persistir, entre em contato com o administrador do site." + +# defaultMessage: Bottom +#: blocks/Table/TableBlockEdit +msgid "Bottom" +msgstr "Base" + +# defaultMessage: Center +#: blocks/Table/TableBlockEdit +#, fuzzy +msgid "Center" +msgstr "Centro" + +# defaultMessage: Delete col +#: blocks/Table/TableBlockEdit editor/plugins/Table/index +#, fuzzy +msgid "Delete col" +msgstr "Excluir coluna" + +# defaultMessage: Delete row +#: blocks/Table/TableBlockEdit editor/plugins/Table/index +#, fuzzy +msgid "Delete row" +msgstr "Excluir linha" + +# defaultMessage: Delete table +#: editor/plugins/Table/index +#, fuzzy +msgid "Delete table" +msgstr "Excluir tabela" + +# defaultMessage: Divide each row into separate cells +#: blocks/Table/TableBlockEdit +#, fuzzy +msgid "Divide each row into separate cells" +msgstr "Dividir cada linha em células separadas" + +# defaultMessage: Edit element +#: elementEditor/messages +#, fuzzy +msgid "Edit element" +msgstr "Editar elemento" + +# defaultMessage: Edit link +#: editor/plugins/AdvancedLink/index editor/plugins/Link/index +#, fuzzy +msgid "Edit link" +msgstr "Editar link" + +# defaultMessage: Fixed width table cells +#: blocks/Table/TableBlockEdit +#, fuzzy +msgid "Fixed width table cells" +msgstr "Células de tabela de largura fixa" + +# defaultMessage: Hide headers +#: blocks/Table/TableBlockEdit +#, fuzzy +msgid "Hide headers" +msgstr "Ocultar cabeçalhos" + +# defaultMessage: Insert col after +#: blocks/Table/TableBlockEdit editor/plugins/Table/index +#, fuzzy +msgid "Insert col after" +msgstr "Inserir coluna após" + +# defaultMessage: Insert col before +#: blocks/Table/TableBlockEdit editor/plugins/Table/index +#, fuzzy +msgid "Insert col before" +msgstr "Inserir coluna antes" + +# defaultMessage: Insert row after +#: blocks/Table/TableBlockEdit editor/plugins/Table/index +#, fuzzy +msgid "Insert row after" +msgstr "Inserir linha após" + +# defaultMessage: Insert row before +#: blocks/Table/TableBlockEdit editor/plugins/Table/index +#, fuzzy +msgid "Insert row before" +msgstr "Inserir linha antes" + +# defaultMessage: Left +#: blocks/Table/TableBlockEdit +#, fuzzy +msgid "Left" +msgstr "Esquerda" + +# defaultMessage: Make the table compact +#: blocks/Table/TableBlockEdit +#, fuzzy +msgid "Make the table compact" +msgstr "Compactar a tabela" + +# defaultMessage: Make the table sortable +#: blocks/Table/TableBlockEdit +msgid "Make the table sortable" +msgstr "Tornar a tabela ordenável" + +# defaultMessage: Middle +#: blocks/Table/TableBlockEdit +msgid "Middle" +msgstr "Meio" + +# defaultMessage: No matching blocks +#: blocks/Text/SlashMenu +#, fuzzy +msgid "No matching blocks" +msgstr "Não há blocos correspondentes" + +# defaultMessage: Reduce complexity +#: blocks/Table/TableBlockEdit +#, fuzzy +msgid "Reduce complexity" +msgstr "Reduzir complexidade" + +# defaultMessage: Remove element +#: elementEditor/messages +#, fuzzy +msgid "Remove element" +msgstr "Remover elemento" + +# defaultMessage: Remove link +#: editor/plugins/AdvancedLink/index +#, fuzzy +msgid "Remove link" +msgstr "Remover link" + +# defaultMessage: Right +#: blocks/Table/TableBlockEdit +#, fuzzy +msgid "Right" +msgstr "Direita" + +# defaultMessage: Stripe alternate rows with color +#: blocks/Table/TableBlockEdit +#, fuzzy +msgid "Stripe alternate rows with color" +msgstr "Alternar cores das linhas" + +# defaultMessage: Table +#: blocks/Table/TableBlockEdit +#, fuzzy +msgid "Table" +msgstr "Tabela" + +# defaultMessage: Table color inverted +#: blocks/Table/TableBlockEdit +#, fuzzy +msgid "Table color inverted" +msgstr "Cor da tabela invertida" + +# defaultMessage: Top +#: blocks/Table/TableBlockEdit +#, fuzzy +msgid "Top" +msgstr "Topo" + +# defaultMessage: Type text… +#: blocks/Text/DefaultTextBlockEditor blocks/Text/DetachedTextBlockEditor +#, fuzzy +msgid "Type text…" +msgstr "Digite texto…" + +# defaultMessage: Visible only in view mode +#: blocks/Table/TableBlockEdit +#, fuzzy +msgid "Visible only in view mode" +msgstr "Visível apenas no modo de visualização" diff --git a/packages/volto-slate/news/+update_pt_br.feature b/packages/volto-slate/news/+update_pt_br.feature new file mode 100644 index 0000000000..35ce73755f --- /dev/null +++ b/packages/volto-slate/news/+update_pt_br.feature @@ -0,0 +1 @@ +Update Brazilian Portuguese translations. @ericof diff --git a/packages/volto/locales/pt_BR/LC_MESSAGES/volto.po b/packages/volto/locales/pt_BR/LC_MESSAGES/volto.po index 22e61c7f06..36222ddb91 100644 --- a/packages/volto/locales/pt_BR/LC_MESSAGES/volto.po +++ b/packages/volto/locales/pt_BR/LC_MESSAGES/volto.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: Plone\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-04-27T19:30:59.079Z\n" -"PO-Revision-Date: 2022-11-14 19:36-0300\n" +"PO-Revision-Date: 2024-09-15 14:20-0300\n" "Last-Translator: Érico Andrei \n" "Language: pt_BR\n" "Language-Team: Portuguese (https://www.transifex.com/plone/teams/14552/pt/)\n" @@ -15,7 +15,7 @@ msgstr "" "Language-Name: Português do Brasil\n" "Preferred-Encodings: utf-8\n" "Domain: volto\n" -"X-Generator: Poedit 3.2\n" +"X-Generator: Poedit 3.5\n" #. Default: "

Add some HTML here

" #: components/manage/Blocks/HTML/Edit @@ -142,7 +142,7 @@ msgstr "Adicionar bloco" #. Default: "Add block in position {index}" #: components/manage/Blocks/Container/NewBlockAddButton msgid "Add block in position {index}" -msgstr "" +msgstr "Adicionar bloco na posição {index}" #. Default: "Add block…" #: helpers/MessageLabels/MessageLabels @@ -595,7 +595,7 @@ msgstr "Alterações guardadas." #. Default: "Check this box to customize the title, description, or image of the target content item for this teaser. Leave it unchecked to show updates to the target content item if it is edited later." #: components/manage/Blocks/Teaser/schema msgid "Check this box to customize the title, description, or image of the target content item for this teaser. Leave it unchecked to show updates to the target content item if it is edited later." -msgstr "" +msgstr "Marque essa caixa para personalizar o título, a descrição ou a imagem do item de conteúdo de destino para esse teaser. Deixe-a desmarcada para mostrar atualizações no item de conteúdo de destino se ele for editado posteriormente." #. Default: "Checkbox" #: components/manage/Widgets/SchemaWidget @@ -750,7 +750,7 @@ msgstr "Itens contidos" #. Default: "Container settings" #: components/manage/Blocks/Container/SimpleContainerToolbar msgid "Container settings" -msgstr "" +msgstr "Configurações de contêineres" #. Default: "Content" #: components/manage/Controlpanels/Controlpanels @@ -781,7 +781,7 @@ msgstr "Regras de conteúdo de pastas pai" #. Default: "Content that links to or references {title}" #: components/manage/LinksToItem/LinksToItem msgid "Content that links to or references {title}" -msgstr "" +msgstr "Conteúdo com links ou referências para {title}" #. Default: "Content type created" #: components/manage/Controlpanels/ContentTypes @@ -880,7 +880,7 @@ msgstr "Senha atual" #. Default: "Customize teaser content" #: components/manage/Blocks/Teaser/schema msgid "Customize teaser content" -msgstr "" +msgstr "Personalizar o conteúdo do destaque" #. Default: "Cut" #: components/manage/Actions/Actions @@ -1017,12 +1017,12 @@ msgstr "Excluir linha" #. Default: "Delete selected items?" #: components/manage/Contents/Contents msgid "Delete selected items?" -msgstr "" +msgstr "Excluir os itens selecionados?" #. Default: "Delete this item?" #: components/manage/Contents/Contents msgid "Delete this item?" -msgstr "" +msgstr "Apagar este item?" #. Default: "Deleted" #: components/manage/Controlpanels/Rules/Rules @@ -1032,7 +1032,7 @@ msgstr "Removida" #. Default: "Deleting this item breaks {brokenReferences} {variation}." #: components/manage/Contents/Contents msgid "Deleting this item breaks {brokenReferences} {variation}." -msgstr "" +msgstr "A exclusão desse item quebra {brokenReferences} {variation}." #. Default: "Depth" #: components/manage/Widgets/QuerystringWidget @@ -1328,7 +1328,7 @@ msgstr "Informe seu nome de usuário para verificação." #. Default: "Entries" #: components/manage/Blocks/ToC/Schema msgid "Entries" -msgstr "" +msgstr "Entradas" #. Default: "Error" #: components/manage/Add/Add @@ -1359,7 +1359,7 @@ msgstr "Evento" #. Default: "Event end date must be on or after {startDateValueOrStartFieldName}" #: helpers/MessageLabels/MessageLabels msgid "Event end date must be on or after {startDateValueOrStartFieldName}" -msgstr "" +msgstr "A data de término do evento deve ser igual ou posterior a {startDateValueOrStartFieldName}" #. Default: "Event listing" #: config/Views @@ -1369,7 +1369,7 @@ msgstr "Listagem de Evento" #. Default: "Event start date must be on or before {endDateValueOrEndFieldName}" #: helpers/MessageLabels/MessageLabels msgid "Event start date must be on or before {endDateValueOrEndFieldName}" -msgstr "" +msgstr "A data de início do evento deve ser igual ou anterior a {endDateValueOrEndFieldName}" #. Default: "Event view" #: config/Views @@ -1596,7 +1596,7 @@ msgstr "Bloco Google Maps" #. Default: "Grid" #: components/manage/Blocks/Grid/schema msgid "Grid" -msgstr "" +msgstr "Grade" #. Default: "Group" #: components/manage/Sharing/Sharing @@ -1611,7 +1611,7 @@ msgstr "Grupo criado" #. Default: "Group deleted" #: helpers/MessageLabels/MessageLabels msgid "Group deleted" -msgstr "" +msgstr "Grupo Excluído" #. Default: "Group roles updated" #: helpers/MessageLabels/MessageLabels @@ -1676,7 +1676,7 @@ msgstr "Ocultar filtros" #. Default: "Hide title" #: components/manage/Blocks/ToC/Schema msgid "Hide title" -msgstr "" +msgstr "Ocultar título" #. Default: "History" #: components/manage/History/History @@ -1712,7 +1712,7 @@ msgstr "ID" #. Default: "Icon View" #: components/manage/Sidebar/ObjectBrowserBody msgid "Icon View" -msgstr "" +msgstr "Visualização de ícone" #. Default: "If all of the following conditions are met:" #: components/manage/Controlpanels/Rules/ConfigureRule @@ -1869,12 +1869,12 @@ msgstr "Bloco inválido" #. Default: "Invalid teaser source" #: components/manage/Blocks/Teaser/Data msgid "Invalid teaser source" -msgstr "" +msgstr "Fonte do destaque inválida" #. Default: "It is not allowed to define both the password and to request sending the password reset message by e-mail. You need to select one of them." #: helpers/MessageLabels/MessageLabels msgid "It is not allowed to define both the password and to request sending the password reset message by e-mail. You need to select one of them." -msgstr "" +msgstr "Não é permitido definir a senha e solicitar o envio da mensagem de redefinição de senha por e-mail. Por favor, selecione um deles." #. Default: "Item batch size" #: components/manage/Widgets/QuerystringWidget @@ -1998,7 +1998,7 @@ msgstr "Link" #. Default: "Anchor link copied to the clipboard" #: helpers/MessageLabels/MessageLabels msgid "Link copied to clipboard" -msgstr "" +msgstr "Link copiado para área de transferência" #. Default: "Link more" #: components/manage/Blocks/Listing/schema @@ -2013,7 +2013,7 @@ msgstr "Visão de redireção de Link" #. Default: "Link settings" #: components/manage/Blocks/Image/schema msgid "Link settings" -msgstr "" +msgstr "Configurações do link" #. Default: "Link Title" #: components/manage/Blocks/Listing/schema @@ -2035,18 +2035,18 @@ msgstr "Linkar tradução para" #. Default: "Linking this item with hyperlink in text" #: components/manage/LinksToItem/LinksToItem msgid "Linking this item with hyperlink in text" -msgstr "" +msgstr "Vinculação deste item com hiperlink no texto" #. Default: "Links and references" #: components/manage/LinksToItem/LinksToItem #: components/manage/Toolbar/More msgid "Links and references" -msgstr "" +msgstr "Links e referências" #. Default: "List View" #: components/manage/Sidebar/ObjectBrowserBody msgid "List View" -msgstr "" +msgstr "Exibição de lista" #. Default: "Listing" #: components/manage/Blocks/Listing/schema @@ -2104,7 +2104,7 @@ msgstr "Nome de usuário" #. Default: "Logo of" #: components/theme/Logo/Logo msgid "Logo of" -msgstr "" +msgstr "Logotipo da" #. Default: "Logout" #: components/manage/Toolbar/PersonalTools @@ -2390,7 +2390,7 @@ msgstr "Nenhum item selecionado" #. Default: "No links to this item found." #: components/manage/LinksToItem/LinksToItem msgid "No links to this item found." -msgstr "" +msgstr "Não foram encontrados links para esse item." #. Default: "No map selected" #: components/manage/Blocks/Maps/MapsSidebar @@ -2496,7 +2496,7 @@ msgstr "Ok" #. Default: "Only 7-bit bytes characters are allowed. Cannot contain uppercase letters, special characters: <, >, &, #, /, ?, or others that are illegal in URLs. Cannot start with: _, aq_, @@, ++. Cannot end with __. Cannot be: request,contributors, ., .., "". Cannot contain new lines." #: components/manage/Widgets/IdWidget msgid "Only 7-bit bytes characters are allowed. Cannot contain uppercase letters, special characters: <, >, &, #, /, ?, or others that are illegal in URLs. Cannot start with: _, aq_, @@, ++. Cannot end with __. Cannot be: request,contributors, ., .., "". Cannot contain new lines." -msgstr "" +msgstr "Somente caracteres de bytes de 7 bits são permitidos. Não pode conter letras maiúsculas, caracteres especiais: <, >, &, #, /, ?, ou outros que são ilegais em URLs. Não pode começar com: , aq, @@, ++. Não pode terminar com __. Não pode ser: request, contributors, ., .., “”. Não pode conter quebras de linha." #. Default: "Open in a new tab" #: components/manage/Blocks/Image/schema @@ -2519,12 +2519,12 @@ msgstr "Abrir navegador de objetos" #. Default: "Order" #: components/manage/Sidebar/Sidebar msgid "Order" -msgstr "" +msgstr "Ordem" #. Default: "Ordered" #: components/manage/Blocks/ToC/Schema msgid "Ordered" -msgstr "" +msgstr "Ordenado" #. Default: "Origin" #: components/manage/Blocks/LeadImage/LeadImageSidebar @@ -2534,7 +2534,7 @@ msgstr "Origem" #. Default: "Overview of relations of all content items" #: components/manage/LinksToItem/LinksToItem msgid "Overview of relations of all content items" -msgstr "" +msgstr "Visão geral das relações de todos os itens de conteúdo" #. Default: "Page" #: components/manage/Toolbar/Toolbar @@ -2778,17 +2778,17 @@ msgstr "Reduzir complexidade" #. Default: "Referencing this item as related item" #: components/manage/LinksToItem/LinksToItem msgid "Referencing this item as related item" -msgstr "" +msgstr "Referenciando este item como item relacionado" #. Default: "Referencing this item with {relationship}" #: components/manage/LinksToItem/LinksToItem msgid "Referencing this item with {relationship}" -msgstr "" +msgstr "Referenciando este item via {relationship}" #. Default: "Refresh source content" #: components/manage/Blocks/Teaser/Data msgid "Refresh source content" -msgstr "" +msgstr "Atualizar o conteúdo de origem" #. Default: "Register" #: components/theme/Anontools/Anontools @@ -2838,7 +2838,7 @@ msgstr "Remover" #. Default: "Remove element {index}" #: components/manage/Blocks/Container/EditBlockWrapper msgid "Remove element {index}" -msgstr "" +msgstr "Remover elemento {index}" #. Default: "Remove item" #: components/manage/Widgets/ObjectListWidget @@ -2927,7 +2927,7 @@ msgstr "Falta informação obrigatória." #. Default: "Reset element {index}" #: components/manage/Blocks/Container/EditBlockWrapper msgid "Reset element {index}" -msgstr "" +msgstr "Redefinir elemento {index}" #. Default: "Reset title" #: components/manage/Widgets/VocabularyTermsWidget @@ -3230,7 +3230,7 @@ msgstr "Envie um e-mail de confirmação com um link para definir a senha." #. Default: "Server Error" #: components/theme/Error/ServerError msgid "Server Error" -msgstr "" +msgstr "Erro de servidor" #. Default: "Set my password" #: components/theme/PasswordReset/PasswordReset @@ -3376,12 +3376,12 @@ msgstr "Pequeno" #. Default: "Some items are also a folder. By deleting them you will delete {containedItemsToDelete} {variation} inside the folders." #: components/manage/Contents/Contents msgid "Some items are also a folder. By deleting them you will delete {containedItemsToDelete} {variation} inside the folders." -msgstr "" +msgstr "Alguns itens também são uma pasta. Ao excluí-los, você excluirá {containedItemsToDelete} {variation} dentro destas pastas." #. Default: "Some items are referenced by other contents. By deleting them {brokenReferences} {variation} will be broken." #: components/manage/Contents/Contents msgid "Some items are referenced by other contents. By deleting them {brokenReferences} {variation} will be broken." -msgstr "" +msgstr "Alguns itens são referenciados por outros conteúdos. Ao excluí-los, {brokenReferences} {variation} podem ser quebrados." #. Default: "Some relations are broken. Please fix." #: components/manage/Controlpanels/Relations/Relations @@ -3428,7 +3428,7 @@ msgstr "Ordenado" #. Default: "Sorted on" #: components/manage/Blocks/Search/components/SortOn msgid "Sorted on" -msgstr "" +msgstr "Ordenado por" #. Default: "Source" #: components/manage/Blocks/HTML/Edit @@ -3478,7 +3478,7 @@ msgstr "Situação" #. Default: "Sticky" #: components/manage/Blocks/ToC/Schema msgid "Sticky" -msgstr "" +msgstr "Fixo" #. Default: "Stop compare" #: components/manage/Multilingual/CompareLanguages @@ -3508,7 +3508,7 @@ msgstr "Assunto" #. Default: "Submit" #: components/manage/AnchorPlugin/components/LinkButton/AddLinkForm msgid "Submit" -msgstr "" +msgstr "Enviar" #. Default: "Success" #: components/manage/Actions/Actions @@ -3674,12 +3674,12 @@ msgstr "O endereço do link é:" #. Default: "The number of items must be greater than or equal to {minItems}" #: helpers/MessageLabels/MessageLabels msgid "The number of items must be greater than or equal to {minItems}" -msgstr "" +msgstr "O número de itens deve ser maior ou igual a {minItems}" #. Default: "The number of items must be less than or equal to {maxItems}" #: helpers/MessageLabels/MessageLabels msgid "The number of items must be less than or equal to {maxItems}" -msgstr "" +msgstr "O número de itens deve ser menor ou igual a {maxItems}" #. Default: "The provided alternative url already exists!" #: components/manage/Aliases/Aliases @@ -3700,7 +3700,7 @@ msgstr "A configuração do site está desatualizada e precisa ser atualizada." #. Default: "The value does not match the pattern {pattern}" #: helpers/MessageLabels/MessageLabels msgid "The value does not match the pattern {pattern}" -msgstr "" +msgstr "O valor não corresponde ao padrão {pattern}" #. Default: "The working copy was discarded" #: components/manage/Toolbar/More @@ -3715,12 +3715,12 @@ msgstr "O {plonecms} tem {copyright} de 2000-{current_year} pela {plonefoundatio #. Default: "There are no groups with the searched criteria" #: helpers/MessageLabels/MessageLabels msgid "There are no groups with the searched criteria" -msgstr "" +msgstr "Não há grupos com os critérios pesquisados" #. Default: "There are no users with the searched criteria" #: helpers/MessageLabels/MessageLabels msgid "There are no users with the searched criteria" -msgstr "" +msgstr "Não há usuários com os critérios pesquisados" #. Default: "There are some errors." #: components/manage/Add/Add @@ -3772,7 +3772,7 @@ msgstr "Esta é uma cópia de trabalho de {title}" #. Default: "This item is also a folder. By deleting it you will delete {containedItemsToDelete} {variation} inside the folder." #: components/manage/Contents/Contents msgid "This item is also a folder. By deleting it you will delete {containedItemsToDelete} {variation} inside the folder." -msgstr "" +msgstr "Esse item também é uma pasta. Ao excluí-lo, você excluirá {containedItemsToDelete} {variation} dentro da pasta." #. Default: "This item was locked by {creator} on {date}" #: components/manage/LockingToastsFactory/LockingToastsFactory @@ -4009,7 +4009,7 @@ msgstr "Atualizar" #. Default: "Update User" #: helpers/MessageLabels/MessageLabels msgid "Update User" -msgstr "" +msgstr "Atualizar o usuário" #. Default: "Update installed addons" #: components/manage/Controlpanels/AddonsControlpanel @@ -4107,7 +4107,7 @@ msgstr "Usuário criado" #. Default: "User deleted" #: helpers/MessageLabels/MessageLabels msgid "User deleted" -msgstr "" +msgstr "Usuário excluído" #. Default: "User name" #: components/manage/Controlpanels/Users/UsersControlpanel @@ -4122,7 +4122,7 @@ msgstr "Papéis do grupo atualizados" #. Default: "User updated successfuly" #: helpers/MessageLabels/MessageLabels msgid "User updated successfuly" -msgstr "" +msgstr "Usuário atualizado com sucesso" #. Default: "Username" #: helpers/MessageLabels/MessageLabels @@ -4181,12 +4181,12 @@ msgstr "Ver mudanças" #. Default: "View links and references to this item" #: components/manage/Contents/Contents msgid "View links and references to this item" -msgstr "" +msgstr "Exibir links e referências a este item" #. Default: "View this revision" #: components/manage/History/History msgid "View this revision" -msgstr "Ver esta revisão" +msgstr "Visualizar esta revisão" #. Default: "View working copy" #: components/manage/Toolbar/More @@ -4231,7 +4231,7 @@ msgstr "Pedimos desculpas pelo inconveniente, mas a página que você estava ten #. Default: "We apologize for the inconvenience, but there was an unexpected error on the server." #: components/theme/Error/ServerError msgid "We apologize for the inconvenience, but there was an unexpected error on the server." -msgstr "" +msgstr "Pedimos desculpas pelo inconveniente, mas ocorreu um erro inesperado no servidor." #. Default: "We apologize for the inconvenience, but you don't have permissions on this resource." #: components/theme/Forbidden/Forbidden @@ -4419,7 +4419,7 @@ msgstr "Visões disponíveis" #. Default: "Error in the block field {errorField}." #: helpers/MessageLabels/MessageLabels msgid "blocksFieldsErrorTitle" -msgstr "" +msgstr "Erro no campo de blocos {errorField}" #. Default: "Forgot your password?" #: components/theme/Login/Login @@ -4435,12 +4435,12 @@ msgstr "Caixa de seleção" #. Default: "column" #: components/manage/Blocks/Grid/templates msgid "column" -msgstr "" +msgstr "coluna" #. Default: "columns" #: components/manage/Blocks/Grid/templates msgid "columns" -msgstr "" +msgstr "colunas" #. Default: "Common" #: config/Blocks @@ -4540,7 +4540,7 @@ msgstr "Onde" #. Default: "This website does not accept files larger than {limit}" #: helpers/MessageLabels/MessageLabels msgid "fileTooLarge" -msgstr "" +msgstr "Este site não aceita arquivos maiores que {limit}" #. Default: "flush intIds and rebuild relations" #: helpers/MessageLabels/MessageLabels @@ -4550,7 +4550,7 @@ msgstr "descarrega os intIds e recontrua os relacionamentos" #. Default: "
  • Regenerate intIds (tokens of relations in relation catalog)
  • Rebuild relations

Check the log for details!

Warning: If you have add-ons relying on intIds, you should not flush them.

" #: helpers/MessageLabels/MessageLabels msgid "flushAndRebuildRelationsHints" -msgstr "" +msgstr "
  • Regerar os intIds (tokens das relações no catálogo de relações)
  • Reconstruir relações

Verifique o log para detalhes!

Aviso: Se você tem complementos que dependem de intIds, não deve excluí-los.

" #. Default: "Head title" #: components/manage/Blocks/Teaser/schema @@ -4580,12 +4580,12 @@ msgstr "Imagem" #. Default: "Clear image" #: components/manage/Blocks/Image/ImageSidebar msgid "image_block_clear" -msgstr "" +msgstr "Remover imagem" #. Default: "Image preview" #: components/manage/Blocks/Image/ImageSidebar msgid "image_block_preview" -msgstr "" +msgstr "Pré-visualização da imagem" #. Default: "Input must be integer" #: helpers/MessageLabels/MessageLabels @@ -4600,12 +4600,12 @@ msgstr "Intranet" #. Default: "item" #: components/manage/Contents/Contents msgid "item" -msgstr "" +msgstr "Item" #. Default: "items" #: components/manage/Contents/Contents msgid "items" -msgstr "" +msgstr "Itens" #. Default: "My email is" #: components/theme/PasswordReset/RequestPasswordReset @@ -4749,12 +4749,12 @@ msgstr "reconstruir relacionamentos" #. Default: "reference" #: components/manage/Contents/Contents msgid "reference" -msgstr "" +msgstr "referência" #. Default: "references" #: components/manage/Contents/Contents msgid "references" -msgstr "" +msgstr "referências" #. Default: "results" #: components/theme/Search/Search @@ -4974,7 +4974,7 @@ msgstr "caminho do destino" #. Default: "Text" #: config/Blocks msgid "text" -msgstr "" +msgstr "texto" #. Default: "Title" #: config/Blocks @@ -5047,7 +5047,7 @@ msgstr "Sim" #. Default: "{count, plural, one {Upload {count} file} other {Upload {count} files}}" #: components/manage/Contents/ContentsUploadModal msgid "{count, plural, one {Upload {count} file} other {Upload {count} files}}" -msgstr "{count, plural, one {Enviar {count} arquivo} other {Enviar {count} arquivos}}" +msgstr "{count, plural, one {Enviar {count} arquivo} ou {Enviar {count} arquivos}}" #. Default: "{count} selected" #: components/manage/Contents/Contents diff --git a/packages/volto/news/+update_pt_br.feature b/packages/volto/news/+update_pt_br.feature new file mode 100644 index 0000000000..35ce73755f --- /dev/null +++ b/packages/volto/news/+update_pt_br.feature @@ -0,0 +1 @@ +Update Brazilian Portuguese translations. @ericof From eb14b612b2f0101e46e6a2e12ceaf1bb993f97d7 Mon Sep 17 00:00:00 2001 From: Teodor Voicu <104510089+tedw87@users.noreply.github.com> Date: Wed, 25 Sep 2024 17:48:48 +0300 Subject: [PATCH 022/209] Updated #2573 to Volto 18: Change text color to black for input:focus (#6307) Co-authored-by: ichim-david --- packages/volto/cypress/tests/core/basic/a11y.js | 4 ++++ packages/volto/news/2570.bugfix | 2 ++ .../volto/theme/themes/pastanaga/collections/form.overrides | 1 + 3 files changed, 7 insertions(+) create mode 100644 packages/volto/news/2570.bugfix diff --git a/packages/volto/cypress/tests/core/basic/a11y.js b/packages/volto/cypress/tests/core/basic/a11y.js index 9c21668d8f..593c2b4889 100644 --- a/packages/volto/cypress/tests/core/basic/a11y.js +++ b/packages/volto/cypress/tests/core/basic/a11y.js @@ -10,6 +10,10 @@ describe('Accessibility Tests', () => { it('Contact form has not a11y violations', () => { cy.navigate('/contact-form'); + cy.get('#field-name').click().type('input'); + cy.get('#field-from').click().type('something@domain.com'); + cy.get('#field-subject').click().type('input'); + cy.get('#field-message').click().type('input'); cy.checkA11y(); }); diff --git a/packages/volto/news/2570.bugfix b/packages/volto/news/2570.bugfix new file mode 100644 index 0000000000..490f159699 --- /dev/null +++ b/packages/volto/news/2570.bugfix @@ -0,0 +1,2 @@ +Change Form input:focus text color to the `textColor` value for a11y. +Add Cypress test for contact form inputs. @ThomasKindermann @tedw87 \ No newline at end of file diff --git a/packages/volto/theme/themes/pastanaga/collections/form.overrides b/packages/volto/theme/themes/pastanaga/collections/form.overrides index 3d5ae5e965..680367e099 100644 --- a/packages/volto/theme/themes/pastanaga/collections/form.overrides +++ b/packages/volto/theme/themes/pastanaga/collections/form.overrides @@ -50,6 +50,7 @@ &:focus { border-radius: 0; + color: @textColor; } } From a2d997b3e7a9746970f97c5cd7bec30a08a46daf Mon Sep 17 00:00:00 2001 From: Jefferson Bledsoe Date: Thu, 26 Sep 2024 09:58:48 +0200 Subject: [PATCH 023/209] Use consistent text colour for accordion titles to improve contrast and CMS consistency (#6330) --- packages/volto/news/6330.bugfix | 1 + .../theme/themes/pastanaga/modules/accordion.variables | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) create mode 100644 packages/volto/news/6330.bugfix diff --git a/packages/volto/news/6330.bugfix b/packages/volto/news/6330.bugfix new file mode 100644 index 0000000000..809f559863 --- /dev/null +++ b/packages/volto/news/6330.bugfix @@ -0,0 +1 @@ +Changed sidebar accordion text colour from @teal to @textColor. @JeffersonBledsoe diff --git a/packages/volto/theme/themes/pastanaga/modules/accordion.variables b/packages/volto/theme/themes/pastanaga/modules/accordion.variables index d3c1835b1a..ffa6fb712b 100644 --- a/packages/volto/theme/themes/pastanaga/modules/accordion.variables +++ b/packages/volto/theme/themes/pastanaga/modules/accordion.variables @@ -34,14 +34,14 @@ /* Styled Title */ @styledTitleFontWeight: @normal; -@styledTitleColor: @teal; +@styledTitleColor: @textColor; @styledTitleBorder: none; /* Styled Title States */ @styledTitleHoverBackground: @darkWhite; -@styledTitleHoverColor: @teal; +@styledTitleHoverColor: @textColor; @styledActiveTitleBackground: @darkWhite; -@styledActiveTitleColor: @teal; +@styledActiveTitleColor: @textColor; /* Styled Child Title States */ From d81a0d339e25cf3a4efa98429edd66b3cf509b9b Mon Sep 17 00:00:00 2001 From: Roman Kysil Date: Fri, 27 Sep 2024 09:35:50 +0200 Subject: [PATCH 024/209] Labels accessibility for ArrayWidget, SelectWidget, TokenWidget (#6332) Co-authored-by: Piero Nicolli --- packages/volto/news/6332.bugfix | 1 + packages/volto/src/components/manage/Widgets/ArrayWidget.jsx | 1 + packages/volto/src/components/manage/Widgets/SelectWidget.jsx | 1 + packages/volto/src/components/manage/Widgets/TokenWidget.jsx | 1 + .../manage/Widgets/__snapshots__/ArrayWidget.test.jsx.snap | 2 ++ .../manage/Widgets/__snapshots__/SelectWidget.test.jsx.snap | 2 ++ .../manage/Widgets/__snapshots__/TokenWidget.test.jsx.snap | 1 + 7 files changed, 9 insertions(+) create mode 100644 packages/volto/news/6332.bugfix diff --git a/packages/volto/news/6332.bugfix b/packages/volto/news/6332.bugfix new file mode 100644 index 0000000000..6b82b6cd5e --- /dev/null +++ b/packages/volto/news/6332.bugfix @@ -0,0 +1 @@ +Labels accessibility for ArrayWidget, SelectWidget, TokenWidget. @folix-01 diff --git a/packages/volto/src/components/manage/Widgets/ArrayWidget.jsx b/packages/volto/src/components/manage/Widgets/ArrayWidget.jsx index 2670cc84bc..dc361195b3 100644 --- a/packages/volto/src/components/manage/Widgets/ArrayWidget.jsx +++ b/packages/volto/src/components/manage/Widgets/ArrayWidget.jsx @@ -314,6 +314,7 @@ class ArrayWidget extends Component { // small fix for https://github.com/clauderic/react-sortable-hoc/pull/352: getHelperDimensions={({ node }) => node.getBoundingClientRect()} id={`field-${this.props.id}`} + aria-labelledby={`fieldset-${this.props.fieldSet}-field-label-${this.props.id}`} key={this.props.id} isDisabled={this.props.disabled || this.props.isDisabled} className="react-select-container" diff --git a/packages/volto/src/components/manage/Widgets/SelectWidget.jsx b/packages/volto/src/components/manage/Widgets/SelectWidget.jsx index 64b0cdea69..0c9d61e12f 100644 --- a/packages/volto/src/components/manage/Widgets/SelectWidget.jsx +++ b/packages/volto/src/components/manage/Widgets/SelectWidget.jsx @@ -224,6 +224,7 @@ class SelectWidget extends Component { id={`field-${id}`} key={choices} name={id} + aria-labelledby={`fieldset-${this.props.fieldSet}-field-label-${id}`} menuShouldScrollIntoView={false} isDisabled={disabled} isSearchable={true} diff --git a/packages/volto/src/components/manage/Widgets/TokenWidget.jsx b/packages/volto/src/components/manage/Widgets/TokenWidget.jsx index b38de6897d..cad1f0bdcb 100644 --- a/packages/volto/src/components/manage/Widgets/TokenWidget.jsx +++ b/packages/volto/src/components/manage/Widgets/TokenWidget.jsx @@ -173,6 +173,7 @@ class TokenWidget extends Component { Date: Sat, 28 Sep 2024 01:17:37 +0200 Subject: [PATCH 025/209] Increased contrast in table block for a11y reasons (#6333) --- packages/volto/cypress/tests/core/blocks/blocks-table.js | 2 +- packages/volto/news/2487.bugfix | 1 + packages/volto/news/6334.bugfix | 1 + .../theme/themes/pastanaga/collections/table.overrides | 7 ++++++- 4 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 packages/volto/news/2487.bugfix create mode 100644 packages/volto/news/6334.bugfix diff --git a/packages/volto/cypress/tests/core/blocks/blocks-table.js b/packages/volto/cypress/tests/core/blocks/blocks-table.js index 43c5f3ee26..97f00622e1 100644 --- a/packages/volto/cypress/tests/core/blocks/blocks-table.js +++ b/packages/volto/cypress/tests/core/blocks/blocks-table.js @@ -29,7 +29,7 @@ describe('Table Block Tests', () => { cy.get('.block-editor-slateTable [role=textbox]') .first() .click() - .should('have.css', 'outline', 'rgb(135, 143, 147) none 0px'); + .should('have.css', 'outline', 'rgba(0, 0, 0, 0.87) none 0px'); cy.get( '.celled.fixed.table thead tr th:first-child() [contenteditable="true"]', diff --git a/packages/volto/news/2487.bugfix b/packages/volto/news/2487.bugfix new file mode 100644 index 0000000000..41812d2d99 --- /dev/null +++ b/packages/volto/news/2487.bugfix @@ -0,0 +1 @@ +Increase specificity of table header style selector to properly override colors for better contrast @jackahl diff --git a/packages/volto/news/6334.bugfix b/packages/volto/news/6334.bugfix new file mode 100644 index 0000000000..f7623395d6 --- /dev/null +++ b/packages/volto/news/6334.bugfix @@ -0,0 +1 @@ +Use lighter blue as link color in inverted tables to improve contrast for a11y @jackahl diff --git a/packages/volto/theme/themes/pastanaga/collections/table.overrides b/packages/volto/theme/themes/pastanaga/collections/table.overrides index 477a761991..15181c1a05 100644 --- a/packages/volto/theme/themes/pastanaga/collections/table.overrides +++ b/packages/volto/theme/themes/pastanaga/collections/table.overrides @@ -6,7 +6,7 @@ } /* Headers */ -.ui.table th { +.ui.table thead th { padding: @headerVerticalPadding @headerHorizontalPadding; border-left: @headerDivider; background: @headerBackground; @@ -34,3 +34,8 @@ .ui.table tr:first-child > th:only-child { border-radius: @borderRadius @borderRadius 0em 0em; } + +/* inline link color*/ +.ui.table.inverted a { + color: @lightPrimaryColor; +} From 6fbd4146b74b14691b70951a74ab91f2c3dad030 Mon Sep 17 00:00:00 2001 From: Andrea Cecchi Date: Sun, 29 Sep 2024 00:22:22 +0200 Subject: [PATCH 026/209] Join validation errors in one single toast and update api error resp (#6295) Co-authored-by: Piero Nicolli --- packages/volto/news/6295.bugfix | 2 + .../volto/src/components/manage/Form/Form.jsx | 53 +++++++++++-------- .../src/components/manage/Toast/Toast.jsx | 4 +- .../Toast/__snapshots__/Toast.test.jsx.snap | 4 +- .../theme/themes/pastanaga/extras/main.less | 5 +- 5 files changed, 40 insertions(+), 28 deletions(-) create mode 100644 packages/volto/news/6295.bugfix diff --git a/packages/volto/news/6295.bugfix b/packages/volto/news/6295.bugfix new file mode 100644 index 0000000000..581fdd5089 --- /dev/null +++ b/packages/volto/news/6295.bugfix @@ -0,0 +1,2 @@ +- Join validation errors in one single toast and update errors from response. @cekk +- Toast content now has a
wrapper instead of a

. @cekk diff --git a/packages/volto/src/components/manage/Form/Form.jsx b/packages/volto/src/components/manage/Form/Form.jsx index 8b108d7dde..41a4c3f97c 100644 --- a/packages/volto/src/components/manage/Form/Form.jsx +++ b/packages/volto/src/components/manage/Form/Form.jsx @@ -274,19 +274,22 @@ class Form extends Component { selected: null, }); } - - if (requestError && prevProps.requestError !== requestError) { + if (requestError) { errors = FormValidation.giveServerErrorsToCorrespondingFields(requestError); - activeIndex = FormValidation.showFirstTabWithErrors({ - errors, - schema: this.props.schema, - }); - - this.setState({ - errors, - activeIndex, - }); + if ( + !isEqual(prevProps.requestError, requestError) || + !isEqual(this.state.errors, errors) + ) { + activeIndex = FormValidation.showFirstTabWithErrors({ + errors, + schema: this.props.schema, + }); + this.setState({ + errors, + activeIndex, + }); + } } if (this.props.onChangeFormData) { @@ -563,13 +566,11 @@ class Form extends Component { } }); } - if (keys(errors).length > 0 || keys(blocksErrors).length > 0) { const activeIndex = FormValidation.showFirstTabWithErrors({ errors, schema: this.props.schema, }); - this.setState({ errors: { ...errors, @@ -580,14 +581,23 @@ class Form extends Component { if (keys(errors).length > 0) { // Changes the focus to the metadata tab in the sidebar if error - Object.keys(errors).forEach((err) => - toast.error( - , - ), + toast.error( + + {Object.keys(errors).map((err, index) => ( +

  • + + {this.props.schema.properties[err].title || err}: + {' '} + {errors[err]} +
  • + ))} + + } + />, ); this.props.setSidebarTab(0); } else if (keys(blocksErrors).length > 0) { @@ -714,7 +724,6 @@ class Form extends Component { const schema = this.removeBlocksLayoutFields(originalSchema); const Container = config.getComponent({ name: 'Container' }).component || SemanticContainer; - return this.props.visual ? ( // Removing this from SSR is important, since react-beautiful-dnd supports SSR, // but draftJS don't like it much and the hydration gets messed up diff --git a/packages/volto/src/components/manage/Toast/Toast.jsx b/packages/volto/src/components/manage/Toast/Toast.jsx index 96f4355656..558eb8bd44 100644 --- a/packages/volto/src/components/manage/Toast/Toast.jsx +++ b/packages/volto/src/components/manage/Toast/Toast.jsx @@ -29,7 +29,7 @@ const Toast = (props) => {
    {title &&

    {title}

    } -

    {content}

    +
    {content}
    ); @@ -37,7 +37,7 @@ const Toast = (props) => { Toast.propTypes = { title: PropTypes.oneOfType([PropTypes.string, PropTypes.array]), - content: PropTypes.string.isRequired, + content: PropTypes.oneOfType([PropTypes.string, PropTypes.object]).isRequired, info: PropTypes.bool, success: PropTypes.bool, error: PropTypes.bool, diff --git a/packages/volto/src/components/manage/Toast/__snapshots__/Toast.test.jsx.snap b/packages/volto/src/components/manage/Toast/__snapshots__/Toast.test.jsx.snap index 1d65445606..3d01fb4fca 100644 --- a/packages/volto/src/components/manage/Toast/__snapshots__/Toast.test.jsx.snap +++ b/packages/volto/src/components/manage/Toast/__snapshots__/Toast.test.jsx.snap @@ -26,9 +26,9 @@ Array [

    I'm a title

    -

    +

    This is the content, lorem ipsum -

    +
    , ] `; diff --git a/packages/volto/theme/themes/pastanaga/extras/main.less b/packages/volto/theme/themes/pastanaga/extras/main.less index 6b1bb30d5b..1062b14845 100644 --- a/packages/volto/theme/themes/pastanaga/extras/main.less +++ b/packages/volto/theme/themes/pastanaga/extras/main.less @@ -367,9 +367,10 @@ button { p { font-weight: 300; } - } - .toast-dismiss-action { + ul { + padding: 0; + } } .Toastify__toast--info { From 51375d59df49a54f1b55375478c4d20575dfb89e Mon Sep 17 00:00:00 2001 From: iRohitSingh <61353484+iRohitSingh@users.noreply.github.com> Date: Sun, 29 Sep 2024 03:58:11 +0530 Subject: [PATCH 027/209] Add language independent field icon. (#6298) --- .../volto/locales/ca/LC_MESSAGES/volto.po | 5 ++++ .../volto/locales/de/LC_MESSAGES/volto.po | 5 ++++ .../volto/locales/en/LC_MESSAGES/volto.po | 5 ++++ .../volto/locales/es/LC_MESSAGES/volto.po | 5 ++++ .../volto/locales/eu/LC_MESSAGES/volto.po | 5 ++++ .../volto/locales/fi/LC_MESSAGES/volto.po | 5 ++++ .../volto/locales/fr/LC_MESSAGES/volto.po | 5 ++++ .../volto/locales/hi/LC_MESSAGES/volto.po | 5 ++++ .../volto/locales/it/LC_MESSAGES/volto.po | 5 ++++ .../volto/locales/ja/LC_MESSAGES/volto.po | 5 ++++ .../volto/locales/nl/LC_MESSAGES/volto.po | 5 ++++ .../volto/locales/pt/LC_MESSAGES/volto.po | 5 ++++ .../volto/locales/pt_BR/LC_MESSAGES/volto.po | 5 ++++ .../volto/locales/ro/LC_MESSAGES/volto.po | 5 ++++ packages/volto/locales/volto.pot | 7 ++++- .../volto/locales/zh_CN/LC_MESSAGES/volto.po | 5 ++++ packages/volto/news/6297.feature | 1 + .../manage/Widgets/FormFieldWrapper.jsx | 26 ++++++++++++++++--- .../themes/pastanaga/extras/widgets.less | 12 +++++++++ 19 files changed, 117 insertions(+), 4 deletions(-) create mode 100644 packages/volto/news/6297.feature diff --git a/packages/volto/locales/ca/LC_MESSAGES/volto.po b/packages/volto/locales/ca/LC_MESSAGES/volto.po index 69687ab2b8..b17def638e 100644 --- a/packages/volto/locales/ca/LC_MESSAGES/volto.po +++ b/packages/volto/locales/ca/LC_MESSAGES/volto.po @@ -1938,6 +1938,11 @@ msgstr "Llenguatge" msgid "Language independent field." msgstr "" +#. Default: "This is a language independent field. Any value you enter here will overwrite the corresponding field of all members of the translation group when you save this form." +#: components/manage/Widgets/FormFieldWrapper +msgid "Language independent icon title" +msgstr "" + #. Default: "Large" #: components/manage/Widgets/ImageSizeWidget msgid "Large" diff --git a/packages/volto/locales/de/LC_MESSAGES/volto.po b/packages/volto/locales/de/LC_MESSAGES/volto.po index d35ff24b4c..bd271eca1a 100644 --- a/packages/volto/locales/de/LC_MESSAGES/volto.po +++ b/packages/volto/locales/de/LC_MESSAGES/volto.po @@ -1937,6 +1937,11 @@ msgstr "Sprache" msgid "Language independent field." msgstr "Sprachunabhängiges Feld." +#. Default: "This is a language independent field. Any value you enter here will overwrite the corresponding field of all members of the translation group when you save this form." +#: components/manage/Widgets/FormFieldWrapper +msgid "Language independent icon title" +msgstr "Dies ist ein sprachunabhängiges Feld. Jeder Wert, den Sie hier eingeben, überschreibt das entsprechende Feld aller Mitglieder der Übersetzungsgruppe, wenn Sie dieses Formular speichern." + #. Default: "Large" #: components/manage/Widgets/ImageSizeWidget msgid "Large" diff --git a/packages/volto/locales/en/LC_MESSAGES/volto.po b/packages/volto/locales/en/LC_MESSAGES/volto.po index a5b40a7988..419d5717b1 100644 --- a/packages/volto/locales/en/LC_MESSAGES/volto.po +++ b/packages/volto/locales/en/LC_MESSAGES/volto.po @@ -1932,6 +1932,11 @@ msgstr "" msgid "Language independent field." msgstr "" +#. Default: "This is a language independent field. Any value you enter here will overwrite the corresponding field of all members of the translation group when you save this form." +#: components/manage/Widgets/FormFieldWrapper +msgid "Language independent icon title" +msgstr "" + #. Default: "Large" #: components/manage/Widgets/ImageSizeWidget msgid "Large" diff --git a/packages/volto/locales/es/LC_MESSAGES/volto.po b/packages/volto/locales/es/LC_MESSAGES/volto.po index 6e284bfd75..5fc3fb54ff 100644 --- a/packages/volto/locales/es/LC_MESSAGES/volto.po +++ b/packages/volto/locales/es/LC_MESSAGES/volto.po @@ -1939,6 +1939,11 @@ msgstr "Idioma" msgid "Language independent field." msgstr "Campo independiente de idioma." +#. Default: "This is a language independent field. Any value you enter here will overwrite the corresponding field of all members of the translation group when you save this form." +#: components/manage/Widgets/FormFieldWrapper +msgid "Language independent icon title" +msgstr "" + #. Default: "Large" #: components/manage/Widgets/ImageSizeWidget msgid "Large" diff --git a/packages/volto/locales/eu/LC_MESSAGES/volto.po b/packages/volto/locales/eu/LC_MESSAGES/volto.po index b7c57b8ee1..77b052e284 100644 --- a/packages/volto/locales/eu/LC_MESSAGES/volto.po +++ b/packages/volto/locales/eu/LC_MESSAGES/volto.po @@ -1939,6 +1939,11 @@ msgstr "Hizkuntza" msgid "Language independent field." msgstr "Hizkuntzarekiko Independentea den eremua." +#. Default: "This is a language independent field. Any value you enter here will overwrite the corresponding field of all members of the translation group when you save this form." +#: components/manage/Widgets/FormFieldWrapper +msgid "Language independent icon title" +msgstr "" + #. Default: "Large" #: components/manage/Widgets/ImageSizeWidget msgid "Large" diff --git a/packages/volto/locales/fi/LC_MESSAGES/volto.po b/packages/volto/locales/fi/LC_MESSAGES/volto.po index 16a81a822c..5db5c4cbee 100644 --- a/packages/volto/locales/fi/LC_MESSAGES/volto.po +++ b/packages/volto/locales/fi/LC_MESSAGES/volto.po @@ -1937,6 +1937,11 @@ msgstr "Kieli" msgid "Language independent field." msgstr "Kieliriippumaton kenttä" +#. Default: "This is a language independent field. Any value you enter here will overwrite the corresponding field of all members of the translation group when you save this form." +#: components/manage/Widgets/FormFieldWrapper +msgid "Language independent icon title" +msgstr "" + #. Default: "Large" #: components/manage/Widgets/ImageSizeWidget msgid "Large" diff --git a/packages/volto/locales/fr/LC_MESSAGES/volto.po b/packages/volto/locales/fr/LC_MESSAGES/volto.po index b405214240..4887b87ff4 100644 --- a/packages/volto/locales/fr/LC_MESSAGES/volto.po +++ b/packages/volto/locales/fr/LC_MESSAGES/volto.po @@ -1939,6 +1939,11 @@ msgstr "Langage" msgid "Language independent field." msgstr "Champ indépendant de la langue." +#. Default: "This is a language independent field. Any value you enter here will overwrite the corresponding field of all members of the translation group when you save this form." +#: components/manage/Widgets/FormFieldWrapper +msgid "Language independent icon title" +msgstr "" + #. Default: "Large" #: components/manage/Widgets/ImageSizeWidget msgid "Large" diff --git a/packages/volto/locales/hi/LC_MESSAGES/volto.po b/packages/volto/locales/hi/LC_MESSAGES/volto.po index c21aa3608f..ced8be4109 100644 --- a/packages/volto/locales/hi/LC_MESSAGES/volto.po +++ b/packages/volto/locales/hi/LC_MESSAGES/volto.po @@ -1932,6 +1932,11 @@ msgstr "भाषा" msgid "Language independent field." msgstr "भाषा स्वतंत्र क्षेत्र।" +#. Default: "This is a language independent field. Any value you enter here will overwrite the corresponding field of all members of the translation group when you save this form." +#: components/manage/Widgets/FormFieldWrapper +msgid "Language independent icon title" +msgstr "" + #. Default: "Large" #: components/manage/Widgets/ImageSizeWidget msgid "Large" diff --git a/packages/volto/locales/it/LC_MESSAGES/volto.po b/packages/volto/locales/it/LC_MESSAGES/volto.po index fbdee8436e..45c86020ba 100644 --- a/packages/volto/locales/it/LC_MESSAGES/volto.po +++ b/packages/volto/locales/it/LC_MESSAGES/volto.po @@ -1932,6 +1932,11 @@ msgstr "Lingua" msgid "Language independent field." msgstr "Campo indipendete dalla lingua" +#. Default: "This is a language independent field. Any value you enter here will overwrite the corresponding field of all members of the translation group when you save this form." +#: components/manage/Widgets/FormFieldWrapper +msgid "Language independent icon title" +msgstr "" + #. Default: "Large" #: components/manage/Widgets/ImageSizeWidget msgid "Large" diff --git a/packages/volto/locales/ja/LC_MESSAGES/volto.po b/packages/volto/locales/ja/LC_MESSAGES/volto.po index 60d63a02e7..9a13ea1265 100644 --- a/packages/volto/locales/ja/LC_MESSAGES/volto.po +++ b/packages/volto/locales/ja/LC_MESSAGES/volto.po @@ -1937,6 +1937,11 @@ msgstr "言語" msgid "Language independent field." msgstr "" +#. Default: "This is a language independent field. Any value you enter here will overwrite the corresponding field of all members of the translation group when you save this form." +#: components/manage/Widgets/FormFieldWrapper +msgid "Language independent icon title" +msgstr "" + #. Default: "Large" #: components/manage/Widgets/ImageSizeWidget msgid "Large" diff --git a/packages/volto/locales/nl/LC_MESSAGES/volto.po b/packages/volto/locales/nl/LC_MESSAGES/volto.po index c6330673c2..a7d79f4271 100644 --- a/packages/volto/locales/nl/LC_MESSAGES/volto.po +++ b/packages/volto/locales/nl/LC_MESSAGES/volto.po @@ -1936,6 +1936,11 @@ msgstr "Taal" msgid "Language independent field." msgstr "" +#. Default: "This is a language independent field. Any value you enter here will overwrite the corresponding field of all members of the translation group when you save this form." +#: components/manage/Widgets/FormFieldWrapper +msgid "Language independent icon title" +msgstr "" + #. Default: "Large" #: components/manage/Widgets/ImageSizeWidget msgid "Large" diff --git a/packages/volto/locales/pt/LC_MESSAGES/volto.po b/packages/volto/locales/pt/LC_MESSAGES/volto.po index f7350c0098..0c0d9f1b74 100644 --- a/packages/volto/locales/pt/LC_MESSAGES/volto.po +++ b/packages/volto/locales/pt/LC_MESSAGES/volto.po @@ -1937,6 +1937,11 @@ msgstr "Idioma" msgid "Language independent field." msgstr "" +#. Default: "This is a language independent field. Any value you enter here will overwrite the corresponding field of all members of the translation group when you save this form." +#: components/manage/Widgets/FormFieldWrapper +msgid "Language independent icon title" +msgstr "" + #. Default: "Large" #: components/manage/Widgets/ImageSizeWidget msgid "Large" diff --git a/packages/volto/locales/pt_BR/LC_MESSAGES/volto.po b/packages/volto/locales/pt_BR/LC_MESSAGES/volto.po index 36222ddb91..4957f58bff 100644 --- a/packages/volto/locales/pt_BR/LC_MESSAGES/volto.po +++ b/packages/volto/locales/pt_BR/LC_MESSAGES/volto.po @@ -1938,6 +1938,11 @@ msgstr "Idioma" msgid "Language independent field." msgstr "Campo independente da linguagem." +#. Default: "This is a language independent field. Any value you enter here will overwrite the corresponding field of all members of the translation group when you save this form." +#: components/manage/Widgets/FormFieldWrapper +msgid "Language independent icon title" +msgstr "" + #. Default: "Large" #: components/manage/Widgets/ImageSizeWidget msgid "Large" diff --git a/packages/volto/locales/ro/LC_MESSAGES/volto.po b/packages/volto/locales/ro/LC_MESSAGES/volto.po index 4ccc25cc34..1eeefe866b 100644 --- a/packages/volto/locales/ro/LC_MESSAGES/volto.po +++ b/packages/volto/locales/ro/LC_MESSAGES/volto.po @@ -1932,6 +1932,11 @@ msgstr "Limba" msgid "Language independent field." msgstr "Câmp independent de limbă." +#. Default: "This is a language independent field. Any value you enter here will overwrite the corresponding field of all members of the translation group when you save this form." +#: components/manage/Widgets/FormFieldWrapper +msgid "Language independent icon title" +msgstr "" + #. Default: "Large" #: components/manage/Widgets/ImageSizeWidget msgid "Large" diff --git a/packages/volto/locales/volto.pot b/packages/volto/locales/volto.pot index 7e870490fc..a700a289e7 100644 --- a/packages/volto/locales/volto.pot +++ b/packages/volto/locales/volto.pot @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Plone\n" -"POT-Creation-Date: 2024-08-10T17:00:27.117Z\n" +"POT-Creation-Date: 2024-09-19T10:10:37.548Z\n" "Last-Translator: Plone i18n \n" "Language-Team: Plone i18n \n" "Content-Type: text/plain; charset=utf-8\n" @@ -1934,6 +1934,11 @@ msgstr "" msgid "Language independent field." msgstr "" +#. Default: "This is a language independent field. Any value you enter here will overwrite the corresponding field of all members of the translation group when you save this form." +#: components/manage/Widgets/FormFieldWrapper +msgid "Language independent icon title" +msgstr "" + #. Default: "Large" #: components/manage/Widgets/ImageSizeWidget msgid "Large" diff --git a/packages/volto/locales/zh_CN/LC_MESSAGES/volto.po b/packages/volto/locales/zh_CN/LC_MESSAGES/volto.po index cddef470f6..26986f3cb8 100644 --- a/packages/volto/locales/zh_CN/LC_MESSAGES/volto.po +++ b/packages/volto/locales/zh_CN/LC_MESSAGES/volto.po @@ -1938,6 +1938,11 @@ msgstr "语言" msgid "Language independent field." msgstr "语言独立字段" +#. Default: "This is a language independent field. Any value you enter here will overwrite the corresponding field of all members of the translation group when you save this form." +#: components/manage/Widgets/FormFieldWrapper +msgid "Language independent icon title" +msgstr "" + #. Default: "Large" #: components/manage/Widgets/ImageSizeWidget msgid "Large" diff --git a/packages/volto/news/6297.feature b/packages/volto/news/6297.feature new file mode 100644 index 0000000000..e509917a3c --- /dev/null +++ b/packages/volto/news/6297.feature @@ -0,0 +1 @@ +Add language independent field icon. @iRohitSingh \ No newline at end of file diff --git a/packages/volto/src/components/manage/Widgets/FormFieldWrapper.jsx b/packages/volto/src/components/manage/Widgets/FormFieldWrapper.jsx index ee60438be4..732b4ba281 100644 --- a/packages/volto/src/components/manage/Widgets/FormFieldWrapper.jsx +++ b/packages/volto/src/components/manage/Widgets/FormFieldWrapper.jsx @@ -8,6 +8,8 @@ import { Form, Grid, Icon as IconOld, Label } from 'semantic-ui-react'; import { map } from 'lodash'; import cx from 'classnames'; import { defineMessages, injectIntl } from 'react-intl'; +import LanguageSVG from '@plone/volto/icons/language.svg'; +import { Icon } from '@plone/volto/components'; const messages = defineMessages({ edit: { @@ -22,6 +24,11 @@ const messages = defineMessages({ id: 'Language independent field.', defaultMessage: 'Language independent field.', }, + language_independent_icon_title: { + id: 'Language independent icon title', + defaultMessage: + 'This is a language independent field. Any value you enter here will overwrite the corresponding field of all members of the translation group when you save this form.', + }, }); /** * FormFieldWrapper component class. @@ -91,6 +98,9 @@ class FormFieldWrapper extends Component { noForInFieldLabel, multilingual_options, } = this.props; + + const languageIndependent = multilingual_options?.language_independent; + const wdg = ( <> {this.props.children} @@ -112,9 +122,7 @@ class FormFieldWrapper extends Component { description ? 'help' : '', className, `field-wrapper-${id}`, - multilingual_options?.language_independent - ? 'language-independent-field' - : null, + languageIndependent ? 'language-independent-field' : null, )} > @@ -133,6 +141,18 @@ class FormFieldWrapper extends Component { /> )} {title} + {languageIndependent && ( +
    + +
    + )} diff --git a/packages/volto/theme/themes/pastanaga/extras/widgets.less b/packages/volto/theme/themes/pastanaga/extras/widgets.less index 5026708212..586e4df775 100644 --- a/packages/volto/theme/themes/pastanaga/extras/widgets.less +++ b/packages/volto/theme/themes/pastanaga/extras/widgets.less @@ -280,3 +280,15 @@ body.babel-view .field.language-independent-field { } } } + +// ### FormFieldWrapper ### +.language-independent-field .wrapper > label { + display: flex !important; + align-items: center; + justify-content: space-between; + + .languageIndependent-icon { + display: flex; + margin-left: 8px; + } +} From 430c99573f6a96bbb9574b9cc960104410dd1068 Mon Sep 17 00:00:00 2001 From: Gianni Cozzolongo <32923977+gianniftp@users.noreply.github.com> Date: Sun, 29 Sep 2024 09:23:54 +0200 Subject: [PATCH 028/209] Updated Italian translations (#6342) Co-authored-by: Piero Nicolli --- .../volto/locales/it/LC_MESSAGES/volto.po | 74 +++++++++---------- packages/volto/news/ 6342.feature | 1 + 2 files changed, 38 insertions(+), 37 deletions(-) create mode 100644 packages/volto/news/ 6342.feature diff --git a/packages/volto/locales/it/LC_MESSAGES/volto.po b/packages/volto/locales/it/LC_MESSAGES/volto.po index 45c86020ba..060c5ba03e 100644 --- a/packages/volto/locales/it/LC_MESSAGES/volto.po +++ b/packages/volto/locales/it/LC_MESSAGES/volto.po @@ -589,7 +589,7 @@ msgstr "Modifiche salvate." #. Default: "Check this box to customize the title, description, or image of the target content item for this teaser. Leave it unchecked to show updates to the target content item if it is edited later." #: components/manage/Blocks/Teaser/schema msgid "Check this box to customize the title, description, or image of the target content item for this teaser. Leave it unchecked to show updates to the target content item if it is edited later." -msgstr "" +msgstr "Seleziona questa casella per personalizzare il titolo, la descrizione o l'immagine dell'oggetto di riferimento per questo teaser. Lascia la casella vuota per mostrare automaticamente gli aggiornamenti del contenuto se viene modificato in seguito." #. Default: "Checkbox" #: components/manage/Widgets/SchemaWidget @@ -874,7 +874,7 @@ msgstr "Password corrente" #. Default: "Customize teaser content" #: components/manage/Blocks/Teaser/schema msgid "Customize teaser content" -msgstr "" +msgstr "Personalizza il contenuto del teaser" #. Default: "Cut" #: components/manage/Actions/Actions @@ -986,7 +986,7 @@ msgstr "Elimina utente" #. Default: "Action deleted" #: components/manage/Controlpanels/Rules/ConfigureRule msgid "Delete action" -msgstr "Cancella azione" +msgstr "Elimina azione" #. Default: "Delete blocks" #: helpers/MessageLabels/MessageLabels @@ -1011,12 +1011,12 @@ msgstr "Elimina riga" #. Default: "Delete selected items?" #: components/manage/Contents/Contents msgid "Delete selected items?" -msgstr "" +msgstr "Vuoi cancellare l'elemento selezionato?" #. Default: "Delete this item?" #: components/manage/Contents/Contents msgid "Delete this item?" -msgstr "" +msgstr "Vuoi cancellare questo elemento?" #. Default: "Deleted" #: components/manage/Controlpanels/Rules/Rules @@ -1322,7 +1322,7 @@ msgstr "Inserisci il tuo username per la verifica." #. Default: "Entries" #: components/manage/Blocks/ToC/Schema msgid "Entries" -msgstr "" +msgstr "Elementi" #. Default: "Error" #: components/manage/Add/Add @@ -1353,7 +1353,7 @@ msgstr "Evento" #. Default: "Event end date must be on or after {startDateValueOrStartFieldName}" #: helpers/MessageLabels/MessageLabels msgid "Event end date must be on or after {startDateValueOrStartFieldName}" -msgstr "" +msgstr "La data di fine evento deve essere uguale o successiva al {startDateValueOrStartFieldName}" #. Default: "Event listing" #: config/Views @@ -1363,7 +1363,7 @@ msgstr "Elenco eventi" #. Default: "Event start date must be on or before {endDateValueOrEndFieldName}" #: helpers/MessageLabels/MessageLabels msgid "Event start date must be on or before {endDateValueOrEndFieldName}" -msgstr "" +msgstr "La data di inizio evento essere uguale o precedente al {endDateValueOrEndFieldName}" #. Default: "Event view" #: config/Views @@ -1605,7 +1605,7 @@ msgstr "Gruppo creato" #. Default: "Group deleted" #: helpers/MessageLabels/MessageLabels msgid "Group deleted" -msgstr "" +msgstr "Gruppo eliminato" #. Default: "Group roles updated" #: helpers/MessageLabels/MessageLabels @@ -1670,7 +1670,7 @@ msgstr "Nascondi i filtri" #. Default: "Hide title" #: components/manage/Blocks/ToC/Schema msgid "Hide title" -msgstr "" +msgstr "Nascondi il titolo" #. Default: "History" #: components/manage/History/History @@ -1863,12 +1863,12 @@ msgstr "Blocco non valido - Salvando, verrà rimosso" #. Default: "Invalid teaser source" #: components/manage/Blocks/Teaser/Data msgid "Invalid teaser source" -msgstr "" +msgstr "Sorgente non valida per il teaser" #. Default: "It is not allowed to define both the password and to request sending the password reset message by e-mail. You need to select one of them." #: helpers/MessageLabels/MessageLabels msgid "It is not allowed to define both the password and to request sending the password reset message by e-mail. You need to select one of them." -msgstr "" +msgstr "Non è consentito effettuare contemporaneamente l'inserimento della password e la richiesta dell'invio del messaggio di reimpostazione della password tramite e-mail. È necessario selezionare una di esse." #. Default: "Item batch size" #: components/manage/Widgets/QuerystringWidget @@ -2012,7 +2012,7 @@ msgstr "Vista collegamento" #. Default: "Link settings" #: components/manage/Blocks/Image/schema msgid "Link settings" -msgstr "" +msgstr "Impostazioni Link" #. Default: "Link Title" #: components/manage/Blocks/Listing/schema @@ -2103,7 +2103,7 @@ msgstr "Nome utente" #. Default: "Logo of" #: components/theme/Logo/Logo msgid "Logo of" -msgstr "" +msgstr "Logo di" #. Default: "Logout" #: components/manage/Toolbar/PersonalTools @@ -2523,7 +2523,7 @@ msgstr "Ordine" #. Default: "Ordered" #: components/manage/Blocks/ToC/Schema msgid "Ordered" -msgstr "" +msgstr "Ordinato" #. Default: "Origin" #: components/manage/Blocks/LeadImage/LeadImageSidebar @@ -2787,7 +2787,7 @@ msgstr "Elementi collegati a questo contenuto in {relationship}" #. Default: "Refresh source content" #: components/manage/Blocks/Teaser/Data msgid "Refresh source content" -msgstr "" +msgstr "Ricarica il sorgente del contenuto" #. Default: "Register" #: components/theme/Anontools/Anontools @@ -3229,7 +3229,7 @@ msgstr "Invia una mail di conferma con un link per impostare la password." #. Default: "Server Error" #: components/theme/Error/ServerError msgid "Server Error" -msgstr "" +msgstr "Errore del Server" #. Default: "Set my password" #: components/theme/PasswordReset/PasswordReset @@ -3375,7 +3375,7 @@ msgstr "Piccolo" #. Default: "Some items are also a folder. By deleting them you will delete {containedItemsToDelete} {variation} inside the folders." #: components/manage/Contents/Contents msgid "Some items are also a folder. By deleting them you will delete {containedItemsToDelete} {variation} inside the folders." -msgstr "" +msgstr "Alcuni elementi sono anche una cartella. Eliminandoli eliminerai {containedItemsToDelete} {variation} dentro le cartelle." #. Default: "Some items are referenced by other contents. By deleting them {brokenReferences} {variation} will be broken." #: components/manage/Contents/Contents @@ -3427,7 +3427,7 @@ msgstr "Ordinato" #. Default: "Sorted on" #: components/manage/Blocks/Search/components/SortOn msgid "Sorted on" -msgstr "" +msgstr "Ordina in base a" #. Default: "Source" #: components/manage/Blocks/HTML/Edit @@ -3477,7 +3477,7 @@ msgstr "Status" #. Default: "Sticky" #: components/manage/Blocks/ToC/Schema msgid "Sticky" -msgstr "" +msgstr "Persistente" #. Default: "Stop compare" #: components/manage/Multilingual/CompareLanguages @@ -3507,7 +3507,7 @@ msgstr "Oggetto" #. Default: "Submit" #: components/manage/AnchorPlugin/components/LinkButton/AddLinkForm msgid "Submit" -msgstr "" +msgstr "Invia" #. Default: "Success" #: components/manage/Actions/Actions @@ -3673,12 +3673,12 @@ msgstr "L'indirizzo del collegamento è:" #. Default: "The number of items must be greater than or equal to {minItems}" #: helpers/MessageLabels/MessageLabels msgid "The number of items must be greater than or equal to {minItems}" -msgstr "" +msgstr "Il numero di elementi deve essere maggiore o uguale a {minItems}" #. Default: "The number of items must be less than or equal to {maxItems}" #: helpers/MessageLabels/MessageLabels msgid "The number of items must be less than or equal to {maxItems}" -msgstr "" +msgstr "Il numero di elementi deve essere minore o uguale a {maxItems}" #. Default: "The provided alternative url already exists!" #: components/manage/Aliases/Aliases @@ -3699,7 +3699,7 @@ msgstr "La configurazione del sito è obsoleta e deve essere aggiornata." #. Default: "The value does not match the pattern {pattern}" #: helpers/MessageLabels/MessageLabels msgid "The value does not match the pattern {pattern}" -msgstr "" +msgstr "I valori non corrispondono al pattern {pattern}" #. Default: "The working copy was discarded" #: components/manage/Toolbar/More @@ -3714,18 +3714,18 @@ msgstr "{plonecms} è {copyright} 2000-{current_year} della {plonefoundation} ed #. Default: "There are no groups with the searched criteria" #: helpers/MessageLabels/MessageLabels msgid "There are no groups with the searched criteria" -msgstr "" +msgstr "Non ci sono gruppi con i criteri ricercati" #. Default: "There are no users with the searched criteria" #: helpers/MessageLabels/MessageLabels msgid "There are no users with the searched criteria" -msgstr "" +msgstr "Non ci sono utenti con i criteri ricercati" #. Default: "There are some errors." #: components/manage/Add/Add #: components/manage/Edit/Edit msgid "There are some errors." -msgstr "" +msgstr "Ci sono degli errori." #. Default: "There is a configuration problem on the backend" #: components/theme/CorsError/CorsError @@ -4008,7 +4008,7 @@ msgstr "Aggiorna" #. Default: "Update User" #: helpers/MessageLabels/MessageLabels msgid "Update User" -msgstr "" +msgstr "Aggiorna Utente" #. Default: "Update installed addons" #: components/manage/Controlpanels/AddonsControlpanel @@ -4106,7 +4106,7 @@ msgstr "Utente creato" #. Default: "User deleted" #: helpers/MessageLabels/MessageLabels msgid "User deleted" -msgstr "" +msgstr "Utente eliminato" #. Default: "User name" #: components/manage/Controlpanels/Users/UsersControlpanel @@ -4121,7 +4121,7 @@ msgstr "Ruoli utente aggiornati" #. Default: "User updated successfuly" #: helpers/MessageLabels/MessageLabels msgid "User updated successfuly" -msgstr "" +msgstr "Utente aggiornato con successo" #. Default: "Username" #: helpers/MessageLabels/MessageLabels @@ -4180,7 +4180,7 @@ msgstr "Mostra le modifiche" #. Default: "View links and references to this item" #: components/manage/Contents/Contents msgid "View links and references to this item" -msgstr "" +msgstr "Visualizza i collegamenti e i riferimenti a questo elemento" #. Default: "View this revision" #: components/manage/History/History @@ -4549,7 +4549,7 @@ msgstr "elimina intIds e ricrea le relazioni" #. Default: "
    • Regenerate intIds (tokens of relations in relation catalog)
    • Rebuild relations

    Check the log for details!

    Warning: If you have add-ons relying on intIds, you should not flush them.

    " #: helpers/MessageLabels/MessageLabels msgid "flushAndRebuildRelationsHints" -msgstr "" +msgstr "
    • Rigenera intIds (i token delle relazioni nel catalogo delle relazioni)
    • Ricrea le relazioni

    Controlla il log per i dettagli!

    Attenzione: Se ci sono prodotti aggiuntivi che hanno bisogno degli intIds, non dovresti eliminarli.

    " #. Default: "Head title" #: components/manage/Blocks/Teaser/schema @@ -4599,12 +4599,12 @@ msgstr "Pubblicato internamente" #. Default: "item" #: components/manage/Contents/Contents msgid "item" -msgstr "" +msgstr "elemento" #. Default: "items" #: components/manage/Contents/Contents msgid "items" -msgstr "" +msgstr "elementi" #. Default: "My email is" #: components/theme/PasswordReset/RequestPasswordReset @@ -4748,12 +4748,12 @@ msgstr "ricrea le relazioni" #. Default: "reference" #: components/manage/Contents/Contents msgid "reference" -msgstr "" +msgstr "riferimento" #. Default: "references" #: components/manage/Contents/Contents msgid "references" -msgstr "" +msgstr "riferimenti" #. Default: "results" #: components/theme/Search/Search @@ -4973,7 +4973,7 @@ msgstr "percorso di destinazione" #. Default: "Text" #: config/Blocks msgid "text" -msgstr "" +msgstr "Testo" #. Default: "Title" #: config/Blocks diff --git a/packages/volto/news/ 6342.feature b/packages/volto/news/ 6342.feature new file mode 100644 index 0000000000..2c6681332a --- /dev/null +++ b/packages/volto/news/ 6342.feature @@ -0,0 +1 @@ +Updated Italian Italian translations. @gianniftp From ef34ef2d37ee3dbec6e46500c93f250291aa86ea Mon Sep 17 00:00:00 2001 From: David Glick Date: Sun, 29 Sep 2024 16:31:15 -0700 Subject: [PATCH 029/209] Update refs to old cookiecutter in docs (#6352) Merging as the failing tests have nothing to do with this change. --- docs/source/contributing/developing-core.md | 20 ++++++++++++-------- packages/volto/news/6289.documentation | 1 + 2 files changed, 13 insertions(+), 8 deletions(-) create mode 100644 packages/volto/news/6289.documentation diff --git a/docs/source/contributing/developing-core.md b/docs/source/contributing/developing-core.md index eb79d97c8a..c00abaa0f1 100644 --- a/docs/source/contributing/developing-core.md +++ b/docs/source/contributing/developing-core.md @@ -330,13 +330,6 @@ By default, the use of TypeScript is required in Plone frontend libraries, Volto The monorepository consists of several core libraries. -### Volto project generator - -`@plone/generator-volto` is a Yeoman generator that helps you set up Volto via command line. -It generates all the boilerplate needed to start developing a Plone Volto project. -It is used by [CookieCutter Plone Starter](https://github.com/collective/cookiecutter-plone-starter), the recommended way to set up Plone projects. -The generator features an `addon` template for scaffolding Volto add-ons in your projects. - ### Registry `@plone/registry` provides support for building an add-on registry and infrastructure for JavaScript and TypeScript-based apps. @@ -354,6 +347,17 @@ Used by Volto, you can also use it in other JavaScript frameworks and environmen `@plone/volto-slate` is the glue package that provides support for the Slate library in Volto. +### Volto project generator + +`@plone/generator-volto` is a Yeoman generator that helps you set up Volto via command line. +It generates all the boilerplate needed to start developing a Plone Volto project. +It is used by [CookieCutter Plone Starter](https://github.com/collective/cookiecutter-plone-starter), the recommended way to set up Plone projects. +The generator features an `addon` template for scaffolding Volto add-ons in your projects. + +```{deprecated} 18.0.0-alpha.43 +For Volto 18, `@plone/generator-volto` is replaced by [Cookieplone](https://github.com/plone/cookieplone). +``` + ## Supported frontends @@ -362,7 +366,7 @@ Volto is the default frontend, and is React-based. Classic UI is the Python-based, server-side rendered frontend. In Volto's `apps` folder, you'll find a Volto project scaffolding that uses Volto as a library. -This is the same as that which you'll have when you run the Volto generator or `cookiecutter-plone-starter`. +This is the same as that which you'll have when you follow the instructions in {doc}`plone:install/create-project`). ## Experimental frontends diff --git a/packages/volto/news/6289.documentation b/packages/volto/news/6289.documentation new file mode 100644 index 0000000000..59d97b6da5 --- /dev/null +++ b/packages/volto/news/6289.documentation @@ -0,0 +1 @@ +Update references to cookiecutter-plone-starter in docs. @davisagli From 8aff340d809d2334ae2bb30609f0f50fc6631856 Mon Sep 17 00:00:00 2001 From: Steve Piercy Date: Tue, 1 Oct 2024 04:16:51 -0700 Subject: [PATCH 030/209] Fix the syntax for the label `upgrade-18-cookieplone-label` (#6360) --- docs/source/upgrade-guide/index.md | 2 +- packages/volto/news/6360.documentation | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 packages/volto/news/6360.documentation diff --git a/docs/source/upgrade-guide/index.md b/docs/source/upgrade-guide/index.md index e2bac7815c..ddea900417 100644 --- a/docs/source/upgrade-guide/index.md +++ b/docs/source/upgrade-guide/index.md @@ -451,7 +451,7 @@ The `Tags` component has been moved to the `belowContent` slot. It now receives the `content` property instead of the `tags` property. -{upgrade-18-cookieplone-label}= +(upgrade-18-cookieplone-label)= ### Cookieplone is now the recommended project and add-on generator for Volto 18 diff --git a/packages/volto/news/6360.documentation b/packages/volto/news/6360.documentation new file mode 100644 index 0000000000..f6a02c99e4 --- /dev/null +++ b/packages/volto/news/6360.documentation @@ -0,0 +1 @@ +- Fix the MyST syntax for the label `upgrade-18-cookieplone-label`. @stevepiercy From 78a26aa7355e67c04a80e92f89a74334f83fca30 Mon Sep 17 00:00:00 2001 From: Giulia Ghisini <51911425+giuliaghisini@users.noreply.github.com> Date: Wed, 2 Oct 2024 13:46:18 +0200 Subject: [PATCH 031/209] fix: build_classnames in edit mode (#6259) Co-authored-by: ichim-david --- packages/volto/news/6259.bugfix | 1 + .../components/manage/Blocks/Block/EditBlockWrapper.jsx | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 packages/volto/news/6259.bugfix diff --git a/packages/volto/news/6259.bugfix b/packages/volto/news/6259.bugfix new file mode 100644 index 0000000000..9a9158fcc6 --- /dev/null +++ b/packages/volto/news/6259.bugfix @@ -0,0 +1 @@ +- Fixed build style classnames in edit mode. Also use buildStyleClassNamesExtenders. @giuliaghisini diff --git a/packages/volto/src/components/manage/Blocks/Block/EditBlockWrapper.jsx b/packages/volto/src/components/manage/Blocks/Block/EditBlockWrapper.jsx index 31508127bf..5fd3ab2adb 100644 --- a/packages/volto/src/components/manage/Blocks/Block/EditBlockWrapper.jsx +++ b/packages/volto/src/components/manage/Blocks/Block/EditBlockWrapper.jsx @@ -6,6 +6,7 @@ import { blockHasValue, buildStyleClassNamesFromData, buildStyleObjectFromData, + buildStyleClassNamesExtenders, } from '@plone/volto/helpers'; import dragSVG from '@plone/volto/icons/drag.svg'; import { Button } from 'semantic-ui-react'; @@ -61,7 +62,12 @@ const EditBlockWrapper = (props) => { ? data.required : includes(config.blocks.requiredBlocks, type); - const classNames = buildStyleClassNamesFromData(data.styles); + let classNames = buildStyleClassNamesFromData(data.styles); + classNames = buildStyleClassNamesExtenders({ + block, + data, + classNames, + }); const style = buildStyleObjectFromData(data.styles); // We need to merge the StyleWrapper styles with the draggable props from b-D&D From 1af4acef91e10604a782bbcc874dfe2468819065 Mon Sep 17 00:00:00 2001 From: Steve Piercy Date: Wed, 2 Oct 2024 08:50:54 -0700 Subject: [PATCH 032/209] Fix spelling of prerequisites (#6362) --- docs/source/contributing/developing-core.md | 4 ++-- packages/volto/news/6362.documentation | 1 + styles/Vocab/Plone/reject.txt | 1 + 3 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 packages/volto/news/6362.documentation diff --git a/docs/source/contributing/developing-core.md b/docs/source/contributing/developing-core.md index c00abaa0f1..44b387b761 100644 --- a/docs/source/contributing/developing-core.md +++ b/docs/source/contributing/developing-core.md @@ -71,9 +71,9 @@ Volto has the following folder structure. ``` -## Development pre-requisites +## Development prerequisites -To set up a Volto core development environment, your system must satisfy the following pre-requisites. +To set up a Volto core development environment, your system must satisfy the following prerequisites. ```{include} ./install-operating-system.md ``` diff --git a/packages/volto/news/6362.documentation b/packages/volto/news/6362.documentation new file mode 100644 index 0000000000..c37ab93222 --- /dev/null +++ b/packages/volto/news/6362.documentation @@ -0,0 +1 @@ +Fixed spelling of prerequisites. @stevepiercy diff --git a/styles/Vocab/Plone/reject.txt b/styles/Vocab/Plone/reject.txt index 1cefa812f0..81510d55a8 100644 --- a/styles/Vocab/Plone/reject.txt +++ b/styles/Vocab/Plone/reject.txt @@ -1,2 +1,3 @@ [^.]js NodeJS +[Pp]re-requisite From c3e5be1db26f7865e3777cca4210a21bfd39f4b2 Mon Sep 17 00:00:00 2001 From: peralta <129250086+aadityaforwork@users.noreply.github.com> Date: Wed, 2 Oct 2024 22:28:37 +0530 Subject: [PATCH 033/209] vscode/settings.json markdown added (#6357) Co-authored-by: Steve Piercy --- packages/scripts/news/6354.documentation | 1 + packages/scripts/vscodesettings.js | 16 ++++++++++++---- pnpm-lock.yaml | 2 +- 3 files changed, 14 insertions(+), 5 deletions(-) create mode 100644 packages/scripts/news/6354.documentation diff --git a/packages/scripts/news/6354.documentation b/packages/scripts/news/6354.documentation new file mode 100644 index 0000000000..b643f0ac32 --- /dev/null +++ b/packages/scripts/news/6354.documentation @@ -0,0 +1 @@ +Added the configuration for VSCode not to reformat Markdown and MyST files. @aadityaforwork \ No newline at end of file diff --git a/packages/scripts/vscodesettings.js b/packages/scripts/vscodesettings.js index ebcc8cec08..2df03c41b8 100644 --- a/packages/scripts/vscodesettings.js +++ b/packages/scripts/vscodesettings.js @@ -13,9 +13,17 @@ if (fs.existsSync('.vscode')) { if (!vscodeSettingsJSON['eslint.workingDirectories']) { vscodeSettingsJSON['eslint.workingDirectories'] = [{ mode: 'auto' }]; +} - fs.writeFileSync( - '.vscode/settings.json', - `${stringify(vscodeSettingsJSON, null, 2)}`, - ); +if (!vscodeSettingsJSON['[markdown]']) { + vscodeSettingsJSON['[markdown]'] = { + 'editor.formatOnSave': false, + }; +} else { + vscodeSettingsJSON['[markdown]']['editor.formatOnSave'] = false; } + +fs.writeFileSync( + '.vscode/settings.json', + `${stringify(vscodeSettingsJSON, null, 2)}`, +); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 013c2c131a..21d9875b8e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -44371,4 +44371,4 @@ snapshots: zod@3.22.5: {} - zwitch@2.0.4: {} + zwitch@2.0.4: {} \ No newline at end of file From 913a084ffb9ec62fc8559cbad0035afc9ca97a73 Mon Sep 17 00:00:00 2001 From: Jefferson Bledsoe Date: Wed, 2 Oct 2024 21:10:25 +0100 Subject: [PATCH 034/209] Add outline to toolbar buttons (#6313) Co-authored-by: Piero Nicolli --- packages/volto/news/6313.bugfix | 1 + .../theme/themes/pastanaga/extras/toolbar.less | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 packages/volto/news/6313.bugfix diff --git a/packages/volto/news/6313.bugfix b/packages/volto/news/6313.bugfix new file mode 100644 index 0000000000..134d5727c5 --- /dev/null +++ b/packages/volto/news/6313.bugfix @@ -0,0 +1 @@ +Fixed toolbar buttons not having a focus outline. @JeffersonBledsoe diff --git a/packages/volto/theme/themes/pastanaga/extras/toolbar.less b/packages/volto/theme/themes/pastanaga/extras/toolbar.less index 0d25297239..9b1d5e6f03 100644 --- a/packages/volto/theme/themes/pastanaga/extras/toolbar.less +++ b/packages/volto/theme/themes/pastanaga/extras/toolbar.less @@ -283,16 +283,28 @@ body:not(.has-sidebar):not(.has-sidebar-collapsed) { .toolbar-content, .toolbar { - button { + button, + a { // Default reset for button padding: 0; border: 0; background: transparent; + box-shadow: unset !important; // Some buttons have double outlines due to default styles. Safely disable those styles here. cursor: pointer; text-align: initial; + svg { + display: block; // SVGs are inline by default, causing the spacing to be odd + margin: 0; // Some SVGs have margin set by default styles. + } + &:focus-visible { - outline: 1px auto; + outline: 2px solid black; + outline-offset: 2px; + + &:has(.circled) { + border-radius: 50%; + } } } } From ff84416d69d89bb86fd36e378a52f27be31f2c40 Mon Sep 17 00:00:00 2001 From: Piero Nicolli Date: Wed, 2 Oct 2024 22:11:56 +0200 Subject: [PATCH 035/209] Fixed client copy mutation, cleanup up move mutation for consistency (#6349) --- packages/client/news/6349.bugfix | 1 + .../client/src/restapi/copymove/copy.test.tsx | 4 +-- packages/client/src/restapi/copymove/copy.ts | 28 +++++++++---------- packages/client/src/restapi/copymove/move.ts | 22 +++++---------- packages/client/src/validation/copymove.ts | 5 +++- 5 files changed, 27 insertions(+), 33 deletions(-) create mode 100644 packages/client/news/6349.bugfix diff --git a/packages/client/news/6349.bugfix b/packages/client/news/6349.bugfix new file mode 100644 index 0000000000..47f5249e59 --- /dev/null +++ b/packages/client/news/6349.bugfix @@ -0,0 +1 @@ +Fixed client copy mutation, cleanup up move mutation for consistency @pnicolli diff --git a/packages/client/src/restapi/copymove/copy.test.tsx b/packages/client/src/restapi/copymove/copy.test.tsx index e278ad3d88..0c79277546 100644 --- a/packages/client/src/restapi/copymove/copy.test.tsx +++ b/packages/client/src/restapi/copymove/copy.test.tsx @@ -43,7 +43,7 @@ describe('[POST] Copy', () => { }); act(() => { - result.current.mutate({ data: copyData }); + result.current.mutate({ path: '/', data: copyData }); }); await waitFor(() => expect(result.current.isSuccess).toBe(true)); @@ -80,7 +80,7 @@ describe('[POST] Copy', () => { }); act(() => { - result.current.mutate({ data: copyMultipleData }); + result.current.mutate({ path: '/', data: copyMultipleData }); }); await waitFor(() => expect(result.current.isSuccess).toBe(true)); diff --git a/packages/client/src/restapi/copymove/copy.ts b/packages/client/src/restapi/copymove/copy.ts index 3935275dd5..bf300f958f 100644 --- a/packages/client/src/restapi/copymove/copy.ts +++ b/packages/client/src/restapi/copymove/copy.ts @@ -1,37 +1,35 @@ import { z } from 'zod'; import { ApiRequestParams, apiRequest } from '../../API'; -import { - PloneClientConfig, - PloneClientConfigSchema, -} from '../../validation/config'; +import { PloneClientConfig } from '../../validation/config'; import { copyMoveDataSchema as copyDataSchema } from '../../validation/copymove'; import { CopyMoveResponse as CopyResponse } from '@plone/types'; -export const copyArgsSchema = z.object({ - data: copyDataSchema, - config: PloneClientConfigSchema, -}); - -export type CopyArgs = z.infer; +export type CopyArgs = z.infer & { + config: PloneClientConfig; +}; export const copy = async ({ + path, data, config, }: CopyArgs): Promise => { - const validatedArgs = copyArgsSchema.parse({ + const validatedArgs = copyDataSchema.parse({ + path, data, - config, }); const options: ApiRequestParams = { + config, data: validatedArgs.data, - config: validatedArgs.config, }; - return apiRequest('post', '/@copy', options); + const copyPath = `${validatedArgs.path}/@copy`; + + return apiRequest('post', copyPath, options); }; export const copyMutation = ({ config }: { config: PloneClientConfig }) => ({ mutationKey: ['post', 'copy'], - mutationFn: ({ data }: Omit) => copy({ data, config }), + mutationFn: ({ path, data }: Omit) => + copy({ path, data, config }), }); diff --git a/packages/client/src/restapi/copymove/move.ts b/packages/client/src/restapi/copymove/move.ts index 3f9e3ceea7..6f1015caad 100644 --- a/packages/client/src/restapi/copymove/move.ts +++ b/packages/client/src/restapi/copymove/move.ts @@ -1,37 +1,29 @@ import { z } from 'zod'; import { ApiRequestParams, apiRequest } from '../../API'; -import { - PloneClientConfig, - PloneClientConfigSchema, -} from '../../validation/config'; +import { PloneClientConfig } from '../../validation/config'; import { copyMoveDataSchema as moveDataSchema } from '../../validation/copymove'; import { CopyMoveResponse as MoveResponse } from '@plone/types'; -export const MoveArgsSchema = z.object({ - path: z.string(), - data: moveDataSchema, - config: PloneClientConfigSchema, -}); - -export type MoveArgs = z.infer; +export type MoveArgs = z.infer & { + config: PloneClientConfig; +}; export const move = async ({ path, data, config, }: MoveArgs): Promise => { - const validatedArgs = MoveArgsSchema.parse({ + const validatedArgs = moveDataSchema.parse({ path, data, - config, }); const options: ApiRequestParams = { + config, data: validatedArgs.data, - config: validatedArgs.config, }; - const movePath = `/${validatedArgs.path}/@move`; + const movePath = `${validatedArgs.path}/@move`; return apiRequest('post', movePath, options); }; diff --git a/packages/client/src/validation/copymove.ts b/packages/client/src/validation/copymove.ts index ee27382a81..f712bd708a 100644 --- a/packages/client/src/validation/copymove.ts +++ b/packages/client/src/validation/copymove.ts @@ -1,5 +1,8 @@ import { z } from 'zod'; export const copyMoveDataSchema = z.object({ - source: z.union([z.string(), z.array(z.string())]), + path: z.string(), + data: z.object({ + source: z.union([z.string(), z.array(z.string())]), + }), }); From 6e498dec450ffe747b5bae7308362d879e7e59f4 Mon Sep 17 00:00:00 2001 From: Wesley Barroso Lopes Date: Thu, 3 Oct 2024 03:51:55 -0300 Subject: [PATCH 036/209] Fetch user before pass it to the restricted function (#6293) --- packages/volto-slate/news/6293.bugfix | 1 + .../volto-slate/src/blocks/Text/SlashMenu.jsx | 4 ++-- packages/volto/news/6293.bugfix | 1 + .../manage/BlockChooser/BlockChooser.jsx | 4 ++-- .../manage/BlockChooser/BlockChooser.test.jsx | 4 ++++ packages/volto/src/hooks/index.js | 1 + packages/volto/src/hooks/user/useUser.js | 23 +++++++++++++++++++ 7 files changed, 34 insertions(+), 4 deletions(-) create mode 100644 packages/volto-slate/news/6293.bugfix create mode 100644 packages/volto/news/6293.bugfix create mode 100644 packages/volto/src/hooks/user/useUser.js diff --git a/packages/volto-slate/news/6293.bugfix b/packages/volto-slate/news/6293.bugfix new file mode 100644 index 0000000000..ea8503c548 --- /dev/null +++ b/packages/volto-slate/news/6293.bugfix @@ -0,0 +1 @@ +Fetch `user` before pass it to the `restricted` function of the block settings. @wesleybl diff --git a/packages/volto-slate/src/blocks/Text/SlashMenu.jsx b/packages/volto-slate/src/blocks/Text/SlashMenu.jsx index 2a26c39cfe..9ec1612304 100644 --- a/packages/volto-slate/src/blocks/Text/SlashMenu.jsx +++ b/packages/volto-slate/src/blocks/Text/SlashMenu.jsx @@ -4,7 +4,7 @@ import { filter, isEmpty } from 'lodash'; import { Menu } from 'semantic-ui-react'; import { useIntl, FormattedMessage } from 'react-intl'; import { Icon } from '@plone/volto/components'; -import { useSelector } from 'react-redux'; +import { useUser } from '@plone/volto/hooks'; const emptySlateBlock = () => ({ value: [ @@ -111,7 +111,7 @@ const PersistentSlashMenu = ({ editor }) => { } = props; const disableNewBlocks = data?.disableNewBlocks || detached; - const user = useSelector((state) => state.users?.user); + const user = useUser(); const [slashMenuSelected, setSlashMenuSelected] = React.useState(0); diff --git a/packages/volto/news/6293.bugfix b/packages/volto/news/6293.bugfix new file mode 100644 index 0000000000..ea8503c548 --- /dev/null +++ b/packages/volto/news/6293.bugfix @@ -0,0 +1 @@ +Fetch `user` before pass it to the `restricted` function of the block settings. @wesleybl diff --git a/packages/volto/src/components/manage/BlockChooser/BlockChooser.jsx b/packages/volto/src/components/manage/BlockChooser/BlockChooser.jsx index 80c5142e81..2ae878e5ba 100644 --- a/packages/volto/src/components/manage/BlockChooser/BlockChooser.jsx +++ b/packages/volto/src/components/manage/BlockChooser/BlockChooser.jsx @@ -1,5 +1,5 @@ import React from 'react'; -import { useSelector } from 'react-redux'; +import { useUser } from '@plone/volto/hooks'; import PropTypes from 'prop-types'; import { filter, map, groupBy, isEmpty } from 'lodash'; import { Accordion, Button } from 'semantic-ui-react'; @@ -36,7 +36,7 @@ const BlockChooser = ({ contentType, }) => { const intl = useIntl(); - const user = useSelector((state) => state.users?.user); + const user = useUser(); const hasAllowedBlocks = !isEmpty(allowedBlocks); const filteredBlocksConfig = filter(blocksConfig, (item) => { diff --git a/packages/volto/src/components/manage/BlockChooser/BlockChooser.test.jsx b/packages/volto/src/components/manage/BlockChooser/BlockChooser.test.jsx index 447c20f61d..d2bd1bbe5a 100644 --- a/packages/volto/src/components/manage/BlockChooser/BlockChooser.test.jsx +++ b/packages/volto/src/components/manage/BlockChooser/BlockChooser.test.jsx @@ -4,6 +4,7 @@ import { Provider } from 'react-intl-redux'; import configureStore from 'redux-mock-store'; import BlockChooser from './BlockChooser'; import config from '@plone/volto/registry'; +import jwt from 'jsonwebtoken'; const blockSVG = {}; @@ -121,6 +122,9 @@ const store = mockStore({ locale: 'en', messages: {}, }, + userSession: { + token: jwt.sign({ fullname: 'John Doe' }, 'secret'), + }, }); describe('BlocksChooser', () => { diff --git a/packages/volto/src/hooks/index.js b/packages/volto/src/hooks/index.js index a955aa8285..f8e327c0e6 100644 --- a/packages/volto/src/hooks/index.js +++ b/packages/volto/src/hooks/index.js @@ -1,2 +1,3 @@ export { default as useClipboard } from '@plone/volto/hooks/clipboard/useClipboard'; export { useClient } from '@plone/volto/hooks/client/useClient'; +export { default as useUser } from '@plone/volto/hooks/user/useUser'; diff --git a/packages/volto/src/hooks/user/useUser.js b/packages/volto/src/hooks/user/useUser.js new file mode 100644 index 0000000000..3232ed0a8e --- /dev/null +++ b/packages/volto/src/hooks/user/useUser.js @@ -0,0 +1,23 @@ +import { useEffect } from 'react'; +import { useDispatch, useSelector } from 'react-redux'; +import jwtDecode from 'jwt-decode'; +import { getUser } from '@plone/volto/actions'; + +const useUser = () => { + const users = useSelector((state) => state.users); + const user = users?.user; + const userId = useSelector((state) => + state.userSession.token ? jwtDecode(state.userSession.token).sub : '', + ); + const dispatch = useDispatch(); + + useEffect(() => { + if (!user?.id && users?.get.loading === false) { + dispatch(getUser(userId)); + } + }, [dispatch, userId, user, users?.get.loading]); + + return user; +}; + +export default useUser; From 52a23bd2de3ad671975f5db5778f6f0ccdabf3a2 Mon Sep 17 00:00:00 2001 From: Steve Piercy Date: Wed, 2 Oct 2024 23:54:19 -0700 Subject: [PATCH 037/209] =?UTF-8?q?Fix=20lexer=20language=20in=20upgrade?= =?UTF-8?q?=20guide=20for=20Field=20validation=20in=20blocks=20ex=E2=80=A6?= =?UTF-8?q?=20(#6367)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/upgrade-guide/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/upgrade-guide/index.md b/docs/source/upgrade-guide/index.md index ddea900417..407cf8fe48 100644 --- a/docs/source/upgrade-guide/index.md +++ b/docs/source/upgrade-guide/index.md @@ -395,7 +395,7 @@ If you shadowed the module {file}`packages/volto/src/helpers/FormValidation/Form This prop must be assigned with the new prop passed down from the blocks engine `blocksErrors`. If not passed down, the block can't display any field validation error. -```tsx +```jsx // More component code above here const { From dc787b181369d4a6af1b91f13bbc1524a6af7df3 Mon Sep 17 00:00:00 2001 From: Steve Piercy Date: Thu, 3 Oct 2024 00:28:46 -0700 Subject: [PATCH 038/209] Fix links to Vite website (#6366) --- apps/vite-ssr/README.md | 2 +- apps/vite/README.md | 2 +- packages/volto/news/6366.documentation | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 packages/volto/news/6366.documentation diff --git a/apps/vite-ssr/README.md b/apps/vite-ssr/README.md index 2894982c36..ec603dc2af 100644 --- a/apps/vite-ssr/README.md +++ b/apps/vite-ssr/README.md @@ -1,6 +1,6 @@ # Plone on Vite with SSR mode -This is a proof of concept of a [Vite](https://vitejs.dev) build, using `@plone/client` and `@plone/components` libraries. +This is a proof of concept of a [Vite](https://vite.dev/) build, using `@plone/client` and `@plone/components` libraries. This is intended to serve as both a playground for the development of both packages and as a demo of Plone using Vite built with server side rendering (SSR). It also uses [TanStack Router](https://tanstack.com/router/latest/docs/framework/react/overview) for its routing library. diff --git a/apps/vite/README.md b/apps/vite/README.md index 417e695ef3..97978cb92e 100644 --- a/apps/vite/README.md +++ b/apps/vite/README.md @@ -1,6 +1,6 @@ # Plone on Vite -This is a proof of concept of a [Vite](https://vitejs.dev) build, using `@plone/client` and `@plone/components` libraries. +This is a proof of concept of a [Vite](https://vite.dev/) build, using `@plone/client` and `@plone/components` libraries. This is intended to serve as both a playground for the development of both packages and as a demo of Plone using Vite. It also uses [TanStack Router](https://tanstack.com/router/latest/docs/framework/react/overview) for its routing library. diff --git a/packages/volto/news/6366.documentation b/packages/volto/news/6366.documentation new file mode 100644 index 0000000000..93d39a686f --- /dev/null +++ b/packages/volto/news/6366.documentation @@ -0,0 +1 @@ +Fix links to Vite website. @stevepiercy From dbdb5971a5ceb874ba580b05d97f2ad87c23fdb9 Mon Sep 17 00:00:00 2001 From: dobri1408 <50819975+dobri1408@users.noreply.github.com> Date: Thu, 3 Oct 2024 10:58:46 +0300 Subject: [PATCH 039/209] improve DiffField.jsx with better support for displaying HTML elements such as images (#6309) Co-authored-by: Ichim David --- packages/volto/news/6309.feature | 1 + .../src/components/manage/Diff/DiffField.jsx | 206 ++++++++++++++---- .../Diff/__snapshots__/Diff.test.jsx.snap | 21 +- .../__snapshots__/DiffField.test.jsx.snap | 60 ++--- 4 files changed, 193 insertions(+), 95 deletions(-) create mode 100644 packages/volto/news/6309.feature diff --git a/packages/volto/news/6309.feature b/packages/volto/news/6309.feature new file mode 100644 index 0000000000..370011edb9 --- /dev/null +++ b/packages/volto/news/6309.feature @@ -0,0 +1 @@ +Improve DiffField.jsx to render only the blocks on the page with better support for displaying HTML elements such as images. @dobri1408 diff --git a/packages/volto/src/components/manage/Diff/DiffField.jsx b/packages/volto/src/components/manage/Diff/DiffField.jsx index 23582788d3..a9bad2afb2 100644 --- a/packages/volto/src/components/manage/Diff/DiffField.jsx +++ b/packages/volto/src/components/manage/Diff/DiffField.jsx @@ -4,7 +4,6 @@ */ import React from 'react'; -// import { diffWords as dWords } from 'diff'; import { join, map } from 'lodash'; import PropTypes from 'prop-types'; import { Grid } from 'semantic-ui-react'; @@ -13,20 +12,128 @@ import { Provider } from 'react-intl-redux'; import { createBrowserHistory } from 'history'; import { ConnectedRouter } from 'connected-react-router'; import { useSelector } from 'react-redux'; - +import config from '@plone/volto/registry'; import { Api } from '@plone/volto/helpers'; import configureStore from '@plone/volto/store'; -import { DefaultView } from '@plone/volto/components/'; +import { RenderBlocks } from '@plone/volto/components'; import { serializeNodes } from '@plone/volto-slate/editor/render'; - import { injectLazyLibs } from '@plone/volto/helpers/Loadable/Loadable'; -/** - * Enhanced diff words utility - * @function diffWords - * @param oneStr Field one - * @param twoStr Field two - */ +const isHtmlTag = (str) => { + // Match complete HTML tags, including: + // 1. Opening tags like
    , , ... + // 2. Self-closing tags like ,
    + // 3. Closing tags like
    + return /^<([a-zA-Z]+[0-9]*)\b[^>]*>|^<\/([a-zA-Z]+[0-9]*)\b[^>]*>$|^<([a-zA-Z]+[0-9]*)\b[^>]*\/>$/.test( + str, + ); +}; + +const splitWords = (str) => { + if (typeof str !== 'string') return str; + if (!str) return []; + + const result = []; + let currentWord = ''; + let insideTag = false; + let insideSpecialTag = false; + let tagBuffer = ''; + + // Special tags that should not be split (e.g., , ... ) + const specialTags = ['img', 'svg']; + + for (let i = 0; i < str.length; i++) { + const char = str[i]; + + // Start of an HTML tag + if (char === '<') { + if (currentWord) { + result.push(currentWord); // Push text before the tag + currentWord = ''; + } + insideTag = true; + tagBuffer += char; + } + // End of an HTML tag + else if (char === '>') { + tagBuffer += char; + insideTag = false; + + // Check if the tagBuffer contains a special tag + const tagNameMatch = tagBuffer.match(/^<\/?([a-zA-Z]+[0-9]*)\b/); + if (tagNameMatch && specialTags.includes(tagNameMatch[1])) { + insideSpecialTag = + tagNameMatch[0].startsWith('<') && !tagNameMatch[0].startsWith(' { + if (!isHtmlTag(value)) { + if (part.removed && (side === 'left' || side === 'unified')) { + return `${value}`; + } else if (part.removed) return ''; + else if (part.added && (side === 'right' || side === 'unified')) { + return `${value}`; + } else if (part.added) return ''; + return value; + } else { + if (side === 'unified' && part.added) return value; + else if (side === 'unified' && part.removed) return ''; + if (part.removed && side === 'left') { + return value; + } else if (part.removed) return ''; + else if (part.added && side === 'right') { + return value; + } else if (part.added) return ''; + return value; + } +}; /** * Diff field component. @@ -36,6 +143,7 @@ import { injectLazyLibs } from '@plone/volto/helpers/Loadable/Loadable'; * @param {Object} schema Field schema * @returns {string} Markup of the component. */ + const DiffField = ({ one, two, @@ -51,7 +159,10 @@ const DiffField = ({ timeStyle: 'short', }; const diffWords = (oneStr, twoStr) => { - return diffLib.diffWords(String(oneStr), String(twoStr)); + return diffLib.diffArrays( + splitWords(String(oneStr)), + splitWords(String(twoStr)), + ); }; let parts, oneArray, twoArray; @@ -78,14 +189,14 @@ const DiffField = ({ ReactDOMServer.renderToStaticMarkup( - + , ), ReactDOMServer.renderToStaticMarkup( - + , ), @@ -116,7 +227,30 @@ const DiffField = ({ } case 'textarea': default: - parts = diffWords(one, two); + const Widget = config.widgets?.views?.widget?.[schema.widget]; + + if (Widget) { + const api = new Api(); + const history = createBrowserHistory(); + const store = configureStore(window.__data, history, api); + parts = diffWords( + ReactDOMServer.renderToStaticMarkup( + + + + + , + ), + ReactDOMServer.renderToStaticMarkup( + + + + + , + ), + ); + } else parts = diffWords(one, two); + break; } } else if (schema.type === 'object') { @@ -128,6 +262,7 @@ const DiffField = ({ } else { parts = diffWords(one?.title || one, two?.title || two); } + return ( @@ -140,14 +275,12 @@ const DiffField = ({ - (part.removed && - `${part.value}`) || - (!part.added && `${part.value}`) || - '', - ), + map(parts, (part) => { + let combined = (part.value || []).reduce((acc, value) => { + return acc + formatDiffPart(part, value, 'left'); + }, ''); + return combined; + }), '', ), }} @@ -157,14 +290,12 @@ const DiffField = ({ - (part.added && - `${part.value}`) || - (!part.removed && `${part.value}`) || - '', - ), + map(parts, (part) => { + let combined = (part.value || []).reduce((acc, value) => { + return acc + formatDiffPart(part, value, 'right'); + }, ''); + return combined; + }), '', ), }} @@ -178,15 +309,12 @@ const DiffField = ({ - (part.removed && - `${part.value}`) || - (part.added && - `${part.value}`) || - (!part.added && `${part.value}`), - ), + map(parts, (part) => { + let combined = (part.value || []).reduce((acc, value) => { + return acc + formatDiffPart(part, value, 'unified'); + }, ''); + return combined; + }), '', ), }} diff --git a/packages/volto/src/components/manage/Diff/__snapshots__/Diff.test.jsx.snap b/packages/volto/src/components/manage/Diff/__snapshots__/Diff.test.jsx.snap index 8512803d3c..8f3ea9474a 100644 --- a/packages/volto/src/components/manage/Diff/__snapshots__/Diff.test.jsx.snap +++ b/packages/volto/src/components/manage/Diff/__snapshots__/Diff.test.jsx.snap @@ -232,16 +232,17 @@ exports[`Diff renders a diff component 1`] = ` class="top aligned six wide column" > - - My - + My old - - title + + + title @@ -249,21 +250,17 @@ exports[`Diff renders a diff component 1`] = ` class="top aligned six wide column" > - - My - + My new - - title - + - , + title, diff --git a/packages/volto/src/components/manage/Diff/__snapshots__/DiffField.test.jsx.snap b/packages/volto/src/components/manage/Diff/__snapshots__/DiffField.test.jsx.snap index 2bbf810620..0871f46671 100644 --- a/packages/volto/src/components/manage/Diff/__snapshots__/DiffField.test.jsx.snap +++ b/packages/volto/src/components/manage/Diff/__snapshots__/DiffField.test.jsx.snap @@ -103,16 +103,14 @@ exports[`DiffField renders a datetime field 1`] = ` - Tuesday + Tuesday, - Monday - - - , April 25, + Monday, + April 25, @@ -123,9 +121,7 @@ exports[`DiffField renders a datetime field 1`] = ` > 2016 - - at 2:14 PM - + at 2:14 PM @@ -155,34 +151,26 @@ exports[`DiffField renders a diff field in split mode 1`] = ` class="top aligned six wide column" > - - My - + My old - - string - + string
    - - My - + My new - - string - + string
    @@ -212,9 +200,7 @@ exports[`DiffField renders a diff field in unified mode 1`] = ` class="top aligned sixteen wide column" > - - My - + My @@ -225,9 +211,7 @@ exports[`DiffField renders a diff field in unified mode 1`] = ` > new - - string - + string @@ -257,9 +241,7 @@ exports[`DiffField renders a richtext field 1`] = ` class="top aligned sixteen wide column" > - - My - + My @@ -270,9 +252,7 @@ exports[`DiffField renders a richtext field 1`] = ` > new - - string - + string @@ -302,9 +282,7 @@ exports[`DiffField renders a textarea field 1`] = ` class="top aligned sixteen wide column" > - - My - + My @@ -315,9 +293,7 @@ exports[`DiffField renders a textarea field 1`] = ` > new - - string - + string @@ -347,9 +323,7 @@ exports[`DiffField renders an array field 1`] = ` class="top aligned sixteen wide column" > - - one, - + one, @@ -389,9 +363,7 @@ exports[`DiffField renders an array of objects field 1`] = ` class="top aligned sixteen wide column" > - - one, - + one, From 1b8328cc0029f092525f6791d5458665b5008a4b Mon Sep 17 00:00:00 2001 From: Steve Piercy Date: Thu, 3 Oct 2024 01:12:15 -0700 Subject: [PATCH 040/209] Add a pull request template as a checklist before submitting a PR (#6365) --- .github/PULL_REQUEST_TEMPLATE.md | 15 +++++++++++++++ packages/volto/news/6365.internal | 1 + 2 files changed, 16 insertions(+) create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 packages/volto/news/6365.internal diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000000..24ab7677d5 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,15 @@ +- [ ] I signed and returned the [Plone Contributor Agreement](https://plone.org/foundation/contributors-agreement), and received and accepted an invitation to join a team in the Plone GitHub organization. +- [ ] I verified there aren't other open [pull requests](https://github.com/plone/volto/pulls) for the same change. +- [ ] I followed the guidelines in [Contributing to Volto](https://6.docs.plone.org/volto/contributing/index.html). +- [ ] I succesfully ran [code linting checks](https://6.docs.plone.org/volto/contributing/linting.html) on my changes locally. +- [ ] I succesfully ran [unit tests](https://6.docs.plone.org/volto/contributing/testing.html) on my changes locally. +- [ ] I succesfully ran [acceptance tests](https://6.docs.plone.org/volto/contributing/acceptance-tests.html) on my changes locally. +- [ ] If needed, I added new tests for my changes. +- [ ] If needed, I added [documentation](https://6.docs.plone.org/volto/contributing/documentation.html#narrative-documentation) for my changes, either in the Storybook or narrative documentation. +- [ ] I included a [change log entry](https://6.docs.plone.org/contributing/index.html#contributing-change-log-label) in my commits. + +----- + +If your pull request closes an open issue, include the exact text below, immediately followed by the issue number. When your pull request gets merged, then that issue will close automatically. + +Closes # diff --git a/packages/volto/news/6365.internal b/packages/volto/news/6365.internal new file mode 100644 index 0000000000..bffba0bc34 --- /dev/null +++ b/packages/volto/news/6365.internal @@ -0,0 +1 @@ +Added a pull request template as a checklist before submitting a PR. @stevepiercy From b0bb51e4ac109cd9889ae0cf04dd152a4de1eb6b Mon Sep 17 00:00:00 2001 From: Nilesh Date: Thu, 3 Oct 2024 15:34:41 +0530 Subject: [PATCH 041/209] fix(SideBarPopup): close sidebarPopup on ESC keypress (#6315) --- packages/volto/news/6315.bugfix | 1 + .../src/components/manage/Sidebar/SidebarPopup.jsx | 10 +++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 packages/volto/news/6315.bugfix diff --git a/packages/volto/news/6315.bugfix b/packages/volto/news/6315.bugfix new file mode 100644 index 0000000000..969e260532 --- /dev/null +++ b/packages/volto/news/6315.bugfix @@ -0,0 +1 @@ +fix: SidebarPopup close on ESC keypress @nileshgulia1 \ No newline at end of file diff --git a/packages/volto/src/components/manage/Sidebar/SidebarPopup.jsx b/packages/volto/src/components/manage/Sidebar/SidebarPopup.jsx index f963dfb1ff..5c08377b7e 100644 --- a/packages/volto/src/components/manage/Sidebar/SidebarPopup.jsx +++ b/packages/volto/src/components/manage/Sidebar/SidebarPopup.jsx @@ -16,6 +16,13 @@ const SidebarPopup = (props) => { onClose(); }; + const handleEscapeKey = (e) => { + if (open && e.key === 'Escape') { + onClose(); + e.stopPropagation(); + } + }; + const [isClient, setIsClient] = React.useState(false); React.useEffect(() => { setIsClient(true); @@ -23,11 +30,12 @@ const SidebarPopup = (props) => { React.useEffect(() => { document.addEventListener('mousedown', handleClickOutside, false); + document.addEventListener('keyup', handleEscapeKey, false); return () => { document.removeEventListener('mousedown', handleClickOutside, false); + document.removeEventListener('keyup', handleEscapeKey, false); }; }); - return ( <> {overlay && ( From 4d927863a91763f0d3ff0ea847fc60ca5448ad5c Mon Sep 17 00:00:00 2001 From: Victor Fernandez de Alba Date: Thu, 3 Oct 2024 12:15:51 +0200 Subject: [PATCH 042/209] Release @plone/client 1.0.0-alpha.18 --- packages/client/CHANGELOG.md | 6 ++++++ packages/client/news/6349.bugfix | 1 - packages/client/package.json | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) delete mode 100644 packages/client/news/6349.bugfix diff --git a/packages/client/CHANGELOG.md b/packages/client/CHANGELOG.md index 37a57ad33b..236130348d 100644 --- a/packages/client/CHANGELOG.md +++ b/packages/client/CHANGELOG.md @@ -8,6 +8,12 @@ +## 1.0.0-alpha.18 (2024-10-03) + +### Bugfix + +- Fixed client copy mutation, cleanup up move mutation for consistency @pnicolli [#6349](https://github.com/plone/volto/pull/6349) + ## 1.0.0-alpha.17 (2024-09-13) ### Documentation diff --git a/packages/client/news/6349.bugfix b/packages/client/news/6349.bugfix deleted file mode 100644 index 47f5249e59..0000000000 --- a/packages/client/news/6349.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fixed client copy mutation, cleanup up move mutation for consistency @pnicolli diff --git a/packages/client/package.json b/packages/client/package.json index 2b9104397b..e166cb3004 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -8,7 +8,7 @@ } ], "license": "MIT", - "version": "1.0.0-alpha.17", + "version": "1.0.0-alpha.18", "repository": { "type": "git", "url": "git@github.com:plone/volto.git" From d1acac9e60300ff8a89a0f50791906ed6be90a44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Fern=C3=A1ndez=20de=20Alba?= Date: Thu, 3 Oct 2024 12:21:09 +0200 Subject: [PATCH 043/209] Update to RAC 1.4.0, add new components in there + update storybook (#6364) --- packages/components/news/6364.feature | 1 + packages/components/package.json | 8 +- .../ColorArea/ColorArea.stories.tsx | 26 + .../src/components/ColorArea/ColorArea.tsx | 14 + .../ColorField/ColorField.stories.tsx | 26 + .../src/components/ColorField/ColorField.tsx | 32 + .../ColorPicker/ColorPicker.stories.tsx | 27 + .../components/ColorPicker/ColorPicker.tsx | 46 + .../ColorSlider/ColorSlider.stories.tsx | 28 + .../components/ColorSlider/ColorSlider.tsx | 30 + .../ColorSwatch/ColorSwatch.stories.tsx | 26 + .../components/ColorSwatch/ColorSwatch.tsx | 17 + .../ColorSwatchPicker.stories.tsx | 31 + .../ColorSwatchPicker/ColorSwatchPicker.tsx | 26 + .../ColorWheel/ColorWheel.stories.tsx | 26 + .../src/components/ColorWheel/ColorWheel.tsx | 21 + .../Disclosure/Disclosure.stories.tsx | 39 + .../src/components/Disclosure/Disclosure.tsx | 15 + .../DisclosureGroup.stories.tsx | 57 + .../DisclosureGroup/DisclosureGroup.tsx | 15 + .../components/src/styles/basic/ColorArea.css | 34 + .../src/styles/basic/ColorField.css | 49 + .../src/styles/basic/ColorPicker.css | 43 + .../src/styles/basic/ColorSlider.css | 80 + .../src/styles/basic/ColorSwatch.css | 8 + .../src/styles/basic/ColorSwatchPicker.css | 42 + .../src/styles/basic/ColorWheel.css | 28 + .../src/styles/basic/Disclosure.css | 33 + .../src/styles/basic/DisclosureGroup.css | 3 + packages/components/src/styles/basic/main.css | 8 + pnpm-lock.yaml | 3587 +++++++++-------- 31 files changed, 2692 insertions(+), 1734 deletions(-) create mode 100644 packages/components/news/6364.feature create mode 100644 packages/components/src/components/ColorArea/ColorArea.stories.tsx create mode 100644 packages/components/src/components/ColorArea/ColorArea.tsx create mode 100644 packages/components/src/components/ColorField/ColorField.stories.tsx create mode 100644 packages/components/src/components/ColorField/ColorField.tsx create mode 100644 packages/components/src/components/ColorPicker/ColorPicker.stories.tsx create mode 100644 packages/components/src/components/ColorPicker/ColorPicker.tsx create mode 100644 packages/components/src/components/ColorSlider/ColorSlider.stories.tsx create mode 100644 packages/components/src/components/ColorSlider/ColorSlider.tsx create mode 100644 packages/components/src/components/ColorSwatch/ColorSwatch.stories.tsx create mode 100644 packages/components/src/components/ColorSwatch/ColorSwatch.tsx create mode 100644 packages/components/src/components/ColorSwatchPicker/ColorSwatchPicker.stories.tsx create mode 100644 packages/components/src/components/ColorSwatchPicker/ColorSwatchPicker.tsx create mode 100644 packages/components/src/components/ColorWheel/ColorWheel.stories.tsx create mode 100644 packages/components/src/components/ColorWheel/ColorWheel.tsx create mode 100644 packages/components/src/components/Disclosure/Disclosure.stories.tsx create mode 100644 packages/components/src/components/Disclosure/Disclosure.tsx create mode 100644 packages/components/src/components/DisclosureGroup/DisclosureGroup.stories.tsx create mode 100644 packages/components/src/components/DisclosureGroup/DisclosureGroup.tsx create mode 100644 packages/components/src/styles/basic/ColorArea.css create mode 100644 packages/components/src/styles/basic/ColorField.css create mode 100644 packages/components/src/styles/basic/ColorPicker.css create mode 100644 packages/components/src/styles/basic/ColorSlider.css create mode 100644 packages/components/src/styles/basic/ColorSwatch.css create mode 100644 packages/components/src/styles/basic/ColorSwatchPicker.css create mode 100644 packages/components/src/styles/basic/ColorWheel.css create mode 100644 packages/components/src/styles/basic/Disclosure.css create mode 100644 packages/components/src/styles/basic/DisclosureGroup.css diff --git a/packages/components/news/6364.feature b/packages/components/news/6364.feature new file mode 100644 index 0000000000..9bb95dcbd6 --- /dev/null +++ b/packages/components/news/6364.feature @@ -0,0 +1 @@ +Update RAC to 1.4.0 - Added new `Disclosure` component and new Color widgets @sneridagh diff --git a/packages/components/package.json b/packages/components/package.json index 34e00c6126..88719f32e6 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -116,11 +116,11 @@ "vitest-axe": "^0.1.0" }, "dependencies": { - "@react-aria/utils": "^3.22.0", - "@react-spectrum/utils": "^3.11.1", + "@react-aria/utils": "^3.25.3", + "@react-spectrum/utils": "^3.11.11", "@storybook/test": "^8.0.4", - "clsx": "^2.0.0", - "react-aria-components": "^1.2.0" + "clsx": "^2.1.1", + "react-aria-components": "^1.4.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0", diff --git a/packages/components/src/components/ColorArea/ColorArea.stories.tsx b/packages/components/src/components/ColorArea/ColorArea.stories.tsx new file mode 100644 index 0000000000..b4ac8b95ea --- /dev/null +++ b/packages/components/src/components/ColorArea/ColorArea.stories.tsx @@ -0,0 +1,26 @@ +import * as React from 'react'; +import { ColorArea } from './ColorArea'; + +import type { Meta, StoryObj } from '@storybook/react'; + +import '../../styles/basic/ColorArea.css'; + +const meta = { + title: 'Widgets/ColorArea', + component: ColorArea, + parameters: { + layout: 'centered', + }, + tags: ['autodocs'], +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + render: (args: any) => , +}; + +Default.args = { + defaultValue: 'hsl(30, 100%, 50%)', +}; diff --git a/packages/components/src/components/ColorArea/ColorArea.tsx b/packages/components/src/components/ColorArea/ColorArea.tsx new file mode 100644 index 0000000000..8464766f70 --- /dev/null +++ b/packages/components/src/components/ColorArea/ColorArea.tsx @@ -0,0 +1,14 @@ +import * as React from 'react'; +import { + ColorArea as RACColorArea, + ColorAreaProps, + ColorThumb, +} from 'react-aria-components'; + +export function ColorArea(props: ColorAreaProps) { + return ( + + + + ); +} diff --git a/packages/components/src/components/ColorField/ColorField.stories.tsx b/packages/components/src/components/ColorField/ColorField.stories.tsx new file mode 100644 index 0000000000..6621ebec66 --- /dev/null +++ b/packages/components/src/components/ColorField/ColorField.stories.tsx @@ -0,0 +1,26 @@ +import * as React from 'react'; +import { ColorField } from './ColorField'; + +import type { Meta, StoryObj } from '@storybook/react'; + +import '../../styles/basic/ColorField.css'; + +const meta = { + title: 'Widgets/ColorField', + component: ColorField, + parameters: { + layout: 'centered', + }, + tags: ['autodocs'], +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + render: (args: any) => , +}; + +Default.args = { + label: 'Color', +}; diff --git a/packages/components/src/components/ColorField/ColorField.tsx b/packages/components/src/components/ColorField/ColorField.tsx new file mode 100644 index 0000000000..fff7c0f912 --- /dev/null +++ b/packages/components/src/components/ColorField/ColorField.tsx @@ -0,0 +1,32 @@ +import * as React from 'react'; +import { + ColorField as RACColorField, + ColorFieldProps as RACColorFieldProps, + FieldError, + Input, + Label, + Text, + ValidationResult, +} from 'react-aria-components'; + +export interface ColorFieldProps extends RACColorFieldProps { + label?: string; + description?: string; + errorMessage?: string | ((validation: ValidationResult) => string); +} + +export function ColorField({ + label, + description, + errorMessage, + ...props +}: ColorFieldProps) { + return ( + + {label && } + + {description && {description}} + {errorMessage} + + ); +} diff --git a/packages/components/src/components/ColorPicker/ColorPicker.stories.tsx b/packages/components/src/components/ColorPicker/ColorPicker.stories.tsx new file mode 100644 index 0000000000..1f94cc3a6c --- /dev/null +++ b/packages/components/src/components/ColorPicker/ColorPicker.stories.tsx @@ -0,0 +1,27 @@ +import * as React from 'react'; +import { ColorPicker } from './ColorPicker'; + +import type { Meta, StoryObj } from '@storybook/react'; + +import '../../styles/basic/ColorPicker.css'; + +const meta = { + title: 'Widgets/ColorPicker', + component: ColorPicker, + parameters: { + layout: 'centered', + }, + tags: ['autodocs'], +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + render: (args: any) => , +}; + +Default.args = { + label: 'Fill color', + defaultValue: '#f00', +}; diff --git a/packages/components/src/components/ColorPicker/ColorPicker.tsx b/packages/components/src/components/ColorPicker/ColorPicker.tsx new file mode 100644 index 0000000000..b5256e24c2 --- /dev/null +++ b/packages/components/src/components/ColorPicker/ColorPicker.tsx @@ -0,0 +1,46 @@ +import * as React from 'react'; +import { + Button, + ColorPicker as RACColorPicker, + ColorPickerProps as RACColorPickerProps, + Dialog, + DialogTrigger, + Popover, +} from 'react-aria-components'; +import { ColorSwatch } from '../ColorSwatch/ColorSwatch'; +import { ColorSlider } from '../ColorSlider/ColorSlider'; +import { ColorArea } from '../ColorArea/ColorArea'; +import { ColorField } from '../ColorField/ColorField'; + +export interface ColorPickerProps extends RACColorPickerProps { + label?: string; + children?: React.ReactNode; +} + +export function ColorPicker({ label, children, ...props }: ColorPickerProps) { + return ( + + + + + + {children || ( + <> + + + + + )} + + + + + ); +} diff --git a/packages/components/src/components/ColorSlider/ColorSlider.stories.tsx b/packages/components/src/components/ColorSlider/ColorSlider.stories.tsx new file mode 100644 index 0000000000..a0a363489e --- /dev/null +++ b/packages/components/src/components/ColorSlider/ColorSlider.stories.tsx @@ -0,0 +1,28 @@ +import * as React from 'react'; +import { ColorSlider } from './ColorSlider'; + +import type { Meta, StoryObj } from '@storybook/react'; + +import '../../styles/basic/ColorSlider.css'; + +const meta = { + title: 'Widgets/ColorSlider', + component: ColorSlider, + parameters: { + layout: 'centered', + }, + tags: ['autodocs'], +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + render: (args: any) => , +}; + +Default.args = { + label: 'Red Opacity', + defaultValue: '#f00', + channel: 'alpha', +}; diff --git a/packages/components/src/components/ColorSlider/ColorSlider.tsx b/packages/components/src/components/ColorSlider/ColorSlider.tsx new file mode 100644 index 0000000000..55b81b9351 --- /dev/null +++ b/packages/components/src/components/ColorSlider/ColorSlider.tsx @@ -0,0 +1,30 @@ +import * as React from 'react'; +import { + ColorSlider as RACColorSlider, + ColorSliderProps as RACColorSliderProps, + ColorThumb, + Label, + SliderOutput, + SliderTrack, +} from 'react-aria-components'; + +export interface ColorSliderProps extends RACColorSliderProps { + label?: string; +} + +export function ColorSlider({ label, ...props }: ColorSliderProps) { + return ( + + + + ({ + background: `${defaultStyle.background}, + repeating-conic-gradient(#CCC 0% 25%, white 0% 50%) 50% / 16px 16px`, + })} + > + + + + ); +} diff --git a/packages/components/src/components/ColorSwatch/ColorSwatch.stories.tsx b/packages/components/src/components/ColorSwatch/ColorSwatch.stories.tsx new file mode 100644 index 0000000000..0168fa94f5 --- /dev/null +++ b/packages/components/src/components/ColorSwatch/ColorSwatch.stories.tsx @@ -0,0 +1,26 @@ +import * as React from 'react'; +import { ColorSwatch } from './ColorSwatch'; + +import type { Meta, StoryObj } from '@storybook/react'; + +import '../../styles/basic/ColorSwatch.css'; + +const meta = { + title: 'Widgets/ColorSwatch', + component: ColorSwatch, + parameters: { + layout: 'centered', + }, + tags: ['autodocs'], +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + render: (args: any) => , +}; + +Default.args = { + color: '#f00a', +}; diff --git a/packages/components/src/components/ColorSwatch/ColorSwatch.tsx b/packages/components/src/components/ColorSwatch/ColorSwatch.tsx new file mode 100644 index 0000000000..b80a13c31c --- /dev/null +++ b/packages/components/src/components/ColorSwatch/ColorSwatch.tsx @@ -0,0 +1,17 @@ +import * as React from 'react'; +import { + ColorSwatch as RACColorSwatch, + ColorSwatchProps, +} from 'react-aria-components'; + +export function ColorSwatch(props: ColorSwatchProps) { + return ( + ({ + background: `linear-gradient(${color}, ${color}), + repeating-conic-gradient(#CCC 0% 25%, white 0% 50%) 50% / 16px 16px`, + })} + /> + ); +} diff --git a/packages/components/src/components/ColorSwatchPicker/ColorSwatchPicker.stories.tsx b/packages/components/src/components/ColorSwatchPicker/ColorSwatchPicker.stories.tsx new file mode 100644 index 0000000000..cba4b2a099 --- /dev/null +++ b/packages/components/src/components/ColorSwatchPicker/ColorSwatchPicker.stories.tsx @@ -0,0 +1,31 @@ +import * as React from 'react'; +import { ColorSwatchPicker, ColorSwatchPickerItem } from './ColorSwatchPicker'; + +import type { Meta, StoryObj } from '@storybook/react'; + +import '../../styles/basic/ColorSwatchPicker.css'; + +const meta = { + title: 'Widgets/ColorSwatchPicker', + component: ColorSwatchPicker, + parameters: { + layout: 'centered', + }, + tags: ['autodocs'], +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + render: (args: any) => ( + + + + + + + + + ), +}; diff --git a/packages/components/src/components/ColorSwatchPicker/ColorSwatchPicker.tsx b/packages/components/src/components/ColorSwatchPicker/ColorSwatchPicker.tsx new file mode 100644 index 0000000000..9ecdc9dac1 --- /dev/null +++ b/packages/components/src/components/ColorSwatchPicker/ColorSwatchPicker.tsx @@ -0,0 +1,26 @@ +import * as React from 'react'; +import { + ColorSwatchPicker as AriaColorSwatchPicker, + ColorSwatchPickerItem as AriaColorSwatchPickerItem, + ColorSwatchPickerItemProps, + ColorSwatchPickerProps, +} from 'react-aria-components'; + +import { ColorSwatch } from '../ColorSwatch/ColorSwatch'; + +export function ColorSwatchPicker({ + children, + ...props +}: ColorSwatchPickerProps) { + return {children}; +} + +export { ColorSwatchPicker as MyColorSwatchPicker }; + +export function ColorSwatchPickerItem(props: ColorSwatchPickerItemProps) { + return ( + + + + ); +} diff --git a/packages/components/src/components/ColorWheel/ColorWheel.stories.tsx b/packages/components/src/components/ColorWheel/ColorWheel.stories.tsx new file mode 100644 index 0000000000..5d5d4278c9 --- /dev/null +++ b/packages/components/src/components/ColorWheel/ColorWheel.stories.tsx @@ -0,0 +1,26 @@ +import * as React from 'react'; +import { ColorWheel } from './ColorWheel'; + +import type { Meta, StoryObj } from '@storybook/react'; + +import '../../styles/basic/ColorWheel.css'; + +const meta = { + title: 'Widgets/ColorWheel', + component: ColorWheel, + parameters: { + layout: 'centered', + }, + tags: ['autodocs'], +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + render: (args: any) => , +}; + +Default.args = { + defaultValue: 'hsl(30, 100%, 50%)', +}; diff --git a/packages/components/src/components/ColorWheel/ColorWheel.tsx b/packages/components/src/components/ColorWheel/ColorWheel.tsx new file mode 100644 index 0000000000..a9dff1f543 --- /dev/null +++ b/packages/components/src/components/ColorWheel/ColorWheel.tsx @@ -0,0 +1,21 @@ +import * as React from 'react'; +import { + ColorThumb, + ColorWheel as AriaColorWheel, + ColorWheelProps as AriaColorWheelProps, + ColorWheelTrack, +} from 'react-aria-components'; + +export interface ColorWheelProps + extends Omit {} + +export function ColorWheel(props: ColorWheelProps) { + return ( + + + + + ); +} + +export { ColorWheel as MyColorWheel }; diff --git a/packages/components/src/components/Disclosure/Disclosure.stories.tsx b/packages/components/src/components/Disclosure/Disclosure.stories.tsx new file mode 100644 index 0000000000..6f41082267 --- /dev/null +++ b/packages/components/src/components/Disclosure/Disclosure.stories.tsx @@ -0,0 +1,39 @@ +import * as React from 'react'; +import { Disclosure } from './Disclosure'; +import { + Button, + UNSTABLE_DisclosurePanel as DisclosurePanel, +} from 'react-aria-components'; + +import type { Meta, StoryObj } from '@storybook/react'; + +import '../../styles/basic/Disclosure.css'; + +const meta = { + component: Disclosure, + parameters: { + layout: 'centered', + }, + tags: ['autodocs'], +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + render: (args: any) => ( + +

    + +

    + +

    Details about system requirements here.

    +
    +
    + ), +}; diff --git a/packages/components/src/components/Disclosure/Disclosure.tsx b/packages/components/src/components/Disclosure/Disclosure.tsx new file mode 100644 index 0000000000..8e062a8d61 --- /dev/null +++ b/packages/components/src/components/Disclosure/Disclosure.tsx @@ -0,0 +1,15 @@ +import * as React from 'react'; +import { + UNSTABLE_Disclosure as RACDisclosure, + DisclosureProps, +} from 'react-aria-components'; + +/** + * A Disclosure is used to show or hide content that is not visible by default. + * + * NOTE: This component is in alpha in RAC thus it's unstable and is subjects of change + * in the API, behavior, and appearance. + */ +export function Disclosure(props: DisclosureProps) { + return ; +} diff --git a/packages/components/src/components/DisclosureGroup/DisclosureGroup.stories.tsx b/packages/components/src/components/DisclosureGroup/DisclosureGroup.stories.tsx new file mode 100644 index 0000000000..1871ade147 --- /dev/null +++ b/packages/components/src/components/DisclosureGroup/DisclosureGroup.stories.tsx @@ -0,0 +1,57 @@ +import * as React from 'react'; +import { DisclosureGroup } from './DisclosureGroup'; +import { + Button, + UNSTABLE_Disclosure as Disclosure, + UNSTABLE_DisclosurePanel as DisclosurePanel, +} from 'react-aria-components'; + +import type { Meta, StoryObj } from '@storybook/react'; + +const meta = { + component: DisclosureGroup, + parameters: { + layout: 'centered', + }, + tags: ['autodocs'], +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + render: (args: any) => ( + + +

    + +

    + +

    Personal information form here.

    +
    +
    + +

    + +

    + +

    Billing address form here.

    +
    +
    +
    + ), +}; + +Default.args = { + defaultExpandedKeys: ['personal'], +}; diff --git a/packages/components/src/components/DisclosureGroup/DisclosureGroup.tsx b/packages/components/src/components/DisclosureGroup/DisclosureGroup.tsx new file mode 100644 index 0000000000..4196e558c6 --- /dev/null +++ b/packages/components/src/components/DisclosureGroup/DisclosureGroup.tsx @@ -0,0 +1,15 @@ +import * as React from 'react'; +import { + UNSTABLE_DisclosureGroup as RACDisclosureGroup, + DisclosureGroupProps, +} from 'react-aria-components'; + +/** + * A DisclosureGroup is used to group Disclosures together to create an accordion. + * + * NOTE: This component is in alpha in RAC thus it's unstable and is subjects of change + * in the API, behavior, and appearance. + */ +export function DisclosureGroup(props: DisclosureGroupProps) { + return ; +} diff --git a/packages/components/src/styles/basic/ColorArea.css b/packages/components/src/styles/basic/ColorArea.css new file mode 100644 index 0000000000..a241aee10f --- /dev/null +++ b/packages/components/src/styles/basic/ColorArea.css @@ -0,0 +1,34 @@ +@import './ColorSlider.css'; + +.react-aria-ColorArea { + width: 192px; + height: 192px; + flex-shrink: 0; + border-radius: 4px; +} + +.react-aria-ColorThumb { + width: 20px; + height: 20px; + box-sizing: border-box; + border: 2px solid white; + border-radius: 50%; + box-shadow: + 0 0 0 1px black, + inset 0 0 0 1px black; + + &[data-focus-visible] { + width: 24px; + height: 24px; + } +} + +.react-aria-ColorArea { + &[data-disabled] { + background: gray !important; + + .react-aria-ColorThumb { + background: gray !important; + } + } +} diff --git a/packages/components/src/styles/basic/ColorField.css b/packages/components/src/styles/basic/ColorField.css new file mode 100644 index 0000000000..bcb29a5273 --- /dev/null +++ b/packages/components/src/styles/basic/ColorField.css @@ -0,0 +1,49 @@ +@import './Button.css'; +@import './Form.css'; +@import './theme.css'; + +.react-aria-ColorField { + display: flex; + flex-direction: column; + color: var(--text-color); + + .react-aria-Input { + width: 100%; + max-width: 12ch; + box-sizing: border-box; + padding: 0.286rem; + border: 1px solid var(--border-color); + border-radius: 6px; + margin: 0; + background: var(--field-background); + color: var(--field-text-color); + font-size: 1.143rem; + + &[data-focused] { + outline: 2px solid var(--focus-ring-color); + outline-offset: -1px; + } + } + + &[data-invalid] { + .react-aria-Input { + border-color: var(--color-invalid); + } + } + + .react-aria-FieldError { + color: var(--color-invalid); + font-size: 12px; + } + + [slot='description'] { + font-size: 12px; + } + + .react-aria-Input { + &[data-disabled] { + border-color: var(--border-color-disabled); + color: var(--text-color-disabled); + } + } +} diff --git a/packages/components/src/styles/basic/ColorPicker.css b/packages/components/src/styles/basic/ColorPicker.css new file mode 100644 index 0000000000..e8ccca99b8 --- /dev/null +++ b/packages/components/src/styles/basic/ColorPicker.css @@ -0,0 +1,43 @@ +@import './Button.css'; +@import './ColorArea.css'; +@import './ColorSlider.css'; +@import './ColorSwatch.css'; +@import './ColorSwatchPicker.css'; +@import './ColorField.css'; +@import './Popover.css'; +@import './Dialog.css'; +@import './ListBox.css'; +@import './Select.css'; +@import './theme.css'; + +.color-picker { + display: flex; + align-items: center; + padding: 0; + border: none; + border-radius: 4px; + appearance: none; + background: none; + color: var(--text-color); + font-size: 1rem; + gap: 8px; + outline: none; + vertical-align: middle; + + &[data-focus-visible] { + outline: 2px solid var(--focus-ring-color); + outline-offset: 2px; + } +} + +.color-picker-dialog { + display: flex; + overflow: auto; + min-width: 192px; + max-height: inherit; + box-sizing: border-box; + flex-direction: column; + padding: 15px; + gap: 8px; + outline: none; +} diff --git a/packages/components/src/styles/basic/ColorSlider.css b/packages/components/src/styles/basic/ColorSlider.css new file mode 100644 index 0000000000..63f3d432a1 --- /dev/null +++ b/packages/components/src/styles/basic/ColorSlider.css @@ -0,0 +1,80 @@ +.react-aria-ColorSlider { + display: grid; + max-width: 300px; + gap: 4px; + grid-template-areas: + 'label output' + 'track track'; + grid-template-columns: 1fr auto; + + .react-aria-Label { + grid-area: label; + } + + .react-aria-SliderOutput { + grid-area: output; + } + + .react-aria-SliderTrack { + border-radius: 4px; + grid-area: track; + } + + &[data-orientation='horizontal'] { + .react-aria-SliderTrack { + height: 28px; + } + + .react-aria-ColorThumb { + top: 50%; + } + } +} + +.react-aria-ColorThumb { + width: 20px; + height: 20px; + box-sizing: border-box; + border: 2px solid white; + border-radius: 50%; + box-shadow: + 0 0 0 1px black, + inset 0 0 0 1px black; + + &[data-focus-visible] { + width: 24px; + height: 24px; + } +} + +.react-aria-ColorSlider { + &[data-orientation='vertical'] { + display: block; + height: 150px; + + .react-aria-Label, + .react-aria-SliderOutput { + display: none; + } + + .react-aria-SliderTrack { + width: 28px; + height: 100%; + } + + .react-aria-ColorThumb { + left: 50%; + } + } + + &[data-disabled] { + .react-aria-SliderTrack { + background: gray !important; + } + + .react-aria-ColorThumb { + background: gray !important; + opacity: 0.5; + } + } +} diff --git a/packages/components/src/styles/basic/ColorSwatch.css b/packages/components/src/styles/basic/ColorSwatch.css new file mode 100644 index 0000000000..3713b3807b --- /dev/null +++ b/packages/components/src/styles/basic/ColorSwatch.css @@ -0,0 +1,8 @@ +@import './ColorSlider.css'; + +.react-aria-ColorSwatch { + width: 32px; + height: 32px; + border-radius: 4px; + box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1); +} diff --git a/packages/components/src/styles/basic/ColorSwatchPicker.css b/packages/components/src/styles/basic/ColorSwatchPicker.css new file mode 100644 index 0000000000..657d836443 --- /dev/null +++ b/packages/components/src/styles/basic/ColorSwatchPicker.css @@ -0,0 +1,42 @@ +@import './ColorSwatch.css'; +@import './ColorField.css'; +@import './theme.css'; + +.react-aria-ColorSwatchPicker { + display: flex; + flex-wrap: wrap; + gap: 8px; +} + +.react-aria-ColorSwatchPickerItem { + position: relative; + width: fit-content; + border-radius: 4px; + forced-color-adjust: none; + outline: none; + + &[data-focus-visible] { + outline: 2px solid var(--focus-ring-color); + outline-offset: 2px; + } + + &[data-selected]::after { + position: absolute; + border: 2px solid black; + border-radius: inherit; + content: ''; + inset: 0; + outline: 2px solid white; + outline-offset: -4px; + } + + &[data-disabled] { + opacity: 0.2; + } +} + +.react-aria-ColorSwatchPicker { + &[data-layout='stack'] { + flex-direction: column; + } +} diff --git a/packages/components/src/styles/basic/ColorWheel.css b/packages/components/src/styles/basic/ColorWheel.css new file mode 100644 index 0000000000..429e59dc9c --- /dev/null +++ b/packages/components/src/styles/basic/ColorWheel.css @@ -0,0 +1,28 @@ +.react-aria-ColorThumb { + width: 20px; + height: 20px; + box-sizing: border-box; + border: 2px solid white; + border-radius: 50%; + box-shadow: + 0 0 0 1px black, + inset 0 0 0 1px black; + + &[data-focus-visible] { + width: 24px; + height: 24px; + } +} + +.react-aria-ColorWheel { + &[data-disabled] { + .react-aria-ColorWheelTrack { + background: gray !important; + } + + .react-aria-ColorThumb { + background: gray !important; + opacity: 0.5; + } + } +} diff --git a/packages/components/src/styles/basic/Disclosure.css b/packages/components/src/styles/basic/Disclosure.css new file mode 100644 index 0000000000..809a49816e --- /dev/null +++ b/packages/components/src/styles/basic/Disclosure.css @@ -0,0 +1,33 @@ +@import './theme.css'; +@import './Button.css'; + +.react-aria-Disclosure { + .react-aria-Button[slot='trigger'] { + display: flex; + align-items: center; + border: none; + background: none; + box-shadow: none; + font-size: 16px; + font-weight: bold; + gap: 8px; + + svg { + width: 12px; + height: 12px; + fill: none; + rotate: 0deg; + stroke: currentColor; + stroke-width: 3px; + transition: rotate 200ms; + } + } + + &[data-expanded] .react-aria-Button[slot='trigger'] svg { + rotate: 90deg; + } +} + +.react-aria-DisclosurePanel { + margin-left: 32px; +} diff --git a/packages/components/src/styles/basic/DisclosureGroup.css b/packages/components/src/styles/basic/DisclosureGroup.css new file mode 100644 index 0000000000..2c60061a9e --- /dev/null +++ b/packages/components/src/styles/basic/DisclosureGroup.css @@ -0,0 +1,3 @@ +@import './theme.css'; +@import './Button.css'; +@import './Disclosure.css'; diff --git a/packages/components/src/styles/basic/main.css b/packages/components/src/styles/basic/main.css index 60173bd34b..066feb263c 100644 --- a/packages/components/src/styles/basic/main.css +++ b/packages/components/src/styles/basic/main.css @@ -8,7 +8,15 @@ @import './Label.css'; @import './Checkbox.css'; @import './CheckboxGroup.css'; +@import './ColorArea.css'; +@import './ColorField.css'; +@import './ColorPicker.css'; +@import './ColorSlider.css'; +@import './ColorSwatch.css'; +@import './ColorSwatchPicker.css'; @import './ComboBox.css'; +@import './Disclosure.css'; +@import './DisclosureGroup.css'; @import './NumberField.css'; @import './RadioGroup.css'; @import './Switch.css'; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 21d9875b8e..f457c1c44d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1163,23 +1163,23 @@ importers: packages/components: dependencies: '@react-aria/utils': - specifier: ^3.22.0 - version: 3.23.2(react@18.2.0) + specifier: ^3.25.3 + version: 3.25.3(react@18.2.0) '@react-spectrum/utils': - specifier: ^3.11.1 - version: 3.11.5(react@18.2.0) + specifier: ^3.11.11 + version: 3.11.11(react@18.2.0) '@storybook/test': specifier: ^8.0.4 version: 8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(vitest@1.5.0(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) clsx: - specifier: ^2.0.0 - version: 2.1.0 + specifier: ^2.1.1 + version: 2.1.1 react: specifier: ^16.8.0 || ^17.0.0 || ^18.0.0 version: 18.2.0 react-aria-components: - specifier: ^1.2.0 - version: 1.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + specifier: ^1.4.0 + version: 1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react-dom: specifier: ^16.8.0 || ^17.0.0 || ^18.0.0 version: 18.2.0(react@18.2.0) @@ -4009,39 +4009,39 @@ packages: '@internationalized/date@3.5.2': resolution: {integrity: sha512-vo1yOMUt2hzp63IutEaTUxROdvQg1qlMRsbCvbay2AK2Gai7wIgCyK5weEX3nHkiLgo4qCXHijFNC/ILhlRpOQ==} - '@internationalized/date@3.5.3': - resolution: {integrity: sha512-X9bi8NAEHAjD8yzmPYT2pdJsbe+tYSEBAfowtlxJVJdZR3aK8Vg7ZUT1Fm5M47KLzp/M1p1VwAaeSma3RT7biw==} - '@internationalized/date@3.5.4': resolution: {integrity: sha512-qoVJVro+O0rBaw+8HPjUB1iH8Ihf8oziEnqMnvhJUSuVIrHOuZ6eNLHNvzXJKUvAtaDiqMnRlg8Z2mgh09BlUw==} + '@internationalized/date@3.5.6': + resolution: {integrity: sha512-jLxQjefH9VI5P9UQuqB6qNKnvFt1Ky1TPIzHGsIlCi7sZZoMR8SdYbBGRvM0y+Jtb+ez4ieBzmiAUcpmPYpyOw==} + '@internationalized/message@3.1.2': resolution: {integrity: sha512-MHAWsZWz8jf6jFPZqpTudcCM361YMtPIRu9CXkYmKjJ/0R3pQRScV5C0zS+Qi50O5UAm8ecKhkXx6mWDDcF6/g==} - '@internationalized/message@3.1.3': - resolution: {integrity: sha512-jba3kGxnh4hN4zoeJZuMft99Ly1zbmon4fyDz3VAmO39Kb5Aw+usGub7oU/sGoBIcVQ7REEwsvjIWtIO1nitbw==} - '@internationalized/message@3.1.4': resolution: {integrity: sha512-Dygi9hH1s7V9nha07pggCkvmRfDd3q2lWnMGvrJyrOwYMe1yj4D2T9BoH9I6MGR7xz0biQrtLPsqUkqXzIrBOw==} + '@internationalized/message@3.1.5': + resolution: {integrity: sha512-hjEpLKFlYA3m5apldLqzHqw531qqfOEq0HlTWdfyZmcloWiUbWsYXD6YTiUmQmOtarthzhdjCAwMVrB8a4E7uA==} + '@internationalized/number@3.5.1': resolution: {integrity: sha512-N0fPU/nz15SwR9IbfJ5xaS9Ss/O5h1sVXMZf43vc9mxEG48ovglvvzBjF53aHlq20uoR6c+88CrIXipU/LSzwg==} - '@internationalized/number@3.5.2': - resolution: {integrity: sha512-4FGHTi0rOEX1giSkt5MH4/te0eHBq3cvAYsfLlpguV6pzJAReXymiYpE5wPCqKqjkUO3PIsyvk+tBiIV1pZtbA==} - '@internationalized/number@3.5.3': resolution: {integrity: sha512-rd1wA3ebzlp0Mehj5YTuTI50AQEx80gWFyHcQu+u91/5NgdwBecO8BH6ipPfE+lmQ9d63vpB3H9SHoIUiupllw==} + '@internationalized/number@3.5.4': + resolution: {integrity: sha512-h9huwWjNqYyE2FXZZewWqmCdkw1HeFds5q4Siuoms3hUQC5iPJK3aBmkFZoDSLN4UD0Bl8G22L/NdHpeOr+/7A==} + '@internationalized/string@3.2.1': resolution: {integrity: sha512-vWQOvRIauvFMzOO+h7QrdsJmtN1AXAFVcaLWP9AseRN2o7iHceZ6bIXhBD4teZl8i91A3gxKnWBlGgjCwU6MFQ==} - '@internationalized/string@3.2.2': - resolution: {integrity: sha512-5xy2JfSQyGqL9FDIdJXVjoKSBBDJR4lvwoCbqKhc5hQZ/qSLU/OlONCmrJPcSH0zxh88lXJMzbOAk8gJ48JBFw==} - '@internationalized/string@3.2.3': resolution: {integrity: sha512-9kpfLoA8HegiWTeCbR2livhdVeKobCnVv8tlJ6M2jF+4tcMqDo94ezwlnrUANBWPgd8U7OXIHCk2Ov2qhk4KXw==} + '@internationalized/string@3.2.4': + resolution: {integrity: sha512-BcyadXPn89Ae190QGZGDUZPqxLj/xsP4U1Br1oSy8yfIjmpJ8cJtGYleaodqW/EmzFjwELtwDojLkf3FhV6SjA==} + '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -5105,13 +5105,14 @@ packages: '@types/react': optional: true - '@react-aria/breadcrumbs@3.5.11': - resolution: {integrity: sha512-bQz4g2tKvcWxeqPGj9O0RQf++Ka8f2o/pJMJB+QQ27DVQWhxpQpND//oFku2aFYkxHB/fyD9qVoiqpQR25bidw==} + '@react-aria/accordion@3.0.0-alpha.34': + resolution: {integrity: sha512-3Qoj3StyQbdTYvAXVIbAIk11WtRyo3cdgn6OgwPAvN6c1r8R7X/J9DHTykZRrlF6TOGcdE0H0yrmPrlG92ObmA==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/breadcrumbs@3.5.12': - resolution: {integrity: sha512-UHTVe6kA73xbE1J6LLVjUooEQvTJ4vWPRyOxu4t3dZ/4dMttvHxpKylvj4z606wioSGVhCDEKC4Vn+RtQLypeA==} + '@react-aria/breadcrumbs@3.5.11': + resolution: {integrity: sha512-bQz4g2tKvcWxeqPGj9O0RQf++Ka8f2o/pJMJB+QQ27DVQWhxpQpND//oFku2aFYkxHB/fyD9qVoiqpQR25bidw==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -5120,13 +5121,18 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/button@3.9.3': - resolution: {integrity: sha512-ZXo2VGTxfbaTEnfeIlm5ym4vYpGAy8sGrad8Scv+EyDAJWLMKokqctfaN6YSWbqUApC3FN63IvMqASflbmnYig==} + '@react-aria/breadcrumbs@3.5.17': + resolution: {integrity: sha512-LJQ+u3TbPmtAWZ3/qC6VfLCzXiwVoB6GmI+HJ2pbjs6H9L8MoiLHsA4mgcz+P0rvx7SCs0Rhvy4JurV6R/R4xw==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + + '@react-aria/button@3.10.0': + resolution: {integrity: sha512-mhbn2tEsr991sjG6YMH6oN3ELWb4YvZZ8mnZHMNLa3l8T00PV0ClvQBsUndo6uSvuTHhpFzmMMkJFhYYUwCKlw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/button@3.9.4': - resolution: {integrity: sha512-YOt4XWtC+0m7LwLQnU1Gl0ENETLEhtM8SyDbwsFR/fIQYX0T0H9D6jMlnKxXDjKgRvHzom9NZ8caTfsEPbgW/g==} + '@react-aria/button@3.9.3': + resolution: {integrity: sha512-ZXo2VGTxfbaTEnfeIlm5ym4vYpGAy8sGrad8Scv+EyDAJWLMKokqctfaN6YSWbqUApC3FN63IvMqASflbmnYig==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -5135,14 +5141,14 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/calendar@3.5.6': - resolution: {integrity: sha512-PA0Ur5WcODMn7t2gCUvq61YktkB+WlSZjzDr5kcY3sdl53ZjiyqCa2hYgrb6R0J859LVJXAp+5Qaproz8g1oLA==} + '@react-aria/calendar@3.5.12': + resolution: {integrity: sha512-C8VRjRwEVPaGoCtjOlC0lb3mVSz4ajbal8jfvcbp7LOqCcmOVTUbiM7EPTy60EfZRanFNSp2D1ZstEZDU+cqsg==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/calendar@3.5.7': - resolution: {integrity: sha512-HbOxoslIpak1/RKHQ/p4A5roI+RpM6geK68s72D+9n3NMPDw/X95yesc6JD1Sti2KsGl9GHI6Myf9xcNjuAMnw==} + '@react-aria/calendar@3.5.6': + resolution: {integrity: sha512-PA0Ur5WcODMn7t2gCUvq61YktkB+WlSZjzDr5kcY3sdl53ZjiyqCa2hYgrb6R0J859LVJXAp+5Qaproz8g1oLA==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -5158,21 +5164,27 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/checkbox@3.14.2': - resolution: {integrity: sha512-PeXTEfURrZZBN80YJUyVPAvkT7gwpPtwBgtKxg1ars+D1iDV4Yp48yh5pKaNSf0/rlLNOgKJSCpcFzY7V3ipFw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/checkbox@3.14.3': resolution: {integrity: sha512-EtBJL6iu0gvrw3A4R7UeVLR6diaVk/mh4kFBc7c8hQjpEJweRr4hmJT3hrNg3MBcTWLxFiMEXPGgWEwXDBygtA==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/color@3.0.0-beta.32': - resolution: {integrity: sha512-FKy5jb+31SIaLrjQR7oMq23CCBgoPdlYN06mwb16EdN024D1ZkQ2ULUvI84vBJxCul8cMOmoIK1DBOnhDslbrQ==} + '@react-aria/checkbox@3.14.7': + resolution: {integrity: sha512-aqVxXcr/8P7pQ7R34DlJX2SdBvWtHof9lLTVBY/9tgMplcKIoVBdlVUYPtqWxT3tGan+rruPQHbzTx8zJRFJyg==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + + '@react-aria/collections@3.0.0-alpha.5': + resolution: {integrity: sha512-8m8yZe1c5PYCylEN4lcG3ZL/1nyrON95nVsoknC8shY1uKP01oJd7w+f6hvVza0tJRQuVe4zW3gO4FVjv33a5g==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + + '@react-aria/color@3.0.0': + resolution: {integrity: sha512-IwHI4e2fUHUOZHRrL2MsxGZFp/RCR2cLjm39gT41jVSuH4zjxueUf96NDm6c7FD0mB5vfk0jo+KJMnShL1a2rg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 '@react-aria/color@3.0.0-beta.33': resolution: {integrity: sha512-nhqnIHYm5p6MbuF3cC6lnqzG7MjwBsBd0DtpO+ByFYO+zxpMMbeC5R+1SFxvapR4uqmAzTotbtiUCGsG+SUaIg==} @@ -5180,14 +5192,14 @@ packages: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/combobox@3.8.4': - resolution: {integrity: sha512-HyTWIo2B/0xq0Of+sDEZCfJyf4BvCvDYIWG4UhjqL1kHIHIGQyyr+SldbVUjXVYnk8pP1eGB3ttiREujjjALPQ==} + '@react-aria/combobox@3.10.4': + resolution: {integrity: sha512-jzLyRwpwH5SCfQl5giLSwLaw9EKlRiMG39kDZLRB4MQ1MN4sIdIP2TXBbdYcSLtYjduJm2JfRvs2ezI+QI+umA==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/combobox@3.9.0': - resolution: {integrity: sha512-JRiCoARx95Lu1hENmf4ndHzpJrMeP/2bV96jZbMn4StFUzhACKnUw0rNFpFdONfeoD/MkWO7tsvhxaPGLhpgtQ==} + '@react-aria/combobox@3.8.4': + resolution: {integrity: sha512-HyTWIo2B/0xq0Of+sDEZCfJyf4BvCvDYIWG4UhjqL1kHIHIGQyyr+SldbVUjXVYnk8pP1eGB3ttiREujjjALPQ==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -5198,18 +5210,18 @@ packages: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/datepicker@3.10.0': - resolution: {integrity: sha512-YiIxY+mRxc2rPN8j9ypdiGspRHSIrsK6TShBgKEk5UoG5EBKEJfNe/FfoXDR2d5xcpWLAHVuRjERi9WkiJNDBw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/datepicker@3.10.1': resolution: {integrity: sha512-4HZL593nrNMa1GjBmWEN/OTvNS6d3/16G1YJWlqiUlv11ADulSbqBIjMmkgwrJVFcjrgqtXFy+yyrTA/oq94Zw==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + '@react-aria/datepicker@3.11.3': + resolution: {integrity: sha512-HwGxDctFry5ew3Cu7gWpUVodaCg//V6NCihSRjLvnW/TWG+UFLzTafxTqqm8eRbicT3DJlXCLOUPk8Ek0txW6A==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + '@react-aria/datepicker@3.9.3': resolution: {integrity: sha512-1AjCAizd88ACKjVNhFazX4HZZFwWi2rsSlGCTm66Nx6wm5N/Cpbm466dpYEFyQUsKSOG4CC65G1zfYoMPe48MQ==} peerDependencies: @@ -5222,26 +5234,26 @@ packages: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/dialog@3.5.13': - resolution: {integrity: sha512-GUwY7sQtPMtO6LFHyoIGFMEv8tEBrNCrSNwEKilFLxvNUCo/1sY3N+7L2TcoeyDkcRWBJ9Uz9iR0iJ6EsCBWng==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/dialog@3.5.14': resolution: {integrity: sha512-oqDCjQ8hxe3GStf48XWBf2CliEnxlR9GgSYPHJPUc69WBj68D9rVcCW3kogJnLAnwIyf3FnzbX4wSjvUa88sAQ==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/dnd@3.5.3': - resolution: {integrity: sha512-0gi6sRnr97fSQnGy+CMt+99/+vVqr+qv2T9Ts8X9TAzxHNokz5QfSL88QSlTU36EnAVLxPY18iZQWCExSjKpEQ==} + '@react-aria/dialog@3.5.18': + resolution: {integrity: sha512-j0x0OwDZKyW2GqBZl2Dw/pHl0uSCzhHOg5jNeulkZC8xQa8COuksQf5NFzPmgRPnzqpbgvSzCSs41ymS8spmFg==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/dnd@3.6.0': - resolution: {integrity: sha512-uIM54sUr4NpSdvxWozNKGqSNSTe9ir/sO+QFGtGAF5dbjMX7FN/7sVVrtmB8UHKC+fwfs+Ml3kjJgHbm10/Qmg==} + '@react-aria/disclosure@3.0.0-alpha.0': + resolution: {integrity: sha512-/tleriRORdkRJf2JXjiRfhLfXA5WY0nPT3DoodZJgD5Fj/aCjrWXarVGUQuEk9vsH5pwinQiQB5So+cA+xF+UQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + + '@react-aria/dnd@3.5.3': + resolution: {integrity: sha512-0gi6sRnr97fSQnGy+CMt+99/+vVqr+qv2T9Ts8X9TAzxHNokz5QfSL88QSlTU36EnAVLxPY18iZQWCExSjKpEQ==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -5252,13 +5264,14 @@ packages: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/focus@3.16.2': - resolution: {integrity: sha512-Rqo9ummmgotESfypzFjI3uh58yMpL+E+lJBbQuXkBM0u0cU2YYzu0uOrFrq3zcHk997udZvq1pGK/R+2xk9B7g==} + '@react-aria/dnd@3.7.3': + resolution: {integrity: sha512-SF7v1AzpXr4CSf98pSzjcSBCaezpP6rsSnSJTz0j2jrYfdQhX0MPA2lyxS+kgU1AEzkK19THQeHuj8hxQc0bVw==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/focus@3.17.0': - resolution: {integrity: sha512-aRzBw1WTUkcIV3xFrqPA6aB8ZVt3XyGpTaSHAypU0Pgoy2wRq9YeJYpbunsKj9CJmskuffvTqXwAjTcaQish1Q==} + '@react-aria/focus@3.16.2': + resolution: {integrity: sha512-Rqo9ummmgotESfypzFjI3uh58yMpL+E+lJBbQuXkBM0u0cU2YYzu0uOrFrq3zcHk997udZvq1pGK/R+2xk9B7g==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -5267,13 +5280,13 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/form@3.0.3': - resolution: {integrity: sha512-5Q2BHE4TTPDzGY2npCzpRRYshwWUb3SMUA/Cbz7QfEtBk+NYuVaq3KjvqLqgUUdyKtqLZ9Far0kIAexloOC4jw==} + '@react-aria/focus@3.18.3': + resolution: {integrity: sha512-WKUElg+5zS0D3xlVn8MntNnkzJql2J6MuzAMP8Sv5WTgFDse/XGR842dsxPTIyKKdrWVCRegCuwa4m3n/GzgJw==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/form@3.0.4': - resolution: {integrity: sha512-wWfW9Hv+OWIUbJ0QYzJ4EO5Yt7xZD1i+XNZG9pKGBiREi7dYBo7Y7lbqlWc3pJASSE+6aP9HzhK18dMPtGluVA==} + '@react-aria/form@3.0.3': + resolution: {integrity: sha512-5Q2BHE4TTPDzGY2npCzpRRYshwWUb3SMUA/Cbz7QfEtBk+NYuVaq3KjvqLqgUUdyKtqLZ9Far0kIAexloOC4jw==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -5282,14 +5295,19 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/grid@3.8.8': - resolution: {integrity: sha512-7Bzbya4tO0oIgqexwRb8D6ZdC0GASYq9f/pnkrqocgvG9e1SCld4zOioKbYQDvAK/NnbCgXmmdqFAcLM/iazaA==} + '@react-aria/form@3.0.9': + resolution: {integrity: sha512-9M6IfC5t47G19c8roHWnkKd275BrECTzyTsc4rzf5OepJfHfG4evST6x+4gGOFYi8soC9XoQdJl4TRh/mft+gw==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + + '@react-aria/grid@3.10.4': + resolution: {integrity: sha512-3AjJ0hwRhOCIHThIZrGWrjAuKDpaZuBkODW3dvgLqtsNm3tL46DI6U9O3vfp8lNbrWMsXJgjRXwvXvdv0/gwCA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/grid@3.9.0': - resolution: {integrity: sha512-jNg7haMptmeTKR7/ZomIjWZMLB6jWalBkl5in2JdU9Hc4pY5EKqD/7PSprr9SjOzCr5O+4MSiRDvw+Tu7xHevQ==} + '@react-aria/grid@3.8.8': + resolution: {integrity: sha512-7Bzbya4tO0oIgqexwRb8D6ZdC0GASYq9f/pnkrqocgvG9e1SCld4zOioKbYQDvAK/NnbCgXmmdqFAcLM/iazaA==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -5306,25 +5324,20 @@ packages: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/gridlist@3.8.0': - resolution: {integrity: sha512-2iPBtpYZdTVij6XcqFsRsjzItjgg7FhFRPUEgD62mCyYd6NJIDkCxLuL97hkZ5BbXNxsr2jgVEns5Z4UzW//IQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/gridlist@3.8.1': resolution: {integrity: sha512-vVPkkA+Ct0NDcpnNm/tnYaBumg0fP9pXxsPLqL1rxvsTyj1PaIpFTZ4corabPTbTDExZwUSTS3LG1n+o1OvBtQ==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/i18n@3.10.2': - resolution: {integrity: sha512-Z1ormoIvMOI4mEdcFLYsoJy9w/EzBdBmgfLP+S/Ah+1xwQOXpgwZxiKOhYHpWa0lf6hkKJL34N9MHJvCJ5Crvw==} + '@react-aria/gridlist@3.9.4': + resolution: {integrity: sha512-gGzS4ToSynn2KBycf9UCsWIJIbVl4RjoCjPF4NnukwzHmrXwbtZnlF0xsORQ5QxfqHH9UehTAHWFvOOHJSZZ2w==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/i18n@3.11.0': - resolution: {integrity: sha512-dnopopsYKy2cd2dB2LdnmdJ58evKKcNCtiscWl624XFSbq2laDrYIQ4umrMhBxaKD7nDQkqydVBe6HoQKPzvJw==} + '@react-aria/i18n@3.10.2': + resolution: {integrity: sha512-Z1ormoIvMOI4mEdcFLYsoJy9w/EzBdBmgfLP+S/Ah+1xwQOXpgwZxiKOhYHpWa0lf6hkKJL34N9MHJvCJ5Crvw==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -5333,13 +5346,13 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/interactions@3.21.1': - resolution: {integrity: sha512-AlHf5SOzsShkHfV8GLLk3v9lEmYqYHURKcXWue0JdYbmquMRkUsf/+Tjl1+zHVAQ8lKqRnPYbTmc4AcZbqxltw==} + '@react-aria/i18n@3.12.3': + resolution: {integrity: sha512-0Tp/4JwnCVNKDfuknPF+/xf3/woOc8gUjTU2nCjO3mCVb4FU7KFtjxQ2rrx+6hpIVG6g+N9qfMjRa/ggVH0CJg==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/interactions@3.21.2': - resolution: {integrity: sha512-Ju706DtoEmI/2vsfu9DCEIjDqsRBVLm/wmt2fr0xKbBca7PtmK8daajxFWz+eTq+EJakvYfLr7gWgLau9HyWXg==} + '@react-aria/interactions@3.21.1': + resolution: {integrity: sha512-AlHf5SOzsShkHfV8GLLk3v9lEmYqYHURKcXWue0JdYbmquMRkUsf/+Tjl1+zHVAQ8lKqRnPYbTmc4AcZbqxltw==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -5348,13 +5361,18 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/label@3.7.6': - resolution: {integrity: sha512-ap9iFS+6RUOqeW/F2JoNpERqMn1PvVIo3tTMrJ1TY1tIwyJOxdCBRgx9yjnPBnr+Ywguep+fkPNNi/m74+tXVQ==} + '@react-aria/interactions@3.22.3': + resolution: {integrity: sha512-RRUb/aG+P0IKTIWikY/SylB6bIbLZeztnZY2vbe7RAG5MgVaCgn5HQ45SI15GlTmhsFG8CnF6slJsUFJiNHpbQ==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + + '@react-aria/label@3.7.12': + resolution: {integrity: sha512-u9xT90lAlgb7xiv+p0md9QwCHz65XL7tjS5e29e88Rs3ptkv3aQubTqxVOUTEwzbNUT4A1QqTjUm1yfHewIRUw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/label@3.7.7': - resolution: {integrity: sha512-0MDIu4SbagwsYzkprcCzi1Z0V/t2K/5Dd30eSTL2zanXMa+/85MVGSQjXI0vPrXMOXSNqp0R/aMxcqcgJ59yRA==} + '@react-aria/label@3.7.6': + resolution: {integrity: sha512-ap9iFS+6RUOqeW/F2JoNpERqMn1PvVIo3tTMrJ1TY1tIwyJOxdCBRgx9yjnPBnr+Ywguep+fkPNNi/m74+tXVQ==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -5368,24 +5386,18 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/link@3.7.0': - resolution: {integrity: sha512-gkF7KpDR+ApcMY5HS3xVKHrxRcwSP9TRPoySWEMBE4GPWvEK1Bk/On9EM1vRzeEibCZ5L6gKuLEEKLVSGbBMWg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/link@3.7.1': resolution: {integrity: sha512-a4IaV50P3fXc7DQvEIPYkJJv26JknFbRzFT5MJOMgtzuhyJoQdILEUK6XHYjcSSNCA7uLgzpojArVk5Hz3lCpw==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/listbox@3.11.5': - resolution: {integrity: sha512-y3a3zQYjT+JKgugCMMKS7K9sRoCoP1Z6Fiiyfd77OHXWzh9RlnvWGsseljynmbxLzSuPwFtCYkU1Jz4QwsPUIg==} + '@react-aria/link@3.7.5': + resolution: {integrity: sha512-j0F1BIdNoE7Tl+0KzzjbrmYuxt4aWAmDZDHvJKiYg71Jb1BAPz71eE1O1ybMoO04+OG/6HrRZTragfSQLAJ58A==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/listbox@3.12.0': - resolution: {integrity: sha512-Cy+UcfXU4MrOBMBnaB+kqG8bajeS3T1ZN8L7PXSTpmFS9jShFMhYkNz5gXpI+0SS4dgbHtkq/YDFJvu+bxFvdg==} + '@react-aria/listbox@3.11.5': + resolution: {integrity: sha512-y3a3zQYjT+JKgugCMMKS7K9sRoCoP1Z6Fiiyfd77OHXWzh9RlnvWGsseljynmbxLzSuPwFtCYkU1Jz4QwsPUIg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -5396,40 +5408,41 @@ packages: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + '@react-aria/listbox@3.13.4': + resolution: {integrity: sha512-2aG4jzlB+srYBeM9ap/BNZe0E04yMjY2dPGXcigkaSJt6/yYAHCygXuouf2MzvBfkdV4QWyHIIgWZmAXXl6reg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + '@react-aria/live-announcer@3.3.2': resolution: {integrity: sha512-aOyPcsfyY9tLCBhuUaYCruwcd1IrYLc47Ou+J7wMzjeN9v4lsaEfiN12WFl8pDqOwfy6/7It2wmlm5hOuZY8wQ==} - '@react-aria/live-announcer@3.3.3': - resolution: {integrity: sha512-sMaBzzIgDPBDCeZ/UFbuXR/UnXikcE7t4OJ4cESzmUq6r6LvxzmZnG9ocwpH75n7udmUbINycKD082fneryHlg==} - '@react-aria/live-announcer@3.3.4': resolution: {integrity: sha512-w8lxs35QrRrn6pBNzVfyGOeqWdxeVKf9U6bXIVwhq7rrTqRULL8jqy8RJIMfIs1s8G5FpwWYjyBOjl2g5Cu1iA==} + '@react-aria/live-announcer@3.4.0': + resolution: {integrity: sha512-VBxEdMq2SbtRbNTQNcDR2G6E3lEl5cJSBiHTTO8Ln1AL76LiazrylIXGgoktqzCfRQmyq0v8CHk1cNKDU9mvJg==} + '@react-aria/menu@3.13.1': resolution: {integrity: sha512-jF80YIcvD16Fgwm5pj7ViUE3Dj7z5iewQixLaFVdvpgfyE58SD/ZVU9/JkK5g/03DYM0sjpUKZGkdFxxw8eKnw==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/menu@3.14.0': - resolution: {integrity: sha512-veZIpwKPKDIX1xpUzvGnxSVTmMfpRjPQUi1v+hMgqgdjBKedKI2LkprLABo9grggjqV9c2xT4XUXDk6xH3r8eA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/menu@3.14.1': resolution: {integrity: sha512-BYliRb38uAzq05UOFcD5XkjA5foQoXRbcH3ZufBsc4kvh79BcP1PMW6KsXKGJ7dC/PJWUwCui6QL1kUg8PqMHA==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/meter@3.4.11': - resolution: {integrity: sha512-P1G3Jdh0f/uieUDqvc3Ee4wzqBJa7H077BVSC3KPRqEp6YY7JimZGWjOwbFlO2PXhryXm/dI8EzUmh+4ZXjq/g==} + '@react-aria/menu@3.15.4': + resolution: {integrity: sha512-4wfq8Lb7AltgSzBHdtypiPOnsRm8hHv7PUuHhlq/VT9yAkEFk4Flc7vKVF6VSFqrnCfyCf66B5aeapjNInAONg==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/meter@3.4.12': - resolution: {integrity: sha512-Ofgy3SHBjNLrc0mzuEKfn5ozOyrLudzcpw1cP5BFgtYs8BDdUx2/e33+2sm1+Pm3M/AhBrV/9LGyOE2JCtb8pg==} + '@react-aria/meter@3.4.11': + resolution: {integrity: sha512-P1G3Jdh0f/uieUDqvc3Ee4wzqBJa7H077BVSC3KPRqEp6YY7JimZGWjOwbFlO2PXhryXm/dI8EzUmh+4ZXjq/g==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -5438,14 +5451,13 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/numberfield@3.11.1': - resolution: {integrity: sha512-JQ1Z+Ho5H+jeav7jt9A4vBsIQR/Dd2CFbObrULjGkqSrnWjARFZBv3gZwmfGCtplEPeAv9buYKHAqebPtJNUww==} + '@react-aria/meter@3.4.17': + resolution: {integrity: sha512-08wbQhfvVWzpWilhn/WD7cQ7TqafS/66umTk7+X6BW6TrS1//6loNNJV62IC3F7sskel4iEAtl2gW0WpW8zEdg==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/numberfield@3.11.2': - resolution: {integrity: sha512-PPCRLhAnCz3/mbv/EXoG3mY8lUvaOnZdGZf0ufb1VS4K/wKtb8z3sCTDiu1hi7nFo1YYqynb8mKue4Es5jUwSw==} + '@react-aria/numberfield@3.11.1': + resolution: {integrity: sha512-JQ1Z+Ho5H+jeav7jt9A4vBsIQR/Dd2CFbObrULjGkqSrnWjARFZBv3gZwmfGCtplEPeAv9buYKHAqebPtJNUww==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -5456,14 +5468,14 @@ packages: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/overlays@3.21.1': - resolution: {integrity: sha512-djEBDF+TbIIOHWWNpdm19+z8xtY8U+T+wKVQg/UZ6oWnclSqSWeGl70vu73Cg4HVBJ4hKf1SRx4Z/RN6VvH4Yw==} + '@react-aria/numberfield@3.11.7': + resolution: {integrity: sha512-9bqg4sKqc5XLppHzJFRhgtkoeMu0N6Zg0AuVSiE/3CxE5Ad+y8tKpFEx9zh4o5BItyOWy18w5ZXnKjJGjd7waQ==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/overlays@3.22.0': - resolution: {integrity: sha512-M3Iayc2Hf9vJ4JJ8K/zh+Ct6aymDLmBbo686ChV3AtGOc254RyyzqnVSNuMs3j5QVBsDUKihHZQfl4E9RCwd+w==} + '@react-aria/overlays@3.21.1': + resolution: {integrity: sha512-djEBDF+TbIIOHWWNpdm19+z8xtY8U+T+wKVQg/UZ6oWnclSqSWeGl70vu73Cg4HVBJ4hKf1SRx4Z/RN6VvH4Yw==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -5474,13 +5486,14 @@ packages: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/progress@3.4.11': - resolution: {integrity: sha512-RePHbS15/KYFiApYLdwazwvWKsB9q0Kn5DGCSb0hqCC+k2Eui8iVVOsegswiP+xqkk/TiUCIkBEw22W3Az4kTg==} + '@react-aria/overlays@3.23.3': + resolution: {integrity: sha512-vRW4DL466a27BBIP6dQqmmei4nX/nsur6DyF0Hmd46ygwOdvdA+5MwvXZUz9yUamB79UeS9BMQZuBVwhjoMwBQ==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/progress@3.4.12': - resolution: {integrity: sha512-Wlz7VNFEzcLSawhZwWTKgJPM/IUKFiKJJG7KGcsT2biIlu6Yp60xj08hDZkCrLq3XsLLCRmweHlVfLFjG3AK9w==} + '@react-aria/progress@3.4.11': + resolution: {integrity: sha512-RePHbS15/KYFiApYLdwazwvWKsB9q0Kn5DGCSb0hqCC+k2Eui8iVVOsegswiP+xqkk/TiUCIkBEw22W3Az4kTg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -5489,13 +5502,13 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/radio@3.10.2': - resolution: {integrity: sha512-CTUTR+qt3BLjmyQvKHZuVm+1kyvT72ZptOty++sowKXgJApTLdjq8so1IpaLAr8JIfzqD5I4tovsYwIQOX8log==} + '@react-aria/progress@3.4.17': + resolution: {integrity: sha512-5+01WNibLoNS5KcfU5p6vg7Lhz17plqqzv/uITx28zzj3saaj0VLR7n57Ig2fXe8ZEQoUS89BS3sIEsIf96S1A==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/radio@3.10.3': - resolution: {integrity: sha512-9noof5jyHE8iiFEUE7xCAHvCjG7EkZ/bZHh2+ZtrLlTFZmjpEbRbpZMw6QMKC8uzREPsmERBXjbd/6NyXH6mEQ==} + '@react-aria/radio@3.10.2': + resolution: {integrity: sha512-CTUTR+qt3BLjmyQvKHZuVm+1kyvT72ZptOty++sowKXgJApTLdjq8so1IpaLAr8JIfzqD5I4tovsYwIQOX8log==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -5504,13 +5517,13 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/searchfield@3.7.3': - resolution: {integrity: sha512-mnYI969R7tU3yMRIGmY1+peq7tmEW0W3MB/J2ImK36Obz/91tTtspHHEeFtPlQDLIyvVPB0Ucam4LIxCKPJm/Q==} + '@react-aria/radio@3.10.8': + resolution: {integrity: sha512-/vKQhKqpoCB/VqHuc46OOU+31HFtg6svcYzHBbz0wN/DSVCygYeTfB/36kY7x2GWWkT0pCsB4OcHJ+/0G3EfkQ==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/searchfield@3.7.4': - resolution: {integrity: sha512-92TR4M6/lBKkIp6l3Fl/Sqjjo++bDceIZEOKC62/cuYjLm9RRWl4tLlKIR1GN3IH1vJJStKj+TB/SjlWbPuwiA==} + '@react-aria/searchfield@3.7.3': + resolution: {integrity: sha512-mnYI969R7tU3yMRIGmY1+peq7tmEW0W3MB/J2ImK36Obz/91tTtspHHEeFtPlQDLIyvVPB0Ucam4LIxCKPJm/Q==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -5519,14 +5532,19 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/select@3.14.3': - resolution: {integrity: sha512-9KCxI41FI+jTxEfUzRsMdJsZvjkCuuhL4UHig8MZXtXs0nsi7Ir3ezUDQ9m5MSG+ooBYM/CA9DyLDvo5Ioef+g==} + '@react-aria/searchfield@3.7.9': + resolution: {integrity: sha512-EHODG7HDFthwG5tx4fh+WP2hjNOp/rPAqdNScKBAN73nEf0F/qQpIwmdZF0EycCOzGSM5hhihjm0yMtTFYuzOQ==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/select@3.14.4': - resolution: {integrity: sha512-MeFN8pw9liXwejkJS+hg0fDqGa3oW/mIwZYx8CrZZLbPnEcjZ9NI4ZXSxJaMOHEIQj/RXQ3Fpu0Sunu9FVpYXQ==} + '@react-aria/select@3.14.10': + resolution: {integrity: sha512-xHkAJqvfKgnH5mVYwZj3ME7/Q3wUzgUZDK/iVuXUs3cAYap8ybM2d/2zOGcqv1keZHBUzwp9QtaN//FYK13jIA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + + '@react-aria/select@3.14.3': + resolution: {integrity: sha512-9KCxI41FI+jTxEfUzRsMdJsZvjkCuuhL4UHig8MZXtXs0nsi7Ir3ezUDQ9m5MSG+ooBYM/CA9DyLDvo5Ioef+g==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -5543,25 +5561,20 @@ packages: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/selection@3.18.0': - resolution: {integrity: sha512-6ZvRuS9OHe56UVTb/qnsZ1TOxpZH9gRlX6eGG3Pt4LZK12wcvs13Uz2OvB2aYQHu0KPAua9ACnPh94xvXzQIlQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/selection@3.18.1': resolution: {integrity: sha512-GSqN2jX6lh7v+ldqhVjAXDcrWS3N4IsKXxO6L6Ygsye86Q9q9Mq9twWDWWu5IjHD6LoVZLUBCMO+ENGbOkyqeQ==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/separator@3.3.11': - resolution: {integrity: sha512-UTla+3P2pELpP73WSfbwZgP1y1wODFBQbEOHnUxxO8ocyaUyQLJdvc07bBLLpPoyutlggRG0v9ACo0Rui7AjOg==} + '@react-aria/selection@3.20.0': + resolution: {integrity: sha512-h3giMcXo4SMZRL5HrqZvOLNTsdh5jCXwLUx0wpj/2EF0tcYQL6WDfn1iJ+rHARkUIs7X70fUV8iwlbUySZy1xg==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/separator@3.3.12': - resolution: {integrity: sha512-KXeHynxek/DlAmjmry+M2KVRq+j75LqWFysX4x7t+OSbGR4t3bu5HRDd9bvDe9lsW8OKxlX3+hWTY7vsOL/HDA==} + '@react-aria/separator@3.3.11': + resolution: {integrity: sha512-UTla+3P2pELpP73WSfbwZgP1y1wODFBQbEOHnUxxO8ocyaUyQLJdvc07bBLLpPoyutlggRG0v9ACo0Rui7AjOg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -5570,13 +5583,18 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/slider@3.7.6': - resolution: {integrity: sha512-ZeZhyHzhk9gxGuThPKgX2K3RKsxPxsFig1iYoJvqP8485NtHYQIPht2YcpEKA9siLxGF0DR9VCfouVhSoW0AEA==} + '@react-aria/separator@3.4.3': + resolution: {integrity: sha512-L+eCmSGfRJ9jScHZqBkmOkp44LBARisDjRdYbGrLlsAEcOiHUXufnfpxz2rgkUGBdUgnI9hIk12q5kdy0UxGjg==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/slider@3.7.7': - resolution: {integrity: sha512-7tOJyR4ZZoSMKcVomC6DZxyYuXQqQopi9mPW2J1fViD1R5iO8YVmoX/ALXnokzi8GPuMA0c38i2Cmnecm30ZXA==} + '@react-aria/slider@3.7.12': + resolution: {integrity: sha512-yZWBGxDHBL5Gjjdnz+igdO7VfYND9iZsSqynadZthWtfy1jA+qBR25I+Soc0D9gkr/2/JUJkFgkllYF1RzWMUQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + + '@react-aria/slider@3.7.6': + resolution: {integrity: sha512-ZeZhyHzhk9gxGuThPKgX2K3RKsxPxsFig1iYoJvqP8485NtHYQIPht2YcpEKA9siLxGF0DR9VCfouVhSoW0AEA==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -5591,59 +5609,53 @@ packages: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/spinbutton@3.6.4': - resolution: {integrity: sha512-KMnwm3bEM83g8MILGt6irbvAG7DNphkq6O0ePt7L1m6QZhWK3hbI2RNlxYMF1OKIDTAOhnEjR6IdMCWt9TuXvQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/spinbutton@3.6.5': resolution: {integrity: sha512-0aACBarF/Xr/7ixzjVBTQ0NBwwwsoGkf5v6AVFVMTC0uYMXHTALvRs+ULHjHMa5e/cX/aPlEvaVT7jfSs+Xy9Q==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + '@react-aria/spinbutton@3.6.9': + resolution: {integrity: sha512-m+uVJdiIc2LrLVDGjU7p8P2O2gUvTN26GR+NgH4rl+tUSuAB0+T1rjls/C+oXEqQjCpQihEB9Bt4M+VHpzmyjA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + '@react-aria/ssr@3.9.2': resolution: {integrity: sha512-0gKkgDYdnq1w+ey8KzG9l+H5Z821qh9vVjztk55rUg71vTk/Eaebeir+WtzcLLwTjw3m/asIjx8Y59y1lJZhBw==} engines: {node: '>= 12'} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/ssr@3.9.3': - resolution: {integrity: sha512-5bUZ93dmvHFcmfUcEN7qzYe8yQQ8JY+nHN6m9/iSDCQ/QmCiE0kWXYwhurjw5ch6I8WokQzx66xKIMHBAa4NNA==} + '@react-aria/ssr@3.9.4': + resolution: {integrity: sha512-4jmAigVq409qcJvQyuorsmBR4+9r3+JEC60wC+Y0MZV0HCtTmm8D9guYXlJMdx0SSkgj0hHAyFm/HvPNFofCoQ==} engines: {node: '>= 12'} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/ssr@3.9.4': - resolution: {integrity: sha512-4jmAigVq409qcJvQyuorsmBR4+9r3+JEC60wC+Y0MZV0HCtTmm8D9guYXlJMdx0SSkgj0hHAyFm/HvPNFofCoQ==} + '@react-aria/ssr@3.9.6': + resolution: {integrity: sha512-iLo82l82ilMiVGy342SELjshuWottlb5+VefO3jOQqQRNYnJBFpUSadswDPbRimSgJUZuFwIEYs6AabkP038fA==} engines: {node: '>= 12'} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 '@react-aria/switch@3.6.2': resolution: {integrity: sha512-X5m/omyhXK+V/vhJFsHuRs2zmt9Asa/RuzlldbXnWohLdeuHMPgQnV8C9hg3f+sRi3sh9UUZ64H61pCtRoZNwg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/switch@3.6.3': - resolution: {integrity: sha512-UBWbTEnnlTDT/dFOEpGKfX5ngPTIOVDLX1ltUhDHHk6SrgSnvYxTPTZAo+ujHIUSBFHOuxmvVYG7y54rk168mg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/switch@3.6.4': resolution: {integrity: sha512-2nVqz4ZuJyof47IpGSt3oZRmp+EdS8wzeDYgf42WHQXrx4uEOk1mdLJ20+NnsYhj/2NHZsvXVrjBeKMjlMs+0w==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/table@3.13.5': - resolution: {integrity: sha512-P2nHEDk2CCoEbMFKNCyBC9qvmv7F/IXARDt/7z/J4mKFgU2iNSK+/zw6yrb38q33Zlk8hDaqSYNxHlMrh+/1MQ==} + '@react-aria/switch@3.6.8': + resolution: {integrity: sha512-6Q0w7o+liB0ztKPL9UaRfX+hPPuy71AL3SuVCMK7RKfPqZwcmlwUDp2gr3j5fvs8gLev0r42XtEBqmGwkHTkEw==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/table@3.14.0': - resolution: {integrity: sha512-IwBmzeIxeZjWlOlmMXVj/L64FbYm3qUh7v3VRgU98BVOdvgUyEKBDIwi6SuOV4FwbXKrCPZbXPU/k+KQU4tUoQ==} + '@react-aria/table@3.13.5': + resolution: {integrity: sha512-P2nHEDk2CCoEbMFKNCyBC9qvmv7F/IXARDt/7z/J4mKFgU2iNSK+/zw6yrb38q33Zlk8hDaqSYNxHlMrh+/1MQ==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -5654,14 +5666,14 @@ packages: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/tabs@3.8.5': - resolution: {integrity: sha512-Jvt33/W+66n5oCxVwHAYarJ3Fit61vULiPcG7uTez0Mf11cq/C72wOrj+ZuNz6PTLTi2veBNQ7MauY72SnOjRg==} + '@react-aria/table@3.15.4': + resolution: {integrity: sha512-t4+vtUF63i6OrXmZ0AA/RmWyIt8cieUm7cSXhQMooAgUjkvVqTNkQQRsntVOb+UNI5KmiGSe4jB3H4GVXz2X9w==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/tabs@3.9.0': - resolution: {integrity: sha512-E4IHOO9ejEXNeSnpeThu79pDpNySHHYz3txr9ngtH6tp097k/I1auSqbGJPy/kwLj6MCPEt86dNJDXE2X0AcFw==} + '@react-aria/tabs@3.8.5': + resolution: {integrity: sha512-Jvt33/W+66n5oCxVwHAYarJ3Fit61vULiPcG7uTez0Mf11cq/C72wOrj+ZuNz6PTLTi2veBNQ7MauY72SnOjRg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -5672,14 +5684,14 @@ packages: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/tag@3.3.3': - resolution: {integrity: sha512-tlJD9qj1XcsPIZD7DVJ6tWv8t7Z87/8qkbRDx7ugNqeHso9z0WqH9ZkSt17OFUWE2IQIk3V8D3iBSOtmhXcZGQ==} + '@react-aria/tabs@3.9.6': + resolution: {integrity: sha512-iPQ2Im+srnSB06xIdVNHZZDJnZmUR0IG0MZAp6FXmbkCeLAd9tZQHgSFYwswBfgAStNnyFQHP5aSBJOJMRCACg==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/tag@3.4.0': - resolution: {integrity: sha512-kTrj0zEIyABgdASZMM7qxe0LAEePAxlg4OmfjZfkiAYYV32liY4EPER7ocE0OhOXo6TeOYYIvpEcr0z/4PjCpw==} + '@react-aria/tag@3.3.3': + resolution: {integrity: sha512-tlJD9qj1XcsPIZD7DVJ6tWv8t7Z87/8qkbRDx7ugNqeHso9z0WqH9ZkSt17OFUWE2IQIk3V8D3iBSOtmhXcZGQ==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -5690,13 +5702,14 @@ packages: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/textfield@3.14.3': - resolution: {integrity: sha512-wPSjj/mTABspYQdahg+l5YMtEQ3m5iPCTtb5g6nR1U1rzJkvS4i5Pug6PUXeLeMz2H3ToflPWGlNOqBioAFaOQ==} + '@react-aria/tag@3.4.6': + resolution: {integrity: sha512-Uf1sPabwJx99diyXJTaVguiYozS49opjQxmK1PPbb87ipNN1YlSDVbP05IelVMbnbxXHudsRmzPOBmmblcj1GQ==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/textfield@3.14.4': - resolution: {integrity: sha512-fdZChDyTRA4BPqbyDeD9gSw6rVeIAl7eG38osRwr0mzcKTiS/AyV3jiRwnHsBO9brU8RdViJFri4emVDuxSjag==} + '@react-aria/textfield@3.14.3': + resolution: {integrity: sha512-wPSjj/mTABspYQdahg+l5YMtEQ3m5iPCTtb5g6nR1U1rzJkvS4i5Pug6PUXeLeMz2H3ToflPWGlNOqBioAFaOQ==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -5705,13 +5718,13 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/toggle@3.10.2': - resolution: {integrity: sha512-DgitscHWgI6IFgnvp2HcMpLGX/cAn+XX9kF5RJQbRQ9NqUgruU5cEEGSOLMrEJ6zXDa2xmOiQ+kINcyNhA+JLg==} + '@react-aria/textfield@3.14.9': + resolution: {integrity: sha512-LPwZhthDVLyvnzXWco4eyYCD2pFmQ4Vw9ha9tb3QkZUIP6j8E52y76j0c59Nq7XYus3IHatVe7yYQk7kbo8Zrg==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/toggle@3.10.3': - resolution: {integrity: sha512-QtufHlWczMcTGmRxF7RCEgfMKpUPivyXJWZsQ1HSlknjRJPzf4uc3mSR62hq2sZ0VN9zXEpUsoixbEDB87TnGg==} + '@react-aria/toggle@3.10.2': + resolution: {integrity: sha512-DgitscHWgI6IFgnvp2HcMpLGX/cAn+XX9kF5RJQbRQ9NqUgruU5cEEGSOLMrEJ6zXDa2xmOiQ+kINcyNhA+JLg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -5720,13 +5733,13 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/toolbar@3.0.0-beta.3': - resolution: {integrity: sha512-tPIEPRsZI/6Mb0tAW/GBTt3wBk7dfJg/eUnTloY8NHialvDa+cMUQyUVzPyLWGpErhYeBeutBmw1e2seMjmu+A==} + '@react-aria/toggle@3.10.8': + resolution: {integrity: sha512-N6WTgE8ByMYY+ZygUUPGON2vW5NrxwU91H98+Nozl+Rq6ZYR2fD9i8oRtLtrYPxjU2HmaFwDyQdWvmMJZuDxig==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/toolbar@3.0.0-beta.4': - resolution: {integrity: sha512-nerKAoHwHFTvf25DDtj8d/zlDaZHaTPWvL4gweTm3hu9ztisE58CoVUqzqH+VNiYjcrWr2PYgLbNLsuOzk0q1Q==} + '@react-aria/toolbar@3.0.0-beta.3': + resolution: {integrity: sha512-tPIEPRsZI/6Mb0tAW/GBTt3wBk7dfJg/eUnTloY8NHialvDa+cMUQyUVzPyLWGpErhYeBeutBmw1e2seMjmu+A==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -5735,13 +5748,13 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/tooltip@3.7.2': - resolution: {integrity: sha512-6jXOSGPao3gPgUQWLbH2r/jxGMqIaIKrJgfwu9TQrh+UkwwiTYW20EpEDCYY2nRFlcoi7EYAiPDSEbHCwXS7Lg==} + '@react-aria/toolbar@3.0.0-beta.9': + resolution: {integrity: sha512-P80zgbPb0aIg22fHlgHRXXUSpNSAOnh1ljsLiSHAGdXPrC5nRijYwwKi7DNRsXqD+ljEJwF6ekZPo95dXXeYAA==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/tooltip@3.7.3': - resolution: {integrity: sha512-uF2J/GRKTHSeEYMwvXTu7oK710nov/NRbY7db2Hh7yXluGmjJORXb5wxsy+lqHaWqPKBbkhmxBJYeJJpAqlZ5g==} + '@react-aria/tooltip@3.7.2': + resolution: {integrity: sha512-6jXOSGPao3gPgUQWLbH2r/jxGMqIaIKrJgfwu9TQrh+UkwwiTYW20EpEDCYY2nRFlcoi7EYAiPDSEbHCwXS7Lg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -5750,11 +5763,10 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/tree@3.0.0-alpha.0': - resolution: {integrity: sha512-/5dqWjSHEMlrvoJTsQuGHrtKRoxYco5OKrdIf5UQq5wHB/quUD6ZexEfn9/NzflyoHVz2zPIm7RU8J9WuZugNw==} + '@react-aria/tooltip@3.7.8': + resolution: {integrity: sha512-dlWfS3w8E6dw5Xoist4cVX2GQE5oh3VQr88dRyLto7BAPLFrp3I+8c9mZCVUobLS/f5QcQzLkqw750s4ENCyiw==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 '@react-aria/tree@3.0.0-alpha.1': resolution: {integrity: sha512-CucyeJ4VeAvWO5UJHt/l9JO65CVtsOVUctMOVNCQS77Isqp3olX9pvfD3LXt8fD5Ph2g0Q/b7siVpX5ieVB32g==} @@ -5762,13 +5774,14 @@ packages: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/utils@3.23.2': - resolution: {integrity: sha512-yznR9jJ0GG+YJvTMZxijQwVp+ahP66DY0apZf7X+dllyN+ByEDW+yaL1ewYPIpugxVzH5P8jhnBXsIyHKN411g==} + '@react-aria/tree@3.0.0-beta.0': + resolution: {integrity: sha512-bF9sp7x+Ciy0N2KJwy8epmDoNblyVmeB4vR/KWLVIKMjANCpzTbvhWZUBpQxkpO0eupInU2uN+FMNr0WKMyd7Q==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/utils@3.24.0': - resolution: {integrity: sha512-JAxkPhK5fCvFVNY2YG3TW3m1nTzwRcbz7iyTSkUzLFat4N4LZ7Kzh7NMHsgeE/oMOxd8zLY+XsUxMu/E/2GujA==} + '@react-aria/utils@3.23.2': + resolution: {integrity: sha512-yznR9jJ0GG+YJvTMZxijQwVp+ahP66DY0apZf7X+dllyN+ByEDW+yaL1ewYPIpugxVzH5P8jhnBXsIyHKN411g==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -5777,13 +5790,19 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/visually-hidden@3.8.10': - resolution: {integrity: sha512-np8c4wxdbE7ZrMv/bnjwEfpX0/nkWy9sELEb0sK8n4+HJ+WycoXXrVxBUb9tXgL/GCx5ReeDQChjQWwajm/z3A==} + '@react-aria/utils@3.25.3': + resolution: {integrity: sha512-PR5H/2vaD8fSq0H/UB9inNbc8KDcVmW6fYAfSWkkn+OAdhTTMVKqXXrZuZBWyFfSD5Ze7VN6acr4hrOQm2bmrA==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/visually-hidden@3.8.11': - resolution: {integrity: sha512-1JFruyAatoKnC18qrix8Q1gyUNlizWZvYdPADgB5btakMy0PEGTWPmFRK5gFsO+N0CZLCFTCip0dkUv6rrp31w==} + '@react-aria/virtualizer@4.0.3': + resolution: {integrity: sha512-neSf+EXtqmQiccHcp9CS2RbH3xA6FuZggLzGsM1NoqDdXIL7TLfc7lhaqi8VAZ03e1FCUSye08BCRk3DdpUiyA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + + '@react-aria/visually-hidden@3.8.10': + resolution: {integrity: sha512-np8c4wxdbE7ZrMv/bnjwEfpX0/nkWy9sELEb0sK8n4+HJ+WycoXXrVxBUb9tXgL/GCx5ReeDQChjQWwajm/z3A==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -5792,18 +5811,18 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-spectrum/utils@3.11.5': - resolution: {integrity: sha512-V4heIuCBXhYOP3om5B0KNs2+RK6RKwAhHVjjJZ3RBeNqsF9UDxv+D/+dk3sAM2dsM1F8l38BNXQMMWXWW/BZYA==} + '@react-aria/visually-hidden@3.8.16': + resolution: {integrity: sha512-3zThVIzEprez4A/GajOut6/JQ4WCu2ROHGZ1xH1+2GFjBJQaTfPBIjg6UIwaT7sgHRQIik8QidogLqXHbp81yA==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-stately/calendar@3.4.4': - resolution: {integrity: sha512-f9ZOd096gGGD+3LmU1gkmfqytGyQtrgi+Qjn+70GbM2Jy65pwOR4I9YrobbmeAFov5Tff13mQEa0yqWvbcDLZQ==} + '@react-spectrum/utils@3.11.11': + resolution: {integrity: sha512-Fed8tePDyxfG7CND6H+3Os+5DKwdaOl8VXznTtGNFD44gjCI8/LDxk+9YRN8SQCHMnFkEFobCDme98wFWDdpCQ==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-stately/calendar@3.5.0': - resolution: {integrity: sha512-tINxgGAeZ9KsYNomuR50PljG2mN9C9FWQ8zyvATfFq44EFcjjdXCMNWV+qgIRKGKLwrSJhu3boPaiHVIpUxrXA==} + '@react-stately/calendar@3.4.4': + resolution: {integrity: sha512-f9ZOd096gGGD+3LmU1gkmfqytGyQtrgi+Qjn+70GbM2Jy65pwOR4I9YrobbmeAFov5Tff13mQEa0yqWvbcDLZQ==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -5812,13 +5831,13 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/checkbox@3.6.3': - resolution: {integrity: sha512-hWp0GXVbMI4sS2NbBjWgOnHNrRqSV4jeftP8zc5JsIYRmrWBUZitxluB34QuVPzrBO29bGsF0GTArSiQZt6BWw==} + '@react-stately/calendar@3.5.5': + resolution: {integrity: sha512-HzaiDRhrmaYIly8hRsjjIrydLkldiw1Ws6T/130NLQOt+VPwRW/x0R+nil42mA9LZ6oV0XN0NpmG5tn7TaKRGw==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-stately/checkbox@3.6.4': - resolution: {integrity: sha512-gecaRtWeQNoJuSl3AtfV6z6LjaUV578Kzbag8d3pTPbGXl8komTtTj/26nIEPsmf/L8jZ3kCscDGxGTKr+7sqg==} + '@react-stately/checkbox@3.6.3': + resolution: {integrity: sha512-hWp0GXVbMI4sS2NbBjWgOnHNrRqSV4jeftP8zc5JsIYRmrWBUZitxluB34QuVPzrBO29bGsF0GTArSiQZt6BWw==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -5827,13 +5846,13 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/collections@3.10.5': - resolution: {integrity: sha512-k8Q29Nnvb7iAia1QvTanZsrWP2aqVNBy/1SlE6kLL6vDqtKZC+Esd1SDLHRmIcYIp5aTdfwIGd0NuiRQA7a81Q==} + '@react-stately/checkbox@3.6.9': + resolution: {integrity: sha512-JrY3ecnK/SSJPxw+qhGhg3YV4e0CpUcPDrVwY3mSiAE932DPd19xr+qVCknJ34H7JYYt/q0l2z0lmgPnl96RTg==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-stately/collections@3.10.6': - resolution: {integrity: sha512-hb/yzxQnZaSRu43iR6ftkCJIqD4Qu5WUjl4ASBn2EGb9TmipA7bFnYVqSH4xFPCCTZ68Qxh95dOcxYBHlHeWZQ==} + '@react-stately/collections@3.10.5': + resolution: {integrity: sha512-k8Q29Nnvb7iAia1QvTanZsrWP2aqVNBy/1SlE6kLL6vDqtKZC+Esd1SDLHRmIcYIp5aTdfwIGd0NuiRQA7a81Q==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -5842,23 +5861,28 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/color@3.6.0': - resolution: {integrity: sha512-sjQDjE1zBAnaJaqssP4Ep63Pd32xvLOwcfUmXAOua6s+8CKVlKQqr5BoBiBnqvGGmy7oTlEJd1dkfZA+bvh/zw==} + '@react-stately/collections@3.11.0': + resolution: {integrity: sha512-TiJeJjHMPSbbeAhmCXLJNSCk0fa5XnCvEuYw6HtQzDnYiq1AD7KAwkpjC5NfKkjqF3FLXs/v9RDm/P69q6rYzw==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 '@react-stately/color@3.6.1': resolution: {integrity: sha512-iW0nAhl3+fUBegHMw5EcAbFVDpgwHBrivfC85pVoTM3pyzp66hqNN6R6xWxW6ETyljS8UOer59+/w4GDVGdPig==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/combobox@3.8.2': - resolution: {integrity: sha512-f+IHuFW848VoMbvTfSakn2WIh2urDxO355LrKxnisXPCkpQHpq3lvT2mJtKJwkPxjAy7xPjpV8ejgga2R6p53Q==} + '@react-stately/color@3.8.0': + resolution: {integrity: sha512-lBH91HEStZeayhE/FkDMt9WC0UISQiAn8DoD2hfpTGeeWscX/soyxZA7oVL7zBOG9RfDBMNzF+CybVROrWSKAQ==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-stately/combobox@3.8.3': - resolution: {integrity: sha512-lmwt2M39jHQUA9CWKhTc9MVoUBKuJM1Y+9GYPElON8P/guQL6G3bM1u8I4Hxf0zzGzAIW3ymV57bF9mcaA/nzA==} + '@react-stately/combobox@3.10.0': + resolution: {integrity: sha512-4W4HCCjjoddW/LZM3pSSeLoV7ncYXlaICKmqlBcbtLR5jY4U5Kx+pPpy3oJ1vCdjDHatIxZ0tVKEBP7vBQVeGQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + + '@react-stately/combobox@3.8.2': + resolution: {integrity: sha512-f+IHuFW848VoMbvTfSakn2WIh2urDxO355LrKxnisXPCkpQHpq3lvT2mJtKJwkPxjAy7xPjpV8ejgga2R6p53Q==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -5872,23 +5896,23 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/data@3.11.3': - resolution: {integrity: sha512-iyg27s3uUquxvX5AXckAgOPszG6uX7fCOIg0D/GJXxdFxLv1gFSupIeIJhM+kXufPgpaLiugaQxoYlO5y65shA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/data@3.11.4': resolution: {integrity: sha512-PbnUQxeE6AznSuEWYnRmrYQ9t5z1Asx98Jtrl96EeA6Iapt9kOjTN9ySqCxtPxMKleb1NIqG3+uHU3veIqmLsg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/datepicker@3.9.2': - resolution: {integrity: sha512-Z6FrK6Af7R5BizqHhJFCj3Hn32mg5iLSDdEgFQAuO043guOXUKFUAnbxfbQUjL6PGE6QwWMfQD7PPGebHn9Ifw==} + '@react-stately/data@3.11.7': + resolution: {integrity: sha512-2YJ+Lmca18f/h7jiZiU9j2IhBJl6BFO1BWlwvcCAH/eCWTdveX8gzsUdW++0szzpJaoCilTCYoi8z7QWyVH9jQ==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + + '@react-stately/datepicker@3.10.3': + resolution: {integrity: sha512-6PJW1QMwk6BQMktV9L6DA4f2rfAdLfbq3iTNLy4qxd5IfNPLMUZiJGGTj+cuqx0WcEl+q5irp+YhKBpbmhPZHg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-stately/datepicker@3.9.3': - resolution: {integrity: sha512-NjZ8uqxmKf7mGLNWSZsvm22xX46k+yo0QkPspONuorHFTf8qqCnp4i+bBpEpaVCwX5KVSRdjxJOk7XhvJF8q4w==} + '@react-stately/datepicker@3.9.2': + resolution: {integrity: sha512-Z6FrK6Af7R5BizqHhJFCj3Hn32mg5iLSDdEgFQAuO043guOXUKFUAnbxfbQUjL6PGE6QwWMfQD7PPGebHn9Ifw==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -5897,13 +5921,13 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/dnd@3.2.8': - resolution: {integrity: sha512-oSo+2Bzum3Q1/d+3FuaDmpVHqqBB004tycuQDDFtad3N1BKm+fNfmslRK1ioLkPLK4sm1130V+BZBY3JXLe80A==} + '@react-stately/disclosure@3.0.0-alpha.0': + resolution: {integrity: sha512-CbFUrEwhsP5+44PMHipn/Cd61VTvqyKmx1yeNDyvj/4bYhmxYLgQp/Ma+iEqe23JkXJh2JO/ws3l9FnebScCJQ==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-stately/dnd@3.3.0': - resolution: {integrity: sha512-bHH3B4wFqfATpyxpP5Wdv/5uQdci4WvStJgeExj7Yy2UwYSsZEnS6Ky0MhLLFdIyUpragjiSCzYcYwwli6oHUQ==} + '@react-stately/dnd@3.2.8': + resolution: {integrity: sha512-oSo+2Bzum3Q1/d+3FuaDmpVHqqBB004tycuQDDFtad3N1BKm+fNfmslRK1ioLkPLK4sm1130V+BZBY3JXLe80A==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -5912,37 +5936,37 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + '@react-stately/dnd@3.4.3': + resolution: {integrity: sha512-sUvhmMxFEw6P2MW7walx0ntakIihxdPxA06K9YZ3+ReaUvzQuRw5cFDaTTHrlegWRMYD0CyQaKlGIaTQihhvVA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + '@react-stately/flags@3.0.1': resolution: {integrity: sha512-h5PcDMj54aipQNO18ig/IMI1kzPwcvSwVq5M6Ib6XE1WIkOH0dIuW2eADdAOhcGi3KXJtXVdD29zh0Eox1TKgQ==} - '@react-stately/flags@3.0.2': - resolution: {integrity: sha512-/KyVJMND2WdkgoHpt+m+ash7h5q9pq91DLgyizQWcbf2xphicH9D1HKAB8co3Cfvq6T/QqjQEP8aBkheiPyfEg==} - '@react-stately/flags@3.0.3': resolution: {integrity: sha512-/ha7XFA0RZTQsbzSPwu3KkbNMgbvuM0GuMTYLTBWpgBrovBNTM+QqI/PfZTdHg8PwCYF4H5Y8gjdSpdulCvJFw==} + '@react-stately/flags@3.0.4': + resolution: {integrity: sha512-RNJEkOALwKg+JeYsfNlfPc4GXm7hiBLX0yuHOkRapWEyDOfi0cinkV/TZG4goOZdQ5tBpHmemf2qqiHAxqHlzQ==} + '@react-stately/form@3.0.1': resolution: {integrity: sha512-T1Ul2Ou0uE/S4ECLcGKa0OfXjffdjEHfUFZAk7OZl0Mqq/F7dl5WpoLWJ4d4IyvZzGO6anFNenP+vODWbrF3NA==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/form@3.0.2': - resolution: {integrity: sha512-MA4P9lHv770I3DJpJTQlkh5POVuklmeQuixwlbyKzlWT+KqFSOXvqaliszqU7gyDdVGAFksMa6E3mXbGbk1wuA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/form@3.0.3': resolution: {integrity: sha512-92YYBvlHEWUGUpXgIaQ48J50jU9XrxfjYIN8BTvvhBHdD63oWgm8DzQnyT/NIAMzdLnhkg7vP+fjG8LjHeyIAg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/grid@3.8.5': - resolution: {integrity: sha512-KCzi0x0p1ZKK+OptonvJqMbn6Vlgo6GfOIlgcDd0dNYDP8TJ+3QFJAFre5mCr7Fubx7LcAOio4Rij0l/R8fkXQ==} + '@react-stately/form@3.0.6': + resolution: {integrity: sha512-KMsxm3/V0iCv/6ikt4JEjVM3LW2AgCzo7aNotMzRobtwIo0RwaUo7DQNY00rGgFQ3/IjzI6DcVo13D+AVE/zXg==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-stately/grid@3.8.6': - resolution: {integrity: sha512-XkxDfaIAWzbsb5pnL2IE4FqQbqegVzPnU+R2ZvDrJT7514I2usSMoJ2ZUUoy8DIYQomJHB5QKZeyQkGIelHMcg==} + '@react-stately/grid@3.8.5': + resolution: {integrity: sha512-KCzi0x0p1ZKK+OptonvJqMbn6Vlgo6GfOIlgcDd0dNYDP8TJ+3QFJAFre5mCr7Fubx7LcAOio4Rij0l/R8fkXQ==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -5951,13 +5975,18 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/list@3.10.3': - resolution: {integrity: sha512-Ul8el0tQy2Ucl3qMQ0fiqdJ874W1ZNjURVSgSxN+pGwVLNBVRjd6Fl7YwZFCXER2YOlzkwg+Zqozf/ZlS0EdXA==} + '@react-stately/grid@3.9.3': + resolution: {integrity: sha512-P5KgCNYwm/n8bbLx6527li89RQWoESikrsg2MMyUpUd6IJ321t2pGONGRRQzxE0SBMolPRDJKV0Do2OlsjYKhQ==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + + '@react-stately/layout@4.0.3': + resolution: {integrity: sha512-zFLXnPalWWVCdFGcPAb+nywSTz/xAnKRxb7zT+YDa5U80DHArDGKZcQ+by0+2Sf8yaYolROco4my+BERPXJB6A==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-stately/list@3.10.4': - resolution: {integrity: sha512-sj501OKcQr+1Zdo0m6NuvpZDHLE0tUdReSKcWqt35odzC6ic/qr7C7ozZ/5ay+nuHTryUUTC/mDQ0zlBmQX0dA==} + '@react-stately/list@3.10.3': + resolution: {integrity: sha512-Ul8el0tQy2Ucl3qMQ0fiqdJ874W1ZNjURVSgSxN+pGwVLNBVRjd6Fl7YwZFCXER2YOlzkwg+Zqozf/ZlS0EdXA==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -5966,13 +5995,13 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/menu@3.6.1': - resolution: {integrity: sha512-3v0vkTm/kInuuG8jG7jbxXDBnMQcoDZKWvYsBQq7+POt0LmijbLdbdZPBoz9TkZ3eo/OoP194LLHOaFTQyHhlw==} + '@react-stately/list@3.11.0': + resolution: {integrity: sha512-O+BxXcbtoLZWn4QIT54RoFUaM+QaJQm6s0ZBJ3Jv4ILIhukVOc55ra+aWMVlXFQSpbf6I3hyVP6cz1yyvd5Rtw==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-stately/menu@3.7.0': - resolution: {integrity: sha512-8UJhvKEF+zaHXrwv0YhFr73OSEprzIs6xRNoV6F/omd4twy1ngPZrL1X8HNzaXsf5BrHuib2tbh81e/Z95D3nA==} + '@react-stately/menu@3.6.1': + resolution: {integrity: sha512-3v0vkTm/kInuuG8jG7jbxXDBnMQcoDZKWvYsBQq7+POt0LmijbLdbdZPBoz9TkZ3eo/OoP194LLHOaFTQyHhlw==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -5981,13 +6010,13 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/numberfield@3.9.1': - resolution: {integrity: sha512-btBIcBEfSVCUm6NwJrMrMygoIu/fQGazzD0RhF7PNsfvkFiWn+TSOyQqSXcsUJVOnBfoS/dVWj6r57KA7zl3FA==} + '@react-stately/menu@3.8.3': + resolution: {integrity: sha512-sV63V+cMgzipx/N7dq5GaXoItfXIfFEpCtlk3PM2vKstlCJalszXrdo+x996bkeU96h0plB7znAlhlXOeTKzUg==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-stately/numberfield@3.9.2': - resolution: {integrity: sha512-Sp+0MnqaqZ/Tu8qalZXbMIXyvZ7aXIny2PxNIxmnqxVHfxIzQCLJW5Y4bJr1yJIHH3QDZic5OyqS72MBWBXnIA==} + '@react-stately/numberfield@3.9.1': + resolution: {integrity: sha512-btBIcBEfSVCUm6NwJrMrMygoIu/fQGazzD0RhF7PNsfvkFiWn+TSOyQqSXcsUJVOnBfoS/dVWj6r57KA7zl3FA==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -5996,13 +6025,18 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/overlays@3.6.5': - resolution: {integrity: sha512-U4rCFj6TPJPXLUvYXAcvh+yP/CO2W+7f0IuqP7ZZGE+Osk9qFkT+zRK5/6ayhBDFpmueNfjIEAzT9gYPQwNHFw==} + '@react-stately/numberfield@3.9.7': + resolution: {integrity: sha512-PjSgCCpYasGCEAznFQNqa2JhhEQ5+/2eMiV7ZI5j76q3edTNF8G5OOCl2RazDbzFp6vDAnRVT7Kctx5Tl5R/Zw==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-stately/overlays@3.6.6': - resolution: {integrity: sha512-NvzQXh4zYGZuUmZH5d3NmEDNr8r1hfub2s5w7WOeIG35xqIzoKGdFZ7LLWrie+4nxPmM+ckdfqOQ9pBZFNJypQ==} + '@react-stately/overlays@3.6.11': + resolution: {integrity: sha512-usuxitwOx4FbmOW7Og4VM8R8ZjerbHZLLbFaxZW7pWLs7Ypway1YhJ3SWcyNTYK7NEk4o602kSoU6MSev1Vgag==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + + '@react-stately/overlays@3.6.5': + resolution: {integrity: sha512-U4rCFj6TPJPXLUvYXAcvh+yP/CO2W+7f0IuqP7ZZGE+Osk9qFkT+zRK5/6ayhBDFpmueNfjIEAzT9gYPQwNHFw==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -6016,23 +6050,18 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/radio@3.10.3': - resolution: {integrity: sha512-EWLLRgLQ9orI7G9uPuJv1bdZPu3OoRWy1TGSn+6G8b8rleNx3haI4eZUR+JGB0YNgemotMz/gbNTNG/wEIsRgw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/radio@3.10.4': resolution: {integrity: sha512-kCIc7tAl4L7Hu4Wt9l2jaa+MzYmAJm0qmC8G8yPMbExpWbLRu6J8Un80GZu+JxvzgDlqDyrVvyv9zFifwH/NkQ==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/searchfield@3.5.1': - resolution: {integrity: sha512-9A8Wghx1avRHhMpNH1Nj+jFfiF1bhsff2GEC5PZgWYzhCykw3G5bywn3JAuUS4kh7Vpqhbu4KpHAhmWPSv4B/Q==} + '@react-stately/radio@3.10.8': + resolution: {integrity: sha512-VRq6Gzsbk3jzX6hdrSoDoSra9vLRsOi2pLkvW/CMrJ0GSgMwr8jjvJKnNFvYJ3eYQb20EwkarsOAfk7vPSIt/Q==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-stately/searchfield@3.5.2': - resolution: {integrity: sha512-M73mhUCbY5aJAtVH8BF9TeBwOtEMC7G1N/W6j71V8f3MlN0ppN0n4pZWW3CMd2x0BKuYum8KPvcL1DgiXzoo5A==} + '@react-stately/searchfield@3.5.1': + resolution: {integrity: sha512-9A8Wghx1avRHhMpNH1Nj+jFfiF1bhsff2GEC5PZgWYzhCykw3G5bywn3JAuUS4kh7Vpqhbu4KpHAhmWPSv4B/Q==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -6041,13 +6070,13 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/select@3.6.2': - resolution: {integrity: sha512-duOxdHKol93h6Ew6fap6Amz+zngoERKZLSKVm/8I8uaBgkoBhEeTFv7mlpHTgINxymMw3mMrvy6GL/gfKFwkqg==} + '@react-stately/searchfield@3.5.7': + resolution: {integrity: sha512-VxEG4tWDypdXQ8f7clZBu5Qmc4osqDBeA/gNMA2i1j/h2zRVcCJ0fRCHuDeXLSWBqF1XXAI4TWV53fBBwJusbg==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-stately/select@3.6.3': - resolution: {integrity: sha512-d/ha6j0oiEaw/F5hgPgCZg1e8LObNmvsocEebxXPToVdwHd9H55r2Fogi5nLoiX8geHKiYm0KPfSxs/oXbW/5Q==} + '@react-stately/select@3.6.2': + resolution: {integrity: sha512-duOxdHKol93h6Ew6fap6Amz+zngoERKZLSKVm/8I8uaBgkoBhEeTFv7mlpHTgINxymMw3mMrvy6GL/gfKFwkqg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -6056,13 +6085,13 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/selection@3.14.3': - resolution: {integrity: sha512-d/t0rIWieqQ7wjLoMoWnuHEUSMoVXxkPBFuSlJF3F16289FiQ+b8aeKFDzFTYN7fFD8rkZTnpuE4Tcxg3TmA+w==} + '@react-stately/select@3.6.8': + resolution: {integrity: sha512-fLAVzGeYSdYdBdrEVws6Pb1ywFPdapA0eWphoW5s3fS0/pKcVWwbCHeHlaBEi1ISyqEubQZFGQdeFKm/M46Hew==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-stately/selection@3.15.0': - resolution: {integrity: sha512-OtypXNtvRWLmpkaktluzCYEXKXAON16WIJv2mZ4cae3H0UVfWaFL9sD+ST9nj7UqYNTDXECug5ziIY+YKd7zvA==} + '@react-stately/selection@3.14.3': + resolution: {integrity: sha512-d/t0rIWieqQ7wjLoMoWnuHEUSMoVXxkPBFuSlJF3F16289FiQ+b8aeKFDzFTYN7fFD8rkZTnpuE4Tcxg3TmA+w==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -6071,13 +6100,13 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/slider@3.5.2': - resolution: {integrity: sha512-ntH3NLRG+AwVC7q4Dx9DcmMkMh9vmHjHNXAgaoqNjhvwfSIae7sQ69CkVe6XeJjIBy6LlH81Kgapz+ABe5a1ZA==} + '@react-stately/selection@3.17.0': + resolution: {integrity: sha512-It3LRTaFOavybuDBvBH2mvCh73OL4awqvN4tZ0JzLzMtaYSBe9+YmFasYrzB0o7ca17B2q1tpUmsNWaAgIqbLA==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-stately/slider@3.5.3': - resolution: {integrity: sha512-jA0XR7GjtwoucLw8kx/KB50pSGNUbR7xNfM9t5H8D7k3wd+j4yqfarWyNFyPX/X5MJez+/bd+BIDJUl3XGOWkA==} + '@react-stately/slider@3.5.2': + resolution: {integrity: sha512-ntH3NLRG+AwVC7q4Dx9DcmMkMh9vmHjHNXAgaoqNjhvwfSIae7sQ69CkVe6XeJjIBy6LlH81Kgapz+ABe5a1ZA==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -6086,13 +6115,13 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/table@3.11.6': - resolution: {integrity: sha512-34YsfOILXusj3p6QNcKEaDWVORhM6WEhwPSLCZlkwAJvkxuRQFdih5rQKoIDc0uV5aZsB6bYBqiFhnjY0VERhw==} + '@react-stately/slider@3.5.8': + resolution: {integrity: sha512-EDgbrxMq1w3+XTN72MGl3YtAG/j65EYX1Uc3Fh56K00+inJbTdRWyYTrb3NA310fXCd0WFBbzExuH2ohlKQycg==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-stately/table@3.11.7': - resolution: {integrity: sha512-VvazamtoXLENeWJAYF1fJzfIAXO2qbiXCfosRLgkEMtoU2kGqV8DHYQhIXuqwMRn8nO8GVw9hgAiQQcKghgCXA==} + '@react-stately/table@3.11.6': + resolution: {integrity: sha512-34YsfOILXusj3p6QNcKEaDWVORhM6WEhwPSLCZlkwAJvkxuRQFdih5rQKoIDc0uV5aZsB6bYBqiFhnjY0VERhw==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -6101,13 +6130,18 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/tabs@3.6.4': - resolution: {integrity: sha512-WZJgMBqzLgN88RN8AxhY4aH1+I+4w1qQA0Lh3LRSDegaytd+NHixCWaP3IPjePgCB5N1UsPe96Xglw75zjHmDg==} + '@react-stately/table@3.12.3': + resolution: {integrity: sha512-8uGrLcNJYeMbFtzRQZFWCBj5kV+7v3jzwoKIL1j9TmYUKow1PTDMQbPJpAZLQhnC2wVMlaFVgDbedSlbBij7Zg==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-stately/tabs@3.6.5': - resolution: {integrity: sha512-z1saZgGRqb0AsoRi19iE4JOJaIRV73GjRnzUX9QSl3gpK75XsH31vbmtUYiXOXAd6Dt+1KFLgbyeCzMUlZEnMw==} + '@react-stately/tabs@3.6.10': + resolution: {integrity: sha512-F7wfoiNsrBy7c02AYHyE1USGgj05HQ0hp7uXmQjp2LEa+AA0NKKi3HdswTHHySxb0ZRuoEE7E7vp/gXQYx2/Ow==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + + '@react-stately/tabs@3.6.4': + resolution: {integrity: sha512-WZJgMBqzLgN88RN8AxhY4aH1+I+4w1qQA0Lh3LRSDegaytd+NHixCWaP3IPjePgCB5N1UsPe96Xglw75zjHmDg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -6121,23 +6155,23 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/toggle@3.7.3': - resolution: {integrity: sha512-4jW6wxTu7Gkq6/2mZWqtJoQ6ff27Cl6lnVMEXXM+M8HwK/3zHoMZhVz8EApwgOsRByxDQ76PNSGm3xKZAcqZNw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/toggle@3.7.4': resolution: {integrity: sha512-CoYFe9WrhLkDP4HGDpJYQKwfiYCRBAeoBQHv+JWl5eyK61S8xSwoHsveYuEZ3bowx71zyCnNAqWRrmNOxJ4CKA==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/tooltip@3.4.7': - resolution: {integrity: sha512-ACtRgBQ8rphBtsUaaxvEAM0HHN9PvMuyvL0vUHd7jvBDCVZJ6it1BKu9SBKjekBkoBOw9nemtkplh9R2CA6V8Q==} + '@react-stately/toggle@3.7.8': + resolution: {integrity: sha512-ySOtkByvIY54yIu8IZ4lnvomQA0H+/mkZnd6T5fKN3tjvIzHmkUk3TAPmNInUxHX148tSW6mWwec0xvjYqEd6w==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + + '@react-stately/tooltip@3.4.13': + resolution: {integrity: sha512-zQ+8FQ7Pi0Cz852dltXb6yaryjE18K3byK4tIO3e5vnrZHEGvfdxowc+v9ak5UV93kVrYoOVmfZHRcEaTXTBNA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-stately/tooltip@3.4.8': - resolution: {integrity: sha512-0D3cCeQhX5DjDpeuzFJwfX8SxIOxdL2iWPPjpC3hIxkUKuItavSq2A7G2tO39vpiip3RBOaaQMUpnSmjRK5DAQ==} + '@react-stately/tooltip@3.4.7': + resolution: {integrity: sha512-ACtRgBQ8rphBtsUaaxvEAM0HHN9PvMuyvL0vUHd7jvBDCVZJ6it1BKu9SBKjekBkoBOw9nemtkplh9R2CA6V8Q==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -6151,26 +6185,26 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/tree@3.8.0': - resolution: {integrity: sha512-7bfbCLjG8BTiWuo9GBE1A375PPI4S9r/rMtKQGLQvYAObgJb7C8P3svA9WKfryvl7M5iqaYrOVA0uzNSmeCNQQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/tree@3.8.1': resolution: {integrity: sha512-LOdkkruJWch3W89h4B/bXhfr0t0t1aRfEp+IMrrwdRAl23NaPqwl5ILHs4Xu5XDHqqhg8co73pHrJwUyiTWEjw==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/utils@3.10.0': - resolution: {integrity: sha512-nji2i9fTYg65ZWx/3r11zR1F2tGya+mBubRCbMTwHyRnsSLFZaeq/W6lmrOyIy1uMJKBNKLJpqfmpT4x7rw6pg==} + '@react-stately/tree@3.8.5': + resolution: {integrity: sha512-0/tYhsKWQQJTOZFDwh8hY3Qk6ejNFRldGrLeK5kS22UZdvsMFyh7WAi40FTCJy561/VoB0WqQI4oyNPOa9lYWg==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 '@react-stately/utils@3.10.1': resolution: {integrity: sha512-VS/EHRyicef25zDZcM/ClpzYMC5i2YGN6uegOeQawmgfGjb02yaCX0F0zR69Pod9m2Hr3wunTbtpgVXvYbZItg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + '@react-stately/utils@3.10.4': + resolution: {integrity: sha512-gBEQEIMRh5f60KCm7QKQ2WfvhB2gLUr9b72sqUdIZ2EG+xuPgaIlCBeSicvjmjBvYZwOjoOEnmIkcx2GHp/HWw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + '@react-stately/utils@3.9.1': resolution: {integrity: sha512-yzw75GE0iUWiyps02BOAPTrybcsMIxEJlzXqtvllAb01O9uX5n0i3X+u2eCpj2UoDF4zS08Ps0jPgWxg8xEYtA==} peerDependencies: @@ -6181,23 +6215,23 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/virtualizer@3.7.0': - resolution: {integrity: sha512-Wkh502y6mzUvjJJr30p5FLRwBaphnfmnoSnGwidamwo3HuyrDICBSlwFGPl0AmUHo1afSaLXl6j8smU48VcClA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/virtualizer@3.7.1': resolution: {integrity: sha512-voHgE6EQ+oZaLv6u2umKxakvIKNkCQuUihqKACTjdslp7SJh4Mvs3oLBI0hf0JOh+rCcFIKDvQtFwy1fXFRYBA==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/breadcrumbs@3.7.3': - resolution: {integrity: sha512-eFto/+6J+JR58vThNcALZRA1OlqlG3GzQ/bq3q8IrrkOZcrfbEJJCWit/+53Ia98siJKuF4OJHnotxIVIz5I3w==} + '@react-stately/virtualizer@4.1.0': + resolution: {integrity: sha512-MOaqpY3NloXrpCBvVUb3HL1p3Bh4YRtUq8D2ufC909u5vM6n6G5Swk1XPJ9KHfaftGhb5serwLkm2/Aha5CTbA==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-types/breadcrumbs@3.7.4': - resolution: {integrity: sha512-gQPLi71i+4zE6m5S74v7bpZ/yBERtlUt5qBcvB4C7gJu8aR4cFrv1YFZ//9f8uwlAHjau7XBpVlbBDlhfb2aOQ==} + '@react-types/accordion@3.0.0-alpha.24': + resolution: {integrity: sha512-hwDT4TJH7aHCG8m9QsTP+7xgW7x7k2TY+WHlMRr6qDS6WhTCwd41dCdagxC0SZtulzZuWqISBxZifVrh4Tynew==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + + '@react-types/breadcrumbs@3.7.3': + resolution: {integrity: sha512-eFto/+6J+JR58vThNcALZRA1OlqlG3GzQ/bq3q8IrrkOZcrfbEJJCWit/+53Ia98siJKuF4OJHnotxIVIz5I3w==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -6206,13 +6240,18 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/button@3.9.2': - resolution: {integrity: sha512-EnPTkGHZRtiwAoJy5q9lDjoG30bEzA/qnvKG29VVXKYAGeqY2IlFs1ypmU+z1X/CpJgPcG3I5cakM7yTVm3pSg==} + '@react-types/breadcrumbs@3.7.8': + resolution: {integrity: sha512-+BW2a+PrY8ArZ+pKecz13oJFrUAhthvXx17o3x0BhWUhRpAdtmTYt2hjw8zNanm2j0Kvgo1HYKgvtskCRxYcOA==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + + '@react-types/button@3.10.0': + resolution: {integrity: sha512-rAyU+N9VaHLBdZop4zasn8IDwf9I5Q1EzHUKMtzIFf5aUlMUW+K460zI/l8UESWRSWAXK9/WPSXGxfcoCEjvAA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-types/button@3.9.3': - resolution: {integrity: sha512-YHlSeH85FhasJXOmkY4x+6If74ZpUh88C2fMlw0HUA/Bq/KGckUoriV8cnMqSnB1OwPqi8dpBZGfFVj6f6lh9A==} + '@react-types/button@3.9.2': + resolution: {integrity: sha512-EnPTkGHZRtiwAoJy5q9lDjoG30bEzA/qnvKG29VVXKYAGeqY2IlFs1ypmU+z1X/CpJgPcG3I5cakM7yTVm3pSg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -6221,13 +6260,13 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/calendar@3.4.4': - resolution: {integrity: sha512-hV1Thmb/AES5OmfPvvmyjSkmsEULjiDfA7Yyy70L/YKuSNKb7Su+Bf2VnZuDW3ec+GxO4JJNlpJ0AkbphWBvcg==} + '@react-types/calendar@3.4.10': + resolution: {integrity: sha512-PyjqxwJxSW2IpQx6y0D9O34fRCWn1gv9q0qFhgaIigIQrPg8zTE/CC7owHLxAtgCnnCt8exJ5rqi414csaHKlA==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-types/calendar@3.4.5': - resolution: {integrity: sha512-FAAUbqe8iPiNf/OtdxnpOuAEJzyeRgfK2QCzfb4BIVnNNaTDkbxGCI5wrqHfBQ4FASECJeNlkjYXtbvijaooyw==} + '@react-types/calendar@3.4.4': + resolution: {integrity: sha512-hV1Thmb/AES5OmfPvvmyjSkmsEULjiDfA7Yyy70L/YKuSNKb7Su+Bf2VnZuDW3ec+GxO4JJNlpJ0AkbphWBvcg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -6241,20 +6280,20 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/checkbox@3.8.0': - resolution: {integrity: sha512-IBJ2bAsb3xoXaL+f0pwfRLDvRkhxfcX/q4NRJ2oT9jeHLU+j6svgK1Dqk8IGmY+vw1ltKbbMlIVeVonKQ3fgHw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/checkbox@3.8.1': resolution: {integrity: sha512-5/oVByPw4MbR/8QSdHCaalmyWC71H/QGgd4aduTJSaNi825o+v/hsN2/CH7Fq9atkLKsC8fvKD00Bj2VGaKriQ==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/color@3.0.0-beta.24': - resolution: {integrity: sha512-YSb/9ERmFp7JxC+vjhqpcYI8HUt92SSv6aDEB+e//4RzBnCxvy+YQAGei9tI6PYIgzGgMLwEMkgpgH/7UcFblA==} + '@react-types/checkbox@3.8.4': + resolution: {integrity: sha512-fvZrlQmlFNsYHZpl7GVmyYQlKdUtO5MczMSf8z3TlSiCb5Kl3ha9PsZgLhJqGuVnzB2ArIBz0eZrYa3k0PhcpA==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + + '@react-types/color@3.0.0': + resolution: {integrity: sha512-VUH8CROAM69GsMBilrJ1xyAdVsWL01nXQYrkZJxAEApv1OrcpIGSdsXLcGrjsrhjjiNVXxWFnqYRMsKkLzIl7g==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 '@react-types/color@3.0.0-beta.25': resolution: {integrity: sha512-D24ASvLeSWouBwOBi4ftUe4/BhrZj5AiHV7tXwrVeMGOy9Z9jyeK65Xysq+R3ecaSONLXsgai5CQMvj13cOacA==} @@ -6266,23 +6305,18 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/combobox@3.11.0': - resolution: {integrity: sha512-L6EEcIUIk7lsVvhO1Z1bklgH5bM84fBht03TC+es9YvS2T1Z9hdtyjBFcH6b3lVW9RwAArdUTL82/RNtvgD0Eg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/combobox@3.11.1': resolution: {integrity: sha512-UNc3OHt5cUt5gCTHqhQIqhaWwKCpaNciD8R7eQazmHiA9fq8ROlV+7l3gdNgdhJbTf5Bu/V5ISnN7Y1xwL3zqQ==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/datepicker@3.7.2': - resolution: {integrity: sha512-zThqFAdhQL1dqyVDsDSSTdfCjoD6634eyg/B0ZJfQxcLUR/5pch3v/gxBhbyCVDGMNHRWUWIJvY9DVOepuoSug==} + '@react-types/combobox@3.13.0': + resolution: {integrity: sha512-kH/a+Fjpr54M2JbHg9RXwMjZ9O+XVsdOuE5JCpWRibJP1Mfl1md8gY6y6zstmVY8COrSqFvMZWB+PzwaTWjTGw==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-types/datepicker@3.7.3': - resolution: {integrity: sha512-SpA91itY03QaBvTAGP4X62SEAOoKJr91Av/U5DgH8gP7Ev4Ui+I3Aqh+w8Qw6nxKX4aAvDUx6wEHwLQLbvJUPA==} + '@react-types/datepicker@3.7.2': + resolution: {integrity: sha512-zThqFAdhQL1dqyVDsDSSTdfCjoD6634eyg/B0ZJfQxcLUR/5pch3v/gxBhbyCVDGMNHRWUWIJvY9DVOepuoSug==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -6291,18 +6325,23 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + '@react-types/datepicker@3.8.3': + resolution: {integrity: sha512-Y4qfPRBB6uzocosCOWSYMuwiZ3YXwLWQYiFB4KCglkvHyltbNz76LgoBEnclYA5HjwosIk4XywiXvHSYry8JnQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + '@react-types/dialog@3.5.10': resolution: {integrity: sha512-S9ga+edOLNLZw7/zVOnZdT5T40etpzUYBXEKdFPbxyPYnERvRxJAsC1/ASuBU9fQAXMRgLZzADWV+wJoGS/X9g==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/dialog@3.5.8': - resolution: {integrity: sha512-RX8JsMvty8ADHRqVEkppoynXLtN4IzUh8d5z88UEBbcvWKlHfd6bOBQjQcBH3AUue5wjfpPIt6brw2VzgBY/3Q==} + '@react-types/dialog@3.5.13': + resolution: {integrity: sha512-9k8daVcAqQsySkzDY6NIVlyGxtpEip4TKuLyzAehthbv78GQardD5fHdjQ6eXPRS4I2qZrmytrFFrlOnwWVGHw==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-types/dialog@3.5.9': - resolution: {integrity: sha512-8r9P1b1gq/cUv2bTPPNL3IFVEj9R5sIPACoSXznXkpXxh5FLU6yUPHDeQjvmM50q7KlEOgrPYhGl5pW525kLww==} + '@react-types/dialog@3.5.8': + resolution: {integrity: sha512-RX8JsMvty8ADHRqVEkppoynXLtN4IzUh8d5z88UEBbcvWKlHfd6bOBQjQcBH3AUue5wjfpPIt6brw2VzgBY/3Q==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -6311,23 +6350,18 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/form@3.7.3': - resolution: {integrity: sha512-RwVxgbuKuByIXTF9HnvIhc/KijzT10R8rnI2Hr/51nTH+QDkunmLtmzW279m4YJRT3Dlj94DRy/7SS/WNCT2FA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/form@3.7.4': resolution: {integrity: sha512-HZojAWrb6feYnhDEOy3vBamDVAHDl0l2JQZ7aIDLHmeTAGQC3JNZcm2fLTxqLye46zz8w8l8OHgI+NdD4PHdOw==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/grid@3.2.4': - resolution: {integrity: sha512-sDVoyQcH7MoGdx5nBi5ZOU/mVFBt9YTxhvr0PZ97dMdEHZtJC1w9SuezwWS34f50yb8YAXQRTICbZYcK4bAlDA==} + '@react-types/form@3.7.7': + resolution: {integrity: sha512-CVRjCawPhYRHi/LuikOC2kz5vgvmjjKmF4/wUgR2QzD1Ok4wY1ZGSx9M9EZptCIZAt2mToR6woyLUdtzy+foeQ==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-types/grid@3.2.5': - resolution: {integrity: sha512-kvE3Y+i0/RGLrf8qn/uVK1nVxXygNf5Jm6h9S6UdZkEVsclcqHKIX8UzqQgEUTd99jMHZk7fbKPm/La8uJ9yFQ==} + '@react-types/grid@3.2.4': + resolution: {integrity: sha512-sDVoyQcH7MoGdx5nBi5ZOU/mVFBt9YTxhvr0PZ97dMdEHZtJC1w9SuezwWS34f50yb8YAXQRTICbZYcK4bAlDA==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -6336,13 +6370,13 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/link@3.5.3': - resolution: {integrity: sha512-yVafjW3IejyVnK3oMBNjFABCGG6J27EUG8rvkaGaI1uB6srGUEhpJ97XLv11aj1QkXHBy3VGXqxEV3S7wn4HTw==} + '@react-types/grid@3.2.9': + resolution: {integrity: sha512-eMw0d2UIZ4QTzGgD1wGGPw0cv67KjAOCp4TcwWjgDV7Wa5SVV/UvOmpnIVDyfhkG/4KRI5OR9h+isy76B726qA==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-types/link@3.5.4': - resolution: {integrity: sha512-5hVAlKE4wiEVHmkqQG9/G4sdar257CISmLzWh9xf8heq14a93MBIHm7S9mhHULk2a84EC9bNoTi8Hh6P6nnMEw==} + '@react-types/link@3.5.3': + resolution: {integrity: sha512-yVafjW3IejyVnK3oMBNjFABCGG6J27EUG8rvkaGaI1uB6srGUEhpJ97XLv11aj1QkXHBy3VGXqxEV3S7wn4HTw==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -6351,13 +6385,13 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/listbox@3.4.7': - resolution: {integrity: sha512-68y5H9CVSPFiwO6MOFxTbry9JQMK/Lb1M9i3M8TDyq1AbJxBPpgAvJ9RaqIMCucsnqCzpY/zA3D/X417zByL1w==} + '@react-types/link@3.5.8': + resolution: {integrity: sha512-l/YGXddgAbLnIT7ekftXrK1D4n8NlLQwx0d4usyZpaxP1KwPzuwng20DxynamLc1atoKBqbUtZAnz32pe7vYgw==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-types/listbox@3.4.8': - resolution: {integrity: sha512-HNLBvyhR02p8GaZsW8hAu4YwkDjaG/rcuCT/l4Sdxzsm7szPlFMEVBZ9Ji3Ffzj+9P20OgFJ+VylWs7EkUwJAA==} + '@react-types/listbox@3.4.7': + resolution: {integrity: sha512-68y5H9CVSPFiwO6MOFxTbry9JQMK/Lb1M9i3M8TDyq1AbJxBPpgAvJ9RaqIMCucsnqCzpY/zA3D/X417zByL1w==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -6366,13 +6400,18 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/menu@3.9.7': - resolution: {integrity: sha512-K6KhloJVoGsqwkdeez72fkNI9dfrmLI/sNrB4XuOKo2crDQ/eyZYWyJmzz8giz/tHME9w774k487rVoefoFh5w==} + '@react-types/listbox@3.5.2': + resolution: {integrity: sha512-ML/Bt/MeO0FiixcuFQ+smpu1WguxTOqHDjSnhc1vcNxVQFWQOhyVy01LAY2J/T9TjfjyYGD41vyMTI0f6fcLEQ==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-types/menu@3.9.8': - resolution: {integrity: sha512-nkRCsfD3NXsJOv6mAnXCFyH2eGOFsmOOJOBQeOl9dj7BcdX9dcqp2PzUWPl33GrY9rYcXiRx4wsbUoqO1KVU4g==} + '@react-types/menu@3.9.12': + resolution: {integrity: sha512-1SPnkHKJdvOfwv9fEgK1DI6DYRs4D3hW2XcWlLhVXSjaC68CzOHGwFhKIKvZiDTW/11L770PRSEloIxHR09uFQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + + '@react-types/menu@3.9.7': + resolution: {integrity: sha512-K6KhloJVoGsqwkdeez72fkNI9dfrmLI/sNrB4XuOKo2crDQ/eyZYWyJmzz8giz/tHME9w774k487rVoefoFh5w==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -6386,23 +6425,18 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/meter@3.4.0': - resolution: {integrity: sha512-1czayiwMcg3QxRxQQSm9hvPbzPk1lyNmP68mDsWdVuY7fUTsUvItF05IkeJCkEB8tIqfBKnJHYAJN1XLY+5bfg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/meter@3.4.1': resolution: {integrity: sha512-AIJV4NDFAqKH94s02c5Da4TH2qgJjfrw978zuFM0KUBFD85WRPKh7MvgWpomvUgmzqE6lMCzIdi1KPKqrRabdw==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/numberfield@3.8.1': - resolution: {integrity: sha512-GaCjLQgXUGCt40SLjKk3/COMWFlN2vV/3Xs3VSLAEdFZpk99b+Ik1oR21+7ZP5/iMHuQDc1MJRWdFfIjxCvVDQ==} + '@react-types/meter@3.4.4': + resolution: {integrity: sha512-0SEmPkShByC1gYkW7l+iJPg8QfEe2VrgwTciAtTfC4KIqAYmJVQtq6L+4d72EMxOh8RpQHePaY/RFHEJXAh72A==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-types/numberfield@3.8.2': - resolution: {integrity: sha512-2i7Je7fEYA4ousL9WhKZg+6Hejwgiq1AmoJpan6JfeIMQkvQ92q+klq02cih/lLXY/jvjd/KI3fa1fl3dfnaFw==} + '@react-types/numberfield@3.8.1': + resolution: {integrity: sha512-GaCjLQgXUGCt40SLjKk3/COMWFlN2vV/3Xs3VSLAEdFZpk99b+Ik1oR21+7ZP5/iMHuQDc1MJRWdFfIjxCvVDQ==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -6411,13 +6445,18 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/overlays@3.8.5': - resolution: {integrity: sha512-4D7EEBQigD/m8hE68Ys8eloyyZFHHduqykSIgINJ0edmo0jygRbWlTwuhWFR9USgSP4dK54duN0Mvq0m4HEVEw==} + '@react-types/numberfield@3.8.6': + resolution: {integrity: sha512-VtWEMAXUO1S9EEZI8whc7xv6DVccxhbWsRthMCg/LxiwU3U5KAveadNc2c5rtXkRpd3cnD5xFzz3dExXdmHkAg==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-types/overlays@3.8.6': - resolution: {integrity: sha512-7xBuroYqwADppt7IRGfM8lbxVwlZrhMtTzeIdUot595cqFdRlpd/XAo2sRnEeIjYW9OSI8I5v4kt3AG7bdCQlg==} + '@react-types/overlays@3.8.10': + resolution: {integrity: sha512-IcnB+VYfAJazRjWhBKZTmVMh3KTp/B1rRbcKkPx6t8djP9UQhKcohP7lAALxjJ56Jjz/GFC6rWyUcnYH0NFVRA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + + '@react-types/overlays@3.8.5': + resolution: {integrity: sha512-4D7EEBQigD/m8hE68Ys8eloyyZFHHduqykSIgINJ0edmo0jygRbWlTwuhWFR9USgSP4dK54duN0Mvq0m4HEVEw==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -6431,23 +6470,18 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/progress@3.5.3': - resolution: {integrity: sha512-IcICNYRPFHQxl6iXi5jDgSZ3I9k2UQ2rIFcnoGo43K0hekv6fRdbbXWJU9ndShs3OfCHTPHEV5ooYB3UujNOAQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/progress@3.5.4': resolution: {integrity: sha512-JNc246sTjasPyx5Dp7/s0rp3Bz4qlu4LrZTulZlxWyb53WgBNL7axc26CCi+I20rWL9+c7JjhrRxnLl/1cLN5g==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/radio@3.7.1': - resolution: {integrity: sha512-Zut3rN1odIUBLZdijeyou+UqsLeRE76d9A+npykYGu29ndqmo3w4sLn8QeQcdj1IR71ZnG0pW2Y2BazhK5XrrQ==} + '@react-types/progress@3.5.7': + resolution: {integrity: sha512-EqMDHmlpoZUZzTjdejGIkSM0pS2LBI9NdadHf3bDNTycHv+5L1xpMHUg8RGOW8a3sRVLRvfN1aO9l75QZkyj+w==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-types/radio@3.8.0': - resolution: {integrity: sha512-0gvG74lgiaRo0DO46hoB5NxGFXhq5DsHaPZcCcb9VZ8cCzZMrO7U/B3JhF82TI2DndSx/AoiAMOQsc0v4ZwiGg==} + '@react-types/radio@3.7.1': + resolution: {integrity: sha512-Zut3rN1odIUBLZdijeyou+UqsLeRE76d9A+npykYGu29ndqmo3w4sLn8QeQcdj1IR71ZnG0pW2Y2BazhK5XrrQ==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -6456,13 +6490,13 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/searchfield@3.5.3': - resolution: {integrity: sha512-gBfsT1WpY8UIb74yyYmnjiHpVasph2mdmGj9i8cGF2HUYwx5p+Fr85mtCGDph0uirvRoM5ExMp4snD+ueNAVCg==} + '@react-types/radio@3.8.4': + resolution: {integrity: sha512-GCuOwQL19iwKa74NAIk9hv4ivyI8oW1+ZCuc2fzyDdeQjzTIlv3qrIyShwpVy1IoI7/4DYTMZm/YXPoKhu5TTA==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-types/searchfield@3.5.4': - resolution: {integrity: sha512-D7tUwlbUxyTzxhMYWNMdY9lp/a/kdr9mIGB7K3j/QSQhTI2T9H3VPxEKXmYt33cE3T7Q1DDsII1SrChI/KEdxA==} + '@react-types/searchfield@3.5.3': + resolution: {integrity: sha512-gBfsT1WpY8UIb74yyYmnjiHpVasph2mdmGj9i8cGF2HUYwx5p+Fr85mtCGDph0uirvRoM5ExMp4snD+ueNAVCg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -6471,13 +6505,13 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/select@3.9.2': - resolution: {integrity: sha512-fGFrunednY3Pq/BBwVOf87Fsuyo/SlevL0wFIE9OOl2V5NXVaTY7/7RYA8hIOHPzmvsMbndy419BEudiNGhv4A==} + '@react-types/searchfield@3.5.9': + resolution: {integrity: sha512-c/x8BWpH1Zq+fWpeBtzw2AhQhGi7ahWPicV7PlnqwIGO0MrH/QCjX0dj+I+1xpcAh8Eq6ECa79HE74Rw6aJmFg==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-types/select@3.9.3': - resolution: {integrity: sha512-hK5RvA6frMbLdynRkegNW1lMOD0l9aFsW9X8WuTAg0zV6iZouU0hhSCT6JRDefJrv+m0X3fRdohMuVNZOhlA1g==} + '@react-types/select@3.9.2': + resolution: {integrity: sha512-fGFrunednY3Pq/BBwVOf87Fsuyo/SlevL0wFIE9OOl2V5NXVaTY7/7RYA8hIOHPzmvsMbndy419BEudiNGhv4A==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -6486,13 +6520,13 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/shared@3.22.1': - resolution: {integrity: sha512-PCpa+Vo6BKnRMuOEzy5zAZ3/H5tnQg1e80khMhK2xys0j6ZqzkgQC+fHMNZ7VDFNLqqNMj/o0eVeSBDh2POjkw==} + '@react-types/select@3.9.7': + resolution: {integrity: sha512-Jva4ixfB4EEdy+WmZkUoLiQI7vVfHPxM73VuL7XDxvAO+YKiIztDTcU720QVNhxTMmQvCxfRBXWar8aodCjLiw==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-types/shared@3.23.0': - resolution: {integrity: sha512-GQm/iPiii3ikcaMNR4WdVkJ4w0mKtV3mLqeSfSqzdqbPr6vONkqXbh3RhPlPmAJs1b4QHnexd/wZQP3U9DHOwQ==} + '@react-types/shared@3.22.1': + resolution: {integrity: sha512-PCpa+Vo6BKnRMuOEzy5zAZ3/H5tnQg1e80khMhK2xys0j6ZqzkgQC+fHMNZ7VDFNLqqNMj/o0eVeSBDh2POjkw==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -6501,13 +6535,13 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/slider@3.7.1': - resolution: {integrity: sha512-FKO3YZYdrBs00XbBW5acP+0L1cCdevl/uRJiXbnLpGysO5PrSFIRS7Wlv4M7ztf6gT7b1Ao4FNC9crbxBr6BzA==} + '@react-types/shared@3.25.0': + resolution: {integrity: sha512-OZSyhzU6vTdW3eV/mz5i6hQwQUhkRs7xwY2d1aqPvTdMe0+2cY7Fwp45PAiwYLEj73i9ro2FxF9qC4DvHGSCgQ==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-types/slider@3.7.2': - resolution: {integrity: sha512-HvC/Mdt/z741xcU0ymeNxslnowQ5EAHOSzyf2JMgXmle+pEIbbepz5QUVaOmEveQHS3bjxE/+n2yBTKbxP8CJg==} + '@react-types/slider@3.7.1': + resolution: {integrity: sha512-FKO3YZYdrBs00XbBW5acP+0L1cCdevl/uRJiXbnLpGysO5PrSFIRS7Wlv4M7ztf6gT7b1Ao4FNC9crbxBr6BzA==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -6516,13 +6550,13 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/switch@3.5.1': - resolution: {integrity: sha512-2LFEKMGeufqyYmeN/5dtkDkCPG6x9O4eu6aaBaJmPGon7C/l3yiFEgRue6oCUYc1HixR7Qlp0sPxk0tQeWzrSg==} + '@react-types/slider@3.7.6': + resolution: {integrity: sha512-z72wnEzSge6qTD9TUoUPp1A4j4jXk/MVii6rGE78XeE/Pq7HyyjU5bCagryMr9PC9MKa/oTiHcshKqWBDf57GA==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-types/switch@3.5.2': - resolution: {integrity: sha512-4i35eZ5GtVDgu9KFhlyLyXanspcQp5WEnPyaBKn3pDRDcpzAL7yNP/Rwqc/JDdcJWngV080o7loJCgEfJ6UFaQ==} + '@react-types/switch@3.5.1': + resolution: {integrity: sha512-2LFEKMGeufqyYmeN/5dtkDkCPG6x9O4eu6aaBaJmPGon7C/l3yiFEgRue6oCUYc1HixR7Qlp0sPxk0tQeWzrSg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -6531,13 +6565,18 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/table@3.9.3': - resolution: {integrity: sha512-Hs/pMbxJdga2zBol4H5pV1FVIiRjCuSTXst6idJjkctanTexR4xkyrtBwl+rdLNoGwQ2pGii49vgklc5bFK7zA==} + '@react-types/switch@3.5.6': + resolution: {integrity: sha512-gJ8t2yTCgcitz4ON4ELcLLmtlDkn2MUjjfu3ez/cwA1X/NUluPYkhXj5Z6H+KOlnveqrKCZDRoTgK74cQ6Cvfg==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-types/table@3.9.4': - resolution: {integrity: sha512-31EI0KAHwX7TbgERLBLVuD3nvpZUo0Wie7S7FEARmirIRfzm1fIkdDk5hfIHry2Lp4mq2/aqXLCY+oDR+lC2pw==} + '@react-types/table@3.10.2': + resolution: {integrity: sha512-YzA4hcsYfnFFpA2UyGb1KKhLpWgaj5daApqjp126tCIosl8k1KxZmhKD50cwH0Jm19lALJseqo5VdlcJtcr4qg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + + '@react-types/table@3.9.3': + resolution: {integrity: sha512-Hs/pMbxJdga2zBol4H5pV1FVIiRjCuSTXst6idJjkctanTexR4xkyrtBwl+rdLNoGwQ2pGii49vgklc5bFK7zA==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -6546,13 +6585,13 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/tabs@3.3.5': - resolution: {integrity: sha512-6NTSZBOWekCtApdZrhu5tHhE/8q52oVohQN+J5T7shAXd6ZAtu8PABVR/nH4BWucc8FL0OUajRqunqzQMU13gA==} + '@react-types/tabs@3.3.10': + resolution: {integrity: sha512-s/Bw/HCIdWJPBw4O703ghKqhjGsIerRMIDxA88hbQYzfTDD6bkFDjCnsP2Tyy1G8Dg2rSPFUEE+k+PpLzqeEfQ==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-types/tabs@3.3.6': - resolution: {integrity: sha512-ubvB7pB4+e5OpIuYR1CYip53iW9rJRIWvioHTYfcX0DnMabEcVP6Ymdqr5bDh/VsBEhiddsNgMduQwJm6bUTew==} + '@react-types/tabs@3.3.5': + resolution: {integrity: sha512-6NTSZBOWekCtApdZrhu5tHhE/8q52oVohQN+J5T7shAXd6ZAtu8PABVR/nH4BWucc8FL0OUajRqunqzQMU13gA==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -6566,23 +6605,23 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/textfield@3.9.2': - resolution: {integrity: sha512-8UcabahYhKm3KTu9CQBhz745FioUWO6CWgYusBpxMDJ+HnlhCC2JWyQvqg5tT98sr5AeSek4Jt/XS3ovzrhCDg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/textfield@3.9.3': resolution: {integrity: sha512-DoAY6cYOL0pJhgNGI1Rosni7g72GAt4OVr2ltEx2S9ARmFZ0DBvdhA9lL2nywcnKMf27PEJcKMXzXc10qaHsJw==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/tooltip@3.4.7': - resolution: {integrity: sha512-rV4HZRQxLRNhe24yATOxnFQtGRUmsR7mqxMupXCmd1vrw8h+rdKlQv1zW2q8nALAKNmnRXZJHxYQ1SFzb98fgg==} + '@react-types/textfield@3.9.7': + resolution: {integrity: sha512-vU5+QCOF9HgWGjAmmy+cpJibVW5voFomC5POmYHokm7kivYcMMjlonsgWwg/0xXrqE2qosH3tpz4jFoEuig1NQ==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-types/tooltip@3.4.8': - resolution: {integrity: sha512-6XVQ3cMaXVMif+F5PQCaVwxbgAL8HVRqVjt6DkHs8Xbae43hpEIwPrBYlWWMVpuZAcjXZLTGmmyPjYeORZZJ4A==} + '@react-types/tooltip@3.4.12': + resolution: {integrity: sha512-FwsdSQ3UDIDORanQMGMLyzSUabw4AkKhwcRdPv4d5OT8GmJr7mBdZynfcsrKLJ0fzskIypMqspoutZidsI0MQg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + + '@react-types/tooltip@3.4.7': + resolution: {integrity: sha512-rV4HZRQxLRNhe24yATOxnFQtGRUmsR7mqxMupXCmd1vrw8h+rdKlQv1zW2q8nALAKNmnRXZJHxYQ1SFzb98fgg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -9611,6 +9650,10 @@ packages: resolution: {integrity: sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==} engines: {node: '>=6'} + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + cmd-shim@5.0.0: resolution: {integrity: sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} @@ -11646,7 +11689,7 @@ packages: resolution: {integrity: sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==} engines: {node: '>= 4.0'} os: [darwin] - deprecated: The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2 + deprecated: Upgrade to fsevents v2 to mitigate potential security issues fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} @@ -16136,26 +16179,20 @@ packages: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-aria-components@1.2.0: - resolution: {integrity: sha512-Cqr1tewYe/SgNcVOptqYdm0PPAV0Xsvd2uzWX7EqJsPGHvKStl/mh2a3Ebe6dYuoOddLsqqj36DdiLC5Pb5okw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-aria-components@1.2.1: resolution: {integrity: sha512-iGIdDjbTyLLn0/tGUyBQxxu+E1bw4/H4AU89d0cRcu8yIdw6MXG29YElmRHn0ugiyrERrk/YQALihstnns5kRQ==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-aria@3.32.1: - resolution: {integrity: sha512-7KCJg4K5vlRqiXdGjgCT05Du8RhGBYC+2ok4GOh/Znmg8aMwOk7t0YwxaT5i1z30+fmDcJS/pk/ipUPUg28CXg==} + react-aria-components@1.4.0: + resolution: {integrity: sha512-CpeSeGI2FVT3hOzA28fhIGkrPPQPtz3gVHBfMWkXSuLUBaKFZQhdCLBXlpO5MoZV1RrC+e7mhOVREkw6DvlxKw==} peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - react-aria@3.33.0: - resolution: {integrity: sha512-aKn9SQn5TMlmpUsIjfRMtse2v3okGcSo+gWLGrj9JVjxs4PL4FSU4mclj4Bg2JUXZTGgfLSq6PWUBzQ4gIP2zg==} + react-aria@3.32.1: + resolution: {integrity: sha512-7KCJg4K5vlRqiXdGjgCT05Du8RhGBYC+2ok4GOh/Znmg8aMwOk7t0YwxaT5i1z30+fmDcJS/pk/ipUPUg28CXg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -16166,6 +16203,12 @@ packages: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react-aria@3.35.0: + resolution: {integrity: sha512-cbbd3iIveLDRnpVrpc1iuz8OMlDdH6u8EjncW3MQuYOiEGaho9xcDtWMKiSEIZASEnd7LK4Rgm5iVPr2O+cssw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + react-beautiful-dnd@13.0.0: resolution: {integrity: sha512-87It8sN0ineoC3nBW0SbQuTFXM6bUqM62uJGY4BtTf0yzPl8/3+bHMWkgIe0Z6m8e+gJgjWxefGRVfpE3VcdEg==} peerDependencies: @@ -16462,16 +16505,16 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-stately@3.31.0: - resolution: {integrity: sha512-G6y7t6qpP3LU4mLM2RlRTgdW5eiZrR2yB0XZbLo8qVplazxyRzlDJRBdE8OBTpw2SO1q5Auub3NOTH3vH0qCHg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-stately@3.31.1: resolution: {integrity: sha512-wuq673NHkYSdoceGryjtMJJvB9iQgyDkQDsnTN0t2v91pXjGDsN/EcOvnUrxXSBtY9eLdIw74R54z9GX5cJNEg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react-stately@3.33.0: + resolution: {integrity: sha512-DNPOxYAPuhuXwSuE1s1K7iSgqG2QOBUZq3bsLAd4gUUZje6Qepkhe7TzK2LWarQYAZ3gC9Xhmnz8ie1fdCo0GA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + react-test-renderer@18.2.0: resolution: {integrity: sha512-JWD+aQ0lh2gvh4NM3bBM42Kx+XybOxCpgYK7F8ugAlpaTSnWsX+39Z4XkOykGZAHrjwwTZT3x3KxswVWxHPUqA==} peerDependencies: @@ -21060,11 +21103,11 @@ snapshots: dependencies: '@swc/helpers': 0.5.10 - '@internationalized/date@3.5.3': + '@internationalized/date@3.5.4': dependencies: '@swc/helpers': 0.5.10 - '@internationalized/date@3.5.4': + '@internationalized/date@3.5.6': dependencies: '@swc/helpers': 0.5.10 @@ -21073,12 +21116,12 @@ snapshots: '@swc/helpers': 0.5.10 intl-messageformat: 10.5.11 - '@internationalized/message@3.1.3': + '@internationalized/message@3.1.4': dependencies: '@swc/helpers': 0.5.10 intl-messageformat: 10.5.11 - '@internationalized/message@3.1.4': + '@internationalized/message@3.1.5': dependencies: '@swc/helpers': 0.5.10 intl-messageformat: 10.5.11 @@ -21087,11 +21130,11 @@ snapshots: dependencies: '@swc/helpers': 0.5.10 - '@internationalized/number@3.5.2': + '@internationalized/number@3.5.3': dependencies: '@swc/helpers': 0.5.10 - '@internationalized/number@3.5.3': + '@internationalized/number@3.5.4': dependencies: '@swc/helpers': 0.5.10 @@ -21099,11 +21142,11 @@ snapshots: dependencies: '@swc/helpers': 0.5.10 - '@internationalized/string@3.2.2': + '@internationalized/string@3.2.3': dependencies: '@swc/helpers': 0.5.10 - '@internationalized/string@3.2.3': + '@internationalized/string@3.2.4': dependencies: '@swc/helpers': 0.5.10 @@ -23115,33 +23158,56 @@ snapshots: optionalDependencies: '@types/react': 18.2.79 - '@react-aria/breadcrumbs@3.5.11(react@18.2.0)': + '@react-aria/accordion@3.0.0-alpha.34(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@react-aria/i18n': 3.10.2(react@18.2.0) - '@react-aria/link': 3.6.5(react@18.2.0) - '@react-aria/utils': 3.23.2(react@18.2.0) - '@react-types/breadcrumbs': 3.7.3(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) + '@react-aria/button': 3.10.0(react@18.2.0) + '@react-aria/selection': 3.20.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-stately/tree': 3.8.5(react@18.2.0) + '@react-types/accordion': 3.0.0-alpha.24(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) - '@react-aria/breadcrumbs@3.5.12(react@18.2.0)': + '@react-aria/breadcrumbs@3.5.11(react@18.2.0)': dependencies: - '@react-aria/i18n': 3.11.0(react@18.2.0) - '@react-aria/link': 3.7.0(react@18.2.0) - '@react-aria/utils': 3.24.0(react@18.2.0) - '@react-types/breadcrumbs': 3.7.4(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) + '@react-aria/link': 3.6.5(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-types/breadcrumbs': 3.7.3(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 '@react-aria/breadcrumbs@3.5.13(react@18.2.0)': dependencies: - '@react-aria/i18n': 3.11.1(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) '@react-aria/link': 3.7.1(react@18.2.0) - '@react-aria/utils': 3.24.1(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-types/breadcrumbs': 3.7.5(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) + '@swc/helpers': 0.5.10 + react: 18.2.0 + + '@react-aria/breadcrumbs@3.5.17(react@18.2.0)': + dependencies: + '@react-aria/i18n': 3.12.3(react@18.2.0) + '@react-aria/link': 3.7.5(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-types/breadcrumbs': 3.7.8(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) + '@swc/helpers': 0.5.10 + react: 18.2.0 + + '@react-aria/button@3.10.0(react@18.2.0)': + dependencies: + '@react-aria/focus': 3.18.3(react@18.2.0) + '@react-aria/interactions': 3.22.3(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-stately/toggle': 3.7.8(react@18.2.0) + '@react-types/button': 3.10.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 @@ -23149,21 +23215,10 @@ snapshots: dependencies: '@react-aria/focus': 3.16.2(react@18.2.0) '@react-aria/interactions': 3.21.1(react@18.2.0) - '@react-aria/utils': 3.23.2(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-stately/toggle': 3.7.2(react@18.2.0) '@react-types/button': 3.9.2(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-aria/button@3.9.4(react@18.2.0)': - dependencies: - '@react-aria/focus': 3.17.0(react@18.2.0) - '@react-aria/interactions': 3.21.2(react@18.2.0) - '@react-aria/utils': 3.24.0(react@18.2.0) - '@react-stately/toggle': 3.7.3(react@18.2.0) - '@react-types/button': 3.9.3(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 @@ -23171,39 +23226,39 @@ snapshots: dependencies: '@react-aria/focus': 3.17.1(react@18.2.0) '@react-aria/interactions': 3.21.3(react@18.2.0) - '@react-aria/utils': 3.24.1(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-stately/toggle': 3.7.4(react@18.2.0) '@react-types/button': 3.9.4(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 + '@react-aria/calendar@3.5.12(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@internationalized/date': 3.5.6 + '@react-aria/i18n': 3.12.3(react@18.2.0) + '@react-aria/interactions': 3.22.3(react@18.2.0) + '@react-aria/live-announcer': 3.4.0 + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-stately/calendar': 3.5.5(react@18.2.0) + '@react-types/button': 3.10.0(react@18.2.0) + '@react-types/calendar': 3.4.10(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) + '@swc/helpers': 0.5.10 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + '@react-aria/calendar@3.5.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@internationalized/date': 3.5.2 - '@react-aria/i18n': 3.10.2(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) '@react-aria/interactions': 3.21.1(react@18.2.0) '@react-aria/live-announcer': 3.3.2 - '@react-aria/utils': 3.23.2(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-stately/calendar': 3.4.4(react@18.2.0) '@react-types/button': 3.9.2(react@18.2.0) '@react-types/calendar': 3.4.4(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - - '@react-aria/calendar@3.5.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@internationalized/date': 3.5.3 - '@react-aria/i18n': 3.11.0(react@18.2.0) - '@react-aria/interactions': 3.21.2(react@18.2.0) - '@react-aria/live-announcer': 3.3.3 - '@react-aria/utils': 3.24.0(react@18.2.0) - '@react-stately/calendar': 3.5.0(react@18.2.0) - '@react-types/button': 3.9.3(react@18.2.0) - '@react-types/calendar': 3.4.5(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -23211,14 +23266,14 @@ snapshots: '@react-aria/calendar@3.5.8(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@internationalized/date': 3.5.4 - '@react-aria/i18n': 3.11.1(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) '@react-aria/interactions': 3.21.3(react@18.2.0) '@react-aria/live-announcer': 3.3.4 - '@react-aria/utils': 3.24.1(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-stately/calendar': 3.5.1(react@18.2.0) '@react-types/button': 3.9.4(react@18.2.0) '@react-types/calendar': 3.4.6(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -23229,27 +23284,12 @@ snapshots: '@react-aria/interactions': 3.21.1(react@18.2.0) '@react-aria/label': 3.7.6(react@18.2.0) '@react-aria/toggle': 3.10.2(react@18.2.0) - '@react-aria/utils': 3.23.2(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-stately/checkbox': 3.6.3(react@18.2.0) '@react-stately/form': 3.0.1(react@18.2.0) '@react-stately/toggle': 3.7.2(react@18.2.0) '@react-types/checkbox': 3.7.1(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-aria/checkbox@3.14.2(react@18.2.0)': - dependencies: - '@react-aria/form': 3.0.4(react@18.2.0) - '@react-aria/interactions': 3.21.2(react@18.2.0) - '@react-aria/label': 3.7.7(react@18.2.0) - '@react-aria/toggle': 3.10.3(react@18.2.0) - '@react-aria/utils': 3.24.0(react@18.2.0) - '@react-stately/checkbox': 3.6.4(react@18.2.0) - '@react-stately/form': 3.0.2(react@18.2.0) - '@react-stately/toggle': 3.7.3(react@18.2.0) - '@react-types/checkbox': 3.8.0(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 @@ -23259,29 +23299,54 @@ snapshots: '@react-aria/interactions': 3.21.3(react@18.2.0) '@react-aria/label': 3.7.8(react@18.2.0) '@react-aria/toggle': 3.10.4(react@18.2.0) - '@react-aria/utils': 3.24.1(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-stately/checkbox': 3.6.5(react@18.2.0) '@react-stately/form': 3.0.3(react@18.2.0) '@react-stately/toggle': 3.7.4(react@18.2.0) '@react-types/checkbox': 3.8.1(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-aria/color@3.0.0-beta.32(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@react-aria/i18n': 3.11.0(react@18.2.0) - '@react-aria/interactions': 3.21.2(react@18.2.0) - '@react-aria/numberfield': 3.11.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/slider': 3.7.7(react@18.2.0) - '@react-aria/spinbutton': 3.6.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/textfield': 3.14.4(react@18.2.0) - '@react-aria/utils': 3.24.0(react@18.2.0) - '@react-aria/visually-hidden': 3.8.11(react@18.2.0) - '@react-stately/color': 3.6.0(react@18.2.0) - '@react-stately/form': 3.0.2(react@18.2.0) - '@react-types/color': 3.0.0-beta.24(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-aria/checkbox@3.14.7(react@18.2.0)': + dependencies: + '@react-aria/form': 3.0.9(react@18.2.0) + '@react-aria/interactions': 3.22.3(react@18.2.0) + '@react-aria/label': 3.7.12(react@18.2.0) + '@react-aria/toggle': 3.10.8(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-stately/checkbox': 3.6.9(react@18.2.0) + '@react-stately/form': 3.0.6(react@18.2.0) + '@react-stately/toggle': 3.7.8(react@18.2.0) + '@react-types/checkbox': 3.8.4(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) + '@swc/helpers': 0.5.10 + react: 18.2.0 + + '@react-aria/collections@3.0.0-alpha.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@react-aria/ssr': 3.9.6(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) + '@swc/helpers': 0.5.10 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + use-sync-external-store: 1.2.0(react@18.2.0) + + '@react-aria/color@3.0.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@react-aria/i18n': 3.12.3(react@18.2.0) + '@react-aria/interactions': 3.22.3(react@18.2.0) + '@react-aria/numberfield': 3.11.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/slider': 3.7.12(react@18.2.0) + '@react-aria/spinbutton': 3.6.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/textfield': 3.14.9(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-aria/visually-hidden': 3.8.16(react@18.2.0) + '@react-stately/color': 3.8.0(react@18.2.0) + '@react-stately/form': 3.0.6(react@18.2.0) + '@react-types/color': 3.0.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -23294,7 +23359,7 @@ snapshots: '@react-aria/slider': 3.7.8(react@18.2.0) '@react-aria/spinbutton': 3.6.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@react-aria/textfield': 3.14.5(react@18.2.0) - '@react-aria/utils': 3.24.1(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-aria/visually-hidden': 3.8.12(react@18.2.0) '@react-stately/color': 3.6.1(react@18.2.0) '@react-stately/form': 3.0.3(react@18.2.0) @@ -23304,85 +23369,62 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + '@react-aria/combobox@3.10.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@react-aria/i18n': 3.12.3(react@18.2.0) + '@react-aria/listbox': 3.13.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/live-announcer': 3.4.0 + '@react-aria/menu': 3.15.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/overlays': 3.23.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/selection': 3.20.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/textfield': 3.14.9(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-stately/collections': 3.11.0(react@18.2.0) + '@react-stately/combobox': 3.10.0(react@18.2.0) + '@react-stately/form': 3.0.6(react@18.2.0) + '@react-types/button': 3.10.0(react@18.2.0) + '@react-types/combobox': 3.13.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) + '@swc/helpers': 0.5.10 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + '@react-aria/combobox@3.8.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@react-aria/i18n': 3.10.2(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) '@react-aria/listbox': 3.11.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@react-aria/live-announcer': 3.3.2 '@react-aria/menu': 3.13.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@react-aria/overlays': 3.21.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@react-aria/selection': 3.17.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@react-aria/textfield': 3.14.3(react@18.2.0) - '@react-aria/utils': 3.23.2(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-stately/collections': 3.10.5(react@18.2.0) '@react-stately/combobox': 3.8.2(react@18.2.0) '@react-stately/form': 3.0.1(react@18.2.0) '@react-types/button': 3.9.2(react@18.2.0) '@react-types/combobox': 3.10.1(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - - '@react-aria/combobox@3.9.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@react-aria/i18n': 3.11.0(react@18.2.0) - '@react-aria/listbox': 3.12.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/live-announcer': 3.3.3 - '@react-aria/menu': 3.14.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/overlays': 3.22.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/selection': 3.18.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/textfield': 3.14.4(react@18.2.0) - '@react-aria/utils': 3.24.0(react@18.2.0) - '@react-stately/collections': 3.10.6(react@18.2.0) - '@react-stately/combobox': 3.8.3(react@18.2.0) - '@react-stately/form': 3.0.2(react@18.2.0) - '@react-types/button': 3.9.3(react@18.2.0) - '@react-types/combobox': 3.11.0(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) '@react-aria/combobox@3.9.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@react-aria/i18n': 3.11.1(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) '@react-aria/listbox': 3.12.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@react-aria/live-announcer': 3.3.4 '@react-aria/menu': 3.14.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@react-aria/overlays': 3.22.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@react-aria/selection': 3.18.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@react-aria/textfield': 3.14.5(react@18.2.0) - '@react-aria/utils': 3.24.1(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-stately/collections': 3.10.7(react@18.2.0) '@react-stately/combobox': 3.8.4(react@18.2.0) '@react-stately/form': 3.0.3(react@18.2.0) '@react-types/button': 3.9.4(react@18.2.0) '@react-types/combobox': 3.11.1(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - - '@react-aria/datepicker@3.10.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@internationalized/date': 3.5.3 - '@internationalized/number': 3.5.2 - '@internationalized/string': 3.2.2 - '@react-aria/focus': 3.17.0(react@18.2.0) - '@react-aria/form': 3.0.4(react@18.2.0) - '@react-aria/i18n': 3.11.0(react@18.2.0) - '@react-aria/interactions': 3.21.2(react@18.2.0) - '@react-aria/label': 3.7.7(react@18.2.0) - '@react-aria/spinbutton': 3.6.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.24.0(react@18.2.0) - '@react-stately/datepicker': 3.9.3(react@18.2.0) - '@react-stately/form': 3.0.2(react@18.2.0) - '@react-types/button': 3.9.3(react@18.2.0) - '@react-types/calendar': 3.4.5(react@18.2.0) - '@react-types/datepicker': 3.7.3(react@18.2.0) - '@react-types/dialog': 3.5.9(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -23394,18 +23436,41 @@ snapshots: '@internationalized/string': 3.2.3 '@react-aria/focus': 3.17.1(react@18.2.0) '@react-aria/form': 3.0.5(react@18.2.0) - '@react-aria/i18n': 3.11.1(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) '@react-aria/interactions': 3.21.3(react@18.2.0) '@react-aria/label': 3.7.8(react@18.2.0) '@react-aria/spinbutton': 3.6.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.24.1(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-stately/datepicker': 3.9.4(react@18.2.0) '@react-stately/form': 3.0.3(react@18.2.0) '@react-types/button': 3.9.4(react@18.2.0) '@react-types/calendar': 3.4.6(react@18.2.0) '@react-types/datepicker': 3.7.4(react@18.2.0) '@react-types/dialog': 3.5.10(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) + '@swc/helpers': 0.5.10 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + + '@react-aria/datepicker@3.11.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@internationalized/date': 3.5.6 + '@internationalized/number': 3.5.4 + '@internationalized/string': 3.2.4 + '@react-aria/focus': 3.18.3(react@18.2.0) + '@react-aria/form': 3.0.9(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) + '@react-aria/interactions': 3.22.3(react@18.2.0) + '@react-aria/label': 3.7.12(react@18.2.0) + '@react-aria/spinbutton': 3.6.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-stately/datepicker': 3.10.3(react@18.2.0) + '@react-stately/form': 3.0.6(react@18.2.0) + '@react-types/button': 3.10.0(react@18.2.0) + '@react-types/calendar': 3.4.10(react@18.2.0) + '@react-types/datepicker': 3.8.3(react@18.2.0) + '@react-types/dialog': 3.5.13(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -23417,18 +23482,18 @@ snapshots: '@internationalized/string': 3.2.1 '@react-aria/focus': 3.16.2(react@18.2.0) '@react-aria/form': 3.0.3(react@18.2.0) - '@react-aria/i18n': 3.10.2(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) '@react-aria/interactions': 3.21.1(react@18.2.0) '@react-aria/label': 3.7.6(react@18.2.0) '@react-aria/spinbutton': 3.6.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.23.2(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-stately/datepicker': 3.9.2(react@18.2.0) '@react-stately/form': 3.0.1(react@18.2.0) '@react-types/button': 3.9.2(react@18.2.0) '@react-types/calendar': 3.4.4(react@18.2.0) '@react-types/datepicker': 3.7.2(react@18.2.0) '@react-types/dialog': 3.5.8(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -23437,31 +23502,46 @@ snapshots: dependencies: '@react-aria/focus': 3.16.2(react@18.2.0) '@react-aria/overlays': 3.21.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.23.2(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-types/dialog': 3.5.8(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@react-aria/dialog@3.5.13(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@react-aria/dialog@3.5.14(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@react-aria/focus': 3.17.0(react@18.2.0) - '@react-aria/overlays': 3.22.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.24.0(react@18.2.0) - '@react-types/dialog': 3.5.9(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-aria/focus': 3.17.1(react@18.2.0) + '@react-aria/overlays': 3.22.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-types/dialog': 3.5.10(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@react-aria/dialog@3.5.14(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@react-aria/dialog@3.5.18(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@react-aria/focus': 3.17.1(react@18.2.0) - '@react-aria/overlays': 3.22.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.24.1(react@18.2.0) - '@react-types/dialog': 3.5.10(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-aria/focus': 3.18.3(react@18.2.0) + '@react-aria/overlays': 3.23.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-types/dialog': 3.5.13(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) + '@swc/helpers': 0.5.10 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + + '@react-aria/disclosure@3.0.0-alpha.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@react-aria/button': 3.10.0(react@18.2.0) + '@react-aria/selection': 3.20.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/ssr': 3.9.6(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-stately/disclosure': 3.0.0-alpha.0(react@18.2.0) + '@react-stately/toggle': 3.7.8(react@18.2.0) + '@react-stately/tree': 3.8.5(react@18.2.0) + '@react-types/button': 3.10.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -23469,29 +23549,14 @@ snapshots: '@react-aria/dnd@3.5.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@internationalized/string': 3.2.1 - '@react-aria/i18n': 3.10.2(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) '@react-aria/interactions': 3.21.1(react@18.2.0) '@react-aria/live-announcer': 3.3.2 '@react-aria/overlays': 3.21.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.23.2(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-stately/dnd': 3.2.8(react@18.2.0) '@react-types/button': 3.9.2(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - - '@react-aria/dnd@3.6.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@internationalized/string': 3.2.2 - '@react-aria/i18n': 3.11.0(react@18.2.0) - '@react-aria/interactions': 3.21.2(react@18.2.0) - '@react-aria/live-announcer': 3.3.3 - '@react-aria/overlays': 3.22.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.24.0(react@18.2.0) - '@react-stately/dnd': 3.3.0(react@18.2.0) - '@react-types/button': 3.9.3(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -23499,14 +23564,29 @@ snapshots: '@react-aria/dnd@3.6.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@internationalized/string': 3.2.3 - '@react-aria/i18n': 3.11.1(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) '@react-aria/interactions': 3.21.3(react@18.2.0) '@react-aria/live-announcer': 3.3.4 '@react-aria/overlays': 3.22.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.24.1(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-stately/dnd': 3.3.1(react@18.2.0) '@react-types/button': 3.9.4(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) + '@swc/helpers': 0.5.10 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + + '@react-aria/dnd@3.7.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@internationalized/string': 3.2.4 + '@react-aria/i18n': 3.12.3(react@18.2.0) + '@react-aria/interactions': 3.22.3(react@18.2.0) + '@react-aria/live-announcer': 3.4.0 + '@react-aria/overlays': 3.23.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-stately/dnd': 3.4.3(react@18.2.0) + '@react-types/button': 3.10.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -23514,91 +23594,90 @@ snapshots: '@react-aria/focus@3.16.2(react@18.2.0)': dependencies: '@react-aria/interactions': 3.21.1(react@18.2.0) - '@react-aria/utils': 3.23.2(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-types/shared': 3.22.1(react@18.2.0) '@swc/helpers': 0.5.10 - clsx: 2.1.0 + clsx: 2.1.1 react: 18.2.0 - '@react-aria/focus@3.17.0(react@18.2.0)': + '@react-aria/focus@3.17.1(react@18.2.0)': dependencies: - '@react-aria/interactions': 3.21.2(react@18.2.0) - '@react-aria/utils': 3.24.0(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-aria/interactions': 3.21.3(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-types/shared': 3.23.1(react@18.2.0) '@swc/helpers': 0.5.10 - clsx: 2.1.0 + clsx: 2.1.1 react: 18.2.0 - '@react-aria/focus@3.17.1(react@18.2.0)': + '@react-aria/focus@3.18.3(react@18.2.0)': dependencies: - '@react-aria/interactions': 3.21.3(react@18.2.0) - '@react-aria/utils': 3.24.1(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-aria/interactions': 3.22.3(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 - clsx: 2.1.0 + clsx: 2.1.1 react: 18.2.0 '@react-aria/form@3.0.3(react@18.2.0)': dependencies: '@react-aria/interactions': 3.21.1(react@18.2.0) - '@react-aria/utils': 3.23.2(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-stately/form': 3.0.1(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-aria/form@3.0.4(react@18.2.0)': + '@react-aria/form@3.0.5(react@18.2.0)': dependencies: - '@react-aria/interactions': 3.21.2(react@18.2.0) - '@react-aria/utils': 3.24.0(react@18.2.0) - '@react-stately/form': 3.0.2(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-aria/interactions': 3.21.3(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-stately/form': 3.0.3(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-aria/form@3.0.5(react@18.2.0)': + '@react-aria/form@3.0.9(react@18.2.0)': dependencies: - '@react-aria/interactions': 3.21.3(react@18.2.0) - '@react-aria/utils': 3.24.1(react@18.2.0) - '@react-stately/form': 3.0.3(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-aria/interactions': 3.22.3(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-stately/form': 3.0.6(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 + '@react-aria/grid@3.10.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@react-aria/focus': 3.18.3(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) + '@react-aria/interactions': 3.22.3(react@18.2.0) + '@react-aria/live-announcer': 3.4.0 + '@react-aria/selection': 3.20.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-stately/collections': 3.11.0(react@18.2.0) + '@react-stately/grid': 3.9.3(react@18.2.0) + '@react-stately/selection': 3.17.0(react@18.2.0) + '@react-types/checkbox': 3.8.4(react@18.2.0) + '@react-types/grid': 3.2.9(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) + '@swc/helpers': 0.5.10 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + '@react-aria/grid@3.8.8(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@react-aria/focus': 3.16.2(react@18.2.0) - '@react-aria/i18n': 3.10.2(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) '@react-aria/interactions': 3.21.1(react@18.2.0) '@react-aria/live-announcer': 3.3.2 '@react-aria/selection': 3.17.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.23.2(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-stately/collections': 3.10.5(react@18.2.0) '@react-stately/grid': 3.8.5(react@18.2.0) '@react-stately/selection': 3.14.3(react@18.2.0) '@react-stately/virtualizer': 3.6.8(react@18.2.0) '@react-types/checkbox': 3.7.1(react@18.2.0) '@react-types/grid': 3.2.4(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - - '@react-aria/grid@3.9.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@react-aria/focus': 3.17.0(react@18.2.0) - '@react-aria/i18n': 3.11.0(react@18.2.0) - '@react-aria/interactions': 3.21.2(react@18.2.0) - '@react-aria/live-announcer': 3.3.3 - '@react-aria/selection': 3.18.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.24.0(react@18.2.0) - '@react-stately/collections': 3.10.6(react@18.2.0) - '@react-stately/grid': 3.8.6(react@18.2.0) - '@react-stately/selection': 3.15.0(react@18.2.0) - '@react-stately/virtualizer': 3.7.0(react@18.2.0) - '@react-types/checkbox': 3.8.0(react@18.2.0) - '@react-types/grid': 3.2.5(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -23606,18 +23685,18 @@ snapshots: '@react-aria/grid@3.9.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@react-aria/focus': 3.17.1(react@18.2.0) - '@react-aria/i18n': 3.11.1(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) '@react-aria/interactions': 3.21.3(react@18.2.0) '@react-aria/live-announcer': 3.3.4 '@react-aria/selection': 3.18.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.24.1(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-stately/collections': 3.10.7(react@18.2.0) '@react-stately/grid': 3.8.7(react@18.2.0) '@react-stately/selection': 3.15.1(react@18.2.0) '@react-stately/virtualizer': 3.7.1(react@18.2.0) '@react-types/checkbox': 3.8.1(react@18.2.0) '@react-types/grid': 3.2.6(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -23626,28 +23705,12 @@ snapshots: dependencies: '@react-aria/focus': 3.16.2(react@18.2.0) '@react-aria/grid': 3.8.8(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/i18n': 3.10.2(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) '@react-aria/interactions': 3.21.1(react@18.2.0) '@react-aria/selection': 3.17.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.23.2(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-stately/list': 3.10.3(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - - '@react-aria/gridlist@3.8.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@react-aria/focus': 3.17.0(react@18.2.0) - '@react-aria/grid': 3.9.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/i18n': 3.11.0(react@18.2.0) - '@react-aria/interactions': 3.21.2(react@18.2.0) - '@react-aria/selection': 3.18.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.24.0(react@18.2.0) - '@react-stately/collections': 3.10.6(react@18.2.0) - '@react-stately/list': 3.10.4(react@18.2.0) - '@react-stately/tree': 3.8.0(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -23656,14 +23719,30 @@ snapshots: dependencies: '@react-aria/focus': 3.17.1(react@18.2.0) '@react-aria/grid': 3.9.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/i18n': 3.11.1(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) '@react-aria/interactions': 3.21.3(react@18.2.0) '@react-aria/selection': 3.18.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.24.1(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-stately/collections': 3.10.7(react@18.2.0) '@react-stately/list': 3.10.5(react@18.2.0) '@react-stately/tree': 3.8.1(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) + '@swc/helpers': 0.5.10 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + + '@react-aria/gridlist@3.9.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@react-aria/focus': 3.18.3(react@18.2.0) + '@react-aria/grid': 3.10.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) + '@react-aria/interactions': 3.22.3(react@18.2.0) + '@react-aria/selection': 3.20.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-stately/collections': 3.11.0(react@18.2.0) + '@react-stately/list': 3.11.0(react@18.2.0) + '@react-stately/tree': 3.8.5(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -23674,21 +23753,9 @@ snapshots: '@internationalized/message': 3.1.2 '@internationalized/number': 3.5.1 '@internationalized/string': 3.2.1 - '@react-aria/ssr': 3.9.2(react@18.2.0) - '@react-aria/utils': 3.23.2(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-aria/i18n@3.11.0(react@18.2.0)': - dependencies: - '@internationalized/date': 3.5.3 - '@internationalized/message': 3.1.3 - '@internationalized/number': 3.5.2 - '@internationalized/string': 3.2.2 - '@react-aria/ssr': 3.9.3(react@18.2.0) - '@react-aria/utils': 3.24.0(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-aria/ssr': 3.9.6(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 @@ -23698,54 +23765,66 @@ snapshots: '@internationalized/message': 3.1.4 '@internationalized/number': 3.5.3 '@internationalized/string': 3.2.3 - '@react-aria/ssr': 3.9.4(react@18.2.0) - '@react-aria/utils': 3.24.1(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-aria/ssr': 3.9.6(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-aria/interactions@3.21.1(react@18.2.0)': + '@react-aria/i18n@3.12.3(react@18.2.0)': dependencies: - '@react-aria/ssr': 3.9.2(react@18.2.0) - '@react-aria/utils': 3.23.2(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) + '@internationalized/date': 3.5.6 + '@internationalized/message': 3.1.5 + '@internationalized/number': 3.5.4 + '@internationalized/string': 3.2.4 + '@react-aria/ssr': 3.9.6(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-aria/interactions@3.21.2(react@18.2.0)': + '@react-aria/interactions@3.21.1(react@18.2.0)': dependencies: - '@react-aria/ssr': 3.9.3(react@18.2.0) - '@react-aria/utils': 3.24.0(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-aria/ssr': 3.9.2(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-types/shared': 3.22.1(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 '@react-aria/interactions@3.21.3(react@18.2.0)': dependencies: '@react-aria/ssr': 3.9.4(react@18.2.0) - '@react-aria/utils': 3.24.1(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-types/shared': 3.23.1(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-aria/label@3.7.6(react@18.2.0)': + '@react-aria/interactions@3.22.3(react@18.2.0)': dependencies: - '@react-aria/utils': 3.23.2(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) + '@react-aria/ssr': 3.9.6(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) + '@swc/helpers': 0.5.10 + react: 18.2.0 + + '@react-aria/label@3.7.12(react@18.2.0)': + dependencies: + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-aria/label@3.7.7(react@18.2.0)': + '@react-aria/label@3.7.6(react@18.2.0)': dependencies: - '@react-aria/utils': 3.24.0(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 '@react-aria/label@3.7.8(react@18.2.0)': dependencies: - '@react-aria/utils': 3.24.1(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 @@ -23753,19 +23832,9 @@ snapshots: dependencies: '@react-aria/focus': 3.16.2(react@18.2.0) '@react-aria/interactions': 3.21.1(react@18.2.0) - '@react-aria/utils': 3.23.2(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-types/link': 3.5.3(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-aria/link@3.7.0(react@18.2.0)': - dependencies: - '@react-aria/focus': 3.17.0(react@18.2.0) - '@react-aria/interactions': 3.21.2(react@18.2.0) - '@react-aria/utils': 3.24.0(react@18.2.0) - '@react-types/link': 3.5.4(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 @@ -23773,9 +23842,19 @@ snapshots: dependencies: '@react-aria/focus': 3.17.1(react@18.2.0) '@react-aria/interactions': 3.21.3(react@18.2.0) - '@react-aria/utils': 3.24.1(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-types/link': 3.5.5(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) + '@swc/helpers': 0.5.10 + react: 18.2.0 + + '@react-aria/link@3.7.5(react@18.2.0)': + dependencies: + '@react-aria/focus': 3.18.3(react@18.2.0) + '@react-aria/interactions': 3.22.3(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-types/link': 3.5.8(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 @@ -23784,25 +23863,11 @@ snapshots: '@react-aria/interactions': 3.21.1(react@18.2.0) '@react-aria/label': 3.7.6(react@18.2.0) '@react-aria/selection': 3.17.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.23.2(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-stately/collections': 3.10.5(react@18.2.0) '@react-stately/list': 3.10.3(react@18.2.0) '@react-types/listbox': 3.4.7(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - - '@react-aria/listbox@3.12.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@react-aria/interactions': 3.21.2(react@18.2.0) - '@react-aria/label': 3.7.7(react@18.2.0) - '@react-aria/selection': 3.18.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.24.0(react@18.2.0) - '@react-stately/collections': 3.10.6(react@18.2.0) - '@react-stately/list': 3.10.4(react@18.2.0) - '@react-types/listbox': 3.4.8(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -23812,20 +23877,30 @@ snapshots: '@react-aria/interactions': 3.21.3(react@18.2.0) '@react-aria/label': 3.7.8(react@18.2.0) '@react-aria/selection': 3.18.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.24.1(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-stately/collections': 3.10.7(react@18.2.0) '@react-stately/list': 3.10.5(react@18.2.0) '@react-types/listbox': 3.4.9(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@react-aria/live-announcer@3.3.2': + '@react-aria/listbox@3.13.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: + '@react-aria/interactions': 3.22.3(react@18.2.0) + '@react-aria/label': 3.7.12(react@18.2.0) + '@react-aria/selection': 3.20.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-stately/collections': 3.11.0(react@18.2.0) + '@react-stately/list': 3.11.0(react@18.2.0) + '@react-types/listbox': 3.5.2(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) - '@react-aria/live-announcer@3.3.3': + '@react-aria/live-announcer@3.3.2': dependencies: '@swc/helpers': 0.5.10 @@ -23833,6 +23908,10 @@ snapshots: dependencies: '@swc/helpers': 0.5.10 + '@react-aria/live-announcer@3.4.0': + dependencies: + '@swc/helpers': 0.5.10 + '@react-aria/menu@3.13.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@react-aria/focus': 3.16.2(react@18.2.0) @@ -23840,7 +23919,7 @@ snapshots: '@react-aria/interactions': 3.21.1(react@18.2.0) '@react-aria/overlays': 3.21.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@react-aria/selection': 3.17.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.23.2(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-stately/collections': 3.10.5(react@18.2.0) '@react-stately/menu': 3.6.1(react@18.2.0) '@react-stately/tree': 3.7.6(react@18.2.0) @@ -23851,24 +23930,6 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@react-aria/menu@3.14.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@react-aria/focus': 3.17.0(react@18.2.0) - '@react-aria/i18n': 3.11.0(react@18.2.0) - '@react-aria/interactions': 3.21.2(react@18.2.0) - '@react-aria/overlays': 3.22.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/selection': 3.18.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.24.0(react@18.2.0) - '@react-stately/collections': 3.10.6(react@18.2.0) - '@react-stately/menu': 3.7.0(react@18.2.0) - '@react-stately/tree': 3.8.0(react@18.2.0) - '@react-types/button': 3.9.3(react@18.2.0) - '@react-types/menu': 3.9.8(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - '@react-aria/menu@3.14.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@react-aria/focus': 3.17.1(react@18.2.0) @@ -23876,7 +23937,7 @@ snapshots: '@react-aria/interactions': 3.21.3(react@18.2.0) '@react-aria/overlays': 3.22.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@react-aria/selection': 3.18.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.24.1(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-stately/collections': 3.10.7(react@18.2.0) '@react-stately/menu': 3.7.1(react@18.2.0) '@react-stately/tree': 3.8.1(react@18.2.0) @@ -23887,74 +23948,92 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + '@react-aria/menu@3.15.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@react-aria/focus': 3.18.3(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) + '@react-aria/interactions': 3.22.3(react@18.2.0) + '@react-aria/overlays': 3.23.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/selection': 3.20.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-stately/collections': 3.11.0(react@18.2.0) + '@react-stately/menu': 3.8.3(react@18.2.0) + '@react-stately/tree': 3.8.5(react@18.2.0) + '@react-types/button': 3.10.0(react@18.2.0) + '@react-types/menu': 3.9.12(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) + '@swc/helpers': 0.5.10 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + '@react-aria/meter@3.4.11(react@18.2.0)': dependencies: '@react-aria/progress': 3.4.11(react@18.2.0) '@react-types/meter': 3.3.7(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-aria/meter@3.4.12(react@18.2.0)': + '@react-aria/meter@3.4.13(react@18.2.0)': dependencies: - '@react-aria/progress': 3.4.12(react@18.2.0) - '@react-types/meter': 3.4.0(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-aria/progress': 3.4.13(react@18.2.0) + '@react-types/meter': 3.4.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-aria/meter@3.4.13(react@18.2.0)': + '@react-aria/meter@3.4.17(react@18.2.0)': dependencies: - '@react-aria/progress': 3.4.13(react@18.2.0) - '@react-types/meter': 3.4.1(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-aria/progress': 3.4.17(react@18.2.0) + '@react-types/meter': 3.4.4(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 '@react-aria/numberfield@3.11.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@react-aria/i18n': 3.10.2(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) '@react-aria/interactions': 3.21.1(react@18.2.0) '@react-aria/spinbutton': 3.6.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@react-aria/textfield': 3.14.3(react@18.2.0) - '@react-aria/utils': 3.23.2(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-stately/form': 3.0.1(react@18.2.0) '@react-stately/numberfield': 3.9.1(react@18.2.0) '@react-types/button': 3.9.2(react@18.2.0) '@react-types/numberfield': 3.8.1(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - - '@react-aria/numberfield@3.11.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@react-aria/i18n': 3.11.0(react@18.2.0) - '@react-aria/interactions': 3.21.2(react@18.2.0) - '@react-aria/spinbutton': 3.6.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/textfield': 3.14.4(react@18.2.0) - '@react-aria/utils': 3.24.0(react@18.2.0) - '@react-stately/form': 3.0.2(react@18.2.0) - '@react-stately/numberfield': 3.9.2(react@18.2.0) - '@react-types/button': 3.9.3(react@18.2.0) - '@react-types/numberfield': 3.8.2(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) '@react-aria/numberfield@3.11.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@react-aria/i18n': 3.11.1(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) '@react-aria/interactions': 3.21.3(react@18.2.0) '@react-aria/spinbutton': 3.6.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@react-aria/textfield': 3.14.5(react@18.2.0) - '@react-aria/utils': 3.24.1(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-stately/form': 3.0.3(react@18.2.0) '@react-stately/numberfield': 3.9.3(react@18.2.0) '@react-types/button': 3.9.4(react@18.2.0) '@react-types/numberfield': 3.8.3(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) + '@swc/helpers': 0.5.10 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + + '@react-aria/numberfield@3.11.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@react-aria/i18n': 3.12.3(react@18.2.0) + '@react-aria/interactions': 3.22.3(react@18.2.0) + '@react-aria/spinbutton': 3.6.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/textfield': 3.14.9(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-stately/form': 3.0.6(react@18.2.0) + '@react-stately/numberfield': 3.9.7(react@18.2.0) + '@react-types/button': 3.10.0(react@18.2.0) + '@react-types/numberfield': 3.8.6(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -23962,31 +24041,15 @@ snapshots: '@react-aria/overlays@3.21.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@react-aria/focus': 3.16.2(react@18.2.0) - '@react-aria/i18n': 3.10.2(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) '@react-aria/interactions': 3.21.1(react@18.2.0) - '@react-aria/ssr': 3.9.2(react@18.2.0) - '@react-aria/utils': 3.23.2(react@18.2.0) + '@react-aria/ssr': 3.9.6(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-aria/visually-hidden': 3.8.10(react@18.2.0) '@react-stately/overlays': 3.6.5(react@18.2.0) '@react-types/button': 3.9.2(react@18.2.0) '@react-types/overlays': 3.8.5(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - - '@react-aria/overlays@3.22.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@react-aria/focus': 3.17.0(react@18.2.0) - '@react-aria/i18n': 3.11.0(react@18.2.0) - '@react-aria/interactions': 3.21.2(react@18.2.0) - '@react-aria/ssr': 3.9.3(react@18.2.0) - '@react-aria/utils': 3.24.0(react@18.2.0) - '@react-aria/visually-hidden': 3.8.11(react@18.2.0) - '@react-stately/overlays': 3.6.6(react@18.2.0) - '@react-types/button': 3.9.3(react@18.2.0) - '@react-types/overlays': 3.8.6(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -23994,46 +24057,62 @@ snapshots: '@react-aria/overlays@3.22.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@react-aria/focus': 3.17.1(react@18.2.0) - '@react-aria/i18n': 3.11.1(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) '@react-aria/interactions': 3.21.3(react@18.2.0) - '@react-aria/ssr': 3.9.4(react@18.2.0) - '@react-aria/utils': 3.24.1(react@18.2.0) + '@react-aria/ssr': 3.9.6(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-aria/visually-hidden': 3.8.12(react@18.2.0) '@react-stately/overlays': 3.6.7(react@18.2.0) '@react-types/button': 3.9.4(react@18.2.0) '@react-types/overlays': 3.8.7(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) + '@swc/helpers': 0.5.10 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + + '@react-aria/overlays@3.23.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@react-aria/focus': 3.18.3(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) + '@react-aria/interactions': 3.22.3(react@18.2.0) + '@react-aria/ssr': 3.9.6(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-aria/visually-hidden': 3.8.16(react@18.2.0) + '@react-stately/overlays': 3.6.11(react@18.2.0) + '@react-types/button': 3.10.0(react@18.2.0) + '@react-types/overlays': 3.8.10(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) '@react-aria/progress@3.4.11(react@18.2.0)': dependencies: - '@react-aria/i18n': 3.10.2(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) '@react-aria/label': 3.7.6(react@18.2.0) - '@react-aria/utils': 3.23.2(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-types/progress': 3.5.2(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-aria/progress@3.4.12(react@18.2.0)': + '@react-aria/progress@3.4.13(react@18.2.0)': dependencies: - '@react-aria/i18n': 3.11.0(react@18.2.0) - '@react-aria/label': 3.7.7(react@18.2.0) - '@react-aria/utils': 3.24.0(react@18.2.0) - '@react-types/progress': 3.5.3(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) + '@react-aria/label': 3.7.8(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-types/progress': 3.5.4(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-aria/progress@3.4.13(react@18.2.0)': + '@react-aria/progress@3.4.17(react@18.2.0)': dependencies: - '@react-aria/i18n': 3.11.1(react@18.2.0) - '@react-aria/label': 3.7.8(react@18.2.0) - '@react-aria/utils': 3.24.1(react@18.2.0) - '@react-types/progress': 3.5.4(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) + '@react-aria/label': 3.7.12(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-types/progress': 3.5.7(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 @@ -24041,27 +24120,13 @@ snapshots: dependencies: '@react-aria/focus': 3.16.2(react@18.2.0) '@react-aria/form': 3.0.3(react@18.2.0) - '@react-aria/i18n': 3.10.2(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) '@react-aria/interactions': 3.21.1(react@18.2.0) '@react-aria/label': 3.7.6(react@18.2.0) - '@react-aria/utils': 3.23.2(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-stately/radio': 3.10.2(react@18.2.0) '@react-types/radio': 3.7.1(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-aria/radio@3.10.3(react@18.2.0)': - dependencies: - '@react-aria/focus': 3.17.0(react@18.2.0) - '@react-aria/form': 3.0.4(react@18.2.0) - '@react-aria/i18n': 3.11.0(react@18.2.0) - '@react-aria/interactions': 3.21.2(react@18.2.0) - '@react-aria/label': 3.7.7(react@18.2.0) - '@react-aria/utils': 3.24.0(react@18.2.0) - '@react-stately/radio': 3.10.3(react@18.2.0) - '@react-types/radio': 3.8.0(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 @@ -24069,86 +24134,100 @@ snapshots: dependencies: '@react-aria/focus': 3.17.1(react@18.2.0) '@react-aria/form': 3.0.5(react@18.2.0) - '@react-aria/i18n': 3.11.1(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) '@react-aria/interactions': 3.21.3(react@18.2.0) '@react-aria/label': 3.7.8(react@18.2.0) - '@react-aria/utils': 3.24.1(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-stately/radio': 3.10.4(react@18.2.0) '@react-types/radio': 3.8.1(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) + '@swc/helpers': 0.5.10 + react: 18.2.0 + + '@react-aria/radio@3.10.8(react@18.2.0)': + dependencies: + '@react-aria/focus': 3.18.3(react@18.2.0) + '@react-aria/form': 3.0.9(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) + '@react-aria/interactions': 3.22.3(react@18.2.0) + '@react-aria/label': 3.7.12(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-stately/radio': 3.10.8(react@18.2.0) + '@react-types/radio': 3.8.4(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 '@react-aria/searchfield@3.7.3(react@18.2.0)': dependencies: - '@react-aria/i18n': 3.10.2(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) '@react-aria/textfield': 3.14.3(react@18.2.0) - '@react-aria/utils': 3.23.2(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-stately/searchfield': 3.5.1(react@18.2.0) '@react-types/button': 3.9.2(react@18.2.0) '@react-types/searchfield': 3.5.3(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-aria/searchfield@3.7.4(react@18.2.0)': - dependencies: - '@react-aria/i18n': 3.11.0(react@18.2.0) - '@react-aria/textfield': 3.14.4(react@18.2.0) - '@react-aria/utils': 3.24.0(react@18.2.0) - '@react-stately/searchfield': 3.5.2(react@18.2.0) - '@react-types/button': 3.9.3(react@18.2.0) - '@react-types/searchfield': 3.5.4(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 '@react-aria/searchfield@3.7.5(react@18.2.0)': dependencies: - '@react-aria/i18n': 3.11.1(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) '@react-aria/textfield': 3.14.5(react@18.2.0) - '@react-aria/utils': 3.24.1(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-stately/searchfield': 3.5.3(react@18.2.0) '@react-types/button': 3.9.4(react@18.2.0) '@react-types/searchfield': 3.5.5(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) + '@swc/helpers': 0.5.10 + react: 18.2.0 + + '@react-aria/searchfield@3.7.9(react@18.2.0)': + dependencies: + '@react-aria/i18n': 3.12.3(react@18.2.0) + '@react-aria/textfield': 3.14.9(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-stately/searchfield': 3.5.7(react@18.2.0) + '@react-types/button': 3.10.0(react@18.2.0) + '@react-types/searchfield': 3.5.9(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 + '@react-aria/select@3.14.10(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@react-aria/form': 3.0.9(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) + '@react-aria/interactions': 3.22.3(react@18.2.0) + '@react-aria/label': 3.7.12(react@18.2.0) + '@react-aria/listbox': 3.13.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/menu': 3.15.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/selection': 3.20.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-aria/visually-hidden': 3.8.16(react@18.2.0) + '@react-stately/select': 3.6.8(react@18.2.0) + '@react-types/button': 3.10.0(react@18.2.0) + '@react-types/select': 3.9.7(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) + '@swc/helpers': 0.5.10 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + '@react-aria/select@3.14.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@react-aria/form': 3.0.3(react@18.2.0) - '@react-aria/i18n': 3.10.2(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) '@react-aria/interactions': 3.21.1(react@18.2.0) '@react-aria/label': 3.7.6(react@18.2.0) '@react-aria/listbox': 3.11.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@react-aria/menu': 3.13.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@react-aria/selection': 3.17.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.23.2(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-aria/visually-hidden': 3.8.10(react@18.2.0) '@react-stately/select': 3.6.2(react@18.2.0) '@react-types/button': 3.9.2(react@18.2.0) '@react-types/select': 3.9.2(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - - '@react-aria/select@3.14.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@react-aria/form': 3.0.4(react@18.2.0) - '@react-aria/i18n': 3.11.0(react@18.2.0) - '@react-aria/interactions': 3.21.2(react@18.2.0) - '@react-aria/label': 3.7.7(react@18.2.0) - '@react-aria/listbox': 3.12.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/menu': 3.14.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/selection': 3.18.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.24.0(react@18.2.0) - '@react-aria/visually-hidden': 3.8.11(react@18.2.0) - '@react-stately/select': 3.6.3(react@18.2.0) - '@react-types/button': 3.9.3(react@18.2.0) - '@react-types/select': 3.9.3(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -24156,18 +24235,18 @@ snapshots: '@react-aria/select@3.14.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@react-aria/form': 3.0.5(react@18.2.0) - '@react-aria/i18n': 3.11.1(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) '@react-aria/interactions': 3.21.3(react@18.2.0) '@react-aria/label': 3.7.8(react@18.2.0) '@react-aria/listbox': 3.12.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@react-aria/menu': 3.14.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@react-aria/selection': 3.18.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.24.1(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-aria/visually-hidden': 3.8.12(react@18.2.0) '@react-stately/select': 3.6.4(react@18.2.0) '@react-types/button': 3.9.4(react@18.2.0) '@react-types/select': 3.9.4(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -24175,128 +24254,128 @@ snapshots: '@react-aria/selection@3.17.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@react-aria/focus': 3.16.2(react@18.2.0) - '@react-aria/i18n': 3.10.2(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) '@react-aria/interactions': 3.21.1(react@18.2.0) - '@react-aria/utils': 3.23.2(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-stately/selection': 3.14.3(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@react-aria/selection@3.18.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@react-aria/selection@3.18.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@react-aria/focus': 3.17.0(react@18.2.0) - '@react-aria/i18n': 3.11.0(react@18.2.0) - '@react-aria/interactions': 3.21.2(react@18.2.0) - '@react-aria/utils': 3.24.0(react@18.2.0) - '@react-stately/selection': 3.15.0(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-aria/focus': 3.17.1(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) + '@react-aria/interactions': 3.21.3(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-stately/selection': 3.15.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@react-aria/selection@3.18.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@react-aria/selection@3.20.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@react-aria/focus': 3.17.1(react@18.2.0) - '@react-aria/i18n': 3.11.1(react@18.2.0) - '@react-aria/interactions': 3.21.3(react@18.2.0) - '@react-aria/utils': 3.24.1(react@18.2.0) - '@react-stately/selection': 3.15.1(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-aria/focus': 3.18.3(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) + '@react-aria/interactions': 3.22.3(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-stately/selection': 3.17.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) '@react-aria/separator@3.3.11(react@18.2.0)': dependencies: - '@react-aria/utils': 3.23.2(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-aria/separator@3.3.12(react@18.2.0)': + '@react-aria/separator@3.3.13(react@18.2.0)': dependencies: - '@react-aria/utils': 3.24.0(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-aria/separator@3.3.13(react@18.2.0)': + '@react-aria/separator@3.4.3(react@18.2.0)': dependencies: - '@react-aria/utils': 3.24.1(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) + '@swc/helpers': 0.5.10 + react: 18.2.0 + + '@react-aria/slider@3.7.12(react@18.2.0)': + dependencies: + '@react-aria/focus': 3.18.3(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) + '@react-aria/interactions': 3.22.3(react@18.2.0) + '@react-aria/label': 3.7.12(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-stately/slider': 3.5.8(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) + '@react-types/slider': 3.7.6(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 '@react-aria/slider@3.7.6(react@18.2.0)': dependencies: '@react-aria/focus': 3.16.2(react@18.2.0) - '@react-aria/i18n': 3.10.2(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) '@react-aria/interactions': 3.21.1(react@18.2.0) '@react-aria/label': 3.7.6(react@18.2.0) - '@react-aria/utils': 3.23.2(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-stately/slider': 3.5.2(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@react-types/slider': 3.7.1(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-aria/slider@3.7.7(react@18.2.0)': - dependencies: - '@react-aria/focus': 3.17.0(react@18.2.0) - '@react-aria/i18n': 3.11.0(react@18.2.0) - '@react-aria/interactions': 3.21.2(react@18.2.0) - '@react-aria/label': 3.7.7(react@18.2.0) - '@react-aria/utils': 3.24.0(react@18.2.0) - '@react-stately/slider': 3.5.3(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) - '@react-types/slider': 3.7.2(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - '@react-aria/slider@3.7.8(react@18.2.0)': dependencies: '@react-aria/focus': 3.17.1(react@18.2.0) - '@react-aria/i18n': 3.11.1(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) '@react-aria/interactions': 3.21.3(react@18.2.0) '@react-aria/label': 3.7.8(react@18.2.0) - '@react-aria/utils': 3.24.1(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-stately/slider': 3.5.4(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@react-types/slider': 3.7.3(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 '@react-aria/spinbutton@3.6.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@react-aria/i18n': 3.10.2(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) '@react-aria/live-announcer': 3.3.2 - '@react-aria/utils': 3.23.2(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-types/button': 3.9.2(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@react-aria/spinbutton@3.6.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@react-aria/spinbutton@3.6.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@react-aria/i18n': 3.11.0(react@18.2.0) - '@react-aria/live-announcer': 3.3.3 - '@react-aria/utils': 3.24.0(react@18.2.0) - '@react-types/button': 3.9.3(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) + '@react-aria/live-announcer': 3.3.4 + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-types/button': 3.9.4(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@react-aria/spinbutton@3.6.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@react-aria/spinbutton@3.6.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@react-aria/i18n': 3.11.1(react@18.2.0) - '@react-aria/live-announcer': 3.3.4 - '@react-aria/utils': 3.24.1(react@18.2.0) - '@react-types/button': 3.9.4(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) + '@react-aria/live-announcer': 3.4.0 + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-types/button': 3.10.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -24306,12 +24385,12 @@ snapshots: '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-aria/ssr@3.9.3(react@18.2.0)': + '@react-aria/ssr@3.9.4(react@18.2.0)': dependencies: '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-aria/ssr@3.9.4(react@18.2.0)': + '@react-aria/ssr@3.9.6(react@18.2.0)': dependencies: '@swc/helpers': 0.5.10 react: 18.2.0 @@ -24324,14 +24403,6 @@ snapshots: '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-aria/switch@3.6.3(react@18.2.0)': - dependencies: - '@react-aria/toggle': 3.10.3(react@18.2.0) - '@react-stately/toggle': 3.7.3(react@18.2.0) - '@react-types/switch': 3.5.2(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - '@react-aria/switch@3.6.4(react@18.2.0)': dependencies: '@react-aria/toggle': 3.10.4(react@18.2.0) @@ -24340,14 +24411,23 @@ snapshots: '@swc/helpers': 0.5.10 react: 18.2.0 + '@react-aria/switch@3.6.8(react@18.2.0)': + dependencies: + '@react-aria/toggle': 3.10.8(react@18.2.0) + '@react-stately/toggle': 3.7.8(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) + '@react-types/switch': 3.5.6(react@18.2.0) + '@swc/helpers': 0.5.10 + react: 18.2.0 + '@react-aria/table@3.13.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@react-aria/focus': 3.16.2(react@18.2.0) '@react-aria/grid': 3.8.8(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/i18n': 3.10.2(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) '@react-aria/interactions': 3.21.1(react@18.2.0) '@react-aria/live-announcer': 3.3.2 - '@react-aria/utils': 3.23.2(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-aria/visually-hidden': 3.8.10(react@18.2.0) '@react-stately/collections': 3.10.5(react@18.2.0) '@react-stately/flags': 3.0.1 @@ -24355,41 +24435,20 @@ snapshots: '@react-stately/virtualizer': 3.6.8(react@18.2.0) '@react-types/checkbox': 3.7.1(react@18.2.0) '@react-types/grid': 3.2.4(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@react-types/table': 3.9.3(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@react-aria/table@3.14.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@react-aria/focus': 3.17.0(react@18.2.0) - '@react-aria/grid': 3.9.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/i18n': 3.11.0(react@18.2.0) - '@react-aria/interactions': 3.21.2(react@18.2.0) - '@react-aria/live-announcer': 3.3.3 - '@react-aria/utils': 3.24.0(react@18.2.0) - '@react-aria/visually-hidden': 3.8.11(react@18.2.0) - '@react-stately/collections': 3.10.6(react@18.2.0) - '@react-stately/flags': 3.0.2 - '@react-stately/table': 3.11.7(react@18.2.0) - '@react-stately/virtualizer': 3.7.0(react@18.2.0) - '@react-types/checkbox': 3.8.0(react@18.2.0) - '@react-types/grid': 3.2.5(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) - '@react-types/table': 3.9.4(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - '@react-aria/table@3.14.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@react-aria/focus': 3.17.1(react@18.2.0) '@react-aria/grid': 3.9.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/i18n': 3.11.1(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) '@react-aria/interactions': 3.21.3(react@18.2.0) '@react-aria/live-announcer': 3.3.4 - '@react-aria/utils': 3.24.1(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-aria/visually-hidden': 3.8.12(react@18.2.0) '@react-stately/collections': 3.10.7(react@18.2.0) '@react-stately/flags': 3.0.3 @@ -24397,77 +24456,82 @@ snapshots: '@react-stately/virtualizer': 3.7.1(react@18.2.0) '@react-types/checkbox': 3.8.1(react@18.2.0) '@react-types/grid': 3.2.6(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@react-types/table': 3.9.5(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + '@react-aria/table@3.15.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@react-aria/focus': 3.18.3(react@18.2.0) + '@react-aria/grid': 3.10.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) + '@react-aria/interactions': 3.22.3(react@18.2.0) + '@react-aria/live-announcer': 3.4.0 + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-aria/visually-hidden': 3.8.16(react@18.2.0) + '@react-stately/collections': 3.11.0(react@18.2.0) + '@react-stately/flags': 3.0.4 + '@react-stately/table': 3.12.3(react@18.2.0) + '@react-types/checkbox': 3.8.4(react@18.2.0) + '@react-types/grid': 3.2.9(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) + '@react-types/table': 3.10.2(react@18.2.0) + '@swc/helpers': 0.5.10 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + '@react-aria/tabs@3.8.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@react-aria/focus': 3.16.2(react@18.2.0) - '@react-aria/i18n': 3.10.2(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) '@react-aria/selection': 3.17.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.23.2(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-stately/tabs': 3.6.4(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@react-types/tabs': 3.3.5(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@react-aria/tabs@3.9.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@react-aria/focus': 3.17.0(react@18.2.0) - '@react-aria/i18n': 3.11.0(react@18.2.0) - '@react-aria/selection': 3.18.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.24.0(react@18.2.0) - '@react-stately/tabs': 3.6.5(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) - '@react-types/tabs': 3.3.6(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - '@react-aria/tabs@3.9.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@react-aria/focus': 3.17.1(react@18.2.0) - '@react-aria/i18n': 3.11.1(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) '@react-aria/selection': 3.18.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.24.1(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-stately/tabs': 3.6.6(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@react-types/tabs': 3.3.7(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + '@react-aria/tabs@3.9.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@react-aria/focus': 3.18.3(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) + '@react-aria/selection': 3.20.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-stately/tabs': 3.6.10(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) + '@react-types/tabs': 3.3.10(react@18.2.0) + '@swc/helpers': 0.5.10 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + '@react-aria/tag@3.3.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@react-aria/gridlist': 3.7.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/i18n': 3.10.2(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) '@react-aria/interactions': 3.21.1(react@18.2.0) '@react-aria/label': 3.7.6(react@18.2.0) '@react-aria/selection': 3.17.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.23.2(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-stately/list': 3.10.3(react@18.2.0) '@react-types/button': 3.9.2(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - - '@react-aria/tag@3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@react-aria/gridlist': 3.8.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/i18n': 3.11.0(react@18.2.0) - '@react-aria/interactions': 3.21.2(react@18.2.0) - '@react-aria/label': 3.7.7(react@18.2.0) - '@react-aria/selection': 3.18.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.24.0(react@18.2.0) - '@react-stately/list': 3.10.4(react@18.2.0) - '@react-types/button': 3.9.3(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -24475,14 +24539,29 @@ snapshots: '@react-aria/tag@3.4.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@react-aria/gridlist': 3.8.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/i18n': 3.11.1(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) '@react-aria/interactions': 3.21.3(react@18.2.0) '@react-aria/label': 3.7.8(react@18.2.0) '@react-aria/selection': 3.18.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.24.1(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-stately/list': 3.10.5(react@18.2.0) '@react-types/button': 3.9.4(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) + '@swc/helpers': 0.5.10 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + + '@react-aria/tag@3.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@react-aria/gridlist': 3.9.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) + '@react-aria/interactions': 3.22.3(react@18.2.0) + '@react-aria/label': 3.7.12(react@18.2.0) + '@react-aria/selection': 3.20.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-stately/list': 3.11.0(react@18.2.0) + '@react-types/button': 3.10.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -24492,85 +24571,77 @@ snapshots: '@react-aria/focus': 3.16.2(react@18.2.0) '@react-aria/form': 3.0.3(react@18.2.0) '@react-aria/label': 3.7.6(react@18.2.0) - '@react-aria/utils': 3.23.2(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-stately/form': 3.0.1(react@18.2.0) - '@react-stately/utils': 3.9.1(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) + '@react-stately/utils': 3.10.4(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@react-types/textfield': 3.9.1(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-aria/textfield@3.14.4(react@18.2.0)': - dependencies: - '@react-aria/focus': 3.17.0(react@18.2.0) - '@react-aria/form': 3.0.4(react@18.2.0) - '@react-aria/label': 3.7.7(react@18.2.0) - '@react-aria/utils': 3.24.0(react@18.2.0) - '@react-stately/form': 3.0.2(react@18.2.0) - '@react-stately/utils': 3.10.0(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) - '@react-types/textfield': 3.9.2(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - '@react-aria/textfield@3.14.5(react@18.2.0)': dependencies: '@react-aria/focus': 3.17.1(react@18.2.0) '@react-aria/form': 3.0.5(react@18.2.0) '@react-aria/label': 3.7.8(react@18.2.0) - '@react-aria/utils': 3.24.1(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-stately/form': 3.0.3(react@18.2.0) - '@react-stately/utils': 3.10.1(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-stately/utils': 3.10.4(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@react-types/textfield': 3.9.3(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 + '@react-aria/textfield@3.14.9(react@18.2.0)': + dependencies: + '@react-aria/focus': 3.18.3(react@18.2.0) + '@react-aria/form': 3.0.9(react@18.2.0) + '@react-aria/label': 3.7.12(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-stately/form': 3.0.6(react@18.2.0) + '@react-stately/utils': 3.10.4(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) + '@react-types/textfield': 3.9.7(react@18.2.0) + '@swc/helpers': 0.5.10 + react: 18.2.0 + '@react-aria/toggle@3.10.2(react@18.2.0)': dependencies: '@react-aria/focus': 3.16.2(react@18.2.0) '@react-aria/interactions': 3.21.1(react@18.2.0) - '@react-aria/utils': 3.23.2(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-stately/toggle': 3.7.2(react@18.2.0) '@react-types/checkbox': 3.7.1(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-aria/toggle@3.10.3(react@18.2.0)': - dependencies: - '@react-aria/focus': 3.17.0(react@18.2.0) - '@react-aria/interactions': 3.21.2(react@18.2.0) - '@react-aria/utils': 3.24.0(react@18.2.0) - '@react-stately/toggle': 3.7.3(react@18.2.0) - '@react-types/checkbox': 3.8.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - '@react-aria/toggle@3.10.4(react@18.2.0)': dependencies: '@react-aria/focus': 3.17.1(react@18.2.0) '@react-aria/interactions': 3.21.3(react@18.2.0) - '@react-aria/utils': 3.24.1(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-stately/toggle': 3.7.4(react@18.2.0) '@react-types/checkbox': 3.8.1(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-aria/toolbar@3.0.0-beta.3(react@18.2.0)': + '@react-aria/toggle@3.10.8(react@18.2.0)': dependencies: - '@react-aria/focus': 3.16.2(react@18.2.0) - '@react-aria/i18n': 3.10.2(react@18.2.0) - '@react-aria/utils': 3.23.2(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) + '@react-aria/focus': 3.18.3(react@18.2.0) + '@react-aria/interactions': 3.22.3(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-stately/toggle': 3.7.8(react@18.2.0) + '@react-types/checkbox': 3.8.4(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-aria/toolbar@3.0.0-beta.4(react@18.2.0)': + '@react-aria/toolbar@3.0.0-beta.3(react@18.2.0)': dependencies: - '@react-aria/focus': 3.17.0(react@18.2.0) - '@react-aria/i18n': 3.11.0(react@18.2.0) - '@react-aria/utils': 3.24.0(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-aria/focus': 3.16.2(react@18.2.0) + '@react-aria/i18n': 3.10.2(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-types/shared': 3.22.1(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 @@ -24578,63 +24649,59 @@ snapshots: dependencies: '@react-aria/focus': 3.17.1(react@18.2.0) '@react-aria/i18n': 3.11.1(react@18.2.0) - '@react-aria/utils': 3.24.1(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-types/shared': 3.23.1(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 + '@react-aria/toolbar@3.0.0-beta.9(react@18.2.0)': + dependencies: + '@react-aria/focus': 3.18.3(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) + '@swc/helpers': 0.5.10 + react: 18.2.0 + '@react-aria/tooltip@3.7.2(react@18.2.0)': dependencies: '@react-aria/focus': 3.16.2(react@18.2.0) '@react-aria/interactions': 3.21.1(react@18.2.0) - '@react-aria/utils': 3.23.2(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-stately/tooltip': 3.4.7(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@react-types/tooltip': 3.4.7(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-aria/tooltip@3.7.3(react@18.2.0)': - dependencies: - '@react-aria/focus': 3.17.0(react@18.2.0) - '@react-aria/interactions': 3.21.2(react@18.2.0) - '@react-aria/utils': 3.24.0(react@18.2.0) - '@react-stately/tooltip': 3.4.8(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) - '@react-types/tooltip': 3.4.8(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - '@react-aria/tooltip@3.7.4(react@18.2.0)': dependencies: '@react-aria/focus': 3.17.1(react@18.2.0) '@react-aria/interactions': 3.21.3(react@18.2.0) - '@react-aria/utils': 3.24.1(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-stately/tooltip': 3.4.9(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@react-types/tooltip': 3.4.9(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-aria/tree@3.0.0-alpha.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@react-aria/tooltip@3.7.8(react@18.2.0)': dependencies: - '@react-aria/gridlist': 3.8.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/i18n': 3.11.0(react@18.2.0) - '@react-aria/selection': 3.18.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.24.0(react@18.2.0) - '@react-stately/tree': 3.8.0(react@18.2.0) - '@react-types/button': 3.9.3(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-aria/focus': 3.18.3(react@18.2.0) + '@react-aria/interactions': 3.22.3(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-stately/tooltip': 3.4.13(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) + '@react-types/tooltip': 3.4.12(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) '@react-aria/tree@3.0.0-alpha.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@react-aria/gridlist': 3.8.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@react-aria/i18n': 3.11.1(react@18.2.0) '@react-aria/selection': 3.18.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.24.1(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-stately/tree': 3.8.1(react@18.2.0) '@react-types/button': 3.9.4(react@18.2.0) '@react-types/shared': 3.23.1(react@18.2.0) @@ -24642,22 +24709,26 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@react-aria/utils@3.23.2(react@18.2.0)': + '@react-aria/tree@3.0.0-beta.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@react-aria/ssr': 3.9.2(react@18.2.0) - '@react-stately/utils': 3.9.1(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) + '@react-aria/gridlist': 3.9.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) + '@react-aria/selection': 3.20.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-stately/tree': 3.8.5(react@18.2.0) + '@react-types/button': 3.10.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 - clsx: 2.1.0 react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) - '@react-aria/utils@3.24.0(react@18.2.0)': + '@react-aria/utils@3.23.2(react@18.2.0)': dependencies: - '@react-aria/ssr': 3.9.3(react@18.2.0) - '@react-stately/utils': 3.10.0(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-aria/ssr': 3.9.2(react@18.2.0) + '@react-stately/utils': 3.9.1(react@18.2.0) + '@react-types/shared': 3.22.1(react@18.2.0) '@swc/helpers': 0.5.10 - clsx: 2.1.0 + clsx: 2.1.1 react: 18.2.0 '@react-aria/utils@3.24.1(react@18.2.0)': @@ -24666,126 +24737,132 @@ snapshots: '@react-stately/utils': 3.10.1(react@18.2.0) '@react-types/shared': 3.23.1(react@18.2.0) '@swc/helpers': 0.5.10 - clsx: 2.1.0 + clsx: 2.1.1 react: 18.2.0 - '@react-aria/visually-hidden@3.8.10(react@18.2.0)': + '@react-aria/utils@3.25.3(react@18.2.0)': dependencies: - '@react-aria/interactions': 3.21.1(react@18.2.0) - '@react-aria/utils': 3.23.2(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) + '@react-aria/ssr': 3.9.6(react@18.2.0) + '@react-stately/utils': 3.10.4(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 + clsx: 2.1.1 react: 18.2.0 - '@react-aria/visually-hidden@3.8.11(react@18.2.0)': + '@react-aria/virtualizer@4.0.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@react-aria/i18n': 3.12.3(react@18.2.0) + '@react-aria/interactions': 3.22.3(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-stately/virtualizer': 4.1.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) + '@swc/helpers': 0.5.10 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + + '@react-aria/visually-hidden@3.8.10(react@18.2.0)': dependencies: - '@react-aria/interactions': 3.21.2(react@18.2.0) - '@react-aria/utils': 3.24.0(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-aria/interactions': 3.21.1(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 '@react-aria/visually-hidden@3.8.12(react@18.2.0)': dependencies: '@react-aria/interactions': 3.21.3(react@18.2.0) - '@react-aria/utils': 3.24.1(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-spectrum/utils@3.11.5(react@18.2.0)': + '@react-aria/visually-hidden@3.8.16(react@18.2.0)': dependencies: - '@react-aria/i18n': 3.10.2(react@18.2.0) - '@react-aria/ssr': 3.9.2(react@18.2.0) - '@react-aria/utils': 3.23.2(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) + '@react-aria/interactions': 3.22.3(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 - clsx: 2.1.0 react: 18.2.0 - '@react-stately/calendar@3.4.4(react@18.2.0)': + '@react-spectrum/utils@3.11.11(react@18.2.0)': dependencies: - '@internationalized/date': 3.5.2 - '@react-stately/utils': 3.9.1(react@18.2.0) - '@react-types/calendar': 3.4.4(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) + '@react-aria/ssr': 3.9.6(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 + clsx: 2.1.1 react: 18.2.0 - '@react-stately/calendar@3.5.0(react@18.2.0)': + '@react-stately/calendar@3.4.4(react@18.2.0)': dependencies: - '@internationalized/date': 3.5.3 - '@react-stately/utils': 3.10.0(react@18.2.0) - '@react-types/calendar': 3.4.5(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@internationalized/date': 3.5.2 + '@react-stately/utils': 3.10.4(react@18.2.0) + '@react-types/calendar': 3.4.4(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 '@react-stately/calendar@3.5.1(react@18.2.0)': dependencies: '@internationalized/date': 3.5.4 - '@react-stately/utils': 3.10.1(react@18.2.0) + '@react-stately/utils': 3.10.4(react@18.2.0) '@react-types/calendar': 3.4.6(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/checkbox@3.6.3(react@18.2.0)': + '@react-stately/calendar@3.5.5(react@18.2.0)': dependencies: - '@react-stately/form': 3.0.1(react@18.2.0) - '@react-stately/utils': 3.9.1(react@18.2.0) - '@react-types/checkbox': 3.7.1(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) + '@internationalized/date': 3.5.6 + '@react-stately/utils': 3.10.4(react@18.2.0) + '@react-types/calendar': 3.4.10(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/checkbox@3.6.4(react@18.2.0)': + '@react-stately/checkbox@3.6.3(react@18.2.0)': dependencies: - '@react-stately/form': 3.0.2(react@18.2.0) - '@react-stately/utils': 3.10.0(react@18.2.0) - '@react-types/checkbox': 3.8.0(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-stately/form': 3.0.1(react@18.2.0) + '@react-stately/utils': 3.10.4(react@18.2.0) + '@react-types/checkbox': 3.7.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 '@react-stately/checkbox@3.6.5(react@18.2.0)': dependencies: '@react-stately/form': 3.0.3(react@18.2.0) - '@react-stately/utils': 3.10.1(react@18.2.0) + '@react-stately/utils': 3.10.4(react@18.2.0) '@react-types/checkbox': 3.8.1(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/collections@3.10.5(react@18.2.0)': + '@react-stately/checkbox@3.6.9(react@18.2.0)': dependencies: - '@react-types/shared': 3.22.1(react@18.2.0) + '@react-stately/form': 3.0.6(react@18.2.0) + '@react-stately/utils': 3.10.4(react@18.2.0) + '@react-types/checkbox': 3.8.4(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/collections@3.10.6(react@18.2.0)': + '@react-stately/collections@3.10.5(react@18.2.0)': dependencies: - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 '@react-stately/collections@3.10.7(react@18.2.0)': dependencies: - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/color@3.6.0(react@18.2.0)': + '@react-stately/collections@3.11.0(react@18.2.0)': dependencies: - '@internationalized/number': 3.5.2 - '@internationalized/string': 3.2.2 - '@react-aria/i18n': 3.11.0(react@18.2.0) - '@react-stately/form': 3.0.2(react@18.2.0) - '@react-stately/numberfield': 3.9.2(react@18.2.0) - '@react-stately/slider': 3.5.3(react@18.2.0) - '@react-stately/utils': 3.10.0(react@18.2.0) - '@react-types/color': 3.0.0-beta.24(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 @@ -24803,6 +24880,33 @@ snapshots: '@swc/helpers': 0.5.10 react: 18.2.0 + '@react-stately/color@3.8.0(react@18.2.0)': + dependencies: + '@internationalized/number': 3.5.4 + '@internationalized/string': 3.2.4 + '@react-aria/i18n': 3.12.3(react@18.2.0) + '@react-stately/form': 3.0.6(react@18.2.0) + '@react-stately/numberfield': 3.9.7(react@18.2.0) + '@react-stately/slider': 3.5.8(react@18.2.0) + '@react-stately/utils': 3.10.4(react@18.2.0) + '@react-types/color': 3.0.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) + '@swc/helpers': 0.5.10 + react: 18.2.0 + + '@react-stately/combobox@3.10.0(react@18.2.0)': + dependencies: + '@react-stately/collections': 3.11.0(react@18.2.0) + '@react-stately/form': 3.0.6(react@18.2.0) + '@react-stately/list': 3.11.0(react@18.2.0) + '@react-stately/overlays': 3.6.11(react@18.2.0) + '@react-stately/select': 3.6.8(react@18.2.0) + '@react-stately/utils': 3.10.4(react@18.2.0) + '@react-types/combobox': 3.13.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) + '@swc/helpers': 0.5.10 + react: 18.2.0 + '@react-stately/combobox@3.8.2(react@18.2.0)': dependencies: '@react-stately/collections': 3.10.5(react@18.2.0) @@ -24810,22 +24914,9 @@ snapshots: '@react-stately/list': 3.10.3(react@18.2.0) '@react-stately/overlays': 3.6.5(react@18.2.0) '@react-stately/select': 3.6.2(react@18.2.0) - '@react-stately/utils': 3.9.1(react@18.2.0) + '@react-stately/utils': 3.10.4(react@18.2.0) '@react-types/combobox': 3.10.1(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-stately/combobox@3.8.3(react@18.2.0)': - dependencies: - '@react-stately/collections': 3.10.6(react@18.2.0) - '@react-stately/form': 3.0.2(react@18.2.0) - '@react-stately/list': 3.10.4(react@18.2.0) - '@react-stately/overlays': 3.6.6(react@18.2.0) - '@react-stately/select': 3.6.3(react@18.2.0) - '@react-stately/utils': 3.10.0(react@18.2.0) - '@react-types/combobox': 3.11.0(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 @@ -24836,27 +24927,39 @@ snapshots: '@react-stately/list': 3.10.5(react@18.2.0) '@react-stately/overlays': 3.6.7(react@18.2.0) '@react-stately/select': 3.6.4(react@18.2.0) - '@react-stately/utils': 3.10.1(react@18.2.0) + '@react-stately/utils': 3.10.4(react@18.2.0) '@react-types/combobox': 3.11.1(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 '@react-stately/data@3.11.2(react@18.2.0)': dependencies: - '@react-types/shared': 3.22.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/data@3.11.3(react@18.2.0)': + '@react-stately/data@3.11.4(react@18.2.0)': dependencies: - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/data@3.11.4(react@18.2.0)': + '@react-stately/data@3.11.7(react@18.2.0)': dependencies: - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) + '@swc/helpers': 0.5.10 + react: 18.2.0 + + '@react-stately/datepicker@3.10.3(react@18.2.0)': + dependencies: + '@internationalized/date': 3.5.6 + '@internationalized/string': 3.2.4 + '@react-stately/form': 3.0.6(react@18.2.0) + '@react-stately/overlays': 3.6.11(react@18.2.0) + '@react-stately/utils': 3.10.4(react@18.2.0) + '@react-types/datepicker': 3.8.3(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 @@ -24866,21 +24969,9 @@ snapshots: '@internationalized/string': 3.2.1 '@react-stately/form': 3.0.1(react@18.2.0) '@react-stately/overlays': 3.6.5(react@18.2.0) - '@react-stately/utils': 3.9.1(react@18.2.0) + '@react-stately/utils': 3.10.4(react@18.2.0) '@react-types/datepicker': 3.7.2(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-stately/datepicker@3.9.3(react@18.2.0)': - dependencies: - '@internationalized/date': 3.5.3 - '@internationalized/string': 3.2.2 - '@react-stately/form': 3.0.2(react@18.2.0) - '@react-stately/overlays': 3.6.6(react@18.2.0) - '@react-stately/utils': 3.10.0(react@18.2.0) - '@react-types/datepicker': 3.7.3(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 @@ -24890,38 +24981,41 @@ snapshots: '@internationalized/string': 3.2.3 '@react-stately/form': 3.0.3(react@18.2.0) '@react-stately/overlays': 3.6.7(react@18.2.0) - '@react-stately/utils': 3.10.1(react@18.2.0) + '@react-stately/utils': 3.10.4(react@18.2.0) '@react-types/datepicker': 3.7.4(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/dnd@3.2.8(react@18.2.0)': + '@react-stately/disclosure@3.0.0-alpha.0(react@18.2.0)': dependencies: - '@react-stately/selection': 3.14.3(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) + '@react-stately/utils': 3.10.4(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/dnd@3.3.0(react@18.2.0)': + '@react-stately/dnd@3.2.8(react@18.2.0)': dependencies: - '@react-stately/selection': 3.15.0(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-stately/selection': 3.14.3(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 '@react-stately/dnd@3.3.1(react@18.2.0)': dependencies: '@react-stately/selection': 3.15.1(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/flags@3.0.1': + '@react-stately/dnd@3.4.3(react@18.2.0)': dependencies: - '@swc/helpers': 0.4.36 + '@react-stately/selection': 3.17.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) + '@swc/helpers': 0.5.10 + react: 18.2.0 - '@react-stately/flags@3.0.2': + '@react-stately/flags@3.0.1': dependencies: '@swc/helpers': 0.4.36 @@ -24929,21 +25023,25 @@ snapshots: dependencies: '@swc/helpers': 0.5.10 + '@react-stately/flags@3.0.4': + dependencies: + '@swc/helpers': 0.5.10 + '@react-stately/form@3.0.1(react@18.2.0)': dependencies: - '@react-types/shared': 3.22.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/form@3.0.2(react@18.2.0)': + '@react-stately/form@3.0.3(react@18.2.0)': dependencies: - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/form@3.0.3(react@18.2.0)': + '@react-stately/form@3.0.6(react@18.2.0)': dependencies: - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 @@ -24952,16 +25050,7 @@ snapshots: '@react-stately/collections': 3.10.5(react@18.2.0) '@react-stately/selection': 3.14.3(react@18.2.0) '@react-types/grid': 3.2.4(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-stately/grid@3.8.6(react@18.2.0)': - dependencies: - '@react-stately/collections': 3.10.6(react@18.2.0) - '@react-stately/selection': 3.15.0(react@18.2.0) - '@react-types/grid': 3.2.5(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 @@ -24970,25 +25059,36 @@ snapshots: '@react-stately/collections': 3.10.7(react@18.2.0) '@react-stately/selection': 3.15.1(react@18.2.0) '@react-types/grid': 3.2.6(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/list@3.10.3(react@18.2.0)': + '@react-stately/grid@3.9.3(react@18.2.0)': dependencies: - '@react-stately/collections': 3.10.5(react@18.2.0) - '@react-stately/selection': 3.14.3(react@18.2.0) - '@react-stately/utils': 3.9.1(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) + '@react-stately/collections': 3.11.0(react@18.2.0) + '@react-stately/selection': 3.17.0(react@18.2.0) + '@react-types/grid': 3.2.9(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) + '@swc/helpers': 0.5.10 + react: 18.2.0 + + '@react-stately/layout@4.0.3(react@18.2.0)': + dependencies: + '@react-stately/collections': 3.11.0(react@18.2.0) + '@react-stately/table': 3.12.3(react@18.2.0) + '@react-stately/virtualizer': 4.1.0(react@18.2.0) + '@react-types/grid': 3.2.9(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) + '@react-types/table': 3.10.2(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/list@3.10.4(react@18.2.0)': + '@react-stately/list@3.10.3(react@18.2.0)': dependencies: - '@react-stately/collections': 3.10.6(react@18.2.0) - '@react-stately/selection': 3.15.0(react@18.2.0) - '@react-stately/utils': 3.10.0(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-stately/collections': 3.10.5(react@18.2.0) + '@react-stately/selection': 3.14.3(react@18.2.0) + '@react-stately/utils': 3.10.4(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 @@ -24996,24 +25096,25 @@ snapshots: dependencies: '@react-stately/collections': 3.10.7(react@18.2.0) '@react-stately/selection': 3.15.1(react@18.2.0) - '@react-stately/utils': 3.10.1(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-stately/utils': 3.10.4(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/menu@3.6.1(react@18.2.0)': + '@react-stately/list@3.11.0(react@18.2.0)': dependencies: - '@react-stately/overlays': 3.6.5(react@18.2.0) - '@react-types/menu': 3.9.7(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) + '@react-stately/collections': 3.11.0(react@18.2.0) + '@react-stately/selection': 3.17.0(react@18.2.0) + '@react-stately/utils': 3.10.4(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/menu@3.7.0(react@18.2.0)': + '@react-stately/menu@3.6.1(react@18.2.0)': dependencies: - '@react-stately/overlays': 3.6.6(react@18.2.0) - '@react-types/menu': 3.9.8(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-stately/overlays': 3.6.5(react@18.2.0) + '@react-types/menu': 3.9.7(react@18.2.0) + '@react-types/shared': 3.22.1(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 @@ -25025,21 +25126,20 @@ snapshots: '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/numberfield@3.9.1(react@18.2.0)': + '@react-stately/menu@3.8.3(react@18.2.0)': dependencies: - '@internationalized/number': 3.5.1 - '@react-stately/form': 3.0.1(react@18.2.0) - '@react-stately/utils': 3.9.1(react@18.2.0) - '@react-types/numberfield': 3.8.1(react@18.2.0) + '@react-stately/overlays': 3.6.11(react@18.2.0) + '@react-types/menu': 3.9.12(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/numberfield@3.9.2(react@18.2.0)': + '@react-stately/numberfield@3.9.1(react@18.2.0)': dependencies: - '@internationalized/number': 3.5.2 - '@react-stately/form': 3.0.2(react@18.2.0) - '@react-stately/utils': 3.10.0(react@18.2.0) - '@react-types/numberfield': 3.8.2(react@18.2.0) + '@internationalized/number': 3.5.1 + '@react-stately/form': 3.0.1(react@18.2.0) + '@react-stately/utils': 3.10.4(react@18.2.0) + '@react-types/numberfield': 3.8.1(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 @@ -25047,28 +25147,37 @@ snapshots: dependencies: '@internationalized/number': 3.5.3 '@react-stately/form': 3.0.3(react@18.2.0) - '@react-stately/utils': 3.10.1(react@18.2.0) + '@react-stately/utils': 3.10.4(react@18.2.0) '@react-types/numberfield': 3.8.3(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/overlays@3.6.5(react@18.2.0)': + '@react-stately/numberfield@3.9.7(react@18.2.0)': dependencies: - '@react-stately/utils': 3.9.1(react@18.2.0) - '@react-types/overlays': 3.8.5(react@18.2.0) + '@internationalized/number': 3.5.4 + '@react-stately/form': 3.0.6(react@18.2.0) + '@react-stately/utils': 3.10.4(react@18.2.0) + '@react-types/numberfield': 3.8.6(react@18.2.0) + '@swc/helpers': 0.5.10 + react: 18.2.0 + + '@react-stately/overlays@3.6.11(react@18.2.0)': + dependencies: + '@react-stately/utils': 3.10.4(react@18.2.0) + '@react-types/overlays': 3.8.10(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/overlays@3.6.6(react@18.2.0)': + '@react-stately/overlays@3.6.5(react@18.2.0)': dependencies: - '@react-stately/utils': 3.10.0(react@18.2.0) - '@react-types/overlays': 3.8.6(react@18.2.0) + '@react-stately/utils': 3.10.4(react@18.2.0) + '@react-types/overlays': 3.8.5(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 '@react-stately/overlays@3.6.7(react@18.2.0)': dependencies: - '@react-stately/utils': 3.10.1(react@18.2.0) + '@react-stately/utils': 3.10.4(react@18.2.0) '@react-types/overlays': 3.8.7(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 @@ -25076,48 +25185,48 @@ snapshots: '@react-stately/radio@3.10.2(react@18.2.0)': dependencies: '@react-stately/form': 3.0.1(react@18.2.0) - '@react-stately/utils': 3.9.1(react@18.2.0) + '@react-stately/utils': 3.10.4(react@18.2.0) '@react-types/radio': 3.7.1(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/radio@3.10.3(react@18.2.0)': + '@react-stately/radio@3.10.4(react@18.2.0)': dependencies: - '@react-stately/form': 3.0.2(react@18.2.0) - '@react-stately/utils': 3.10.0(react@18.2.0) - '@react-types/radio': 3.8.0(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-stately/form': 3.0.3(react@18.2.0) + '@react-stately/utils': 3.10.4(react@18.2.0) + '@react-types/radio': 3.8.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/radio@3.10.4(react@18.2.0)': + '@react-stately/radio@3.10.8(react@18.2.0)': dependencies: - '@react-stately/form': 3.0.3(react@18.2.0) - '@react-stately/utils': 3.10.1(react@18.2.0) - '@react-types/radio': 3.8.1(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-stately/form': 3.0.6(react@18.2.0) + '@react-stately/utils': 3.10.4(react@18.2.0) + '@react-types/radio': 3.8.4(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 '@react-stately/searchfield@3.5.1(react@18.2.0)': dependencies: - '@react-stately/utils': 3.9.1(react@18.2.0) + '@react-stately/utils': 3.10.4(react@18.2.0) '@react-types/searchfield': 3.5.3(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/searchfield@3.5.2(react@18.2.0)': + '@react-stately/searchfield@3.5.3(react@18.2.0)': dependencies: - '@react-stately/utils': 3.10.0(react@18.2.0) - '@react-types/searchfield': 3.5.4(react@18.2.0) + '@react-stately/utils': 3.10.4(react@18.2.0) + '@react-types/searchfield': 3.5.5(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/searchfield@3.5.3(react@18.2.0)': + '@react-stately/searchfield@3.5.7(react@18.2.0)': dependencies: - '@react-stately/utils': 3.10.1(react@18.2.0) - '@react-types/searchfield': 3.5.5(react@18.2.0) + '@react-stately/utils': 3.10.4(react@18.2.0) + '@react-types/searchfield': 3.5.9(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 @@ -25127,17 +25236,7 @@ snapshots: '@react-stately/list': 3.10.3(react@18.2.0) '@react-stately/overlays': 3.6.5(react@18.2.0) '@react-types/select': 3.9.2(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-stately/select@3.6.3(react@18.2.0)': - dependencies: - '@react-stately/form': 3.0.2(react@18.2.0) - '@react-stately/list': 3.10.4(react@18.2.0) - '@react-stately/overlays': 3.6.6(react@18.2.0) - '@react-types/select': 3.9.3(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 @@ -25147,58 +25246,68 @@ snapshots: '@react-stately/list': 3.10.5(react@18.2.0) '@react-stately/overlays': 3.6.7(react@18.2.0) '@react-types/select': 3.9.4(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/selection@3.14.3(react@18.2.0)': + '@react-stately/select@3.6.8(react@18.2.0)': dependencies: - '@react-stately/collections': 3.10.5(react@18.2.0) - '@react-stately/utils': 3.9.1(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) + '@react-stately/form': 3.0.6(react@18.2.0) + '@react-stately/list': 3.11.0(react@18.2.0) + '@react-stately/overlays': 3.6.11(react@18.2.0) + '@react-types/select': 3.9.7(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/selection@3.15.0(react@18.2.0)': + '@react-stately/selection@3.14.3(react@18.2.0)': dependencies: - '@react-stately/collections': 3.10.6(react@18.2.0) - '@react-stately/utils': 3.10.0(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-stately/collections': 3.10.5(react@18.2.0) + '@react-stately/utils': 3.10.4(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 '@react-stately/selection@3.15.1(react@18.2.0)': dependencies: '@react-stately/collections': 3.10.7(react@18.2.0) - '@react-stately/utils': 3.10.1(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-stately/utils': 3.10.4(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/slider@3.5.2(react@18.2.0)': + '@react-stately/selection@3.17.0(react@18.2.0)': dependencies: - '@react-stately/utils': 3.9.1(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) - '@react-types/slider': 3.7.1(react@18.2.0) + '@react-stately/collections': 3.11.0(react@18.2.0) + '@react-stately/utils': 3.10.4(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/slider@3.5.3(react@18.2.0)': + '@react-stately/slider@3.5.2(react@18.2.0)': dependencies: - '@react-stately/utils': 3.10.0(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) - '@react-types/slider': 3.7.2(react@18.2.0) + '@react-stately/utils': 3.10.4(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) + '@react-types/slider': 3.7.1(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 '@react-stately/slider@3.5.4(react@18.2.0)': dependencies: - '@react-stately/utils': 3.10.1(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-stately/utils': 3.10.4(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@react-types/slider': 3.7.3(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 + '@react-stately/slider@3.5.8(react@18.2.0)': + dependencies: + '@react-stately/utils': 3.10.4(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) + '@react-types/slider': 3.7.6(react@18.2.0) + '@swc/helpers': 0.5.10 + react: 18.2.0 + '@react-stately/table@3.11.6(react@18.2.0)': dependencies: '@react-stately/collections': 3.10.5(react@18.2.0) @@ -25212,19 +25321,6 @@ snapshots: '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/table@3.11.7(react@18.2.0)': - dependencies: - '@react-stately/collections': 3.10.6(react@18.2.0) - '@react-stately/flags': 3.0.2 - '@react-stately/grid': 3.8.6(react@18.2.0) - '@react-stately/selection': 3.15.0(react@18.2.0) - '@react-stately/utils': 3.10.0(react@18.2.0) - '@react-types/grid': 3.2.5(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) - '@react-types/table': 3.9.4(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - '@react-stately/table@3.11.8(react@18.2.0)': dependencies: '@react-stately/collections': 3.10.7(react@18.2.0) @@ -25238,62 +25334,75 @@ snapshots: '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/tabs@3.6.4(react@18.2.0)': + '@react-stately/table@3.12.3(react@18.2.0)': dependencies: - '@react-stately/list': 3.10.3(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) - '@react-types/tabs': 3.3.5(react@18.2.0) + '@react-stately/collections': 3.11.0(react@18.2.0) + '@react-stately/flags': 3.0.4 + '@react-stately/grid': 3.9.3(react@18.2.0) + '@react-stately/selection': 3.17.0(react@18.2.0) + '@react-stately/utils': 3.10.4(react@18.2.0) + '@react-types/grid': 3.2.9(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) + '@react-types/table': 3.10.2(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/tabs@3.6.5(react@18.2.0)': + '@react-stately/tabs@3.6.10(react@18.2.0)': dependencies: - '@react-stately/list': 3.10.4(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) - '@react-types/tabs': 3.3.6(react@18.2.0) + '@react-stately/list': 3.11.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) + '@react-types/tabs': 3.3.10(react@18.2.0) + '@swc/helpers': 0.5.10 + react: 18.2.0 + + '@react-stately/tabs@3.6.4(react@18.2.0)': + dependencies: + '@react-stately/list': 3.10.3(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) + '@react-types/tabs': 3.3.5(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 '@react-stately/tabs@3.6.6(react@18.2.0)': dependencies: '@react-stately/list': 3.10.5(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@react-types/tabs': 3.3.7(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 '@react-stately/toggle@3.7.2(react@18.2.0)': dependencies: - '@react-stately/utils': 3.9.1(react@18.2.0) + '@react-stately/utils': 3.10.4(react@18.2.0) '@react-types/checkbox': 3.7.1(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/toggle@3.7.3(react@18.2.0)': + '@react-stately/toggle@3.7.4(react@18.2.0)': dependencies: - '@react-stately/utils': 3.10.0(react@18.2.0) - '@react-types/checkbox': 3.8.0(react@18.2.0) + '@react-stately/utils': 3.10.4(react@18.2.0) + '@react-types/checkbox': 3.8.1(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/toggle@3.7.4(react@18.2.0)': + '@react-stately/toggle@3.7.8(react@18.2.0)': dependencies: - '@react-stately/utils': 3.10.1(react@18.2.0) - '@react-types/checkbox': 3.8.1(react@18.2.0) + '@react-stately/utils': 3.10.4(react@18.2.0) + '@react-types/checkbox': 3.8.4(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/tooltip@3.4.7(react@18.2.0)': + '@react-stately/tooltip@3.4.13(react@18.2.0)': dependencies: - '@react-stately/overlays': 3.6.5(react@18.2.0) - '@react-types/tooltip': 3.4.7(react@18.2.0) + '@react-stately/overlays': 3.6.11(react@18.2.0) + '@react-types/tooltip': 3.4.12(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/tooltip@3.4.8(react@18.2.0)': + '@react-stately/tooltip@3.4.7(react@18.2.0)': dependencies: - '@react-stately/overlays': 3.6.6(react@18.2.0) - '@react-types/tooltip': 3.4.8(react@18.2.0) + '@react-stately/overlays': 3.6.5(react@18.2.0) + '@react-types/tooltip': 3.4.7(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 @@ -25308,17 +25417,8 @@ snapshots: dependencies: '@react-stately/collections': 3.10.5(react@18.2.0) '@react-stately/selection': 3.14.3(react@18.2.0) - '@react-stately/utils': 3.9.1(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-stately/tree@3.8.0(react@18.2.0)': - dependencies: - '@react-stately/collections': 3.10.6(react@18.2.0) - '@react-stately/selection': 3.15.0(react@18.2.0) - '@react-stately/utils': 3.10.0(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-stately/utils': 3.10.4(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 @@ -25326,13 +25426,17 @@ snapshots: dependencies: '@react-stately/collections': 3.10.7(react@18.2.0) '@react-stately/selection': 3.15.1(react@18.2.0) - '@react-stately/utils': 3.10.1(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-stately/utils': 3.10.4(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/utils@3.10.0(react@18.2.0)': + '@react-stately/tree@3.8.5(react@18.2.0)': dependencies: + '@react-stately/collections': 3.11.0(react@18.2.0) + '@react-stately/selection': 3.17.0(react@18.2.0) + '@react-stately/utils': 3.10.4(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 @@ -25341,6 +25445,11 @@ snapshots: '@swc/helpers': 0.5.10 react: 18.2.0 + '@react-stately/utils@3.10.4(react@18.2.0)': + dependencies: + '@swc/helpers': 0.5.10 + react: 18.2.0 + '@react-stately/utils@3.9.1(react@18.2.0)': dependencies: '@swc/helpers': 0.5.10 @@ -25348,95 +25457,100 @@ snapshots: '@react-stately/virtualizer@3.6.8(react@18.2.0)': dependencies: - '@react-aria/utils': 3.23.2(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/virtualizer@3.7.0(react@18.2.0)': + '@react-stately/virtualizer@3.7.1(react@18.2.0)': dependencies: - '@react-aria/utils': 3.24.0(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/virtualizer@3.7.1(react@18.2.0)': + '@react-stately/virtualizer@4.1.0(react@18.2.0)': dependencies: - '@react-aria/utils': 3.24.1(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-types/breadcrumbs@3.7.3(react@18.2.0)': + '@react-types/accordion@3.0.0-alpha.24(react@18.2.0)': dependencies: - '@react-types/link': 3.5.3(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/breadcrumbs@3.7.4(react@18.2.0)': + '@react-types/breadcrumbs@3.7.3(react@18.2.0)': dependencies: - '@react-types/link': 3.5.4(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-types/link': 3.5.3(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 '@react-types/breadcrumbs@3.7.5(react@18.2.0)': dependencies: '@react-types/link': 3.5.5(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/button@3.9.2(react@18.2.0)': + '@react-types/breadcrumbs@3.7.8(react@18.2.0)': dependencies: - '@react-types/shared': 3.22.1(react@18.2.0) + '@react-types/link': 3.5.8(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/button@3.9.3(react@18.2.0)': + '@react-types/button@3.10.0(react@18.2.0)': dependencies: - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) + react: 18.2.0 + + '@react-types/button@3.9.2(react@18.2.0)': + dependencies: + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 '@react-types/button@3.9.4(react@18.2.0)': dependencies: - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/calendar@3.4.4(react@18.2.0)': + '@react-types/calendar@3.4.10(react@18.2.0)': dependencies: - '@internationalized/date': 3.5.2 - '@react-types/shared': 3.22.1(react@18.2.0) + '@internationalized/date': 3.5.6 + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/calendar@3.4.5(react@18.2.0)': + '@react-types/calendar@3.4.4(react@18.2.0)': dependencies: - '@internationalized/date': 3.5.3 - '@react-types/shared': 3.23.0(react@18.2.0) + '@internationalized/date': 3.5.2 + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 '@react-types/calendar@3.4.6(react@18.2.0)': dependencies: '@internationalized/date': 3.5.4 - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 '@react-types/checkbox@3.7.1(react@18.2.0)': dependencies: - '@react-types/shared': 3.22.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/checkbox@3.8.0(react@18.2.0)': + '@react-types/checkbox@3.8.1(react@18.2.0)': dependencies: - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/checkbox@3.8.1(react@18.2.0)': + '@react-types/checkbox@3.8.4(react@18.2.0)': dependencies: - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/color@3.0.0-beta.24(react@18.2.0)': + '@react-types/color@3.0.0(react@18.2.0)': dependencies: - '@react-types/shared': 3.23.0(react@18.2.0) - '@react-types/slider': 3.7.2(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) + '@react-types/slider': 3.7.6(react@18.2.0) react: 18.2.0 '@react-types/color@3.0.0-beta.25(react@18.2.0)': @@ -25447,17 +25561,17 @@ snapshots: '@react-types/combobox@3.10.1(react@18.2.0)': dependencies: - '@react-types/shared': 3.22.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/combobox@3.11.0(react@18.2.0)': + '@react-types/combobox@3.11.1(react@18.2.0)': dependencies: - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/combobox@3.11.1(react@18.2.0)': + '@react-types/combobox@3.13.0(react@18.2.0)': dependencies: - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 '@react-types/datepicker@3.7.2(react@18.2.0)': @@ -25465,15 +25579,7 @@ snapshots: '@internationalized/date': 3.5.2 '@react-types/calendar': 3.4.4(react@18.2.0) '@react-types/overlays': 3.8.5(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) - react: 18.2.0 - - '@react-types/datepicker@3.7.3(react@18.2.0)': - dependencies: - '@internationalized/date': 3.5.3 - '@react-types/calendar': 3.4.5(react@18.2.0) - '@react-types/overlays': 3.8.6(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 '@react-types/datepicker@3.7.4(react@18.2.0)': @@ -25481,25 +25587,33 @@ snapshots: '@internationalized/date': 3.5.4 '@react-types/calendar': 3.4.6(react@18.2.0) '@react-types/overlays': 3.8.7(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) + react: 18.2.0 + + '@react-types/datepicker@3.8.3(react@18.2.0)': + dependencies: + '@internationalized/date': 3.5.6 + '@react-types/calendar': 3.4.10(react@18.2.0) + '@react-types/overlays': 3.8.10(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 '@react-types/dialog@3.5.10(react@18.2.0)': dependencies: '@react-types/overlays': 3.8.7(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/dialog@3.5.8(react@18.2.0)': + '@react-types/dialog@3.5.13(react@18.2.0)': dependencies: - '@react-types/overlays': 3.8.5(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) + '@react-types/overlays': 3.8.10(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/dialog@3.5.9(react@18.2.0)': + '@react-types/dialog@3.5.8(react@18.2.0)': dependencies: - '@react-types/overlays': 3.8.6(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-types/overlays': 3.8.5(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 '@react-types/form@3.7.2(react@18.2.0)': @@ -25507,14 +25621,14 @@ snapshots: '@react-types/shared': 3.22.1(react@18.2.0) react: 18.2.0 - '@react-types/form@3.7.3(react@18.2.0)': + '@react-types/form@3.7.4(react@18.2.0)': dependencies: - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-types/shared': 3.23.1(react@18.2.0) react: 18.2.0 - '@react-types/form@3.7.4(react@18.2.0)': + '@react-types/form@3.7.7(react@18.2.0)': dependencies: - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 '@react-types/grid@3.2.4(react@18.2.0)': @@ -25522,62 +25636,62 @@ snapshots: '@react-types/shared': 3.22.1(react@18.2.0) react: 18.2.0 - '@react-types/grid@3.2.5(react@18.2.0)': + '@react-types/grid@3.2.6(react@18.2.0)': dependencies: - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-types/shared': 3.23.1(react@18.2.0) react: 18.2.0 - '@react-types/grid@3.2.6(react@18.2.0)': + '@react-types/grid@3.2.9(react@18.2.0)': dependencies: - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 '@react-types/link@3.5.3(react@18.2.0)': dependencies: - '@react-types/shared': 3.22.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/link@3.5.4(react@18.2.0)': + '@react-types/link@3.5.5(react@18.2.0)': dependencies: - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/link@3.5.5(react@18.2.0)': + '@react-types/link@3.5.8(react@18.2.0)': dependencies: - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 '@react-types/listbox@3.4.7(react@18.2.0)': dependencies: - '@react-types/shared': 3.22.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/listbox@3.4.8(react@18.2.0)': + '@react-types/listbox@3.4.9(react@18.2.0)': dependencies: - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/listbox@3.4.9(react@18.2.0)': + '@react-types/listbox@3.5.2(react@18.2.0)': dependencies: - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/menu@3.9.7(react@18.2.0)': + '@react-types/menu@3.9.12(react@18.2.0)': dependencies: - '@react-types/overlays': 3.8.5(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) + '@react-types/overlays': 3.8.10(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/menu@3.9.8(react@18.2.0)': + '@react-types/menu@3.9.7(react@18.2.0)': dependencies: - '@react-types/overlays': 3.8.6(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-types/overlays': 3.8.5(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 '@react-types/menu@3.9.9(react@18.2.0)': dependencies: '@react-types/overlays': 3.8.7(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 '@react-types/meter@3.3.7(react@18.2.0)': @@ -25585,161 +25699,161 @@ snapshots: '@react-types/progress': 3.5.2(react@18.2.0) react: 18.2.0 - '@react-types/meter@3.4.0(react@18.2.0)': + '@react-types/meter@3.4.1(react@18.2.0)': dependencies: - '@react-types/progress': 3.5.3(react@18.2.0) + '@react-types/progress': 3.5.4(react@18.2.0) react: 18.2.0 - '@react-types/meter@3.4.1(react@18.2.0)': + '@react-types/meter@3.4.4(react@18.2.0)': dependencies: - '@react-types/progress': 3.5.4(react@18.2.0) + '@react-types/progress': 3.5.7(react@18.2.0) react: 18.2.0 '@react-types/numberfield@3.8.1(react@18.2.0)': dependencies: - '@react-types/shared': 3.22.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/numberfield@3.8.2(react@18.2.0)': + '@react-types/numberfield@3.8.3(react@18.2.0)': dependencies: - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/numberfield@3.8.3(react@18.2.0)': + '@react-types/numberfield@3.8.6(react@18.2.0)': dependencies: - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/overlays@3.8.5(react@18.2.0)': + '@react-types/overlays@3.8.10(react@18.2.0)': dependencies: - '@react-types/shared': 3.22.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/overlays@3.8.6(react@18.2.0)': + '@react-types/overlays@3.8.5(react@18.2.0)': dependencies: - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 '@react-types/overlays@3.8.7(react@18.2.0)': dependencies: - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 '@react-types/progress@3.5.2(react@18.2.0)': dependencies: - '@react-types/shared': 3.22.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/progress@3.5.3(react@18.2.0)': + '@react-types/progress@3.5.4(react@18.2.0)': dependencies: - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/progress@3.5.4(react@18.2.0)': + '@react-types/progress@3.5.7(react@18.2.0)': dependencies: - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 '@react-types/radio@3.7.1(react@18.2.0)': dependencies: - '@react-types/shared': 3.22.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/radio@3.8.0(react@18.2.0)': + '@react-types/radio@3.8.1(react@18.2.0)': dependencies: - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/radio@3.8.1(react@18.2.0)': + '@react-types/radio@3.8.4(react@18.2.0)': dependencies: - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 '@react-types/searchfield@3.5.3(react@18.2.0)': dependencies: - '@react-types/shared': 3.22.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) '@react-types/textfield': 3.9.1(react@18.2.0) react: 18.2.0 - '@react-types/searchfield@3.5.4(react@18.2.0)': + '@react-types/searchfield@3.5.5(react@18.2.0)': dependencies: - '@react-types/shared': 3.23.0(react@18.2.0) - '@react-types/textfield': 3.9.2(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) + '@react-types/textfield': 3.9.3(react@18.2.0) react: 18.2.0 - '@react-types/searchfield@3.5.5(react@18.2.0)': + '@react-types/searchfield@3.5.9(react@18.2.0)': dependencies: - '@react-types/shared': 3.23.1(react@18.2.0) - '@react-types/textfield': 3.9.3(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) + '@react-types/textfield': 3.9.7(react@18.2.0) react: 18.2.0 '@react-types/select@3.9.2(react@18.2.0)': dependencies: - '@react-types/shared': 3.22.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/select@3.9.3(react@18.2.0)': + '@react-types/select@3.9.4(react@18.2.0)': dependencies: - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/select@3.9.4(react@18.2.0)': + '@react-types/select@3.9.7(react@18.2.0)': dependencies: - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 '@react-types/shared@3.22.1(react@18.2.0)': dependencies: react: 18.2.0 - '@react-types/shared@3.23.0(react@18.2.0)': + '@react-types/shared@3.23.1(react@18.2.0)': dependencies: react: 18.2.0 - '@react-types/shared@3.23.1(react@18.2.0)': + '@react-types/shared@3.25.0(react@18.2.0)': dependencies: react: 18.2.0 '@react-types/slider@3.7.1(react@18.2.0)': dependencies: - '@react-types/shared': 3.22.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/slider@3.7.2(react@18.2.0)': + '@react-types/slider@3.7.3(react@18.2.0)': dependencies: - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/slider@3.7.3(react@18.2.0)': + '@react-types/slider@3.7.6(react@18.2.0)': dependencies: - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 '@react-types/switch@3.5.1(react@18.2.0)': dependencies: - '@react-types/shared': 3.22.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/switch@3.5.2(react@18.2.0)': + '@react-types/switch@3.5.3(react@18.2.0)': dependencies: - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/switch@3.5.3(react@18.2.0)': + '@react-types/switch@3.5.6(react@18.2.0)': dependencies: - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/table@3.9.3(react@18.2.0)': + '@react-types/table@3.10.2(react@18.2.0)': dependencies: - '@react-types/grid': 3.2.4(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) + '@react-types/grid': 3.2.9(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/table@3.9.4(react@18.2.0)': + '@react-types/table@3.9.3(react@18.2.0)': dependencies: - '@react-types/grid': 3.2.5(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-types/grid': 3.2.4(react@18.2.0) + '@react-types/shared': 3.22.1(react@18.2.0) react: 18.2.0 '@react-types/table@3.9.5(react@18.2.0)': @@ -25748,52 +25862,52 @@ snapshots: '@react-types/shared': 3.23.1(react@18.2.0) react: 18.2.0 - '@react-types/tabs@3.3.5(react@18.2.0)': + '@react-types/tabs@3.3.10(react@18.2.0)': dependencies: - '@react-types/shared': 3.22.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/tabs@3.3.6(react@18.2.0)': + '@react-types/tabs@3.3.5(react@18.2.0)': dependencies: - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 '@react-types/tabs@3.3.7(react@18.2.0)': dependencies: - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 '@react-types/textfield@3.9.1(react@18.2.0)': dependencies: - '@react-types/shared': 3.22.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/textfield@3.9.2(react@18.2.0)': + '@react-types/textfield@3.9.3(react@18.2.0)': dependencies: - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/textfield@3.9.3(react@18.2.0)': + '@react-types/textfield@3.9.7(react@18.2.0)': dependencies: - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/tooltip@3.4.7(react@18.2.0)': + '@react-types/tooltip@3.4.12(react@18.2.0)': dependencies: - '@react-types/overlays': 3.8.5(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) + '@react-types/overlays': 3.8.10(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/tooltip@3.4.8(react@18.2.0)': + '@react-types/tooltip@3.4.7(react@18.2.0)': dependencies: - '@react-types/overlays': 3.8.6(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) + '@react-types/overlays': 3.8.5(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 '@react-types/tooltip@3.4.9(react@18.2.0)': dependencies: '@react-types/overlays': 3.8.7(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 '@redux-devtools/extension@3.3.0(redux@4.2.1)': @@ -30509,6 +30623,8 @@ snapshots: clsx@2.1.0: {} + clsx@2.1.1: {} + cmd-shim@5.0.0: dependencies: mkdirp-infer-owner: 2.0.0 @@ -39669,34 +39785,6 @@ snapshots: react-stately: 3.30.1(react@18.2.0) use-sync-external-store: 1.2.0(react@18.2.0) - react-aria-components@1.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0): - dependencies: - '@internationalized/date': 3.5.3 - '@internationalized/string': 3.2.2 - '@react-aria/color': 3.0.0-beta.32(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/focus': 3.17.0(react@18.2.0) - '@react-aria/interactions': 3.21.2(react@18.2.0) - '@react-aria/menu': 3.14.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/toolbar': 3.0.0-beta.4(react@18.2.0) - '@react-aria/tree': 3.0.0-alpha.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.24.0(react@18.2.0) - '@react-stately/color': 3.6.0(react@18.2.0) - '@react-stately/menu': 3.7.0(react@18.2.0) - '@react-stately/table': 3.11.7(react@18.2.0) - '@react-stately/utils': 3.10.0(react@18.2.0) - '@react-types/color': 3.0.0-beta.24(react@18.2.0) - '@react-types/form': 3.7.3(react@18.2.0) - '@react-types/grid': 3.2.5(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) - '@react-types/table': 3.9.4(react@18.2.0) - '@swc/helpers': 0.5.10 - client-only: 0.0.1 - react: 18.2.0 - react-aria: 3.33.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - react-dom: 18.2.0(react@18.2.0) - react-stately: 3.31.0(react@18.2.0) - use-sync-external-store: 1.2.0(react@18.2.0) - react-aria-components@1.2.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: '@internationalized/date': 3.5.4 @@ -39725,6 +39813,43 @@ snapshots: react-stately: 3.31.1(react@18.2.0) use-sync-external-store: 1.2.0(react@18.2.0) + react-aria-components@1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0): + dependencies: + '@internationalized/date': 3.5.6 + '@internationalized/string': 3.2.4 + '@react-aria/accordion': 3.0.0-alpha.34(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/collections': 3.0.0-alpha.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/color': 3.0.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/disclosure': 3.0.0-alpha.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/dnd': 3.7.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/focus': 3.18.3(react@18.2.0) + '@react-aria/interactions': 3.22.3(react@18.2.0) + '@react-aria/live-announcer': 3.4.0 + '@react-aria/menu': 3.15.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/toolbar': 3.0.0-beta.9(react@18.2.0) + '@react-aria/tree': 3.0.0-beta.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-aria/virtualizer': 4.0.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-stately/color': 3.8.0(react@18.2.0) + '@react-stately/disclosure': 3.0.0-alpha.0(react@18.2.0) + '@react-stately/layout': 4.0.3(react@18.2.0) + '@react-stately/menu': 3.8.3(react@18.2.0) + '@react-stately/table': 3.12.3(react@18.2.0) + '@react-stately/utils': 3.10.4(react@18.2.0) + '@react-stately/virtualizer': 4.1.0(react@18.2.0) + '@react-types/color': 3.0.0(react@18.2.0) + '@react-types/form': 3.7.7(react@18.2.0) + '@react-types/grid': 3.2.9(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) + '@react-types/table': 3.10.2(react@18.2.0) + '@swc/helpers': 0.5.10 + client-only: 0.0.1 + react: 18.2.0 + react-aria: 3.35.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react-dom: 18.2.0(react@18.2.0) + react-stately: 3.33.0(react@18.2.0) + use-sync-external-store: 1.2.0(react@18.2.0) + react-aria@3.32.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: '@internationalized/string': 3.2.1 @@ -39761,54 +39886,12 @@ snapshots: '@react-aria/tag': 3.3.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@react-aria/textfield': 3.14.3(react@18.2.0) '@react-aria/tooltip': 3.7.2(react@18.2.0) - '@react-aria/utils': 3.23.2(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-aria/visually-hidden': 3.8.10(react@18.2.0) '@react-types/shared': 3.22.1(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-aria@3.33.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0): - dependencies: - '@internationalized/string': 3.2.2 - '@react-aria/breadcrumbs': 3.5.12(react@18.2.0) - '@react-aria/button': 3.9.4(react@18.2.0) - '@react-aria/calendar': 3.5.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/checkbox': 3.14.2(react@18.2.0) - '@react-aria/combobox': 3.9.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/datepicker': 3.10.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/dialog': 3.5.13(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/dnd': 3.6.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/focus': 3.17.0(react@18.2.0) - '@react-aria/gridlist': 3.8.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/i18n': 3.11.0(react@18.2.0) - '@react-aria/interactions': 3.21.2(react@18.2.0) - '@react-aria/label': 3.7.7(react@18.2.0) - '@react-aria/link': 3.7.0(react@18.2.0) - '@react-aria/listbox': 3.12.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/menu': 3.14.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/meter': 3.4.12(react@18.2.0) - '@react-aria/numberfield': 3.11.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/overlays': 3.22.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/progress': 3.4.12(react@18.2.0) - '@react-aria/radio': 3.10.3(react@18.2.0) - '@react-aria/searchfield': 3.7.4(react@18.2.0) - '@react-aria/select': 3.14.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/selection': 3.18.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/separator': 3.3.12(react@18.2.0) - '@react-aria/slider': 3.7.7(react@18.2.0) - '@react-aria/ssr': 3.9.3(react@18.2.0) - '@react-aria/switch': 3.6.3(react@18.2.0) - '@react-aria/table': 3.14.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/tabs': 3.9.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/tag': 3.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/textfield': 3.14.4(react@18.2.0) - '@react-aria/tooltip': 3.7.3(react@18.2.0) - '@react-aria/utils': 3.24.0(react@18.2.0) - '@react-aria/visually-hidden': 3.8.11(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-aria@3.33.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: '@internationalized/string': 3.2.3 @@ -39845,12 +39928,55 @@ snapshots: '@react-aria/tag': 3.4.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@react-aria/textfield': 3.14.5(react@18.2.0) '@react-aria/tooltip': 3.7.4(react@18.2.0) - '@react-aria/utils': 3.24.1(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) '@react-aria/visually-hidden': 3.8.12(react@18.2.0) '@react-types/shared': 3.23.1(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + react-aria@3.35.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0): + dependencies: + '@internationalized/string': 3.2.4 + '@react-aria/breadcrumbs': 3.5.17(react@18.2.0) + '@react-aria/button': 3.10.0(react@18.2.0) + '@react-aria/calendar': 3.5.12(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/checkbox': 3.14.7(react@18.2.0) + '@react-aria/color': 3.0.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/combobox': 3.10.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/datepicker': 3.11.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/dialog': 3.5.18(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/dnd': 3.7.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/focus': 3.18.3(react@18.2.0) + '@react-aria/gridlist': 3.9.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/i18n': 3.12.3(react@18.2.0) + '@react-aria/interactions': 3.22.3(react@18.2.0) + '@react-aria/label': 3.7.12(react@18.2.0) + '@react-aria/link': 3.7.5(react@18.2.0) + '@react-aria/listbox': 3.13.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/menu': 3.15.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/meter': 3.4.17(react@18.2.0) + '@react-aria/numberfield': 3.11.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/overlays': 3.23.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/progress': 3.4.17(react@18.2.0) + '@react-aria/radio': 3.10.8(react@18.2.0) + '@react-aria/searchfield': 3.7.9(react@18.2.0) + '@react-aria/select': 3.14.10(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/selection': 3.20.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/separator': 3.4.3(react@18.2.0) + '@react-aria/slider': 3.7.12(react@18.2.0) + '@react-aria/ssr': 3.9.6(react@18.2.0) + '@react-aria/switch': 3.6.8(react@18.2.0) + '@react-aria/table': 3.15.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/tabs': 3.9.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/tag': 3.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/textfield': 3.14.9(react@18.2.0) + '@react-aria/tooltip': 3.7.8(react@18.2.0) + '@react-aria/utils': 3.25.3(react@18.2.0) + '@react-aria/visually-hidden': 3.8.16(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-beautiful-dnd@13.0.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: '@babel/runtime': 7.20.6 @@ -40269,33 +40395,6 @@ snapshots: '@react-types/shared': 3.22.1(react@18.2.0) react: 18.2.0 - react-stately@3.31.0(react@18.2.0): - dependencies: - '@react-stately/calendar': 3.5.0(react@18.2.0) - '@react-stately/checkbox': 3.6.4(react@18.2.0) - '@react-stately/collections': 3.10.6(react@18.2.0) - '@react-stately/combobox': 3.8.3(react@18.2.0) - '@react-stately/data': 3.11.3(react@18.2.0) - '@react-stately/datepicker': 3.9.3(react@18.2.0) - '@react-stately/dnd': 3.3.0(react@18.2.0) - '@react-stately/form': 3.0.2(react@18.2.0) - '@react-stately/list': 3.10.4(react@18.2.0) - '@react-stately/menu': 3.7.0(react@18.2.0) - '@react-stately/numberfield': 3.9.2(react@18.2.0) - '@react-stately/overlays': 3.6.6(react@18.2.0) - '@react-stately/radio': 3.10.3(react@18.2.0) - '@react-stately/searchfield': 3.5.2(react@18.2.0) - '@react-stately/select': 3.6.3(react@18.2.0) - '@react-stately/selection': 3.15.0(react@18.2.0) - '@react-stately/slider': 3.5.3(react@18.2.0) - '@react-stately/table': 3.11.7(react@18.2.0) - '@react-stately/tabs': 3.6.5(react@18.2.0) - '@react-stately/toggle': 3.7.3(react@18.2.0) - '@react-stately/tooltip': 3.4.8(react@18.2.0) - '@react-stately/tree': 3.8.0(react@18.2.0) - '@react-types/shared': 3.23.0(react@18.2.0) - react: 18.2.0 - react-stately@3.31.1(react@18.2.0): dependencies: '@react-stately/calendar': 3.5.1(react@18.2.0) @@ -40323,6 +40422,34 @@ snapshots: '@react-types/shared': 3.23.1(react@18.2.0) react: 18.2.0 + react-stately@3.33.0(react@18.2.0): + dependencies: + '@react-stately/calendar': 3.5.5(react@18.2.0) + '@react-stately/checkbox': 3.6.9(react@18.2.0) + '@react-stately/collections': 3.11.0(react@18.2.0) + '@react-stately/color': 3.8.0(react@18.2.0) + '@react-stately/combobox': 3.10.0(react@18.2.0) + '@react-stately/data': 3.11.7(react@18.2.0) + '@react-stately/datepicker': 3.10.3(react@18.2.0) + '@react-stately/dnd': 3.4.3(react@18.2.0) + '@react-stately/form': 3.0.6(react@18.2.0) + '@react-stately/list': 3.11.0(react@18.2.0) + '@react-stately/menu': 3.8.3(react@18.2.0) + '@react-stately/numberfield': 3.9.7(react@18.2.0) + '@react-stately/overlays': 3.6.11(react@18.2.0) + '@react-stately/radio': 3.10.8(react@18.2.0) + '@react-stately/searchfield': 3.5.7(react@18.2.0) + '@react-stately/select': 3.6.8(react@18.2.0) + '@react-stately/selection': 3.17.0(react@18.2.0) + '@react-stately/slider': 3.5.8(react@18.2.0) + '@react-stately/table': 3.12.3(react@18.2.0) + '@react-stately/tabs': 3.6.10(react@18.2.0) + '@react-stately/toggle': 3.7.8(react@18.2.0) + '@react-stately/tooltip': 3.4.13(react@18.2.0) + '@react-stately/tree': 3.8.5(react@18.2.0) + '@react-types/shared': 3.25.0(react@18.2.0) + react: 18.2.0 + react-test-renderer@18.2.0(react@18.2.0): dependencies: react: 18.2.0 From 83b2d04b010782648115a7eac052268e80170a6e Mon Sep 17 00:00:00 2001 From: Victor Fernandez de Alba Date: Thu, 3 Oct 2024 12:21:35 +0200 Subject: [PATCH 044/209] Fix changelog volto-slate --- packages/volto-slate/news/{+update_pt_br.feature => 6292.feature} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename packages/volto-slate/news/{+update_pt_br.feature => 6292.feature} (100%) diff --git a/packages/volto-slate/news/+update_pt_br.feature b/packages/volto-slate/news/6292.feature similarity index 100% rename from packages/volto-slate/news/+update_pt_br.feature rename to packages/volto-slate/news/6292.feature From 7d7f9083359b7b00a38e9120f18cfe949934cd43 Mon Sep 17 00:00:00 2001 From: Victor Fernandez de Alba Date: Thu, 3 Oct 2024 12:22:21 +0200 Subject: [PATCH 045/209] Release @plone/slate 18.0.0-alpha.19 --- packages/volto-slate/CHANGELOG.md | 10 ++++++++++ packages/volto-slate/news/6292.feature | 1 - packages/volto-slate/news/6293.bugfix | 1 - packages/volto-slate/package.json | 2 +- 4 files changed, 11 insertions(+), 3 deletions(-) delete mode 100644 packages/volto-slate/news/6292.feature delete mode 100644 packages/volto-slate/news/6293.bugfix diff --git a/packages/volto-slate/CHANGELOG.md b/packages/volto-slate/CHANGELOG.md index c7e8ee3c2f..e8c7953223 100644 --- a/packages/volto-slate/CHANGELOG.md +++ b/packages/volto-slate/CHANGELOG.md @@ -8,6 +8,16 @@ +## 18.0.0-alpha.19 (2024-10-03) + +### Feature + +- Update Brazilian Portuguese translations. @ericof [#6292](https://github.com/plone/volto/issues/6292) + +### Bugfix + +- Fetch `user` before pass it to the `restricted` function of the block settings. @wesleybl [#6293](https://github.com/plone/volto/issues/6293) + ## 18.0.0-alpha.18 (2024-09-13) ### Feature diff --git a/packages/volto-slate/news/6292.feature b/packages/volto-slate/news/6292.feature deleted file mode 100644 index 35ce73755f..0000000000 --- a/packages/volto-slate/news/6292.feature +++ /dev/null @@ -1 +0,0 @@ -Update Brazilian Portuguese translations. @ericof diff --git a/packages/volto-slate/news/6293.bugfix b/packages/volto-slate/news/6293.bugfix deleted file mode 100644 index ea8503c548..0000000000 --- a/packages/volto-slate/news/6293.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fetch `user` before pass it to the `restricted` function of the block settings. @wesleybl diff --git a/packages/volto-slate/package.json b/packages/volto-slate/package.json index 5e5b6118bd..4b62cf0f94 100644 --- a/packages/volto-slate/package.json +++ b/packages/volto-slate/package.json @@ -1,6 +1,6 @@ { "name": "@plone/volto-slate", - "version": "18.0.0-alpha.18", + "version": "18.0.0-alpha.19", "description": "Slate.js integration with Volto", "main": "src/index.js", "author": "European Environment Agency: IDM2 A-Team", From 8ad447d19c5053e15ff8695e5a2d07b0e08b6698 Mon Sep 17 00:00:00 2001 From: Victor Fernandez de Alba Date: Thu, 3 Oct 2024 12:31:23 +0200 Subject: [PATCH 046/209] Release @plone/components 2.0.0-alpha.12 --- packages/components/.release-it.json | 2 +- packages/components/CHANGELOG.md | 6 ++++++ packages/components/news/6364.feature | 1 - packages/components/package.json | 2 +- 4 files changed, 8 insertions(+), 3 deletions(-) delete mode 100644 packages/components/news/6364.feature diff --git a/packages/components/.release-it.json b/packages/components/.release-it.json index 7959b21d1c..0069a0a569 100644 --- a/packages/components/.release-it.json +++ b/packages/components/.release-it.json @@ -5,7 +5,7 @@ "hooks": { "after:bump": [ "pipx run towncrier build --draft --yes --version ${version} > .changelog.draft && pipx run towncrier build --yes --version ${version}", - "pnpm build" + "pnpm build:force" ], "after:release": "rm .changelog.draft" }, diff --git a/packages/components/CHANGELOG.md b/packages/components/CHANGELOG.md index 09194352a8..e169ad06c4 100644 --- a/packages/components/CHANGELOG.md +++ b/packages/components/CHANGELOG.md @@ -8,6 +8,12 @@ +## 2.0.0-alpha.12 (2024-10-03) + +### Feature + +- Update RAC to 1.4.0 - Added new `Disclosure` component and new Color widgets @sneridagh [#6364](https://github.com/plone/volto/issues/6364) + ## 2.0.0-alpha.11 (2024-06-06) ### Bugfix diff --git a/packages/components/news/6364.feature b/packages/components/news/6364.feature deleted file mode 100644 index 9bb95dcbd6..0000000000 --- a/packages/components/news/6364.feature +++ /dev/null @@ -1 +0,0 @@ -Update RAC to 1.4.0 - Added new `Disclosure` component and new Color widgets @sneridagh diff --git a/packages/components/package.json b/packages/components/package.json index 88719f32e6..78e1936cd9 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -8,7 +8,7 @@ } ], "license": "MIT", - "version": "2.0.0-alpha.11", + "version": "2.0.0-alpha.12", "repository": { "type": "git", "url": "http://github.com/plone/components.git" From 2e03204e63cee030ca90c03f9e7a056e1c724179 Mon Sep 17 00:00:00 2001 From: Victor Fernandez de Alba Date: Thu, 3 Oct 2024 12:36:14 +0200 Subject: [PATCH 047/209] Release 18.0.0-alpha.44 --- docs/source/release-notes/index.md | 39 +++++++++++++++++++ packages/volto/CHANGELOG.md | 39 +++++++++++++++++++ packages/volto/news/ 6342.feature | 1 - packages/volto/news/+update_pt_br.feature | 1 - packages/volto/news/2487.bugfix | 1 - packages/volto/news/2570.bugfix | 2 - packages/volto/news/6173.feature | 1 - packages/volto/news/6249.bugfix | 1 - packages/volto/news/6259.bugfix | 1 - packages/volto/news/6289.documentation | 1 - packages/volto/news/6290.documentation | 1 - packages/volto/news/6293.bugfix | 1 - packages/volto/news/6295.bugfix | 2 - packages/volto/news/6297.feature | 1 - packages/volto/news/6299.bugfix | 1 - packages/volto/news/6309.feature | 1 - packages/volto/news/6313.bugfix | 1 - packages/volto/news/6315.bugfix | 1 - packages/volto/news/6330.bugfix | 1 - packages/volto/news/6332.bugfix | 1 - packages/volto/news/6334.bugfix | 1 - packages/volto/news/6360.documentation | 1 - packages/volto/news/6362.documentation | 1 - packages/volto/news/6365.internal | 1 - packages/volto/news/6366.documentation | 1 - packages/volto/package.json | 2 +- .../types/config/NonContentRoutesPublic.d.ts | 1 + .../volto/types/helpers/Blocks/Blocks.d.ts | 2 +- packages/volto/types/hooks/index.d.ts | 1 + packages/volto/types/hooks/user/useUser.d.ts | 2 + 30 files changed, 84 insertions(+), 27 deletions(-) delete mode 100644 packages/volto/news/ 6342.feature delete mode 100644 packages/volto/news/+update_pt_br.feature delete mode 100644 packages/volto/news/2487.bugfix delete mode 100644 packages/volto/news/2570.bugfix delete mode 100644 packages/volto/news/6173.feature delete mode 100644 packages/volto/news/6249.bugfix delete mode 100644 packages/volto/news/6259.bugfix delete mode 100644 packages/volto/news/6289.documentation delete mode 100644 packages/volto/news/6290.documentation delete mode 100644 packages/volto/news/6293.bugfix delete mode 100644 packages/volto/news/6295.bugfix delete mode 100644 packages/volto/news/6297.feature delete mode 100644 packages/volto/news/6299.bugfix delete mode 100644 packages/volto/news/6309.feature delete mode 100644 packages/volto/news/6313.bugfix delete mode 100644 packages/volto/news/6315.bugfix delete mode 100644 packages/volto/news/6330.bugfix delete mode 100644 packages/volto/news/6332.bugfix delete mode 100644 packages/volto/news/6334.bugfix delete mode 100644 packages/volto/news/6360.documentation delete mode 100644 packages/volto/news/6362.documentation delete mode 100644 packages/volto/news/6365.internal delete mode 100644 packages/volto/news/6366.documentation create mode 100644 packages/volto/types/config/NonContentRoutesPublic.d.ts create mode 100644 packages/volto/types/hooks/user/useUser.d.ts diff --git a/docs/source/release-notes/index.md b/docs/source/release-notes/index.md index 8a11d4dcff..df73c05fe0 100644 --- a/docs/source/release-notes/index.md +++ b/docs/source/release-notes/index.md @@ -17,6 +17,45 @@ myst: +## 18.0.0-alpha.44 (2024-10-03) + +### Feature + +- Added `config.settings.nonContentRoutesPublic` to avoid `isCmsUi` issues in these public routes. @giuliaghisini [#6173](https://github.com/plone/volto/issues/6173) +- Add language independent field icon. @iRohitSingh [#6297](https://github.com/plone/volto/issues/6297) +- Improve DiffField.jsx to render only the blocks on the page with better support for displaying HTML elements such as images. @dobri1408 [#6309](https://github.com/plone/volto/issues/6309) +- Updated Italian Italian translations. @gianniftp [#6342](https://github.com/plone/volto/issues/6342) +- Update Brazilian Portuguese translations. @ericof + +### Bugfix + +- Increase specificity of table header style selector to properly override colors for better contrast @jackahl [#2487](https://github.com/plone/volto/issues/2487) +- Change Form input:focus text color to the `textColor` value for a11y. + Add Cypress test for contact form inputs. @ThomasKindermann @tedw87 [#2570](https://github.com/plone/volto/issues/2570) +- Add missing `for` attribute to checkbox label to improve accessibility. @gomez [#6249](https://github.com/plone/volto/issues/6249) +- - Fixed build style classnames in edit mode. Also use buildStyleClassNamesExtenders. @giuliaghisini [#6259](https://github.com/plone/volto/issues/6259) +- Fetch `user` before pass it to the `restricted` function of the block settings. @wesleybl [#6293](https://github.com/plone/volto/issues/6293) +- - Join validation errors in one single toast and update errors from response. @cekk + - Toast content now has a
    wrapper instead of a

    . @cekk [#6295](https://github.com/plone/volto/issues/6295) +- Fixed findBlocks when no blocks are passed. @giuliaghisini [#6299](https://github.com/plone/volto/issues/6299) +- Fixed toolbar buttons not having a focus outline. @JeffersonBledsoe [#6313](https://github.com/plone/volto/issues/6313) +- fix: SidebarPopup close on ESC keypress @nileshgulia1 [#6315](https://github.com/plone/volto/issues/6315) +- Changed sidebar accordion text colour from @teal to @textColor. @JeffersonBledsoe [#6330](https://github.com/plone/volto/issues/6330) +- Labels accessibility for ArrayWidget, SelectWidget, TokenWidget. @folix-01 [#6332](https://github.com/plone/volto/issues/6332) +- Use lighter blue as link color in inverted tables to improve contrast for a11y @jackahl [#6334](https://github.com/plone/volto/issues/6334) + +### Internal + +- Added a pull request template as a checklist before submitting a PR. @stevepiercy [#6365](https://github.com/plone/volto/issues/6365) + +### Documentation + +- Update references to cookiecutter-plone-starter in docs. @davisagli [#6289](https://github.com/plone/volto/issues/6289) +- - Revised Cookieplone section in the Upgrade Guide. @stevepiercy [#6290](https://github.com/plone/volto/issues/6290) +- - Fix the MyST syntax for the label `upgrade-18-cookieplone-label`. @stevepiercy [#6360](https://github.com/plone/volto/issues/6360) +- Fixed spelling of prerequisites. @stevepiercy [#6362](https://github.com/plone/volto/issues/6362) +- Fix links to Vite website. @stevepiercy [#6366](https://github.com/plone/volto/issues/6366) + ## 18.0.0-alpha.43 (2024-09-13) ### Breaking diff --git a/packages/volto/CHANGELOG.md b/packages/volto/CHANGELOG.md index 8a11d4dcff..df73c05fe0 100644 --- a/packages/volto/CHANGELOG.md +++ b/packages/volto/CHANGELOG.md @@ -17,6 +17,45 @@ myst: +## 18.0.0-alpha.44 (2024-10-03) + +### Feature + +- Added `config.settings.nonContentRoutesPublic` to avoid `isCmsUi` issues in these public routes. @giuliaghisini [#6173](https://github.com/plone/volto/issues/6173) +- Add language independent field icon. @iRohitSingh [#6297](https://github.com/plone/volto/issues/6297) +- Improve DiffField.jsx to render only the blocks on the page with better support for displaying HTML elements such as images. @dobri1408 [#6309](https://github.com/plone/volto/issues/6309) +- Updated Italian Italian translations. @gianniftp [#6342](https://github.com/plone/volto/issues/6342) +- Update Brazilian Portuguese translations. @ericof + +### Bugfix + +- Increase specificity of table header style selector to properly override colors for better contrast @jackahl [#2487](https://github.com/plone/volto/issues/2487) +- Change Form input:focus text color to the `textColor` value for a11y. + Add Cypress test for contact form inputs. @ThomasKindermann @tedw87 [#2570](https://github.com/plone/volto/issues/2570) +- Add missing `for` attribute to checkbox label to improve accessibility. @gomez [#6249](https://github.com/plone/volto/issues/6249) +- - Fixed build style classnames in edit mode. Also use buildStyleClassNamesExtenders. @giuliaghisini [#6259](https://github.com/plone/volto/issues/6259) +- Fetch `user` before pass it to the `restricted` function of the block settings. @wesleybl [#6293](https://github.com/plone/volto/issues/6293) +- - Join validation errors in one single toast and update errors from response. @cekk + - Toast content now has a

    wrapper instead of a

    . @cekk [#6295](https://github.com/plone/volto/issues/6295) +- Fixed findBlocks when no blocks are passed. @giuliaghisini [#6299](https://github.com/plone/volto/issues/6299) +- Fixed toolbar buttons not having a focus outline. @JeffersonBledsoe [#6313](https://github.com/plone/volto/issues/6313) +- fix: SidebarPopup close on ESC keypress @nileshgulia1 [#6315](https://github.com/plone/volto/issues/6315) +- Changed sidebar accordion text colour from @teal to @textColor. @JeffersonBledsoe [#6330](https://github.com/plone/volto/issues/6330) +- Labels accessibility for ArrayWidget, SelectWidget, TokenWidget. @folix-01 [#6332](https://github.com/plone/volto/issues/6332) +- Use lighter blue as link color in inverted tables to improve contrast for a11y @jackahl [#6334](https://github.com/plone/volto/issues/6334) + +### Internal + +- Added a pull request template as a checklist before submitting a PR. @stevepiercy [#6365](https://github.com/plone/volto/issues/6365) + +### Documentation + +- Update references to cookiecutter-plone-starter in docs. @davisagli [#6289](https://github.com/plone/volto/issues/6289) +- - Revised Cookieplone section in the Upgrade Guide. @stevepiercy [#6290](https://github.com/plone/volto/issues/6290) +- - Fix the MyST syntax for the label `upgrade-18-cookieplone-label`. @stevepiercy [#6360](https://github.com/plone/volto/issues/6360) +- Fixed spelling of prerequisites. @stevepiercy [#6362](https://github.com/plone/volto/issues/6362) +- Fix links to Vite website. @stevepiercy [#6366](https://github.com/plone/volto/issues/6366) + ## 18.0.0-alpha.43 (2024-09-13) ### Breaking diff --git a/packages/volto/news/ 6342.feature b/packages/volto/news/ 6342.feature deleted file mode 100644 index 2c6681332a..0000000000 --- a/packages/volto/news/ 6342.feature +++ /dev/null @@ -1 +0,0 @@ -Updated Italian Italian translations. @gianniftp diff --git a/packages/volto/news/+update_pt_br.feature b/packages/volto/news/+update_pt_br.feature deleted file mode 100644 index 35ce73755f..0000000000 --- a/packages/volto/news/+update_pt_br.feature +++ /dev/null @@ -1 +0,0 @@ -Update Brazilian Portuguese translations. @ericof diff --git a/packages/volto/news/2487.bugfix b/packages/volto/news/2487.bugfix deleted file mode 100644 index 41812d2d99..0000000000 --- a/packages/volto/news/2487.bugfix +++ /dev/null @@ -1 +0,0 @@ -Increase specificity of table header style selector to properly override colors for better contrast @jackahl diff --git a/packages/volto/news/2570.bugfix b/packages/volto/news/2570.bugfix deleted file mode 100644 index 490f159699..0000000000 --- a/packages/volto/news/2570.bugfix +++ /dev/null @@ -1,2 +0,0 @@ -Change Form input:focus text color to the `textColor` value for a11y. -Add Cypress test for contact form inputs. @ThomasKindermann @tedw87 \ No newline at end of file diff --git a/packages/volto/news/6173.feature b/packages/volto/news/6173.feature deleted file mode 100644 index 1d887eae5d..0000000000 --- a/packages/volto/news/6173.feature +++ /dev/null @@ -1 +0,0 @@ -Added `config.settings.nonContentRoutesPublic` to avoid `isCmsUi` issues in these public routes. @giuliaghisini diff --git a/packages/volto/news/6249.bugfix b/packages/volto/news/6249.bugfix deleted file mode 100644 index 6e28743161..0000000000 --- a/packages/volto/news/6249.bugfix +++ /dev/null @@ -1 +0,0 @@ -Add missing `for` attribute to checkbox label to improve accessibility. @gomez \ No newline at end of file diff --git a/packages/volto/news/6259.bugfix b/packages/volto/news/6259.bugfix deleted file mode 100644 index 9a9158fcc6..0000000000 --- a/packages/volto/news/6259.bugfix +++ /dev/null @@ -1 +0,0 @@ -- Fixed build style classnames in edit mode. Also use buildStyleClassNamesExtenders. @giuliaghisini diff --git a/packages/volto/news/6289.documentation b/packages/volto/news/6289.documentation deleted file mode 100644 index 59d97b6da5..0000000000 --- a/packages/volto/news/6289.documentation +++ /dev/null @@ -1 +0,0 @@ -Update references to cookiecutter-plone-starter in docs. @davisagli diff --git a/packages/volto/news/6290.documentation b/packages/volto/news/6290.documentation deleted file mode 100644 index d31cc808d4..0000000000 --- a/packages/volto/news/6290.documentation +++ /dev/null @@ -1 +0,0 @@ -- Revised Cookieplone section in the Upgrade Guide. @stevepiercy diff --git a/packages/volto/news/6293.bugfix b/packages/volto/news/6293.bugfix deleted file mode 100644 index ea8503c548..0000000000 --- a/packages/volto/news/6293.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fetch `user` before pass it to the `restricted` function of the block settings. @wesleybl diff --git a/packages/volto/news/6295.bugfix b/packages/volto/news/6295.bugfix deleted file mode 100644 index 581fdd5089..0000000000 --- a/packages/volto/news/6295.bugfix +++ /dev/null @@ -1,2 +0,0 @@ -- Join validation errors in one single toast and update errors from response. @cekk -- Toast content now has a

    wrapper instead of a

    . @cekk diff --git a/packages/volto/news/6297.feature b/packages/volto/news/6297.feature deleted file mode 100644 index e509917a3c..0000000000 --- a/packages/volto/news/6297.feature +++ /dev/null @@ -1 +0,0 @@ -Add language independent field icon. @iRohitSingh \ No newline at end of file diff --git a/packages/volto/news/6299.bugfix b/packages/volto/news/6299.bugfix deleted file mode 100644 index 0d8ad4608a..0000000000 --- a/packages/volto/news/6299.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fixed findBlocks when no blocks are passed. @giuliaghisini diff --git a/packages/volto/news/6309.feature b/packages/volto/news/6309.feature deleted file mode 100644 index 370011edb9..0000000000 --- a/packages/volto/news/6309.feature +++ /dev/null @@ -1 +0,0 @@ -Improve DiffField.jsx to render only the blocks on the page with better support for displaying HTML elements such as images. @dobri1408 diff --git a/packages/volto/news/6313.bugfix b/packages/volto/news/6313.bugfix deleted file mode 100644 index 134d5727c5..0000000000 --- a/packages/volto/news/6313.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fixed toolbar buttons not having a focus outline. @JeffersonBledsoe diff --git a/packages/volto/news/6315.bugfix b/packages/volto/news/6315.bugfix deleted file mode 100644 index 969e260532..0000000000 --- a/packages/volto/news/6315.bugfix +++ /dev/null @@ -1 +0,0 @@ -fix: SidebarPopup close on ESC keypress @nileshgulia1 \ No newline at end of file diff --git a/packages/volto/news/6330.bugfix b/packages/volto/news/6330.bugfix deleted file mode 100644 index 809f559863..0000000000 --- a/packages/volto/news/6330.bugfix +++ /dev/null @@ -1 +0,0 @@ -Changed sidebar accordion text colour from @teal to @textColor. @JeffersonBledsoe diff --git a/packages/volto/news/6332.bugfix b/packages/volto/news/6332.bugfix deleted file mode 100644 index 6b82b6cd5e..0000000000 --- a/packages/volto/news/6332.bugfix +++ /dev/null @@ -1 +0,0 @@ -Labels accessibility for ArrayWidget, SelectWidget, TokenWidget. @folix-01 diff --git a/packages/volto/news/6334.bugfix b/packages/volto/news/6334.bugfix deleted file mode 100644 index f7623395d6..0000000000 --- a/packages/volto/news/6334.bugfix +++ /dev/null @@ -1 +0,0 @@ -Use lighter blue as link color in inverted tables to improve contrast for a11y @jackahl diff --git a/packages/volto/news/6360.documentation b/packages/volto/news/6360.documentation deleted file mode 100644 index f6a02c99e4..0000000000 --- a/packages/volto/news/6360.documentation +++ /dev/null @@ -1 +0,0 @@ -- Fix the MyST syntax for the label `upgrade-18-cookieplone-label`. @stevepiercy diff --git a/packages/volto/news/6362.documentation b/packages/volto/news/6362.documentation deleted file mode 100644 index c37ab93222..0000000000 --- a/packages/volto/news/6362.documentation +++ /dev/null @@ -1 +0,0 @@ -Fixed spelling of prerequisites. @stevepiercy diff --git a/packages/volto/news/6365.internal b/packages/volto/news/6365.internal deleted file mode 100644 index bffba0bc34..0000000000 --- a/packages/volto/news/6365.internal +++ /dev/null @@ -1 +0,0 @@ -Added a pull request template as a checklist before submitting a PR. @stevepiercy diff --git a/packages/volto/news/6366.documentation b/packages/volto/news/6366.documentation deleted file mode 100644 index 93d39a686f..0000000000 --- a/packages/volto/news/6366.documentation +++ /dev/null @@ -1 +0,0 @@ -Fix links to Vite website. @stevepiercy diff --git a/packages/volto/package.json b/packages/volto/package.json index 9b31c08fde..a445b3144f 100644 --- a/packages/volto/package.json +++ b/packages/volto/package.json @@ -9,7 +9,7 @@ } ], "license": "MIT", - "version": "18.0.0-alpha.43", + "version": "18.0.0-alpha.44", "repository": { "type": "git", "url": "git@github.com:plone/volto.git" diff --git a/packages/volto/types/config/NonContentRoutesPublic.d.ts b/packages/volto/types/config/NonContentRoutesPublic.d.ts new file mode 100644 index 0000000000..c239816469 --- /dev/null +++ b/packages/volto/types/config/NonContentRoutesPublic.d.ts @@ -0,0 +1 @@ +export const nonContentRoutesPublic: (string | RegExp)[]; diff --git a/packages/volto/types/helpers/Blocks/Blocks.d.ts b/packages/volto/types/helpers/Blocks/Blocks.d.ts index 82f74f7fe3..6c5305f2e1 100644 --- a/packages/volto/types/helpers/Blocks/Blocks.d.ts +++ b/packages/volto/types/helpers/Blocks/Blocks.d.ts @@ -147,7 +147,7 @@ export function isBlockContainer(block: any): boolean; * @param {Object} types A list with the list of types to be matched * @return {Array} An array of block ids */ -export function findBlocks(blocks: any, types: any, result?: any[]): any[]; +export function findBlocks(blocks: {}, types: any, result?: any[]): any[]; /** * Move block to different location index within blocks_layout * @function moveBlock diff --git a/packages/volto/types/hooks/index.d.ts b/packages/volto/types/hooks/index.d.ts index 674ee3a17f..e83d19cd68 100644 --- a/packages/volto/types/hooks/index.d.ts +++ b/packages/volto/types/hooks/index.d.ts @@ -1,2 +1,3 @@ export { default as useClipboard } from "@plone/volto/hooks/clipboard/useClipboard"; export { useClient } from "@plone/volto/hooks/client/useClient"; +export { default as useUser } from "@plone/volto/hooks/user/useUser"; diff --git a/packages/volto/types/hooks/user/useUser.d.ts b/packages/volto/types/hooks/user/useUser.d.ts new file mode 100644 index 0000000000..40d1a910b8 --- /dev/null +++ b/packages/volto/types/hooks/user/useUser.d.ts @@ -0,0 +1,2 @@ +export default useUser; +declare function useUser(): any; From 29a8b55e046fdf6345617c8ecb23509a109c7a9d Mon Sep 17 00:00:00 2001 From: Steve Piercy Date: Fri, 4 Oct 2024 02:07:55 -0700 Subject: [PATCH 048/209] Add a reference label (#6372) --- docs/source/addons/best-practices.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/source/addons/best-practices.md b/docs/source/addons/best-practices.md index af2109c5d7..23545d628a 100644 --- a/docs/source/addons/best-practices.md +++ b/docs/source/addons/best-practices.md @@ -62,6 +62,9 @@ a screenshot. Ideally, the Readme should also include install instructions and details on any possible settings. + +(testing-the-add-on-label)= + ## Testing the add-on It is not easy, right now, to ship an add-on with a self-bootstraping and From 30ce8a7cea422c5d428eaf3a8cf3ed8baf258ad3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Fern=C3=A1ndez=20de=20Alba?= Date: Fri, 4 Oct 2024 13:48:05 +0200 Subject: [PATCH 049/209] =?UTF-8?q?Fix=20the=20boilerplate=20for=20old=20g?= =?UTF-8?q?enerator=20and=20add=20a=20missing=20upgrade=20guide=E2=80=A6?= =?UTF-8?q?=20(#6368)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Fred van Dijk Co-authored-by: Steve Piercy Co-authored-by: David Glick --- docs/source/upgrade-guide/index.md | 29 +++++++++++++++++++ .../generators/app/templates/razzle.config.js | 2 ++ packages/generator-volto/news/6368.breaking | 1 + 3 files changed, 32 insertions(+) create mode 100644 packages/generator-volto/news/6368.breaking diff --git a/docs/source/upgrade-guide/index.md b/docs/source/upgrade-guide/index.md index 407cf8fe48..bd0b128418 100644 --- a/docs/source/upgrade-guide/index.md +++ b/docs/source/upgrade-guide/index.md @@ -474,6 +474,35 @@ The recommended way of generating a project boilerplate is [Cookieplone](https:/ Please update your code to use the `pnpm` based setup. ``` +### Update needed to project boilerplate generated with `@plone/generator-volto` + +```{versionadded} Volto 18.0.0-alpha.42 +Effective with Volto 18.0.0-alpha.42, a new feature introduced a breaking change in the boilerplates created using `@plone/generator-volto` 9.0.0-alpha.17 and earlier. +``` + +You need to change your {file}`razzle.config.js` file in the root of your boilerplate. + +```diff +razzle.config.js +@@ -27,12 +27,14 @@ const customModifyWebpackConfig = ({ + webpackConfig, + webpackObject, + options, ++ paths, + }) => { + const config = modifyWebpackConfig({ + env: { target, dev }, + webpackConfig, + webpackObject, + options, ++ paths, + }); + // add custom code here.. + return config; +``` + +The change involves adding a new `paths` argument to the `customModifyWebpackConfig` function. + (volto-upgrade-guide-17.x.x)= ## Upgrading to Volto 17.x.x diff --git a/packages/generator-volto/generators/app/templates/razzle.config.js b/packages/generator-volto/generators/app/templates/razzle.config.js index 6bab4ae583..2b4a6a8f57 100644 --- a/packages/generator-volto/generators/app/templates/razzle.config.js +++ b/packages/generator-volto/generators/app/templates/razzle.config.js @@ -27,12 +27,14 @@ const customModifyWebpackConfig = ({ webpackConfig, webpackObject, options, + paths, }) => { const config = modifyWebpackConfig({ env: { target, dev }, webpackConfig, webpackObject, options, + paths, }); // add custom code here.. return config; diff --git a/packages/generator-volto/news/6368.breaking b/packages/generator-volto/news/6368.breaking new file mode 100644 index 0000000000..206148c948 --- /dev/null +++ b/packages/generator-volto/news/6368.breaking @@ -0,0 +1 @@ +Updated `razzle.config.js` to accommodate new argument `paths` passed down to `customModifyWebpackConfig`. @sneridagh From e83d9a3fc7f3db7ab210b2d9110ff1c1b1caf8bb Mon Sep 17 00:00:00 2001 From: Victor Fernandez de Alba Date: Fri, 4 Oct 2024 13:49:32 +0200 Subject: [PATCH 050/209] Release generate-volto 9.0.0-alpha.18 --- packages/generator-volto/CHANGELOG.md | 6 ++++++ packages/generator-volto/news/6368.breaking | 1 - packages/generator-volto/package.json | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) delete mode 100644 packages/generator-volto/news/6368.breaking diff --git a/packages/generator-volto/CHANGELOG.md b/packages/generator-volto/CHANGELOG.md index fb6cf2607a..8eb76d1bb6 100644 --- a/packages/generator-volto/CHANGELOG.md +++ b/packages/generator-volto/CHANGELOG.md @@ -8,6 +8,12 @@ +## 9.0.0-alpha.18 (2024-10-04) + +### Breaking + +- Updated `razzle.config.js` to accommodate new argument `paths` passed down to `customModifyWebpackConfig`. @sneridagh [#6368](https://github.com/plone/volto/issues/6368) + ## 9.0.0-alpha.17 (2024-06-28) ### Bugfix diff --git a/packages/generator-volto/news/6368.breaking b/packages/generator-volto/news/6368.breaking deleted file mode 100644 index 206148c948..0000000000 --- a/packages/generator-volto/news/6368.breaking +++ /dev/null @@ -1 +0,0 @@ -Updated `razzle.config.js` to accommodate new argument `paths` passed down to `customModifyWebpackConfig`. @sneridagh diff --git a/packages/generator-volto/package.json b/packages/generator-volto/package.json index f61a14b344..cc8f65f722 100644 --- a/packages/generator-volto/package.json +++ b/packages/generator-volto/package.json @@ -10,7 +10,7 @@ } ], "license": "MIT", - "version": "9.0.0-alpha.17", + "version": "9.0.0-alpha.18", "repository": { "type": "git", "url": "git+https://github.com/plone/generator-volto.git" From feeac07b2f951487a1123c2c9497bdc17247a0d6 Mon Sep 17 00:00:00 2001 From: Steve Piercy Date: Fri, 4 Oct 2024 17:17:23 -0700 Subject: [PATCH 051/209] Change formatting from blob of text to definition list. (#6378) --- .../development/how-to-restrict-blocks.md | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/docs/source/development/how-to-restrict-blocks.md b/docs/source/development/how-to-restrict-blocks.md index ed274ee37b..62931acdf8 100644 --- a/docs/source/development/how-to-restrict-blocks.md +++ b/docs/source/development/how-to-restrict-blocks.md @@ -27,11 +27,20 @@ The function has this signature: } ``` -`properties` is the current object data. -`block` is the block being evaluated in `BlockChooser`. -`navRoot` is the nearest navigation root object. -`contentType` is the current content type. -`user` is an object that represents the currently authenticated user. +`properties` +: The current object data. + +`block` +: The block being evaluated in `BlockChooser`. + +`navRoot` +: The nearest navigation root object. + +`contentType` +: The current content type. + +`user` +: An object that represents the currently authenticated user. In the following configuration example, you can restrict a block so that it cannot be added unless the content type is `News Item` or the content item is in a specific path in the content tree (`/folder`): From 78ae6dd107cc4bda9a5080640fb905745c6c120a Mon Sep 17 00:00:00 2001 From: Steve Piercy Date: Fri, 4 Oct 2024 22:02:48 -0700 Subject: [PATCH 052/209] Remove pin on Vale, and upgrade to v3.x configuration (#6376) --- .github/workflows/docs.yml | 12 +++++------- Makefile | 3 ++- packages/volto/news/6376.documentation | 2 ++ requirements-docs.txt | 2 +- .../{Vocab => config/vocabularies}/Base/accept.txt | 0 .../{Vocab => config/vocabularies}/Base/reject.txt | 0 .../{Vocab => config/vocabularies}/Plone/accept.txt | 0 .../{Vocab => config/vocabularies}/Plone/reject.txt | 0 8 files changed, 10 insertions(+), 9 deletions(-) create mode 100644 packages/volto/news/6376.documentation rename styles/{Vocab => config/vocabularies}/Base/accept.txt (100%) rename styles/{Vocab => config/vocabularies}/Base/reject.txt (100%) rename styles/{Vocab => config/vocabularies}/Plone/accept.txt (100%) rename styles/{Vocab => config/vocabularies}/Plone/reject.txt (100%) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 75da9c3140..0c868b5779 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -10,6 +10,9 @@ on: paths: - 'docs/**' - 'styles/**' + - '.github/workflows/docs.yml' + - 'requirements-docs.txt' + - '.vale.ini' jobs: docs: @@ -32,9 +35,7 @@ jobs: run: pip install virtualenv - name: pip install requirements - run: | - pip install -r requirements-docs.txt - sudo snap install --edge vale + run: pip install -r requirements-docs.txt - name: Check for broken links run: make docs-linkcheckbroken @@ -43,7 +44,4 @@ jobs: run: make docs-html - name: Run vale - run: | - git clone https://github.com/errata-ai/Microsoft.git - cp -r ./Microsoft/Microsoft ./styles - vale --no-exit ./docs + run: make docs-vale VALEOPTS=--no-exit diff --git a/Makefile b/Makefile index 4ff9cb9510..e7d46cea3c 100644 --- a/Makefile +++ b/Makefile @@ -16,6 +16,7 @@ include variables.mk # Sphinx variables # You can set these variables from the command line. SPHINXOPTS ?= +VALEOPTS ?= # Internal variables. SPHINXBUILD = "$(realpath bin/sphinx-build)" SPHINXAUTOBUILD = "$(realpath bin/sphinx-autobuild)" @@ -120,7 +121,7 @@ docs-linkcheckbroken: bin/python docs-news ## Run linkcheck and show only broke .PHONY: docs-vale docs-vale: bin/python docs-news ## Install (once) and run Vale style, grammar, and spell checks bin/vale sync - bin/vale --no-wrap $(VALEFILES) + bin/vale --no-wrap $(VALEOPTS) $(VALEFILES) @echo @echo "Vale is finished; look for any errors in the above output." diff --git a/packages/volto/news/6376.documentation b/packages/volto/news/6376.documentation new file mode 100644 index 0000000000..c8dc22516d --- /dev/null +++ b/packages/volto/news/6376.documentation @@ -0,0 +1,2 @@ +Removed pin on Vale for documentation spelling, grammar, and style checks, and upgrade to v3.x configuration. +Updated CI and `Makefile` to allow `VALEOPTS=--no-exit`. @stevepiercy diff --git a/requirements-docs.txt b/requirements-docs.txt index b42217e44c..406c7f60cd 100644 --- a/requirements-docs.txt +++ b/requirements-docs.txt @@ -7,4 +7,4 @@ sphinx-copybutton sphinx-examples sphinxcontrib-video sphinxext-opengraph -vale==2.30.0 +vale diff --git a/styles/Vocab/Base/accept.txt b/styles/config/vocabularies/Base/accept.txt similarity index 100% rename from styles/Vocab/Base/accept.txt rename to styles/config/vocabularies/Base/accept.txt diff --git a/styles/Vocab/Base/reject.txt b/styles/config/vocabularies/Base/reject.txt similarity index 100% rename from styles/Vocab/Base/reject.txt rename to styles/config/vocabularies/Base/reject.txt diff --git a/styles/Vocab/Plone/accept.txt b/styles/config/vocabularies/Plone/accept.txt similarity index 100% rename from styles/Vocab/Plone/accept.txt rename to styles/config/vocabularies/Plone/accept.txt diff --git a/styles/Vocab/Plone/reject.txt b/styles/config/vocabularies/Plone/reject.txt similarity index 100% rename from styles/Vocab/Plone/reject.txt rename to styles/config/vocabularies/Plone/reject.txt From ca155f2451213569c354ea232d08cec81d9e306a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Fern=C3=A1ndez=20de=20Alba?= Date: Tue, 8 Oct 2024 09:14:09 +0200 Subject: [PATCH 053/209] Added missing arg for `buildStyleClassNamesExtenders` (#6381) --- packages/volto/news/6381.bugfix | 1 + .../src/components/manage/Blocks/Block/EditBlockWrapper.jsx | 1 + 2 files changed, 2 insertions(+) create mode 100644 packages/volto/news/6381.bugfix diff --git a/packages/volto/news/6381.bugfix b/packages/volto/news/6381.bugfix new file mode 100644 index 0000000000..af9e27803e --- /dev/null +++ b/packages/volto/news/6381.bugfix @@ -0,0 +1 @@ +Added missing arg for `buildStyleClassNamesExtenders` @sneridagh diff --git a/packages/volto/src/components/manage/Blocks/Block/EditBlockWrapper.jsx b/packages/volto/src/components/manage/Blocks/Block/EditBlockWrapper.jsx index 5fd3ab2adb..4e047bcd18 100644 --- a/packages/volto/src/components/manage/Blocks/Block/EditBlockWrapper.jsx +++ b/packages/volto/src/components/manage/Blocks/Block/EditBlockWrapper.jsx @@ -65,6 +65,7 @@ const EditBlockWrapper = (props) => { let classNames = buildStyleClassNamesFromData(data.styles); classNames = buildStyleClassNamesExtenders({ block, + content: properties, data, classNames, }); From 779497f423c03bf6e8bd560f8536c01d4662ad9a Mon Sep 17 00:00:00 2001 From: Piero Nicolli Date: Tue, 8 Oct 2024 09:26:41 +0200 Subject: [PATCH 054/209] Porting a few minor fixes upstream (#6382) --- packages/client/news/6382.internal | 1 + packages/client/package.json | 1 + packages/components/news/6382.bugfix | 1 + packages/components/src/providers/flattenToAppURL.tsx | 6 +++--- packages/types/news/6382.bugfix | 1 + packages/types/src/blocks/index.d.ts | 1 + packages/types/src/content/common.d.ts | 4 ++-- packages/types/src/content/index.d.ts | 6 ++---- pnpm-lock.yaml | 2 +- 9 files changed, 13 insertions(+), 10 deletions(-) create mode 100644 packages/client/news/6382.internal create mode 100644 packages/components/news/6382.bugfix create mode 100644 packages/types/news/6382.bugfix diff --git a/packages/client/news/6382.internal b/packages/client/news/6382.internal new file mode 100644 index 0000000000..2c28588a74 --- /dev/null +++ b/packages/client/news/6382.internal @@ -0,0 +1 @@ +Added watch script to package.json @pnicolli @deodorhunter \ No newline at end of file diff --git a/packages/client/package.json b/packages/client/package.json index e166cb3004..8446b16f86 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -46,6 +46,7 @@ "react-query" ], "scripts": { + "watch": "parcel watch", "build": "parcel build", "build:force": "parcel build --no-cache", "test": "vitest", diff --git a/packages/components/news/6382.bugfix b/packages/components/news/6382.bugfix new file mode 100644 index 0000000000..253caf924c --- /dev/null +++ b/packages/components/news/6382.bugfix @@ -0,0 +1 @@ +Fixed flattenToAppURL types @pnicolli @deodorhunter \ No newline at end of file diff --git a/packages/components/src/providers/flattenToAppURL.tsx b/packages/components/src/providers/flattenToAppURL.tsx index b1ce32a98d..56d32da0e9 100644 --- a/packages/components/src/providers/flattenToAppURL.tsx +++ b/packages/components/src/providers/flattenToAppURL.tsx @@ -2,15 +2,15 @@ import React from 'react'; import { createContext, ReactNode, useContext, useMemo } from 'react'; interface FlattenToAppURL { - flattenToAppURL: (path: string | undefined) => string | undefined; + flattenToAppURL: (path: string | undefined) => string; } const FlattenToAppURLContext = createContext({ - flattenToAppURL: (path) => path, + flattenToAppURL: (path) => path ?? '', }); interface FlattenToAppURLProps { - flattenToAppURL: (path: string | undefined) => string | undefined; + flattenToAppURL: (path: string | undefined) => string; children: ReactNode; } diff --git a/packages/types/news/6382.bugfix b/packages/types/news/6382.bugfix new file mode 100644 index 0000000000..0079f7c9f7 --- /dev/null +++ b/packages/types/news/6382.bugfix @@ -0,0 +1 @@ +Fixed types for image fields and BlocksFormData @pnicolli @deodorhunter \ No newline at end of file diff --git a/packages/types/src/blocks/index.d.ts b/packages/types/src/blocks/index.d.ts index 2c0a2e65de..902e205453 100644 --- a/packages/types/src/blocks/index.d.ts +++ b/packages/types/src/blocks/index.d.ts @@ -10,6 +10,7 @@ import type { Location, History } from 'history'; export interface BlocksFormData { '@type': AvailableBlocks; variation?: string; + [x: string]: unknown; } export interface BlockViewProps { diff --git a/packages/types/src/content/common.d.ts b/packages/types/src/content/common.d.ts index be73df373a..1d7f4118af 100644 --- a/packages/types/src/content/common.d.ts +++ b/packages/types/src/content/common.d.ts @@ -23,8 +23,8 @@ export interface ContainedItem { '@id': string; '@type': string; description: string; - image_field: null; - image_scales: null; + image_field: string; + image_scales: Record | null; review_state: string; title: string; } diff --git a/packages/types/src/content/index.d.ts b/packages/types/src/content/index.d.ts index 5595751536..4a9083d0d4 100644 --- a/packages/types/src/content/index.d.ts +++ b/packages/types/src/content/index.d.ts @@ -1,4 +1,5 @@ import type { Expanders, ContainedItem, Image, RelatedItem } from './common'; +import type { BlocksFormData } from '../blocks'; export interface Content { '@components': Expanders; @@ -12,10 +13,7 @@ export interface Content { token: boolean; }; blocks: { - [k in string]: { - '@id': string; - '@type': string; - } & Record; + [k in string]: BlocksFormData; }; blocks_layout: { items: string[]; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f457c1c44d..1312cf51a0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -44498,4 +44498,4 @@ snapshots: zod@3.22.5: {} - zwitch@2.0.4: {} \ No newline at end of file + zwitch@2.0.4: {} From 447020a0d646c24f461b818ef379c337ebe5d258 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Fern=C3=A1ndez=20de=20Alba?= Date: Tue, 8 Oct 2024 09:26:53 +0200 Subject: [PATCH 055/209] Upgrade vite to latest (#6373) --- packages/client/news/6373.internal | 1 + packages/client/package.json | 4 +- packages/components/news/6373.internal | 1 + packages/components/package.json | 4 +- packages/registry/news/6373.internal | 1 + packages/registry/package.json | 2 +- pnpm-lock.yaml | 1168 ++++++++++++++++++------ 7 files changed, 893 insertions(+), 288 deletions(-) create mode 100644 packages/client/news/6373.internal create mode 100644 packages/components/news/6373.internal create mode 100644 packages/registry/news/6373.internal diff --git a/packages/client/news/6373.internal b/packages/client/news/6373.internal new file mode 100644 index 0000000000..2b6d200183 --- /dev/null +++ b/packages/client/news/6373.internal @@ -0,0 +1 @@ +Update Vite and vitest versions @sneridagh diff --git a/packages/client/package.json b/packages/client/package.json index 8446b16f86..2b632ce203 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -86,9 +86,9 @@ "tsup": "^8.0.2", "typescript": "5.4.2", "uuid": "^9.0.1", - "vite": "^5.1.7", + "vite": "^5.4.8", "vite-plugin-dts": "^3.7.3", - "vitest": "^1.3.1", + "vitest": "^2.1.2", "wait-on": "^7.2.0" }, "dependencies": { diff --git a/packages/components/news/6373.internal b/packages/components/news/6373.internal new file mode 100644 index 0000000000..2b6d200183 --- /dev/null +++ b/packages/components/news/6373.internal @@ -0,0 +1 @@ +Update Vite and vitest versions @sneridagh diff --git a/packages/components/package.json b/packages/components/package.json index 78e1936cd9..f916aad927 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -111,8 +111,8 @@ "release-it": "17.1.1", "storybook": "^8.0.4", "typescript": "^5.4.5", - "vite": "^5.1.7", - "vitest": "^1.3.1", + "vite": "^5.4.8", + "vitest": "^2.1.2", "vitest-axe": "^0.1.0" }, "dependencies": { diff --git a/packages/registry/news/6373.internal b/packages/registry/news/6373.internal new file mode 100644 index 0000000000..2b6d200183 --- /dev/null +++ b/packages/registry/news/6373.internal @@ -0,0 +1 @@ +Update Vite and vitest versions @sneridagh diff --git a/packages/registry/package.json b/packages/registry/package.json index df81edb35b..1132e4ede8 100644 --- a/packages/registry/package.json +++ b/packages/registry/package.json @@ -85,6 +85,6 @@ "release-it": "16.2.1", "tsconfig": "workspace:*", "typescript": "5.4.2", - "vitest": "^0.34.6" + "vitest": "^2.1.2" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1312cf51a0..8403edf75c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -466,7 +466,7 @@ importers: version: 10.0.1(cypress@13.13.2) '@testing-library/jest-dom': specifier: 6.4.2 - version: 6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@26.6.3)(vitest@1.5.0(@types/node@20.12.7)(jsdom@16.7.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) + version: 6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@26.6.3)(vitest@2.1.2(@types/node@20.12.7)(jsdom@16.7.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) '@testing-library/react': specifier: 14.2.0 version: 14.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -1040,7 +1040,7 @@ importers: version: 18.2.25 parcel: specifier: ^2.12.0 - version: 2.12.0(@swc/helpers@0.5.10)(postcss@8.4.38)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.2) + version: 2.12.0(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.2) release-it: specifier: 17.1.1 version: 17.1.1(typescript@5.4.2) @@ -1074,7 +1074,7 @@ importers: devDependencies: '@parcel/config-default': specifier: ^2.12.0 - version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.38)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.2) + version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.2) '@parcel/core': specifier: ^2.12.0 version: 2.12.0(@swc/helpers@0.5.10) @@ -1116,10 +1116,10 @@ importers: version: 9.0.8 '@vitejs/plugin-react': specifier: ^4.1.0 - version: 4.2.1(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) + version: 4.2.1(vite@5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) '@vitest/coverage-v8': specifier: ^1.3.1 - version: 1.5.0(vitest@1.5.0(@types/node@20.12.7)(jsdom@21.1.2)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) + version: 1.5.0(vitest@2.1.2(@types/node@20.12.7)(jsdom@21.1.2)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) glob: specifier: 7.1.6 version: 7.1.6 @@ -1128,7 +1128,7 @@ importers: version: 21.1.2 parcel: specifier: ^2.12.0 - version: 2.12.0(@swc/helpers@0.5.10)(postcss@8.4.38)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.2) + version: 2.12.0(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.2) react: specifier: ^18.2.0 version: 18.2.0 @@ -1140,7 +1140,7 @@ importers: version: 17.1.1(typescript@5.4.2) tsup: specifier: ^8.0.2 - version: 8.0.2(@microsoft/api-extractor@7.43.0(@types/node@20.12.7))(@swc/core@1.4.16(@swc/helpers@0.5.10))(postcss@8.4.38)(typescript@5.4.2) + version: 8.0.2(@microsoft/api-extractor@7.43.0(@types/node@20.12.7))(@swc/core@1.4.16(@swc/helpers@0.5.10))(postcss@8.4.47)(typescript@5.4.2) typescript: specifier: 5.4.2 version: 5.4.2 @@ -1148,14 +1148,14 @@ importers: specifier: ^9.0.1 version: 9.0.1 vite: - specifier: ^5.1.7 - version: 5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) + specifier: ^5.4.8 + version: 5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) vite-plugin-dts: specifier: ^3.7.3 - version: 3.8.3(@types/node@20.12.7)(rollup@4.14.3)(typescript@5.4.2)(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) + version: 3.8.3(@types/node@20.12.7)(rollup@4.24.0)(typescript@5.4.2)(vite@5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) vitest: - specifier: ^1.3.1 - version: 1.5.0(@types/node@20.12.7)(jsdom@21.1.2)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) + specifier: ^2.1.2 + version: 2.1.2(@types/node@20.12.7)(jsdom@21.1.2)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) wait-on: specifier: ^7.2.0 version: 7.2.0(debug@4.3.4) @@ -1170,7 +1170,7 @@ importers: version: 3.11.11(react@18.2.0) '@storybook/test': specifier: ^8.0.4 - version: 8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(vitest@1.5.0(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) + version: 8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(vitest@2.1.2(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) clsx: specifier: ^2.1.1 version: 2.1.1 @@ -1186,7 +1186,7 @@ importers: devDependencies: '@parcel/config-default': specifier: ^2.12.0 - version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.38)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.5) + version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.5) '@parcel/core': specifier: ^2.12.0 version: 2.12.0(@swc/helpers@0.5.10) @@ -1213,7 +1213,7 @@ importers: version: 8.0.8(@types/react@18.2.79)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/addon-interactions': specifier: ^8.0.4 - version: 8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(vitest@1.5.0(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) + version: 8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(vitest@2.1.2(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) '@storybook/addon-links': specifier: ^8.0.4 version: 8.0.8(react@18.2.0) @@ -1231,13 +1231,13 @@ importers: version: 8.0.8(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.4.5) '@storybook/react-vite': specifier: ^8.0.4 - version: 8.0.8(@preact/preset-vite@2.8.2(@babel/core@7.24.4)(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)))(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@4.14.3)(typescript@5.4.5)(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) + version: 8.0.8(@preact/preset-vite@2.8.2(@babel/core@7.24.4)(vite@5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)))(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@4.24.0)(typescript@5.4.5)(vite@5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) '@storybook/theming': specifier: ^8.0.4 version: 8.0.8(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@testing-library/jest-dom': specifier: 6.4.2 - version: 6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.12)(vitest@1.5.0(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) + version: 6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.12)(vitest@2.1.2(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) '@testing-library/react': specifier: 14.2.1 version: 14.2.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -1252,10 +1252,10 @@ importers: version: 18.2.25 '@vitejs/plugin-react': specifier: ^4.1.0 - version: 4.2.1(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) + version: 4.2.1(vite@5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) '@vitest/coverage-v8': specifier: ^1.3.1 - version: 1.5.0(vitest@1.5.0(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) + version: 1.5.0(vitest@2.1.2(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) browserslist: specifier: ^4.23.0 version: 4.23.0 @@ -1276,7 +1276,7 @@ importers: version: 1.24.1 parcel: specifier: ^2.12.0 - version: 2.12.0(@swc/helpers@0.5.10)(postcss@8.4.38)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.5) + version: 2.12.0(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.5) release-it: specifier: 17.1.1 version: 17.1.1(typescript@5.4.5) @@ -1287,14 +1287,14 @@ importers: specifier: ^5.4.5 version: 5.4.5 vite: - specifier: ^5.1.7 - version: 5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) + specifier: ^5.4.8 + version: 5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) vitest: - specifier: ^1.3.1 - version: 1.5.0(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) + specifier: ^2.1.2 + version: 2.1.2(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) vitest-axe: specifier: ^0.1.0 - version: 0.1.0(vitest@1.5.0(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) + version: 0.1.0(vitest@2.1.2(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) packages/coresandbox: dependencies: @@ -1420,7 +1420,7 @@ importers: version: 18.2.25 parcel: specifier: 2.12.0 - version: 2.12.0(@swc/helpers@0.5.10)(postcss@8.4.38)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.2) + version: 2.12.0(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.2) release-it: specifier: ^17.1.1 version: 17.1.1(typescript@5.4.2) @@ -1454,7 +1454,7 @@ importers: devDependencies: '@parcel/config-default': specifier: ^2.12.0 - version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.38)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.2.2) + version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.2.2) '@parcel/core': specifier: ^2.12.0 version: 2.12.0(@swc/helpers@0.5.10) @@ -1481,7 +1481,7 @@ importers: version: 18.2.25 parcel: specifier: ^2.12.0 - version: 2.12.0(@swc/helpers@0.5.10)(postcss@8.4.38)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.2.2) + version: 2.12.0(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.2.2) release-it: specifier: 17.1.1 version: 17.1.1(typescript@5.2.2) @@ -1527,7 +1527,7 @@ importers: version: 18.2.25 parcel: specifier: ^2.12.0 - version: 2.12.0(@swc/helpers@0.5.10)(postcss@8.4.38)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.2) + version: 2.12.0(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.2) react: specifier: ^18.2.0 version: 18.2.0 @@ -1544,8 +1544,8 @@ importers: specifier: 5.4.2 version: 5.4.2 vitest: - specifier: ^0.34.6 - version: 0.34.6(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) + specifier: ^2.1.2 + version: 2.1.2(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) packages/scripts: dependencies: @@ -1631,7 +1631,7 @@ importers: version: 18.2.25 parcel: specifier: ^2.12.0 - version: 2.12.0(@swc/helpers@0.5.10)(postcss@8.4.38)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.2.2) + version: 2.12.0(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.2.2) release-it: specifier: 17.1.1 version: 17.1.1(typescript@5.2.2) @@ -2048,7 +2048,7 @@ importers: version: 10.0.1(cypress@13.13.2) '@testing-library/jest-dom': specifier: 6.4.2 - version: 6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@26.6.3)(vitest@1.5.0(@types/node@20.12.7)(jsdom@16.7.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) + version: 6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@26.6.3)(vitest@2.1.2(@types/node@20.12.7)(jsdom@16.7.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) '@testing-library/react': specifier: 14.2.0 version: 14.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -2400,7 +2400,7 @@ importers: version: 10.0.1(cypress@13.13.2) '@testing-library/jest-dom': specifier: 6.4.2 - version: 6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.12)(vitest@1.5.0(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) + version: 6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.12)(vitest@2.1.2(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) '@testing-library/react': specifier: 12.1.5 version: 12.1.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -3378,6 +3378,12 @@ packages: cpu: [ppc64] os: [aix] + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + '@esbuild/android-arm64@0.17.6': resolution: {integrity: sha512-YnYSCceN/dUzUr5kdtUzB+wZprCafuD89Hs0Aqv9QSdwhYQybhXTaSTcrl6X/aWThn1a/j0eEpUBGOE7269REg==} engines: {node: '>=12'} @@ -3402,6 +3408,12 @@ packages: cpu: [arm64] os: [android] + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm@0.17.6': resolution: {integrity: sha512-bSC9YVUjADDy1gae8RrioINU6e1lCkg3VGVwm0QQ2E1CWcC4gnMce9+B6RpxuSsrsXsk1yojn7sp1fnG8erE2g==} engines: {node: '>=12'} @@ -3426,6 +3438,12 @@ packages: cpu: [arm] os: [android] + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + '@esbuild/android-x64@0.17.6': resolution: {integrity: sha512-MVcYcgSO7pfu/x34uX9u2QIZHmXAB7dEiLQC5bBl5Ryqtpj9lT2sg3gNDEsrPEmimSJW2FXIaxqSQ501YLDsZQ==} engines: {node: '>=12'} @@ -3450,6 +3468,12 @@ packages: cpu: [x64] os: [android] + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + '@esbuild/darwin-arm64@0.17.6': resolution: {integrity: sha512-bsDRvlbKMQMt6Wl08nHtFz++yoZHsyTOxnjfB2Q95gato+Yi4WnRl13oC2/PJJA9yLCoRv9gqT/EYX0/zDsyMA==} engines: {node: '>=12'} @@ -3474,6 +3498,12 @@ packages: cpu: [arm64] os: [darwin] + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-x64@0.17.6': resolution: {integrity: sha512-xh2A5oPrYRfMFz74QXIQTQo8uA+hYzGWJFoeTE8EvoZGHb+idyV4ATaukaUvnnxJiauhs/fPx3vYhU4wiGfosg==} engines: {node: '>=12'} @@ -3498,6 +3528,12 @@ packages: cpu: [x64] os: [darwin] + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + '@esbuild/freebsd-arm64@0.17.6': resolution: {integrity: sha512-EnUwjRc1inT4ccZh4pB3v1cIhohE2S4YXlt1OvI7sw/+pD+dIE4smwekZlEPIwY6PhU6oDWwITrQQm5S2/iZgg==} engines: {node: '>=12'} @@ -3522,6 +3558,12 @@ packages: cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-x64@0.17.6': resolution: {integrity: sha512-Uh3HLWGzH6FwpviUcLMKPCbZUAFzv67Wj5MTwK6jn89b576SR2IbEp+tqUHTr8DIl0iDmBAf51MVaP7pw6PY5Q==} engines: {node: '>=12'} @@ -3546,6 +3588,12 @@ packages: cpu: [x64] os: [freebsd] + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + '@esbuild/linux-arm64@0.17.6': resolution: {integrity: sha512-bUR58IFOMJX523aDVozswnlp5yry7+0cRLCXDsxnUeQYJik1DukMY+apBsLOZJblpH+K7ox7YrKrHmJoWqVR9w==} engines: {node: '>=12'} @@ -3570,6 +3618,12 @@ packages: cpu: [arm64] os: [linux] + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm@0.17.6': resolution: {integrity: sha512-7YdGiurNt7lqO0Bf/U9/arrPWPqdPqcV6JCZda4LZgEn+PTQ5SMEI4MGR52Bfn3+d6bNEGcWFzlIxiQdS48YUw==} engines: {node: '>=12'} @@ -3594,6 +3648,12 @@ packages: cpu: [arm] os: [linux] + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + '@esbuild/linux-ia32@0.17.6': resolution: {integrity: sha512-ujp8uoQCM9FRcbDfkqECoARsLnLfCUhKARTP56TFPog8ie9JG83D5GVKjQ6yVrEVdMie1djH86fm98eY3quQkQ==} engines: {node: '>=12'} @@ -3618,6 +3678,12 @@ packages: cpu: [ia32] os: [linux] + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-loong64@0.17.6': resolution: {integrity: sha512-y2NX1+X/Nt+izj9bLoiaYB9YXT/LoaQFYvCkVD77G/4F+/yuVXYCWz4SE9yr5CBMbOxOfBcy/xFL4LlOeNlzYQ==} engines: {node: '>=12'} @@ -3642,6 +3708,12 @@ packages: cpu: [loong64] os: [linux] + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-mips64el@0.17.6': resolution: {integrity: sha512-09AXKB1HDOzXD+j3FdXCiL/MWmZP0Ex9eR8DLMBVcHorrWJxWmY8Nms2Nm41iRM64WVx7bA/JVHMv081iP2kUA==} engines: {node: '>=12'} @@ -3666,6 +3738,12 @@ packages: cpu: [mips64el] os: [linux] + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-ppc64@0.17.6': resolution: {integrity: sha512-AmLhMzkM8JuqTIOhxnX4ubh0XWJIznEynRnZAVdA2mMKE6FAfwT2TWKTwdqMG+qEaeyDPtfNoZRpJbD4ZBv0Tg==} engines: {node: '>=12'} @@ -3690,6 +3768,12 @@ packages: cpu: [ppc64] os: [linux] + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-riscv64@0.17.6': resolution: {integrity: sha512-Y4Ri62PfavhLQhFbqucysHOmRamlTVK10zPWlqjNbj2XMea+BOs4w6ASKwQwAiqf9ZqcY9Ab7NOU4wIgpxwoSQ==} engines: {node: '>=12'} @@ -3714,6 +3798,12 @@ packages: cpu: [riscv64] os: [linux] + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-s390x@0.17.6': resolution: {integrity: sha512-SPUiz4fDbnNEm3JSdUW8pBJ/vkop3M1YwZAVwvdwlFLoJwKEZ9L98l3tzeyMzq27CyepDQ3Qgoba44StgbiN5Q==} engines: {node: '>=12'} @@ -3738,6 +3828,12 @@ packages: cpu: [s390x] os: [linux] + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-x64@0.17.6': resolution: {integrity: sha512-a3yHLmOodHrzuNgdpB7peFGPx1iJ2x6m+uDvhP2CKdr2CwOaqEFMeSqYAHU7hG+RjCq8r2NFujcd/YsEsFgTGw==} engines: {node: '>=12'} @@ -3762,6 +3858,12 @@ packages: cpu: [x64] os: [linux] + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + '@esbuild/netbsd-x64@0.17.6': resolution: {integrity: sha512-EanJqcU/4uZIBreTrnbnre2DXgXSa+Gjap7ifRfllpmyAU7YMvaXmljdArptTHmjrkkKm9BK6GH5D5Yo+p6y5A==} engines: {node: '>=12'} @@ -3786,6 +3888,12 @@ packages: cpu: [x64] os: [netbsd] + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + '@esbuild/openbsd-x64@0.17.6': resolution: {integrity: sha512-xaxeSunhQRsTNGFanoOkkLtnmMn5QbA0qBhNet/XLVsc+OVkpIWPHcr3zTW2gxVU5YOHFbIHR9ODuaUdNza2Vw==} engines: {node: '>=12'} @@ -3810,6 +3918,12 @@ packages: cpu: [x64] os: [openbsd] + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + '@esbuild/sunos-x64@0.17.6': resolution: {integrity: sha512-gnMnMPg5pfMkZvhHee21KbKdc6W3GR8/JuE0Da1kjwpK6oiFU3nqfHuVPgUX2rsOx9N2SadSQTIYV1CIjYG+xw==} engines: {node: '>=12'} @@ -3834,6 +3948,12 @@ packages: cpu: [x64] os: [sunos] + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + '@esbuild/win32-arm64@0.17.6': resolution: {integrity: sha512-G95n7vP1UnGJPsVdKXllAJPtqjMvFYbN20e8RK8LVLhlTiSOH1sd7+Gt7rm70xiG+I5tM58nYgwWrLs6I1jHqg==} engines: {node: '>=12'} @@ -3858,6 +3978,12 @@ packages: cpu: [arm64] os: [win32] + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-ia32@0.17.6': resolution: {integrity: sha512-96yEFzLhq5bv9jJo5JhTs1gI+1cKQ83cUpyxHuGqXVwQtY5Eq54ZEsKs8veKtiKwlrNimtckHEkj4mRh4pPjsg==} engines: {node: '>=12'} @@ -3882,6 +4008,12 @@ packages: cpu: [ia32] os: [win32] + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-x64@0.17.6': resolution: {integrity: sha512-n6d8MOyUrNp6G4VSpRcgjs5xj4A91svJSaiwLIDWVWEsZtpN5FA9NlBbZHDmAJc2e8e6SF4tkBD3HAvPF+7igA==} engines: {node: '>=12'} @@ -3906,6 +4038,12 @@ packages: cpu: [x64] os: [win32] + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + '@eslint-community/eslint-utils@4.4.0': resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -4204,6 +4342,9 @@ packages: '@jridgewell/sourcemap-codec@1.4.15': resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} @@ -6829,81 +6970,161 @@ packages: cpu: [arm] os: [android] + '@rollup/rollup-android-arm-eabi@4.24.0': + resolution: {integrity: sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==} + cpu: [arm] + os: [android] + '@rollup/rollup-android-arm64@4.14.3': resolution: {integrity: sha512-eQK5JIi+POhFpzk+LnjKIy4Ks+pwJ+NXmPxOCSvOKSNRPONzKuUvWE+P9JxGZVxrtzm6BAYMaL50FFuPe0oWMQ==} cpu: [arm64] os: [android] + '@rollup/rollup-android-arm64@4.24.0': + resolution: {integrity: sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA==} + cpu: [arm64] + os: [android] + '@rollup/rollup-darwin-arm64@4.14.3': resolution: {integrity: sha512-Od4vE6f6CTT53yM1jgcLqNfItTsLt5zE46fdPaEmeFHvPs5SjZYlLpHrSiHEKR1+HdRfxuzXHjDOIxQyC3ptBA==} cpu: [arm64] os: [darwin] + '@rollup/rollup-darwin-arm64@4.24.0': + resolution: {integrity: sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA==} + cpu: [arm64] + os: [darwin] + '@rollup/rollup-darwin-x64@4.14.3': resolution: {integrity: sha512-0IMAO21axJeNIrvS9lSe/PGthc8ZUS+zC53O0VhF5gMxfmcKAP4ESkKOCwEi6u2asUrt4mQv2rjY8QseIEb1aw==} cpu: [x64] os: [darwin] + '@rollup/rollup-darwin-x64@4.24.0': + resolution: {integrity: sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ==} + cpu: [x64] + os: [darwin] + '@rollup/rollup-linux-arm-gnueabihf@4.14.3': resolution: {integrity: sha512-ge2DC7tHRHa3caVEoSbPRJpq7azhG+xYsd6u2MEnJ6XzPSzQsTKyXvh6iWjXRf7Rt9ykIUWHtl0Uz3T6yXPpKw==} cpu: [arm] os: [linux] + '@rollup/rollup-linux-arm-gnueabihf@4.24.0': + resolution: {integrity: sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA==} + cpu: [arm] + os: [linux] + '@rollup/rollup-linux-arm-musleabihf@4.14.3': resolution: {integrity: sha512-ljcuiDI4V3ySuc7eSk4lQ9wU8J8r8KrOUvB2U+TtK0TiW6OFDmJ+DdIjjwZHIw9CNxzbmXY39wwpzYuFDwNXuw==} cpu: [arm] os: [linux] + '@rollup/rollup-linux-arm-musleabihf@4.24.0': + resolution: {integrity: sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw==} + cpu: [arm] + os: [linux] + '@rollup/rollup-linux-arm64-gnu@4.14.3': resolution: {integrity: sha512-Eci2us9VTHm1eSyn5/eEpaC7eP/mp5n46gTRB3Aar3BgSvDQGJZuicyq6TsH4HngNBgVqC5sDYxOzTExSU+NjA==} cpu: [arm64] os: [linux] + '@rollup/rollup-linux-arm64-gnu@4.24.0': + resolution: {integrity: sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA==} + cpu: [arm64] + os: [linux] + '@rollup/rollup-linux-arm64-musl@4.14.3': resolution: {integrity: sha512-UrBoMLCq4E92/LCqlh+blpqMz5h1tJttPIniwUgOFJyjWI1qrtrDhhpHPuFxULlUmjFHfloWdixtDhSxJt5iKw==} cpu: [arm64] os: [linux] + '@rollup/rollup-linux-arm64-musl@4.24.0': + resolution: {integrity: sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw==} + cpu: [arm64] + os: [linux] + '@rollup/rollup-linux-powerpc64le-gnu@4.14.3': resolution: {integrity: sha512-5aRjvsS8q1nWN8AoRfrq5+9IflC3P1leMoy4r2WjXyFqf3qcqsxRCfxtZIV58tCxd+Yv7WELPcO9mY9aeQyAmw==} cpu: [ppc64] os: [linux] + '@rollup/rollup-linux-powerpc64le-gnu@4.24.0': + resolution: {integrity: sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw==} + cpu: [ppc64] + os: [linux] + '@rollup/rollup-linux-riscv64-gnu@4.14.3': resolution: {integrity: sha512-sk/Qh1j2/RJSX7FhEpJn8n0ndxy/uf0kI/9Zc4b1ELhqULVdTfN6HL31CDaTChiBAOgLcsJ1sgVZjWv8XNEsAQ==} cpu: [riscv64] os: [linux] + '@rollup/rollup-linux-riscv64-gnu@4.24.0': + resolution: {integrity: sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg==} + cpu: [riscv64] + os: [linux] + '@rollup/rollup-linux-s390x-gnu@4.14.3': resolution: {integrity: sha512-jOO/PEaDitOmY9TgkxF/TQIjXySQe5KVYB57H/8LRP/ux0ZoO8cSHCX17asMSv3ruwslXW/TLBcxyaUzGRHcqg==} cpu: [s390x] os: [linux] + '@rollup/rollup-linux-s390x-gnu@4.24.0': + resolution: {integrity: sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g==} + cpu: [s390x] + os: [linux] + '@rollup/rollup-linux-x64-gnu@4.14.3': resolution: {integrity: sha512-8ybV4Xjy59xLMyWo3GCfEGqtKV5M5gCSrZlxkPGvEPCGDLNla7v48S662HSGwRd6/2cSneMQWiv+QzcttLrrOA==} cpu: [x64] os: [linux] + '@rollup/rollup-linux-x64-gnu@4.24.0': + resolution: {integrity: sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==} + cpu: [x64] + os: [linux] + '@rollup/rollup-linux-x64-musl@4.14.3': resolution: {integrity: sha512-s+xf1I46trOY10OqAtZ5Rm6lzHre/UiLA1J2uOhCFXWkbZrJRkYBPO6FhvGfHmdtQ3Bx793MNa7LvoWFAm93bg==} cpu: [x64] os: [linux] + '@rollup/rollup-linux-x64-musl@4.24.0': + resolution: {integrity: sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ==} + cpu: [x64] + os: [linux] + '@rollup/rollup-win32-arm64-msvc@4.14.3': resolution: {integrity: sha512-+4h2WrGOYsOumDQ5S2sYNyhVfrue+9tc9XcLWLh+Kw3UOxAvrfOrSMFon60KspcDdytkNDh7K2Vs6eMaYImAZg==} cpu: [arm64] os: [win32] + '@rollup/rollup-win32-arm64-msvc@4.24.0': + resolution: {integrity: sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==} + cpu: [arm64] + os: [win32] + '@rollup/rollup-win32-ia32-msvc@4.14.3': resolution: {integrity: sha512-T1l7y/bCeL/kUwh9OD4PQT4aM7Bq43vX05htPJJ46RTI4r5KNt6qJRzAfNfM+OYMNEVBWQzR2Gyk+FXLZfogGw==} cpu: [ia32] os: [win32] + '@rollup/rollup-win32-ia32-msvc@4.24.0': + resolution: {integrity: sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ==} + cpu: [ia32] + os: [win32] + '@rollup/rollup-win32-x64-msvc@4.14.3': resolution: {integrity: sha512-/BypzV0H1y1HzgYpxqRaXGBRqfodgoBBCcsrujT6QRcakDQdfU+Lq9PENPh5jB4I44YWq+0C2eHsHya+nZY1sA==} cpu: [x64] os: [win32] + '@rollup/rollup-win32-x64-msvc@4.24.0': + resolution: {integrity: sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==} + cpu: [x64] + os: [win32] + '@rushstack/eslint-patch@1.10.2': resolution: {integrity: sha512-hw437iINopmQuxWPSUEvqE56NCPsiU8N4AYtfHmJFckclktzK9YQJieD3XkDCDH4OjL+C7zgPUh73R/nrcHrqw==} @@ -7682,12 +7903,6 @@ packages: '@types/braces@3.0.4': resolution: {integrity: sha512-0WR3b8eaISjEW7RpZnclONaLFDf7buaowRHdqLp4vLj54AsSAYWfh3DRbfiYJY9XDxMgx1B4sE1Afw2PGpuHOA==} - '@types/chai-subset@1.3.5': - resolution: {integrity: sha512-c2mPnw+xHtXDoHmdtcCXGwyLMiauiAyxWMzhGpqHC4nqI/Y5G2XhTampslK2rb59kpcuHon03UH8W6iYUzw88A==} - - '@types/chai@4.3.14': - resolution: {integrity: sha512-Wj71sXE4Q4AkGdG9Tvq1u/fquNz9EdG4LIJMwVVII7ashjD/8cf8fyIfJAjRr6YcsXnSE8cOGQPq1gqeR8z+3w==} - '@types/connect-history-api-fallback@1.5.4': resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} @@ -7739,6 +7954,9 @@ packages: '@types/estree@1.0.5': resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + '@types/expect@1.20.4': resolution: {integrity: sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==} @@ -8222,29 +8440,41 @@ packages: peerDependencies: vitest: 1.5.0 - '@vitest/expect@0.34.6': - resolution: {integrity: sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw==} - '@vitest/expect@1.3.1': resolution: {integrity: sha512-xofQFwIzfdmLLlHa6ag0dPV8YsnKOCP1KdAeVVh34vSjN2dcUiXYCD9htu/9eM7t8Xln4v03U9HLxLpPlsXdZw==} '@vitest/expect@1.5.0': resolution: {integrity: sha512-0pzuCI6KYi2SIC3LQezmxujU9RK/vwC1U9R0rLuGlNGcOuDWxqWKu6nUdFsX9tH1WU0SXtAxToOsEjeUn1s3hA==} - '@vitest/runner@0.34.6': - resolution: {integrity: sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ==} + '@vitest/expect@2.1.2': + resolution: {integrity: sha512-FEgtlN8mIUSEAAnlvn7mP8vzaWhEaAEvhSXCqrsijM7K6QqjB11qoRZYEd4AKSCDz8p0/+yH5LzhZ47qt+EyPg==} + + '@vitest/mocker@2.1.2': + resolution: {integrity: sha512-ExElkCGMS13JAJy+812fw1aCv2QO/LBK6CyO4WOPAzLTmve50gydOlWhgdBJPx2ztbADUq3JVI0C5U+bShaeEA==} + peerDependencies: + '@vitest/spy': 2.1.2 + msw: ^2.3.5 + vite: ^5.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/pretty-format@2.1.2': + resolution: {integrity: sha512-FIoglbHrSUlOJPDGIrh2bjX1sNars5HbxlcsFKCtKzu4+5lpsRhOCVcuzp0fEhAGHkPZRIXVNzPcpSlkoZ3LuA==} '@vitest/runner@1.5.0': resolution: {integrity: sha512-7HWwdxXP5yDoe7DTpbif9l6ZmDwCzcSIK38kTSIt6CFEpMjX4EpCgT6wUmS0xTXqMI6E/ONmfgRKmaujpabjZQ==} - '@vitest/snapshot@0.34.6': - resolution: {integrity: sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w==} + '@vitest/runner@2.1.2': + resolution: {integrity: sha512-UCsPtvluHO3u7jdoONGjOSil+uON5SSvU9buQh3lP7GgUXHp78guN1wRmZDX4wGK6J10f9NUtP6pO+SFquoMlw==} '@vitest/snapshot@1.5.0': resolution: {integrity: sha512-qpv3fSEuNrhAO3FpH6YYRdaECnnRjg9VxbhdtPwPRnzSfHVXnNzzrpX4cJxqiwgRMo7uRMWDFBlsBq4Cr+rO3A==} - '@vitest/spy@0.34.6': - resolution: {integrity: sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ==} + '@vitest/snapshot@2.1.2': + resolution: {integrity: sha512-xtAeNsZ++aRIYIUsek7VHzry/9AcxeULlegBvsdLncLmNCR6tR8SRjn8BbDP4naxtccvzTqZ+L1ltZlRCfBZFA==} '@vitest/spy@1.3.1': resolution: {integrity: sha512-xAcW+S099ylC9VLU7eZfdT9myV67Nor9w9zhf0mGCYJSO+zM2839tOeROTdikOi/8Qeusffvxb/MyBSOja1Uig==} @@ -8252,8 +8482,8 @@ packages: '@vitest/spy@1.5.0': resolution: {integrity: sha512-vu6vi6ew5N5MMHJjD5PoakMRKYdmIrNJmyfkhRpQt5d9Ewhw9nZ5Aqynbi3N61bvk9UvZ5UysMT6ayIrZ8GA9w==} - '@vitest/utils@0.34.6': - resolution: {integrity: sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A==} + '@vitest/spy@2.1.2': + resolution: {integrity: sha512-GSUi5zoy+abNRJwmFhBDC0yRuVUn8WMlQscvnbbXdKLXX9dE59YbfwXxuJ/mth6eeqIzofU8BB5XDo/Ns/qK2A==} '@vitest/utils@1.3.1': resolution: {integrity: sha512-d3Waie/299qqRyHTm2DjADeTaNdNSVsnwHPWrs20JMpjh6eiVq7ggggweO8rc4arhf6rRkWuHKwvxGvejUXZZQ==} @@ -8261,6 +8491,9 @@ packages: '@vitest/utils@1.5.0': resolution: {integrity: sha512-BDU0GNL8MWkRkSRdNFvCUCAVOeHaUlVJ9Tx0TYBZyXaaOTmGtUFObzchCivIBrIwKzvZA7A9sCejVhXM2aY98A==} + '@vitest/utils@2.1.2': + resolution: {integrity: sha512-zMO2KdYy6mx56btx9JvAqAZ6EyS3g49krMPPrgOp1yxGZiA93HumGk+bZ5jIZtOg5/VBYl5eBmGRQHqq4FG6uQ==} + '@volar/language-core@1.11.1': resolution: {integrity: sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==} @@ -8794,6 +9027,10 @@ packages: assertion-error@1.1.0: resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + assign-symbols@1.0.0: resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==} engines: {node: '>=0.10.0'} @@ -9437,6 +9674,10 @@ packages: resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} engines: {node: '>=4'} + chai@5.1.1: + resolution: {integrity: sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==} + engines: {node: '>=12'} + chalk@1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -9482,6 +9723,10 @@ packages: check-error@1.0.3: resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + check-error@2.1.1: + resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} + engines: {node: '>= 16'} + check-more-types@2.24.0: resolution: {integrity: sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==} engines: {node: '>= 0.8.0'} @@ -10286,6 +10531,15 @@ packages: supports-color: optional: true + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + debuglog@1.0.1: resolution: {integrity: sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==} deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. @@ -10340,6 +10594,10 @@ packages: resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} engines: {node: '>=6'} + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} + deep-equal@2.2.3: resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==} engines: {node: '>= 0.4'} @@ -10895,6 +11153,11 @@ packages: engines: {node: '>=12'} hasBin: true + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} + hasBin: true + escalade@3.1.2: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} @@ -13858,10 +14121,6 @@ packages: resolution: {integrity: sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==} engines: {node: '>= 12.13.0'} - local-pkg@0.4.3: - resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} - engines: {node: '>=14'} - local-pkg@0.5.0: resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} engines: {node: '>=14'} @@ -13989,6 +14248,9 @@ packages: loupe@2.3.7: resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + loupe@3.1.1: + resolution: {integrity: sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==} + lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} @@ -14037,6 +14299,9 @@ packages: magic-string@0.30.10: resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} + magic-string@0.30.11: + resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==} + magic-string@0.30.5: resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==} engines: {node: '>=12'} @@ -15433,6 +15698,10 @@ packages: pathval@1.1.1: resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + pathval@2.0.0: + resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} + engines: {node: '>= 14.16'} + pause-stream@0.0.11: resolution: {integrity: sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=} @@ -15461,6 +15730,9 @@ packages: picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + picocolors@1.1.0: + resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} + picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} @@ -15800,6 +16072,10 @@ packages: resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} engines: {node: ^10 || ^12 || >=14} + postcss@8.4.47: + resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} + engines: {node: ^10 || ^12 || >=14} + posthtml-parser@0.10.2: resolution: {integrity: sha512-PId6zZ/2lyJi9LiKfe+i2xv57oEjJgWbsHGGANwos5AvdQp98i6AtamAl8gzSVFGfQ43Glb5D614cvZf012VKg==} engines: {node: '>=12'} @@ -17000,6 +17276,11 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + rollup@4.24.0: + resolution: {integrity: sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + rrule@2.7.1: resolution: {integrity: sha512-4p20u/1U7WqR3Nb1hOUrm0u1nSI7sO93ZUVZEZ5HeF6Gr5OlJuyhwEGRvUHq8ZfrPsq5gfa5b9dqnUs/kPqpIw==} @@ -17445,6 +17726,10 @@ packages: resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} engines: {node: '>=0.10.0'} + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + source-map-resolve@0.5.3: resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} deprecated: See https://github.com/lydell/source-map-resolve#deprecated @@ -18147,18 +18432,32 @@ packages: tinybench@2.7.0: resolution: {integrity: sha512-Qgayeb106x2o4hNzNjsZEfFziw8IbKqtbXBjVh7VIZfBxfD5M4gWtpyx5+YTae2gJ6Y6Dz/KLepiv16RFeQWNA==} - tinypool@0.7.0: - resolution: {integrity: sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==} - engines: {node: '>=14.0.0'} + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + + tinyexec@0.3.0: + resolution: {integrity: sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg==} tinypool@0.8.4: resolution: {integrity: sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==} engines: {node: '>=14.0.0'} + tinypool@1.0.1: + resolution: {integrity: sha512-URZYihUbRPcGv95En+sz6MfghfIc2OJ1sv/RmhWZLouPY0/8Vo80viwPvg3dlaS9fuq7fQMEfgRRK7BBZThBEA==} + engines: {node: ^18.0.0 || >=20.0.0} + + tinyrainbow@1.2.0: + resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} + engines: {node: '>=14.0.0'} + tinyspy@2.2.1: resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==} engines: {node: '>=14.0.0'} + tinyspy@3.0.2: + resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} + engines: {node: '>=14.0.0'} + titleize@3.0.0: resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} engines: {node: '>=12'} @@ -18883,16 +19182,16 @@ packages: resolution: {integrity: sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==} engines: {node: '>= 0.10'} - vite-node@0.34.6: - resolution: {integrity: sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==} - engines: {node: '>=v14.18.0'} - hasBin: true - vite-node@1.5.0: resolution: {integrity: sha512-tV8h6gMj6vPzVCa7l+VGq9lwoJjW8Y79vst8QZZGiuRAfijU+EEWuc0kFpmndQrWhMMhet1jdSF+40KSZUqIIw==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true + vite-node@2.1.2: + resolution: {integrity: sha512-HPcGNN5g/7I2OtPjLqgOtCRu/qhVvBxTUD3qzitmL0SrG1cWFzxzhMDWussxSbrRYWqnKf8P2jiNhPMSN+ymsQ==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + vite-plugin-babel@1.2.0: resolution: {integrity: sha512-ltAnq535Ubf9sDbVCkztAdkwx5aQbNrwPFs+iZTJ5FaAhTdxjqmLGpxsAaRfJWEKBJ/kFf9KwMoTdArm0IRUUw==} peerDependencies: @@ -18993,6 +19292,37 @@ packages: terser: optional: true + vite@5.4.8: + resolution: {integrity: sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + vitefu@0.2.5: resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} peerDependencies: @@ -19006,22 +19336,22 @@ packages: peerDependencies: vitest: '>=0.16.0' - vitest@0.34.6: - resolution: {integrity: sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q==} - engines: {node: '>=v14.18.0'} + vitest@1.5.0: + resolution: {integrity: sha512-d8UKgR0m2kjdxDWX6911uwxout6GHS0XaGH1cksSIVVG8kRlE7G7aBw7myKQCvDI5dT4j7ZMa+l706BIORMDLw==} + engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' - '@vitest/browser': '*' - '@vitest/ui': '*' + '@types/node': ^18.0.0 || >=20.0.0 + '@vitest/browser': 1.5.0 + '@vitest/ui': 1.5.0 happy-dom: '*' jsdom: '*' - playwright: '*' - safaridriver: '*' - webdriverio: '*' peerDependenciesMeta: '@edge-runtime/vm': optional: true + '@types/node': + optional: true '@vitest/browser': optional: true '@vitest/ui': @@ -19030,22 +19360,16 @@ packages: optional: true jsdom: optional: true - playwright: - optional: true - safaridriver: - optional: true - webdriverio: - optional: true - vitest@1.5.0: - resolution: {integrity: sha512-d8UKgR0m2kjdxDWX6911uwxout6GHS0XaGH1cksSIVVG8kRlE7G7aBw7myKQCvDI5dT4j7ZMa+l706BIORMDLw==} + vitest@2.1.2: + resolution: {integrity: sha512-veNjLizOMkRrJ6xxb+pvxN6/QAWg95mzcRjtmkepXdN87FNfxAss9RKe2far/G9cQpipfgP2taqg0KiWsquj8A==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@types/node': ^18.0.0 || >=20.0.0 - '@vitest/browser': 1.5.0 - '@vitest/ui': 1.5.0 + '@vitest/browser': 2.1.2 + '@vitest/ui': 2.1.2 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -19337,6 +19661,11 @@ packages: engines: {node: '>=8'} hasBin: true + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + why@0.6.2: resolution: {integrity: sha512-7M43dnp3p+5HRMYS5ImUftNAQQSIZmwnAd8yyjEj3cpK+6nbBfikwTvxXRUFvydaPJmgu+EofRnJKNDMbIuzXg==} hasBin: true @@ -20722,6 +21051,9 @@ snapshots: '@esbuild/aix-ppc64@0.20.2': optional: true + '@esbuild/aix-ppc64@0.21.5': + optional: true + '@esbuild/android-arm64@0.17.6': optional: true @@ -20734,6 +21066,9 @@ snapshots: '@esbuild/android-arm64@0.20.2': optional: true + '@esbuild/android-arm64@0.21.5': + optional: true + '@esbuild/android-arm@0.17.6': optional: true @@ -20746,6 +21081,9 @@ snapshots: '@esbuild/android-arm@0.20.2': optional: true + '@esbuild/android-arm@0.21.5': + optional: true + '@esbuild/android-x64@0.17.6': optional: true @@ -20758,6 +21096,9 @@ snapshots: '@esbuild/android-x64@0.20.2': optional: true + '@esbuild/android-x64@0.21.5': + optional: true + '@esbuild/darwin-arm64@0.17.6': optional: true @@ -20770,6 +21111,9 @@ snapshots: '@esbuild/darwin-arm64@0.20.2': optional: true + '@esbuild/darwin-arm64@0.21.5': + optional: true + '@esbuild/darwin-x64@0.17.6': optional: true @@ -20782,6 +21126,9 @@ snapshots: '@esbuild/darwin-x64@0.20.2': optional: true + '@esbuild/darwin-x64@0.21.5': + optional: true + '@esbuild/freebsd-arm64@0.17.6': optional: true @@ -20794,6 +21141,9 @@ snapshots: '@esbuild/freebsd-arm64@0.20.2': optional: true + '@esbuild/freebsd-arm64@0.21.5': + optional: true + '@esbuild/freebsd-x64@0.17.6': optional: true @@ -20806,6 +21156,9 @@ snapshots: '@esbuild/freebsd-x64@0.20.2': optional: true + '@esbuild/freebsd-x64@0.21.5': + optional: true + '@esbuild/linux-arm64@0.17.6': optional: true @@ -20818,6 +21171,9 @@ snapshots: '@esbuild/linux-arm64@0.20.2': optional: true + '@esbuild/linux-arm64@0.21.5': + optional: true + '@esbuild/linux-arm@0.17.6': optional: true @@ -20830,6 +21186,9 @@ snapshots: '@esbuild/linux-arm@0.20.2': optional: true + '@esbuild/linux-arm@0.21.5': + optional: true + '@esbuild/linux-ia32@0.17.6': optional: true @@ -20842,6 +21201,9 @@ snapshots: '@esbuild/linux-ia32@0.20.2': optional: true + '@esbuild/linux-ia32@0.21.5': + optional: true + '@esbuild/linux-loong64@0.17.6': optional: true @@ -20854,6 +21216,9 @@ snapshots: '@esbuild/linux-loong64@0.20.2': optional: true + '@esbuild/linux-loong64@0.21.5': + optional: true + '@esbuild/linux-mips64el@0.17.6': optional: true @@ -20866,6 +21231,9 @@ snapshots: '@esbuild/linux-mips64el@0.20.2': optional: true + '@esbuild/linux-mips64el@0.21.5': + optional: true + '@esbuild/linux-ppc64@0.17.6': optional: true @@ -20878,6 +21246,9 @@ snapshots: '@esbuild/linux-ppc64@0.20.2': optional: true + '@esbuild/linux-ppc64@0.21.5': + optional: true + '@esbuild/linux-riscv64@0.17.6': optional: true @@ -20890,6 +21261,9 @@ snapshots: '@esbuild/linux-riscv64@0.20.2': optional: true + '@esbuild/linux-riscv64@0.21.5': + optional: true + '@esbuild/linux-s390x@0.17.6': optional: true @@ -20902,6 +21276,9 @@ snapshots: '@esbuild/linux-s390x@0.20.2': optional: true + '@esbuild/linux-s390x@0.21.5': + optional: true + '@esbuild/linux-x64@0.17.6': optional: true @@ -20914,6 +21291,9 @@ snapshots: '@esbuild/linux-x64@0.20.2': optional: true + '@esbuild/linux-x64@0.21.5': + optional: true + '@esbuild/netbsd-x64@0.17.6': optional: true @@ -20926,6 +21306,9 @@ snapshots: '@esbuild/netbsd-x64@0.20.2': optional: true + '@esbuild/netbsd-x64@0.21.5': + optional: true + '@esbuild/openbsd-x64@0.17.6': optional: true @@ -20938,6 +21321,9 @@ snapshots: '@esbuild/openbsd-x64@0.20.2': optional: true + '@esbuild/openbsd-x64@0.21.5': + optional: true + '@esbuild/sunos-x64@0.17.6': optional: true @@ -20950,6 +21336,9 @@ snapshots: '@esbuild/sunos-x64@0.20.2': optional: true + '@esbuild/sunos-x64@0.21.5': + optional: true + '@esbuild/win32-arm64@0.17.6': optional: true @@ -20962,6 +21351,9 @@ snapshots: '@esbuild/win32-arm64@0.20.2': optional: true + '@esbuild/win32-arm64@0.21.5': + optional: true + '@esbuild/win32-ia32@0.17.6': optional: true @@ -20974,6 +21366,9 @@ snapshots: '@esbuild/win32-ia32@0.20.2': optional: true + '@esbuild/win32-ia32@0.21.5': + optional: true + '@esbuild/win32-x64@0.17.6': optional: true @@ -20986,6 +21381,9 @@ snapshots: '@esbuild/win32-x64@0.20.2': optional: true + '@esbuild/win32-x64@0.21.5': + optional: true + '@eslint-community/eslint-utils@4.4.0(eslint@8.49.0)': dependencies: eslint: 8.49.0 @@ -21537,20 +21935,20 @@ snapshots: '@types/yargs': 17.0.32 chalk: 4.1.2 - '@joshwooding/vite-plugin-react-docgen-typescript@0.3.0(typescript@5.4.5)(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))': + '@joshwooding/vite-plugin-react-docgen-typescript@0.3.0(typescript@5.4.5)(vite@5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))': dependencies: glob: 7.2.3 glob-promise: 4.2.2(glob@7.2.3) magic-string: 0.27.0 react-docgen-typescript: 2.2.2(typescript@5.4.5) - vite: 5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) + vite: 5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) optionalDependencies: typescript: 5.4.5 '@jridgewell/gen-mapping@0.3.5': dependencies: '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.25 '@jridgewell/resolve-uri@3.1.2': {} @@ -21564,6 +21962,8 @@ snapshots: '@jridgewell/sourcemap-codec@1.4.15': {} + '@jridgewell/sourcemap-codec@1.5.0': {} + '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.2 @@ -22228,14 +22628,14 @@ snapshots: - '@parcel/core' - '@swc/helpers' - '@parcel/config-default@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.38)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.2.2)': + '@parcel/config-default@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.2.2)': dependencies: '@parcel/bundler-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) '@parcel/compressor-raw': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) '@parcel/core': 2.12.0(@swc/helpers@0.5.10) '@parcel/namer-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) '@parcel/optimizer-css': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/optimizer-htmlnano': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.38)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.2.2) + '@parcel/optimizer-htmlnano': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.2.2) '@parcel/optimizer-image': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) '@parcel/optimizer-svgo': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) '@parcel/optimizer-swc': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) @@ -22273,14 +22673,14 @@ snapshots: - typescript - uncss - '@parcel/config-default@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.38)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.2)': + '@parcel/config-default@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.2)': dependencies: '@parcel/bundler-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) '@parcel/compressor-raw': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) '@parcel/core': 2.12.0(@swc/helpers@0.5.10) '@parcel/namer-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) '@parcel/optimizer-css': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/optimizer-htmlnano': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.38)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.2) + '@parcel/optimizer-htmlnano': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.2) '@parcel/optimizer-image': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) '@parcel/optimizer-svgo': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) '@parcel/optimizer-swc': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) @@ -22318,14 +22718,14 @@ snapshots: - typescript - uncss - '@parcel/config-default@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.38)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.5)': + '@parcel/config-default@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.5)': dependencies: '@parcel/bundler-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) '@parcel/compressor-raw': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) '@parcel/core': 2.12.0(@swc/helpers@0.5.10) '@parcel/namer-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) '@parcel/optimizer-css': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/optimizer-htmlnano': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.38)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.5) + '@parcel/optimizer-htmlnano': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.5) '@parcel/optimizer-image': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) '@parcel/optimizer-svgo': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) '@parcel/optimizer-swc': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) @@ -22458,10 +22858,10 @@ snapshots: - '@parcel/core' - '@swc/helpers' - '@parcel/optimizer-htmlnano@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.38)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.2.2)': + '@parcel/optimizer-htmlnano@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.2.2)': dependencies: '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - htmlnano: 2.1.0(postcss@8.4.38)(relateurl@0.2.7)(srcset@4.0.0)(svgo@2.8.0)(terser@5.30.3)(typescript@5.2.2) + htmlnano: 2.1.0(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(svgo@2.8.0)(terser@5.30.3)(typescript@5.2.2) nullthrows: 1.1.1 posthtml: 0.16.6 svgo: 2.8.0 @@ -22477,10 +22877,10 @@ snapshots: - typescript - uncss - '@parcel/optimizer-htmlnano@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.38)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.2)': + '@parcel/optimizer-htmlnano@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.2)': dependencies: '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - htmlnano: 2.1.0(postcss@8.4.38)(relateurl@0.2.7)(srcset@4.0.0)(svgo@2.8.0)(terser@5.30.3)(typescript@5.4.2) + htmlnano: 2.1.0(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(svgo@2.8.0)(terser@5.30.3)(typescript@5.4.2) nullthrows: 1.1.1 posthtml: 0.16.6 svgo: 2.8.0 @@ -22496,10 +22896,10 @@ snapshots: - typescript - uncss - '@parcel/optimizer-htmlnano@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.38)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.5)': + '@parcel/optimizer-htmlnano@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.5)': dependencies: '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - htmlnano: 2.1.0(postcss@8.4.38)(relateurl@0.2.7)(srcset@4.0.0)(svgo@2.8.0)(terser@5.30.3)(typescript@5.4.5) + htmlnano: 2.1.0(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(svgo@2.8.0)(terser@5.30.3)(typescript@5.4.5) nullthrows: 1.1.1 posthtml: 0.16.6 svgo: 2.8.0 @@ -23090,12 +23490,12 @@ snapshots: - preact - supports-color - '@preact/preset-vite@2.8.2(@babel/core@7.24.4)(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))': + '@preact/preset-vite@2.8.2(@babel/core@7.24.4)(vite@5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))': dependencies: '@babel/core': 7.24.4 '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.24.4) '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.24.4) - '@prefresh/vite': 2.4.5(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) + '@prefresh/vite': 2.4.5(vite@5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) '@rollup/pluginutils': 4.2.1 babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.24.4) debug: 4.3.4(supports-color@8.1.1) @@ -23105,7 +23505,7 @@ snapshots: resolve: 1.22.8 source-map: 0.7.4 stack-trace: 1.0.0-pre2 - vite: 5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) + vite: 5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) transitivePeerDependencies: - preact - supports-color @@ -23131,14 +23531,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@prefresh/vite@2.4.5(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))': + '@prefresh/vite@2.4.5(vite@5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))': dependencies: '@babel/core': 7.24.4 '@prefresh/babel-plugin': 0.5.1 '@prefresh/core': 1.5.2(preact@10.20.2) '@prefresh/utils': 1.2.0 '@rollup/pluginutils': 4.2.1 - vite: 5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) + vite: 5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) transitivePeerDependencies: - supports-color optional: true @@ -25984,6 +26384,7 @@ snapshots: - less - lightningcss - sass + - sass-embedded - stylus - sugarss - supports-color @@ -26101,7 +26502,7 @@ snapshots: estree-walker: 2.0.2 glob: 8.1.0 is-reference: 1.2.1 - magic-string: 0.30.10 + magic-string: 0.30.11 optionalDependencies: rollup: 4.14.3 @@ -26109,7 +26510,7 @@ snapshots: dependencies: '@rollup/pluginutils': 5.1.0(rollup@4.14.3) estree-walker: 2.0.2 - magic-string: 0.30.10 + magic-string: 0.30.11 optionalDependencies: rollup: 4.14.3 @@ -26133,7 +26534,7 @@ snapshots: '@rollup/plugin-replace@5.0.5(rollup@4.14.3)': dependencies: '@rollup/pluginutils': 5.1.0(rollup@4.14.3) - magic-string: 0.30.10 + magic-string: 0.30.11 optionalDependencies: rollup: 4.14.3 @@ -26158,60 +26559,116 @@ snapshots: '@rollup/pluginutils@5.1.0(rollup@4.14.3)': dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 estree-walker: 2.0.2 picomatch: 2.3.1 optionalDependencies: rollup: 4.14.3 + '@rollup/pluginutils@5.1.0(rollup@4.24.0)': + dependencies: + '@types/estree': 1.0.6 + estree-walker: 2.0.2 + picomatch: 2.3.1 + optionalDependencies: + rollup: 4.24.0 + '@rollup/rollup-android-arm-eabi@4.14.3': optional: true + '@rollup/rollup-android-arm-eabi@4.24.0': + optional: true + '@rollup/rollup-android-arm64@4.14.3': optional: true + '@rollup/rollup-android-arm64@4.24.0': + optional: true + '@rollup/rollup-darwin-arm64@4.14.3': optional: true + '@rollup/rollup-darwin-arm64@4.24.0': + optional: true + '@rollup/rollup-darwin-x64@4.14.3': optional: true + '@rollup/rollup-darwin-x64@4.24.0': + optional: true + '@rollup/rollup-linux-arm-gnueabihf@4.14.3': optional: true + '@rollup/rollup-linux-arm-gnueabihf@4.24.0': + optional: true + '@rollup/rollup-linux-arm-musleabihf@4.14.3': optional: true + '@rollup/rollup-linux-arm-musleabihf@4.24.0': + optional: true + '@rollup/rollup-linux-arm64-gnu@4.14.3': optional: true + '@rollup/rollup-linux-arm64-gnu@4.24.0': + optional: true + '@rollup/rollup-linux-arm64-musl@4.14.3': optional: true + '@rollup/rollup-linux-arm64-musl@4.24.0': + optional: true + '@rollup/rollup-linux-powerpc64le-gnu@4.14.3': optional: true + '@rollup/rollup-linux-powerpc64le-gnu@4.24.0': + optional: true + '@rollup/rollup-linux-riscv64-gnu@4.14.3': optional: true + '@rollup/rollup-linux-riscv64-gnu@4.24.0': + optional: true + '@rollup/rollup-linux-s390x-gnu@4.14.3': optional: true + '@rollup/rollup-linux-s390x-gnu@4.24.0': + optional: true + '@rollup/rollup-linux-x64-gnu@4.14.3': optional: true + '@rollup/rollup-linux-x64-gnu@4.24.0': + optional: true + '@rollup/rollup-linux-x64-musl@4.14.3': optional: true + '@rollup/rollup-linux-x64-musl@4.24.0': + optional: true + '@rollup/rollup-win32-arm64-msvc@4.14.3': optional: true + '@rollup/rollup-win32-arm64-msvc@4.24.0': + optional: true + '@rollup/rollup-win32-ia32-msvc@4.14.3': optional: true + '@rollup/rollup-win32-ia32-msvc@4.24.0': + optional: true + '@rollup/rollup-win32-x64-msvc@4.14.3': optional: true + '@rollup/rollup-win32-x64-msvc@4.24.0': + optional: true + '@rushstack/eslint-patch@1.10.2': {} '@rushstack/node-core-library@4.0.2(@types/node@20.12.7)': @@ -26410,11 +26867,11 @@ snapshots: dependencies: '@storybook/global': 5.0.0 - '@storybook/addon-interactions@8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(vitest@1.5.0(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))': + '@storybook/addon-interactions@8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(vitest@2.1.2(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))': dependencies: '@storybook/global': 5.0.0 '@storybook/instrumenter': 8.0.8 - '@storybook/test': 8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(vitest@1.5.0(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) + '@storybook/test': 8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(vitest@2.1.2(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) '@storybook/types': 8.0.8 polished: 4.3.1 ts-dedent: 2.2.0 @@ -26557,7 +27014,7 @@ snapshots: - encoding - supports-color - '@storybook/builder-vite@8.0.8(@preact/preset-vite@2.8.2(@babel/core@7.24.4)(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)))(encoding@0.1.13)(typescript@5.4.5)(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))': + '@storybook/builder-vite@8.0.8(@preact/preset-vite@2.8.2(@babel/core@7.24.4)(vite@5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)))(encoding@0.1.13)(typescript@5.4.5)(vite@5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))': dependencies: '@storybook/channels': 8.0.8 '@storybook/client-logger': 8.0.8 @@ -26574,11 +27031,11 @@ snapshots: express: 4.19.2 find-cache-dir: 3.3.2 fs-extra: 11.2.0 - magic-string: 0.30.10 + magic-string: 0.30.11 ts-dedent: 2.2.0 - vite: 5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) + vite: 5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) optionalDependencies: - '@preact/preset-vite': 2.8.2(@babel/core@7.24.4)(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) + '@preact/preset-vite': 2.8.2(@babel/core@7.24.4)(vite@5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) typescript: 5.4.5 transitivePeerDependencies: - encoding @@ -27279,11 +27736,11 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@storybook/react-vite@8.0.8(@preact/preset-vite@2.8.2(@babel/core@7.24.4)(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)))(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@4.14.3)(typescript@5.4.5)(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))': + '@storybook/react-vite@8.0.8(@preact/preset-vite@2.8.2(@babel/core@7.24.4)(vite@5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)))(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@4.24.0)(typescript@5.4.5)(vite@5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))': dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.0(typescript@5.4.5)(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) - '@rollup/pluginutils': 5.1.0(rollup@4.14.3) - '@storybook/builder-vite': 8.0.8(@preact/preset-vite@2.8.2(@babel/core@7.24.4)(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)))(encoding@0.1.13)(typescript@5.4.5)(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.0(typescript@5.4.5)(vite@5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) + '@rollup/pluginutils': 5.1.0(rollup@4.24.0) + '@storybook/builder-vite': 8.0.8(@preact/preset-vite@2.8.2(@babel/core@7.24.4)(vite@5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)))(encoding@0.1.13)(typescript@5.4.5)(vite@5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) '@storybook/node-logger': 8.0.8 '@storybook/react': 8.0.8(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.4.5) find-up: 5.0.0 @@ -27293,7 +27750,7 @@ snapshots: react-dom: 18.2.0(react@18.2.0) resolve: 1.22.8 tsconfig-paths: 4.2.0 - vite: 5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) + vite: 5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) transitivePeerDependencies: - '@preact/preset-vite' - encoding @@ -27407,14 +27864,14 @@ snapshots: - encoding - supports-color - '@storybook/test@8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(vitest@1.5.0(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))': + '@storybook/test@8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(vitest@2.1.2(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))': dependencies: '@storybook/client-logger': 8.0.8 '@storybook/core-events': 8.0.8 '@storybook/instrumenter': 8.0.8 '@storybook/preview-api': 8.0.8 '@testing-library/dom': 9.3.4 - '@testing-library/jest-dom': 6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.12)(vitest@1.5.0(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) + '@testing-library/jest-dom': 6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.12)(vitest@2.1.2(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) '@testing-library/user-event': 14.5.2(@testing-library/dom@9.3.4) '@vitest/expect': 1.3.1 '@vitest/spy': 1.5.0 @@ -27721,7 +28178,7 @@ snapshots: lodash: 4.17.21 redent: 3.0.0 - '@testing-library/jest-dom@6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@26.6.3)(vitest@1.5.0(@types/node@20.12.7)(jsdom@16.7.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))': + '@testing-library/jest-dom@6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@26.6.3)(vitest@2.1.2(@types/node@20.12.7)(jsdom@16.7.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))': dependencies: '@adobe/css-tools': 4.3.3 '@babel/runtime': 7.20.6 @@ -27735,9 +28192,9 @@ snapshots: '@jest/globals': 29.7.0 '@types/jest': 29.5.12 jest: 26.6.3 - vitest: 1.5.0(@types/node@20.12.7)(jsdom@16.7.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) + vitest: 2.1.2(@types/node@20.12.7)(jsdom@16.7.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) - '@testing-library/jest-dom@6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.12)(vitest@1.5.0(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))': + '@testing-library/jest-dom@6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.12)(vitest@2.1.2(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))': dependencies: '@adobe/css-tools': 4.3.3 '@babel/runtime': 7.20.6 @@ -27750,7 +28207,21 @@ snapshots: optionalDependencies: '@jest/globals': 29.7.0 '@types/jest': 29.5.12 + vitest: 2.1.2(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) + + '@testing-library/jest-dom@6.4.2(vitest@1.5.0(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))': + dependencies: + '@adobe/css-tools': 4.3.3 + '@babel/runtime': 7.20.6 + aria-query: 5.3.0 + chalk: 3.0.0 + css.escape: 1.5.1 + dom-accessibility-api: 0.6.3 + lodash: 4.17.21 + redent: 3.0.0 + optionalDependencies: vitest: 1.5.0(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) + optional: true '@testing-library/react-hooks@8.0.1(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react-test-renderer@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: @@ -27823,7 +28294,7 @@ snapshots: '@types/acorn@4.0.6': dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 '@types/argparse@1.0.38': {} @@ -27861,12 +28332,6 @@ snapshots: '@types/braces@3.0.4': {} - '@types/chai-subset@1.3.5': - dependencies: - '@types/chai': 4.3.14 - - '@types/chai@4.3.14': {} - '@types/connect-history-api-fallback@1.5.4': dependencies: '@types/express-serve-static-core': 4.19.0 @@ -27907,17 +28372,19 @@ snapshots: '@types/eslint@8.56.10': dependencies: - '@types/estree': 0.0.51 + '@types/estree': 1.0.6 '@types/json-schema': 7.0.15 '@types/estree-jsx@1.0.5': dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 '@types/estree@0.0.51': {} '@types/estree@1.0.5': {} + '@types/estree@1.0.6': {} + '@types/expect@1.20.4': {} '@types/express-serve-static-core@4.19.0': @@ -28557,13 +29024,14 @@ snapshots: lodash: 4.17.21 mlly: 1.6.1 outdent: 0.8.0 - vite: 5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) + vite: 5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) vite-node: 1.5.0(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) transitivePeerDependencies: - '@types/node' - less - lightningcss - sass + - sass-embedded - stylus - sugarss - supports-color @@ -28639,7 +29107,18 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@1.5.0(vitest@1.5.0(@types/node@20.12.7)(jsdom@21.1.2)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))': + '@vitejs/plugin-react@4.2.1(vite@5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))': + dependencies: + '@babel/core': 7.24.4 + '@babel/plugin-transform-react-jsx-self': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-react-jsx-source': 7.24.1(@babel/core@7.24.4) + '@types/babel__core': 7.20.5 + react-refresh: 0.14.0 + vite: 5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) + transitivePeerDependencies: + - supports-color + + '@vitest/coverage-v8@1.5.0(vitest@2.1.2(@types/node@20.12.7)(jsdom@21.1.2)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 0.2.3 @@ -28654,11 +29133,11 @@ snapshots: std-env: 3.7.0 strip-literal: 2.1.0 test-exclude: 6.0.0 - vitest: 1.5.0(@types/node@20.12.7)(jsdom@21.1.2)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) + vitest: 2.1.2(@types/node@20.12.7)(jsdom@21.1.2)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@1.5.0(vitest@1.5.0(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))': + '@vitest/coverage-v8@1.5.0(vitest@2.1.2(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 0.2.3 @@ -28673,16 +29152,10 @@ snapshots: std-env: 3.7.0 strip-literal: 2.1.0 test-exclude: 6.0.0 - vitest: 1.5.0(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) + vitest: 2.1.2(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) transitivePeerDependencies: - supports-color - '@vitest/expect@0.34.6': - dependencies: - '@vitest/spy': 0.34.6 - '@vitest/utils': 0.34.6 - chai: 4.4.1 - '@vitest/expect@1.3.1': dependencies: '@vitest/spy': 1.3.1 @@ -28695,11 +29168,24 @@ snapshots: '@vitest/utils': 1.5.0 chai: 4.4.1 - '@vitest/runner@0.34.6': + '@vitest/expect@2.1.2': dependencies: - '@vitest/utils': 0.34.6 - p-limit: 4.0.0 - pathe: 1.1.2 + '@vitest/spy': 2.1.2 + '@vitest/utils': 2.1.2 + chai: 5.1.1 + tinyrainbow: 1.2.0 + + '@vitest/mocker@2.1.2(@vitest/spy@2.1.2)(vite@5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))': + dependencies: + '@vitest/spy': 2.1.2 + estree-walker: 3.0.3 + magic-string: 0.30.11 + optionalDependencies: + vite: 5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) + + '@vitest/pretty-format@2.1.2': + dependencies: + tinyrainbow: 1.2.0 '@vitest/runner@1.5.0': dependencies: @@ -28707,21 +29193,22 @@ snapshots: p-limit: 5.0.0 pathe: 1.1.2 - '@vitest/snapshot@0.34.6': + '@vitest/runner@2.1.2': dependencies: - magic-string: 0.30.10 + '@vitest/utils': 2.1.2 pathe: 1.1.2 - pretty-format: 29.7.0 '@vitest/snapshot@1.5.0': dependencies: - magic-string: 0.30.10 + magic-string: 0.30.11 pathe: 1.1.2 pretty-format: 29.7.0 - '@vitest/spy@0.34.6': + '@vitest/snapshot@2.1.2': dependencies: - tinyspy: 2.2.1 + '@vitest/pretty-format': 2.1.2 + magic-string: 0.30.11 + pathe: 1.1.2 '@vitest/spy@1.3.1': dependencies: @@ -28731,11 +29218,9 @@ snapshots: dependencies: tinyspy: 2.2.1 - '@vitest/utils@0.34.6': + '@vitest/spy@2.1.2': dependencies: - diff-sequences: 29.6.3 - loupe: 2.3.7 - pretty-format: 29.7.0 + tinyspy: 3.0.2 '@vitest/utils@1.3.1': dependencies: @@ -28751,6 +29236,12 @@ snapshots: loupe: 2.3.7 pretty-format: 29.7.0 + '@vitest/utils@2.1.2': + dependencies: + '@vitest/pretty-format': 2.1.2 + loupe: 3.1.1 + tinyrainbow: 1.2.0 + '@volar/language-core@1.11.1': dependencies: '@volar/source-map': 1.11.1 @@ -29410,6 +29901,8 @@ snapshots: assertion-error@1.1.0: {} + assertion-error@2.0.1: {} + assign-symbols@1.0.0: {} ast-types-flow@0.0.7: {} @@ -30404,6 +30897,14 @@ snapshots: pathval: 1.1.1 type-detect: 4.0.8 + chai@5.1.1: + dependencies: + assertion-error: 2.0.1 + check-error: 2.1.1 + deep-eql: 5.0.2 + loupe: 3.1.1 + pathval: 2.0.0 + chalk@1.1.3: dependencies: ansi-styles: 2.2.1 @@ -30448,6 +30949,8 @@ snapshots: dependencies: get-func-name: 2.0.2 + check-error@2.1.1: {} + check-more-types@2.24.0: {} chokidar@2.1.8: @@ -31401,6 +31904,10 @@ snapshots: optionalDependencies: supports-color: 8.1.1 + debug@4.3.7: + dependencies: + ms: 2.1.3 + debuglog@1.0.1: {} decamelize-keys@1.1.1: @@ -31442,6 +31949,8 @@ snapshots: dependencies: type-detect: 4.0.8 + deep-eql@5.0.2: {} + deep-equal@2.2.3: dependencies: array-buffer-byte-length: 1.0.1 @@ -31778,11 +32287,11 @@ snapshots: dts-buddy@0.2.5: dependencies: '@jridgewell/source-map': 0.3.6 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 globrex: 0.1.2 kleur: 4.1.5 locate-character: 3.0.0 - magic-string: 0.30.10 + magic-string: 0.30.11 sade: 1.8.1 tiny-glob: 0.2.9 ts-api-utils: 1.3.0(typescript@5.0.4) @@ -32155,6 +32664,32 @@ snapshots: '@esbuild/win32-ia32': 0.20.2 '@esbuild/win32-x64': 0.20.2 + esbuild@0.21.5: + optionalDependencies: + '@esbuild/aix-ppc64': 0.21.5 + '@esbuild/android-arm': 0.21.5 + '@esbuild/android-arm64': 0.21.5 + '@esbuild/android-x64': 0.21.5 + '@esbuild/darwin-arm64': 0.21.5 + '@esbuild/darwin-x64': 0.21.5 + '@esbuild/freebsd-arm64': 0.21.5 + '@esbuild/freebsd-x64': 0.21.5 + '@esbuild/linux-arm': 0.21.5 + '@esbuild/linux-arm64': 0.21.5 + '@esbuild/linux-ia32': 0.21.5 + '@esbuild/linux-loong64': 0.21.5 + '@esbuild/linux-mips64el': 0.21.5 + '@esbuild/linux-ppc64': 0.21.5 + '@esbuild/linux-riscv64': 0.21.5 + '@esbuild/linux-s390x': 0.21.5 + '@esbuild/linux-x64': 0.21.5 + '@esbuild/netbsd-x64': 0.21.5 + '@esbuild/openbsd-x64': 0.21.5 + '@esbuild/sunos-x64': 0.21.5 + '@esbuild/win32-arm64': 0.21.5 + '@esbuild/win32-ia32': 0.21.5 + '@esbuild/win32-x64': 0.21.5 + escalade@3.1.2: {} escape-goat@2.1.1: {} @@ -32838,7 +33373,7 @@ snapshots: estree-util-attach-comments@2.1.1: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 estree-util-build-jsx@2.2.2: dependencies: @@ -32869,7 +33404,7 @@ snapshots: estree-walker@3.0.3: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 esutils@2.0.3: {} @@ -34064,7 +34599,7 @@ snapshots: hast-util-to-estree@2.3.3: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 '@types/estree-jsx': 1.0.5 '@types/hast': 2.3.10 '@types/unist': 2.0.10 @@ -34179,13 +34714,13 @@ snapshots: tapable: 2.2.1 webpack: 5.90.1(esbuild@0.20.2) - htmlnano@2.1.0(postcss@8.4.38)(relateurl@0.2.7)(srcset@4.0.0)(svgo@2.8.0)(terser@5.30.3)(typescript@5.2.2): + htmlnano@2.1.0(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(svgo@2.8.0)(terser@5.30.3)(typescript@5.2.2): dependencies: cosmiconfig: 8.3.6(typescript@5.2.2) posthtml: 0.16.6 timsort: 0.3.0 optionalDependencies: - postcss: 8.4.38 + postcss: 8.4.47 relateurl: 0.2.7 srcset: 4.0.0 svgo: 2.8.0 @@ -34193,13 +34728,13 @@ snapshots: transitivePeerDependencies: - typescript - htmlnano@2.1.0(postcss@8.4.38)(relateurl@0.2.7)(srcset@4.0.0)(svgo@2.8.0)(terser@5.30.3)(typescript@5.4.2): + htmlnano@2.1.0(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(svgo@2.8.0)(terser@5.30.3)(typescript@5.4.2): dependencies: cosmiconfig: 8.3.6(typescript@5.4.2) posthtml: 0.16.6 timsort: 0.3.0 optionalDependencies: - postcss: 8.4.38 + postcss: 8.4.47 relateurl: 0.2.7 srcset: 4.0.0 svgo: 2.8.0 @@ -34207,13 +34742,13 @@ snapshots: transitivePeerDependencies: - typescript - htmlnano@2.1.0(postcss@8.4.38)(relateurl@0.2.7)(srcset@4.0.0)(svgo@2.8.0)(terser@5.30.3)(typescript@5.4.5): + htmlnano@2.1.0(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(svgo@2.8.0)(terser@5.30.3)(typescript@5.4.5): dependencies: cosmiconfig: 8.3.6(typescript@5.4.5) posthtml: 0.16.6 timsort: 0.3.0 optionalDependencies: - postcss: 8.4.38 + postcss: 8.4.47 relateurl: 0.2.7 srcset: 4.0.0 svgo: 2.8.0 @@ -34810,11 +35345,11 @@ snapshots: is-reference@1.2.1: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 is-reference@3.0.2: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 is-regex@1.1.4: dependencies: @@ -36450,8 +36985,6 @@ snapshots: loader-utils@3.2.1: {} - local-pkg@0.4.3: {} - local-pkg@0.5.0: dependencies: mlly: 1.6.1 @@ -36569,6 +37102,10 @@ snapshots: dependencies: get-func-name: 2.0.2 + loupe@3.1.1: + dependencies: + get-func-name: 2.0.2 + lower-case@2.0.2: dependencies: tslib: 2.6.2 @@ -36602,15 +37139,19 @@ snapshots: magic-string@0.27.0: dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 magic-string@0.30.10: dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 + + magic-string@0.30.11: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 magic-string@0.30.5: dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 magicast@0.3.4: dependencies: @@ -37140,7 +37681,7 @@ snapshots: micromark-extension-mdx-expression@1.0.8: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 micromark-factory-mdx-expression: 1.0.9 micromark-factory-space: 1.1.0 micromark-util-character: 1.2.0 @@ -37152,7 +37693,7 @@ snapshots: micromark-extension-mdx-jsx@1.0.5: dependencies: '@types/acorn': 4.0.6 - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 estree-util-is-identifier-name: 2.1.0 micromark-factory-mdx-expression: 1.0.9 micromark-factory-space: 1.1.0 @@ -37168,7 +37709,7 @@ snapshots: micromark-extension-mdxjs-esm@1.0.5: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 micromark-core-commonmark: 1.1.0 micromark-util-character: 1.2.0 micromark-util-events-to-acorn: 1.2.3 @@ -37217,7 +37758,7 @@ snapshots: micromark-factory-mdx-expression@1.0.9: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 micromark-util-character: 1.2.0 micromark-util-events-to-acorn: 1.2.3 micromark-util-symbol: 1.1.0 @@ -37333,7 +37874,7 @@ snapshots: micromark-util-events-to-acorn@1.2.3: dependencies: '@types/acorn': 4.0.6 - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 '@types/unist': 2.0.10 estree-util-visit: 1.2.1 micromark-util-symbol: 1.1.0 @@ -37862,7 +38403,7 @@ snapshots: klona: 2.0.6 knitwork: 1.1.0 listhen: 1.7.2 - magic-string: 0.30.10 + magic-string: 0.30.11 mime: 3.0.0 mlly: 1.6.1 mri: 1.2.0 @@ -38620,9 +39161,9 @@ snapshots: dot-case: 3.0.4 tslib: 2.6.2 - parcel@2.12.0(@swc/helpers@0.5.10)(postcss@8.4.38)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.2.2): + parcel@2.12.0(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.2.2): dependencies: - '@parcel/config-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.38)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.2.2) + '@parcel/config-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.2.2) '@parcel/core': 2.12.0(@swc/helpers@0.5.10) '@parcel/diagnostic': 2.12.0 '@parcel/events': 2.12.0 @@ -38647,9 +39188,9 @@ snapshots: - typescript - uncss - parcel@2.12.0(@swc/helpers@0.5.10)(postcss@8.4.38)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.2): + parcel@2.12.0(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.2): dependencies: - '@parcel/config-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.38)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.2) + '@parcel/config-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.2) '@parcel/core': 2.12.0(@swc/helpers@0.5.10) '@parcel/diagnostic': 2.12.0 '@parcel/events': 2.12.0 @@ -38674,9 +39215,9 @@ snapshots: - typescript - uncss - parcel@2.12.0(@swc/helpers@0.5.10)(postcss@8.4.38)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.5): + parcel@2.12.0(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.5): dependencies: - '@parcel/config-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.38)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.5) + '@parcel/config-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.5) '@parcel/core': 2.12.0(@swc/helpers@0.5.10) '@parcel/diagnostic': 2.12.0 '@parcel/events': 2.12.0 @@ -38818,6 +39359,8 @@ snapshots: pathval@1.1.1: {} + pathval@2.0.0: {} + pause-stream@0.0.11: dependencies: through: 2.3.8 @@ -38844,7 +39387,7 @@ snapshots: periscopic@3.1.0: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 estree-walker: 3.0.3 is-reference: 3.0.2 @@ -38852,6 +39395,8 @@ snapshots: picocolors@1.0.0: {} + picocolors@1.1.0: {} + picomatch@2.3.1: {} pidtree@0.6.0: {} @@ -38969,12 +39514,12 @@ snapshots: optionalDependencies: postcss: 8.4.31 - postcss-load-config@4.0.2(postcss@8.4.38): + postcss-load-config@4.0.2(postcss@8.4.47): dependencies: lilconfig: 3.1.1 yaml: 2.4.1 optionalDependencies: - postcss: 8.4.38 + postcss: 8.4.47 postcss-loader@4.3.0(postcss@8.4.31)(webpack@5.90.1(esbuild@0.20.2)): dependencies: @@ -39252,6 +39797,12 @@ snapshots: picocolors: 1.0.0 source-map-js: 1.2.0 + postcss@8.4.47: + dependencies: + nanoid: 3.3.7 + picocolors: 1.1.0 + source-map-js: 1.2.1 + posthtml-parser@0.10.2: dependencies: htmlparser2: 7.2.0 @@ -41241,6 +41792,28 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.14.3 fsevents: 2.3.3 + rollup@4.24.0: + dependencies: + '@types/estree': 1.0.6 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.24.0 + '@rollup/rollup-android-arm64': 4.24.0 + '@rollup/rollup-darwin-arm64': 4.24.0 + '@rollup/rollup-darwin-x64': 4.24.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.24.0 + '@rollup/rollup-linux-arm-musleabihf': 4.24.0 + '@rollup/rollup-linux-arm64-gnu': 4.24.0 + '@rollup/rollup-linux-arm64-musl': 4.24.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.24.0 + '@rollup/rollup-linux-riscv64-gnu': 4.24.0 + '@rollup/rollup-linux-s390x-gnu': 4.24.0 + '@rollup/rollup-linux-x64-gnu': 4.24.0 + '@rollup/rollup-linux-x64-musl': 4.24.0 + '@rollup/rollup-win32-arm64-msvc': 4.24.0 + '@rollup/rollup-win32-ia32-msvc': 4.24.0 + '@rollup/rollup-win32-x64-msvc': 4.24.0 + fsevents: 2.3.3 + rrule@2.7.1: dependencies: tslib: 2.6.2 @@ -41785,6 +42358,8 @@ snapshots: source-map-js@1.2.0: {} + source-map-js@1.2.1: {} + source-map-resolve@0.5.3: dependencies: atob: 2.1.2 @@ -42667,12 +43242,20 @@ snapshots: tinybench@2.7.0: {} - tinypool@0.7.0: {} + tinybench@2.9.0: {} + + tinyexec@0.3.0: {} tinypool@0.8.4: {} + tinypool@1.0.1: {} + + tinyrainbow@1.2.0: {} + tinyspy@2.2.1: {} + tinyspy@3.0.2: {} + titleize@3.0.0: {} tlds@1.203.1: {} @@ -42831,7 +43414,7 @@ snapshots: tslib@2.6.2: {} - tsup@8.0.2(@microsoft/api-extractor@7.43.0(@types/node@20.12.7))(@swc/core@1.4.16(@swc/helpers@0.5.10))(postcss@8.4.38)(typescript@5.4.2): + tsup@8.0.2(@microsoft/api-extractor@7.43.0(@types/node@20.12.7))(@swc/core@1.4.16(@swc/helpers@0.5.10))(postcss@8.4.47)(typescript@5.4.2): dependencies: bundle-require: 4.0.2(esbuild@0.19.12) cac: 6.7.14 @@ -42841,7 +43424,7 @@ snapshots: execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 - postcss-load-config: 4.0.2(postcss@8.4.38) + postcss-load-config: 4.0.2(postcss@8.4.47) resolve-from: 5.0.0 rollup: 4.14.3 source-map: 0.8.0-beta.0 @@ -42850,7 +43433,7 @@ snapshots: optionalDependencies: '@microsoft/api-extractor': 7.43.0(@types/node@20.12.7) '@swc/core': 1.4.16(@swc/helpers@0.5.10) - postcss: 8.4.38 + postcss: 8.4.47 typescript: 5.4.2 transitivePeerDependencies: - supports-color @@ -42978,7 +43561,7 @@ snapshots: dependencies: acorn: 8.11.3 estree-walker: 3.0.3 - magic-string: 0.30.10 + magic-string: 0.30.11 unplugin: 1.10.1 undici-types@5.26.5: {} @@ -43043,7 +43626,7 @@ snapshots: estree-walker: 3.0.3 fast-glob: 3.3.2 local-pkg: 0.5.0 - magic-string: 0.30.10 + magic-string: 0.30.11 mlly: 1.6.1 pathe: 1.1.2 pkg-types: 1.1.0 @@ -43525,36 +44108,36 @@ snapshots: remove-trailing-separator: 1.1.0 replace-ext: 1.0.1 - vite-node@0.34.6(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3): + vite-node@1.5.0(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3): dependencies: cac: 6.7.14 debug: 4.3.4(supports-color@8.1.1) - mlly: 1.6.1 pathe: 1.1.2 picocolors: 1.0.0 - vite: 5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) + vite: 5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) transitivePeerDependencies: - '@types/node' - less - lightningcss - sass + - sass-embedded - stylus - sugarss - supports-color - terser - vite-node@1.5.0(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3): + vite-node@2.1.2(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3): dependencies: cac: 6.7.14 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.7 pathe: 1.1.2 - picocolors: 1.0.0 - vite: 5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) + vite: 5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) transitivePeerDependencies: - '@types/node' - less - lightningcss - sass + - sass-embedded - stylus - sugarss - supports-color @@ -43565,10 +44148,10 @@ snapshots: '@babel/core': 7.24.4 vite: 5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) - vite-plugin-dts@3.8.3(@types/node@20.12.7)(rollup@4.14.3)(typescript@5.4.2)(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)): + vite-plugin-dts@3.8.3(@types/node@20.12.7)(rollup@4.24.0)(typescript@5.4.2)(vite@5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)): dependencies: '@microsoft/api-extractor': 7.43.0(@types/node@20.12.7) - '@rollup/pluginutils': 5.1.0(rollup@4.14.3) + '@rollup/pluginutils': 5.1.0(rollup@4.24.0) '@vue/language-core': 1.8.27(typescript@5.4.2) debug: 4.3.4(supports-color@8.1.1) kolorist: 1.8.0 @@ -43576,7 +44159,7 @@ snapshots: typescript: 5.4.2 vue-tsc: 1.8.27(typescript@5.4.2) optionalDependencies: - vite: 5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) + vite: 5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) transitivePeerDependencies: - '@types/node' - rollup @@ -43608,7 +44191,7 @@ snapshots: vite: 4.5.0(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) vitefu: 0.2.5(vite@4.5.0(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) optionalDependencies: - '@testing-library/jest-dom': 6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.12)(vitest@1.5.0(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) + '@testing-library/jest-dom': 6.4.2(vitest@1.5.0(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) transitivePeerDependencies: - supports-color @@ -43649,11 +44232,24 @@ snapshots: sass: 1.75.0 terser: 5.30.3 + vite@5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3): + dependencies: + esbuild: 0.21.5 + postcss: 8.4.47 + rollup: 4.24.0 + optionalDependencies: + '@types/node': 20.12.7 + fsevents: 2.3.3 + less: 3.11.1 + lightningcss: 1.24.1 + sass: 1.75.0 + terser: 5.30.3 + vitefu@0.2.5(vite@4.5.0(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)): optionalDependencies: vite: 4.5.0(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) - vitest-axe@0.1.0(vitest@1.5.0(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)): + vitest-axe@0.1.0(vitest@2.1.2(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)): dependencies: aria-query: 5.3.0 axe-core: 4.8.4 @@ -43661,143 +44257,144 @@ snapshots: dom-accessibility-api: 0.5.16 lodash-es: 4.17.21 redent: 3.0.0 - vitest: 1.5.0(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) + vitest: 2.1.2(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) - vitest@0.34.6(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3): + vitest@1.5.0(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3): dependencies: - '@types/chai': 4.3.14 - '@types/chai-subset': 1.3.5 - '@types/node': 20.12.7 - '@vitest/expect': 0.34.6 - '@vitest/runner': 0.34.6 - '@vitest/snapshot': 0.34.6 - '@vitest/spy': 0.34.6 - '@vitest/utils': 0.34.6 - acorn: 8.11.3 + '@vitest/expect': 1.5.0 + '@vitest/runner': 1.5.0 + '@vitest/snapshot': 1.5.0 + '@vitest/spy': 1.5.0 + '@vitest/utils': 1.5.0 acorn-walk: 8.3.2 - cac: 6.7.14 chai: 4.4.1 debug: 4.3.4(supports-color@8.1.1) - local-pkg: 0.4.3 + execa: 8.0.1 + local-pkg: 0.5.0 magic-string: 0.30.10 pathe: 1.1.2 picocolors: 1.0.0 std-env: 3.7.0 - strip-literal: 1.3.0 + strip-literal: 2.1.0 tinybench: 2.7.0 - tinypool: 0.7.0 - vite: 5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) - vite-node: 0.34.6(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) + tinypool: 0.8.4 + vite: 5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) + vite-node: 1.5.0(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) why-is-node-running: 2.2.2 optionalDependencies: + '@types/node': 20.12.7 jsdom: 22.1.0 transitivePeerDependencies: - less - lightningcss - sass + - sass-embedded - stylus - sugarss - supports-color - terser - vitest@1.5.0(@types/node@20.12.7)(jsdom@16.7.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3): - dependencies: - '@vitest/expect': 1.5.0 - '@vitest/runner': 1.5.0 - '@vitest/snapshot': 1.5.0 - '@vitest/spy': 1.5.0 - '@vitest/utils': 1.5.0 - acorn-walk: 8.3.2 - chai: 4.4.1 - debug: 4.3.4(supports-color@8.1.1) - execa: 8.0.1 - local-pkg: 0.5.0 - magic-string: 0.30.10 + vitest@2.1.2(@types/node@20.12.7)(jsdom@16.7.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3): + dependencies: + '@vitest/expect': 2.1.2 + '@vitest/mocker': 2.1.2(@vitest/spy@2.1.2)(vite@5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) + '@vitest/pretty-format': 2.1.2 + '@vitest/runner': 2.1.2 + '@vitest/snapshot': 2.1.2 + '@vitest/spy': 2.1.2 + '@vitest/utils': 2.1.2 + chai: 5.1.1 + debug: 4.3.7 + magic-string: 0.30.11 pathe: 1.1.2 - picocolors: 1.0.0 std-env: 3.7.0 - strip-literal: 2.1.0 - tinybench: 2.7.0 - tinypool: 0.8.4 - vite: 5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) - vite-node: 1.5.0(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) - why-is-node-running: 2.2.2 + tinybench: 2.9.0 + tinyexec: 0.3.0 + tinypool: 1.0.1 + tinyrainbow: 1.2.0 + vite: 5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) + vite-node: 2.1.2(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) + why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 20.12.7 jsdom: 16.7.0 transitivePeerDependencies: - less - lightningcss + - msw - sass + - sass-embedded - stylus - sugarss - supports-color - terser optional: true - vitest@1.5.0(@types/node@20.12.7)(jsdom@21.1.2)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3): - dependencies: - '@vitest/expect': 1.5.0 - '@vitest/runner': 1.5.0 - '@vitest/snapshot': 1.5.0 - '@vitest/spy': 1.5.0 - '@vitest/utils': 1.5.0 - acorn-walk: 8.3.2 - chai: 4.4.1 - debug: 4.3.4(supports-color@8.1.1) - execa: 8.0.1 - local-pkg: 0.5.0 - magic-string: 0.30.10 + vitest@2.1.2(@types/node@20.12.7)(jsdom@21.1.2)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3): + dependencies: + '@vitest/expect': 2.1.2 + '@vitest/mocker': 2.1.2(@vitest/spy@2.1.2)(vite@5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) + '@vitest/pretty-format': 2.1.2 + '@vitest/runner': 2.1.2 + '@vitest/snapshot': 2.1.2 + '@vitest/spy': 2.1.2 + '@vitest/utils': 2.1.2 + chai: 5.1.1 + debug: 4.3.7 + magic-string: 0.30.11 pathe: 1.1.2 - picocolors: 1.0.0 std-env: 3.7.0 - strip-literal: 2.1.0 - tinybench: 2.7.0 - tinypool: 0.8.4 - vite: 5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) - vite-node: 1.5.0(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) - why-is-node-running: 2.2.2 + tinybench: 2.9.0 + tinyexec: 0.3.0 + tinypool: 1.0.1 + tinyrainbow: 1.2.0 + vite: 5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) + vite-node: 2.1.2(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) + why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 20.12.7 jsdom: 21.1.2 transitivePeerDependencies: - less - lightningcss + - msw - sass + - sass-embedded - stylus - sugarss - supports-color - terser - vitest@1.5.0(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3): - dependencies: - '@vitest/expect': 1.5.0 - '@vitest/runner': 1.5.0 - '@vitest/snapshot': 1.5.0 - '@vitest/spy': 1.5.0 - '@vitest/utils': 1.5.0 - acorn-walk: 8.3.2 - chai: 4.4.1 - debug: 4.3.4(supports-color@8.1.1) - execa: 8.0.1 - local-pkg: 0.5.0 - magic-string: 0.30.10 + vitest@2.1.2(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3): + dependencies: + '@vitest/expect': 2.1.2 + '@vitest/mocker': 2.1.2(@vitest/spy@2.1.2)(vite@5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) + '@vitest/pretty-format': 2.1.2 + '@vitest/runner': 2.1.2 + '@vitest/snapshot': 2.1.2 + '@vitest/spy': 2.1.2 + '@vitest/utils': 2.1.2 + chai: 5.1.1 + debug: 4.3.7 + magic-string: 0.30.11 pathe: 1.1.2 - picocolors: 1.0.0 std-env: 3.7.0 - strip-literal: 2.1.0 - tinybench: 2.7.0 - tinypool: 0.8.4 - vite: 5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) - vite-node: 1.5.0(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) - why-is-node-running: 2.2.2 + tinybench: 2.9.0 + tinyexec: 0.3.0 + tinypool: 1.0.1 + tinyrainbow: 1.2.0 + vite: 5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) + vite-node: 2.1.2(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) + why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 20.12.7 jsdom: 22.1.0 transitivePeerDependencies: - less - lightningcss + - msw - sass + - sass-embedded - stylus - sugarss - supports-color @@ -44210,6 +44807,11 @@ snapshots: siginfo: 2.0.0 stackback: 0.0.2 + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + why@0.6.2: {} wide-align@1.1.5: From 1639de355d4fcb8c5a28e435db55abe8e68e9200 Mon Sep 17 00:00:00 2001 From: Maik Derstappen Date: Tue, 8 Oct 2024 10:30:09 +0300 Subject: [PATCH 056/209] Add chapter: theming a base theme (#6328) Co-authored-by: Steve Piercy --- docs/source/theming/index.md | 1 + docs/source/theming/theming-a-base-theme.md | 45 +++++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 docs/source/theming/theming-a-base-theme.md diff --git a/docs/source/theming/index.md b/docs/source/theming/index.md index dd0743403d..fe401772f3 100644 --- a/docs/source/theming/index.md +++ b/docs/source/theming/index.md @@ -19,4 +19,5 @@ theming-engine theming-strategy custom-styling using-third-party-themes +theming-a-base-theme ``` diff --git a/docs/source/theming/theming-a-base-theme.md b/docs/source/theming/theming-a-base-theme.md new file mode 100644 index 0000000000..6db6177e8e --- /dev/null +++ b/docs/source/theming/theming-a-base-theme.md @@ -0,0 +1,45 @@ +--- +html_meta: + "description": "Customize a base theme such as Volto Light Theme via SCSS." + "property=og:description": "Customize a base theme such as Volto Light Theme via SCSS." + "property=og:title": "Theming a base theme such as Volto Light Theme" + "keywords": "Volto, Plone, frontend, React, themes, Volto Light Theme" +--- + +# Customize a base theme + +You can customize a base theme for your add-on. +The following examples use [Volto Light Theme](https://github.com/kitconcept/volto-light-theme) as a base theme. + + +## File structure + +In your Volto add-on's {file}`src` folder, create a subfolder named {file}`theme`. +Inside {file}`theme` create two empty files named {file}`_main.scss` and {file}`_variables.scss`. +Refer to the following file system diagram. + +```text +src/ +├── components +├── index.js +└── theme + ├── _main.scss + └── _variables.scss +``` + + +## `_variables.scss` + +{file}`_variables.scss` is where you can override SCSS variables of the base theme. + +```scss +$text-color: #000; +$font-size: 18px; +$line-height: 24px; +``` + + +## `_main.scss` + +{file}`_main.scss` is where you should put all custom styles. +You can also include other SCSS or CSS files here. From 4fc90a797874f20eb4f9fe53789af1fbf6e06733 Mon Sep 17 00:00:00 2001 From: Victor Fernandez de Alba Date: Tue, 8 Oct 2024 10:03:03 +0200 Subject: [PATCH 057/209] Release @plone/types 1.0.0-alpha.20 --- packages/types/CHANGELOG.md | 6 ++++++ packages/types/news/6382.bugfix | 1 - packages/types/package.json | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) delete mode 100644 packages/types/news/6382.bugfix diff --git a/packages/types/CHANGELOG.md b/packages/types/CHANGELOG.md index 2b31ad63ca..559326a430 100644 --- a/packages/types/CHANGELOG.md +++ b/packages/types/CHANGELOG.md @@ -8,6 +8,12 @@ +## 1.0.0-alpha.20 (2024-10-08) + +### Bugfix + +- Fixed types for image fields and BlocksFormData @pnicolli @deodorhunter [#6382](https://github.com/plone/volto/issues/6382) + ## 1.0.0-alpha.19 (2024-07-30) ### Feature diff --git a/packages/types/news/6382.bugfix b/packages/types/news/6382.bugfix deleted file mode 100644 index 0079f7c9f7..0000000000 --- a/packages/types/news/6382.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fixed types for image fields and BlocksFormData @pnicolli @deodorhunter \ No newline at end of file diff --git a/packages/types/package.json b/packages/types/package.json index b4e06bc361..943bc6ba83 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -9,7 +9,7 @@ ], "funding": "https://github.com/sponsors/plone", "license": "MIT", - "version": "1.0.0-alpha.19", + "version": "1.0.0-alpha.20", "repository": { "type": "git", "url": "https://github.com/plone/volto.git" From e71c49ada2fcfb2c0913e09680a1408395928efc Mon Sep 17 00:00:00 2001 From: Victor Fernandez de Alba Date: Tue, 8 Oct 2024 10:03:49 +0200 Subject: [PATCH 058/209] Release @plone/components 2.0.0-alpha.13 --- packages/components/CHANGELOG.md | 10 ++++++++++ packages/components/news/6373.internal | 1 - packages/components/news/6382.bugfix | 1 - packages/components/package.json | 2 +- 4 files changed, 11 insertions(+), 3 deletions(-) delete mode 100644 packages/components/news/6373.internal delete mode 100644 packages/components/news/6382.bugfix diff --git a/packages/components/CHANGELOG.md b/packages/components/CHANGELOG.md index e169ad06c4..8061a4980c 100644 --- a/packages/components/CHANGELOG.md +++ b/packages/components/CHANGELOG.md @@ -8,6 +8,16 @@ +## 2.0.0-alpha.13 (2024-10-08) + +### Bugfix + +- Fixed flattenToAppURL types @pnicolli @deodorhunter [#6382](https://github.com/plone/volto/issues/6382) + +### Internal + +- Update Vite and vitest versions @sneridagh [#6373](https://github.com/plone/volto/issues/6373) + ## 2.0.0-alpha.12 (2024-10-03) ### Feature diff --git a/packages/components/news/6373.internal b/packages/components/news/6373.internal deleted file mode 100644 index 2b6d200183..0000000000 --- a/packages/components/news/6373.internal +++ /dev/null @@ -1 +0,0 @@ -Update Vite and vitest versions @sneridagh diff --git a/packages/components/news/6382.bugfix b/packages/components/news/6382.bugfix deleted file mode 100644 index 253caf924c..0000000000 --- a/packages/components/news/6382.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fixed flattenToAppURL types @pnicolli @deodorhunter \ No newline at end of file diff --git a/packages/components/package.json b/packages/components/package.json index f916aad927..a7faf85712 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -8,7 +8,7 @@ } ], "license": "MIT", - "version": "2.0.0-alpha.12", + "version": "2.0.0-alpha.13", "repository": { "type": "git", "url": "http://github.com/plone/components.git" From d18a4e5aec8f89c96aee8ca9581085d33b6d8866 Mon Sep 17 00:00:00 2001 From: Victor Fernandez de Alba Date: Tue, 8 Oct 2024 10:04:58 +0200 Subject: [PATCH 059/209] Release 18.0.0-alpha.45 --- docs/source/release-notes/index.md | 11 +++++++++++ packages/volto/CHANGELOG.md | 11 +++++++++++ packages/volto/news/6376.documentation | 2 -- packages/volto/news/6381.bugfix | 1 - packages/volto/package.json | 2 +- 5 files changed, 23 insertions(+), 4 deletions(-) delete mode 100644 packages/volto/news/6376.documentation delete mode 100644 packages/volto/news/6381.bugfix diff --git a/docs/source/release-notes/index.md b/docs/source/release-notes/index.md index df73c05fe0..e326bcf12e 100644 --- a/docs/source/release-notes/index.md +++ b/docs/source/release-notes/index.md @@ -17,6 +17,17 @@ myst: +## 18.0.0-alpha.45 (2024-10-08) + +### Bugfix + +- Added missing arg for `buildStyleClassNamesExtenders` @sneridagh [#6381](https://github.com/plone/volto/issues/6381) + +### Documentation + +- Removed pin on Vale for documentation spelling, grammar, and style checks, and upgrade to v3.x configuration. + Updated CI and `Makefile` to allow `VALEOPTS=--no-exit`. @stevepiercy [#6376](https://github.com/plone/volto/issues/6376) + ## 18.0.0-alpha.44 (2024-10-03) ### Feature diff --git a/packages/volto/CHANGELOG.md b/packages/volto/CHANGELOG.md index df73c05fe0..e326bcf12e 100644 --- a/packages/volto/CHANGELOG.md +++ b/packages/volto/CHANGELOG.md @@ -17,6 +17,17 @@ myst: +## 18.0.0-alpha.45 (2024-10-08) + +### Bugfix + +- Added missing arg for `buildStyleClassNamesExtenders` @sneridagh [#6381](https://github.com/plone/volto/issues/6381) + +### Documentation + +- Removed pin on Vale for documentation spelling, grammar, and style checks, and upgrade to v3.x configuration. + Updated CI and `Makefile` to allow `VALEOPTS=--no-exit`. @stevepiercy [#6376](https://github.com/plone/volto/issues/6376) + ## 18.0.0-alpha.44 (2024-10-03) ### Feature diff --git a/packages/volto/news/6376.documentation b/packages/volto/news/6376.documentation deleted file mode 100644 index c8dc22516d..0000000000 --- a/packages/volto/news/6376.documentation +++ /dev/null @@ -1,2 +0,0 @@ -Removed pin on Vale for documentation spelling, grammar, and style checks, and upgrade to v3.x configuration. -Updated CI and `Makefile` to allow `VALEOPTS=--no-exit`. @stevepiercy diff --git a/packages/volto/news/6381.bugfix b/packages/volto/news/6381.bugfix deleted file mode 100644 index af9e27803e..0000000000 --- a/packages/volto/news/6381.bugfix +++ /dev/null @@ -1 +0,0 @@ -Added missing arg for `buildStyleClassNamesExtenders` @sneridagh diff --git a/packages/volto/package.json b/packages/volto/package.json index a445b3144f..7fb692b691 100644 --- a/packages/volto/package.json +++ b/packages/volto/package.json @@ -9,7 +9,7 @@ } ], "license": "MIT", - "version": "18.0.0-alpha.44", + "version": "18.0.0-alpha.45", "repository": { "type": "git", "url": "git@github.com:plone/volto.git" From 436c45d457470355fcfd64ef7a74f86745b2b9d8 Mon Sep 17 00:00:00 2001 From: Steve Piercy Date: Tue, 8 Oct 2024 22:25:11 -0700 Subject: [PATCH 060/209] Fix syntax of `html_meta` under `myst` field. (#6385) --- docs/source/theming/theming-a-base-theme.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/docs/source/theming/theming-a-base-theme.md b/docs/source/theming/theming-a-base-theme.md index 6db6177e8e..f3730dead1 100644 --- a/docs/source/theming/theming-a-base-theme.md +++ b/docs/source/theming/theming-a-base-theme.md @@ -1,9 +1,10 @@ --- -html_meta: - "description": "Customize a base theme such as Volto Light Theme via SCSS." - "property=og:description": "Customize a base theme such as Volto Light Theme via SCSS." - "property=og:title": "Theming a base theme such as Volto Light Theme" - "keywords": "Volto, Plone, frontend, React, themes, Volto Light Theme" +myst: + html_meta: + "description": "Customize a base theme such as Volto Light Theme via SCSS." + "property=og:description": "Customize a base theme such as Volto Light Theme via SCSS." + "property=og:title": "Theming a base theme such as Volto Light Theme" + "keywords": "Volto, Plone, frontend, React, themes, Volto Light Theme" --- # Customize a base theme From 0dcfb588ec566a40d609fab1cb77e821c632bf08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Fern=C3=A1ndez=20de=20Alba?= Date: Wed, 9 Oct 2024 15:31:27 +0200 Subject: [PATCH 061/209] Added rule for ESlint to detect missing key property in iterators. (#6387) Co-authored-by: Steve Piercy --- docs/source/upgrade-guide/index.md | 6 +++ packages/volto/.eslintrc | 40 +++++++++---------- packages/volto/news/6387.breaking | 1 + .../components/manage/Contents/Contents.jsx | 2 + .../Controlpanels/DatabaseInformation.jsx | 1 + .../Controlpanels/UpgradeControlPanel.jsx | 1 + .../Users/UserGroupMembershipMatrix.jsx | 26 ++++++------ .../manage/Pluggable/Pluggable.test.js | 6 +-- .../manage/Sidebar/ObjectBrowserNav.jsx | 1 + .../src/components/manage/Toolbar/More.jsx | 4 +- .../components/theme/Icon/Icon.stories.jsx | 1 + .../components/theme/Widgets/ArrayWidget.jsx | 4 +- packages/volto/src/helpers/Html/Html.jsx | 1 + 13 files changed, 54 insertions(+), 40 deletions(-) create mode 100644 packages/volto/news/6387.breaking diff --git a/docs/source/upgrade-guide/index.md b/docs/source/upgrade-guide/index.md index bd0b128418..39e374ea36 100644 --- a/docs/source/upgrade-guide/index.md +++ b/docs/source/upgrade-guide/index.md @@ -503,6 +503,12 @@ razzle.config.js The change involves adding a new `paths` argument to the `customModifyWebpackConfig` function. +### Added rule for ESlint to detect missing key property in iterators. + +The `react/jsx-key` rule has been enabled in ESlint for catching missing `key` in JSX iterators. +You might catch some violations in your project or add-on code after running ESlint. +Adding the missing `key` property whenever the violation is reported will fix it. + (volto-upgrade-guide-17.x.x)= ## Upgrading to Volto 17.x.x diff --git a/packages/volto/.eslintrc b/packages/volto/.eslintrc index 3e28cbddef..4e24e2badd 100644 --- a/packages/volto/.eslintrc +++ b/packages/volto/.eslintrc @@ -6,29 +6,30 @@ "browser": true, "node": true, "mocha": true, - "jasmine": true + "jasmine": true, }, "parser": "@babel/eslint-parser", "parserOptions": { "ecmaVersion": 6, "sourceType": "module", "ecmaFeatures": { - "legacyDecorators": true - } + "legacyDecorators": true, + }, }, "rules": { "import/no-unresolved": 1, + "react/jsx-key": [2, { "checkFragmentShorthand": true }], "no-alert": 1, "no-console": 1, "no-debugger": 1, "prettier/prettier": [ "error", - { "trailingComma": "all", "singleQuote": true } + { "trailingComma": "all", "singleQuote": true }, ], "react-hooks/rules-of-hooks": "error", "react-hooks/exhaustive-deps": "warn", "react/react-in-jsx-scope": "off", - "jsx-a11y/label-has-associated-control": "off" + "jsx-a11y/label-has-associated-control": "off", }, "settings": { "import/resolver": { @@ -39,18 +40,18 @@ ["@plone/registry", "../registry/src"], ["@plone/types", "../types"], ["@package", "./src"], - ["@root", "./src"] + ["@root", "./src"], ], - "extensions": [".js", ".jsx", ".ts", ".tsx", ".json"] + "extensions": [".js", ".jsx", ".ts", ".tsx", ".json"], }, "babel-plugin-root-import": { - "rootPathSuffix": "src" - } + "rootPathSuffix": "src", + }, }, "import/core-modules": ["load-volto-addons"], "react": { - "version": "detect" - } + "version": "detect", + }, }, "overrides": [ { @@ -60,17 +61,14 @@ // Re-add it if at some point, we stop relying on it "extends": ["react-app", "prettier", "plugin:jsx-a11y/recommended"], "plugins": ["prettier", "react-hooks", "jsx-a11y"], - "parser": "@typescript-eslint/parser" + "parser": "@typescript-eslint/parser", }, { - "files": [ - "**/*.stories.js", - "**/*.stories.jsx" - ], + "files": ["**/*.stories.js", "**/*.stories.jsx"], "rules": { - "import/no-anonymous-default-export": "off" - } - } + "import/no-anonymous-default-export": "off", + }, + }, ], "globals": { "root": true, @@ -86,6 +84,6 @@ "Cypress": true, "jest": true, "socket": true, - "webpackIsomorphicTools": true - } + "webpackIsomorphicTools": true, + }, } diff --git a/packages/volto/news/6387.breaking b/packages/volto/news/6387.breaking new file mode 100644 index 0000000000..af52e7b23f --- /dev/null +++ b/packages/volto/news/6387.breaking @@ -0,0 +1 @@ +Added `react/jsx-key` rule for ESlint to detect missing key property in iterators. @sneridagh diff --git a/packages/volto/src/components/manage/Contents/Contents.jsx b/packages/volto/src/components/manage/Contents/Contents.jsx index 58431e2dce..20de9fc406 100644 --- a/packages/volto/src/components/manage/Contents/Contents.jsx +++ b/packages/volto/src/components/manage/Contents/Contents.jsx @@ -1397,6 +1397,7 @@ class Contents extends Component { {breach.targets .map((target) => ( ( diff --git a/packages/volto/src/components/manage/Controlpanels/DatabaseInformation.jsx b/packages/volto/src/components/manage/Controlpanels/DatabaseInformation.jsx index 00d0a1e238..c79f9fb0a4 100644 --- a/packages/volto/src/components/manage/Controlpanels/DatabaseInformation.jsx +++ b/packages/volto/src/components/manage/Controlpanels/DatabaseInformation.jsx @@ -150,6 +150,7 @@ const DatabaseInformation = () => { {databaseInformation.cache_detail_length.map((item) => ( + // eslint-disable-next-line react/jsx-key {item.connection} {item.ngsize} diff --git a/packages/volto/src/components/manage/Controlpanels/UpgradeControlPanel.jsx b/packages/volto/src/components/manage/Controlpanels/UpgradeControlPanel.jsx index d616d4fad9..a4d6514319 100644 --- a/packages/volto/src/components/manage/Controlpanels/UpgradeControlPanel.jsx +++ b/packages/volto/src/components/manage/Controlpanels/UpgradeControlPanel.jsx @@ -251,6 +251,7 @@ class UpgradeControlPanel extends Component { {map(upgradeSteps, (upgradeGroup) => [ , diff --git a/packages/volto/src/components/manage/Controlpanels/Users/UserGroupMembershipMatrix.jsx b/packages/volto/src/components/manage/Controlpanels/Users/UserGroupMembershipMatrix.jsx index 371acfd32c..9fa184ce80 100644 --- a/packages/volto/src/components/manage/Controlpanels/Users/UserGroupMembershipMatrix.jsx +++ b/packages/volto/src/components/manage/Controlpanels/Users/UserGroupMembershipMatrix.jsx @@ -188,18 +188,20 @@ const UserGroupMembershipMatrix = ({ many_users, many_groups }) => { {(!many_groups || query_group_filter.length > 1) && filter_options?.map((filter_option) => ( - - { - onSelectOptionHandler(filter_option, checked); - }} - /> - + + + { + onSelectOptionHandler(filter_option, checked); + }} + /> + + ))}

    ', () => {
      - {pluggables.map((p) => ( - <>{p()} + {pluggables.map((p, index) => ( + {p()} ))}
    @@ -92,7 +92,7 @@ describe('', () => {
      {pluggables.map((p) => ( - <>{p()} + {p()} ))}
    diff --git a/packages/volto/src/components/manage/Sidebar/ObjectBrowserNav.jsx b/packages/volto/src/components/manage/Sidebar/ObjectBrowserNav.jsx index 3c837d0e5a..bcecef9bda 100644 --- a/packages/volto/src/components/manage/Sidebar/ObjectBrowserNav.jsx +++ b/packages/volto/src/components/manage/Sidebar/ObjectBrowserNav.jsx @@ -51,6 +51,7 @@ const ObjectBrowserNav = ({ currentSearchResults.items.map((item) => view === 'icons' ? (
  • diff --git a/packages/volto/src/components/manage/Toolbar/More.jsx b/packages/volto/src/components/manage/Toolbar/More.jsx index a40a74fe9f..cef48d19cc 100644 --- a/packages/volto/src/components/manage/Toolbar/More.jsx +++ b/packages/volto/src/components/manage/Toolbar/More.jsx @@ -311,8 +311,8 @@ const More = (props) => {
      - {pluggables.map((p) => ( - <>{p()} + {pluggables.map((p, index) => ( + {p()} ))}
    diff --git a/packages/volto/src/components/theme/Icon/Icon.stories.jsx b/packages/volto/src/components/theme/Icon/Icon.stories.jsx index 556247262e..7fde14067b 100644 --- a/packages/volto/src/components/theme/Icon/Icon.stories.jsx +++ b/packages/volto/src/components/theme/Icon/Icon.stories.jsx @@ -43,6 +43,7 @@ const iconElements = Object.keys(icons).map((iconName) => { const icon = icons[iconName]; return (
    value ? ( {value.map((item, key) => ( - <> + {key ? ', ' : ''} {children ? children(item.title || item.token || item) : item.title || item.token || item} - + ))} ) : ( diff --git a/packages/volto/src/helpers/Html/Html.jsx b/packages/volto/src/helpers/Html/Html.jsx index c0b5e5d634..7ecd78135e 100644 --- a/packages/volto/src/helpers/Html/Html.jsx +++ b/packages/volto/src/helpers/Html/Html.jsx @@ -158,6 +158,7 @@ class Html extends Component { }} > {extractor.getStyleElements().map((elem) => ( + // eslint-disable-next-line react/jsx-key
  • - {userHasRoles(user, ['Site Administrator', 'Manager']) && ( + {siteSetupAction && (
  • diff --git a/packages/volto/src/components/manage/Toolbar/PersonalTools.test.jsx b/packages/volto/src/components/manage/Toolbar/PersonalTools.test.jsx index 5a52a74cc2..4dd3122e7c 100644 --- a/packages/volto/src/components/manage/Toolbar/PersonalTools.test.jsx +++ b/packages/volto/src/components/manage/Toolbar/PersonalTools.test.jsx @@ -29,6 +29,16 @@ describe('Toolbar Personal Tools component', () => { is_folderish: true, }, }, + actions: { + actions: { + user: [ + { + id: 'plone_setup', + title: 'Site Setup', + }, + ], + }, + }, intl: { locale: 'en', messages: {}, @@ -70,6 +80,16 @@ describe('Toolbar Personal Tools component', () => { is_folderish: true, }, }, + actions: { + actions: { + user: [ + { + id: 'plone_setup', + title: 'Site Setup', + }, + ], + }, + }, intl: { locale: 'en', messages: {}, @@ -112,6 +132,57 @@ describe('Toolbar Personal Tools component', () => { is_folderish: true, }, }, + actions: { + actions: { + user: [ + { + id: 'plone_setup', + title: 'Site Setup', + }, + ], + }, + }, + intl: { + locale: 'en', + messages: {}, + }, + }); + const component = renderer.create( + + + + {}} + theToolbar={{ + current: { getBoundingClientRect: () => ({ width: '320' }) }, + }} + /> + + + , + ); + const json = component.toJSON(); + expect(json).toMatchSnapshot(); + }); + + it('renders an Toolbar Personal Tools component without Site Setup access', () => { + const store = mockStore({ + users: { + user: { + fullname: 'regular_user', + email: 'user@plone.org', + roles: ['Member'], + }, + }, + userSession: { + token: jwt.sign({ sub: 'regular_user' }, 'secret'), + }, + content: { + data: { + '@type': 'Folder', + is_folderish: true, + }, + }, intl: { locale: 'en', messages: {}, diff --git a/packages/volto/src/components/manage/Toolbar/__snapshots__/PersonalTools.test.jsx.snap b/packages/volto/src/components/manage/Toolbar/__snapshots__/PersonalTools.test.jsx.snap index 5e7695369b..e7229cadcb 100644 --- a/packages/volto/src/components/manage/Toolbar/__snapshots__/PersonalTools.test.jsx.snap +++ b/packages/volto/src/components/manage/Toolbar/__snapshots__/PersonalTools.test.jsx.snap @@ -513,3 +513,153 @@ exports[`Toolbar Personal Tools component renders an Toolbar Personal Tools comp
  • `; + +exports[`Toolbar Personal Tools component renders an Toolbar Personal Tools component without Site Setup access 1`] = ` + +`; From 7694b0f232cc6e23d760bc316e92e9df1a133362 Mon Sep 17 00:00:00 2001 From: David Glick Date: Tue, 22 Oct 2024 09:04:27 -0700 Subject: [PATCH 090/209] Aliases control panel: Improve layout and add CSV upload (#6421) --- .../core/controlpanels/aliasesControlPanel.js | 2 + .../volto/locales/ca/LC_MESSAGES/volto.po | 53 +- .../volto/locales/de/LC_MESSAGES/volto.po | 53 +- .../volto/locales/en/LC_MESSAGES/volto.po | 53 +- .../volto/locales/es/LC_MESSAGES/volto.po | 53 +- .../volto/locales/eu/LC_MESSAGES/volto.po | 53 +- .../volto/locales/fi/LC_MESSAGES/volto.po | 53 +- .../volto/locales/fr/LC_MESSAGES/volto.po | 53 +- .../volto/locales/hi/LC_MESSAGES/volto.po | 53 +- .../volto/locales/it/LC_MESSAGES/volto.po | 53 +- .../volto/locales/ja/LC_MESSAGES/volto.po | 53 +- .../volto/locales/nl/LC_MESSAGES/volto.po | 53 +- .../volto/locales/pt/LC_MESSAGES/volto.po | 53 +- .../volto/locales/pt_BR/LC_MESSAGES/volto.po | 53 +- .../volto/locales/ro/LC_MESSAGES/volto.po | 53 +- packages/volto/locales/volto.pot | 55 +- .../volto/locales/zh_CN/LC_MESSAGES/volto.po | 53 +- packages/volto/news/6421.bugfix | 1 + packages/volto/news/6421.feature.1 | 3 + packages/volto/news/6421.feature.2 | 1 + packages/volto/src/actions/aliases/aliases.js | 18 + .../manage/Controlpanels/Aliases.jsx | 685 ++++++++++------ .../__snapshots__/Aliases.test.jsx.snap | 731 +++++++++--------- .../src/components/manage/Form/ModalForm.jsx | 4 +- packages/volto/src/constants/ActionTypes.js | 1 + packages/volto/src/helpers/Api/Api.js | 13 +- packages/volto/src/middleware/api.js | 3 + 27 files changed, 1578 insertions(+), 734 deletions(-) create mode 100644 packages/volto/news/6421.bugfix create mode 100644 packages/volto/news/6421.feature.1 create mode 100644 packages/volto/news/6421.feature.2 diff --git a/packages/volto/cypress/tests/core/controlpanels/aliasesControlPanel.js b/packages/volto/cypress/tests/core/controlpanels/aliasesControlPanel.js index d944c24c3c..643deb064e 100644 --- a/packages/volto/cypress/tests/core/controlpanels/aliasesControlPanel.js +++ b/packages/volto/cypress/tests/core/controlpanels/aliasesControlPanel.js @@ -12,8 +12,10 @@ describe('Add a new alias from control panel interface', () => { }); it('adds a new alias', () => { cy.visit('/controlpanel/aliases'); + cy.get('#add-alt-url').click(); cy.get('#alternative-url-input').type('/alturl'); cy.get('#target-url-input').type('/my-page'); cy.get('#submit-alias').click(); + cy.get('.toast-inner-content').contains('Alias has been added'); }); }); diff --git a/packages/volto/locales/ca/LC_MESSAGES/volto.po b/packages/volto/locales/ca/LC_MESSAGES/volto.po index b17def638e..0c8df0d970 100644 --- a/packages/volto/locales/ca/LC_MESSAGES/volto.po +++ b/packages/volto/locales/ca/LC_MESSAGES/volto.po @@ -94,6 +94,11 @@ msgstr "" msgid "Add Addons" msgstr "Afegeix complements" +#. Default: "Add Alternative URL" +#: components/manage/Controlpanels/Aliases +msgid "Add Alternative URL" +msgstr "" + #. Default: "Add Content…" #: components/manage/Toolbar/Types msgid "Add Content" @@ -310,6 +315,11 @@ msgstr "" msgid "Alias has been added" msgstr "" +#. Default: "Aliases have been uploaded." +#: components/manage/Controlpanels/Aliases +msgid "Aliases have been uploaded." +msgstr "" + #. Default: "Alignment" #: components/manage/Blocks/Image/schema #: components/manage/Blocks/LeadImage/LeadImageSidebar @@ -329,7 +339,7 @@ msgstr "Tots" msgid "All content" msgstr "Tot el contingut" -#. Default: "All existing alternative urls for this site" +#. Default: "Existing alternative URLs for this site" #: components/manage/Controlpanels/Aliases msgid "All existing alternative urls for this site" msgstr "" @@ -356,7 +366,7 @@ msgstr "Deixeu el camp buit si la imatge és purament decorativa" msgid "Alt text hint link text" msgstr "Descriu el propòsit de la imatge" -#. Default: "Alternative url path (Required)" +#. Default: "Alternative URL path (Required)" #: components/manage/Controlpanels/Aliases msgid "Alternative url path (Required)" msgstr "" @@ -367,7 +377,7 @@ msgstr "" msgid "Alternative url path must start with a slash." msgstr "" -#. Default: "Alternative url path → target url path (date and time of creation, manually created yes/no)" +#. Default: "Alternative URL path → target URL path (date and time of creation, manually created yes/no)" #: components/manage/Controlpanels/Aliases msgid "Alternative url path → target url path (date and time of creation, manually created yes/no)" msgstr "" @@ -503,11 +513,21 @@ msgstr "Navegui" msgid "Browse the site, drop an image, or type a URL" msgstr "Navegueu pel lloc, deixeu anar una imatge o escriviu un URL" +#. Default: "Bulk upload CSV" +#: components/manage/Controlpanels/Aliases +msgid "BulkUploadAltUrls" +msgstr "" + #. Default: "By default, permissions from the container of this item are inherited. If you disable this, only the explicitly defined sharing permissions will be valid. In the overview, the symbol {inherited} indicates an inherited value. Similarly, the symbol {global} indicates a global role, which is managed by the site administrator." #: components/manage/Sharing/Sharing msgid "By default, permissions from the container of this item are inherited. If you disable this, only the explicitly defined sharing permissions will be valid. In the overview, the symbol {inherited} indicates an inherited value. Similarly, the symbol {global} indicates a global role, which is managed by the site administrator." msgstr "Per defecte, els permisos del contenidor d'aquest element són heretats. Si es desactiva, només seran vàlids els permisos de compartició definits explícitament. A la vista general, el símbol ${inherited} indica un valor heretat. De la mateixa manera, el símbol ${global} indica un rol global, que és gestionat per l'administrador del lloc." +#. Default: "CSV file" +#: components/manage/Controlpanels/Aliases +msgid "CSVFile" +msgstr "" + #. Default: "Cache Name" #: components/manage/Controlpanels/DatabaseInformation msgid "Cache Name" @@ -526,6 +546,7 @@ msgstr "No es pot editar el disseny per al tipus de contingut {type}{type} kann nicht verändert werden, da das #. Default: "Cancel" #: components/manage/Add/Add #: components/manage/Contents/ContentsUploadModal +#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentType #: components/manage/Controlpanels/ContentTypeLayout #: components/manage/Controlpanels/ContentTypeSchema @@ -835,6 +856,16 @@ msgstr "Relationen mit diesem Ziel erstellen oder löschen" msgid "Create working copy" msgstr "Arbeitskopie erstellen" +#. Default: "Created after" +#: components/manage/Controlpanels/Aliases +msgid "Created after" +msgstr "" + +#. Default: "Created before" +#: components/manage/Controlpanels/Aliases +msgid "Created before" +msgstr "" + #. Default: "Created by {creator} on {date}" #: components/manage/WorkingCopyToastsFactory/WorkingCopyToastsFactory msgid "Created by {creator} on {date}" @@ -1292,14 +1323,18 @@ msgstr "Tragen Sie bitte Ihren vollen Namen ein." msgid "Enter map Embed Code" msgstr "Karten-Einbettungscode eingeben" -#. Default: "Enter the absolute path of the target. Target must exist or be an existing alternative url path to the target." +#. Default: "Enter the absolute path of the target. Target must exist or be an existing alternative URL path to the target." #: components/manage/Controlpanels/Aliases msgid "Enter the absolute path of the target. Target must exist or be an existing alternative url path to the target." msgstr "Geben Sie den absoluten Pfad des Ziels ein. Das Ziel muss existieren oder ein existierender, alternativer Pfad zum Ziel sein." +#. Default: "Enter the absolute path where the alternative URL should exist. The path must start with '/'. Only URLs that result in a 404 not found page will result in a redirect occurring." +#: components/manage/Controlpanels/Aliases +msgid "Enter the absolute path where the alternative url should exist. The path must start with '/'. Only URLs that result in a 404 not found page will result in a redirect occurring." +msgstr "" + #. Default: "Enter the absolute path where the alternative url should exist. The path must start with '/'. Only urls that result in a 404 not found page will result in a redirect occurring." #: components/manage/Aliases/Aliases -#: components/manage/Controlpanels/Aliases msgid "Enter the absolute path where the alternative url should exist. The path must start with '/'. Only urls that result in a 404 not found page will result in a redirect occurring." msgstr "Geben Sie den absoluten Pfad ein, an dem die alternative URL existieren soll. Der Pfad muss mit '/' beginnen. Es werden nur URLs die in einem '404 Nicht Gefunden' enden, weitergeleitet." @@ -1495,7 +1530,7 @@ msgstr "" msgid "Filter Rules:" msgstr "Filterregeln:" -#. Default: "Filter by prefix" +#. Default: "Filter by path" #: components/manage/Controlpanels/Aliases msgid "Filter by prefix" msgstr "Nach Präfix filtern" @@ -3590,7 +3625,6 @@ msgstr "Zu entfernende Tags" #. Default: "Target" #: components/manage/Blocks/Teaser/schema -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/Relations/BrokenRelations #: components/manage/Controlpanels/Relations/RelationsMatrix msgid "Target" @@ -4431,6 +4465,11 @@ msgstr "" msgid "box_forgot_password_option" msgstr "Passwort vergessen?" +#. Default: "Add many alternative URLs at once by uploading a CSV file. The first column should be the path to redirect from; the second, the path to redirect to. Both paths must be Plone-site-relative, starting with a slash (/). An optional third column can contain a date and time. An optional fourth column can contain a boolean to mark as a manual redirect (default true)." +#: components/manage/Controlpanels/Aliases +msgid "bulkUploadUrlsHelp" +msgstr "" + #. Default: "Checkbox" #: config/Blocks msgid "checkboxFacet" diff --git a/packages/volto/locales/en/LC_MESSAGES/volto.po b/packages/volto/locales/en/LC_MESSAGES/volto.po index 419d5717b1..2d821da363 100644 --- a/packages/volto/locales/en/LC_MESSAGES/volto.po +++ b/packages/volto/locales/en/LC_MESSAGES/volto.po @@ -88,6 +88,11 @@ msgstr "" msgid "Add Addons" msgstr "" +#. Default: "Add Alternative URL" +#: components/manage/Controlpanels/Aliases +msgid "Add Alternative URL" +msgstr "" + #. Default: "Add Content…" #: components/manage/Toolbar/Types msgid "Add Content" @@ -304,6 +309,11 @@ msgstr "" msgid "Alias has been added" msgstr "" +#. Default: "Aliases have been uploaded." +#: components/manage/Controlpanels/Aliases +msgid "Aliases have been uploaded." +msgstr "" + #. Default: "Alignment" #: components/manage/Blocks/Image/schema #: components/manage/Blocks/LeadImage/LeadImageSidebar @@ -323,7 +333,7 @@ msgstr "" msgid "All content" msgstr "" -#. Default: "All existing alternative urls for this site" +#. Default: "Existing alternative URLs for this site" #: components/manage/Controlpanels/Aliases msgid "All existing alternative urls for this site" msgstr "" @@ -350,7 +360,7 @@ msgstr "" msgid "Alt text hint link text" msgstr "" -#. Default: "Alternative url path (Required)" +#. Default: "Alternative URL path (Required)" #: components/manage/Controlpanels/Aliases msgid "Alternative url path (Required)" msgstr "" @@ -361,7 +371,7 @@ msgstr "" msgid "Alternative url path must start with a slash." msgstr "" -#. Default: "Alternative url path → target url path (date and time of creation, manually created yes/no)" +#. Default: "Alternative URL path → target URL path (date and time of creation, manually created yes/no)" #: components/manage/Controlpanels/Aliases msgid "Alternative url path → target url path (date and time of creation, manually created yes/no)" msgstr "" @@ -497,11 +507,21 @@ msgstr "" msgid "Browse the site, drop an image, or type a URL" msgstr "" +#. Default: "Bulk upload CSV" +#: components/manage/Controlpanels/Aliases +msgid "BulkUploadAltUrls" +msgstr "" + #. Default: "By default, permissions from the container of this item are inherited. If you disable this, only the explicitly defined sharing permissions will be valid. In the overview, the symbol {inherited} indicates an inherited value. Similarly, the symbol {global} indicates a global role, which is managed by the site administrator." #: components/manage/Sharing/Sharing msgid "By default, permissions from the container of this item are inherited. If you disable this, only the explicitly defined sharing permissions will be valid. In the overview, the symbol {inherited} indicates an inherited value. Similarly, the symbol {global} indicates a global role, which is managed by the site administrator." msgstr "" +#. Default: "CSV file" +#: components/manage/Controlpanels/Aliases +msgid "CSVFile" +msgstr "" + #. Default: "Cache Name" #: components/manage/Controlpanels/DatabaseInformation msgid "Cache Name" @@ -520,6 +540,7 @@ msgstr "" #. Default: "Cancel" #: components/manage/Add/Add #: components/manage/Contents/ContentsUploadModal +#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentType #: components/manage/Controlpanels/ContentTypeLayout #: components/manage/Controlpanels/ContentTypeSchema @@ -830,6 +851,16 @@ msgstr "" msgid "Create working copy" msgstr "" +#. Default: "Created after" +#: components/manage/Controlpanels/Aliases +msgid "Created after" +msgstr "" + +#. Default: "Created before" +#: components/manage/Controlpanels/Aliases +msgid "Created before" +msgstr "" + #. Default: "Created by {creator} on {date}" #: components/manage/WorkingCopyToastsFactory/WorkingCopyToastsFactory msgid "Created by {creator} on {date}" @@ -1287,14 +1318,18 @@ msgstr "" msgid "Enter map Embed Code" msgstr "" -#. Default: "Enter the absolute path of the target. Target must exist or be an existing alternative url path to the target." +#. Default: "Enter the absolute path of the target. Target must exist or be an existing alternative URL path to the target." #: components/manage/Controlpanels/Aliases msgid "Enter the absolute path of the target. Target must exist or be an existing alternative url path to the target." msgstr "" +#. Default: "Enter the absolute path where the alternative URL should exist. The path must start with '/'. Only URLs that result in a 404 not found page will result in a redirect occurring." +#: components/manage/Controlpanels/Aliases +msgid "Enter the absolute path where the alternative url should exist. The path must start with '/'. Only URLs that result in a 404 not found page will result in a redirect occurring." +msgstr "" + #. Default: "Enter the absolute path where the alternative url should exist. The path must start with '/'. Only urls that result in a 404 not found page will result in a redirect occurring." #: components/manage/Aliases/Aliases -#: components/manage/Controlpanels/Aliases msgid "Enter the absolute path where the alternative url should exist. The path must start with '/'. Only urls that result in a 404 not found page will result in a redirect occurring." msgstr "" @@ -1490,7 +1525,7 @@ msgstr "" msgid "Filter Rules:" msgstr "" -#. Default: "Filter by prefix" +#. Default: "Filter by path" #: components/manage/Controlpanels/Aliases msgid "Filter by prefix" msgstr "" @@ -3585,7 +3620,6 @@ msgstr "" #. Default: "Target" #: components/manage/Blocks/Teaser/schema -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/Relations/BrokenRelations #: components/manage/Controlpanels/Relations/RelationsMatrix msgid "Target" @@ -4426,6 +4460,11 @@ msgstr "" msgid "box_forgot_password_option" msgstr "" +#. Default: "Add many alternative URLs at once by uploading a CSV file. The first column should be the path to redirect from; the second, the path to redirect to. Both paths must be Plone-site-relative, starting with a slash (/). An optional third column can contain a date and time. An optional fourth column can contain a boolean to mark as a manual redirect (default true)." +#: components/manage/Controlpanels/Aliases +msgid "bulkUploadUrlsHelp" +msgstr "" + #. Default: "Checkbox" #: config/Blocks msgid "checkboxFacet" diff --git a/packages/volto/locales/es/LC_MESSAGES/volto.po b/packages/volto/locales/es/LC_MESSAGES/volto.po index 5fc3fb54ff..289d1e5462 100644 --- a/packages/volto/locales/es/LC_MESSAGES/volto.po +++ b/packages/volto/locales/es/LC_MESSAGES/volto.po @@ -95,6 +95,11 @@ msgstr "Añadir" msgid "Add Addons" msgstr "Añadir complementos" +#. Default: "Add Alternative URL" +#: components/manage/Controlpanels/Aliases +msgid "Add Alternative URL" +msgstr "" + #. Default: "Add Content…" #: components/manage/Toolbar/Types msgid "Add Content" @@ -311,6 +316,11 @@ msgstr "Alias" msgid "Alias has been added" msgstr "Alias añadido correctamente" +#. Default: "Aliases have been uploaded." +#: components/manage/Controlpanels/Aliases +msgid "Aliases have been uploaded." +msgstr "" + #. Default: "Alignment" #: components/manage/Blocks/Image/schema #: components/manage/Blocks/LeadImage/LeadImageSidebar @@ -330,7 +340,7 @@ msgstr "Todo" msgid "All content" msgstr "Todo el contenido" -#. Default: "All existing alternative urls for this site" +#. Default: "Existing alternative URLs for this site" #: components/manage/Controlpanels/Aliases msgid "All existing alternative urls for this site" msgstr "Todas los alias disponibles para este sitio" @@ -357,7 +367,7 @@ msgstr "Dejar vacío si la imagen es puramente decorativa" msgid "Alt text hint link text" msgstr "Describir el propósito de la imagen" -#. Default: "Alternative url path (Required)" +#. Default: "Alternative URL path (Required)" #: components/manage/Controlpanels/Aliases msgid "Alternative url path (Required)" msgstr "Ruta de url alternativa (obligatorio)" @@ -368,7 +378,7 @@ msgstr "Ruta de url alternativa (obligatorio)" msgid "Alternative url path must start with a slash." msgstr "La url alternativa debe comenzar con un carácter especial '/'." -#. Default: "Alternative url path → target url path (date and time of creation, manually created yes/no)" +#. Default: "Alternative URL path → target URL path (date and time of creation, manually created yes/no)" #: components/manage/Controlpanels/Aliases msgid "Alternative url path → target url path (date and time of creation, manually created yes/no)" msgstr "Url alternativa → url destino (fecha y hora de creación, creado de forma manual si/no)" @@ -504,11 +514,21 @@ msgstr "Navegue" msgid "Browse the site, drop an image, or type a URL" msgstr "Navegue el contenido, arrastre un imagen o ingrese una dirección URL" +#. Default: "Bulk upload CSV" +#: components/manage/Controlpanels/Aliases +msgid "BulkUploadAltUrls" +msgstr "" + #. Default: "By default, permissions from the container of this item are inherited. If you disable this, only the explicitly defined sharing permissions will be valid. In the overview, the symbol {inherited} indicates an inherited value. Similarly, the symbol {global} indicates a global role, which is managed by the site administrator." #: components/manage/Sharing/Sharing msgid "By default, permissions from the container of this item are inherited. If you disable this, only the explicitly defined sharing permissions will be valid. In the overview, the symbol {inherited} indicates an inherited value. Similarly, the symbol {global} indicates a global role, which is managed by the site administrator." msgstr "Por defecto, los permisos desde el contenedor de este elemento son heredados. Si usted deshabilita esta opción, solamente los permisos compartidos definidos explícitamente serán validos. En la vista general, el símbolo {inherited} indica un valor heredado. Similarmente, el símbolo {global} indica un rol global, el cual es administrado por el administrador del sitio." +#. Default: "CSV file" +#: components/manage/Controlpanels/Aliases +msgid "CSVFile" +msgstr "" + #. Default: "Cache Name" #: components/manage/Controlpanels/DatabaseInformation msgid "Cache Name" @@ -527,6 +547,7 @@ msgstr "No se puede editar la plantilla de {type} porque el sop #. Default: "Cancel" #: components/manage/Add/Add #: components/manage/Contents/ContentsUploadModal +#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentType #: components/manage/Controlpanels/ContentTypeLayout #: components/manage/Controlpanels/ContentTypeSchema @@ -837,6 +858,16 @@ msgstr "Crear o eliminar relaciones con el destino" msgid "Create working copy" msgstr "Crear copia de trabajo" +#. Default: "Created after" +#: components/manage/Controlpanels/Aliases +msgid "Created after" +msgstr "" + +#. Default: "Created before" +#: components/manage/Controlpanels/Aliases +msgid "Created before" +msgstr "" + #. Default: "Created by {creator} on {date}" #: components/manage/WorkingCopyToastsFactory/WorkingCopyToastsFactory msgid "Created by {creator} on {date}" @@ -1294,14 +1325,18 @@ msgstr "Introduzca el nombre completo, por ejemplo Leonardo Caballero." msgid "Enter map Embed Code" msgstr "Introduzca el código embebido de un mapa" -#. Default: "Enter the absolute path of the target. Target must exist or be an existing alternative url path to the target." +#. Default: "Enter the absolute path of the target. Target must exist or be an existing alternative URL path to the target." #: components/manage/Controlpanels/Aliases msgid "Enter the absolute path of the target. Target must exist or be an existing alternative url path to the target." msgstr "Introduzca la ruta absoluta del destino. El destino debe existir o ser una url alternativa de otro destino." +#. Default: "Enter the absolute path where the alternative URL should exist. The path must start with '/'. Only URLs that result in a 404 not found page will result in a redirect occurring." +#: components/manage/Controlpanels/Aliases +msgid "Enter the absolute path where the alternative url should exist. The path must start with '/'. Only URLs that result in a 404 not found page will result in a redirect occurring." +msgstr "" + #. Default: "Enter the absolute path where the alternative url should exist. The path must start with '/'. Only urls that result in a 404 not found page will result in a redirect occurring." #: components/manage/Aliases/Aliases -#: components/manage/Controlpanels/Aliases msgid "Enter the absolute path where the alternative url should exist. The path must start with '/'. Only urls that result in a 404 not found page will result in a redirect occurring." msgstr "Introduzca la ruta de la url alternativa. La ruta debe comenzar por '/'. Solo tendrán redirección aquellas urls que creen errores 404 No encontrado." @@ -1497,7 +1532,7 @@ msgstr "Filtrar" msgid "Filter Rules:" msgstr "Reglas de filtrado:" -#. Default: "Filter by prefix" +#. Default: "Filter by path" #: components/manage/Controlpanels/Aliases msgid "Filter by prefix" msgstr "Filtrar por prefijo" @@ -3592,7 +3627,6 @@ msgstr "Categoría a remover" #. Default: "Target" #: components/manage/Blocks/Teaser/schema -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/Relations/BrokenRelations #: components/manage/Controlpanels/Relations/RelationsMatrix msgid "Target" @@ -4433,6 +4467,11 @@ msgstr "" msgid "box_forgot_password_option" msgstr "¿Olvidaste tu contraseña?" +#. Default: "Add many alternative URLs at once by uploading a CSV file. The first column should be the path to redirect from; the second, the path to redirect to. Both paths must be Plone-site-relative, starting with a slash (/). An optional third column can contain a date and time. An optional fourth column can contain a boolean to mark as a manual redirect (default true)." +#: components/manage/Controlpanels/Aliases +msgid "bulkUploadUrlsHelp" +msgstr "" + #. Default: "Checkbox" #: config/Blocks msgid "checkboxFacet" diff --git a/packages/volto/locales/eu/LC_MESSAGES/volto.po b/packages/volto/locales/eu/LC_MESSAGES/volto.po index 77b052e284..50579cea41 100644 --- a/packages/volto/locales/eu/LC_MESSAGES/volto.po +++ b/packages/volto/locales/eu/LC_MESSAGES/volto.po @@ -95,6 +95,11 @@ msgstr "Gehitu" msgid "Add Addons" msgstr "Gehitu gehigarriak" +#. Default: "Add Alternative URL" +#: components/manage/Controlpanels/Aliases +msgid "Add Alternative URL" +msgstr "" + #. Default: "Add Content…" #: components/manage/Toolbar/Types msgid "Add Content" @@ -311,6 +316,11 @@ msgstr "Aliasa" msgid "Alias has been added" msgstr "Aliasa ondo gehitu da" +#. Default: "Aliases have been uploaded." +#: components/manage/Controlpanels/Aliases +msgid "Aliases have been uploaded." +msgstr "" + #. Default: "Alignment" #: components/manage/Blocks/Image/schema #: components/manage/Blocks/LeadImage/LeadImageSidebar @@ -330,7 +340,7 @@ msgstr "Guztiak" msgid "All content" msgstr "Eduki guztia" -#. Default: "All existing alternative urls for this site" +#. Default: "Existing alternative URLs for this site" #: components/manage/Controlpanels/Aliases msgid "All existing alternative urls for this site" msgstr "Atari honetako ordezko helbide guztiak" @@ -357,7 +367,7 @@ msgstr "Utzi hutsik irudia dekoratiboa bada" msgid "Alt text hint link text" msgstr "Deskribatu irudia zertarako den" -#. Default: "Alternative url path (Required)" +#. Default: "Alternative URL path (Required)" #: components/manage/Controlpanels/Aliases msgid "Alternative url path (Required)" msgstr "Ordezko helbidearen bidea (derrigorrezkoa)" @@ -368,7 +378,7 @@ msgstr "Ordezko helbidearen bidea (derrigorrezkoa)" msgid "Alternative url path must start with a slash." msgstr "Ordezko helbidearen bidea / karakterearekin hasi behar da" -#. Default: "Alternative url path → target url path (date and time of creation, manually created yes/no)" +#. Default: "Alternative URL path → target URL path (date and time of creation, manually created yes/no)" #: components/manage/Controlpanels/Aliases msgid "Alternative url path → target url path (date and time of creation, manually created yes/no)" msgstr "Ordezko helbidearen bidea → helburu helbidearen bidea (sorrera data eta ordua, eskuz sortu den bai/ez)" @@ -504,11 +514,21 @@ msgstr "Arakatu" msgid "Browse the site, drop an image, or type a URL" msgstr "Atarian bilatu, irudi bat hona arrastatu edo URL bat idatzi" +#. Default: "Bulk upload CSV" +#: components/manage/Controlpanels/Aliases +msgid "BulkUploadAltUrls" +msgstr "" + #. Default: "By default, permissions from the container of this item are inherited. If you disable this, only the explicitly defined sharing permissions will be valid. In the overview, the symbol {inherited} indicates an inherited value. Similarly, the symbol {global} indicates a global role, which is managed by the site administrator." #: components/manage/Sharing/Sharing msgid "By default, permissions from the container of this item are inherited. If you disable this, only the explicitly defined sharing permissions will be valid. In the overview, the symbol {inherited} indicates an inherited value. Similarly, the symbol {global} indicates a global role, which is managed by the site administrator." msgstr "Defektuz, elementu hau barnean duen karpetaren baimenak heredatu egiten dira. Hau desaktibatzen baduzu, hemen zehaztutako baimenak bakarrik aplikatuko dira. {inherited} ikurrak heredatutako balioa adierazten du. Era berean, {global} ikurrak rol globala adierazten du, atariaren kudeatzaileak kudeatzen duen rola." +#. Default: "CSV file" +#: components/manage/Controlpanels/Aliases +msgid "CSVFile" +msgstr "" + #. Default: "Cache Name" #: components/manage/Controlpanels/DatabaseInformation msgid "Cache Name" @@ -527,6 +547,7 @@ msgstr "Ezin da {type} elementu-motaren itxura aldatu, #. Default: "Cancel" #: components/manage/Add/Add #: components/manage/Contents/ContentsUploadModal +#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentType #: components/manage/Controlpanels/ContentTypeLayout #: components/manage/Controlpanels/ContentTypeSchema @@ -837,6 +858,16 @@ msgstr "" msgid "Create working copy" msgstr "Sortu lan-bertsioa" +#. Default: "Created after" +#: components/manage/Controlpanels/Aliases +msgid "Created after" +msgstr "" + +#. Default: "Created before" +#: components/manage/Controlpanels/Aliases +msgid "Created before" +msgstr "" + #. Default: "Created by {creator} on {date}" #: components/manage/WorkingCopyToastsFactory/WorkingCopyToastsFactory msgid "Created by {creator} on {date}" @@ -1294,14 +1325,18 @@ msgstr "Idatzi izen osoa, adb. Jon Garmendia." msgid "Enter map Embed Code" msgstr "Sartu itsasteko kodea" -#. Default: "Enter the absolute path of the target. Target must exist or be an existing alternative url path to the target." +#. Default: "Enter the absolute path of the target. Target must exist or be an existing alternative URL path to the target." #: components/manage/Controlpanels/Aliases msgid "Enter the absolute path of the target. Target must exist or be an existing alternative url path to the target." msgstr "Idatzi helburuaren bide absolutua. Helburua existitu egin behar da edo ordezko helbide bat izan behar da." +#. Default: "Enter the absolute path where the alternative URL should exist. The path must start with '/'. Only URLs that result in a 404 not found page will result in a redirect occurring." +#: components/manage/Controlpanels/Aliases +msgid "Enter the absolute path where the alternative url should exist. The path must start with '/'. Only URLs that result in a 404 not found page will result in a redirect occurring." +msgstr "" + #. Default: "Enter the absolute path where the alternative url should exist. The path must start with '/'. Only urls that result in a 404 not found page will result in a redirect occurring." #: components/manage/Aliases/Aliases -#: components/manage/Controlpanels/Aliases msgid "Enter the absolute path where the alternative url should exist. The path must start with '/'. Only urls that result in a 404 not found page will result in a redirect occurring." msgstr "Idatzi ordezko helbidearen bide absolutua. Bidea '/' karakterearekin hasi behar da. Orrialde bat aurkitzen ez denean sortzen den 404 errorea ematen duten helbideekin bakarrik gertatuko dira berbideraketak." @@ -1497,7 +1532,7 @@ msgstr "" msgid "Filter Rules:" msgstr "Filtratu erregelak:" -#. Default: "Filter by prefix" +#. Default: "Filter by path" #: components/manage/Controlpanels/Aliases msgid "Filter by prefix" msgstr "Filtratu aurrizkiaren arabera" @@ -3592,7 +3627,6 @@ msgstr "Kendu beharreko etiketak" #. Default: "Target" #: components/manage/Blocks/Teaser/schema -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/Relations/BrokenRelations #: components/manage/Controlpanels/Relations/RelationsMatrix msgid "Target" @@ -4433,6 +4467,11 @@ msgstr "" msgid "box_forgot_password_option" msgstr "Pasahitza ahaztuta?" +#. Default: "Add many alternative URLs at once by uploading a CSV file. The first column should be the path to redirect from; the second, the path to redirect to. Both paths must be Plone-site-relative, starting with a slash (/). An optional third column can contain a date and time. An optional fourth column can contain a boolean to mark as a manual redirect (default true)." +#: components/manage/Controlpanels/Aliases +msgid "bulkUploadUrlsHelp" +msgstr "" + #. Default: "Checkbox" #: config/Blocks msgid "checkboxFacet" diff --git a/packages/volto/locales/fi/LC_MESSAGES/volto.po b/packages/volto/locales/fi/LC_MESSAGES/volto.po index 5db5c4cbee..b86fd41e94 100644 --- a/packages/volto/locales/fi/LC_MESSAGES/volto.po +++ b/packages/volto/locales/fi/LC_MESSAGES/volto.po @@ -93,6 +93,11 @@ msgstr "Lisää (objektilista)" msgid "Add Addons" msgstr "Lisää laajennoksia" +#. Default: "Add Alternative URL" +#: components/manage/Controlpanels/Aliases +msgid "Add Alternative URL" +msgstr "" + #. Default: "Add Content…" #: components/manage/Toolbar/Types msgid "Add Content" @@ -309,6 +314,11 @@ msgstr "Alias" msgid "Alias has been added" msgstr "Alias on lisätty" +#. Default: "Aliases have been uploaded." +#: components/manage/Controlpanels/Aliases +msgid "Aliases have been uploaded." +msgstr "" + #. Default: "Alignment" #: components/manage/Blocks/Image/schema #: components/manage/Blocks/LeadImage/LeadImageSidebar @@ -328,7 +338,7 @@ msgstr "Kaikki" msgid "All content" msgstr "Kaikki sisältö" -#. Default: "All existing alternative urls for this site" +#. Default: "Existing alternative URLs for this site" #: components/manage/Controlpanels/Aliases msgid "All existing alternative urls for this site" msgstr "Kaikki vaihtoehtoiset URL:t tälle sivustolle" @@ -355,7 +365,7 @@ msgstr "Kuvaustekstin vihje" msgid "Alt text hint link text" msgstr "Kuvaustekstin vihjeen linkkiteksti" -#. Default: "Alternative url path (Required)" +#. Default: "Alternative URL path (Required)" #: components/manage/Controlpanels/Aliases msgid "Alternative url path (Required)" msgstr "Vaihtoehtoinen URL-polku (pakollinen)" @@ -366,7 +376,7 @@ msgstr "Vaihtoehtoinen URL-polku (pakollinen)" msgid "Alternative url path must start with a slash." msgstr "Vaihtoehtoisen URL-polun pitää alkaa kauttaviivalla" -#. Default: "Alternative url path → target url path (date and time of creation, manually created yes/no)" +#. Default: "Alternative URL path → target URL path (date and time of creation, manually created yes/no)" #: components/manage/Controlpanels/Aliases msgid "Alternative url path → target url path (date and time of creation, manually created yes/no)" msgstr "Vaihtoehtoinen URL-polku -> kohteen URL-polku (päivämäärä ja luontiaika, käsin luotu kyllä/ei)" @@ -502,11 +512,21 @@ msgstr "Selaa" msgid "Browse the site, drop an image, or type a URL" msgstr "Selaa sivustoa, raahaa ja pudota kuva, tai syötä URL" +#. Default: "Bulk upload CSV" +#: components/manage/Controlpanels/Aliases +msgid "BulkUploadAltUrls" +msgstr "" + #. Default: "By default, permissions from the container of this item are inherited. If you disable this, only the explicitly defined sharing permissions will be valid. In the overview, the symbol {inherited} indicates an inherited value. Similarly, the symbol {global} indicates a global role, which is managed by the site administrator." #: components/manage/Sharing/Sharing msgid "By default, permissions from the container of this item are inherited. If you disable this, only the explicitly defined sharing permissions will be valid. In the overview, the symbol {inherited} indicates an inherited value. Similarly, the symbol {global} indicates a global role, which is managed by the site administrator." msgstr "Oletuksena käyttöoikeudet peritään aina edeltävältä sisältötasolta. Jos tämä valinta poistetaan, vain tällä tasolla erikseen määritellyt käyttöoikeudet ovat voimassa. {inherited} tarkoittaa perittyä käyttöoikeutta. {global} tarkoittaa ylläpitäjän myöntämää sivustonlaajuista käyttöoikeutta." +#. Default: "CSV file" +#: components/manage/Controlpanels/Aliases +msgid "CSVFile" +msgstr "" + #. Default: "Cache Name" #: components/manage/Controlpanels/DatabaseInformation msgid "Cache Name" @@ -525,6 +545,7 @@ msgstr "Sisältötyypin {type} asettelua ei voi muokata, koska #. Default: "Cancel" #: components/manage/Add/Add #: components/manage/Contents/ContentsUploadModal +#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentType #: components/manage/Controlpanels/ContentTypeLayout #: components/manage/Controlpanels/ContentTypeSchema @@ -835,6 +856,16 @@ msgstr "" msgid "Create working copy" msgstr "Luo työkopio" +#. Default: "Created after" +#: components/manage/Controlpanels/Aliases +msgid "Created after" +msgstr "" + +#. Default: "Created before" +#: components/manage/Controlpanels/Aliases +msgid "Created before" +msgstr "" + #. Default: "Created by {creator} on {date}" #: components/manage/WorkingCopyToastsFactory/WorkingCopyToastsFactory msgid "Created by {creator} on {date}" @@ -1292,14 +1323,18 @@ msgstr "Syötä koko nimi, esimerkiksi Lumi Vuorinen." msgid "Enter map Embed Code" msgstr "Syötä Google Maps -upotuskoodi" -#. Default: "Enter the absolute path of the target. Target must exist or be an existing alternative url path to the target." +#. Default: "Enter the absolute path of the target. Target must exist or be an existing alternative URL path to the target." #: components/manage/Controlpanels/Aliases msgid "Enter the absolute path of the target. Target must exist or be an existing alternative url path to the target." msgstr "Syötä kohteen osoite. Kohteen tulee olla olemassa tai sen tulee olla olemassaoleva vaihtoehtoinen URL-polku kohteelle." +#. Default: "Enter the absolute path where the alternative URL should exist. The path must start with '/'. Only URLs that result in a 404 not found page will result in a redirect occurring." +#: components/manage/Controlpanels/Aliases +msgid "Enter the absolute path where the alternative url should exist. The path must start with '/'. Only URLs that result in a 404 not found page will result in a redirect occurring." +msgstr "" + #. Default: "Enter the absolute path where the alternative url should exist. The path must start with '/'. Only urls that result in a 404 not found page will result in a redirect occurring." #: components/manage/Aliases/Aliases -#: components/manage/Controlpanels/Aliases msgid "Enter the absolute path where the alternative url should exist. The path must start with '/'. Only urls that result in a 404 not found page will result in a redirect occurring." msgstr "" @@ -1495,7 +1530,7 @@ msgstr "" msgid "Filter Rules:" msgstr "Suodata säännöt:" -#. Default: "Filter by prefix" +#. Default: "Filter by path" #: components/manage/Controlpanels/Aliases msgid "Filter by prefix" msgstr "Suodata alkutunnisteen perusteella" @@ -3590,7 +3625,6 @@ msgstr "Poistettavat tagit" #. Default: "Target" #: components/manage/Blocks/Teaser/schema -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/Relations/BrokenRelations #: components/manage/Controlpanels/Relations/RelationsMatrix msgid "Target" @@ -4431,6 +4465,11 @@ msgstr "" msgid "box_forgot_password_option" msgstr "Unohditko salasanasi?" +#. Default: "Add many alternative URLs at once by uploading a CSV file. The first column should be the path to redirect from; the second, the path to redirect to. Both paths must be Plone-site-relative, starting with a slash (/). An optional third column can contain a date and time. An optional fourth column can contain a boolean to mark as a manual redirect (default true)." +#: components/manage/Controlpanels/Aliases +msgid "bulkUploadUrlsHelp" +msgstr "" + #. Default: "Checkbox" #: config/Blocks msgid "checkboxFacet" diff --git a/packages/volto/locales/fr/LC_MESSAGES/volto.po b/packages/volto/locales/fr/LC_MESSAGES/volto.po index 4887b87ff4..978fad0f51 100644 --- a/packages/volto/locales/fr/LC_MESSAGES/volto.po +++ b/packages/volto/locales/fr/LC_MESSAGES/volto.po @@ -95,6 +95,11 @@ msgstr "Ajouter (liste d'objets)" msgid "Add Addons" msgstr "Ajouter des modules" +#. Default: "Add Alternative URL" +#: components/manage/Controlpanels/Aliases +msgid "Add Alternative URL" +msgstr "" + #. Default: "Add Content…" #: components/manage/Toolbar/Types msgid "Add Content" @@ -311,6 +316,11 @@ msgstr "Alias" msgid "Alias has been added" msgstr "L'alias a été ajouté" +#. Default: "Aliases have been uploaded." +#: components/manage/Controlpanels/Aliases +msgid "Aliases have been uploaded." +msgstr "" + #. Default: "Alignment" #: components/manage/Blocks/Image/schema #: components/manage/Blocks/LeadImage/LeadImageSidebar @@ -330,7 +340,7 @@ msgstr "Tout" msgid "All content" msgstr "Tout le contenu" -#. Default: "All existing alternative urls for this site" +#. Default: "Existing alternative URLs for this site" #: components/manage/Controlpanels/Aliases msgid "All existing alternative urls for this site" msgstr "Toutes les URLs alternatives existantes pour ce site" @@ -357,7 +367,7 @@ msgstr "Laisser vide si l'image est uniquement décorative" msgid "Alt text hint link text" msgstr "Texte du lien de la suggestion de texte alternatif" -#. Default: "Alternative url path (Required)" +#. Default: "Alternative URL path (Required)" #: components/manage/Controlpanels/Aliases msgid "Alternative url path (Required)" msgstr "Autre chemin d'URL (obligatoire)" @@ -368,7 +378,7 @@ msgstr "Autre chemin d'URL (obligatoire)" msgid "Alternative url path must start with a slash." msgstr "Le chemin d'URL alternatif doit commencer par une barre oblique." -#. Default: "Alternative url path → target url path (date and time of creation, manually created yes/no)" +#. Default: "Alternative URL path → target URL path (date and time of creation, manually created yes/no)" #: components/manage/Controlpanels/Aliases msgid "Alternative url path → target url path (date and time of creation, manually created yes/no)" msgstr "Chemin d'URL alternatif → chemin URL cible (date et heure de création, créé manuellement oui/non)" @@ -504,11 +514,21 @@ msgstr "Explore" msgid "Browse the site, drop an image, or type a URL" msgstr "Explorer le site, déposer l'image ou écriver l'URL" +#. Default: "Bulk upload CSV" +#: components/manage/Controlpanels/Aliases +msgid "BulkUploadAltUrls" +msgstr "" + #. Default: "By default, permissions from the container of this item are inherited. If you disable this, only the explicitly defined sharing permissions will be valid. In the overview, the symbol {inherited} indicates an inherited value. Similarly, the symbol {global} indicates a global role, which is managed by the site administrator." #: components/manage/Sharing/Sharing msgid "By default, permissions from the container of this item are inherited. If you disable this, only the explicitly defined sharing permissions will be valid. In the overview, the symbol {inherited} indicates an inherited value. Similarly, the symbol {global} indicates a global role, which is managed by the site administrator." msgstr "Par défaut, les autorisations du conteneur de cet élément sont héritées. Si vous désactivez cette option, seules les autorisations de partage explicitement définies seront valides. Dans l'aperçu, le symbole {inherited} indique une valeur héritée. De même, le symbole {global} indique un rôle global, qui est géré par l'administrateur du site." +#. Default: "CSV file" +#: components/manage/Controlpanels/Aliases +msgid "CSVFile" +msgstr "" + #. Default: "Cache Name" #: components/manage/Controlpanels/DatabaseInformation msgid "Cache Name" @@ -527,6 +547,7 @@ msgstr "Impossible de modifier la mise en page pour le type de contenu { #. Default: "Cancel" #: components/manage/Add/Add #: components/manage/Contents/ContentsUploadModal +#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentType #: components/manage/Controlpanels/ContentTypeLayout #: components/manage/Controlpanels/ContentTypeSchema @@ -837,6 +858,16 @@ msgstr "" msgid "Create working copy" msgstr "Créer une copie de travail" +#. Default: "Created after" +#: components/manage/Controlpanels/Aliases +msgid "Created after" +msgstr "" + +#. Default: "Created before" +#: components/manage/Controlpanels/Aliases +msgid "Created before" +msgstr "" + #. Default: "Created by {creator} on {date}" #: components/manage/WorkingCopyToastsFactory/WorkingCopyToastsFactory msgid "Created by {creator} on {date}" @@ -1294,14 +1325,18 @@ msgstr "Saisissez votre nom complet (par exemple : John Smith)" msgid "Enter map Embed Code" msgstr "Saisissez le code intégré de la carte" -#. Default: "Enter the absolute path of the target. Target must exist or be an existing alternative url path to the target." +#. Default: "Enter the absolute path of the target. Target must exist or be an existing alternative URL path to the target." #: components/manage/Controlpanels/Aliases msgid "Enter the absolute path of the target. Target must exist or be an existing alternative url path to the target." msgstr "Saisissez le chemin absolu de la cible. La cible doit exister ou être un chemin d'URL alternatif existant vers la cible." +#. Default: "Enter the absolute path where the alternative URL should exist. The path must start with '/'. Only URLs that result in a 404 not found page will result in a redirect occurring." +#: components/manage/Controlpanels/Aliases +msgid "Enter the absolute path where the alternative url should exist. The path must start with '/'. Only URLs that result in a 404 not found page will result in a redirect occurring." +msgstr "" + #. Default: "Enter the absolute path where the alternative url should exist. The path must start with '/'. Only urls that result in a 404 not found page will result in a redirect occurring." #: components/manage/Aliases/Aliases -#: components/manage/Controlpanels/Aliases msgid "Enter the absolute path where the alternative url should exist. The path must start with '/'. Only urls that result in a 404 not found page will result in a redirect occurring." msgstr "Saisissez le chemin absolu où l'URL alternative doit exister. Le chemin doit commencer par '/'. Seules les URL qui aboutissent à une page 404 introuvable entraîneront une redirection." @@ -1497,7 +1532,7 @@ msgstr "" msgid "Filter Rules:" msgstr "Règles de filtre :" -#. Default: "Filter by prefix" +#. Default: "Filter by path" #: components/manage/Controlpanels/Aliases msgid "Filter by prefix" msgstr "Filtrer par préfixe" @@ -3592,7 +3627,6 @@ msgstr "Mots clés à supprimer" #. Default: "Target" #: components/manage/Blocks/Teaser/schema -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/Relations/BrokenRelations #: components/manage/Controlpanels/Relations/RelationsMatrix msgid "Target" @@ -4433,6 +4467,11 @@ msgstr "" msgid "box_forgot_password_option" msgstr "Mot de passe oublié" +#. Default: "Add many alternative URLs at once by uploading a CSV file. The first column should be the path to redirect from; the second, the path to redirect to. Both paths must be Plone-site-relative, starting with a slash (/). An optional third column can contain a date and time. An optional fourth column can contain a boolean to mark as a manual redirect (default true)." +#: components/manage/Controlpanels/Aliases +msgid "bulkUploadUrlsHelp" +msgstr "" + #. Default: "Checkbox" #: config/Blocks msgid "checkboxFacet" diff --git a/packages/volto/locales/hi/LC_MESSAGES/volto.po b/packages/volto/locales/hi/LC_MESSAGES/volto.po index ced8be4109..c563207792 100644 --- a/packages/volto/locales/hi/LC_MESSAGES/volto.po +++ b/packages/volto/locales/hi/LC_MESSAGES/volto.po @@ -88,6 +88,11 @@ msgstr "जोड़े (वस्तु सूची)" msgid "Add Addons" msgstr "नए ऐड-ऑन को यहां दिखाने के लिए, उन्हें अपने कॉन्फ़िगरेशन में जोड़ें, बनाएं और सर्वर प्रक्रिया को पुनरारंभ करें। विस्तृत निर्देशों के लिए देखें" +#. Default: "Add Alternative URL" +#: components/manage/Controlpanels/Aliases +msgid "Add Alternative URL" +msgstr "" + #. Default: "Add Content…" #: components/manage/Toolbar/Types msgid "Add Content" @@ -304,6 +309,11 @@ msgstr "उपनाम" msgid "Alias has been added" msgstr "उपनाम जोड़ा गया है" +#. Default: "Aliases have been uploaded." +#: components/manage/Controlpanels/Aliases +msgid "Aliases have been uploaded." +msgstr "" + #. Default: "Alignment" #: components/manage/Blocks/Image/schema #: components/manage/Blocks/LeadImage/LeadImageSidebar @@ -323,7 +333,7 @@ msgstr "सभी" msgid "All content" msgstr "सभी कंटेंट" -#. Default: "All existing alternative urls for this site" +#. Default: "Existing alternative URLs for this site" #: components/manage/Controlpanels/Aliases msgid "All existing alternative urls for this site" msgstr "इस साइट के लिए सभी मौजूदा वैकल्पिक यूआरएल" @@ -350,7 +360,7 @@ msgstr "अगर छवि केवल सजावटी है तो खा msgid "Alt text hint link text" msgstr "छवि का उद्देश्य वर्णन करें।" -#. Default: "Alternative url path (Required)" +#. Default: "Alternative URL path (Required)" #: components/manage/Controlpanels/Aliases msgid "Alternative url path (Required)" msgstr "वैकल्पिक URL पथ (आवश्यक)" @@ -361,7 +371,7 @@ msgstr "वैकल्पिक URL पथ (आवश्यक)" msgid "Alternative url path must start with a slash." msgstr "वैकल्पिक URL पथ को स्लैश के साथ शुरू करना चाहिए।" -#. Default: "Alternative url path → target url path (date and time of creation, manually created yes/no)" +#. Default: "Alternative URL path → target URL path (date and time of creation, manually created yes/no)" #: components/manage/Controlpanels/Aliases msgid "Alternative url path → target url path (date and time of creation, manually created yes/no)" msgstr "वैकल्पिक URL पथ → लक्ष्य URL पथ (निर्माण की तारीख और समय, मैन्युअल रूप से बनाया गया है/नहीं)" @@ -497,11 +507,21 @@ msgstr "ब्राउज़ करें" msgid "Browse the site, drop an image, or type a URL" msgstr "साइट ब्राउज़ करें, एक छवि छोड़ें, या एक URL टाइप करें" +#. Default: "Bulk upload CSV" +#: components/manage/Controlpanels/Aliases +msgid "BulkUploadAltUrls" +msgstr "" + #. Default: "By default, permissions from the container of this item are inherited. If you disable this, only the explicitly defined sharing permissions will be valid. In the overview, the symbol {inherited} indicates an inherited value. Similarly, the symbol {global} indicates a global role, which is managed by the site administrator." #: components/manage/Sharing/Sharing msgid "By default, permissions from the container of this item are inherited. If you disable this, only the explicitly defined sharing permissions will be valid. In the overview, the symbol {inherited} indicates an inherited value. Similarly, the symbol {global} indicates a global role, which is managed by the site administrator." msgstr "डिफ़ॉल्ट रूप से, इस आइटम के कंटेनर से अनुमतियाँ विरासत में होती हैं। यदि आप इसे अक्षम करते हैं, तो केवल स्पष्ट रूप से परिभागित अनुमतियाँ मान्य होंगी। अवलोकन में, प्रतीक {inherited} एक विरासत मान को दर्शाता है। उसी तरह, प्रतीक {global} एक वैश्विक भूमिका को दर्शाता है, जो साइट प्रशासक द्वारा प्रबंधित की जाती है।" +#. Default: "CSV file" +#: components/manage/Controlpanels/Aliases +msgid "CSVFile" +msgstr "" + #. Default: "Cache Name" #: components/manage/Controlpanels/DatabaseInformation msgid "Cache Name" @@ -520,6 +540,7 @@ msgstr "" #. Default: "Cancel" #: components/manage/Add/Add #: components/manage/Contents/ContentsUploadModal +#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentType #: components/manage/Controlpanels/ContentTypeLayout #: components/manage/Controlpanels/ContentTypeSchema @@ -830,6 +851,16 @@ msgstr "लक्ष्य के साथ संबंध बनाएं य msgid "Create working copy" msgstr "काम की प्रतिलिपि बनाएं" +#. Default: "Created after" +#: components/manage/Controlpanels/Aliases +msgid "Created after" +msgstr "" + +#. Default: "Created before" +#: components/manage/Controlpanels/Aliases +msgid "Created before" +msgstr "" + #. Default: "Created by {creator} on {date}" #: components/manage/WorkingCopyToastsFactory/WorkingCopyToastsFactory msgid "Created by {creator} on {date}" @@ -1287,14 +1318,18 @@ msgstr "पूरा नाम दर्ज करें, उदाहरण क msgid "Enter map Embed Code" msgstr "नक्शे का एम्बेड कोड दर्ज करें" -#. Default: "Enter the absolute path of the target. Target must exist or be an existing alternative url path to the target." +#. Default: "Enter the absolute path of the target. Target must exist or be an existing alternative URL path to the target." #: components/manage/Controlpanels/Aliases msgid "Enter the absolute path of the target. Target must exist or be an existing alternative url path to the target." msgstr "लक्ष्य का पूर्ण रास्ता दर्ज करें। लक्ष्य मौजूद होना चाहिए या लक्ष्य के लिए मौजूदा वैकल्पिक URL पथ होना चाहिए।" +#. Default: "Enter the absolute path where the alternative URL should exist. The path must start with '/'. Only URLs that result in a 404 not found page will result in a redirect occurring." +#: components/manage/Controlpanels/Aliases +msgid "Enter the absolute path where the alternative url should exist. The path must start with '/'. Only URLs that result in a 404 not found page will result in a redirect occurring." +msgstr "" + #. Default: "Enter the absolute path where the alternative url should exist. The path must start with '/'. Only urls that result in a 404 not found page will result in a redirect occurring." #: components/manage/Aliases/Aliases -#: components/manage/Controlpanels/Aliases msgid "Enter the absolute path where the alternative url should exist. The path must start with '/'. Only urls that result in a 404 not found page will result in a redirect occurring." msgstr "वैकल्पिक URL होनी चाहिए जहां का पूर्ण रास्ता दर्ज करें। पथ '/ ' से प्रारंभ होना चाहिए। केवल वे URL जिनके परिणामस्वरूप 404 नहीं मिला पेज एक रिडायरेक्ट होगा।" @@ -1490,7 +1525,7 @@ msgstr "फ़िल्टर" msgid "Filter Rules:" msgstr "फ़िल्टर नियम:" -#. Default: "Filter by prefix" +#. Default: "Filter by path" #: components/manage/Controlpanels/Aliases msgid "Filter by prefix" msgstr "उपसर्ग द्वारा फ़िल्टर करें" @@ -3585,7 +3620,6 @@ msgstr "हटाने के लिए टैग" #. Default: "Target" #: components/manage/Blocks/Teaser/schema -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/Relations/BrokenRelations #: components/manage/Controlpanels/Relations/RelationsMatrix msgid "Target" @@ -4426,6 +4460,11 @@ msgstr "" msgid "box_forgot_password_option" msgstr "पासवर्ड भूल गए?" +#. Default: "Add many alternative URLs at once by uploading a CSV file. The first column should be the path to redirect from; the second, the path to redirect to. Both paths must be Plone-site-relative, starting with a slash (/). An optional third column can contain a date and time. An optional fourth column can contain a boolean to mark as a manual redirect (default true)." +#: components/manage/Controlpanels/Aliases +msgid "bulkUploadUrlsHelp" +msgstr "" + #. Default: "Checkbox" #: config/Blocks msgid "checkboxFacet" diff --git a/packages/volto/locales/it/LC_MESSAGES/volto.po b/packages/volto/locales/it/LC_MESSAGES/volto.po index 060c5ba03e..0b261ae65b 100644 --- a/packages/volto/locales/it/LC_MESSAGES/volto.po +++ b/packages/volto/locales/it/LC_MESSAGES/volto.po @@ -88,6 +88,11 @@ msgstr "Aggiungi" msgid "Add Addons" msgstr "Aggiungi Add-ons" +#. Default: "Add Alternative URL" +#: components/manage/Controlpanels/Aliases +msgid "Add Alternative URL" +msgstr "" + #. Default: "Add Content…" #: components/manage/Toolbar/Types msgid "Add Content" @@ -304,6 +309,11 @@ msgstr "Alias" msgid "Alias has been added" msgstr "L'alias è stato aggiunto" +#. Default: "Aliases have been uploaded." +#: components/manage/Controlpanels/Aliases +msgid "Aliases have been uploaded." +msgstr "" + #. Default: "Alignment" #: components/manage/Blocks/Image/schema #: components/manage/Blocks/LeadImage/LeadImageSidebar @@ -323,7 +333,7 @@ msgstr "Tutti" msgid "All content" msgstr "Tutti i contenuti" -#. Default: "All existing alternative urls for this site" +#. Default: "Existing alternative URLs for this site" #: components/manage/Controlpanels/Aliases msgid "All existing alternative urls for this site" msgstr "Tutti gli url alternativi per questo sito" @@ -350,7 +360,7 @@ msgstr "Lascia vuoto se l'immagine è decorativa." msgid "Alt text hint link text" msgstr "Descrivi lo scopo dell'immagine." -#. Default: "Alternative url path (Required)" +#. Default: "Alternative URL path (Required)" #: components/manage/Controlpanels/Aliases msgid "Alternative url path (Required)" msgstr "Percorso url alternativo (Obbligatorio)" @@ -361,7 +371,7 @@ msgstr "Percorso url alternativo (Obbligatorio)" msgid "Alternative url path must start with a slash." msgstr "Il percorso url alternativo comincia con uno slash " -#. Default: "Alternative url path → target url path (date and time of creation, manually created yes/no)" +#. Default: "Alternative URL path → target URL path (date and time of creation, manually created yes/no)" #: components/manage/Controlpanels/Aliases msgid "Alternative url path → target url path (date and time of creation, manually created yes/no)" msgstr "Percorso url alternativo → percorso url di destinazione (data e ora di creazione, creata manualmente sì/no)" @@ -497,11 +507,21 @@ msgstr "Sfoglia" msgid "Browse the site, drop an image, or type a URL" msgstr "Sfoglia i contenuti, rilascia un'immagine o digita un URL" +#. Default: "Bulk upload CSV" +#: components/manage/Controlpanels/Aliases +msgid "BulkUploadAltUrls" +msgstr "" + #. Default: "By default, permissions from the container of this item are inherited. If you disable this, only the explicitly defined sharing permissions will be valid. In the overview, the symbol {inherited} indicates an inherited value. Similarly, the symbol {global} indicates a global role, which is managed by the site administrator." #: components/manage/Sharing/Sharing msgid "By default, permissions from the container of this item are inherited. If you disable this, only the explicitly defined sharing permissions will be valid. In the overview, the symbol {inherited} indicates an inherited value. Similarly, the symbol {global} indicates a global role, which is managed by the site administrator." msgstr "Di norma, i permessi di questo elemento vengono ereditati dal contenitore. Se disabiliti questa opzione, verranno considerati solo i permessi di condivisione definiti esplicitamente. Nel sommario, il simbolo {inherited} indica una impostazione ereditata. Analogamente, il simbolo {global} indica un ruolo globale, che è gestito dall'amministratore del sito" +#. Default: "CSV file" +#: components/manage/Controlpanels/Aliases +msgid "CSVFile" +msgstr "" + #. Default: "Cache Name" #: components/manage/Controlpanels/DatabaseInformation msgid "Cache Name" @@ -520,6 +540,7 @@ msgstr "Non è possibile modificare il Layout per il tipo {type}ブロックが有効で、かつ{type}< #. Default: "Cancel" #: components/manage/Add/Add #: components/manage/Contents/ContentsUploadModal +#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentType #: components/manage/Controlpanels/ContentTypeLayout #: components/manage/Controlpanels/ContentTypeSchema @@ -836,6 +857,16 @@ msgstr "Crie ou remova relacionamentos para o destino" msgid "Create working copy" msgstr "Criar cópia de trabalho" +#. Default: "Created after" +#: components/manage/Controlpanels/Aliases +msgid "Created after" +msgstr "" + +#. Default: "Created before" +#: components/manage/Controlpanels/Aliases +msgid "Created before" +msgstr "" + #. Default: "Created by {creator} on {date}" #: components/manage/WorkingCopyToastsFactory/WorkingCopyToastsFactory msgid "Created by {creator} on {date}" @@ -1293,14 +1324,18 @@ msgstr "Digite o nome completo. Por exemplo, José da Silva." msgid "Enter map Embed Code" msgstr "Informe o código Embed do mapa" -#. Default: "Enter the absolute path of the target. Target must exist or be an existing alternative url path to the target." +#. Default: "Enter the absolute path of the target. Target must exist or be an existing alternative URL path to the target." #: components/manage/Controlpanels/Aliases msgid "Enter the absolute path of the target. Target must exist or be an existing alternative url path to the target." msgstr "Informe o caminho absoluto do destino. O destino deve existir ou ser um caminho da URL alternativa existente para o destino." +#. Default: "Enter the absolute path where the alternative URL should exist. The path must start with '/'. Only URLs that result in a 404 not found page will result in a redirect occurring." +#: components/manage/Controlpanels/Aliases +msgid "Enter the absolute path where the alternative url should exist. The path must start with '/'. Only URLs that result in a 404 not found page will result in a redirect occurring." +msgstr "" + #. Default: "Enter the absolute path where the alternative url should exist. The path must start with '/'. Only urls that result in a 404 not found page will result in a redirect occurring." #: components/manage/Aliases/Aliases -#: components/manage/Controlpanels/Aliases msgid "Enter the absolute path where the alternative url should exist. The path must start with '/'. Only urls that result in a 404 not found page will result in a redirect occurring." msgstr "Informe o caminho absoluto onde a URL alternativa deve existir. O caminho deve começar com '/'. Somente URLs que resultam em uma página 404 não encontrada resultarão em um redirecionamento ocorrendo." @@ -1496,7 +1531,7 @@ msgstr "Filtrar" msgid "Filter Rules:" msgstr "Filtrar regras:" -#. Default: "Filter by prefix" +#. Default: "Filter by path" #: components/manage/Controlpanels/Aliases msgid "Filter by prefix" msgstr "Filtrar por prefixo" @@ -3591,7 +3626,6 @@ msgstr "Tags a serem removidas" #. Default: "Target" #: components/manage/Blocks/Teaser/schema -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/Relations/BrokenRelations #: components/manage/Controlpanels/Relations/RelationsMatrix msgid "Target" @@ -4432,6 +4466,11 @@ msgstr "Erro no campo de blocos {errorField}" msgid "box_forgot_password_option" msgstr "Esqueceu sua senha?" +#. Default: "Add many alternative URLs at once by uploading a CSV file. The first column should be the path to redirect from; the second, the path to redirect to. Both paths must be Plone-site-relative, starting with a slash (/). An optional third column can contain a date and time. An optional fourth column can contain a boolean to mark as a manual redirect (default true)." +#: components/manage/Controlpanels/Aliases +msgid "bulkUploadUrlsHelp" +msgstr "" + #. Default: "Checkbox" #: config/Blocks msgid "checkboxFacet" diff --git a/packages/volto/locales/ro/LC_MESSAGES/volto.po b/packages/volto/locales/ro/LC_MESSAGES/volto.po index 1eeefe866b..ba0f688b6c 100644 --- a/packages/volto/locales/ro/LC_MESSAGES/volto.po +++ b/packages/volto/locales/ro/LC_MESSAGES/volto.po @@ -88,6 +88,11 @@ msgstr "Adăugare (listă de obiecte)" msgid "Add Addons" msgstr "Adăugare add-on-uri" +#. Default: "Add Alternative URL" +#: components/manage/Controlpanels/Aliases +msgid "Add Alternative URL" +msgstr "" + #. Default: "Add Content…" #: components/manage/Toolbar/Types msgid "Add Content" @@ -304,6 +309,11 @@ msgstr "" msgid "Alias has been added" msgstr "" +#. Default: "Aliases have been uploaded." +#: components/manage/Controlpanels/Aliases +msgid "Aliases have been uploaded." +msgstr "" + #. Default: "Alignment" #: components/manage/Blocks/Image/schema #: components/manage/Blocks/LeadImage/LeadImageSidebar @@ -323,7 +333,7 @@ msgstr "Toate" msgid "All content" msgstr "" -#. Default: "All existing alternative urls for this site" +#. Default: "Existing alternative URLs for this site" #: components/manage/Controlpanels/Aliases msgid "All existing alternative urls for this site" msgstr "" @@ -350,7 +360,7 @@ msgstr "Sugestie text alternativ" msgid "Alt text hint link text" msgstr "Link sugestie text alternativ" -#. Default: "Alternative url path (Required)" +#. Default: "Alternative URL path (Required)" #: components/manage/Controlpanels/Aliases msgid "Alternative url path (Required)" msgstr "" @@ -361,7 +371,7 @@ msgstr "" msgid "Alternative url path must start with a slash." msgstr "" -#. Default: "Alternative url path → target url path (date and time of creation, manually created yes/no)" +#. Default: "Alternative URL path → target URL path (date and time of creation, manually created yes/no)" #: components/manage/Controlpanels/Aliases msgid "Alternative url path → target url path (date and time of creation, manually created yes/no)" msgstr "" @@ -497,11 +507,21 @@ msgstr "Răsfoiește" msgid "Browse the site, drop an image, or type a URL" msgstr "Navigați site-ul, adaugați o imagine sau introduceți o adresă URL" +#. Default: "Bulk upload CSV" +#: components/manage/Controlpanels/Aliases +msgid "BulkUploadAltUrls" +msgstr "" + #. Default: "By default, permissions from the container of this item are inherited. If you disable this, only the explicitly defined sharing permissions will be valid. In the overview, the symbol {inherited} indicates an inherited value. Similarly, the symbol {global} indicates a global role, which is managed by the site administrator." #: components/manage/Sharing/Sharing msgid "By default, permissions from the container of this item are inherited. If you disable this, only the explicitly defined sharing permissions will be valid. In the overview, the symbol {inherited} indicates an inherited value. Similarly, the symbol {global} indicates a global role, which is managed by the site administrator." msgstr "În mod implicit, permisiunile din containerul acestui articol sunt moștenite. Dacă dezactivați acest lucru, numai permisiunile de partajare definite în mod explicit vor fi valide. În imagine, simbolul {inherited} indică o valoare moștenită. În mod similar, simbolul {global} indică un rol global, care este gestionat de administratorul site-ului. " +#. Default: "CSV file" +#: components/manage/Controlpanels/Aliases +msgid "CSVFile" +msgstr "" + #. Default: "Cache Name" #: components/manage/Controlpanels/DatabaseInformation msgid "Cache Name" @@ -520,6 +540,7 @@ msgstr "Nu se poate edita aspectul pentru tipul de conținut {type}\n" "Language-Team: Plone i18n \n" "Content-Type: text/plain; charset=utf-8\n" @@ -90,6 +90,11 @@ msgstr "" msgid "Add Addons" msgstr "" +#. Default: "Add Alternative URL" +#: components/manage/Controlpanels/Aliases +msgid "Add Alternative URL" +msgstr "" + #. Default: "Add Content…" #: components/manage/Toolbar/Types msgid "Add Content" @@ -306,6 +311,11 @@ msgstr "" msgid "Alias has been added" msgstr "" +#. Default: "Aliases have been uploaded." +#: components/manage/Controlpanels/Aliases +msgid "Aliases have been uploaded." +msgstr "" + #. Default: "Alignment" #: components/manage/Blocks/Image/schema #: components/manage/Blocks/LeadImage/LeadImageSidebar @@ -325,7 +335,7 @@ msgstr "" msgid "All content" msgstr "" -#. Default: "All existing alternative urls for this site" +#. Default: "Existing alternative URLs for this site" #: components/manage/Controlpanels/Aliases msgid "All existing alternative urls for this site" msgstr "" @@ -352,7 +362,7 @@ msgstr "" msgid "Alt text hint link text" msgstr "" -#. Default: "Alternative url path (Required)" +#. Default: "Alternative URL path (Required)" #: components/manage/Controlpanels/Aliases msgid "Alternative url path (Required)" msgstr "" @@ -363,7 +373,7 @@ msgstr "" msgid "Alternative url path must start with a slash." msgstr "" -#. Default: "Alternative url path → target url path (date and time of creation, manually created yes/no)" +#. Default: "Alternative URL path → target URL path (date and time of creation, manually created yes/no)" #: components/manage/Controlpanels/Aliases msgid "Alternative url path → target url path (date and time of creation, manually created yes/no)" msgstr "" @@ -499,11 +509,21 @@ msgstr "" msgid "Browse the site, drop an image, or type a URL" msgstr "" +#. Default: "Bulk upload CSV" +#: components/manage/Controlpanels/Aliases +msgid "BulkUploadAltUrls" +msgstr "" + #. Default: "By default, permissions from the container of this item are inherited. If you disable this, only the explicitly defined sharing permissions will be valid. In the overview, the symbol {inherited} indicates an inherited value. Similarly, the symbol {global} indicates a global role, which is managed by the site administrator." #: components/manage/Sharing/Sharing msgid "By default, permissions from the container of this item are inherited. If you disable this, only the explicitly defined sharing permissions will be valid. In the overview, the symbol {inherited} indicates an inherited value. Similarly, the symbol {global} indicates a global role, which is managed by the site administrator." msgstr "" +#. Default: "CSV file" +#: components/manage/Controlpanels/Aliases +msgid "CSVFile" +msgstr "" + #. Default: "Cache Name" #: components/manage/Controlpanels/DatabaseInformation msgid "Cache Name" @@ -522,6 +542,7 @@ msgstr "" #. Default: "Cancel" #: components/manage/Add/Add #: components/manage/Contents/ContentsUploadModal +#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentType #: components/manage/Controlpanels/ContentTypeLayout #: components/manage/Controlpanels/ContentTypeSchema @@ -832,6 +853,16 @@ msgstr "" msgid "Create working copy" msgstr "" +#. Default: "Created after" +#: components/manage/Controlpanels/Aliases +msgid "Created after" +msgstr "" + +#. Default: "Created before" +#: components/manage/Controlpanels/Aliases +msgid "Created before" +msgstr "" + #. Default: "Created by {creator} on {date}" #: components/manage/WorkingCopyToastsFactory/WorkingCopyToastsFactory msgid "Created by {creator} on {date}" @@ -1289,14 +1320,18 @@ msgstr "" msgid "Enter map Embed Code" msgstr "" -#. Default: "Enter the absolute path of the target. Target must exist or be an existing alternative url path to the target." +#. Default: "Enter the absolute path of the target. Target must exist or be an existing alternative URL path to the target." #: components/manage/Controlpanels/Aliases msgid "Enter the absolute path of the target. Target must exist or be an existing alternative url path to the target." msgstr "" +#. Default: "Enter the absolute path where the alternative URL should exist. The path must start with '/'. Only URLs that result in a 404 not found page will result in a redirect occurring." +#: components/manage/Controlpanels/Aliases +msgid "Enter the absolute path where the alternative url should exist. The path must start with '/'. Only URLs that result in a 404 not found page will result in a redirect occurring." +msgstr "" + #. Default: "Enter the absolute path where the alternative url should exist. The path must start with '/'. Only urls that result in a 404 not found page will result in a redirect occurring." #: components/manage/Aliases/Aliases -#: components/manage/Controlpanels/Aliases msgid "Enter the absolute path where the alternative url should exist. The path must start with '/'. Only urls that result in a 404 not found page will result in a redirect occurring." msgstr "" @@ -1492,7 +1527,7 @@ msgstr "" msgid "Filter Rules:" msgstr "" -#. Default: "Filter by prefix" +#. Default: "Filter by path" #: components/manage/Controlpanels/Aliases msgid "Filter by prefix" msgstr "" @@ -3587,7 +3622,6 @@ msgstr "" #. Default: "Target" #: components/manage/Blocks/Teaser/schema -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/Relations/BrokenRelations #: components/manage/Controlpanels/Relations/RelationsMatrix msgid "Target" @@ -4428,6 +4462,11 @@ msgstr "" msgid "box_forgot_password_option" msgstr "" +#. Default: "Add many alternative URLs at once by uploading a CSV file. The first column should be the path to redirect from; the second, the path to redirect to. Both paths must be Plone-site-relative, starting with a slash (/). An optional third column can contain a date and time. An optional fourth column can contain a boolean to mark as a manual redirect (default true)." +#: components/manage/Controlpanels/Aliases +msgid "bulkUploadUrlsHelp" +msgstr "" + #. Default: "Checkbox" #: config/Blocks msgid "checkboxFacet" diff --git a/packages/volto/locales/zh_CN/LC_MESSAGES/volto.po b/packages/volto/locales/zh_CN/LC_MESSAGES/volto.po index 26986f3cb8..293d70df17 100644 --- a/packages/volto/locales/zh_CN/LC_MESSAGES/volto.po +++ b/packages/volto/locales/zh_CN/LC_MESSAGES/volto.po @@ -94,6 +94,11 @@ msgstr "添加(对象列表)" msgid "Add Addons" msgstr "添加附件" +#. Default: "Add Alternative URL" +#: components/manage/Controlpanels/Aliases +msgid "Add Alternative URL" +msgstr "" + #. Default: "Add Content…" #: components/manage/Toolbar/Types msgid "Add Content" @@ -310,6 +315,11 @@ msgstr "别名" msgid "Alias has been added" msgstr "别名已添加" +#. Default: "Aliases have been uploaded." +#: components/manage/Controlpanels/Aliases +msgid "Aliases have been uploaded." +msgstr "" + #. Default: "Alignment" #: components/manage/Blocks/Image/schema #: components/manage/Blocks/LeadImage/LeadImageSidebar @@ -329,7 +339,7 @@ msgstr "所有" msgid "All content" msgstr "所有内容" -#. Default: "All existing alternative urls for this site" +#. Default: "Existing alternative URLs for this site" #: components/manage/Controlpanels/Aliases msgid "All existing alternative urls for this site" msgstr "此网站所有的替代 urls" @@ -356,7 +366,7 @@ msgstr "替换文本提示" msgid "Alt text hint link text" msgstr "替换文本提示链接文本" -#. Default: "Alternative url path (Required)" +#. Default: "Alternative URL path (Required)" #: components/manage/Controlpanels/Aliases msgid "Alternative url path (Required)" msgstr "替代 URL 路径(必选)" @@ -367,7 +377,7 @@ msgstr "替代 URL 路径(必选)" msgid "Alternative url path must start with a slash." msgstr "替代 URL 路径必须以斜杠开头。" -#. Default: "Alternative url path → target url path (date and time of creation, manually created yes/no)" +#. Default: "Alternative URL path → target URL path (date and time of creation, manually created yes/no)" #: components/manage/Controlpanels/Aliases msgid "Alternative url path → target url path (date and time of creation, manually created yes/no)" msgstr "替代 URL 路径 → 目标 URL 路径(创建的日期和时间,手动创建 yes/no)" @@ -503,11 +513,21 @@ msgstr "浏览" msgid "Browse the site, drop an image, or type a URL" msgstr "浏览网站,放入一张图片,或者输入一个URL" +#. Default: "Bulk upload CSV" +#: components/manage/Controlpanels/Aliases +msgid "BulkUploadAltUrls" +msgstr "" + #. Default: "By default, permissions from the container of this item are inherited. If you disable this, only the explicitly defined sharing permissions will be valid. In the overview, the symbol {inherited} indicates an inherited value. Similarly, the symbol {global} indicates a global role, which is managed by the site administrator." #: components/manage/Sharing/Sharing msgid "By default, permissions from the container of this item are inherited. If you disable this, only the explicitly defined sharing permissions will be valid. In the overview, the symbol {inherited} indicates an inherited value. Similarly, the symbol {global} indicates a global role, which is managed by the site administrator." msgstr "默认情况下,条目的权限从父文件夹继承,您可以禁用继承,明确设置权限。总体来说,${inherited}符号表示这是一个继承的值,${global}符号表示这是一个由网站管理员管理的全局角色。" +#. Default: "CSV file" +#: components/manage/Controlpanels/Aliases +msgid "CSVFile" +msgstr "" + #. Default: "Cache Name" #: components/manage/Controlpanels/DatabaseInformation msgid "Cache Name" @@ -526,6 +546,7 @@ msgstr "" #. Default: "Cancel" #: components/manage/Add/Add #: components/manage/Contents/ContentsUploadModal +#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentType #: components/manage/Controlpanels/ContentTypeLayout #: components/manage/Controlpanels/ContentTypeSchema @@ -836,6 +857,16 @@ msgstr "" msgid "Create working copy" msgstr "创建工作副本" +#. Default: "Created after" +#: components/manage/Controlpanels/Aliases +msgid "Created after" +msgstr "" + +#. Default: "Created before" +#: components/manage/Controlpanels/Aliases +msgid "Created before" +msgstr "" + #. Default: "Created by {creator} on {date}" #: components/manage/WorkingCopyToastsFactory/WorkingCopyToastsFactory msgid "Created by {creator} on {date}" @@ -1293,14 +1324,18 @@ msgstr "输入您的姓名,如:张三" msgid "Enter map Embed Code" msgstr "输入 map 嵌入代码" -#. Default: "Enter the absolute path of the target. Target must exist or be an existing alternative url path to the target." +#. Default: "Enter the absolute path of the target. Target must exist or be an existing alternative URL path to the target." #: components/manage/Controlpanels/Aliases msgid "Enter the absolute path of the target. Target must exist or be an existing alternative url path to the target." msgstr "输入目标的绝对路径。目标必须存在,或者是指向目标的现有可选的url路径。" +#. Default: "Enter the absolute path where the alternative URL should exist. The path must start with '/'. Only URLs that result in a 404 not found page will result in a redirect occurring." +#: components/manage/Controlpanels/Aliases +msgid "Enter the absolute path where the alternative url should exist. The path must start with '/'. Only URLs that result in a 404 not found page will result in a redirect occurring." +msgstr "" + #. Default: "Enter the absolute path where the alternative url should exist. The path must start with '/'. Only urls that result in a 404 not found page will result in a redirect occurring." #: components/manage/Aliases/Aliases -#: components/manage/Controlpanels/Aliases msgid "Enter the absolute path where the alternative url should exist. The path must start with '/'. Only urls that result in a 404 not found page will result in a redirect occurring." msgstr "输入已存在替代 URL 的绝对路径。路径必须以 '/' 开头。只有导致404 未找到页面的url才会发生重定向。" @@ -1496,7 +1531,7 @@ msgstr "" msgid "Filter Rules:" msgstr "过滤规则" -#. Default: "Filter by prefix" +#. Default: "Filter by path" #: components/manage/Controlpanels/Aliases msgid "Filter by prefix" msgstr "按前缀过滤" @@ -3591,7 +3626,6 @@ msgstr "移除关键词" #. Default: "Target" #: components/manage/Blocks/Teaser/schema -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/Relations/BrokenRelations #: components/manage/Controlpanels/Relations/RelationsMatrix msgid "Target" @@ -4432,6 +4466,11 @@ msgstr "" msgid "box_forgot_password_option" msgstr "忘记了密码?" +#. Default: "Add many alternative URLs at once by uploading a CSV file. The first column should be the path to redirect from; the second, the path to redirect to. Both paths must be Plone-site-relative, starting with a slash (/). An optional third column can contain a date and time. An optional fourth column can contain a boolean to mark as a manual redirect (default true)." +#: components/manage/Controlpanels/Aliases +msgid "bulkUploadUrlsHelp" +msgstr "" + #. Default: "Checkbox" #: config/Blocks msgid "checkboxFacet" diff --git a/packages/volto/news/6421.bugfix b/packages/volto/news/6421.bugfix new file mode 100644 index 0000000000..3ff3139729 --- /dev/null +++ b/packages/volto/news/6421.bugfix @@ -0,0 +1 @@ +URL Management control panel: Improve layout for long paths. @davisagli diff --git a/packages/volto/news/6421.feature.1 b/packages/volto/news/6421.feature.1 new file mode 100644 index 0000000000..69374e60cc --- /dev/null +++ b/packages/volto/news/6421.feature.1 @@ -0,0 +1,3 @@ +URL Management control panel: Add feature to bulk upload redirects in a CSV file. +**Note:** This requires `plone.restapi` 9.7.3 or later. +@davisagli diff --git a/packages/volto/news/6421.feature.2 b/packages/volto/news/6421.feature.2 new file mode 100644 index 0000000000..1156bb1ff7 --- /dev/null +++ b/packages/volto/news/6421.feature.2 @@ -0,0 +1 @@ +URL Management control panel: Move the form for adding a new redirect into a modal. @davisagli \ No newline at end of file diff --git a/packages/volto/src/actions/aliases/aliases.js b/packages/volto/src/actions/aliases/aliases.js index 0131ab6a79..9c972be2eb 100644 --- a/packages/volto/src/actions/aliases/aliases.js +++ b/packages/volto/src/actions/aliases/aliases.js @@ -7,6 +7,7 @@ import { GET_ALIASES, ADD_ALIASES, REMOVE_ALIASES, + UPLOAD_ALIASES, } from '@plone/volto/constants/ActionTypes'; /** @@ -68,3 +69,20 @@ export function removeAliases(url, data) { }, }; } + +/** + * Upload aliases function. + * @function uploadAliases + * @param {Object} file CSV file. + * @returns {Object} Upload aliases action. + */ +export function uploadAliases(file) { + return { + type: UPLOAD_ALIASES, + request: { + op: 'post', + path: '/@aliases', + attach: [['file', file]], + }, + }; +} diff --git a/packages/volto/src/components/manage/Controlpanels/Aliases.jsx b/packages/volto/src/components/manage/Controlpanels/Aliases.jsx index edc54c63bb..d1909ed07c 100644 --- a/packages/volto/src/components/manage/Controlpanels/Aliases.jsx +++ b/packages/volto/src/components/manage/Controlpanels/Aliases.jsx @@ -2,31 +2,43 @@ import { useState, useEffect, useCallback, useMemo } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { Link, useHistory, useLocation } from 'react-router-dom'; import { getBaseUrl, getParentUrl, Helmet } from '@plone/volto/helpers'; -import { removeAliases, addAliases, getAliases } from '@plone/volto/actions'; +import { + removeAliases, + addAliases, + getAliases, + uploadAliases, +} from '@plone/volto/actions/aliases/aliases'; import { createPortal } from 'react-dom'; import { - Container, Button, - Segment, - Form, Checkbox, + Container, + Form, Header, Input, - Radio, + Loader, + Menu, Message, - Table, + Modal, Pagination, - Menu, + Radio, + Segment, + Table, } from 'semantic-ui-react'; import { FormattedMessage, defineMessages, useIntl } from 'react-intl'; import DatetimeWidget from '@plone/volto/components/manage/Widgets/DatetimeWidget'; +import FormFieldWrapper from '@plone/volto/components/manage/Widgets/FormFieldWrapper'; +import { ModalForm } from '@plone/volto/components/manage/Form'; import { Icon, Toolbar } from '@plone/volto/components'; +import FormattedDate from '@plone/volto/components/theme/FormattedDate/FormattedDate'; import { useClient } from '@plone/volto/hooks'; import backSVG from '@plone/volto/icons/back.svg'; import { map } from 'lodash'; import { toast } from 'react-toastify'; import { Toast } from '@plone/volto/components'; +import aheadSVG from '@plone/volto/icons/ahead.svg'; +import clearSVG from '@plone/volto/icons/clear.svg'; const messages = defineMessages({ back: { @@ -45,6 +57,46 @@ const messages = defineMessages({ id: 'Alias has been added', defaultMessage: 'Alias has been added', }, + successUpload: { + id: 'Aliases have been uploaded.', + defaultMessage: 'Aliases have been uploaded.', + }, + filterByPrefix: { + id: 'Filter by prefix', + defaultMessage: 'Filter by path', + }, + manualOrAuto: { + id: 'Manually or automatically added?', + defaultMessage: 'Manually or automatically added?', + }, + createdAfter: { + id: 'Created after', + defaultMessage: 'Created after', + }, + createdBefore: { + id: 'Created before', + defaultMessage: 'Created before', + }, + altUrlPathTitle: { + id: 'Alternative url path (Required)', + defaultMessage: 'Alternative URL path (Required)', + }, + altUrlError: { + id: 'Alternative url path must start with a slash.', + defaultMessage: 'Alternative URL path must start with a slash.', + }, + targetUrlPathTitle: { + id: 'Target Path (Required)', + defaultMessage: 'Target Path (Required)', + }, + BulkUploadAltUrls: { + id: 'BulkUploadAltUrls', + defaultMessage: 'Bulk upload CSV', + }, + CSVFile: { + id: 'CSVFile', + defaultMessage: 'CSV file', + }, }); const filterChoices = [ @@ -65,6 +117,7 @@ const Aliases = (props) => { const hasAdvancedFiltering = useSelector( (state) => state.site.data?.features?.filter_aliases_by_date, ); + const hasBulkUpload = hasAdvancedFiltering !== undefined; const aliases = useSelector((state) => state.aliases); const [filterType, setFilterType] = useState(filterChoices[0]); const [createdBefore, setCreatedBefore] = useState(null); @@ -75,6 +128,9 @@ const Aliases = (props) => { const [filterQuery, setFilterQuery] = useState(''); const [activePage, setActivePage] = useState(1); const [itemsPerPage, setItemsPerPage] = useState(10); + const [addModalOpen, setAddModalOpen] = useState(false); + const [uploadModalOpen, setUploadModalOpen] = useState(false); + const [uploadError, setUploadError] = useState(null); const isClient = useClient(); const updateResults = useCallback(() => { @@ -136,18 +192,21 @@ const Aliases = (props) => { }, ], }), - ).then(() => { - updateResults(); - setAltUrlPath(''); - setTargetUrlPath(''); - toast.success( - , - ); - }); + ) + .then(() => { + updateResults(); + setAddModalOpen(false); + setAltUrlPath(''); + setTargetUrlPath(''); + toast.success( + , + ); + }) + .catch((error) => {}); }, [altUrlPath, targetUrlPath, dispatch, intl, updateResults]); // Check/uncheck an alias @@ -169,6 +228,29 @@ const Aliases = (props) => { setAliasesToRemove([]); }; + const handleBulkUpload = (formData) => { + fetch(`data:${formData.file['content-type']};base64,${formData.file.data}`) + .then((res) => res.blob()) + .then((blob) => { + dispatch(uploadAliases(blob)) + .then(() => { + updateResults(); + setUploadError(null); + setUploadModalOpen(false); + toast.success( + , + ); + }) + .catch((error) => { + setUploadError(error.response?.body?.message); + }); + }); + }; + return (
    @@ -182,264 +264,359 @@ const Aliases = (props) => { values={{ title: {title} }} /> -
    - -
    - -
    -

    + + setAddModalOpen(false)} + trigger={ + + } + > + -

    - - setAltUrlPath(e.target.value)} - /> - {!isAltUrlCorrect && altUrlPath !== '' && ( -

    - + + + + } + error={ + !isAltUrlCorrect && altUrlPath !== '' + ? [intl.formatMessage(messages.altUrlError)] + : [] + } + > + setAltUrlPath(e.target.value)} /> -

    - )} -
    -
    - -
    -

    - -

    - - setTargetUrlPath(e.target.value)} - /> - - - {errorMessageAdd && ( - - - + + } + > + setTargetUrlPath(e.target.value)} /> - -

    {errorMessageAdd}

    -
    - )} -
    -
    -
    - + + {errorMessageAdd && ( + + + + +

    {errorMessageAdd}

    +
    + )} + + + + + + + + {hasBulkUpload && ( + <> + + setUploadModalOpen(false)} + title={intl.formatMessage(messages.BulkUploadAltUrls)} + submitError={uploadError} + description={ + <> +

    + +

    +

    + Example: +
    + + /old-home-page.asp,/front-page,2019/01/27 10:42:59 + GMT+1,true +
    + /people/JoeT,/Users/joe-thurston,2018-12-31,false +
    +

    + + } + schema={{ + fieldsets: [ + { + id: 'default', + fields: ['file'], + }, + ], + properties: { + file: { + title: intl.formatMessage(messages.CSVFile), + type: 'object', + factory: 'File Upload', + }, + }, + required: ['file'], + }} + /> + + )} +
    + +
    -
    -
    - -
    - - setFilterQuery(e.target.value)} - /> - -
    -
    - {filterChoices.map((o, i) => ( - - setFilterType(o)} - /> + + + + setFilterQuery(e.target.value)} + /> + + + + + + {filterChoices.map((o, i) => ( + + setFilterType(o)} + /> + + ))} + + - ))} - - { - setCreatedBefore(value); - }} - /> - - {hasAdvancedFiltering && ( { - setCreatedAfter(value); + setCreatedBefore(value); }} /> - )} - -
    - -
    + {hasAdvancedFiltering && ( + + { + setCreatedAfter(value); + }} + /> + + )} + +
    + +
    + +
    + +
    - - +
    + + + + + + + + + + + + + + + + + + {aliases.get.loading && ( - - - - - - - - - - - - - - - + + + - {aliases.items.length > 0 && - aliases.items.map((alias, i) => ( - - - - handleCheckAlias(value) - } - checked={aliasesToRemove.includes(alias.path)} - value={alias.path} - /> - - -

    {alias.path}

    -
    - -

    {alias['redirect-to']}

    -
    - -

    {alias.datetime}

    -
    - -

    {`${alias.manual}`}

    -
    -
    - ))} -
    -
    -
    - {pages && ( - - setActivePage(activePage) - } - /> )} - - - : - - {map(itemsPerPageChoices, (size) => ( - { - setItemsPerPage(value); - setActivePage(1); - }} - > - {size} - + {aliases.items.length > 0 && + aliases.items.map((alias, i) => ( + + + handleCheckAlias(value)} + checked={aliasesToRemove.includes(alias.path)} + value={alias.path} + /> + + + {alias.path} +
    +   → {alias['redirect-to']} +
    + + + + {`${alias.manual}`} +
    ))} -
    -
    - -
    - + )} + + + : + + {map(itemsPerPageChoices, (size) => ( + { + setItemsPerPage(value); + setActivePage(1); + }} + > + {size} + + ))} + +
    + + diff --git a/packages/volto/src/components/manage/Controlpanels/__snapshots__/Aliases.test.jsx.snap b/packages/volto/src/components/manage/Controlpanels/__snapshots__/Aliases.test.jsx.snap index 3342eef8ac..3477b9014a 100644 --- a/packages/volto/src/components/manage/Controlpanels/__snapshots__/Aliases.test.jsx.snap +++ b/packages/volto/src/components/manage/Controlpanels/__snapshots__/Aliases.test.jsx.snap @@ -19,415 +19,416 @@ exports[`Aliases renders an aliases control component 1`] = ` > URL Management -
    -
    -
    - Alternative url path (Required) -
    -

    - Enter the absolute path where the alternative url should exist. The path must start with '/'. Only urls that result in a 404 not found page will result in a redirect occurring. -

    -
    -
    - -
    -
    -
    - Target Path (Required) -
    -

    - Enter the absolute path of the target. Target must exist or be an existing alternative url path to the target. -

    -
    -
    - -
    -
    - -
    -
    -
    + + +
    -
    - All existing alternative urls for this site -
    -
    - Filter by prefix + Existing alternative URLs for this site
    - +
    +
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    +
    +
    -
    -
    - Manually or automatically added? -
    -
    - - +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    +
    +
    +
    -
    -
    - - -
    -
    -
    + class="field" + />
    +
    -
    -
    -
    - -
    - Alternative url path → target url path (date and time of creation, manually created yes/no) + Filter +
    - + +
    +
    + Alternative URL path → target URL path (date and time of creation, manually created yes/no) +
    +
    + - - + Select + + + + + + + + + - - - - - - + - - - - - - +   → + /events + + - - - - - - + + - + + - + + - + + + + - + + - - -
    + Alias + + Date + + Manual +
    - - Select - - Alias - - Target - - Date - - Manual -
    - -
    - -
    -
    -

    - /eventsgreatalias -

    -
    -

    - /events -

    -
    -

    - 2022-05-17T09:38:19+00:00 -

    -
    -

    - true -

    -
    - -
    - -
    -
    +
    +
    -

    - /eventsincredible -

    -
    + + /eventsgreatalias +
    +   → + /events +
    + + + true +
    +
    -

    - 2022-05-17T09:38:35+00:00 -

    -
    + + /eventsincredible +
    +   → + /events +
    +
    + 5/17/2022 + + + + true + + + + +
    -
    - + +
    diff --git a/packages/volto/src/components/manage/Form/ModalForm.jsx b/packages/volto/src/components/manage/Form/ModalForm.jsx index ba2f5b0a30..4bc39652c1 100644 --- a/packages/volto/src/components/manage/Form/ModalForm.jsx +++ b/packages/volto/src/components/manage/Form/ModalForm.jsx @@ -70,6 +70,7 @@ class ModalForm extends Component { required: PropTypes.arrayOf(PropTypes.string), }).isRequired, title: PropTypes.string.isRequired, + description: PropTypes.objectOf(PropTypes.any), formData: PropTypes.objectOf(PropTypes.any), submitError: PropTypes.string, onSubmit: PropTypes.func.isRequired, @@ -211,7 +212,7 @@ class ModalForm extends Component { * @returns {string} Markup for the component. */ render() { - const { schema, onCancel } = this.props; + const { schema, onCancel, description } = this.props; const currentFieldset = schema.fieldsets[this.state.currentTab]; const fields = map(currentFieldset.fields, (field) => ({ @@ -245,6 +246,7 @@ class ModalForm extends Component { onSubmit={this.onSubmit} error={state_errors || Boolean(this.props.submitError)} > + {description} {state_errors ? ( { this[method] = ( path, - { params, data, type, headers = {}, checkUrl = false } = {}, + { + params, + data, + type, + headers = {}, + checkUrl = false, + attach = [], + } = {}, ) => { let request; let promise = new Promise((resolve, reject) => { @@ -88,6 +95,10 @@ class Api { request.send(data); } + attach.forEach((attachment) => { + request.attach.apply(request, attachment); + }); + request.end((err, response) => { if ( checkUrl && diff --git a/packages/volto/src/middleware/api.js b/packages/volto/src/middleware/api.js index 85465658f6..f0e0249287 100644 --- a/packages/volto/src/middleware/api.js +++ b/packages/volto/src/middleware/api.js @@ -186,6 +186,7 @@ const apiMiddlewareFactory = checkUrl: settings.actions_raising_api_errors.includes( action.type, ), + attach: item.attach, }, ).then((reqres) => { if (action.subrequest === 'batch-upload') { @@ -205,6 +206,7 @@ const apiMiddlewareFactory = checkUrl: settings.actions_raising_api_errors.includes( action.type, ), + attach: item.attach, }), ), ) @@ -214,6 +216,7 @@ const apiMiddlewareFactory = headers: request.headers, params: request.params, checkUrl: settings.actions_raising_api_errors.includes(action.type), + attach: request.attach, }); actionPromise.then( (result) => { From fc7757f04ee6f4d12b142e3c12e79c3c38db69db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Fern=C3=A1ndez=20de=20Alba?= Date: Wed, 23 Oct 2024 16:58:10 +0200 Subject: [PATCH 091/209] Remove SEAMLESS mention in bootstrap (#6424) Co-authored-by: Steve Piercy --- packages/volto/news/6424.internal | 1 + packages/volto/src/start-server.js | 7 ++----- 2 files changed, 3 insertions(+), 5 deletions(-) create mode 100644 packages/volto/news/6424.internal diff --git a/packages/volto/news/6424.internal b/packages/volto/news/6424.internal new file mode 100644 index 0000000000..eee9d51424 --- /dev/null +++ b/packages/volto/news/6424.internal @@ -0,0 +1 @@ +Remove mention of `SEAMLESS` mode in the server bootstrap. @sneridagh diff --git a/packages/volto/src/start-server.js b/packages/volto/src/start-server.js index 52bdd7c343..2ab9921d44 100644 --- a/packages/volto/src/start-server.js +++ b/packages/volto/src/start-server.js @@ -18,11 +18,8 @@ export default function server() { server .listen(port, bind_address, () => { - if (app.apiPath === app.publicURL || !app.apiPath) { - console.log(`Volto is running in SEAMLESS mode`); - } else { - console.log(`API server (API_PATH) is set to: ${app.apiPath}`); - } + console.log(`API server (API_PATH) is set to: ${app.apiPath}`); + if (app.devProxyToApiPath) console.log( `Proxying API requests from ${app.publicURL}/++api++ to ${ From c7badcc417daa9d1961c60fd92b5544aaa836cbc Mon Sep 17 00:00:00 2001 From: David Glick Date: Wed, 23 Oct 2024 08:08:31 -0700 Subject: [PATCH 092/209] URL Management control panel: add Edit feature (#6425) --- .../core/controlpanels/aliasesControlPanel.js | 25 +- .../volto/locales/ca/LC_MESSAGES/volto.po | 17 +- .../volto/locales/de/LC_MESSAGES/volto.po | 17 +- .../volto/locales/en/LC_MESSAGES/volto.po | 17 +- .../volto/locales/es/LC_MESSAGES/volto.po | 17 +- .../volto/locales/eu/LC_MESSAGES/volto.po | 17 +- .../volto/locales/fi/LC_MESSAGES/volto.po | 17 +- .../volto/locales/fr/LC_MESSAGES/volto.po | 17 +- .../volto/locales/hi/LC_MESSAGES/volto.po | 17 +- .../volto/locales/it/LC_MESSAGES/volto.po | 17 +- .../volto/locales/ja/LC_MESSAGES/volto.po | 17 +- .../volto/locales/nl/LC_MESSAGES/volto.po | 17 +- .../volto/locales/pt/LC_MESSAGES/volto.po | 17 +- .../volto/locales/pt_BR/LC_MESSAGES/volto.po | 17 +- .../volto/locales/ro/LC_MESSAGES/volto.po | 17 +- packages/volto/locales/volto.pot | 19 +- .../volto/locales/zh_CN/LC_MESSAGES/volto.po | 17 +- packages/volto/news/6425.feature | 1 + .../manage/Controlpanels/Aliases.jsx | 365 ++++++++---------- .../__snapshots__/Aliases.test.jsx.snap | 40 ++ 20 files changed, 393 insertions(+), 312 deletions(-) create mode 100644 packages/volto/news/6425.feature diff --git a/packages/volto/cypress/tests/core/controlpanels/aliasesControlPanel.js b/packages/volto/cypress/tests/core/controlpanels/aliasesControlPanel.js index 643deb064e..5d079b429b 100644 --- a/packages/volto/cypress/tests/core/controlpanels/aliasesControlPanel.js +++ b/packages/volto/cypress/tests/core/controlpanels/aliasesControlPanel.js @@ -1,4 +1,4 @@ -describe('Add a new alias from control panel interface', () => { +describe('URL Management control panel', () => { beforeEach(() => { cy.intercept('GET', `/**/*?expand*`).as('content'); cy.autologin(); @@ -9,13 +9,28 @@ describe('Add a new alias from control panel interface', () => { }); cy.visit('/my-page'); cy.wait('@content'); + + cy.visit('/controlpanel/aliases'); + cy.get('#add-alt-url').click(); + cy.get('#field-altUrlPath').type('/alturl'); + cy.get('#field-targetUrlPath').type('/my-page'); + cy.get('button[aria-label="Save"]').click(); }); it('adds a new alias', () => { + cy.get('.toast-inner-content').contains('Alias has been added'); + }); + it('edits an existing new alias', () => { cy.visit('/controlpanel/aliases'); - cy.get('#add-alt-url').click(); - cy.get('#alternative-url-input').type('/alturl'); - cy.get('#target-url-input').type('/my-page'); - cy.get('#submit-alias').click(); + cy.get('button[aria-label="Edit Alternative URL"]').click(); + cy.get('#field-altUrlPath').clear().type('/alturl2'); + cy.get('#field-targetUrlPath').clear().type('/my-page'); + cy.get('button[aria-label="Save"]').click(); cy.get('.toast-inner-content').contains('Alias has been added'); }); + it('removes an alias', () => { + cy.visit('/controlpanel/aliases'); + cy.get('input[type="checkbox"][value="/alturl"]').click({ force: true }); + cy.get('#remove-alt-urls').click(); + cy.get('.toast-inner-content').contains('Aliases have been removed'); + }); }); diff --git a/packages/volto/locales/ca/LC_MESSAGES/volto.po b/packages/volto/locales/ca/LC_MESSAGES/volto.po index 0c8df0d970..9c127313f2 100644 --- a/packages/volto/locales/ca/LC_MESSAGES/volto.po +++ b/packages/volto/locales/ca/LC_MESSAGES/volto.po @@ -74,7 +74,6 @@ msgstr "" #. Default: "Add" #: components/manage/Aliases/Aliases -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentTypes #: components/manage/Controlpanels/Rules/ConfigureRule #: components/manage/Rules/Rules @@ -315,6 +314,11 @@ msgstr "" msgid "Alias has been added" msgstr "" +#. Default: "Aliases have been removed." +#: components/manage/Controlpanels/Aliases +msgid "Aliases have been removed." +msgstr "" + #. Default: "Aliases have been uploaded." #: components/manage/Controlpanels/Aliases msgid "Aliases have been uploaded." @@ -546,7 +550,6 @@ msgstr "No es pot editar el disseny per al tipus de contingut {type}{type} kann nicht verändert werden, da das #. Default: "Cancel" #: components/manage/Add/Add #: components/manage/Contents/ContentsUploadModal -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentType #: components/manage/Controlpanels/ContentTypeLayout #: components/manage/Controlpanels/ContentTypeSchema @@ -1212,6 +1215,11 @@ msgstr "E-Mail-Adressen stimmen nicht überein." msgid "Edit" msgstr "Bearbeiten" +#. Default: "Edit Alternative URL" +#: components/manage/Controlpanels/Aliases +msgid "Edit Alternative URL" +msgstr "" + #. Default: "Edit Rule" #: components/manage/Controlpanels/Rules/EditRule msgid "Edit Rule" @@ -1380,11 +1388,6 @@ msgstr "" msgid "Error" msgstr "Fehler" -#. Default: "Error" -#: components/manage/Controlpanels/Aliases -msgid "ErrorHeader" -msgstr "Fehler" - #. Default: "Event" #: components/manage/Controlpanels/Rules/Rules msgid "Event" diff --git a/packages/volto/locales/en/LC_MESSAGES/volto.po b/packages/volto/locales/en/LC_MESSAGES/volto.po index 2d821da363..77d49db13f 100644 --- a/packages/volto/locales/en/LC_MESSAGES/volto.po +++ b/packages/volto/locales/en/LC_MESSAGES/volto.po @@ -68,7 +68,6 @@ msgstr "" #. Default: "Add" #: components/manage/Aliases/Aliases -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentTypes #: components/manage/Controlpanels/Rules/ConfigureRule #: components/manage/Rules/Rules @@ -309,6 +308,11 @@ msgstr "" msgid "Alias has been added" msgstr "" +#. Default: "Aliases have been removed." +#: components/manage/Controlpanels/Aliases +msgid "Aliases have been removed." +msgstr "" + #. Default: "Aliases have been uploaded." #: components/manage/Controlpanels/Aliases msgid "Aliases have been uploaded." @@ -540,7 +544,6 @@ msgstr "" #. Default: "Cancel" #: components/manage/Add/Add #: components/manage/Contents/ContentsUploadModal -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentType #: components/manage/Controlpanels/ContentTypeLayout #: components/manage/Controlpanels/ContentTypeSchema @@ -1207,6 +1210,11 @@ msgstr "" msgid "Edit" msgstr "" +#. Default: "Edit Alternative URL" +#: components/manage/Controlpanels/Aliases +msgid "Edit Alternative URL" +msgstr "" + #. Default: "Edit Rule" #: components/manage/Controlpanels/Rules/EditRule msgid "Edit Rule" @@ -1375,11 +1383,6 @@ msgstr "" msgid "Error" msgstr "" -#. Default: "Error" -#: components/manage/Controlpanels/Aliases -msgid "ErrorHeader" -msgstr "" - #. Default: "Event" #: components/manage/Controlpanels/Rules/Rules msgid "Event" diff --git a/packages/volto/locales/es/LC_MESSAGES/volto.po b/packages/volto/locales/es/LC_MESSAGES/volto.po index 289d1e5462..4cc52bdb15 100644 --- a/packages/volto/locales/es/LC_MESSAGES/volto.po +++ b/packages/volto/locales/es/LC_MESSAGES/volto.po @@ -75,7 +75,6 @@ msgstr "Reglas de contenido activas en esta página" #. Default: "Add" #: components/manage/Aliases/Aliases -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentTypes #: components/manage/Controlpanels/Rules/ConfigureRule #: components/manage/Rules/Rules @@ -316,6 +315,11 @@ msgstr "Alias" msgid "Alias has been added" msgstr "Alias añadido correctamente" +#. Default: "Aliases have been removed." +#: components/manage/Controlpanels/Aliases +msgid "Aliases have been removed." +msgstr "" + #. Default: "Aliases have been uploaded." #: components/manage/Controlpanels/Aliases msgid "Aliases have been uploaded." @@ -547,7 +551,6 @@ msgstr "No se puede editar la plantilla de {type} porque el sop #. Default: "Cancel" #: components/manage/Add/Add #: components/manage/Contents/ContentsUploadModal -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentType #: components/manage/Controlpanels/ContentTypeLayout #: components/manage/Controlpanels/ContentTypeSchema @@ -1214,6 +1217,11 @@ msgstr "La dirección de correo electrónico no coincide." msgid "Edit" msgstr "Editar" +#. Default: "Edit Alternative URL" +#: components/manage/Controlpanels/Aliases +msgid "Edit Alternative URL" +msgstr "" + #. Default: "Edit Rule" #: components/manage/Controlpanels/Rules/EditRule msgid "Edit Rule" @@ -1382,11 +1390,6 @@ msgstr "Entradas" msgid "Error" msgstr "Error" -#. Default: "Error" -#: components/manage/Controlpanels/Aliases -msgid "ErrorHeader" -msgstr "Error" - #. Default: "Event" #: components/manage/Controlpanels/Rules/Rules msgid "Event" diff --git a/packages/volto/locales/eu/LC_MESSAGES/volto.po b/packages/volto/locales/eu/LC_MESSAGES/volto.po index 50579cea41..e2fed09346 100644 --- a/packages/volto/locales/eu/LC_MESSAGES/volto.po +++ b/packages/volto/locales/eu/LC_MESSAGES/volto.po @@ -75,7 +75,6 @@ msgstr "Orrialde honetan aktibo dauden eduki-erregelak" #. Default: "Add" #: components/manage/Aliases/Aliases -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentTypes #: components/manage/Controlpanels/Rules/ConfigureRule #: components/manage/Rules/Rules @@ -316,6 +315,11 @@ msgstr "Aliasa" msgid "Alias has been added" msgstr "Aliasa ondo gehitu da" +#. Default: "Aliases have been removed." +#: components/manage/Controlpanels/Aliases +msgid "Aliases have been removed." +msgstr "" + #. Default: "Aliases have been uploaded." #: components/manage/Controlpanels/Aliases msgid "Aliases have been uploaded." @@ -547,7 +551,6 @@ msgstr "Ezin da {type} elementu-motaren itxura aldatu, #. Default: "Cancel" #: components/manage/Add/Add #: components/manage/Contents/ContentsUploadModal -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentType #: components/manage/Controlpanels/ContentTypeLayout #: components/manage/Controlpanels/ContentTypeSchema @@ -1214,6 +1217,11 @@ msgstr "Eposta helbideak ez datoz bat" msgid "Edit" msgstr "Editatu" +#. Default: "Edit Alternative URL" +#: components/manage/Controlpanels/Aliases +msgid "Edit Alternative URL" +msgstr "" + #. Default: "Edit Rule" #: components/manage/Controlpanels/Rules/EditRule msgid "Edit Rule" @@ -1382,11 +1390,6 @@ msgstr "" msgid "Error" msgstr "Erroea" -#. Default: "Error" -#: components/manage/Controlpanels/Aliases -msgid "ErrorHeader" -msgstr "Errorea" - #. Default: "Event" #: components/manage/Controlpanels/Rules/Rules msgid "Event" diff --git a/packages/volto/locales/fi/LC_MESSAGES/volto.po b/packages/volto/locales/fi/LC_MESSAGES/volto.po index b86fd41e94..f851233f39 100644 --- a/packages/volto/locales/fi/LC_MESSAGES/volto.po +++ b/packages/volto/locales/fi/LC_MESSAGES/volto.po @@ -73,7 +73,6 @@ msgstr "Aktiiviset sisältösäännöt tällä sivulla" #. Default: "Add" #: components/manage/Aliases/Aliases -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentTypes #: components/manage/Controlpanels/Rules/ConfigureRule #: components/manage/Rules/Rules @@ -314,6 +313,11 @@ msgstr "Alias" msgid "Alias has been added" msgstr "Alias on lisätty" +#. Default: "Aliases have been removed." +#: components/manage/Controlpanels/Aliases +msgid "Aliases have been removed." +msgstr "" + #. Default: "Aliases have been uploaded." #: components/manage/Controlpanels/Aliases msgid "Aliases have been uploaded." @@ -545,7 +549,6 @@ msgstr "Sisältötyypin {type} asettelua ei voi muokata, koska #. Default: "Cancel" #: components/manage/Add/Add #: components/manage/Contents/ContentsUploadModal -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentType #: components/manage/Controlpanels/ContentTypeLayout #: components/manage/Controlpanels/ContentTypeSchema @@ -1212,6 +1215,11 @@ msgstr "Sähköpostiosoitteet eivät olleet identtiset." msgid "Edit" msgstr "Muokkaa" +#. Default: "Edit Alternative URL" +#: components/manage/Controlpanels/Aliases +msgid "Edit Alternative URL" +msgstr "" + #. Default: "Edit Rule" #: components/manage/Controlpanels/Rules/EditRule msgid "Edit Rule" @@ -1380,11 +1388,6 @@ msgstr "" msgid "Error" msgstr "Virhe" -#. Default: "Error" -#: components/manage/Controlpanels/Aliases -msgid "ErrorHeader" -msgstr "" - #. Default: "Event" #: components/manage/Controlpanels/Rules/Rules msgid "Event" diff --git a/packages/volto/locales/fr/LC_MESSAGES/volto.po b/packages/volto/locales/fr/LC_MESSAGES/volto.po index 978fad0f51..2f5d0b3005 100644 --- a/packages/volto/locales/fr/LC_MESSAGES/volto.po +++ b/packages/volto/locales/fr/LC_MESSAGES/volto.po @@ -75,7 +75,6 @@ msgstr "Règles de contenu actives dans cette page" #. Default: "Add" #: components/manage/Aliases/Aliases -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentTypes #: components/manage/Controlpanels/Rules/ConfigureRule #: components/manage/Rules/Rules @@ -316,6 +315,11 @@ msgstr "Alias" msgid "Alias has been added" msgstr "L'alias a été ajouté" +#. Default: "Aliases have been removed." +#: components/manage/Controlpanels/Aliases +msgid "Aliases have been removed." +msgstr "" + #. Default: "Aliases have been uploaded." #: components/manage/Controlpanels/Aliases msgid "Aliases have been uploaded." @@ -547,7 +551,6 @@ msgstr "Impossible de modifier la mise en page pour le type de contenu { #. Default: "Cancel" #: components/manage/Add/Add #: components/manage/Contents/ContentsUploadModal -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentType #: components/manage/Controlpanels/ContentTypeLayout #: components/manage/Controlpanels/ContentTypeSchema @@ -1214,6 +1217,11 @@ msgstr "Les adresses e-mails ne correspondent pas." msgid "Edit" msgstr "Modifier" +#. Default: "Edit Alternative URL" +#: components/manage/Controlpanels/Aliases +msgid "Edit Alternative URL" +msgstr "" + #. Default: "Edit Rule" #: components/manage/Controlpanels/Rules/EditRule msgid "Edit Rule" @@ -1382,11 +1390,6 @@ msgstr "" msgid "Error" msgstr "Erreur" -#. Default: "Error" -#: components/manage/Controlpanels/Aliases -msgid "ErrorHeader" -msgstr "Erreur" - #. Default: "Event" #: components/manage/Controlpanels/Rules/Rules msgid "Event" diff --git a/packages/volto/locales/hi/LC_MESSAGES/volto.po b/packages/volto/locales/hi/LC_MESSAGES/volto.po index c563207792..06006f6f10 100644 --- a/packages/volto/locales/hi/LC_MESSAGES/volto.po +++ b/packages/volto/locales/hi/LC_MESSAGES/volto.po @@ -68,7 +68,6 @@ msgstr "पेज में सक्रिए कंटेंट रूल् #. Default: "Add" #: components/manage/Aliases/Aliases -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentTypes #: components/manage/Controlpanels/Rules/ConfigureRule #: components/manage/Rules/Rules @@ -309,6 +308,11 @@ msgstr "उपनाम" msgid "Alias has been added" msgstr "उपनाम जोड़ा गया है" +#. Default: "Aliases have been removed." +#: components/manage/Controlpanels/Aliases +msgid "Aliases have been removed." +msgstr "" + #. Default: "Aliases have been uploaded." #: components/manage/Controlpanels/Aliases msgid "Aliases have been uploaded." @@ -540,7 +544,6 @@ msgstr "" #. Default: "Cancel" #: components/manage/Add/Add #: components/manage/Contents/ContentsUploadModal -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentType #: components/manage/Controlpanels/ContentTypeLayout #: components/manage/Controlpanels/ContentTypeSchema @@ -1207,6 +1210,11 @@ msgstr "ईमेल पते मेल नहीं खाते।" msgid "Edit" msgstr "संपादित करें" +#. Default: "Edit Alternative URL" +#: components/manage/Controlpanels/Aliases +msgid "Edit Alternative URL" +msgstr "" + #. Default: "Edit Rule" #: components/manage/Controlpanels/Rules/EditRule msgid "Edit Rule" @@ -1375,11 +1383,6 @@ msgstr "एन्ट्रीज़" msgid "Error" msgstr "त्रुटि" -#. Default: "Error" -#: components/manage/Controlpanels/Aliases -msgid "ErrorHeader" -msgstr "त्रुटि" - #. Default: "Event" #: components/manage/Controlpanels/Rules/Rules msgid "Event" diff --git a/packages/volto/locales/it/LC_MESSAGES/volto.po b/packages/volto/locales/it/LC_MESSAGES/volto.po index 0b261ae65b..794ac7f9a6 100644 --- a/packages/volto/locales/it/LC_MESSAGES/volto.po +++ b/packages/volto/locales/it/LC_MESSAGES/volto.po @@ -68,7 +68,6 @@ msgstr "Regole di contenuto attive in questa Pagina" #. Default: "Add" #: components/manage/Aliases/Aliases -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentTypes #: components/manage/Controlpanels/Rules/ConfigureRule #: components/manage/Rules/Rules @@ -309,6 +308,11 @@ msgstr "Alias" msgid "Alias has been added" msgstr "L'alias è stato aggiunto" +#. Default: "Aliases have been removed." +#: components/manage/Controlpanels/Aliases +msgid "Aliases have been removed." +msgstr "" + #. Default: "Aliases have been uploaded." #: components/manage/Controlpanels/Aliases msgid "Aliases have been uploaded." @@ -540,7 +544,6 @@ msgstr "Non è possibile modificare il Layout per il tipo {type}ブロックが有効で、かつ{type}< #. Default: "Cancel" #: components/manage/Add/Add #: components/manage/Contents/ContentsUploadModal -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentType #: components/manage/Controlpanels/ContentTypeLayout #: components/manage/Controlpanels/ContentTypeSchema @@ -1213,6 +1216,11 @@ msgstr "Os endereços de e-mail não coincidem." msgid "Edit" msgstr "Editar" +#. Default: "Edit Alternative URL" +#: components/manage/Controlpanels/Aliases +msgid "Edit Alternative URL" +msgstr "" + #. Default: "Edit Rule" #: components/manage/Controlpanels/Rules/EditRule msgid "Edit Rule" @@ -1381,11 +1389,6 @@ msgstr "Entradas" msgid "Error" msgstr "Erro" -#. Default: "Error" -#: components/manage/Controlpanels/Aliases -msgid "ErrorHeader" -msgstr "Erro" - #. Default: "Event" #: components/manage/Controlpanels/Rules/Rules msgid "Event" diff --git a/packages/volto/locales/ro/LC_MESSAGES/volto.po b/packages/volto/locales/ro/LC_MESSAGES/volto.po index ba0f688b6c..64f8414719 100644 --- a/packages/volto/locales/ro/LC_MESSAGES/volto.po +++ b/packages/volto/locales/ro/LC_MESSAGES/volto.po @@ -68,7 +68,6 @@ msgstr "" #. Default: "Add" #: components/manage/Aliases/Aliases -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentTypes #: components/manage/Controlpanels/Rules/ConfigureRule #: components/manage/Rules/Rules @@ -309,6 +308,11 @@ msgstr "" msgid "Alias has been added" msgstr "" +#. Default: "Aliases have been removed." +#: components/manage/Controlpanels/Aliases +msgid "Aliases have been removed." +msgstr "" + #. Default: "Aliases have been uploaded." #: components/manage/Controlpanels/Aliases msgid "Aliases have been uploaded." @@ -540,7 +544,6 @@ msgstr "Nu se poate edita aspectul pentru tipul de conținut {type}\n" "Language-Team: Plone i18n \n" "Content-Type: text/plain; charset=utf-8\n" @@ -70,7 +70,6 @@ msgstr "" #. Default: "Add" #: components/manage/Aliases/Aliases -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentTypes #: components/manage/Controlpanels/Rules/ConfigureRule #: components/manage/Rules/Rules @@ -311,6 +310,11 @@ msgstr "" msgid "Alias has been added" msgstr "" +#. Default: "Aliases have been removed." +#: components/manage/Controlpanels/Aliases +msgid "Aliases have been removed." +msgstr "" + #. Default: "Aliases have been uploaded." #: components/manage/Controlpanels/Aliases msgid "Aliases have been uploaded." @@ -542,7 +546,6 @@ msgstr "" #. Default: "Cancel" #: components/manage/Add/Add #: components/manage/Contents/ContentsUploadModal -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentType #: components/manage/Controlpanels/ContentTypeLayout #: components/manage/Controlpanels/ContentTypeSchema @@ -1209,6 +1212,11 @@ msgstr "" msgid "Edit" msgstr "" +#. Default: "Edit Alternative URL" +#: components/manage/Controlpanels/Aliases +msgid "Edit Alternative URL" +msgstr "" + #. Default: "Edit Rule" #: components/manage/Controlpanels/Rules/EditRule msgid "Edit Rule" @@ -1377,11 +1385,6 @@ msgstr "" msgid "Error" msgstr "" -#. Default: "Error" -#: components/manage/Controlpanels/Aliases -msgid "ErrorHeader" -msgstr "" - #. Default: "Event" #: components/manage/Controlpanels/Rules/Rules msgid "Event" diff --git a/packages/volto/locales/zh_CN/LC_MESSAGES/volto.po b/packages/volto/locales/zh_CN/LC_MESSAGES/volto.po index 293d70df17..c64ddee6a5 100644 --- a/packages/volto/locales/zh_CN/LC_MESSAGES/volto.po +++ b/packages/volto/locales/zh_CN/LC_MESSAGES/volto.po @@ -74,7 +74,6 @@ msgstr "在此页面中活动的内容规则" #. Default: "Add" #: components/manage/Aliases/Aliases -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentTypes #: components/manage/Controlpanels/Rules/ConfigureRule #: components/manage/Rules/Rules @@ -315,6 +314,11 @@ msgstr "别名" msgid "Alias has been added" msgstr "别名已添加" +#. Default: "Aliases have been removed." +#: components/manage/Controlpanels/Aliases +msgid "Aliases have been removed." +msgstr "" + #. Default: "Aliases have been uploaded." #: components/manage/Controlpanels/Aliases msgid "Aliases have been uploaded." @@ -546,7 +550,6 @@ msgstr "" #. Default: "Cancel" #: components/manage/Add/Add #: components/manage/Contents/ContentsUploadModal -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentType #: components/manage/Controlpanels/ContentTypeLayout #: components/manage/Controlpanels/ContentTypeSchema @@ -1213,6 +1216,11 @@ msgstr "邮箱地址不匹配" msgid "Edit" msgstr "编辑" +#. Default: "Edit Alternative URL" +#: components/manage/Controlpanels/Aliases +msgid "Edit Alternative URL" +msgstr "" + #. Default: "Edit Rule" #: components/manage/Controlpanels/Rules/EditRule msgid "Edit Rule" @@ -1381,11 +1389,6 @@ msgstr "" msgid "Error" msgstr "错误" -#. Default: "Error" -#: components/manage/Controlpanels/Aliases -msgid "ErrorHeader" -msgstr "" - #. Default: "Event" #: components/manage/Controlpanels/Rules/Rules msgid "Event" diff --git a/packages/volto/news/6425.feature b/packages/volto/news/6425.feature new file mode 100644 index 0000000000..7a12576c21 --- /dev/null +++ b/packages/volto/news/6425.feature @@ -0,0 +1 @@ +URL Management control panel: Add a way to edit existing aliases. @davisagli diff --git a/packages/volto/src/components/manage/Controlpanels/Aliases.jsx b/packages/volto/src/components/manage/Controlpanels/Aliases.jsx index d1909ed07c..56bd71f0e9 100644 --- a/packages/volto/src/components/manage/Controlpanels/Aliases.jsx +++ b/packages/volto/src/components/manage/Controlpanels/Aliases.jsx @@ -18,8 +18,6 @@ import { Input, Loader, Menu, - Message, - Modal, Pagination, Radio, Segment, @@ -34,11 +32,10 @@ import FormattedDate from '@plone/volto/components/theme/FormattedDate/Formatted import { useClient } from '@plone/volto/hooks'; import backSVG from '@plone/volto/icons/back.svg'; +import editingSVG from '@plone/volto/icons/editing.svg'; import { map } from 'lodash'; import { toast } from 'react-toastify'; import { Toast } from '@plone/volto/components'; -import aheadSVG from '@plone/volto/icons/ahead.svg'; -import clearSVG from '@plone/volto/icons/clear.svg'; const messages = defineMessages({ back: { @@ -49,6 +46,14 @@ const messages = defineMessages({ id: 'URL Management', defaultMessage: 'URL Management', }, + AddUrl: { + id: 'Add Alternative URL', + defaultMessage: 'Add Alternative URL', + }, + EditUrl: { + id: 'Edit Alternative URL', + defaultMessage: 'Edit Alternative URL', + }, success: { id: 'Success', defaultMessage: 'Success', @@ -61,6 +66,10 @@ const messages = defineMessages({ id: 'Aliases have been uploaded.', defaultMessage: 'Aliases have been uploaded.', }, + successRemove: { + id: 'Aliases have been removed.', + defaultMessage: 'Aliases have been removed.', + }, filterByPrefix: { id: 'Filter by prefix', defaultMessage: 'Filter by path', @@ -122,13 +131,13 @@ const Aliases = (props) => { const [filterType, setFilterType] = useState(filterChoices[0]); const [createdBefore, setCreatedBefore] = useState(null); const [createdAfter, setCreatedAfter] = useState(null); - const [altUrlPath, setAltUrlPath] = useState(''); - const [targetUrlPath, setTargetUrlPath] = useState(''); const [aliasesToRemove, setAliasesToRemove] = useState([]); const [filterQuery, setFilterQuery] = useState(''); const [activePage, setActivePage] = useState(1); const [itemsPerPage, setItemsPerPage] = useState(10); const [addModalOpen, setAddModalOpen] = useState(false); + const [addError, setAddError] = useState(null); + const [editingData, setEditingData] = useState(null); const [uploadModalOpen, setUploadModalOpen] = useState(false); const [uploadError, setUploadError] = useState(null); const isClient = useClient(); @@ -173,41 +182,43 @@ const Aliases = (props) => { return pages; }, [aliases.items_total, itemsPerPage]); - // Validate altUrlPath starts with a slash - const isAltUrlCorrect = useMemo(() => { - return Boolean(altUrlPath.charAt(0) === '/'); - }, [altUrlPath]); - - // Check for errors on add - const errorMessageAdd = aliases.add.error?.response?.body?.message; - // Add new alias - const handleSubmitAlias = useCallback(() => { - dispatch( - addAliases('', { - items: [ - { - path: altUrlPath, - 'redirect-to': targetUrlPath, - }, - ], - }), - ) - .then(() => { - updateResults(); - setAddModalOpen(false); - setAltUrlPath(''); - setTargetUrlPath(''); - toast.success( - , - ); - }) - .catch((error) => {}); - }, [altUrlPath, targetUrlPath, dispatch, intl, updateResults]); + const handleAdd = (formData) => { + const { altUrlPath, targetUrlPath } = formData; + // Validate altUrlPath starts with a slash + if (!altUrlPath || altUrlPath.charAt(0) !== '/') { + setAddError(intl.formatMessage(messages.altUrlError)); + return; + } + // Remove existing alias first if we're editing it. + const precondition = editingData + ? dispatch( + removeAliases('', { items: [{ path: editingData.altUrlPath }] }), + ) + : Promise.resolve(); + precondition.then(() => { + dispatch( + addAliases('', { + items: [{ path: altUrlPath, 'redirect-to': targetUrlPath }], + }), + ) + .then(() => { + updateResults(); + setAddModalOpen(false); + setEditingData(null); + toast.success( + , + ); + }) + .catch((error) => { + setAddError(error.response?.body?.message); + }); + }); + }; // Check/uncheck an alias const handleCheckAlias = (alias) => { @@ -224,10 +235,20 @@ const Aliases = (props) => { removeAliases('', { items: aliasesToRemove.map((a) => ({ path: a })), }), - ).then(updateResults); + ).then(() => { + updateResults(); + toast.success( + , + ); + }); setAliasesToRemove([]); }; + // Upload CSV const handleBulkUpload = (formData) => { fetch(`data:${formData.file['content-type']};base64,${formData.file.data}`) .then((res) => res.blob()) @@ -265,167 +286,108 @@ const Aliases = (props) => { /> - setAddModalOpen(false)} - trigger={ - - } + + {addModalOpen && ( + setAddModalOpen(false)} + title={ + editingData + ? intl.formatMessage(messages.EditUrl) + : intl.formatMessage(messages.AddUrl) + } + submitError={addError} + schema={{ + fieldsets: [ + { + id: 'default', + fields: ['altUrlPath', 'targetUrlPath'], + }, + ], + properties: { + altUrlPath: { + title: intl.formatMessage(messages.altUrlPathTitle), + description: ( - -

    {errorMessageAdd}

    -
    - )} - - - - - - - + ), + placeholder: '/example', + }, + targetUrlPath: { + title: intl.formatMessage(messages.targetUrlPathTitle), + description: ( + + ), + placeholder: '/example', + }, + }, + required: ['altUrlPath', 'targetUrlPath'], + }} + formData={editingData || {}} + /> + )} {hasBulkUpload && ( <> - setUploadModalOpen(false)} - title={intl.formatMessage(messages.BulkUploadAltUrls)} - submitError={uploadError} - description={ - <> -

    - -

    -

    - Example: -
    - - /old-home-page.asp,/front-page,2019/01/27 10:42:59 - GMT+1,true + {uploadModalOpen && ( + setUploadModalOpen(false)} + title={intl.formatMessage(messages.BulkUploadAltUrls)} + submitError={uploadError} + description={ + <> +

    + +

    +

    + Example:
    - /people/JoeT,/Users/joe-thurston,2018-12-31,false -
    -

    - - } - schema={{ - fieldsets: [ - { - id: 'default', - fields: ['file'], - }, - ], - properties: { - file: { - title: intl.formatMessage(messages.CSVFile), - type: 'object', - factory: 'File Upload', + + /old-home-page.asp,/front-page,2019/01/27 10:42:59 + GMT+1,true +
    + /people/JoeT,/Users/joe-thurston,2018-12-31,false +
    +

    + + } + schema={{ + fieldsets: [ + { + id: 'default', + fields: ['file'], + }, + ], + properties: { + file: { + title: intl.formatMessage(messages.CSVFile), + type: 'object', + factory: 'File Upload', + }, }, - }, - required: ['file'], - }} - /> + required: ['file'], + }} + /> + )} )} @@ -529,7 +491,7 @@ const Aliases = (props) => { {aliases.get.loading && ( - + @@ -547,7 +509,21 @@ const Aliases = (props) => { {alias.path}
    -   → {alias['redirect-to']} +   → {alias['redirect-to']}{' '} +
    @@ -607,6 +583,7 @@ const Aliases = (props) => {
      → /events + +   → /events + + Remove selected From b8bed6f687f4a620ec528ccae52ab793898573d9 Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Wed, 23 Oct 2024 17:34:04 +0200 Subject: [PATCH 093/209] Add German translations for URL management control panel (#6429) --- .../volto/locales/de/LC_MESSAGES/volto.po | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/volto/locales/de/LC_MESSAGES/volto.po b/packages/volto/locales/de/LC_MESSAGES/volto.po index 609ec8d2b7..accbee32db 100644 --- a/packages/volto/locales/de/LC_MESSAGES/volto.po +++ b/packages/volto/locales/de/LC_MESSAGES/volto.po @@ -95,7 +95,7 @@ msgstr "Hier werden verfügbare und installierte Backend-Add-ons gezeigt. Inform #. Default: "Add Alternative URL" #: components/manage/Controlpanels/Aliases msgid "Add Alternative URL" -msgstr "" +msgstr "Quell URL hinzufügen" #. Default: "Add Content…" #: components/manage/Toolbar/Types @@ -175,7 +175,7 @@ msgstr "Datum hinzufügen" #. Default: "Add element to container" #: components/manage/Blocks/Container/SimpleContainerToolbar msgid "Add element to container" -msgstr "" +msgstr "Element zum Container hinzufügen" #. Default: "Add field" #: components/manage/Widgets/SchemaWidget @@ -316,12 +316,12 @@ msgstr "Alias wurde hinzugefügt" #. Default: "Aliases have been removed." #: components/manage/Controlpanels/Aliases msgid "Aliases have been removed." -msgstr "" +msgstr "Weiterleitungen wurden entfernt." #. Default: "Aliases have been uploaded." #: components/manage/Controlpanels/Aliases msgid "Aliases have been uploaded." -msgstr "" +msgstr "Weiterleitungen wurden hochgeladen." #. Default: "Alignment" #: components/manage/Blocks/Image/schema @@ -424,7 +424,7 @@ msgstr "Aufsteigend" #. Default: "Assign the {role} role to {entry}" #: components/manage/Sharing/Sharing msgid "Assign the {role} role to {entry}" -msgstr "" +msgstr "Rolle {role} zum {entry} zugewiesen." #. Default: "Assignments" #: components/manage/Controlpanels/Rules/ConfigureRule @@ -519,7 +519,7 @@ msgstr "Seite durchsuchen, Bild ablegen oder URL eingeben" #. Default: "Bulk upload CSV" #: components/manage/Controlpanels/Aliases msgid "BulkUploadAltUrls" -msgstr "" +msgstr "CSV Massenupload" #. Default: "By default, permissions from the container of this item are inherited. If you disable this, only the explicitly defined sharing permissions will be valid. In the overview, the symbol {inherited} indicates an inherited value. Similarly, the symbol {global} indicates a global role, which is managed by the site administrator." #: components/manage/Sharing/Sharing @@ -529,7 +529,7 @@ msgstr "Standardmäßig werden die Berechtigungen von einem Ordner auf die in ih #. Default: "CSV file" #: components/manage/Controlpanels/Aliases msgid "CSVFile" -msgstr "" +msgstr "CSV Datei" #. Default: "Cache Name" #: components/manage/Controlpanels/DatabaseInformation @@ -1218,7 +1218,7 @@ msgstr "Bearbeiten" #. Default: "Edit Alternative URL" #: components/manage/Controlpanels/Aliases msgid "Edit Alternative URL" -msgstr "" +msgstr "Quell URL bearbeiten" #. Default: "Edit Rule" #: components/manage/Controlpanels/Rules/EditRule @@ -1339,7 +1339,7 @@ msgstr "Geben Sie den absoluten Pfad des Ziels ein. Das Ziel muss existieren ode #. Default: "Enter the absolute path where the alternative URL should exist. The path must start with '/'. Only URLs that result in a 404 not found page will result in a redirect occurring." #: components/manage/Controlpanels/Aliases msgid "Enter the absolute path where the alternative url should exist. The path must start with '/'. Only URLs that result in a 404 not found page will result in a redirect occurring." -msgstr "" +msgstr "Geben Sie den absoluten Pfad an wo die Quell URL hinterlegt werden sollte. Der Pfad muss mit einem '/' beginnen. Nur URLs welche einen 404 (Not Found) Fehler auslösen werden weitergeleitet." #. Default: "Enter the absolute path where the alternative url should exist. The path must start with '/'. Only urls that result in a 404 not found page will result in a redirect occurring." #: components/manage/Aliases/Aliases @@ -1370,7 +1370,7 @@ msgstr "Geben Sie Ihren Nutzernamen zur Verifikation ein." #. Default: "Entries" #: components/manage/Blocks/ToC/Schema msgid "Entries" -msgstr "" +msgstr "Einträge" #. Default: "Error" #: components/manage/Add/Add From d8727abcf17d142d3ad4f32626d28b108de470b8 Mon Sep 17 00:00:00 2001 From: David Glick Date: Wed, 23 Oct 2024 09:52:28 -0700 Subject: [PATCH 094/209] Test with plone.restapi 9.8.0 (#6430) --- packages/volto/news/6414.feature | 2 +- packages/volto/news/6421.feature.1 | 2 +- variables.mk | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/volto/news/6414.feature b/packages/volto/news/6414.feature index 9583c6da10..8ee0a49e68 100644 --- a/packages/volto/news/6414.feature +++ b/packages/volto/news/6414.feature @@ -1,3 +1,3 @@ URL Management control panel: add a filter for redirects created after a given date. -**Note:** This requires `Products.CMFPlone` 6.0.14 and `plone.restapi` 9.7.3 or later. +**Note:** This requires `Products.CMFPlone` 6.0.14 and `plone.restapi` 9.8.0 or later. @davisagli diff --git a/packages/volto/news/6421.feature.1 b/packages/volto/news/6421.feature.1 index 69374e60cc..b20307ca39 100644 --- a/packages/volto/news/6421.feature.1 +++ b/packages/volto/news/6421.feature.1 @@ -1,3 +1,3 @@ URL Management control panel: Add feature to bulk upload redirects in a CSV file. -**Note:** This requires `plone.restapi` 9.7.3 or later. +**Note:** This requires `plone.restapi` 9.8.0 or later. @davisagli diff --git a/variables.mk b/variables.mk index 3a40d4a3ca..6b621286d2 100644 --- a/variables.mk +++ b/variables.mk @@ -7,5 +7,5 @@ SCRIPTSPACKAGE = ./packages/scripts # Plone 5 legacy DOCKER_IMAGE5=plone/plone-backend:5.2.12 -KGS5=plone.restapi==9.7.0 plone.volto==4.2.0 plone.rest==3.0.1 +KGS5=plone.restapi==9.8.0 plone.volto==4.2.0 plone.rest==3.0.1 TESTING_ADDONS=plone.app.robotframework==2.0.0 plone.app.testing==7.0.1 From 4b690be37c317fb87160ff1d26fd05cb92cd30e7 Mon Sep 17 00:00:00 2001 From: dobri1408 <50819975+dobri1408@users.noreply.github.com> Date: Fri, 25 Oct 2024 02:12:53 +0300 Subject: [PATCH 095/209] (fix): Enable Volto Login to Redirect Back to Original Route After Authentication (#6419) Co-authored-by: Steve Piercy Co-authored-by: David Glick --- packages/coresandbox/src/index.ts | 8 ++++++++ .../volto/cypress/tests/coresandbox/login.js | 17 +++++++++++++++++ packages/volto/news/6419.bugfix | 1 + .../volto/src/components/theme/Login/Login.jsx | 3 +-- 4 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 packages/volto/cypress/tests/coresandbox/login.js create mode 100644 packages/volto/news/6419.bugfix diff --git a/packages/coresandbox/src/index.ts b/packages/coresandbox/src/index.ts index bad373a9b0..6bb0eb551c 100644 --- a/packages/coresandbox/src/index.ts +++ b/packages/coresandbox/src/index.ts @@ -19,6 +19,8 @@ import TestForm from './components/TestForm'; import FormBlockView from './components/Blocks/FormBlock/View'; import FormBlockEdit from './components/Blocks/FormBlock/Edit'; import { formBlockSchema } from './components/Blocks/FormBlock/schema'; +import { Login } from '@plone/volto/components'; + const testBlock: BlockConfigBase = { id: 'testBlock', title: 'testBlock', @@ -207,6 +209,12 @@ const applyConfig = (config: ConfigType) => { exact: false, }, ]; + + config.addonRoutes.push({ + path: '/fallback_login', + component: Login, + exact: false, + }); config.blocks.blocksConfig.testBlock = testBlock; config.blocks.blocksConfig.inputBlock = inputBlock; config.blocks.blocksConfig.testBlockConditional = testBlockConditional; diff --git a/packages/volto/cypress/tests/coresandbox/login.js b/packages/volto/cypress/tests/coresandbox/login.js new file mode 100644 index 0000000000..ed6c933198 --- /dev/null +++ b/packages/volto/cypress/tests/coresandbox/login.js @@ -0,0 +1,17 @@ +import { ploneAuth } from '../../support/constants'; + +describe('Login Tests', () => { + beforeEach(() => { + cy.visit('/fallback_login'); + }); + it('Check login redirect when the login is at another root', function () { + const user = ploneAuth[0]; + const password = ploneAuth[1]; + + cy.get('#login').type(user).should('have.value', user); + cy.get('#password').type(password).should('have.value', password); + cy.get('#login-form-submit').click(); + cy.wait(3000); + cy.location('pathname').should('eq', '/'); + }); +}); diff --git a/packages/volto/news/6419.bugfix b/packages/volto/news/6419.bugfix new file mode 100644 index 0000000000..e7e843cb57 --- /dev/null +++ b/packages/volto/news/6419.bugfix @@ -0,0 +1 @@ +Fix redirect after login if the `Login` component is used on a route other than `/login` or `/logout`. @dobri1408 diff --git a/packages/volto/src/components/theme/Login/Login.jsx b/packages/volto/src/components/theme/Login/Login.jsx index efdc409e21..5091ac9ef9 100644 --- a/packages/volto/src/components/theme/Login/Login.jsx +++ b/packages/volto/src/components/theme/Login/Login.jsx @@ -80,9 +80,8 @@ const Login = (props) => { const loading = useSelector((state) => state.userSession.login.loading); const returnUrl = qs.parse(props.location?.search ?? location.search).return_url || - location.pathname.replace(/\/login\/?$/, '').replace(/\/logout\/?$/, '') || + location.pathname.replace(/\/[^/]*\/?$/, '') || '/'; - const previousToken = usePrevious(token); useEffect(() => { From 67a4446a271788ab260f9d089b0e63c17be88d83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Fern=C3=A1ndez=20de=20Alba?= Date: Fri, 25 Oct 2024 09:25:01 +0200 Subject: [PATCH 096/209] Client transforms for reducer data (#6422) Co-authored-by: Steve Piercy --- docs/source/backend/index.md | 17 +++++++++++++++++ packages/registry/news/6422.bugfix | 1 + packages/registry/src/index.ts | 2 +- packages/registry/src/registry.test.tsx | 9 +++++++++ packages/volto/news/6422.feature | 1 + packages/volto/src/reducers/content/content.js | 12 ++++++++++++ 6 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 packages/registry/news/6422.bugfix create mode 100644 packages/volto/news/6422.feature diff --git a/docs/source/backend/index.md b/docs/source/backend/index.md index 8dbab251c4..4292411c35 100644 --- a/docs/source/backend/index.md +++ b/docs/source/backend/index.md @@ -34,6 +34,23 @@ Block transformers Search and indexing integration : By providing the right adapters, you can extract searchable text from blocks. +Client Reducer Content Transforms +: These transforms run in the client when the response from the backend is received. + These are useful when you need to modify on the fly the response from the backend, in case you need to make an amendment of the backend data, like a data migration of any kind. + You can register a utility that mutates the response at your convenience. + + ```ts + import { upgradeV20241023 } from './upgrades/upgradeV20241023'; + + config.registerUtility({ + name: 'upgradeV20241023', + type: 'transform', + dependencies: { reducer: 'content' }, + method: upgradeV20241023, + }); + ``` + + The `type` of the utility needs to be `transform` and the dependencies set to `{reducer: 'content'}`. ## Proxied backend routes diff --git a/packages/registry/news/6422.bugfix b/packages/registry/news/6422.bugfix new file mode 100644 index 0000000000..978f5bfa81 --- /dev/null +++ b/packages/registry/news/6422.bugfix @@ -0,0 +1 @@ +Return empty array when `getUtilities` does not match anything. @sneridagh diff --git a/packages/registry/src/index.ts b/packages/registry/src/index.ts index 830202f797..7f229a66a8 100644 --- a/packages/registry/src/index.ts +++ b/packages/registry/src/index.ts @@ -474,7 +474,7 @@ class Config { .join('+'); const utilityName = `${depsString ? `|${depsString}` : ''}`; - const utilitiesKeys = Object.keys(this._data.utilities[type]).filter( + const utilitiesKeys = Object.keys(this._data.utilities[type] || {}).filter( (key) => key.startsWith(utilityName), ); const utilities = utilitiesKeys.map( diff --git a/packages/registry/src/registry.test.tsx b/packages/registry/src/registry.test.tsx index ab189a9368..90ad418249 100644 --- a/packages/registry/src/registry.test.tsx +++ b/packages/registry/src/registry.test.tsx @@ -1063,4 +1063,13 @@ describe('Utilities registry', () => { .method(), ).toEqual('this is a validator for maxLength'); }); + + it('getUtilities - registers two utilities with the same dependencies and different names', () => { + expect( + config.getUtilities({ + dependencies: { fieldType: 'string' }, + type: 'validator', + }), + ).toEqual([]); + }); }); diff --git a/packages/volto/news/6422.feature b/packages/volto/news/6422.feature new file mode 100644 index 0000000000..7eb17ffd98 --- /dev/null +++ b/packages/volto/news/6422.feature @@ -0,0 +1 @@ +Introducing "client transforms for Redux reducers". @sneridagh diff --git a/packages/volto/src/reducers/content/content.js b/packages/volto/src/reducers/content/content.js index c610b46e0a..475498d7f6 100644 --- a/packages/volto/src/reducers/content/content.js +++ b/packages/volto/src/reducers/content/content.js @@ -20,6 +20,8 @@ import { UPDATE_UPLOADED_FILES, } from '@plone/volto/constants/ActionTypes'; +import config from '@plone/volto/registry'; + const initialState = { create: { loaded: false, @@ -192,6 +194,16 @@ export default function content(state = initialState, action = {}) { }; }); } + + const transforms = config.getUtilities({ + type: 'transform', + dependencies: { reducer: 'content' }, + }); + + transforms.forEach(({ method }) => { + method(result); + }); + return action.subrequest ? { ...state, From 6b9986a175fe351c2f3e89ec28af6aaf7f3c5a31 Mon Sep 17 00:00:00 2001 From: Faakhir Zahid <110815427+Faakhir30@users.noreply.github.com> Date: Fri, 25 Oct 2024 16:16:17 +0500 Subject: [PATCH 097/209] Used resource title instead of resource type in page title. (#6402) Co-authored-by: Jefferson Bledsoe Co-authored-by: Ichim David --- packages/volto/news/6308.internal | 1 + packages/volto/src/components/manage/Edit/Edit.jsx | 10 +++++++--- 2 files changed, 8 insertions(+), 3 deletions(-) create mode 100644 packages/volto/news/6308.internal diff --git a/packages/volto/news/6308.internal b/packages/volto/news/6308.internal new file mode 100644 index 0000000000..c2b9271b6b --- /dev/null +++ b/packages/volto/news/6308.internal @@ -0,0 +1 @@ +Used `resource title` instead of `resource type` in page title on edit. @Faakhir30 diff --git a/packages/volto/src/components/manage/Edit/Edit.jsx b/packages/volto/src/components/manage/Edit/Edit.jsx index 333f6cf651..93efab9a7c 100644 --- a/packages/volto/src/components/manage/Edit/Edit.jsx +++ b/packages/volto/src/components/manage/Edit/Edit.jsx @@ -346,11 +346,15 @@ class Edit extends Component { <> {this.props.content?.language && ( From 8427cfb087eab4899195134063701052777de59a Mon Sep 17 00:00:00 2001 From: Steve Piercy Date: Fri, 25 Oct 2024 04:53:22 -0700 Subject: [PATCH 098/209] Fix broken links (#6439) --- docs/source/contributing/acceptance-tests.md | 2 +- docs/source/development/i18n.md | 8 ++++---- docs/source/upgrade-guide/index.md | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/source/contributing/acceptance-tests.md b/docs/source/contributing/acceptance-tests.md index ea9b66ec1f..c74bd9d4cb 100644 --- a/docs/source/contributing/acceptance-tests.md +++ b/docs/source/contributing/acceptance-tests.md @@ -72,7 +72,7 @@ There is a directory per spec. This directory is hot reloaded with your changes as you write the tests. ```{seealso} -[Cypress documentation](https://docs.cypress.io/guides/overview/why-cypress) +[Cypress documentation](https://docs.cypress.io/app/get-started/why-cypress) ``` diff --git a/docs/source/development/i18n.md b/docs/source/development/i18n.md index 01072108de..36bffe4dfc 100644 --- a/docs/source/development/i18n.md +++ b/docs/source/development/i18n.md @@ -17,7 +17,7 @@ This chapter describes the most common use cases for internationalization when d ## Process and file structure overview Volto uses the library [react-intl](https://www.npmjs.com/package/react-intl) to provide translations for any potential language. -Anything in the [official documentation of react-intl](https://formatjs.io/docs/react-intl/) also applies to Volto. +Anything in the [official documentation of react-intl](https://formatjs.github.io/docs/react-intl/) also applies to Volto. The workflow for creating *new* translatable text strings is as follows: @@ -79,13 +79,13 @@ function HelloWorld(props) { The identifier `hello_world` is then commonly used across all the translations. There are more features available, such as using placeholders. -See the documentation for all features in the [`FormattedMessage` component](https://formatjs.io/docs/react-intl/components#formattedmessage). +See the documentation for all features in the [`FormattedMessage` component](https://formatjs.github.io/docs/react-intl/components#formattedmessage). ### Translate attributes As `FormatMessage` is only suitable for creating text within HTML elements, it cannot be used for translating individual attributes. -But with the method [`formatMessage`](https://formatjs.io/docs/react-intl/api/#formatmessage), there is another way to translate primitive strings. +But with the method [`formatMessage`](https://formatjs.github.io/docs/react-intl/api/#formatmessage), there is another way to translate primitive strings. This approach can be best explained with an example. Assume you have a component called `TeaserImage` which contains an image that has, for accessibility reasons, the `alt` attribute. @@ -97,7 +97,7 @@ To translate the `alt` attribute, you have to do the following steps: import { defineMessages, injectIntl, intlShape } from 'react-intl'; ``` -2. Define a message (or more) via [`defineMessages`](https://formatjs.io/docs/react-intl/api/#definemessagesdefinemessage): +2. Define a message (or more) via [`defineMessages`](https://formatjs.github.io/docs/react-intl/api/#definemessagesdefinemessage): ```js const messages = defineMessages({ diff --git a/docs/source/upgrade-guide/index.md b/docs/source/upgrade-guide/index.md index 321510c672..2371e089c4 100644 --- a/docs/source/upgrade-guide/index.md +++ b/docs/source/upgrade-guide/index.md @@ -743,7 +743,7 @@ This is because the overrides that `@testing-library/cypress` introduce can be r Since there are some commands that can call exports in {file}`cypress/support/commands.js`, this import may be run more than once, and then it errors. So you have to make sure that import is run only once while the tests are run. -Check the official [Cypress Migration Guide](https://docs.cypress.io/guides/references/migration-guide) for more information. +Check the official [Cypress Migration Guide](https://docs.cypress.io/app/references/migration-guide) for more information. ### New Image component @@ -1135,7 +1135,7 @@ If you have already updated your configuration to use Cypress 10 or later in a p It is possible that forcing your project to use older versions might still work with old configurations. ```{seealso} -See https://docs.cypress.io/guides/references/migration-guide#Migrating-to-Cypress-version-10-0 for more information. +See https://docs.cypress.io/app/references/migration-guide#Migrating-to-Cypress-version-10-0 for more information. ``` ### The complete configuration registry is passed to the add-ons and the project configuration pipeline From 885b16a21397364994625dc359e06b8983be2753 Mon Sep 17 00:00:00 2001 From: Steve Piercy Date: Fri, 25 Oct 2024 05:55:04 -0700 Subject: [PATCH 099/209] Fix broken links (#6440) --- docs/source/upgrade-guide/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/upgrade-guide/index.md b/docs/source/upgrade-guide/index.md index 2371e089c4..3da7fbb39a 100644 --- a/docs/source/upgrade-guide/index.md +++ b/docs/source/upgrade-guide/index.md @@ -1135,7 +1135,7 @@ If you have already updated your configuration to use Cypress 10 or later in a p It is possible that forcing your project to use older versions might still work with old configurations. ```{seealso} -See https://docs.cypress.io/app/references/migration-guide#Migrating-to-Cypress-version-10-0 for more information. +See https://docs.cypress.io/app/references/migration-guide#Migrating-to-Cypress-100 for more information. ``` ### The complete configuration registry is passed to the add-ons and the project configuration pipeline From 42daabae0a9b37e0bfb638098feadcd7a31c98d3 Mon Sep 17 00:00:00 2001 From: David Glick Date: Fri, 25 Oct 2024 07:55:08 -0700 Subject: [PATCH 100/209] URL-Management control panel: Add missing translations (#6436) --- .../volto/locales/ca/LC_MESSAGES/volto.po | 26 ++++++++++++++ .../volto/locales/de/LC_MESSAGES/volto.po | 36 ++++++++++++++++--- .../volto/locales/en/LC_MESSAGES/volto.po | 26 ++++++++++++++ .../volto/locales/es/LC_MESSAGES/volto.po | 26 ++++++++++++++ .../volto/locales/eu/LC_MESSAGES/volto.po | 26 ++++++++++++++ .../volto/locales/fi/LC_MESSAGES/volto.po | 26 ++++++++++++++ .../volto/locales/fr/LC_MESSAGES/volto.po | 26 ++++++++++++++ .../volto/locales/hi/LC_MESSAGES/volto.po | 26 ++++++++++++++ .../volto/locales/it/LC_MESSAGES/volto.po | 26 ++++++++++++++ .../volto/locales/ja/LC_MESSAGES/volto.po | 26 ++++++++++++++ .../volto/locales/nl/LC_MESSAGES/volto.po | 26 ++++++++++++++ .../volto/locales/pt/LC_MESSAGES/volto.po | 26 ++++++++++++++ .../volto/locales/pt_BR/LC_MESSAGES/volto.po | 26 ++++++++++++++ .../volto/locales/ro/LC_MESSAGES/volto.po | 26 ++++++++++++++ packages/volto/locales/volto.pot | 28 ++++++++++++++- .../volto/locales/zh_CN/LC_MESSAGES/volto.po | 26 ++++++++++++++ packages/volto/news/6436.bugfix | 1 + .../manage/Controlpanels/Aliases.jsx | 32 +++++++++++++---- 18 files changed, 449 insertions(+), 12 deletions(-) create mode 100644 packages/volto/news/6436.bugfix diff --git a/packages/volto/locales/ca/LC_MESSAGES/volto.po b/packages/volto/locales/ca/LC_MESSAGES/volto.po index 9c127313f2..9ad9f86d79 100644 --- a/packages/volto/locales/ca/LC_MESSAGES/volto.po +++ b/packages/volto/locales/ca/LC_MESSAGES/volto.po @@ -432,6 +432,11 @@ msgstr "" msgid "Assignments" msgstr "" +#. Default: "Automatically" +#: components/manage/Controlpanels/Aliases +msgid "Automatically" +msgstr "" + #. Default: "Available" #: components/manage/Controlpanels/AddonsControlpanel msgid "Available" @@ -491,6 +496,11 @@ msgstr "Base de cerca" msgid "Block" msgstr "Bloc" +#. Default: "Both" +#: components/manage/Controlpanels/Aliases +msgid "Both" +msgstr "" + #. Default: "Both email address and password are case sensitive, check that caps lock is not enabled." #: components/theme/Login/Login msgid "Both email address and password are case sensitive, check that caps lock is not enabled." @@ -1414,6 +1424,11 @@ msgstr "" msgid "Event view" msgstr "Esdeveniment" +#. Default: "Example" +#: components/manage/Controlpanels/Aliases +msgid "Example" +msgstr "" + #. Default: "Exclude from navigation" #: components/manage/Contents/ContentsPropertiesModal msgid "Exclude from navigation" @@ -1525,6 +1540,7 @@ msgid "Files uploaded: {uploadedFiles}" msgstr "Fitxers pujats: {uploadedFiles}" #. Default: "Filter" +#: components/manage/Controlpanels/Aliases #: helpers/MessageLabels/MessageLabels msgid "Filter" msgstr "" @@ -2185,6 +2201,11 @@ msgstr "Gestiona les traduccions per a {title}" msgid "Manual" msgstr "" +#. Default: "Manually" +#: components/manage/Controlpanels/Aliases +msgid "Manually" +msgstr "" + #. Default: "Manually or automatically added?" #: components/manage/Controlpanels/Aliases msgid "Manually or automatically added?" @@ -4584,6 +4605,11 @@ msgstr "quan" msgid "event_where" msgstr "On?" +#. Default: "/example" +#: components/manage/Controlpanels/Aliases +msgid "examplePath" +msgstr "" + #. Default: "This website does not accept files larger than {limit}" #: helpers/MessageLabels/MessageLabels msgid "fileTooLarge" diff --git a/packages/volto/locales/de/LC_MESSAGES/volto.po b/packages/volto/locales/de/LC_MESSAGES/volto.po index accbee32db..e8627e28be 100644 --- a/packages/volto/locales/de/LC_MESSAGES/volto.po +++ b/packages/volto/locales/de/LC_MESSAGES/volto.po @@ -431,6 +431,11 @@ msgstr "Rolle {role} zum {entry} zugewiesen." msgid "Assignments" msgstr "Zuweisungen" +#. Default: "Automatically" +#: components/manage/Controlpanels/Aliases +msgid "Automatically" +msgstr "automatisch" + #. Default: "Available" #: components/manage/Controlpanels/AddonsControlpanel msgid "Available" @@ -490,6 +495,11 @@ msgstr "Basis Suchfilter" msgid "Block" msgstr "Block" +#. Default: "Both" +#: components/manage/Controlpanels/Aliases +msgid "Both" +msgstr "beide" + #. Default: "Both email address and password are case sensitive, check that caps lock is not enabled." #: components/theme/Login/Login msgid "Both email address and password are case sensitive, check that caps lock is not enabled." @@ -862,12 +872,12 @@ msgstr "Arbeitskopie erstellen" #. Default: "Created after" #: components/manage/Controlpanels/Aliases msgid "Created after" -msgstr "" +msgstr "Erstellt nach" #. Default: "Created before" #: components/manage/Controlpanels/Aliases msgid "Created before" -msgstr "" +msgstr "Erstellt vor" #. Default: "Created by {creator} on {date}" #: components/manage/WorkingCopyToastsFactory/WorkingCopyToastsFactory @@ -1413,6 +1423,11 @@ msgstr "" msgid "Event view" msgstr "Termin" +#. Default: "Example" +#: components/manage/Controlpanels/Aliases +msgid "Example" +msgstr "Beispiel" + #. Default: "Exclude from navigation" #: components/manage/Contents/ContentsPropertiesModal msgid "Exclude from navigation" @@ -1524,9 +1539,10 @@ msgid "Files uploaded: {uploadedFiles}" msgstr "Hochgeladene Dateien: {uploadedFiles}" #. Default: "Filter" +#: components/manage/Controlpanels/Aliases #: helpers/MessageLabels/MessageLabels msgid "Filter" -msgstr "" +msgstr "Filtern" #. Default: "Filter Rules:" #: components/manage/Controlpanels/Rules/Rules @@ -1536,7 +1552,7 @@ msgstr "Filterregeln:" #. Default: "Filter by path" #: components/manage/Controlpanels/Aliases msgid "Filter by prefix" -msgstr "Nach Präfix filtern" +msgstr "Nach Pfad filtern" #. Default: "Filter users by groups" #: helpers/MessageLabels/MessageLabels @@ -2184,6 +2200,11 @@ msgstr "Übersetzungen für {} verwalten" msgid "Manual" msgstr "Manuell" +#. Default: "Manually" +#: components/manage/Controlpanels/Aliases +msgid "Manually" +msgstr "manuell" + #. Default: "Manually or automatically added?" #: components/manage/Controlpanels/Aliases msgid "Manually or automatically added?" @@ -4471,7 +4492,7 @@ msgstr "Passwort vergessen?" #. Default: "Add many alternative URLs at once by uploading a CSV file. The first column should be the path to redirect from; the second, the path to redirect to. Both paths must be Plone-site-relative, starting with a slash (/). An optional third column can contain a date and time. An optional fourth column can contain a boolean to mark as a manual redirect (default true)." #: components/manage/Controlpanels/Aliases msgid "bulkUploadUrlsHelp" -msgstr "" +msgstr "Fügen Sie mehrere alternative URLs auf einmal hinzu, indem Sie eine CSV-Datei hochladen. Die erste Spalte sollte den Pfad enthalten, von dem die Weiterleitung erfolgen soll; die zweite den Pfad, zu dem die Weiterleitung erfolgen soll. Beide Pfade müssen relativ zur Plone-Site sein und mit einem Schrägstrich (/) beginnen. Eine optionale dritte Spalte kann ein Datum und eine Uhrzeit enthalten. Eine optionale vierte Spalte kann einen Booleschen Wert enthalten, um eine manuelle Weiterleitung zu kennzeichnen (Standard: „true“)." #. Default: "Checkbox" #: config/Blocks @@ -4583,6 +4604,11 @@ msgstr "Datum" msgid "event_where" msgstr "Ort" +#. Default: "/example" +#: components/manage/Controlpanels/Aliases +msgid "examplePath" +msgstr "/beispiel" + #. Default: "This website does not accept files larger than {limit}" #: helpers/MessageLabels/MessageLabels msgid "fileTooLarge" diff --git a/packages/volto/locales/en/LC_MESSAGES/volto.po b/packages/volto/locales/en/LC_MESSAGES/volto.po index 77d49db13f..1dba741cab 100644 --- a/packages/volto/locales/en/LC_MESSAGES/volto.po +++ b/packages/volto/locales/en/LC_MESSAGES/volto.po @@ -426,6 +426,11 @@ msgstr "" msgid "Assignments" msgstr "" +#. Default: "Automatically" +#: components/manage/Controlpanels/Aliases +msgid "Automatically" +msgstr "" + #. Default: "Available" #: components/manage/Controlpanels/AddonsControlpanel msgid "Available" @@ -485,6 +490,11 @@ msgstr "" msgid "Block" msgstr "" +#. Default: "Both" +#: components/manage/Controlpanels/Aliases +msgid "Both" +msgstr "" + #. Default: "Both email address and password are case sensitive, check that caps lock is not enabled." #: components/theme/Login/Login msgid "Both email address and password are case sensitive, check that caps lock is not enabled." @@ -1408,6 +1418,11 @@ msgstr "" msgid "Event view" msgstr "" +#. Default: "Example" +#: components/manage/Controlpanels/Aliases +msgid "Example" +msgstr "" + #. Default: "Exclude from navigation" #: components/manage/Contents/ContentsPropertiesModal msgid "Exclude from navigation" @@ -1519,6 +1534,7 @@ msgid "Files uploaded: {uploadedFiles}" msgstr "" #. Default: "Filter" +#: components/manage/Controlpanels/Aliases #: helpers/MessageLabels/MessageLabels msgid "Filter" msgstr "" @@ -2179,6 +2195,11 @@ msgstr "" msgid "Manual" msgstr "" +#. Default: "Manually" +#: components/manage/Controlpanels/Aliases +msgid "Manually" +msgstr "" + #. Default: "Manually or automatically added?" #: components/manage/Controlpanels/Aliases msgid "Manually or automatically added?" @@ -4578,6 +4599,11 @@ msgstr "" msgid "event_where" msgstr "" +#. Default: "/example" +#: components/manage/Controlpanels/Aliases +msgid "examplePath" +msgstr "" + #. Default: "This website does not accept files larger than {limit}" #: helpers/MessageLabels/MessageLabels msgid "fileTooLarge" diff --git a/packages/volto/locales/es/LC_MESSAGES/volto.po b/packages/volto/locales/es/LC_MESSAGES/volto.po index 4cc52bdb15..23630b90a1 100644 --- a/packages/volto/locales/es/LC_MESSAGES/volto.po +++ b/packages/volto/locales/es/LC_MESSAGES/volto.po @@ -433,6 +433,11 @@ msgstr "" msgid "Assignments" msgstr "Tareas" +#. Default: "Automatically" +#: components/manage/Controlpanels/Aliases +msgid "Automatically" +msgstr "" + #. Default: "Available" #: components/manage/Controlpanels/AddonsControlpanel msgid "Available" @@ -492,6 +497,11 @@ msgstr "Consulta base de la búsqueda" msgid "Block" msgstr "Bloque" +#. Default: "Both" +#: components/manage/Controlpanels/Aliases +msgid "Both" +msgstr "" + #. Default: "Both email address and password are case sensitive, check that caps lock is not enabled." #: components/theme/Login/Login msgid "Both email address and password are case sensitive, check that caps lock is not enabled." @@ -1415,6 +1425,11 @@ msgstr "" msgid "Event view" msgstr "Vista de evento" +#. Default: "Example" +#: components/manage/Controlpanels/Aliases +msgid "Example" +msgstr "" + #. Default: "Exclude from navigation" #: components/manage/Contents/ContentsPropertiesModal msgid "Exclude from navigation" @@ -1526,6 +1541,7 @@ msgid "Files uploaded: {uploadedFiles}" msgstr "Archivos subidos: {uploadedFiles}" #. Default: "Filter" +#: components/manage/Controlpanels/Aliases #: helpers/MessageLabels/MessageLabels msgid "Filter" msgstr "Filtrar" @@ -2186,6 +2202,11 @@ msgstr "Administrar traducciones de {title}" msgid "Manual" msgstr "Manual" +#. Default: "Manually" +#: components/manage/Controlpanels/Aliases +msgid "Manually" +msgstr "" + #. Default: "Manually or automatically added?" #: components/manage/Controlpanels/Aliases msgid "Manually or automatically added?" @@ -4585,6 +4606,11 @@ msgstr "Cuándo" msgid "event_where" msgstr "Dónde" +#. Default: "/example" +#: components/manage/Controlpanels/Aliases +msgid "examplePath" +msgstr "" + #. Default: "This website does not accept files larger than {limit}" #: helpers/MessageLabels/MessageLabels msgid "fileTooLarge" diff --git a/packages/volto/locales/eu/LC_MESSAGES/volto.po b/packages/volto/locales/eu/LC_MESSAGES/volto.po index e2fed09346..095444c38d 100644 --- a/packages/volto/locales/eu/LC_MESSAGES/volto.po +++ b/packages/volto/locales/eu/LC_MESSAGES/volto.po @@ -433,6 +433,11 @@ msgstr "" msgid "Assignments" msgstr "Esleipenak" +#. Default: "Automatically" +#: components/manage/Controlpanels/Aliases +msgid "Automatically" +msgstr "" + #. Default: "Available" #: components/manage/Controlpanels/AddonsControlpanel msgid "Available" @@ -492,6 +497,11 @@ msgstr "Oinarrizko bilaketa kontsulta" msgid "Block" msgstr "Blokea" +#. Default: "Both" +#: components/manage/Controlpanels/Aliases +msgid "Both" +msgstr "" + #. Default: "Both email address and password are case sensitive, check that caps lock is not enabled." #: components/theme/Login/Login msgid "Both email address and password are case sensitive, check that caps lock is not enabled." @@ -1415,6 +1425,11 @@ msgstr "" msgid "Event view" msgstr "Hitzorduaren bista" +#. Default: "Example" +#: components/manage/Controlpanels/Aliases +msgid "Example" +msgstr "" + #. Default: "Exclude from navigation" #: components/manage/Contents/ContentsPropertiesModal msgid "Exclude from navigation" @@ -1526,6 +1541,7 @@ msgid "Files uploaded: {uploadedFiles}" msgstr "Igotako fitxategiak: {uploadedFiles}" #. Default: "Filter" +#: components/manage/Controlpanels/Aliases #: helpers/MessageLabels/MessageLabels msgid "Filter" msgstr "" @@ -2186,6 +2202,11 @@ msgstr "Kudeatu honen itzulpenak {title}" msgid "Manual" msgstr "Eskuz" +#. Default: "Manually" +#: components/manage/Controlpanels/Aliases +msgid "Manually" +msgstr "" + #. Default: "Manually or automatically added?" #: components/manage/Controlpanels/Aliases msgid "Manually or automatically added?" @@ -4585,6 +4606,11 @@ msgstr "Noiz" msgid "event_where" msgstr "Non" +#. Default: "/example" +#: components/manage/Controlpanels/Aliases +msgid "examplePath" +msgstr "" + #. Default: "This website does not accept files larger than {limit}" #: helpers/MessageLabels/MessageLabels msgid "fileTooLarge" diff --git a/packages/volto/locales/fi/LC_MESSAGES/volto.po b/packages/volto/locales/fi/LC_MESSAGES/volto.po index f851233f39..2be0080512 100644 --- a/packages/volto/locales/fi/LC_MESSAGES/volto.po +++ b/packages/volto/locales/fi/LC_MESSAGES/volto.po @@ -431,6 +431,11 @@ msgstr "" msgid "Assignments" msgstr "Tehtävät" +#. Default: "Automatically" +#: components/manage/Controlpanels/Aliases +msgid "Automatically" +msgstr "" + #. Default: "Available" #: components/manage/Controlpanels/AddonsControlpanel msgid "Available" @@ -490,6 +495,11 @@ msgstr "" msgid "Block" msgstr "Palikka" +#. Default: "Both" +#: components/manage/Controlpanels/Aliases +msgid "Both" +msgstr "" + #. Default: "Both email address and password are case sensitive, check that caps lock is not enabled." #: components/theme/Login/Login msgid "Both email address and password are case sensitive, check that caps lock is not enabled." @@ -1413,6 +1423,11 @@ msgstr "" msgid "Event view" msgstr "Tapahtuman näkymä" +#. Default: "Example" +#: components/manage/Controlpanels/Aliases +msgid "Example" +msgstr "" + #. Default: "Exclude from navigation" #: components/manage/Contents/ContentsPropertiesModal msgid "Exclude from navigation" @@ -1524,6 +1539,7 @@ msgid "Files uploaded: {uploadedFiles}" msgstr "Lähetetyt tiedostot: {uploadedFiles} " #. Default: "Filter" +#: components/manage/Controlpanels/Aliases #: helpers/MessageLabels/MessageLabels msgid "Filter" msgstr "" @@ -2184,6 +2200,11 @@ msgstr "Hallitse käännöksiä: {title}" msgid "Manual" msgstr "Manuaalinen" +#. Default: "Manually" +#: components/manage/Controlpanels/Aliases +msgid "Manually" +msgstr "" + #. Default: "Manually or automatically added?" #: components/manage/Controlpanels/Aliases msgid "Manually or automatically added?" @@ -4583,6 +4604,11 @@ msgstr "Milloin" msgid "event_where" msgstr "Missä" +#. Default: "/example" +#: components/manage/Controlpanels/Aliases +msgid "examplePath" +msgstr "" + #. Default: "This website does not accept files larger than {limit}" #: helpers/MessageLabels/MessageLabels msgid "fileTooLarge" diff --git a/packages/volto/locales/fr/LC_MESSAGES/volto.po b/packages/volto/locales/fr/LC_MESSAGES/volto.po index 2f5d0b3005..be16dc03d7 100644 --- a/packages/volto/locales/fr/LC_MESSAGES/volto.po +++ b/packages/volto/locales/fr/LC_MESSAGES/volto.po @@ -433,6 +433,11 @@ msgstr "" msgid "Assignments" msgstr "Affectations" +#. Default: "Automatically" +#: components/manage/Controlpanels/Aliases +msgid "Automatically" +msgstr "" + #. Default: "Available" #: components/manage/Controlpanels/AddonsControlpanel msgid "Available" @@ -492,6 +497,11 @@ msgstr "Requête de base de la recherche" msgid "Block" msgstr "Bloc" +#. Default: "Both" +#: components/manage/Controlpanels/Aliases +msgid "Both" +msgstr "" + #. Default: "Both email address and password are case sensitive, check that caps lock is not enabled." #: components/theme/Login/Login msgid "Both email address and password are case sensitive, check that caps lock is not enabled." @@ -1415,6 +1425,11 @@ msgstr "" msgid "Event view" msgstr "Vue d'événement" +#. Default: "Example" +#: components/manage/Controlpanels/Aliases +msgid "Example" +msgstr "" + #. Default: "Exclude from navigation" #: components/manage/Contents/ContentsPropertiesModal msgid "Exclude from navigation" @@ -1526,6 +1541,7 @@ msgid "Files uploaded: {uploadedFiles}" msgstr "Fichiers téléchargés : {uploadedFiles}" #. Default: "Filter" +#: components/manage/Controlpanels/Aliases #: helpers/MessageLabels/MessageLabels msgid "Filter" msgstr "" @@ -2186,6 +2202,11 @@ msgstr "Gérer les traductions pour {title}" msgid "Manual" msgstr "Manuel" +#. Default: "Manually" +#: components/manage/Controlpanels/Aliases +msgid "Manually" +msgstr "" + #. Default: "Manually or automatically added?" #: components/manage/Controlpanels/Aliases msgid "Manually or automatically added?" @@ -4585,6 +4606,11 @@ msgstr "Quand" msgid "event_where" msgstr "Où" +#. Default: "/example" +#: components/manage/Controlpanels/Aliases +msgid "examplePath" +msgstr "" + #. Default: "This website does not accept files larger than {limit}" #: helpers/MessageLabels/MessageLabels msgid "fileTooLarge" diff --git a/packages/volto/locales/hi/LC_MESSAGES/volto.po b/packages/volto/locales/hi/LC_MESSAGES/volto.po index 06006f6f10..11afb55efa 100644 --- a/packages/volto/locales/hi/LC_MESSAGES/volto.po +++ b/packages/volto/locales/hi/LC_MESSAGES/volto.po @@ -426,6 +426,11 @@ msgstr "{entry} को {role} भूमिका का काम दें" msgid "Assignments" msgstr "असाइनमेंट" +#. Default: "Automatically" +#: components/manage/Controlpanels/Aliases +msgid "Automatically" +msgstr "" + #. Default: "Available" #: components/manage/Controlpanels/AddonsControlpanel msgid "Available" @@ -485,6 +490,11 @@ msgstr "मूल खोज क्वेरी" msgid "Block" msgstr "ब्लॉक" +#. Default: "Both" +#: components/manage/Controlpanels/Aliases +msgid "Both" +msgstr "" + #. Default: "Both email address and password are case sensitive, check that caps lock is not enabled." #: components/theme/Login/Login msgid "Both email address and password are case sensitive, check that caps lock is not enabled." @@ -1408,6 +1418,11 @@ msgstr "" msgid "Event view" msgstr "आयोजन दृश्य" +#. Default: "Example" +#: components/manage/Controlpanels/Aliases +msgid "Example" +msgstr "" + #. Default: "Exclude from navigation" #: components/manage/Contents/ContentsPropertiesModal msgid "Exclude from navigation" @@ -1519,6 +1534,7 @@ msgid "Files uploaded: {uploadedFiles}" msgstr ""फ़ाइलें अपलोड की गईं: {uploadedFiles}" #. Default: "Filter" +#: components/manage/Controlpanels/Aliases #: helpers/MessageLabels/MessageLabels msgid "Filter" msgstr "फ़िल्टर" @@ -2179,6 +2195,11 @@ msgstr "{title} के लिए अनुवाद प्रबंधित क msgid "Manual" msgstr "मैनुअल" +#. Default: "Manually" +#: components/manage/Controlpanels/Aliases +msgid "Manually" +msgstr "" + #. Default: "Manually or automatically added?" #: components/manage/Controlpanels/Aliases msgid "Manually or automatically added?" @@ -4578,6 +4599,11 @@ msgstr "कब" msgid "event_where" msgstr "कहाँ" +#. Default: "/example" +#: components/manage/Controlpanels/Aliases +msgid "examplePath" +msgstr "" + #. Default: "This website does not accept files larger than {limit}" #: helpers/MessageLabels/MessageLabels msgid "fileTooLarge" diff --git a/packages/volto/locales/it/LC_MESSAGES/volto.po b/packages/volto/locales/it/LC_MESSAGES/volto.po index 794ac7f9a6..13eb9c2280 100644 --- a/packages/volto/locales/it/LC_MESSAGES/volto.po +++ b/packages/volto/locales/it/LC_MESSAGES/volto.po @@ -426,6 +426,11 @@ msgstr "Assegnare il ruolo di {role} a {entry}" msgid "Assignments" msgstr "Assegnazione" +#. Default: "Automatically" +#: components/manage/Controlpanels/Aliases +msgid "Automatically" +msgstr "" + #. Default: "Available" #: components/manage/Controlpanels/AddonsControlpanel msgid "Available" @@ -485,6 +490,11 @@ msgstr "Ricerca iniziale" msgid "Block" msgstr "Blocco" +#. Default: "Both" +#: components/manage/Controlpanels/Aliases +msgid "Both" +msgstr "" + #. Default: "Both email address and password are case sensitive, check that caps lock is not enabled." #: components/theme/Login/Login msgid "Both email address and password are case sensitive, check that caps lock is not enabled." @@ -1408,6 +1418,11 @@ msgstr "La data di inizio evento essere uguale o precedente al {endDateValueOrEn msgid "Event view" msgstr "Vista evento" +#. Default: "Example" +#: components/manage/Controlpanels/Aliases +msgid "Example" +msgstr "" + #. Default: "Exclude from navigation" #: components/manage/Contents/ContentsPropertiesModal msgid "Exclude from navigation" @@ -1519,6 +1534,7 @@ msgid "Files uploaded: {uploadedFiles}" msgstr "File caricati: {uploadedFiles}" #. Default: "Filter" +#: components/manage/Controlpanels/Aliases #: helpers/MessageLabels/MessageLabels msgid "Filter" msgstr "Filtra" @@ -2179,6 +2195,11 @@ msgstr "Gestisci le traduzioni per {title}" msgid "Manual" msgstr "Manuale" +#. Default: "Manually" +#: components/manage/Controlpanels/Aliases +msgid "Manually" +msgstr "" + #. Default: "Manually or automatically added?" #: components/manage/Controlpanels/Aliases msgid "Manually or automatically added?" @@ -4578,6 +4599,11 @@ msgstr "Quando" msgid "event_where" msgstr "Dove" +#. Default: "/example" +#: components/manage/Controlpanels/Aliases +msgid "examplePath" +msgstr "" + #. Default: "This website does not accept files larger than {limit}" #: helpers/MessageLabels/MessageLabels msgid "fileTooLarge" diff --git a/packages/volto/locales/ja/LC_MESSAGES/volto.po b/packages/volto/locales/ja/LC_MESSAGES/volto.po index 3d016b4985..8f69541e34 100644 --- a/packages/volto/locales/ja/LC_MESSAGES/volto.po +++ b/packages/volto/locales/ja/LC_MESSAGES/volto.po @@ -431,6 +431,11 @@ msgstr "" msgid "Assignments" msgstr "" +#. Default: "Automatically" +#: components/manage/Controlpanels/Aliases +msgid "Automatically" +msgstr "" + #. Default: "Available" #: components/manage/Controlpanels/AddonsControlpanel msgid "Available" @@ -490,6 +495,11 @@ msgstr "" msgid "Block" msgstr "ブロック" +#. Default: "Both" +#: components/manage/Controlpanels/Aliases +msgid "Both" +msgstr "" + #. Default: "Both email address and password are case sensitive, check that caps lock is not enabled." #: components/theme/Login/Login msgid "Both email address and password are case sensitive, check that caps lock is not enabled." @@ -1413,6 +1423,11 @@ msgstr "" msgid "Event view" msgstr "" +#. Default: "Example" +#: components/manage/Controlpanels/Aliases +msgid "Example" +msgstr "" + #. Default: "Exclude from navigation" #: components/manage/Contents/ContentsPropertiesModal msgid "Exclude from navigation" @@ -1524,6 +1539,7 @@ msgid "Files uploaded: {uploadedFiles}" msgstr "アップロードされたファイル: {uploadedFiles}" #. Default: "Filter" +#: components/manage/Controlpanels/Aliases #: helpers/MessageLabels/MessageLabels msgid "Filter" msgstr "" @@ -2184,6 +2200,11 @@ msgstr "{title}の翻訳を管理する" msgid "Manual" msgstr "" +#. Default: "Manually" +#: components/manage/Controlpanels/Aliases +msgid "Manually" +msgstr "" + #. Default: "Manually or automatically added?" #: components/manage/Controlpanels/Aliases msgid "Manually or automatically added?" @@ -4583,6 +4604,11 @@ msgstr "日時" msgid "event_where" msgstr "場所" +#. Default: "/example" +#: components/manage/Controlpanels/Aliases +msgid "examplePath" +msgstr "" + #. Default: "This website does not accept files larger than {limit}" #: helpers/MessageLabels/MessageLabels msgid "fileTooLarge" diff --git a/packages/volto/locales/nl/LC_MESSAGES/volto.po b/packages/volto/locales/nl/LC_MESSAGES/volto.po index 7ae5fd8b4a..4357dae948 100644 --- a/packages/volto/locales/nl/LC_MESSAGES/volto.po +++ b/packages/volto/locales/nl/LC_MESSAGES/volto.po @@ -430,6 +430,11 @@ msgstr "" msgid "Assignments" msgstr "" +#. Default: "Automatically" +#: components/manage/Controlpanels/Aliases +msgid "Automatically" +msgstr "" + #. Default: "Available" #: components/manage/Controlpanels/AddonsControlpanel msgid "Available" @@ -489,6 +494,11 @@ msgstr "" msgid "Block" msgstr "" +#. Default: "Both" +#: components/manage/Controlpanels/Aliases +msgid "Both" +msgstr "" + #. Default: "Both email address and password are case sensitive, check that caps lock is not enabled." #: components/theme/Login/Login msgid "Both email address and password are case sensitive, check that caps lock is not enabled." @@ -1412,6 +1422,11 @@ msgstr "" msgid "Event view" msgstr "" +#. Default: "Example" +#: components/manage/Controlpanels/Aliases +msgid "Example" +msgstr "" + #. Default: "Exclude from navigation" #: components/manage/Contents/ContentsPropertiesModal msgid "Exclude from navigation" @@ -1523,6 +1538,7 @@ msgid "Files uploaded: {uploadedFiles}" msgstr "Geüploade bestanden: {uploadedFiles}" #. Default: "Filter" +#: components/manage/Controlpanels/Aliases #: helpers/MessageLabels/MessageLabels msgid "Filter" msgstr "" @@ -2183,6 +2199,11 @@ msgstr "" msgid "Manual" msgstr "" +#. Default: "Manually" +#: components/manage/Controlpanels/Aliases +msgid "Manually" +msgstr "" + #. Default: "Manually or automatically added?" #: components/manage/Controlpanels/Aliases msgid "Manually or automatically added?" @@ -4582,6 +4603,11 @@ msgstr "" msgid "event_where" msgstr "" +#. Default: "/example" +#: components/manage/Controlpanels/Aliases +msgid "examplePath" +msgstr "" + #. Default: "This website does not accept files larger than {limit}" #: helpers/MessageLabels/MessageLabels msgid "fileTooLarge" diff --git a/packages/volto/locales/pt/LC_MESSAGES/volto.po b/packages/volto/locales/pt/LC_MESSAGES/volto.po index 38e7165a15..d30596d054 100644 --- a/packages/volto/locales/pt/LC_MESSAGES/volto.po +++ b/packages/volto/locales/pt/LC_MESSAGES/volto.po @@ -431,6 +431,11 @@ msgstr "" msgid "Assignments" msgstr "" +#. Default: "Automatically" +#: components/manage/Controlpanels/Aliases +msgid "Automatically" +msgstr "" + #. Default: "Available" #: components/manage/Controlpanels/AddonsControlpanel msgid "Available" @@ -490,6 +495,11 @@ msgstr "" msgid "Block" msgstr "Bloco" +#. Default: "Both" +#: components/manage/Controlpanels/Aliases +msgid "Both" +msgstr "" + #. Default: "Both email address and password are case sensitive, check that caps lock is not enabled." #: components/theme/Login/Login msgid "Both email address and password are case sensitive, check that caps lock is not enabled." @@ -1413,6 +1423,11 @@ msgstr "" msgid "Event view" msgstr "" +#. Default: "Example" +#: components/manage/Controlpanels/Aliases +msgid "Example" +msgstr "" + #. Default: "Exclude from navigation" #: components/manage/Contents/ContentsPropertiesModal msgid "Exclude from navigation" @@ -1524,6 +1539,7 @@ msgid "Files uploaded: {uploadedFiles}" msgstr "Arquivos enviados: {uploadedFiles}" #. Default: "Filter" +#: components/manage/Controlpanels/Aliases #: helpers/MessageLabels/MessageLabels msgid "Filter" msgstr "" @@ -2184,6 +2200,11 @@ msgstr "" msgid "Manual" msgstr "" +#. Default: "Manually" +#: components/manage/Controlpanels/Aliases +msgid "Manually" +msgstr "" + #. Default: "Manually or automatically added?" #: components/manage/Controlpanels/Aliases msgid "Manually or automatically added?" @@ -4583,6 +4604,11 @@ msgstr "" msgid "event_where" msgstr "" +#. Default: "/example" +#: components/manage/Controlpanels/Aliases +msgid "examplePath" +msgstr "" + #. Default: "This website does not accept files larger than {limit}" #: helpers/MessageLabels/MessageLabels msgid "fileTooLarge" diff --git a/packages/volto/locales/pt_BR/LC_MESSAGES/volto.po b/packages/volto/locales/pt_BR/LC_MESSAGES/volto.po index a49133408d..af520c765e 100644 --- a/packages/volto/locales/pt_BR/LC_MESSAGES/volto.po +++ b/packages/volto/locales/pt_BR/LC_MESSAGES/volto.po @@ -432,6 +432,11 @@ msgstr "Atribuir o papel de {role} à {entry}" msgid "Assignments" msgstr "Atribuições" +#. Default: "Automatically" +#: components/manage/Controlpanels/Aliases +msgid "Automatically" +msgstr "" + #. Default: "Available" #: components/manage/Controlpanels/AddonsControlpanel msgid "Available" @@ -491,6 +496,11 @@ msgstr "Base da consulta para busca" msgid "Block" msgstr "Bloco" +#. Default: "Both" +#: components/manage/Controlpanels/Aliases +msgid "Both" +msgstr "" + #. Default: "Both email address and password are case sensitive, check that caps lock is not enabled." #: components/theme/Login/Login msgid "Both email address and password are case sensitive, check that caps lock is not enabled." @@ -1414,6 +1424,11 @@ msgstr "A data de início do evento deve ser igual ou anterior a {endDateValueOr msgid "Event view" msgstr "Visão de Evento" +#. Default: "Example" +#: components/manage/Controlpanels/Aliases +msgid "Example" +msgstr "" + #. Default: "Exclude from navigation" #: components/manage/Contents/ContentsPropertiesModal msgid "Exclude from navigation" @@ -1525,6 +1540,7 @@ msgid "Files uploaded: {uploadedFiles}" msgstr "Arquivos carregados: {uploadedFiles}" #. Default: "Filter" +#: components/manage/Controlpanels/Aliases #: helpers/MessageLabels/MessageLabels msgid "Filter" msgstr "Filtrar" @@ -2185,6 +2201,11 @@ msgstr "Gerenciar traduções para {title}" msgid "Manual" msgstr "Manual" +#. Default: "Manually" +#: components/manage/Controlpanels/Aliases +msgid "Manually" +msgstr "" + #. Default: "Manually or automatically added?" #: components/manage/Controlpanels/Aliases msgid "Manually or automatically added?" @@ -4584,6 +4605,11 @@ msgstr "Quando" msgid "event_where" msgstr "Onde" +#. Default: "/example" +#: components/manage/Controlpanels/Aliases +msgid "examplePath" +msgstr "" + #. Default: "This website does not accept files larger than {limit}" #: helpers/MessageLabels/MessageLabels msgid "fileTooLarge" diff --git a/packages/volto/locales/ro/LC_MESSAGES/volto.po b/packages/volto/locales/ro/LC_MESSAGES/volto.po index 64f8414719..6ef3d38984 100644 --- a/packages/volto/locales/ro/LC_MESSAGES/volto.po +++ b/packages/volto/locales/ro/LC_MESSAGES/volto.po @@ -426,6 +426,11 @@ msgstr "" msgid "Assignments" msgstr "" +#. Default: "Automatically" +#: components/manage/Controlpanels/Aliases +msgid "Automatically" +msgstr "" + #. Default: "Available" #: components/manage/Controlpanels/AddonsControlpanel msgid "Available" @@ -485,6 +490,11 @@ msgstr "Interogare căutare de bază" msgid "Block" msgstr "Bloc" +#. Default: "Both" +#: components/manage/Controlpanels/Aliases +msgid "Both" +msgstr "" + #. Default: "Both email address and password are case sensitive, check that caps lock is not enabled." #: components/theme/Login/Login msgid "Both email address and password are case sensitive, check that caps lock is not enabled." @@ -1408,6 +1418,11 @@ msgstr "" msgid "Event view" msgstr "" +#. Default: "Example" +#: components/manage/Controlpanels/Aliases +msgid "Example" +msgstr "" + #. Default: "Exclude from navigation" #: components/manage/Contents/ContentsPropertiesModal msgid "Exclude from navigation" @@ -1519,6 +1534,7 @@ msgid "Files uploaded: {uploadedFiles}" msgstr "Fișiere încărcate: {uploadedFiles}" #. Default: "Filter" +#: components/manage/Controlpanels/Aliases #: helpers/MessageLabels/MessageLabels msgid "Filter" msgstr "" @@ -2179,6 +2195,11 @@ msgstr "Gestionați traducerile pentru {title}" msgid "Manual" msgstr "" +#. Default: "Manually" +#: components/manage/Controlpanels/Aliases +msgid "Manually" +msgstr "" + #. Default: "Manually or automatically added?" #: components/manage/Controlpanels/Aliases msgid "Manually or automatically added?" @@ -4578,6 +4599,11 @@ msgstr "Data" msgid "event_where" msgstr "Locație" +#. Default: "/example" +#: components/manage/Controlpanels/Aliases +msgid "examplePath" +msgstr "" + #. Default: "This website does not accept files larger than {limit}" #: helpers/MessageLabels/MessageLabels msgid "fileTooLarge" diff --git a/packages/volto/locales/volto.pot b/packages/volto/locales/volto.pot index 8d69039230..0490c9b7a6 100644 --- a/packages/volto/locales/volto.pot +++ b/packages/volto/locales/volto.pot @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Plone\n" -"POT-Creation-Date: 2024-10-22T18:13:27.236Z\n" +"POT-Creation-Date: 2024-10-24T16:41:21.354Z\n" "Last-Translator: Plone i18n \n" "Language-Team: Plone i18n \n" "Content-Type: text/plain; charset=utf-8\n" @@ -428,6 +428,11 @@ msgstr "" msgid "Assignments" msgstr "" +#. Default: "Automatically" +#: components/manage/Controlpanels/Aliases +msgid "Automatically" +msgstr "" + #. Default: "Available" #: components/manage/Controlpanels/AddonsControlpanel msgid "Available" @@ -487,6 +492,11 @@ msgstr "" msgid "Block" msgstr "" +#. Default: "Both" +#: components/manage/Controlpanels/Aliases +msgid "Both" +msgstr "" + #. Default: "Both email address and password are case sensitive, check that caps lock is not enabled." #: components/theme/Login/Login msgid "Both email address and password are case sensitive, check that caps lock is not enabled." @@ -1410,6 +1420,11 @@ msgstr "" msgid "Event view" msgstr "" +#. Default: "Example" +#: components/manage/Controlpanels/Aliases +msgid "Example" +msgstr "" + #. Default: "Exclude from navigation" #: components/manage/Contents/ContentsPropertiesModal msgid "Exclude from navigation" @@ -1521,6 +1536,7 @@ msgid "Files uploaded: {uploadedFiles}" msgstr "" #. Default: "Filter" +#: components/manage/Controlpanels/Aliases #: helpers/MessageLabels/MessageLabels msgid "Filter" msgstr "" @@ -2181,6 +2197,11 @@ msgstr "" msgid "Manual" msgstr "" +#. Default: "Manually" +#: components/manage/Controlpanels/Aliases +msgid "Manually" +msgstr "" + #. Default: "Manually or automatically added?" #: components/manage/Controlpanels/Aliases msgid "Manually or automatically added?" @@ -4580,6 +4601,11 @@ msgstr "" msgid "event_where" msgstr "" +#. Default: "/example" +#: components/manage/Controlpanels/Aliases +msgid "examplePath" +msgstr "" + #. Default: "This website does not accept files larger than {limit}" #: helpers/MessageLabels/MessageLabels msgid "fileTooLarge" diff --git a/packages/volto/locales/zh_CN/LC_MESSAGES/volto.po b/packages/volto/locales/zh_CN/LC_MESSAGES/volto.po index c64ddee6a5..6d98786196 100644 --- a/packages/volto/locales/zh_CN/LC_MESSAGES/volto.po +++ b/packages/volto/locales/zh_CN/LC_MESSAGES/volto.po @@ -432,6 +432,11 @@ msgstr "" msgid "Assignments" msgstr "分配" +#. Default: "Automatically" +#: components/manage/Controlpanels/Aliases +msgid "Automatically" +msgstr "" + #. Default: "Available" #: components/manage/Controlpanels/AddonsControlpanel msgid "Available" @@ -491,6 +496,11 @@ msgstr "基本搜索查询" msgid "Block" msgstr "块" +#. Default: "Both" +#: components/manage/Controlpanels/Aliases +msgid "Both" +msgstr "" + #. Default: "Both email address and password are case sensitive, check that caps lock is not enabled." #: components/theme/Login/Login msgid "Both email address and password are case sensitive, check that caps lock is not enabled." @@ -1414,6 +1424,11 @@ msgstr "" msgid "Event view" msgstr "事件视图" +#. Default: "Example" +#: components/manage/Controlpanels/Aliases +msgid "Example" +msgstr "" + #. Default: "Exclude from navigation" #: components/manage/Contents/ContentsPropertiesModal msgid "Exclude from navigation" @@ -1525,6 +1540,7 @@ msgid "Files uploaded: {uploadedFiles}" msgstr "已上载的文件:{uploadedFiles}" #. Default: "Filter" +#: components/manage/Controlpanels/Aliases #: helpers/MessageLabels/MessageLabels msgid "Filter" msgstr "" @@ -2185,6 +2201,11 @@ msgstr "管理{title}的翻译" msgid "Manual" msgstr "" +#. Default: "Manually" +#: components/manage/Controlpanels/Aliases +msgid "Manually" +msgstr "" + #. Default: "Manually or automatically added?" #: components/manage/Controlpanels/Aliases msgid "Manually or automatically added?" @@ -4584,6 +4605,11 @@ msgstr "" msgid "event_where" msgstr "" +#. Default: "/example" +#: components/manage/Controlpanels/Aliases +msgid "examplePath" +msgstr "" + #. Default: "This website does not accept files larger than {limit}" #: helpers/MessageLabels/MessageLabels msgid "fileTooLarge" diff --git a/packages/volto/news/6436.bugfix b/packages/volto/news/6436.bugfix new file mode 100644 index 0000000000..a0e0bf3309 --- /dev/null +++ b/packages/volto/news/6436.bugfix @@ -0,0 +1 @@ +URL Management control panel: add missing translations. @davisagli diff --git a/packages/volto/src/components/manage/Controlpanels/Aliases.jsx b/packages/volto/src/components/manage/Controlpanels/Aliases.jsx index 56bd71f0e9..d607e4949b 100644 --- a/packages/volto/src/components/manage/Controlpanels/Aliases.jsx +++ b/packages/volto/src/components/manage/Controlpanels/Aliases.jsx @@ -106,6 +106,22 @@ const messages = defineMessages({ id: 'CSVFile', defaultMessage: 'CSV file', }, + Both: { + id: 'Both', + defaultMessage: 'Both', + }, + Automatically: { + id: 'Automatically', + defaultMessage: 'Automatically', + }, + Manually: { + id: 'Manually', + defaultMessage: 'Manually', + }, + examplePath: { + id: 'examplePath', + defaultMessage: '/example', + }, }); const filterChoices = [ @@ -320,7 +336,7 @@ const Aliases = (props) => { defaultMessage="Enter the absolute path where the alternative URL should exist. The path must start with '/'. Only URLs that result in a 404 not found page will result in a redirect occurring." /> ), - placeholder: '/example', + placeholder: intl.formatMessage(messages.examplePath), }, targetUrlPath: { title: intl.formatMessage(messages.targetUrlPathTitle), @@ -330,7 +346,7 @@ const Aliases = (props) => { defaultMessage="Enter the absolute path of the target. Target must exist or be an existing alternative URL path to the target." /> ), - placeholder: '/example', + placeholder: intl.formatMessage(messages.examplePath), }, }, required: ['altUrlPath', 'targetUrlPath'], @@ -359,7 +375,11 @@ const Aliases = (props) => { />

    - Example: + + :
    /old-home-page.asp,/front-page,2019/01/27 10:42:59 @@ -407,7 +427,7 @@ const Aliases = (props) => { > setFilterQuery(e.target.value)} /> @@ -422,7 +442,7 @@ const Aliases = (props) => { {filterChoices.map((o, i) => ( { )} From bd591ca11e4a875864aa7ecf0a73f5f2f6e8153e Mon Sep 17 00:00:00 2001 From: Steve Piercy Date: Fri, 25 Oct 2024 09:40:43 -0700 Subject: [PATCH 101/209] Rename page title from Frontend to Volto UI (#6438) --- docs/source/index.md | 16 ++++++++-------- packages/volto/news/6438.documentation | 1 + 2 files changed, 9 insertions(+), 8 deletions(-) create mode 100644 packages/volto/news/6438.documentation diff --git a/docs/source/index.md b/docs/source/index.md index ef65b2294f..2b47ebce16 100644 --- a/docs/source/index.md +++ b/docs/source/index.md @@ -1,18 +1,18 @@ --- myst: html_meta: - "description": "Volto is the React-based frontend for the Plone CMS. It is the default UI for the Plone 6 release." - "property=og:description": "Volto is the React-based frontend for the Plone CMS. It is the default UI for the Plone 6 release." - "property=og:title": "Frontend" - "keywords": "Volto, Plone, frontend, React" + "description": "The Volto user interface (UI) is a React-based frontend for the Plone CMS. It is the default user interface starting with the release of Plone 6." + "property=og:description": "The Volto user interface (UI) is a React-based frontend for the Plone CMS. It is the default user interface starting with the release of Plone 6." + "property=og:title": "Volto UI" + "keywords": "Volto, Plone, frontend, user interface, React" --- (volto-index-label)= -# Frontend +# Volto UI -Volto is a React-based frontend for the [Plone CMS](https://plone.org). -It is the default frontend starting with the Plone 6 release. +The Volto user interface (UI) is a React-based frontend for the [Plone content management system](https://plone.org). +It is the default user interface starting with the release of Plone 6. Volto provides an attractive proposition: integration with the modern frontend development world, access to the huge ecosystem of React libraries and add-ons, combined with the ability to use the mature Plone CMS backend as a development platform. @@ -38,7 +38,7 @@ An integrator is someone who uses Volto to build a project. ### Users -A user of Volto is someone who edits content in a Plone content management system with Volto as the frontend. +A user of Volto is someone who edits content in a Plone content management system with Volto as the user interface. - {doc}`user-manual/index` provides information about how to manage content in a Plone site. diff --git a/packages/volto/news/6438.documentation b/packages/volto/news/6438.documentation new file mode 100644 index 0000000000..f894f6db1b --- /dev/null +++ b/packages/volto/news/6438.documentation @@ -0,0 +1 @@ +Rename page title from Frontend to Volto UI. @stevepiercy From 3ff2f2711a70288a0c5e51b6111dd938ee87947e Mon Sep 17 00:00:00 2001 From: Steve Piercy Date: Sat, 26 Oct 2024 04:42:58 -0700 Subject: [PATCH 102/209] Clean up #6422 (#6443) --- docs/source/backend/index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/source/backend/index.md b/docs/source/backend/index.md index 4292411c35..614be62855 100644 --- a/docs/source/backend/index.md +++ b/docs/source/backend/index.md @@ -34,9 +34,9 @@ Block transformers Search and indexing integration : By providing the right adapters, you can extract searchable text from blocks. -Client Reducer Content Transforms +Client reducer content transforms : These transforms run in the client when the response from the backend is received. - These are useful when you need to modify on the fly the response from the backend, in case you need to make an amendment of the backend data, like a data migration of any kind. + These are useful when you need to modify the response from the backend on-the-fly for amending the backend data, such as a data migration of any kind. You can register a utility that mutates the response at your convenience. ```ts @@ -50,7 +50,7 @@ Client Reducer Content Transforms }); ``` - The `type` of the utility needs to be `transform` and the dependencies set to `{reducer: 'content'}`. + The `type` of the utility needs to be `transform`, and the `dependencies` set to `{reducer: 'content'}`. ## Proxied backend routes From 523e750a6d813a88e8a72a1e0eddae5b66bd1fe4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Fern=C3=A1ndez=20de=20Alba?= Date: Sat, 26 Oct 2024 13:46:16 +0200 Subject: [PATCH 103/209] Add deprecation notices to the Upgrade guide (#6426) Co-authored-by: Steve Piercy Co-authored-by: David Glick --- docs/source/upgrade-guide/index.md | 136 +++++++++++++++++++++++++ packages/volto/news/6426.documentation | 1 + 2 files changed, 137 insertions(+) create mode 100644 packages/volto/news/6426.documentation diff --git a/docs/source/upgrade-guide/index.md b/docs/source/upgrade-guide/index.md index 3da7fbb39a..60de994f58 100644 --- a/docs/source/upgrade-guide/index.md +++ b/docs/source/upgrade-guide/index.md @@ -522,6 +522,142 @@ The `react/jsx-key` rule has been enabled in ESlint for catching missing `key` i You might catch some violations in your project or add-on code after running ESlint. Adding the missing `key` property whenever the violation is reported will fix it. +### Deprecation notices for Volto 18 + +#### `@plone/generator-volto` + +```{deprecated} Volto 18.0.0 +``` + +The Node.js-based Volto project boilerplate generator is deprecated from Volto 18 onwards. +After the release of Volto 18, it will be marked as deprecated, archived, and it won't receive any further updates. +Although you can still migrate your project to Volto 18 using this boilerplate, you should migrate to using [Cookieplone](https://github.com/plone/cookieplone). + +##### Alternative + +Migrate your project to use a [Cookieplone](https://github.com/plone/cookieplone) boilerplate. + +#### Volto project configurations + +```{deprecated} Volto 18.0.0 +``` + +Configuring Volto using {file}`src/config.js` at the project level is deprecated in Volto 18, and will be removed in Volto 19. + +```{seealso} +See https://github.com/plone/volto/issues/6396 for details. +``` + +##### Alternative + +You should configure your projects in a policy add-on. +You can move your project to use [Cookieplone](https://github.com/plone/cookieplone) which provides the necessary boilerplate for it. + +#### Semantic UI + +```{deprecated} Volto 18.0.0 +``` + +The Semantic UI library is not maintained anymore, and will be removed in Plone 7. +You should no longer use Semantic UI in add-ons and projects. + +```{seealso} +Related PLIPs: + +- https://github.com/plone/volto/issues/6321 +- https://github.com/plone/volto/issues/6323 +``` + +##### Alternatives + +You can use any supported component framework of your choice for implementing new components, especially in the public theme side. +If you create new widgets or components for the CMSUI—in other words, the non-public side—you should use the [`@plone/components`](https://github.com/plone/volto/tree/main/packages/components) library as an alternative. +Even though it's still in the development phase, it will be completed in the next few months, and will be supported in the future. + +#### `lodash` library + +```{deprecated} Volto 18.0.0 +``` + +`lodash` is deprecated in Volto 18, and will be removed in Plone 7. + +`lodash` has not received any updates since 2021. +It has performance issues from bloated bundles and it's not prepared for ESM. +Lots of `lodash` utility helpers can be replaced with vanilla ES. +These issues cause concern about its future maintainability. + +In place of `lodash`, Plone 7 will use both the `lodash-es` library, which is ESM ready, and modern vanilla ES alternatives whenever possible. + +##### Alternatives + +```{seealso} +The following links suggest alternatives to `lodash`. + +- https://github.com/you-dont-need/You-Dont-Need-Lodash-Underscore +- https://javascript.plainenglish.io/you-dont-need-lodash-how-i-gave-up-lodash-693c8b96a07c + +If you still need some of the utilities in `lodash` and cannot use vanilla ES, you can use `lodash-es` instead. +``` + +#### `@loadable/component` and Volto `Loadables` framework + +```{deprecated} Volto 18.0.0 +``` + +`@loadable/component` and the Volto `Loadables` framework is deprecated in Volto 18, and will be removed from Plone 7. +It's a Webpack-only library, and it does not have Vite plugin support. +Since React 18, this library is no longer necessary, as it has the initial implementation of the "concurrent mode". +React 19 will further improve it and add more features around it. + +##### Alternatives + +Use plain React 18 lazy load features and its idioms for lazy load components. + +```jsx +const myLazyComponent = lazy(()=> import('@plone/volto/components/theme/MyLazyComponent/MyLazyComponent')) + +const RandomComponent = (props) => ( + + + +) +``` + +There's no support for pre-loading or lazy loading entire libraries as in `@loadable/component`. +With the removal of barrel imports files, as described in the next deprecation notice, it is now unnecessary. + +#### Removal of barrel import files + +```{deprecated} Volto 18.0.0 +``` + +Volto previously used barrel imports, which are centralized files where other imports are re-exported, to improve the developer user experience. +With barrel imports, a developer only needs to remember to import from the re-exported place, not the full path. + +Since the barrel imports directly import all the code, a lot of imports ended up in the same main chunk of code. +It became a bad practice. +Modern bundlers, such as Vite, rely upon the import path to determine whether to bundle code together or not, reducing the bundle size. + +The barrel imports must be removed to increase the natural number of chunks that Volto divides on—especially on routes—resulting in code splitting done the right and natural way. +This forces us to rewrite all the imports everywhere—including core, projects, and add-ons—once we implement it. +The barrel imports files include the following. + +- {file}`src/components/index.js` +- {file}`src/helpers/index.js` +- {file}`src/actions/index.js` + +##### Alternative + +Implement only direct imports in code, preparing now for the upcoming change. + +```diff +-import { BodyClass } from '@plone/volto/helpers'; ++import BodyClass from '@plone/volto/helpers/BodyClass/BodyClass'; +``` + +Once this is implemented, a code modification will be provided for a smooth migration. + + (volto-upgrade-guide-17.x.x)= ## Upgrading to Volto 17.x.x diff --git a/packages/volto/news/6426.documentation b/packages/volto/news/6426.documentation new file mode 100644 index 0000000000..dc5079729a --- /dev/null +++ b/packages/volto/news/6426.documentation @@ -0,0 +1 @@ +Added deprecation notices to the upgrade guide for Volto 18. @sneridagh From 715503dcdd638cb5c6a4fd3fd55d7d82d1352613 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Fern=C3=A1ndez=20de=20Alba?= Date: Sat, 26 Oct 2024 13:52:08 +0200 Subject: [PATCH 104/209] Replace all `yarn` appearences with `pnpm` (#6433) Co-authored-by: David Glick Co-authored-by: Steve Piercy --- docs/source/addons/i18n.md | 6 +- docs/source/addons/theme.md | 2 +- docs/source/client/quick-start.md | 4 +- .../configuration/environmentvariables.md | 38 +++++------ docs/source/configuration/internalproxy.md | 2 +- docs/source/configuration/volto-config-js.md | 4 +- .../configuration/zero-config-builds.md | 2 +- docs/source/contributing/linting.md | 11 +++- docs/source/contributing/testing.md | 5 +- docs/source/deploying/seamless-mode.md | 8 +-- docs/source/deploying/sentry.md | 4 +- docs/source/deploying/simple.md | 6 +- docs/source/development/creating-project.md | 57 ++--------------- .../development/environment-variables.md | 8 +-- docs/source/development/i18n.md | 6 +- docs/source/development/ie11compat.md | 64 ------------------- docs/source/development/index.md | 1 - docs/source/development/lazyload.md | 2 +- packages/volto/news/6433.documentation | 1 + 19 files changed, 64 insertions(+), 167 deletions(-) delete mode 100644 docs/source/development/ie11compat.md create mode 100644 packages/volto/news/6433.documentation diff --git a/docs/source/addons/i18n.md b/docs/source/addons/i18n.md index 4ae542e544..9df832da70 100644 --- a/docs/source/addons/i18n.md +++ b/docs/source/addons/i18n.md @@ -23,10 +23,10 @@ Your add-on has a `locales` folder with a `.pot` file. └── volto.po ``` -1. Run `yarn i18n` in the context of your add-on. +1. Run `pnpm i18n` in the context of your add-on. 1. Go to each `.po` file in your `locales` folder, and write the translations for each translation literal. -In the context of your project, run `yarn i18n` to merge the add-on translations with the ones of your project. +In the context of your project, run `pnpm i18n` to merge the add-on translations with the ones of your project. ## Override translations @@ -34,4 +34,4 @@ In the context of your project, run `yarn i18n` to merge the add-on translations If you have multiple add-ons installed in your project, the translations are loaded in the order your add-ons are listed in `package.json`. If two add-ons provide different translations for the same message, then the last defined add-on wins. -When running `yarn i18n` in the context of your project, the project's own locales are processed last and can override translations from any add-on. +When running `pnpm i18n` in the context of your project, the project's own locales are processed last and can override translations from any add-on. diff --git a/docs/source/addons/theme.md b/docs/source/addons/theme.md index d14d559140..99251fd370 100644 --- a/docs/source/addons/theme.md +++ b/docs/source/addons/theme.md @@ -33,7 +33,7 @@ or add a key in your `package.json` project: or via a `THEME` variable: ```shell -THEME='volto-my-theme' yarn start +THEME='volto-my-theme' pnpm start ``` 2. Create a directory `src/theme` in your add-on, then add this file `theme.config`, replacing `` with your add-on name: diff --git a/docs/source/client/quick-start.md b/docs/source/client/quick-start.md index dd3174a9b7..ad62cd181f 100644 --- a/docs/source/client/quick-start.md +++ b/docs/source/client/quick-start.md @@ -21,9 +21,11 @@ These functions can be used in other use cases like command line helpers, script To install the Javascript Plone client run the following command: ```shell -yarn add @plone/client +pnpm add @plone/client ``` +or use your package manager of choice. + ## `ploneClient` entry point The main artifact that the client provides is the `ploneClient` entry point. diff --git a/docs/source/configuration/environmentvariables.md b/docs/source/configuration/environmentvariables.md index a63c6144f1..701ce5c7c2 100644 --- a/docs/source/configuration/environmentvariables.md +++ b/docs/source/configuration/environmentvariables.md @@ -21,7 +21,7 @@ All configurable environment variables work at runtime, not only at build time. You could, for example, build your Volto application, then start it in production with the `RAZZLE_API_PATH` environment variable. ```shell -yarn build && RAZZLE_API_PATH=https://plone.org yarn start:prod +pnpm build && RAZZLE_API_PATH=https://plone.org pnpm start:prod ``` This brings you a lot of power since you don't have to rebuild on every configuration change. @@ -40,7 +40,7 @@ You can also generate builds on your continuous integration, then deploy them an However, if you are not able to upgrade the packages `plone.restapi` (8.12.1 or greater) and `plone.rest` (2.0.0a1 or greater) in the backend, you can adjust your web server configuration and use the `RAZZLE_LEGACY_TRAVERSE` flag. ```shell - RAZZLE_LEGACY_TRAVERSE=true yarn start:prod + RAZZLE_LEGACY_TRAVERSE=true pnpm start:prod ``` `VOLTO_ROBOTSTXT` @@ -50,7 +50,7 @@ You can also generate builds on your continuous integration, then deploy them an ```shell VOLTO_ROBOTSTXT="User-agent: * - Disallow: /" yarn start + Disallow: /" pnpm start ``` ```{note} @@ -67,19 +67,19 @@ You can also generate builds on your continuous integration, then deploy them an It helps you identify problems with a customization that does not work as you expect. ```shell - DEBUG=volto:shadowing yarn start + DEBUG=volto:shadowing pnpm start ``` `i18n` enables the log of missing internationalization messages in the console. ```shell - DEBUG=volto:i18n yarn start + DEBUG=volto:i18n pnpm start ``` `*` enables logging everywhere it exists in Volto. ```shell - DEBUG=volto:* yarn start + DEBUG=volto:* pnpm start ``` `DEBUG_ADDONS_LOADER` @@ -107,34 +107,34 @@ You can also generate builds on your continuous integration, then deploy them an `ADDONS` can be used to temporarily add an add-on to your build for testing purposes. ```shell - yarn add volto-slate - ADDONS=volto-slate:asDefault yarn start + pnpm add @kitconcept/volto-light-theme + ADDONS=@kitconcept/volto-light-theme pnpm start ``` `ADDONS` can also be used to temporarily enable a feature or a set of customizations. ```shell # given a folder './packages/coresandbox', like in vanilla Volto - ADDONS=coresandbox:multilingualFixture yarn start + ADDONS=coresandbox:multilingualFixture pnpm start ``` If you need to specify several add-ons, separate them with a semicolon (`;`): ```shell - ADDONS="test-addon;test-addon2" yarn start + ADDONS="test-addon;test-addon2" pnpm start ``` - + You can specify profiles for installation: - + ```shell - ADDONS="test-addon:profile1;test-addon2:profile2" yarn start + ADDONS="test-addon:profile1;test-addon2:profile2" pnpm start ``` The following code snippets demonstrate how to configure add-ons. First in `package.json`: - + ```json "addons": [ "@kitconcept/volto-blocks-grid" @@ -152,8 +152,8 @@ You can also generate builds on your continuous integration, then deploy them an And finally using `ADDONS`: ```shell - yarn add volto-slate - ADDONS=volto-slate:asDefault yarn start + pnpm add volto-slate + ADDONS=volto-slate:asDefault pnpm start ``` As a result, your app will load the add-ons in the following order: @@ -165,14 +165,14 @@ You can also generate builds on your continuous integration, then deploy them an ```{important} The `ADDONS` key is a Volto specific configuration. Simply setting `ADDONS` doesn't download the JavaScript package. - This has to be covered another way, by either installing the add-on package (with `yarn add`), or loading it as a development package with `mrs-developer`. + This has to be covered another way, by either installing the add-on package (with `pnpm add`), or loading it as a development package with `mrs-developer`. ``` `BUILD_DIR` This is a runtime-only environment variable that directs the build to run Volto from a specific location, other than the default folder `build`. ```shell - yarn + pnpm install BUILD_DIR=dist node dist/server.js ``` @@ -182,7 +182,7 @@ You can also generate builds on your continuous integration, then deploy them an It can be relative to the current project or absolute. ```shell - VOLTOCONFIG=../../volto.config.js yarn start + VOLTOCONFIG=../../volto.config.js pnpm start ``` ```` diff --git a/docs/source/configuration/internalproxy.md b/docs/source/configuration/internalproxy.md index ec8612fe65..dde6c9b369 100644 --- a/docs/source/configuration/internalproxy.md +++ b/docs/source/configuration/internalproxy.md @@ -61,7 +61,7 @@ export const settings = { or use the environment variable: ```bash -RAZZLE_DEV_PROXY_API_PATH=http://localhost:8081/mysite yarn start +RAZZLE_DEV_PROXY_API_PATH=http://localhost:8081/mysite pnpm start ``` This redefines the request path from the internal proxy of the server side Node.js process to the Plone content backend API, but leaves the frontend Volto process making all content requests to `http://localhost:3000/++api++/`. diff --git a/docs/source/configuration/volto-config-js.md b/docs/source/configuration/volto-config-js.md index a8e4c4faa7..8bb16ce951 100644 --- a/docs/source/configuration/volto-config-js.md +++ b/docs/source/configuration/volto-config-js.md @@ -70,11 +70,11 @@ This environment variable allows you to specify a custom location for {file}`vol It can be relative to the current project or absolute. ```shell -VOLTOCONFIG=../../volto.config.js yarn start +VOLTOCONFIG=../../volto.config.js pnpm start ``` ```shell -VOLTOCONFIG=$(pwd)/volto.config.js yarn start +VOLTOCONFIG=$(pwd)/volto.config.js pnpm start ``` You can also set it from the root of the monorepo: diff --git a/docs/source/configuration/zero-config-builds.md b/docs/source/configuration/zero-config-builds.md index 7b4c396075..5ac09d7d87 100644 --- a/docs/source/configuration/zero-config-builds.md +++ b/docs/source/configuration/zero-config-builds.md @@ -17,7 +17,7 @@ In the past (before Volto 13), Volto was configured in build time using several environment variables, commonly supplied via the command line, such as the following: ```shell -PORT=11001 RAZZLE_API_PATH=https://plone.org/api yarn build` +PORT=11001 RAZZLE_API_PATH=https://plone.org/api pnpm build` ``` and since Razzle is an isomorphic application, some of these values passed on build time, were diff --git a/docs/source/contributing/linting.md b/docs/source/contributing/linting.md index cd291fd556..feea6f0307 100644 --- a/docs/source/contributing/linting.md +++ b/docs/source/contributing/linting.md @@ -76,7 +76,7 @@ From here we will have access to the commands to check for errors and to fix the You can run the pnpm `eslint`, `prettier`, and `stylelint` commands from the Volto package folder: ```shell -pnpm lint +pnpm lint pnpm prettier pnpm stylelint ``` @@ -89,8 +89,13 @@ pnpm prettier:fix pnpm stylelint:fix ``` -````{note} -The same commands can be found in your Volto add-on projects, as seen in the [`package.json.tpl`](https://github.com/plone/volto/blob/main/packages/generator-volto/generators/app/templates/package.json.tpl#L10) file. +```{versionadded} Volto 18.0.0-alpha.43 +[Cookieplone](https://github.com/plone/cookieplone) is now the recommended way to develop Volto projects, using it as a boilerplate generator. +Cookieplone uses the frontend code installed using `pnpm` instead of `yarn`. +``` + +````{deprecated} Volto 18.0.0 +The same commands can be found in your Volto legacy add-ons and projects created with `@plone/generator-volto`, as seen in the [`package.json.tpl`](https://github.com/plone/volto/blob/main/packages/generator-volto/generators/app/templates/package.json.tpl#L10) file. You will use similar commands to run the linting commands, but with `yarn` instead of `pnpm`: diff --git a/docs/source/contributing/testing.md b/docs/source/contributing/testing.md index a1244c9496..37f241151d 100644 --- a/docs/source/contributing/testing.md +++ b/docs/source/contributing/testing.md @@ -66,10 +66,9 @@ This makes it faster and easier to test code changes. In GitHub workflows or for testing add-ons, it's useful to use an alternate Jest configuration. Volto provides a way to do so using a file {file}`jest.config.js`, or pointing the test runner to a file of your choice, using the `RAZZLE_JEST_CONFIG` environment variable. -Because the Volto add-ons and Volto add-ons projects still use `yarn`, you must run the test command using `yarn` instead of `pnpm`. ```shell -RAZZLE_JEST_CONFIG=my-custom-jest-config.js yarn test +RAZZLE_JEST_CONFIG=my-custom-jest-config.js pnpm test ``` ```{note} @@ -85,7 +84,7 @@ Sometimes you need to enable different configurations and enable optional compon You can use the `ADDONS` environment variable to define them. ```bash -ADDONS=test-addon,test-addon2 yarn start +ADDONS=test-addon,test-addon2 pnpm start ``` See {doc}`../configuration/environmentvariables` for more information. diff --git a/docs/source/deploying/seamless-mode.md b/docs/source/deploying/seamless-mode.md index a678728a73..0173bdbaf3 100644 --- a/docs/source/deploying/seamless-mode.md +++ b/docs/source/deploying/seamless-mode.md @@ -48,13 +48,13 @@ All the environment variables that are configurable now work at runtime, not at Before Volto 13, you'd do: ```bash -RAZZLE_API_PATH=https://plone.org yarn build && yarn start:prod +RAZZLE_API_PATH=https://plone.org pnpm build && pnpm start:prod ``` From Volto 13 onwards, you can now do: ```bash -yarn build && RAZZLE_API_PATH=https://plone.org yarn start:prod +pnpm build && RAZZLE_API_PATH=https://plone.org pnpm start:prod ``` ```` @@ -130,7 +130,7 @@ server { error_log /dev/stdout; # [seamless mode] Recommended as default configuration, using seamless mode new plone.rest traversal - # yarn build && yarn start:prod + # pnpm build && pnpm start:prod location ~ /\+\+api\+\+($|/.*) { rewrite ^/\+\+api\+\+($|/.*) /VirtualHostBase/http/myservername.org/Plone/++api++/VirtualHostRoot/$1 break; proxy_pass http://backend; @@ -138,7 +138,7 @@ server { # Legacy deployment example, using RAZZLE_LEGACY_TRAVERSE Volto won't append ++api++ automatically # Recommended only if you can't upgrade to latest `plone.restapi` and `plone.rest` - # yarn build && RAZZLE_API_PATH=http://myservername.org/api RAZZLE_LEGACY_TRAVERSE=true yarn start:prod + # pnpm build && RAZZLE_API_PATH=http://myservername.org/api RAZZLE_LEGACY_TRAVERSE=true pnpm start:prod # location ~ /api($|/.*) { # rewrite ^/api($|/.*) /VirtualHostBase/http/myservername.org/Plone/VirtualHostRoot/_vh_api$1 break; # proxy_pass http://backend; diff --git a/docs/source/deploying/sentry.md b/docs/source/deploying/sentry.md index f92ba34ecc..4266ffd4b8 100644 --- a/docs/source/deploying/sentry.md +++ b/docs/source/deploying/sentry.md @@ -82,7 +82,7 @@ SENTRY_AUTH_TOKEN=foo \ SENTRY_ORG=my_organization \ SENTRY_PROJECT=new_project \ SENTRY_RELEASE=2.0.0 \ -SENTRY_DSN=https://boo@sentry.com/1 yarn build +SENTRY_DSN=https://boo@sentry.com/1 pnpm build node build/server.js ``` @@ -265,7 +265,7 @@ SENTRY_PROJECT=new_project SENTRY_RELEASE=2.0.0 SENTRY_DSN=https://boo@sentry.com/1 SENTRY_FRONTEND_CONFIG='{"tags":{"site":"www.test.com","app":"test_app"},"extras":{"logger":"javascript-frontend", "release":"1.4.1"}}' -SENTRY_BACKEND_CONFIG='{"tags":{"site":"www.test.com","app":"test_app"} yarn build +SENTRY_BACKEND_CONFIG='{"tags":{"site":"www.test.com","app":"test_app"} pnpm build node build/server.js ``` diff --git a/docs/source/deploying/simple.md b/docs/source/deploying/simple.md index 1215cb3cd5..31b3894a3e 100644 --- a/docs/source/deploying/simple.md +++ b/docs/source/deploying/simple.md @@ -12,7 +12,7 @@ myst: Volto is a Node.js application that runs on your machine/server and listens to a port. Once you are ready to deploy it, you should build it running: ```bash -$ yarn build +$ pnpm build ``` The Volto configuration determines the external URL Volto will be served, so if you just issue this command, the build will get that values and build an static bundle with that values (PORT=3000, API_PATH=http://localhost:8080/Plone). @@ -20,13 +20,13 @@ The Volto configuration determines the external URL Volto will be served, so if In order to make Volto work on a server under an specific DNS name, you must parametrize the build like: ```bash -$ PORT=volto_node_process_port RAZZLE_API_PATH=https://mywebsite.com/api yarn build +$ PORT=volto_node_process_port RAZZLE_API_PATH=https://mywebsite.com/api pnpm build ``` After the build, the bundle is created in `/build` folder, then in order to launch your application you can run: ```bash -$ yarn start:prod +$ pnpm start:prod ``` or ```bash diff --git a/docs/source/development/creating-project.md b/docs/source/development/creating-project.md index 5052533f81..f5ef93fefc 100644 --- a/docs/source/development/creating-project.md +++ b/docs/source/development/creating-project.md @@ -9,60 +9,15 @@ myst: # Create a Volto project without a backend -This document shows how to create a Volto project with the frontend only when you have your own existing backend, such as Plone {term}`Classic UI`, {term}`Nick`, or {term}`Guillotina`. +```{versionadded} Volto 18.0.0-alpha.43 +``` + +[Cookieplone](https://github.com/plone/cookieplone) is now the recommended way to develop Volto projects, using it as a boilerplate generator. +Even if you don't need the backend, you can create a Plone project, then use only the {file}`frontend` folder for your purposes. +As a bonus, it will contain the means for deploying your project. ```{seealso} To create a full Plone project with both frontend and backend, see {doc}`plone:install/create-project` instead. To contribute to Volto, see {doc}`../contributing/developing-core`. ``` - -For using Volto for a project—in other words, use Volto as a library—you should use Volto's project generator `@plone/generator-volto`. -It's a boilerplate project generator based on Yeoman that will provide you with the basic files and folder structure to bootstrap a Volto site. -In addition to bootstrapping stand-alone Volto projects, it can also bootstrap Volto add-ons. - -1. Open a terminal and execute: - - ```shell - npm install -g yo @plone/generator-volto - # Install the latest and stable release of Volto with the following command - yo @plone/volto - # or you can install the "canary" release, including any alpha release - yo @plone/volto --canary - # or you can install any specific released version - yo @plone/volto --volto=15.0.0 - # you can even pass a GitHub repo and specific branch - yo @plone/volto --volto=plone/volto#16.0.0 - # you can bootstrap with add-ons - yo @plone/volto --addon=volto-form-block - ``` - -2. Answer the questions when prompted, and provide the name of the new app (folder) to be created. - For the sake of this documentation, use `myvoltoproject` as the project name. - - ````{note} - You can run the generator with parameters to tailor your requirements. - - ```shell - yo @plone/volto --help - ``` - - ```{seealso} - [`@plone/generator-volto` `README.md`](https://github.com/plone/volto/blob/main/packages/generator-volto/README.md). - ``` - ```` - -3. Change your working directory to the newly created folder `myvoltoproject` (or whatever name you entered). - - ```shell - cd myvoltoproject - ``` - -4. `@plone/generator-volto` installed the dependencies for you. - Start the project. - - ```shell - yarn start - ``` - - This starts the development server, which compiles the project code, and when done, it serves the app at http://localhost:3000. diff --git a/docs/source/development/environment-variables.md b/docs/source/development/environment-variables.md index 6b8b79efc3..78dc734177 100644 --- a/docs/source/development/environment-variables.md +++ b/docs/source/development/environment-variables.md @@ -33,7 +33,7 @@ docker run -it --rm -p 55001:8080 -e SITE=Plone -e ADDONS='plone.restapi==8.20.0 ``` ```shell -RAZZLE_DEV_PROXY_API_PATH='http://localhost:55001/Plone' yarn start +RAZZLE_DEV_PROXY_API_PATH='http://localhost:55001/Plone' pnpm start ``` Let's say that you do have it in a customized site id: http://localhost:55001/myplonesite @@ -43,7 +43,7 @@ docker run -it --rm -p 55001:8080 -e SITE=myplonesite -e ADDONS='plone.restapi== ``` ```shell -RAZZLE_DEV_PROXY_API_PATH='http://localhost:55001/myplonesite' yarn start +RAZZLE_DEV_PROXY_API_PATH='http://localhost:55001/myplonesite' pnpm start ``` ### Debug an external site (provided you have access to it) @@ -55,7 +55,7 @@ This is an advanced feature, and needs understanding of what you are doing and w Let's say you want to debug a deployed site in production, but the build does not allow you to look deeper into the tracebacks. You could bootstrap a frontend in your machine, and point it to the production server, combining environment variables like: ``` -RAZZLE_DEV_PROXY_API_PATH=https://2021.ploneconf.org RAZZLE_PROXY_REWRITE_TARGET=https://2021.ploneconf.org/++api++ yarn start +RAZZLE_DEV_PROXY_API_PATH=https://2021.ploneconf.org RAZZLE_PROXY_REWRITE_TARGET=https://2021.ploneconf.org/++api++ pnpm start ``` This has the drawback that could be that the proxy does not work well with the proxied SSL connection. @@ -63,7 +63,7 @@ This has the drawback that could be that the proxy does not work well with the p If you have access (via tunnel) to the port of the deployed backend is even more easier: ``` -RAZZLE_DEV_PROXY_API_PATH=http://2021.ploneconf.org:8080/Plone yarn start +RAZZLE_DEV_PROXY_API_PATH=http://2021.ploneconf.org:8080/Plone pnpm start ``` This will use the internal proxy to access the backend, bypassing CORS. diff --git a/docs/source/development/i18n.md b/docs/source/development/i18n.md index 36bffe4dfc..f9f2f4dd03 100644 --- a/docs/source/development/i18n.md +++ b/docs/source/development/i18n.md @@ -145,7 +145,7 @@ Volto provides an i18n extraction script to get all translatable strings from yo You can invoke this script with the following command. ```sh -yarn i18n +pnpm i18n ``` This will generate the following output: @@ -181,7 +181,7 @@ defineMessages({ }); ``` -Then run `yarn i18n`. +Then run `pnpm i18n`. You will find the translation ready to override in your `locales` directory, such as `locales/de/LC_MESSAGES/volto.po`. ```text @@ -190,7 +190,7 @@ msgid "Back" msgstr "My overridden translation" ``` -After you set the override, then run `yarn i18n` again to create the `de.json` translation files. +After you set the override, then run `pnpm i18n` again to create the `de.json` translation files. Restart Volto to see the changes applied. diff --git a/docs/source/development/ie11compat.md b/docs/source/development/ie11compat.md deleted file mode 100644 index 16735ed7ae..0000000000 --- a/docs/source/development/ie11compat.md +++ /dev/null @@ -1,64 +0,0 @@ ---- -myst: - html_meta: - "description": "Legacy browser support with polyfills, babel-env, and pre- and post-transpiling" - "property=og:description": "Legacy browser support with polyfills, babel-env, and pre- and post-transpiling" - "property=og:title": "Legacy Browser Support (IE11 compatibility)" - "keywords": "Volto, Plone, frontend, React, IE11 compatibility, polyfills, legacy browser support" ---- - -# Legacy Browser Support (IE11 compatibility) - -There are some caveats if we still want to target IE11 as supported browser. - -```{important} -This documentation is orientative. Volto does NOT support legacy or vendor deprecated browsers (as in IE11). -``` - -## Version pinning - -These package versions should be pinned to this especific versions, unless -their code or dependencies have some es6 only compatible, because their -maintainers mainly target the Node.js world. - -* "query-string": "4.1.0" -* "superagent": "3.8.2" - -## Polyfills - -Then in the project that should target it, these changes are required: - -add as a dependency `@babel/polyfill`. - - yarn add @babel/polyfill - -and in `src/client.jsx`: - -```js -import '@babel/polyfill'; -``` - -```{seealso} -See https://babeljs.io/docs/babel-polyfill for more updated information -``` - -## babel-env - -Razzle supports `@babel/preset-env`, that supports including `browserlist` in -`package.json`. So you can add this to `package.json`: - -```json - "browserslist": [ - "last 2 version", - "IE 11" - ], -``` - -This supports the query specific DSL for `browserlist` targeting the browsers -that you need to add. - -## Pre-transpiling - -Some packages in `node_modules` are ES6 only, for some older browsers, you might want to add a pre (or post) transpiling. There's a script `pre-build-transpiling.js` (Volto root folder) that might help you with it. Also this command line might help: - - ./node_modules/.bin/babel --presets="@babel/env" XXX --out-dir XXX diff --git a/docs/source/development/index.md b/docs/source/development/index.md index 90c28191f8..a1e5952999 100644 --- a/docs/source/development/index.md +++ b/docs/source/development/index.md @@ -36,5 +36,4 @@ pluggables widget how-to-restrict-blocks color-picker-widget -ie11compat ``` diff --git a/docs/source/development/lazyload.md b/docs/source/development/lazyload.md index 668a7190b8..7a04d373cf 100644 --- a/docs/source/development/lazyload.md +++ b/docs/source/development/lazyload.md @@ -36,7 +36,7 @@ You can find the complete `@loadable/component` documentation here: https://load You can check the code splitting state by using the included bundle analyzer: ```shell -yarn analyze +pnpm --filter=volto analyze ``` A browser will open with the bundle inspector. diff --git a/packages/volto/news/6433.documentation b/packages/volto/news/6433.documentation new file mode 100644 index 0000000000..82111de185 --- /dev/null +++ b/packages/volto/news/6433.documentation @@ -0,0 +1 @@ +Replace `yarn` with `pnpm` wherever necessary. @sneridagh From f576c13850e36ca4faf0ae54a6c86b21914658bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Fern=C3=A1ndez=20de=20Alba?= Date: Sat, 26 Oct 2024 13:52:20 +0200 Subject: [PATCH 105/209] [Next.js] Better Vercel deployment (#6441) Co-authored-by: Steve Piercy --- apps/nextjs/README.md | 95 +++++++++++++++++++++++------------ apps/nextjs/next.config.mjs | 27 ++++++---- apps/nextjs/src/app/config.ts | 21 ++++++-- 3 files changed, 97 insertions(+), 46 deletions(-) diff --git a/apps/nextjs/README.md b/apps/nextjs/README.md index c04dca61ad..4660a9939a 100644 --- a/apps/nextjs/README.md +++ b/apps/nextjs/README.md @@ -1,6 +1,7 @@ # Plone on Next.js -This is a proof of concept of a [Next.js](https://nextjs.org) app, using the app router and the `@plone/client` and `@plone/components` library. This is intended to serve as both a playground for the development of both packages and as demo of Plone using Next.js. +This is a proof of concept of a [Next.js](https://nextjs.org) app, using the app router and the `@plone/client` and `@plone/components` library. +This is intended to serve as both a playground for the development of both packages and as a demo of Plone using Next.js. > [!WARNING] > This package or app is experimental. @@ -9,7 +10,7 @@ This is a proof of concept of a [Next.js](https://nextjs.org) app, using the app ## Development -To start, from the root of the monorepo: +To start, from the root of the monorepo, issue the following commands in a shell session. ```shell pnpm install @@ -25,65 +26,93 @@ make backend-docker-start ## Deployment at Vercel - -We introduce an environment variable `API_SERVER_URL`. -You need to create this environment variable in the Vercel deployment's control panel, specifying the URL where your backend API server is deployed, and the route where the API is located, as shown. +For deploying your app at Vercel, you need to create the environment variable `API_SERVER_URL` in Vercel's deployment control panel, specifying the URL where your backend API server is deployed, and the route where the API is located, as shown. ```shell API_SERVER_URL=https://my-server-DNS-name.tld/api ``` +For production deployments, you will need to force the deployment URL, otherwise you will have issues with CORS. +To do so, set another environment variable for the production URL, `NEXT_PRODUCTION_URL`. +This URL needs to be scheme-less, without `http` or `https`, and consist only of the domain name: + +```shell +NEXT_PRODUCTION_URL=my-nextjs-production-DNS-name.tld +``` + ### Application rewrite configuragtion -To avoid issues with CORS and maintain the server counterpart private, our Next.js app should have a rewrite, configured as follows: +To avoid issues with CORS and maintain the server counterpart private, your Next.js app should have a rewrite, configured as follows: ```jsx const nextConfig = { // Rewrite to the backend to avoid CORS async rewrites() { - const apiServerURL = - process.env.API_SERVER_URL || - 'http://localhost:8080/Plone/%2B%2Bapi%2B%2B'; + let apiServerURL, vhmRewriteRule; + if ( + process.env.API_SERVER_URL && + (process.env.NEXT_PRODUCTION_URL || process.env.NEXT_PUBLIC_VERCEL_URL) + ) { + // We are in Vercel + apiServerURL = process.env.API_SERVER_URL; + vhmRewriteRule = `/VirtualHostBase/https/${ + process.env.NEXT_PRODUCTION_URL + ? // We are in the production deployment + process.env.NEXT_PRODUCTION_URL + : // We are in the preview deployment + process.env.NEXT_PUBLIC_VERCEL_URL + }%3A443/Plone/%2B%2Bapi%2B%2B/VirtualHostRoot`; + } else if (process.env.API_SERVER_URL) { + // We are in development + apiServerURL = process.env.API_SERVER_URL; + vhmRewriteRule = + '/VirtualHostBase/http/localhost%3A3000/Plone/%2B%2Bapi%2B%2B/VirtualHostRoot'; + } else { + // We are in development and the API_SERVER_URL is not set, so we use a local backend + apiServerURL = 'http://localhost:8080'; + vhmRewriteRule = + '/VirtualHostBase/http/localhost%3A3000/Plone/%2B%2Bapi%2B%2B/VirtualHostRoot'; + } return [ { source: '/\\+\\+api\\+\\+/:slug*', destination: - `${apiServerURL}/VirtualHostBase/https/${process.env.NEXT_PUBLIC_VERCEL_URL}%3A443/Plone/%2B%2Bapi%2B%2B/VirtualHostRoot/:slug*`, + `${apiServerURL}${vhmRewriteRule}/:slug*`, }, ]; }, }; ``` -Plone Client uses the `++api++` prefix as default, so we should create a redirect in our app pointing to the API server, but using Plone's traditional virtual host management configuration. +Plone Client uses the `++api++` prefix as default, so you should create a redirect in your app pointing to the API server, but using Plone's traditional virtual host management configuration. -Next.js rewrites are picky on the `destination` field, because its rewrite library does not support URLs with regular expression operators. -Therefore, we can't use the usual `++api++` route for the rewrite. -This will allow us to infer the current server URL—even in deployed branches and pull requests—without touching the rewrite rules. -We will fallback to configure a `api` route in our reverse proxy of choice. +Next.js rewrites are picky with the `destination` field, because its rewrite library does not support URLs with regular expression operators. +Therefore, you can't use the usual `++api++` route for the rewrite. +This will allow you to infer the current server URL—even in deployed branches and pull requests—without touching the rewrite rules. +You will fallback to configure a `api` route in your reverse proxy of choice. ### Plone backend You have to deploy the Plone backend elsewhere, since Vercel is serverless oriented. -We need to set up the rewrite rule in Next.js's `rewrite` feature as shown in the previous section. +You need to set up the rewrite rule in Next.js's `rewrite` feature as shown in the previous section. -We will fallback to configure an `api` route in our reverse proxy of choice. +You will fallback to configure an `api` route in your reverse proxy of choice. -For example, if we use `traefik`: +For example, if you use `traefik`: ```yaml - ## VHM rewrite /api/ (Plone Next.js) - - "traefik.http.middlewares.mw-backend-vhm-api.replacepathregex.regex=^/api($$|/.*)" - ## We remove the incoming /api and just use the path - - "traefik.http.middlewares.mw-backend-vhm-api.replacepathregex.replacement=$$1" - - ## /api router - - traefik.http.routers.rt-backend-api.rule=Host(`my_server_DNS_name`) && PathPrefix(`/api`) - - traefik.http.routers.rt-backend-api.entrypoints=https - - traefik.http.routers.rt-backend-api.tls=true - - traefik.http.routers.rt-backend-api.service=svc-backend - - traefik.http.routers.rt-backend-api.middlewares=gzip,mw-backend-vhm-api +## VHM rewrite /api/ (Plone Next.js) +- "traefik.http.middlewares.mw-backend-vhm-api.replacepathregex.regex=^/api($$|/.*)" +## We remove the incoming /api and just use the path +- "traefik.http.middlewares.mw-backend-vhm-api.replacepathregex.replacement=$$1" + +## /api router +- traefik.http.routers.rt-backend-api.rule=Host(`my_server_DNS_name`) && PathPrefix(`/api`) +- traefik.http.routers.rt-backend-api.entrypoints=https +- traefik.http.routers.rt-backend-api.tls=true +- traefik.http.routers.rt-backend-api.service=svc-backend +- traefik.http.routers.rt-backend-api.middlewares=gzip,mw-backend-vhm-api ``` ## About this app @@ -100,16 +129,18 @@ pnpm dev Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. -You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. +You can start editing the page by modifying `app/page.tsx`. +The page auto-updates as you edit the file. ## Learn More To learn more about Next.js, take a look at the following resources: -- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. +- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and its API. - [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. -You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! +You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/). +Your feedback and contributions are welcome! ## Deploy on Vercel diff --git a/apps/nextjs/next.config.mjs b/apps/nextjs/next.config.mjs index f214d4f86b..2bc72a90f0 100644 --- a/apps/nextjs/next.config.mjs +++ b/apps/nextjs/next.config.mjs @@ -1,4 +1,4 @@ -import path from 'path'; +// import path from 'path'; /** @type {import('next').NextConfig} */ const nextConfig = { @@ -21,17 +21,26 @@ const nextConfig = { // Rewrite to the backend to avoid CORS async rewrites() { let apiServerURL, vhmRewriteRule; - if (process.env.API_SERVER_URL) { - apiServerURL = process.env.API_SERVER_URL; - vhmRewriteRule = `/VirtualHostBase/https/${process.env.NEXT_PUBLIC_VERCEL_URL}%3A443/Plone/%2B%2Bapi%2B%2B/VirtualHostRoot`; - } else if ( + if ( process.env.API_SERVER_URL && - !process.env.NEXT_PUBLIC_VERCEL_URL + (process.env.NEXT_PRODUCTION_URL || process.env.NEXT_PUBLIC_VERCEL_URL) ) { - throw new Error( - 'API_SERVER_URL set and NEXT_PUBLIC_VERCEL_URL not present.', - ); + // We are in Vercel + apiServerURL = process.env.API_SERVER_URL; + vhmRewriteRule = `/VirtualHostBase/https/${ + process.env.NEXT_PRODUCTION_URL + ? // We are in the production deployment + process.env.NEXT_PRODUCTION_URL + : // We are in the preview deployment + process.env.NEXT_PUBLIC_VERCEL_URL + }%3A443/Plone/%2B%2Bapi%2B%2B/VirtualHostRoot`; + } else if (process.env.API_SERVER_URL) { + // We are in development + apiServerURL = process.env.API_SERVER_URL; + vhmRewriteRule = + '/VirtualHostBase/http/localhost%3A3000/Plone/%2B%2Bapi%2B%2B/VirtualHostRoot'; } else { + // We are in development and the API_SERVER_URL is not set, so we use a local backend apiServerURL = 'http://localhost:8080'; vhmRewriteRule = '/VirtualHostBase/http/localhost%3A3000/Plone/%2B%2Bapi%2B%2B/VirtualHostRoot'; diff --git a/apps/nextjs/src/app/config.ts b/apps/nextjs/src/app/config.ts index 2bbdde6a9a..8d0b440630 100644 --- a/apps/nextjs/src/app/config.ts +++ b/apps/nextjs/src/app/config.ts @@ -1,15 +1,26 @@ import config from '@plone/registry'; +import type { ConfigType } from '@plone/registry'; import { slate } from '@plone/blocks'; import { blocksConfig } from '@plone/blocks'; -const settings = { - apiPath: process.env.NEXT_PUBLIC_VERCEL_URL - ? // Vercel does not prepend the schema to the NEXT_PUBLIC_VERCEL_URL automatic env var - `https://${process.env.NEXT_PUBLIC_VERCEL_URL}` - : 'http://localhost:3000', +const settings: Partial = { slate, }; +if (process.env.NEXT_PUBLIC_VERCEL_URL) { + // This app is at Vercel + if (process.env.NEXT_PRODUCTION_URL) { + // This app is in a production deployment, so set the apiPath to the production URL + settings.apiPath = process.env.NEXT_PRODUCTION_URL; + } else { + // This app is in a preview deployment, so set the apiPath to the Vercel URL + settings.apiPath = `https://${process.env.NEXT_PUBLIC_VERCEL_URL}`; + } +} else { + // This app is in development, so set the apiPath to localhost + settings.apiPath = 'http://localhost:3000/'; +} + // @ts-expect-error Improve typings config.set('settings', settings); From 83e2a6ab73d25cdb77a01f97bd11d80952f88eed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Fern=C3=A1ndez=20de=20Alba?= Date: Sun, 27 Oct 2024 15:37:06 +0100 Subject: [PATCH 106/209] `@plone/registry` as ESM module, move to TS, complete documentation (#6399) Co-authored-by: Steve Piercy Co-authored-by: David Glick --- .eslintignore | 2 + .github/workflows/acceptance.yml | 3 + .github/workflows/docs-rtd-pr-preview.yml | 1 + .github/workflows/readme-link-check.yml | 2 +- .prettierignore | 1 + apps/remix/tsconfig.json | 2 - apps/remix/vite.config.ts | 2 + docs/source/upgrade-guide/index.md | 57 ++ package.json | 3 + .../generators/app/templates/.eslintrc.js | 10 +- .../app/templates/.storybook/main.js | 4 +- packages/generator-volto/news/6399.breaking | 2 + .../registry/{.eslintrc.js => .eslintrc.cjs} | 8 +- packages/registry/.gitignore | 7 +- packages/registry/.readthedocs.yaml | 34 + packages/registry/Makefile | 90 ++ packages/registry/README.md | 196 +--- .../__tests__/addon-registry-app.test.js | 18 + .../registry/__tests__/addon-registry.test.js | 366 ++++++++ .../__tests__/create-addons-loader.test.js | 164 ++++ .../@plone/slots/components/Logo/Logo.svg | 1 + .../node_modules/@plone/slots/index.js | 1 + .../node_modules/@plone/slots/package.json | 4 + .../@plone/slots/components/Logo/Logo.svg | 1 + .../test-app/node_modules/my-addon/index.js | 1 + .../node_modules/my-addon/package.json | 4 + .../__tests__/fixtures/test-app/package.json | 3 + .../fixtures/test-app/registry.config.js | 3 + .../addons/my-volto-config-addon/package.json | 10 + .../my-volto-config-addon/src/testaddon.js} | 0 .../addons/non-volto-addon-lib/index.js | 1 + .../addons/non-volto-addon-lib/package.json | 5 + .../addons/test-addon/package.json | 10 + .../test-released-source-addon/index.js | 1 + .../src/custom-addons/volto/server.jsx | 1 + .../addons/test-addon/src/testaddon.js | 0 .../addons/test-released-dummy/index.js | 1 + .../addons/test-released-dummy/package.json | 8 + .../fixtures/test-volto-project/jsconfig.json | 11 + .../@plone/volto/src/LanguageSwitcher.jsx | 1 + .../@plone/volto/src/TSComponent.tsx | 1 + .../node_modules/@plone/volto/src/client.js | 1 + .../node_modules/@plone/volto/src/routes.jsx | 1 + .../node_modules/@plone/volto/src/server.jsx | 0 .../index.js | 1 + .../package.json | 11 + .../node_modules/test-released-addon/index.js | 1 + .../test-released-addon/package.json | 8 + .../node_modules/test-released-dummy/index.js | 2 + .../test-released-dummy/package.json | 5 + .../test-released-source-addon/package.json | 5 + .../razzle.extend.js | 0 .../src/customizations/@root/marker.js | 0 .../src/customizations/LanguageSwitcher.js | 1 + .../src/customizations/TSComponent.jsx | 1 + .../src/customizations/client.js | 1 + .../src/customizations/routes.tsx | 1 + .../test-released-source-addon/src/index.js | 0 .../test-released-unmentioned/index.js | 2 + .../test-released-unmentioned/package.json | 5 + .../test-released-via-addons-env-var/index.js | 2 + .../package.json | 4 + .../fixtures/test-volto-project/package.json | 12 + .../package.json | 4 + .../src/index.js | 1 + .../src/custom-addons/test-addon/testaddon.js | 1 + .../src/custom-addons/volto/client.js | 1 + .../src/customizations/LanguageSwitcher.js | 1 + .../src/customizations/TSComponent.jsx | 0 .../src/customizations/client.js | 1 + .../src/customizations/routes.tsx | 0 .../src/customizations/server.jsx | 1 + .../fixtures/test-volto-project/src/marker.js | 0 .../test-volto-project/volto.config.envvar.js | 3 + .../test-volto-project/volto.config.js | 3 + .../__tests__/fixtures/volto-addon1.js | 14 + .../__tests__/fixtures/volto-addon2.js | 29 + .../__tests__/fixtures/volto-addon3.js | 41 + .../docs/_static/Plone_logo_square.png | Bin 0 -> 30912 bytes packages/registry/docs/_static/favicon.ico | Bin 0 -> 5430 bytes packages/registry/docs/_static/logo.svg | 48 + packages/registry/docs/_static/print.css | 3 + .../docs/conceptual-guides/add-on-registry.md | 38 + .../conceptual-guides/component-registry.md | 20 + .../configuration-registry.md | 78 ++ .../conceptual-guides/utility-registry.md | 14 + packages/registry/docs/conf.py | 297 ++++++ .../docs/how-to-guides/access-registry.md | 20 + .../how-to-guides/instantiate-registry.md | 56 ++ .../docs/how-to-guides/register-an-add-on.md | 94 ++ .../register-and-retrieve-components.md | 114 +++ .../register-and-retrieve-utilities.md | 113 +++ .../docs/how-to-guides/shadow-a-component.md | 61 ++ packages/registry/docs/index.md | 43 + packages/registry/docs/robots.txt | 8 + packages/registry/news/6399.breaking | 6 + packages/registry/news/6399.feature | 1 + packages/registry/package.json | 45 +- .../addon-registry.ts} | 375 +++++--- .../create-addons-loader.ts} | 52 +- .../create-theme-loader.ts} | 54 +- packages/registry/src/index.ts | 35 +- packages/registry/tsconfig.json | 2 +- packages/registry/tsconfig.node.json | 24 + packages/registry/vite-plugin.d.ts | 5 + packages/registry/vite-plugin.js | 60 ++ packages/scripts/i18n.cjs | 23 +- packages/scripts/news/6399.feature | 1 + packages/volto/.eslintrc | 1 - packages/volto/.storybook/main.js | 4 +- .../__tests__/addon-registry-project.test.js | 52 +- .../__tests__/addon-registry-volto.test.js | 14 +- .../__tests__/create-addons-loader.test.js | 74 +- .../webpack-relative-resolver.test.js | 4 +- packages/volto/news/6399.internal | 1 + packages/volto/package.json | 6 +- packages/volto/razzle.config.js | 13 +- .../volto/src/express-middleware/static.js | 4 +- patches/jest-resolve@26.6.2.patch | Bin 0 -> 7680 bytes pnpm-lock.yaml | 885 ++++++++++++++++-- 120 files changed, 3400 insertions(+), 552 deletions(-) create mode 100644 packages/generator-volto/news/6399.breaking rename packages/registry/{.eslintrc.js => .eslintrc.cjs} (88%) create mode 100644 packages/registry/.readthedocs.yaml create mode 100644 packages/registry/Makefile create mode 100644 packages/registry/__tests__/addon-registry-app.test.js create mode 100644 packages/registry/__tests__/addon-registry.test.js create mode 100644 packages/registry/__tests__/create-addons-loader.test.js create mode 100644 packages/registry/__tests__/fixtures/test-app/node_modules/@plone/slots/components/Logo/Logo.svg create mode 100644 packages/registry/__tests__/fixtures/test-app/node_modules/@plone/slots/index.js create mode 100644 packages/registry/__tests__/fixtures/test-app/node_modules/@plone/slots/package.json create mode 100644 packages/registry/__tests__/fixtures/test-app/node_modules/my-addon/customizations/@plone/slots/components/Logo/Logo.svg create mode 100644 packages/registry/__tests__/fixtures/test-app/node_modules/my-addon/index.js create mode 100644 packages/registry/__tests__/fixtures/test-app/node_modules/my-addon/package.json create mode 100644 packages/registry/__tests__/fixtures/test-app/package.json create mode 100644 packages/registry/__tests__/fixtures/test-app/registry.config.js create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/addons/my-volto-config-addon/package.json rename packages/registry/{pnpm-lock.yaml => __tests__/fixtures/test-volto-project/addons/my-volto-config-addon/src/testaddon.js} (100%) create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/addons/non-volto-addon-lib/index.js create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/addons/non-volto-addon-lib/package.json create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/addons/test-addon/package.json create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/addons/test-addon/src/custom-addons/test-released-source-addon/index.js create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/addons/test-addon/src/custom-addons/volto/server.jsx create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/addons/test-addon/src/testaddon.js create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/addons/test-released-dummy/index.js create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/addons/test-released-dummy/package.json create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/jsconfig.json create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/node_modules/@plone/volto/src/LanguageSwitcher.jsx create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/node_modules/@plone/volto/src/TSComponent.tsx create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/node_modules/@plone/volto/src/client.js create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/node_modules/@plone/volto/src/routes.jsx create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/node_modules/@plone/volto/src/server.jsx create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/node_modules/my-volto-config-addon-via-env-var/index.js create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/node_modules/my-volto-config-addon-via-env-var/package.json create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-addon/index.js create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-addon/package.json create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-dummy/index.js create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-dummy/package.json create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/package.json create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/razzle.extend.js create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/src/customizations/@root/marker.js create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/src/customizations/LanguageSwitcher.js create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/src/customizations/TSComponent.jsx create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/src/customizations/client.js create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/src/customizations/routes.tsx create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/src/index.js create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-unmentioned/index.js create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-unmentioned/package.json create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-via-addons-env-var/index.js create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-via-addons-env-var/package.json create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/package.json create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/packages/test-local-packages-via-addons-env-var/package.json create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/packages/test-local-packages-via-addons-env-var/src/index.js create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/src/custom-addons/test-addon/testaddon.js create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/src/custom-addons/volto/client.js create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/src/customizations/LanguageSwitcher.js create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/src/customizations/TSComponent.jsx create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/src/customizations/client.js create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/src/customizations/routes.tsx create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/src/customizations/server.jsx create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/src/marker.js create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/volto.config.envvar.js create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/volto.config.js create mode 100644 packages/registry/__tests__/fixtures/volto-addon1.js create mode 100644 packages/registry/__tests__/fixtures/volto-addon2.js create mode 100644 packages/registry/__tests__/fixtures/volto-addon3.js create mode 100644 packages/registry/docs/_static/Plone_logo_square.png create mode 100644 packages/registry/docs/_static/favicon.ico create mode 100644 packages/registry/docs/_static/logo.svg create mode 100644 packages/registry/docs/_static/print.css create mode 100644 packages/registry/docs/conceptual-guides/add-on-registry.md create mode 100644 packages/registry/docs/conceptual-guides/component-registry.md create mode 100644 packages/registry/docs/conceptual-guides/configuration-registry.md create mode 100644 packages/registry/docs/conceptual-guides/utility-registry.md create mode 100644 packages/registry/docs/conf.py create mode 100644 packages/registry/docs/how-to-guides/access-registry.md create mode 100644 packages/registry/docs/how-to-guides/instantiate-registry.md create mode 100644 packages/registry/docs/how-to-guides/register-an-add-on.md create mode 100644 packages/registry/docs/how-to-guides/register-and-retrieve-components.md create mode 100644 packages/registry/docs/how-to-guides/register-and-retrieve-utilities.md create mode 100644 packages/registry/docs/how-to-guides/shadow-a-component.md create mode 100644 packages/registry/docs/index.md create mode 100644 packages/registry/docs/robots.txt create mode 100644 packages/registry/news/6399.breaking create mode 100644 packages/registry/news/6399.feature rename packages/registry/src/{addon-registry.js => addon-registry/addon-registry.ts} (65%) rename packages/registry/src/{create-addons-loader.js => addon-registry/create-addons-loader.ts} (66%) rename packages/registry/src/{create-theme-addons-loader.js => addon-registry/create-theme-loader.ts} (50%) create mode 100644 packages/registry/tsconfig.node.json create mode 100644 packages/registry/vite-plugin.d.ts create mode 100644 packages/registry/vite-plugin.js create mode 100644 packages/scripts/news/6399.feature create mode 100644 packages/volto/news/6399.internal create mode 100644 patches/jest-resolve@26.6.2.patch diff --git a/.eslintignore b/.eslintignore index 7df5c928c1..77fb2df91b 100644 --- a/.eslintignore +++ b/.eslintignore @@ -4,3 +4,5 @@ packages/volto packages/volto-guillotina !.* dist +packages/registry/lib +packages/registry/docs diff --git a/.github/workflows/acceptance.yml b/.github/workflows/acceptance.yml index a52a7502a3..82480849c7 100644 --- a/.github/workflows/acceptance.yml +++ b/.github/workflows/acceptance.yml @@ -521,6 +521,9 @@ jobs: - name: Install yalc run: npm -g install yalc + - name: Build dependencies + run: make build-deps + - name: Install a yalc'ed version of the current Volto in the project - publish run: | yalc publish packages/types diff --git a/.github/workflows/docs-rtd-pr-preview.yml b/.github/workflows/docs-rtd-pr-preview.yml index 83d7e72494..a123d8ef75 100644 --- a/.github/workflows/docs-rtd-pr-preview.yml +++ b/.github/workflows/docs-rtd-pr-preview.yml @@ -10,6 +10,7 @@ on: - "docs/source/**" - .readthedocs.yaml - requirements-docs.txt + - "packages/registry/docs/**" permissions: pull-requests: write diff --git a/.github/workflows/readme-link-check.yml b/.github/workflows/readme-link-check.yml index 7f53b65824..42c96e1455 100644 --- a/.github/workflows/readme-link-check.yml +++ b/.github/workflows/readme-link-check.yml @@ -20,4 +20,4 @@ jobs: - name: Check links in README.md with awesome_bot run: | gem install awesome_bot - awesome_bot --request-delay 1 --allow-dupe --white-list http://localhost:8080/Plone,http://localhost:3000,https://github.com/kitconcept/volto-blocks-grid.git,https://my-server-DNS-name.tld/api --files PACKAGES.md,README.md,packages/blocks/README.md,packages/client/README.md,packages/components/README.md,packages/generator-volto/README.md,packages/registry/README.md,packages/scripts/README.md,packages/tsconfig/README.md,packages/types/README.md,packages/volto-slate/README.md,apps/nextjs/README.md,apps/remix/README.md,apps/vite-ssr/README.md + awesome_bot --request-delay 1 --allow-dupe --white-list http://localhost:8080/Plone,http://localhost:8080,http://localhost:3000,https://github.com/kitconcept/volto-blocks-grid.git,https://my-server-DNS-name.tld/api --files PACKAGES.md,README.md,packages/blocks/README.md,packages/client/README.md,packages/components/README.md,packages/generator-volto/README.md,packages/registry/README.md,packages/scripts/README.md,packages/tsconfig/README.md,packages/types/README.md,packages/volto-slate/README.md,apps/nextjs/README.md,apps/remix/README.md,apps/vite-ssr/README.md diff --git a/.prettierignore b/.prettierignore index cf39cfcd94..1749ca9b36 100644 --- a/.prettierignore +++ b/.prettierignore @@ -5,6 +5,7 @@ styles/rules/* node_modules packages/volto/types/* +packages/registry/docs/* storybook-static apps/vite-ssr/src/routeTree.gen.ts apps/vite/src/routeTree.gen.ts diff --git a/apps/remix/tsconfig.json b/apps/remix/tsconfig.json index 9d87dd378f..42f049fa4a 100644 --- a/apps/remix/tsconfig.json +++ b/apps/remix/tsconfig.json @@ -25,8 +25,6 @@ "paths": { "~/*": ["./app/*"] }, - - // Vite takes care of building everything, not tsc. "noEmit": true } } diff --git a/apps/remix/vite.config.ts b/apps/remix/vite.config.ts index 1a43ce37db..03bfa30a99 100644 --- a/apps/remix/vite.config.ts +++ b/apps/remix/vite.config.ts @@ -1,6 +1,7 @@ import { vitePlugin as remix } from '@remix-run/dev'; import { defineConfig } from 'vite'; import tsconfigPaths from 'vite-tsconfig-paths'; +import { PloneRegistryVitePlugin } from '@plone/registry/vite-plugin'; export default defineConfig({ plugins: [ @@ -12,6 +13,7 @@ export default defineConfig({ }, }), tsconfigPaths(), + PloneRegistryVitePlugin(), ], server: { port: 3000, diff --git a/docs/source/upgrade-guide/index.md b/docs/source/upgrade-guide/index.md index 60de994f58..b9b67fcf4d 100644 --- a/docs/source/upgrade-guide/index.md +++ b/docs/source/upgrade-guide/index.md @@ -522,6 +522,63 @@ The `react/jsx-key` rule has been enabled in ESlint for catching missing `key` i You might catch some violations in your project or add-on code after running ESlint. Adding the missing `key` property whenever the violation is reported will fix it. +### `@plone/registry` moved to ESM + +The `@plone/registry` package has been moved to ESM. +The add-on registry scripts have also been refactored to TypeScript. +For maximum compatibility with CommonJS builds, the default exports have been moved to named exports. +The modules affected are now built, and the import paths have changed, too. +These changes force some import path changes that you should patch in your Plone project or add-on boilerplates. + +```{note} +As always, when something changes in the boilerplate, you may regenerate one from Cookieplone and move your code into it, instead of fiddling with it. +``` + +For example, in your project's {file}`.eslintrc.js`: + +```diff + const fs = require('fs'); + const projectRootPath = __dirname; +-const AddonConfigurationRegistry = require('@plone/registry/src/addon-registry'); ++const { AddonRegistry } = require('@plone/registry/addon-registry'); + + let voltoPath = './node_modules/@plone/volto'; + +@@ -17,15 +17,15 @@ if (configFile) { + voltoPath = `./${jsConfig.baseUrl}/${pathsConfig['@plone/volto'][0]}`; + } + +-const reg = new AddonConfigurationRegistry(__dirname); ++const { registry } = AddonRegistry.init(__dirname); + + // Extends ESlint configuration for adding the aliases to `src` directories in Volto addons +-const addonAliases = Object.keys(reg.packages).map((o) => [ ++const addonAliases = Object.keys(registry.packages).map((o) => [ + o, +- reg.packages[o].modulePath, ++ registry.packages[o].modulePath, + ]); + +-const addonExtenders = reg.getEslintExtenders().map((m) => require(m)); ++const addonExtenders = registry.getEslintExtenders().map((m) => require(m)); +``` + +Also in the Storybook configuration {file}`.storybook/main.js`. + +```diff +- const AddonConfigurationRegistry = require('@plone/registry/src/addon-registry'); ++ const { AddonRegistry } = require('@plone/registry/addon-registry'); + +- const registry = new AddonConfigurationRegistry(projectRootPath); ++ const { registry } = AddonRegistry.init(projectRootPath); +``` + +```{versionadded} Volto 18.0.0-alpha.47 +``` + +```{versionadded} @plone/registry 3.0.0-alpha.0 +``` + ### Deprecation notices for Volto 18 #### `@plone/generator-volto` diff --git a/package.json b/package.json index 0b7d97e4de..603b737d9a 100644 --- a/package.json +++ b/package.json @@ -44,6 +44,9 @@ "overrides": { "@pmmmwh/react-refresh-webpack-plugin": "0.5.11", "react-refresh": "0.14.0" + }, + "patchedDependencies": { + "jest-resolve@26.6.2": "patches/jest-resolve@26.6.2.patch" } } } diff --git a/packages/generator-volto/generators/app/templates/.eslintrc.js b/packages/generator-volto/generators/app/templates/.eslintrc.js index 6148e2e62f..a5aaf045b1 100644 --- a/packages/generator-volto/generators/app/templates/.eslintrc.js +++ b/packages/generator-volto/generators/app/templates/.eslintrc.js @@ -1,6 +1,6 @@ const fs = require('fs'); const projectRootPath = __dirname; -const AddonConfigurationRegistry = require('@plone/registry/src/addon-registry'); +const { AddonRegistry } = require('@plone/registry/addon-registry'); let voltoPath = './node_modules/@plone/volto'; @@ -17,15 +17,15 @@ if (configFile) { voltoPath = `./${jsConfig.baseUrl}/${pathsConfig['@plone/volto'][0]}`; } -const reg = new AddonConfigurationRegistry(__dirname); +const { registry } = AddonRegistry.init(__dirname); // Extends ESlint configuration for adding the aliases to `src` directories in Volto addons -const addonAliases = Object.keys(reg.packages).map((o) => [ +const addonAliases = Object.keys(registry.packages).map((o) => [ o, - reg.packages[o].modulePath, + registry.packages[o].modulePath, ]); -const addonExtenders = reg.getEslintExtenders().map((m) => require(m)); +const addonExtenders = registry.getEslintExtenders().map((m) => require(m)); const defaultConfig = { extends: `${voltoPath}/.eslintrc`, diff --git a/packages/generator-volto/generators/app/templates/.storybook/main.js b/packages/generator-volto/generators/app/templates/.storybook/main.js index aa094cb6d7..da6c799e56 100644 --- a/packages/generator-volto/generators/app/templates/.storybook/main.js +++ b/packages/generator-volto/generators/app/templates/.storybook/main.js @@ -104,9 +104,9 @@ module.exports = { [], defaultRazzleOptions, ); - const AddonConfigurationRegistry = require('@plone/registry/src/addon-registry'); + const { AddonRegistry } = require('@plone/registry/addon-registry'); - const registry = new AddonConfigurationRegistry(projectRootPath); + const { registry } = AddonRegistry.init(projectRootPath); config = lessPlugin({ registry }).modifyWebpackConfig({ env: { target: 'web', dev: 'dev' }, diff --git a/packages/generator-volto/news/6399.breaking b/packages/generator-volto/news/6399.breaking new file mode 100644 index 0000000000..2b0695d18f --- /dev/null +++ b/packages/generator-volto/news/6399.breaking @@ -0,0 +1,2 @@ +Breaking changes in `.eslintrc.js` and `.storybook/main.js` because of #6399. @sneridagh +Please see the [Upgrade Guide](https://6.docs.plone.org/volto/upgrade-guide/index.html). diff --git a/packages/registry/.eslintrc.js b/packages/registry/.eslintrc.cjs similarity index 88% rename from packages/registry/.eslintrc.js rename to packages/registry/.eslintrc.cjs index b60637a973..8614b4cd25 100644 --- a/packages/registry/.eslintrc.js +++ b/packages/registry/.eslintrc.cjs @@ -16,6 +16,8 @@ module.exports = { // Base config extends: ['eslint:recommended'], + ignorePatterns: ['docs/_static/searchtools.js'], + overrides: [ // React { @@ -61,7 +63,11 @@ module.exports = { // Node { - files: ['.eslintrc.js', 'src/*.js'], + files: [ + '.eslintrc.cjs', + 'src/addon-registry/**/*.{js,ts}', + '__tests__/**/*.{js,ts}', + ], env: { node: true, es6: true, diff --git a/packages/registry/.gitignore b/packages/registry/.gitignore index d32327c9cd..2c29928dd0 100644 --- a/packages/registry/.gitignore +++ b/packages/registry/.gitignore @@ -1,6 +1,7 @@ .parcel-cache/ dist +/bin +/lib +/include -# yarn 3 -.pnp.* -.yarn/* +docs/_build/ diff --git a/packages/registry/.readthedocs.yaml b/packages/registry/.readthedocs.yaml new file mode 100644 index 0000000000..b1f7970727 --- /dev/null +++ b/packages/registry/.readthedocs.yaml @@ -0,0 +1,34 @@ +# .readthedocs.yaml +# Read the Docs configuration file +# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details + +# Required +version: 2 + +# Set the OS, Python version and other tools you might need +build: + os: ubuntu-22.04 + tools: + python: "3.12" + # You can also specify other tool versions: + # nodejs: "19" + # rust: "1.64" + # golang: "1.19" + commands: + - cd ./packages/registry && make docs-rtd-registry + +# Build documentation in the "docs/" directory with Sphinx +#sphinx: +# configuration: packages/registry/docs/conf.py + +# Optionally build your docs in additional formats such as PDF and ePub +# formats: +# - pdf +# - epub + +# Optional but recommended, declare the Python requirements required +# to build your documentation +# See https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html +#python: +# install: +# - requirements: requirements-docs.txt diff --git a/packages/registry/Makefile b/packages/registry/Makefile new file mode 100644 index 0000000000..d0e9c89f6d --- /dev/null +++ b/packages/registry/Makefile @@ -0,0 +1,90 @@ +### Defensive settings for make: +# https://tech.davis-hansson.com/p/make/ +SHELL:=bash +.ONESHELL: +.SHELLFLAGS:=-eu -o pipefail -c +.SILENT: +.DELETE_ON_ERROR: +MAKEFLAGS+=--warn-undefined-variables +MAKEFLAGS+=--no-builtin-rules + +# Sphinx variables +# You can set these variables from the command line. +SPHINXOPTS ?= +VALEOPTS ?= +# Internal variables. +SPHINXBUILD = "$(realpath bin/sphinx-build)" +SPHINXAUTOBUILD = "$(realpath bin/sphinx-autobuild)" +DOCS_DIR = ./docs/ +BUILDDIR = ./_build/ +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(SPHINXOPTS) . +VALEFILES := $(shell find $(DOCS_DIR) -type f -name "*.md" -print) + +# We like colors +# From: https://coderwall.com/p/izxssa/colored-makefile-for-golang-projects +RED=`tput setaf 1` +GREEN=`tput setaf 2` +RESET=`tput sgr0` +YELLOW=`tput setaf 3` + +## Docs + +bin/python: ## Create a Python virtual environment with the latest pip, and install documentation requirements + python3 -m venv . || virtualenv --clear --python=python3 . + bin/python -m pip install --upgrade pip + @echo "Python environment created." + bin/pip install -r ../../requirements-docs.txt + @echo "Requirements installed." + +.PHONY: docs-clean +docs-clean: ## Clean current and legacy docs build directories, and Python virtual environment + rm -rf bin include lib + rm -rf docs/_build + cd $(DOCS_DIR) && rm -rf $(BUILDDIR)/ + +.PHONY: docs-html +docs-html: bin/python ## Build html + cd $(DOCS_DIR) && $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + +.PHONY: docs-livehtml +docs-livehtml: bin/python ## Rebuild Sphinx documentation on changes, with live-reload in the browser + cd "$(DOCS_DIR)" && ${SPHINXAUTOBUILD} \ + --ignore "*.swp" \ + -b html . "$(BUILDDIR)/html" $(SPHINXOPTS) + +.PHONY: docs-linkcheck +docs-linkcheck: bin/python ## Run linkcheck + cd $(DOCS_DIR) && $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in $(BUILDDIR)/linkcheck/ ." + +.PHONY: docs-linkcheckbroken +docs-linkcheckbroken: bin/python ## Run linkcheck and show only broken links + cd $(DOCS_DIR) && $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck | GREP_COLORS='0;31' grep -wi "broken\|redirect" --color=always | GREP_COLORS='0;31' grep -vi "https://github.com/plone/volto/issues/" --color=always && if test $$? -eq 0; then exit 1; fi || test $$? -ne 0 + +.PHONY: docs-vale +docs-vale: bin/python ## Install (once) and run Vale style, grammar, and spell checks + bin/vale sync + bin/vale --no-wrap $(VALEOPTS) $(VALEFILES) + @echo + @echo "Vale is finished; look for any errors in the above output." + +.PHONY: docs-rtd-pr-preview +docs-rtd-pr-preview: ## Build previews of pull requests that have documentation changes on Read the Docs via CI + pip install -r requirements-docs.txt + cd $(DOCS_DIR) && sphinx-build -b html $(ALLSPHINXOPTS) ${READTHEDOCS_OUTPUT}/html/ + +.PHONY: docs-rtd-registry +docs-rtd-registry: ## Build Plone Registry docs on RTD + pip install -r ../../requirements-docs.txt && cd $(DOCS_DIR) && sphinx-build -b html $(ALLSPHINXOPTS) ${READTHEDOCS_OUTPUT}/html/ + +## Build + +.PHONY: rename-to-cjs +rename-to-cjs: ## Rename the built files js -> cjs + mv dist/cjs/addon-registry.js dist/cjs/addon-registry.cjs + mv dist/cjs/create-addons-loader.js dist/cjs/create-addons-loader.cjs + mv dist/cjs/create-theme-loader.js dist/cjs/create-theme-loader.cjs diff --git a/packages/registry/README.md b/packages/registry/README.md index 552133573c..0c4ae8865b 100644 --- a/packages/registry/README.md +++ b/packages/registry/README.md @@ -10,198 +10,10 @@ That means you have to build something that has very specific requirements, beha Sometimes you need to build something generic that is pluggable and extensible. In the JavaScript and TypeScript ecosystem, this is often quite complex, and the existing frameworks do not provide the means to do this. -## Add-on registry +`@plone/registry` provides tools to facilitate pluggability for your app. -An add-on registry is a facility that allows an app, which was built on an existing framework, to itself be extensible and pluggable. +## Documentation -The add-on registry is a store where you can register a number of add-ons that your app consumes. +You can find the detailed documentation of this package by visiting the following link. -Add-on packages are just CommonJS packages. -The only requirement is that they point the `main` key of their `package.json` to a module that exports as a default function, which acts as a configuration loader. - -An add-on can be published in an npm registry, just as any other package. -However, add-ons are meant to not be transpiled. -They should be released as source packages. - -## Register an add-on - -You should declare your add-on in your project. -This is done in your app's `package.json`'s `addons` key: - -```json -{ - "name": "my-app-project", - "addons": [ - "acme-volto-foo-addon", - "@plone/some-addon", - "collective-another-volto-addon" - ] -} -``` - -The `addons` key ensures the add-on's main default export function is executed, being passed the configuration registry. -In that function, the add-on can customize the registry. -The function needs to return the `config` object (the configuration registry), so that it's passed further along to the other add-ons. - -The add-ons are registered in the order they are found in the `addons` key. -The last add-on takes precedence over the others. -This means that if you configure something in `acme-volto-foo-addon`, then the same thing later in `collective-another-volto-addon`, the latter configured thing will win and its configuration will be applied. - -The default export of any add-on main `index.js` file should be a function with the signature `config => config`. -That is, it should take the configuration registry object and return it, possibly mutated or changed. - -## Configuration registry - -The configuration registry supplements the add-on registry. - -It is a facility that stores app configuration to be shared in the app. - -Let's say that your app is the user interface of a content management system (CMS). -This CMS uses blocks as its main fundamental unit of content. -The pages that the CMS builds are made up of these blocks. -The CMS has some basic available blocks, but it's a requirement that integrators are able to register more blocks in a pluggable way. - -This app will use the add-on registry to extend the basic CMS capabilities, so an external add-on can supplement their own add-ons to the basic CMS ones. - -Let's assume we've defined a key in the registry `config.blocks.blocksConfig`, and defined a way to register the available blocks in the CMS as the keys in that object in the configuration registry: - -```js - config.blocks.blocksConfig.faq_viewer = { - id: 'faq_viewer', - title: 'FAQ Viewer', - edit: FAQBlockEdit, - view: FAQBlockView, - icon: chartIcon, - group: 'common', - restricted: false, - mostUsed: true, - sidebarTab: 1, - }; -``` - -The configuration registry will have other keys already set by default, which will compose the initial set of basic blocks used by the CMS. -Then the CMS will properly populate the available blocks in the user interface. - -The add-on is meant to extend the initial configuration. -From the default export function of our add-on, we should provide the configuration of the new block: - -```ts -export default function applyConfig(config: ConfigData) { - config.blocks.blocksConfig.faq_viewer = { - id: 'faq_viewer', - title: 'FAQ Viewer', - edit: FAQBlockEdit, - view: FAQBlockView, - icon: chartIcon, - group: 'common', - restricted: false, - mostUsed: true, - sidebarTab: 1, - }; - - return config; -} -``` - -Once the app starts, the add-on registry will execute, in order, all the registered add-ons' default export functions, configuring the new block. -The add-on will then become available to the CMS when it asks the configuration registry for it. - -## Accessing the configuration registry - -The configuration registry can be accessed by: - -```ts -import config from '@plone/registry' - -const blocksConfig = config.blocks.blocksConfig -``` - -## Component registry - -The configuration registry also stores a components registry in itself. -The components registry is a mapping of name to component. -You can look up a name, and receive a component that you can reference in your code. -This provides an alternative, and more convenient, way to customize components. -You can override programmatically such registrations from your add-on or projects because it's stored in the configuration registry. -You can customize a component without using shadowing at all, if the code that uses the component retrieves from the component registry, rather then import it directly. -You can even have modifiers to the component registrations through dependencies. -Thus you can adapt the call, given an array of such dependencies. - -## Register components by name using `config.registerComponent` - -You can register components by name, typically from an add-on or project configuration: - -```js -import MyToolbarComponent from './MyToolbarComponent' - -config.registerComponent({ - name: 'Toolbar', - component: MyToolbarComponent, -}); -``` - -## Retrieve a component from the component registry - -You can programmatically retrieve a component from the registry using `config.getComponent`: - -```js -const Toolbar = config.getComponent('Toolbar').component -``` - -Or you can retrieve a component by using the convenience component `Component`, if you want to use it in JSX code directly. - -```jsx -import Component from '@plone/volto/components/theme/Component/Component'; - - -``` - -Note that you can pass `props` down to the retrieved component. - -## Adapt the component using the `dependencies` array - -You can register components, then retrieve them, given a list of modifiers using `dependencies`. - -```js -import MyTeaserNewsItemComponent from './MyTeaserNewsItemComponent' - -config.registerComponent({ - name: 'Teaser', - component: MyTeaserNewsItemComponent, - dependencies: 'News Item', - }); -``` - -And then retrieve the component: - -```js -config.getComponent({ - name: 'Teaser', - dependencies: ['News Item'], - }).component -``` - -You can have both, either with or without dependencies: - -```js -import MyTeaserDefaultComponent from './MyTeaserDefaultComponent' -import MyTeaserNewsItemComponent from './MyTeaserNewsItemComponent' - -config.registerComponent({ - name: 'Teaser', - component: MyTeaserDefaultComponent, - }); - -config.registerComponent({ - name: 'Teaser', - component: MyTeaserNewsItemComponent, - dependencies: 'News Item', - }); -``` - -Then retrieve them both, depending on the use case. -In the example, given a content type value coming from the `content` prop, you would retrieve them as shown: - -```jsx - -``` +https://plone-registry.readthedocs.io diff --git a/packages/registry/__tests__/addon-registry-app.test.js b/packages/registry/__tests__/addon-registry-app.test.js new file mode 100644 index 0000000000..7c3d7d7e04 --- /dev/null +++ b/packages/registry/__tests__/addon-registry-app.test.js @@ -0,0 +1,18 @@ +import path from 'path'; +import { AddonRegistry } from '../src/addon-registry/addon-registry'; +import { describe, it, expect } from 'vitest'; + +describe('AddonRegistry - get()', () => { + it('Basic information', () => { + const base = path.join(import.meta.dirname, 'fixtures', 'test-app'); + const { addons, shadowAliases, theme } = AddonRegistry.init(base); + expect(addons).toStrictEqual(['@plone/slots', 'my-addon']); + expect(shadowAliases).toStrictEqual([ + { + find: '@plone/slots/components/Logo/Logo.svg', + replacement: `${base}/node_modules/my-addon/customizations/@plone/slots/components/Logo/Logo.svg`, + }, + ]); + expect(theme).toStrictEqual(undefined); + }); +}); diff --git a/packages/registry/__tests__/addon-registry.test.js b/packages/registry/__tests__/addon-registry.test.js new file mode 100644 index 0000000000..cc21df88fa --- /dev/null +++ b/packages/registry/__tests__/addon-registry.test.js @@ -0,0 +1,366 @@ +import path from 'path'; +import { + AddonRegistry, + buildDependencyGraph, + getAddonsLoaderChain, +} from '../src/addon-registry/addon-registry'; +import { vi, describe, it, expect, test, beforeEach, afterEach } from 'vitest'; + +vi.mock( + 'fixtures/test-volto-project/node_modules/@plone/volto/package.json', + () => ({ + // TODO: mock the packages folder inside the mocked @plone/volto to work with resolves + coreAddons: {}, + }), + { virtual: true }, +); + +describe('AddonRegistry - get()', () => { + it('Basic information', () => { + const base = path.join( + import.meta.dirname, + 'fixtures', + 'test-volto-project', + ); + const { addons, shadowAliases, theme } = AddonRegistry.init(base); + expect(addons).toStrictEqual([ + 'test-released-unmentioned:extra1,extra2', + 'test-released-dummy', + 'test-addon', + 'test-released-addon:extra', + 'test-released-source-addon', + 'my-volto-config-addon', + ]); + expect(shadowAliases).toStrictEqual([ + { + find: 'test-released-source-addon/index', + replacement: `${base}/addons/test-addon/src/custom-addons/test-released-source-addon/index.js`, + }, + { + find: '@plone/volto/server', + replacement: `${base}/addons/test-addon/src/custom-addons/volto/server.jsx`, + }, + { + find: '@root/marker', + replacement: `${base}/node_modules/test-released-source-addon/src/customizations/@root/marker.js`, + }, + { + find: '@plone/volto/routes', + replacement: `${base}/node_modules/test-released-source-addon/src/customizations/routes.tsx`, + }, + { + find: '@plone/volto/client', + replacement: `${base}/node_modules/test-released-source-addon/src/customizations/client.js`, + }, + { + find: '@plone/volto/TSComponent', + replacement: `${base}/node_modules/test-released-source-addon/src/customizations/TSComponent.jsx`, + }, + { + find: '@plone/volto/LanguageSwitcher', + replacement: `${base}/node_modules/test-released-source-addon/src/customizations/LanguageSwitcher.js`, + }, + ]); + expect(theme).toStrictEqual(undefined); + }); +}); + +describe('AddonRegistry - Project', () => { + it('works in a mock project directory', () => { + const base = path.join( + import.meta.dirname, + 'fixtures', + 'test-volto-project', + ); + const { registry } = AddonRegistry.init(base); + + const voltoPath = `${base}/node_modules/@plone/volto`; + + expect(registry.projectRootPath).toStrictEqual(base); + expect(registry.voltoPath).toStrictEqual(voltoPath); + + expect(registry.addonNames).toStrictEqual([ + 'test-addon', + 'test-released-addon', + 'test-released-source-addon', + 'my-volto-config-addon', + 'test-released-dummy', + 'test-released-unmentioned', + ]); + + expect(registry.packages).toEqual({ + 'test-addon': { + isPublishedPackage: false, + modulePath: `${base}/addons/test-addon/src`, + name: 'test-addon', + packageJson: `${base}/addons/test-addon/package.json`, + addons: ['test-released-dummy'], + isRegisteredAddon: true, + version: '0.0.0', + }, + 'test-released-addon': { + basePath: `${base}/node_modules/test-released-addon`, + isPublishedPackage: true, + modulePath: `${base}/node_modules/test-released-addon`, + name: 'test-released-addon', + packageJson: `${base}/node_modules/test-released-addon/package.json`, + addons: ['test-released-unmentioned:extra1,extra2'], + isRegisteredAddon: true, + tsConfigPaths: null, + version: '0.0.0', + }, + 'test-released-source-addon': { + basePath: `${base}/node_modules/test-released-source-addon`, + isPublishedPackage: true, + modulePath: `${base}/node_modules/test-released-source-addon/src`, + name: 'test-released-source-addon', + packageJson: `${base}/node_modules/test-released-source-addon/package.json`, + razzleExtender: `${base}/node_modules/test-released-source-addon/razzle.extend.js`, + addons: [], + isRegisteredAddon: true, + tsConfigPaths: null, + version: '0.0.0', + }, + 'test-released-unmentioned': { + addons: [], + basePath: `${base}/node_modules/test-released-unmentioned`, + isPublishedPackage: true, + modulePath: `${base}/node_modules/test-released-unmentioned`, + name: 'test-released-unmentioned', + packageJson: `${base}/node_modules/test-released-unmentioned/package.json`, + isRegisteredAddon: true, + tsConfigPaths: null, + version: '0.0.0', + }, + 'my-volto-config-addon': { + addons: ['test-released-dummy'], + isPublishedPackage: false, + modulePath: `${base}/addons/my-volto-config-addon/src`, + name: 'my-volto-config-addon', + packageJson: `${base}/addons/my-volto-config-addon/package.json`, + isRegisteredAddon: true, + version: '0.0.0', + }, + 'test-released-dummy': { + addons: ['test-released-unmentioned'], + isPublishedPackage: false, + modulePath: `${base}/addons/test-released-dummy`, + name: 'test-released-dummy', + packageJson: `${base}/addons/test-released-dummy/package.json`, + isRegisteredAddon: true, + version: '0.0.0', + }, + }); + }); + + it('provides aliases for addons', () => { + const base = path.join( + import.meta.dirname, + 'fixtures', + 'test-volto-project', + ); + const { registry } = AddonRegistry.init(base); + expect(registry.getResolveAliases()).toStrictEqual({ + 'my-volto-config-addon': `${base}/addons/my-volto-config-addon/src`, + 'test-addon': `${base}/addons/test-addon/src`, + 'test-released-addon': `${base}/node_modules/test-released-addon`, + 'test-released-dummy': `${base}/addons/test-released-dummy`, + 'test-released-source-addon': `${base}/node_modules/test-released-source-addon/src`, + 'test-released-unmentioned': `${base}/node_modules/test-released-unmentioned`, + }); + }); + + it('provides addon extenders', () => { + const base = path.join( + import.meta.dirname, + 'fixtures', + 'test-volto-project', + ); + const { registry } = AddonRegistry.init(base); + expect(registry.getAddonExtenders().length).toBe(1); + }); + + it('provides a list of addon records ordered by initial package declaration', () => { + const base = path.join( + import.meta.dirname, + 'fixtures', + 'test-volto-project', + ); + const { registry } = AddonRegistry.init(base); + const addons = registry.getAddons(); + expect(addons.map((a) => a.name)).toStrictEqual([ + 'test-released-unmentioned', + 'test-released-dummy', + 'test-addon', + 'test-released-addon', + 'test-released-source-addon', + 'my-volto-config-addon', + ]); + }); + + it('provides customization paths declared in a Volto project', () => { + const base = path.join( + import.meta.dirname, + 'fixtures', + 'test-volto-project', + ); + const { registry } = AddonRegistry.init(base); + expect(registry.getProjectCustomizationPaths()).toStrictEqual({ + '@plone/volto/LanguageSwitcher': `${base}/src/customizations/LanguageSwitcher.js`, + '@plone/volto/TSComponent': `${base}/src/customizations/TSComponent.jsx`, + '@plone/volto/client': `${base}/src/customizations/client.js`, + '@plone/volto/routes': `${base}/src/customizations/routes.tsx`, + 'test-addon/testaddon': `${base}/src/custom-addons/test-addon/testaddon.js`, + '@plone/volto/server': `${base}/src/customizations/server.jsx`, + }); + }); + + it('provides customization paths declared in addons', () => { + const base = path.join( + import.meta.dirname, + 'fixtures', + 'test-volto-project', + ); + const { registry } = AddonRegistry.init(base); + expect(registry.getAddonCustomizationPaths()).toStrictEqual({ + '@plone/volto/LanguageSwitcher': `${base}/node_modules/test-released-source-addon/src/customizations/LanguageSwitcher.js`, + '@plone/volto/TSComponent': `${base}/node_modules/test-released-source-addon/src/customizations/TSComponent.jsx`, + '@plone/volto/client': `${base}/node_modules/test-released-source-addon/src/customizations/client.js`, + '@plone/volto/routes': `${base}/node_modules/test-released-source-addon/src/customizations/routes.tsx`, + '@plone/volto/server': `${base}/addons/test-addon/src/custom-addons/volto/server.jsx`, + '@root/marker': `${base}/node_modules/test-released-source-addon/src/customizations/@root/marker.js`, + 'test-released-source-addon/index': `${base}/addons/test-addon/src/custom-addons/test-released-source-addon/index.js`, + }); + }); +}); + +describe('Addon chain loading dependencies', () => { + const depTree = { + add0: ['add1'], + add1: ['add2:e0', 'add4'], + add2: ['add3:e6', 'add5', 'add6'], + add3: ['add0'], + add4: ['add2:e1,e3'], + add5: ['add6'], + }; + const extractor = (name) => depTree[name] || []; + + test('no addons', () => { + const graph = buildDependencyGraph([], extractor); + const deps = getAddonsLoaderChain(graph); + expect(deps).toEqual([]); + }); + + test('one addon', () => { + const graph = buildDependencyGraph(['volto-addon1'], extractor); + const deps = getAddonsLoaderChain(graph); + expect(deps).toEqual(['volto-addon1']); + }); + + test('two addons', () => { + const graph = buildDependencyGraph( + ['volto-addon1', 'volto-addon2'], + extractor, + ); + const deps = getAddonsLoaderChain(graph); + expect(deps).toEqual(['volto-addon1', 'volto-addon2']); + }); + + test('one addon with dependency', () => { + const graph = buildDependencyGraph(['add5'], extractor); + const deps = getAddonsLoaderChain(graph); + expect(deps).toEqual(['add6', 'add5']); + }); + + test('one addon with circular dependencies', () => { + const graph = buildDependencyGraph(['add0'], extractor); + const deps = getAddonsLoaderChain(graph); + expect(deps).toEqual([ + 'add3:e6', + 'add6', + 'add5', + 'add2:e0,e1,e3', + 'add4', + 'add1', + 'add0', + ]); + }); +}); + +describe('Addon via env var - Released addon (same as dev add-on, when resolved via workspaces)', () => { + const originalEnv = process.env; + + beforeEach(() => { + vi.resetModules(); + process.env = { + ...originalEnv, + ADDONS: 'test-released-via-addons-env-var', + }; + }); + + afterEach(() => { + process.env = originalEnv; + }); + + it('addons can be specified on the fly using ADDONS env var - Released addon', () => { + const base = path.join( + import.meta.dirname, + 'fixtures', + 'test-volto-project', + ); + const { registry } = AddonRegistry.init(base); + expect( + Object.keys(registry.packages).includes( + 'test-released-via-addons-env-var', + ), + ).toBe(true); + }); +}); + +describe('Add-on via config file provided using an env var', () => { + const originalEnv = process.env; + const base = path.join(import.meta.dirname, 'fixtures', 'test-volto-project'); + + beforeEach(() => { + vi.resetModules(); + }); + + afterEach(() => { + process.env = originalEnv; + }); + + it('VOLTOCONFIG - provides a list of addon records ordered using an env var for providing the configuration file', () => { + process.env = { + ...originalEnv, + VOLTOCONFIG: `${base}/volto.config.envvar.js`, + }; + const { registry } = AddonRegistry.init(base); + const addons = registry.getAddons(); + expect(addons.map((a) => a.name)).toStrictEqual([ + 'test-released-unmentioned', + 'test-released-dummy', + 'test-addon', + 'test-released-addon', + 'test-released-source-addon', + 'my-volto-config-addon-via-env-var', + ]); + }); + + it('[REGISTRYCONFIG - provides a list of addon records ordered using an env var for providing the configuration file', () => { + process.env = { + ...originalEnv, + REGISTRYCONFIG: `${base}/volto.config.envvar.js`, + }; + + const { registry } = AddonRegistry.init(base); + const addons = registry.getAddons(); + expect(addons.map((a) => a.name)).toStrictEqual([ + 'test-released-unmentioned', + 'test-released-dummy', + 'test-addon', + 'test-released-addon', + 'test-released-source-addon', + 'my-volto-config-addon-via-env-var', + ]); + }); +}); diff --git a/packages/registry/__tests__/create-addons-loader.test.js b/packages/registry/__tests__/create-addons-loader.test.js new file mode 100644 index 0000000000..60b611ad67 --- /dev/null +++ b/packages/registry/__tests__/create-addons-loader.test.js @@ -0,0 +1,164 @@ +import { + getAddonsLoaderCode, + nameFromPackage, +} from '../src/addon-registry/create-addons-loader'; +import { describe, expect, test } from 'vitest'; + +describe('create-addons-loader code generation', () => { + test('no addon creates simple loader, default = no loadProjectConfig', () => { + const code = getAddonsLoaderCode([]); + expect(code).toBe(`/* +This file is autogenerated. Don't change it directly. +Instead, change the "addons" setting in your package.json file. +*/ + + +const addonsInfo = {}; +export { addonsInfo }; + +const safeWrapper = (func) => (config) => { + const res = func(config); + if (typeof res === 'undefined') { + throw new Error("Configuration function doesn't return config"); + } + return res; +} + +const projectConfigLoader = false; +const projectConfig = (config) => { + return projectConfigLoader && typeof projectConfigLoader.default === "function" ? projectConfigLoader.default(config) : config; +} + +const load = (config) => { + const addonLoaders = []; + if(!addonLoaders.every((el) => typeof el === "function")) { + throw new TypeError( + 'Each addon has to provide a function applying its configuration to the projects configuration.', + ); + } + return projectConfig(addonLoaders.reduce((acc, apply) => safeWrapper(apply)(acc), config)); +}; +export default load; +`); + }); + + test('no addon creates simple loader, loadProjectConfig set to true', () => { + const code = getAddonsLoaderCode([], {}, true); + expect(code).toBe(`/* +This file is autogenerated. Don't change it directly. +Instead, change the "addons" setting in your package.json file. +*/ + +const projectConfigLoader = require('@root/config'); + +const addonsInfo = {}; +export { addonsInfo }; + +const safeWrapper = (func) => (config) => { + const res = func(config); + if (typeof res === 'undefined') { + throw new Error("Configuration function doesn't return config"); + } + return res; +} + + +const projectConfig = (config) => { + return projectConfigLoader && typeof projectConfigLoader.default === "function" ? projectConfigLoader.default(config) : config; +} + +const load = (config) => { + const addonLoaders = []; + if(!addonLoaders.every((el) => typeof el === "function")) { + throw new TypeError( + 'Each addon has to provide a function applying its configuration to the projects configuration.', + ); + } + return projectConfig(addonLoaders.reduce((acc, apply) => safeWrapper(apply)(acc), config)); +}; +export default load; +`); + }); + + test('one addon creates loader', () => { + const code = getAddonsLoaderCode(['volto-addon1']); + expect(code.indexOf("import voltoAddon1 from 'volto-addon1';") > 0).toBe( + true, + ); + }); + + test('two addons create loaders', () => { + const code = getAddonsLoaderCode(['volto-addon1', 'volto-addon2']); + expect( + code.indexOf(` +import voltoAddon1 from 'volto-addon1'; +import voltoAddon2 from 'volto-addon2';`) > 0, + ).toBe(true); + }); + + test('one addons plus one extra creates loader', () => { + const code = getAddonsLoaderCode(['volto-addon1:loadExtra1']); + expect( + code.indexOf(` +import voltoAddon1, { loadExtra1 as loadExtra10 } from 'volto-addon1'; +`) > 0, + ).toBe(true); + }); + + test('one addons plus two extras creates loader', () => { + const code = getAddonsLoaderCode(['volto-addon1:loadExtra1,loadExtra2']); + expect( + code.indexOf(` +import voltoAddon1, { loadExtra1 as loadExtra10, loadExtra2 as loadExtra21 } from 'volto-addon1'; +`) > 0, + ).toBe(true); + }); + + test('two addons plus extras creates loader', () => { + const code = getAddonsLoaderCode([ + 'volto-addon1:loadExtra1,loadExtra2', + 'volto-addon2:loadExtra3,loadExtra4', + ]); + expect( + code.indexOf(` +import voltoAddon1, { loadExtra1 as loadExtra10, loadExtra2 as loadExtra21 } from 'volto-addon1'; +import voltoAddon2, { loadExtra3 as loadExtra32, loadExtra4 as loadExtra43 } from 'volto-addon2'; +`) > 0, + ).toBe(true); + }); +}); + +describe('create-addons-loader default name generation', () => { + const getName = nameFromPackage; + + test('passing a simple word returns a word', () => { + expect(getName('something')).toBe('something'); + }); + + test('passing a kebab-name returns a word', () => { + expect(getName('volto-something-else')).toBe('voltoSomethingElse'); + }); + + test('passing a simple relative path returns random string', () => { + const rand = getName('../../'); + expect(rand.length).toBe(10); + expect(new RegExp(/[abcdefghjk]+/).exec(rand)[0].length > 0).toBe(true); + }); + test('passing a tilda relative path with addon strips tilda', () => { + const name = getName('~/addons/volto-addon1'); + expect(name).toBe('addonsvoltoAddon1'); + }); + test('passing a namespace package strips @', () => { + const name = getName('@plone/volto-addon1'); + expect(name).toBe('plonevoltoAddon1'); + }); + test('passing a tilda relative path strips tilda', () => { + const name = getName('~/../'); + expect(name.length).toBe(10); + expect(new RegExp(/[abcdefghjk]+/).exec(name)[0].length > 0).toBe(true); + }); + test('passing a backspaced path strips backspace', () => { + const name = getName('c:\\nodeprojects'); + expect(name).toBe('cnodeprojects'); + }); +}); diff --git a/packages/registry/__tests__/fixtures/test-app/node_modules/@plone/slots/components/Logo/Logo.svg b/packages/registry/__tests__/fixtures/test-app/node_modules/@plone/slots/components/Logo/Logo.svg new file mode 100644 index 0000000000..1aa6adfdf3 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-app/node_modules/@plone/slots/components/Logo/Logo.svg @@ -0,0 +1 @@ +asdasd diff --git a/packages/registry/__tests__/fixtures/test-app/node_modules/@plone/slots/index.js b/packages/registry/__tests__/fixtures/test-app/node_modules/@plone/slots/index.js new file mode 100644 index 0000000000..8cb61d300a --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-app/node_modules/@plone/slots/index.js @@ -0,0 +1 @@ +export default (config) => config; diff --git a/packages/registry/__tests__/fixtures/test-app/node_modules/@plone/slots/package.json b/packages/registry/__tests__/fixtures/test-app/node_modules/@plone/slots/package.json new file mode 100644 index 0000000000..68a86c4d37 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-app/node_modules/@plone/slots/package.json @@ -0,0 +1,4 @@ +{ + "name": "@plone/slots", + "main": "index.js" +} diff --git a/packages/registry/__tests__/fixtures/test-app/node_modules/my-addon/customizations/@plone/slots/components/Logo/Logo.svg b/packages/registry/__tests__/fixtures/test-app/node_modules/my-addon/customizations/@plone/slots/components/Logo/Logo.svg new file mode 100644 index 0000000000..3e8fcacea6 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-app/node_modules/my-addon/customizations/@plone/slots/components/Logo/Logo.svg @@ -0,0 +1 @@ + diff --git a/packages/registry/__tests__/fixtures/test-app/node_modules/my-addon/index.js b/packages/registry/__tests__/fixtures/test-app/node_modules/my-addon/index.js new file mode 100644 index 0000000000..8cb61d300a --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-app/node_modules/my-addon/index.js @@ -0,0 +1 @@ +export default (config) => config; diff --git a/packages/registry/__tests__/fixtures/test-app/node_modules/my-addon/package.json b/packages/registry/__tests__/fixtures/test-app/node_modules/my-addon/package.json new file mode 100644 index 0000000000..ccf0c501c1 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-app/node_modules/my-addon/package.json @@ -0,0 +1,4 @@ +{ + "name": "my-addon", + "main": "index.js" +} diff --git a/packages/registry/__tests__/fixtures/test-app/package.json b/packages/registry/__tests__/fixtures/test-app/package.json new file mode 100644 index 0000000000..24de726e14 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-app/package.json @@ -0,0 +1,3 @@ +{ + "name": "test-app" +} diff --git a/packages/registry/__tests__/fixtures/test-app/registry.config.js b/packages/registry/__tests__/fixtures/test-app/registry.config.js new file mode 100644 index 0000000000..f520684acb --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-app/registry.config.js @@ -0,0 +1,3 @@ +module.exports = { + addons: ['@plone/slots', 'my-addon'], +}; diff --git a/packages/registry/__tests__/fixtures/test-volto-project/addons/my-volto-config-addon/package.json b/packages/registry/__tests__/fixtures/test-volto-project/addons/my-volto-config-addon/package.json new file mode 100644 index 0000000000..87e8d2ad96 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/addons/my-volto-config-addon/package.json @@ -0,0 +1,10 @@ +{ + "name": "test-addon", + "version": "0.0.0", + "customizationPaths": [ + "src/custom-addons" + ], + "addons": [ + "test-released-dummy" + ] +} diff --git a/packages/registry/pnpm-lock.yaml b/packages/registry/__tests__/fixtures/test-volto-project/addons/my-volto-config-addon/src/testaddon.js similarity index 100% rename from packages/registry/pnpm-lock.yaml rename to packages/registry/__tests__/fixtures/test-volto-project/addons/my-volto-config-addon/src/testaddon.js diff --git a/packages/registry/__tests__/fixtures/test-volto-project/addons/non-volto-addon-lib/index.js b/packages/registry/__tests__/fixtures/test-volto-project/addons/non-volto-addon-lib/index.js new file mode 100644 index 0000000000..8cb61d300a --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/addons/non-volto-addon-lib/index.js @@ -0,0 +1 @@ +export default (config) => config; diff --git a/packages/registry/__tests__/fixtures/test-volto-project/addons/non-volto-addon-lib/package.json b/packages/registry/__tests__/fixtures/test-volto-project/addons/non-volto-addon-lib/package.json new file mode 100644 index 0000000000..c81be50ab7 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/addons/non-volto-addon-lib/package.json @@ -0,0 +1,5 @@ +{ + "name": "non-volto-addon-lib", + "version": "0.0.0", + "main": "index.js" +} diff --git a/packages/registry/__tests__/fixtures/test-volto-project/addons/test-addon/package.json b/packages/registry/__tests__/fixtures/test-volto-project/addons/test-addon/package.json new file mode 100644 index 0000000000..87e8d2ad96 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/addons/test-addon/package.json @@ -0,0 +1,10 @@ +{ + "name": "test-addon", + "version": "0.0.0", + "customizationPaths": [ + "src/custom-addons" + ], + "addons": [ + "test-released-dummy" + ] +} diff --git a/packages/registry/__tests__/fixtures/test-volto-project/addons/test-addon/src/custom-addons/test-released-source-addon/index.js b/packages/registry/__tests__/fixtures/test-volto-project/addons/test-addon/src/custom-addons/test-released-source-addon/index.js new file mode 100644 index 0000000000..8337712ea5 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/addons/test-addon/src/custom-addons/test-released-source-addon/index.js @@ -0,0 +1 @@ +// diff --git a/packages/registry/__tests__/fixtures/test-volto-project/addons/test-addon/src/custom-addons/volto/server.jsx b/packages/registry/__tests__/fixtures/test-volto-project/addons/test-addon/src/custom-addons/volto/server.jsx new file mode 100644 index 0000000000..8337712ea5 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/addons/test-addon/src/custom-addons/volto/server.jsx @@ -0,0 +1 @@ +// diff --git a/packages/registry/__tests__/fixtures/test-volto-project/addons/test-addon/src/testaddon.js b/packages/registry/__tests__/fixtures/test-volto-project/addons/test-addon/src/testaddon.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/registry/__tests__/fixtures/test-volto-project/addons/test-released-dummy/index.js b/packages/registry/__tests__/fixtures/test-volto-project/addons/test-released-dummy/index.js new file mode 100644 index 0000000000..8cb61d300a --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/addons/test-released-dummy/index.js @@ -0,0 +1 @@ +export default (config) => config; diff --git a/packages/registry/__tests__/fixtures/test-volto-project/addons/test-released-dummy/package.json b/packages/registry/__tests__/fixtures/test-volto-project/addons/test-released-dummy/package.json new file mode 100644 index 0000000000..18c940d721 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/addons/test-released-dummy/package.json @@ -0,0 +1,8 @@ +{ + "name": "test-released-dummy", + "version": "0.0.0", + "main": "index.js", + "addons": [ + "test-released-unmentioned" + ] +} diff --git a/packages/registry/__tests__/fixtures/test-volto-project/jsconfig.json b/packages/registry/__tests__/fixtures/test-volto-project/jsconfig.json new file mode 100644 index 0000000000..4c3beb25ec --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/jsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "paths": { + "test-addon": ["test-addon/src"], + "test-released-dummy": ["test-released-dummy"], + "my-volto-config-addon": ["my-volto-config-addon/src"], + "non-volto-addon-lib": ["non-volto-addon-lib/src"] + }, + "baseUrl": "addons" + } +} diff --git a/packages/registry/__tests__/fixtures/test-volto-project/node_modules/@plone/volto/src/LanguageSwitcher.jsx b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/@plone/volto/src/LanguageSwitcher.jsx new file mode 100644 index 0000000000..8337712ea5 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/@plone/volto/src/LanguageSwitcher.jsx @@ -0,0 +1 @@ +// diff --git a/packages/registry/__tests__/fixtures/test-volto-project/node_modules/@plone/volto/src/TSComponent.tsx b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/@plone/volto/src/TSComponent.tsx new file mode 100644 index 0000000000..8337712ea5 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/@plone/volto/src/TSComponent.tsx @@ -0,0 +1 @@ +// diff --git a/packages/registry/__tests__/fixtures/test-volto-project/node_modules/@plone/volto/src/client.js b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/@plone/volto/src/client.js new file mode 100644 index 0000000000..0dae97301d --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/@plone/volto/src/client.js @@ -0,0 +1 @@ +//dummy file diff --git a/packages/registry/__tests__/fixtures/test-volto-project/node_modules/@plone/volto/src/routes.jsx b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/@plone/volto/src/routes.jsx new file mode 100644 index 0000000000..8337712ea5 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/@plone/volto/src/routes.jsx @@ -0,0 +1 @@ +// diff --git a/packages/registry/__tests__/fixtures/test-volto-project/node_modules/@plone/volto/src/server.jsx b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/@plone/volto/src/server.jsx new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/registry/__tests__/fixtures/test-volto-project/node_modules/my-volto-config-addon-via-env-var/index.js b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/my-volto-config-addon-via-env-var/index.js new file mode 100644 index 0000000000..8cb61d300a --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/my-volto-config-addon-via-env-var/index.js @@ -0,0 +1 @@ +export default (config) => config; diff --git a/packages/registry/__tests__/fixtures/test-volto-project/node_modules/my-volto-config-addon-via-env-var/package.json b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/my-volto-config-addon-via-env-var/package.json new file mode 100644 index 0000000000..ac0652a9b0 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/my-volto-config-addon-via-env-var/package.json @@ -0,0 +1,11 @@ +{ + "name": "my-volto-config-addon-via-env-var", + "version": "0.0.0", + "main": "index.js", + "customizationPaths": [ + "src/custom-addons" + ], + "addons": [ + "test-released-dummy" + ] +} diff --git a/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-addon/index.js b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-addon/index.js new file mode 100644 index 0000000000..8cb61d300a --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-addon/index.js @@ -0,0 +1 @@ +export default (config) => config; diff --git a/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-addon/package.json b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-addon/package.json new file mode 100644 index 0000000000..4f1f61b465 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-addon/package.json @@ -0,0 +1,8 @@ +{ + "name": "test-released-addon", + "version": "0.0.0", + "main": "index.js", + "addons": [ + "test-released-unmentioned:extra1,extra2" + ] +} diff --git a/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-dummy/index.js b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-dummy/index.js new file mode 100644 index 0000000000..53e61140f2 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-dummy/index.js @@ -0,0 +1,2 @@ +export default (config) => config; + diff --git a/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-dummy/package.json b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-dummy/package.json new file mode 100644 index 0000000000..4640873bbf --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-dummy/package.json @@ -0,0 +1,5 @@ +{ + "name": "test-released-dummy", + "main": "index.js", + "addons": [] +} diff --git a/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/package.json b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/package.json new file mode 100644 index 0000000000..3220bd17cc --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/package.json @@ -0,0 +1,5 @@ +{ + "name": "test-released-source-addon", + "version": "0.0.0", + "main": "src/index.js" +} diff --git a/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/razzle.extend.js b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/razzle.extend.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/src/customizations/@root/marker.js b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/src/customizations/@root/marker.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/src/customizations/LanguageSwitcher.js b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/src/customizations/LanguageSwitcher.js new file mode 100644 index 0000000000..8337712ea5 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/src/customizations/LanguageSwitcher.js @@ -0,0 +1 @@ +// diff --git a/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/src/customizations/TSComponent.jsx b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/src/customizations/TSComponent.jsx new file mode 100644 index 0000000000..8337712ea5 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/src/customizations/TSComponent.jsx @@ -0,0 +1 @@ +// diff --git a/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/src/customizations/client.js b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/src/customizations/client.js new file mode 100644 index 0000000000..8337712ea5 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/src/customizations/client.js @@ -0,0 +1 @@ +// diff --git a/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/src/customizations/routes.tsx b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/src/customizations/routes.tsx new file mode 100644 index 0000000000..8337712ea5 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/src/customizations/routes.tsx @@ -0,0 +1 @@ +// diff --git a/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/src/index.js b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/src/index.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-unmentioned/index.js b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-unmentioned/index.js new file mode 100644 index 0000000000..53e61140f2 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-unmentioned/index.js @@ -0,0 +1,2 @@ +export default (config) => config; + diff --git a/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-unmentioned/package.json b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-unmentioned/package.json new file mode 100644 index 0000000000..b3b3c399f1 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-unmentioned/package.json @@ -0,0 +1,5 @@ +{ + "name": "test-released-unmentioned", + "version": "0.0.0", + "main": "index.js" +} diff --git a/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-via-addons-env-var/index.js b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-via-addons-env-var/index.js new file mode 100644 index 0000000000..53e61140f2 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-via-addons-env-var/index.js @@ -0,0 +1,2 @@ +export default (config) => config; + diff --git a/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-via-addons-env-var/package.json b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-via-addons-env-var/package.json new file mode 100644 index 0000000000..c6a4424310 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-via-addons-env-var/package.json @@ -0,0 +1,4 @@ +{ + "name": "test-released-via-addons-env-var", + "main": "index.js" +} diff --git a/packages/registry/__tests__/fixtures/test-volto-project/package.json b/packages/registry/__tests__/fixtures/test-volto-project/package.json new file mode 100644 index 0000000000..bb67637bb2 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/package.json @@ -0,0 +1,12 @@ +{ + "name": "test-volto-project", + "addons": [ + "test-addon", + "test-released-addon:extra", + "test-released-source-addon" + ], + "customizationPaths": [ + "src/custom-addons", + "src/customizations/" + ] +} diff --git a/packages/registry/__tests__/fixtures/test-volto-project/packages/test-local-packages-via-addons-env-var/package.json b/packages/registry/__tests__/fixtures/test-volto-project/packages/test-local-packages-via-addons-env-var/package.json new file mode 100644 index 0000000000..7e6c4a11fb --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/packages/test-local-packages-via-addons-env-var/package.json @@ -0,0 +1,4 @@ +{ + "name": "test-local-packages-via-addons-env-var", + "main": "src/index.js" +} diff --git a/packages/registry/__tests__/fixtures/test-volto-project/packages/test-local-packages-via-addons-env-var/src/index.js b/packages/registry/__tests__/fixtures/test-volto-project/packages/test-local-packages-via-addons-env-var/src/index.js new file mode 100644 index 0000000000..8cb61d300a --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/packages/test-local-packages-via-addons-env-var/src/index.js @@ -0,0 +1 @@ +export default (config) => config; diff --git a/packages/registry/__tests__/fixtures/test-volto-project/src/custom-addons/test-addon/testaddon.js b/packages/registry/__tests__/fixtures/test-volto-project/src/custom-addons/test-addon/testaddon.js new file mode 100644 index 0000000000..8337712ea5 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/src/custom-addons/test-addon/testaddon.js @@ -0,0 +1 @@ +// diff --git a/packages/registry/__tests__/fixtures/test-volto-project/src/custom-addons/volto/client.js b/packages/registry/__tests__/fixtures/test-volto-project/src/custom-addons/volto/client.js new file mode 100644 index 0000000000..4d389677f0 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/src/custom-addons/volto/client.js @@ -0,0 +1 @@ +// another customization diff --git a/packages/registry/__tests__/fixtures/test-volto-project/src/customizations/LanguageSwitcher.js b/packages/registry/__tests__/fixtures/test-volto-project/src/customizations/LanguageSwitcher.js new file mode 100644 index 0000000000..8337712ea5 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/src/customizations/LanguageSwitcher.js @@ -0,0 +1 @@ +// diff --git a/packages/registry/__tests__/fixtures/test-volto-project/src/customizations/TSComponent.jsx b/packages/registry/__tests__/fixtures/test-volto-project/src/customizations/TSComponent.jsx new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/registry/__tests__/fixtures/test-volto-project/src/customizations/client.js b/packages/registry/__tests__/fixtures/test-volto-project/src/customizations/client.js new file mode 100644 index 0000000000..b262fa10a3 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/src/customizations/client.js @@ -0,0 +1 @@ +// dummy file diff --git a/packages/registry/__tests__/fixtures/test-volto-project/src/customizations/routes.tsx b/packages/registry/__tests__/fixtures/test-volto-project/src/customizations/routes.tsx new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/registry/__tests__/fixtures/test-volto-project/src/customizations/server.jsx b/packages/registry/__tests__/fixtures/test-volto-project/src/customizations/server.jsx new file mode 100644 index 0000000000..8337712ea5 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/src/customizations/server.jsx @@ -0,0 +1 @@ +// diff --git a/packages/registry/__tests__/fixtures/test-volto-project/src/marker.js b/packages/registry/__tests__/fixtures/test-volto-project/src/marker.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/registry/__tests__/fixtures/test-volto-project/volto.config.envvar.js b/packages/registry/__tests__/fixtures/test-volto-project/volto.config.envvar.js new file mode 100644 index 0000000000..2e37cd37c2 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/volto.config.envvar.js @@ -0,0 +1,3 @@ +module.exports = { + addons: ['my-volto-config-addon-via-env-var'], +}; diff --git a/packages/registry/__tests__/fixtures/test-volto-project/volto.config.js b/packages/registry/__tests__/fixtures/test-volto-project/volto.config.js new file mode 100644 index 0000000000..ec05e8e085 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/volto.config.js @@ -0,0 +1,3 @@ +module.exports = { + addons: ['my-volto-config-addon'], +}; diff --git a/packages/registry/__tests__/fixtures/volto-addon1.js b/packages/registry/__tests__/fixtures/volto-addon1.js new file mode 100644 index 0000000000..b406bacbd8 --- /dev/null +++ b/packages/registry/__tests__/fixtures/volto-addon1.js @@ -0,0 +1,14 @@ +export default (config) => { + const settings = { + nonContentRoutes: [], + supportedLanguages: ['en'], + navDepth: 1, + }; + + config.settings = { + ...config.settings, + ...settings, + }; + + return config; +}; diff --git a/packages/registry/__tests__/fixtures/volto-addon2.js b/packages/registry/__tests__/fixtures/volto-addon2.js new file mode 100644 index 0000000000..62ec3d2cf0 --- /dev/null +++ b/packages/registry/__tests__/fixtures/volto-addon2.js @@ -0,0 +1,29 @@ +export default (config) => { + const settings = { + nonContentRoutes: [], + supportedLanguages: ['en', 'de'], + navDepth: 3, + }; + + config.settings = { + ...config.settings, + ...settings, + }; + + return config; +}; + +const additionalConfig = (config) => { + const settings = { + navDepth: 6, + }; + + config.settings = { + ...config.settings, + ...settings, + }; + + return config; +}; + +export { additionalConfig }; diff --git a/packages/registry/__tests__/fixtures/volto-addon3.js b/packages/registry/__tests__/fixtures/volto-addon3.js new file mode 100644 index 0000000000..2231f8a8b1 --- /dev/null +++ b/packages/registry/__tests__/fixtures/volto-addon3.js @@ -0,0 +1,41 @@ +export default (config) => { + const settings = { + nonContentRoutes: [], + supportedLanguages: ['en', 'de'], + navDepth: 3, + }; + + config.settings = { + ...config.settings, + ...settings, + }; + + return config; +}; + +const additionalConfig = (config) => { + const settings = { + navDepth: 6, + }; + + config.settings = { + ...config.settings, + ...settings, + }; + + return config; +}; + +const alternateAdditionalConfig = (config) => { + const settings = { + navDepth: 10, + }; + + config.settings = { + ...config.settings, + ...settings, + }; + + return config; +}; +export { additionalConfig, alternateAdditionalConfig }; diff --git a/packages/registry/docs/_static/Plone_logo_square.png b/packages/registry/docs/_static/Plone_logo_square.png new file mode 100644 index 0000000000000000000000000000000000000000..f42a1220d761a40ad9f0f0df919136f61ef729e2 GIT binary patch literal 30912 zcmYJ5V|XS_^yXvRwx8HGCU!EhZBJ}F6Wg|JO>En?CKK%Q?*4c8Lw8qqRipaq>zq@+ zb5}K0ZsUCfq??9U)!OyffW!IBJv_2APw>GA4ZVCeQvX# z(&qB=AauYo3LgQ>nEl(0h*5~3t38h}z6K^6rmA}*e23_2`<0iWuy>gMLQz3j$tc~RSWQHzL) zQcQz0dl zws;Uoek$l3lmYrLv7f(9%Lx&t*R`Nj`=%T;T)WPcXxd9Gnl3eTEsatdbL@8{umU`~L3b&<<7O?-} z`^zd$agI8Q9pT*{{rz*d)*-DzWadA4EEE{84Zpth#e`=aL4Yoanv!bPPS7*KSo3S- zjFFj+qZPFgUT6#c5=oQes}$XTN_z4styg-#%>V2HrH^MVdB9AQ%MK!i)(%4NH>=F* zFooHcftQp1zOJTNm|wT%_$i-$j=Ln9>i`V6XyC#q%xVh}2bbwXWhr6ydekRNIX1>L zqE>xXb;C{gOrk$qhFx~XM<)Kl8XUjpO_1sREY)crUzOeO-KQa%V6WoB^XD%9SDYCA z+{N*H<9+_*(Q}3CbtrR#m5K(r`^a`s?aKuUR44MJ!We%GwBRL}LXRdH`5uB{ z#4;CoL{tl2=czHJyDnVCj;-!vaz$RgEPE8J=p#UQZ|hMFvs)mKdisfugmMV6vc zDz3Qxp8H*rz#y%7n6>$Inv}uCs5OYOxh?u9uiN_y^Iyd{b67LRA0@iJ77iI|6KU*# zE~SuW(Td{YSK2)GSfy0QrTZ6ArhO7)BSCT4E54+P%Gq9}GcSq@V?Y`<9+! zAwfBU7k;0-)A=j!V5Ov)=4i!rQ&rKrSOr_qC3UTY5DQ<2L6;z zGBC4ou=Q$X2CK69u7Wm_v^1&OKY6GwA9X>@*xE;NesCE*<$?Me*-C z2&kZ7=U0&)#CXjvPJDDSkLz6~D9$2Tn}H8mt}l}E)ZO37$% zbMJ3BoYrh;KEb{~CwAj9)v|}wZQ|F|4Xbq^bCT>BTd*{7NQ!yl-!ob2?0!NwG=zLu#g?UGOA`iTeHGo{==8%j>tAVO7GW`J88EKOQh* zvGQ7uXGOkL>1XBAuyJi}_6M|38)Ro`E5RUoCZ=MnG*2t>K@)U4ex<&?0ve}-mxD_@ z`|qK0#X+9m?CsU|r~{rASdYs55=u?zL;;!Yy&1RdlI=Od{ibyKibf97oX zRo-#6aaci^p}ohBf~hH-nCCV0X-ZRh%c_c{8st!AX?fkZ=N+?Hd7a;8eW&gIvND!@ zbW0h{Vx`W+BbzRRHkz zu{{x{7FGuz@E^ELBNoUVc5;6D#AnXC&Z*frCQv|{J*P7o6LI8Z5nZS-$SiEIvw+W7 zds~A_#bpIuKv@b^os&~C$TH?_acmvaP%PjREAmxBou@xne#}VdHtBgQmVU) z_%q$FL`2pjoIT-o(zhR`gxchk_Ef{#RXmGPcRgiGUXG=Th`Oeh6z6DgZYcpC(#T*H zp|l3e538IZS>l@J8WYHIxDZO8O2}XrVWx{q^Fvd}INxWi5kgLk-FH+rr31>K4)raQ zQab?uhWaqf8-TeQfrBVbfkvHM63eF2k>bfN9YU8(cB3Z7iM=W+V@pFJ9#Y<_<07Ue zo4D1Dc>Tk?P&q~z3})#q&eB!#g$fMz^{fpi8(FGk;O&Wf*@2?~ffo;GSumsE(Pt`9 zhx7Z3xdk{xeV9yk7!5c{V;yfdQsl9Jhcu?dW#Wrs!uqSF_ZK%C29oZ-cV2eFmNkxT zOWEMp$xbGxE~hJnaa-vhtfoOf+A5_tr>#frTtGL}kh( zW}qB(NdB1#H|67&zmR6Oap7YbnYyX{gC6z1Begpf*e5JJkuH%?j<>V=R3*>wZ$jJT zw3UNrPGL)mZ%d2>!($v~G$Tl*CZBXas|>S%Q->%J>>sN9y5A#^2c0mPtcL5S(u>A5 zf6bm$C2C)C+tH23VsV|@(mO}x%5r)9u}#x*a1D3@7o1&lJW|Hpa?#!1tA^AAe^!8g z;a%MN^|dC}dm4NA|FP}6Z5K{099wBP>rh9ACFcq*IbU zN*DGEmIQfZ|H&>V3LXf_ySk#jLG3MDW!_1OBL#7Q8~`e75>(`UV zu1a7zOQjUf@RL8&IY_jm^=?LCn~#70oNo*3 z(RB{lCgg#d*j4pdOt^oK4`jA*^F}+2a3W8nkk=QsT@&Qj#Juya5SO-$vUJgLN`8{w zYYmhurZiNYcEpuW^V$nd3J1L2xt4rt4bDPu4h(yGOV$J6(zmrlhB2YSuTc=oAG9ZQ zB{}a35PsR!5~gFi^;U7;tuV6QwbQtCfqJ9$vMvi*X%&n^QsB%W)xsM3@w!+3rB3i; zLqz8Jbp*18fs@`+iw*@$yaH5Zwn@8Rl}?tnPPqV(Ql`;}vKb0-{Qi%!US6NO*&&U&Tz?XBfsqcPk?J+S(M-Cgpb^(qw|HH@NsYoeo>nt8 zXE6Vr-rp<|e;?V$KlU-rKo>jbA3!lv|9#WI*L*T z-B^`~rQ#U7OqKU_jGO^-?y3phv`aWd^38_5#M{M^n)zT$x?F6Q<)r3X$!+T!qf^W1 zazAo`mkK42g&_!aK|}r)T$yykJq^Y)Ij+v0A@F+$R-)#pnFOMj0Q-l@2sgP+YB{=M zEPSx`lWJp0`{=7h>D0e})PvF3EnKQ0=iRli;!_<&HK?ae2Ok%VPW4xGc1YIM<+BF3 zaxmf(rbk(u_Z6?-erYF*5C3KaVed{#2wN!JC=q{yDT@X9*nYWvqL!oZ?4g!X7j;oX zw*=3VeXAV&tIqRQAgKnoP8FJzx-iFud->2Mi4g!ztqDK-tCHk*2(PaSgMThCde@jk zI0->^q6VubV(EId!VBiUJN$*k=G3(`BWtY)5^J=qTT^w6eZ%uUfd+3KKQ0i_AG2bD zhy-C(nZqv2lo%h$)tci(S41h)!S;MA^7;6Q$;>Bf(BbU1SxD-PnbG6^mDE$;n_sEL zazr9S($IgNnV&f5dw+l9FvESGe4;wx{p}Hs7mdRI34>j%AQ^J$72gUYjtCPd!h;gx zy>Q5Iwy%Z~rYl$=$UCuJ_Ha}SI7Y9v*j)l=)ee_kzlY7_$C~b@hqS-0n5DFB8l=Fs zMU5y%+MUIplb<$D`5ENw8Dew$?um)A1{NVoR5W&H<_*0FLQB7BrPI;z3y zCyJf|)-jJH#phN~uu!zeuH>cn_6b${8zx!RY4mrN<22oM{)0vYztLiL=Hk&BK(@wc zHOhx0dH^$b?i?raNae|T!^V%Zcy_zuXL5o*OW-KJ8q&Q8dbY7&@p?_AqAp|JBwEox zKM#5xJ(Qzi7$hT#xwuml>eqy^9Eq-2yD*Me0E>Hjm}4Mw7>LQ0BjP@o5d!Gw+CJW3 zx^Q~>vnG~h*;2B#@ZlWEt?>b$OYclN;tU-tT1Jrc&#oYgy zZrekiL})MUV?g$W=KlE2O`~}PGccrJEc_kaVx{&u|9cAZdOy(x&8&%Fz_9#vkFkQ% z`)SigIk0J7eN-(cm&g>C#cAFt@XS}@)5OvHZ4ty1)Y8i1-FrPjRlkg~f=OP~lmkwqdjZog{}&CgU+#}&OXPyQ zWGD=S>G6`T8W|>0_~oudfmDKSey!6Z`Ajt?c%n_T%SK0?*I@Hx2>yx(CB(PE9MFo8 z2k2bRlf?*US%yAOJq_hhGkV=Rx~5H!ySd9)`WSiSM&}8W^aR>HRw?xo(gkX%aW8 zE5X#*shAciVb4SFLnjyWDdtjKW3 ztf|nQglsG-mTWlKIR6@A0GPYqNrG$l0TQ>hjVpvxPl;5mq4}d-RP;$@MdsHnWiN?( z_@x@&!`&26UKC?g=w)xhQjsA$d}LOaCeR(cRVN&tI!nNmjg7@EK4)nCbMlE=BVH(Mm_!vRi#4kblqUK^dsTpj`wp#x9|_R#S$N!iA1lX}>vOeg>JIt})xRvuI5e zfgeLBSda8_T*a8+x40^7H;I#&EF5MZXtv~*%>_2*A3nMVrWoaN+~FiI^n z52y>(h{thjk;_7$U0j(~(S=dcT^=mNXm=O-o!?;>Q-UROs(ob9FXT{VVilA_%dmGy zb)R^aPdYgi{WkrltMO1xn2BFkvcGPc1vpGs$<%}qQ4VB_c`e{lhWjI96ivnehq73r z?sA&0LKO4SDo4`HC{l2LMN&eGl=(K9TYVG5gLLg;v2jP)a>_N4cs6BdxDJ?%lPEmc zfLi`bl^LpzmWrzs(!G6pji!)A$N;XO(r9*E*#jFBl=?P<1l#o>6r0Lqu#r(^-tCY_ zE3unl1~#u*^S$IH(&{zpDUsUkhavkEe{4;6en@amYoAp$lW|>H%IM9 z?MzdiSK>7-2~1OYXO&+v<;~J|YrFLZY_~=IbRdFESk$9(_WOdrH}g%GS&O-*H!QZB zPEd}BRrM`(SURJdWpw=h1IvI2)^FjKe0+6`oMiL1?-CwY z*~)WzD31B{lbKASfnn*edDs%txX=w*K=t~dd$2>uNR^j5ROES`5v7vC$s7w~b!oAJ zj%WE754tMPDAED7J#^L>;er<-DvWyNu~o5antN1W-Pnc&e055E=$V!=S(ue`CILDO z2mMVAq2pD1D`eFUY+}7#(gTSqlae;1$gzF@z%`HGsH)fHYUYk|Ad0Hkocw4Tul(O{ zR|T|>LonaG0kzfj=-2*IGT&Bhj<>{pCJ6KtJ8T|C6zlPZcXSl4Azhy`40eG|5+1w_ z<5NGB*Jl5?rlzm#KX2gk6@qfH$eIvj%*Cf1WJe8$Yl6H8NZSWD?v@35wQwQnZyohe zGu{TC4qg4_dQw=;qFbD+kYvn{eC*a@MVQ{Ua=!;;9tsWLyg#67n%=Fu3 z-HO@ScS7+BZ_|pSvNj$kZDkM#2oyIfgZgzRj6}7oGyiAY(+|0TfxPPP6xhxfREppj z$UZXkY>@iX*DB+;7mkH(o_cx%=Bb76o_X6a!D7NGC)PVw#dv4%Z&t84SaHL^YCf7h zY-&#kdQY>+XbrF9qrz#`w8bz>4Bu;m;AbZ8$V;PhpQk9@e9GOvuU`=Q-Q(E~(qrrt zh}g-D=QxWIv6hfKkkZZ2fDJKoIv~gJvl(arLB%k?%&|}3< zDI^BM@H2U*yAKu#eztrsm1dco$?MGca3Hk#E*E48^Qge5Q1~(!xOk1-_EWftxpa6H zuM#XLgkQ0kj+>e4_ls7C9Qj7Fz3 zk)Os{jSmT72wP3#qUTc(5@8R6Y(>>F4|iFIdZ(CvmWm#fb;8x$nkeA=5Rb%`s919o zio_w%zU=y#*Z9)*W{w&|E4UJM2ECuZmuk~8jEy@?LXv?LkH%yOco`ch5kfR8SzNYx z^ebmDfN!!O)ux}htp~TNO}?pMOcXvD8_nIakXb+o;X6V~n7xrp8E6epDRQ|&7kNK@ zaSLyg^>)|(T~u&;NrIJ;8;FXX>%6R9g<~O3wTWnV+~*f0gYc8ENP0TA3G>^W<)!8V zV!?=(5rkc@2W>`_`z~!{a_t2w39XshRBJ-{!wRgMk%%0H5%F6TbSP-O2+D(B#KtF1 z-fIIq^!(hNBXEi`x zNnxddg;CIjpiqYL(^DS1y|IbyzNI_JbB=bL1MtwlYtLN=Gpis7n5T?E#b$SZIFei! zDImd^+Prw1ml^D&>cQmaC?|Zvz7A27u{q+scK%qclMrNjQ}^TV#Gy6FEJKFM+ORgN zr?vW9{f%S^Nm^$fgw9X}=>#5Tn-wou@-vfEJHn)#_Ion?eeou`+SY|8PBYF#xYn>J zKrLZ__$HJX$;M-|OyaEWfb-Iuervs|M4`!Qq9MFsy`3C~Vp^uMuZt=Fu_r%2KqcX{ ze(Y`0sx8{Q1UnY6S6{+m;x3}rTxDBLoyH^wHLe1XL4J(+aNNd4g$z8}U z`hiM3-z3RQAAyCknL``~*$d_bLDid!-yj%<{G-PXO_xHu$g(f#c`FLh@Zs6C0`vp9 zBcl9uB&ZJdT!aSCf1`Q(!9O?gQfD8zEx*V!vv3N^=TenIknA8bS4bA+zJ=rtrT##UOLVIQ2<%8QC;=Y94@ryLmiAel)toZp=&t zCE*<&rf^!qYp~X&*?ep&H&A01A9nE##QYO;p0ycupwc=G>*-xa^6U>KG&a0`W4nj7 ztr%7;P{xtyfhwxNr)sV-GLNu=p<(1KX#-euY(Y?@jld0z+>Xi=*+M|}x?pH;!ETO*oButM+B|Ex z)Y@kV15eIQOHPCp^MfTRC4-;Q@7{VWfY-YS`J{TEws#J5!^VXC*moBf`P0-4{wv0b zDz;Y_>xM2Ekd_lwWlX84ka`RY2`dslFIf&(X6x`LhAV0LnV-rcli@TkIixW9tYr3) z&hX*_+^dP@cdjQS%Z5vWaM4fi3D=0v>4F^BVs|Q9hU^`){!Bv!4chKtKBk@@a)2K= zqvdR(l0vY}OJ)}9qMu^SR~4J^kzh;gME*_op@tT??PuKS9PT5- zStsTai_E~hiUMI>b^z=4)6@3vJ14hi(#k>0V)7Ixvjw+zUc3y0p^Avgsris!&c6ZT z(e+ddrXL#CWi_jPBLTZ&f*UsFalP#hrqMFpL}H=5>3_zfr(~JHs4#~w^MB7)jrsF} z5#I=GP(Zv$w96>m8&MzVCkYp{Io|nF$1y$4rBpc8JG*A)($|)lDTvtj&!!@~`n6V% zmRk)mC+pRt#Jcg#&Rf_owzzR$^;STyHN*~GGO@RuhVekcn$|Bv6ddmajCk*@7Fsh% zt1lwRMusk%be5OSySSKZ;BK|@8Yp7@dOl7yxR{V@^K-Ot)m`;K!#~4fw>Q1Zi2cO;5!%MF+v_7w? zN#8qdk-NzA;yjv9#Z%V;gUEx`?2RJjui8Ii_Gu-WA@+=_VpTobCUlkU^>tzVLu zIeAl<;%s}8=&385IMWl48Nz$*kW?gg2so^nhU*R0a?d1$g`Vwb4M#eBPjfjbIJC7Z zbAJaW4#OTAawBOWJ4l54OkxEgB#^Feci0QMl(Fz1eN#QE@A(rH(p3_i&Ye0NC{Gas zWsY!ZUQgt7vNZj|If&H3SkxduXOn{vB-k8!T-)ST^S%Do0|Y`1nkL;NCraiV>``zT zyaM^Z=f710TNov^F!2PYOu1}U!ZAl6D%#e@Zd&q=&%>@`W%({<4ke*ZELu#6w#f@09DJN@Q+_w1d%J% z7<|kqSUllO(}ByDorU50ea+~dhR>taSij*OaNb*d-%rWCn4!7!euW*Z>_MTELiZA_ zVls|6&gvKS9FG-jdh@w8*{!C_aFOG&GFOlcw>Sn;Lx-a*o zsMpBx-QrsHt+rAzSCL3vDhPjUZn{l+d_HgQb-OEfKA!(!=ITPQ9~I_sSNioswmipv zdZ~)=1J(>rIqqfN2#0-X$I2#9s4DJe>fUOv*X@^V`)mO1zkKAE{@S9Kbyo(lLy@lJ zV8aR#W^X1MM1w%Za zXr@KaQvjF&@q%7$Jf)=Lc9WTMrEM(an*1iw@3o&01yDl*1d`NSc7&{*&EQPt(C5yv zc8@biG;Ee=eS1+e%zwZf$k+w*6-l}xQ!13$n9}id8{+#@yqSKNVT1%wHHF2$q~ece z_l8bKO-+dvh29?*b@i)PG-xMnq@J+qf)w{$N=9Nra!vFl%(}pd##kKEt5YEj$0lL2 z^j)iJX;)93sSCD|c?VnvPU)giBIdo2sw9NS@ za?HCy@24&k*Im-FPv4XCIOKnxn_JF0uol<=+(#A6H^`2jn}d|d{b zbKCz#iYs5z3Ii(YFM^5D8L2kLR{TGKtr!Y3&K>fWHuYaH1U&-vK^}0l)hN%Q(+$lvEgDMMIoeqN)7%E~FoJJq`8NU^|2JQSA?+ zTJ%KVk|Gd}w51V=^{}FT_lc#cvW`f38qYlnTm@EBKJ1ANQGT5TdWpIJ2EK-8O{(oopUv5wH|E>pQ*d)#;WJUOB8I71#=V&5+j`v_) z1y!p&-f)hXK`rojsu=xQ8j-gRRuLHv&|#UTWt^=#)!!UH!k7`MBQege$^ODfn>_H` z99QCwIfQ%Y8Ii^XttFXQ>tDo&+ixJQ(PC1n7){jC(+(X7WF5(nbmiB?O( zJO4GbF?4q;Z+pF*z)4CjIC#oYqL>A9&hVu}4UBAE!Ag^}`F%bf(?ru7del5DO-opp zYxAQ2-4Np?V5r%kS^rvdiw8vLjXyYpgMogD;Gq~F#n!_E@9$1JIf)1Z42mH_a6HMc zL<9a`t6CCJQpp{dE?{_UjNRD16(B6!w<(IBW!FLu(OAA6{jd0Uk?4nW56G*cTxs?OFyfg{Ghw(XRdf9TgFvF-8X`cm`tIhQA*Jl7;uo6lpxn+S2oWz&m@wjb_ zPzUQ@4jYv6!5pI;^V=uS{_KdnE^pf{*vgc{02LIcqCdp81)|ya-hBcT3KO%qB8C93 z5>#F0_>qJ?8{`h+{AKjKpOVLEIJ83CWsD!ovb;D98k)V2EORGbLW#c?=P`W$#p0q= z%u~-{o^|-8P;`rpr89FgKdU)rQqR}S9{O#)PZ8yUsj?lqwMb-h_cao|@6Aj-bVA)9 zo1eBl*@8DQUM^jAZiR|i2GIU8%MQ{>(aI0dNHCbo2qc&nbmFVP@08fCB9E9A{78-v zWl9v6B$rd)3kk{9>euO=f_^7o;2kY$CarS_MyIAFY2nPwQHOhydU^tCm(pBv;1kPY z#h%qb|3yB3U()sp1=mJZBIWd$K}4B);&I5OdU7MPH-8$Ar*7h!cGakzw;Ipk*X>8s!!TVN zOf#a^jV2~oN03uGDoDc#zQAU2FPh z%Aoi-WCrJMZkw1k_=)9qt?RcM-R+L2(BF94E ziQ%uB1mTcfnO<%bv#fj{-EYkg78bmUG!e=mrKYWcJVPyrD6uP~M^zOLUy-6lIV}s+ zMJfXow3Y%5QbccGj!jf^U+w}=j0!M6Foyy5Y5WBw`sZ;a$kP(nMI~t%{s10q+R+GY z`!MF;GpWkpl{` z&WVU=`s^FXf9SS3L-KsKKg(Kv1uWL!#pX%Nqz-ELE*F{Gj*;+9L;sa2WsS3j(Ri7l zB+OEmW{du|K>l%2_YB?ZE+o!YomwLtO=pWTMpBB1C`v};C*y&7;*+KfEMfjE& ziHE#y?v^JmV`~Fi`)S)J8VLs@!f4I7-QWdTc4vuD;KIRR0XA$(lrsz>?k45T*lKw*_r6M# ziM>P)lfof#c$H~NFe}12&LLn7enRBqfha@?WnNnuqN0Qc^A0FgtA~6|O5S&^(kT2z z@|1u+AHFzr3Ag9@)JY>{I`z6sN=Q0Nu3xN~|2ImQz2WYZ7-?vVu*|k502B-5u2j1zfZ&vr259flFpN)P*`q)-QHsXzeMAC5G!ybs z*c^(LA>K%~X`J~Dlt}u$|L>vpARLLfQ+T-lY-nh@CwVMcKj!fNG{U5y8J@zo!T=gt z$;89IL14gw2&wtbk0Ky_V2L7_#l`>@VBuIECGjMHrdRpsS8u*>0N{sGLXpUBUZ>9A1hUs zDKP`(5{`|Y{IiN^u*0pLD#Qd?C50DqV0R!!p_vtSeRm0iD81t{X-0Hcip!PWUPlP` zs4|54PGn9xV1Yg3%?r+Bnc8s6I~F10l{QKI^3vx6Y5=&kf`M-mkvqwMM|skD{}OzR zz1W;w8m9C40|opoMkGEWI|g_YamcPZCqv(LY92=wDK*WM1Kln+6G{Fl;=}{(PyO0- zKt#-wxh+%ZxdCxP$KkbX&wTLbiuAS!ZDvZFjs^0ou84R$okS-lC2Yi^%cjJ@?5YQR zMC;l%Of5--<4wcioEcIUsO^;xNU6zF6&Ir&(Z8V?-X0D2Ilzy!j&))Cf591k{X0O- zn>sg#6p1CK=}v9Y9e#}1%sB=a#s`%})O|ZuV3dgx9n399GVv+lZ*O5mcDH?3xWIgs z1hgoguNfppZy^{tG1XL$Ft>-_blmpPu|Xg3yMe*HyRRfjB;;GVuqTa4{9)#^FXu!3QmDf;~1R zU&HzesjyWMm^zqB^1xN%2T(yxA^13avJ%&7=U$eTylne{u5wtS&LN}}pq|~XYV+mT zh7kiEy;`9of4T52aqLCqi(JIm;CoWN2qj1jYdB~<5-Q5K7n>kdCq^IsN?EWbwihDDtk2B2X$crJj*Fgd z1&ZdXpfobD9u8l>>7AHY{W#M**|_`+;qUK~KO*?o)?PM3^PHJy#}07$%U?obj&NI9 znx%=9q_6DOb1mAP7l>P+IY;VFjSha(_i1`dgt-~&*aUKw&)20=o;qEXQfWuY>?G2W+QmUyG>+}Z8+cOb{wh4r!0z> zKL|6-eLx+jCitt?ox1sfzWx&nFAta0pjl%c8B$#X^EksfiA-!yx|x_wH1CGZ0nD^m zAMnUrN3!H?3#edOI?3VEx`e4g(VPiRB;w=x#H8XV39c@f;e8-_rbGZN__oIczzX*<+bw!+|K`l3-Zku1v~2x3?27 z^r^I`wU(}tForl2^08fdo!|D-Y+iqRYX#e6I67@WD0%a3%4|C5f)5|7HYQF~ig_d* z4EJEM#byUxlKB&RZfMp3x^?mQ)_n8p3tMZz*%C&_vLO%%gjdEej3-)%@l{Cqgyf9; zoA6s2&R?@X`SO;A7E{-Kzt7MhydxLAL$K$i?-=JGa5^2mIM##O|#pA+e`^FE|H@f zR|sCo|7HQUg#4al(R(tVPxgEM`N}D0WvrB3Zh`-qm)Yif+|yqUZ2IKz1dbcLX^~Tm zj>SjU-sPZU5CK8GX;@l2i}>Vf?jDf2zbvP3kw+Js?dKxgx4k@8l>Lmd0Jf>(?_m(j zprR;Q8=#MGY zGaZzER=c9brV*5UZr9i2N6n9u87x#;{bReibrmJtZ_QxnR56R{aT5C$unve0(uMBnObMJ$(Zjz;FRqc zC3eLTT?>w0Xs5Ik!p3^X0Gle@Lq^~<2f1$gj+?g9Srq)j$yIaphB$if$WgjwBvLUo!+CFS)H|zj`c`U5th(EosVh&V3?&C~@4H0tz`hxsVP%&z2A`?M z8dvLxNYW=v(qc3~N6K;j?>kptsLkcToiVClgl^PXfFL4%9HLTBYk9qR#nX@}-mR@++7p@Jb2h`6|@S z!){S31P`y2_VJot{tkd2IbEC*#(_G%3L+dig-DEV1aa`MqeZ8PjF`E}J;#CQ@QMYI zpx!(K-uS0yQLA%!Sq@ztQ~~W7=;Mjs2GT zW0EzoJb@LMp!`q;;q}P87SRYTisI7kiaSxC_mb81-nfqZ)ar87ew*RFpf_S*zcyAt z2zu$E%QB-cYc*~`qbI&D`dM16O>f=oj<@J@=)v)rSW8H-O;EfQ6UDAULMNMcJs*S&N{pg{W6w?dxj=@EeP4C8ROlfDp&av_vt89sjb5W>keU zrZ_wCZ%xKQOTuOo2p05d+fFx%c*bgX;0JoZ_FH-r)WT%CZA-($#b3yF^JX$4$szgf z+c9a#EzVj!tN0fF#Y4a;AHtc4RFv^wG39-l3p1hgSt)qoXfq{2r|*2%Vw?87ko8lNap+dmxp5Y)=X7D7$!lgT1SsDKC%T*RfqO%h?*NZ_tmb`gPn$uvY!B zE~2{L#3UQI`&4hAzz<>ZeHQ=w8K${k5u@}fPIj(BO9$L9>#S*rp>mK=ig0&2sEC)a zkzsJQ7H0S52Bl=F}F>a5-w0PU$U^JzZEj?xrgMT7VQ?Xg0W5 zODos&XK~DhI?}{<9ejQ2;M4{%D2V_3*e!8SVC1R7&xN}xtaqTCCn!< zkx!|#(@DODEA=c+-!8_?l@=R_s}CgJhZ245`nLuUPG0@I%cVb%+02x8P~Zg!Gmj-? zzq)#P$|*BW7lD|%4d)I=A?fX8FC&1%UFL)jA?7i21U{J^X%SITb_avg3uiFnPpp%*^ z{-$+}*z^d;&uT3>lW<=EaMo>kJPR{9e_D8kk(j?2sahd6@he`~+vesxMM-{O8l;418yDx3!VXV&`e{c_?BqG*zm#A5xBpWPi6rHwaBk$ z@y(P+Est-l18YG&Xx*2l*;bH|gWN-sZP|h?1#=G;W>#?x0~N~x{?EAJ;XC$f!MAMZ#BDc)-f2;C4LBE=B>i17>?%&qLEZZ$G zLU3kS&*}pn7DygTzmFFyXgk~TKH>GG+WZkEW?VAnvPcqk4^0P*YI*(w`v z0k{mr@JzHFE|Q}56zND{Ql;!55SxZb3qa#~;ZZt|qWs9y07J@EPY}5-^y$qD3B%z@ z;+Y6xdcps5F{%2?Msblp0bk)^9L>fg9lQl9$;vn4&nz9?u57N%(p|!i$;@?pvWS1* zkW=ho`=3zZDEDTUMwYbPVPeP!mPX{`Z%4^1Ax`A?<-4LDLdogXk>i^$dE~ROnG3K) zVD9`$d2S(yiv+ffU<|~(ux_E<9IW%9;uZbi?f>Y#Z|sG7e5{asGU|kC!_{E7G@NOL zG`?TDgHT8$bEf|U{>2k)_c#Q%O|5LuEP_rz_|y&$@9&UKlP8JCQk#n5g0Kw( zPOEVk#ocToPab$@A;Aa{-ci!mgt!eESE9*YLFeZaRu$gY(gpV#9=>RAUt@fe zZb25R0m}iC6#1b9c#IoRKf_<8gG-(bA3Dpf4GtwDFc}ifKZxtszE$!v2a^#gPh`pm z%t6b0@g)a6gDcSH#W$JjQ#6XOb*72c_B3;ai_${CLuLmh?2U886YfZ9#N2=tsjSyG zt9uJuWwRLG+p9A@TK`SCNvvz!IKN>ur@J>_eGX7V0kiqv^AVTQp^^Lz`}p`F?K#gr z=MC1)Zx%Bp{awAqkvq8_pl8dx1@i1bh zfthesmBz4S{rtd=JM?pBhBf~ug&U$mM;-W^r5aw$qf$FNx${FBwIwhG_J(Mmo*C{f zx<&Eum=amaVC7`gtNyRuk>Ks1&=~T?Re}StzNs1u$w*hMt>UJ(H(=#eL{X%KgyOp9 zY^!ru)CLO!{QkTn-PpdsFVcUG z4kl2}i7}@0!9(ST`|5I!8^l%TpLUL>?T-#EKP5l}$cF^+b?_}RuFEA;^8T{P$`Mhm zqH0qNp=QG30_o+ZJ6qG<+C5b2u^FxdlfeS2-|B4la-$gni#CcTN~Ga9zW|}{`wB02 z4xQ1!N?tsYEwmz{wS^5~pc=O(3Zxa*DyJ|pdmfW;C@h2*tls_BX@bSLaKEf2xF!lH zYzjF~HhG@5ei8Rpc?(`J3gYmzcJ_a&BXMZ^%XqaRH=KUf-TXdnLiG%pckGWCuS|c* zj6tPwV0v3v^wddDgyRDV-0Lew=8!YgI3SZ+iS)}yA!)N3LibZwgdXi&_XFY|wY}AL z6p_Le6&$3K1CVG~3ZuD3HOz3OZTomP_|%ecO2_h}`T}Er148aF|CIWXfP>*8wpJjJ zx?{r9Y(LDmsbbD*KOUj`@3CNU{c^|yU>v>Wzi=EO)PQ8P5Dckr1PCDq^FZSQ;DA_C zt$)9b8@PRA>qk`*0U}H|?hh=f004|X6gL(c;^xqfD;&?fl^R_ z>R=lThk)B3NuG}#n6HEaRs>7i1e3>3S~hZ}o@t@QY(>5INpxsXEt=%x8kd?HTknLlg;UX@)ITe4_2o8g%1s-op_0j(@?Q z*nDE$ymW}yR0@I49v)3}rMU$G1gD({lYo{%)U7Ru?>mD}Mh`lNZH^$YX(RXH>lYA^ z-u?YD>4hjc`&zbx`w2;EsAD|mt*|33tQ59v(j~lZHG)%pS8-(;olabw1!{sJDXSgV zTk(?w?z8p8kdmOHHhj2TsU4)~VB?zYKgFpnePx&c4pJAk-{vB?EXN4&UjW?H|NRSK z74jLG<;nP2Se@e zBL#SHgnb_ixTw5q{bDaKNYjT;ZPHS&s9QQT$Y1ef5R;2u0Uf#41a?(S?nxD(uh1rHn8xJz(J zaEIXT&KchGt^50~yVm6w!wl6u)!o(ARZl%rRo~0?GTq$MPVmz9Z@XYI79b0#eebBI zAuWIsXF&Xs@9?VfHT1W9>I>e4|D*~ehY+VrKHV>6Pk4SwubgLYZPXb18%w{Ji^=)ry_%@M2Qw?o9)O9gE@5<#!9oFGt}ILpvyV0(?}kHFse^ z8W{ZfJ-$p-u_d_XxY_>nFVq!^F49%5Hh%ZK*^h1bOSU0Gk?c`RNA2gchnMS>eTPr) zg9;JZ1*|*yergN+u(B?`Ni{rw^2gCiy28C8{PYi$#&vRzznelu8EaQIpbA%# zL2~l5U&6IYhn2`?(Y(l&9x8_lk3`J;AE@JMry5(#ypIBYd%4-9?IOnLVv*mFhvI!1 zS4`@CDRTU$oS>iz5e+6Kw8ks@>BEc_^kL_EmX4KQm5L6^L7L8{PCEDl4m(OBR37r! zQ402kWa;tWi{##XnNqK!D2Hu=hG8-gG=E4BOaJW4e9nLrlsm*-IZwAeKsCy**)##K z#7H5P6eHxF9?(;!F?~olua!=hfte^XQeU87=llC#qp64)-$J+-_`6no$+${bN7it| z0XYlBmgYM3Xbw@4)#g`J5l<7NCO-VP#$vTuzF%W?YLvL(h;D+u;ipD_4+bnhB8^q} z_QBUO{Vwi)+a}=-0fZ5S8T}{Nghez&rk_@#vEP#J4ozV>yC6A;hKJkW8!AGoEZlOt zj$qx-LX*1U^3HWiQ{48C?2T(lQ<&{Be|{76qF5&iep_U82rolcU+{@_ciKN z(Z7m{Fhc%!INlNCABoRUbk$h<{q<+&%L(P$QEeYzzYldbU~e!>M5MV@VceUHR%Rph z>*2KHB&D>;g=My$-ai5CdsM@VgxM`TZTC9;1X7xhCG6~@lQZzD`|C`jtB`uj&f8lR zSq*C#?QqhBnf$WWOwgEayX&%e&3xmsZ>irOc7!esYgI54?L?y1qiak+V*j=3es$XM<3uM$X^LYYV6=-Qg} z0)b9`jif3zsci985OpG3m-o3)b}CB*%9*1tO6+Qkp1BfMyhpy#8scu=2W%1E8glLY zJn#KKnW-a7AHf4Gwx^$1;;ze8SANJ{h*ao`Xs&LWflv#!?BXdj&Q;}thpMqO?%T`g zem_2Eg+zs4-jI)}DoJWRZ&fJCf3)nmqL20KFX3C=XI2`Xa&X3!m#R}Aw`EMWBVBd~ zw^z>Xg?)BK=has8vR6fSb)@f*|A)lasvHYrhH|RH+K;T4|#f7|)*QaBjqL|mAbd5lpu zkhT-Y7#(&6{2x^Pzspk$xK{YH=u-Z||6~QSA$TJH2V4JtL}T^7FW887M&O4dg9SkC z@xRM)s!k!$|6dJ*J|;^YTmH#>7aPd@Gr9;9wwsz4xOQ zCmOmHY_?esl?Xf8lwPQ0H7|~%=AzuHQA;UE%X1^e86itNZ~)#3?u%i#5yJl2az}m* z$qdEMp!)E$6ID8VjlU10I{b;Tk6 zJ)LZK)=t-3C;bQ*K3Qh#`2xhOMRqiqqW*3-1HDZ~`fl1R7v5kTK)DEof58fm7=*(_g6lbpLaoj-R{{}psB_#y2Ur--;b3+zN)ZQ_n?cs%61pgH4!fPp72GZ{hsb zzRjEwo?-Pm4bGR>;O-RVENi2TZ$dPbo=~rex5(zh#1A4sw+Ef>r;Gk})X|H$i(xK# zgd;-n;wcrm?gW3iJD+T@yL_Ohqu*%7QQ}e09LBBDRdQFcOeMV>x^vN9P)@OW#bjWU z3Lw`AOU;6mqFsK(S^RL%AZVKhT&wd(NIk zk^Bs?fyxM`j`jyv3PRn<6la1i=Ud=dKy7du-K&K{@gK|2O~mda(PSdgvBB(4CKIqX zA0d5S&r+8k{{rdf7YQmtqlk4jJ#hqo9dy}!-GiFoO6dUIcG?^*GBMabXmx1uL!@88 zl_SW{=^s_`XHO2|Z@ll>DdyjJ7j|$clf91r#Cui!MHs#p4oc0u%y{u1fLlzwz=ag% z770e5jKddTi|&jKr28om98yWgBN|{>e!*fg+9l6eZDagRde}3c{Hz*t4`njn_IKwm zr1PLh8eo-mfNFEsgvjgwMj4`^8u+t!lQhSmLn@g9%F^MQB!ILA4bJYq4NI1P3)}Vz zEN>*+(VjOnOmlIT6C|`I)=`X3nc``fcuxw5diu_lWcG^BzPo~*UHYC0OM@zlw>4`8 zn115#_*TWGfrAR_mXMdPSh{^}anC)i{MO(4%ewlsesuqZ!snguhyW7)LRS4S1u{z4iA^lJ_RUqPp zlcy$c2j7xvvc=`OU88&r+oj-+2n-MuuBAc#B~bnI%U9Q*%y?{hhSKO+>(IH;Z{!G~ zb9z`eg_L!^S@)(1&wftGw<5>xJNU%FbPM?)FxDUXN3UbVBDRieuhLg2Y1(rMb=#bF zU;?PFg<6b$xFuBjrb81+{j&Gjiu2cdBU_7)>@uF~U)YT@;QwL>a0?4@ z4K+Hk7P>)|DrbyX?XDMN)UaGwVkHreYx6JzAb4P2>;^Ok)IDOCR-1CiV=`5Qqw!E4 z&h-o7V*T^!_MDS`kI)fM_Z&7H^G6N%*L4e%xcqTwU%4}|uZ221!IKnH%w=XN`+csh zepyM2?d9TWV9hSt^%f|L+q?5~9&lpoC+?_IA%#NyAl7YQ|BDVig*DhLib^x{(Gb(l zfB-wKT&+Oy0nv$t0U=Ntojf5AzE3b>GbvHmi=UIvthvR+SDXWZtys+qYmdLe)1$Z@D z0eb;6ZrCNRD}>`*--GaOvXq-5Xckwgt`W2Xo{Mrwnz9;N%j)wn9-myGpUr-pBsGfP zY8~3AoW?5;miD~%9>hq=Tohu#}pLF=ik~+im{>2Bz~Y>$n`uTPXw1X zsc|^=Tf`H@Qjh$%%cm8-7WNPmdT`SUpz?nwjbYtb)h&(lxrXONA08IXFpLicNgOJ| zgYO$+LfG(HkR{Yvt>F7O-dz6{9Vn?UkkB(_NL=6d&Y^=r5~p5j?=q#Hs@emeoVd4M zd=Fbuj$5A0Odkt2&W?ethAX?Y&UIHHCTi27?$MpM1nVWimFXRx#9 zeT+O`+hPZFT?=}lv$T?~n$3Po;${nk3sy`fK3|sz{8N@#mopgF|K8yA!vu+in$kQs zMmZQLK}7te>k?_{DrP)suO0AXp^Vu}9K9OPm(TDwr7?WrE0Y>RU;N#Aw#+k=%NOF?U>$V5CWOZ}A#c{2tns`k^ zK|Y7o-iZljO-eHQp}Y~Kot1)(661&woSBKNG5((`inn@i(5@NRR1*{~EjX%95gVN#AOdiglGMC#0u3Ku3{1!mSN~mx-a;l(rK3LOO z+T%^2u6Zb?0EOm@x5=CsqW`w<^5NWny>U%{JTYrf9m7{D84!MY&isE=?H8CefZ# zNa2JCbT&eUg4BK&2_83_N9Bq{S@(81GRJScyNy)Y(~@eL30ltpIo}OWBNWz=+Z-L& zB}#A^q7z~hoth8>31Z{Ura&#ey!Q`Hqz=@I2(tgDxYs3w9fdH%N8L^Isk2~1BdV-x zd7rOxNK2{5Aw#xPXu-CCn?T!qMd26RG=J` z+D_fn+U{n~S}^@a|FsvM?Qy!8U-_Eaaej*ImU-2GKIv*>UC$eis6^z~7I}n>el{A~ zUsPFgFX$}o_pmUB6UI=V88X)&E~$8YcX*jTUKYfZfe)Hn3&Y*@XpdAjVnV|Sa|bFW zoIho~IGOc&$AmzbHOF0{7sps^Sq{L2$VRYnhh-N*_ce?Z{f)69e-`zUfJ!yN9v5k^`szU|5#l?73@!^%824QOG;JT3>S-jS#kPU zRSvn>ugup`lgRyLlYW51%-B>(L}^DtkSx)z8hY?}ZiVn%S2TA$7X0&mTHs@j&soz` z{Di_^8&cNt8c9zlb)44d%;k!#;==m6a3=&GqWe4vZDGmfiFJCf6FhJ-I59VmK*)?u$(__}k*Sma81+}NR4>ra7orni#6t3vT) zmEEh~KVuUeq5mX>`|84uZoQu0RdwO$w-(<~F67O?zshe|$cBQysqwMVYaaC8EYl`C z9AW}+OoY|UHg~H{S>F}>mS|akwqQLBxi%bMALv3mbNw`FV$$W8LeDrs(p+a zBw;k*_-DT~oCq*>%tb}5vEs(a7pyKJjoY%C$BH;Vt-xa<9MUtmE*$gLXo#MOHe^Pzpm>iUNfYDjiO|Fh@44eV zuHdvBRNB^aEGbx?UjvPqiIXZS&*N%>+JkaQ~ocO?vN(joADoG z^QaHZv5RW0$M2XHXzlJHneM5z0)3VqEk}&GKrc!K&*HB>u5r=huUS05)6p@gXHD}G zed3a%PUkQhk|CaRTvA+YtAC=@5VGSPz6tlDTHYa#2;%l2uMa?wXo(c?!UGS?5Z$^* z`XoIR>rWTFu;|TccQ{EfWO0rzSpP=An|RLho?EOc=z#D?TN zyZ<){!Y!#HtSke?JBDQGe6Pn}s0di^P78Rt+D&KRQ;s=`2L#s!hrh*1O2@+=A_1d> zKtfXbTdtf=5#C1onFD1kxzyK@Sa!V?hw3-5YYnK4S@;`U1t3dR9G{LPgLH(-k9ji9CQu66|d2=A455zy7$ z6a(#G@c@m%OrnnGnG5O!9e2DAM;g2JNmTKU(y@xu(=Kqf4u7^wx9q0JI8ZqL45Z{x zM*#J`wzKI)JUNQGvGO5Xe7;=};O|9!j>tD}lLHnWPL8Q1^BAgu<+t_*B!oPi5WR6q zK#TDz1LU<*E2SmM+1njO`` zEva(#vMT;_E%~Q}8j)SRc`-8eeY7Y&w|#jlDt{1x+UL<2J zby$>}dspjY3?9(ilr)Bosp#IsFMK_mqMI8&z6ELM+ZcV+UEsaR` zwD;S_1h1Sb6^&dP=Ro%QbZPB6N0-t6Y?fwG2)p~GnBvTJ&72y}7hwZ=gc9wi2|z{c z|0%s=v?F%JY_}fw7w5Z`AcHUMO)t5z8t{l7Q}Q^w<#vt_mc;2K=t*a^41WvrVF$_e zGXZuFF65ln(d{gK5Xa4LxP$Y)4hO~%*#Op>Y;+R8 z*6{nj-@32!2zLC7rM1tf^FvQsLmXD{V_7-~cS|!2(sWKq8nxD;7s+NMlsES8>|&wI zu5CfwGJdmSeX^0~;~OM*YcUpdYtq9;$t7VX_qYv;;_#OjVt^Sz8Op5hV9dS?Mv>&F1w4z<}NVEK7V2jEumcvoIQ%V&E(oR1TyPNg!Swh;U;6p9bFDs;5 zL?*pJ+gk(;F9imt5B1^j(g;IVTNtj1g8=k!N{+DCj04rSGuWYBKUkF1zc7++x(SBxi4S8Rxr0~Of zBux{sF_@v~hY)J53K=^|FI~w;gd8P7ZK%u=r_!S0#4p$XDUgGY^Jb$}_~NIvQ$wM8 zUJF_)k7(_8!@lDl6mNOn<#-N!P2=s)!Mb)aXy+cN9it`l*sXrElV$%auDy-y95`aM z`#C0Lj@V@v=-i%X1Zo-^78pfZ2MTtG=ZDV{1iD+$f~TxEkEkk;3ilq;uyhwIiL;Tu zB~bULZwt6l1BX}xM;;|bA0CRH_&nvwhg*UrvuE}^CT@<2McC^;!)W!?+`~=SPKdBi z->wps)mOsDz=x8og2phnpmnU?Q>ULIhNa;iRP;rcZ^IDU;LX_hrCTPDHG~Co0WfO5 zHp96df#szVOv7*MHX#-h|LVJ) z9V_2{KdWBvp)lf4^Wko_$Do>}XQ^)cRfNDUb@Ep^>fj|(36~XKG;23e>kPfA$g98T`+UPD0IIQS;rb=o6;jWH4NU}&30}Fu4-eS!P zbg#@Ix*zK$d9U8~dm@D0$FhP&n3TYxf zemRa;Dq`B2B@U-ARhSfgGdsC9Fm*kqr z$YG4s{@Ri1v8CB%^^Jb>zj@~~Dc3!H^9z0qxQ z5VK58Sb`%^`Q~%_g0;2P{p9Mz+jP83eMt zgk1zQ=AivTAmo3i@2a96S3=!z^1ne)6ssu0He93iTuJXQGxie5_oHNsyD^u8JSKgq zy+xr`pGC9y_i}cE|HsMPNTFp|O$nIu4P>fvhqU#K|007WOCoiPAXlWjh4@%U3kMJP zW5OBkPOsesp~h|zj6Yj~$F3Mhgx25SZdW$N$iWO}<4PoR>}WHFiv-?FjV6sG*WS{jnaK&{&WWT|oE)1=AJvig2AO2s|MJcx7YvW=pbqj)+)5pJoS zINM9qw7eD$kg|XZvd#1{bhZ7&&QBO%T>8-d8?l_(s(k!oWY9_V0UAC#IEn8yI|c9T zZKBR444t_Xp>vc;^<2YVhxFkG-+>6t_?%1~crfp@6=|L;N9zS?z=&k>q3;{ME zhV|!jdp;%${_Qqpb4AYSjFTJ)&MBS^8ZqMoBw$z9kR~)UZIXJj||QaMlrENL%4eG$O=|6+_qgY03)nHlio< zwk$oLreYnj+7b9`!(n2$k9Ax?Kmsk@ELNC1$&G-e%Kbb1pcw`bN_PT}jEO+OFtk#6{Y%>cUYEMHxgLSyp%!N7fJECI$5P(u?yr@jSEP?m z{C9-@O+_FlL<{$La8G;sXZ(0!+XlRU4){bw7{{C2U!~c6y#+9JD%pn10!y5zef_{L z)MhcpGBW7Z>y~cK3O=#Xrz01ZvVdh=s5Pbe2e(8nd^POLubi7rLG^C*2i6y1_EhIh zMKd_b2Q*J?*@Bl&ELu`Y5+Cp&%cbltT-X5PO%NpdVo(UQIoFhNvC~bGTe8}1y|baL zH)-r$s~@+W!DrFmQ?&aj)Pq?`t!Qk+<#Iz&Jq=)HzR4omtRj|KyRc~%ztOY}!Ly8H zfBC}m8Wto`3m>L+=+N@dfY&3QAGL$rK{&+_g;G9R9ucsn8X`|@*i*RUySS%zH6)T0 zPH-hSFlNXHIDck_IGfNi0j@kMsB3mDnNWZ^D~{ubIE}7v(FC+dun*=awZx_R zR<@u`1mE+UqNSC~R#><7SKecttLUY;b-0{?nqN!Av&>R$pRrEFTj@BImh9Q9LQ##j zx|ESd`FVK6Eeb3j_m7f5s3MN{KhTx4C$KKm2OKTqG)*V-XB3mkd-AlAo&MBdlbdYk zQF1s(e0**l)OSaI{>xKi;arI)uk_mr0^N-qo1l~PIJbdglEXd2dfSQkgw?G4a?}`} zx3Gx=3$L#@!dIiq>YvHf$$E{K#W$X*?nQjRTkc_Zchlvw=zk7sd4-@k@6pGj|#LQgp z;b43XMt`vlI>)lp@bxr+br~ZI{zS~n+e}14-WoBZu2rxD1LWcgUqh0N&L86AmP*CK zKjauniYfTwtSrLC#i4-3*1Y>qfb63^0_Fv;ca{&`tLqzr(XoO7e%d8@Y%+>8CS>oe z+oglP>G|Lb7L0CrpuZ*TTHFu-a*X7!lCd;`e<(&4iV%6IbwuD0czF6U)Xz%0Qyhre-C)p|p7Od`J z2Hw<^AhDH950vM}ycH7Pis>Nw)Y$eT)vLT_t_HNb$O|`SO*(%oTdQ`PoWvG~%JJt_ zI~%yCt-24OJmr$oVv0y7S9Oi$zya^aWf+L4V5-&KY_~?almM-#N+KG0?>vv6wYu! z)^|Kqi-`X&J>dZ-#Zyu_O96mM0N@9*SKTVV&7%JAat-tKoiGKQ*aco&f_V*Khy1^9 znCcIyt>E}S0P`-S%Or4N6C8V=IH6`F^r#>);OBZ6zM`Kr;gqWmA>4FtZEez4cf;dS zMwIT{>;?LXzyS0_E&kzw_%TA7hHu@&q~bu#^mfX9?zgs*7x9h0&Ef;Slqs?)4|1#U zE5w84b-uAA3Xbm7ZepH3a)h>vHRF@d;2M%n;Q*!7J{5FX2CvT@pq%o6;uLBCniS~2 zVPDI$1x@H_Pn%=S&y`KKjYAheWrnZk6~lyNB+=RRd+8E@YJW6Rm_MIdM5X&byvPVu zXGzUSo`;~rOE2SYCdlOH59{doov5sEoJ)7g${snd{+7Tm0{=ikw2A+t9V))vNdHfV zfw-^lB_T6#g}SWQl{@}%DnZg`isVrH>z9=7+yKVFcNo8ahF2M;!e7X^hW&n1d1bz7 zB>?v!4(2EMra=7_ozn;Ebjv4NBbv1|C} zxQ}bzdj;1qOfP)&0Ex`> zMw{mSo?QLR4`FhEC;+F^?sE-bpB;}MeDV-x$*NCg&6%wm)gcRg1y33?H06 z+uwTYdrxe<<<8L8f#rcj0OU6AGF$?ia(7tlkrQc*gw6k91kw72?2%;))OB^lj71Pt9 zAk@FcD6YWnX9WrzmVYVCMnTL^7qJyuvDOO^4a`L383xY!m_a&lZJ|+(Dvz!RSXx#-U1(mRo3V)`c^z6(&!f#7=+0xO_|Q^6 zNc_k(tqz`OoTk#aJ!^=3#tWC+-P~krbJ5%l13u211zZZLS<$#WI&;@jw@;Juy}FbeotPS%`SAAZ3wC z86zJWMeaL^8y8+v_ohvlh?mfs)WF&*jepc|$-4wFySA7F9b@fI)KCst#J>`gnzLY=Gp^uQJ+&KcR`)# zg;C|dh3sQTH<2G>qhUYNg=|lRf7mf~H*<6m*$o~nt|eum?b+%1Q%a?~OF6)~yHR{9 zwm4=CO@;2cKC=S>_Vy533g>DUTJQRXx{LURaGBJX#_hc7W3lxWCgp3IPFbq!4I70$ z?1Gqkbbj)@6eK#?o@9y@mxj{DY~3>;Jc7`k3=p`40todrt*nPw6!8Pn1&&Mfs-!2I znkFXF^HRs_f@OeFq@3t$M0Z)KOJV`ld(kDLg+L@WNPHVX$r|q_Qu`)%Nl9={&)&Oz zsz&9Znm(6$EKN9GCSaYsT>uig#=^>*yG||=lJ_2tk=-`jTbq8+-3q_R*o9eAqUhZ2 zt0)_uUdB5DBRO-mI((v)`cIlxY!Gi7jV;`g)My zw){@W(yL|;(2&kU(5z( z!F#V2l%-idT6i@J#)UhcX`Gnu%oCR$;OVbY-6K^NR^4*TCS4KgcwS|7pku8hqB^;M zhxvx^3Qn3aTE$$pEcGBMU~MPjLcGI;^HVZR!A5t_UU;NeE^&Qk@a0-vsEaw~aF3*w z%x+H|qs7D|Xm4p?`9ZuJVs&`~#Ety|R!zd)<{2KiV-)HAbCAmb>JIb?HdKZKkR=#y z_PWW~AUlWg+qOfS;?V@zWg6=8G*}S`>scG`Y4v6ltRso&q_}#qt zjLvgJPFic`dujk>X8XL4_2 zk*PQ}RS$=AjwVm@4`X8>9|bp!r5bz~N`jR5#BNd=ksR=~11Zc5xq@3`PMN+^ln>vu z;~7#Aa1j$=)|rWF^>wTA_ixzj-&e9;rm+e?L_H3808GU;X;g9n{ z){xp4o(n?@IeLEXozQ5PsZmN>*xq$Aq%wc_^aV1G4ZAqKp;aQk0}FO;HEv-C%)(cctJNQ~%rD+MXj}fT&xNkWk6W zsFY#=SLV3>lN5hEzb(zX>B?)T-u&vliy7Jl7VAw2CQ&7u`$%E1!LNVc%_wBPUv+Lg zlDD;l5)9uzgy}90BUl`!J;_FVzxwTJObX|Zw`CV@MN5f-QO54ENe#MsWNRbaBTW42 zli9OVJ3TwH7teo4@)jElaV(WnBlr3ql5+XRY3{G~B{nXij8p8W40AS`BBp=PRXu+t zhA>;Isu5bl?}88FSa0FTfUlt`S|MzG`b+RVw3_{7<311mAb2X z%UNAE#SiI+F~L0)SU-GbZ&Ocv_vr`zcE&G7FR3ye7J3k_FSd^38<-U4zRdL9;BUVy z{0X9w44fv@6xvBov8_z|=eu9U*q3h#qqt4-Tb>9uMqK`8g=i^d)_8x=I!p9tq!oU5 zGusTJ&U0Hd`gH1jWUZo#{)@e2k4-}P1(Pc;S{Ib?Z4?sh10Lzu z75h*_lnaZE8Xl^O!`e%}M*L*DU$;0D??Gby(r#fm+PjdjuT?8RL4sr^wR|Dgl@_+4 zMb){@u9vFXNfRb=cDR(U-qSGGMyaPmdFI{IbAz7=X)-w5U<<-!GQ0cm6ef$@ByWcF z#4%yI*I*vi;?QUB@ebMV(v>tW_eIF<<#*l_jCNeQomlyqxO_@{GvlvY5GdOR$<}Xo z$%u4$c9hiKLTJ=+C}=)A26ycioKlrvHT9QTKS}Tn`2fgO(IAEv9j=S-qdU?(F#$0{ zKAYk(S>W4_l|fxG@Whg&-2KDe>6=Eh*po%SQTm0b*qvN-lM;`Uy;UcVT?A!(E7(gLxr5Uo~Am46%v1X6pwAKAwwR<$}MPz69Lwc?-lv1mItfR7R*&?4wbFX9q6b z&}C+z1G9&2<(vlb94(}Ggi3i8C9yqQ4%ba?$OWWtzBCv66MQ*#VZ@3}K(MBdU~lOl zVTC279#H6i6DGqUj#3@Ubn`34+xMeiR%oI1Cqc%HhI5#)x>B+T2IC^lEK?B{27UcM z#c->>jLm)xn{RImx_PJy`XeFKF-g|yf8Rw~a5;YU8(FQ_$2&p zqi3J(>SW%_#gDU121>pa6~#;LMoAOIKC}uV@9&v#Hj(=NZbj%stAr;WL;FGM($P-a z1w1xcWF9#dLb;E>2KJ8GLP;#?r6&%m8if9WK&tfp(?Qxj}dL*s|F(z;{P z+S=mL-mCtRNtoyQI>ko1Dqe_?*IExXCzpei_HDxZ%BsCX#DS~o;=0OX{Nv@%P>+!o z>UsLvNhCLp9uZcRCrpj}QDG`z?2#wj0eg*C#fa2j%1M`($|1%I&LraBhIv`IM`ud;*RbU{Q91MmX z8ti{}$zcURLYmC~69Wr~fit#LM?rbLdx$a!o~!-z@&AfJp*rR0JenuPa3v~-0e(J8 LD@#>L7zh0yh&`2n literal 0 HcmV?d00001 diff --git a/packages/registry/docs/_static/favicon.ico b/packages/registry/docs/_static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..ae7bb0cd8b1f4f2e6d657bc7a253472819d77819 GIT binary patch literal 5430 zcmdUzv1$}y6or39*mCm*nMy3Tv=B0n;3G_FX)6dj5Wz;UwcFM%Z{S2y*ogZGGvWhm z#3q7dJYSp}Zf^dW-Bm#h9Pa(^J?Gr{Z)P`;lCe04v=C~c5&99(gR}V4d8U_FC9H+9nPYV{kIiS_C~YBdpE3Vk>v$CV z%oqQ$uo;<6{X}5T9@M5ZJMBUq>^pZi?on>L2OI%z&ZC;rOT)dRu2t=NF1cX$9(~US z9@^-a-Gg|A5ck)pc3{t}d?iG`+WIk~74YyHW)vB2Pb;nr@L;rhn2Sno0`a^%NO%p=Cq^TlH~kz?oDb9c@6@!W^|AI<+;`~Mg3 zU*q0~cH7Ry<*vNLpz?g3OM&+bl)h)V>hbdj*WN#3R)=1_b>PCk^%=8SG2$Kc%>Jj} zza#f5GtbVx{hoYYM}9nK?tb<62cCLW@NRXEe}7kjv-5ns1U$Vaes?#a-}pPI$9KEe z`+VWKF_&)A8@@P&;NMOB(OvIB`AVSfQN?+7Ml0aq`OGMcH&q- zV?-mM^|Q%u>^-BaG8%M^P)2?{!x^}7F6S!pb7%3`L;PKsU#lLU1>1o|YV?ffBVLpD zj?W=}Av7a?-g{e)M-lyZJxf~&>)&_|G}W$iw(;a;@7>f+=<)lQ{5<+ueK+g-`c8kD z((*@2M;C_|hv&~O=Uum)z3-OCXQxMJFHes?zwDNu=iTyr{{7qeygwaKKb`krIMWjc zE*i9WbX`Bg6K`fPiOdT`*PLHiTJtBB+P literal 0 HcmV?d00001 diff --git a/packages/registry/docs/_static/logo.svg b/packages/registry/docs/_static/logo.svg new file mode 100644 index 0000000000..6bfdc1ee90 --- /dev/null +++ b/packages/registry/docs/_static/logo.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/registry/docs/_static/print.css b/packages/registry/docs/_static/print.css new file mode 100644 index 0000000000..8dbc2d5794 --- /dev/null +++ b/packages/registry/docs/_static/print.css @@ -0,0 +1,3 @@ +.tooltip { + display: none; +} diff --git a/packages/registry/docs/conceptual-guides/add-on-registry.md b/packages/registry/docs/conceptual-guides/add-on-registry.md new file mode 100644 index 0000000000..763d9f54d9 --- /dev/null +++ b/packages/registry/docs/conceptual-guides/add-on-registry.md @@ -0,0 +1,38 @@ +--- +myst: + html_meta: + "description": "An explanation of the add-on registry in @plone/registry" + "property=og:description": "An explanation of the add-on registry in @plone/registry" + "property=og:title": "Add-on registry" + "keywords": "@plone/registry, registry, add-on" +--- + +# Add-on registry + +An add-on registry is a facility that allows an app, which was built on an existing framework, to itself be extensible and pluggable. + +The add-on registry is a store where you can register a number of add-ons that your app consumes. + +The add-on registry can be queried, so it can provide a list of add-ons installed in the registry and their properties. + + +## What is an add-on? + +Add-on packages are just CommonJS or ESM packages. +Their main purpose is to encapsulate logic, configuration and customizations in a reusable way. +The only requirement is that their primary entry point (the `main` key of their `package.json`) points to a module that exports a default function, which acts as a default configuration loader for that package. + +Add-ons are applied in the order they are declared in the `addons` key of {file}`package.json` or programatically via a provided configuration file. +Add-ons can override configuration coming from other add-ons, providing a hierarchy of configuration stacks. + +An add-on can be published in an npm registry, just as any other package. +However, add-ons are meant to not be transpiled, but built along with your app code. +They can be released as "source" packages or used directly in your app as local code. + +Add-ons can define shadowed components. +"Component shadowing" is a technique for overriding modules of other packages at build time. +This technique builds upon the `resolve.aliases` facilities of bundlers, so modules can be replaced when the app is being built. + +Add-ons can be chained, where each one can configure the app in some way. +If needed, each add-on in the chain can override or extend the previous configuration that other add-ons set. +Thus, the order in which you register add-ons matters. diff --git a/packages/registry/docs/conceptual-guides/component-registry.md b/packages/registry/docs/conceptual-guides/component-registry.md new file mode 100644 index 0000000000..08fb9226d9 --- /dev/null +++ b/packages/registry/docs/conceptual-guides/component-registry.md @@ -0,0 +1,20 @@ +--- +myst: + html_meta: + "description": "An explanation of the component registry in @plone/registry" + "property=og:description": "An explanation of the component registry in @plone/registry" + "property=og:title": "Component registry" + "keywords": "@plone/registry, registry, component" +--- + +# Component registry + +The configuration registry stores a component registry in itself. +The component registry is a mapping of names to components. +You can look up a name, and receive a component that you can reference in your code. +This provides an alternative, and more convenient, way to customize components in a pluggable way. + +You can programmatically override such registrations from your add-on or projects because it's stored in the configuration registry. +You can customize a component without using shadowing at all, if the code that uses the component retrieves from the component registry, rather than import it directly. +You can even have modifiers to the component registrations through dependencies. +Thus you can adapt the call, given an array of such dependencies. diff --git a/packages/registry/docs/conceptual-guides/configuration-registry.md b/packages/registry/docs/conceptual-guides/configuration-registry.md new file mode 100644 index 0000000000..c1fd19db20 --- /dev/null +++ b/packages/registry/docs/conceptual-guides/configuration-registry.md @@ -0,0 +1,78 @@ +--- +myst: + html_meta: + "description": "An explanation of the configuration registry in @plone/registry" + "property=og:description": "An explanation of the configuration registry in @plone/registry" + "property=og:title": "Configuration registry" + "keywords": "@plone/registry, registry, configuration" +--- + +# Configuration registry + +The configuration registry supplements the add-on registry. +They both work together to provide extensibility and pluggability capabilities. +The configuration registry is a facility that stores app configuration to share in the app. +The add-ons save configuration from the registry using their default export function on app bootstrap time. +They retrieve this configuration as needed by the functionality and components they expose. + +## Example use case - Pluggable block system + +Let's say that your app is the user interface of a content management system (CMS). +This CMS uses blocks as its main fundamental unit of content. +The pages that the CMS builds are made up of these blocks. +The CMS has some basic available blocks, yet it's a requirement that integrators can register more blocks in a pluggable way. +This app will use the add-on registry to extend the basic CMS capabilities, so an external add-on can supplement their own add-ons to those in the basic CMS. + +Let's assume we've defined a key in the registry `config.blocks.blocksConfig`, and defined a way to register the available blocks in the CMS as the keys in that object in the configuration registry: + +```js + config.blocks.blocksConfig.faq_viewer = { + id: 'faq_viewer', + title: 'FAQ Viewer', + edit: FAQBlockEdit, + view: FAQBlockView, + icon: chartIcon, + group: 'common', + restricted: false, + mostUsed: true, + sidebarTab: 1, + }; +``` + +The configuration registry will have other keys already set by default, which will compose the initial set of basic blocks used by the CMS. +Then the CMS will populate the available blocks in the user interface. + +The add-on is meant to extend the initial configuration. +From the default export function of our add-on, you should provide the configuration of the new block: + +```ts +export default function applyConfig(config: ConfigData) { + config.blocks.blocksConfig.faq_viewer = { + id: 'faq_viewer', + title: 'FAQ Viewer', + edit: FAQBlockEdit, + view: FAQBlockView, + icon: chartIcon, + group: 'common', + restricted: false, + mostUsed: true, + sidebarTab: 1, + }; + + return config; +} +``` + +Once the app starts, the add-on registry will execute, in order, all the registered add-ons' default export functions, configuring the new block. +The add-on will then become available to the CMS when it asks the configuration registry for it. + + +## Configuration registry artifacts + +The configuration registry also stores special elements that can be queried and retrieved in a pluggable way. + +- Components +- Slots +- Utilities + +Some of the components are particular to the use case of a CMS, such as slots, but the abstraction can be ported and applied to different scenarios. diff --git a/packages/registry/docs/conceptual-guides/utility-registry.md b/packages/registry/docs/conceptual-guides/utility-registry.md new file mode 100644 index 0000000000..5c0d284bae --- /dev/null +++ b/packages/registry/docs/conceptual-guides/utility-registry.md @@ -0,0 +1,14 @@ +--- +myst: + html_meta: + "description": "An explanation of the utility registry in @plone/registry" + "property=og:description": "An explanation of the utility registry in @plone/registry" + "property=og:title": "Utility registry" + "keywords": "@plone/registry, registry, utility" +--- + +# Utility registry + +The configuration registry stores a utility registry in itself. +The component registry is a mapping of a `name` and a `type` to a method or function. +The utility registry works similarly, but for methods and functions, and with additional query argument `type`. diff --git a/packages/registry/docs/conf.py b/packages/registry/docs/conf.py new file mode 100644 index 0000000000..796fc4b620 --- /dev/null +++ b/packages/registry/docs/conf.py @@ -0,0 +1,297 @@ +# Configuration file for the Sphinx documentation builder. +# Plone Documentation build configuration file + + +# -- Path setup -------------------------------------------------------------- + +from datetime import datetime + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath(".")) + +import os +import json + + +# -- Project information ----------------------------------------------------- + +project = "@plone/registry documentation" +copyright = "Plone Foundation" +author = "Plone Community" +trademark_name = "Plone" +now = datetime.now() +year = str(now.year) + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +with open( + os.path.join(os.path.abspath("."), "../package.json"), "r" +) as package_json: + data = package_json.read() + +version_from_package_json = json.loads(data)["version"] + +if version_from_package_json: + # The short X.Y version. + version = version_from_package_json + # The full version, including alpha/beta/rc tags. + release = version_from_package_json +else: + version = "1.8.0" + release = "1.8.0" + + +# -- General configuration ---------------------------------------------------- + +# Add any paths that contain templates here, relative to this directory. +# templates_path = ["_templates"] + +# Add any Sphinx extension module names here, as strings. +# They can be extensions coming with Sphinx (named "sphinx.ext.*") +# or your custom ones. +extensions = [ + "myst_parser", + "sphinx.ext.intersphinx", + "sphinx.ext.todo", + "sphinx_copybutton", + "sphinxext.opengraph", +] + + +# If true, the Docutils Smart Quotes transform, originally based on SmartyPants +# (limited to English) and currently applying to many languages, will be used +# to convert quotes and dashes to typographically correct entities. +# Note to maintainers: setting this to `True` will cause contractions and +# hyphenated words to be marked as misspelled by spellchecker. +smartquotes = False + +# The name of the Pygments (syntax highlighting) style to use. +# pygments_style = "sphinx.pygments_styles.PyramidStyle" +pygments_style = "sphinx" + +# Options for the linkcheck builder +# Ignore localhost +linkcheck_ignore = [ + # TODO: Before release, clean up any links to ignore + r"http://127.0.0.1", + r"http://localhost", + # Ignore pages that require authentication + r"https://github.com/plone/volto/issues/new/choose", # requires auth + # Ignore github.com pages with anchors + r"https://github.com/.*#.*", + # Ignore other specific anchors +] +linkcheck_anchors = True +linkcheck_timeout = 5 +linkcheck_retries = 1 + +# The suffix of source filenames. +source_suffix = { + ".md": "markdown", + ".bugfix": "markdown", + ".breaking": "markdown", + ".documentation": "markdown", + ".feature": "markdown", + ".internal": "markdown", +} + +# The master toctree document. +master_doc = "index" + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. +exclude_patterns = [ +] + +suppress_warnings = [ + # "toc.excluded", # Suppress `WARNING: document isn't included in any toctree` + "toc.not_readable", # Suppress `WARNING: toctree contains reference to nonexisting document 'news*'` +] + +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +html_theme = "plone_sphinx_theme" +html_logo = "_static/logo.svg" +html_favicon = "_static/favicon.ico" +html_theme_options = { + "article_header_start": ["toggle-primary-sidebar"], + "extra_footer": """

    The text and illustrations in this website are licensed by the Plone Foundation under a Creative Commons Attribution 4.0 International license. Plone and the Plone® logo are registered trademarks of the Plone Foundation, registered in the United States and other countries. For guidelines on the permitted uses of the Plone trademarks, see https://plone.org/foundation/logo. All other trademarks are owned by their respective owners.

    +

    Pull request previews by Read the Docs.

    """, + "footer_end": ["version.html"], + "icon_links": [ + { + "name": "GitHub", + "url": "https://github.com/plone/volto", + "icon": "fa-brands fa-square-github", + "type": "fontawesome", + "attributes": { + "target": "_blank", + "rel": "noopener me", + "class": "nav-link custom-fancy-css" + } + }, + { + "name": "Mastodon", + "url": "https://plone.social/@plone", + "icon": "fa-brands fa-mastodon", + "type": "fontawesome", + "attributes": { + "target": "_blank", + "rel": "noopener me", + "class": "nav-link custom-fancy-css" + } + }, + { + "name": "X (formerly Twitter)", + "url": "https://x.com/plone", + "icon": "fa-brands fa-square-x-twitter", + "type": "fontawesome", + "attributes": { + "target": "_blank", + "rel": "noopener me", + "class": "nav-link custom-fancy-css" + } + }, + ], + "logo": { + "text": "@plone/registry Documentation", + }, + "navigation_with_keys": True, + "path_to_docs": "docs", + "repository_branch": "main", + "repository_url": "https://github.com/plone/volto/tree/main/packages/registry", + "search_bar_text": "Search", # TODO: Confirm usage of search_bar_text in plone-sphinx-theme + "use_edit_page_button": True, + "use_issues_button": True, + "use_repository_button": True, +} + +# Announce that we have an opensearch plugin +# https://www.sphinx-doc.org/en/master/usage/configuration.html#confval-html_use_opensearch +html_use_opensearch = "https://plone-registry.readthedocs.io/" # TODO: Confirm usage of opensearch in theme + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +html_title = "%(project)s v%(release)s" % {"project": project, "release": release} + +html_css_files = ["custom.css", ("print.css", {"media": "print"})] + +# If false, no index is generated. +html_use_index = True + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +html_title = "%(project)s v%(release)s" % {"project": project, "release": release} + +html_extra_path = [ + "robots.txt", +] + +html_static_path = [ + "_static", +] + + +# -- Options for MyST markdown conversion to HTML ----------------------------- + +# For more information see: +# https://myst-parser.readthedocs.io/en/latest/syntax/optional.html +myst_enable_extensions = [ + "deflist", # Support definition lists. + # https://myst-parser.readthedocs.io/en/latest/syntax/optional.html#definition-lists + "linkify", # Identify "bare" web URLs and add hyperlinks. + "colon_fence", # You can also use ::: delimiters to denote code fences,\ + # instead of ```. + "html_image", # For inline images. See https://myst-parser.readthedocs.io/en/latest/syntax/optional.html#html-images +] + + +# -- Intersphinx configuration ---------------------------------- + +# This extension can generate automatic links to the documentation of objects +# in other projects. Usage is simple: whenever Sphinx encounters a +# cross-reference that has no matching target in the current documentation set, +# it looks for targets in the documentation sets configured in +# intersphinx_mapping. A reference like :py:class:`zipfile.ZipFile` can then +# linkto the Python documentation for the ZipFile class, without you having to +# specify where it is located exactly. +# +# https://www.sphinx-doc.org/en/master/usage/extensions/intersphinx.html +# +intersphinx_mapping = { + "plone": ("https://6.docs.plone.org/", None), + "python": ("https://docs.python.org/3/", None), + "training": ("https://training.plone.org/", None), +} + + +# -- OpenGraph configuration ---------------------------------- + +ogp_site_url = "https://plone-registry.readthedocs.io/" +ogp_description_length = 200 +ogp_image = "https://plone-registry.readthedocs.io/en/latest/_static/Plone_logo_square.png" +ogp_site_name = "@plone/registry Documentation" +ogp_type = "website" +ogp_custom_meta_tags = [ + '', +] + + +# -- Options for sphinx.ext.todo ----------------------- +# See http://sphinx-doc.org/ext/todo.html#confval-todo_include_todos +todo_include_todos = True + + +# -- Options for HTML help output ------------------------------------------------- + +# Output file base name for HTML help builder. +htmlhelp_basename = "PloneRegistryDocumentation" + + +# -- Options for LaTeX output ------------------------------------------------- + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, author, documentclass [howto/manual]) +latex_documents = [ + ( + "index", + "PloneRegistryDocumentation.tex", + "@plone/registry Documentation", + "Plone Community", + "manual", + ), +] + +# The name of an image file (relative to this directory) to place at the top of +# the title page. +latex_logo = "_static/logo_2x.png" + + +# An extension that allows replacements for code blocks that +# are not supported in `rst_epilog` or other substitutions. +# https://stackoverflow.com/a/56328457/2214933 +def source_replace(app, docname, source): + result = source[0] + for key in app.config.source_replacements: + result = result.replace(key, app.config.source_replacements[key]) + source[0] = result + + +# Dict of replacements. +source_replacements = { + "{NVM_VERSION}": "0.39.5", +} + + +def setup(app): + app.add_config_value("source_replacements", {}, True) + app.connect("source-read", source_replace) diff --git a/packages/registry/docs/how-to-guides/access-registry.md b/packages/registry/docs/how-to-guides/access-registry.md new file mode 100644 index 0000000000..cbe6923633 --- /dev/null +++ b/packages/registry/docs/how-to-guides/access-registry.md @@ -0,0 +1,20 @@ +--- +myst: + html_meta: + "description": "How to access the configuration registry in @plone/registry" + "property=og:description": "How to access the configuration registry in @plone/registry" + "property=og:title": "Access the configuration registry" + "keywords": "@plone/registry, registry, configuration, guide" +--- + +# Access the configuration registry + +You can access the configuration registry as follows. + +```ts +import config from '@plone/registry' + +const blocksConfig = config.blocks.blocksConfig +``` + +This method assumes that either you previously created a `blocksConfig` key in `blocks` in your add-on, or another add-on sets it. diff --git a/packages/registry/docs/how-to-guides/instantiate-registry.md b/packages/registry/docs/how-to-guides/instantiate-registry.md new file mode 100644 index 0000000000..f915e983fe --- /dev/null +++ b/packages/registry/docs/how-to-guides/instantiate-registry.md @@ -0,0 +1,56 @@ +--- +myst: + html_meta: + "description": "How to instantiate the registry in @plone/registry" + "property=og:description": "How to instantiate the registry in @plone/registry" + "property=og:title": "Instantiate the registry" + "keywords": "@plone/registry, registry, instantiate" +--- + +# Instantiate the registry + +The registry is instantiated in the context of your app folder. +It gets your app folder path as argument. + +```js +import path from 'path'; +import { AddonRegistry } from '@plone/registry/addon-registry'; + +const appRootPath = path.resolve('.'); +const { registry } = AddonRegistry.init(appRootPath) +``` + +You have full access to the add-on registry API in the `registry` object. + +By default, you also get these objects after calling `init`. + +```js +const { registry, addons, theme, shadowAliases } = AddonRegistry.init(appRootPath) +``` + +This can be useful for configuring your build process. + + +## Initialization + +By default, the configuration registry is empty. +It only contains the base object keys which are required for it to work properly. +These are the keys present on initialization. +The optional keys are excluded. + +```ts +export type ConfigData = { + settings: SettingsConfig | Record; + blocks: BlocksConfig | Record; + views: ViewsConfig | Record; + widgets: WidgetsConfig | Record; + addonReducers?: AddonReducersConfig; + addonRoutes?: AddonRoutesConfig; + slots: SlotsConfig | Record; + components: ComponentsConfig | Record; + utilities: UtilitiesConfig | Record; + experimental?: ExperimentalConfig; +}; +``` + +In the context of a Volto app, the registry gets initialized by Volto by default. diff --git a/packages/registry/docs/how-to-guides/register-an-add-on.md b/packages/registry/docs/how-to-guides/register-an-add-on.md new file mode 100644 index 0000000000..874b35471d --- /dev/null +++ b/packages/registry/docs/how-to-guides/register-an-add-on.md @@ -0,0 +1,94 @@ +--- +myst: + html_meta: + "description": "How to register an add-on in @plone/registry" + "property=og:description": "How to register an add-on in @plone/registry" + "property=og:title": "Register an add-on" + "keywords": "@plone/registry, registry, add-on" +--- + +# Register an add-on + +You have two ways available to register an add-on in your app. +You can do so either through the `addons` key in your {file}`package.json` or by using a configuration file. + +```{note} +Using a configuration file is useful when you want to add some logic to the `addons` list, if you want it to be dynamic. +For example, you can make the list dynamic given an environment variable. +``` + + +## Via `addons` key in `package.json` + +The following code sample shows how to register your add-on in your app through the `addons` key in your {file}`package.json`. + +```json +{ + "name": "my-app-project", + "addons": [ + "acme-volto-foo-addon", + "@plone/some-addon", + "collective-another-volto-addon" + ] +} +``` + +The add-ons are registered in the order they are found in the `addons` key. +The last add-on takes precedence over the others. +This means that if you configure something in `acme-volto-foo-addon`, then the same thing later in `collective-another-volto-addon`, the latter configured thing will win and its configuration will be applied. + +All add-ons should set the value for the `main` entry module, such as `src/index.js`, in {file}`package.json`. +This function should have a signature of `config => config`. +That is, it should take the configuration registry object and return it, possibly mutated or changed. + +```ts +import type { ConfigType } from '@plone/registry' + +export default function applyConfig(config: ConfigType) { + return config +}; +``` + +The `addons` key ensures the add-on's main default export function is executed, being passed the configuration registry. + + +## Via a configuration file + +The configuration file can be provided via an environment variable. +You can use one of these two environment variables. + +- `REGISTRYCONFIG` +- `VOLTOCONFIG` + +The value of the environment variable must point to a file that exists relative to the app folder, that is, the one you pass to the instantiation of the add-on registry. +You can also pass the full path of the file. + +For example, if your configuration file is named {file}`my-add-on-registry-config.js` and is located at the root of your add-on package, you would set your environment variable as shown. + +```shell +set REGISTRYCONFIG="my-add-on-registry.config.js" +``` + +```{note} +This is useful when you want to provide different `addon` configuration files under different scenarios. +``` + +If the file that you specify in the environment variable exists, then `@plone/registry` uses it to configure your add-on. +If it does not exist, then `@plone/registry` looks for the configuration file in the following locations in the root of your app in order. +The first found configuration file wins. + +- {file}`registry.config.js` +- {file}`volto.config.js` + +This is an example of a configuration file. +You must define it in [CommonJS](https://en.wikipedia.org/wiki/CommonJS) format. + +```js +module.exports = { + addons: ['my-volto-config-addon'], +}; +``` + +If your app is in ESM (`"type": "module"` in {file}`package.json`), then you should use the `.cjs` suffix for the configuration file to mark it as a proper `CommonJS` file. + +If `@plone/registry` finds no configuration file, then it only relies on the configuration, if any, in the `addons` key in {file}`package.json`. diff --git a/packages/registry/docs/how-to-guides/register-and-retrieve-components.md b/packages/registry/docs/how-to-guides/register-and-retrieve-components.md new file mode 100644 index 0000000000..08e8623e0b --- /dev/null +++ b/packages/registry/docs/how-to-guides/register-and-retrieve-components.md @@ -0,0 +1,114 @@ +--- +myst: + html_meta: + "description": "How to register, retrieve, adapt, and load components in @plone/registry" + "property=og:description": "How to register, retrieve, adapt, and load components in @plone/registry" + "property=og:title": "Register and retrieve components" + "keywords": "@plone/registry, registry, register, retrieve, components" +--- + +# Register and retrieve components + +This section of the documentation describes how to register, retrieve, adapt, and load components. + + +## Register components by name + +You can register components by name, typically from an add-on or project configuration, using `config.registerComponent`. + +```js +import MyToolbarComponent from './MyToolbarComponent' + +config.registerComponent({ + name: 'Toolbar', + component: MyToolbarComponent, +}); +``` + + +## Retrieve a component from the component registry + +You can programmatically retrieve a component from the component registry using `config.getComponent`. + +```js +const Toolbar = config.getComponent('Toolbar').component +``` + +Alternatively, you can retrieve a component by using the convenience component `Component`, if you want to use it in JSX code directly. + +```jsx +import Component from '@plone/volto/components/theme/Component/Component'; + + +``` + +Note that you can pass `props` down to the retrieved component. + + +## Adapt the component + +You can register components, then retrieve them, given a list of modifiers using the `dependencies` array. + +```js +import MyTeaserNewsItemComponent from './MyTeaserNewsItemComponent' + +config.registerComponent({ + name: 'Teaser', + component: MyTeaserNewsItemComponent, + dependencies: ['News Item'], + }); +``` + +To retrieve the component, use `getComponent`. + +```js +config.getComponent({ + name: 'Teaser', + dependencies: ['News Item'], + }).component +``` + +If you have a single dependency, you can use a string instead of an array. + +You can have both, either with or without dependencies. + +```js +import MyTeaserDefaultComponent from './MyTeaserDefaultComponent' +import MyTeaserNewsItemComponent from './MyTeaserNewsItemComponent' + +config.registerComponent({ + name: 'Teaser', + component: MyTeaserDefaultComponent, + }); + +config.registerComponent({ + name: 'Teaser', + component: MyTeaserNewsItemComponent, + dependencies: 'News Item', + }); +``` + +After you register them, you can retrieve both or either of them, depending on your use case. +In the next example, given a content type value coming from the `content` prop, you can retrieve them. + +```jsx + +``` + + +## Lazy load components + +```{todo} +Test it properly. +``` + +You can lazy load the component in the registry, too, if you need it. + +```js +const MyTeaserDefaultComponent = lazy(()=> import(./MyTeaserDefaultComponent)) + +config.registerComponent({ + name: 'Teaser', + component: MyTeaserDefaultComponent, + }); +``` diff --git a/packages/registry/docs/how-to-guides/register-and-retrieve-utilities.md b/packages/registry/docs/how-to-guides/register-and-retrieve-utilities.md new file mode 100644 index 0000000000..d58fc92d4c --- /dev/null +++ b/packages/registry/docs/how-to-guides/register-and-retrieve-utilities.md @@ -0,0 +1,113 @@ +--- +myst: + html_meta: + "description": "How to register and retrieve utilities in @plone/registry" + "property=og:description": "How to register and retrieve utilities in @plone/registry" + "property=og:title": "Register and retrieve utilities" + "keywords": "@plone/registry, registry, utilities, register, retrieve" +--- + +# Register and retrieve utilities + +This section of the documentation describes how to register and retrieve utilities. + + +## Register utilities by `name` and `type` + +You can register a utility using `config.registerUtility` by using its specific `name` and `type` arguments. + +```js +config.registerUtility({ + name: 'url', + type: 'validator', + method: () => 'this is a simple validator utility', +}); +``` + +For utilities of the same `type`, you can register different `name` utilities. + +```js +config.registerUtility({ + name: 'url', + type: 'validator', + method: () => 'this is a simple URL validator utility', +}); + +config.registerUtility({ + name: 'email', + type: 'validator', + method: () => 'this is a simple email validator utility', +}); +``` + +However, if you register two utilities under the same `name`, then the latter will override the former. +Thus you can override existing utilities in your add-ons. + +```js +config.registerUtility({ + name: 'url', + type: 'validator', + method: () => 'this is a simple URL validator utility', +}); + +config.registerUtility({ + name: 'url', + type: 'validator', + method: () => 'this registered URL validator utility is the last defined, and therefore overrides all previous utilities with the same `name`', +}); +``` + + +## Register utilities using a `dependencies` object + +It is possible to register utilities using a `dependencies` object. +This is useful to further specify the utility. + +```js +config.registerUtility({ + name: 'email', + type: 'validator', + dependencies: { fieldType: 'email' }, + method: () => 'this is an email validator utility with dependencies for email', +}); +``` + + +## Retrieve a specific utility + +You can retrieve one specific utility using `config.getUtility`, given the `name` and `type`. + +```js +config.getUtility({ name: 'url', type: 'validator' }).method() +``` + +You can do the same using a `dependencies` object. + +```js +config.getUtility({ + name: 'email', + dependencies: { fieldType: 'string' }, + type: 'validator', +}).method() +``` + + +### Retrieve groups of utilities + +You can retrieve all utilities registered under the same `type`. + +```js +config.getUtilities({ type: 'validator' }) +``` + +You can do the same using a `dependencies` object. + +```js +config.getUtilities({ + type: 'validator', + dependencies: { fieldType: 'string' }, +}).length +``` + +This is useful when building pluggable systems, so you can query all the utilities present in the registry. +For example, retrieve all validator utilities with the `fieldType` of `string`. diff --git a/packages/registry/docs/how-to-guides/shadow-a-component.md b/packages/registry/docs/how-to-guides/shadow-a-component.md new file mode 100644 index 0000000000..90179a1f04 --- /dev/null +++ b/packages/registry/docs/how-to-guides/shadow-a-component.md @@ -0,0 +1,61 @@ +--- +myst: + html_meta: + "description": "How to shadow a component or module in @plone/registry" + "property=og:description": "How to shadow a component or module in @plone/registry" + "property=og:title": "Shadow a component or module" + "keywords": "@plone/registry, registry, shadow, component" +--- + +# Shadow a component or module + +Component or module shadowing is a technique that allows you to define an alternative module for a specific module. +You normally would want to override a module from another add-on. +This add-on should not be transpiled. + +This technique relies on the `resolve.alias` feature of the bundlers, so the module is effectively being replaced by the alternative one supplied. +You will need to modify some imports in the alternative module to comply with the new placement and convert relative imports to absolute ones. + +To override the component, first, you should identify the component you want to shadow in the package. +Then, replicate the same folder structure that the original component has in the source code and place it inside the `customizations` folder of your add-on. + +Start by using the name of the package you want to shadow. +If the package has a namespace, then use a folder to define it. + +To identify a component to shadow, you can use several approaches. +The primary method uses [React Developer Tools](https://chromewebstore.google.com/detail/react-developer-tools/fmkadmapgofadopljbjfkapdkoienihi). +You can inspect the app and find out the name of the component (the name +of the tag), then search for it in the source code. +Alternatively, you can browse the contents of the source package you want to shadow by searching for it inside {file}`node_modules` of your app folder. + + +## Example: customize the `Logo` resource + +To replace the `Logo` resource, your folder structure needs to match the folder structure of the package in the `customizations` folder. +The `Logo` resource is located in the `@plone/slots` package in the {file}`components/Logo/Logo.svg` file. +├── slots + +```text +node_modules +└── @plone + └── slots + └── components + └── Logo.svg +``` + +The structure inside your `customizations` of the component shadowing the original should be {file}`src/customizations/@plone/slots/components/Logo/Logo.svg`. + +```text +src +└── customizations + └── @plone + └── slots + └── components + └── Logo.svg +``` + +```{warning} +When upgrading add-ons in your project, it's important to review any shadowed components from the updated add-on. +Changes in the add-on's public API could potentially break your application. +Ensure that your shadowed components are updated to align with the new specifications of the original module. +``` diff --git a/packages/registry/docs/index.md b/packages/registry/docs/index.md new file mode 100644 index 0000000000..ad433cc9b6 --- /dev/null +++ b/packages/registry/docs/index.md @@ -0,0 +1,43 @@ +--- +myst: + html_meta: + "description": "@plone/registry provides support for building an add-on and configuration registry with infrastructure for JavaScript and TypeScript-based apps." + "property=og:description": "@plone/registry provides support for building an add-on and configuration registry with infrastructure for JavaScript and TypeScript-based apps." + "property=og:title": "@plone/registry" + "keywords": "@plone/registry, registry, add-on, configuration, component, utility, JavaScript, TypeScript, app" +--- + +# `@plone/registry` + +`@plone/registry` provides support for building an add-on and configuration registry with infrastructure for JavaScript and TypeScript-based apps. + +As a developer when you build an app, regardless of the framework and technologies used, it's a one-off app. +That means you have to build something that has very specific requirements, behavior, and look and feel. + +Sometimes you need to build something generic that is pluggable and extensible. +In the JavaScript and TypeScript ecosystem, this is often quite complex, and the existing frameworks do not provide the means to do this. +`@plone/registry` helps developers extend their apps in a pluggable way. + + +```{toctree} +:maxdepth: 1 +:hidden: +:caption: How-to guides +how-to-guides/instantiate-registry +how-to-guides/register-an-add-on +how-to-guides/access-registry +how-to-guides/register-and-retrieve-components +how-to-guides/register-and-retrieve-utilities +how-to-guides/shadow-a-component +``` + + +```{toctree} +:maxdepth: 1 +:hidden: +:caption: Conceptual guides +conceptual-guides/add-on-registry +conceptual-guides/configuration-registry +conceptual-guides/component-registry +conceptual-guides/utility-registry +``` diff --git a/packages/registry/docs/robots.txt b/packages/registry/docs/robots.txt new file mode 100644 index 0000000000..fa4599903a --- /dev/null +++ b/packages/registry/docs/robots.txt @@ -0,0 +1,8 @@ +# Disallow all user agents from the following directories and files +User-agent: * +Disallow: /_sources/ +Disallow: /.doctrees/ +Disallow: /*.txt$ +Disallow: /.buildinfo$ +Disallow: /objects.inv$ +Sitemap: https://plone-registry.readthedocs.io/sitemap.xml diff --git a/packages/registry/news/6399.breaking b/packages/registry/news/6399.breaking new file mode 100644 index 0000000000..d0315478f6 --- /dev/null +++ b/packages/registry/news/6399.breaking @@ -0,0 +1,6 @@ +Moved the package to ESM and refactored the add-on registry scripts to TypeScript. @sneridagh +Breaking: +- For maximum compatibility with CommonJS builds, the default exports have been moved to named exports. +- The modules affected are now built, and the import paths have changed, too. +- These changes force the modification in imports in a couple of files. +Please see the [Upgrade Guide](https://6.docs.plone.org/volto/upgrade-guide/index.html). diff --git a/packages/registry/news/6399.feature b/packages/registry/news/6399.feature new file mode 100644 index 0000000000..1a5f49ddbc --- /dev/null +++ b/packages/registry/news/6399.feature @@ -0,0 +1 @@ +Added an experimental Vite plugin. @sneridagh diff --git a/packages/registry/package.json b/packages/registry/package.json index 5b4d3e8284..78f14702d7 100644 --- a/packages/registry/package.json +++ b/packages/registry/package.json @@ -31,16 +31,36 @@ "publishConfig": { "access": "public" }, + "type": "module", "source": "src/index.ts", - "main": "dist/main.js", - "module": "dist/module.js", + "main": "dist/index.cjs", + "module": "dist/index.js", "types": "dist/types.d.ts", "exports": { - "./src/*": "./src/*.js", + "./src/*": "./src/*.cjs", + "./addon-registry": { + "require": "./dist/cjs/addon-registry.cjs", + "import": "./dist/esm/addon-registry.js", + "types": "./dist/esm/addon-registry.d.ts" + }, + "./create-addons-loader": { + "require": "./dist/cjs/create-addons-loader.cjs", + "import": "./dist/esm/create-addons-loader.js", + "types": "./dist/esm/create-addons-loader.d.ts" + }, + "./create-theme-loader": { + "require": "./dist/cjs/create-theme-loader.cjs", + "import": "./dist/esm/create-theme-loader.js", + "types": "./dist/esm/create-theme-loader.d.ts" + }, + "./vite-plugin": { + "import": "./vite-plugin.js", + "types": "./vite-plugin.d.ts" + }, ".": { "types": "./dist/types.d.ts", - "import": "./dist/module.js", - "require": "./dist/main.js" + "import": "./dist/index.js", + "require": "./dist/index.cjs" } }, "targets": { @@ -50,9 +70,12 @@ }, "scripts": { "watch": "parcel watch", - "build": "parcel build", - "build:force": "parcel build --no-cache", + "build": "parcel build && pnpm build:node:esm && pnpm build:node:cjs", + "build:force": "rm -rf dist && parcel build --no-cache && pnpm build:node:esm && pnpm build:node:cjs", + "build:node:esm": "tsc --project tsconfig.node.json || true", + "build:node:cjs": "tsc --project tsconfig.node.json --module commonjs --moduleResolution Node --outDir dist/cjs || true && make rename-to-cjs", "test": "vitest", + "test:debug": "vitest --inspect-brk --no-file-parallelism registry", "dry-release": "release-it --dry-run", "release": "release-it", "release-major-alpha": "release-it major --preRelease=alpha", @@ -71,20 +94,26 @@ "crypto-random-string": "3.2.0", "debug": "4.3.2", "dependency-graph": "0.10.0", - "glob": "7.1.6" + "glob": "^10.4.5", + "tmp": "0.2.1" }, "devDependencies": { "@parcel/packager-ts": "^2.12.0", "@parcel/transformer-typescript-types": "^2.12.0", "@plone/types": "workspace:*", + "@types/debug": "^4.1.12", + "@types/glob": "^8.1.0", + "@types/node": "^20", "@types/react": "^18", "@types/react-dom": "^18", + "@types/tmp": "^0.2.6", "parcel": "^2.12.0", "react": "^18.2.0", "react-dom": "^18.2.0", "release-it": "16.2.1", "tsconfig": "workspace:*", "typescript": "^5.6.3", + "vite": "^5.4.8", "vitest": "^2.1.3" } } diff --git a/packages/registry/src/addon-registry.js b/packages/registry/src/addon-registry/addon-registry.ts similarity index 65% rename from packages/registry/src/addon-registry.js rename to packages/registry/src/addon-registry/addon-registry.ts index 26ae57555c..576d439d4d 100644 --- a/packages/registry/src/addon-registry.js +++ b/packages/registry/src/addon-registry/addon-registry.ts @@ -1,64 +1,120 @@ /* eslint no-console: 0 */ -const glob = require('glob').sync; -const path = require('path'); -const fs = require('fs'); -const debug = require('debug')('shadowing'); -const { DepGraph } = require('dependency-graph'); - -function getPackageBasePath(base) { +import { globSync as glob } from 'glob'; +import path from 'path'; +import fs from 'fs'; +import _debug from 'debug'; +import { DepGraph } from 'dependency-graph'; + +const debug = _debug('shadowing'); + +export type Package = { + name: string; + version: string; + isPublishedPackage: boolean; + isRegisteredAddon: boolean; + modulePath: string; + packageJson: string; + basePath?: string; + tsConfigPaths?: [string, any] | null; + addons: Array; + razzleExtender?: string; + eslintExtender?: string; +}; +type VoltoConfigJS = { + addons: Array; + theme: string; +}; +type Aliases = Record; +type AliasesObject = { find: string; replacement: string }[]; +type CoreAddons = { [x: string]: { package: string } }; +type PackageJsonObject = { + type: 'module' | 'commonjs'; + addons: Array; + coreAddons: CoreAddons; + theme: string; + customizationPaths: string[]; +}; + +type flatAliases = Record; + +type AddonRegistryGet = { + /** The ordered list of addons */ + addons: Array; + /** The theme name */ + theme: string; + /** The customizations (shadows) aliases */ + shadowAliases: AliasesObject; + /** The add-ons aliases - Only for Volto add-ons for which code lives inside `src` */ + addonAliases: AliasesObject; +}; + +function getPackageBasePath(base: string) { while (!fs.existsSync(`${base}/package.json`)) { base = path.join(base, '../'); } return path.resolve(base); } -function fromEntries(pairs) { - const res = {}; +function fromEntries(pairs: [string, any][]) { + const res: { [key: string]: any } = {}; pairs.forEach((p) => { res[p[0]] = p[1]; }); return res; } -function buildDependencyGraph(addons, extractDependency) { +function flatAliasesToObject(flatAliases: flatAliases): AliasesObject { + return Object.entries(flatAliases).map(([key, value]) => ({ + find: key, + replacement: value, + })); +} + +function buildDependencyGraph( + addons: Array, + extractDependency: (name: string) => Array, +) { // getAddonsLoaderChain - const graph = new DepGraph({ circular: true }); + const graph = new DepGraph({ circular: true }); graph.addNode('@root'); const seen = ['@root']; - const stack = [['@root', addons]]; + const stack: Array<[string, Array]> = [['@root', addons]]; while (stack.length > 0) { - const [pkgName, addons] = stack.shift(); - if (!graph.hasNode(pkgName)) { - graph.addNode(pkgName, []); - } - - if (!seen.includes(pkgName)) { - stack.push([pkgName, extractDependency(pkgName)]); - seen.push(pkgName); - } - - addons.forEach((loaderString) => { - const [name, extra] = loaderString.split(':'); - if (!graph.hasNode(name)) { - graph.addNode(name, []); + const [pkgName, addons] = stack.shift() || []; + if (pkgName && addons) { + if (!graph.hasNode(pkgName)) { + graph.addNode(pkgName, []); } - const data = graph.getNodeData(name) || []; - if (extra) { - extra.split(',').forEach((funcName) => { - if (!data.includes(funcName)) data.push(funcName); - }); + if (!seen.includes(pkgName)) { + stack.push([pkgName, extractDependency(pkgName)]); + seen.push(pkgName); } - graph.setNodeData(name, data); - graph.addDependency(pkgName, name); + addons.forEach((loaderString) => { + const [name, extra] = loaderString.split(':'); + if (!graph.hasNode(name)) { + graph.addNode(name, []); + } - if (!seen.includes(name)) { - stack.push([name, extractDependency(name)]); - } - }); + const data = graph.getNodeData(name) || []; + if (extra) { + extra.split(',').forEach((funcName) => { + // @ts-expect-error TODO: fix this + if (!data.includes(funcName)) data.push(funcName); + }); + } + graph.setNodeData(name, data); + + graph.addDependency(pkgName, name); + + if (!seen.includes(name)) { + stack.push([name, extractDependency(name)]); + } + }); + } } return graph; @@ -68,7 +124,7 @@ function buildDependencyGraph(addons, extractDependency) { * Given an addons loader string, it generates an addons loader string with * a resolved chain of dependencies */ -function getAddonsLoaderChain(graph) { +function getAddonsLoaderChain(graph: DepGraph) { return graph.dependenciesOf('@root').map((name) => { const extras = graph.getNodeData(name) || [].join(','); return extras.length ? `${name}:${extras}` : name; @@ -92,26 +148,29 @@ function getAddonsLoaderChain(graph) { * addons to customize the webpack configuration) * */ -class AddonConfigurationRegistry { - constructor(projectRootPath) { - const packageJson = (this.packageJson = require( - path.join(projectRootPath, 'package.json'), +class AddonRegistry { + public packageJson: PackageJsonObject; + public voltoConfigJS: VoltoConfigJS; + public projectRootPath: string; + public isVoltoProject: boolean; + public voltoPath: string; + public coreAddons: CoreAddons; + public resultantMergedAddons: Array; + public addonNames: Array; + public packages: Record; + public customizations: any; + public theme: any; + public dependencyGraph: DepGraph; + + constructor(projectRootPath: string) { + const packageJson = (this.packageJson = JSON.parse( + fs.readFileSync(path.join(projectRootPath, 'package.json'), { + encoding: 'utf-8', + }), )); - this.voltoConfigJS = {}; + // Loads the dynamic config, if any - if (process.env.VOLTOCONFIG) { - if (fs.existsSync(path.resolve(process.env.VOLTOCONFIG))) { - const voltoConfigPath = path.resolve(process.env.VOLTOCONFIG); - console.log(`Using volto.config.js in: ${voltoConfigPath}`); - this.voltoConfigJS = require(voltoConfigPath); - } - } else if (fs.existsSync(path.join(projectRootPath, 'volto.config.js'))) { - this.voltoConfigJS = require( - path.join(projectRootPath, 'volto.config.js'), - ); - } else { - this.voltoConfigJS = {}; - } + this.voltoConfigJS = this.getRegistryConfig(projectRootPath); this.projectRootPath = projectRootPath; this.isVoltoProject = packageJson.name !== '@plone/volto'; @@ -123,15 +182,21 @@ class AddonConfigurationRegistry { this.coreAddons = packageJson.name === '@plone/volto' ? packageJson.coreAddons || {} - : require(`${getPackageBasePath(this.voltoPath)}/package.json`) - .coreAddons || {}; + : JSON.parse( + fs.readFileSync( + `${getPackageBasePath(this.voltoPath)}/package.json`, + 'utf-8', + ), + ).coreAddons || {}; this.resultantMergedAddons = [ ...(packageJson.addons || []), ...(this.voltoConfigJS.addons || []), ]; - this.addonNames = this.resultantMergedAddons.map((s) => s.split(':')[0]); + this.addonNames = this.resultantMergedAddons.map( + (s: string) => s.split(':')[0], + ); this.packages = {}; this.customizations = new Map(); @@ -161,22 +226,77 @@ class AddonConfigurationRegistry { this.initAddonExtenders(); } + public get(): AddonRegistryGet { + return { + addons: this.getAddonDependencies(), + theme: this.theme, + addonAliases: flatAliasesToObject(this.getResolveAliases()), + shadowAliases: flatAliasesToObject(this.getAddonCustomizationPaths()), + }; + } + + public static init(projectRootPath: string) { + const registry = new AddonRegistry(projectRootPath); + return { + registry, + addons: registry.getAddonDependencies(), + theme: registry.theme, + shadowAliases: flatAliasesToObject(registry.getAddonCustomizationPaths()), + }; + } + + isESM = () => this.packageJson.type === 'module'; + + getRegistryConfig(projectRootPath: string) { + let config: VoltoConfigJS = { + addons: [], + theme: '', + }; + const CONFIGMAP = { + REGISTRYCONFIG: this.isESM() + ? 'registry.config.cjs' + : 'registry.config.js', + VOLTOCONFIG: this.isESM() ? 'volto.config.cjs' : 'volto.config.js', + }; + + for (const key in CONFIGMAP) { + if (process.env[key]) { + const resolvedPath = path.resolve(process.env[key]); + if (fs.existsSync(resolvedPath)) { + const voltoConfigPath = resolvedPath; + console.log(`Using configuration file in: ${voltoConfigPath}`); + config = require(voltoConfigPath); + break; + } + } else if (fs.existsSync(path.join(projectRootPath, CONFIGMAP[key]))) { + config = require(path.join(projectRootPath, CONFIGMAP[key])); + break; + } + } + + return config; + } + /** * Gets the `tsconfig.json` `compilerOptions.baseUrl` and `compilerOptions.paths` * Returns a tuple `[baseUrl, pathsConfig]` * */ - getTSConfigPaths(rootPath = this.projectRootPath) { - let configFile; + getTSConfigPaths( + rootPath = this.projectRootPath, + ): [string, Record | undefined] { + let configFile: string | undefined; if (fs.existsSync(`${rootPath}/tsconfig.json`)) configFile = `${rootPath}/tsconfig.json`; else if (fs.existsSync(`${rootPath}/jsconfig.json`)) configFile = `${rootPath}/jsconfig.json`; - let pathsConfig; - let baseUrl; + let pathsConfig: Record | undefined; + let baseUrl: string = ''; if (configFile) { - const jsConfig = require(configFile).compilerOptions; + const jsConfig = JSON.parse( + fs.readFileSync(configFile, 'utf-8'), + ).compilerOptions; pathsConfig = jsConfig.paths; baseUrl = jsConfig.baseUrl; } @@ -209,28 +329,31 @@ class AddonConfigurationRegistry { * Given an add-on name, it registers it as a development package * */ - initDevelopmentPackage(name) { + initDevelopmentPackage(name: string) { const [baseUrl, pathsConfig] = this.getTSConfigPaths(); - const packagePath = `${this.projectRootPath}/${baseUrl}/${pathsConfig[name][0]}`; - const packageJsonPath = `${getPackageBasePath(packagePath)}/package.json`; - const innerAddons = require(packageJsonPath).addons || []; - const innerAddonsNormalized = innerAddons.map((s) => s.split(':')[0]); - if (this.addonNames.includes(name) && innerAddonsNormalized.length > 0) { - innerAddonsNormalized.forEach((name) => { - if (!this.addonNames.includes(name)) this.addonNames.push(name); - }); - } - const pkg = { - modulePath: packagePath, - packageJson: packageJsonPath, - version: require(packageJsonPath).version, - isPublishedPackage: false, - isRegisteredAddon: this.addonNames.includes(name), - name, - addons: require(packageJsonPath).addons || [], - }; + if (pathsConfig && pathsConfig.hasOwnProperty(name)) { + const packagePath = `${this.projectRootPath}/${baseUrl}/${pathsConfig[name][0]}`; + const packageJsonPath = `${getPackageBasePath(packagePath)}/package.json`; + const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8')); + const innerAddons: Array = packageJson.addons || []; + const innerAddonsNormalized = innerAddons.map((s) => s.split(':')[0]); + if (this.addonNames.includes(name) && innerAddonsNormalized.length > 0) { + innerAddonsNormalized.forEach((name) => { + if (!this.addonNames.includes(name)) this.addonNames.push(name); + }); + } + const pkg = { + modulePath: packagePath, + packageJson: packageJsonPath, + version: packageJson.version, + isPublishedPackage: false, + isRegisteredAddon: this.addonNames.includes(name), + name, + addons: packageJson.addons || [], + }; - this.packages[name] = Object.assign(this.packages[name] || {}, pkg); + this.packages[name] = Object.assign(this.packages[name] || {}, pkg); + } } /** @@ -243,11 +366,11 @@ class AddonConfigurationRegistry { this.addonNames.forEach(this.initPublishedPackage.bind(this)); } - initPublishedPackage(name) { + initPublishedPackage(name: string) { // I am in the paths list, if so, register it as a development package // instead than a published one const [, pathsConfig] = this.getTSConfigPaths(); - if (pathsConfig.hasOwnProperty(name)) { + if (pathsConfig && pathsConfig.hasOwnProperty(name)) { return this.initDevelopmentPackage(name); } @@ -255,10 +378,10 @@ class AddonConfigurationRegistry { const resolved = require.resolve(name, { paths: [this.projectRootPath] }); const basePath = getPackageBasePath(resolved); const packageJson = path.join(basePath, 'package.json'); - const pkg = require(packageJson); + const pkg = JSON.parse(fs.readFileSync(packageJson, 'utf-8')); const main = pkg.main || 'src/index.js'; const modulePath = path.dirname(require.resolve(`${basePath}/${main}`)); - const innerAddons = pkg.addons || []; + const innerAddons: Array = pkg.addons || []; const innerAddonsNormalized = innerAddons.map((s) => s.split(':')[0]); if (this.addonNames.includes(name) && innerAddonsNormalized.length > 0) { innerAddonsNormalized.forEach((name) => { @@ -290,7 +413,7 @@ class AddonConfigurationRegistry { } // An add-on from the ADDONS env var can only be a published one - initAddonFromEnvVar(name) { + initAddonFromEnvVar(name: string) { const normalizedAddonName = name.split(':')[0]; this.initPublishedPackage(normalizedAddonName); } @@ -341,7 +464,10 @@ class AddonConfigurationRegistry { } getCustomThemeAddons() { - const customThemeAddonsInfo = { + const customThemeAddonsInfo: { + variables: string[]; + main: string[]; + } = { variables: [], main: [], }; @@ -372,11 +498,11 @@ class AddonConfigurationRegistry { /** * Returns a list of aliases given the defined paths in `tsconfig.json` */ - getAliasesFromTSConfig(basePath, tsConfig) { + getAliasesFromTSConfig(basePath: string, tsConfig: [string, any]) { const [baseUrl, options] = tsConfig; const fullPathsPath = baseUrl ? `${basePath}/${baseUrl}` : basePath; - let aliases = {}; + const aliases: { [x: string]: string } = {}; Object.keys(options || {}).forEach((item) => { const name = item.replace(/\/\*$/, ''); // webpack5 allows arrays here, fix later @@ -397,12 +523,10 @@ class AddonConfigurationRegistry { * defined in the `tsconfig.json` files of the add-ons. */ getResolveAliases() { - const pairs = [ - ...Object.keys(this.packages).map((o) => [ - o, - this.packages[o].modulePath, - ]), - ]; + const pairs: [string, string][] = Object.keys(this.packages).map((o) => [ + o, + this.packages[o].modulePath, + ]); let aliasesFromTSPaths = {}; Object.keys(this.packages).forEach((o) => { @@ -410,7 +534,7 @@ class AddonConfigurationRegistry { aliasesFromTSPaths = { ...aliasesFromTSPaths, ...this.getAliasesFromTSConfig( - this.packages[o].basePath, + this.packages[o].basePath || '', this.packages[o].tsConfigPaths, ), }; @@ -435,21 +559,25 @@ class AddonConfigurationRegistry { * convention, we use a folder called "volto" inside customizations folder * and separate folder for each addon, identified by its addon (package) name. */ - getCustomizationPaths(packageJson, rootPath) { - const aliases = {}; + getCustomizationPaths(packageJson: PackageJsonObject, rootPath: string) { + const aliases: Aliases = {}; let { customizationPaths } = packageJson; if (!customizationPaths) { - customizationPaths = ['src/customizations']; + customizationPaths = ['src/customizations', 'customizations']; } customizationPaths.forEach((customizationPath) => { customizationPath = customizationPath.endsWith('/') ? customizationPath.slice(0, customizationPath.length - 1) : customizationPath; const base = path.join(rootPath, customizationPath); - const reg = []; - - // All registered addon packages (in tsconfig.json/jsconfig.json and package.json:addons) - // can be customized + const reg: Array<{ + customPath: string; + sourcePath: string; + name: string; + }> = []; + + // All registered addon packages (in tsconfig.json/jsconfig.json and + // package.json:addons) can be customized by other addons Object.values(this.packages).forEach((addon) => { const { name, modulePath } = addon; if (fs.existsSync(path.join(base, name))) { @@ -491,12 +619,14 @@ class AddonConfigurationRegistry { glob( `${customPath}/**/*.*(svg|png|jpg|jpeg|gif|ico|less|js|jsx|ts|tsx)`, ).map((filename) => { - function changeFileExtension(filePath) { + function changeFileExtension(filePath: string) { // Extract the current file extension - const currentExtension = filePath.split('.').pop(); + const currentExtension = filePath.split('.').pop() || ''; // Define the mapping between file extensions - const extensionMapping = { + const extensionMapping: { + [key: string]: string; + } = { jsx: 'tsx', tsx: 'jsx', js: 'ts', @@ -523,7 +653,7 @@ class AddonConfigurationRegistry { * * @param {*} filePath */ - function simpleSwapFileExtension(filePath) { + function simpleSwapFileExtension(filePath: string) { // Extract the current file extension const currentExtension = filePath.split('.').pop(); return filePath.replace(`.${currentExtension}`, '.jsx'); @@ -569,12 +699,12 @@ class AddonConfigurationRegistry { * `addons:volto-addonA,volto-addonB` */ getAddonCustomizationPaths() { - let aliases = {}; + let aliases: Aliases = {}; this.getAddons().forEach((addon) => { aliases = { ...aliases, ...this.getCustomizationPaths( - require(addon.packageJson), + JSON.parse(fs.readFileSync(addon.packageJson, 'utf-8')), getPackageBasePath(addon.modulePath), ), }; @@ -586,9 +716,13 @@ class AddonConfigurationRegistry { * Allow packages from addons set in env vars to customize Volto and other addons. * * Same as the above one, but specific for Volto addons coming from env vars + * + * This is no longer necessary in the pnpm setup, as all valid packages have to be + * released or declared as a workspace + * */ getAddonsFromEnvVarCustomizationPaths() { - let aliases = {}; + let aliases: Aliases = {}; if (process.env.ADDONS) { process.env.ADDONS.split(';').forEach((addon) => { const normalizedAddonName = addon.split(':')[0]; @@ -598,7 +732,10 @@ class AddonConfigurationRegistry { const packageJson = path.join(basePath, 'package.json'); aliases = { ...aliases, - ...this.getCustomizationPaths(require(packageJson), basePath), + ...this.getCustomizationPaths( + JSON.parse(fs.readFileSync(packageJson, 'utf-8')), + basePath, + ), }; } }); @@ -626,11 +763,11 @@ class AddonConfigurationRegistry { "@root" [color = red fillcolor=yellow style=filled] `; - let queue = ['@root']; - let name; + const queue = ['@root']; + let name: string; while (queue.length > 0) { - name = queue.pop(); + name = queue.pop() || ''; const deps = this.dependencyGraph.directDependenciesOf(name); for (let i = 0; i < deps.length; i++) { @@ -648,6 +785,4 @@ class AddonConfigurationRegistry { } } -module.exports = AddonConfigurationRegistry; -module.exports.getAddonsLoaderChain = getAddonsLoaderChain; -module.exports.buildDependencyGraph = buildDependencyGraph; +export { AddonRegistry, getAddonsLoaderChain, buildDependencyGraph }; diff --git a/packages/registry/src/create-addons-loader.js b/packages/registry/src/addon-registry/create-addons-loader.ts similarity index 66% rename from packages/registry/src/create-addons-loader.js rename to packages/registry/src/addon-registry/create-addons-loader.ts index 7eb5f55757..f03349693f 100644 --- a/packages/registry/src/create-addons-loader.js +++ b/packages/registry/src/addon-registry/create-addons-loader.ts @@ -1,13 +1,16 @@ -const fs = require('fs'); -const tmp = require('tmp'); -const cryptoRandomString = require('crypto-random-string'); +import fs from 'fs'; +import path from 'path'; +import tmp from 'tmp'; +import cryptoRandomString from 'crypto-random-string'; +import type { Package } from './addon-registry'; -const titleCase = (w) => w.slice(0, 1).toUpperCase() + w.slice(1, w.length); +const titleCase = (w: string) => + w.slice(0, 1).toUpperCase() + w.slice(1, w.length); /* * Transforms a package name to javascript variable name */ -function nameFromPackage(name) { +function nameFromPackage(name: string) { name = name.replace(/[@~./\\:\s]/gi, '') || cryptoRandomString({ length: 10, characters: 'abcdefghijk' }); @@ -21,19 +24,26 @@ function nameFromPackage(name) { * Creates a static file with code necessary to load the addons configuration * */ -function getAddonsLoaderCode(addons = [], addonsInfo) { +function getAddonsLoaderCode( + addons: string[], + addonsInfo: Package[], + loadProjectConfig?: boolean, +) { let buf = `/* This file is autogenerated. Don't change it directly. Instead, change the "addons" setting in your package.json file. */ -const projectConfigLoader = require('@root/config'); `; - let configsToLoad = [], + if (loadProjectConfig) { + buf += `const projectConfigLoader = require('@root/config');\n`; + } + + let configsToLoad: string[] = [], counter = 0; addons.forEach((addonConfigString) => { - let extras = []; + let extras: string[] | string[][] = []; // TODO: Improve this typing const addonConfigLoadInfo = addonConfigString.split(':'); const pkgName = addonConfigLoadInfo[0]; const defaultImport = nameFromPackage(pkgName); @@ -41,7 +51,6 @@ const projectConfigLoader = require('@root/config'); extras = addonConfigLoadInfo[1].split(','); } extras = extras.map((name) => [name, `${name}${counter++}`]); - const line = `import ${defaultImport}${ extras.length ? `, { ${extras @@ -77,8 +86,9 @@ const safeWrapper = (func) => (config) => { return res; } +${loadProjectConfig ? '' : 'const projectConfigLoader = false;'} const projectConfig = (config) => { - return typeof projectConfigLoader.default === "function" ? projectConfigLoader.default(config) : config; + return projectConfigLoader && typeof projectConfigLoader.default === "function" ? projectConfigLoader.default(config) : config; } const load = (config) => { @@ -96,21 +106,27 @@ export default load; return buf; } -module.exports = (addons, addonsInfo, { tempInProject } = {}) => { +export function createAddonsLoader( + addons: string[], + addonsInfo: Package[], + { + tempInProject, + loadProjectConfig = false, + }: { tempInProject?: boolean; loadProjectConfig?: boolean } = {}, +) { // Some frameworks do not allow to load code from outside the project. // the `tempInProject` allows to place it inside - let addonsLoaderPath; + let addonsLoaderPath: string; if (tempInProject) { - const path = require('path'); addonsLoaderPath = path.join(process.cwd(), 'src', '.addons-loader.js'); } else { addonsLoaderPath = tmp.tmpNameSync({ postfix: '.js' }); } - const code = getAddonsLoaderCode(addons, addonsInfo); + const code = getAddonsLoaderCode(addons, addonsInfo, loadProjectConfig); + // @ts-expect-error No clue why it's complaining fs.writeFileSync(addonsLoaderPath, Buffer.from(code)); return addonsLoaderPath; -}; +} -module.exports.getAddonsLoaderCode = getAddonsLoaderCode; -module.exports.nameFromPackage = nameFromPackage; +export { getAddonsLoaderCode, nameFromPackage }; diff --git a/packages/registry/src/create-theme-addons-loader.js b/packages/registry/src/addon-registry/create-theme-loader.ts similarity index 50% rename from packages/registry/src/create-theme-addons-loader.js rename to packages/registry/src/addon-registry/create-theme-loader.ts index 6b46257744..d5f4dbbc24 100644 --- a/packages/registry/src/create-theme-addons-loader.js +++ b/packages/registry/src/addon-registry/create-theme-loader.ts @@ -1,13 +1,14 @@ -const fs = require('fs'); -const tmp = require('tmp'); -const cryptoRandomString = require('crypto-random-string'); +import fs from 'fs'; +import tmp from 'tmp'; +import cryptoRandomString from 'crypto-random-string'; -const titleCase = (w) => w.slice(0, 1).toUpperCase() + w.slice(1, w.length); +const titleCase = (w: string) => + w.slice(0, 1).toUpperCase() + w.slice(1, w.length); /* * Transforms a package name to javascript variable name */ -function nameFromPackage(name) { +function nameFromPackage(name: string) { name = name.replace(/[@~./\\:\s]/gi, '') || cryptoRandomString({ length: 10, characters: 'abcdefghijk' }); @@ -21,7 +22,7 @@ function nameFromPackage(name) { * Creates a static file with code necessary to load the addons configuration * */ -function getAddonsLoaderCode(name, customThemeAddons = []) { +function getThemeLoaderCode(name, customThemeAddons = []) { let buf = `/* This file is autogenerated. Don't change it directly. Add a ./theme/_${name}.scss in your add-on to load your theme customizations in the current theme. @@ -37,42 +38,27 @@ Add a ./theme/_${name}.scss in your add-on to load your theme customizations in return buf; } -module.exports = ({ main, variables }) => { - // const addonsThemeLoaderVariablesPath = path.join( - // process.cwd(), - // 'src', - // '_variables.scss', - // ); - // const addonsThemeLoaderMainPath = path.join( - // process.cwd(), - // 'src', - // '_main.scss', - // ); - - // const addonsThemeLoaderVariablesPath = path.join( - // process.cwd(), - // 'src', - // '_variables.scss', - // ); - // const addonsThemeLoaderMainPath = path.join( - // process.cwd(), - // 'src', - // '_main.scss', - // ); - +export function createThemeAddonsLoader({ + main, + variables, +}: { + main: string[]; + variables: string[]; +}) { const addonsThemeLoaderVariablesPath = tmp.tmpNameSync({ postfix: '.scss' }); const addonsThemeLoaderMainPath = tmp.tmpNameSync({ postfix: '.scss' }); fs.writeFileSync( addonsThemeLoaderVariablesPath, - new Buffer.from(getAddonsLoaderCode('variables', variables)), + //@ts-expect-error No clue why this is erroring + new Buffer.from(getThemeLoaderCode('variables', variables)), ); fs.writeFileSync( addonsThemeLoaderMainPath, - new Buffer.from(getAddonsLoaderCode('main', main)), + //@ts-expect-error No clue why this is erroring + new Buffer.from(getThemeLoaderCode('main', main)), ); return [addonsThemeLoaderVariablesPath, addonsThemeLoaderMainPath]; -}; +} -module.exports.getAddonsLoaderCode = getAddonsLoaderCode; -module.exports.nameFromPackage = nameFromPackage; +export { getThemeLoaderCode, nameFromPackage }; diff --git a/packages/registry/src/index.ts b/packages/registry/src/index.ts index 7f229a66a8..5394254281 100644 --- a/packages/registry/src/index.ts +++ b/packages/registry/src/index.ts @@ -16,16 +16,16 @@ import type { } from '@plone/types'; export type ConfigData = { - settings: SettingsConfig; - blocks: BlocksConfig; - views: ViewsConfig; - widgets: WidgetsConfig; - addonReducers: AddonReducersConfig; - addonRoutes: AddonRoutesConfig; - slots: SlotsConfig; - components: ComponentsConfig; - utilities: UtilitiesConfig; - experimental: ExperimentalConfig; + settings: SettingsConfig | Record; + blocks: BlocksConfig | Record; + views: ViewsConfig | Record; + widgets: WidgetsConfig | Record; + addonReducers?: AddonReducersConfig; + addonRoutes?: AddonRoutesConfig; + slots: SlotsConfig | Record; + components: ComponentsConfig | Record; + utilities: UtilitiesConfig | Record; + experimental?: ExperimentalConfig; }; type GetComponentResult = { @@ -44,7 +44,15 @@ class Config { constructor() { if (!Config.instance) { - this._data = {}; + this._data = { + settings: {}, + blocks: {}, + views: {}, + widgets: {}, + slots: {}, + components: {}, + utilities: {}, + }; Config.instance = this; } @@ -205,7 +213,10 @@ class Config { return; } const { slots, data } = this._data.slots[name]; - const slotComponents = []; + const slotComponents: { + component: SlotComponent['component']; + name: string; + }[] = []; // For all enabled slots for (const slotName of slots) { // For all registered components for that slot, inversed, since the last one registered wins diff --git a/packages/registry/tsconfig.json b/packages/registry/tsconfig.json index c25bedd978..1319106020 100644 --- a/packages/registry/tsconfig.json +++ b/packages/registry/tsconfig.json @@ -17,7 +17,7 @@ "jsx": "react-jsx", "paths": {} }, - "include": ["src", "src/**/*.js"], + "include": ["src/index.ts", "src/**/*.js", "src/**/*.cjs"], "exclude": [ "node_modules", "build", diff --git a/packages/registry/tsconfig.node.json b/packages/registry/tsconfig.node.json new file mode 100644 index 0000000000..a25380a557 --- /dev/null +++ b/packages/registry/tsconfig.node.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + /* Base Options: */ + "esModuleInterop": true, + "skipLibCheck": true, + "target": "es2022", + "allowJs": true, + "resolveJsonModule": true, + "moduleDetection": "force", + "isolatedModules": true, + /* Strictness */ + "strict": true, + "noUncheckedIndexedAccess": true, + /* If transpiling with TypeScript: */ + "moduleResolution": "NodeNext", + "module": "NodeNext", + "outDir": "dist/esm", + "sourceMap": true, + /* If your code doesn't run in the DOM: */ + "lib": ["es2022"], + "declaration": true + }, + "include": ["src/addon-registry"] +} diff --git a/packages/registry/vite-plugin.d.ts b/packages/registry/vite-plugin.d.ts new file mode 100644 index 0000000000..2af076c87a --- /dev/null +++ b/packages/registry/vite-plugin.d.ts @@ -0,0 +1,5 @@ +import * as vite from 'vite'; + +declare function PloneRegistryVitePlugin(): vite.Plugin; + +export { PloneRegistryVitePlugin }; diff --git a/packages/registry/vite-plugin.js b/packages/registry/vite-plugin.js new file mode 100644 index 0000000000..6ec97dbe64 --- /dev/null +++ b/packages/registry/vite-plugin.js @@ -0,0 +1,60 @@ +import path from 'path'; +import { AddonRegistry } from '@plone/registry/addon-registry'; +import { createAddonsLoader } from '@plone/registry/create-addons-loader'; +import { createThemeAddonsLoader } from '@plone/registry/create-theme-loader'; + +export const PloneRegistryVitePlugin = () => { + const projectRootPath = path.resolve('.'); + const { registry, shadowAliases } = AddonRegistry.init(projectRootPath); + + const addonsLoaderPath = createAddonsLoader( + registry.getAddonDependencies(), + registry.getAddons(), + ); + + const [addonsThemeLoaderVariablesPath, addonsThemeLoaderMainPath] = + createThemeAddonsLoader(registry.getCustomThemeAddons()); + + const addOns = Object.keys(registry.packages); + + return { + name: 'plone-registry', + enforce: 'pre', + config: () => ({ + ssr: { + optimizeDeps: { + exclude: addOns, + }, + }, + esbuild: { + supported: { + 'top-level-await': true, //browsers can handle top-level-await features + }, + }, + optimizeDeps: { + exclude: addOns, + }, + resolve: { + alias: [ + ...shadowAliases, + // Remove in case that we have addons aliases (Volto add-ons which need the `src` path hack) + // ...addonAliases, + ...(registry.theme + ? // Load the theme aliases from the theme config + [ + { + find: 'addonsThemeCustomizationsVariables', + replacement: addonsThemeLoaderVariablesPath, + }, + { + find: 'addonsThemeCustomizationsMain', + replacement: addonsThemeLoaderMainPath, + }, + ] + : []), + { find: 'load-plone-registry-addons', replacement: addonsLoaderPath }, + ], + }, + }), + }; +}; diff --git a/packages/scripts/i18n.cjs b/packages/scripts/i18n.cjs index bd4a1a1f87..439c860e67 100755 --- a/packages/scripts/i18n.cjs +++ b/packages/scripts/i18n.cjs @@ -276,10 +276,25 @@ function main({ addonMode }) { console.log('Synchronizing messages to po files...'); syncPoByPot(); if (!addonMode) { - let AddonConfigurationRegistry; + let AddonRegistry, AddonConfigurationRegistry, registry; try { // Detect where is the registry (if we are in Volto 18 or above for either core and projects) if ( + fs.existsSync( + path.join( + projectRootPath, + '/node_modules/@plone/registry/dist/cjs/addon-registry.cjs', + ), + ) + ) { + AddonRegistry = require( + path.join( + projectRootPath, + '/node_modules/@plone/registry/dist/cjs/addon-registry.cjs', + ), + ).AddonRegistry; + // Detect where is the registry (if we are in Volto 18-alpha.46 or below) + } else if ( fs.existsSync( path.join( projectRootPath, @@ -324,7 +339,11 @@ function main({ addonMode }) { process.exit(); } console.log('Generating the language JSON files...'); - const registry = new AddonConfigurationRegistry(projectRootPath); + if (AddonConfigurationRegistry) { + registry = new AddonConfigurationRegistry(projectRootPath); + } else if (AddonRegistry) { + registry = AddonRegistry.init(projectRootPath).registry; + } poToJson({ registry, addonMode }); } console.log('done!'); diff --git a/packages/scripts/news/6399.feature b/packages/scripts/news/6399.feature new file mode 100644 index 0000000000..5558c340af --- /dev/null +++ b/packages/scripts/news/6399.feature @@ -0,0 +1 @@ +Support for the new `@plone/registry` ESM format. @sneridagh diff --git a/packages/volto/.eslintrc b/packages/volto/.eslintrc index 4e24e2badd..9b98fbf685 100644 --- a/packages/volto/.eslintrc +++ b/packages/volto/.eslintrc @@ -37,7 +37,6 @@ "map": [ ["@plone/volto", "./src"], ["@plone/volto-slate", "../volto-slate/src"], - ["@plone/registry", "../registry/src"], ["@plone/types", "../types"], ["@package", "./src"], ["@root", "./src"], diff --git a/packages/volto/.storybook/main.js b/packages/volto/.storybook/main.js index c745006748..36cb9a3017 100644 --- a/packages/volto/.storybook/main.js +++ b/packages/volto/.storybook/main.js @@ -102,8 +102,8 @@ module.exports = { [], defaultRazzleOptions, ); - const AddonConfigurationRegistry = require('@plone/registry/src/addon-registry'); - const registry = new AddonConfigurationRegistry(projectRootPath); + const { AddonRegistry } = require('@plone/registry/addon-registry'); + const { registry } = AddonRegistry.init(projectRootPath); config = lessPlugin({ registry, }).modifyWebpackConfig({ diff --git a/packages/volto/__tests__/addon-registry-project.test.js b/packages/volto/__tests__/addon-registry-project.test.js index 08d4bad832..fad432bc88 100644 --- a/packages/volto/__tests__/addon-registry-project.test.js +++ b/packages/volto/__tests__/addon-registry-project.test.js @@ -1,9 +1,11 @@ -const path = require('path'); -const AddonConfigurationRegistry = require('../../registry/src/addon-registry'); -const { buildDependencyGraph, getAddonsLoaderChain } = - AddonConfigurationRegistry; +import path from 'path'; +import { + AddonRegistry, + buildDependencyGraph, + getAddonsLoaderChain, +} from '@plone/registry/addon-registry'; -describe('AddonConfigurationRegistry - Project', () => { +describe('AddonRegistry - Project', () => { jest.mock( `${path.join( __dirname, @@ -19,14 +21,14 @@ describe('AddonConfigurationRegistry - Project', () => { it('works in a mock project directory', () => { const base = path.join(__dirname, 'fixtures', 'test-volto-project'); - const reg = new AddonConfigurationRegistry(base); + const { registry } = AddonRegistry.init(base); const voltoPath = `${base}/node_modules/@plone/volto`; - expect(reg.projectRootPath).toStrictEqual(base); - expect(reg.voltoPath).toStrictEqual(voltoPath); + expect(registry.projectRootPath).toStrictEqual(base); + expect(registry.voltoPath).toStrictEqual(voltoPath); - expect(reg.addonNames).toStrictEqual([ + expect(registry.addonNames).toStrictEqual([ 'test-addon', 'test-released-addon', 'test-released-source-addon', @@ -35,7 +37,7 @@ describe('AddonConfigurationRegistry - Project', () => { 'test-released-unmentioned', ]); - expect(reg.packages).toEqual({ + expect(registry.packages).toEqual({ 'test-addon': { isPublishedPackage: false, modulePath: `${base}/addons/test-addon/src`, @@ -102,8 +104,8 @@ describe('AddonConfigurationRegistry - Project', () => { it('provides aliases for addons', () => { const base = path.join(__dirname, 'fixtures', 'test-volto-project'); - const reg = new AddonConfigurationRegistry(base); - expect(reg.getResolveAliases()).toStrictEqual({ + const { registry } = AddonRegistry.init(base); + expect(registry.getResolveAliases()).toStrictEqual({ 'my-volto-config-addon': `${base}/addons/my-volto-config-addon/src`, 'test-addon': `${base}/addons/test-addon/src`, 'test-released-addon': `${base}/node_modules/test-released-addon`, @@ -115,14 +117,14 @@ describe('AddonConfigurationRegistry - Project', () => { it('provides addon extenders', () => { const base = path.join(__dirname, 'fixtures', 'test-volto-project'); - const reg = new AddonConfigurationRegistry(base); - expect(reg.getAddonExtenders().length).toBe(1); + const { registry } = AddonRegistry.init(base); + expect(registry.getAddonExtenders().length).toBe(1); }); it('provides a list of addon records ordered by initial package declaration', () => { const base = path.join(__dirname, 'fixtures', 'test-volto-project'); - const reg = new AddonConfigurationRegistry(base); - const addons = reg.getAddons(); + const { registry } = AddonRegistry.init(base); + const addons = registry.getAddons(); expect(addons.map((a) => a.name)).toStrictEqual([ 'test-released-unmentioned', 'test-released-dummy', @@ -135,8 +137,8 @@ describe('AddonConfigurationRegistry - Project', () => { it('provides customization paths declared in a Volto project', () => { const base = path.join(__dirname, 'fixtures', 'test-volto-project'); - const reg = new AddonConfigurationRegistry(base); - expect(reg.getProjectCustomizationPaths()).toStrictEqual({ + const { registry } = AddonRegistry.init(base); + expect(registry.getProjectCustomizationPaths()).toStrictEqual({ '@plone/volto/LanguageSwitcher': `${base}/src/customizations/LanguageSwitcher.js`, '@plone/volto/TSComponent': `${base}/src/customizations/TSComponent.jsx`, '@plone/volto/client': `${base}/src/customizations/client.js`, @@ -148,8 +150,8 @@ describe('AddonConfigurationRegistry - Project', () => { it('provides customization paths declared in addons', () => { const base = path.join(__dirname, 'fixtures', 'test-volto-project'); - const reg = new AddonConfigurationRegistry(base); - expect(reg.getAddonCustomizationPaths()).toStrictEqual({ + const { registry } = AddonRegistry.init(base); + expect(registry.getAddonCustomizationPaths()).toStrictEqual({ '@plone/volto/LanguageSwitcher': `${base}/node_modules/test-released-source-addon/src/customizations/LanguageSwitcher.js`, '@plone/volto/TSComponent': `${base}/node_modules/test-released-source-addon/src/customizations/TSComponent.jsx`, '@plone/volto/client': `${base}/node_modules/test-released-source-addon/src/customizations/client.js`, @@ -231,9 +233,11 @@ describe('Addon via env var - Released addon', () => { it('addons can be specified on the fly using ADDONS env var - Released addon', () => { const base = path.join(__dirname, 'fixtures', 'test-volto-project'); - const reg = new AddonConfigurationRegistry(base); + const { registry } = AddonRegistry.init(base); expect( - Object.keys(reg.packages).includes('test-released-via-addons-env-var'), + Object.keys(registry.packages).includes( + 'test-released-via-addons-env-var', + ), ).toBe(true); }); }); @@ -255,9 +259,9 @@ describe('Addon via env var - local packages folder addon', () => { it('addons can be specified on the fly using ADDONS env var - local packages folder addon', () => { const base = path.join(__dirname, 'fixtures', 'test-volto-project'); - const reg = new AddonConfigurationRegistry(base); + const { registry } = AddonRegistry.init(base); expect( - Object.keys(reg.packages).includes( + Object.keys(registry.packages).includes( 'test-local-packages-via-addons-env-var', ), ).toBe(true); diff --git a/packages/volto/__tests__/addon-registry-volto.test.js b/packages/volto/__tests__/addon-registry-volto.test.js index 5bea088c21..79fc58af0d 100644 --- a/packages/volto/__tests__/addon-registry-volto.test.js +++ b/packages/volto/__tests__/addon-registry-volto.test.js @@ -1,14 +1,14 @@ -const path = require('path'); -const AddonConfigurationRegistry = require('../../registry/src/addon-registry'); +import path from 'path'; +import { AddonRegistry } from '@plone/registry/addon-registry'; -describe('AddonConfigurationRegistry - Volto', () => { +describe('AddonRegistry - Volto', () => { it('works in Volto', () => { const base = path.join(__dirname, '..'); - const reg = new AddonConfigurationRegistry(base); - expect(reg.projectRootPath).toStrictEqual(base); + const { registry } = AddonRegistry.init(base); + expect(registry.projectRootPath).toStrictEqual(base); // TODO: rename initPackagesFolder to proper name after the refactor - // expect(reg.addonNames).toStrictEqual(['@plone/volto-slate']); - expect(reg.packages['@plone/volto-slate'].name).toStrictEqual( + // expect(registry.addonNames).toStrictEqual(['@plone/volto-slate']); + expect(registry.packages['@plone/volto-slate'].name).toStrictEqual( '@plone/volto-slate', ); }); diff --git a/packages/volto/__tests__/create-addons-loader.test.js b/packages/volto/__tests__/create-addons-loader.test.js index 570fa10a18..dfe9d174cb 100644 --- a/packages/volto/__tests__/create-addons-loader.test.js +++ b/packages/volto/__tests__/create-addons-loader.test.js @@ -1,11 +1,51 @@ -const fs = require('fs'); -const transform = require('@babel/core').transform; - -const getLoader = require('../../registry/src/create-addons-loader'); +import fs from 'fs'; +import { transform } from '@babel/core'; +import { + createAddonsLoader, + getAddonsLoaderCode, + nameFromPackage, +} from '@plone/registry/create-addons-loader'; describe('create-addons-loader code generation', () => { - test('no addon creates simple loader', () => { - const code = getLoader.getAddonsLoaderCode([]); + test('no addon creates simple loader, default = no loadProjectConfig', () => { + const code = getAddonsLoaderCode([]); + expect(code).toBe(`/* +This file is autogenerated. Don't change it directly. +Instead, change the "addons" setting in your package.json file. +*/ + + +const addonsInfo = {}; +export { addonsInfo }; + +const safeWrapper = (func) => (config) => { + const res = func(config); + if (typeof res === 'undefined') { + throw new Error("Configuration function doesn't return config"); + } + return res; +} + +const projectConfigLoader = false; +const projectConfig = (config) => { + return projectConfigLoader && typeof projectConfigLoader.default === "function" ? projectConfigLoader.default(config) : config; +} + +const load = (config) => { + const addonLoaders = []; + if(!addonLoaders.every((el) => typeof el === "function")) { + throw new TypeError( + 'Each addon has to provide a function applying its configuration to the projects configuration.', + ); + } + return projectConfig(addonLoaders.reduce((acc, apply) => safeWrapper(apply)(acc), config)); +}; +export default load; +`); + }); + + test('no addon creates simple loader, loadProjectConfig set to true', () => { + const code = getAddonsLoaderCode([], {}, true); expect(code).toBe(`/* This file is autogenerated. Don't change it directly. Instead, change the "addons" setting in your package.json file. @@ -24,8 +64,9 @@ const safeWrapper = (func) => (config) => { return res; } + const projectConfig = (config) => { - return typeof projectConfigLoader.default === "function" ? projectConfigLoader.default(config) : config; + return projectConfigLoader && typeof projectConfigLoader.default === "function" ? projectConfigLoader.default(config) : config; } const load = (config) => { @@ -42,17 +83,14 @@ export default load; }); test('one addon creates loader', () => { - const code = getLoader.getAddonsLoaderCode(['volto-addon1']); + const code = getAddonsLoaderCode(['volto-addon1']); expect(code.indexOf("import voltoAddon1 from 'volto-addon1';") > 0).toBe( true, ); }); test('two addons create loaders', () => { - const code = getLoader.getAddonsLoaderCode([ - 'volto-addon1', - 'volto-addon2', - ]); + const code = getAddonsLoaderCode(['volto-addon1', 'volto-addon2']); expect( code.indexOf(` import voltoAddon1 from 'volto-addon1'; @@ -61,7 +99,7 @@ import voltoAddon2 from 'volto-addon2';`) > 0, }); test('one addons plus one extra creates loader', () => { - const code = getLoader.getAddonsLoaderCode(['volto-addon1:loadExtra1']); + const code = getAddonsLoaderCode(['volto-addon1:loadExtra1']); expect( code.indexOf(` import voltoAddon1, { loadExtra1 as loadExtra10 } from 'volto-addon1'; @@ -70,9 +108,7 @@ import voltoAddon1, { loadExtra1 as loadExtra10 } from 'volto-addon1'; }); test('one addons plus two extras creates loader', () => { - const code = getLoader.getAddonsLoaderCode([ - 'volto-addon1:loadExtra1,loadExtra2', - ]); + const code = getAddonsLoaderCode(['volto-addon1:loadExtra1,loadExtra2']); expect( code.indexOf(` import voltoAddon1, { loadExtra1 as loadExtra10, loadExtra2 as loadExtra21 } from 'volto-addon1'; @@ -81,7 +117,7 @@ import voltoAddon1, { loadExtra1 as loadExtra10, loadExtra2 as loadExtra21 } fro }); test('two addons plus extras creates loader', () => { - const code = getLoader.getAddonsLoaderCode([ + const code = getAddonsLoaderCode([ 'volto-addon1:loadExtra1,loadExtra2', 'volto-addon2:loadExtra3,loadExtra4', ]); @@ -95,7 +131,7 @@ import voltoAddon2, { loadExtra3 as loadExtra32, loadExtra4 as loadExtra43 } fro }); describe('create-addons-loader default name generation', () => { - const getName = getLoader.nameFromPackage; + const getName = nameFromPackage; test('passing a simple word returns a word', () => { expect(getName('something')).toBe('something'); @@ -149,7 +185,7 @@ function makeAddonLoader(addons, load = true) { : require.resolve(name), ); - const loaderPath = getLoader(addons); + const loaderPath = createAddonsLoader(addons); transpile(loaderPath); if (load) { diff --git a/packages/volto/__tests__/webpack-relative-resolver.test.js b/packages/volto/__tests__/webpack-relative-resolver.test.js index 429946a216..cc91dbfb4f 100644 --- a/packages/volto/__tests__/webpack-relative-resolver.test.js +++ b/packages/volto/__tests__/webpack-relative-resolver.test.js @@ -1,10 +1,10 @@ const path = require('path'); -const AddonConfigurationRegistry = require('../../registry/src/addon-registry'); +const { AddonRegistry } = require('@plone/registry/addon-registry'); const WebpackRelativeResolver = require('../../volto/webpack-plugins/webpack-relative-resolver'); const base = path.join(__dirname, '..'); const makeRegistry = () => { - const registry = new AddonConfigurationRegistry(base); + const { registry } = AddonRegistry.init(base); registry.packages = { '@plone/volto-addon': { modulePath: '/somewhere/volto-addon/src', diff --git a/packages/volto/news/6399.internal b/packages/volto/news/6399.internal new file mode 100644 index 0000000000..363ce2c2a7 --- /dev/null +++ b/packages/volto/news/6399.internal @@ -0,0 +1 @@ +Adapt `@plone/registry` as an ESM module, and fix its imports. @sneridagh diff --git a/packages/volto/package.json b/packages/volto/package.json index ac4b17141d..2de2443dd7 100644 --- a/packages/volto/package.json +++ b/packages/volto/package.json @@ -85,6 +85,8 @@ "@plone/volto/babel": "/babel.js", "@plone/volto/(.*)$": "/src/$1", "@plone/volto-slate/(.*)$": "/../volto-slate/src/$1", + "@plone/registry/addon-registry$": "/node_modules/@plone/registry/dist/esm/addon-registry.js", + "@plone/registry/create-addons-loader$": "/node_modules/@plone/registry/dist/esm/create-addons-loader.js", "@plone/registry": "/../registry/src", "@plone/registry/(.*)$": "/../registry/src/$1", "@plone/volto": "/src/index.js", @@ -280,11 +282,11 @@ "@babel/plugin-syntax-export-namespace-from": "7.8.3", "@babel/runtime": "7.20.6", "@babel/types": "7.20.5", - "@fiverr/afterbuild-webpack-plugin": "^1.0.0", - "@jest/globals": "^29.7.0", "@dnd-kit/core": "6.0.8", "@dnd-kit/sortable": "7.0.2", "@dnd-kit/utilities": "3.2.2", + "@fiverr/afterbuild-webpack-plugin": "^1.0.0", + "@jest/globals": "^29.7.0", "@loadable/babel-plugin": "5.13.2", "@loadable/webpack-plugin": "5.15.2", "@plone/types": "workspace:*", diff --git a/packages/volto/razzle.config.js b/packages/volto/razzle.config.js index b2ec16d7f7..a37df657ac 100644 --- a/packages/volto/razzle.config.js +++ b/packages/volto/razzle.config.js @@ -8,9 +8,11 @@ const fs = require('fs'); const RootResolverPlugin = require('./webpack-plugins/webpack-root-resolver'); const RelativeResolverPlugin = require('./webpack-plugins/webpack-relative-resolver'); const { poToJson } = require('@plone/scripts/i18n.cjs'); -const createAddonsLoader = require('@plone/registry/src/create-addons-loader'); -const createThemeAddonsLoader = require('@plone/registry/src/create-theme-addons-loader'); -const AddonConfigurationRegistry = require('@plone/registry/src/addon-registry'); +const { createAddonsLoader } = require('@plone/registry/create-addons-loader'); +const { + createThemeAddonsLoader, +} = require('@plone/registry/create-theme-loader'); +const { AddonRegistry } = require('@plone/registry/addon-registry'); const CircularDependencyPlugin = require('circular-dependency-plugin'); const TerserPlugin = require('terser-webpack-plugin'); const CssMinimizerPlugin = require('css-minimizer-webpack-plugin'); @@ -23,8 +25,7 @@ const projectRootPath = path.resolve('.'); const languages = require('./src/constants/Languages.cjs'); const packageJson = require(path.join(projectRootPath, 'package.json')); - -const registry = new AddonConfigurationRegistry(projectRootPath); +const { registry } = AddonRegistry.init(projectRootPath); const defaultModify = ({ env: { target, dev }, @@ -290,6 +291,8 @@ const defaultModify = ({ const addonsLoaderPath = createAddonsLoader( registry.getAddonDependencies(), registry.getAddons(), + // The load of the project config is deprecated and will be removed in Volto 19. + { loadProjectConfig: true }, ); config.resolve.plugins = [ diff --git a/packages/volto/src/express-middleware/static.js b/packages/volto/src/express-middleware/static.js index 258af2136e..5b648b09f0 100644 --- a/packages/volto/src/express-middleware/static.js +++ b/packages/volto/src/express-middleware/static.js @@ -1,10 +1,10 @@ import express from 'express'; import path from 'path'; -import AddonConfigurationRegistry from '@plone/registry/src/addon-registry'; +import { AddonRegistry } from '@plone/registry/addon-registry'; import config from '@plone/volto/registry'; const projectRootPath = path.resolve('.'); -const registry = new AddonConfigurationRegistry(projectRootPath); +const { registry } = AddonRegistry.init(projectRootPath); const staticDirectory = () => { if (process.env.BUILD_DIR) { diff --git a/patches/jest-resolve@26.6.2.patch b/patches/jest-resolve@26.6.2.patch new file mode 100644 index 0000000000000000000000000000000000000000..20c5d96a80e2dcd5dd0e79f5007c8316473cfadb GIT binary patch literal 7680 zcmeHMO>^5e5Ea`TGVCSC9yf=^QY1nA5WkX1qqx$+Gq%&Ql4)m}RwW70qQj6b0Xgk7 z{b`;4r2d621lX3W#L2Cl4t9oIXn_TmPfsMFN6Vss;qbH+kdDZ7zL<-qWsqIB?V7!X zqO2IaX($8Nal-M~E^Equ1?Llukic)ix;kOA})?Nu^HFotHSWb`W8(%TG6O@MLG<0jhc2|AXVpkwJR zh^1Gz^ghK}SAZ+PI)d-5${hQ|l~1=vn9p9}&9f&Uc()}85m zx{sHnpRGF=C*wcssBGW_=M803tj#;_gG`iASFRN)6v6uSkDlPm}VHuf_&p`jbZ z5zWF>sv#aBZsJov%JSIF$B8%gC_MkP}6 z@I7x3L0`HAg%8N9lyf*?ys0i&3%}a{Q1Wk3xjAa+s$yM~YS100Z&*+D0<=u5+8VlY ztTeGKIaxI4qHJnTmgz=1hX)Vrp&Hh82CyjkKH??HT1`(VE7DaZdRyyYPG9GIdeXah zS4r136E4zL@b5~o?C#a5Iz8I!$&&Q+@WFyM>LI);b9R|dDpsG0We-hGq{@W*3WJhA ztICw`LZ`;{9!vknd--z%mrW+^bZJh-L72FqQ?LNZ5@l{4T=*yUTB}YqwkS%!>xD3w?Bv zq*<}5b4d@xyB4f%&QI7ctFmQN_4Rj~>`c+?;mC#@X(V9w{kOA|gQMB;i)V+6qvz9? zhqF06fgkqXHtlQHF2u5BDdl@VBB&~3|K-8qi-Y5h!BTLXGtre4Tqss_dzYLe^5=2I zM6PK1^rPblE|#aF`@Z^mYLZ9rJUe5#Ag|ePynEg@IpdsUc#kOSQzTL<$_vK#dV09z z5J6oOfzh;sCtt(;(NAlv>a=<_8WF*`(7juEw^oBR|JY^UdN~6dBxmjG@9)O%_p&0q GHT(m=dE%e| literal 0 HcmV?d00001 diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5ce225d6be..f081099b4b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,11 @@ overrides: '@pmmmwh/react-refresh-webpack-plugin': 0.5.11 react-refresh: 0.14.0 +patchedDependencies: + jest-resolve@26.6.2: + hash: tmr5fnfjpir3crfu6ze44v7tue + path: patches/jest-resolve@26.6.2.patch + importers: .: @@ -479,7 +484,7 @@ importers: version: 3.11.11(react@18.2.0) '@storybook/test': specifier: ^8.0.4 - version: 8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(vitest@2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) + version: 8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.12.7))(vitest@2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) clsx: specifier: ^2.1.1 version: 2.1.1 @@ -522,7 +527,7 @@ importers: version: 8.0.8(@types/react@18.2.79)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/addon-interactions': specifier: ^8.0.4 - version: 8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(vitest@2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) + version: 8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.12.7))(vitest@2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) '@storybook/addon-links': specifier: ^8.0.4 version: 8.0.8(react@18.2.0) @@ -546,7 +551,7 @@ importers: version: 8.0.8(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@testing-library/jest-dom': specifier: 6.4.2 - version: 6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.12)(vitest@2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) + version: 6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.12.7))(vitest@2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) '@testing-library/react': specifier: 14.2.1 version: 14.2.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -822,8 +827,11 @@ importers: specifier: 0.10.0 version: 0.10.0 glob: - specifier: 7.1.6 - version: 7.1.6 + specifier: ^10.4.5 + version: 10.4.5 + tmp: + specifier: 0.2.1 + version: 0.2.1 devDependencies: '@parcel/packager-ts': specifier: ^2.12.0 @@ -834,12 +842,24 @@ importers: '@plone/types': specifier: workspace:* version: link:../types + '@types/debug': + specifier: ^4.1.12 + version: 4.1.12 + '@types/glob': + specifier: ^8.1.0 + version: 8.1.0 + '@types/node': + specifier: ^20 + version: 20.12.7 '@types/react': specifier: ^18 version: 18.2.79 '@types/react-dom': specifier: ^18 version: 18.2.25 + '@types/tmp': + specifier: ^0.2.6 + version: 0.2.6 parcel: specifier: ^2.12.0 version: 2.12.0(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.6.3) @@ -858,6 +878,9 @@ importers: typescript: specifier: ^5.6.3 version: 5.6.3 + vite: + specifier: ^5.4.8 + version: 5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) vitest: specifier: ^2.1.3 version: 2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) @@ -1715,7 +1738,7 @@ importers: version: 10.0.1(cypress@13.13.2) '@testing-library/jest-dom': specifier: 6.4.2 - version: 6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.12)(vitest@2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) + version: 6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.12.7))(vitest@2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) '@testing-library/react': specifier: 12.1.5 version: 12.1.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -3595,10 +3618,23 @@ packages: resolution: {integrity: sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==} engines: {node: '>= 10.14.2'} + '@jest/console@29.7.0': + resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/core@26.6.3': resolution: {integrity: sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==} engines: {node: '>= 10.14.2'} + '@jest/core@29.7.0': + resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + '@jest/environment@26.6.2': resolution: {integrity: sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==} engines: {node: '>= 10.14.2'} @@ -3635,6 +3671,15 @@ packages: resolution: {integrity: sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==} engines: {node: '>= 10.14.2'} + '@jest/reporters@29.7.0': + resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + '@jest/schemas@29.6.3': resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -3643,14 +3688,26 @@ packages: resolution: {integrity: sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==} engines: {node: '>= 10.14.2'} + '@jest/source-map@29.6.3': + resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/test-result@26.6.2': resolution: {integrity: sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==} engines: {node: '>= 10.14.2'} + '@jest/test-result@29.7.0': + resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/test-sequencer@26.6.3': resolution: {integrity: sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==} engines: {node: '>= 10.14.2'} + '@jest/test-sequencer@29.7.0': + resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/transform@26.6.2': resolution: {integrity: sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==} engines: {node: '>= 10.14.2'} @@ -6259,6 +6316,9 @@ packages: '@types/glob@7.2.0': resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} + '@types/glob@8.1.0': + resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==} + '@types/graceful-fs@4.1.9': resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} @@ -6473,6 +6533,9 @@ packages: '@types/testing-library__react@9.1.3': resolution: {integrity: sha512-iCdNPKU3IsYwRK9JieSYAiX0+aYDXOGAmrC/3/M7AqqSDKnWWVv07X+Zk1uFSL7cMTUYzv4lQRfohucEocn5/w==} + '@types/tmp@0.2.6': + resolution: {integrity: sha512-chhaNf2oKHlRkDGt+tiKE2Z5aJ6qalm7Z9rlLdBwmOiAAf09YQvvoLXjWK4HWPF1xU/fqvMgfNfpVoBscA/tKA==} + '@types/unist@2.0.10': resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} @@ -7314,6 +7377,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + babel-jest@29.7.0: + resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + babel-loader@8.3.0: resolution: {integrity: sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==} engines: {node: '>= 8.9'} @@ -7349,6 +7418,10 @@ packages: resolution: {integrity: sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==} engines: {node: '>= 10.14.2'} + babel-plugin-jest-hoist@29.6.3: + resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + babel-plugin-lodash@3.3.4: resolution: {integrity: sha512-yDZLjK7TCkWl1gpBeBGmuaDIFhZKmkoL+Cu2MUUjv5VxUZx/z7tBGBCBcQs5RI1Bkz5LLmNdjx7paOyQtMovyg==} @@ -7410,6 +7483,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + babel-preset-jest@29.6.3: + resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + babel-preset-razzle@4.2.17: resolution: {integrity: sha512-Pg0yFCn2uTRBKjdj2pu61JWMcokVdxWNmpeBC2W+fNJ3JFyYP379TMIMmRi84g61snAzmwzwIlKMlVsVZT1IiA==} @@ -8304,6 +8383,11 @@ packages: resolution: {integrity: sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==} engines: {node: '>= 14'} + create-jest@29.7.0: + resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + croner@8.1.2: resolution: {integrity: sha512-ypfPFcAXHuAZRCzo3vJL6ltENzniTjwe/qsLleH1V2/7SRDjgvRQyrLmumFTLmjFax4IuSxfGXEn79fozXcJog==} engines: {node: '>=18.0'} @@ -8647,6 +8731,14 @@ packages: dedent@0.7.0: resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} + dedent@1.5.3: + resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + deep-copy@1.4.2: resolution: {integrity: sha512-VxZwQ/1+WGQPl5nE67uLhh7OqdrmqI1OazrraO9Bbw/M8Bt6Mol/RxzDA6N6ZgRXpsG/W9PgUj8E1LHHBEq2GQ==} engines: {node: '>=4.0.0'} @@ -9007,6 +9099,10 @@ packages: electron-to-chromium@1.5.41: resolution: {integrity: sha512-dfdv/2xNjX0P8Vzme4cfzHqnPm5xsZXwsolTYr0eyW18IUmNyG08vL+fttvinTfhKfIKdRoqkDIC9e9iWQCNYQ==} + emittery@0.13.1: + resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} + engines: {node: '>=12'} + emittery@0.7.2: resolution: {integrity: sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==} engines: {node: '>=10'} @@ -9686,10 +9782,6 @@ packages: resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==} engines: {node: '>=0.10.0'} - fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} - fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} @@ -10074,9 +10166,8 @@ packages: engines: {node: '>=16 || 14 >=14.17'} hasBin: true - glob@10.3.12: - resolution: {integrity: sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==} - engines: {node: '>=16 || 14 >=14.17'} + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true glob@7.1.6: @@ -10084,6 +10175,7 @@ packages: glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported glob@8.1.0: resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} @@ -11134,6 +11226,10 @@ packages: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} + istanbul-lib-instrument@6.0.3: + resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} + engines: {node: '>=10'} + istanbul-lib-report@3.0.1: resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} engines: {node: '>=10'} @@ -11163,6 +11259,9 @@ packages: resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} engines: {node: '>=14'} + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + jake@10.8.7: resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} engines: {node: '>=10'} @@ -11179,11 +11278,29 @@ packages: resolution: {integrity: sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==} engines: {node: '>= 10.14.2'} + jest-changed-files@29.7.0: + resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-circus@29.7.0: + resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-cli@26.6.3: resolution: {integrity: sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==} engines: {node: '>= 10.14.2'} hasBin: true + jest-cli@29.7.0: + resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + jest-config@26.6.3: resolution: {integrity: sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==} engines: {node: '>= 10.14.2'} @@ -11193,6 +11310,18 @@ packages: ts-node: optional: true + jest-config@29.7.0: + resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@types/node': '*' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true + jest-diff@26.6.2: resolution: {integrity: sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==} engines: {node: '>= 10.14.2'} @@ -11205,10 +11334,18 @@ packages: resolution: {integrity: sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==} engines: {node: '>= 10.14.2'} + jest-docblock@29.7.0: + resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-each@26.6.2: resolution: {integrity: sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==} engines: {node: '>= 10.14.2'} + jest-each@29.7.0: + resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-environment-jsdom@26.6.2: resolution: {integrity: sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==} engines: {node: '>= 10.14.2'} @@ -11217,6 +11354,10 @@ packages: resolution: {integrity: sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==} engines: {node: '>= 10.14.2'} + jest-environment-node@29.7.0: + resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-file@1.0.0: resolution: {integrity: sha512-QqcbPCfpVCxixoF0gia825AGBGXYWVi4cQpLsXBQVxkWswnZ39XHpT490NvTMtokY6v6BM+vw8rlhtjORabplA==} @@ -11244,6 +11385,10 @@ packages: resolution: {integrity: sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==} engines: {node: '>= 10.14.2'} + jest-leak-detector@29.7.0: + resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-matcher-utils@26.6.2: resolution: {integrity: sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==} engines: {node: '>= 10.14.2'} @@ -11293,19 +11438,35 @@ packages: resolution: {integrity: sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==} engines: {node: '>= 10.14.2'} + jest-resolve-dependencies@29.7.0: + resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-resolve@26.6.2: resolution: {integrity: sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==} engines: {node: '>= 10.14.2'} + jest-resolve@29.7.0: + resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-runner@26.6.3: resolution: {integrity: sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==} engines: {node: '>= 10.14.2'} + jest-runner@29.7.0: + resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-runtime@26.6.3: resolution: {integrity: sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==} engines: {node: '>= 10.14.2'} hasBin: true + jest-runtime@29.7.0: + resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-serializer@26.6.2: resolution: {integrity: sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==} engines: {node: '>= 10.14.2'} @@ -11330,10 +11491,18 @@ packages: resolution: {integrity: sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==} engines: {node: '>= 10.14.2'} + jest-validate@29.7.0: + resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-watcher@26.6.2: resolution: {integrity: sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==} engines: {node: '>= 10.14.2'} + jest-watcher@29.7.0: + resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-worker@25.5.0: resolution: {integrity: sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw==} engines: {node: '>= 8.3'} @@ -11355,6 +11524,16 @@ packages: engines: {node: '>= 10.14.2'} hasBin: true + jest@29.7.0: + resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + jiti@1.21.0: resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} hasBin: true @@ -12546,8 +12725,8 @@ packages: resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} engines: {node: '>=8'} - minipass@7.0.4: - resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} minizlib@2.1.2: @@ -13191,6 +13370,9 @@ packages: resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} engines: {node: '>= 14'} + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + package-json@6.5.0: resolution: {integrity: sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==} engines: {node: '>=8'} @@ -13300,9 +13482,9 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - path-scurry@1.10.2: - resolution: {integrity: sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==} - engines: {node: '>=16 || 14 >=14.17'} + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} path-to-regexp@0.1.10: resolution: {integrity: sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==} @@ -13902,6 +14084,9 @@ packages: resolution: {integrity: sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==} engines: {node: '>=12.20'} + pure-rand@6.1.0: + resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + q@1.5.1: resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} engines: {node: '>=0.6.0', teleport: '>=0.2.0'} @@ -14752,10 +14937,12 @@ packages: rimraf@2.7.1: resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} + deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true rollup-plugin-visualizer@5.12.0: @@ -15210,6 +15397,9 @@ packages: resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} deprecated: See https://github.com/lydell/source-map-resolve#deprecated + source-map-support@0.5.13: + resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} + source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} @@ -16479,6 +16669,10 @@ packages: resolution: {integrity: sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==} engines: {node: '>=10.10.0'} + v8-to-istanbul@9.3.0: + resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} + engines: {node: '>=10.12.0'} + validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} @@ -17179,7 +17373,7 @@ snapshots: '@babel/code-frame@7.24.2': dependencies: '@babel/highlight': 7.24.2 - picocolors: 1.0.0 + picocolors: 1.1.0 '@babel/code-frame@7.25.7': dependencies: @@ -17429,7 +17623,7 @@ snapshots: '@babel/helper-validator-identifier': 7.22.20 chalk: 2.4.2 js-tokens: 4.0.0 - picocolors: 1.0.0 + picocolors: 1.1.0 '@babel/highlight@7.25.7': dependencies: @@ -17558,16 +17752,31 @@ snapshots: '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 @@ -17613,11 +17822,21 @@ snapshots: '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 @@ -17633,31 +17852,61 @@ snapshots: '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 @@ -17673,6 +17922,11 @@ snapshots: '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-typescript@7.24.1(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 @@ -18907,6 +19161,16 @@ snapshots: jest-util: 26.6.2 slash: 3.0.0 + '@jest/console@29.7.0': + dependencies: + '@jest/types': 29.6.3 + '@types/node': 20.12.7 + chalk: 4.1.2 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + optional: true + '@jest/core@26.6.3': dependencies: '@jest/console': 26.6.2 @@ -18924,7 +19188,7 @@ snapshots: jest-haste-map: 26.6.2 jest-message-util: 26.6.2 jest-regex-util: 26.0.0 - jest-resolve: 26.6.2 + jest-resolve: 26.6.2(patch_hash=tmr5fnfjpir3crfu6ze44v7tue) jest-resolve-dependencies: 26.6.3 jest-runner: 26.6.3 jest-runtime: 26.6.3 @@ -18932,7 +19196,7 @@ snapshots: jest-util: 26.6.2 jest-validate: 26.6.2 jest-watcher: 26.6.2 - micromatch: 4.0.5 + micromatch: 4.0.8 p-each-series: 2.2.0 rimraf: 3.0.2 slash: 3.0.0 @@ -18944,6 +19208,42 @@ snapshots: - ts-node - utf-8-validate + '@jest/core@29.7.0': + dependencies: + '@jest/console': 29.7.0 + '@jest/reporters': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.12.7 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 3.9.0 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 29.7.0 + jest-config: 29.7.0(@types/node@20.12.7) + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-resolve-dependencies: 29.7.0 + jest-runner: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + jest-watcher: 29.7.0 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + - ts-node + optional: true + '@jest/environment@26.6.2': dependencies: '@jest/fake-timers': 26.6.2 @@ -19020,7 +19320,7 @@ snapshots: istanbul-lib-source-maps: 4.0.1 istanbul-reports: 3.1.7 jest-haste-map: 26.6.2 - jest-resolve: 26.6.2 + jest-resolve: 26.6.2(patch_hash=tmr5fnfjpir3crfu6ze44v7tue) jest-util: 26.6.2 jest-worker: 26.6.2 slash: 3.0.0 @@ -19033,6 +19333,36 @@ snapshots: transitivePeerDependencies: - supports-color + '@jest/reporters@29.7.0': + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@jest/console': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.25 + '@types/node': 20.12.7 + chalk: 4.1.2 + collect-v8-coverage: 1.0.2 + exit: 0.1.2 + glob: 7.1.6 + graceful-fs: 4.2.11 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-instrument: 6.0.3 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.7 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + jest-worker: 29.7.0 + slash: 3.0.0 + string-length: 4.0.2 + strip-ansi: 6.0.1 + v8-to-istanbul: 9.3.0 + transitivePeerDependencies: + - supports-color + optional: true + '@jest/schemas@29.6.3': dependencies: '@sinclair/typebox': 0.27.8 @@ -19043,6 +19373,13 @@ snapshots: graceful-fs: 4.2.11 source-map: 0.6.1 + '@jest/source-map@29.6.3': + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + callsites: 3.1.0 + graceful-fs: 4.2.11 + optional: true + '@jest/test-result@26.6.2': dependencies: '@jest/console': 26.6.2 @@ -19050,6 +19387,14 @@ snapshots: '@types/istanbul-lib-coverage': 2.0.6 collect-v8-coverage: 1.0.2 + '@jest/test-result@29.7.0': + dependencies: + '@jest/console': 29.7.0 + '@jest/types': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + collect-v8-coverage: 1.0.2 + optional: true + '@jest/test-sequencer@26.6.3': dependencies: '@jest/test-result': 26.6.2 @@ -19064,9 +19409,17 @@ snapshots: - ts-node - utf-8-validate + '@jest/test-sequencer@29.7.0': + dependencies: + '@jest/test-result': 29.7.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + slash: 3.0.0 + optional: true + '@jest/transform@26.6.2': dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.25.8 '@jest/types': 26.6.2 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 @@ -19076,7 +19429,7 @@ snapshots: jest-haste-map: 26.6.2 jest-regex-util: 26.0.0 jest-util: 26.6.2 - micromatch: 4.0.5 + micromatch: 4.0.8 pirates: 4.0.6 slash: 3.0.0 source-map: 0.6.1 @@ -19086,7 +19439,7 @@ snapshots: '@jest/transform@29.7.0': dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.25.8 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 babel-plugin-istanbul: 6.1.1 @@ -19097,7 +19450,7 @@ snapshots: jest-haste-map: 29.7.0 jest-regex-util: 29.6.3 jest-util: 29.7.0 - micromatch: 4.0.5 + micromatch: 4.0.8 pirates: 4.0.6 slash: 3.0.0 write-file-atomic: 4.0.2 @@ -19447,7 +19800,7 @@ snapshots: '@npmcli/fs@2.1.2': dependencies: '@gar/promisify': 1.1.3 - semver: 7.6.0 + semver: 7.6.3 '@npmcli/fs@3.1.0': dependencies: @@ -19529,7 +19882,7 @@ snapshots: '@npmcli/package-json@4.0.1': dependencies: '@npmcli/git': 4.1.0 - glob: 10.3.12 + glob: 10.4.5 hosted-git-info: 6.1.1 json-parse-even-better-errors: 3.0.1 normalize-package-data: 5.0.0 @@ -22094,11 +22447,11 @@ snapshots: dependencies: '@storybook/global': 5.0.0 - '@storybook/addon-interactions@8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(vitest@2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))': + '@storybook/addon-interactions@8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.12.7))(vitest@2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))': dependencies: '@storybook/global': 5.0.0 '@storybook/instrumenter': 8.0.8 - '@storybook/test': 8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(vitest@2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) + '@storybook/test': 8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.12.7))(vitest@2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) '@storybook/types': 8.0.8 polished: 4.3.1 ts-dedent: 2.2.0 @@ -22389,7 +22742,7 @@ snapshots: find-cache-dir: 3.3.2 find-up: 5.0.0 fs-extra: 11.2.0 - glob: 10.3.12 + glob: 10.4.5 handlebars: 4.7.8 lazy-universal-dotenv: 4.0.0 node-fetch: 2.7.0(encoding@0.1.13) @@ -22720,14 +23073,14 @@ snapshots: - encoding - supports-color - '@storybook/test@8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(vitest@2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))': + '@storybook/test@8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.12.7))(vitest@2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))': dependencies: '@storybook/client-logger': 8.0.8 '@storybook/core-events': 8.0.8 '@storybook/instrumenter': 8.0.8 '@storybook/preview-api': 8.0.8 '@testing-library/dom': 9.3.4 - '@testing-library/jest-dom': 6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.12)(vitest@2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) + '@testing-library/jest-dom': 6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.12.7))(vitest@2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) '@testing-library/user-event': 14.5.2(@testing-library/dom@9.3.4) '@vitest/expect': 1.3.1 '@vitest/spy': 1.5.0 @@ -23103,7 +23456,7 @@ snapshots: jest: 26.6.3 vitest: 2.1.3(@types/node@20.12.7)(jsdom@16.7.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) - '@testing-library/jest-dom@6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.12)(vitest@2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))': + '@testing-library/jest-dom@6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.12.7))(vitest@2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))': dependencies: '@adobe/css-tools': 4.3.3 '@babel/runtime': 7.20.6 @@ -23116,6 +23469,7 @@ snapshots: optionalDependencies: '@jest/globals': 29.7.0 '@types/jest': 29.5.12 + jest: 29.7.0(@types/node@20.12.7) vitest: 2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) '@testing-library/react-hooks@8.0.1(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react-test-renderer@18.2.0(react@18.2.0))(react@18.2.0)': @@ -23267,7 +23621,7 @@ snapshots: '@types/eslint-scope@3.7.7': dependencies: '@types/eslint': 8.56.10 - '@types/estree': 0.0.51 + '@types/estree': 1.0.6 '@types/eslint@8.56.10': dependencies: @@ -23307,6 +23661,11 @@ snapshots: '@types/minimatch': 5.1.2 '@types/node': 20.12.7 + '@types/glob@8.1.0': + dependencies: + '@types/minimatch': 5.1.2 + '@types/node': 20.12.7 + '@types/graceful-fs@4.1.9': dependencies: '@types/node': 20.12.7 @@ -23543,6 +23902,8 @@ snapshots: '@types/testing-library__dom': 7.5.0 pretty-format: 25.5.0 + '@types/tmp@0.2.6': {} + '@types/unist@2.0.10': {} '@types/unist@3.0.2': {} @@ -24049,7 +24410,7 @@ snapshots: '@vue/shared': 3.4.23 entities: 4.5.0 estree-walker: 2.0.2 - source-map-js: 1.2.0 + source-map-js: 1.2.1 '@vue/compiler-dom@3.4.23': dependencies: @@ -24369,7 +24730,7 @@ snapshots: archiver-utils@5.0.2: dependencies: - glob: 10.3.12 + glob: 10.4.5 graceful-fs: 4.2.11 is-stream: 2.0.1 lazystream: 1.0.1 @@ -24699,6 +25060,34 @@ snapshots: transitivePeerDependencies: - supports-color + babel-jest@26.6.3(@babel/core@7.25.8): + dependencies: + '@babel/core': 7.25.8 + '@jest/transform': 26.6.2 + '@jest/types': 26.6.2 + '@types/babel__core': 7.20.5 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 26.6.2(@babel/core@7.25.8) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + + babel-jest@29.7.0(@babel/core@7.25.8): + dependencies: + '@babel/core': 7.25.8 + '@jest/transform': 29.7.0 + '@types/babel__core': 7.20.5 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 29.6.3(@babel/core@7.25.8) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + optional: true + babel-loader@8.3.0(@babel/core@7.24.4)(webpack@5.90.1(esbuild@0.20.2)): dependencies: '@babel/core': 7.24.4 @@ -24745,6 +25134,14 @@ snapshots: '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.5 + babel-plugin-jest-hoist@29.6.3: + dependencies: + '@babel/template': 7.25.7 + '@babel/types': 7.20.5 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.20.6 + optional: true + babel-plugin-lodash@3.3.4: dependencies: '@babel/helper-module-imports': 7.24.3 @@ -24840,12 +25237,41 @@ snapshots: '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.4) '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.4) + babel-preset-current-node-syntax@1.0.1(@babel/core@7.25.8): + dependencies: + '@babel/core': 7.25.8 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.8) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.25.8) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.25.8) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.25.8) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.8) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.8) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.8) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.8) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.8) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.8) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.8) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.25.8) + babel-preset-jest@26.6.2(@babel/core@7.24.4): dependencies: '@babel/core': 7.24.4 babel-plugin-jest-hoist: 26.6.2 babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.4) + babel-preset-jest@26.6.2(@babel/core@7.25.8): + dependencies: + '@babel/core': 7.25.8 + babel-plugin-jest-hoist: 26.6.2 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.25.8) + + babel-preset-jest@29.6.3(@babel/core@7.25.8): + dependencies: + '@babel/core': 7.25.8 + babel-plugin-jest-hoist: 29.6.3 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.25.8) + optional: true + babel-preset-razzle@4.2.17: dependencies: '@babel/core': 7.24.4 @@ -25123,7 +25549,7 @@ snapshots: braces@3.0.2: dependencies: - fill-range: 7.0.1 + fill-range: 7.1.1 braces@3.0.3: dependencies: @@ -25322,9 +25748,9 @@ snapshots: dependencies: '@npmcli/fs': 3.1.0 fs-minipass: 3.0.3 - glob: 10.3.12 + glob: 10.4.5 lru-cache: 7.18.3 - minipass: 7.0.4 + minipass: 7.1.2 minipass-collect: 1.0.2 minipass-flush: 1.0.5 minipass-pipeline: 1.2.4 @@ -25955,6 +26381,22 @@ snapshots: crc-32: 1.2.2 readable-stream: 4.5.2 + create-jest@29.7.0(@types/node@20.12.7): + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-config: 29.7.0(@types/node@20.12.7) + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + optional: true + croner@8.1.2: {} cross-spawn@5.1.0: @@ -26352,6 +26794,9 @@ snapshots: dedent@0.7.0: {} + dedent@1.5.3: + optional: true + deep-copy@1.4.2: {} deep-eql@4.1.3: @@ -26707,6 +27152,9 @@ snapshots: electron-to-chromium@1.5.41: {} + emittery@0.13.1: + optional: true + emittery@0.7.2: {} emoji-regex@10.3.0: {} @@ -27867,10 +28315,6 @@ snapshots: repeat-string: 1.6.1 to-regex-range: 2.1.1 - fill-range@7.0.1: - dependencies: - to-regex-range: 5.0.1 - fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 @@ -28119,7 +28563,7 @@ snapshots: fs-minipass@3.0.3: dependencies: - minipass: 7.0.4 + minipass: 7.1.2 fs-monkey@1.0.5: {} @@ -28317,16 +28761,17 @@ snapshots: foreground-child: 3.1.1 jackspeak: 2.3.6 minimatch: 9.0.4 - minipass: 7.0.4 - path-scurry: 1.10.2 + minipass: 7.1.2 + path-scurry: 1.11.1 - glob@10.3.12: + glob@10.4.5: dependencies: foreground-child: 3.1.1 - jackspeak: 2.3.6 + jackspeak: 3.4.3 minimatch: 9.0.4 - minipass: 7.0.4 - path-scurry: 1.10.2 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 glob@7.1.6: dependencies: @@ -29446,7 +29891,7 @@ snapshots: istanbul-lib-instrument@4.0.3: dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.25.8 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -29463,6 +29908,17 @@ snapshots: transitivePeerDependencies: - supports-color + istanbul-lib-instrument@6.0.3: + dependencies: + '@babel/core': 7.25.8 + '@babel/parser': 7.25.8 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color + optional: true + istanbul-lib-report@3.0.1: dependencies: istanbul-lib-coverage: 3.2.2 @@ -29511,6 +29967,12 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + jake@10.8.7: dependencies: async: 3.2.5 @@ -29533,6 +29995,40 @@ snapshots: execa: 4.1.0 throat: 5.0.0 + jest-changed-files@29.7.0: + dependencies: + execa: 5.1.1 + jest-util: 29.7.0 + p-limit: 3.1.0 + optional: true + + jest-circus@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.12.7 + chalk: 4.1.2 + co: 4.6.0 + dedent: 1.5.3 + is-generator-fn: 2.1.0 + jest-each: 29.7.0 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + p-limit: 3.1.0 + pretty-format: 29.7.0 + pure-rand: 6.1.0 + slash: 3.0.0 + stack-utils: 2.0.6 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + optional: true + jest-cli@26.6.3: dependencies: '@jest/core': 26.6.3 @@ -29555,12 +30051,32 @@ snapshots: - ts-node - utf-8-validate + jest-cli@29.7.0(@types/node@20.12.7): + dependencies: + '@jest/core': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + chalk: 4.1.2 + create-jest: 29.7.0(@types/node@20.12.7) + exit: 0.1.2 + import-local: 3.1.0 + jest-config: 29.7.0(@types/node@20.12.7) + jest-util: 29.7.0 + jest-validate: 29.7.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + optional: true + jest-config@26.6.3: dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.25.8 '@jest/test-sequencer': 26.6.3 '@jest/types': 26.6.2 - babel-jest: 26.6.3(@babel/core@7.24.4) + babel-jest: 26.6.3(@babel/core@7.25.8) chalk: 4.1.2 deepmerge: 4.3.1 glob: 7.1.6 @@ -29570,10 +30086,10 @@ snapshots: jest-get-type: 26.3.0 jest-jasmine2: 26.6.3 jest-regex-util: 26.0.0 - jest-resolve: 26.6.2 + jest-resolve: 26.6.2(patch_hash=tmr5fnfjpir3crfu6ze44v7tue) jest-util: 26.6.2 jest-validate: 26.6.2 - micromatch: 4.0.5 + micromatch: 4.0.8 pretty-format: 26.6.2 transitivePeerDependencies: - bufferutil @@ -29581,6 +30097,37 @@ snapshots: - supports-color - utf-8-validate + jest-config@29.7.0(@types/node@20.12.7): + dependencies: + '@babel/core': 7.25.8 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.25.8) + chalk: 4.1.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.1.6 + graceful-fs: 4.2.11 + jest-circus: 29.7.0 + jest-environment-node: 29.7.0 + jest-get-type: 29.6.3 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-runner: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + micromatch: 4.0.8 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + optionalDependencies: + '@types/node': 20.12.7 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + optional: true + jest-diff@26.6.2: dependencies: chalk: 4.1.2 @@ -29599,6 +30146,11 @@ snapshots: dependencies: detect-newline: 3.1.0 + jest-docblock@29.7.0: + dependencies: + detect-newline: 3.1.0 + optional: true + jest-each@26.6.2: dependencies: '@jest/types': 26.6.2 @@ -29607,6 +30159,15 @@ snapshots: jest-util: 26.6.2 pretty-format: 26.6.2 + jest-each@29.7.0: + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + jest-get-type: 29.6.3 + jest-util: 29.7.0 + pretty-format: 29.7.0 + optional: true + jest-environment-jsdom@26.6.2: dependencies: '@jest/environment': 26.6.2 @@ -29631,6 +30192,16 @@ snapshots: jest-mock: 26.6.2 jest-util: 26.6.2 + jest-environment-node@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.12.7 + jest-mock: 29.7.0 + jest-util: 29.7.0 + optional: true + jest-file@1.0.0: {} jest-get-type@26.3.0: {} @@ -29649,7 +30220,7 @@ snapshots: jest-serializer: 26.6.2 jest-util: 26.6.2 jest-worker: 26.6.2 - micromatch: 4.0.5 + micromatch: 4.0.8 sane: 4.1.0 walker: 1.0.8 optionalDependencies: @@ -29668,14 +30239,14 @@ snapshots: jest-regex-util: 29.6.3 jest-util: 29.7.0 jest-worker: 29.7.0 - micromatch: 4.0.5 + micromatch: 4.0.8 walker: 1.0.8 optionalDependencies: fsevents: 2.3.3 jest-jasmine2@26.6.3: dependencies: - '@babel/traverse': 7.24.1 + '@babel/traverse': 7.25.7 '@jest/environment': 26.6.2 '@jest/source-map': 26.6.2 '@jest/test-result': 26.6.2 @@ -29705,6 +30276,12 @@ snapshots: jest-get-type: 26.3.0 pretty-format: 26.6.2 + jest-leak-detector@29.7.0: + dependencies: + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + optional: true + jest-matcher-utils@26.6.2: dependencies: chalk: 4.1.2 @@ -29761,9 +30338,14 @@ snapshots: '@types/node': 20.12.7 jest-util: 29.7.0 - jest-pnp-resolver@1.2.3(jest-resolve@26.6.2): + jest-pnp-resolver@1.2.3(jest-resolve@26.6.2(patch_hash=tmr5fnfjpir3crfu6ze44v7tue)): + optionalDependencies: + jest-resolve: 26.6.2(patch_hash=tmr5fnfjpir3crfu6ze44v7tue) + + jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): optionalDependencies: - jest-resolve: 26.6.2 + jest-resolve: 29.7.0 + optional: true jest-regex-util@26.0.0: {} @@ -29777,17 +30359,38 @@ snapshots: transitivePeerDependencies: - supports-color - jest-resolve@26.6.2: + jest-resolve-dependencies@29.7.0: + dependencies: + jest-regex-util: 29.6.3 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + optional: true + + jest-resolve@26.6.2(patch_hash=tmr5fnfjpir3crfu6ze44v7tue): dependencies: '@jest/types': 26.6.2 chalk: 4.1.2 graceful-fs: 4.2.11 - jest-pnp-resolver: 1.2.3(jest-resolve@26.6.2) + jest-pnp-resolver: 1.2.3(jest-resolve@26.6.2(patch_hash=tmr5fnfjpir3crfu6ze44v7tue)) jest-util: 26.6.2 read-pkg-up: 7.0.1 resolve: 1.22.8 slash: 3.0.0 + jest-resolve@29.7.0: + dependencies: + chalk: 4.1.2 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) + jest-util: 29.7.0 + jest-validate: 29.7.0 + resolve: 1.22.8 + resolve.exports: 2.0.2 + slash: 3.0.0 + optional: true + jest-runner@26.6.3: dependencies: '@jest/console': 26.6.2 @@ -29804,7 +30407,7 @@ snapshots: jest-haste-map: 26.6.2 jest-leak-detector: 26.6.2 jest-message-util: 26.6.2 - jest-resolve: 26.6.2 + jest-resolve: 26.6.2(patch_hash=tmr5fnfjpir3crfu6ze44v7tue) jest-runtime: 26.6.3 jest-util: 26.6.2 jest-worker: 26.6.2 @@ -29817,6 +30420,33 @@ snapshots: - ts-node - utf-8-validate + jest-runner@29.7.0: + dependencies: + '@jest/console': 29.7.0 + '@jest/environment': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.12.7 + chalk: 4.1.2 + emittery: 0.13.1 + graceful-fs: 4.2.11 + jest-docblock: 29.7.0 + jest-environment-node: 29.7.0 + jest-haste-map: 29.7.0 + jest-leak-detector: 29.7.0 + jest-message-util: 29.7.0 + jest-resolve: 29.7.0 + jest-runtime: 29.7.0 + jest-util: 29.7.0 + jest-watcher: 29.7.0 + jest-worker: 29.7.0 + p-limit: 3.1.0 + source-map-support: 0.5.13 + transitivePeerDependencies: + - supports-color + optional: true + jest-runtime@26.6.3: dependencies: '@jest/console': 26.6.2 @@ -29839,7 +30469,7 @@ snapshots: jest-message-util: 26.6.2 jest-mock: 26.6.2 jest-regex-util: 26.0.0 - jest-resolve: 26.6.2 + jest-resolve: 26.6.2(patch_hash=tmr5fnfjpir3crfu6ze44v7tue) jest-snapshot: 26.6.2 jest-util: 26.6.2 jest-validate: 26.6.2 @@ -29853,6 +30483,34 @@ snapshots: - ts-node - utf-8-validate + jest-runtime@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/globals': 29.7.0 + '@jest/source-map': 29.6.3 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.12.7 + chalk: 4.1.2 + cjs-module-lexer: 1.2.3 + collect-v8-coverage: 1.0.2 + glob: 7.1.6 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + strip-bom: 4.0.0 + transitivePeerDependencies: + - supports-color + optional: true + jest-serializer@26.6.2: dependencies: '@types/node': 20.12.7 @@ -29862,7 +30520,7 @@ snapshots: dependencies: '@babel/types': 7.20.5 '@jest/types': 26.6.2 - '@types/babel__traverse': 7.20.5 + '@types/babel__traverse': 7.20.6 '@types/prettier': 2.7.3 chalk: 4.1.2 expect: 26.6.2 @@ -29872,24 +30530,24 @@ snapshots: jest-haste-map: 26.6.2 jest-matcher-utils: 26.6.2 jest-message-util: 26.6.2 - jest-resolve: 26.6.2 + jest-resolve: 26.6.2(patch_hash=tmr5fnfjpir3crfu6ze44v7tue) natural-compare: 1.4.0 pretty-format: 26.6.2 - semver: 7.6.0 + semver: 7.6.3 transitivePeerDependencies: - supports-color jest-snapshot@29.7.0: dependencies: - '@babel/core': 7.24.4 - '@babel/generator': 7.24.4 - '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.24.4) + '@babel/core': 7.25.8 + '@babel/generator': 7.25.7 + '@babel/plugin-syntax-jsx': 7.25.7(@babel/core@7.25.8) + '@babel/plugin-syntax-typescript': 7.25.7(@babel/core@7.25.8) '@babel/types': 7.20.5 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.4) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.25.8) chalk: 4.1.2 expect: 29.7.0 graceful-fs: 4.2.11 @@ -29900,7 +30558,7 @@ snapshots: jest-util: 29.7.0 natural-compare: 1.4.0 pretty-format: 29.7.0 - semver: 7.6.0 + semver: 7.6.3 transitivePeerDependencies: - supports-color @@ -29931,6 +30589,16 @@ snapshots: leven: 3.1.0 pretty-format: 26.6.2 + jest-validate@29.7.0: + dependencies: + '@jest/types': 29.6.3 + camelcase: 6.3.0 + chalk: 4.1.2 + jest-get-type: 29.6.3 + leven: 3.1.0 + pretty-format: 29.7.0 + optional: true + jest-watcher@26.6.2: dependencies: '@jest/test-result': 26.6.2 @@ -29941,6 +30609,18 @@ snapshots: jest-util: 26.6.2 string-length: 4.0.2 + jest-watcher@29.7.0: + dependencies: + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.12.7 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.13.1 + jest-util: 29.7.0 + string-length: 4.0.2 + optional: true + jest-worker@25.5.0: dependencies: merge-stream: 2.0.0 @@ -29977,6 +30657,19 @@ snapshots: - ts-node - utf-8-validate + jest@29.7.0(@types/node@20.12.7): + dependencies: + '@jest/core': 29.7.0 + '@jest/types': 29.6.3 + import-local: 3.1.0 + jest-cli: 29.7.0(@types/node@20.12.7) + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + optional: true + jiti@1.21.0: {} jiti@1.21.6: {} @@ -31610,7 +32303,7 @@ snapshots: minipass-fetch@3.0.4: dependencies: - minipass: 7.0.4 + minipass: 7.1.2 minipass-sized: 1.0.3 minizlib: 2.1.2 optionalDependencies: @@ -31639,7 +32332,7 @@ snapshots: minipass@5.0.0: {} - minipass@7.0.4: {} + minipass@7.1.2: {} minizlib@2.1.2: dependencies: @@ -32032,7 +32725,7 @@ snapshots: dependencies: growly: 1.3.0 is-wsl: 2.2.0 - semver: 7.6.0 + semver: 7.6.3 shellwords: 0.1.1 uuid: 8.3.2 which: 2.0.2 @@ -32517,6 +33210,8 @@ snapshots: degenerator: 5.0.1 netmask: 2.0.2 + package-json-from-dist@1.0.1: {} + package-json@6.5.0: dependencies: got: 9.6.0 @@ -32690,10 +33385,10 @@ snapshots: path-parse@1.0.7: {} - path-scurry@1.10.2: + path-scurry@1.11.1: dependencies: lru-cache: 10.2.0 - minipass: 7.0.4 + minipass: 7.1.2 path-to-regexp@0.1.10: {} @@ -33088,9 +33783,9 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss-sorting@8.0.2(postcss@8.4.38): + postcss-sorting@8.0.2(postcss@8.4.47): dependencies: - postcss: 8.4.38 + postcss: 8.4.47 postcss-svgo@4.0.3: dependencies: @@ -33371,6 +34066,9 @@ snapshots: dependencies: escape-goat: 4.0.0 + pure-rand@6.1.0: + optional: true + q@1.5.1: {} qs@6.10.4: @@ -34192,7 +34890,7 @@ snapshots: read-package-json@6.0.4: dependencies: - glob: 10.3.12 + glob: 10.4.5 json-parse-even-better-errors: 3.0.1 normalize-package-data: 5.0.0 npm-normalize-package-bin: 3.0.1 @@ -35306,6 +36004,12 @@ snapshots: source-map-url: 0.4.1 urix: 0.1.0 + source-map-support@0.5.13: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + optional: true + source-map-support@0.5.21: dependencies: buffer-from: 1.1.2 @@ -35394,7 +36098,7 @@ snapshots: ssri@10.0.5: dependencies: - minipass: 7.0.4 + minipass: 7.1.2 ssri@7.1.1: dependencies: @@ -35659,8 +36363,8 @@ snapshots: stylelint-order@6.0.4(stylelint@16.3.1(typescript@5.6.3)): dependencies: - postcss: 8.4.38 - postcss-sorting: 8.0.2(postcss@8.4.38) + postcss: 8.4.47 + postcss-sorting: 8.0.2(postcss@8.4.47) stylelint: 16.3.1(typescript@5.6.3) stylelint-prettier@5.0.0(prettier@3.2.5)(stylelint@16.3.1(typescript@5.6.3)): @@ -35720,7 +36424,7 @@ snapshots: dependencies: '@jridgewell/gen-mapping': 0.3.5 commander: 4.1.1 - glob: 10.3.12 + glob: 10.4.5 lines-and-columns: 1.2.4 mz: 2.7.0 pirates: 4.0.6 @@ -36699,6 +37403,13 @@ snapshots: convert-source-map: 1.9.0 source-map: 0.7.4 + v8-to-istanbul@9.3.0: + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + '@types/istanbul-lib-coverage': 2.0.6 + convert-source-map: 2.0.0 + optional: true + validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.2.0 From 1ff127ccb7e58ddac4b053d939744a83407f4d8c Mon Sep 17 00:00:00 2001 From: Victor Fernandez de Alba Date: Sun, 27 Oct 2024 15:47:09 +0100 Subject: [PATCH 107/209] Improve @plone/registry release-it config --- packages/registry/.release-it.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/registry/.release-it.json b/packages/registry/.release-it.json index f2720cb9f0..a63e1ce21e 100644 --- a/packages/registry/.release-it.json +++ b/packages/registry/.release-it.json @@ -6,7 +6,7 @@ "after:bump": [ "pipx run towncrier build --draft --yes --version ${version} > .changelog.draft", "pipx run towncrier build --yes --version ${version}", - "pnpm build --no-cache" + "pnpm build:force" ], "after:release": "rm .changelog.draft" }, From 4802225f0d538a0ed96b89ad718c574432667392 Mon Sep 17 00:00:00 2001 From: Victor Fernandez de Alba Date: Sun, 27 Oct 2024 15:48:32 +0100 Subject: [PATCH 108/209] Release @plone/registry 2.0.0-alpha.0 --- packages/registry/CHANGELOG.md | 25 +++++++++++++++++++++++++ packages/registry/news/6371.internal | 1 - packages/registry/news/6373.internal | 1 - packages/registry/news/6399.breaking | 6 ------ packages/registry/news/6399.feature | 1 - packages/registry/news/6407.internal | 1 - packages/registry/news/6422.bugfix | 1 - packages/registry/package.json | 2 +- 8 files changed, 26 insertions(+), 12 deletions(-) delete mode 100644 packages/registry/news/6371.internal delete mode 100644 packages/registry/news/6373.internal delete mode 100644 packages/registry/news/6399.breaking delete mode 100644 packages/registry/news/6399.feature delete mode 100644 packages/registry/news/6407.internal delete mode 100644 packages/registry/news/6422.bugfix diff --git a/packages/registry/CHANGELOG.md b/packages/registry/CHANGELOG.md index bfc4bc4705..dd27bf57e5 100644 --- a/packages/registry/CHANGELOG.md +++ b/packages/registry/CHANGELOG.md @@ -8,6 +8,31 @@ +## 2.0.0-alpha.0 (2024-10-27) + +### Breaking + +- Moved the package to ESM and refactored the add-on registry scripts to TypeScript. @sneridagh + Breaking: + - For maximum compatibility with CommonJS builds, the default exports have been moved to named exports. + - The modules affected are now built, and the import paths have changed, too. + - These changes force the modification in imports in a couple of files. + Please see the [Upgrade Guide](https://6.docs.plone.org/volto/upgrade-guide/index.html). [#6399](https://github.com/plone/volto/issues/6399) + +### Feature + +- Added an experimental Vite plugin. @sneridagh [#6399](https://github.com/plone/volto/issues/6399) + +### Bugfix + +- Return empty array when `getUtilities` does not match anything. @sneridagh [#6422](https://github.com/plone/volto/issues/6422) + +### Internal + +- Update typescript @sneridagh [#6371](https://github.com/plone/volto/issues/6371) +- Update Vite and vitest versions @sneridagh [#6373](https://github.com/plone/volto/issues/6373) +- Update typescript and vitest everywhere @sneridagh [#6407](https://github.com/plone/volto/issues/6407) + ## 1.8.0 (2024-07-30) ### Feature diff --git a/packages/registry/news/6371.internal b/packages/registry/news/6371.internal deleted file mode 100644 index 7f7dcd6199..0000000000 --- a/packages/registry/news/6371.internal +++ /dev/null @@ -1 +0,0 @@ -Update typescript @sneridagh diff --git a/packages/registry/news/6373.internal b/packages/registry/news/6373.internal deleted file mode 100644 index 2b6d200183..0000000000 --- a/packages/registry/news/6373.internal +++ /dev/null @@ -1 +0,0 @@ -Update Vite and vitest versions @sneridagh diff --git a/packages/registry/news/6399.breaking b/packages/registry/news/6399.breaking deleted file mode 100644 index d0315478f6..0000000000 --- a/packages/registry/news/6399.breaking +++ /dev/null @@ -1,6 +0,0 @@ -Moved the package to ESM and refactored the add-on registry scripts to TypeScript. @sneridagh -Breaking: -- For maximum compatibility with CommonJS builds, the default exports have been moved to named exports. -- The modules affected are now built, and the import paths have changed, too. -- These changes force the modification in imports in a couple of files. -Please see the [Upgrade Guide](https://6.docs.plone.org/volto/upgrade-guide/index.html). diff --git a/packages/registry/news/6399.feature b/packages/registry/news/6399.feature deleted file mode 100644 index 1a5f49ddbc..0000000000 --- a/packages/registry/news/6399.feature +++ /dev/null @@ -1 +0,0 @@ -Added an experimental Vite plugin. @sneridagh diff --git a/packages/registry/news/6407.internal b/packages/registry/news/6407.internal deleted file mode 100644 index f6daada94d..0000000000 --- a/packages/registry/news/6407.internal +++ /dev/null @@ -1 +0,0 @@ -Update typescript and vitest everywhere @sneridagh diff --git a/packages/registry/news/6422.bugfix b/packages/registry/news/6422.bugfix deleted file mode 100644 index 978f5bfa81..0000000000 --- a/packages/registry/news/6422.bugfix +++ /dev/null @@ -1 +0,0 @@ -Return empty array when `getUtilities` does not match anything. @sneridagh diff --git a/packages/registry/package.json b/packages/registry/package.json index 78f14702d7..27a12e4a7f 100644 --- a/packages/registry/package.json +++ b/packages/registry/package.json @@ -9,7 +9,7 @@ ], "funding": "https://github.com/sponsors/plone", "license": "MIT", - "version": "1.8.0", + "version": "2.0.0-alpha.0", "repository": { "type": "git", "url": "https://github.com/plone/volto.git" From f96fe5b83e87f5dee27dae56f0374683788c5082 Mon Sep 17 00:00:00 2001 From: Victor Fernandez de Alba Date: Sun, 27 Oct 2024 15:49:33 +0100 Subject: [PATCH 109/209] Release @plone/scripts 3.7.0 --- packages/scripts/CHANGELOG.md | 10 ++++++++++ packages/scripts/news/6354.documentation | 1 - packages/scripts/news/6399.feature | 1 - packages/scripts/package.json | 2 +- 4 files changed, 11 insertions(+), 3 deletions(-) delete mode 100644 packages/scripts/news/6354.documentation delete mode 100644 packages/scripts/news/6399.feature diff --git a/packages/scripts/CHANGELOG.md b/packages/scripts/CHANGELOG.md index 34cce11565..f1c4f0278b 100644 --- a/packages/scripts/CHANGELOG.md +++ b/packages/scripts/CHANGELOG.md @@ -8,6 +8,16 @@ +## 3.7.0 (2024-10-27) + +### Feature + +- Support for the new `@plone/registry` ESM format. @sneridagh [#6399](https://github.com/plone/volto/issues/6399) + +### Documentation + +- Added the configuration for VSCode not to reformat Markdown and MyST files. @aadityaforwork [#6354](https://github.com/plone/volto/issues/6354) + ## 3.6.2 (2024-06-06) ### Bugfix diff --git a/packages/scripts/news/6354.documentation b/packages/scripts/news/6354.documentation deleted file mode 100644 index b643f0ac32..0000000000 --- a/packages/scripts/news/6354.documentation +++ /dev/null @@ -1 +0,0 @@ -Added the configuration for VSCode not to reformat Markdown and MyST files. @aadityaforwork \ No newline at end of file diff --git a/packages/scripts/news/6399.feature b/packages/scripts/news/6399.feature deleted file mode 100644 index 5558c340af..0000000000 --- a/packages/scripts/news/6399.feature +++ /dev/null @@ -1 +0,0 @@ -Support for the new `@plone/registry` ESM format. @sneridagh diff --git a/packages/scripts/package.json b/packages/scripts/package.json index 66d18276c1..412e88fcee 100644 --- a/packages/scripts/package.json +++ b/packages/scripts/package.json @@ -9,7 +9,7 @@ } ], "license": "MIT", - "version": "3.6.2", + "version": "3.7.0", "repository": { "type": "git", "url": "git@github.com:plone/volto.git" From 2f7b7608aae0d2a97bbae8c21d300aca66995a0b Mon Sep 17 00:00:00 2001 From: Victor Fernandez de Alba Date: Sun, 27 Oct 2024 15:50:38 +0100 Subject: [PATCH 110/209] Release generate-volto 9.0.0-alpha.20 --- packages/generator-volto/CHANGELOG.md | 9 +++++++++ packages/generator-volto/news/6371.breaking | 2 -- packages/generator-volto/news/6399.breaking | 2 -- packages/generator-volto/package.json | 2 +- 4 files changed, 10 insertions(+), 5 deletions(-) delete mode 100644 packages/generator-volto/news/6371.breaking delete mode 100644 packages/generator-volto/news/6399.breaking diff --git a/packages/generator-volto/CHANGELOG.md b/packages/generator-volto/CHANGELOG.md index 9a16049080..7107897b68 100644 --- a/packages/generator-volto/CHANGELOG.md +++ b/packages/generator-volto/CHANGELOG.md @@ -8,6 +8,15 @@ +## 9.0.0-alpha.20 (2024-10-27) + +### Breaking + +- Dropped support for Node.js 18, since Volto only supports the last two LTS versions. @sneridagh + Volto might continue to work on it, but it will be no longer tested in CI. [#6371](https://github.com/plone/volto/issues/6371) +- Breaking changes in `.eslintrc.js` and `.storybook/main.js` because of #6399. @sneridagh + Please see the [Upgrade Guide](https://6.docs.plone.org/volto/upgrade-guide/index.html). [#6399](https://github.com/plone/volto/issues/6399) + ## 9.0.0-alpha.19 (2024-10-18) ### Internal diff --git a/packages/generator-volto/news/6371.breaking b/packages/generator-volto/news/6371.breaking deleted file mode 100644 index 204eeb8cd6..0000000000 --- a/packages/generator-volto/news/6371.breaking +++ /dev/null @@ -1,2 +0,0 @@ -Dropped support for Node.js 18, since Volto only supports the last two LTS versions. @sneridagh -Volto might continue to work on it, but it will be no longer tested in CI. diff --git a/packages/generator-volto/news/6399.breaking b/packages/generator-volto/news/6399.breaking deleted file mode 100644 index 2b0695d18f..0000000000 --- a/packages/generator-volto/news/6399.breaking +++ /dev/null @@ -1,2 +0,0 @@ -Breaking changes in `.eslintrc.js` and `.storybook/main.js` because of #6399. @sneridagh -Please see the [Upgrade Guide](https://6.docs.plone.org/volto/upgrade-guide/index.html). diff --git a/packages/generator-volto/package.json b/packages/generator-volto/package.json index 9e352a3300..cf1b46bc7c 100644 --- a/packages/generator-volto/package.json +++ b/packages/generator-volto/package.json @@ -10,7 +10,7 @@ } ], "license": "MIT", - "version": "9.0.0-alpha.19", + "version": "9.0.0-alpha.20", "repository": { "type": "git", "url": "git+https://github.com/plone/generator-volto.git" From 82e4f7b51e0c718e66fc1d42444268c422ef6aae Mon Sep 17 00:00:00 2001 From: Victor Fernandez de Alba Date: Sun, 27 Oct 2024 15:51:42 +0100 Subject: [PATCH 111/209] Release 18.0.0-alpha.47 --- docs/source/release-notes/index.md | 43 +++++++++++++++++++ packages/volto/CHANGELOG.md | 43 +++++++++++++++++++ packages/volto/news/6308.internal | 1 - packages/volto/news/6355.bugfix | 1 - packages/volto/news/6371.breaking | 2 - packages/volto/news/6371.internal | 1 - packages/volto/news/6399.internal | 1 - packages/volto/news/6403.internal | 1 - packages/volto/news/6407.internal | 1 - packages/volto/news/6408.internal | 1 - packages/volto/news/6414.feature | 3 -- packages/volto/news/6418.internal | 1 - packages/volto/news/6419.bugfix | 1 - packages/volto/news/6421.bugfix | 1 - packages/volto/news/6421.feature.1 | 3 -- packages/volto/news/6421.feature.2 | 1 - packages/volto/news/6422.feature | 1 - packages/volto/news/6424.internal | 1 - packages/volto/news/6425.feature | 1 - packages/volto/news/6426.documentation | 1 - packages/volto/news/6433.documentation | 1 - packages/volto/news/6436.bugfix | 1 - packages/volto/news/6438.documentation | 1 - packages/volto/package.json | 2 +- .../volto/types/actions/aliases/aliases.d.ts | 9 +++- .../manage/Contents/__mocks__/index.d.ts | 1 - .../Relations/RelationsMatrix.d.ts | 2 +- .../manage/Controlpanels/index.d.ts | 1 - .../manage/Form/__mocks__/index.d.ts | 1 - .../types/components/manage/Form/index.d.ts | 1 - .../Multilingual/ManageTranslations.d.ts | 2 +- .../manage/Sidebar/ObjectBrowser.d.ts | 2 +- .../manage/Widgets/InternalUrlWidget.d.ts | 2 +- .../components/manage/Widgets/UrlWidget.d.ts | 2 +- .../manage/Widgets/__mocks__/index.d.ts | 1 - .../components/manage/Widgets/index.d.ts | 5 +-- packages/volto/types/config/slots.d.ts | 2 +- .../volto/types/constants/ActionTypes.d.ts | 1 + .../volto/types/helpers/Helmet/Helmet.d.ts | 2 +- 39 files changed, 105 insertions(+), 43 deletions(-) delete mode 100644 packages/volto/news/6308.internal delete mode 100644 packages/volto/news/6355.bugfix delete mode 100644 packages/volto/news/6371.breaking delete mode 100644 packages/volto/news/6371.internal delete mode 100644 packages/volto/news/6399.internal delete mode 100644 packages/volto/news/6403.internal delete mode 100644 packages/volto/news/6407.internal delete mode 100644 packages/volto/news/6408.internal delete mode 100644 packages/volto/news/6414.feature delete mode 100644 packages/volto/news/6418.internal delete mode 100644 packages/volto/news/6419.bugfix delete mode 100644 packages/volto/news/6421.bugfix delete mode 100644 packages/volto/news/6421.feature.1 delete mode 100644 packages/volto/news/6421.feature.2 delete mode 100644 packages/volto/news/6422.feature delete mode 100644 packages/volto/news/6424.internal delete mode 100644 packages/volto/news/6425.feature delete mode 100644 packages/volto/news/6426.documentation delete mode 100644 packages/volto/news/6433.documentation delete mode 100644 packages/volto/news/6436.bugfix delete mode 100644 packages/volto/news/6438.documentation diff --git a/docs/source/release-notes/index.md b/docs/source/release-notes/index.md index 9ac139c7b9..228069b61f 100644 --- a/docs/source/release-notes/index.md +++ b/docs/source/release-notes/index.md @@ -17,6 +17,49 @@ myst: +## 18.0.0-alpha.47 (2024-10-27) + +### Breaking + +- Dropped support for Node.js 18, since Volto only supports the last two LTS versions. @sneridagh + Volto might continue to work on it, but it will be no longer tested in CI. [#6371](https://github.com/plone/volto/issues/6371) + +### Feature + +- URL Management control panel: add a filter for redirects created after a given date. + **Note:** This requires `Products.CMFPlone` 6.0.14 and `plone.restapi` 9.8.0 or later. + @davisagli [#6414](https://github.com/plone/volto/issues/6414) +- URL Management control panel: Move the form for adding a new redirect into a modal. @davisagli [#6421](https://github.com/plone/volto/issues/6421) +- URL Management control panel: Add feature to bulk upload redirects in a CSV file. + **Note:** This requires `plone.restapi` 9.8.0 or later. + @davisagli [#6421](https://github.com/plone/volto/issues/6421) +- Introducing "client transforms for Redux reducers". @sneridagh [#6422](https://github.com/plone/volto/issues/6422) +- URL Management control panel: Add a way to edit existing aliases. @davisagli [#6425](https://github.com/plone/volto/issues/6425) + +### Bugfix + +- Fix site setup access check by using `@actions` endpoint to validate permissions. @Faakhir30 [#6355](https://github.com/plone/volto/issues/6355) +- Fix redirect after login if the `Login` component is used on a route other than `/login` or `/logout`. @dobri1408 [#6419](https://github.com/plone/volto/issues/6419) +- URL Management control panel: Improve layout for long paths. @davisagli [#6421](https://github.com/plone/volto/issues/6421) +- URL Management control panel: add missing translations. @davisagli [#6436](https://github.com/plone/volto/issues/6436) + +### Internal + +- Used `resource title` instead of `resource type` in page title on edit. @Faakhir30 [#6308](https://github.com/plone/volto/issues/6308) +- Added support for Node.js 22, since it will become LTS on 2024-10-29. @sneridagh [#6371](https://github.com/plone/volto/issues/6371) +- Adapt `@plone/registry` as an ESM module, and fix its imports. @sneridagh [#6399](https://github.com/plone/volto/issues/6399) +- Fix `clean` make command @sneridagh [#6403](https://github.com/plone/volto/issues/6403) +- Update typescript and vitest everywhere @sneridagh [#6407](https://github.com/plone/volto/issues/6407) +- Update `caniuse` Oct24 @sneridagh [#6408](https://github.com/plone/volto/issues/6408) +- Remove last tests still in Node.js 18 @sneridagh [#6418](https://github.com/plone/volto/issues/6418) +- Remove mention of `SEAMLESS` mode in the server bootstrap. @sneridagh [#6424](https://github.com/plone/volto/issues/6424) + +### Documentation + +- Added deprecation notices to the upgrade guide for Volto 18. @sneridagh [#6426](https://github.com/plone/volto/issues/6426) +- Replace `yarn` with `pnpm` wherever necessary. @sneridagh [#6433](https://github.com/plone/volto/issues/6433) +- Rename page title from Frontend to Volto UI. @stevepiercy [#6438](https://github.com/plone/volto/issues/6438) + ## 18.0.0-alpha.46 (2024-10-10) ### Breaking diff --git a/packages/volto/CHANGELOG.md b/packages/volto/CHANGELOG.md index 9ac139c7b9..228069b61f 100644 --- a/packages/volto/CHANGELOG.md +++ b/packages/volto/CHANGELOG.md @@ -17,6 +17,49 @@ myst: +## 18.0.0-alpha.47 (2024-10-27) + +### Breaking + +- Dropped support for Node.js 18, since Volto only supports the last two LTS versions. @sneridagh + Volto might continue to work on it, but it will be no longer tested in CI. [#6371](https://github.com/plone/volto/issues/6371) + +### Feature + +- URL Management control panel: add a filter for redirects created after a given date. + **Note:** This requires `Products.CMFPlone` 6.0.14 and `plone.restapi` 9.8.0 or later. + @davisagli [#6414](https://github.com/plone/volto/issues/6414) +- URL Management control panel: Move the form for adding a new redirect into a modal. @davisagli [#6421](https://github.com/plone/volto/issues/6421) +- URL Management control panel: Add feature to bulk upload redirects in a CSV file. + **Note:** This requires `plone.restapi` 9.8.0 or later. + @davisagli [#6421](https://github.com/plone/volto/issues/6421) +- Introducing "client transforms for Redux reducers". @sneridagh [#6422](https://github.com/plone/volto/issues/6422) +- URL Management control panel: Add a way to edit existing aliases. @davisagli [#6425](https://github.com/plone/volto/issues/6425) + +### Bugfix + +- Fix site setup access check by using `@actions` endpoint to validate permissions. @Faakhir30 [#6355](https://github.com/plone/volto/issues/6355) +- Fix redirect after login if the `Login` component is used on a route other than `/login` or `/logout`. @dobri1408 [#6419](https://github.com/plone/volto/issues/6419) +- URL Management control panel: Improve layout for long paths. @davisagli [#6421](https://github.com/plone/volto/issues/6421) +- URL Management control panel: add missing translations. @davisagli [#6436](https://github.com/plone/volto/issues/6436) + +### Internal + +- Used `resource title` instead of `resource type` in page title on edit. @Faakhir30 [#6308](https://github.com/plone/volto/issues/6308) +- Added support for Node.js 22, since it will become LTS on 2024-10-29. @sneridagh [#6371](https://github.com/plone/volto/issues/6371) +- Adapt `@plone/registry` as an ESM module, and fix its imports. @sneridagh [#6399](https://github.com/plone/volto/issues/6399) +- Fix `clean` make command @sneridagh [#6403](https://github.com/plone/volto/issues/6403) +- Update typescript and vitest everywhere @sneridagh [#6407](https://github.com/plone/volto/issues/6407) +- Update `caniuse` Oct24 @sneridagh [#6408](https://github.com/plone/volto/issues/6408) +- Remove last tests still in Node.js 18 @sneridagh [#6418](https://github.com/plone/volto/issues/6418) +- Remove mention of `SEAMLESS` mode in the server bootstrap. @sneridagh [#6424](https://github.com/plone/volto/issues/6424) + +### Documentation + +- Added deprecation notices to the upgrade guide for Volto 18. @sneridagh [#6426](https://github.com/plone/volto/issues/6426) +- Replace `yarn` with `pnpm` wherever necessary. @sneridagh [#6433](https://github.com/plone/volto/issues/6433) +- Rename page title from Frontend to Volto UI. @stevepiercy [#6438](https://github.com/plone/volto/issues/6438) + ## 18.0.0-alpha.46 (2024-10-10) ### Breaking diff --git a/packages/volto/news/6308.internal b/packages/volto/news/6308.internal deleted file mode 100644 index c2b9271b6b..0000000000 --- a/packages/volto/news/6308.internal +++ /dev/null @@ -1 +0,0 @@ -Used `resource title` instead of `resource type` in page title on edit. @Faakhir30 diff --git a/packages/volto/news/6355.bugfix b/packages/volto/news/6355.bugfix deleted file mode 100644 index 1d6daa2674..0000000000 --- a/packages/volto/news/6355.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fix site setup access check by using `@actions` endpoint to validate permissions. @Faakhir30 diff --git a/packages/volto/news/6371.breaking b/packages/volto/news/6371.breaking deleted file mode 100644 index 204eeb8cd6..0000000000 --- a/packages/volto/news/6371.breaking +++ /dev/null @@ -1,2 +0,0 @@ -Dropped support for Node.js 18, since Volto only supports the last two LTS versions. @sneridagh -Volto might continue to work on it, but it will be no longer tested in CI. diff --git a/packages/volto/news/6371.internal b/packages/volto/news/6371.internal deleted file mode 100644 index 38a19474ac..0000000000 --- a/packages/volto/news/6371.internal +++ /dev/null @@ -1 +0,0 @@ -Added support for Node.js 22, since it will become LTS on 2024-10-29. @sneridagh diff --git a/packages/volto/news/6399.internal b/packages/volto/news/6399.internal deleted file mode 100644 index 363ce2c2a7..0000000000 --- a/packages/volto/news/6399.internal +++ /dev/null @@ -1 +0,0 @@ -Adapt `@plone/registry` as an ESM module, and fix its imports. @sneridagh diff --git a/packages/volto/news/6403.internal b/packages/volto/news/6403.internal deleted file mode 100644 index 68fb4d2cab..0000000000 --- a/packages/volto/news/6403.internal +++ /dev/null @@ -1 +0,0 @@ -Fix `clean` make command @sneridagh diff --git a/packages/volto/news/6407.internal b/packages/volto/news/6407.internal deleted file mode 100644 index f6daada94d..0000000000 --- a/packages/volto/news/6407.internal +++ /dev/null @@ -1 +0,0 @@ -Update typescript and vitest everywhere @sneridagh diff --git a/packages/volto/news/6408.internal b/packages/volto/news/6408.internal deleted file mode 100644 index 49ce0fb0f8..0000000000 --- a/packages/volto/news/6408.internal +++ /dev/null @@ -1 +0,0 @@ -Update `caniuse` Oct24 @sneridagh diff --git a/packages/volto/news/6414.feature b/packages/volto/news/6414.feature deleted file mode 100644 index 8ee0a49e68..0000000000 --- a/packages/volto/news/6414.feature +++ /dev/null @@ -1,3 +0,0 @@ -URL Management control panel: add a filter for redirects created after a given date. -**Note:** This requires `Products.CMFPlone` 6.0.14 and `plone.restapi` 9.8.0 or later. -@davisagli diff --git a/packages/volto/news/6418.internal b/packages/volto/news/6418.internal deleted file mode 100644 index fcc36e357f..0000000000 --- a/packages/volto/news/6418.internal +++ /dev/null @@ -1 +0,0 @@ -Remove last tests still in Node.js 18 @sneridagh diff --git a/packages/volto/news/6419.bugfix b/packages/volto/news/6419.bugfix deleted file mode 100644 index e7e843cb57..0000000000 --- a/packages/volto/news/6419.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fix redirect after login if the `Login` component is used on a route other than `/login` or `/logout`. @dobri1408 diff --git a/packages/volto/news/6421.bugfix b/packages/volto/news/6421.bugfix deleted file mode 100644 index 3ff3139729..0000000000 --- a/packages/volto/news/6421.bugfix +++ /dev/null @@ -1 +0,0 @@ -URL Management control panel: Improve layout for long paths. @davisagli diff --git a/packages/volto/news/6421.feature.1 b/packages/volto/news/6421.feature.1 deleted file mode 100644 index b20307ca39..0000000000 --- a/packages/volto/news/6421.feature.1 +++ /dev/null @@ -1,3 +0,0 @@ -URL Management control panel: Add feature to bulk upload redirects in a CSV file. -**Note:** This requires `plone.restapi` 9.8.0 or later. -@davisagli diff --git a/packages/volto/news/6421.feature.2 b/packages/volto/news/6421.feature.2 deleted file mode 100644 index 1156bb1ff7..0000000000 --- a/packages/volto/news/6421.feature.2 +++ /dev/null @@ -1 +0,0 @@ -URL Management control panel: Move the form for adding a new redirect into a modal. @davisagli \ No newline at end of file diff --git a/packages/volto/news/6422.feature b/packages/volto/news/6422.feature deleted file mode 100644 index 7eb17ffd98..0000000000 --- a/packages/volto/news/6422.feature +++ /dev/null @@ -1 +0,0 @@ -Introducing "client transforms for Redux reducers". @sneridagh diff --git a/packages/volto/news/6424.internal b/packages/volto/news/6424.internal deleted file mode 100644 index eee9d51424..0000000000 --- a/packages/volto/news/6424.internal +++ /dev/null @@ -1 +0,0 @@ -Remove mention of `SEAMLESS` mode in the server bootstrap. @sneridagh diff --git a/packages/volto/news/6425.feature b/packages/volto/news/6425.feature deleted file mode 100644 index 7a12576c21..0000000000 --- a/packages/volto/news/6425.feature +++ /dev/null @@ -1 +0,0 @@ -URL Management control panel: Add a way to edit existing aliases. @davisagli diff --git a/packages/volto/news/6426.documentation b/packages/volto/news/6426.documentation deleted file mode 100644 index dc5079729a..0000000000 --- a/packages/volto/news/6426.documentation +++ /dev/null @@ -1 +0,0 @@ -Added deprecation notices to the upgrade guide for Volto 18. @sneridagh diff --git a/packages/volto/news/6433.documentation b/packages/volto/news/6433.documentation deleted file mode 100644 index 82111de185..0000000000 --- a/packages/volto/news/6433.documentation +++ /dev/null @@ -1 +0,0 @@ -Replace `yarn` with `pnpm` wherever necessary. @sneridagh diff --git a/packages/volto/news/6436.bugfix b/packages/volto/news/6436.bugfix deleted file mode 100644 index a0e0bf3309..0000000000 --- a/packages/volto/news/6436.bugfix +++ /dev/null @@ -1 +0,0 @@ -URL Management control panel: add missing translations. @davisagli diff --git a/packages/volto/news/6438.documentation b/packages/volto/news/6438.documentation deleted file mode 100644 index f894f6db1b..0000000000 --- a/packages/volto/news/6438.documentation +++ /dev/null @@ -1 +0,0 @@ -Rename page title from Frontend to Volto UI. @stevepiercy diff --git a/packages/volto/package.json b/packages/volto/package.json index 2de2443dd7..809e554ea0 100644 --- a/packages/volto/package.json +++ b/packages/volto/package.json @@ -9,7 +9,7 @@ } ], "license": "MIT", - "version": "18.0.0-alpha.46", + "version": "18.0.0-alpha.47", "repository": { "type": "git", "url": "git@github.com:plone/volto.git" diff --git a/packages/volto/types/actions/aliases/aliases.d.ts b/packages/volto/types/actions/aliases/aliases.d.ts index 0a08987630..94cda2c98c 100644 --- a/packages/volto/types/actions/aliases/aliases.d.ts +++ b/packages/volto/types/actions/aliases/aliases.d.ts @@ -5,7 +5,7 @@ * @param {Object} options Options data. * @returns {Object} Get aliases action. */ -export function getAliases(url: string, options: any): any; +export function getAliases(url: string, options?: any): any; /** * Add alias function. * @function addAliases @@ -22,3 +22,10 @@ export function addAliases(url: string, data: any): any; * @returns {Object} Remove alias action. */ export function removeAliases(url: string, data: any): any; +/** + * Upload aliases function. + * @function uploadAliases + * @param {Object} file CSV file. + * @returns {Object} Upload aliases action. + */ +export function uploadAliases(file: any): any; diff --git a/packages/volto/types/components/manage/Contents/__mocks__/index.d.ts b/packages/volto/types/components/manage/Contents/__mocks__/index.d.ts index 4a4f62aee7..8a200d866b 100644 --- a/packages/volto/types/components/manage/Contents/__mocks__/index.d.ts +++ b/packages/volto/types/components/manage/Contents/__mocks__/index.d.ts @@ -1,3 +1,2 @@ -/// export declare const Contents: jest.Mock; export declare const ContentsRenameModal: jest.Mock; diff --git a/packages/volto/types/components/manage/Controlpanels/Relations/RelationsMatrix.d.ts b/packages/volto/types/components/manage/Controlpanels/Relations/RelationsMatrix.d.ts index b44094f82f..d442a59e1e 100644 --- a/packages/volto/types/components/manage/Controlpanels/Relations/RelationsMatrix.d.ts +++ b/packages/volto/types/components/manage/Controlpanels/Relations/RelationsMatrix.d.ts @@ -36,7 +36,7 @@ declare const _default: { data: {}; block: string; }; - contextType?: React.Context; + contextType?: React.Context | undefined; }; export default _default; import React from 'react'; diff --git a/packages/volto/types/components/manage/Controlpanels/index.d.ts b/packages/volto/types/components/manage/Controlpanels/index.d.ts index 8feb23523b..b796c15c8a 100644 --- a/packages/volto/types/components/manage/Controlpanels/index.d.ts +++ b/packages/volto/types/components/manage/Controlpanels/index.d.ts @@ -1,4 +1,3 @@ -/// export declare const Controlpanels: any; export declare const Controlpanel: import("@loadable/component").LoadableComponent>, "ref"> & import("react").RefAttributes>>>; export declare const RulesControlpanel: import("@loadable/component").LoadableClassComponent; diff --git a/packages/volto/types/components/manage/Form/__mocks__/index.d.ts b/packages/volto/types/components/manage/Form/__mocks__/index.d.ts index 086c8c23b7..36db79f1a1 100644 --- a/packages/volto/types/components/manage/Form/__mocks__/index.d.ts +++ b/packages/volto/types/components/manage/Form/__mocks__/index.d.ts @@ -1,4 +1,3 @@ -/// export declare const Field: jest.Mock; export declare const InlineForm: jest.Mock; export declare const ModalForm: jest.Mock; diff --git a/packages/volto/types/components/manage/Form/index.d.ts b/packages/volto/types/components/manage/Form/index.d.ts index 80e8e76488..b23c84c307 100644 --- a/packages/volto/types/components/manage/Form/index.d.ts +++ b/packages/volto/types/components/manage/Form/index.d.ts @@ -1,4 +1,3 @@ -/// export declare const Field: import("@loadable/component").LoadableComponent>; export declare const InlineForm: import("@loadable/component").LoadableComponent, "ref"> & import("react").RefAttributes>; export declare const ModalForm: import("@loadable/component").LoadableComponent>; diff --git a/packages/volto/types/components/manage/Multilingual/ManageTranslations.d.ts b/packages/volto/types/components/manage/Multilingual/ManageTranslations.d.ts index b44094f82f..d442a59e1e 100644 --- a/packages/volto/types/components/manage/Multilingual/ManageTranslations.d.ts +++ b/packages/volto/types/components/manage/Multilingual/ManageTranslations.d.ts @@ -36,7 +36,7 @@ declare const _default: { data: {}; block: string; }; - contextType?: React.Context; + contextType?: React.Context | undefined; }; export default _default; import React from 'react'; diff --git a/packages/volto/types/components/manage/Sidebar/ObjectBrowser.d.ts b/packages/volto/types/components/manage/Sidebar/ObjectBrowser.d.ts index 6ed8b67c57..b68432edd0 100644 --- a/packages/volto/types/components/manage/Sidebar/ObjectBrowser.d.ts +++ b/packages/volto/types/components/manage/Sidebar/ObjectBrowser.d.ts @@ -69,6 +69,6 @@ declare function withObjectBrowser(WrappedComponent: any): { data: {}; block: string; }; - contextType?: React.Context; + contextType?: React.Context | undefined; }; import React from 'react'; diff --git a/packages/volto/types/components/manage/Widgets/InternalUrlWidget.d.ts b/packages/volto/types/components/manage/Widgets/InternalUrlWidget.d.ts index 0531e1ed0f..3a0e6f3a16 100644 --- a/packages/volto/types/components/manage/Widgets/InternalUrlWidget.d.ts +++ b/packages/volto/types/components/manage/Widgets/InternalUrlWidget.d.ts @@ -74,7 +74,7 @@ declare const _default: { data: {}; block: string; }; - contextType?: React.Context; + contextType?: React.Context | undefined; }; export default _default; import React from 'react'; diff --git a/packages/volto/types/components/manage/Widgets/UrlWidget.d.ts b/packages/volto/types/components/manage/Widgets/UrlWidget.d.ts index 51ff47f9b5..43a7207080 100644 --- a/packages/volto/types/components/manage/Widgets/UrlWidget.d.ts +++ b/packages/volto/types/components/manage/Widgets/UrlWidget.d.ts @@ -74,7 +74,7 @@ declare const _default: { data: {}; block: string; }; - contextType?: React.Context; + contextType?: React.Context | undefined; }; export default _default; import React from 'react'; diff --git a/packages/volto/types/components/manage/Widgets/__mocks__/index.d.ts b/packages/volto/types/components/manage/Widgets/__mocks__/index.d.ts index 86a10de8b4..b81f2365db 100644 --- a/packages/volto/types/components/manage/Widgets/__mocks__/index.d.ts +++ b/packages/volto/types/components/manage/Widgets/__mocks__/index.d.ts @@ -1,4 +1,3 @@ -/// export declare const AlignWidget: jest.Mock; export declare const ButtonsWidget: jest.Mock; export declare const ArrayWidget: jest.Mock; diff --git a/packages/volto/types/components/manage/Widgets/index.d.ts b/packages/volto/types/components/manage/Widgets/index.d.ts index e6b763ead7..35bdf8311c 100644 --- a/packages/volto/types/components/manage/Widgets/index.d.ts +++ b/packages/volto/types/components/manage/Widgets/index.d.ts @@ -1,4 +1,3 @@ -/// export declare const AlignWidget: import("@loadable/component").LoadableComponent; export declare const ButtonsWidget: import("@loadable/component").LoadableComponent; export declare const ArrayWidget: import("@loadable/component").LoadableClassComponent; @@ -53,7 +52,7 @@ export declare const UrlWidget: import("@loadable/component").LoadableClassCompo data: {}; block: string; }; - contextType?: import("react").Context; + contextType?: import("react").Context | undefined; }>; export declare const InternalUrlWidget: import("@loadable/component").LoadableClassComponent<{ new (): { @@ -93,7 +92,7 @@ export declare const InternalUrlWidget: import("@loadable/component").LoadableCl data: {}; block: string; }; - contextType?: import("react").Context; + contextType?: import("react").Context | undefined; }>; export declare const EmailWidget: import("@loadable/component").LoadableComponent; export declare const NumberWidget: import("@loadable/component").LoadableComponent>; diff --git a/packages/volto/types/config/slots.d.ts b/packages/volto/types/config/slots.d.ts index 059b38b8d0..1a31461914 100644 --- a/packages/volto/types/config/slots.d.ts +++ b/packages/volto/types/config/slots.d.ts @@ -7,7 +7,7 @@ declare namespace slots { content: { subjects?: any[]; }; - }): JSX.Element; + }): JSX.Element | null; propTypes: { content: any; }; diff --git a/packages/volto/types/constants/ActionTypes.d.ts b/packages/volto/types/constants/ActionTypes.d.ts index 4f14d38380..2d1a3beb45 100644 --- a/packages/volto/types/constants/ActionTypes.d.ts +++ b/packages/volto/types/constants/ActionTypes.d.ts @@ -134,6 +134,7 @@ export const MOVE_CONTENT_RULE: "MOVE_CONTENT_RULE"; export const GET_ALIASES: "GET_ALIASES"; export const ADD_ALIASES: "ADD_ALIASES"; export const REMOVE_ALIASES: "REMOVE_ALIASES"; +export const UPLOAD_ALIASES: "UPLOAD_ALIASES"; export const GET_USERSCHEMA: "GET_USERSCHEMA"; export const GET_UPGRADE: "GET_UPGRADE"; export const POST_UPGRADE: "POST_UPGRADE"; diff --git a/packages/volto/types/helpers/Helmet/Helmet.d.ts b/packages/volto/types/helpers/Helmet/Helmet.d.ts index 85bd8d4d2f..e5be73218d 100644 --- a/packages/volto/types/helpers/Helmet/Helmet.d.ts +++ b/packages/volto/types/helpers/Helmet/Helmet.d.ts @@ -133,6 +133,6 @@ declare const HelmetExport: { peek: any; rewind: () => any; canUseDOM: any; - contextType?: React.Context; + contextType?: React.Context | undefined; }; import React from 'react'; From e05970d2b36d1b8c95f0696db66bc2a601c8a074 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Fern=C3=A1ndez=20de=20Alba?= Date: Mon, 28 Oct 2024 12:59:25 +0100 Subject: [PATCH 112/209] Fix CSS lint in Volto Slate (#6444) --- packages/volto-slate/news/6444.bugfix | 1 + packages/volto-slate/src/editor/less/editor.less | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 packages/volto-slate/news/6444.bugfix diff --git a/packages/volto-slate/news/6444.bugfix b/packages/volto-slate/news/6444.bugfix new file mode 100644 index 0000000000..82e8145547 --- /dev/null +++ b/packages/volto-slate/news/6444.bugfix @@ -0,0 +1 @@ +Fix slight CSS lint violation in volto-slate @sneridagh diff --git a/packages/volto-slate/src/editor/less/editor.less b/packages/volto-slate/src/editor/less/editor.less index a1a51d8b23..e6006e3c19 100644 --- a/packages/volto-slate/src/editor/less/editor.less +++ b/packages/volto-slate/src/editor/less/editor.less @@ -28,7 +28,7 @@ .link-form-container { margin-left: 2px; - display: flex; + display: flex; align-items: center; } } From 907f5a48b093609e6cd8b8b4dafee9feb41f0c52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Fern=C3=A1ndez=20de=20Alba?= Date: Mon, 28 Oct 2024 13:06:54 +0100 Subject: [PATCH 113/209] Added upgrade guide fix for HMR (#6446) Co-authored-by: Steve Piercy --- docs/source/upgrade-guide/index.md | 21 +++++++++++++++++++++ packages/volto/news/6446.documentation | 1 + 2 files changed, 22 insertions(+) create mode 100644 packages/volto/news/6446.documentation diff --git a/docs/source/upgrade-guide/index.md b/docs/source/upgrade-guide/index.md index b9b67fcf4d..7148dbb0ed 100644 --- a/docs/source/upgrade-guide/index.md +++ b/docs/source/upgrade-guide/index.md @@ -579,6 +579,27 @@ Also in the Storybook configuration {file}`.storybook/main.js`. ```{versionadded} @plone/registry 3.0.0-alpha.0 ``` +### Add missing overrides to projects in `package.json` + +This will fix some issues with Hot Module Reload in projects. +It's required in Volto `18.0.0-alpha.47` and later, otherwise the site breaks in development mode. +Add this object to the `pnpm` key in your project {file}`package.json`. + +```json + "pnpm": { + "overrides": { + "@pmmmwh/react-refresh-webpack-plugin": "^0.5.15", + "react-refresh": "^0.14.2" + } + }, +``` + +```{versionadded} Volto 18.0.0-alpha.47 +``` + +```{versionadded} @plone/registry 3.0.0-alpha.0 +``` + ### Deprecation notices for Volto 18 #### `@plone/generator-volto` diff --git a/packages/volto/news/6446.documentation b/packages/volto/news/6446.documentation new file mode 100644 index 0000000000..e03a0087d3 --- /dev/null +++ b/packages/volto/news/6446.documentation @@ -0,0 +1 @@ +Added upgrade guide fix for HMR. @sneridagh From 8fee114ebdf4fa3a3b6582c5ec1ae5cca261f631 Mon Sep 17 00:00:00 2001 From: Teodor Voicu <104510089+tedw87@users.noreply.github.com> Date: Mon, 28 Oct 2024 22:32:11 -0700 Subject: [PATCH 114/209] Fix backend error when there is no query supplied (#6423) --- packages/volto/news/3839.bugfix | 1 + .../src/components/manage/Blocks/Listing/getAsyncData.js | 8 ++++++++ 2 files changed, 9 insertions(+) create mode 100644 packages/volto/news/3839.bugfix diff --git a/packages/volto/news/3839.bugfix b/packages/volto/news/3839.bugfix new file mode 100644 index 0000000000..bdafdb23dc --- /dev/null +++ b/packages/volto/news/3839.bugfix @@ -0,0 +1 @@ +Fix error "Exception: No query supplied" in the listing block, when there is no criteria selected. @tedw87 \ No newline at end of file diff --git a/packages/volto/src/components/manage/Blocks/Listing/getAsyncData.js b/packages/volto/src/components/manage/Blocks/Listing/getAsyncData.js index bc125bb1c7..e7c4996cc5 100644 --- a/packages/volto/src/components/manage/Blocks/Listing/getAsyncData.js +++ b/packages/volto/src/components/manage/Blocks/Listing/getAsyncData.js @@ -24,6 +24,14 @@ export default function getListingBlockAsyncData(props) { const subrequestID = content?.UID ? `${content?.UID}-${id}` : id; const currentPage = getCurrentPage(location, id); + if (!data.querystring) { + return [ + async () => { + return null; + }, + ]; + } + return [ dispatch( getQueryStringResults( From 416615fa2831275eb8c672c06aa628ab4748bdbd Mon Sep 17 00:00:00 2001 From: Tisha Soumya Date: Tue, 29 Oct 2024 15:50:00 +0530 Subject: [PATCH 115/209] A11y: Wrap ToC Block within nav tag (#6084) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: ichim-david Co-authored-by: David Glick Co-authored-by: Steve Piercy Co-authored-by: Víctor Fernández de Alba --- docs/source/upgrade-guide/index.md | 5 ++++ .../volto/locales/ca/LC_MESSAGES/volto.po | 3 +-- .../volto/locales/de/LC_MESSAGES/volto.po | 3 +-- .../volto/locales/en/LC_MESSAGES/volto.po | 3 +-- .../volto/locales/es/LC_MESSAGES/volto.po | 3 +-- .../volto/locales/eu/LC_MESSAGES/volto.po | 3 +-- .../volto/locales/fi/LC_MESSAGES/volto.po | 3 +-- .../volto/locales/fr/LC_MESSAGES/volto.po | 3 +-- .../volto/locales/hi/LC_MESSAGES/volto.po | 3 +-- .../volto/locales/it/LC_MESSAGES/volto.po | 3 +-- .../volto/locales/ja/LC_MESSAGES/volto.po | 3 +-- .../volto/locales/nl/LC_MESSAGES/volto.po | 3 +-- .../volto/locales/pt/LC_MESSAGES/volto.po | 3 +-- .../volto/locales/pt_BR/LC_MESSAGES/volto.po | 3 +-- .../volto/locales/ro/LC_MESSAGES/volto.po | 3 +-- packages/volto/locales/volto.pot | 3 +-- .../volto/locales/zh_CN/LC_MESSAGES/volto.po | 3 +-- packages/volto/news/6082.breaking | 1 + .../src/components/manage/Blocks/ToC/View.jsx | 25 +++++++++++++------ .../ToC/variations/DefaultTocRenderer.jsx | 17 ++----------- .../Blocks/ToC/variations/HorizontalMenu.jsx | 16 ++---------- 21 files changed, 44 insertions(+), 68 deletions(-) create mode 100644 packages/volto/news/6082.breaking diff --git a/docs/source/upgrade-guide/index.md b/docs/source/upgrade-guide/index.md index 7148dbb0ed..b527a00374 100644 --- a/docs/source/upgrade-guide/index.md +++ b/docs/source/upgrade-guide/index.md @@ -487,6 +487,11 @@ The recommended way of generating a project boilerplate is [Cookieplone](https:/ Please update your code to use the `pnpm` based setup. ``` +### Table of Contents block markup change + +The `View` component for the Table of Contents block was updated to use a `nav` element instead of a `div`. +If you've applied custom styles or shadowed this component, you might need to make adjustments. + ### Update needed to project boilerplate generated with `@plone/generator-volto` ```{versionadded} Volto 18.0.0-alpha.42 diff --git a/packages/volto/locales/ca/LC_MESSAGES/volto.po b/packages/volto/locales/ca/LC_MESSAGES/volto.po index 9ad9f86d79..e9e7fe90a2 100644 --- a/packages/volto/locales/ca/LC_MESSAGES/volto.po +++ b/packages/volto/locales/ca/LC_MESSAGES/volto.po @@ -3622,8 +3622,7 @@ msgid "Table" msgstr "Taula" #. Default: "Table of Contents" -#: components/manage/Blocks/ToC/variations/DefaultTocRenderer -#: components/manage/Blocks/ToC/variations/HorizontalMenu +#: components/manage/Blocks/ToC/View msgid "Table of Contents" msgstr "Taula de continguts" diff --git a/packages/volto/locales/de/LC_MESSAGES/volto.po b/packages/volto/locales/de/LC_MESSAGES/volto.po index e8627e28be..07723ded35 100644 --- a/packages/volto/locales/de/LC_MESSAGES/volto.po +++ b/packages/volto/locales/de/LC_MESSAGES/volto.po @@ -3621,8 +3621,7 @@ msgid "Table" msgstr "Tabelle" #. Default: "Table of Contents" -#: components/manage/Blocks/ToC/variations/DefaultTocRenderer -#: components/manage/Blocks/ToC/variations/HorizontalMenu +#: components/manage/Blocks/ToC/View msgid "Table of Contents" msgstr "Inhaltsverzeichnis" diff --git a/packages/volto/locales/en/LC_MESSAGES/volto.po b/packages/volto/locales/en/LC_MESSAGES/volto.po index 1dba741cab..2ad5450f89 100644 --- a/packages/volto/locales/en/LC_MESSAGES/volto.po +++ b/packages/volto/locales/en/LC_MESSAGES/volto.po @@ -3616,8 +3616,7 @@ msgid "Table" msgstr "" #. Default: "Table of Contents" -#: components/manage/Blocks/ToC/variations/DefaultTocRenderer -#: components/manage/Blocks/ToC/variations/HorizontalMenu +#: components/manage/Blocks/ToC/View msgid "Table of Contents" msgstr "" diff --git a/packages/volto/locales/es/LC_MESSAGES/volto.po b/packages/volto/locales/es/LC_MESSAGES/volto.po index 23630b90a1..669fa842da 100644 --- a/packages/volto/locales/es/LC_MESSAGES/volto.po +++ b/packages/volto/locales/es/LC_MESSAGES/volto.po @@ -3623,8 +3623,7 @@ msgid "Table" msgstr "Tabla" #. Default: "Table of Contents" -#: components/manage/Blocks/ToC/variations/DefaultTocRenderer -#: components/manage/Blocks/ToC/variations/HorizontalMenu +#: components/manage/Blocks/ToC/View msgid "Table of Contents" msgstr "Tabla de contenidos" diff --git a/packages/volto/locales/eu/LC_MESSAGES/volto.po b/packages/volto/locales/eu/LC_MESSAGES/volto.po index 095444c38d..504f03b20d 100644 --- a/packages/volto/locales/eu/LC_MESSAGES/volto.po +++ b/packages/volto/locales/eu/LC_MESSAGES/volto.po @@ -3623,8 +3623,7 @@ msgid "Table" msgstr "Taula" #. Default: "Table of Contents" -#: components/manage/Blocks/ToC/variations/DefaultTocRenderer -#: components/manage/Blocks/ToC/variations/HorizontalMenu +#: components/manage/Blocks/ToC/View msgid "Table of Contents" msgstr "Edukien taula" diff --git a/packages/volto/locales/fi/LC_MESSAGES/volto.po b/packages/volto/locales/fi/LC_MESSAGES/volto.po index 2be0080512..99ad9cfb65 100644 --- a/packages/volto/locales/fi/LC_MESSAGES/volto.po +++ b/packages/volto/locales/fi/LC_MESSAGES/volto.po @@ -3621,8 +3621,7 @@ msgid "Table" msgstr "Taulukkoa" #. Default: "Table of Contents" -#: components/manage/Blocks/ToC/variations/DefaultTocRenderer -#: components/manage/Blocks/ToC/variations/HorizontalMenu +#: components/manage/Blocks/ToC/View msgid "Table of Contents" msgstr "Sisällys" diff --git a/packages/volto/locales/fr/LC_MESSAGES/volto.po b/packages/volto/locales/fr/LC_MESSAGES/volto.po index be16dc03d7..fb52823be1 100644 --- a/packages/volto/locales/fr/LC_MESSAGES/volto.po +++ b/packages/volto/locales/fr/LC_MESSAGES/volto.po @@ -3623,8 +3623,7 @@ msgid "Table" msgstr "Table" #. Default: "Table of Contents" -#: components/manage/Blocks/ToC/variations/DefaultTocRenderer -#: components/manage/Blocks/ToC/variations/HorizontalMenu +#: components/manage/Blocks/ToC/View msgid "Table of Contents" msgstr "Table des matières" diff --git a/packages/volto/locales/hi/LC_MESSAGES/volto.po b/packages/volto/locales/hi/LC_MESSAGES/volto.po index 11afb55efa..0028b6e413 100644 --- a/packages/volto/locales/hi/LC_MESSAGES/volto.po +++ b/packages/volto/locales/hi/LC_MESSAGES/volto.po @@ -3616,8 +3616,7 @@ msgid "Table" msgstr "तालिका" #. Default: "Table of Contents" -#: components/manage/Blocks/ToC/variations/DefaultTocRenderer -#: components/manage/Blocks/ToC/variations/HorizontalMenu +#: components/manage/Blocks/ToC/View msgid "Table of Contents" msgstr "सारांश की तालिका" diff --git a/packages/volto/locales/it/LC_MESSAGES/volto.po b/packages/volto/locales/it/LC_MESSAGES/volto.po index 13eb9c2280..d8f9c6b6ec 100644 --- a/packages/volto/locales/it/LC_MESSAGES/volto.po +++ b/packages/volto/locales/it/LC_MESSAGES/volto.po @@ -3616,8 +3616,7 @@ msgid "Table" msgstr "Tabella" #. Default: "Table of Contents" -#: components/manage/Blocks/ToC/variations/DefaultTocRenderer -#: components/manage/Blocks/ToC/variations/HorizontalMenu +#: components/manage/Blocks/ToC/View msgid "Table of Contents" msgstr "Indice dei contenuti" diff --git a/packages/volto/locales/ja/LC_MESSAGES/volto.po b/packages/volto/locales/ja/LC_MESSAGES/volto.po index 8f69541e34..c6ba730668 100644 --- a/packages/volto/locales/ja/LC_MESSAGES/volto.po +++ b/packages/volto/locales/ja/LC_MESSAGES/volto.po @@ -3621,8 +3621,7 @@ msgid "Table" msgstr "テーブル" #. Default: "Table of Contents" -#: components/manage/Blocks/ToC/variations/DefaultTocRenderer -#: components/manage/Blocks/ToC/variations/HorizontalMenu +#: components/manage/Blocks/ToC/View msgid "Table of Contents" msgstr "目次" diff --git a/packages/volto/locales/nl/LC_MESSAGES/volto.po b/packages/volto/locales/nl/LC_MESSAGES/volto.po index 4357dae948..ab60d22d27 100644 --- a/packages/volto/locales/nl/LC_MESSAGES/volto.po +++ b/packages/volto/locales/nl/LC_MESSAGES/volto.po @@ -3620,8 +3620,7 @@ msgid "Table" msgstr "" #. Default: "Table of Contents" -#: components/manage/Blocks/ToC/variations/DefaultTocRenderer -#: components/manage/Blocks/ToC/variations/HorizontalMenu +#: components/manage/Blocks/ToC/View msgid "Table of Contents" msgstr "" diff --git a/packages/volto/locales/pt/LC_MESSAGES/volto.po b/packages/volto/locales/pt/LC_MESSAGES/volto.po index d30596d054..075a03f3d3 100644 --- a/packages/volto/locales/pt/LC_MESSAGES/volto.po +++ b/packages/volto/locales/pt/LC_MESSAGES/volto.po @@ -3621,8 +3621,7 @@ msgid "Table" msgstr "Tabela" #. Default: "Table of Contents" -#: components/manage/Blocks/ToC/variations/DefaultTocRenderer -#: components/manage/Blocks/ToC/variations/HorizontalMenu +#: components/manage/Blocks/ToC/View msgid "Table of Contents" msgstr "" diff --git a/packages/volto/locales/pt_BR/LC_MESSAGES/volto.po b/packages/volto/locales/pt_BR/LC_MESSAGES/volto.po index af520c765e..e7fee30166 100644 --- a/packages/volto/locales/pt_BR/LC_MESSAGES/volto.po +++ b/packages/volto/locales/pt_BR/LC_MESSAGES/volto.po @@ -3622,8 +3622,7 @@ msgid "Table" msgstr "Tabela" #. Default: "Table of Contents" -#: components/manage/Blocks/ToC/variations/DefaultTocRenderer -#: components/manage/Blocks/ToC/variations/HorizontalMenu +#: components/manage/Blocks/ToC/View msgid "Table of Contents" msgstr "Tabela de conteúdos" diff --git a/packages/volto/locales/ro/LC_MESSAGES/volto.po b/packages/volto/locales/ro/LC_MESSAGES/volto.po index 6ef3d38984..3219e49600 100644 --- a/packages/volto/locales/ro/LC_MESSAGES/volto.po +++ b/packages/volto/locales/ro/LC_MESSAGES/volto.po @@ -3616,8 +3616,7 @@ msgid "Table" msgstr "Tabel" #. Default: "Table of Contents" -#: components/manage/Blocks/ToC/variations/DefaultTocRenderer -#: components/manage/Blocks/ToC/variations/HorizontalMenu +#: components/manage/Blocks/ToC/View msgid "Table of Contents" msgstr "Cuprins" diff --git a/packages/volto/locales/volto.pot b/packages/volto/locales/volto.pot index 0490c9b7a6..3d048e5ef7 100644 --- a/packages/volto/locales/volto.pot +++ b/packages/volto/locales/volto.pot @@ -3618,8 +3618,7 @@ msgid "Table" msgstr "" #. Default: "Table of Contents" -#: components/manage/Blocks/ToC/variations/DefaultTocRenderer -#: components/manage/Blocks/ToC/variations/HorizontalMenu +#: components/manage/Blocks/ToC/View msgid "Table of Contents" msgstr "" diff --git a/packages/volto/locales/zh_CN/LC_MESSAGES/volto.po b/packages/volto/locales/zh_CN/LC_MESSAGES/volto.po index 6d98786196..e1948dea26 100644 --- a/packages/volto/locales/zh_CN/LC_MESSAGES/volto.po +++ b/packages/volto/locales/zh_CN/LC_MESSAGES/volto.po @@ -3622,8 +3622,7 @@ msgid "Table" msgstr "表格" #. Default: "Table of Contents" -#: components/manage/Blocks/ToC/variations/DefaultTocRenderer -#: components/manage/Blocks/ToC/variations/HorizontalMenu +#: components/manage/Blocks/ToC/View msgid "Table of Contents" msgstr "表格内容" diff --git a/packages/volto/news/6082.breaking b/packages/volto/news/6082.breaking new file mode 100644 index 0000000000..11bd0cc5a5 --- /dev/null +++ b/packages/volto/news/6082.breaking @@ -0,0 +1 @@ +Wrap Table of Contents block in a `nav` tag, instead of a `div` tag, for better representation improving the block accessibility. @Tishasoumya-02 @ichim-david diff --git a/packages/volto/src/components/manage/Blocks/ToC/View.jsx b/packages/volto/src/components/manage/Blocks/ToC/View.jsx index 6594cb9a6b..80596cd499 100644 --- a/packages/volto/src/components/manage/Blocks/ToC/View.jsx +++ b/packages/volto/src/components/manage/Blocks/ToC/View.jsx @@ -2,10 +2,9 @@ * View toc block. * @module components/manage/Blocks/ToC/View */ - import React from 'react'; import PropTypes from 'prop-types'; -import { injectIntl } from 'react-intl'; +import { FormattedMessage } from 'react-intl'; import cx from 'classnames'; import { Message } from 'semantic-ui-react'; import config from '@plone/volto/registry'; @@ -86,6 +85,8 @@ export const getBlocksTocEntries = (properties, tocData) => { */ const View = (props) => { const { data } = props; + + const title = data.title ? data.title : ''; const { variation } = props; const metadata = props.metadata || props.properties; const blocksFieldname = getBlocksFieldname(metadata); @@ -165,9 +166,19 @@ const View = (props) => { const Renderer = variation?.view; return ( -
    - {props.mode === 'edit' && !data.title && !tocEntries.length && ( - Table of content +
    + ); }; @@ -188,4 +199,4 @@ View.propTypes = { properties: PropTypes.objectOf(PropTypes.any).isRequired, }; -export default injectIntl(withBlockExtensions(View)); +export default withBlockExtensions(View); diff --git a/packages/volto/src/components/manage/Blocks/ToC/variations/DefaultTocRenderer.jsx b/packages/volto/src/components/manage/Blocks/ToC/variations/DefaultTocRenderer.jsx index 9881a1dc38..ba15af9f23 100644 --- a/packages/volto/src/components/manage/Blocks/ToC/variations/DefaultTocRenderer.jsx +++ b/packages/volto/src/components/manage/Blocks/ToC/variations/DefaultTocRenderer.jsx @@ -3,11 +3,9 @@ * @module components/manage/Blocks/ToC/View */ -import React from 'react'; import PropTypes from 'prop-types'; import { map } from 'lodash'; import { List } from 'semantic-ui-react'; -import { FormattedMessage, injectIntl } from 'react-intl'; import Slugger from 'github-slugger'; import { UniversalLink } from '@plone/volto/components'; import { normalizeString } from '@plone/volto/helpers'; @@ -45,18 +43,7 @@ const RenderListItems = ({ items, data }) => { const View = ({ data, tocEntries }) => { return ( <> - {data.title && !data.hide_title ? ( -

    - {data.title || ( - - )} -

    - ) : ( - '' - )} + {data.title && !data.hide_title ?

    {data.title}

    : ''} { return ( <> - {data.title && !data.hide_title ? ( -

    - {data.title || ( - - )} -

    - ) : ( - '' - )} + {data.title && !data.hide_title ?

    {data.title}

    : ''}
    Date: Tue, 29 Oct 2024 11:23:22 +0100 Subject: [PATCH 116/209] BlockStyleWrapper aware of block themes (#6445) Co-authored-by: Steve Piercy --- packages/types/news/6445.feature | 1 + packages/types/src/blocks/index.d.ts | 12 + packages/types/src/config/Blocks.d.ts | 3 + packages/volto/news/6445.feature | 1 + .../manage/Blocks/Block/EditBlockWrapper.jsx | 2 +- .../manage/Blocks/Block/StyleWrapper.jsx | 2 +- packages/volto/src/helpers/Blocks/Blocks.js | 106 +++++--- .../volto/src/helpers/Blocks/Blocks.test.js | 231 ++++++++++++++++-- 8 files changed, 296 insertions(+), 62 deletions(-) create mode 100644 packages/types/news/6445.feature create mode 100644 packages/volto/news/6445.feature diff --git a/packages/types/news/6445.feature b/packages/types/news/6445.feature new file mode 100644 index 0000000000..818f3ad7b7 --- /dev/null +++ b/packages/types/news/6445.feature @@ -0,0 +1 @@ +`StyleDefinitions` in types. @sneridagh diff --git a/packages/types/src/blocks/index.d.ts b/packages/types/src/blocks/index.d.ts index 902e205453..149af1143e 100644 --- a/packages/types/src/blocks/index.d.ts +++ b/packages/types/src/blocks/index.d.ts @@ -120,3 +120,15 @@ export interface BlockEditProps { errors: Record>; blocksErrors: Record>>; } + +export type StyleDefinition = + | { + name: string; + label: string; + style: Record<`--${string}`, string>; + } + | { + name: string; + label: string; + style: undefined; + }; diff --git a/packages/types/src/config/Blocks.d.ts b/packages/types/src/config/Blocks.d.ts index 2b2a6b4f4c..70bf61c5cf 100644 --- a/packages/types/src/config/Blocks.d.ts +++ b/packages/types/src/config/Blocks.d.ts @@ -2,6 +2,7 @@ import type { Content } from '../content'; import type { BlockViewProps, BlockEditProps } from '../blocks'; import type { IntlShape } from 'react-intl'; import { User } from '../services'; +import { StyleDefinition } from '../blocks'; export interface BlocksConfig { blocksConfig: BlocksConfigData; @@ -9,6 +10,8 @@ export interface BlocksConfig { requiredBlocks: string[]; initialBlocks: Record | Record; initialBlocksFocus: Record; + themes: StyleDefinition[]; + widths: StyleDefinition[]; } export interface BlocksConfigData { diff --git a/packages/volto/news/6445.feature b/packages/volto/news/6445.feature new file mode 100644 index 0000000000..213e80ce46 --- /dev/null +++ b/packages/volto/news/6445.feature @@ -0,0 +1 @@ +Enhance the `buildStyleObjectFromData` helper. @sneridagh diff --git a/packages/volto/src/components/manage/Blocks/Block/EditBlockWrapper.jsx b/packages/volto/src/components/manage/Blocks/Block/EditBlockWrapper.jsx index 4e047bcd18..fbfa549d51 100644 --- a/packages/volto/src/components/manage/Blocks/Block/EditBlockWrapper.jsx +++ b/packages/volto/src/components/manage/Blocks/Block/EditBlockWrapper.jsx @@ -69,7 +69,7 @@ const EditBlockWrapper = (props) => { data, classNames, }); - const style = buildStyleObjectFromData(data.styles); + const style = buildStyleObjectFromData(data); // We need to merge the StyleWrapper styles with the draggable props from b-D&D const styleMergedWithDragProps = { diff --git a/packages/volto/src/components/manage/Blocks/Block/StyleWrapper.jsx b/packages/volto/src/components/manage/Blocks/Block/StyleWrapper.jsx index 45c06d6fb2..3f94877a7d 100644 --- a/packages/volto/src/components/manage/Blocks/Block/StyleWrapper.jsx +++ b/packages/volto/src/components/manage/Blocks/Block/StyleWrapper.jsx @@ -19,7 +19,7 @@ const StyleWrapper = (props) => { classNames, }); - style = buildStyleObjectFromData(data.styles); + style = buildStyleObjectFromData(data); const rewrittenChildren = React.Children.map(children, (child) => { if (React.isValidElement(child)) { diff --git a/packages/volto/src/helpers/Blocks/Blocks.js b/packages/volto/src/helpers/Blocks/Blocks.js index 6b24de9080..e863bfc231 100644 --- a/packages/volto/src/helpers/Blocks/Blocks.js +++ b/packages/volto/src/helpers/Blocks/Blocks.js @@ -629,11 +629,11 @@ export const styleDataToStyleObject = (key, value, prefix = '') => { * Generate styles object from data * * @function buildStyleObjectFromData - * @param {Object} obj A style wrapper object data + * @param {Object} data A block data object * @param {string} prefix The prefix (could be dragged from a recursive call, initially empty) * @return {Object} The style object ready to be passed as prop */ -export const buildStyleObjectFromData = (obj = {}, prefix = '') => { +export const buildStyleObjectFromData = (data = {}, prefix = '') => { // style wrapper object has the form: // const styles = { // color: 'red', @@ -641,39 +641,79 @@ export const buildStyleObjectFromData = (obj = {}, prefix = '') => { // } // Returns: {'--background-color: '#AABBCC'} - return Object.fromEntries( - Object.entries(obj) - .filter(([k, v]) => k.startsWith('--') || isObject(v)) - .reduce( - (acc, [k, v]) => [ - ...acc, - // Kept for easy debugging - // ...(() => { - // if (isObject(v)) { - // return Object.entries( - // buildStyleObjectFromData( - // v, - // `${k.endsWith(':noprefix') ? '' : `${prefix}${k}--`}`, - // ), - // ); - // } - // return [styleDataToStyleObject(k, v, prefix)]; - // })(), - ...(isObject(v) - ? Object.entries( - buildStyleObjectFromData( - v, - `${k.endsWith(':noprefix') ? '' : `${prefix}${k}--`}`, // We don't add a prefix if the key ends with the marker suffix - ), - ) - : [styleDataToStyleObject(k, v, prefix)]), - ], - [], - ) - .filter((v) => !!v), - ); + function recursiveBuildStyleObjectFromData(obj, prefix) { + return Object.fromEntries( + Object.entries(obj) + .filter(([k, v]) => k.startsWith('--') || isObject(v)) + .reduce( + (acc, [k, v]) => [ + ...acc, + // Kept for easy debugging + // ...(() => { + // if (isObject(v)) { + // return Object.entries( + // buildStyleObjectFromData( + // v, + // `${k.endsWith(':noprefix') ? '' : `${prefix}${k}--`}`, + // ), + // ); + // } + // return [styleDataToStyleObject(k, v, prefix)]; + // })(), + ...(isObject(v) + ? Object.entries( + recursiveBuildStyleObjectFromData( + v, + `${k.endsWith(':noprefix') ? '' : `${prefix}${k}--`}`, // We don't add a prefix if the key ends with the marker suffix + ), + ) + : [styleDataToStyleObject(k, v, prefix)]), + ], + [], + ) + .filter((v) => !!v), + ); + } + + // If the block has a `@type`, it's a full data block object + // Then apply the style enhancers + if (data['@type']) { + const styleObj = data.styles || {}; + const stylesFromCSSproperties = recursiveBuildStyleObjectFromData( + styleObj, + prefix, + ); + + let stylesFromObjectStyleEnhancers = {}; + const enhancers = config.getUtilities({ + type: 'styleWrapperStyleObjectEnhancer', + }); + + enhancers.forEach(({ method }) => { + stylesFromObjectStyleEnhancers = { + ...stylesFromObjectStyleEnhancers, + ...method(data), + }; + }); + + return { ...stylesFromCSSproperties, ...stylesFromObjectStyleEnhancers }; + } else { + return recursiveBuildStyleObjectFromData(data, prefix); + } }; +/** + * Find a matching style by name given a style definition + * + * @function findStyleByName + * @param {Object} styleDefinitions An object with the style definitions + * @param {string} name The name of the style to find + * @return {Object} The style object of the matching name + */ +export function findStyleByName(styleDefinitions, name) { + return styleDefinitions.find((color) => color.name === name)?.style; +} + /** * Return previous/next blocks given the content object and the current block id * diff --git a/packages/volto/src/helpers/Blocks/Blocks.test.js b/packages/volto/src/helpers/Blocks/Blocks.test.js index 900171717f..659b3c9b50 100644 --- a/packages/volto/src/helpers/Blocks/Blocks.test.js +++ b/packages/volto/src/helpers/Blocks/Blocks.test.js @@ -24,6 +24,7 @@ import { findBlocks, findContainer, isBlockContainer, + findStyleByName, } from './Blocks'; import config from '@plone/volto/registry'; @@ -1103,38 +1104,68 @@ describe('Blocks', () => { }); describe('buildStyleObjectFromData', () => { + beforeEach(() => { + function blockThemesEnhancer(data) { + const blockConfig = config.blocks.blocksConfig[data['@type']]; + const blockStyleDefinitions = + // We look up for the blockThemes in the block's data, then in the global config + // We keep data.colors for BBB, but data.themes should be used + blockConfig.themes || + blockConfig.colors || + config.blocks.themes || + []; + return data.theme + ? findStyleByName(blockStyleDefinitions, data.theme) + : {}; + } + config.registerUtility({ + name: 'blockThemesEnhancer', + type: 'styleWrapperStyleObjectEnhancer', + method: blockThemesEnhancer, + }); + }); + it('Understands style converter for style values, no styles found', () => { - const styles = { - color: 'red', - backgroundColor: '#FFF', + const data = { + '@type': 'text', + styles: { + color: 'red', + backgroundColor: '#FFF', + }, }; - expect(buildStyleObjectFromData(styles)).toEqual({}); + expect(buildStyleObjectFromData(data)).toEqual({}); }); it('Understands style converter for style values', () => { - const styles = { - color: 'red', - '--background-color': '#FFF', + const data = { + '@type': 'text', + styles: { + color: 'red', + '--background-color': '#FFF', + }, }; - expect(buildStyleObjectFromData(styles)).toEqual({ + expect(buildStyleObjectFromData(data)).toEqual({ '--background-color': '#FFF', }); }); it('Supports multiple nested levels', () => { - const styles = { - '--color': 'red', - backgroundColor: '#AABBCC', - nested: { - l1: 'white', - '--foo': 'white', - level2: { - '--foo': '#fff', - bar: '#000', + const data = { + '@type': 'text', + styles: { + '--color': 'red', + backgroundColor: '#AABBCC', + nested: { + l1: 'white', + '--foo': 'white', + level2: { + '--foo': '#fff', + bar: '#000', + }, }, }, }; - expect(buildStyleObjectFromData(styles)).toEqual({ + expect(buildStyleObjectFromData(data)).toEqual({ '--color': 'red', '--nested--foo': 'white', '--nested--level2--foo': '#fff', @@ -1142,22 +1173,168 @@ describe('Blocks', () => { }); it('Supports multiple nested levels and optional inclusion of the name of the level', () => { - const styles = { + const data = { + '@type': 'text', + styles: { + '--color': 'red', + backgroundColor: '#AABBCC', + 'nested:noprefix': { + l1: 'white', + '--foo': 'white', + level2: { + '--foo': '#fff', + bar: '#000', + }, + }, + }, + }; + expect(buildStyleObjectFromData(data)).toEqual({ '--color': 'red', - backgroundColor: '#AABBCC', - 'nested:noprefix': { - l1: 'white', - '--foo': 'white', - level2: { - '--foo': '#fff', - bar: '#000', + '--foo': 'white', + '--level2--foo': '#fff', + }); + }); + + it('Supports named theme block - with global config', () => { + config.blocks.themes = [ + { + style: { + '--primary-color': '#fff', + '--primary-foreground-color': '#ecebeb', + }, + name: 'default', + label: 'Default', + }, + { + style: { + '--primary-color': '#000', + '--primary-foreground-color': '#fff', + }, + name: 'primary', + label: 'Primary', + }, + ]; + const data = { + '@type': 'text', + theme: 'primary', + }; + expect(buildStyleObjectFromData(data)).toEqual({ + '--primary-color': '#000', + '--primary-foreground-color': '#fff', + }); + }); + + it('Supports named theme block - with local block themes config', () => { + config.blocks.themes = [ + { + style: { + '--primary-color': '#fff', + '--primary-foreground-color': '#ecebeb', + }, + name: 'default', + label: 'Default', + }, + { + style: { + '--primary-color': '#000', + '--primary-foreground-color': '#fff', + }, + name: 'primary', + label: 'Primary', + }, + ]; + const themes = [ + { + style: { + '--primary-color': '#fff', + '--primary-foreground-color': '#ecebeb', + }, + name: 'default', + label: 'Default', + }, + { + style: { + '--secondary-color': '#bbb', + '--secondary-foreground-color': '#ddd', }, + name: 'secondary', + label: 'Secondary', }, + ]; + config.blocks.blocksConfig.text.themes = themes; + const data = { + '@type': 'text', + theme: 'secondary', }; - expect(buildStyleObjectFromData(styles)).toEqual({ + + expect(buildStyleObjectFromData(data)).toEqual({ + '--secondary-color': '#bbb', + '--secondary-foreground-color': '#ddd', + }); + }); + + it('All together now - named theme block - with local block themes config', () => { + config.blocks.blocksThemes = [ + { + style: { + '--primary-color': '#fff', + '--primary-foreground-color': '#ecebeb', + }, + name: 'default', + label: 'Default', + }, + { + style: { + '--primary-color': '#000', + '--primary-foreground-color': '#fff', + }, + name: 'primary', + label: 'Primary', + }, + ]; + const themes = [ + { + style: { + '--primary-color': '#fff', + '--primary-foreground-color': '#ecebeb', + }, + name: 'default', + label: 'Default', + }, + { + style: { + '--secondary-color': '#bbb', + '--secondary-foreground-color': '#ddd', + }, + name: 'secondary', + label: 'Secondary', + }, + ]; + + const data = { + '@type': 'text', + styles: { + '--color': 'red', + backgroundColor: '#AABBCC', + 'nested:noprefix': { + l1: 'white', + '--foo': 'white', + level2: { + '--foo': '#fff', + bar: '#000', + }, + }, + }, + theme: 'secondary', + themes, + }; + + expect(buildStyleObjectFromData(data)).toEqual({ '--color': 'red', '--foo': 'white', '--level2--foo': '#fff', + '--secondary-color': '#bbb', + '--secondary-foreground-color': '#ddd', }); }); }); From e5b8a404f49cd861b4773b6bae47dd0aca5c0898 Mon Sep 17 00:00:00 2001 From: Jefferson Bledsoe Date: Tue, 29 Oct 2024 11:18:13 +0000 Subject: [PATCH 117/209] Fix page changes not being announced by assistive technology when navigating using the client-side router (#5288) Co-authored-by: ichim-david --- .../volto/cypress/tests/core/basic/locking.js | 4 +- .../cypress/tests/core/basic/metadata.js | 4 +- .../volto/cypress/tests/workingCopy/create.js | 19 ++++-- packages/volto/news/5288.bugfix | 1 + .../volto/src/components/theme/App/App.jsx | 2 + .../src/components/theme/App/App.test.jsx | 7 +- .../theme/App/__snapshots__/App.test.jsx.snap | 18 ++++++ .../theme/RouteAnnouncer/RouteAnnouncer.jsx | 64 +++++++++++++++++++ 8 files changed, 107 insertions(+), 12 deletions(-) create mode 100644 packages/volto/news/5288.bugfix create mode 100644 packages/volto/src/components/theme/RouteAnnouncer/RouteAnnouncer.jsx diff --git a/packages/volto/cypress/tests/core/basic/locking.js b/packages/volto/cypress/tests/core/basic/locking.js index d414667777..63e47823eb 100644 --- a/packages/volto/cypress/tests/core/basic/locking.js +++ b/packages/volto/cypress/tests/core/basic/locking.js @@ -41,8 +41,8 @@ describe('Document locking', () => { cy.visit('/document'); cy.wait('@content'); - cy.findByRole('alert') - .get('.toast-inner-content') + cy.get('.Toastify') + .findByRole('alert') .contains('This item was locked by Editor 1 on'); }); diff --git a/packages/volto/cypress/tests/core/basic/metadata.js b/packages/volto/cypress/tests/core/basic/metadata.js index 70c30e31a9..6d5b414aad 100644 --- a/packages/volto/cypress/tests/core/basic/metadata.js +++ b/packages/volto/cypress/tests/core/basic/metadata.js @@ -34,8 +34,8 @@ describe('Add Content Tests', () => { cy.get('.ui.basic.icon.button.image').contains('Image').click(); cy.get('#toolbar-save').click(); - cy.findByRole('alert') - .get('.toast-inner-content') + cy.get('.Toastify') + .findByRole('alert') .contains('Required input is missing'); cy.get('.sidebar-container .tabs-wrapper .active.item').contains('Page'); }); diff --git a/packages/volto/cypress/tests/workingCopy/create.js b/packages/volto/cypress/tests/workingCopy/create.js index 9d72f4c2c5..55b737e07f 100644 --- a/packages/volto/cypress/tests/workingCopy/create.js +++ b/packages/volto/cypress/tests/workingCopy/create.js @@ -19,8 +19,11 @@ describe('Working Copy Tests - Create', () => { it('Basic create operation', function () { cy.get('#toolbar-more').click(); cy.findByLabelText('Create working copy').click(); - cy.findByRole('alert').contains('This is a working copy of'); - cy.findByRole('alert') + cy.get('.Toastify') + .findByRole('alert') + .contains('This is a working copy of'); + cy.get('.Toastify') + .findByRole('alert') .get('.toast-inner-content a') .should('have.attr', 'href') .and('include', '/document'); @@ -37,11 +40,17 @@ describe('Working Copy Tests - Create', () => { it('Navigation through baseline-working copy', function () { cy.get('#toolbar-more').click(); cy.findByLabelText('Create working copy').click(); - cy.findByRole('alert').get('.toast-inner-content a').click(); + cy.get('.Toastify') + .findByRole('alert') + .get('.toast-inner-content a') + .click(); cy.url().should('eq', Cypress.config().baseUrl + '/document'); - cy.findByRole('alert').contains('This has an ongoing working copy in'); - cy.findByRole('alert') + cy.get('.Toastify') + .findByRole('alert') + .contains('This has an ongoing working copy in'); + cy.get('.Toastify') + .findByRole('alert') .get('.toast-inner-content a') .should('have.attr', 'href') .and('include', '/working_copy_of_document'); diff --git a/packages/volto/news/5288.bugfix b/packages/volto/news/5288.bugfix new file mode 100644 index 0000000000..e53a45483d --- /dev/null +++ b/packages/volto/news/5288.bugfix @@ -0,0 +1 @@ +Fixed page changes not being announced to screen reader users. @JeffersonBledsoe \ No newline at end of file diff --git a/packages/volto/src/components/theme/App/App.jsx b/packages/volto/src/components/theme/App/App.jsx index 3ddef1b9df..a7a65415f0 100644 --- a/packages/volto/src/components/theme/App/App.jsx +++ b/packages/volto/src/components/theme/App/App.jsx @@ -51,6 +51,7 @@ import clearSVG from '@plone/volto/icons/clear.svg'; import MultilingualRedirector from '@plone/volto/components/theme/MultilingualRedirector/MultilingualRedirector'; import WorkingCopyToastsFactory from '@plone/volto/components/manage/WorkingCopyToastsFactory/WorkingCopyToastsFactory'; import LockingToastsFactory from '@plone/volto/components/manage/LockingToastsFactory/LockingToastsFactory'; +import RouteAnnouncer from '@plone/volto/components/theme/RouteAnnouncer/RouteAnnouncer'; /** * @export @@ -191,6 +192,7 @@ export class App extends Component { +