@kitconcept/volto-light-theme 7.0.0-beta.6 → 7.0.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/.changelog.draft CHANGED
@@ -1,7 +1,8 @@
1
- ## 7.0.0-beta.6 (2025-09-22)
1
+ ## 7.0.0 (2025-09-25)
2
2
 
3
3
  ### Bugfix
4
4
 
5
- - Fix styles for H3 headings in slate grids. @danalvrz
5
+ - Ensure the Refresh Content button correctly loads the preview image when using preview_image_link for Slider block. @iFlameing
6
+ - Last german literal fix: ALT-Text. @sneridagh
6
7
 
7
8
 
package/CHANGELOG.md CHANGED
@@ -8,6 +8,25 @@
8
8
 
9
9
  <!-- towncrier release notes start -->
10
10
 
11
+ ## 7.0.0 (2025-09-25)
12
+
13
+ ### Bugfix
14
+
15
+ - Ensure the Refresh Content button correctly loads the preview image when using preview_image_link for Slider block. @iFlameing
16
+ - Last german literal fix: ALT-Text. @sneridagh
17
+
18
+ ## 7.0.0-beta.7 (2025-09-24)
19
+
20
+ ### Feature
21
+
22
+ - Make it possible for custom Summary components to disable being linked. @davisagli
23
+
24
+ ### Bugfix
25
+
26
+ - Enable add block button in accordion block @iRohitSingh [#668](https://github.com/kitconcept/volto-light-theme/pull/668)
27
+ - Safely check for `voltolighttheme.theme` behavior on Theming component. @ericof [#671](https://github.com/kitconcept/volto-light-theme/pull/671)
28
+ - Fix styles for person listing in Search block grid variation. @danalvrz
29
+
11
30
  ## 7.0.0-beta.6 (2025-09-22)
12
31
 
13
32
  ### Bugfix
@@ -67,7 +67,7 @@ msgstr "Ausrichtung"
67
67
  #: components/Widgets/schema/footerLogosSchema
68
68
  #: components/Widgets/schema/iconLinkListSchema
69
69
  msgid "Alt text"
70
- msgstr "Alternative Text"
70
+ msgstr "ALT-Text"
71
71
 
72
72
  #. Default: "Ascending"
73
73
  #: components/Blocks/EventCalendar/Search/components/SortOn
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kitconcept/volto-light-theme",
3
- "version": "7.0.0-beta.6",
3
+ "version": "7.0.0",
4
4
  "description": "Volto Light Theme by kitconcept",
5
5
  "main": "src/index.ts",
6
6
  "types": "src/index.ts",
@@ -31,6 +31,7 @@ const DefaultTemplate = ({ items, linkTitle, linkHref, isEditMode }) => {
31
31
  name: 'Summary',
32
32
  dependencies: [item['@type']],
33
33
  }).component || DefaultSummary;
34
+ const showLink = !Summary.hideLink && !isEditMode;
34
35
  return (
35
36
  <div
36
37
  className={cx('listing-item', {
@@ -38,7 +39,7 @@ const DefaultTemplate = ({ items, linkTitle, linkHref, isEditMode }) => {
38
39
  })}
39
40
  key={item['@id']}
40
41
  >
41
- <Card href={!isEditMode ? item['@id'] : null}>
42
+ <Card href={showLink ? item['@id'] : null}>
42
43
  <Card.Summary>
43
44
  <Summary item={item} HeadingTag="h2" />
44
45
  </Card.Summary>
@@ -26,18 +26,19 @@ const GridTemplate = ({ items, linkTitle, linkHref, isEditMode }) => {
26
26
  <>
27
27
  <div className="items">
28
28
  {items.map((item) => {
29
- const ItemBodyTemplate = (props) => {
30
- const CustomItemBodyTemplate = config.getComponent({
31
- name: 'GridListingItemTemplate',
29
+ const CustomItemBodyTemplate = config.getComponent({
30
+ name: 'GridListingItemTemplate',
31
+ dependencies: [item['@type']],
32
+ }).component;
33
+ const Summary =
34
+ config.getComponent({
35
+ name: 'Summary',
32
36
  dependencies: [item['@type']],
33
- }).component;
34
- const Summary =
35
- config.getComponent({
36
- name: 'Summary',
37
- dependencies: [item['@type']],
38
- }).component || DefaultSummary;
37
+ }).component || DefaultSummary;
38
+ const showLink = !Summary.hideLink && !isEditMode;
39
39
 
40
- return CustomItemBodyTemplate ? (
40
+ const ItemBodyTemplate = (props) =>
41
+ CustomItemBodyTemplate ? (
41
42
  <CustomItemBodyTemplate item={item} />
42
43
  ) : (
43
44
  <>
@@ -53,7 +54,7 @@ const GridTemplate = ({ items, linkTitle, linkHref, isEditMode }) => {
53
54
  </Card.Summary>
54
55
  </>
55
56
  );
56
- };
57
+
57
58
  return (
58
59
  <div
59
60
  className={cx('listing-item', {
@@ -61,7 +62,7 @@ const GridTemplate = ({ items, linkTitle, linkHref, isEditMode }) => {
61
62
  })}
62
63
  key={item['@id']}
63
64
  >
64
- <Card href={!isEditMode ? item['@id'] : null}>
65
+ <Card href={showLink ? item['@id'] : null}>
65
66
  <ItemBodyTemplate item={item} />
66
67
  </Card>
67
68
  </div>
@@ -34,7 +34,7 @@ const SummaryTemplate = ({ items, linkTitle, linkHref, isEditMode }) => {
34
34
  name: 'Summary',
35
35
  dependencies: [item['@type']],
36
36
  }).component || DefaultSummary;
37
-
37
+ const showLink = !Summary.hideLink && !isEditMode;
38
38
  const ItemBodyTemplate = (props) =>
39
39
  CustomItemBodyTemplate ? (
40
40
  <CustomItemBodyTemplate item={item} />
@@ -57,7 +57,7 @@ const SummaryTemplate = ({ items, linkTitle, linkHref, isEditMode }) => {
57
57
  })}
58
58
  key={item['@id']}
59
59
  >
60
- <Card href={!isEditMode ? item['@id'] : null}>
60
+ <Card href={showLink ? item['@id'] : null}>
61
61
  <ItemBodyTemplate item={item} />
62
62
  </Card>
63
63
  </div>
@@ -28,6 +28,16 @@ const messages = defineMessages({
28
28
  },
29
29
  });
30
30
 
31
+ function getImageField(resp) {
32
+ if (!resp) return null;
33
+
34
+ if (resp.preview_image_link) return 'preview_image_link';
35
+ if (resp.preview_image) return 'preview_image';
36
+ if (resp.image) return 'image';
37
+
38
+ return null;
39
+ }
40
+
31
41
  const SliderData = (props) => {
32
42
  const {
33
43
  block,
@@ -48,16 +58,20 @@ const SliderData = (props) => {
48
58
  '@type': resp?.['@type'],
49
59
  Description: resp?.description,
50
60
  Title: resp.title,
51
- hasPreviewImage: resp?.preview_image ? true : false,
61
+ hasPreviewImage: getImageField(resp) ? true : false,
52
62
  head_title: resp.head_title ?? null,
53
- image_field: resp?.preview_image
54
- ? 'preview_image'
55
- : resp?.image
56
- ? 'image'
57
- : null,
63
+ image_field: getImageField(resp),
58
64
  image_scales: {
59
65
  preview_image: [resp?.preview_image],
60
66
  image: [resp?.image],
67
+ preview_image_link: resp?.preview_image_link
68
+ ? [
69
+ {
70
+ ...resp?.preview_image_link?.['image_scales']?.image?.[0],
71
+ base_path: resp?.preview_image_link?.['@id'],
72
+ },
73
+ ]
74
+ : [],
61
75
  },
62
76
  title: resp.title,
63
77
  };
@@ -1,5 +1,6 @@
1
1
  import { isInternalURL } from '@plone/volto/helpers/Url/Url';
2
2
  import DefaultSummary from '@kitconcept/volto-light-theme/components/Summary/DefaultSummary';
3
+ import type { SummaryComponentType } from '@kitconcept/volto-light-theme/components/Summary/DefaultSummary';
3
4
  import Card from '../../../primitives/Card/Card';
4
5
  import config from '@plone/volto/registry';
5
6
 
@@ -10,11 +11,11 @@ const TeaserDefaultTemplate = (props) => {
10
11
  const url = data.preview_image?.[0]?.['@id'];
11
12
 
12
13
  const Image = config.getComponent('Image').component;
13
- const Summary =
14
- config.getComponent({
15
- name: 'Summary',
16
- dependencies: [href['@type']],
17
- }).component || DefaultSummary;
14
+ const Summary = (config.getComponent({
15
+ name: 'Summary',
16
+ dependencies: [href['@type']],
17
+ }).component || DefaultSummary) as SummaryComponentType;
18
+ const showLink = !Summary.hideLink && !isEditMode;
18
19
  const { openExternalLinkInNewTab } = config.settings;
19
20
  const openLinkInNewTab =
20
21
  data.openLinkInNewTab ||
@@ -23,7 +24,7 @@ const TeaserDefaultTemplate = (props) => {
23
24
 
24
25
  return (
25
26
  <Card
26
- href={!isEditMode ? href['@id'] : null}
27
+ href={showLink ? href['@id'] : null}
27
28
  openLinkInNewTab={openLinkInNewTab}
28
29
  >
29
30
  <Card.Image
@@ -8,6 +8,10 @@ export type DefaultSummaryProps = {
8
8
  hide_description?: boolean;
9
9
  };
10
10
 
11
+ export type SummaryComponentType = React.ComponentType<DefaultSummaryProps> & {
12
+ hideLink?: boolean;
13
+ };
14
+
11
15
  const DefaultSummary = (props: DefaultSummaryProps) => {
12
16
  const { item, HeadingTag = 'h3', a11yLabelId, hide_description } = props;
13
17
  return (
@@ -20,5 +24,6 @@ const DefaultSummary = (props: DefaultSummaryProps) => {
20
24
  </>
21
25
  );
22
26
  };
27
+ DefaultSummary.hideLink = false;
23
28
 
24
29
  export default DefaultSummary;
@@ -48,7 +48,7 @@ const Theming = ({ content }: { content: Content }) => {
48
48
  const addingFromInherited =
49
49
  location.pathname.endsWith('/add') &&
50
50
  flattenToAppURL(
51
- content?.['@components']?.inherit?.['voltolighttheme.theme'].from['@id'],
51
+ content?.['@components']?.inherit?.['voltolighttheme.theme']?.from['@id'],
52
52
  ) === getBaseUrl(location.pathname);
53
53
 
54
54
  let liveContent;
@@ -5,6 +5,9 @@
5
5
 
6
6
  .accordion-block,
7
7
  .block-editor-accordion {
8
+ .block-add-button {
9
+ display: block !important;
10
+ }
8
11
  .ui.styled.accordion {
9
12
  border-top: 1px solid $black;
10
13
 
@@ -77,7 +77,9 @@
77
77
 
78
78
  .search-input {
79
79
  position: relative;
80
+ display: block;
80
81
  height: 75px;
82
+ padding-right: $spacing-xlarge;
81
83
  background-color: $secondary-grey;
82
84
 
83
85
  .ui.input {
@@ -3,8 +3,8 @@
3
3
  transition: box-shadow 0.15s ease;
4
4
  }
5
5
 
6
- .card:has(a):hover,
7
- .card:has(a):focus-within {
6
+ .card:has(> a):hover,
7
+ .card:has(> a):focus-within {
8
8
  cursor: pointer;
9
9
  }
10
10
 
@@ -227,37 +227,72 @@ body .block.gridBlock .contained .person-teaser .card-inner {
227
227
  .description {
228
228
  margin-bottom: $spacing-small;
229
229
  }
230
+
231
+ .summary-extra-info.email {
232
+ a {
233
+ width: auto;
234
+ }
235
+ svg.icon {
236
+ margin-right: 8px;
237
+ }
238
+ }
230
239
  }
231
240
  }
232
- }
233
241
 
234
- .block.listing.grid .listing-item.person-listing {
235
- .card {
236
- background: var(--theme-color);
237
- }
238
- .image-wrapper {
239
- margin: 0 auto;
240
- }
241
- .listing-item {
242
- &,
243
- & a {
244
- align-items: inherit;
242
+ &:not(.grid) .listing-item.person-listing {
243
+ .summary-room-phone {
244
+ justify-content: flex-start;
245
+ gap: 0;
246
+ .summary-extra-info {
247
+ &:not(:last-child)::after {
248
+ margin: 0 7px 0 10px;
249
+ content: '|';
250
+ }
251
+ }
245
252
  }
246
253
  }
247
- .card-summary {
248
- padding-right: 0px !important;
249
- padding-left: 0px !important;
250
- text-align: center;
254
+ }
251
255
 
252
- .description {
253
- margin-bottom: $spacing-small !important;
256
+ .block.listing.grid,
257
+ .block.search.grid {
258
+ .listing-item.person-listing {
259
+ .card {
260
+ background: var(--theme-color);
254
261
  }
255
- }
262
+ .image-wrapper {
263
+ margin: 0 auto;
264
+ }
265
+ .listing-item {
266
+ &,
267
+ & a {
268
+ align-items: inherit;
269
+ }
270
+ }
271
+ .card-summary {
272
+ padding-right: 0px !important;
273
+ padding-left: 0px !important;
274
+ text-align: center;
256
275
 
257
- .summary-extra-info,
258
- .summary-room-phone {
259
- display: inline-flex;
260
- justify-content: center;
276
+ .description {
277
+ margin-bottom: $spacing-small !important;
278
+ }
279
+ }
280
+
281
+ .summary-extra-info {
282
+ justify-content: center;
283
+ }
284
+ .summary-room-phone {
285
+ display: inline-flex;
286
+ }
287
+
288
+ .summary-extra-info.email {
289
+ svg.icon {
290
+ margin-right: 10px;
291
+ }
292
+ a {
293
+ width: auto;
294
+ }
295
+ }
261
296
  }
262
297
  }
263
298
 
@@ -308,10 +343,13 @@ body.person-squared-images,
308
343
  }
309
344
  }
310
345
  }
311
- .block.listing .listing-item.person-listing .card-summary {
312
- .summary-room-phone {
313
- flex-direction: column;
314
- gap: 0;
346
+ .block.listing,
347
+ .block.search {
348
+ .listing-item.person-listing .card-summary {
349
+ .summary-room-phone {
350
+ flex-direction: column;
351
+ gap: 0;
352
+ }
315
353
  }
316
354
  }
317
355
  }