@delmaredigital/payload-puck 0.1.2 → 0.2.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/LICENSE +21 -73
- package/README.md +78 -22
- package/dist/AccordionClient.d.mts +1 -1
- package/dist/AccordionClient.d.ts +1 -1
- package/dist/AccordionClient.js +2 -2
- package/dist/AccordionClient.mjs +2 -2
- package/dist/AnimatedWrapper.d.mts +1 -1
- package/dist/AnimatedWrapper.d.ts +1 -1
- package/dist/components/index.d.mts +15 -18
- package/dist/components/index.d.ts +15 -18
- package/dist/components/index.js +305 -198
- package/dist/components/index.mjs +305 -198
- package/dist/config/config.editor.d.mts +1 -1
- package/dist/config/config.editor.d.ts +1 -1
- package/dist/config/config.editor.js +292 -194
- package/dist/config/config.editor.mjs +292 -194
- package/dist/config/index.js +214 -123
- package/dist/config/index.mjs +214 -123
- package/dist/editor/index.js +221 -129
- package/dist/editor/index.mjs +221 -129
- package/dist/fields/index.d.mts +2 -2
- package/dist/fields/index.d.ts +2 -2
- package/dist/fields/index.js +43 -24
- package/dist/fields/index.mjs +43 -24
- package/dist/render/index.js +214 -123
- package/dist/render/index.mjs +214 -123
- package/dist/{shared-DeNKN95N.d.mts → shared-X9UpCJKW.d.mts} +3 -1
- package/dist/{shared-DeNKN95N.d.ts → shared-X9UpCJKW.d.ts} +3 -1
- package/package.json +4 -3
package/LICENSE
CHANGED
|
@@ -1,73 +1,21 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
## Changes and New Works License
|
|
24
|
-
|
|
25
|
-
The licensor grants you an additional copyright license to make changes and new works based on the software for any permitted purpose.
|
|
26
|
-
|
|
27
|
-
## Patent License
|
|
28
|
-
|
|
29
|
-
The licensor grants you a patent license for the software that covers patent claims the licensor can license, or becomes able to license, that you would infringe by using the software.
|
|
30
|
-
|
|
31
|
-
## Noncommercial Purposes
|
|
32
|
-
|
|
33
|
-
Any noncommercial purpose is a permitted purpose.
|
|
34
|
-
|
|
35
|
-
## Personal Uses
|
|
36
|
-
|
|
37
|
-
Personal use for research, experiment, and testing for the benefit of public knowledge, personal study, private entertainment, hobby projects, amateur pursuits, or religious observance, without any anticipated commercial application, is use for a permitted purpose.
|
|
38
|
-
|
|
39
|
-
## Noncommercial Organizations
|
|
40
|
-
|
|
41
|
-
Use by any charitable organization, educational institution, public research organization, public safety or health organization, environmental protection organization, or government institution is use for a permitted purpose regardless of the source of funding or obligations resulting from the funding.
|
|
42
|
-
|
|
43
|
-
## Fair Use
|
|
44
|
-
|
|
45
|
-
You may have "fair use" rights for the software under the law. These terms do not limit them.
|
|
46
|
-
|
|
47
|
-
## No Other Rights
|
|
48
|
-
|
|
49
|
-
These terms do not allow you to sublicense or transfer any of your licenses to anyone else, or prevent the licensor from granting licenses to anyone else. These terms do not imply any other licenses.
|
|
50
|
-
|
|
51
|
-
## Patent Defense
|
|
52
|
-
|
|
53
|
-
If you make any written claim that the software infringes or contributes to infringement of any patent, your patent license for the software granted under these terms ends immediately. If your company makes such a claim, your patent license ends immediately for work on behalf of your company.
|
|
54
|
-
|
|
55
|
-
## Violations
|
|
56
|
-
|
|
57
|
-
The first time you are notified in writing that you have violated any of these terms, or done anything with the software not covered by your licenses, your licenses can nonetheless continue if you come into full compliance with these terms, and take practical steps to correct past violations, within 32 days of receiving notice. Otherwise, all your licenses end immediately.
|
|
58
|
-
|
|
59
|
-
## No Liability
|
|
60
|
-
|
|
61
|
-
***As far as the law allows, the software comes as is, without any warranty or condition, and the licensor will not be liable to you for any damages arising out of these terms or the use or nature of the software, under any kind of legal claim.***
|
|
62
|
-
|
|
63
|
-
## Definitions
|
|
64
|
-
|
|
65
|
-
The **licensor** is the individual or entity offering these terms, and the **software** is the software the licensor makes available under these terms.
|
|
66
|
-
|
|
67
|
-
**You** refers to the individual or entity agreeing to these terms.
|
|
68
|
-
|
|
69
|
-
**Your company** is any legal entity, sole proprietorship, or other kind of organization that you work for, plus all organizations that have control over, are under the control of, or are under common control with that organization. **Control** means ownership of substantially all the assets of an entity, or the power to direct its management and policies by vote, contract, or otherwise. Control can be direct or indirect.
|
|
70
|
-
|
|
71
|
-
**Your licenses** are all the licenses granted to you for the software under these terms.
|
|
72
|
-
|
|
73
|
-
**Use** means anything you do with the software requiring one of your licenses.
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Delmare Digital
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -17,6 +17,7 @@ A PayloadCMS plugin for integrating [Puck](https://puckeditor.com) visual page b
|
|
|
17
17
|
- [Theming](#theming)
|
|
18
18
|
- [Layouts](#layouts)
|
|
19
19
|
- [API Routes](#api-routes)
|
|
20
|
+
- [SEO Fields](#seo-fields)
|
|
20
21
|
- [Plugin Options](#plugin-options)
|
|
21
22
|
- [Hybrid Integration](#hybrid-integration)
|
|
22
23
|
- [License](#license)
|
|
@@ -1363,6 +1364,82 @@ createPuckApiRoutesWithId({
|
|
|
1363
1364
|
|
|
1364
1365
|
---
|
|
1365
1366
|
|
|
1367
|
+
<details>
|
|
1368
|
+
<summary><strong>SEO Fields</strong> — Robots meta, sitemap integration</summary>
|
|
1369
|
+
|
|
1370
|
+
The plugin adds SEO-related fields to each page in the `meta` group:
|
|
1371
|
+
|
|
1372
|
+
| Field | Type | Description |
|
|
1373
|
+
|-------|------|-------------|
|
|
1374
|
+
| `meta.title` | text | Page title for search engines |
|
|
1375
|
+
| `meta.description` | textarea | Meta description |
|
|
1376
|
+
| `meta.image` | upload | Social sharing image |
|
|
1377
|
+
| `meta.noindex` | checkbox | Prevent search engine indexing |
|
|
1378
|
+
| `meta.nofollow` | checkbox | Prevent search engines from following links |
|
|
1379
|
+
| `meta.excludeFromSitemap` | checkbox | Exclude page from XML sitemap |
|
|
1380
|
+
|
|
1381
|
+
**These fields are not automatically wired to your frontend.** You need to implement them based on your setup.
|
|
1382
|
+
|
|
1383
|
+
### Robots Meta (Next.js App Router)
|
|
1384
|
+
|
|
1385
|
+
In your page's `generateMetadata` function:
|
|
1386
|
+
|
|
1387
|
+
```typescript
|
|
1388
|
+
// app/(frontend)/[...slug]/page.tsx
|
|
1389
|
+
export async function generateMetadata({ params }): Promise<Metadata> {
|
|
1390
|
+
const page = await getPage(params.slug)
|
|
1391
|
+
|
|
1392
|
+
return {
|
|
1393
|
+
title: page.meta?.title || page.title,
|
|
1394
|
+
description: page.meta?.description,
|
|
1395
|
+
robots: {
|
|
1396
|
+
index: !page.meta?.noindex,
|
|
1397
|
+
follow: !page.meta?.nofollow,
|
|
1398
|
+
},
|
|
1399
|
+
}
|
|
1400
|
+
}
|
|
1401
|
+
```
|
|
1402
|
+
|
|
1403
|
+
### Dynamic Sitemap
|
|
1404
|
+
|
|
1405
|
+
Filter out pages marked as excluded in your `sitemap.ts`:
|
|
1406
|
+
|
|
1407
|
+
```typescript
|
|
1408
|
+
// app/sitemap.ts
|
|
1409
|
+
import type { MetadataRoute } from 'next'
|
|
1410
|
+
import { getPayload } from 'payload'
|
|
1411
|
+
import config from '@payload-config'
|
|
1412
|
+
|
|
1413
|
+
export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
|
|
1414
|
+
const baseUrl = 'https://yoursite.com'
|
|
1415
|
+
const payload = await getPayload({ config })
|
|
1416
|
+
|
|
1417
|
+
const { docs: pages } = await payload.find({
|
|
1418
|
+
collection: 'pages',
|
|
1419
|
+
limit: 1000,
|
|
1420
|
+
where: {
|
|
1421
|
+
or: [
|
|
1422
|
+
{ 'meta.excludeFromSitemap': { equals: false } },
|
|
1423
|
+
{ 'meta.excludeFromSitemap': { exists: false } },
|
|
1424
|
+
],
|
|
1425
|
+
},
|
|
1426
|
+
select: {
|
|
1427
|
+
slug: true,
|
|
1428
|
+
updatedAt: true,
|
|
1429
|
+
},
|
|
1430
|
+
})
|
|
1431
|
+
|
|
1432
|
+
return pages.map((page) => ({
|
|
1433
|
+
url: `${baseUrl}/${page.slug}`,
|
|
1434
|
+
lastModified: new Date(page.updatedAt),
|
|
1435
|
+
}))
|
|
1436
|
+
}
|
|
1437
|
+
```
|
|
1438
|
+
|
|
1439
|
+
</details>
|
|
1440
|
+
|
|
1441
|
+
---
|
|
1442
|
+
|
|
1366
1443
|
<details>
|
|
1367
1444
|
<summary><strong>Plugin Options</strong> — Collection config, access control</summary>
|
|
1368
1445
|
|
|
@@ -1584,25 +1661,4 @@ export default async function Page({ params }) {
|
|
|
1584
1661
|
|
|
1585
1662
|
## License
|
|
1586
1663
|
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
### What This Means
|
|
1590
|
-
|
|
1591
|
-
**✅ Free for:**
|
|
1592
|
-
- Personal projects and hobby use
|
|
1593
|
-
- Open source projects
|
|
1594
|
-
- Educational and research purposes
|
|
1595
|
-
- Evaluation and testing
|
|
1596
|
-
- Nonprofit organizations
|
|
1597
|
-
- Government institutions
|
|
1598
|
-
|
|
1599
|
-
**💼 Commercial use:**
|
|
1600
|
-
Requires a separate commercial license. If you're using this in a commercial product or service, please contact us for licensing options.
|
|
1601
|
-
|
|
1602
|
-
**📧 Commercial Licensing:** [hello@delmaredigital.com](mailto:hello@delmaredigital.com)
|
|
1603
|
-
|
|
1604
|
-
---
|
|
1605
|
-
|
|
1606
|
-
## About
|
|
1607
|
-
|
|
1608
|
-
Built by [Delmare Digital](https://delmaredigital.com) — custom software solutions for growing businesses.
|
|
1664
|
+
MIT
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
-
import { C as ColorValue, P as PaddingValue, B as BackgroundValue, D as DimensionsValue, T as TransformValue, A as AnimationValue } from './shared-
|
|
2
|
+
import { C as ColorValue, P as PaddingValue, B as BackgroundValue, D as DimensionsValue, T as TransformValue, A as AnimationValue } from './shared-X9UpCJKW.mjs';
|
|
3
3
|
import 'react';
|
|
4
4
|
import '@measured/puck';
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
-
import { C as ColorValue, P as PaddingValue, B as BackgroundValue, D as DimensionsValue, T as TransformValue, A as AnimationValue } from './shared-
|
|
2
|
+
import { C as ColorValue, P as PaddingValue, B as BackgroundValue, D as DimensionsValue, T as TransformValue, A as AnimationValue } from './shared-X9UpCJKW.js';
|
|
3
3
|
import 'react';
|
|
4
4
|
import '@measured/puck';
|
|
5
5
|
|
package/dist/AccordionClient.js
CHANGED
|
@@ -767,9 +767,9 @@ function AccordionClient({
|
|
|
767
767
|
Object.assign(style, transformStyles);
|
|
768
768
|
}
|
|
769
769
|
if (!items || items.length === 0) {
|
|
770
|
-
return /* @__PURE__ */ jsxRuntime.jsx(AnimatedWrapper, { animation, children: /* @__PURE__ */ jsxRuntime.jsx("div", {
|
|
770
|
+
return /* @__PURE__ */ jsxRuntime.jsx(AnimatedWrapper, { animation, children: /* @__PURE__ */ jsxRuntime.jsx("div", { style: Object.keys(style).length > 0 ? style : void 0, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: accordionClasses, style: accordionStyle, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-4 text-center text-muted-foreground", children: "No accordion items. Add items in the editor." }) }) }) });
|
|
771
771
|
}
|
|
772
|
-
return /* @__PURE__ */ jsxRuntime.jsx(AnimatedWrapper, { animation, children: /* @__PURE__ */ jsxRuntime.jsx("div", {
|
|
772
|
+
return /* @__PURE__ */ jsxRuntime.jsx(AnimatedWrapper, { animation, children: /* @__PURE__ */ jsxRuntime.jsx("div", { style: Object.keys(style).length > 0 ? style : void 0, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: accordionClasses, style: accordionStyle, children: items.map((item, index) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
773
773
|
AccordionItem,
|
|
774
774
|
{
|
|
775
775
|
item,
|
package/dist/AccordionClient.mjs
CHANGED
|
@@ -765,9 +765,9 @@ function AccordionClient({
|
|
|
765
765
|
Object.assign(style, transformStyles);
|
|
766
766
|
}
|
|
767
767
|
if (!items || items.length === 0) {
|
|
768
|
-
return /* @__PURE__ */ jsx(AnimatedWrapper, { animation, children: /* @__PURE__ */ jsx("div", {
|
|
768
|
+
return /* @__PURE__ */ jsx(AnimatedWrapper, { animation, children: /* @__PURE__ */ jsx("div", { style: Object.keys(style).length > 0 ? style : void 0, children: /* @__PURE__ */ jsx("div", { className: accordionClasses, style: accordionStyle, children: /* @__PURE__ */ jsx("div", { className: "p-4 text-center text-muted-foreground", children: "No accordion items. Add items in the editor." }) }) }) });
|
|
769
769
|
}
|
|
770
|
-
return /* @__PURE__ */ jsx(AnimatedWrapper, { animation, children: /* @__PURE__ */ jsx("div", {
|
|
770
|
+
return /* @__PURE__ */ jsx(AnimatedWrapper, { animation, children: /* @__PURE__ */ jsx("div", { style: Object.keys(style).length > 0 ? style : void 0, children: /* @__PURE__ */ jsx("div", { className: accordionClasses, style: accordionStyle, children: items.map((item, index) => /* @__PURE__ */ jsx(
|
|
771
771
|
AccordionItem,
|
|
772
772
|
{
|
|
773
773
|
item,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import { ReactNode, CSSProperties, ElementType } from 'react';
|
|
3
|
-
import { A as AnimationValue } from './shared-
|
|
3
|
+
import { A as AnimationValue } from './shared-X9UpCJKW.mjs';
|
|
4
4
|
import '@measured/puck';
|
|
5
5
|
|
|
6
6
|
interface AnimatedWrapperProps {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import { ReactNode, CSSProperties, ElementType } from 'react';
|
|
3
|
-
import { A as AnimationValue } from './shared-
|
|
3
|
+
import { A as AnimationValue } from './shared-X9UpCJKW.js';
|
|
4
4
|
import '@measured/puck';
|
|
5
5
|
|
|
6
6
|
interface AnimatedWrapperProps {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ComponentConfig } from '@measured/puck';
|
|
2
|
-
import { R as ResponsiveValue, D as DimensionsValue, P as PaddingValue, V as VisibilityValue } from '../shared-
|
|
2
|
+
import { R as ResponsiveValue, D as DimensionsValue, P as PaddingValue, V as VisibilityValue } from '../shared-X9UpCJKW.mjs';
|
|
3
3
|
export { AnimatedWrapper, AnimatedWrapperProps } from '../AnimatedWrapper.mjs';
|
|
4
4
|
import 'react/jsx-runtime';
|
|
5
5
|
import 'react';
|
|
@@ -7,18 +7,15 @@ import 'react';
|
|
|
7
7
|
/**
|
|
8
8
|
* Container Component - Puck Configuration
|
|
9
9
|
*
|
|
10
|
-
*
|
|
10
|
+
* Simple organizational wrapper for grouping content.
|
|
11
11
|
* Uses Puck's slot system for nesting other components.
|
|
12
|
-
* Uses Tailwind classes for layout, inline styles for dynamic user values.
|
|
13
12
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* - Inner (Content): innerBackground, innerPadding, innerBorder (applies to max-width container)
|
|
13
|
+
* For two-layer layouts (full-bleed background with constrained content),
|
|
14
|
+
* use the Section component instead.
|
|
17
15
|
*
|
|
18
16
|
* Responsive Controls:
|
|
19
|
-
* - dimensions: Different max-width at different breakpoints
|
|
20
|
-
* -
|
|
21
|
-
* - innerPadding: Different inner padding at different breakpoints
|
|
17
|
+
* - dimensions: Different max-width/min-height at different breakpoints
|
|
18
|
+
* - padding: Different padding at different breakpoints
|
|
22
19
|
* - margin: Different margins at different breakpoints
|
|
23
20
|
* - visibility: Show/hide at different breakpoints
|
|
24
21
|
*/
|
|
@@ -65,18 +62,18 @@ declare const GridConfig: ComponentConfig;
|
|
|
65
62
|
/**
|
|
66
63
|
* Section Component - Puck Configuration
|
|
67
64
|
*
|
|
68
|
-
* Full-width section with
|
|
69
|
-
*
|
|
70
|
-
*
|
|
65
|
+
* Full-width section with two-layer architecture:
|
|
66
|
+
* - Section layer (outer): Full-bleed background, border, padding, margin
|
|
67
|
+
* - Content layer (inner): Constrained content area with max-width, background, border, padding
|
|
71
68
|
*
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
* - Advanced: customPadding, customWidth, border
|
|
69
|
+
* This design enables common patterns like hero sections with full-bleed backgrounds
|
|
70
|
+
* but centered content.
|
|
75
71
|
*
|
|
76
72
|
* Responsive Controls:
|
|
77
|
-
* -
|
|
78
|
-
* -
|
|
79
|
-
* -
|
|
73
|
+
* - contentDimensions: Different max-width/min-height at different breakpoints
|
|
74
|
+
* - sectionPadding: Different section padding at different breakpoints
|
|
75
|
+
* - contentPadding: Different content padding at different breakpoints
|
|
76
|
+
* - sectionMargin: Different margins at different breakpoints
|
|
80
77
|
* - visibility: Show/hide at different breakpoints
|
|
81
78
|
*/
|
|
82
79
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ComponentConfig } from '@measured/puck';
|
|
2
|
-
import { R as ResponsiveValue, D as DimensionsValue, P as PaddingValue, V as VisibilityValue } from '../shared-
|
|
2
|
+
import { R as ResponsiveValue, D as DimensionsValue, P as PaddingValue, V as VisibilityValue } from '../shared-X9UpCJKW.js';
|
|
3
3
|
export { AnimatedWrapper, AnimatedWrapperProps } from '../AnimatedWrapper.js';
|
|
4
4
|
import 'react/jsx-runtime';
|
|
5
5
|
import 'react';
|
|
@@ -7,18 +7,15 @@ import 'react';
|
|
|
7
7
|
/**
|
|
8
8
|
* Container Component - Puck Configuration
|
|
9
9
|
*
|
|
10
|
-
*
|
|
10
|
+
* Simple organizational wrapper for grouping content.
|
|
11
11
|
* Uses Puck's slot system for nesting other components.
|
|
12
|
-
* Uses Tailwind classes for layout, inline styles for dynamic user values.
|
|
13
12
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* - Inner (Content): innerBackground, innerPadding, innerBorder (applies to max-width container)
|
|
13
|
+
* For two-layer layouts (full-bleed background with constrained content),
|
|
14
|
+
* use the Section component instead.
|
|
17
15
|
*
|
|
18
16
|
* Responsive Controls:
|
|
19
|
-
* - dimensions: Different max-width at different breakpoints
|
|
20
|
-
* -
|
|
21
|
-
* - innerPadding: Different inner padding at different breakpoints
|
|
17
|
+
* - dimensions: Different max-width/min-height at different breakpoints
|
|
18
|
+
* - padding: Different padding at different breakpoints
|
|
22
19
|
* - margin: Different margins at different breakpoints
|
|
23
20
|
* - visibility: Show/hide at different breakpoints
|
|
24
21
|
*/
|
|
@@ -65,18 +62,18 @@ declare const GridConfig: ComponentConfig;
|
|
|
65
62
|
/**
|
|
66
63
|
* Section Component - Puck Configuration
|
|
67
64
|
*
|
|
68
|
-
* Full-width section with
|
|
69
|
-
*
|
|
70
|
-
*
|
|
65
|
+
* Full-width section with two-layer architecture:
|
|
66
|
+
* - Section layer (outer): Full-bleed background, border, padding, margin
|
|
67
|
+
* - Content layer (inner): Constrained content area with max-width, background, border, padding
|
|
71
68
|
*
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
* - Advanced: customPadding, customWidth, border
|
|
69
|
+
* This design enables common patterns like hero sections with full-bleed backgrounds
|
|
70
|
+
* but centered content.
|
|
75
71
|
*
|
|
76
72
|
* Responsive Controls:
|
|
77
|
-
* -
|
|
78
|
-
* -
|
|
79
|
-
* -
|
|
73
|
+
* - contentDimensions: Different max-width/min-height at different breakpoints
|
|
74
|
+
* - sectionPadding: Different section padding at different breakpoints
|
|
75
|
+
* - contentPadding: Different content padding at different breakpoints
|
|
76
|
+
* - sectionMargin: Different margins at different breakpoints
|
|
80
77
|
* - visibility: Show/hide at different breakpoints
|
|
81
78
|
*/
|
|
82
79
|
|