@simple-builder/react 1.3.4 → 1.3.7

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.
@@ -1,5 +1,7 @@
1
1
  'use client';
2
2
  'use client';
3
+ 'use client';
4
+ 'use client';
3
5
  'use strict';
4
6
 
5
7
  require('./chunk-CJNSRJNF.js');
@@ -4,6 +4,8 @@
4
4
  'use client';
5
5
  'use client';
6
6
  'use client';
7
+ 'use client';
8
+ 'use client';
7
9
  'use strict';
8
10
 
9
11
  require('./chunk-WA7TKN6M.js');
@@ -7,6 +7,8 @@
7
7
  'use client';
8
8
  'use client';
9
9
  'use client';
10
+ 'use client';
11
+ 'use client';
10
12
  'use strict';
11
13
 
12
14
  require('./chunk-4TVSMCQU.js');
@@ -0,0 +1,20 @@
1
+ import { BuilderProvider, useBuilder, Button } from './chunk-XLE7GSYM.mjs';
2
+ import { BuildContainer } from './chunk-6GCUWI4L.mjs';
3
+ import * as React2 from 'react';
4
+
5
+ var BuilderHeader = () => {
6
+ const { save } = useBuilder();
7
+ return /* @__PURE__ */ React2.createElement("div", { className: "sb:grid sb:grid-cols-3 sb:gap-4 sb:items-center sb:p-2 sb:shadow-lg sb:sticky sb:inset-x-0 sb:top-0 sb:bg-background sb:z-30" }, /* @__PURE__ */ React2.createElement("div", { className: "sb:flex sb:gap-4 sb:items-center" }, /* @__PURE__ */ React2.createElement(Button, { variant: "ghost", size: "sm", onClick: save }, "Opslaan")));
8
+ };
9
+
10
+ // src/components/builder-content.tsx
11
+ var BuilderContent = (props) => {
12
+ return /* @__PURE__ */ React2.createElement(BuilderProvider, { content: props.content }, /* @__PURE__ */ React2.createElement(BuilderContentInner, null));
13
+ };
14
+ var BuilderContentInner = () => {
15
+ const { content } = useBuilder();
16
+ return /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement(BuilderHeader, null), /* @__PURE__ */ React2.createElement(BuildContainer, { name: "root", edit: true, multiple: true, content }));
17
+ };
18
+ var builder_content_default = BuilderContent;
19
+
20
+ export { builder_content_default as default };
@@ -0,0 +1,42 @@
1
+ 'use strict';
2
+
3
+ var chunkRNGHWAPZ_js = require('./chunk-RNGHWAPZ.js');
4
+ var chunkNUDE6YTK_js = require('./chunk-NUDE6YTK.js');
5
+ var React2 = require('react');
6
+
7
+ function _interopNamespace(e) {
8
+ if (e && e.__esModule) return e;
9
+ var n = Object.create(null);
10
+ if (e) {
11
+ Object.keys(e).forEach(function (k) {
12
+ if (k !== 'default') {
13
+ var d = Object.getOwnPropertyDescriptor(e, k);
14
+ Object.defineProperty(n, k, d.get ? d : {
15
+ enumerable: true,
16
+ get: function () { return e[k]; }
17
+ });
18
+ }
19
+ });
20
+ }
21
+ n.default = e;
22
+ return Object.freeze(n);
23
+ }
24
+
25
+ var React2__namespace = /*#__PURE__*/_interopNamespace(React2);
26
+
27
+ var BuilderHeader = () => {
28
+ const { save } = chunkRNGHWAPZ_js.useBuilder();
29
+ return /* @__PURE__ */ React2__namespace.createElement("div", { className: "sb:grid sb:grid-cols-3 sb:gap-4 sb:items-center sb:p-2 sb:shadow-lg sb:sticky sb:inset-x-0 sb:top-0 sb:bg-background sb:z-30" }, /* @__PURE__ */ React2__namespace.createElement("div", { className: "sb:flex sb:gap-4 sb:items-center" }, /* @__PURE__ */ React2__namespace.createElement(chunkRNGHWAPZ_js.Button, { variant: "ghost", size: "sm", onClick: save }, "Opslaan")));
30
+ };
31
+
32
+ // src/components/builder-content.tsx
33
+ var BuilderContent = (props) => {
34
+ return /* @__PURE__ */ React2__namespace.createElement(chunkRNGHWAPZ_js.BuilderProvider, { content: props.content }, /* @__PURE__ */ React2__namespace.createElement(BuilderContentInner, null));
35
+ };
36
+ var BuilderContentInner = () => {
37
+ const { content } = chunkRNGHWAPZ_js.useBuilder();
38
+ return /* @__PURE__ */ React2__namespace.createElement(React2__namespace.Fragment, null, /* @__PURE__ */ React2__namespace.createElement(BuilderHeader, null), /* @__PURE__ */ React2__namespace.createElement(chunkNUDE6YTK_js.BuildContainer, { name: "root", edit: true, multiple: true, content }));
39
+ };
40
+ var builder_content_default = BuilderContent;
41
+
42
+ module.exports = builder_content_default;
@@ -0,0 +1,135 @@
1
+ import * as React3 from 'react';
2
+ import { createElement } from 'react';
3
+ import NextImage from 'next/image';
4
+ import { clsx } from 'clsx';
5
+ import { extendTailwindMerge } from 'tailwind-merge';
6
+ import { createTV } from 'tailwind-variants';
7
+
8
+ // src/lib/builder.ts
9
+ var Builder = class _Builder {
10
+ static instance;
11
+ components = [];
12
+ constructor() {
13
+ }
14
+ static getInstance() {
15
+ if (!_Builder.instance) {
16
+ _Builder.instance = new _Builder();
17
+ }
18
+ return _Builder.instance;
19
+ }
20
+ register(component, config) {
21
+ if (this.components.find(({ name }) => name === config.name)) {
22
+ console.log(
23
+ `[simple-builder]: Component ${config.name} already registered.`
24
+ );
25
+ return;
26
+ }
27
+ this.components.push({
28
+ component,
29
+ ...config
30
+ });
31
+ }
32
+ getComponents() {
33
+ return this.components;
34
+ }
35
+ getComponent(name) {
36
+ return this.components.find((c) => c.name === name);
37
+ }
38
+ bindComponent({ content, ...block }, edit) {
39
+ const component = this.components.find(
40
+ ({ name }) => name === block.component
41
+ );
42
+ if (!component) {
43
+ throw new Error(
44
+ `[simple-builder]: Component ${block.component} not found`
45
+ );
46
+ }
47
+ const Element = createElement(component.component, {
48
+ key: block.id,
49
+ builder: { id: block.id, content, edit },
50
+ ...block.props
51
+ });
52
+ return Element;
53
+ }
54
+ };
55
+ var builder = Builder.getInstance();
56
+ var Image = (props) => {
57
+ if (typeof NextImage !== "undefined") {
58
+ return /* @__PURE__ */ React3.createElement(NextImage, { ...props });
59
+ }
60
+ return /* @__PURE__ */ React3.createElement("img", { ...props });
61
+ };
62
+ var twMerge = extendTailwindMerge({
63
+ prefix: "sb-"
64
+ });
65
+ function cn(...inputs) {
66
+ return twMerge(clsx(inputs));
67
+ }
68
+ var tv = createTV({
69
+ twMergeConfig: {
70
+ prefix: "sb-"
71
+ }
72
+ });
73
+ var insertAt = (items, index, item) => {
74
+ return Array.isArray(items) ? [...items.slice(0, index), item, ...items.slice(index)] : [item];
75
+ };
76
+
77
+ // src/components/design-wrapper.tsx
78
+ var DesignWrapper = (props) => {
79
+ const { children, className, building = false } = props;
80
+ const { background } = props.styles?.desktop ?? {};
81
+ const matches = typeof background === "string" ? background.match(/url\(["']?(.*?)["']?\)/) : void 0;
82
+ const src = matches ? matches[1] : void 0;
83
+ const desktopStyles = props.styles?.desktop ?? {};
84
+ const mobileStyles = props.styles?.mobile ?? {};
85
+ const container = props.styles?.container ?? true;
86
+ const hidden = props.styles?.hidden ?? "never";
87
+ const id = React3.useId().replace(/[^a-zA-Z0-9]/g, "");
88
+ let hiddenClass = "";
89
+ switch (hidden) {
90
+ case "always":
91
+ hiddenClass = building ? "sb:opacity-30" : "sb:hidden";
92
+ break;
93
+ case "mobile":
94
+ hiddenClass = building ? "sb:max-md:opacity-30" : "sb:max-md:hidden";
95
+ break;
96
+ case "desktop":
97
+ hiddenClass = building ? "sb:md:opacity-30" : "sb:md:hidden";
98
+ break;
99
+ case "never":
100
+ hiddenClass = "";
101
+ break;
102
+ }
103
+ return /* @__PURE__ */ React3.createElement("div", { id, className: cn("sb:relative", className, hiddenClass) }, src && /* @__PURE__ */ React3.createElement(
104
+ Image,
105
+ {
106
+ src,
107
+ alt: "",
108
+ fill: true,
109
+ className: "sb:object-cover sb:absolute sb:inset-0 sb:pointer-events-none sb:-z-1"
110
+ }
111
+ ), container ? /* @__PURE__ */ React3.createElement("div", { className: "container sb:mx-auto" }, children) : children, /* @__PURE__ */ React3.createElement("style", null, `
112
+ #${id} {
113
+ ${Object.entries(desktopStyles).filter(([key]) => !(key === "background" && src)).map(([key, value]) => `${key}: ${value};`).join(" ")}
114
+ }
115
+
116
+ @media (max-width: 1024px) {
117
+ #${id} {
118
+ ${Object.entries(mobileStyles).filter(([key]) => !(key === "background" && src)).map(([key, value]) => `${key}: ${value}; `).join(" ")}
119
+ }
120
+ }
121
+ `.replace(/\s\s+/g, " ")));
122
+ };
123
+ var BuildContainerInner = React3.lazy(
124
+ () => import('./build-container-client-XAQDWWKB.mjs')
125
+ );
126
+ var BuildContainer = (props) => {
127
+ const { content, edit, name } = props;
128
+ const items = Array.isArray(content) ? content : content?.[name] || [];
129
+ if (!edit) {
130
+ return items.map((item) => /* @__PURE__ */ React3.createElement(DesignWrapper, { key: item.id, styles: item.styles }, builder.bindComponent(item, true)));
131
+ }
132
+ return /* @__PURE__ */ React3.createElement(React3.Suspense, { fallback: /* @__PURE__ */ React3.createElement("div", null, "Loading...") }, /* @__PURE__ */ React3.createElement(BuildContainerInner, { ...props }));
133
+ };
134
+
135
+ export { BuildContainer, DesignWrapper, Image, builder, cn, insertAt, tv };
@@ -0,0 +1,20 @@
1
+ import { BuildContainer } from './chunk-6GCUWI4L.mjs';
2
+ import * as React from 'react';
3
+ import { lazy } from 'react';
4
+
5
+ var StaticContent = (props) => {
6
+ return /* @__PURE__ */ React.createElement(
7
+ BuildContainer,
8
+ {
9
+ name: "root",
10
+ edit: false,
11
+ multiple: true,
12
+ content: props.content || []
13
+ }
14
+ );
15
+ };
16
+
17
+ // src/index.ts
18
+ var BuilderContent = lazy(() => import('./builder-content-4ZNXUE7D.mjs'));
19
+
20
+ export { BuilderContent, StaticContent };
@@ -0,0 +1,165 @@
1
+ 'use strict';
2
+
3
+ var React3 = require('react');
4
+ var NextImage = require('next/image');
5
+ var clsx = require('clsx');
6
+ var tailwindMerge = require('tailwind-merge');
7
+ var tailwindVariants = require('tailwind-variants');
8
+
9
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
10
+
11
+ function _interopNamespace(e) {
12
+ if (e && e.__esModule) return e;
13
+ var n = Object.create(null);
14
+ if (e) {
15
+ Object.keys(e).forEach(function (k) {
16
+ if (k !== 'default') {
17
+ var d = Object.getOwnPropertyDescriptor(e, k);
18
+ Object.defineProperty(n, k, d.get ? d : {
19
+ enumerable: true,
20
+ get: function () { return e[k]; }
21
+ });
22
+ }
23
+ });
24
+ }
25
+ n.default = e;
26
+ return Object.freeze(n);
27
+ }
28
+
29
+ var React3__namespace = /*#__PURE__*/_interopNamespace(React3);
30
+ var NextImage__default = /*#__PURE__*/_interopDefault(NextImage);
31
+
32
+ // src/lib/builder.ts
33
+ var Builder = class _Builder {
34
+ static instance;
35
+ components = [];
36
+ constructor() {
37
+ }
38
+ static getInstance() {
39
+ if (!_Builder.instance) {
40
+ _Builder.instance = new _Builder();
41
+ }
42
+ return _Builder.instance;
43
+ }
44
+ register(component, config) {
45
+ if (this.components.find(({ name }) => name === config.name)) {
46
+ console.log(
47
+ `[simple-builder]: Component ${config.name} already registered.`
48
+ );
49
+ return;
50
+ }
51
+ this.components.push({
52
+ component,
53
+ ...config
54
+ });
55
+ }
56
+ getComponents() {
57
+ return this.components;
58
+ }
59
+ getComponent(name) {
60
+ return this.components.find((c) => c.name === name);
61
+ }
62
+ bindComponent({ content, ...block }, edit) {
63
+ const component = this.components.find(
64
+ ({ name }) => name === block.component
65
+ );
66
+ if (!component) {
67
+ throw new Error(
68
+ `[simple-builder]: Component ${block.component} not found`
69
+ );
70
+ }
71
+ const Element = React3.createElement(component.component, {
72
+ key: block.id,
73
+ builder: { id: block.id, content, edit },
74
+ ...block.props
75
+ });
76
+ return Element;
77
+ }
78
+ };
79
+ var builder = Builder.getInstance();
80
+ var Image = (props) => {
81
+ if (typeof NextImage__default.default !== "undefined") {
82
+ return /* @__PURE__ */ React3__namespace.createElement(NextImage__default.default, { ...props });
83
+ }
84
+ return /* @__PURE__ */ React3__namespace.createElement("img", { ...props });
85
+ };
86
+ var twMerge = tailwindMerge.extendTailwindMerge({
87
+ prefix: "sb-"
88
+ });
89
+ function cn(...inputs) {
90
+ return twMerge(clsx.clsx(inputs));
91
+ }
92
+ var tv = tailwindVariants.createTV({
93
+ twMergeConfig: {
94
+ prefix: "sb-"
95
+ }
96
+ });
97
+ var insertAt = (items, index, item) => {
98
+ return Array.isArray(items) ? [...items.slice(0, index), item, ...items.slice(index)] : [item];
99
+ };
100
+
101
+ // src/components/design-wrapper.tsx
102
+ var DesignWrapper = (props) => {
103
+ const { children, className, building = false } = props;
104
+ const { background } = props.styles?.desktop ?? {};
105
+ const matches = typeof background === "string" ? background.match(/url\(["']?(.*?)["']?\)/) : void 0;
106
+ const src = matches ? matches[1] : void 0;
107
+ const desktopStyles = props.styles?.desktop ?? {};
108
+ const mobileStyles = props.styles?.mobile ?? {};
109
+ const container = props.styles?.container ?? true;
110
+ const hidden = props.styles?.hidden ?? "never";
111
+ const id = React3__namespace.useId().replace(/[^a-zA-Z0-9]/g, "");
112
+ let hiddenClass = "";
113
+ switch (hidden) {
114
+ case "always":
115
+ hiddenClass = building ? "sb:opacity-30" : "sb:hidden";
116
+ break;
117
+ case "mobile":
118
+ hiddenClass = building ? "sb:max-md:opacity-30" : "sb:max-md:hidden";
119
+ break;
120
+ case "desktop":
121
+ hiddenClass = building ? "sb:md:opacity-30" : "sb:md:hidden";
122
+ break;
123
+ case "never":
124
+ hiddenClass = "";
125
+ break;
126
+ }
127
+ return /* @__PURE__ */ React3__namespace.createElement("div", { id, className: cn("sb:relative", className, hiddenClass) }, src && /* @__PURE__ */ React3__namespace.createElement(
128
+ Image,
129
+ {
130
+ src,
131
+ alt: "",
132
+ fill: true,
133
+ className: "sb:object-cover sb:absolute sb:inset-0 sb:pointer-events-none sb:-z-1"
134
+ }
135
+ ), container ? /* @__PURE__ */ React3__namespace.createElement("div", { className: "container sb:mx-auto" }, children) : children, /* @__PURE__ */ React3__namespace.createElement("style", null, `
136
+ #${id} {
137
+ ${Object.entries(desktopStyles).filter(([key]) => !(key === "background" && src)).map(([key, value]) => `${key}: ${value};`).join(" ")}
138
+ }
139
+
140
+ @media (max-width: 1024px) {
141
+ #${id} {
142
+ ${Object.entries(mobileStyles).filter(([key]) => !(key === "background" && src)).map(([key, value]) => `${key}: ${value}; `).join(" ")}
143
+ }
144
+ }
145
+ `.replace(/\s\s+/g, " ")));
146
+ };
147
+ var BuildContainerInner = React3__namespace.lazy(
148
+ () => import('./build-container-client-RSJ4H3SB.js')
149
+ );
150
+ var BuildContainer = (props) => {
151
+ const { content, edit, name } = props;
152
+ const items = Array.isArray(content) ? content : content?.[name] || [];
153
+ if (!edit) {
154
+ return items.map((item) => /* @__PURE__ */ React3__namespace.createElement(DesignWrapper, { key: item.id, styles: item.styles }, builder.bindComponent(item, true)));
155
+ }
156
+ return /* @__PURE__ */ React3__namespace.createElement(React3__namespace.Suspense, { fallback: /* @__PURE__ */ React3__namespace.createElement("div", null, "Loading...") }, /* @__PURE__ */ React3__namespace.createElement(BuildContainerInner, { ...props }));
157
+ };
158
+
159
+ exports.BuildContainer = BuildContainer;
160
+ exports.DesignWrapper = DesignWrapper;
161
+ exports.Image = Image;
162
+ exports.builder = builder;
163
+ exports.cn = cn;
164
+ exports.insertAt = insertAt;
165
+ exports.tv = tv;
@@ -0,0 +1,42 @@
1
+ 'use strict';
2
+
3
+ var chunkNUDE6YTK_js = require('./chunk-NUDE6YTK.js');
4
+ var React = require('react');
5
+
6
+ function _interopNamespace(e) {
7
+ if (e && e.__esModule) return e;
8
+ var n = Object.create(null);
9
+ if (e) {
10
+ Object.keys(e).forEach(function (k) {
11
+ if (k !== 'default') {
12
+ var d = Object.getOwnPropertyDescriptor(e, k);
13
+ Object.defineProperty(n, k, d.get ? d : {
14
+ enumerable: true,
15
+ get: function () { return e[k]; }
16
+ });
17
+ }
18
+ });
19
+ }
20
+ n.default = e;
21
+ return Object.freeze(n);
22
+ }
23
+
24
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
25
+
26
+ var StaticContent = (props) => {
27
+ return /* @__PURE__ */ React__namespace.createElement(
28
+ chunkNUDE6YTK_js.BuildContainer,
29
+ {
30
+ name: "root",
31
+ edit: false,
32
+ multiple: true,
33
+ content: props.content || []
34
+ }
35
+ );
36
+ };
37
+
38
+ // src/index.ts
39
+ var BuilderContent = React.lazy(() => import('./builder-content-GBSIY2Z7.js'));
40
+
41
+ exports.BuilderContent = BuilderContent;
42
+ exports.StaticContent = StaticContent;