From 3cbcbae0faff121cbd67ce078e11a8197d25d4c2 Mon Sep 17 00:00:00 2001 From: Chris Campbell Date: Thu, 12 May 2022 10:27:01 +1000 Subject: [PATCH 01/13] [SDPA-5904] - Add mobile breadcrumbs (#1183) * SDPA-5904 - Add mobile breadcrumbs * SDPA-5904 - Update mobile breadcrumb icon and truncate mobile breadcrumb text * SDPA-5904 - Add short and long version of mobile text for screenreaders * SDPA-5904 - Add new variable to control mobile breadcrumb padding --- .../Molecules/Breadcrumbs/index.vue | 107 +++++++++++++++--- 1 file changed, 94 insertions(+), 13 deletions(-) diff --git a/packages/components/Molecules/Breadcrumbs/index.vue b/packages/components/Molecules/Breadcrumbs/index.vue index e6e00caca..1ec2ed80a 100644 --- a/packages/components/Molecules/Breadcrumbs/index.vue +++ b/packages/components/Molecules/Breadcrumbs/index.vue @@ -3,9 +3,40 @@
@@ -15,6 +46,7 @@ @@ -34,6 +89,7 @@ export default { $rpl-breadcrumbs-background: rpl-color('white') !default; $rpl-breadcrumbs-border: 1px solid rpl-color('mid_neutral_1') !default; $rpl-breadcrumbs-border-radius: rem(4px) !default; + $rpl-breadcrumbs-padding-mobile: ($rpl-space-3) ($rpl-space * 4) !default; $rpl-breadcrumbs-padding: ($rpl-space-3) ($rpl-space * 5) !default; $rpl-breadcrumbs-link-ruleset: ('xs', 1.4em, 'medium') !default; $rpl-breadcrumbs-link-color: mix(rpl_color('primary'), rpl_color('white'), 93%) !default; @@ -44,12 +100,6 @@ export default { $rpl-breadcrumbs-items-margin: 0 !default; .rpl-breadcrumbs { - display: none; - - @include rpl_breakpoint('s') { - display: block; - } - @include rpl_print_hidden; &__items { @@ -58,19 +108,50 @@ export default { background: $rpl-breadcrumbs-background; border: $rpl-breadcrumbs-border; border-radius: $rpl-breadcrumbs-border-radius; - padding: $rpl-breadcrumbs-padding; + padding: $rpl-breadcrumbs-padding-mobile; margin: $rpl-breadcrumbs-items-margin; @include rpl_dropshadow; + + @include rpl_breakpoint('s') { + padding: $rpl-breadcrumbs-padding; + } } - &__item { - display: inline-block; + // Mobile item + // 1. The designs use 'down' arrow rotated 90 degrees. Note this + // icon is visually different after rotation to the 'left' icon. + &__item--mobile { + @include rpl_breakpoint('s') { + display: none; + } + + .rpl-link__inner { + display: flex; + align-items: center; + } + + svg { + fill: currentColor; + margin-right: rem(5px); + transform: rotate(90deg) scale(0.8); // [1] + } + } + + // Desktop items + &__item--desktop { + display: none; @include rpl_typography_ruleset($rpl-breadcrumbs-text-ruleset); + + @include rpl_breakpoint('s') { + display: inline-block; + } + &:after { content: ' > '; padding: $rpl-breadcrumbs-separator-padding; color: $rpl-breadcrumbs-separator-color; } + &:last-child:after { content: ''; padding: 0; From 97526bd104d3e998dd2a5e3833734bce3f370bec Mon Sep 17 00:00:00 2001 From: Tim Yao <31641325+tim-yao@users.noreply.github.com> Date: Wed, 25 May 2022 19:45:59 +1000 Subject: [PATCH 02/13] [SDPTA-441] Added the e2e workflow for release (#1163) * Added the e2e workflow for release * Remove IE11 due to the incoming EOL Co-authored-by: dylankelly --- .circleci/config.yml | 61 ++++++++++++++++++++++++++++++++++++++++++ .lagoon.yml | 5 ++++ scripts/trigger-e2e.sh | 46 +++++++++++++++++++++++++++++++ 3 files changed, 112 insertions(+) create mode 100644 scripts/trigger-e2e.sh diff --git a/.circleci/config.yml b/.circleci/config.yml index 9005bd8de..5c6866c4e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -321,6 +321,7 @@ workflows: requires: - confirm-release - tag-release + # Publish canary prerelease to NPM for testing on client sites canary-npm-release: when: @@ -342,3 +343,63 @@ workflows: - tag-release: requires: - create-prerelease + + nightwatch: + when: << pipeline.parameters.e2e >> + jobs: + - sdp-test/smoke: + filters: + branches: + only: + - /^release\/.*/ + context: + - e2e-test + - e2e-test-open + be_url: << pipeline.parameters.e2e_be_url >> + fe_url: << pipeline.parameters.e2e_fe_url >> + project: << pipeline.parameters.e2e_project >> + browser: 'chrome' + # Make sure the Backend has passed test first. + - sdp-test/e2e-be: + filters: + branches: + only: + - /^release\/.*/ + context: + - e2e-test + - e2e-test-open + be_url: << pipeline.parameters.e2e_be_url >> + project: << pipeline.parameters.e2e_project >> + browser: 'chrome' + - sdp-test/e2e: + name: sdp-test/e2eChrome + filters: + branches: + only: + - /^release\/.*/ + requires: + - sdp-test/smoke + - sdp-test/e2e-be + context: + - e2e-test + - e2e-test-open + be_url: << pipeline.parameters.e2e_be_url >> + fe_url: << pipeline.parameters.e2e_fe_url >> + project: << pipeline.parameters.e2e_project >> + browser: 'chrome' + - sdp-test/e2e: + name: sdp-test/e2eAndroid + filters: + branches: + only: + - /^release\/.*/ + requires: + - sdp-test/smoke + - sdp-test/e2e-be + context: + - e2e-test + - e2e-test-open + be_url: << pipeline.parameters.e2e_be_url >> + fe_url: << pipeline.parameters.e2e_fe_url >> + project: << pipeline.parameters.e2e_project >> + browser: 'androidChrome' diff --git a/.lagoon.yml b/.lagoon.yml index 059890487..28b881699 100644 --- a/.lagoon.yml +++ b/.lagoon.yml @@ -9,6 +9,11 @@ tasks: . /app/scripts/jira-post-comment.sh $JIRA_ENDPOINT $JIRA_USERNAME $JIRA_PASSWORD $LAGOON_PR_HEAD_BRANCH $LAGOON_ROUTES "$LAGOON_PR_TITLE" fi service: app + - run: + name: Trigger Nightwatch E2E Tests CI + command: |- + . /app/scripts/trigger-e2e.sh + service: app environments: master: diff --git a/scripts/trigger-e2e.sh b/scripts/trigger-e2e.sh new file mode 100644 index 000000000..e0b9dd3da --- /dev/null +++ b/scripts/trigger-e2e.sh @@ -0,0 +1,46 @@ +#!/bin/sh +## +# Trigger CI to run e2e test +# + +# Collect BE and FE test environment url. +# If it's a PR, programmatically determine the URL based on the autogenerated route rather then relying on $LAGOON_ROUTE. +# The reason is CMDB sometimes set develop LAGOON_ROUTE as a project-level variable. +PR_BRANCH_REGEX="pr-" +if [[ $(expr match "$LAGOON_GIT_SAFE_BRANCH" $PR_BRANCH_REGEX) != 0 ]]; then + FE_URL=https://app.${LAGOON_GIT_SAFE_BRANCH}.ripple.sdp2.sdp.vic.gov.au + BRANCH=$LAGOON_PR_HEAD_BRANCH +# else + # TODO: No need to handle as we only trigger on release branch for now. + # $LAGOON_ROUTE will return stroybook route, we need to check $LAGOON_ROUTES to find out the APP route. + # FE_URL=$LAGOON_ROUTE + # BRANCH=$LAGOON_GIT_BRANCH +fi + +# Add basic auth credentials to the url if it's enabled. +if [ $BASIC_AUTH == '1' ]; then + BE_URL=${CONTENT_API_SERVER/https:\/\//https:\/\/$CONTENT_API_AUTH_USER:$CONTENT_API_AUTH_PASS@} + FE_URL=${FE_URL/https:\/\//https:\/\/$CONTENT_API_AUTH_USER:$CONTENT_API_AUTH_PASS@} +else + BE_URL=$CONTENT_API_SERVER +fi + +echo "Triggering end to end testing for $LAGOON_PROJECT..." + +if [ -z $E2E_CI_TOKEN ]; then + echo "Error: No E2E CI token found, end to end is not triggered. Please make sure E2E_CI_TOKEN is set up." +else + # Trigger CircleCI to run the pipeline + curl --location --request POST "https://circleci.com/api/v2/project/github/dpc-sdp/ripple/pipeline" \ + --header "Circle-Token: $E2E_CI_TOKEN" \ + --header 'content-type: application/json' \ + --data-raw '{ + "branch": "'"$BRANCH"'", + "parameters": { + "e2e": true, + "e2e_be_url": "'"$BE_URL"'", + "e2e_fe_url": "'"$FE_URL"'", + "e2e_project": "reference" + } + }' +fi From 7da1aabafc913be336bbe14abff85b3b8378585d Mon Sep 17 00:00:00 2001 From: Alan Date: Tue, 31 May 2022 12:18:54 +1000 Subject: [PATCH 03/13] [1191] Fix spelling error (#1192) Co-authored-by: dylankelly --- packages/components/Molecules/Form/fields/fieldRplslider.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/components/Molecules/Form/fields/fieldRplslider.vue b/packages/components/Molecules/Form/fields/fieldRplslider.vue index d5ca94da8..fcbf6700b 100644 --- a/packages/components/Molecules/Form/fields/fieldRplslider.vue +++ b/packages/components/Molecules/Form/fields/fieldRplslider.vue @@ -17,7 +17,7 @@ From 59cbc40fc1b2dab8b826fded0ccd6c38c6a7c9ea Mon Sep 17 00:00:00 2001 From: dylankelly Date: Tue, 31 May 2022 12:30:30 +1000 Subject: [PATCH 04/13] [SDPA-6203] Await search results before scroll (#1195) --- packages/ripple-nuxt-tide/modules/search/lib/searchmixin.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/ripple-nuxt-tide/modules/search/lib/searchmixin.js b/packages/ripple-nuxt-tide/modules/search/lib/searchmixin.js index 7fcf79a49..d3ae1eb99 100644 --- a/packages/ripple-nuxt-tide/modules/search/lib/searchmixin.js +++ b/packages/ripple-nuxt-tide/modules/search/lib/searchmixin.js @@ -116,9 +116,9 @@ const searchMixin = { } } }, - changed (event) { + async changed (event) { this.pager.initialStep = event - this.getSearchResults(this.$route.query.q, event) + await this.getSearchResults(this.$route.query.q, event) if (this.scrollOnPagerChange) { VueScrollTo.scrollTo(this.scrollToElement, 500, { offset: -150 }) From 824c1ee5b26213f7260d4012325df16a22579541 Mon Sep 17 00:00:00 2001 From: Chris Campbell Date: Tue, 31 May 2022 13:06:44 +1000 Subject: [PATCH 05/13] [SDPA-6112] - Update alt text for vic gov logo (#1198) * SDPA-6112 - Update alt text for vic gov logo * SDPA-6112 - Enable vic gov logo in nuxt config Co-authored-by: dylankelly --- examples/reference/nuxt.config.js | 2 +- packages/components/Organisms/SiteHeader/index.vue | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/reference/nuxt.config.js b/examples/reference/nuxt.config.js index 82952820f..5fdaa3635 100644 --- a/examples/reference/nuxt.config.js +++ b/examples/reference/nuxt.config.js @@ -136,7 +136,7 @@ export default { * See https://www.npmjs.com/package/@dpc-sdp/ripple-nuxt-ui */ ripple: { - viclogo: false, + viclogo: true, viclogoFooter: false }, /* diff --git a/packages/components/Organisms/SiteHeader/index.vue b/packages/components/Organisms/SiteHeader/index.vue index 8509f03f6..90f851ca2 100644 --- a/packages/components/Organisms/SiteHeader/index.vue +++ b/packages/components/Organisms/SiteHeader/index.vue @@ -165,7 +165,7 @@ export default { return { vicLogoPrimary: { image: vicLogoPrimary, - alt: 'vic_logo', + alt: 'Victoria government logo', url: '/' }, menuEl: null, From 4f2c467b20c3433b16355587cf3c2500d5cb4c5f Mon Sep 17 00:00:00 2001 From: edyuenyw <67810118+edyuenyw@users.noreply.github.com> Date: Thu, 2 Jun 2022 10:53:20 +1000 Subject: [PATCH 06/13] [SDPA-5945] IFrame embed media title. (#1194) * [SDPA-5945] IFrame embed media title. * Adds title from embedded media video to iframe. * Adds new title element. --- .../ripple-nuxt-tide/lib/config/markup-plugins.js | 2 ++ .../test/unit/__fixtures__/markup-transpiler.html | 6 +++--- .../__snapshots__/markup-transpiler.test.js.snap | 12 ++++++------ 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/packages/ripple-nuxt-tide/lib/config/markup-plugins.js b/packages/ripple-nuxt-tide/lib/config/markup-plugins.js index 0e1acf1e5..54210232a 100644 --- a/packages/ripple-nuxt-tide/lib/config/markup-plugins.js +++ b/packages/ripple-nuxt-tide/lib/config/markup-plugins.js @@ -141,6 +141,7 @@ const pluginEmbeddedMediaVideo = function () { const height = iframe.attr('height') const width = iframe.attr('width') const src = iframe.attr('src') + const title = element.attr('title') ? element.attr('title') : '' const figcaption = element.find('figcaption') const transcript = figcaption ? figcaption.text() : null const link = element.find('.field--name-field-media-link a') @@ -154,6 +155,7 @@ const pluginEmbeddedMediaVideo = function () { width="${width}" height="${height}" src="${src}" +title="${title}" class="rpl-markup__embedded-video" variant="${data.mediaLink ? 'link' : 'full'}" :display-transcript="true" diff --git a/packages/ripple-nuxt-tide/test/unit/__fixtures__/markup-transpiler.html b/packages/ripple-nuxt-tide/test/unit/__fixtures__/markup-transpiler.html index df37199b2..1b69fc84d 100644 --- a/packages/ripple-nuxt-tide/test/unit/__fixtures__/markup-transpiler.html +++ b/packages/ripple-nuxt-tide/test/unit/__fixtures__/markup-transpiler.html @@ -29,7 +29,7 @@

This is a heading 2

-
+
@@ -45,7 +45,7 @@

This is a heading 2

Some video caption text <&'"
-
+
@@ -61,7 +61,7 @@

This is a heading 2

Some video caption text <&'"
-
+
diff --git a/packages/ripple-nuxt-tide/test/unit/__snapshots__/markup-transpiler.test.js.snap b/packages/ripple-nuxt-tide/test/unit/__snapshots__/markup-transpiler.test.js.snap index 9f2242b23..6e182bfc8 100644 --- a/packages/ripple-nuxt-tide/test/unit/__snapshots__/markup-transpiler.test.js.snap +++ b/packages/ripple-nuxt-tide/test/unit/__snapshots__/markup-transpiler.test.js.snap @@ -31,11 +31,11 @@ exports[`Markup transpiler should able transpile html into vue template with plu
- + - + - +
@@ -107,7 +107,7 @@ exports[`Markup transpiler should get same HTML with no plugins 1`] = ` -
+
@@ -123,7 +123,7 @@ exports[`Markup transpiler should get same HTML with no plugins 1`] = `
Some video caption text <&'"
-
+
@@ -139,7 +139,7 @@ exports[`Markup transpiler should get same HTML with no plugins 1`] = `
Some video caption text <&'"
-
+
From 6b188d4711c40399c8bfa12fbeb23d1650ddd8a8 Mon Sep 17 00:00:00 2001 From: dylankelly Date: Thu, 2 Jun 2022 12:55:31 +1000 Subject: [PATCH 07/13] [SW-1615] Ignore site id when setting breadcrumbs (#1200) --- .../ripple-nuxt-tide/lib/core/breadcrumbs.js | 4 ++- .../test/unit/breadcrumbs.test.js | 26 +++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/packages/ripple-nuxt-tide/lib/core/breadcrumbs.js b/packages/ripple-nuxt-tide/lib/core/breadcrumbs.js index 44f9911c4..88c44c3e6 100644 --- a/packages/ripple-nuxt-tide/lib/core/breadcrumbs.js +++ b/packages/ripple-nuxt-tide/lib/core/breadcrumbs.js @@ -1,8 +1,10 @@ // Private helpers +const siteMatch = /\/site-(\d+)/ function getActivePath (branch, path) { for (let i = 0; i < branch.length; i++) { const item = branch[i] - if (item.url === path) { + // ignore site id prefix when matching active path + if (item.url.replace(siteMatch, '') === path.replace(siteMatch, '')) { return [{ text: item.text, url: item.url diff --git a/packages/ripple-nuxt-tide/test/unit/breadcrumbs.test.js b/packages/ripple-nuxt-tide/test/unit/breadcrumbs.test.js index 1f51c5da5..04e052824 100644 --- a/packages/ripple-nuxt-tide/test/unit/breadcrumbs.test.js +++ b/packages/ripple-nuxt-tide/test/unit/breadcrumbs.test.js @@ -128,4 +128,30 @@ describe('breadcrumbs', () => { const result = breadcrumbs('/null-menu', 'Null Menu', null) expect(result).toEqual(expectedResult) }) + + test('should ignore site id when evaluating activepath', async () => { + const expectedResult = [ + { + text: 'Home', + url: '/' + }, + { + text: 'Alpha 1', + url: '/alpha-1' + }, + { + text: 'Alpha 2', + url: '/alpha-2' + }, + { + text: 'Alpha 3', + url: '/site-123/alpha-3' + } + ] + const testMenu = JSON.parse(JSON.stringify(nestedMenu)) + testMenu[0].children[0].children[0].url = '/site-123/alpha-3' + + const result = breadcrumbs('/alpha-3', 'Alpha 3', testMenu) + expect(result).toEqual(expectedResult) + }) }) From a3167b5e42feaba9bce0fcd70fd03b0b93f8f3af Mon Sep 17 00:00:00 2001 From: Chris Campbell Date: Thu, 2 Jun 2022 15:23:30 +1000 Subject: [PATCH 08/13] SDPA-6115 - Add aria-atomic attribute to rpl-form-alert component (#1199) --- packages/components/Molecules/Form/formAlert.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/components/Molecules/Form/formAlert.vue b/packages/components/Molecules/Form/formAlert.vue index d46c9cda6..5475326dc 100644 --- a/packages/components/Molecules/Form/formAlert.vue +++ b/packages/components/Molecules/Form/formAlert.vue @@ -1,5 +1,5 @@ @@ -49,6 +32,7 @@ import RplMarkup from '@dpc-sdp/ripple-markup' import Vue from 'vue' import { getAnchorLinkName } from '@dpc-sdp/ripple-global/utils/helpers.js' import rtl from '@dpc-sdp/ripple-global/mixins/rtl.js' +import { RplAccordionEventBus } from './index.js' export default { name: 'RplAccordion', @@ -74,6 +58,15 @@ export default { for (const index in this.accordions) { Vue.set(this.itemOpen, index, false) } + RplAccordionEventBus.$on('open-panel', (item) => { + // AnchorLinks can't narrow down to a single accordion, so check AnchorLinkName + if (item.url === `#${this.titleId}`) { + // Only open if closed + if (!this.accordionIsOpen(item.index)) { + this.accordionClick(item.index) + } + } + }) }, computed: { titleId () { @@ -88,6 +81,9 @@ export default { } } return true + }, + isNumbered () { + return this.type === 'numbered' } }, methods: { @@ -175,243 +171,5 @@ export default { diff --git a/packages/components/Organisms/Accordion/accordion.scss b/packages/components/Organisms/Accordion/accordion.scss new file mode 100644 index 000000000..dda5b0612 --- /dev/null +++ b/packages/components/Organisms/Accordion/accordion.scss @@ -0,0 +1,238 @@ +@import "~@dpc-sdp/ripple-global/scss/settings"; +@import "~@dpc-sdp/ripple-global/scss/tools"; + +$rpl-accordion-title-ruleset: ( + 'xs': ('s', 1.5em, 'bold'), + 's': ('l', 1.2em, 'bold') +) !default; +$rpl-accordion-content-ruleset: ( + 'xs': ('xs', 1.4em, 'regular'), + 's': ('s', 1.5em, 'regular') +) !default; +$rpl-accordion-background-color: rpl_color('white') !default; +$rpl-accordion-border-image: rpl_gradient('primary_gradient_0') !default; +$rpl-accordion-border: 1px solid rpl_color('mid_neutral_1') !default; +$rpl-accordion-button-padding: ( + 'xs': ($rpl-space * 4) $rpl-component-padding-xs, + 's': $rpl-component-padding-s, + 'm': ($rpl-space * 7) ($rpl-space * 9) +) !default; +$rpl-accordion-text-padding: ( + 'xs': 0 $rpl-component-padding-xs 0 0, + 's': 0 $rpl-component-padding-s 0 0, + 'm': 0 ($rpl-space * 9) 0 0 +) !default; +$rpl-accordion-content-padding: ( + 'xs': 0 $rpl-component-padding-xs, + 's': 0 $rpl-component-padding-s, + 'm': 0 ($rpl-space * 9) +) !default; +$rpl-accordion-button-text-color: rpl_color('extra_dark_neutral') !default; +$rpl-accordion-button-text-color-hover: rpl_color('primary') !default; +$rpl-accordion-button-text-color-expanded: rpl_color('secondary') !default; +$rpl-accordion-button-number-text-color: rpl_color('dark_neutral_1') !default; +$rpl-accordion-button-number-margin: 0 ($rpl-space * 5) 0 0 !default; +$rpl-accordion-button-number-margin-rtl: 0 0 0 ($rpl-space * 5) !default; +$rpl-accordion-content-text-color: rpl_color('extra_dark_neutral') !default; +$rpl-accordion-content-inner-padding: 0 0 rem(57px) !default; +$rpl-accordion-collapse-padding: rem(10px) 0 !default; +$rpl-accordion-collapse-color: rpl_color('primary') !default; + +.rpl-accordion { + &__collapse { + text-align: right; + padding: $rpl-accordion-collapse-padding; + } + + &__collapse-btn { + text-decoration: none; + color: $rpl-accordion-collapse-color; + background: none; + border: none; + @include rpl_typography_font('xs', 1em, 'bold'); + + &:hover { + text-decoration: underline; + } + } + + &__title-top { + margin-top: 0; + // TODO: Lines below should be removed on merging of SDPA-1810. + @include rpl_mobile_padding; + @include rpl_breakpoint(m) { + padding-left: 0; + padding-right: 0; + } + } + + &__list { + margin: 0; + padding: 0; + background-color: $rpl-accordion-background-color; + + @media print { + margin: $rpl-space-4 0; + } + } + + &__list-item { + list-style: none; + position: relative; + border: $rpl-accordion-border; + border-bottom: 0; + + &::before { + content: ''; + display: inline-block; + height: 100%; + position: absolute; + top: 0; + left: 0; + width: 0; + background-image: $rpl-accordion-border-image; + transition: width .25s; + + @media print { + display: none; + } + } + + &--expanded { + &::before { + width: rem(8px); + } + } + + &:last-child { + border-bottom: $rpl-accordion-border; + } + } + + &__button { + @include rpl_typography_ruleset($rpl-accordion-title-ruleset); + @include rpl_text_color($rpl-accordion-button-text-color); + background: transparent; + border: 0; + width: 100%; + box-sizing: border-box; + text-align: left; + display: flex; + align-items: center; + position: relative; + z-index: 1; + cursor: pointer; + @each $bp, $val in $rpl-accordion-button-padding { + @include rpl_breakpoint($bp) { + padding: $val; + } + } + + @media print { + padding: $rpl-space-3 ($rpl-space * 5); + } + + &:hover, + &:focus { + @include rpl_text_color($rpl-accordion-button-text-color-hover); + } + + &--expanded { + @include rpl_text_color($rpl-accordion-button-text-color-expanded); + } + } + + &__button-text { + width: 100%; + box-sizing: border-box; + @each $bp, $val in $rpl-accordion-text-padding { + @include rpl_breakpoint($bp) { + padding: $val; + } + } + &--rtl { + text-align: right; + } + } + + &__title-number { + @include rpl_text_color($rpl-accordion-button-number-text-color); + margin: $rpl-accordion-button-number-margin; + } + + &__title { + margin: 0; + } + + &__content { + @include rpl_typography_ruleset($rpl-accordion-content-ruleset); + @include rpl_text_color($rpl-accordion-content-text-color); + box-sizing: border-box; + // Firefox has issue to render some iframe inside container which has display:none + // https://bugzilla.mozilla.org/show_bug.cgi?id=941146 + visibility: hidden; + overflow:auto; + height: 0; + transition: height .5s, visibility .5s; + + @each $bp, $val in $rpl-accordion-content-padding { + @include rpl_breakpoint($bp) { + padding: $val; + } + } + + @media print { + display: block !important; + padding: 0 ($rpl-space * 5); + visibility: visible; + height: auto; + } + } + + &__content-inner { + padding: $rpl-accordion-content-inner-padding; + + @media print { + display: block !important; + padding: 0 0 ($rpl-space * 5); + } + } + + &__icon { + margin-left: auto; + transition: transform .25s; + + @media print { + fill: rpl-color('black'); + } + + &--expanded { + transform: rotate(-180deg); + + @media print { + transform: rotate(0deg); + } + } + } + + &--rtl { + .rpl-accordion { + &__icon { + margin-left: 0; + margin-right: auto; + } + + &__list-item { + &::before { + left: auto; + right: 0; + } + } + + &__title-number { + margin: $rpl-accordion-button-number-margin-rtl; + } + } + + } +} diff --git a/packages/components/Organisms/Accordion/index.js b/packages/components/Organisms/Accordion/index.js index f69963aff..ac7b53534 100644 --- a/packages/components/Organisms/Accordion/index.js +++ b/packages/components/Organisms/Accordion/index.js @@ -1,4 +1,9 @@ +import Vue from 'vue' import RplAccordion from './Accordion.vue' +// Event bus for handling external open trigger +const RplAccordionEventBus = new Vue() +export { RplAccordionEventBus } export { RplAccordion } + export default RplAccordion diff --git a/packages/ripple-nuxt-tide/lib/core/anchorlinks.js b/packages/ripple-nuxt-tide/lib/core/anchorlinks.js index e451317a6..a22c7329d 100644 --- a/packages/ripple-nuxt-tide/lib/core/anchorlinks.js +++ b/packages/ripple-nuxt-tide/lib/core/anchorlinks.js @@ -46,7 +46,7 @@ const anchorUtils = { headings.push({ indexStart: match.index, text: match[0].replace(/<.+?>/gi, ''), - type: match[0].substr(1, 2) + type: match[0].substring(1, 3) }) } match = reg.exec(html) diff --git a/packages/ripple-nuxt-tide/lib/pages/Tide.vue b/packages/ripple-nuxt-tide/lib/pages/Tide.vue index c3093da6f..3c7723a56 100644 --- a/packages/ripple-nuxt-tide/lib/pages/Tide.vue +++ b/packages/ripple-nuxt-tide/lib/pages/Tide.vue @@ -194,7 +194,8 @@ export default { case 'rpl-markup': if (component.data.html) { let showSubHeading = false - if (this.page.field_node_display_headings && this.page.field_node_display_headings === 'showH2AndH3') { + // field_node_display_headings == 'showH2AndH3' | 'showH2AndH3AndAccordionTitle' + if (this.page.field_node_display_headings && this.page.field_node_display_headings.indexOf('showH2AndH3') !== -1) { showSubHeading = true } anchors.push(...anchorUtils.getAnchorLinks(component.data.html, showSubHeading)) @@ -202,7 +203,26 @@ export default { break case 'rpl-accordion': if (component.data.title) { - anchors.push({ text: component.data.title, url: `#${getAnchorLinkName(component.data.title)}` }) + // Add title of accordion set to anchors collection + const url = `#${getAnchorLinkName(component.data.title)}` + anchors.push({ + text: component.data.title, + url: url, + type: 'accordion' + }) + + // Add accordion triggers to anchors collection + // field_node_display_headings == 'showH2AndAccordionTitle' | 'showH2AndH3AndAccordionTitle' + if (this.page.field_node_display_headings && this.page.field_node_display_headings.indexOf('AccordionTitle') !== -1) { + component.data.accordions.map((accordion, i) => { + anchors.push({ + text: accordion.title, + url: url, + type: 'accordion', + index: i + 1 // pre-render encode (0 index is falsy) + }) + }) + } } break } From 0e093289af75ae9fa54e34ca90b69ed14cd510ce Mon Sep 17 00:00:00 2001 From: dylankelly Date: Tue, 14 Jun 2022 11:14:47 +1000 Subject: [PATCH 12/13] [SDPA-6254] Content collection simplified sort (#1203) * Packaging up a number of content collection fixes. This includes: [INTCONTRIB-187] Added check for schema property to show/hide count in exposed filters select lists. [INTCONTRIB-188] Fixed internal Content Collection sort. And fixes relating to "Add new extended content collection widget". * Set test env variables (REVERT THIS LATER) * [SDPA-6254] Adds simplified sort rules * Revert "Set test env variables (REVERT THIS LATER)" This reverts commit e347420af48b4e8d8c3fa4c0f6c6ad97dec5c75d. * adds multidimensional sort for news * add title and description as seperate fields * remove custom sort if has search term Co-authored-by: Alan --- .../reference/tide/tide.content-collection.js | 15 +++- .../components/ContentCollection.vue | 36 ++++++--- .../landing-page/lib/content-collection.js | 76 +++++++++++++++---- .../modules/landing-page/tide.config.js | 9 +++ .../modules/landing-page/tide.middleware.js | 6 +- 5 files changed, 117 insertions(+), 25 deletions(-) diff --git a/examples/reference/tide/tide.content-collection.js b/examples/reference/tide/tide.content-collection.js index 944ce45a5..d3ccddf25 100644 --- a/examples/reference/tide/tide.content-collection.js +++ b/examples/reference/tide/tide.content-collection.js @@ -1,13 +1,26 @@ import ContentCollection from '@dpc-sdp/ripple-nuxt-tide/modules/landing-page/lib/content-collection' export default class CustomContentCollection extends ContentCollection { + // eslint-disable-next-line no-useless-constructor constructor (configuration, searchEndpoint, environment) { super(configuration, searchEndpoint, environment) - console.log('Running custom content collection constructor') } // Overrides the default and adds custom to the start getTitle () { return this.config.title } + + getSimpleDSLSort (state) { + if (state.q && state.q.length > 0) { + return [] + } + const contentTypes = this.getSimpleDSLContentTypes() + // sort news content type by the news item date + if (contentTypes.type.includes('news')) { + return [{ field_news_date: 'desc' }, { created: 'desc' }] + } + // All other items sorted by created date + return [{ created: 'desc' }] + } } diff --git a/packages/ripple-nuxt-tide/modules/landing-page/components/ContentCollection.vue b/packages/ripple-nuxt-tide/modules/landing-page/components/ContentCollection.vue index 925818556..96b27f0fe 100644 --- a/packages/ripple-nuxt-tide/modules/landing-page/components/ContentCollection.vue +++ b/packages/ripple-nuxt-tide/modules/landing-page/components/ContentCollection.vue @@ -4,7 +4,7 @@

{{ title }}

-

{{ description }}

+ @@ -83,6 +83,7 @@ import { RplForm } from '@dpc-sdp/ripple-form' import { RplCol } from '@dpc-sdp/ripple-grid' import provideChildCols from '@dpc-sdp/ripple-global/mixins/ProvideChildCols' import RplPagination from '@dpc-sdp/ripple-pagination' +import RplMarkup from '@dpc-sdp/ripple-markup' import { RplSearchResultsLayout, RplSearchResult } from '@dpc-sdp/ripple-search' import { RplCardPromo } from '@dpc-sdp/ripple-card' import { RplDivider } from '@dpc-sdp/ripple-global' @@ -98,12 +99,15 @@ export default { RplSearchResultsLayout, RplSearchResult, RplCardPromo, - RplPagination + RplPagination, + RplMarkup }, props: { schema: Object, environment: Object, preloadSearchResponse: Object, + description: String, + title: String, sidebar: { type: Boolean, default: false @@ -117,7 +121,6 @@ export default { defaultState: dataManager.getDefaultState(), state: dataManager.getDefaultState(), results: [], - resultTotal: null, resultCount: null, resultsLoading: false, error: null, @@ -135,11 +138,11 @@ export default { } }, computed: { - title () { - return this.dataManager.getTitle() + computedTitle () { + return this.title || this.dataManager.getTitle() }, - description () { - return this.dataManager.getDescription() + computedDescription () { + return this.description || this.dataManager.getDescription() }, cta () { return this.dataManager.getCTA() @@ -188,6 +191,13 @@ export default { searchEndpoint (dsl) { return this.$tideSearchApi.searchByPost(dsl) }, + resultTotal (esTotal) { + let total = 0 + if (esTotal) { + total = (typeof esTotal === 'object') ? esTotal.value : esTotal + } + return total + }, async getResults () { this.resultsLoading = true this.announcerText = '' @@ -195,7 +205,7 @@ export default { if (response) { this.error = null this.updateInterfaceFromSearchResponse(response) - this.announcerText = response.total > 0 ? this.resultCount : this.noResultsText + this.announcerText = this.resultTotal(response.total) > 0 ? this.resultCount : this.noResultsText } else { this.error = { message: this.errorText } this.announcerText = this.errorText @@ -226,14 +236,15 @@ export default { }, updateInterfaceFromSearchResponse (response) { this.results = response.hits - this.resultCount = this.dataManager.getProcessedResultsCount(this.state, response.total) + const responseTotal = this.resultTotal(response.total) + this.resultCount = this.dataManager.getProcessedResultsCount(this.state, responseTotal) if (this.exposedFilterFormData && response.aggregations) { this.dataManager.updateFiltersFromAggregation(response.aggregations, this.exposedFilterFormData, this.state, (field, isDisabled) => { Vue.set(field, 'disabled', isDisabled) }) } if (this.paginationData) { - this.paginationData.totalSteps = this.dataManager.getPaginationTotalSteps(this.state, response.total) + this.paginationData.totalSteps = this.dataManager.getPaginationTotalSteps(this.state, responseTotal) } }, syncTo (from, to, allowed) { @@ -368,6 +379,11 @@ $app-content-collection-link-border-radius: 0 0 rem(4px) 0 !default; } } + &__description { + margin-top: $rpl-space-4; + margin-bottom: $rpl-space-4; + } + &__heading { @include rpl_typography('heading_l'); margin: 0; diff --git a/packages/ripple-nuxt-tide/modules/landing-page/lib/content-collection.js b/packages/ripple-nuxt-tide/modules/landing-page/lib/content-collection.js index 80b936974..fb7e25f3e 100644 --- a/packages/ripple-nuxt-tide/modules/landing-page/lib/content-collection.js +++ b/packages/ripple-nuxt-tide/modules/landing-page/lib/content-collection.js @@ -37,6 +37,7 @@ module.exports = class ContentCollection { ExposedFilterKeywordDefaultFields: ['title', 'body', 'summary_processed', 'field_landing_page_summary', 'field_paragraph_summary', 'field_page_intro_text', 'field_paragraph_body'], ExposedFilterAggregationOrder: 'asc', ExposedFilterAggregationSize: 30, + DisplayResultComponentType: 'card', DisplayResultComponentCardStyle: 'noImage', DisplayResultComponentColumns: cardColsSetting, DisplayPaginationComponentColumns: cardColsSetting, @@ -230,7 +231,7 @@ module.exports = class ContentCollection { } getDisplayResultComponentType () { - return this.config?.interface?.display?.resultComponent?.type + return this.config?.interface?.display?.resultComponent?.type || this.getDefault('DisplayResultComponentType') } getDisplayPagination () { @@ -264,7 +265,6 @@ module.exports = class ContentCollection { returnName = 'rpl-search-result' break case 'card': - default: returnName = 'rpl-card-promo' break } @@ -541,12 +541,18 @@ module.exports = class ContentCollection { getSimpleDSLSort (state) { let filters = [] let sortValue = null - const stateValue = this.getStateValue(state, 'ExposedControlSortModel') - if (stateValue) { - sortValue = this.getFieldValueFromId(stateValue, this.getExposedSortValues()) - } else { - sortValue = this.getInternalSort() + let internalSort = this.getInternalSort() + let displaySort = this.getDisplaySort() + + if (displaySort) { + const stateValue = this.getStateValue(state, 'ExposedControlSortModel') + if (stateValue) { + sortValue = this.getFieldValueFromId(stateValue, this.getExposedSortValues()) + } + } else if (internalSort) { + sortValue = internalSort } + if (sortValue) { filters = sortValue.map(item => ({ [item.field]: item.direction })) } @@ -704,13 +710,56 @@ module.exports = class ContentCollection { switch (schemaField.type) { case 'basic': const field = this.cloneObject(schemaField.options) - field.styleClasses = schemaField.additionalClasses + field.styleClasses = this.getExposedFilterFieldClass(schemaField) returnFilterField = field break } return returnFilterField } + getExposedFilterFieldClass (schemaField) { + let returnClasses = [] + if (schemaField.additionalClasses) { + returnClasses = returnClasses.concat(schemaField.additionalClasses) + } + if (this.config.interface.filters?.defaultStyling) { + const filterCount = this.config.interface.filters.fields.length + let suffix = '' + if (this.envConfig?.sidebar) { + suffix = (filterCount === 1) ? 'full' : '2' + } else { + switch (filterCount) { + case 1: + case 2: + suffix = '2' + break + case 4: + suffix = '4' + break + default: + suffix = '3' + break + } + } + returnClasses.push(`app-content-collection__form-col-${suffix}`) + } + return returnClasses + } + + getExposedFilterFromModelName (model) { + let returnFilter = null + const filters = this.config?.interface?.filters?.fields + if (filters) { + for (let i = 0; i < filters.length; i++) { + if (filters[i].options.model === model) { + returnFilter = filters[i] + break + } + } + } + return returnFilter + } + getExposedFilterSubmissionGroup () { let returnSubmissionGroup = null const fields = [] @@ -940,7 +989,6 @@ module.exports = class ContentCollection { } break case 'card': - default: const style = this.getDisplayResultComponent()?.style mappedResult = { title: _source.title?.[0], @@ -963,7 +1011,8 @@ module.exports = class ContentCollection { formData.schema.groups.forEach(group => { group.fields.forEach(field => { if (field.model === model) { - let values = this.getAggregatedFilterValues(aggregations[model].buckets, state[model]) + let dataField = this.getExposedFilterFromModelName(model) + let values = this.getAggregatedFilterValues(aggregations[model].buckets, state[model], dataField) field.values = values const disableField = (values.length === 0) disableFieldCallback(field, disableField) @@ -973,18 +1022,19 @@ module.exports = class ContentCollection { }) } - getAggregatedFilterValues (buckets, stateValue) { + getAggregatedFilterValues (buckets, stateValue, dataField) { let returnValues = [] + let hideCount = (dataField['elasticsearch-aggregation-show-count'] === false) if (buckets.length > 0) { // Has Aggregations returnValues = buckets.map(({ key, doc_count: count }) => { - return { id: key, name: `${key} (${count})` } + return hideCount ? { id: key, name: key } : { id: key, name: `${key} (${count})` } }) } else { // No result aggregations - return state value if (stateValue && Array.isArray(stateValue)) { returnValues = stateValue.map(item => { - return { id: item, name: `${item} (0)` } + return hideCount ? { id: item, name: item } : { id: item, name: `${item} (0)` } }) } } diff --git a/packages/ripple-nuxt-tide/modules/landing-page/tide.config.js b/packages/ripple-nuxt-tide/modules/landing-page/tide.config.js index c9e24f9c2..4237f52e2 100644 --- a/packages/ripple-nuxt-tide/modules/landing-page/tide.config.js +++ b/packages/ripple-nuxt-tide/modules/landing-page/tide.config.js @@ -463,6 +463,15 @@ module.exports = { } }, + 'paragraph--content_collection_enhanced': { + component: 'content-collection', + props: { + 'title': 'field_cc_enhanced_title', + 'description': ['field_cc_enhanced_description', 'processed'], + 'schema': 'field_content_collection_config' + } + }, + 'paragraph--form_embed_openforms': { component: 'tide-open-form', props: { diff --git a/packages/ripple-nuxt-tide/modules/landing-page/tide.middleware.js b/packages/ripple-nuxt-tide/modules/landing-page/tide.middleware.js index fe1b2acc1..b3703191c 100644 --- a/packages/ripple-nuxt-tide/modules/landing-page/tide.middleware.js +++ b/packages/ripple-nuxt-tide/modules/landing-page/tide.middleware.js @@ -77,7 +77,11 @@ export default { const collection = contentCollections[i] collection.data.environment = environment if (collection.data.schema) { - const dataManager = new context.app.$tideContentCollection(collection.data.schema, (dsl) => { + const dataManager = new context.app.$tideContentCollection({ + ...collection.data.schema, + title: collection.data.title, + description: collection.data.description + }, (dsl) => { return context.app.$tideSearchApi.searchByPost(dsl) }, environment) const state = dataManager.getDefaultState() From 31502545c253db3dffb9d0a357b79c4b68970665 Mon Sep 17 00:00:00 2001 From: Dylan Kelly Date: Tue, 14 Jun 2022 11:26:52 +1000 Subject: [PATCH 13/13] Release v1.30.0 --- examples/basic-examples/package.json | 6 +- examples/reference/package.json | 8 +- examples/vue-example-app/package.json | 12 +-- lerna.json | 2 +- packages/components/Atoms/Button/package.json | 6 +- packages/components/Atoms/Global/package.json | 2 +- packages/components/Atoms/Grid/package.json | 2 +- packages/components/Atoms/Icon/package.json | 4 +- packages/components/Atoms/Link/package.json | 6 +- .../components/Atoms/MetaTag/package.json | 6 +- .../Atoms/ResponsiveImg/package.json | 4 +- .../components/Molecules/Alert/package.json | 8 +- .../Molecules/AnchorLinks/package.json | 6 +- .../Molecules/Breadcrumbs/package.json | 6 +- .../components/Molecules/Card/package.json | 8 +- .../components/Molecules/Contact/package.json | 6 +- .../Molecules/DataTable/package.json | 4 +- .../Molecules/DescriptionList/package.json | 4 +- .../Molecules/DocumentLink/package.json | 6 +- .../Molecules/EmbeddedVideo/package.json | 8 +- .../components/Molecules/Figure/package.json | 4 +- .../components/Molecules/Form/package.json | 6 +- .../components/Molecules/Layout/package.json | 10 +- .../components/Molecules/List/package.json | 8 +- .../Molecules/ListGroup/package.json | 4 +- .../Molecules/Pagination/package.json | 6 +- .../Molecules/PrintThis/package.json | 6 +- .../PublishDateAndAuthor/package.json | 4 +- .../Molecules/RelatedLinks/package.json | 6 +- .../components/Molecules/Search/package.json | 16 +-- .../Molecules/ShareThis/package.json | 6 +- .../components/Molecules/Sitemap/package.json | 6 +- .../Molecules/Statisticsgrid/package.json | 6 +- .../components/Molecules/Tabs/package.json | 6 +- .../Molecules/Timeline/package.json | 6 +- .../Molecules/WhatsNext/package.json | 6 +- .../Organisms/Accordion/package.json | 8 +- .../Organisms/CallToAction/package.json | 6 +- .../Organisms/CampaignPrimary/package.json | 6 +- .../Organisms/CampaignSecondary/package.json | 8 +- .../components/Organisms/Event/package.json | 8 +- .../components/Organisms/Grants/package.json | 12 +-- .../Organisms/HeroBanner/package.json | 10 +- .../Organisms/ImageGallery/package.json | 6 +- .../Organisms/LinkTiles/package.json | 6 +- .../components/Organisms/Markup/package.json | 12 +-- .../components/Organisms/News/package.json | 8 +- .../components/Organisms/Profile/package.json | 6 +- .../Organisms/Publication/package.json | 18 ++-- .../Organisms/SiteFooter/package.json | 8 +- .../Organisms/SiteHeader/package.json | 12 +-- .../SiteSectionNavigation/package.json | 8 +- .../Organisms/UpdatedDate/package.json | 4 +- packages/create-ripple-app/package.json | 2 +- packages/ripple-data-vic-api/package.json | 18 ++-- packages/ripple-nuxt-tide/package.json | 98 ++++++++--------- packages/ripple-nuxt-ui/package.json | 6 +- packages/ripple-test-tools/package.json | 2 +- packages/ripple-tide-search-api/package.json | 2 +- src/package.json | 100 +++++++++--------- 60 files changed, 297 insertions(+), 297 deletions(-) diff --git a/examples/basic-examples/package.json b/examples/basic-examples/package.json index 7804d73a7..27ea46d72 100644 --- a/examples/basic-examples/package.json +++ b/examples/basic-examples/package.json @@ -1,6 +1,6 @@ { "name": "basic-examples", - "version": "1.29.3", + "version": "1.30.0", "description": "Example site for showing how to add custom work", "private": true, "scripts": { @@ -21,7 +21,7 @@ "start:build": "nuxt build --modern=client && nuxt start --modern=client" }, "dependencies": { - "@dpc-sdp/ripple-nuxt-tide": "1.29.3", + "@dpc-sdp/ripple-nuxt-tide": "1.30.0", "dotenv": "^5.0.1", "nuxt": "2.15.2", "run-script-os": "^1.1.3" @@ -34,7 +34,7 @@ "@babel/plugin-transform-runtime": "^7.12.13", "@babel/preset-env": "^7.12.13", "@babel/runtime": "^7.12.13", - "@dpc-sdp/ripple-test-tools": "1.29.3", + "@dpc-sdp/ripple-test-tools": "1.30.0", "babel-core": "^7.0.0-bridge.0", "babel-jest": "^24.8.0", "babel-plugin-dynamic-import-node": "^2.3.3", diff --git a/examples/reference/package.json b/examples/reference/package.json index d933a1a10..53ff919d9 100644 --- a/examples/reference/package.json +++ b/examples/reference/package.json @@ -1,6 +1,6 @@ { "name": "reference", - "version": "1.29.3", + "version": "1.30.0", "description": "Reference nuxt site using Ripple front end and connecting to Tide backend", "private": true, "scripts": { @@ -20,8 +20,8 @@ "start:build": "nuxt build --modern=client && nuxt start --modern=client" }, "dependencies": { - "@dpc-sdp/ripple-data-vic-api": "1.29.3", - "@dpc-sdp/ripple-nuxt-tide": "1.29.3", + "@dpc-sdp/ripple-data-vic-api": "1.30.0", + "@dpc-sdp/ripple-nuxt-tide": "1.30.0", "@nuxtjs/gtm": "^2.4.0", "@nuxtjs/robots": "^2.0.0", "dotenv": "^5.0.1", @@ -31,7 +31,7 @@ "devDependencies": { "@babel/eslint-parser": "^7.12.13", "@babel/eslint-plugin": "^7.12.13", - "@dpc-sdp/ripple-test-tools": "1.29.3", + "@dpc-sdp/ripple-test-tools": "1.30.0", "babel-plugin-lodash": "^3.3.2", "cross-env": "^7.0.3", "eslint": "^7.19.0", diff --git a/examples/vue-example-app/package.json b/examples/vue-example-app/package.json index 14bc2fb85..a3efc8a3b 100644 --- a/examples/vue-example-app/package.json +++ b/examples/vue-example-app/package.json @@ -1,6 +1,6 @@ { "name": "ripple-app", - "version": "1.29.3", + "version": "1.30.0", "description": "Example Vue.js app(Not Nuxt.js) for showing how to use Ripple", "private": true, "scripts": { @@ -14,17 +14,17 @@ "test:dev": "cross-env NODE_ENV=test start-server-and-test serve http://localhost:3000 cy:open" }, "dependencies": { - "@dpc-sdp/ripple-accordion": "1.29.3", - "@dpc-sdp/ripple-button": "1.29.3", - "@dpc-sdp/ripple-card": "1.29.3", - "@dpc-sdp/ripple-markup": "1.29.3", + "@dpc-sdp/ripple-accordion": "1.30.0", + "@dpc-sdp/ripple-button": "1.30.0", + "@dpc-sdp/ripple-card": "1.30.0", + "@dpc-sdp/ripple-markup": "1.30.0", "core-js": "^3.8.1", "vue": "^2.6.12" }, "devDependencies": { "@babel/eslint-parser": "^7.12.13", "@babel/eslint-plugin": "^7.12.13", - "@dpc-sdp/ripple-test-tools": "1.29.3", + "@dpc-sdp/ripple-test-tools": "1.30.0", "@vue/babel-preset-app": "^4.5.11", "@vue/cli-plugin-babel": "^4.5.11", "@vue/cli-plugin-eslint": "^4.5.11", diff --git a/lerna.json b/lerna.json index 12a45dea5..94d621fe5 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "1.29.3", + "version": "1.30.0", "exact": true, "npmClient": "yarn", "useWorkspaces": true, diff --git a/packages/components/Atoms/Button/package.json b/packages/components/Atoms/Button/package.json index e29d1f0f7..7c942d38f 100644 --- a/packages/components/Atoms/Button/package.json +++ b/packages/components/Atoms/Button/package.json @@ -1,6 +1,6 @@ { "name": "@dpc-sdp/ripple-button", - "version": "1.29.3", + "version": "1.30.0", "description": "A button themed element. Will be a `