diff --git a/frontend/.storybook/main.js b/frontend/.storybook/main.js index 89f2668..501cb6b 100644 --- a/frontend/.storybook/main.js +++ b/frontend/.storybook/main.js @@ -74,6 +74,10 @@ module.exports = { name: '@storybook/react-webpack5', options: { builder: { useSWC: true } }, }, + staticDirs: [ + '../packages/volto-techevent/src/stories/static', + { from: '../packages', to: '/packages' }, + ], typescript: { check: false, checkOptions: {}, diff --git a/frontend/package.json b/frontend/package.json index 4d3b778..d8c559b 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -35,7 +35,7 @@ "dependencies": { "@plone/volto": "workspace:*", "@plone/registry": "workspace:*", - "@kitconcept/volto-light-theme": "6.0.1", + "@kitconcept/volto-light-theme": "7.6.1", "@plone-collective/volto-techevent": "workspace:*" }, "devDependencies": { diff --git a/frontend/packages/volto-techevent/locales/de/LC_MESSAGES/volto.po b/frontend/packages/volto-techevent/locales/de/LC_MESSAGES/volto.po index d9b9aa3..8628490 100644 --- a/frontend/packages/volto-techevent/locales/de/LC_MESSAGES/volto.po +++ b/frontend/packages/volto-techevent/locales/de/LC_MESSAGES/volto.po @@ -16,11 +16,26 @@ msgstr "" msgid "Add (object list)" msgstr "" +#. Default: "Add Button" +#: messages +msgid "Add Button" +msgstr "" + #. Default: "Align" #: messages msgid "Align" msgstr "" +#. Default: "Background Image" +#: messages +msgid "Background Image" +msgstr "" + +#. Default: "Background color" +#: components/Blocks/schema +msgid "Background color" +msgstr "" + #. Default: "Be the first!" #: messages msgid "Be the first!" @@ -31,21 +46,76 @@ msgstr "" msgid "Benefit" msgstr "" +#. Default: "Block Width" +#: messages +msgid "Block Width" +msgstr "" + +#. Default: "Button" +#: messages +msgid "Button" +msgstr "" + #. Default: "CTA Label" #: messages msgid "CTA Label" msgstr "" +#. Default: "Call to Action" +#: messages +msgid "Call to Action" +msgstr "" + #. Default: "Collapse item" #: components/Widgets/DataGridList msgid "Collapse item" msgstr "" +#. Default: "Countdown Block" +#: messages +msgid "Countdown Block" +msgstr "" + +#. Default: "Countdown Size" +#: messages +msgid "Countdown Size" +msgstr "" + #. Default: "Day" #: components/Schedule/Schedule msgid "Day" msgstr "" +#. Default: "Days (DD)" +#: messages +msgid "Days (DD)" +msgstr "" + +#. Default: "Days, Hours (DD:HH)" +#: messages +msgid "Days, Hours (DD:HH)" +msgstr "" + +#. Default: "Days, Hours, Minutes (DD:HH:MM)" +#: messages +msgid "Days, Hours, Minutes (DD:HH:MM)" +msgstr "" + +#. Default: "Days, Hours, Minutes, Seconds (DD:HH:MM:SS)" +#: messages +msgid "Days, Hours, Minutes, Seconds (DD:HH:MM:SS)" +msgstr "" + +#. Default: "Default" +#: components/Attendee/AttendeeLogin +msgid "Default" +msgstr "" + +#. Default: "Description" +#: messages +msgid "Description" +msgstr "" + #. Default: "Details" #: messages msgid "Details" @@ -61,6 +131,11 @@ msgstr "" msgid "Display Headline?" msgstr "" +#. Default: "Display Separator" +#: messages +msgid "Display Separator" +msgstr "" + #. Default: "Empty object list" #: components/Widgets/DataGridList msgid "Empty object list" @@ -71,16 +146,61 @@ msgstr "" msgid "Filter by Day" msgstr "" +#. Default: "Full Overlay" +#: messages +msgid "Full Overlay" +msgstr "" + #. Default: "Heading" #: messages msgid "Heading" msgstr "" +#. Default: "Height" +#: messages +msgid "Height" +msgstr "" + +#. Default: "Hide Button" +#: messages +msgid "Hide Button" +msgstr "" + +#. Default: "Hide after target date is reached" +#: messages +msgid "Hide after target date is reached" +msgstr "" + +#. Default: "Link" +#: messages +msgid "Link" +msgstr "" + #. Default: "Materials" #: messages msgid "Materials" msgstr "" +#. Default: "Open link in new tab" +#: messages +msgid "Open link in new tab" +msgstr "" + +#. Default: "Overlay" +#: messages +msgid "Overlay" +msgstr "" + +#. Default: "Overlay Color" +#: messages +msgid "Overlay Color" +msgstr "" + +#. Default: "Overlay Text Color" +#: messages +msgid "Overlay Text Color" +msgstr "" + #. Default: "Package Benefits" #: messages msgid "Package Benefits" @@ -96,6 +216,11 @@ msgstr "" msgid "Packages & Sponsors" msgstr "" +#. Default: "Parallax Block" +#: messages +msgid "Parallax Block" +msgstr "" + #. Default: "Presentations" #: messages msgid "Presentations" @@ -106,6 +231,11 @@ msgstr "" msgid "Remove item" msgstr "" +#. Default: "Request sent" +#: components/Attendee/AttendeeLogin +msgid "Request sent" +msgstr "" + #. Default: "Requirements" #: messages msgid "Requirements" @@ -116,6 +246,11 @@ msgstr "" msgid "Schedule Block" msgstr "" +#. Default: "Send request" +#: components/Attendee/AttendeeLogin +msgid "Send request" +msgstr "" + #. Default: "Show item" #: components/Widgets/DataGridList msgid "Show item" @@ -141,6 +276,16 @@ msgstr "" msgid "Sponsorship Form" msgstr "" +#. Default: "Text" +#: messages +msgid "Text" +msgstr "" + +#. Default: "Textbox" +#: messages +msgid "Textbox" +msgstr "" + #. Default: "Title" #: messages msgid "Title" @@ -151,6 +296,51 @@ msgstr "" msgid "Video" msgstr "" +#. Default: "What should be displayed?" +#: messages +msgid "What should be displayed?" +msgstr "" + +#. Default: "Your email is required to request a one-time password." +#: components/Attendee/AttendeeLogin +msgid "Your email is required to request a one-time password." +msgstr "" + +#. Default: "Request a one-time password" +#: components/Attendee/AttendeeLogin +msgid "box_request_one_time_password" +msgstr "" + +#. Default: "Continue to login" +#: components/Attendee/AttendeeLogin +msgid "continue_to_login" +msgstr "" + +#. Default: "days" +#: components/Countdown/CountdownElements +msgid "days" +msgstr "" + +#. Default: "Enter your email to receive a one-time password for login." +#: components/Attendee/AttendeeLogin +msgid "description_request_one_time_password" +msgstr "" + +#. Default: "Please, check your email and log in using your email address and the one-time password you received." +#: components/Attendee/AttendeeLogin +msgid "description_request_sent" +msgstr "" + +#. Default: "One-time password sent" +#: components/Attendee/AttendeeLogin +msgid "heading_request_sent" +msgstr "" + +#. Default: "hours" +#: components/Countdown/CountdownElements +msgid "hours" +msgstr "" + #. Default: "Instructor" #: components/Presenter/PresenterCategory msgid "instructor" @@ -161,11 +351,26 @@ msgstr "" msgid "keynote-speaker" msgstr "" +#. Default: "My email is" +#: components/Attendee/AttendeeLogin +msgid "label_my_email_is" +msgstr "" + +#. Default: "minutes" +#: components/Countdown/CountdownElements +msgid "minutes" +msgstr "" + #. Default: "Plone Foundation Member" #: components/Presenter/PresenterCategory msgid "pf-member" msgstr "" +#. Default: "seconds" +#: components/Countdown/CountdownElements +msgid "seconds" +msgstr "" + #. Default: "Speaker" #: components/Presenter/PresenterCategory msgid "speaker" diff --git a/frontend/packages/volto-techevent/locales/en/LC_MESSAGES/volto.po b/frontend/packages/volto-techevent/locales/en/LC_MESSAGES/volto.po index c180702..65ff1fc 100644 --- a/frontend/packages/volto-techevent/locales/en/LC_MESSAGES/volto.po +++ b/frontend/packages/volto-techevent/locales/en/LC_MESSAGES/volto.po @@ -16,11 +16,26 @@ msgstr "" msgid "Add (object list)" msgstr "" +#. Default: "Add Button" +#: messages +msgid "Add Button" +msgstr "" + #. Default: "Align" #: messages msgid "Align" msgstr "" +#. Default: "Background Image" +#: messages +msgid "Background Image" +msgstr "" + +#. Default: "Background color" +#: components/Blocks/schema +msgid "Background color" +msgstr "" + #. Default: "Be the first!" #: messages msgid "Be the first!" @@ -31,21 +46,76 @@ msgstr "" msgid "Benefit" msgstr "" +#. Default: "Block Width" +#: messages +msgid "Block Width" +msgstr "" + +#. Default: "Button" +#: messages +msgid "Button" +msgstr "" + #. Default: "CTA Label" #: messages msgid "CTA Label" msgstr "" +#. Default: "Call to Action" +#: messages +msgid "Call to Action" +msgstr "" + #. Default: "Collapse item" #: components/Widgets/DataGridList msgid "Collapse item" msgstr "" +#. Default: "Countdown Block" +#: messages +msgid "Countdown Block" +msgstr "" + +#. Default: "Countdown Size" +#: messages +msgid "Countdown Size" +msgstr "" + #. Default: "Day" #: components/Schedule/Schedule msgid "Day" msgstr "" +#. Default: "Days (DD)" +#: messages +msgid "Days (DD)" +msgstr "" + +#. Default: "Days, Hours (DD:HH)" +#: messages +msgid "Days, Hours (DD:HH)" +msgstr "" + +#. Default: "Days, Hours, Minutes (DD:HH:MM)" +#: messages +msgid "Days, Hours, Minutes (DD:HH:MM)" +msgstr "" + +#. Default: "Days, Hours, Minutes, Seconds (DD:HH:MM:SS)" +#: messages +msgid "Days, Hours, Minutes, Seconds (DD:HH:MM:SS)" +msgstr "" + +#. Default: "Default" +#: components/Attendee/AttendeeLogin +msgid "Default" +msgstr "" + +#. Default: "Description" +#: messages +msgid "Description" +msgstr "" + #. Default: "Details" #: messages msgid "Details" @@ -61,6 +131,11 @@ msgstr "" msgid "Display Headline?" msgstr "" +#. Default: "Display Separator" +#: messages +msgid "Display Separator" +msgstr "" + #. Default: "Empty object list" #: components/Widgets/DataGridList msgid "Empty object list" @@ -71,16 +146,61 @@ msgstr "" msgid "Filter by Day" msgstr "" +#. Default: "Full Overlay" +#: messages +msgid "Full Overlay" +msgstr "" + #. Default: "Heading" #: messages msgid "Heading" msgstr "" +#. Default: "Height" +#: messages +msgid "Height" +msgstr "" + +#. Default: "Hide Button" +#: messages +msgid "Hide Button" +msgstr "" + +#. Default: "Hide after target date is reached" +#: messages +msgid "Hide after target date is reached" +msgstr "" + +#. Default: "Link" +#: messages +msgid "Link" +msgstr "" + #. Default: "Materials" #: messages msgid "Materials" msgstr "" +#. Default: "Open link in new tab" +#: messages +msgid "Open link in new tab" +msgstr "" + +#. Default: "Overlay" +#: messages +msgid "Overlay" +msgstr "" + +#. Default: "Overlay Color" +#: messages +msgid "Overlay Color" +msgstr "" + +#. Default: "Overlay Text Color" +#: messages +msgid "Overlay Text Color" +msgstr "" + #. Default: "Package Benefits" #: messages msgid "Package Benefits" @@ -96,6 +216,11 @@ msgstr "" msgid "Packages & Sponsors" msgstr "" +#. Default: "Parallax Block" +#: messages +msgid "Parallax Block" +msgstr "" + #. Default: "Presentations" #: messages msgid "Presentations" @@ -106,6 +231,11 @@ msgstr "" msgid "Remove item" msgstr "" +#. Default: "Request sent" +#: components/Attendee/AttendeeLogin +msgid "Request sent" +msgstr "" + #. Default: "Requirements" #: messages msgid "Requirements" @@ -116,6 +246,11 @@ msgstr "" msgid "Schedule Block" msgstr "" +#. Default: "Send request" +#: components/Attendee/AttendeeLogin +msgid "Send request" +msgstr "" + #. Default: "Show item" #: components/Widgets/DataGridList msgid "Show item" @@ -141,6 +276,16 @@ msgstr "" msgid "Sponsorship Form" msgstr "" +#. Default: "Text" +#: messages +msgid "Text" +msgstr "" + +#. Default: "Textbox" +#: messages +msgid "Textbox" +msgstr "" + #. Default: "Title" #: messages msgid "Title" @@ -151,6 +296,51 @@ msgstr "" msgid "Video" msgstr "" +#. Default: "What should be displayed?" +#: messages +msgid "What should be displayed?" +msgstr "" + +#. Default: "Your email is required to request a one-time password." +#: components/Attendee/AttendeeLogin +msgid "Your email is required to request a one-time password." +msgstr "" + +#. Default: "Request a one-time password" +#: components/Attendee/AttendeeLogin +msgid "box_request_one_time_password" +msgstr "" + +#. Default: "Continue to login" +#: components/Attendee/AttendeeLogin +msgid "continue_to_login" +msgstr "" + +#. Default: "days" +#: components/Countdown/CountdownElements +msgid "days" +msgstr "" + +#. Default: "Enter your email to receive a one-time password for login." +#: components/Attendee/AttendeeLogin +msgid "description_request_one_time_password" +msgstr "" + +#. Default: "Please, check your email and log in using your email address and the one-time password you received." +#: components/Attendee/AttendeeLogin +msgid "description_request_sent" +msgstr "" + +#. Default: "One-time password sent" +#: components/Attendee/AttendeeLogin +msgid "heading_request_sent" +msgstr "" + +#. Default: "hours" +#: components/Countdown/CountdownElements +msgid "hours" +msgstr "" + #. Default: "Instructor" #: components/Presenter/PresenterCategory msgid "instructor" @@ -161,11 +351,26 @@ msgstr "" msgid "keynote-speaker" msgstr "" +#. Default: "My email is" +#: components/Attendee/AttendeeLogin +msgid "label_my_email_is" +msgstr "" + +#. Default: "minutes" +#: components/Countdown/CountdownElements +msgid "minutes" +msgstr "" + #. Default: "Plone Foundation Member" #: components/Presenter/PresenterCategory msgid "pf-member" msgstr "" +#. Default: "seconds" +#: components/Countdown/CountdownElements +msgid "seconds" +msgstr "" + #. Default: "Speaker" #: components/Presenter/PresenterCategory msgid "speaker" diff --git a/frontend/packages/volto-techevent/locales/es/LC_MESSAGES/volto.po b/frontend/packages/volto-techevent/locales/es/LC_MESSAGES/volto.po index 35e8d1d..d5966f0 100644 --- a/frontend/packages/volto-techevent/locales/es/LC_MESSAGES/volto.po +++ b/frontend/packages/volto-techevent/locales/es/LC_MESSAGES/volto.po @@ -23,11 +23,26 @@ msgstr "" msgid "Add (object list)" msgstr "" +#. Default: "Add Button" +#: messages +msgid "Add Button" +msgstr "" + #. Default: "Align" #: messages msgid "Align" msgstr "" +#. Default: "Background Image" +#: messages +msgid "Background Image" +msgstr "" + +#. Default: "Background color" +#: components/Blocks/schema +msgid "Background color" +msgstr "" + #. Default: "Be the first!" #: messages msgid "Be the first!" @@ -38,21 +53,76 @@ msgstr "" msgid "Benefit" msgstr "" +#. Default: "Block Width" +#: messages +msgid "Block Width" +msgstr "" + +#. Default: "Button" +#: messages +msgid "Button" +msgstr "" + #. Default: "CTA Label" #: messages msgid "CTA Label" msgstr "" +#. Default: "Call to Action" +#: messages +msgid "Call to Action" +msgstr "" + #. Default: "Collapse item" #: components/Widgets/DataGridList msgid "Collapse item" msgstr "" +#. Default: "Countdown Block" +#: messages +msgid "Countdown Block" +msgstr "" + +#. Default: "Countdown Size" +#: messages +msgid "Countdown Size" +msgstr "" + #. Default: "Day" #: components/Schedule/Schedule msgid "Day" msgstr "" +#. Default: "Days (DD)" +#: messages +msgid "Days (DD)" +msgstr "" + +#. Default: "Days, Hours (DD:HH)" +#: messages +msgid "Days, Hours (DD:HH)" +msgstr "" + +#. Default: "Days, Hours, Minutes (DD:HH:MM)" +#: messages +msgid "Days, Hours, Minutes (DD:HH:MM)" +msgstr "" + +#. Default: "Days, Hours, Minutes, Seconds (DD:HH:MM:SS)" +#: messages +msgid "Days, Hours, Minutes, Seconds (DD:HH:MM:SS)" +msgstr "" + +#. Default: "Default" +#: components/Attendee/AttendeeLogin +msgid "Default" +msgstr "" + +#. Default: "Description" +#: messages +msgid "Description" +msgstr "" + #. Default: "Details" #: messages msgid "Details" @@ -68,6 +138,11 @@ msgstr "" msgid "Display Headline?" msgstr "" +#. Default: "Display Separator" +#: messages +msgid "Display Separator" +msgstr "" + #. Default: "Empty object list" #: components/Widgets/DataGridList msgid "Empty object list" @@ -78,16 +153,61 @@ msgstr "" msgid "Filter by Day" msgstr "" +#. Default: "Full Overlay" +#: messages +msgid "Full Overlay" +msgstr "" + #. Default: "Heading" #: messages msgid "Heading" msgstr "" +#. Default: "Height" +#: messages +msgid "Height" +msgstr "" + +#. Default: "Hide Button" +#: messages +msgid "Hide Button" +msgstr "" + +#. Default: "Hide after target date is reached" +#: messages +msgid "Hide after target date is reached" +msgstr "" + +#. Default: "Link" +#: messages +msgid "Link" +msgstr "" + #. Default: "Materials" #: messages msgid "Materials" msgstr "" +#. Default: "Open link in new tab" +#: messages +msgid "Open link in new tab" +msgstr "" + +#. Default: "Overlay" +#: messages +msgid "Overlay" +msgstr "" + +#. Default: "Overlay Color" +#: messages +msgid "Overlay Color" +msgstr "" + +#. Default: "Overlay Text Color" +#: messages +msgid "Overlay Text Color" +msgstr "" + #. Default: "Package Benefits" #: messages msgid "Package Benefits" @@ -103,6 +223,11 @@ msgstr "" msgid "Packages & Sponsors" msgstr "" +#. Default: "Parallax Block" +#: messages +msgid "Parallax Block" +msgstr "" + #. Default: "Presentations" #: messages msgid "Presentations" @@ -113,6 +238,11 @@ msgstr "" msgid "Remove item" msgstr "" +#. Default: "Request sent" +#: components/Attendee/AttendeeLogin +msgid "Request sent" +msgstr "" + #. Default: "Requirements" #: messages msgid "Requirements" @@ -123,6 +253,11 @@ msgstr "" msgid "Schedule Block" msgstr "" +#. Default: "Send request" +#: components/Attendee/AttendeeLogin +msgid "Send request" +msgstr "" + #. Default: "Show item" #: components/Widgets/DataGridList msgid "Show item" @@ -148,6 +283,16 @@ msgstr "" msgid "Sponsorship Form" msgstr "" +#. Default: "Text" +#: messages +msgid "Text" +msgstr "" + +#. Default: "Textbox" +#: messages +msgid "Textbox" +msgstr "" + #. Default: "Title" #: messages msgid "Title" @@ -158,6 +303,51 @@ msgstr "" msgid "Video" msgstr "" +#. Default: "What should be displayed?" +#: messages +msgid "What should be displayed?" +msgstr "" + +#. Default: "Your email is required to request a one-time password." +#: components/Attendee/AttendeeLogin +msgid "Your email is required to request a one-time password." +msgstr "" + +#. Default: "Request a one-time password" +#: components/Attendee/AttendeeLogin +msgid "box_request_one_time_password" +msgstr "" + +#. Default: "Continue to login" +#: components/Attendee/AttendeeLogin +msgid "continue_to_login" +msgstr "" + +#. Default: "days" +#: components/Countdown/CountdownElements +msgid "days" +msgstr "" + +#. Default: "Enter your email to receive a one-time password for login." +#: components/Attendee/AttendeeLogin +msgid "description_request_one_time_password" +msgstr "" + +#. Default: "Please, check your email and log in using your email address and the one-time password you received." +#: components/Attendee/AttendeeLogin +msgid "description_request_sent" +msgstr "" + +#. Default: "One-time password sent" +#: components/Attendee/AttendeeLogin +msgid "heading_request_sent" +msgstr "" + +#. Default: "hours" +#: components/Countdown/CountdownElements +msgid "hours" +msgstr "" + #. Default: "Instructor" #: components/Presenter/PresenterCategory msgid "instructor" @@ -168,11 +358,26 @@ msgstr "" msgid "keynote-speaker" msgstr "" +#. Default: "My email is" +#: components/Attendee/AttendeeLogin +msgid "label_my_email_is" +msgstr "" + +#. Default: "minutes" +#: components/Countdown/CountdownElements +msgid "minutes" +msgstr "" + #. Default: "Plone Foundation Member" #: components/Presenter/PresenterCategory msgid "pf-member" msgstr "" +#. Default: "seconds" +#: components/Countdown/CountdownElements +msgid "seconds" +msgstr "" + #. Default: "Speaker" #: components/Presenter/PresenterCategory msgid "speaker" diff --git a/frontend/packages/volto-techevent/locales/pt_BR/LC_MESSAGES/volto.po b/frontend/packages/volto-techevent/locales/pt_BR/LC_MESSAGES/volto.po index 21eacd4..2d45d66 100644 --- a/frontend/packages/volto-techevent/locales/pt_BR/LC_MESSAGES/volto.po +++ b/frontend/packages/volto-techevent/locales/pt_BR/LC_MESSAGES/volto.po @@ -21,11 +21,26 @@ msgstr "" msgid "Add (object list)" msgstr "Adicionar" +#. Default: "Add Button" +#: messages +msgid "Add Button" +msgstr "Adicionar Botão" + #. Default: "Align" #: messages msgid "Align" msgstr "Alinhamento" +#. Default: "Background Image" +#: messages +msgid "Background Image" +msgstr "Imagem de Fundo" + +#. Default: "Background color" +#: components/Blocks/schema +msgid "Background color" +msgstr "Cor de Fundo" + #. Default: "Be the first!" #: messages msgid "Be the first!" @@ -36,21 +51,76 @@ msgstr "Seja o primeiro!" msgid "Benefit" msgstr "Benefício" +#. Default: "Block Width" +#: messages +msgid "Block Width" +msgstr "" + +#. Default: "Button" +#: messages +msgid "Button" +msgstr "Botão" + #. Default: "CTA Label" #: messages msgid "CTA Label" msgstr "Texto CTA" +#. Default: "Call to Action" +#: messages +msgid "Call to Action" +msgstr "Ação" + #. Default: "Collapse item" #: components/Widgets/DataGridList msgid "Collapse item" msgstr "Colapsar item" +#. Default: "Countdown Block" +#: messages +msgid "Countdown Block" +msgstr "Contagem Regressiva" + +#. Default: "Countdown Size" +#: messages +msgid "Countdown Size" +msgstr "" + #. Default: "Day" #: components/Schedule/Schedule msgid "Day" msgstr "Dia" +#. Default: "Days (DD)" +#: messages +msgid "Days (DD)" +msgstr "Dias (DD)" + +#. Default: "Days, Hours (DD:HH)" +#: messages +msgid "Days, Hours (DD:HH)" +msgstr "Dias, Horas (DD:HH)" + +#. Default: "Days, Hours, Minutes (DD:HH:MM)" +#: messages +msgid "Days, Hours, Minutes (DD:HH:MM)" +msgstr "Dias, Horas, Minutos (DD:HH:MM)" + +#. Default: "Days, Hours, Minutes, Seconds (DD:HH:MM:SS)" +#: messages +msgid "Days, Hours, Minutes, Seconds (DD:HH:MM:SS)" +msgstr "Dias, Horas, Minutos, Segundos (DD:HH:MM:SS)" + +#. Default: "Default" +#: components/Attendee/AttendeeLogin +msgid "Default" +msgstr "Padrão" + +#. Default: "Description" +#: messages +msgid "Description" +msgstr "Descrição" + #. Default: "Details" #: messages msgid "Details" @@ -66,6 +136,11 @@ msgstr "Exibir botão de ação" msgid "Display Headline?" msgstr "Exibir Cabeçalho" +#. Default: "Display Separator" +#: messages +msgid "Display Separator" +msgstr "Exibir Separador" + #. Default: "Empty object list" #: components/Widgets/DataGridList msgid "Empty object list" @@ -76,15 +151,60 @@ msgstr "Lista vazia" msgid "Filter by Day" msgstr "Filtro por Dia" +#. Default: "Full Overlay" +#: messages +msgid "Full Overlay" +msgstr "Overlay Completo" + #. Default: "Heading" #: messages msgid "Heading" msgstr "Cabeçalho" +#. Default: "Height" +#: messages +msgid "Height" +msgstr "" + +#. Default: "Hide Button" +#: messages +msgid "Hide Button" +msgstr "Ocultar Botão" + +#. Default: "Hide after target date is reached" +#: messages +msgid "Hide after target date is reached" +msgstr "Ocultar após a data alvo ser alcançada" + +#. Default: "Link" +#: messages +msgid "Link" +msgstr "Link" + #. Default: "Materials" #: messages msgid "Materials" -msgstr "" +msgstr "Materiais" + +#. Default: "Open link in new tab" +#: messages +msgid "Open link in new tab" +msgstr "Abrir link em nova aba" + +#. Default: "Overlay" +#: messages +msgid "Overlay" +msgstr "Sobreposição" + +#. Default: "Overlay Color" +#: messages +msgid "Overlay Color" +msgstr "Cor da Sobreposição" + +#. Default: "Overlay Text Color" +#: messages +msgid "Overlay Text Color" +msgstr "Cor do Texto da Sobreposição" #. Default: "Package Benefits" #: messages @@ -101,6 +221,11 @@ msgstr "Comparação de cotas" msgid "Packages & Sponsors" msgstr "Cotas e Apoiadores" +#. Default: "Parallax Block" +#: messages +msgid "Parallax Block" +msgstr "Bloco de Parallax" + #. Default: "Presentations" #: messages msgid "Presentations" @@ -111,6 +236,11 @@ msgstr "" msgid "Remove item" msgstr "Excluir item" +#. Default: "Request sent" +#: components/Attendee/AttendeeLogin +msgid "Request sent" +msgstr "Solicitação enviada" + #. Default: "Requirements" #: messages msgid "Requirements" @@ -121,6 +251,11 @@ msgstr "Requisitos" msgid "Schedule Block" msgstr "Bloco de Grade" +#. Default: "Send request" +#: components/Attendee/AttendeeLogin +msgid "Send request" +msgstr "Enviar solicitação" + #. Default: "Show item" #: components/Widgets/DataGridList msgid "Show item" @@ -146,6 +281,16 @@ msgstr "Apoiadores" msgid "Sponsorship Form" msgstr "Formulário de patrocínio" +#. Default: "Text" +#: messages +msgid "Text" +msgstr "Texto" + +#. Default: "Textbox" +#: messages +msgid "Textbox" +msgstr "Caixa de Texto" + #. Default: "Title" #: messages msgid "Title" @@ -154,23 +299,83 @@ msgstr "Título" #. Default: "Video" #: messages msgid "Video" -msgstr "" +msgstr "Vídeo" + +#. Default: "What should be displayed?" +#: messages +msgid "What should be displayed?" +msgstr "O que deve ser exibido?" + +#. Default: "Your email is required to request a one-time password." +#: components/Attendee/AttendeeLogin +msgid "Your email is required to request a one-time password." +msgstr "Seu e-mail é necessário para solicitar uma senha de uso único." + +#. Default: "Request a one-time password" +#: components/Attendee/AttendeeLogin +msgid "box_request_one_time_password" +msgstr "Solicitar uma senha de uso único" + +#. Default: "Continue to login" +#: components/Attendee/AttendeeLogin +msgid "continue_to_login" +msgstr "Continuar para login" + +#. Default: "days" +#: components/Countdown/CountdownElements +msgid "days" +msgstr "dias" + +#. Default: "Enter your email to receive a one-time password for login." +#: components/Attendee/AttendeeLogin +msgid "description_request_one_time_password" +msgstr "Digite seu e-mail para receber uma senha de uso único para login." + +#. Default: "Please, check your email and log in using your email address and the one-time password you received." +#: components/Attendee/AttendeeLogin +msgid "description_request_sent" +msgstr "Por favor, verifique seu e-mail e faça login usando seu endereço de e-mail e a senha de uso único que você recebeu." + +#. Default: "One-time password sent" +#: components/Attendee/AttendeeLogin +msgid "heading_request_sent" +msgstr "Senha de uso único enviada" + +#. Default: "hours" +#: components/Countdown/CountdownElements +msgid "hours" +msgstr "horas" #. Default: "Instructor" #: components/Presenter/PresenterCategory msgid "instructor" -msgstr "instrutor/a" +msgstr "ministrante" #. Default: "Keynote Speaker" #: components/Presenter/PresenterCategory msgid "keynote-speaker" -msgstr "Keynote" +msgstr "Palestrante Principal" + +#. Default: "My email is" +#: components/Attendee/AttendeeLogin +msgid "label_my_email_is" +msgstr "Meu e-mail é" + +#. Default: "minutes" +#: components/Countdown/CountdownElements +msgid "minutes" +msgstr "minutos" #. Default: "Plone Foundation Member" #: components/Presenter/PresenterCategory msgid "pf-member" msgstr "Membro Plone Foundation" +#. Default: "seconds" +#: components/Countdown/CountdownElements +msgid "seconds" +msgstr "segundos" + #. Default: "Speaker" #: components/Presenter/PresenterCategory msgid "speaker" diff --git a/frontend/packages/volto-techevent/locales/volto.pot b/frontend/packages/volto-techevent/locales/volto.pot index 6465b84..ab1c9aa 100644 --- a/frontend/packages/volto-techevent/locales/volto.pot +++ b/frontend/packages/volto-techevent/locales/volto.pot @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Plone\n" -"POT-Creation-Date: 2025-08-08T15:07:00.152Z\n" +"POT-Creation-Date: 2025-11-07T14:55:34.341Z\n" "Last-Translator: Plone i18n \n" "Language-Team: Plone i18n \n" "Content-Type: text/plain; charset=utf-8\n" @@ -18,11 +18,26 @@ msgstr "" msgid "Add (object list)" msgstr "" +#. Default: "Add Button" +#: messages +msgid "Add Button" +msgstr "" + #. Default: "Align" #: messages msgid "Align" msgstr "" +#. Default: "Background Image" +#: messages +msgid "Background Image" +msgstr "" + +#. Default: "Background color" +#: components/Blocks/schema +msgid "Background color" +msgstr "" + #. Default: "Be the first!" #: messages msgid "Be the first!" @@ -33,21 +48,76 @@ msgstr "" msgid "Benefit" msgstr "" +#. Default: "Block Width" +#: messages +msgid "Block Width" +msgstr "" + +#. Default: "Button" +#: messages +msgid "Button" +msgstr "" + #. Default: "CTA Label" #: messages msgid "CTA Label" msgstr "" +#. Default: "Call to Action" +#: messages +msgid "Call to Action" +msgstr "" + #. Default: "Collapse item" #: components/Widgets/DataGridList msgid "Collapse item" msgstr "" +#. Default: "Countdown Block" +#: messages +msgid "Countdown Block" +msgstr "" + +#. Default: "Countdown Size" +#: messages +msgid "Countdown Size" +msgstr "" + #. Default: "Day" #: components/Schedule/Schedule msgid "Day" msgstr "" +#. Default: "Days (DD)" +#: messages +msgid "Days (DD)" +msgstr "" + +#. Default: "Days, Hours (DD:HH)" +#: messages +msgid "Days, Hours (DD:HH)" +msgstr "" + +#. Default: "Days, Hours, Minutes (DD:HH:MM)" +#: messages +msgid "Days, Hours, Minutes (DD:HH:MM)" +msgstr "" + +#. Default: "Days, Hours, Minutes, Seconds (DD:HH:MM:SS)" +#: messages +msgid "Days, Hours, Minutes, Seconds (DD:HH:MM:SS)" +msgstr "" + +#. Default: "Default" +#: components/Attendee/AttendeeLogin +msgid "Default" +msgstr "" + +#. Default: "Description" +#: messages +msgid "Description" +msgstr "" + #. Default: "Details" #: messages msgid "Details" @@ -63,6 +133,11 @@ msgstr "" msgid "Display Headline?" msgstr "" +#. Default: "Display Separator" +#: messages +msgid "Display Separator" +msgstr "" + #. Default: "Empty object list" #: components/Widgets/DataGridList msgid "Empty object list" @@ -73,16 +148,61 @@ msgstr "" msgid "Filter by Day" msgstr "" +#. Default: "Full Overlay" +#: messages +msgid "Full Overlay" +msgstr "" + #. Default: "Heading" #: messages msgid "Heading" msgstr "" +#. Default: "Height" +#: messages +msgid "Height" +msgstr "" + +#. Default: "Hide Button" +#: messages +msgid "Hide Button" +msgstr "" + +#. Default: "Hide after target date is reached" +#: messages +msgid "Hide after target date is reached" +msgstr "" + +#. Default: "Link" +#: messages +msgid "Link" +msgstr "" + #. Default: "Materials" #: messages msgid "Materials" msgstr "" +#. Default: "Open link in new tab" +#: messages +msgid "Open link in new tab" +msgstr "" + +#. Default: "Overlay" +#: messages +msgid "Overlay" +msgstr "" + +#. Default: "Overlay Color" +#: messages +msgid "Overlay Color" +msgstr "" + +#. Default: "Overlay Text Color" +#: messages +msgid "Overlay Text Color" +msgstr "" + #. Default: "Package Benefits" #: messages msgid "Package Benefits" @@ -98,6 +218,11 @@ msgstr "" msgid "Packages & Sponsors" msgstr "" +#. Default: "Parallax Block" +#: messages +msgid "Parallax Block" +msgstr "" + #. Default: "Presentations" #: messages msgid "Presentations" @@ -108,6 +233,11 @@ msgstr "" msgid "Remove item" msgstr "" +#. Default: "Request sent" +#: components/Attendee/AttendeeLogin +msgid "Request sent" +msgstr "" + #. Default: "Requirements" #: messages msgid "Requirements" @@ -118,6 +248,11 @@ msgstr "" msgid "Schedule Block" msgstr "" +#. Default: "Send request" +#: components/Attendee/AttendeeLogin +msgid "Send request" +msgstr "" + #. Default: "Show item" #: components/Widgets/DataGridList msgid "Show item" @@ -143,6 +278,16 @@ msgstr "" msgid "Sponsorship Form" msgstr "" +#. Default: "Text" +#: messages +msgid "Text" +msgstr "" + +#. Default: "Textbox" +#: messages +msgid "Textbox" +msgstr "" + #. Default: "Title" #: messages msgid "Title" @@ -153,6 +298,51 @@ msgstr "" msgid "Video" msgstr "" +#. Default: "What should be displayed?" +#: messages +msgid "What should be displayed?" +msgstr "" + +#. Default: "Your email is required to request a one-time password." +#: components/Attendee/AttendeeLogin +msgid "Your email is required to request a one-time password." +msgstr "" + +#. Default: "Request a one-time password" +#: components/Attendee/AttendeeLogin +msgid "box_request_one_time_password" +msgstr "" + +#. Default: "Continue to login" +#: components/Attendee/AttendeeLogin +msgid "continue_to_login" +msgstr "" + +#. Default: "days" +#: components/Countdown/CountdownElements +msgid "days" +msgstr "" + +#. Default: "Enter your email to receive a one-time password for login." +#: components/Attendee/AttendeeLogin +msgid "description_request_one_time_password" +msgstr "" + +#. Default: "Please, check your email and log in using your email address and the one-time password you received." +#: components/Attendee/AttendeeLogin +msgid "description_request_sent" +msgstr "" + +#. Default: "One-time password sent" +#: components/Attendee/AttendeeLogin +msgid "heading_request_sent" +msgstr "" + +#. Default: "hours" +#: components/Countdown/CountdownElements +msgid "hours" +msgstr "" + #. Default: "Instructor" #: components/Presenter/PresenterCategory msgid "instructor" @@ -163,11 +353,26 @@ msgstr "" msgid "keynote-speaker" msgstr "" +#. Default: "My email is" +#: components/Attendee/AttendeeLogin +msgid "label_my_email_is" +msgstr "" + +#. Default: "minutes" +#: components/Countdown/CountdownElements +msgid "minutes" +msgstr "" + #. Default: "Plone Foundation Member" #: components/Presenter/PresenterCategory msgid "pf-member" msgstr "" +#. Default: "seconds" +#: components/Countdown/CountdownElements +msgid "seconds" +msgstr "" + #. Default: "Speaker" #: components/Presenter/PresenterCategory msgid "speaker" diff --git a/frontend/packages/volto-techevent/news/+packaging.internal b/frontend/packages/volto-techevent/news/+packaging.internal new file mode 100644 index 0000000..f2d8628 --- /dev/null +++ b/frontend/packages/volto-techevent/news/+packaging.internal @@ -0,0 +1 @@ +Update peer dependencies. @ericof diff --git a/frontend/packages/volto-techevent/news/+styles.internal b/frontend/packages/volto-techevent/news/+styles.internal new file mode 100644 index 0000000..1b1473b --- /dev/null +++ b/frontend/packages/volto-techevent/news/+styles.internal @@ -0,0 +1 @@ +Register typed custom properties using `@property`. @ericof diff --git a/frontend/packages/volto-techevent/news/+vlt.internal b/frontend/packages/volto-techevent/news/+vlt.internal new file mode 100644 index 0000000..7eeb706 --- /dev/null +++ b/frontend/packages/volto-techevent/news/+vlt.internal @@ -0,0 +1 @@ +Bump @kitconcept/volto-light-theme to version 7.6.1. @ericof diff --git a/frontend/packages/volto-techevent/news/27.feature b/frontend/packages/volto-techevent/news/27.feature new file mode 100644 index 0000000..af26e77 --- /dev/null +++ b/frontend/packages/volto-techevent/news/27.feature @@ -0,0 +1 @@ +Add a block to show a countdown to the start of the event. @ericof diff --git a/frontend/packages/volto-techevent/news/28.feature b/frontend/packages/volto-techevent/news/28.feature new file mode 100644 index 0000000..e11672b --- /dev/null +++ b/frontend/packages/volto-techevent/news/28.feature @@ -0,0 +1 @@ +Add a Parallax block supporting an array of call to action buttons. @ericof diff --git a/frontend/packages/volto-techevent/package.json b/frontend/packages/volto-techevent/package.json index 982d92c..84af827 100644 --- a/frontend/packages/volto-techevent/package.json +++ b/frontend/packages/volto-techevent/package.json @@ -27,19 +27,25 @@ "release-alpha": "release-it --preRelease=alpha" }, "addons": [ + "@kitconcept/volto-bm3-compat", "@plonegovbr/volto-social-media", "@kitconcept/volto-light-theme" ], "dependencies": { "@plone/components": "workspace:*", + "@kitconcept/volto-bm3-compat": "*", "@plonegovbr/volto-social-media": "2.0.0-alpha.6" }, "peerDependencies": { "react-intl": "*", "react": "18.2.0", "react-dom": "18.2.0", + "react-redux": "*", "react-aria-components": "*", "@kitconcept/volto-light-theme": "*", + "@storybook/react": "*", + "classnames": "*", + "uuid": "*", "semantic-ui-react": "*" }, "devDependencies": { diff --git a/frontend/packages/volto-techevent/src/components/Blocks/Countdown/Data.tsx b/frontend/packages/volto-techevent/src/components/Blocks/Countdown/Data.tsx new file mode 100644 index 0000000..f09f7c5 --- /dev/null +++ b/frontend/packages/volto-techevent/src/components/Blocks/Countdown/Data.tsx @@ -0,0 +1,33 @@ +import React from 'react'; +import { countdownSchema } from './schema'; +import BlockDataForm from '@plone/volto/components/manage/Form/BlockDataForm'; +import Icon from '@plone/volto/components/theme/Icon/Icon'; +import { useIntl } from 'react-intl'; +import countdownSVG from '@plone/volto/icons/clock.svg'; +import messages from '@plone-collective/volto-techevent/messages'; + +const CountdownData = (props) => { + const { data, block, onChangeBlock, schemaEnhancer, networks } = props; + const intl = useIntl(); + const schema = schemaEnhancer + ? schemaEnhancer(countdownSchema({ ...props, intl, networks }), props) + : countdownSchema({ ...props, intl, networks }); + return ( + } + title={intl.formatMessage(messages.countdownBlockTitle)} + onChangeField={(id, value) => { + onChangeBlock(block, { + ...data, + [id]: value, + }); + }} + formData={data} + fieldIndex={data.index} + block={block} + /> + ); +}; + +export default CountdownData; diff --git a/frontend/packages/volto-techevent/src/components/Blocks/Countdown/Edit.tsx b/frontend/packages/volto-techevent/src/components/Blocks/Countdown/Edit.tsx new file mode 100644 index 0000000..9000415 --- /dev/null +++ b/frontend/packages/volto-techevent/src/components/Blocks/Countdown/Edit.tsx @@ -0,0 +1,26 @@ +import React from 'react'; +import SidebarPortal from '@plone/volto/components/manage/Sidebar/SidebarPortal'; +import { withBlockExtensions } from '@plone/volto/helpers/Extensions'; +import type { BlockEditProps } from '@plone/types'; +import CountdownData from './Data'; +import CountdownView from './View'; + +const Edit: React.FC = (props) => { + const { data, block, onChangeBlock, selected } = props; + + return ( + <> + + + + + + ); +}; + +export default withBlockExtensions(Edit); diff --git a/frontend/packages/volto-techevent/src/components/Blocks/Countdown/View.tsx b/frontend/packages/volto-techevent/src/components/Blocks/Countdown/View.tsx new file mode 100644 index 0000000..eda9876 --- /dev/null +++ b/frontend/packages/volto-techevent/src/components/Blocks/Countdown/View.tsx @@ -0,0 +1,40 @@ +import React from 'react'; +import cx from 'classnames'; +import { BlockWrapper } from '@kitconcept/volto-bm3-compat'; +import { Container } from '@plone/components'; +import { useEventSettings } from '@plone-collective/volto-techevent/hooks/useEventSettings'; +import Countdown from '@plone-collective/volto-techevent/components/Countdown/Countdown'; +import type { BlockViewProps } from '@plone/types'; + +const LegacyWrapper: React.FC = ({ children }) => { + return
{children}
; +}; + +const View: React.FC = (props) => { + const { data } = props; + const eventData = useEventSettings()?.data; + const start = eventData?.start; + const size = data.styles?.size || 'l'; + return ( + + + {data.title && ( +

{data.title}

+ )} + +
+
+ ); +}; + +export default View; diff --git a/frontend/packages/volto-techevent/src/components/Blocks/Countdown/index.ts b/frontend/packages/volto-techevent/src/components/Blocks/Countdown/index.ts new file mode 100644 index 0000000..ee51d57 --- /dev/null +++ b/frontend/packages/volto-techevent/src/components/Blocks/Countdown/index.ts @@ -0,0 +1,23 @@ +// Countdown Block configuration +import CountdownBlockEdit from '@plone-collective/volto-techevent/components/Blocks/Countdown/Edit'; +import CountdownBlockView from '@plone-collective/volto-techevent/components/Blocks/Countdown/View'; +import { countdownSchema } from '@plone-collective/volto-techevent/components/Blocks/Countdown/schema'; +import countdownSVG from '@plone/volto/icons/clock.svg'; +import type { BlockConfigBase } from '@plone/types'; + +const blockInfo: BlockConfigBase = { + id: 'countdownBlock', + title: 'Countdown Block', + group: 'event', + category: 'event', + icon: countdownSVG, + blockSchema: countdownSchema, + restricted: false, + view: CountdownBlockView, + edit: CountdownBlockEdit, + mostUsed: false, + sidebarTab: 1, + blockHasOwnFocusManagement: false, +}; + +export default blockInfo; diff --git a/frontend/packages/volto-techevent/src/components/Blocks/Countdown/schema.ts b/frontend/packages/volto-techevent/src/components/Blocks/Countdown/schema.ts new file mode 100644 index 0000000..092c03e --- /dev/null +++ b/frontend/packages/volto-techevent/src/components/Blocks/Countdown/schema.ts @@ -0,0 +1,79 @@ +import messages from '@plone-collective/volto-techevent/messages'; +import { addStyling } from '@plone/volto/helpers/Extensions/withBlockSchemaEnhancer'; +import type { BlockSchemaProps } from '@plone-collective/volto-techevent/types/common'; +import { defaultStylingSchema } from '@plone-collective/volto-techevent/components/Blocks/schema'; +import type { JSONSchema } from '@plone/types'; + +export const countdownSchema = (props: BlockSchemaProps): JSONSchema => { + const { intl } = props; + + const formatOptions = [ + ['ddhhmmss', intl.formatMessage(messages.countdownFormatDDHHMMSS)], + ['ddhhmm', intl.formatMessage(messages.countdownFormatDDHHMM)], + ['ddhh', intl.formatMessage(messages.countdownFormatDDHH)], + ['dd', intl.formatMessage(messages.countdownFormatDD)], + ]; + + let schema: Record = { + title: intl.formatMessage(messages.countdownBlockTitle), + block: 'countdownBlock', + fieldsets: [ + { + id: 'default', + title: 'Default', + fields: ['title', 'hideAfterStart', 'displayFormat', 'hasSeparator'], + }, + ], + + properties: { + title: { + title: intl.formatMessage(messages.title), + default: '', + }, + hideAfterStart: { + title: intl.formatMessage(messages.countdownHideAfterTarget), + type: 'boolean', + default: true, + }, + displayFormat: { + title: intl.formatMessage(messages.countdownDisplayFormat), + type: 'choice', + default: 'ddhhmmss', + options: formatOptions, + }, + hasSeparator: { + title: intl.formatMessage(messages.countdownHasSeparator), + type: 'boolean', + default: true, + }, + }, + required: [], + }; + + addStyling({ schema, intl }); + + schema.properties.styles.schema.fieldsets[0].fields.push( + 'blockWidth:noprefix', + ); + schema.properties.styles.schema.properties['blockWidth:noprefix'] = { + title: intl.formatMessage(messages.blockWidth), + widget: 'blockWidth', + default: 'default', + }; + + schema.properties.styles.schema.fieldsets[0].fields.push('size'); + schema.properties.styles.schema.properties['size'] = { + title: intl.formatMessage(messages.countdownSize), + widget: 'size', + default: 'l', + }; + + schema.properties.styles.schema.fieldsets[0].fields.push('align:noprefix'); + schema.properties.styles.schema.properties['align:noprefix'] = { + widget: 'blockAlignment', + title: intl.formatMessage(messages.align), + default: 'center', + }; + + return defaultStylingSchema({ schema, formData: props, intl }); +}; diff --git a/frontend/packages/volto-techevent/src/components/Blocks/Parallax/Data.tsx b/frontend/packages/volto-techevent/src/components/Blocks/Parallax/Data.tsx new file mode 100644 index 0000000..9d3f748 --- /dev/null +++ b/frontend/packages/volto-techevent/src/components/Blocks/Parallax/Data.tsx @@ -0,0 +1,33 @@ +import React from 'react'; +import { parallaxSchema } from './schema'; +import BlockDataForm from '@plone/volto/components/manage/Form/BlockDataForm'; +import Icon from '@plone/volto/components/theme/Icon/Icon'; +import { useIntl } from 'react-intl'; +import parallaxSVG from '@plone/volto/icons/image.svg'; +import messages from '@plone-collective/volto-techevent/messages'; + +const ParallaxData = (props) => { + const { data, block, onChangeBlock, schemaEnhancer, networks } = props; + const intl = useIntl(); + const schema = schemaEnhancer + ? schemaEnhancer(parallaxSchema({ ...props, intl, networks }), props) + : parallaxSchema({ ...props, intl, networks }); + return ( + } + title={intl.formatMessage(messages.parallaxBlockTitle)} + onChangeField={(id, value) => { + onChangeBlock(block, { + ...data, + [id]: value, + }); + }} + formData={data} + fieldIndex={data.index} + block={block} + /> + ); +}; + +export default ParallaxData; diff --git a/frontend/packages/volto-techevent/src/components/Blocks/Parallax/Edit.tsx b/frontend/packages/volto-techevent/src/components/Blocks/Parallax/Edit.tsx new file mode 100644 index 0000000..0a865e9 --- /dev/null +++ b/frontend/packages/volto-techevent/src/components/Blocks/Parallax/Edit.tsx @@ -0,0 +1,30 @@ +import React from 'react'; +import SidebarPortal from '@plone/volto/components/manage/Sidebar/SidebarPortal'; +import { withBlockExtensions } from '@plone/volto/helpers/Extensions'; +import type { BlockEditProps } from '@plone/types'; +import ParallaxData from './Data'; +import ParallaxView from './View'; + +const Edit: React.FC = (props) => { + const { data, block, onChangeBlock, selected } = props; + + return ( + <> + {data.href ? ( + + ) : ( +
Select an image
+ )} + + + + + ); +}; + +export default withBlockExtensions(Edit); diff --git a/frontend/packages/volto-techevent/src/components/Blocks/Parallax/View.tsx b/frontend/packages/volto-techevent/src/components/Blocks/Parallax/View.tsx new file mode 100644 index 0000000..b039e21 --- /dev/null +++ b/frontend/packages/volto-techevent/src/components/Blocks/Parallax/View.tsx @@ -0,0 +1,32 @@ +import React from 'react'; +import { BlockWrapper } from '@kitconcept/volto-bm3-compat'; +import Parallax from '@plone-collective/volto-techevent/components/Parallax/Parallax'; +import type { BlockViewProps } from '@plone/types'; + +const LegacyWrapper: React.FC = ({ children }) => { + return <>{children}; +}; + +const View: React.FC = (props) => { + const { data, isEditMode } = props; + const { title, description, href, items, overlay, styles } = data; + return ( + + + + ); +}; + +export default View; diff --git a/frontend/packages/volto-techevent/src/components/Blocks/Parallax/index.ts b/frontend/packages/volto-techevent/src/components/Blocks/Parallax/index.ts new file mode 100644 index 0000000..0015f78 --- /dev/null +++ b/frontend/packages/volto-techevent/src/components/Blocks/Parallax/index.ts @@ -0,0 +1,23 @@ +// Parallax Block configuration +import ParallaxBlockEdit from '@plone-collective/volto-techevent/components/Blocks/Parallax/Edit'; +import ParallaxBlockView from '@plone-collective/volto-techevent/components/Blocks/Parallax/View'; +import { parallaxSchema } from '@plone-collective/volto-techevent/components/Blocks/Parallax/schema'; +import parallaxSVG from '@plone/volto/icons/image.svg'; +import type { BlockConfigBase } from '@plone/types'; + +const blockInfo: BlockConfigBase = { + id: 'parallaxBlock', + title: 'Parallax Block', + group: 'common', + category: 'image', + icon: parallaxSVG, + blockSchema: parallaxSchema, + restricted: false, + view: ParallaxBlockView, + edit: ParallaxBlockEdit, + mostUsed: false, + sidebarTab: 1, + blockHasOwnFocusManagement: false, +}; + +export default blockInfo; diff --git a/frontend/packages/volto-techevent/src/components/Blocks/Parallax/schema.ts b/frontend/packages/volto-techevent/src/components/Blocks/Parallax/schema.ts new file mode 100644 index 0000000..9369426 --- /dev/null +++ b/frontend/packages/volto-techevent/src/components/Blocks/Parallax/schema.ts @@ -0,0 +1,178 @@ +import messages from '@plone-collective/volto-techevent/messages'; +import { addStyling } from '@plone/volto/helpers/Extensions/withBlockSchemaEnhancer'; +import { addExtensionFieldToSchema } from '@plone/volto/helpers/Extensions'; +import type { BlockSchemaProps } from '@plone-collective/volto-techevent/types/common'; +import { defaultStylingSchema } from '@plone-collective/volto-techevent/components/Blocks/schema'; +import type { JSONSchema } from '@plone/types'; + +const itemSchema = (props: BlockSchemaProps): Record => { + const { intl } = props; + return { + title: intl.formatMessage(messages.buttonTitle), + addMessage: intl.formatMessage(messages.buttonAdd), + fieldsets: [ + { + id: 'default', + title: 'Default', + fields: ['href', 'label', 'hideButton', 'openLinkInNewTab'], + }, + ], + + properties: { + href: { + title: intl.formatMessage(messages.buttonHref), + widget: 'object_browser', + mode: 'link', + selectedItemAttrs: [ + 'Title', + 'Description', + 'head_title', + 'hasPreviewImage', + 'image_field', + 'image_scales', + '@type', + ], + allowExternals: true, + }, + label: { + title: props.intl.formatMessage(messages.buttonLabel), + }, + hideButton: { + title: props.intl.formatMessage(messages.buttonHide), + type: 'boolean', + }, + openLinkInNewTab: { + title: props.intl.formatMessage(messages.openLinkInNewTab), + type: 'boolean', + }, + }, + required: [], + }; +}; + +export const parallaxSchema = (props: BlockSchemaProps): JSONSchema => { + const { intl } = props; + + const overlayColors = [ + { + style: { '--theme-color': '#000' }, + name: 'rgba(0, 0, 0, 0.66)', + label: 'Black', + }, + { + style: { '--theme-color': '#fff' }, + name: 'rgba(255, 255, 255, 0.66)', + label: 'White', + }, + ]; + const colors = [ + { + style: { '--theme-color': '#000' }, + name: '#000', + label: 'Black', + }, + { + style: { '--theme-color': '#fff' }, + name: '#fff', + label: 'White', + }, + ]; + + let schema: Record = { + title: intl.formatMessage(messages.parallaxBlockTitle), + block: 'parallaxBlock', + fieldsets: [ + { + id: 'default', + title: 'Default', + fields: ['href', 'title', 'description', 'items'], + }, + ], + + properties: { + title: { + title: intl.formatMessage(messages.title), + }, + href: { + title: props.intl.formatMessage(messages.parallaxBgImage), + widget: 'object_browser', + mode: 'image', + allowExternals: true, + }, + description: { + title: intl.formatMessage(messages.parallaxDescription), + widget: 'richtext', + }, + items: { + widget: 'object_list', + title: intl.formatMessage(messages.parallaxCTAItems), + schema: itemSchema(props), + default: [], + }, + }, + required: [], + }; + + const overlays = [ + { + id: 'full-overlay', + title: intl.formatMessage(messages.overlayFull), + isDefault: true, + }, + { + id: 'solid-textbox', + title: intl.formatMessage(messages.overlayBox), + isDefault: false, + }, + ]; + + schema = addExtensionFieldToSchema({ + schema, + name: 'overlay', + items: overlays, + intl, + title: messages.overlay, + }); + + addStyling({ schema, intl }); + + schema.properties.styles.schema.fieldsets[0].fields.push('height'); + schema.properties.styles.schema.properties['height'] = { + title: intl.formatMessage(messages.parallaxHeight), + widget: 'size', + default: 'l', + }; + + schema.properties.styles.schema.fieldsets[0].fields.push('align:noprefix'); + schema.properties.styles.schema.properties['align:noprefix'] = { + widget: 'blockAlignment', + title: intl.formatMessage(messages.align), + default: 'center', + }; + + schema.properties.styles.schema.fieldsets[0].fields.push( + '--techevent-parallax-overlay-color', + ); + schema.properties.styles.schema.properties[ + '--techevent-parallax-overlay-color' + ] = { + title: intl.formatMessage(messages.overlayColor), + widget: 'color_picker', + colors: overlayColors, + default: 'rgba(255, 255, 255, 0.66)', + }; + + schema.properties.styles.schema.fieldsets[0].fields.push( + '--techevent-parallax-foreground-color', + ); + schema.properties.styles.schema.properties[ + '--techevent-parallax-foreground-color' + ] = { + title: intl.formatMessage(messages.overlayForegroundColor), + widget: 'color_picker', + colors: colors, + default: '#000', + }; + + return defaultStylingSchema({ schema, formData: props, intl }); +}; diff --git a/frontend/packages/volto-techevent/src/components/Blocks/schema.ts b/frontend/packages/volto-techevent/src/components/Blocks/schema.ts new file mode 100644 index 0000000..435c20c --- /dev/null +++ b/frontend/packages/volto-techevent/src/components/Blocks/schema.ts @@ -0,0 +1,64 @@ +import { addStyling } from '@plone/volto/helpers/Extensions/withBlockSchemaEnhancer'; +import { defineMessages } from 'react-intl'; +import config from '@plone/volto/registry'; +import type { IntlShape } from '@plone/types/src/i18n'; +import type { JSONSchema } from '@plone/types/src/config/'; + +const messages = defineMessages({ + backgroundColor: { + id: 'Background color', + defaultMessage: 'Background color', + }, +}); + +interface StylingSchemaProps { + schema: JSONSchema; + formData: any; + intl: IntlShape; +} + +export const defaultStylingSchema = ({ + schema, + formData, + intl, +}: StylingSchemaProps): JSONSchema => { + const themes = + config.blocks?.blocksConfig?.[formData['@type']]?.themes || + config.blocks.themes; + + const defaultTheme = + config.blocks?.blocksConfig?.[formData['@type']]?.defaultTheme || + config.blocks.themes?.[0].name; + + addStyling({ schema, formData, intl }); + + const stylingIndex = schema.fieldsets.findIndex( + (item) => item.id === 'styling', + ); + if (stylingIndex !== -1 && schema.fieldsets[stylingIndex].fields) { + schema.fieldsets[stylingIndex].fields = [ + ...schema.fieldsets[stylingIndex].fields, + 'theme', + ]; + } + + if (schema.properties) { + (schema.properties as any).theme = { + widget: 'color_picker', + title: intl.formatMessage(messages.backgroundColor), + themes, + default: defaultTheme, + }; + } + + return schema; +}; + +export const removeStylingSchema = ({ + schema, + formData, + intl, +}: StylingSchemaProps): JSONSchema => { + schema.fieldsets = schema.fieldsets.filter((item) => item.id !== 'styling'); + return schema; +}; diff --git a/frontend/packages/volto-techevent/src/components/CallToAction/CallToAction.tsx b/frontend/packages/volto-techevent/src/components/CallToAction/CallToAction.tsx new file mode 100644 index 0000000..8326d5c --- /dev/null +++ b/frontend/packages/volto-techevent/src/components/CallToAction/CallToAction.tsx @@ -0,0 +1,27 @@ +import React from 'react'; +import cx from 'classnames'; +import ConditionalLink from '@plone/volto/components/manage/ConditionalLink/ConditionalLink'; + +const CallToAction: React.FC<{ + className: string; + label: string; + size: string; + item: Record; + isEditMode: boolean; +}> = ({ label, item, size = 'm', className = '', isEditMode = false }) => { + const internalItem = item.href?.[0]; + return ( +
+ + {label} + +
+ ); +}; + +export default CallToAction; diff --git a/frontend/packages/volto-techevent/src/components/Countdown/Countdown.tsx b/frontend/packages/volto-techevent/src/components/Countdown/Countdown.tsx new file mode 100644 index 0000000..599c0a8 --- /dev/null +++ b/frontend/packages/volto-techevent/src/components/Countdown/Countdown.tsx @@ -0,0 +1,70 @@ +import React, { useState, useEffect } from 'react'; +import cx from 'classnames'; +import CountdownElements from './CountdownElements'; + +const Countdown: React.FC<{ + className: string; + targetDate: string; + displayFormat: string; + size: string; + hideAfterStart: boolean; + hasSeparator: boolean; +}> = ({ + className, + targetDate, + size = 'l', + displayFormat = 'ddhhmmss', + hideAfterStart = true, + hasSeparator = true, +}) => { + const [days, setDays] = useState(0); + const [hours, setHours] = useState(0); + const [minutes, setMinutes] = useState(0); + const [seconds, setSeconds] = useState(0); + const [isFuture, setIsFuture] = useState(false); + + useEffect(() => { + const second = 1000, + minute = second * 60, + hour = minute * 60, + day = hour * 24; + + let countDown = new Date(targetDate).getTime(); + + const interval = setInterval(() => { + let now = new Date().getTime(), + distance = countDown - now; + if (distance <= 0) { + setDays(0); + setHours(0); + setMinutes(0); + setSeconds(0); + setIsFuture(false); + } else { + setDays(Math.floor(distance / day)); + setHours(Math.floor((distance % day) / hour)); + setMinutes(Math.floor((distance % hour) / minute)); + setSeconds(Math.floor((distance % minute) / second)); + setIsFuture(true); + } + }, second); + + return () => clearInterval(interval); + }, [targetDate]); + return ( + (isFuture || !hideAfterStart) && ( + + ) + ); +}; + +export default Countdown; diff --git a/frontend/packages/volto-techevent/src/components/Countdown/CountdownElement.tsx b/frontend/packages/volto-techevent/src/components/Countdown/CountdownElement.tsx new file mode 100644 index 0000000..b0847b8 --- /dev/null +++ b/frontend/packages/volto-techevent/src/components/Countdown/CountdownElement.tsx @@ -0,0 +1,22 @@ +import React from 'react'; +import cx from 'classnames'; +import { Container } from '@plone/components'; + +const CountdownElement: React.FC<{ + className: string; + size: string; + value: number; + label: string; +}> = ({ className, value, label, size = 'l' }) => { + const valueStr = value.toString().padStart(2, '0'); + return ( +
+ +
{valueStr}
+
{label}
+
+
+ ); +}; + +export default CountdownElement; diff --git a/frontend/packages/volto-techevent/src/components/Countdown/CountdownElements.tsx b/frontend/packages/volto-techevent/src/components/Countdown/CountdownElements.tsx new file mode 100644 index 0000000..efe58a3 --- /dev/null +++ b/frontend/packages/volto-techevent/src/components/Countdown/CountdownElements.tsx @@ -0,0 +1,86 @@ +import React from 'react'; +import cx from 'classnames'; +import { Container } from '@plone/components'; +import { FormattedMessage } from 'react-intl'; +import CountdownElement from './CountdownElement'; + +const COUNTDOWN_ELEMENTS: Record< + string, + { displayHours: boolean; displayMinutes: boolean; displaySeconds: boolean } +> = { + dd: { displayHours: false, displayMinutes: false, displaySeconds: false }, + ddhh: { displayHours: true, displayMinutes: false, displaySeconds: false }, + ddhhmm: { displayHours: true, displayMinutes: true, displaySeconds: false }, + ddhhmmss: { displayHours: true, displayMinutes: true, displaySeconds: true }, +}; + +const CountdownElements: React.FC<{ + className: string; + days: number; + hours: number; + minutes: number; + seconds: number; + size: string; + displayFormat: string; + hasSeparator: boolean; +}> = ({ + className, + days, + hours, + minutes, + seconds, + size = 'l', + displayFormat = 'ddhhmmss', + hasSeparator, +}) => { + const { displayHours, displayMinutes, displaySeconds } = COUNTDOWN_ELEMENTS[ + displayFormat + ] || { + displayHours: true, + displayMinutes: true, + displaySeconds: true, + }; + return ( + + } + /> + {displayHours && ( + } + /> + )} + {displayMinutes && ( + } + /> + )} + {displaySeconds && ( + } + /> + )} + + ); +}; + +export default CountdownElements; diff --git a/frontend/packages/volto-techevent/src/components/Parallax/Parallax.tsx b/frontend/packages/volto-techevent/src/components/Parallax/Parallax.tsx new file mode 100644 index 0000000..78c6f7b --- /dev/null +++ b/frontend/packages/volto-techevent/src/components/Parallax/Parallax.tsx @@ -0,0 +1,127 @@ +import React, { useState, useRef, useEffect } from 'react'; +import cx from 'classnames'; +import config from '@plone/volto/registry'; +import ParallaxActions from '@plone-collective/volto-techevent/components/Parallax/ParallaxActions'; +import ParallaxImage from '@plone-collective/volto-techevent/components/Parallax/ParallaxImage'; + +const Parallax: React.FC<{ + title: string; + description: string; + href: string; + items: Record[]; + overlay: string; + height: string; + isEditMode: boolean; + className: string; +}> = ({ + title, + description, + href, + items, + overlay = 'full', + isEditMode, + height = 'l', + className = '', +}) => { + const wrapperRef = useRef(null); + const [offsetY, setOffsetY] = useState(0); + const [isVisible, setIsVisible] = useState(false); + const [startScrollY, setStartScrollY] = useState(null); + const [hasContent, setHasContent] = useState(false); + const [hasDescription, setHasDescription] = useState(false); + const Image = config.getComponent('Image').component; + + const hasRichText = (value) => { + if (!value || typeof value.data !== 'string') return false; + const plain = value.data.replace('

', ''); + return plain.length > 0; + }; + + useEffect(() => { + const hasText = hasRichText(description); + const contentExists = !!title || hasText; + + setHasContent(contentExists); + setHasDescription(hasText); + }, [title, description]); + + useEffect(() => { + const currentRef = wrapperRef.current; + const observer = new IntersectionObserver( + ([entry], obs) => { + if (entry.isIntersecting) { + setStartScrollY((prev) => { + if (prev === null) { + return window.scrollY; + } + return prev; + }); + setIsVisible(true); + obs.disconnect(); + } + }, + { + threshold: 0.1, + }, + ); + + if (currentRef) { + observer.observe(currentRef); + } + + return () => { + if (currentRef) { + observer.unobserve(currentRef); + } + }; + }, []); + + useEffect(() => { + let animationFrameId; + + const updateOffset = () => { + if (isVisible && startScrollY !== null) { + const distance = window.scrollY - startScrollY; + setOffsetY(distance > 0 ? distance : 0); + } + animationFrameId = requestAnimationFrame(updateOffset); + }; + + animationFrameId = requestAnimationFrame(updateOffset); + + return () => cancelAnimationFrame(animationFrameId); + }, [isVisible, startScrollY]); + + if (!isEditMode && !href) return null; + + return ( +
+
+ {href && ( + <> + +
+
+
+ {title &&

{title}

} + {hasDescription && ( +
+ )} + +
+
+ + )} +
+
+ ); +}; + +export default Parallax; diff --git a/frontend/packages/volto-techevent/src/components/Parallax/ParallaxActions.tsx b/frontend/packages/volto-techevent/src/components/Parallax/ParallaxActions.tsx new file mode 100644 index 0000000..b5a1e8a --- /dev/null +++ b/frontend/packages/volto-techevent/src/components/Parallax/ParallaxActions.tsx @@ -0,0 +1,27 @@ +import React from 'react'; +import CallToAction from '@plone-collective/volto-techevent/components/CallToAction/CallToAction'; + +const ParallaxActions = ({ items, isEditMode }) => { + return ( + items && + items.length > 0 && ( +
+ {items.map((item, idx) => { + const internalItem = item.href?.[0]; + return ( + !item.hideButton && ( + + ) + ); + })} +
+ ) + ); +}; + +export default ParallaxActions; diff --git a/frontend/packages/volto-techevent/src/components/Parallax/ParallaxImage.tsx b/frontend/packages/volto-techevent/src/components/Parallax/ParallaxImage.tsx new file mode 100644 index 0000000..0862cda --- /dev/null +++ b/frontend/packages/volto-techevent/src/components/Parallax/ParallaxImage.tsx @@ -0,0 +1,37 @@ +import React from 'react'; +import cx from 'classnames'; + +const ParallaxImage = ({ + Image, + href, + speed = 0.3, + maxOffset = 500, + offsetY, + className = '', +}) => { + const translateY = Math.min(offsetY * speed, maxOffset); + const img = href && href[0] ? href[0] : {}; + return ( + + ); +}; + +export default ParallaxImage; diff --git a/frontend/packages/volto-techevent/src/config/blocks.ts b/frontend/packages/volto-techevent/src/config/blocks.ts index 1e46ebd..d526405 100644 --- a/frontend/packages/volto-techevent/src/config/blocks.ts +++ b/frontend/packages/volto-techevent/src/config/blocks.ts @@ -13,6 +13,12 @@ import LevelBenefitsBlockInfo from '@plone-collective/volto-techevent/components // LevelComparison import LevelComparisonBlockInfo from '@plone-collective/volto-techevent/components/Blocks/Sponsors/LevelComparison'; +// Parallax +import ParallaxBlockInfo from '@plone-collective/volto-techevent/components/Blocks/Parallax'; + +// Countdown +import CountdownBlockInfo from '@plone-collective/volto-techevent/components/Blocks/Countdown'; + // Schedule import ScheduleBlockInfo from '@plone-collective/volto-techevent/components/Blocks/Schedule'; @@ -26,6 +32,8 @@ declare module '@plone/types' { scheduleBlock: BlockConfigBase; sponsorLevelBlock: BlockConfigBase; sponsorsShowcaseBlock: BlockConfigBase; + parallaxBlock: BlockConfigBase; + countdownBlock: BlockConfigBase; } } @@ -43,6 +51,8 @@ export default function install(config: ConfigType) { config.blocks.blocksConfig.levelBenefitsBlock = LevelBenefitsBlockInfo; config.blocks.blocksConfig.levelComparisonBlock = LevelComparisonBlockInfo; config.blocks.blocksConfig.scheduleBlock = ScheduleBlockInfo; + config.blocks.blocksConfig.parallaxBlock = ParallaxBlockInfo; + config.blocks.blocksConfig.countdownBlock = CountdownBlockInfo; // Variations config.registerComponent({ diff --git a/frontend/packages/volto-techevent/src/messages.ts b/frontend/packages/volto-techevent/src/messages.ts index 39b58ad..52d386d 100644 --- a/frontend/packages/volto-techevent/src/messages.ts +++ b/frontend/packages/volto-techevent/src/messages.ts @@ -61,6 +61,10 @@ const messages = defineMessages({ id: 'Align', defaultMessage: 'Align', }, + blockWidth: { + id: 'Block Width', + defaultMessage: 'Block Width', + }, sponsor: { id: 'Sponsor Us', defaultMessage: 'Sponsor Us', @@ -93,6 +97,111 @@ const messages = defineMessages({ id: 'Presentations', defaultMessage: 'Presentations', }, + + /// Countdown Block + countdownBlockTitle: { + id: 'Countdown Block', + defaultMessage: 'Countdown Block', + }, + countdownHasSeparator: { + id: 'Display Separator', + defaultMessage: 'Display Separator', + }, + countdownHideAfterTarget: { + id: 'Hide after target date is reached', + defaultMessage: 'Hide after target date is reached', + }, + countdownDisplayFormat: { + id: 'What should be displayed?', + defaultMessage: 'What should be displayed?', + }, + countdownFormatDDHHMMSS: { + id: 'Days, Hours, Minutes, Seconds (DD:HH:MM:SS)', + defaultMessage: 'Days, Hours, Minutes, Seconds (DD:HH:MM:SS)', + }, + countdownFormatDDHHMM: { + id: 'Days, Hours, Minutes (DD:HH:MM)', + defaultMessage: 'Days, Hours, Minutes (DD:HH:MM)', + }, + countdownFormatDDHH: { + id: 'Days, Hours (DD:HH)', + defaultMessage: 'Days, Hours (DD:HH)', + }, + countdownFormatDD: { + id: 'Days (DD)', + defaultMessage: 'Days (DD)', + }, + countdownSize: { + id: 'Countdown Size', + defaultMessage: 'Countdown Size', + }, + // Parallax Block + parallaxBlockTitle: { + id: 'Parallax Block', + defaultMessage: 'Parallax Block', + }, + parallaxBgImage: { + id: 'Background Image', + defaultMessage: 'Background Image', + }, + parallaxDescription: { + id: 'Description', + defaultMessage: 'Description', + }, + parallaxHeight: { + id: 'Height', + defaultMessage: 'Height', + }, + overlay: { + id: 'Overlay', + defaultMessage: 'Overlay', + }, + overlayFull: { + id: 'Full Overlay', + defaultMessage: 'Full Overlay', + }, + overlayBox: { + id: 'Textbox', + defaultMessage: 'Textbox', + }, + overlayColor: { + id: 'Overlay Color', + defaultMessage: 'Overlay Color', + }, + overlayForegroundColor: { + id: 'Overlay Text Color', + defaultMessage: 'Overlay Text Color', + }, + parallaxCTAItems: { + id: 'Call to Action', + defaultMessage: 'Call to Action', + }, + + /// Parallax Block CTA + buttonTitle: { + id: 'Button', + defaultMessage: 'Button', + }, + buttonAdd: { + id: 'Add Button', + defaultMessage: 'Add Button', + }, + buttonLabel: { + id: 'Text', + defaultMessage: 'Text', + }, + buttonHref: { + id: 'Link', + defaultMessage: 'Link', + }, + buttonHide: { + id: 'Hide Button', + defaultMessage: 'Hide Button', + }, + openLinkInNewTab: { + id: 'Open link in new tab', + defaultMessage: 'Open link in new tab', + }, }); export default messages; diff --git a/frontend/packages/volto-techevent/src/stories/CallToAction.stories.tsx b/frontend/packages/volto-techevent/src/stories/CallToAction.stories.tsx new file mode 100644 index 0000000..a8d1b18 --- /dev/null +++ b/frontend/packages/volto-techevent/src/stories/CallToAction.stories.tsx @@ -0,0 +1,141 @@ +import type { Meta, StoryObj } from '@storybook/react'; +import React from 'react'; +import Wrapper from '@plone/volto/storybook'; +import { DemoContainer } from '@plone-collective/volto-techevent/stories/utils'; +import CallToAction from '../components/CallToAction/CallToAction'; + +const meta = { + title: 'TechEvent/Components/CallToAction/CallToAction', + component: CallToAction as any, + parameters: { + layout: 'fullscreen', + docs: { + description: { + component: 'A button.', + }, + }, + }, + args: { + className: '', + size: 'm', + label: 'Schedule', + item: { + '@id': '/schedule', + '@type': 'Schedule', + }, + isEditMode: false, + }, + argTypes: { + className: { + control: { type: 'text' }, + description: 'Classname to be applied to this element', + table: { type: { summary: 'string' }, defaultValue: { summary: '' } }, + }, + size: { + control: { + type: 'select', + }, + options: ['l', 'm', 's'], + description: 'Size of the call to action', + table: { + type: { summary: 'select' }, + defaultValue: { summary: 'm' }, + }, + }, + label: { + control: { type: 'text' }, + description: 'Call to action label', + table: { + type: { summary: 'string' }, + defaultValue: { summary: 'Just do it!' }, + }, + }, + isEditMode: { + control: { type: 'boolean' }, + description: 'Whether this is being rendered in the edit page', + table: { type: { summary: 'boolean' }, defaultValue: { summary: false } }, + }, + }, + tags: ['autodocs'], +} satisfies Meta; + +export default meta; + +type Story = StoryObj; + +export const Default: Story = { + render: (args) => , + decorators: [ + (Story) => ( + + + + + + ), + ], +}; + +export const EditMode: Story = { + render: (args) => , + args: { + isEditMode: true, + }, + decorators: [ + (Story) => ( + + + + + + ), + ], +}; + +export const SizeSmall: Story = { + render: (args) => , + args: { + size: 's', + }, + decorators: [ + (Story) => ( + + + + + + ), + ], +}; + +export const SizeMedium: Story = { + render: (args) => , + args: { + size: 'm', + }, + decorators: [ + (Story) => ( + + + + + + ), + ], +}; + +export const SizeLarge: Story = { + render: (args) => , + args: { + size: 'l', + }, + decorators: [ + (Story) => ( + + + + + + ), + ], +}; diff --git a/frontend/packages/volto-techevent/src/stories/Countdown.stories.tsx b/frontend/packages/volto-techevent/src/stories/Countdown.stories.tsx new file mode 100644 index 0000000..488ca58 --- /dev/null +++ b/frontend/packages/volto-techevent/src/stories/Countdown.stories.tsx @@ -0,0 +1,134 @@ +import type { Meta, StoryObj } from '@storybook/react'; +import React from 'react'; +import Wrapper from '@plone/volto/storybook'; +import { DemoContainer } from '@plone-collective/volto-techevent/stories/utils'; +import Countdown from '../components/Countdown/Countdown'; + +const meta = { + title: 'TechEvent/Components/Countdown/Countdown', + component: Countdown as any, + parameters: { + layout: 'fullscreen', + docs: { + description: { + component: 'A countdown timer.', + }, + }, + }, + args: { + targetDate: new Date(Date.now() + 5 * 24 * 60 * 60 * 1000).toISOString(), + size: 'l', + displayFormat: 'ddhhmmss', + hideAfterStart: true, + hasSeparator: true, + }, + argTypes: { + targetDate: { + control: { type: 'date' }, + description: 'Target date for the countdown', + table: { + type: { summary: 'date' }, + defaultValue: { summary: 'ddhhmmss' }, + }, + }, + size: { + control: { + type: 'select', + }, + options: ['l', 'm', 's'], + description: 'Size of the countdown elements', + table: { + type: { summary: 'select' }, + defaultValue: { summary: 'l' }, + }, + }, + displayFormat: { + control: { + type: 'select', + }, + options: ['ddhhmmss', 'ddhhmm', 'ddhh', 'dd'], + description: 'Display format of the countdown elements', + table: { + type: { summary: 'select' }, + defaultValue: { summary: 'ddhhmmss' }, + }, + }, + hideAfterStart: { + control: { type: 'boolean' }, + description: + 'Whether to hide the countdown after the target date is reached', + table: { type: { summary: 'boolean' }, defaultValue: { summary: true } }, + }, + hasSeparator: { + control: { type: 'boolean' }, + description: 'Whether to display a separator between elements', + table: { type: { summary: 'boolean' }, defaultValue: { summary: true } }, + }, + }, + tags: ['autodocs'], +} satisfies Meta; + +export default meta; + +type Story = StoryObj; + +export const Default: Story = { + render: (args) => , + decorators: [ + (Story) => ( + + + + + + ), + ], +}; + +export const WithoutSeparator: Story = { + render: (args) => , + args: { + hasSeparator: false, + }, + decorators: [ + (Story) => ( + + + + + + ), + ], +}; + +export const SizeMedium: Story = { + render: (args) => , + args: { + size: 'm', + }, + decorators: [ + (Story) => ( + + + + + + ), + ], +}; + +export const SizeSmall: Story = { + render: (args) => , + args: { + size: 's', + }, + decorators: [ + (Story) => ( + + + + + + ), + ], +}; diff --git a/frontend/packages/volto-techevent/src/stories/CountdownElement.stories.tsx b/frontend/packages/volto-techevent/src/stories/CountdownElement.stories.tsx new file mode 100644 index 0000000..2f78842 --- /dev/null +++ b/frontend/packages/volto-techevent/src/stories/CountdownElement.stories.tsx @@ -0,0 +1,97 @@ +import type { Meta, StoryObj } from '@storybook/react'; +import React from 'react'; +import Wrapper from '@plone/volto/storybook'; +import { DemoContainer } from '@plone-collective/volto-techevent/stories/utils'; +import CountdownElement from '../components/Countdown/CountdownElement'; + +const meta = { + title: 'TechEvent/Components/Countdown/CountdownElement', + component: CountdownElement as any, + parameters: { + layout: 'fullscreen', + docs: { + description: { + component: + 'One element of the countdown, showing a number and a label (e.g., "Days").', + }, + }, + }, + args: { + value: 12, + label: 'Days', + size: 'l', + }, + argTypes: { + value: { + control: { type: 'number', min: 0 }, + description: 'Numeric value to display (e.g. days, hours)', + table: { type: { summary: 'number' }, defaultValue: { summary: 12 } }, + }, + label: { + control: { type: 'text' }, + description: 'Label for the value (e.g. "Days")', + table: { type: { summary: 'string' }, defaultValue: { summary: 'Days' } }, + }, + size: { + control: { + type: 'select', + }, + options: ['l', 'm', 's'], + description: 'Size of the countdown element', + table: { + type: { summary: 'select' }, + defaultValue: { summary: 'l' }, + }, + }, + }, + tags: ['autodocs'], +} satisfies Meta; + +export default meta; + +type Story = StoryObj; + +export const Default: Story = { + render: (args) => , + decorators: [ + (Story) => ( + + + + + + ), + ], +}; + +export const SizeMedium: Story = { + render: (args) => , + args: { + size: 'm', + }, + decorators: [ + (Story) => ( + + + + + + ), + ], +}; + +export const SizeSmall: Story = { + render: (args) => , + args: { + size: 's', + }, + decorators: [ + (Story) => ( + + + + + + ), + ], +}; diff --git a/frontend/packages/volto-techevent/src/stories/CountdownElements.stories.tsx b/frontend/packages/volto-techevent/src/stories/CountdownElements.stories.tsx new file mode 100644 index 0000000..a763bed --- /dev/null +++ b/frontend/packages/volto-techevent/src/stories/CountdownElements.stories.tsx @@ -0,0 +1,142 @@ +import type { Meta, StoryObj } from '@storybook/react'; +import React from 'react'; +import Wrapper from '@plone/volto/storybook'; +import { DemoContainer } from '@plone-collective/volto-techevent/stories/utils'; +import CountdownElements from '../components/Countdown/CountdownElements'; + +const meta = { + title: 'TechEvent/Components/Countdown/CountdownElements', + component: CountdownElements as any, + parameters: { + layout: 'fullscreen', + docs: { + description: { + component: 'The whole structure of a countdown.', + }, + }, + }, + args: { + days: 99, + hours: 12, + minutes: 34, + seconds: 59, + size: 'l', + displayFormat: 'ddhhmmss', + hasSeparator: true, + }, + argTypes: { + displayFormat: { + control: { + type: 'select', + }, + options: ['ddhhmmss', 'ddhhmm', 'ddhh', 'dd'], + description: 'Display format of the countdown elements', + table: { + type: { summary: 'select' }, + defaultValue: { summary: 'ddhhmmss' }, + }, + }, + size: { + control: { + type: 'select', + }, + options: ['l', 'm', 's'], + description: 'Size of the countdown elements', + table: { + type: { summary: 'select' }, + defaultValue: { summary: 'l' }, + }, + }, + days: { + control: { type: 'number', min: 0 }, + description: 'Number of days to display', + table: { type: { summary: 'number' }, defaultValue: { summary: 99 } }, + }, + hours: { + control: { type: 'number', min: 0, max: 23 }, + description: 'Number of hours to display', + table: { type: { summary: 'number' }, defaultValue: { summary: 12 } }, + }, + minutes: { + control: { type: 'number', min: 0, max: 59 }, + description: 'Number of minutes to display', + table: { type: { summary: 'number' }, defaultValue: { summary: 34 } }, + }, + seconds: { + control: { type: 'number', min: 0, max: 59 }, + description: 'Number of seconds to display', + table: { type: { summary: 'number' }, defaultValue: { summary: 59 } }, + }, + hasSeparator: { + control: { type: 'boolean' }, + description: 'Whether to display a separator between elements', + table: { type: { summary: 'boolean' }, defaultValue: { summary: true } }, + }, + }, + tags: ['autodocs'], +} satisfies Meta; + +export default meta; + +type Story = StoryObj; + +export const Default: Story = { + render: (args) => , + decorators: [ + (Story) => ( + + + + + + ), + ], +}; + +export const WithoutSeparator: Story = { + render: (args) => , + args: { + hasSeparator: false, + }, + decorators: [ + (Story) => ( + + + + + + ), + ], +}; + +export const SizeMedium: Story = { + render: (args) => , + args: { + size: 'm', + }, + decorators: [ + (Story) => ( + + + + + + ), + ], +}; + +export const SizeSmall: Story = { + render: (args) => , + args: { + size: 's', + }, + decorators: [ + (Story) => ( + + + + + + ), + ], +}; diff --git a/frontend/packages/volto-techevent/src/stories/Overview.mdx b/frontend/packages/volto-techevent/src/stories/Overview.mdx new file mode 100644 index 0000000..5c5a057 --- /dev/null +++ b/frontend/packages/volto-techevent/src/stories/Overview.mdx @@ -0,0 +1,5 @@ +import { Meta } from '@storybook/blocks'; + + + +# Tech Event - Overview diff --git a/frontend/packages/volto-techevent/src/stories/Parallax.stories.tsx b/frontend/packages/volto-techevent/src/stories/Parallax.stories.tsx new file mode 100644 index 0000000..9df06c6 --- /dev/null +++ b/frontend/packages/volto-techevent/src/stories/Parallax.stories.tsx @@ -0,0 +1,194 @@ +import type { Meta, StoryObj } from '@storybook/react'; +import React from 'react'; +import Wrapper from '@plone/volto/storybook'; +import { DemoContainer } from '@plone-collective/volto-techevent/stories/utils'; +import { imageHref, parallaxItems } from './mocks'; +import Parallax from '../components/Parallax/Parallax'; + +const meta = { + title: 'TechEvent/Components/Parallax/Parallax', + component: Parallax as any, + parameters: { + layout: 'fullscreen', + docs: { + description: { + component: 'A parallax component.', + }, + }, + }, + args: { + title: 'Parallax Title', + description: 'Parallax Description', + href: imageHref, + overlay: 'full-overlay', + height: 'l', + items: parallaxItems, + isEditMode: false, + className: '', + }, + argTypes: { + title: { + control: { type: 'text' }, + description: 'Title applied to the parallax component', + table: { + type: { summary: 'string' }, + defaultValue: { summary: 'Parallax Title' }, + }, + }, + description: { + control: { type: 'text' }, + description: 'Description applied to the parallax component', + table: { + type: { summary: 'string' }, + defaultValue: { summary: 'Parallax; + +export default meta; + +type Story = StoryObj; + +const transformArgs = (args: Record) => { + return { + ...args, + description: { data: `${args.description}` }, + }; +}; + +export const Default: Story = { + render: (args) => , + decorators: [ + (Story) => ( + + + + + + ), + ], +}; +export const SizeSmall: Story = { + render: (args) => , + args: { + height: 's', + }, + decorators: [ + (Story) => ( + + + + + + ), + ], +}; + +export const SizeMedium: Story = { + render: (args) => , + args: { + height: 'm', + }, + decorators: [ + (Story) => ( + + + + + + ), + ], +}; + +export const SizeLarge: Story = { + render: (args) => , + args: { + height: 'l', + }, + decorators: [ + (Story) => ( + + + + + + ), + ], +}; + +export const AlignLeft: Story = { + render: (args) => , + args: { + height: 'm', + }, + decorators: [ + (Story) => ( + + + + + + ), + ], +}; + +export const AlignCenter: Story = { + render: (args) => , + args: { + height: 'm', + }, + decorators: [ + (Story) => ( + + + + + + ), + ], +}; + +export const AlignRight: Story = { + render: (args) => , + args: { + height: 'm', + }, + decorators: [ + (Story) => ( + + + + + + ), + ], +}; diff --git a/frontend/packages/volto-techevent/src/stories/mocks.ts b/frontend/packages/volto-techevent/src/stories/mocks.ts new file mode 100644 index 0000000..878d7a6 --- /dev/null +++ b/frontend/packages/volto-techevent/src/stories/mocks.ts @@ -0,0 +1,160 @@ +const demoImage = 'image-light.jpg'; + +export const imageHref = [ + { + '@id': '.', + '@type': 'Image', + CreationDate: '2025-05-20T14:33:13-03:00', + Creator: 'admin', + Date: '2025-05-20T14:33:13-03:00', + Description: '', + EffectiveDate: 'None', + ExpirationDate: 'None', + ModificationDate: '2025-05-20T14:33:13-03:00', + Subject: [], + Title: 'image-light.png', + Type: 'Image', + UID: '5f3664436f464aae9e3a8a31cb6cf649', + cmf_uid: null, + created: '2025-05-20T17:33:13+00:00', + description: '', + effective: '1969-12-31T03:00:00+00:00', + end: null, + exclude_from_nav: null, + expires: '2499-12-31T03:00:00+00:00', + getIcon: true, + getId: 'image-light.png', + getObjSize: '551.0 KB', + getPath: '/Plone/images/image-light.png', + getRemoteUrl: null, + getURL: 'http://localhost:3000/image-light.png', + hasPreviewImage: null, + head_title: null, + id: 'image-light.png', + image_field: 'image', + image_scales: { + image: [ + { + 'content-type': 'image/png', + download: demoImage, + filename: 'image-light.png', + height: 900, + scales: { + great: { + download: demoImage, + height: 675, + width: 1200, + }, + huge: { + download: demoImage, + height: 900, + width: 1600, + }, + icon: { + download: demoImage, + height: 18, + width: 32, + }, + large: { + download: demoImage, + height: 450, + width: 800, + }, + larger: { + download: demoImage, + height: 562, + width: 1000, + }, + mini: { + download: demoImage, + height: 112, + width: 200, + }, + preview: { + download: demoImage, + height: 225, + width: 400, + }, + teaser: { + download: demoImage, + height: 337, + width: 600, + }, + thumb: { + download: demoImage, + height: 72, + width: 128, + }, + tile: { + download: demoImage, + height: 36, + width: 64, + }, + }, + size: 564202, + width: 1600, + }, + ], + }, + is_folderish: false, + level: null, + listCreators: ['admin'], + location: null, + mime_type: 'image/jpg', + modified: '2025-05-20T17:33:13+00:00', + nav_title: null, + portal_type: 'Image', + review_state: null, + social_links: null, + start: null, + sync_uid: null, + title: 'image-light.jpg', + type_title: 'Image', + }, +]; + +export const parallaxItems = [ + { + '@id': '89f33226-ff73-4324-a807-8b55ba170cdf', + href: [ + { + '@id': 'https://plone.org/foundation', + title: 'plone.org/foundation', + }, + ], + label: 'Plone.org', + openLinkInNewTab: true, + }, + { + '@id': 'ad4e8231-b699-46e0-b9ac-9507e032699f', + href: [ + { + '@id': 'http://localhost:3000/schedule', + '@type': 'Schedule', + Description: 'Conference Schedule', + Title: 'Schedule', + hasPreviewImage: null, + head_title: null, + image_field: '', + title: 'Schedule', + }, + ], + label: 'Schedule', + }, + { + '@id': 'c8cd65b4-2aed-44b7-96c5-24ec260e6b93', + href: [ + { + '@id': 'http://localhost:3000/sponsor-us', + '@type': 'SponsorsDB', + Description: 'Support our event', + Title: 'Sponsor Us', + hasPreviewImage: null, + head_title: null, + image_field: '', + title: 'Sponsor Us', + }, + ], + label: 'Sponsor', + }, +]; diff --git a/frontend/packages/volto-techevent/src/stories/static/image-light.jpg b/frontend/packages/volto-techevent/src/stories/static/image-light.jpg new file mode 100644 index 0000000..063c0b7 Binary files /dev/null and b/frontend/packages/volto-techevent/src/stories/static/image-light.jpg differ diff --git a/frontend/packages/volto-techevent/src/stories/utils.tsx b/frontend/packages/volto-techevent/src/stories/utils.tsx new file mode 100644 index 0000000..2540af7 --- /dev/null +++ b/frontend/packages/volto-techevent/src/stories/utils.tsx @@ -0,0 +1,36 @@ +import React from 'react'; + +export const DemoContainer: React.FC< + React.PropsWithChildren<{ + width?: number | string; + height?: number | string; + maxWidth?: number | string; + style?: React.CSSProperties; + }> +> = ({ + width = 'var(--default-container-width)', + height = 640, + maxWidth = '100%', + style, + children, +}) => { + return ( +
+ {children} +
+ ); +}; diff --git a/frontend/packages/volto-techevent/src/theme/_main.scss b/frontend/packages/volto-techevent/src/theme/_main.scss index bcbd838..6d2d8c8 100644 --- a/frontend/packages/volto-techevent/src/theme/_main.scss +++ b/frontend/packages/volto-techevent/src/theme/_main.scss @@ -1,6 +1,10 @@ // This extends the volto-light-theme @import 'root'; +@import 'components/calltoaction'; @import 'components/card'; +@import 'components/parallax'; +@import 'components/countdown_element'; +@import 'components/countdown_elements'; @import 'components/schedule/schedule'; @import 'components/schedule/session_date'; @import 'components/schedule/session_track'; @@ -23,6 +27,8 @@ @import 'components/presenter/presenter_category'; @import 'components/presenter/presenter_tile'; @import 'components/presenter/presenter_view'; +@import 'components/block_countdown'; +@import 'components/block_parallax'; @import 'components/block_sponsors_levelbenefits'; @import 'components/block_sponsors_levelcomparison'; @import 'components/block_sponsors_showcase'; diff --git a/frontend/packages/volto-techevent/src/theme/_root.scss b/frontend/packages/volto-techevent/src/theme/_root.scss index 77854a8..52b45af 100644 --- a/frontend/packages/volto-techevent/src/theme/_root.scss +++ b/frontend/packages/volto-techevent/src/theme/_root.scss @@ -1,5 +1,280 @@ +/* +=================================== +Typed custom properties (@property) +==================================== +*/ + +/* Spacing primitives (replaces #{$spacing-small}) */ +@property --spacing-small { + inherits: true; + initial-value: 20px; + syntax: ''; +} + +/* Generic theme hooks used as fallbacks */ +@property --theme-foreground-color { + inherits: true; + initial-value: #ffffff; + syntax: ''; +} +@property --theme-color { + inherits: true; + initial-value: #000000; + syntax: ''; +} + +/* Buttons */ +@property --techevent-button-color { + inherits: true; + initial-value: #ffffff; + syntax: ''; +} +@property --techevent-button-background-color { + inherits: true; + initial-value: #000000; + syntax: ''; +} +@property --techevent-button-border-color { + inherits: true; + initial-value: #000000; + syntax: ''; +} +@property --techevent-button-border-radius { + inherits: true; + initial-value: 5px; + syntax: ''; +} +@property --techevent-button-border-width { + inherits: true; + initial-value: 1px; + syntax: ''; +} +@property --techevent-button-hover-color { + inherits: true; + initial-value: #ffffff; + syntax: ''; +} +@property --techevent-button-hover-background-color { + inherits: true; + initial-value: #000000; + syntax: ''; +} +@property --techevent-button-hover-border-color { + inherits: true; + initial-value: #000000; + syntax: ''; +} +@property --techevent-button-hover-border-radius { + inherits: true; + initial-value: 5px; + syntax: ''; +} +@property --techevent-button-hover-border-width { + inherits: true; + initial-value: 1px; + syntax: ''; +} + +/* SponsorTile */ +@property --techevent-sponsortile-background-main { + inherits: true; + initial-value: transparent; + syntax: ' | transparent'; +} +@property --techevent-sponsortile-min-width { + inherits: true; + initial-value: 200px; + syntax: ''; +} +@property --techevent-sponsortile-max-width { + inherits: true; + initial-value: 400px; + syntax: ''; +} +@property --techevent-sponsortile-border-width { + inherits: true; + initial-value: 1px; + syntax: ''; +} +@property --techevent-sponsortile-border-radius { + inherits: true; + initial-value: var(--spacing-small); + syntax: ''; +} +@property --techevent-sponsortile-margin { + inherits: true; + initial-value: var(--spacing-small); + syntax: ''; +} +@property --techevent-sponsortile-padding { + inherits: true; + initial-value: 7px; + syntax: ''; +} +@property --techevent-sponsortile-hover-border-width { + inherits: true; + initial-value: 1px; + syntax: ''; +} +@property --techevent-sponsortile-hover-border-radius { + inherits: true; + initial-value: var(--spacing-small); + syntax: ''; +} +@property --techevent-sponsortile-hover-margin { + inherits: true; + initial-value: var(--spacing-small); + syntax: ''; +} + +/* SponsorLevel */ +@property --techevent-sponsorlevel-title-padding-y { + inherits: true; + initial-value: 1rem; /* from "0 0 1rem 0" keep the vertical part typed */ + syntax: ''; +} +@property --techevent-sponsorlevel-title-margin-y { + inherits: true; + initial-value: 1.2rem; /* from "1.2rem 0" keep the vertical part typed */ + syntax: ''; +} +@property --techevent-sponsorlevel-title-border-bottom-width { + inherits: true; + initial-value: 1px; + syntax: ''; +} +@property --techevent-sponsorlevel-title-before-height { + inherits: true; + initial-value: 3px; + syntax: ''; +} +@property --techevent-sponsorlevel-title-before-width { + inherits: true; + initial-value: 400px; + syntax: ''; +} + +/* Presenter */ +@property --techevent-presenter-category-background-color { + inherits: true; + initial-value: #cccccc; + syntax: ''; +} +@property --techevent-presenter-category-color { + inherits: true; + initial-value: #000000; + syntax: ''; +} + +/* Misc text tokens */ +@property --techevent-vocabulary-foreground-color { + inherits: true; + initial-value: #ffffff; + syntax: ''; +} +@property --techevent-session-track-foreground-color { + inherits: true; + initial-value: #ffffff; + syntax: ''; +} + +/* Schedule */ +@property --techevent-schedule-color { + inherits: true; + initial-value: rgb(1, 106, 173); + syntax: ''; +} +@property --techevent-schedule-border-color { + inherits: true; + initial-value: #cccccc; + syntax: ''; +} +@property --techevent-schedule-room-color { + inherits: true; + initial-value: #000000; + syntax: ''; +} +@property --techevent-schedule-secondary-color { + inherits: true; + initial-value: #cccccc; + syntax: ''; +} +@property --techevent-schedule-reverse-color { + inherits: true; + initial-value: #ffffff; + syntax: ''; +} +@property --techevent-schedule-gap { + inherits: true; + initial-value: 2px; + syntax: ''; +} + +/* Parallax Block */ +@property --techevent-parallax-overlay-color { + inherits: true; + initial-value: rgba(255, 255, 255, 0.66); + syntax: ''; +} +@property --techevent-parallax-foreground-color { + inherits: true; + initial-value: rgb(0, 0, 0); + syntax: ''; +} +@property --techevent-parallax-content-max-width { + inherits: true; + initial-value: 940px; + syntax: ''; +} +@property --techevent-parallax-height-s { + inherits: true; + initial-value: 300px; + syntax: ''; +} +@property --techevent-parallax-height-m { + inherits: true; + initial-value: 600px; + syntax: ''; +} +@property --techevent-parallax-height-l { + inherits: true; + initial-value: 900px; + syntax: ''; +} + +/* Parallax Button */ +@property --theme-parallax-button-color { + inherits: true; + initial-value: #000000; + syntax: ''; +} +@property --theme-parallax-button-border-color { + inherits: true; + initial-value: #000000; + syntax: ''; +} + +/* ================================ + Tokens (values) — pure CSS + ================================ */ + :root { - // SponsorTile + /* Button */ + --techevent-button-padding: 10px 20px; + --techevent-button-color: var(--theme-foreground-color, #fff); + --techevent-button-background-color: var(--theme-color, #000); + --techevent-button-border-color: var(--theme-color, #000); + --techevent-button-border-radius: 5px; + --techevent-button-border-style: solid; + --techevent-button-border-width: 1px; + --techevent-button-hover-color: var(--theme-foreground-color, #fff); + --techevent-button-hover-background-color: var(--theme-color, #000); + --techevent-button-hover-border-color: var(--theme-color, #000); + --techevent-button-hover-border-radius: 5px; + --techevent-button-hover-border-style: solid; + --techevent-button-hover-border-width: 1px; + + /* SponsorTile */ --techevent-sponsortile-background-main: transparent; --techevent-sponsortile-min-width: 200px; --techevent-sponsortile-max-width: 400px; @@ -7,24 +282,23 @@ --techevent-sponsortile-justify-content: center; --techevent-sponsortile-border-width: 1px; --techevent-sponsortile-border-style: solid; - //--techevent-sponsortile-border-color: ; - --techevent-sponsortile-border-radius: #{$spacing-small}; - --techevent-sponsortile-margin: #{$spacing-small}; - //--techevent-sponsortile-box-shadow: 0px 3px 16px 0px #000; + /* --techevent-sponsortile-border-color: ; */ + --techevent-sponsortile-border-radius: var(--spacing-small); + --techevent-sponsortile-margin: var(--spacing-small); + /* --techevent-sponsortile-box-shadow: 0px 3px 16px 0px #000; */ --techevent-sponsortile-padding: 7px; - /// hover + /* hover */ --techevent-sponsortile-hover-border-width: 1px; --techevent-sponsortile-hover-border-style: solid; - //--techevent-sponsortile-hover-border-color: ; - --techevent-sponsortile-hover-border-radius: #{$spacing-small}; - --techevent-sponsortile-hover-margin: #{$spacing-small}; - //--techevent-sponsortile-hover-box-shadow: 0px 3px 16px 0px #000; - - // SponsorLevel - /// Title - //--techevent-sponsorlevel-title-color: ; - //--techevent-sponsorlevel-title-border-color: ; - //--techevent-sponsorlevel-title-before-background: ; + /* --techevent-sponsortile-hover-border-color: ; */ + --techevent-sponsortile-hover-border-radius: var(--spacing-small); + --techevent-sponsortile-hover-margin: var(--spacing-small); + /* --techevent-sponsortile-hover-box-shadow: 0px 3px 16px 0px #000; */ + + /* SponsorLevel (kept shorthands for authoring ergonomics) */ + /* --techevent-sponsorlevel-title-color: ; */ + /* --techevent-sponsorlevel-title-border-color: ; */ + /* --techevent-sponsorlevel-title-before-background: ; */ --techevent-sponsorlevel-title-padding: 0 0 1rem 0; --techevent-sponsorlevel-title-margin: 1.2rem 0; --techevent-sponsorlevel-title-border-bottom-style: solid; @@ -32,16 +306,16 @@ --techevent-sponsorlevel-title-before-height: 3px; --techevent-sponsorlevel-title-before-width: 400px; - // Presenter - /// PresenterCategory + /* Presenter */ --techevent-presenter-category-background-color: #ccc; --techevent-presenter-category-color: #000; --techevent-vocabulary-foreground-color: #fff; - //Track foreground color + + /* Track foreground color */ --techevent-session-track-foreground-color: #fff; - // Schedule + /* Schedule */ --techevent-schedule-color: rgb(1, 106, 173); --techevent-schedule-border-color: #ccc; --techevent-schedule-room-color: #000; @@ -49,7 +323,22 @@ --techevent-schedule-reverse-color: #fff; --techevent-schedule-gap: 2px; - // SessionTile - --techevent-sessionTile-background-color: #ecebeb; - --techevent-sessionTile-color: #000; + /* Parallax Block */ + --techevent-parallax-overlay-color: rgba(255, 255, 255, 0.66); + --techevent-parallax-foreground-color: rgb(0, 0, 0); + --techevent-parallax-content-max-width: var(--narrow-container-width, 940px); + --techevent-parallax-height-s: 300px; + --techevent-parallax-height-m: 600px; + --techevent-parallax-height-l: 900px; + + /* Parallax Button */ + --theme-parallax-button-color: var( + --techevent-parallax-foreground-color, + #000 + ); + --theme-parallax-button-padding: 8px 20px; + --theme-parallax-button-background: transparent; + --theme-parallax-button-border-color: #000; + --theme-parallax-button-border: 1px solid + var(--theme-parallax-button-border-color); } diff --git a/frontend/packages/volto-techevent/src/theme/_variables.scss b/frontend/packages/volto-techevent/src/theme/_variables.scss index d51fc7f..6cd19e6 100644 --- a/frontend/packages/volto-techevent/src/theme/_variables.scss +++ b/frontend/packages/volto-techevent/src/theme/_variables.scss @@ -132,3 +132,31 @@ $spacing-xlarge: 80px !default; margin-bottom: $spacing-xsmall; } } + +@mixin button() { + @include add(size, m); + @include add(height, m); + padding: var(--techevent-button-padding); + border-width: var(--techevent-button-border-width, 1px); + border-style: var(--techevent-button-border-style, solid); + border-color: var(--techevent-button-border-color); + border-radius: var(--techevent-button-border-radius, 0px); + background-color: var(--techevent-button-background-color); + color: var(--techevent-button-color); + &:hover { + border-width: var(--techevent-button-border-width, 1px); + border-style: var(--techevent-button-hover-border-style, solid); + border-color: var(--techevent-button-hover-border-color); + border-radius: var(--techevent-button-hover-border-radius, 0px); + background-color: var(--techevent-button-hover-background-color); + color: var(--techevent-button-hover-color); + } + &.size-l { + @include add(size, l); + @include add(height, l); + } + &.size-s { + @include add(size, s); + @include add(height, s); + } +} diff --git a/frontend/packages/volto-techevent/src/theme/components/_block_countdown.scss b/frontend/packages/volto-techevent/src/theme/components/_block_countdown.scss new file mode 100644 index 0000000..1ab1c22 --- /dev/null +++ b/frontend/packages/volto-techevent/src/theme/components/_block_countdown.scss @@ -0,0 +1,31 @@ +#page-document .blocks-group-wrapper .block.countdownBlock, +.block-editor-countdownBlock { + max-width: var(--block-width, var(--narrow-container-width)); + .countdown { + display: flex; + flex-direction: column; + align-items: var(--block-alignment); + .countdown-title { + padding: 0 $spacing-xsmall; + @include add(size, xl); + @include add(height, xl); + @include add(weight, bold); + &.size-s { + @include add(size, m); + @include add(height, m); + } + &.size-m { + @include add(size, l); + @include add(height, l); + } + } + .countdown-elements { + justify-content: var(--block-alignment); + } + } +} + +.countdown-wrapper { + position: relative; + overflow: hidden; +} diff --git a/frontend/packages/volto-techevent/src/theme/components/_block_parallax.scss b/frontend/packages/volto-techevent/src/theme/components/_block_parallax.scss new file mode 100644 index 0000000..a37c8d5 --- /dev/null +++ b/frontend/packages/volto-techevent/src/theme/components/_block_parallax.scss @@ -0,0 +1,3 @@ +body #page-document .blocks-group-wrapper .block.parallaxBlock { + max-width: 100%; +} diff --git a/frontend/packages/volto-techevent/src/theme/components/_calltoaction.scss b/frontend/packages/volto-techevent/src/theme/components/_calltoaction.scss new file mode 100644 index 0000000..34c5949 --- /dev/null +++ b/frontend/packages/volto-techevent/src/theme/components/_calltoaction.scss @@ -0,0 +1,21 @@ +.cta { + margin: $spacing-small 0px; + &.size-l { + margin: $spacing-medium 0px; + } + &.size-s { + margin: $spacing-xsmall 0px; + } + .cta-link { + text-decoration: none !important; + &.external { + text-decoration: none !important; + &::after { + display: none; + } + } + } + .cta-button { + @include button(); + } +} diff --git a/frontend/packages/volto-techevent/src/theme/components/_countdown_element.scss b/frontend/packages/volto-techevent/src/theme/components/_countdown_element.scss new file mode 100644 index 0000000..8460c71 --- /dev/null +++ b/frontend/packages/volto-techevent/src/theme/components/_countdown_element.scss @@ -0,0 +1,43 @@ +.countdown-element-wrapper { + display: flex; + align-items: center; + justify-content: center; + .countdown-element { + display: flex; + min-width: 80px; + flex-direction: column; + align-items: center; + justify-content: center; + padding: $spacing-small $spacing-xsmall; + .value { + @include add(size, xl); + @include add(height, xl); + @include add(weight, bold); + } + .label { + @include add(size, m); + @include add(height, m); + @include add(weight, medium); + } + &.size-s { + .value { + @include add(size, m); + @include add(height, m); + } + .label { + @include add(size, s); + @include add(height, s); + } + } + &.size-m { + .value { + @include add(size, l); + @include add(height, l); + } + .label { + @include add(size, s); + @include add(height, s); + } + } + } +} diff --git a/frontend/packages/volto-techevent/src/theme/components/_countdown_elements.scss b/frontend/packages/volto-techevent/src/theme/components/_countdown_elements.scss new file mode 100644 index 0000000..d2854aa --- /dev/null +++ b/frontend/packages/volto-techevent/src/theme/components/_countdown_elements.scss @@ -0,0 +1,53 @@ +.countdown-elements { + display: flex; + align-items: center; + justify-content: center; + padding: 0; + margin: 0; + gap: 10px; + &.size-m { + gap: 5px; + } + &.size-s { + gap: 2px; + } + &.has-separator { + &.size-m, + &.size-s { + .countdown-element-wrapper:not(:last-child) { + &::after { + margin-right: 0px; + margin-left: 0px; + } + } + } + &.size-m { + .countdown-element-wrapper:not(:last-child) { + &::after { + content: ':'; + @include add(size, l); + @include add(height, l); + } + } + } + &.size-s { + .countdown-element-wrapper:not(:last-child) { + &::after { + content: ':'; + @include add(size, m); + @include add(height, m); + } + } + } + .countdown-element-wrapper:not(:last-child) { + &::after { + margin-right: $spacing-2xsmall; + margin-left: $spacing-2xsmall; + content: ':'; + @include add(size, xl); + @include add(height, xl); + @include add(weight, bold); + } + } + } +} diff --git a/frontend/packages/volto-techevent/src/theme/components/_parallax.scss b/frontend/packages/volto-techevent/src/theme/components/_parallax.scss new file mode 100644 index 0000000..b47d5a7 --- /dev/null +++ b/frontend/packages/volto-techevent/src/theme/components/_parallax.scss @@ -0,0 +1,127 @@ +.parallax-wrapper { + position: relative; + overflow: hidden; + &.height-s { + height: var(--techevent-parallax-height-s); + } + &.height-m { + height: var(--techevent-parallax-height-m); + } + &.height-l { + height: var(--techevent-parallax-height-l); + .full-overlay { + width: 100%; + } + } + .parallax-wrapperRef { + .solid-textbox.has-content { + background-color: var( + --techevent-parallax-overlay-color, + rgba(255, 255, 255, 0.66) + ); + } + &:has(.parallax-content .full-overlay) .transparencyLayer { + position: absolute; + width: 100%; + height: 100%; + background-color: var( + --techevent-parallax-overlay-color, + rgba(255, 255, 255, 0.66) + ); + } + img { + position: absolute; + top: 35%; + min-width: 100%; + min-height: 150%; + object-fit: cover; + will-change: transform; + &.placeholder { + position: relative; + top: 0%; + min-width: auto; + min-height: auto; + } + } + .parallax-title, + .parallax-description { + color: var(--techevent-parallax-foreground-color, #000); + } + + .parallax-title { + padding-bottom: $spacing-large; + color: var(--techevent-parallax-foreground-color); + } + + .parallax-description { + padding-bottom: $spacing-large; + color: var(--techevent-parallax-foreground-color); + } + + .parallax-cta { + display: flex; + flex-wrap: wrap; + justify-content: center; + gap: 20px; + .parallax-button { + color: var(--theme-parallax-button-color); + text-decoration: none; + &.external { + text-decoration: none; + &::after { + display: none; + } + } + @include button(); + } + } + .parallax-content { + position: absolute; + top: 0; + left: 50%; + display: flex; + width: 100%; + max-width: var(--techevent-parallax-content-max-width); + height: 100%; + flex-direction: column; + justify-content: center; + transform: translateX(-50%); + + &:has(.solid-textbox) .box { + padding: 40px; + } + + &:has(.full-overlay, .parallax-content) .box { + padding-top: $spacing-large; + padding-bottom: $spacing-large; + } + + .box { + display: inline-block; + width: fit-content; + max-width: 940px; + box-sizing: border-box; + align-self: var(--block-alignment); + text-align: var(--block-alignment); + + &:has(.parallax-description) .parallax-title { + padding-bottom: 60px; + } + } + + .parallax-title { + @include add(size, xl); + @include add(height, xl); + @include add(weight, bold); + margin-bottom: 0px; + } + + p, + p * { + @include add(size, m); + @include add(height, l); + @include add(weight, normal); + } + } + } +} diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml index 213c8e1..9124eff 100644 --- a/frontend/pnpm-lock.yaml +++ b/frontend/pnpm-lock.yaml @@ -13,8 +13,8 @@ importers: .: dependencies: '@kitconcept/volto-light-theme': - specifier: 6.0.1 - version: 6.0.1(@eeacms/volto-accordion-block@10.4.6)(@kitconcept/volto-banner-block@1.0.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-button-block@3.0.3(classnames@2.5.1)(react-dom@18.2.0(react@18.2.0))(react-intl@3.12.1(react@18.2.0))(react@18.2.0))(@kitconcept/volto-dsgvo-banner@2.3.2)(@kitconcept/volto-heading-block@2.4.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-highlight-block@4.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-introduction-block@1.0.0)(@kitconcept/volto-separator-block@4.1.2(react-dom@18.2.0(react@18.2.0))(react-intl@3.12.1(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5)))(@kitconcept/volto-slider-block@6.3.1(@plone/volto@core+packages+volto)(embla-carousel@8.6.0)(react@18.2.0))(@plonegovbr/volto-social-media@2.0.0-alpha.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5)))(classnames@2.5.1)(lodash@4.17.21)(react-dom@18.2.0(react@18.2.0))(react-intl@3.12.1(react@18.2.0))(react-redux@8.1.2(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(redux@4.2.1))(react-router-dom@5.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5)) + specifier: 7.6.1 + version: 7.6.1(@eeacms/volto-accordion-block@10.4.6)(@kitconcept/volto-banner-block@1.0.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-bm3-compat@1.0.0-alpha.1(classnames@2.5.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-button-block@3.0.3(classnames@2.5.1)(react-dom@18.2.0(react@18.2.0))(react-intl@3.12.1(react@18.2.0))(react@18.2.0))(@kitconcept/volto-carousel-block@2.0.0(classnames@2.5.1)(embla-carousel@8.6.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-dsgvo-banner@2.3.2)(@kitconcept/volto-heading-block@2.4.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-highlight-block@4.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-introduction-block@1.0.0)(@kitconcept/volto-logos-block@3.0.0(@eeacms/volto-accordion-block@10.4.6)(@kitconcept/volto-banner-block@1.0.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-bm3-compat@1.0.0-alpha.1(classnames@2.5.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-button-block@3.0.3(classnames@2.5.1)(react-dom@18.2.0(react@18.2.0))(react-intl@3.12.1(react@18.2.0))(react@18.2.0))(@kitconcept/volto-carousel-block@2.0.0(classnames@2.5.1)(embla-carousel@8.6.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-dsgvo-banner@2.3.2)(@kitconcept/volto-heading-block@2.4.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-highlight-block@4.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-introduction-block@1.0.0)(@kitconcept/volto-separator-block@4.1.2(react-dom@18.2.0(react@18.2.0))(react-intl@3.12.1(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5)))(@kitconcept/volto-slider-block@6.3.1(@plone/volto@core+packages+volto)(embla-carousel@8.6.0)(react@18.2.0))(@plonegovbr/volto-social-media@2.0.0-alpha.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5)))(classnames@2.5.1)(embla-carousel@8.6.0)(lodash@4.17.21)(react-dom@18.2.0(react@18.2.0))(react-intl@3.12.1(react@18.2.0))(react-redux@8.1.2(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(redux@4.2.1))(react-router-dom@5.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5)))(@kitconcept/volto-separator-block@4.1.2(react-dom@18.2.0(react@18.2.0))(react-intl@3.12.1(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5)))(@kitconcept/volto-slider-block@6.3.1(@plone/volto@core+packages+volto)(embla-carousel@8.6.0)(react@18.2.0))(@plonegovbr/volto-social-media@2.0.0-alpha.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5)))(classnames@2.5.1)(embla-carousel@8.6.0)(lodash@4.17.21)(react-dom@18.2.0(react@18.2.0))(react-intl@3.12.1(react@18.2.0))(react-redux@8.1.2(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(redux@4.2.1))(react-router-dom@5.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5)) '@plone-collective/volto-techevent': specifier: workspace:* version: link:packages/volto-techevent @@ -1553,6 +1553,9 @@ importers: packages/volto-techevent: dependencies: + '@kitconcept/volto-bm3-compat': + specifier: '*' + version: 1.0.0-alpha.1(classnames@2.5.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@kitconcept/volto-light-theme': specifier: '*' version: 6.0.1(@eeacms/volto-accordion-block@10.4.6)(@kitconcept/volto-banner-block@1.0.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-button-block@3.0.3(classnames@2.5.1)(react-dom@18.2.0(react@18.2.0))(react-intl@3.12.1(react@18.2.0))(react@18.2.0))(@kitconcept/volto-dsgvo-banner@2.3.2)(@kitconcept/volto-heading-block@2.4.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-highlight-block@4.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-introduction-block@1.0.0)(@kitconcept/volto-separator-block@4.1.2(react-dom@18.2.0(react@18.2.0))(react-intl@3.12.1(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5)))(@kitconcept/volto-slider-block@6.3.1(@plone/volto@18.20.0(@babel/runtime@7.27.1)(@popperjs/core@2.11.8)(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-with-direction@1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(seamless-immutable@7.1.4))(embla-carousel@8.6.0)(react@18.2.0))(@plonegovbr/volto-social-media@2.0.0-alpha.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5)))(classnames@2.5.1)(lodash@4.17.21)(react-dom@18.2.0(react@18.2.0))(react-intl@3.12.1(react@18.2.0))(react-redux@8.1.2(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(redux@4.2.1))(react-router-dom@5.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5)) @@ -1562,6 +1565,12 @@ importers: '@plonegovbr/volto-social-media': specifier: 2.0.0-alpha.6 version: 2.0.0-alpha.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5)) + '@storybook/react': + specifier: '*' + version: 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.2.5)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5))(typescript@5.8.3) + classnames: + specifier: '*' + version: 2.5.1 react: specifier: 18.2.0 version: 18.2.0 @@ -1574,9 +1583,15 @@ importers: react-intl: specifier: '*' version: 3.12.1(react@18.2.0) + react-redux: + specifier: '*' + version: 8.1.2(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(redux@4.2.1) semantic-ui-react: specifier: '*' version: 2.1.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + uuid: + specifier: '*' + version: 9.0.1 devDependencies: '@plone/scripts': specifier: workspace:* @@ -3048,6 +3063,13 @@ packages: react: 18.2.0 react-dom: 18.2.0 + '@kitconcept/volto-bm3-compat@1.0.0-alpha.1': + resolution: {integrity: sha512-eKEtR1WBvLh9gf9JzCB7THgcYxyJPiw7QVXZ2Bdo6NOYSh05PPMvpN+lUBYj3ottk7oAt9Mvln4FCyfza4abUw==} + peerDependencies: + classnames: ^2.2.6 + react: 18.2.0 + react-dom: 18.2.0 + '@kitconcept/volto-button-block@3.0.3': resolution: {integrity: sha512-H1N3OY1XRxyU9u8Cjkmf5QtdBYB6010nzke9DHU3lJLItGzP84Qg3dw6RFWV0oE/EcKhZHh0tr6kxnYIpIaiFg==} peerDependencies: @@ -3056,6 +3078,12 @@ packages: react-dom: 18.2.0 react-intl: ^3.12.1 + '@kitconcept/volto-carousel-block@2.0.0': + resolution: {integrity: sha512-J+2ArHeMRGEgfk5ZLwEDVHEQT5V1t+WBBv5M5hrQnav0yfRFtCw5l49aBR4qUSFZQOCcuUTTjj8Zlt2e2SA0fw==} + peerDependencies: + react: 18.2.0 + react-dom: 18.2.0 + '@kitconcept/volto-dsgvo-banner@2.3.2': resolution: {integrity: sha512-iguCyuy4a7dYi1glWorVY7/0co66Su3+acp2O24GEGyDHvrZJgNkKvIOc9nnmAvR6g9zluMWH5ilLaT1rZuT6w==} @@ -3095,6 +3123,62 @@ packages: react-redux: ^8.1.2 react-router-dom: ^5.2.0 + '@kitconcept/volto-light-theme@7.6.0': + resolution: {integrity: sha512-z3Sayz8LTjuyH1t1rnFjj8NHlhiYgUH3tTLMpYJl90QoBychL3q9Ipnma0jESxZyxN+H3J584UJC1UVB2ccP0Q==} + peerDependencies: + '@eeacms/volto-accordion-block': ^10.4.6 + '@kitconcept/volto-banner-block': ^1.1.0 + '@kitconcept/volto-bm3-compat': ^1.0.0-alpha.1 + '@kitconcept/volto-button-block': ^4.0.0 + '@kitconcept/volto-carousel-block': ^2.0.0-alpha.3 + '@kitconcept/volto-dsgvo-banner': ^2.5.1 + '@kitconcept/volto-heading-block': ^2.5.0 + '@kitconcept/volto-highlight-block': ^4.5.0 + '@kitconcept/volto-introduction-block': ^1.1.0 + '@kitconcept/volto-logos-block': ^3.0.0-alpha.2 + '@kitconcept/volto-separator-block': ^4.2.1 + '@kitconcept/volto-slider-block': ^6.4.1 + '@plonegovbr/volto-social-media': ^2.0.0-alpha.10 + classnames: ^2.2.6 + lodash: 4.17.21 + react: 18.2.0 + react-dom: 18.2.0 + react-intl: ^3.12.1 + react-redux: ^8.1.2 + react-router-dom: ^5.2.0 + + '@kitconcept/volto-light-theme@7.6.1': + resolution: {integrity: sha512-dhpuHmE+PgH+h2ZBy4D/Z9qYU85N3Per52XymimgGW0pJGF9su+uk2/If2B5ORHnWdSY5ZwOwzjM6wDF58vLSw==} + peerDependencies: + '@eeacms/volto-accordion-block': ^10.4.6 + '@kitconcept/volto-banner-block': ^1.1.0 + '@kitconcept/volto-bm3-compat': ^1.0.0-alpha.1 + '@kitconcept/volto-button-block': ^4.0.0 + '@kitconcept/volto-carousel-block': ^2.0.0-alpha.3 + '@kitconcept/volto-dsgvo-banner': ^3.0.1 + '@kitconcept/volto-heading-block': ^2.5.0 + '@kitconcept/volto-highlight-block': ^4.5.0 + '@kitconcept/volto-introduction-block': ^1.1.0 + '@kitconcept/volto-logos-block': ^3.0.0 + '@kitconcept/volto-separator-block': ^4.2.1 + '@kitconcept/volto-slider-block': ^6.4.1 + '@plonegovbr/volto-social-media': ^2.0.0-alpha.10 + classnames: ^2.2.6 + lodash: 4.17.21 + react: 18.2.0 + react-dom: 18.2.0 + react-intl: ^3.12.1 + react-redux: ^8.1.2 + react-router-dom: ^5.2.0 + + '@kitconcept/volto-logos-block@3.0.0': + resolution: {integrity: sha512-6WNHiJE6sfIO1MaC7fYrpBZZQw3HenlwnsmEzdkbAGOY0bMZAxXpT633bGiVSBCvfE8hF3yC0Em9nKPo8LtnBQ==} + peerDependencies: + classnames: 2.5.1 + react: 18.2.0 + react-dom: 18.2.0 + react-intl: ^3.12.1 + '@kitconcept/volto-separator-block@4.1.2': resolution: {integrity: sha512-SWgIu7/XmZA0BK0LX+ObM7w1YdFAyRAxQUBt/ICka+KKsIVUpYeBUiJ+Q9d9Z5bneh7Fwv3Oik6CAJ5BhqCn2A==} peerDependencies: @@ -7418,21 +7502,39 @@ packages: electron-to-chromium@1.5.155: resolution: {integrity: sha512-ps5KcGGmwL8VaeJlvlDlu4fORQpv3+GIcF5I3f9tUKUlJ/wsysh6HU8P5L1XWRYeXfA0oJd4PyM8ds8zTFf6Ng==} + embla-carousel-autoplay@8.5.2: + resolution: {integrity: sha512-27emJ0px3q/c0kCHCjwRrEbYcyYUPfGO3g5IBWF1i7714TTzE6L9P81V6PHLoSMAKJ1aHoT2e7YFOsuFKCbyag==} + peerDependencies: + embla-carousel: 8.5.2 + embla-carousel-autoplay@8.6.0: resolution: {integrity: sha512-OBu5G3nwaSXkZCo1A6LTaFMZ8EpkYbwIaH+bPqdBnDGQ2fh4+NbzjXjs2SktoPNKCtflfVMc75njaDHOYXcrsA==} peerDependencies: embla-carousel: 8.6.0 + embla-carousel-react@8.5.2: + resolution: {integrity: sha512-Tmx+uY3MqseIGdwp0ScyUuxpBgx5jX1f7od4Cm5mDwg/dptEiTKf9xp6tw0lZN2VA9JbnVMl/aikmbc53c6QFA==} + peerDependencies: + react: ^16.8.0 || ^17.0.1 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + embla-carousel-react@8.6.0: resolution: {integrity: sha512-0/PjqU7geVmo6F734pmPqpyHqiM99olvyecY7zdweCw+6tKEXnrE90pBiBbMMU8s5tICemzpQ3hi5EpxzGW+JA==} peerDependencies: react: ^16.8.0 || ^17.0.1 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + embla-carousel-reactive-utils@8.5.2: + resolution: {integrity: sha512-QC8/hYSK/pEmqEdU1IO5O+XNc/Ptmmq7uCB44vKplgLKhB/l0+yvYx0+Cv0sF6Ena8Srld5vUErZkT+yTahtDg==} + peerDependencies: + embla-carousel: 8.5.2 + embla-carousel-reactive-utils@8.6.0: resolution: {integrity: sha512-fMVUDUEx0/uIEDM0Mz3dHznDhfX+znCCDCeIophYb1QGVM7YThSWX+wz11zlYwWFOr74b4QLGg0hrGPJeG2s4A==} peerDependencies: embla-carousel: 8.6.0 + embla-carousel@8.5.2: + resolution: {integrity: sha512-xQ9oVLrun/eCG/7ru3R+I5bJ7shsD8fFwLEY7yPe27/+fDHCNj0OT5EoG5ZbFyOxOcG6yTwW8oTz/dWyFnyGpg==} + embla-carousel@8.6.0: resolution: {integrity: sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==} @@ -16392,6 +16494,12 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + '@kitconcept/volto-bm3-compat@1.0.0-alpha.1(classnames@2.5.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + classnames: 2.5.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + '@kitconcept/volto-button-block@3.0.3(classnames@2.5.1)(react-dom@18.2.0(react@18.2.0))(react-intl@3.12.1(react@18.2.0))(react@18.2.0)': dependencies: classnames: 2.5.1 @@ -16399,6 +16507,17 @@ snapshots: react-dom: 18.2.0(react@18.2.0) react-intl: 3.12.1(react@18.2.0) + '@kitconcept/volto-carousel-block@2.0.0(classnames@2.5.1)(embla-carousel@8.6.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@kitconcept/volto-bm3-compat': 1.0.0-alpha.1(classnames@2.5.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + embla-carousel-autoplay: 8.5.2(embla-carousel@8.6.0) + embla-carousel-react: 8.5.2(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + transitivePeerDependencies: + - classnames + - embla-carousel + '@kitconcept/volto-dsgvo-banner@2.3.2': dependencies: '@datapunt/matomo-tracker-js': 0.5.1 @@ -16447,23 +16566,64 @@ snapshots: transitivePeerDependencies: - storybook - ? '@kitconcept/volto-light-theme@6.0.1(@eeacms/volto-accordion-block@10.4.6)(@kitconcept/volto-banner-block@1.0.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-button-block@3.0.3(classnames@2.5.1)(react-dom@18.2.0(react@18.2.0))(react-intl@3.12.1(react@18.2.0))(react@18.2.0))(@kitconcept/volto-dsgvo-banner@2.3.2)(@kitconcept/volto-heading-block@2.4.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-highlight-block@4.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-introduction-block@1.0.0)(@kitconcept/volto-separator-block@4.1.2(react-dom@18.2.0(react@18.2.0))(react-intl@3.12.1(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5)))(@kitconcept/volto-slider-block@6.3.1(@plone/volto@core+packages+volto)(embla-carousel@8.6.0)(react@18.2.0))(@plonegovbr/volto-social-media@2.0.0-alpha.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5)))(classnames@2.5.1)(lodash@4.17.21)(react-dom@18.2.0(react@18.2.0))(react-intl@3.12.1(react@18.2.0))(react-redux@8.1.2(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(redux@4.2.1))(react-router-dom@5.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5))' + ? '@kitconcept/volto-light-theme@7.6.0(@eeacms/volto-accordion-block@10.4.6)(@kitconcept/volto-banner-block@1.0.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-bm3-compat@1.0.0-alpha.1(classnames@2.5.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-button-block@3.0.3(classnames@2.5.1)(react-dom@18.2.0(react@18.2.0))(react-intl@3.12.1(react@18.2.0))(react@18.2.0))(@kitconcept/volto-carousel-block@2.0.0(classnames@2.5.1)(embla-carousel@8.6.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-dsgvo-banner@2.3.2)(@kitconcept/volto-heading-block@2.4.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-highlight-block@4.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-introduction-block@1.0.0)(@kitconcept/volto-logos-block@3.0.0(@eeacms/volto-accordion-block@10.4.6)(@kitconcept/volto-banner-block@1.0.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-bm3-compat@1.0.0-alpha.1(classnames@2.5.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-button-block@3.0.3(classnames@2.5.1)(react-dom@18.2.0(react@18.2.0))(react-intl@3.12.1(react@18.2.0))(react@18.2.0))(@kitconcept/volto-carousel-block@2.0.0(classnames@2.5.1)(embla-carousel@8.6.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-dsgvo-banner@2.3.2)(@kitconcept/volto-heading-block@2.4.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-highlight-block@4.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-introduction-block@1.0.0)(@kitconcept/volto-separator-block@4.1.2(react-dom@18.2.0(react@18.2.0))(react-intl@3.12.1(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5)))(@kitconcept/volto-slider-block@6.3.1(@plone/volto@core+packages+volto)(embla-carousel@8.6.0)(react@18.2.0))(@plonegovbr/volto-social-media@2.0.0-alpha.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5)))(classnames@2.5.1)(embla-carousel@8.6.0)(lodash@4.17.21)(react-dom@18.2.0(react@18.2.0))(react-intl@3.12.1(react@18.2.0))(react-redux@8.1.2(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(redux@4.2.1))(react-router-dom@5.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5)))(@kitconcept/volto-separator-block@4.1.2(react-dom@18.2.0(react@18.2.0))(react-intl@3.12.1(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5)))(@kitconcept/volto-slider-block@6.3.1(@plone/volto@core+packages+volto)(embla-carousel@8.6.0)(react@18.2.0))(@plonegovbr/volto-social-media@2.0.0-alpha.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5)))(classnames@2.5.1)(embla-carousel@8.6.0)(lodash@4.17.21)(react-dom@18.2.0(react@18.2.0))(react-intl@3.12.1(react@18.2.0))(react-redux@8.1.2(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(redux@4.2.1))(react-router-dom@5.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5))' + : dependencies: + '@dnd-kit/core': 6.0.8(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@dnd-kit/sortable': 7.0.2(@dnd-kit/core@6.0.8(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react@18.2.0) + '@dnd-kit/utilities': 3.2.2(react@18.2.0) + '@eeacms/volto-accordion-block': 10.4.6 + '@kitconcept/volto-banner-block': 1.0.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@kitconcept/volto-bm3-compat': 1.0.0-alpha.1(classnames@2.5.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@kitconcept/volto-button-block': 3.0.3(classnames@2.5.1)(react-dom@18.2.0(react@18.2.0))(react-intl@3.12.1(react@18.2.0))(react@18.2.0) + '@kitconcept/volto-carousel-block': 2.0.0(classnames@2.5.1)(embla-carousel@8.6.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@kitconcept/volto-dsgvo-banner': 2.3.2 + '@kitconcept/volto-heading-block': 2.4.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@kitconcept/volto-highlight-block': 4.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@kitconcept/volto-introduction-block': 1.0.0 + '@kitconcept/volto-logos-block': 3.0.0(@eeacms/volto-accordion-block@10.4.6)(@kitconcept/volto-banner-block@1.0.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-bm3-compat@1.0.0-alpha.1(classnames@2.5.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-button-block@3.0.3(classnames@2.5.1)(react-dom@18.2.0(react@18.2.0))(react-intl@3.12.1(react@18.2.0))(react@18.2.0))(@kitconcept/volto-carousel-block@2.0.0(classnames@2.5.1)(embla-carousel@8.6.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-dsgvo-banner@2.3.2)(@kitconcept/volto-heading-block@2.4.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-highlight-block@4.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-introduction-block@1.0.0)(@kitconcept/volto-separator-block@4.1.2(react-dom@18.2.0(react@18.2.0))(react-intl@3.12.1(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5)))(@kitconcept/volto-slider-block@6.3.1(@plone/volto@core+packages+volto)(embla-carousel@8.6.0)(react@18.2.0))(@plonegovbr/volto-social-media@2.0.0-alpha.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5)))(classnames@2.5.1)(embla-carousel@8.6.0)(lodash@4.17.21)(react-dom@18.2.0(react@18.2.0))(react-intl@3.12.1(react@18.2.0))(react-redux@8.1.2(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(redux@4.2.1))(react-router-dom@5.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5)) + '@kitconcept/volto-separator-block': 4.1.2(react-dom@18.2.0(react@18.2.0))(react-intl@3.12.1(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5)) + '@kitconcept/volto-slider-block': 6.3.1(@plone/volto@core+packages+volto)(embla-carousel@8.6.0)(react@18.2.0) + '@plone/components': 3.0.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5)) + '@plonegovbr/volto-social-media': 2.0.0-alpha.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5)) + classnames: 2.5.1 + embla-carousel-autoplay: 8.6.0(embla-carousel@8.6.0) + embla-carousel-react: 8.6.0(react@18.2.0) + lodash: 4.17.21 + react: 18.2.0 + react-animate-height: 3.2.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react-aria-components: 1.8.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react-colorful: 5.6.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react-dom: 18.2.0(react@18.2.0) + react-intl: 3.12.1(react@18.2.0) + react-redux: 8.1.2(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(redux@4.2.1) + react-router-dom: 5.2.0(react@18.2.0) + uuid: 11.1.0 + transitivePeerDependencies: + - embla-carousel + - storybook + + ? '@kitconcept/volto-light-theme@7.6.1(@eeacms/volto-accordion-block@10.4.6)(@kitconcept/volto-banner-block@1.0.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-bm3-compat@1.0.0-alpha.1(classnames@2.5.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-button-block@3.0.3(classnames@2.5.1)(react-dom@18.2.0(react@18.2.0))(react-intl@3.12.1(react@18.2.0))(react@18.2.0))(@kitconcept/volto-carousel-block@2.0.0(classnames@2.5.1)(embla-carousel@8.6.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-dsgvo-banner@2.3.2)(@kitconcept/volto-heading-block@2.4.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-highlight-block@4.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-introduction-block@1.0.0)(@kitconcept/volto-logos-block@3.0.0(@eeacms/volto-accordion-block@10.4.6)(@kitconcept/volto-banner-block@1.0.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-bm3-compat@1.0.0-alpha.1(classnames@2.5.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-button-block@3.0.3(classnames@2.5.1)(react-dom@18.2.0(react@18.2.0))(react-intl@3.12.1(react@18.2.0))(react@18.2.0))(@kitconcept/volto-carousel-block@2.0.0(classnames@2.5.1)(embla-carousel@8.6.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-dsgvo-banner@2.3.2)(@kitconcept/volto-heading-block@2.4.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-highlight-block@4.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-introduction-block@1.0.0)(@kitconcept/volto-separator-block@4.1.2(react-dom@18.2.0(react@18.2.0))(react-intl@3.12.1(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5)))(@kitconcept/volto-slider-block@6.3.1(@plone/volto@core+packages+volto)(embla-carousel@8.6.0)(react@18.2.0))(@plonegovbr/volto-social-media@2.0.0-alpha.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5)))(classnames@2.5.1)(embla-carousel@8.6.0)(lodash@4.17.21)(react-dom@18.2.0(react@18.2.0))(react-intl@3.12.1(react@18.2.0))(react-redux@8.1.2(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(redux@4.2.1))(react-router-dom@5.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5)))(@kitconcept/volto-separator-block@4.1.2(react-dom@18.2.0(react@18.2.0))(react-intl@3.12.1(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5)))(@kitconcept/volto-slider-block@6.3.1(@plone/volto@core+packages+volto)(embla-carousel@8.6.0)(react@18.2.0))(@plonegovbr/volto-social-media@2.0.0-alpha.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5)))(classnames@2.5.1)(embla-carousel@8.6.0)(lodash@4.17.21)(react-dom@18.2.0(react@18.2.0))(react-intl@3.12.1(react@18.2.0))(react-redux@8.1.2(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(redux@4.2.1))(react-router-dom@5.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5))' : dependencies: '@dnd-kit/core': 6.0.8(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@dnd-kit/sortable': 7.0.2(@dnd-kit/core@6.0.8(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react@18.2.0) '@dnd-kit/utilities': 3.2.2(react@18.2.0) '@eeacms/volto-accordion-block': 10.4.6 '@kitconcept/volto-banner-block': 1.0.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@kitconcept/volto-bm3-compat': 1.0.0-alpha.1(classnames@2.5.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@kitconcept/volto-button-block': 3.0.3(classnames@2.5.1)(react-dom@18.2.0(react@18.2.0))(react-intl@3.12.1(react@18.2.0))(react@18.2.0) + '@kitconcept/volto-carousel-block': 2.0.0(classnames@2.5.1)(embla-carousel@8.6.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@kitconcept/volto-dsgvo-banner': 2.3.2 '@kitconcept/volto-heading-block': 2.4.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@kitconcept/volto-highlight-block': 4.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@kitconcept/volto-introduction-block': 1.0.0 + '@kitconcept/volto-logos-block': 3.0.0(@eeacms/volto-accordion-block@10.4.6)(@kitconcept/volto-banner-block@1.0.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-bm3-compat@1.0.0-alpha.1(classnames@2.5.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-button-block@3.0.3(classnames@2.5.1)(react-dom@18.2.0(react@18.2.0))(react-intl@3.12.1(react@18.2.0))(react@18.2.0))(@kitconcept/volto-carousel-block@2.0.0(classnames@2.5.1)(embla-carousel@8.6.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-dsgvo-banner@2.3.2)(@kitconcept/volto-heading-block@2.4.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-highlight-block@4.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-introduction-block@1.0.0)(@kitconcept/volto-separator-block@4.1.2(react-dom@18.2.0(react@18.2.0))(react-intl@3.12.1(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5)))(@kitconcept/volto-slider-block@6.3.1(@plone/volto@core+packages+volto)(embla-carousel@8.6.0)(react@18.2.0))(@plonegovbr/volto-social-media@2.0.0-alpha.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5)))(classnames@2.5.1)(embla-carousel@8.6.0)(lodash@4.17.21)(react-dom@18.2.0(react@18.2.0))(react-intl@3.12.1(react@18.2.0))(react-redux@8.1.2(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(redux@4.2.1))(react-router-dom@5.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5)) '@kitconcept/volto-separator-block': 4.1.2(react-dom@18.2.0(react@18.2.0))(react-intl@3.12.1(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5)) '@kitconcept/volto-slider-block': 6.3.1(@plone/volto@core+packages+volto)(embla-carousel@8.6.0)(react@18.2.0) '@plone/components': 3.0.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5)) '@plonegovbr/volto-social-media': 2.0.0-alpha.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5)) classnames: 2.5.1 + embla-carousel-autoplay: 8.6.0(embla-carousel@8.6.0) + embla-carousel-react: 8.6.0(react@18.2.0) lodash: 4.17.21 react: 18.2.0 react-animate-height: 3.2.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -16475,6 +16635,34 @@ snapshots: react-router-dom: 5.2.0(react@18.2.0) uuid: 11.1.0 transitivePeerDependencies: + - embla-carousel + - storybook + + ? '@kitconcept/volto-logos-block@3.0.0(@eeacms/volto-accordion-block@10.4.6)(@kitconcept/volto-banner-block@1.0.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-bm3-compat@1.0.0-alpha.1(classnames@2.5.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-button-block@3.0.3(classnames@2.5.1)(react-dom@18.2.0(react@18.2.0))(react-intl@3.12.1(react@18.2.0))(react@18.2.0))(@kitconcept/volto-carousel-block@2.0.0(classnames@2.5.1)(embla-carousel@8.6.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-dsgvo-banner@2.3.2)(@kitconcept/volto-heading-block@2.4.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-highlight-block@4.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-introduction-block@1.0.0)(@kitconcept/volto-separator-block@4.1.2(react-dom@18.2.0(react@18.2.0))(react-intl@3.12.1(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5)))(@kitconcept/volto-slider-block@6.3.1(@plone/volto@core+packages+volto)(embla-carousel@8.6.0)(react@18.2.0))(@plonegovbr/volto-social-media@2.0.0-alpha.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5)))(classnames@2.5.1)(embla-carousel@8.6.0)(lodash@4.17.21)(react-dom@18.2.0(react@18.2.0))(react-intl@3.12.1(react@18.2.0))(react-redux@8.1.2(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(redux@4.2.1))(react-router-dom@5.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5))' + : dependencies: + '@kitconcept/volto-light-theme': 7.6.0(@eeacms/volto-accordion-block@10.4.6)(@kitconcept/volto-banner-block@1.0.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-bm3-compat@1.0.0-alpha.1(classnames@2.5.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-button-block@3.0.3(classnames@2.5.1)(react-dom@18.2.0(react@18.2.0))(react-intl@3.12.1(react@18.2.0))(react@18.2.0))(@kitconcept/volto-carousel-block@2.0.0(classnames@2.5.1)(embla-carousel@8.6.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-dsgvo-banner@2.3.2)(@kitconcept/volto-heading-block@2.4.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-highlight-block@4.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-introduction-block@1.0.0)(@kitconcept/volto-logos-block@3.0.0(@eeacms/volto-accordion-block@10.4.6)(@kitconcept/volto-banner-block@1.0.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-bm3-compat@1.0.0-alpha.1(classnames@2.5.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-button-block@3.0.3(classnames@2.5.1)(react-dom@18.2.0(react@18.2.0))(react-intl@3.12.1(react@18.2.0))(react@18.2.0))(@kitconcept/volto-carousel-block@2.0.0(classnames@2.5.1)(embla-carousel@8.6.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-dsgvo-banner@2.3.2)(@kitconcept/volto-heading-block@2.4.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-highlight-block@4.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@kitconcept/volto-introduction-block@1.0.0)(@kitconcept/volto-separator-block@4.1.2(react-dom@18.2.0(react@18.2.0))(react-intl@3.12.1(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5)))(@kitconcept/volto-slider-block@6.3.1(@plone/volto@core+packages+volto)(embla-carousel@8.6.0)(react@18.2.0))(@plonegovbr/volto-social-media@2.0.0-alpha.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5)))(classnames@2.5.1)(embla-carousel@8.6.0)(lodash@4.17.21)(react-dom@18.2.0(react@18.2.0))(react-intl@3.12.1(react@18.2.0))(react-redux@8.1.2(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(redux@4.2.1))(react-router-dom@5.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5)))(@kitconcept/volto-separator-block@4.1.2(react-dom@18.2.0(react@18.2.0))(react-intl@3.12.1(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5)))(@kitconcept/volto-slider-block@6.3.1(@plone/volto@core+packages+volto)(embla-carousel@8.6.0)(react@18.2.0))(@plonegovbr/volto-social-media@2.0.0-alpha.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5)))(classnames@2.5.1)(embla-carousel@8.6.0)(lodash@4.17.21)(react-dom@18.2.0(react@18.2.0))(react-intl@3.12.1(react@18.2.0))(react-redux@8.1.2(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(redux@4.2.1))(react-router-dom@5.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5)) + '@plone/components': 3.0.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5)) + classnames: 2.5.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-intl: 3.12.1(react@18.2.0) + transitivePeerDependencies: + - '@eeacms/volto-accordion-block' + - '@kitconcept/volto-banner-block' + - '@kitconcept/volto-bm3-compat' + - '@kitconcept/volto-button-block' + - '@kitconcept/volto-carousel-block' + - '@kitconcept/volto-dsgvo-banner' + - '@kitconcept/volto-heading-block' + - '@kitconcept/volto-highlight-block' + - '@kitconcept/volto-introduction-block' + - '@kitconcept/volto-separator-block' + - '@kitconcept/volto-slider-block' + - '@plonegovbr/volto-social-media' + - embla-carousel + - lodash + - react-redux + - react-router-dom - storybook '@kitconcept/volto-separator-block@4.1.2(react-dom@18.2.0(react@18.2.0))(react-intl@3.12.1(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.2.5))': @@ -22430,20 +22618,36 @@ snapshots: electron-to-chromium@1.5.155: {} + embla-carousel-autoplay@8.5.2(embla-carousel@8.6.0): + dependencies: + embla-carousel: 8.6.0 + embla-carousel-autoplay@8.6.0(embla-carousel@8.6.0): dependencies: embla-carousel: 8.6.0 + embla-carousel-react@8.5.2(react@18.2.0): + dependencies: + embla-carousel: 8.5.2 + embla-carousel-reactive-utils: 8.5.2(embla-carousel@8.5.2) + react: 18.2.0 + embla-carousel-react@8.6.0(react@18.2.0): dependencies: embla-carousel: 8.6.0 embla-carousel-reactive-utils: 8.6.0(embla-carousel@8.6.0) react: 18.2.0 + embla-carousel-reactive-utils@8.5.2(embla-carousel@8.5.2): + dependencies: + embla-carousel: 8.5.2 + embla-carousel-reactive-utils@8.6.0(embla-carousel@8.6.0): dependencies: embla-carousel: 8.6.0 + embla-carousel@8.5.2: {} + embla-carousel@8.6.0: {} emittery@0.7.2: {}