@papu1337/builder 0.0.3
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/README.md +65 -0
- package/dist/elements/auth/authElement.svelte +115 -0
- package/dist/elements/auth/authElement.svelte.d.ts +7 -0
- package/dist/elements/auth/settings.d.ts +25 -0
- package/dist/elements/auth/settings.js +63 -0
- package/dist/elements/badge/badgeElement.svelte +48 -0
- package/dist/elements/badge/badgeElement.svelte.d.ts +7 -0
- package/dist/elements/badge/settings.d.ts +13 -0
- package/dist/elements/badge/settings.js +57 -0
- package/dist/elements/banner/bannerElement.svelte +46 -0
- package/dist/elements/banner/bannerElement.svelte.d.ts +7 -0
- package/dist/elements/banner/settings.d.ts +6 -0
- package/dist/elements/banner/settings.js +15 -0
- package/dist/elements/button/buttonElement.svelte +42 -0
- package/dist/elements/button/buttonElement.svelte.d.ts +7 -0
- package/dist/elements/button/settings.d.ts +16 -0
- package/dist/elements/button/settings.js +43 -0
- package/dist/elements/cards/cardsElement.svelte +136 -0
- package/dist/elements/cards/cardsElement.svelte.d.ts +7 -0
- package/dist/elements/cards/settings.d.ts +14 -0
- package/dist/elements/cards/settings.js +52 -0
- package/dist/elements/divider/dividerElement.svelte +34 -0
- package/dist/elements/divider/dividerElement.svelte.d.ts +7 -0
- package/dist/elements/divider/settings.d.ts +7 -0
- package/dist/elements/divider/settings.js +15 -0
- package/dist/elements/globalSettings.d.ts +8 -0
- package/dist/elements/globalSettings.js +39 -0
- package/dist/elements/products/productsElement.svelte +283 -0
- package/dist/elements/products/productsElement.svelte.d.ts +7 -0
- package/dist/elements/products/settings.d.ts +16 -0
- package/dist/elements/products/settings.js +56 -0
- package/dist/elements/terms/settings.d.ts +11 -0
- package/dist/elements/terms/settings.js +39 -0
- package/dist/elements/terms/termsElement.svelte +124 -0
- package/dist/elements/terms/termsElement.svelte.d.ts +7 -0
- package/dist/elements/text/settings.d.ts +11 -0
- package/dist/elements/text/settings.js +12 -0
- package/dist/elements/text/textElement.svelte +33 -0
- package/dist/elements/text/textElement.svelte.d.ts +7 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +3 -0
- package/dist/renderer/BuilderRenderer.svelte +38 -0
- package/dist/renderer/BuilderRenderer.svelte.d.ts +4 -0
- package/dist/renderer/index.d.ts +4 -0
- package/dist/renderer/index.js +3 -0
- package/dist/renderer/registry.d.ts +4 -0
- package/dist/renderer/registry.js +20 -0
- package/dist/renderer/renderer.vanilla.es.js +2835 -0
- package/dist/renderer/renderer.vanilla.umd.js +31 -0
- package/dist/renderer/resolve.d.ts +1 -0
- package/dist/renderer/resolve.js +30 -0
- package/dist/renderer/types.d.ts +19 -0
- package/dist/renderer/types.js +1 -0
- package/dist/renderer/vanilla.svelte.d.ts +2 -0
- package/dist/renderer/vanilla.svelte.js +28 -0
- package/dist/settings/base.svelte.d.ts +30 -0
- package/dist/settings/base.svelte.js +91 -0
- package/dist/settings/components/ColorSettings.svelte +141 -0
- package/dist/settings/components/ColorSettings.svelte.d.ts +4 -0
- package/dist/settings/components/ListSettings.svelte +167 -0
- package/dist/settings/components/ListSettings.svelte.d.ts +14 -0
- package/dist/settings/components/NumberSettings.svelte +67 -0
- package/dist/settings/components/NumberSettings.svelte.d.ts +5 -0
- package/dist/settings/components/SelectSettings.svelte +64 -0
- package/dist/settings/components/SelectSettings.svelte.d.ts +5 -0
- package/dist/settings/components/SettingsGroup.svelte +94 -0
- package/dist/settings/components/SettingsGroup.svelte.d.ts +9 -0
- package/dist/settings/components/TextSettings.svelte +8 -0
- package/dist/settings/components/TextSettings.svelte.d.ts +4 -0
- package/dist/settings/components/TranslatableSettings.svelte +208 -0
- package/dist/settings/components/TranslatableSettings.svelte.d.ts +8 -0
- package/dist/settings/components/UploadSettings.svelte +185 -0
- package/dist/settings/components/UploadSettings.svelte.d.ts +4 -0
- package/dist/settings/groups.d.ts +14 -0
- package/dist/settings/groups.js +35 -0
- package/dist/settings/implementation.svelte.js +41 -0
- package/dist/settings/index.d.ts +4 -0
- package/dist/settings/index.js +4 -0
- package/dist/settings/types.d.ts +51 -0
- package/dist/settings/types.js +1 -0
- package/package.json +86 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ColorSetting, NumberSetting, TextSetting, ListSetting, Settings, type InferSettingsMapType } from '../../settings';
|
|
2
|
+
export declare const termsSettings: Settings<{
|
|
3
|
+
marginTop: NumberSetting;
|
|
4
|
+
title: TextSetting;
|
|
5
|
+
sections: ListSetting;
|
|
6
|
+
backgroundColor: ColorSetting;
|
|
7
|
+
borderColor: ColorSetting;
|
|
8
|
+
textColor: ColorSetting;
|
|
9
|
+
arrowBackground: ColorSetting;
|
|
10
|
+
}>;
|
|
11
|
+
export type TermsSettingsMap = InferSettingsMapType<typeof termsSettings>;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { ColorSetting, NumberSetting, TextSetting, ListSetting, Settings } from '../../settings';
|
|
2
|
+
export const termsSettings = new Settings('Terms', {
|
|
3
|
+
marginTop: new NumberSetting({
|
|
4
|
+
title: 'Margin Top',
|
|
5
|
+
defaultValue: 0
|
|
6
|
+
}),
|
|
7
|
+
title: new TextSetting({
|
|
8
|
+
title: 'Title',
|
|
9
|
+
defaultValue: 'Terms & Conditions'
|
|
10
|
+
}),
|
|
11
|
+
sections: new ListSetting({
|
|
12
|
+
title: 'Sections',
|
|
13
|
+
defaultValue: [
|
|
14
|
+
{ title: 'About the Promotion', content: 'Enter promotion details here.' },
|
|
15
|
+
{ title: 'Bonus Game Rules and Prizes', content: 'Enter bonus game rules here.' }
|
|
16
|
+
],
|
|
17
|
+
extra: {
|
|
18
|
+
addButtonText: '+ Add Section',
|
|
19
|
+
titlePlaceholder: 'Section title',
|
|
20
|
+
contentPlaceholder: 'Section content'
|
|
21
|
+
}
|
|
22
|
+
}),
|
|
23
|
+
backgroundColor: new ColorSetting({
|
|
24
|
+
title: 'Background Color',
|
|
25
|
+
defaultValue: '#162D3F'
|
|
26
|
+
}),
|
|
27
|
+
borderColor: new ColorSetting({
|
|
28
|
+
title: 'Border Color',
|
|
29
|
+
defaultValue: 'rgba(177,202,223,0.1)'
|
|
30
|
+
}),
|
|
31
|
+
textColor: new ColorSetting({
|
|
32
|
+
title: 'Text Color',
|
|
33
|
+
defaultValue: '#ffffff'
|
|
34
|
+
}),
|
|
35
|
+
arrowBackground: new ColorSetting({
|
|
36
|
+
title: 'Arrow Background',
|
|
37
|
+
defaultValue: '#33475b'
|
|
38
|
+
})
|
|
39
|
+
});
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { TermsSettingsMap } from './settings';
|
|
3
|
+
|
|
4
|
+
let { settings }: { settings: TermsSettingsMap } = $props();
|
|
5
|
+
|
|
6
|
+
let expandedSet = $state<Set<number>>(new Set());
|
|
7
|
+
|
|
8
|
+
function toggle(index: number) {
|
|
9
|
+
if (expandedSet.has(index)) {
|
|
10
|
+
expandedSet.delete(index);
|
|
11
|
+
} else {
|
|
12
|
+
expandedSet.add(index);
|
|
13
|
+
}
|
|
14
|
+
expandedSet = new Set(expandedSet);
|
|
15
|
+
}
|
|
16
|
+
</script>
|
|
17
|
+
|
|
18
|
+
<div class="terms-wrapper" style="margin-top: {settings.marginTop}px;">
|
|
19
|
+
<div
|
|
20
|
+
class="terms-container"
|
|
21
|
+
style="background-color: {settings.backgroundColor}; border: 1px solid {settings.borderColor};"
|
|
22
|
+
>
|
|
23
|
+
<div class="terms-main-header" style="color: {settings.textColor};">
|
|
24
|
+
<span class="terms-main-title">{settings.title}</span>
|
|
25
|
+
</div>
|
|
26
|
+
|
|
27
|
+
{#each settings.sections as section, i}
|
|
28
|
+
<div class="terms-section" style="border-color: {settings.borderColor};">
|
|
29
|
+
<button class="terms-header" onclick={() => toggle(i)} style="color: {settings.textColor};">
|
|
30
|
+
<span class="terms-title">{section.title}</span>
|
|
31
|
+
<div
|
|
32
|
+
class="terms-arrow"
|
|
33
|
+
class:rotated={expandedSet.has(i)}
|
|
34
|
+
style="background: {settings.arrowBackground};"
|
|
35
|
+
>
|
|
36
|
+
<svg width="16" height="16" viewBox="0 0 16 16" fill="none">
|
|
37
|
+
<path d="M8 11L3 5.5h10L8 11z" fill="currentColor" />
|
|
38
|
+
</svg>
|
|
39
|
+
</div>
|
|
40
|
+
</button>
|
|
41
|
+
{#if expandedSet.has(i)}
|
|
42
|
+
<div class="terms-content" style="color: {settings.textColor};">
|
|
43
|
+
<p>{section.content}</p>
|
|
44
|
+
</div>
|
|
45
|
+
{/if}
|
|
46
|
+
</div>
|
|
47
|
+
{/each}
|
|
48
|
+
</div>
|
|
49
|
+
</div>
|
|
50
|
+
|
|
51
|
+
<style>
|
|
52
|
+
.terms-wrapper {
|
|
53
|
+
max-width: 750px;
|
|
54
|
+
width: 100%;
|
|
55
|
+
margin: 0 auto;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.terms-container {
|
|
59
|
+
border-radius: 8px;
|
|
60
|
+
overflow: hidden;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.terms-main-header {
|
|
64
|
+
padding: 18px 20px;
|
|
65
|
+
border-bottom: 1px solid rgba(177, 202, 223, 0.1);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.terms-main-title {
|
|
69
|
+
font-size: 1.15rem;
|
|
70
|
+
font-weight: 600;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.terms-section {
|
|
74
|
+
border-top: 1px solid;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.terms-section:first-of-type {
|
|
78
|
+
border-top: none;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.terms-header {
|
|
82
|
+
display: flex;
|
|
83
|
+
width: 100%;
|
|
84
|
+
align-items: center;
|
|
85
|
+
justify-content: space-between;
|
|
86
|
+
padding: 16px 20px;
|
|
87
|
+
background: none;
|
|
88
|
+
border: none;
|
|
89
|
+
cursor: pointer;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.terms-title {
|
|
93
|
+
font-size: 1rem;
|
|
94
|
+
font-weight: 500;
|
|
95
|
+
text-align: start;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.terms-arrow {
|
|
99
|
+
display: flex;
|
|
100
|
+
align-items: center;
|
|
101
|
+
justify-content: center;
|
|
102
|
+
width: 30px;
|
|
103
|
+
height: 30px;
|
|
104
|
+
border-radius: 50%;
|
|
105
|
+
padding: 4px;
|
|
106
|
+
transition: transform 0.2s ease;
|
|
107
|
+
flex-shrink: 0;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
.terms-arrow.rotated {
|
|
111
|
+
transform: rotate(180deg);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
.terms-content {
|
|
115
|
+
padding: 0 20px 20px;
|
|
116
|
+
font-size: 0.875rem;
|
|
117
|
+
line-height: 1.6;
|
|
118
|
+
opacity: 0.8;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
.terms-content p {
|
|
122
|
+
margin: 0;
|
|
123
|
+
}
|
|
124
|
+
</style>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { TermsSettingsMap } from './settings';
|
|
2
|
+
type $$ComponentProps = {
|
|
3
|
+
settings: TermsSettingsMap;
|
|
4
|
+
};
|
|
5
|
+
declare const TermsElement: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
6
|
+
type TermsElement = ReturnType<typeof TermsElement>;
|
|
7
|
+
export default TermsElement;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { TranslatableSetting, Settings, type InferSettingsMapType } from '../../settings';
|
|
2
|
+
export declare const textSettings: Settings<{
|
|
3
|
+
text: TranslatableSetting;
|
|
4
|
+
typography: Settings<{
|
|
5
|
+
color: import("../../settings").ColorSetting;
|
|
6
|
+
fontSize: import("../../settings").NumberSetting;
|
|
7
|
+
fontFamily: import("../../settings").TextSetting;
|
|
8
|
+
fontWeight: import("../../settings").SelectSetting;
|
|
9
|
+
}>;
|
|
10
|
+
}>;
|
|
11
|
+
export type TextSettingsMap = InferSettingsMapType<typeof textSettings>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { TranslatableSetting, Settings, createTypographySettings } from '../../settings';
|
|
2
|
+
export const textSettings = new Settings('Text', {
|
|
3
|
+
text: new TranslatableSetting({
|
|
4
|
+
title: 'Text',
|
|
5
|
+
defaultValue: { en: 'Enter your text here' }
|
|
6
|
+
}),
|
|
7
|
+
typography: new Settings('Typography', {
|
|
8
|
+
...createTypographySettings({
|
|
9
|
+
fontFamily: 'Arial'
|
|
10
|
+
})
|
|
11
|
+
})
|
|
12
|
+
});
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { TextSettingsMap } from './settings';
|
|
3
|
+
|
|
4
|
+
let { settings }: { settings: TextSettingsMap } = $props();
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<div class="text-wrapper">
|
|
8
|
+
<p
|
|
9
|
+
class="text-element"
|
|
10
|
+
style="
|
|
11
|
+
font-size: {settings.fontSize}px;
|
|
12
|
+
font-weight: {settings.fontWeight};
|
|
13
|
+
line-height: {settings.lineHeight};
|
|
14
|
+
letter-spacing: {settings.letterSpacing}px;
|
|
15
|
+
"
|
|
16
|
+
>
|
|
17
|
+
{settings.text}
|
|
18
|
+
</p>
|
|
19
|
+
</div>
|
|
20
|
+
|
|
21
|
+
<style>
|
|
22
|
+
.text-wrapper {
|
|
23
|
+
width: 100%;
|
|
24
|
+
margin-left: auto;
|
|
25
|
+
margin-right: auto;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.text-element {
|
|
29
|
+
margin: 0;
|
|
30
|
+
word-wrap: break-word;
|
|
31
|
+
white-space: pre-wrap;
|
|
32
|
+
}
|
|
33
|
+
</style>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { TextSettingsMap } from './settings';
|
|
2
|
+
type $$ComponentProps = {
|
|
3
|
+
settings: TextSettingsMap;
|
|
4
|
+
};
|
|
5
|
+
declare const TextElement: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
6
|
+
type TextElement = ReturnType<typeof TextElement>;
|
|
7
|
+
export default TextElement;
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { RendererProps } from './types.js';
|
|
3
|
+
import { componentRegistry } from './registry.js';
|
|
4
|
+
import { resolveSettings } from './resolve.js';
|
|
5
|
+
|
|
6
|
+
let { data, locale = 'en', containerClass = '', containerStyle = '' }: RendererProps = $props();
|
|
7
|
+
|
|
8
|
+
const globalStyle = $derived(() => {
|
|
9
|
+
const g = data.global;
|
|
10
|
+
return [
|
|
11
|
+
`background: ${g.background ?? '#ffffff'}`,
|
|
12
|
+
`padding-top: ${g.paddingTop ?? 0}px`,
|
|
13
|
+
`padding-bottom: ${g.paddingBottom ?? 0}px`,
|
|
14
|
+
`padding-left: ${g.paddingLeft ?? 0}px`,
|
|
15
|
+
`padding-right: ${g.paddingRight ?? 0}px`,
|
|
16
|
+
containerStyle
|
|
17
|
+
]
|
|
18
|
+
.filter(Boolean)
|
|
19
|
+
.join('; ');
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
const resolvedComponents = $derived(
|
|
23
|
+
data.components
|
|
24
|
+
.map((entry) => ({
|
|
25
|
+
component: componentRegistry[entry.name],
|
|
26
|
+
settings: resolveSettings(entry.settings, locale),
|
|
27
|
+
name: entry.name
|
|
28
|
+
}))
|
|
29
|
+
.filter((c) => c.component !== undefined)
|
|
30
|
+
);
|
|
31
|
+
</script>
|
|
32
|
+
|
|
33
|
+
<div class={containerClass} style={globalStyle()}>
|
|
34
|
+
{#each resolvedComponents as { component, settings, name } (name + JSON.stringify(settings))}
|
|
35
|
+
{@const Component = component}
|
|
36
|
+
<Component {settings} />
|
|
37
|
+
{/each}
|
|
38
|
+
</div>
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { default as BuilderRenderer } from './BuilderRenderer.svelte';
|
|
2
|
+
export { resolveSettings } from './resolve.js';
|
|
3
|
+
export { componentRegistry } from './registry.js';
|
|
4
|
+
export type { RendererProps, VanillaRendererInstance, ExportedState, ExportedEntry } from './types.js';
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import TextElement from '../elements/text/textElement.svelte';
|
|
2
|
+
import ButtonElement from '../elements/button/buttonElement.svelte';
|
|
3
|
+
import AuthElement from '../elements/auth/authElement.svelte';
|
|
4
|
+
import BannerElement from '../elements/banner/bannerElement.svelte';
|
|
5
|
+
import BadgeElement from '../elements/badge/badgeElement.svelte';
|
|
6
|
+
import CardsElement from '../elements/cards/cardsElement.svelte';
|
|
7
|
+
import DividerElement from '../elements/divider/dividerElement.svelte';
|
|
8
|
+
import TermsElement from '../elements/terms/termsElement.svelte';
|
|
9
|
+
import ProductsElement from '../elements/products/productsElement.svelte';
|
|
10
|
+
export const componentRegistry = {
|
|
11
|
+
text: TextElement,
|
|
12
|
+
button: ButtonElement,
|
|
13
|
+
auth: AuthElement,
|
|
14
|
+
banner: BannerElement,
|
|
15
|
+
badge: BadgeElement,
|
|
16
|
+
cards: CardsElement,
|
|
17
|
+
divider: DividerElement,
|
|
18
|
+
terms: TermsElement,
|
|
19
|
+
products: ProductsElement
|
|
20
|
+
};
|