@plusscommunities/pluss-feature-builder-web-d 1.0.2-beta.0
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/.babelrc +4 -0
- package/dist/index.cjs.js +7792 -0
- package/package.json +54 -0
- package/rollup.config.js +68 -0
- package/src/actions/featureBuilderStringsActions.js +88 -0
- package/src/actions/featureDefinitionsIndex.js +258 -0
- package/src/actions/formActions.js +311 -0
- package/src/actions/index.js +12 -0
- package/src/actions/listingActions.js +350 -0
- package/src/actions/wizardActions.js +240 -0
- package/src/components/ActivityCardExample.jsx +86 -0
- package/src/components/ActivityCardExample.module.css +130 -0
- package/src/components/BackgroundLoader.jsx +33 -0
- package/src/components/BackgroundLoader.module.css +46 -0
- package/src/components/BaseFieldConfig.jsx +305 -0
- package/src/components/BaseFieldConfig.module.css +42 -0
- package/src/components/CenteredContainer.jsx +29 -0
- package/src/components/CenteredContainer.module.css +171 -0
- package/src/components/DeleteConfirmationPopup.jsx +95 -0
- package/src/components/DeleteConfirmationPopup.module.css +12 -0
- package/src/components/ErrorBoundary.jsx +134 -0
- package/src/components/ErrorBoundary.module.css +77 -0
- package/src/components/ErrorMessage.jsx +85 -0
- package/src/components/ErrorMessage.module.css +116 -0
- package/src/components/ExampleDisplay.jsx +26 -0
- package/src/components/ExampleDisplay.module.css +3 -0
- package/src/components/FeatureBuilderSidebar.jsx +84 -0
- package/src/components/FeatureBuilderSuccessPopup.jsx +55 -0
- package/src/components/FeatureBuilderSuccessPopup.module.css +43 -0
- package/src/components/FeatureBuilderWelcomePopup.jsx +51 -0
- package/src/components/FeatureBuilderWelcomePopup.module.css +21 -0
- package/src/components/FeatureListingCard.jsx +104 -0
- package/src/components/FeatureListingCard.module.css +62 -0
- package/src/components/Fields.jsx +460 -0
- package/src/components/Fields.module.css +159 -0
- package/src/components/IconLoader.jsx +153 -0
- package/src/components/IconLoader.module.css +92 -0
- package/src/components/IconSelector.jsx +112 -0
- package/src/components/IconSelector.module.css +197 -0
- package/src/components/ListingEditor.jsx +406 -0
- package/src/components/ListingEditor.module.css +14 -0
- package/src/components/ListingSuccessPopup.jsx +52 -0
- package/src/components/LoadingScreen.jsx +54 -0
- package/src/components/LoadingScreen.module.css +103 -0
- package/src/components/LoadingState.jsx +40 -0
- package/src/components/LoadingState.module.css +18 -0
- package/src/components/PreviewFull.js +24 -0
- package/src/components/PreviewFull.module.css +11 -0
- package/src/components/PreviewGrid.js +14 -0
- package/src/components/PreviewWidget.js +27 -0
- package/src/components/PreviewWidget.module.css +15 -0
- package/src/components/SidebarLayout.jsx +292 -0
- package/src/components/SidebarLayout.module.css +145 -0
- package/src/components/SkeletonLoader.jsx +128 -0
- package/src/components/SkeletonLoader.module.css +295 -0
- package/src/components/SortButtonGroup.jsx +34 -0
- package/src/components/SortButtonGroup.module.css +51 -0
- package/src/components/ToastContainer.jsx +98 -0
- package/src/components/ToastContainer.module.css +156 -0
- package/src/components/ToggleSwitch.js +40 -0
- package/src/components/ToggleSwitch.module.css +48 -0
- package/src/components/TwoColumnInput.jsx +29 -0
- package/src/components/TwoColumnInput.module.css +32 -0
- package/src/components/ViewFull.js +139 -0
- package/src/components/ViewFull.module.css +71 -0
- package/src/components/ViewWidget.js +62 -0
- package/src/components/ViewWidget.module.css +28 -0
- package/src/components/iconCategories.js +135 -0
- package/src/components/iconImports.js +409 -0
- package/src/components/index.js +61 -0
- package/src/components/listing/FileListItem.jsx +86 -0
- package/src/components/listing/GalleryDisplay.jsx +331 -0
- package/src/components/listing/GalleryDisplay.module.css +309 -0
- package/src/components/listing/ListingCTAInput.jsx +82 -0
- package/src/components/listing/ListingDescriptionInput.jsx +73 -0
- package/src/components/listing/ListingField.jsx +101 -0
- package/src/components/listing/ListingField.module.css +106 -0
- package/src/components/listing/ListingFileInput.jsx +255 -0
- package/src/components/listing/ListingFileInput.module.css +192 -0
- package/src/components/listing/ListingForm.jsx +90 -0
- package/src/components/listing/ListingForm.module.css +38 -0
- package/src/components/listing/ListingGalleryInput.jsx +236 -0
- package/src/components/listing/ListingGalleryInput.module.css +131 -0
- package/src/components/listing/ListingImageInput.jsx +153 -0
- package/src/components/listing/ListingTextInput.jsx +72 -0
- package/src/feature.config.js +130 -0
- package/src/helper/index.js +135 -0
- package/src/hooks/useFeatureDefinitionLoader.js +62 -0
- package/src/images/full.png +0 -0
- package/src/images/fullNoTitle.png +0 -0
- package/src/images/previewWidget.png +0 -0
- package/src/images/widget.png +0 -0
- package/src/index.js +38 -0
- package/src/pages/CreateListingPage.jsx +49 -0
- package/src/pages/EditListingPage.jsx +58 -0
- package/src/reducers/featureBuilderReducer.js +744 -0
- package/src/screens/CreateListing.module.css +45 -0
- package/src/screens/Form.module.css +734 -0
- package/src/screens/FormFieldsStep.jsx +689 -0
- package/src/screens/FormLayoutStep.jsx +445 -0
- package/src/screens/FormOverviewStep.jsx +396 -0
- package/src/screens/ListingScreen.jsx +478 -0
- package/src/screens/ListingScreen.module.css +333 -0
- package/src/selectors/featureBuilderSelectors.js +529 -0
- package/src/types/index.js +91 -0
- package/src/utils/textUtils.js +89 -0
- package/src/validators/galleryValidators.js +345 -0
- package/src/values.config.a.js +49 -0
- package/src/values.config.b.js +49 -0
- package/src/values.config.c.js +49 -0
- package/src/values.config.d.js +49 -0
- package/src/values.config.js +49 -0
- package/src/webapi/featureDefinitionActions.js +0 -0
- package/src/webapi/featuresActions.js +90 -0
- package/src/webapi/helper.js +4 -0
- package/src/webapi/index.js +12 -0
- package/src/webapi/listingActions.js +176 -0
|
@@ -0,0 +1,734 @@
|
|
|
1
|
+
.content {
|
|
2
|
+
flex: 1 1 auto;
|
|
3
|
+
display: flex;
|
|
4
|
+
flex-flow: column nowrap;
|
|
5
|
+
padding: 2rem 0 3rem 0; /* Add proper top/bottom padding */
|
|
6
|
+
min-height: 100%; /* Ensure full height for proper spacing */
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
/* New page wrapper for centered container approach */
|
|
10
|
+
.pageWrapper {
|
|
11
|
+
padding: 2rem 0;
|
|
12
|
+
display: flex;
|
|
13
|
+
flex-direction: column;
|
|
14
|
+
justify-content: flex-start;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
@media (min-width: 768px) {
|
|
18
|
+
.pageWrapper {
|
|
19
|
+
padding: 3rem 0;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/* Form container styling when using CenteredContainer */
|
|
24
|
+
.formContainer {
|
|
25
|
+
background-color: var(--bg-white);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/* Section styling */
|
|
29
|
+
.section {
|
|
30
|
+
margin-bottom: 2rem;
|
|
31
|
+
padding: 0 0 2em;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.section--no-border {
|
|
35
|
+
border-bottom: none;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.subtitle {
|
|
39
|
+
color: var(--text-bluegrey, #6c7a90);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.sectionHeader {
|
|
43
|
+
display: flex;
|
|
44
|
+
justify-content: space-between;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/* Add Field Button styling */
|
|
48
|
+
.addFieldButton {
|
|
49
|
+
background: var(--colour-branding-action, #5c90df);
|
|
50
|
+
color: white;
|
|
51
|
+
border: none;
|
|
52
|
+
padding: 0.75rem 1.5rem;
|
|
53
|
+
border-radius: 6px;
|
|
54
|
+
font-size: 1rem;
|
|
55
|
+
cursor: pointer;
|
|
56
|
+
margin-bottom: 2rem;
|
|
57
|
+
transition: all 0.2s ease;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.addFieldButton:hover {
|
|
61
|
+
background: var(--colour-branding-action-hover, #364196);
|
|
62
|
+
transform: translateY(-1px);
|
|
63
|
+
box-shadow: 0 2px 4px rgba(92, 144, 223, 0.3);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.addFieldButton:focus {
|
|
67
|
+
outline: 2px solid var(--colour-branding-action, #5c90df);
|
|
68
|
+
outline-offset: 2px;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.addFieldButton:active {
|
|
72
|
+
transform: translateY(0);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/* Refresh button styling */
|
|
76
|
+
.refreshButton {
|
|
77
|
+
margin-left: 10px;
|
|
78
|
+
padding: 2px 8px;
|
|
79
|
+
font-size: 12px;
|
|
80
|
+
background: var(--colour-dusk, #536280);
|
|
81
|
+
color: white;
|
|
82
|
+
border: none;
|
|
83
|
+
border-radius: 4px;
|
|
84
|
+
cursor: pointer;
|
|
85
|
+
transition: background-color 0.2s ease;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.refreshButton:hover {
|
|
89
|
+
background: var(--colour-dusk-hover, #485968);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/* Error message container */
|
|
93
|
+
.errorMessageContainer {
|
|
94
|
+
display: flex;
|
|
95
|
+
align-items: center;
|
|
96
|
+
gap: 0.5rem;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/* Add Field Container - matches field structure */
|
|
100
|
+
.addFieldContainer {
|
|
101
|
+
display: flex;
|
|
102
|
+
margin-top: 32px;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
.fieldNumberContainer {
|
|
106
|
+
display: flex;
|
|
107
|
+
width: 40px;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/* Add Field Section */
|
|
111
|
+
.addFieldSection {
|
|
112
|
+
display: flex;
|
|
113
|
+
gap: 1rem;
|
|
114
|
+
align-items: center;
|
|
115
|
+
justify-content: flex-start; /* Align to start to match field content */
|
|
116
|
+
margin-top: 0; /* Remove top margin since it's in the container */
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/* Desktop: horizontal layout for field selector and button */
|
|
120
|
+
@media (min-width: 769px) {
|
|
121
|
+
.addFieldSection {
|
|
122
|
+
flex-direction: row;
|
|
123
|
+
align-items: baseline;
|
|
124
|
+
gap: 2rem;
|
|
125
|
+
align-items: flex-start;
|
|
126
|
+
justify-content: flex-start; /* Align to start to match field content */
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/* Help Section for Popup */
|
|
131
|
+
.helpSection {
|
|
132
|
+
background-color: var(--colour-branding-action-superlight);
|
|
133
|
+
border: 1px solid var(--colour-branding-inactive);
|
|
134
|
+
border-radius: 8px;
|
|
135
|
+
padding: 1.5rem;
|
|
136
|
+
margin-bottom: 1.5rem;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
.helpTitle {
|
|
140
|
+
color: var(--text-dark);
|
|
141
|
+
font-weight: 600;
|
|
142
|
+
margin-bottom: 0.75rem;
|
|
143
|
+
display: flex;
|
|
144
|
+
align-items: center;
|
|
145
|
+
gap: 0.5rem;
|
|
146
|
+
font-size: 1.25rem;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
.helpText {
|
|
150
|
+
color: var(--colour-branding-action);
|
|
151
|
+
line-height: 1.6;
|
|
152
|
+
font-size: 1.25rem;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/* Field Type Cards for Popup */
|
|
156
|
+
.fieldTypeCards {
|
|
157
|
+
display: flex;
|
|
158
|
+
flex-direction: column;
|
|
159
|
+
gap: 1rem; /* Spacing between vertical cards */
|
|
160
|
+
padding: 1rem 0;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/* Responsive layout: maintain vertical layout on all screen sizes */
|
|
164
|
+
@media (min-width: 768px) {
|
|
165
|
+
.fieldTypeCards {
|
|
166
|
+
gap: 1.5rem; /* Slightly larger gap on desktop */
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
.fieldTypeCard {
|
|
171
|
+
display: flex;
|
|
172
|
+
flex-direction: row;
|
|
173
|
+
align-items: flex-start;
|
|
174
|
+
padding: 1.75rem 1.25rem; /* More vertical padding */
|
|
175
|
+
border: 1px solid var(--border-line-grey);
|
|
176
|
+
border-radius: 8px;
|
|
177
|
+
background-color: var(--bg-white);
|
|
178
|
+
cursor: pointer;
|
|
179
|
+
transition: all 0.2s ease;
|
|
180
|
+
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
|
|
181
|
+
min-height: 120px; /* Adjust height for horizontal layout */
|
|
182
|
+
gap: 1rem; /* Space between icon and content */
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
.fieldTypeCard:hover {
|
|
186
|
+
border-color: var(--text-light);
|
|
187
|
+
background-color: var(--bg-bluegrey);
|
|
188
|
+
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
.fieldTypeCard:focus {
|
|
192
|
+
outline: 2px solid var(--text-light);
|
|
193
|
+
outline-offset: 2px;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
.fieldTypeCard:active {
|
|
197
|
+
transform: scale(0.98);
|
|
198
|
+
transition: transform 0.1s ease;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
.fieldTypeCardIcon {
|
|
202
|
+
display: flex;
|
|
203
|
+
align-items: center;
|
|
204
|
+
justify-content: center;
|
|
205
|
+
width: 48px;
|
|
206
|
+
height: 48px;
|
|
207
|
+
margin-bottom: 0; /* Remove bottom margin for horizontal layout */
|
|
208
|
+
font-size: 20px;
|
|
209
|
+
flex-shrink: 0;
|
|
210
|
+
border: 1px solid var(--border-line-grey); /* Subtle border */
|
|
211
|
+
border-radius: 8px;
|
|
212
|
+
background-color: var(--bg-bluegrey);
|
|
213
|
+
padding: 8px;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
.fieldTypeCardContent {
|
|
218
|
+
flex: 1;
|
|
219
|
+
width: 100%;
|
|
220
|
+
min-width: 0; /* Prevent content from overflowing */
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
.fieldTypeCardTitle {
|
|
224
|
+
margin: 0 0 0.25rem 0;
|
|
225
|
+
font-weight: 600;
|
|
226
|
+
font-size: 1.4rem; /* Increased for better readability */
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
.fieldTypeCardDescription {
|
|
230
|
+
margin: 0 0 0.75rem 0;
|
|
231
|
+
font-size: 1.6rem; /* Increased for better readability */
|
|
232
|
+
line-height: 1.5; /* Improved line height for better readability */
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
.fieldTypeCardUseCase {
|
|
236
|
+
margin: 0;
|
|
237
|
+
font-size: 1.4rem;
|
|
238
|
+
font-style: italic;
|
|
239
|
+
color: var(--text-light);
|
|
240
|
+
padding-top: 0.5rem;
|
|
241
|
+
border-top: 1px solid var(--border-line-grey);
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/* Field selector and button container - horizontal layout */
|
|
245
|
+
.addFieldSection> div:first-child {
|
|
246
|
+
display: flex;
|
|
247
|
+
flex-direction: column;
|
|
248
|
+
gap: 0.5rem;
|
|
249
|
+
flex: 1;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
/* Container for add field button alignment */
|
|
253
|
+
.addFieldButtonContainer {
|
|
254
|
+
display: flex;
|
|
255
|
+
align-items: center;
|
|
256
|
+
justify-content: flex-end;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
/* Empty State */
|
|
260
|
+
.emptyState {
|
|
261
|
+
padding: 2rem;
|
|
262
|
+
text-align: center;
|
|
263
|
+
background-color: var(--bg-bluegrey, #f4f7f9);
|
|
264
|
+
border-radius: 8px;
|
|
265
|
+
border: 1px dashed var(--border-line-grey, #dbddf1);
|
|
266
|
+
margin-bottom: 1rem;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
.emptyStateText {
|
|
270
|
+
color: var(--text-bluegrey, #6c7a90);
|
|
271
|
+
font-style: italic;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
.fieldTypeSelector {
|
|
275
|
+
display: flex;
|
|
276
|
+
flex-direction: column;
|
|
277
|
+
max-width: 500px; /* Increased from 300px to accommodate longer text */
|
|
278
|
+
width: 100%;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
@media (max-width: 768px) {
|
|
282
|
+
.addFieldSection {
|
|
283
|
+
align-items: stretch;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
.fieldTypeSelector {
|
|
287
|
+
max-width: none;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
.grid__four {
|
|
292
|
+
max-width: 1200px;
|
|
293
|
+
display: grid;
|
|
294
|
+
grid-template-columns: repeat(2, minmax(250px, 1fr));
|
|
295
|
+
margin: 2rem 0;
|
|
296
|
+
gap: 2rem;
|
|
297
|
+
justify-items: center;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
@media (max-width: 768px) {
|
|
301
|
+
.grid__four {
|
|
302
|
+
grid-template-columns: 1fr;
|
|
303
|
+
gap: 2rem;
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
/* Navigation styles */
|
|
308
|
+
.navigation {
|
|
309
|
+
display: flex;
|
|
310
|
+
justify-content: space-between;
|
|
311
|
+
gap: 1rem;
|
|
312
|
+
margin-top: 3rem; /* Increase from 2rem */
|
|
313
|
+
padding-top: 2rem;
|
|
314
|
+
padding-bottom: 2rem; /* Add bottom padding */
|
|
315
|
+
border-top: 1px solid #e9ecef;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
/* Single button alignment - align to right for overview step save button */
|
|
319
|
+
.navigation> :only-child {
|
|
320
|
+
margin-left: auto;
|
|
321
|
+
margin-right: 0;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
/* Two button alignment - one left, one right */
|
|
325
|
+
.navigation> :first-child:not(:only-child) {
|
|
326
|
+
margin-right: auto;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
.navigation> :last-child:not(:only-child) {
|
|
330
|
+
margin-left: auto;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
/* Special case for overview step - align save button to right */
|
|
334
|
+
.overviewStep .navigation> :only-child {
|
|
335
|
+
margin-left: auto;
|
|
336
|
+
margin-right: 0;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
.previousButton {
|
|
340
|
+
background: #6c757d;
|
|
341
|
+
color: white;
|
|
342
|
+
border: none;
|
|
343
|
+
padding: 0.75rem 1.5rem;
|
|
344
|
+
border-radius: 6px;
|
|
345
|
+
font-size: 1rem;
|
|
346
|
+
cursor: pointer;
|
|
347
|
+
transition: all 0.2s ease;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
.previousButton:hover {
|
|
351
|
+
background: #5a6268;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
.saveButton {
|
|
355
|
+
background: var(--colour-purple, #6e79c5);
|
|
356
|
+
color: white;
|
|
357
|
+
border: none;
|
|
358
|
+
padding: 0.75rem 2rem;
|
|
359
|
+
border-radius: 6px;
|
|
360
|
+
font-size: 1rem;
|
|
361
|
+
font-weight: 500;
|
|
362
|
+
cursor: pointer;
|
|
363
|
+
transition: all 0.2s ease;
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
.saveButton:hover:not(:disabled) {
|
|
367
|
+
background: var(--colour-purple-hover, #5a66b3);
|
|
368
|
+
transform: translateY(-1px);
|
|
369
|
+
box-shadow: 0 2px 4px rgba(110, 121, 197, 0.3);
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
.saveButton:focus {
|
|
373
|
+
outline: 2px solid var(--colour-purple, #6e79c5);
|
|
374
|
+
outline-offset: 2px;
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
.saveButton:disabled {
|
|
378
|
+
background: #6c757d;
|
|
379
|
+
cursor: not-allowed;
|
|
380
|
+
opacity: 0.65;
|
|
381
|
+
transform: none;
|
|
382
|
+
box-shadow: none;
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
.nextButton {
|
|
386
|
+
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
387
|
+
color: white;
|
|
388
|
+
border: none;
|
|
389
|
+
padding: 0.75rem 2rem;
|
|
390
|
+
border-radius: 6px;
|
|
391
|
+
font-size: 1rem;
|
|
392
|
+
font-weight: 500;
|
|
393
|
+
cursor: pointer;
|
|
394
|
+
transition: all 0.2s ease;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
.nextButton:hover:not(:disabled) {
|
|
398
|
+
transform: translateY(-2px);
|
|
399
|
+
box-shadow: 0 4px 12px rgba(102, 126, 234, 0.4);
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
.nextButton:disabled {
|
|
403
|
+
background: #6c757d;
|
|
404
|
+
cursor: not-allowed;
|
|
405
|
+
opacity: 0.65;
|
|
406
|
+
transform: none;
|
|
407
|
+
box-shadow: none;
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
|
|
411
|
+
|
|
412
|
+
.errorMessage {
|
|
413
|
+
color: var(--colour-red);
|
|
414
|
+
margin: 0.25rem 0;
|
|
415
|
+
padding: 0.25rem 0;
|
|
416
|
+
font-size: 0.875rem;
|
|
417
|
+
line-height: 1.4;
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
/* Layout option styles */
|
|
421
|
+
.layoutOption {
|
|
422
|
+
display: flex;
|
|
423
|
+
flex-direction: column;
|
|
424
|
+
align-items: center;
|
|
425
|
+
text-align: center;
|
|
426
|
+
cursor: pointer;
|
|
427
|
+
transition: all 0.2s ease;
|
|
428
|
+
background-color: transparent;
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
.layoutOptionImage {
|
|
432
|
+
width: 250px;
|
|
433
|
+
height: 250px;
|
|
434
|
+
border-radius: 12px;
|
|
435
|
+
overflow: hidden;
|
|
436
|
+
margin-bottom: 1rem;
|
|
437
|
+
border: 2px solid var(--border-line-grey, #dbddf1);
|
|
438
|
+
transition: all 0.2s ease;
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
.layoutOption.selected .layoutOptionImage {
|
|
442
|
+
border-color: var(--border-line-grey, #dbddf1);
|
|
443
|
+
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
.layoutOptionImg {
|
|
447
|
+
width: 100%;
|
|
448
|
+
height: 100%;
|
|
449
|
+
object-fit: cover;
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
.layoutOptionContent {
|
|
453
|
+
max-width: 250px;
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
.layoutOptionTitle {
|
|
457
|
+
font-size: 1.6rem;
|
|
458
|
+
font-weight: 600;
|
|
459
|
+
margin: 0 0 0.5rem 0;
|
|
460
|
+
line-height: 1.3;
|
|
461
|
+
color: #333;
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
.layoutOptionDescription {
|
|
465
|
+
font-size: 1.2rem;
|
|
466
|
+
margin: 0;
|
|
467
|
+
line-height: 1.3;
|
|
468
|
+
color: #6c757d;
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
.layoutOption.hasError .layoutOptionImage {
|
|
472
|
+
border-color: var(--colour-red, #dc3545);
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
/* Field error styles */
|
|
476
|
+
.fieldError {
|
|
477
|
+
color: #dc3545;
|
|
478
|
+
font-size: 1.6rem;
|
|
479
|
+
font-weight: 500;
|
|
480
|
+
margin-top: 0.5rem;
|
|
481
|
+
display: flex;
|
|
482
|
+
align-items: center;
|
|
483
|
+
gap: 0.25rem;
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
.errorIcon {
|
|
487
|
+
font-size: 1rem;
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
/* Field wrapper styles are now handled in Fields.module.css */
|
|
491
|
+
|
|
492
|
+
/* Field type indicator styles are now handled in Fields.module.css */
|
|
493
|
+
|
|
494
|
+
@keyframes errorShake {
|
|
495
|
+
0%, 100% { transform: translateX(0); }
|
|
496
|
+
25% { transform: translateX(-3px); }
|
|
497
|
+
75% { transform: translateX(3px); }
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
@keyframes errorPulse {
|
|
501
|
+
0% {
|
|
502
|
+
box-shadow: 0 1px 3px rgba(192, 39, 67, 0.1), 0 1px 2px rgba(192, 39, 67, 0.08);
|
|
503
|
+
}
|
|
504
|
+
50% {
|
|
505
|
+
box-shadow: 0 2px 6px rgba(192, 39, 67, 0.2), 0 1px 3px rgba(192, 39, 67, 0.15);
|
|
506
|
+
}
|
|
507
|
+
100% {
|
|
508
|
+
box-shadow: 0 1px 3px rgba(192, 39, 67, 0.1), 0 1px 2px rgba(192, 39, 67, 0.08);
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
.successMessage {
|
|
513
|
+
background: var(--colour-branding-secondary-light);
|
|
514
|
+
border: 1px solid var(--colour-branding-secondary);
|
|
515
|
+
border-radius: 8px;
|
|
516
|
+
padding: 1rem;
|
|
517
|
+
margin-top: 1rem;
|
|
518
|
+
color: var(--colour-green);
|
|
519
|
+
font-weight: 500;
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
/* Mode-aware styling */
|
|
523
|
+
.createMode {
|
|
524
|
+
color: var(--colour-purple, #6e79c5);
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
.editMode {
|
|
528
|
+
color: var(--colour-branding-dark, #364196);
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
/* Responsive Design */
|
|
532
|
+
@media (max-width: 768px) {
|
|
533
|
+
.content {
|
|
534
|
+
padding: 1.5rem 0 2.5rem 0; /* Maintain proper padding on mobile */
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
.section {
|
|
538
|
+
margin-bottom: 1.5rem;
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
/* Mobile: vertical layout for field selector and button */
|
|
542
|
+
.addFieldSection {
|
|
543
|
+
flex-direction: column;
|
|
544
|
+
align-items: stretch; /* Stretch to fill available space */
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
/* Button should not be full width on mobile */
|
|
548
|
+
.addFieldSection Button {
|
|
549
|
+
width: auto; /* Let button use its natural width */
|
|
550
|
+
padding: 1rem 1.5rem; /* Keep proper padding but not full width */
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
.addFieldButtonContainer {
|
|
554
|
+
align-items: stretch;
|
|
555
|
+
justify-content: stretch;
|
|
556
|
+
min-height: auto;
|
|
557
|
+
}
|
|
558
|
+
|
|
559
|
+
.navigation {
|
|
560
|
+
flex-direction: column;
|
|
561
|
+
gap: 0.75rem;
|
|
562
|
+
justify-content: flex-start; /* Align to start on mobile */
|
|
563
|
+
margin-top: 2rem; /* Slightly reduce on mobile */
|
|
564
|
+
padding-top: 1.5rem;
|
|
565
|
+
padding-bottom: 1.5rem; /* Maintain bottom padding */
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
/* Mobile button alignment - single button aligns right, two buttons stack */
|
|
569
|
+
.navigation> :only-child {
|
|
570
|
+
margin-left: auto;
|
|
571
|
+
margin-right: 0;
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
.navigation> :first-child:not(:only-child),
|
|
575
|
+
.navigation> :last-child:not(:only-child) {
|
|
576
|
+
margin-left: 0;
|
|
577
|
+
margin-right: 0;
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
.previousButton,
|
|
581
|
+
.nextButton,
|
|
582
|
+
.saveButton {
|
|
583
|
+
width: 100%;
|
|
584
|
+
padding: 1rem;
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
@media (max-width: 480px) {
|
|
589
|
+
.content {
|
|
590
|
+
padding: 1rem 0 2rem 0; /* Still maintain padding on small screens */
|
|
591
|
+
}
|
|
592
|
+
|
|
593
|
+
.section {
|
|
594
|
+
margin-bottom: 1rem;
|
|
595
|
+
}
|
|
596
|
+
|
|
597
|
+
.navigation {
|
|
598
|
+
margin-top: 1.5rem; /* Further reduce on very small screens */
|
|
599
|
+
padding-top: 1rem;
|
|
600
|
+
padding-bottom: 1.5rem;
|
|
601
|
+
justify-content: flex-start; /* Align to start on small screens */
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
/* Small screen button alignment */
|
|
605
|
+
.navigation> :only-child {
|
|
606
|
+
margin-left: auto;
|
|
607
|
+
margin-right: 0;
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
.navigation> :first-child:not(:only-child),
|
|
611
|
+
.navigation> :last-child:not(:only-child) {
|
|
612
|
+
margin-left: 0;
|
|
613
|
+
margin-right: 0;
|
|
614
|
+
}
|
|
615
|
+
|
|
616
|
+
.errorMessageContainer {
|
|
617
|
+
flex-direction: column;
|
|
618
|
+
align-items: flex-start;
|
|
619
|
+
gap: 0.75rem;
|
|
620
|
+
}
|
|
621
|
+
|
|
622
|
+
.refreshButton {
|
|
623
|
+
align-self: flex-end;
|
|
624
|
+
}
|
|
625
|
+
}
|
|
626
|
+
|
|
627
|
+
/* Full width content when sidebar is hidden */
|
|
628
|
+
:global(.hub-contentWrapper.fullWidthContent) {
|
|
629
|
+
max-width: 1000px;
|
|
630
|
+
margin: 0 auto;
|
|
631
|
+
padding: 2rem;
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
.hub-contentWrapper--col {
|
|
635
|
+
flex-flow: column;
|
|
636
|
+
}
|
|
637
|
+
|
|
638
|
+
/* Validation error message - displayed at top of form */
|
|
639
|
+
.validationErrorMessage {
|
|
640
|
+
background-color: var(--colour-branding-secondary-light);
|
|
641
|
+
border: 1px solid var(--colour-branding-secondary);
|
|
642
|
+
border-radius: 6px;
|
|
643
|
+
color: var(--colour-red);
|
|
644
|
+
padding: 12px 16px;
|
|
645
|
+
font-weight: 500;
|
|
646
|
+
font-size: 14px;
|
|
647
|
+
display: flex;
|
|
648
|
+
align-items: center;
|
|
649
|
+
gap: 8px;
|
|
650
|
+
margin: 24px 32px;
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
.validationErrorMessage::before {
|
|
654
|
+
content: "⚠";
|
|
655
|
+
font-size: 16px;
|
|
656
|
+
color: var(--colour-red);
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
/* Loading overlay for forms - deprecated, use SkeletonLoader instead */
|
|
660
|
+
/*
|
|
661
|
+
.loadingOverlay {
|
|
662
|
+
position: absolute;
|
|
663
|
+
top: 0;
|
|
664
|
+
left: 0;
|
|
665
|
+
right: 0;
|
|
666
|
+
bottom: 0;
|
|
667
|
+
background: rgba(255, 255, 255, 0.95);
|
|
668
|
+
backdrop-filter: blur(2px);
|
|
669
|
+
display: flex;
|
|
670
|
+
align-items: center;
|
|
671
|
+
justify-content: center;
|
|
672
|
+
z-index: 10;
|
|
673
|
+
border-radius: 8px;
|
|
674
|
+
animation: fadeIn 0.2s ease-in-out;
|
|
675
|
+
}
|
|
676
|
+
|
|
677
|
+
@keyframes fadeIn {
|
|
678
|
+
from { opacity: 0; }
|
|
679
|
+
to { opacity: 1; }
|
|
680
|
+
}
|
|
681
|
+
*/
|
|
682
|
+
|
|
683
|
+
/* Form header with buttons */
|
|
684
|
+
.formHeader {
|
|
685
|
+
display: flex;
|
|
686
|
+
justify-content: space-between;
|
|
687
|
+
align-items: flex-start;
|
|
688
|
+
margin-bottom: 16px;
|
|
689
|
+
}
|
|
690
|
+
|
|
691
|
+
/* Loading container for fields */
|
|
692
|
+
.fieldsLoadingContainer {
|
|
693
|
+
text-align: center;
|
|
694
|
+
padding: 60px 20px;
|
|
695
|
+
}
|
|
696
|
+
|
|
697
|
+
/* Help note styling */
|
|
698
|
+
.helpNote {
|
|
699
|
+
font-size: 13px;
|
|
700
|
+
color: #6c757d;
|
|
701
|
+
}
|
|
702
|
+
|
|
703
|
+
/* Loading container for overview */
|
|
704
|
+
.overviewLoadingContainer {
|
|
705
|
+
text-align: center;
|
|
706
|
+
padding: 60px 20px;
|
|
707
|
+
}
|
|
708
|
+
|
|
709
|
+
/* Form layout header */
|
|
710
|
+
.formLayoutHeader {
|
|
711
|
+
display: flex;
|
|
712
|
+
justify-content: space-between;
|
|
713
|
+
align-items: flex-start;
|
|
714
|
+
margin-bottom: 16px;
|
|
715
|
+
}
|
|
716
|
+
|
|
717
|
+
/* Section margins */
|
|
718
|
+
.gridIconSection {
|
|
719
|
+
margin-bottom: 3rem;
|
|
720
|
+
}
|
|
721
|
+
|
|
722
|
+
.layoutSection {
|
|
723
|
+
margin-bottom: 2rem;
|
|
724
|
+
}
|
|
725
|
+
|
|
726
|
+
/* Grid icon loading state */
|
|
727
|
+
.gridIconLoading {
|
|
728
|
+
grid-column: 1 / -1;
|
|
729
|
+
}
|
|
730
|
+
|
|
731
|
+
/* Hide upload button in grid icon section */
|
|
732
|
+
.gridIconSection :global(.iconLoader__buttonOverlay button:first-child) {
|
|
733
|
+
display: none !important;
|
|
734
|
+
}
|