@designcrowd/library.brand-page 6.1.7 → 6.1.8-ast-header
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/src/{CreatedOnBrandCrowd-de-de-Dh3Paq4X.js → CreatedOnBrandCrowd-de-de-CmXTpyAA.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-en-us-DLWYV4xe.js → CreatedOnBrandCrowd-en-us-FUfcPskv.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-es-es-CcjzRbm_.js → CreatedOnBrandCrowd-es-es-BkRUovXn.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-fr-fr-UuUNeB_L.js → CreatedOnBrandCrowd-fr-ca-xsLZEhPK.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-fr-ca-UuUNeB_L.js → CreatedOnBrandCrowd-fr-fr-xsLZEhPK.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-pt-pt-ZVYZ5AnV.js → CreatedOnBrandCrowd-pt-br-BJ4DkilI.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-pt-br-ZVYZ5AnV.js → CreatedOnBrandCrowd-pt-pt-BJ4DkilI.js} +1 -1
- package/lib/src/{CreatedOnDcom-de-de-BPVyqOPL.js → CreatedOnDcom-de-de-D7f4iceH.js} +1 -1
- package/lib/src/{CreatedOnDcom-en-us-BUSRV01e.js → CreatedOnDcom-en-us-BHbqZcVl.js} +1 -1
- package/lib/src/{CreatedOnDcom-es-es-BuABJnvQ.js → CreatedOnDcom-es-es-BT_eFhYg.js} +1 -1
- package/lib/src/{CreatedOnDcom-fr-ca-sjHceLRY.js → CreatedOnDcom-fr-ca-DCWCvJTS.js} +1 -1
- package/lib/src/{CreatedOnDcom-fr-fr-D_qGXL3E.js → CreatedOnDcom-fr-fr-DpLretAn.js} +1 -1
- package/lib/src/{CreatedOnDcom-pt-br-D3Sb_YEi.js → CreatedOnDcom-pt-br-DmyQqot9.js} +1 -1
- package/lib/src/{CreatedOnDcom-pt-pt-BI47Hv58.js → CreatedOnDcom-pt-pt-CRLWHfnY.js} +1 -1
- package/lib/src/brand-page/components/page-footer/PageFooter.mixin.d.ts +0 -1
- package/lib/src/brand-page/components/page-footer/PageFooter.mixin.js +1 -4
- package/lib/src/brand-page/utils/route.util.d.ts +12 -0
- package/lib/src/brand-page/utils/route.util.js +56 -0
- package/lib/src/brand-page-maker/components/index.d.ts +1 -0
- package/lib/src/brand-page-maker/components/index.js +1 -0
- package/lib/src/bundled-translations-BlUyLdcg.js +179 -0
- package/lib/src/bundled-translations.de-DE-DZm_F46B.js +179 -0
- package/lib/src/bundled-translations.es-ES-DiOMEwZz.js +179 -0
- package/lib/src/bundled-translations.fr-CA-BPBNxV69.js +179 -0
- package/lib/src/bundled-translations.fr-FR-bCNdWkJW.js +179 -0
- package/lib/src/bundled-translations.pt-BR-CC6okekB.js +179 -0
- package/lib/src/bundled-translations.pt-PT-CSgMSLFn.js +179 -0
- package/lib/src/bundles/bundled-translations.de-DE.json +5 -4
- package/lib/src/bundles/bundled-translations.es-ES.json +5 -4
- package/lib/src/bundles/bundled-translations.fr-CA.json +5 -4
- package/lib/src/bundles/bundled-translations.fr-FR.json +5 -4
- package/lib/src/bundles/bundled-translations.json +9 -4
- package/lib/src/bundles/bundled-translations.pt-BR.json +5 -4
- package/lib/src/bundles/bundled-translations.pt-PT.json +5 -4
- package/lib/src/css/library.brand-page-brandCrowd.min.css +159 -222
- package/lib/src/css/library.brand-page-brandPage.min.css +159 -222
- package/lib/src/css/library.brand-page-designCom.min.css +159 -222
- package/lib/src/css/library.brand-page-preview.min.css +159 -222
- package/lib/src/index.d.ts +1 -1
- package/lib/src/index.mjs +110 -109
- package/lib/src/{lib-BBX3eBci.js → lib-CZMytXbN.js} +19842 -19669
- package/lib/src/lib.js +1 -1
- package/lib/src/shared/components/live-preview-modal/live-preview-modal.utils.d.ts +4 -0
- package/lib/src/shared/components/live-preview-modal/live-preview-modal.utils.js +3 -0
- package/lib/src/shared/page-settings/components/page-settings/PageSettings.mixin.d.ts +3 -1
- package/lib/src/shared/page-settings/components/page-settings/PageSettings.mixin.js +23 -11
- package/package.json +1 -1
- package/src/brand-page/components/button/Button.vue +41 -18
- package/src/brand-page/components/button/Button.vue.test.ts +211 -0
- package/src/brand-page/components/images-section/ImagesSection.test.ts +91 -0
- package/src/brand-page/components/images-section/ImagesSection.vue +29 -10
- package/src/brand-page/components/page-footer/PageFooter.mixin.ts +1 -4
- package/src/brand-page/components/page-footer/PageFooter.vue +0 -1
- package/src/brand-page/components/payment/Payment.vue +0 -3
- package/src/brand-page/components/payment/request-payment/RequestPayment.vue +0 -1
- package/src/brand-page/components/payment/support-me/SupportMe.vue +0 -3
- package/src/brand-page/components/save-contact/SaveContactWidget.vue +1 -0
- package/src/brand-page/components/save-contact/popup-card/PopupCard.vue +1 -0
- package/src/brand-page/components/shop/CartModal.test.ts +51 -0
- package/src/brand-page/components/shop/CartModal.vue +1 -0
- package/src/brand-page/components/shop/FeaturedDisplay.vue +8 -3
- package/src/brand-page/components/shop/Shop.vue +5 -5
- package/src/brand-page/components/shop/Shop.vue.test.ts +104 -2
- package/src/brand-page/components/social-links/SocialLinks.vue +1 -9
- package/src/brand-page/components/social-links/SocialLinks.vue.test.ts +28 -8
- package/src/brand-page/components/social-links/SocialLinksItems.vue +6 -2
- package/src/brand-page/components/testimonial-section/TestimonialSection.vue +2 -2
- package/src/brand-page/components/video/Video.vue +0 -3
- package/src/brand-page/utils/route.util.test.ts +116 -0
- package/src/brand-page/utils/route.util.ts +82 -0
- package/src/brand-page-maker/components/action-bar/ActionBarNavigation.test.ts +23 -0
- package/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.preview-gate.test.ts +68 -3
- package/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.vue +1 -0
- package/src/brand-page-maker/components/index.ts +1 -0
- package/src/brand-page-maker/components/preview-modal/PreviewModalWithState.test.ts +61 -41
- package/src/brand-page-maker/components/preview-modal/PreviewModalWithState.vue +37 -42
- package/src/bundles/bundled-translations.de-DE.json +5 -4
- package/src/bundles/bundled-translations.es-ES.json +5 -4
- package/src/bundles/bundled-translations.fr-CA.json +5 -4
- package/src/bundles/bundled-translations.fr-FR.json +5 -4
- package/src/bundles/bundled-translations.json +9 -4
- package/src/bundles/bundled-translations.pt-BR.json +5 -4
- package/src/bundles/bundled-translations.pt-PT.json +5 -4
- package/src/lib.ts +1 -0
- package/src/{brand-page-maker/components/preview-modal/PreviewModal.test.ts → shared/components/live-preview-modal/LivePreviewModal.test.ts} +96 -3
- package/src/{brand-page-maker/components/preview-modal/PreviewModal.vue → shared/components/live-preview-modal/LivePreviewModal.vue} +103 -89
- package/src/shared/components/live-preview-modal/i18n/preview-modal.de-DE.json +7 -0
- package/src/shared/components/live-preview-modal/i18n/preview-modal.es-ES.json +7 -0
- package/src/shared/components/live-preview-modal/i18n/preview-modal.fr-CA.json +7 -0
- package/src/shared/components/live-preview-modal/i18n/preview-modal.fr-FR.json +7 -0
- package/src/shared/components/live-preview-modal/i18n/preview-modal.json +7 -0
- package/src/shared/components/live-preview-modal/i18n/preview-modal.pt-BR.json +7 -0
- package/src/shared/components/live-preview-modal/i18n/preview-modal.pt-PT.json +7 -0
- package/src/shared/components/live-preview-modal/live-preview-modal.utils.ts +11 -0
- package/src/shared/ecommerce-settings/store/cart-store.test.ts +38 -0
- package/src/shared/page-settings/components/header-settings-panel/HeaderSettingsPanel.vue +205 -0
- package/src/shared/page-settings/components/page-settings/PageSettings.header-settings-panel.test.ts +97 -0
- package/src/shared/page-settings/components/page-settings/PageSettings.mixin.ts +27 -12
- package/src/shared/page-settings/components/page-settings/PageSettings.vue +113 -92
- package/src/shared/page-settings/components/page-settings/i18n/page-settings.json +4 -0
- package/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.vue +1 -57
- package/lib/src/bundled-translations-D42tE0D2.js +0 -179
- package/lib/src/bundled-translations.de-DE-D9aWGgFt.js +0 -179
- package/lib/src/bundled-translations.es-ES-lk4B0xQ7.js +0 -179
- package/lib/src/bundled-translations.fr-CA-DhOBNt6q.js +0 -179
- package/lib/src/bundled-translations.fr-FR-CnpafQeG.js +0 -179
- package/lib/src/bundled-translations.pt-BR-C4PnKrd9.js +0 -179
- package/lib/src/bundled-translations.pt-PT-CfKDVQC-.js +0 -179
- package/src/brand-page-maker/components/preview-modal/i18n/preview-modal.de-DE.json +0 -6
- package/src/brand-page-maker/components/preview-modal/i18n/preview-modal.es-ES.json +0 -6
- package/src/brand-page-maker/components/preview-modal/i18n/preview-modal.fr-CA.json +0 -6
- package/src/brand-page-maker/components/preview-modal/i18n/preview-modal.fr-FR.json +0 -6
- package/src/brand-page-maker/components/preview-modal/i18n/preview-modal.json +0 -6
- package/src/brand-page-maker/components/preview-modal/i18n/preview-modal.pt-BR.json +0 -6
- package/src/brand-page-maker/components/preview-modal/i18n/preview-modal.pt-PT.json +0 -6
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div data-component="header-settings-panel">
|
|
3
|
+
<SideBarSettingsHeader
|
|
4
|
+
:show-back-button="true"
|
|
5
|
+
:title="pageSettingsTr('headerSettings')"
|
|
6
|
+
@on-back="$emit('on-back')"
|
|
7
|
+
/>
|
|
8
|
+
|
|
9
|
+
<TabMenu
|
|
10
|
+
:tab-names="viewports"
|
|
11
|
+
:selected-tab-name="selectedViewportTabName"
|
|
12
|
+
class="tw-mb-4"
|
|
13
|
+
@on-tab-selected="handleSelectViewport"
|
|
14
|
+
/>
|
|
15
|
+
|
|
16
|
+
<HelloBar
|
|
17
|
+
v-if="showDeviceWarning"
|
|
18
|
+
variant="warning"
|
|
19
|
+
:label="tr('previewDescription')"
|
|
20
|
+
class="tw-mb-4"
|
|
21
|
+
/>
|
|
22
|
+
|
|
23
|
+
<CollapsiblePanel
|
|
24
|
+
data-component="collapsible-panel"
|
|
25
|
+
:title="pageSettingsTr('navigationSectionTitle')"
|
|
26
|
+
:is-collapsed="collapsedSections.navigation"
|
|
27
|
+
@changed="toggleSectionCollapsed('navigation')"
|
|
28
|
+
>
|
|
29
|
+
<HeaderNavigationType
|
|
30
|
+
:navigation-display-type="navigation.displayType"
|
|
31
|
+
:available-navigation-style-configs="availableNavigationStyleConfigs"
|
|
32
|
+
:on-select="handleHeaderNavigationDisplayTypeChange"
|
|
33
|
+
/>
|
|
34
|
+
|
|
35
|
+
<div v-if="!isBrandSite">
|
|
36
|
+
<div
|
|
37
|
+
v-if="showNavigationBelowLogoOption"
|
|
38
|
+
class="tw-my-4 tw-flex tw-items-center tw-justify-between tw-cursor-pointer"
|
|
39
|
+
>
|
|
40
|
+
<div class="tw-flex tw-items-center">
|
|
41
|
+
<div
|
|
42
|
+
class="tw-font-sans tw-font-bold tw-text-secondary-800 tw-text-sm tw-mr-2"
|
|
43
|
+
>
|
|
44
|
+
{{ tr('showNavigationBelow') }}
|
|
45
|
+
</div>
|
|
46
|
+
</div>
|
|
47
|
+
<Toggle
|
|
48
|
+
id="move-logo"
|
|
49
|
+
:model-value="isRenderAfterLogo"
|
|
50
|
+
@update:model-value="toggleShowNavigationBelowLogo"
|
|
51
|
+
/>
|
|
52
|
+
</div>
|
|
53
|
+
</div>
|
|
54
|
+
|
|
55
|
+
<HeaderDisplayStyle
|
|
56
|
+
:display-style="header.displayStyle"
|
|
57
|
+
:navigation-display-type="navigation.displayType"
|
|
58
|
+
:on-select="handleHeaderDisplayStyleChange"
|
|
59
|
+
:viewport="viewport"
|
|
60
|
+
:is-logo-visible="isLogoVisible"
|
|
61
|
+
/>
|
|
62
|
+
|
|
63
|
+
<NavigationStyleSettings
|
|
64
|
+
:available-navigation-style-configs="availableNavigationStyleConfigs"
|
|
65
|
+
:is-admin-maker="isAdminMaker"
|
|
66
|
+
:logo-theme="logoTheme"
|
|
67
|
+
:value="navigation"
|
|
68
|
+
@option-value-change="handleHeaderNavigationStyleOptionValueChange"
|
|
69
|
+
/>
|
|
70
|
+
</CollapsiblePanel>
|
|
71
|
+
|
|
72
|
+
<CollapsiblePanel
|
|
73
|
+
v-if="isBrandSite"
|
|
74
|
+
data-component="collapsible-panel"
|
|
75
|
+
:title="pageSettingsTr('headerSectionTitle')"
|
|
76
|
+
:is-collapsed="collapsedSections.header"
|
|
77
|
+
@changed="toggleSectionCollapsed('header')"
|
|
78
|
+
>
|
|
79
|
+
<ColorField
|
|
80
|
+
id="backgroundStyle"
|
|
81
|
+
:class="{ 'tw-mt-4': isHeader }"
|
|
82
|
+
:enable-color-match="true"
|
|
83
|
+
name="backgroundColor"
|
|
84
|
+
:label="commonTr('backgroundColor')"
|
|
85
|
+
:value="backgroundColor"
|
|
86
|
+
:is-admin-maker="isAdminMaker"
|
|
87
|
+
:logo-theme="logoTheme"
|
|
88
|
+
:toggle-unique-id="sectionName"
|
|
89
|
+
@update:model-value="onSelectColor"
|
|
90
|
+
/>
|
|
91
|
+
</CollapsiblePanel>
|
|
92
|
+
|
|
93
|
+
<CollapsiblePanel
|
|
94
|
+
v-if="isBrandSite"
|
|
95
|
+
data-component="collapsible-panel"
|
|
96
|
+
:title="pageSettingsTr('logoSectionTitle')"
|
|
97
|
+
:is-collapsed="collapsedSections.logo"
|
|
98
|
+
@changed="toggleSectionCollapsed('logo')"
|
|
99
|
+
>
|
|
100
|
+
<LogoSelection
|
|
101
|
+
:is-logo-visible="isLogoVisible"
|
|
102
|
+
:selected-logo="selectedLogoViewModel"
|
|
103
|
+
:selected-logo-image-url="logoImageBase64Url || logoImageUrl"
|
|
104
|
+
:selected-logo-draft-token="logoDraftToken"
|
|
105
|
+
@on-logo-visible-changed="onLogoVisibleChanged"
|
|
106
|
+
@on-logo-variation-selected="onLogoVariationSelected"
|
|
107
|
+
@on-editable-logo-variation-selected="onEditableLogoVariationSelected"
|
|
108
|
+
@on-logo-version-selected="onLogoVersionSelected"
|
|
109
|
+
/>
|
|
110
|
+
<div v-if="isLogoVisible">
|
|
111
|
+
<div class="tw-mb-2 tw-flex tw-items-center tw-justify-between">
|
|
112
|
+
<span class="header-settings-panel_option-title tw-mt-2">
|
|
113
|
+
{{ tr('logoSize') }}
|
|
114
|
+
</span>
|
|
115
|
+
</div>
|
|
116
|
+
<LogoSizeSlider
|
|
117
|
+
:value="logoImageHeight"
|
|
118
|
+
:viewport="viewport"
|
|
119
|
+
@on-change="onLogoSizeChanged"
|
|
120
|
+
/>
|
|
121
|
+
</div>
|
|
122
|
+
</CollapsiblePanel>
|
|
123
|
+
|
|
124
|
+
<!-- Button section hidden for now (BP-5854) — re-enable once BP-5852 implements
|
|
125
|
+
the header button. Left commented rather than removed since the shell
|
|
126
|
+
(CollapsiblePanel + collapsedSections.button state) is already wired up.
|
|
127
|
+
<CollapsiblePanel
|
|
128
|
+
data-component="collapsible-panel"
|
|
129
|
+
:title="pageSettingsTr('buttonSectionTitle')"
|
|
130
|
+
:is-collapsed="collapsedSections.button"
|
|
131
|
+
@changed="toggleSectionCollapsed('button')"
|
|
132
|
+
/>
|
|
133
|
+
-->
|
|
134
|
+
</div>
|
|
135
|
+
</template>
|
|
136
|
+
<script>
|
|
137
|
+
import {
|
|
138
|
+
CollapsiblePanel,
|
|
139
|
+
HelloBar,
|
|
140
|
+
TabMenu,
|
|
141
|
+
Toggle,
|
|
142
|
+
} from '@designcrowd/fe-shared-lib';
|
|
143
|
+
import PageSettingsSectionStyleMixin from '../page-settings-section-styles/PageSettingsSectionStyles.mixin.ts';
|
|
144
|
+
import HeaderDisplayStyle from '../page-settings-section-styles/HeaderDisplayStyle.vue';
|
|
145
|
+
import HeaderNavigationType from '../page-settings-section-styles/HeaderNavigationType.vue';
|
|
146
|
+
import NavigationStyleSettings from '../../../navigation-style-settings/components/navigation-style-settings/NavigationStyleSettings.vue';
|
|
147
|
+
import ColorField from '../../../content-settings/components/color-field/ColorField.vue';
|
|
148
|
+
import LogoSelection from '@shared/content-settings/components/logo-selection-field/LogoSelection.vue';
|
|
149
|
+
import LogoSizeSlider from '@shared/content-settings/components/logo-size-field/LogoSizeSlider.vue';
|
|
150
|
+
import SideBarSettingsHeader from '../../../common/SideBarSettingsHeader.vue';
|
|
151
|
+
import { tr, commonTr, pageSettingsTr } from '@src/composables/useTranslate';
|
|
152
|
+
|
|
153
|
+
export default {
|
|
154
|
+
components: {
|
|
155
|
+
CollapsiblePanel,
|
|
156
|
+
ColorField,
|
|
157
|
+
HelloBar,
|
|
158
|
+
TabMenu,
|
|
159
|
+
Toggle,
|
|
160
|
+
HeaderDisplayStyle,
|
|
161
|
+
HeaderNavigationType,
|
|
162
|
+
NavigationStyleSettings,
|
|
163
|
+
LogoSelection,
|
|
164
|
+
LogoSizeSlider,
|
|
165
|
+
SideBarSettingsHeader,
|
|
166
|
+
},
|
|
167
|
+
mixins: [PageSettingsSectionStyleMixin],
|
|
168
|
+
emits: ['on-back'],
|
|
169
|
+
setup() {
|
|
170
|
+
return {
|
|
171
|
+
...PageSettingsSectionStyleMixin.setup(),
|
|
172
|
+
tr: (key) => tr(`pageSettingsSection.${key}`),
|
|
173
|
+
commonTr,
|
|
174
|
+
pageSettingsTr,
|
|
175
|
+
};
|
|
176
|
+
},
|
|
177
|
+
data() {
|
|
178
|
+
return {
|
|
179
|
+
// All sections start collapsed, matching the panel's default-state
|
|
180
|
+
// design (BP-5854) — not persisted, this is purely local UI state.
|
|
181
|
+
collapsedSections: {
|
|
182
|
+
navigation: true,
|
|
183
|
+
header: true,
|
|
184
|
+
logo: true,
|
|
185
|
+
button: true,
|
|
186
|
+
},
|
|
187
|
+
};
|
|
188
|
+
},
|
|
189
|
+
computed: {
|
|
190
|
+
selectedViewportTabName() {
|
|
191
|
+
return this.findSelectedViewport();
|
|
192
|
+
},
|
|
193
|
+
},
|
|
194
|
+
methods: {
|
|
195
|
+
toggleSectionCollapsed(section) {
|
|
196
|
+
this.collapsedSections[section] = !this.collapsedSections[section];
|
|
197
|
+
},
|
|
198
|
+
},
|
|
199
|
+
};
|
|
200
|
+
</script>
|
|
201
|
+
<style scoped>
|
|
202
|
+
.header-settings-panel_option-title {
|
|
203
|
+
@apply tw-font-sans tw-font-bold tw-text-secondary-800 tw-text-sm;
|
|
204
|
+
}
|
|
205
|
+
</style>
|
package/src/shared/page-settings/components/page-settings/PageSettings.header-settings-panel.test.ts
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { describe, test, expect, beforeEach } from 'vitest';
|
|
2
|
+
import { createPinia, setActivePinia } from 'pinia';
|
|
3
|
+
import { shallowMount } from '@vue/test-utils';
|
|
4
|
+
import PageSettings from './PageSettings.vue';
|
|
5
|
+
import HeaderSettingsPanel from '../header-settings-panel/HeaderSettingsPanel.vue';
|
|
6
|
+
import { useUiPageSettingsStore } from '../../store';
|
|
7
|
+
|
|
8
|
+
// Coverage for BP-5854: the flat "Header Settings" CollapsiblePanel became a
|
|
9
|
+
// chevron row that navigates to a dedicated HeaderSettingsPanel, mirroring the
|
|
10
|
+
// existing ContentSettings mode-switch pattern. This pins that navigation and
|
|
11
|
+
// the "jump here from the live-preview canvas" path (selectedSectionName).
|
|
12
|
+
describe('PageSettings — header settings panel navigation', () => {
|
|
13
|
+
let pageSettingsStore: ReturnType<typeof useUiPageSettingsStore>;
|
|
14
|
+
|
|
15
|
+
beforeEach(() => {
|
|
16
|
+
setActivePinia(createPinia());
|
|
17
|
+
pageSettingsStore = useUiPageSettingsStore();
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
const mountPageSettings = () => shallowMount(PageSettings);
|
|
21
|
+
|
|
22
|
+
test('by default: header settings panel is not shown, the chevron row is', () => {
|
|
23
|
+
const wrapper = mountPageSettings();
|
|
24
|
+
|
|
25
|
+
expect(wrapper.findComponent(HeaderSettingsPanel).exists()).toBe(false);
|
|
26
|
+
expect(wrapper.find('[data-test-tag="header-settings-row"]').exists()).toBe(
|
|
27
|
+
true,
|
|
28
|
+
);
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
test('clicking the header settings row opens the panel', async () => {
|
|
32
|
+
const wrapper = mountPageSettings();
|
|
33
|
+
|
|
34
|
+
await wrapper
|
|
35
|
+
.find('[data-test-tag="header-settings-row"]')
|
|
36
|
+
.trigger('click');
|
|
37
|
+
|
|
38
|
+
expect(wrapper.findComponent(HeaderSettingsPanel).exists()).toBe(true);
|
|
39
|
+
expect(wrapper.find('[data-test-tag="header-settings-row"]').exists()).toBe(
|
|
40
|
+
false,
|
|
41
|
+
);
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
test('the panel\'s "on-back" event returns to the pages list', async () => {
|
|
45
|
+
const wrapper = mountPageSettings();
|
|
46
|
+
|
|
47
|
+
await wrapper
|
|
48
|
+
.find('[data-test-tag="header-settings-row"]')
|
|
49
|
+
.trigger('click');
|
|
50
|
+
await wrapper.findComponent(HeaderSettingsPanel).vm.$emit('on-back');
|
|
51
|
+
|
|
52
|
+
expect(wrapper.findComponent(HeaderSettingsPanel).exists()).toBe(false);
|
|
53
|
+
expect(wrapper.find('[data-test-tag="header-settings-row"]').exists()).toBe(
|
|
54
|
+
true,
|
|
55
|
+
);
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
test('selecting the header section (e.g. from the live-preview canvas) opens the panel', async () => {
|
|
59
|
+
const wrapper = mountPageSettings();
|
|
60
|
+
|
|
61
|
+
pageSettingsStore.setSelectedSectionName({ sectionName: 'header' });
|
|
62
|
+
await wrapper.vm.$nextTick();
|
|
63
|
+
|
|
64
|
+
expect(wrapper.findComponent(HeaderSettingsPanel).exists()).toBe(true);
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
test('selecting the pages section keeps the list view (no panel)', async () => {
|
|
68
|
+
const wrapper = mountPageSettings();
|
|
69
|
+
|
|
70
|
+
pageSettingsStore.setSelectedSectionName({ sectionName: 'header' });
|
|
71
|
+
await wrapper.vm.$nextTick();
|
|
72
|
+
|
|
73
|
+
pageSettingsStore.setSelectedSectionName({ sectionName: 'pages' });
|
|
74
|
+
await wrapper.vm.$nextTick();
|
|
75
|
+
|
|
76
|
+
expect(wrapper.findComponent(HeaderSettingsPanel).exists()).toBe(false);
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
test('re-selecting the header section after Back reopens the panel (same-value store write must still re-trigger)', async () => {
|
|
80
|
+
const wrapper = mountPageSettings();
|
|
81
|
+
|
|
82
|
+
// Opened once via the canvas (selectedSectionName), then closed via Back.
|
|
83
|
+
pageSettingsStore.setSelectedSectionName({ sectionName: 'header' });
|
|
84
|
+
await wrapper.vm.$nextTick();
|
|
85
|
+
await wrapper.findComponent(HeaderSettingsPanel).vm.$emit('on-back');
|
|
86
|
+
|
|
87
|
+
expect(pageSettingsStore.selectedSectionName).toBeUndefined();
|
|
88
|
+
|
|
89
|
+
// Clicking the header on the canvas again writes the SAME value ('header')
|
|
90
|
+
// it already held before Back reset it to undefined — this must still open
|
|
91
|
+
// the panel rather than being a no-op against Pinia's change detection.
|
|
92
|
+
pageSettingsStore.setSelectedSectionName({ sectionName: 'header' });
|
|
93
|
+
await wrapper.vm.$nextTick();
|
|
94
|
+
|
|
95
|
+
expect(wrapper.findComponent(HeaderSettingsPanel).exists()).toBe(true);
|
|
96
|
+
});
|
|
97
|
+
});
|
|
@@ -264,6 +264,7 @@ export default defineComponent({
|
|
|
264
264
|
onDraggingStart,
|
|
265
265
|
onDraggingEnd,
|
|
266
266
|
eventTracker,
|
|
267
|
+
pageSettingsView: ref<'list' | 'headerSettings'>('list'),
|
|
267
268
|
};
|
|
268
269
|
},
|
|
269
270
|
data() {
|
|
@@ -297,18 +298,6 @@ export default defineComponent({
|
|
|
297
298
|
contentListItems(): ContentItem<Content>[] {
|
|
298
299
|
return this.contentSettingsStore.items;
|
|
299
300
|
},
|
|
300
|
-
headerPageSectionStyleOptions(): PageSectionStyleOption[] {
|
|
301
|
-
if (this.isBrandSite) {
|
|
302
|
-
return [
|
|
303
|
-
PAGE_SECTION_STYLE_OPTIONS.logo,
|
|
304
|
-
PAGE_SECTION_STYLE_OPTIONS.logoSize,
|
|
305
|
-
PAGE_SECTION_STYLE_OPTIONS.backgroundColor,
|
|
306
|
-
PAGE_SECTION_STYLE_OPTIONS.headerDisplay,
|
|
307
|
-
];
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
return [PAGE_SECTION_STYLE_OPTIONS.headerDisplay];
|
|
311
|
-
},
|
|
312
301
|
footerPageSectionStyleOptions(): PageSectionStyleOption[] {
|
|
313
302
|
return [
|
|
314
303
|
PAGE_SECTION_STYLE_OPTIONS.logo,
|
|
@@ -485,6 +474,16 @@ export default defineComponent({
|
|
|
485
474
|
});
|
|
486
475
|
},
|
|
487
476
|
scrollToPageSettingsSection(sectionName: PageSettingsSection) {
|
|
477
|
+
if (sectionName === PAGE_SETTINGS_SECTIONS.header) {
|
|
478
|
+
// Header settings live in their own dedicated panel now (BP-5854),
|
|
479
|
+
// not an inline CollapsiblePanel to scroll to.
|
|
480
|
+
this.pageSettingsView = 'headerSettings';
|
|
481
|
+
|
|
482
|
+
return;
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
this.pageSettingsView = 'list';
|
|
486
|
+
|
|
488
487
|
this.$nextTick(() => {
|
|
489
488
|
const $sideBarContent = document.querySelector(
|
|
490
489
|
`#${SIDE_BAR_CONTENT_ID}`,
|
|
@@ -519,6 +518,22 @@ export default defineComponent({
|
|
|
519
518
|
$sideBarContent.scrollTop = $el.offsetTop - $sidebarHeader.clientHeight;
|
|
520
519
|
});
|
|
521
520
|
},
|
|
521
|
+
openHeaderSettingsPanel() {
|
|
522
|
+
this.pageSettingsView = 'headerSettings';
|
|
523
|
+
},
|
|
524
|
+
closeHeaderSettingsPanel() {
|
|
525
|
+
this.pageSettingsView = 'list';
|
|
526
|
+
|
|
527
|
+
// Keep the store in sync so a repeat click on the header in the
|
|
528
|
+
// live-preview canvas (which sets selectedSectionName to the same
|
|
529
|
+
// value it already had) still re-fires the watcher and reopens
|
|
530
|
+
// this panel, instead of being a no-op.
|
|
531
|
+
if (this.pageSettingsStore.selectedSectionName) {
|
|
532
|
+
this.pageSettingsStore.setSelectedSectionName({
|
|
533
|
+
sectionName: undefined,
|
|
534
|
+
});
|
|
535
|
+
}
|
|
536
|
+
},
|
|
522
537
|
async onHideBrandPageLogoClickFromFooter() {
|
|
523
538
|
this.eventTracker.setUpsellBridgeState({
|
|
524
539
|
cta_location: UPGRADE_CTA_LOCATIONS.REMOVE_WATERMARK_FOOTER_SETTINGS,
|
|
@@ -5,118 +5,137 @@
|
|
|
5
5
|
<ReplaceImageSettingsForContent v-if="isReplacingPageSettingsImage" />
|
|
6
6
|
<!-- start page settings -->
|
|
7
7
|
<div v-show="!isReplacingPageSettingsImage">
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
:
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
:
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
<!-- Nested draggable section for visible pages -->
|
|
20
|
-
<NestedDraggable
|
|
21
|
-
:orders="pageNavigationStore.orders"
|
|
22
|
-
:is-dragging-page="isDraggingPage"
|
|
23
|
-
:is-design-com="isDesignCom"
|
|
24
|
-
:on-page-title-input="onPageTitleInput"
|
|
25
|
-
:on-delete-page-selected="onDeletePageSelected"
|
|
26
|
-
:on-change-page-visibility="onChangePageVisibility"
|
|
27
|
-
:on-add-sub-page-selected="onAddSubPageSelected"
|
|
28
|
-
@drag-start="onDraggingStart"
|
|
29
|
-
@drag-end="onDraggingEnd"
|
|
30
|
-
/>
|
|
31
|
-
|
|
32
|
-
<Button
|
|
33
|
-
data-test-tag="add-page"
|
|
34
|
-
:label="addPageLabel"
|
|
35
|
-
:variant="addPageButtonVariant"
|
|
36
|
-
size="small-wide"
|
|
37
|
-
:full-width="true"
|
|
38
|
-
@on-click.stop="onAddNewPageSelected()"
|
|
39
|
-
/>
|
|
40
|
-
</CollapsiblePanel>
|
|
8
|
+
<!-- style-options is required by the shared mixin (PageSettingsSectionStyles.mixin.ts)
|
|
9
|
+
but unused here — HeaderSettingsPanel's own isBrandSite checks decide what renders. -->
|
|
10
|
+
<HeaderSettingsPanel
|
|
11
|
+
v-if="pageSettingsView === 'headerSettings'"
|
|
12
|
+
:is-admin-maker="isAdminMaker"
|
|
13
|
+
:is-brand-site="isBrandSite"
|
|
14
|
+
:logo-theme="logoTheme"
|
|
15
|
+
section-name="header"
|
|
16
|
+
:style-options="[]"
|
|
17
|
+
@on-back="closeHeaderSettingsPanel"
|
|
18
|
+
/>
|
|
41
19
|
|
|
42
|
-
<
|
|
43
|
-
:
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
:
|
|
51
|
-
:is-
|
|
52
|
-
|
|
53
|
-
:
|
|
54
|
-
|
|
55
|
-
|
|
20
|
+
<template v-else>
|
|
21
|
+
<SideBarSettingsHeader :title="pageSettingsTr('managePages')" />
|
|
22
|
+
<p class="tw-font-sans tw-text-sm tw-text-grayscale-600 tw-mb-3">
|
|
23
|
+
{{ pageSettingsTr('addPagesDescription') }}
|
|
24
|
+
</p>
|
|
25
|
+
<CollapsiblePanel
|
|
26
|
+
:ref="PAGE_SETTINGS_SECTIONS.pages"
|
|
27
|
+
data-component="collapsible-panel"
|
|
28
|
+
:title="pageSettingsTr('pages')"
|
|
29
|
+
:is-collapsed="sectionCollapsedStates[PAGE_SETTINGS_SECTIONS.pages]"
|
|
30
|
+
>
|
|
31
|
+
<SideBarSectionTitle :title="pageSettingsTr('addPages')" />
|
|
32
|
+
<!-- Nested draggable section for visible pages -->
|
|
33
|
+
<NestedDraggable
|
|
34
|
+
:orders="pageNavigationStore.orders"
|
|
35
|
+
:is-dragging-page="isDraggingPage"
|
|
36
|
+
:is-design-com="isDesignCom"
|
|
37
|
+
:on-page-title-input="onPageTitleInput"
|
|
38
|
+
:on-delete-page-selected="onDeletePageSelected"
|
|
39
|
+
:on-change-page-visibility="onChangePageVisibility"
|
|
40
|
+
:on-add-sub-page-selected="onAddSubPageSelected"
|
|
41
|
+
@drag-start="onDraggingStart"
|
|
42
|
+
@drag-end="onDraggingEnd"
|
|
43
|
+
/>
|
|
56
44
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
:font-settings-options="footerFontSettingsOptions"
|
|
67
|
-
:is-admin-maker="isAdminMaker"
|
|
68
|
-
:is-brand-site="isBrandSite"
|
|
69
|
-
:logo-theme="logoTheme"
|
|
70
|
-
:style-options="footerPageSectionStyleOptions"
|
|
71
|
-
/>
|
|
45
|
+
<Button
|
|
46
|
+
data-test-tag="add-page"
|
|
47
|
+
:label="addPageLabel"
|
|
48
|
+
:variant="addPageButtonVariant"
|
|
49
|
+
size="small-wide"
|
|
50
|
+
:full-width="true"
|
|
51
|
+
@on-click.stop="onAddNewPageSelected()"
|
|
52
|
+
/>
|
|
53
|
+
</CollapsiblePanel>
|
|
72
54
|
|
|
73
55
|
<div
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
56
|
+
data-component="header-settings-row"
|
|
57
|
+
data-test-tag="header-settings-row"
|
|
58
|
+
class="tw-bg-white tw-border tw-border-grayscale-500 tw-border-solid tw-flex tw-items-center tw-justify-between tw-cursor-pointer tw-mb-4 tw-p-4 tw-rounded-md"
|
|
59
|
+
@click="openHeaderSettingsPanel"
|
|
77
60
|
>
|
|
78
|
-
<div
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
{{ hideText }}
|
|
83
|
-
</div>
|
|
84
|
-
<div
|
|
85
|
-
class="tw-inline-block tw-text-primary-500 tw-border-2 tw-border-solid tw-border-current tw-rounded-full tw-px-3 tw-py-px tw-uppercase tw-text-xs"
|
|
86
|
-
>
|
|
87
|
-
{{ styleSettingsTr('premium') }}
|
|
88
|
-
</div>
|
|
61
|
+
<div
|
|
62
|
+
class="tw-text-md tw-font-sans tw-font-bold tw-text-secondary-800"
|
|
63
|
+
>
|
|
64
|
+
{{ pageSettingsTr('headerSettings') }}
|
|
89
65
|
</div>
|
|
90
|
-
<
|
|
91
|
-
id="hide-brandpage-logo"
|
|
92
|
-
class="tw-pointer-events-none tw-touch-none"
|
|
93
|
-
:model-value="false"
|
|
94
|
-
color="info"
|
|
95
|
-
/>
|
|
66
|
+
<Icon name="chevron-right" size="sm" class="tw-text-grayscale-600" />
|
|
96
67
|
</div>
|
|
97
|
-
</CollapsiblePanel>
|
|
98
68
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
69
|
+
<CollapsiblePanel
|
|
70
|
+
v-if="showFooterSettings"
|
|
71
|
+
:ref="PAGE_SETTINGS_SECTIONS.footer"
|
|
72
|
+
data-component="collapsible-panel"
|
|
73
|
+
:title="pageSettingsTr('footerSettings')"
|
|
74
|
+
:is-collapsed="sectionCollapsedStates[PAGE_SETTINGS_SECTIONS.footer]"
|
|
75
|
+
>
|
|
76
|
+
<PageSettingsSectionStyles
|
|
77
|
+
section-name="footer"
|
|
78
|
+
:font-settings-options="footerFontSettingsOptions"
|
|
79
|
+
:is-admin-maker="isAdminMaker"
|
|
80
|
+
:is-brand-site="isBrandSite"
|
|
81
|
+
:logo-theme="logoTheme"
|
|
82
|
+
:style-options="footerPageSectionStyleOptions"
|
|
83
|
+
/>
|
|
84
|
+
|
|
85
|
+
<div
|
|
86
|
+
v-if="!isAdminMaker && !isPrePurchase && showBrandCrowdLogo"
|
|
87
|
+
class="tw-flex tw-items-center tw-justify-between tw-cursor-pointer"
|
|
88
|
+
@click="onHideBrandPageLogoClickFromFooter"
|
|
89
|
+
>
|
|
90
|
+
<div class="tw-flex tw-items-center">
|
|
91
|
+
<div
|
|
92
|
+
class="tw-font-sans tw-font-bold tw-text-secondary-800 tw-text-sm tw-mr-2"
|
|
93
|
+
>
|
|
94
|
+
{{ hideText }}
|
|
95
|
+
</div>
|
|
96
|
+
<div
|
|
97
|
+
class="tw-inline-block tw-text-primary-500 tw-border-2 tw-border-solid tw-border-current tw-rounded-full tw-px-3 tw-py-px tw-uppercase tw-text-xs"
|
|
98
|
+
>
|
|
99
|
+
{{ styleSettingsTr('premium') }}
|
|
100
|
+
</div>
|
|
101
|
+
</div>
|
|
102
|
+
<Toggle
|
|
103
|
+
id="hide-brandpage-logo"
|
|
104
|
+
class="tw-pointer-events-none tw-touch-none"
|
|
105
|
+
:model-value="false"
|
|
106
|
+
color="info"
|
|
107
|
+
/>
|
|
108
|
+
</div>
|
|
109
|
+
</CollapsiblePanel>
|
|
110
|
+
|
|
111
|
+
<DeletePageModal
|
|
112
|
+
:is-visible="isDeleteModalVisible"
|
|
113
|
+
:page-id="deleteModalPageId"
|
|
114
|
+
:page-title="deleteModalPageTitle"
|
|
115
|
+
@cancel="onCancelDeletePage"
|
|
116
|
+
@confirm="onConfirmDeletePage"
|
|
117
|
+
/>
|
|
106
118
|
|
|
107
|
-
|
|
119
|
+
<NewPageModal />
|
|
120
|
+
</template>
|
|
108
121
|
</div>
|
|
109
122
|
<!-- end page settings -->
|
|
110
123
|
</div>
|
|
111
124
|
</template>
|
|
112
125
|
<script>
|
|
113
|
-
import {
|
|
126
|
+
import {
|
|
127
|
+
Button,
|
|
128
|
+
CollapsiblePanel,
|
|
129
|
+
Icon,
|
|
130
|
+
Toggle,
|
|
131
|
+
} from '@designcrowd/fe-shared-lib';
|
|
114
132
|
import SideBarSettingsHeader from '../../../common/SideBarSettingsHeader.vue';
|
|
115
133
|
import PageSettingsMixin from './PageSettings.mixin.ts';
|
|
116
134
|
import SideBarSectionTitle from '../../../common/SideBarSectionTitle.vue';
|
|
117
135
|
import DeletePageModal from '../delete-page-modal/DeletePageModal.vue';
|
|
118
136
|
import NewPageModal from '../new-page-modal/NewPageModal.vue';
|
|
119
137
|
import PageSettingsSectionStyles from '../page-settings-section-styles/PageSettingsSectionStyles.vue';
|
|
138
|
+
import HeaderSettingsPanel from '../header-settings-panel/HeaderSettingsPanel.vue';
|
|
120
139
|
import ReplaceImageSettingsForContent from '../../../content-settings/components/content-settings/ReplaceImageSettingsForContent.vue';
|
|
121
140
|
import NestedDraggable from './NestedDraggable.vue';
|
|
122
141
|
import { useBrandPageContainerStore } from '@brand-page-maker/stores';
|
|
@@ -126,6 +145,7 @@ export default {
|
|
|
126
145
|
components: {
|
|
127
146
|
Button,
|
|
128
147
|
CollapsiblePanel,
|
|
148
|
+
Icon,
|
|
129
149
|
Toggle,
|
|
130
150
|
SideBarSettingsHeader,
|
|
131
151
|
SideBarSectionTitle,
|
|
@@ -133,6 +153,7 @@ export default {
|
|
|
133
153
|
DeletePageModal,
|
|
134
154
|
NewPageModal,
|
|
135
155
|
PageSettingsSectionStyles,
|
|
156
|
+
HeaderSettingsPanel,
|
|
136
157
|
ReplaceImageSettingsForContent,
|
|
137
158
|
},
|
|
138
159
|
mixins: [PageSettingsMixin],
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"pageSettings": {
|
|
3
3
|
"headerSettings": "Header Settings",
|
|
4
|
+
"navigationSectionTitle": "Navigation",
|
|
5
|
+
"headerSectionTitle": "Header",
|
|
6
|
+
"logoSectionTitle": "Logo",
|
|
7
|
+
"buttonSectionTitle": "Button",
|
|
4
8
|
"footerSettings": "Footer Settings",
|
|
5
9
|
"managePages": "Manage Pages",
|
|
6
10
|
"pages": "Pages",
|