@papu1337/builder 0.0.5 → 1.0.1
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/dist/builder/BuilderView.svelte +158 -0
- package/dist/builder/BuilderView.svelte.d.ts +8 -0
- package/dist/builder/builder.vanilla.es.js +6514 -0
- package/dist/builder/builder.vanilla.umd.js +89 -0
- package/dist/builder/canvas/canvas.svelte +92 -0
- package/dist/builder/canvas/canvas.svelte.d.ts +17 -0
- package/dist/builder/canvas/styles.css +63 -0
- package/dist/builder/createBuilder.svelte.d.ts +9 -0
- package/dist/builder/createBuilder.svelte.js +17 -0
- package/dist/builder/index.d.ts +8 -0
- package/dist/builder/index.js +7 -0
- package/dist/builder/leftbar/leftBar.svelte +740 -0
- package/dist/builder/leftbar/leftBar.svelte.d.ts +8 -0
- package/dist/builder/leftbar/styles.css +152 -0
- package/dist/builder/pageMeta.svelte.d.ts +13 -0
- package/dist/builder/pageMeta.svelte.js +25 -0
- package/dist/builder/rightbar/rightBar.svelte +100 -0
- package/dist/builder/rightbar/rightBar.svelte.d.ts +10 -0
- package/dist/builder/rightbar/styles.css +167 -0
- package/dist/builder/topbar/TopBar.svelte +337 -0
- package/dist/builder/topbar/TopBar.svelte.d.ts +12 -0
- package/dist/builder/topbar/styles.css +123 -0
- package/dist/builder/viewport.svelte.d.ts +9 -0
- package/dist/builder/viewport.svelte.js +17 -0
- package/dist/elements/_shared/Arrow.svelte +58 -0
- package/dist/elements/_shared/Arrow.svelte.d.ts +11 -0
- package/dist/elements/_shared/GradientBorder.svelte +55 -0
- package/dist/elements/_shared/GradientBorder.svelte.d.ts +10 -0
- package/dist/elements/banner/bannerElement.svelte +101 -33
- package/dist/elements/banner/settings.d.ts +13 -3
- package/dist/elements/banner/settings.js +88 -8
- package/dist/elements/button/buttonElement.svelte +27 -21
- package/dist/elements/button/settings.d.ts +11 -9
- package/dist/elements/button/settings.js +18 -39
- package/dist/elements/globalSettings.js +5 -4
- package/dist/elements/howItWorks/howItWorksElement.svelte +221 -0
- package/dist/elements/howItWorks/howItWorksElement.svelte.d.ts +7 -0
- package/dist/elements/howItWorks/settings.d.ts +16 -0
- package/dist/elements/howItWorks/settings.js +70 -0
- package/dist/elements/steps/settings.d.ts +17 -0
- package/dist/elements/steps/settings.js +69 -0
- package/dist/elements/steps/stepsElement.svelte +220 -0
- package/dist/elements/steps/stepsElement.svelte.d.ts +7 -0
- package/dist/elements/terms/settings.d.ts +14 -0
- package/dist/elements/terms/settings.js +32 -0
- package/dist/elements/terms/termsElement.svelte +209 -0
- package/dist/elements/terms/termsElement.svelte.d.ts +7 -0
- package/dist/elements/text/settings.d.ts +8 -11
- package/dist/elements/text/settings.js +21 -51
- package/dist/elements/text/textElement.svelte +23 -23
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.js +1 -0
- package/dist/hooks/useTranslation.svelte.d.ts +9 -0
- package/dist/hooks/useTranslation.svelte.js +10 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +3 -0
- package/dist/renderer/BuilderRenderer.svelte +30 -2
- package/dist/renderer/registry.js +6 -6
- package/dist/renderer/renderer.vanilla.es.js +1547 -1188
- package/dist/renderer/renderer.vanilla.umd.js +64 -39
- package/dist/renderer/resolve.d.ts +1 -1
- package/dist/renderer/resolve.js +28 -14
- package/dist/renderer/types.d.ts +2 -0
- package/dist/service/element.action.svelte.d.ts +21 -0
- package/dist/service/element.action.svelte.js +125 -0
- package/dist/service/element.history.svelte.d.ts +8 -0
- package/dist/service/element.history.svelte.js +36 -0
- package/dist/service/element.io.svelte.d.ts +4 -0
- package/dist/service/element.io.svelte.js +232 -0
- package/dist/service/element.reader.svelte.d.ts +4 -0
- package/dist/service/element.reader.svelte.js +51 -0
- package/dist/service/element.translate.svelte.d.ts +12 -0
- package/dist/service/element.translate.svelte.js +81 -0
- package/dist/service/index.d.ts +5 -0
- package/dist/service/index.js +5 -0
- package/dist/service/types.d.ts +13 -0
- package/dist/service/types.js +1 -0
- package/dist/settings/base.svelte.d.ts +6 -1
- package/dist/settings/base.svelte.js +61 -17
- package/dist/settings/components/ColorSettings.svelte +169 -40
- package/dist/settings/components/ColorSettings.svelte.d.ts +3 -2
- package/dist/settings/components/ListSettings.svelte +4 -5
- package/dist/settings/components/NumberSettings.svelte +117 -20
- package/dist/settings/components/RepeaterSettings.svelte +145 -0
- package/dist/settings/components/RepeaterSettings.svelte.d.ts +14 -0
- package/dist/settings/components/SegmentSettings.svelte +85 -0
- package/dist/settings/components/SegmentSettings.svelte.d.ts +5 -0
- package/dist/settings/components/SelectSettings.svelte +2 -3
- package/dist/settings/components/SettingsGroup.svelte +14 -69
- package/dist/settings/components/SettingsRenderer.svelte +76 -0
- package/dist/settings/components/SettingsRenderer.svelte.d.ts +8 -0
- package/dist/settings/components/TextSettings.svelte +2 -3
- package/dist/settings/components/TranslatableSettings.svelte +3 -4
- package/dist/settings/components/UploadSettings.svelte +2 -3
- package/dist/settings/groups.d.ts +23 -7
- package/dist/settings/groups.js +48 -24
- package/dist/settings/implementation.svelte.js +4 -0
- package/dist/settings/index.d.ts +2 -0
- package/dist/settings/index.js +2 -0
- package/dist/settings/mode.svelte.d.ts +4 -0
- package/dist/settings/mode.svelte.js +4 -0
- package/dist/settings/repeater.svelte.d.ts +26 -0
- package/dist/settings/repeater.svelte.js +70 -0
- package/dist/settings/types.d.ts +28 -2
- package/package.json +8 -2
- package/dist/elements/accordion/accordionElement.svelte +0 -101
- package/dist/elements/accordion/accordionElement.svelte.d.ts +0 -7
- package/dist/elements/accordion/settings.d.ts +0 -17
- package/dist/elements/accordion/settings.js +0 -54
- package/dist/elements/badge/badgeElement.svelte +0 -49
- package/dist/elements/badge/badgeElement.svelte.d.ts +0 -7
- package/dist/elements/badge/settings.d.ts +0 -14
- package/dist/elements/badge/settings.js +0 -47
- package/dist/elements/ctaCard/ctaCardElement.svelte +0 -132
- package/dist/elements/ctaCard/ctaCardElement.svelte.d.ts +0 -7
- package/dist/elements/ctaCard/settings.d.ts +0 -22
- package/dist/elements/ctaCard/settings.js +0 -64
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { BaseSettingProps, SegmentExtra } from '../types';
|
|
3
|
+
|
|
4
|
+
let { title, value, onchange, options }: BaseSettingProps<string> & SegmentExtra = $props();
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<div class="setting-item">
|
|
8
|
+
<div class="label-row">
|
|
9
|
+
<label for={title}>{title}</label>
|
|
10
|
+
</div>
|
|
11
|
+
<div class="segment">
|
|
12
|
+
{#each options as opt (opt.value)}
|
|
13
|
+
<button
|
|
14
|
+
type="button"
|
|
15
|
+
class="segment__btn"
|
|
16
|
+
class:segment__btn--active={value === opt.value}
|
|
17
|
+
title={opt.label}
|
|
18
|
+
aria-label={opt.label}
|
|
19
|
+
onclick={() => onchange(opt.value)}
|
|
20
|
+
>
|
|
21
|
+
{#if opt.icon === 'align-left'}
|
|
22
|
+
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="3" y1="6" x2="15" y2="6" /><line x1="3" y1="12" x2="21" y2="12" /><line x1="3" y1="18" x2="15" y2="18" /></svg>
|
|
23
|
+
{:else if opt.icon === 'align-center'}
|
|
24
|
+
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="6" y1="6" x2="18" y2="6" /><line x1="3" y1="12" x2="21" y2="12" /><line x1="6" y1="18" x2="18" y2="18" /></svg>
|
|
25
|
+
{:else if opt.icon === 'align-right'}
|
|
26
|
+
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="9" y1="6" x2="21" y2="6" /><line x1="3" y1="12" x2="21" y2="12" /><line x1="9" y1="18" x2="21" y2="18" /></svg>
|
|
27
|
+
{:else}
|
|
28
|
+
{opt.label}
|
|
29
|
+
{/if}
|
|
30
|
+
</button>
|
|
31
|
+
{/each}
|
|
32
|
+
</div>
|
|
33
|
+
</div>
|
|
34
|
+
|
|
35
|
+
<style>
|
|
36
|
+
.setting-item {
|
|
37
|
+
display: flex;
|
|
38
|
+
flex-direction: column;
|
|
39
|
+
gap: 8px;
|
|
40
|
+
padding: 12px 0;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.label-row {
|
|
44
|
+
display: flex;
|
|
45
|
+
justify-content: space-between;
|
|
46
|
+
align-items: center;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
label {
|
|
50
|
+
font-size: 0.8rem;
|
|
51
|
+
font-weight: 500;
|
|
52
|
+
color: var(--text-secondary);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.segment {
|
|
56
|
+
display: flex;
|
|
57
|
+
gap: 3px;
|
|
58
|
+
padding: 3px;
|
|
59
|
+
background: var(--bg-elevated);
|
|
60
|
+
border: 1px solid var(--border-light);
|
|
61
|
+
border-radius: var(--radius-md);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.segment__btn {
|
|
65
|
+
flex: 1;
|
|
66
|
+
height: 32px;
|
|
67
|
+
display: flex;
|
|
68
|
+
align-items: center;
|
|
69
|
+
justify-content: center;
|
|
70
|
+
border: none;
|
|
71
|
+
background: transparent;
|
|
72
|
+
border-radius: 6px;
|
|
73
|
+
cursor: pointer;
|
|
74
|
+
color: var(--text-secondary);
|
|
75
|
+
font: inherit;
|
|
76
|
+
font-size: 0.8rem;
|
|
77
|
+
transition: background var(--transition), color var(--transition);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.segment__btn--active {
|
|
81
|
+
background: var(--bg-surface);
|
|
82
|
+
color: var(--accent);
|
|
83
|
+
box-shadow: var(--shadow-sm);
|
|
84
|
+
}
|
|
85
|
+
</style>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { BaseSettingProps, SegmentExtra } from '../types';
|
|
2
|
+
type $$ComponentProps = BaseSettingProps<string> & SegmentExtra;
|
|
3
|
+
declare const SegmentSettings: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
4
|
+
type SegmentSettings = ReturnType<typeof SegmentSettings>;
|
|
5
|
+
export default SegmentSettings;
|
|
@@ -33,17 +33,16 @@
|
|
|
33
33
|
font-size: 0.8rem;
|
|
34
34
|
font-weight: 500;
|
|
35
35
|
color: var(--text-secondary);
|
|
36
|
-
text-transform: capitalize;
|
|
37
36
|
}
|
|
38
37
|
|
|
39
38
|
select {
|
|
40
39
|
width: 100%;
|
|
41
|
-
padding:
|
|
40
|
+
padding: 9px 11px;
|
|
42
41
|
background: var(--bg-elevated);
|
|
43
42
|
border: 1px solid var(--border-light);
|
|
44
43
|
border-radius: var(--radius-md);
|
|
45
44
|
color: var(--text-primary);
|
|
46
|
-
font-size: 0.
|
|
45
|
+
font-size: 0.8rem;
|
|
47
46
|
font-family: var(--font);
|
|
48
47
|
outline: none;
|
|
49
48
|
cursor: pointer;
|
|
@@ -7,88 +7,33 @@
|
|
|
7
7
|
children: Snippet;
|
|
8
8
|
}
|
|
9
9
|
|
|
10
|
-
let { title,
|
|
11
|
-
// svelte-ignore state_referenced_locally
|
|
12
|
-
let isOpen = $state(defaultOpen);
|
|
10
|
+
let { title, children }: SettingsGroupProps = $props();
|
|
13
11
|
</script>
|
|
14
12
|
|
|
15
|
-
<div class="settings-group"
|
|
16
|
-
<
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
class:rotated={isOpen}
|
|
21
|
-
width="14"
|
|
22
|
-
height="14"
|
|
23
|
-
viewBox="0 0 24 24"
|
|
24
|
-
fill="none"
|
|
25
|
-
stroke="currentColor"
|
|
26
|
-
stroke-width="2"
|
|
27
|
-
stroke-linecap="round"
|
|
28
|
-
stroke-linejoin="round"
|
|
29
|
-
>
|
|
30
|
-
<polyline points="6 9 12 15 18 9" />
|
|
31
|
-
</svg>
|
|
32
|
-
</button>
|
|
33
|
-
|
|
34
|
-
{#if isOpen}
|
|
35
|
-
<div class="group-body">
|
|
36
|
-
{@render children()}
|
|
37
|
-
</div>
|
|
38
|
-
{/if}
|
|
13
|
+
<div class="settings-group">
|
|
14
|
+
<div class="group-legend">{title}</div>
|
|
15
|
+
<div class="group-body">
|
|
16
|
+
{@render children()}
|
|
17
|
+
</div>
|
|
39
18
|
</div>
|
|
40
19
|
|
|
41
20
|
<style>
|
|
42
21
|
.settings-group {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
margin-bottom: 8px;
|
|
47
|
-
background: var(--bg-surface);
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
.settings-group.open {
|
|
51
|
-
border-color: var(--border);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
.group-header {
|
|
55
|
-
display: flex;
|
|
56
|
-
align-items: center;
|
|
57
|
-
justify-content: space-between;
|
|
58
|
-
width: 100%;
|
|
59
|
-
padding: 12px 14px;
|
|
60
|
-
background: var(--bg-elevated);
|
|
61
|
-
border: none;
|
|
62
|
-
cursor: pointer;
|
|
63
|
-
font-family: inherit;
|
|
64
|
-
transition: background var(--transition);
|
|
65
|
-
user-select: none;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
.group-header:hover {
|
|
69
|
-
background: var(--bg-hover, rgba(255, 255, 255, 0.06));
|
|
22
|
+
padding: 14px 0 2px;
|
|
23
|
+
margin-top: 6px;
|
|
24
|
+
border-top: 1px solid var(--border-light);
|
|
70
25
|
}
|
|
71
26
|
|
|
72
|
-
.group-
|
|
73
|
-
font-size: 0.
|
|
27
|
+
.group-legend {
|
|
28
|
+
font-size: 0.72rem;
|
|
74
29
|
font-weight: 600;
|
|
75
|
-
letter-spacing: 0.
|
|
30
|
+
letter-spacing: 0.1em;
|
|
76
31
|
text-transform: uppercase;
|
|
77
|
-
color: var(--text-secondary);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
.chevron {
|
|
81
32
|
color: var(--text-muted);
|
|
82
|
-
transition: transform 0.2s ease;
|
|
83
|
-
flex-shrink: 0;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
.chevron.rotated {
|
|
87
|
-
transform: rotate(180deg);
|
|
88
33
|
}
|
|
89
34
|
|
|
90
35
|
.group-body {
|
|
91
|
-
|
|
92
|
-
|
|
36
|
+
display: flex;
|
|
37
|
+
flex-direction: column;
|
|
93
38
|
}
|
|
94
39
|
</style>
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { Component } from 'svelte';
|
|
3
|
+
import { Settings } from '../base.svelte';
|
|
4
|
+
import SettingsGroup from './SettingsGroup.svelte';
|
|
5
|
+
import Self from './SettingsRenderer.svelte';
|
|
6
|
+
|
|
7
|
+
interface FieldLike {
|
|
8
|
+
component: Component<Record<string, unknown>>;
|
|
9
|
+
getProps(): Record<string, unknown>;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
let { entries, defaultOpen = false }: { entries: Record<string, unknown>; defaultOpen?: boolean } =
|
|
13
|
+
$props();
|
|
14
|
+
</script>
|
|
15
|
+
|
|
16
|
+
{#each Object.entries(entries) as [key, entry] (key)}
|
|
17
|
+
{#if entry instanceof Settings}
|
|
18
|
+
<SettingsGroup title={entry.title} {defaultOpen}>
|
|
19
|
+
<Self entries={entry.entries} />
|
|
20
|
+
</SettingsGroup>
|
|
21
|
+
{:else}
|
|
22
|
+
{@const field = entry as FieldLike}
|
|
23
|
+
{@const props = field.getProps()}
|
|
24
|
+
{@const Field = field.component}
|
|
25
|
+
<div class="setting-item" class:setting-item--override={Boolean(props.overridden)}>
|
|
26
|
+
<Field {...props} />
|
|
27
|
+
{#if props.overridden}
|
|
28
|
+
<button
|
|
29
|
+
class="setting-reset"
|
|
30
|
+
type="button"
|
|
31
|
+
title="Reset to desktop value"
|
|
32
|
+
onclick={props.onreset as () => void}
|
|
33
|
+
aria-label="Reset to desktop value"
|
|
34
|
+
>
|
|
35
|
+
<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 7v6h6" /><path d="M21 17a9 9 0 0 0-9-9 9 9 0 0 0-6 2.3L3 13" /></svg>
|
|
36
|
+
</button>
|
|
37
|
+
{/if}
|
|
38
|
+
</div>
|
|
39
|
+
{/if}
|
|
40
|
+
{/each}
|
|
41
|
+
|
|
42
|
+
<style>
|
|
43
|
+
.setting-item {
|
|
44
|
+
position: relative;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.setting-item--override :global(input),
|
|
48
|
+
.setting-item--override :global(select),
|
|
49
|
+
.setting-item--override :global(.color-row),
|
|
50
|
+
.setting-item--override :global(.segment),
|
|
51
|
+
.setting-item--override :global(.number-box) {
|
|
52
|
+
border-color: var(--accent);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.setting-reset {
|
|
56
|
+
position: absolute;
|
|
57
|
+
top: 12px;
|
|
58
|
+
right: 0;
|
|
59
|
+
width: 20px;
|
|
60
|
+
height: 18px;
|
|
61
|
+
display: inline-flex;
|
|
62
|
+
align-items: center;
|
|
63
|
+
justify-content: center;
|
|
64
|
+
padding: 0;
|
|
65
|
+
border: none;
|
|
66
|
+
background: transparent;
|
|
67
|
+
color: var(--text-muted);
|
|
68
|
+
cursor: pointer;
|
|
69
|
+
border-radius: 4px;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.setting-reset:hover {
|
|
73
|
+
color: var(--accent);
|
|
74
|
+
background: var(--accent-subtle);
|
|
75
|
+
}
|
|
76
|
+
</style>
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Component } from 'svelte';
|
|
2
|
+
type $$ComponentProps = {
|
|
3
|
+
entries: Record<string, unknown>;
|
|
4
|
+
defaultOpen?: boolean;
|
|
5
|
+
};
|
|
6
|
+
declare const SettingsRenderer: Component<$$ComponentProps, {}, "">;
|
|
7
|
+
type SettingsRenderer = ReturnType<typeof SettingsRenderer>;
|
|
8
|
+
export default SettingsRenderer;
|
|
@@ -34,17 +34,16 @@
|
|
|
34
34
|
font-size: 0.8rem;
|
|
35
35
|
font-weight: 500;
|
|
36
36
|
color: var(--text-secondary);
|
|
37
|
-
text-transform: capitalize;
|
|
38
37
|
}
|
|
39
38
|
|
|
40
39
|
input[type='text'] {
|
|
41
40
|
width: 100%;
|
|
42
|
-
padding:
|
|
41
|
+
padding: 9px 11px;
|
|
43
42
|
background: var(--bg-elevated);
|
|
44
43
|
border: 1px solid var(--border-light);
|
|
45
44
|
border-radius: var(--radius-md);
|
|
46
45
|
color: var(--text-primary);
|
|
47
|
-
font-size: 0.
|
|
46
|
+
font-size: 0.8rem;
|
|
48
47
|
font-family: var(--font);
|
|
49
48
|
outline: none;
|
|
50
49
|
transition:
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import { languages, locale } from '
|
|
2
|
+
import { languages, locale } from '../../hooks/useTranslation.svelte.js';
|
|
3
3
|
|
|
4
4
|
interface Props {
|
|
5
5
|
value: Record<string, string>;
|
|
@@ -94,7 +94,6 @@
|
|
|
94
94
|
font-size: 0.8rem;
|
|
95
95
|
font-weight: 500;
|
|
96
96
|
color: var(--text-secondary);
|
|
97
|
-
text-transform: capitalize;
|
|
98
97
|
pointer-events: none;
|
|
99
98
|
}
|
|
100
99
|
|
|
@@ -126,11 +125,11 @@
|
|
|
126
125
|
.single-input input {
|
|
127
126
|
width: 100%;
|
|
128
127
|
box-sizing: border-box;
|
|
129
|
-
padding:
|
|
128
|
+
padding: 9px 11px;
|
|
130
129
|
background: var(--bg-elevated);
|
|
131
130
|
border: 1px solid var(--border-light);
|
|
132
131
|
border-radius: var(--radius-md);
|
|
133
|
-
font-size: 0.
|
|
132
|
+
font-size: 0.8rem;
|
|
134
133
|
color: var(--text-primary);
|
|
135
134
|
font-family: inherit;
|
|
136
135
|
outline: none;
|
|
@@ -59,7 +59,6 @@
|
|
|
59
59
|
font-size: 0.8rem;
|
|
60
60
|
font-weight: 500;
|
|
61
61
|
color: var(--text-secondary);
|
|
62
|
-
text-transform: capitalize;
|
|
63
62
|
}
|
|
64
63
|
|
|
65
64
|
.upload-zone {
|
|
@@ -96,7 +95,7 @@
|
|
|
96
95
|
}
|
|
97
96
|
|
|
98
97
|
.upload-text {
|
|
99
|
-
font-size: 0.
|
|
98
|
+
font-size: 0.72rem;
|
|
100
99
|
font-weight: 500;
|
|
101
100
|
color: var(--text-secondary);
|
|
102
101
|
}
|
|
@@ -146,7 +145,7 @@
|
|
|
146
145
|
background: var(--accent);
|
|
147
146
|
color: #fff;
|
|
148
147
|
border-radius: var(--radius-md);
|
|
149
|
-
font-size: 0.
|
|
148
|
+
font-size: 0.72rem;
|
|
150
149
|
font-weight: 500;
|
|
151
150
|
cursor: pointer;
|
|
152
151
|
font-family: var(--font);
|
|
@@ -1,14 +1,30 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Settings } from "./base.svelte";
|
|
2
|
+
import { ColorSetting, NumberSetting, SelectSetting, TextSetting, TranslatableSetting } from "./implementation.svelte";
|
|
2
3
|
type TypographyDefaults = {
|
|
4
|
+
title?: string;
|
|
3
5
|
color?: string;
|
|
4
6
|
fontSize?: number;
|
|
5
7
|
fontFamily?: string;
|
|
6
8
|
fontWeight?: string;
|
|
9
|
+
text?: string;
|
|
10
|
+
colorGradient?: boolean;
|
|
7
11
|
};
|
|
8
|
-
export declare function
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
export declare function TypographySettings(defaults?: TypographyDefaults): Settings<{
|
|
13
|
+
text: TranslatableSetting;
|
|
14
|
+
color: ColorSetting;
|
|
15
|
+
fontSize: NumberSetting;
|
|
16
|
+
fontFamily: TextSetting;
|
|
17
|
+
fontWeight: SelectSetting;
|
|
18
|
+
}>;
|
|
19
|
+
interface BorderDefaults {
|
|
20
|
+
title?: string;
|
|
21
|
+
borderWidth?: number;
|
|
22
|
+
borderColor?: string;
|
|
23
|
+
borderRadius?: number;
|
|
24
|
+
}
|
|
25
|
+
export declare const BorderSettings: (defaults?: BorderDefaults) => Settings<{
|
|
26
|
+
borderWidth: NumberSetting;
|
|
27
|
+
borderColor: ColorSetting;
|
|
28
|
+
borderRadius: NumberSetting;
|
|
29
|
+
}>;
|
|
14
30
|
export {};
|
package/dist/settings/groups.js
CHANGED
|
@@ -1,35 +1,59 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { Settings } from "./base.svelte";
|
|
2
|
+
import { ColorSetting, NumberSetting, SelectSetting, TextSetting, TranslatableSetting, } from "./implementation.svelte";
|
|
3
|
+
export function TypographySettings(defaults) {
|
|
4
|
+
return new Settings(defaults?.title ?? "Typography", {
|
|
5
|
+
text: new TranslatableSetting({
|
|
6
|
+
title: "Text",
|
|
7
|
+
defaultValue: { en: defaults?.text ?? "Enter Text" },
|
|
8
|
+
}),
|
|
4
9
|
color: new ColorSetting({
|
|
5
|
-
title:
|
|
6
|
-
defaultValue: defaults?.color ??
|
|
10
|
+
title: "Color",
|
|
11
|
+
defaultValue: defaults?.color ?? "#000000",
|
|
12
|
+
extra: { allowGradient: defaults?.colorGradient ?? false },
|
|
7
13
|
}),
|
|
8
14
|
fontSize: new NumberSetting({
|
|
9
|
-
title:
|
|
15
|
+
title: "Font Size",
|
|
10
16
|
defaultValue: defaults?.fontSize ?? 16,
|
|
11
|
-
extra: { min: 8, max: 120, step: 1 }
|
|
17
|
+
extra: { min: 8, max: 120, step: 1 },
|
|
12
18
|
}),
|
|
13
19
|
fontFamily: new TextSetting({
|
|
14
|
-
title:
|
|
15
|
-
defaultValue: defaults?.fontFamily ??
|
|
20
|
+
title: "Font Family",
|
|
21
|
+
defaultValue: defaults?.fontFamily ?? "Arial",
|
|
16
22
|
}),
|
|
17
23
|
fontWeight: new SelectSetting({
|
|
18
|
-
title:
|
|
19
|
-
defaultValue: defaults?.fontWeight ??
|
|
24
|
+
title: "Font Weight",
|
|
25
|
+
defaultValue: defaults?.fontWeight ?? "400",
|
|
20
26
|
extra: {
|
|
21
27
|
options: [
|
|
22
|
-
{ label:
|
|
23
|
-
{ label:
|
|
24
|
-
{ label:
|
|
25
|
-
{ label:
|
|
26
|
-
{ label:
|
|
27
|
-
{ label:
|
|
28
|
-
{ label:
|
|
29
|
-
{ label:
|
|
30
|
-
{ label:
|
|
31
|
-
]
|
|
32
|
-
}
|
|
33
|
-
})
|
|
34
|
-
};
|
|
28
|
+
{ label: "Thin", value: "100" },
|
|
29
|
+
{ label: "Extra Light", value: "200" },
|
|
30
|
+
{ label: "Light", value: "300" },
|
|
31
|
+
{ label: "Regular", value: "400" },
|
|
32
|
+
{ label: "Medium", value: "500" },
|
|
33
|
+
{ label: "Semi Bold", value: "600" },
|
|
34
|
+
{ label: "Bold", value: "700" },
|
|
35
|
+
{ label: "Extra Bold", value: "800" },
|
|
36
|
+
{ label: "Black", value: "900" },
|
|
37
|
+
],
|
|
38
|
+
},
|
|
39
|
+
}),
|
|
40
|
+
});
|
|
35
41
|
}
|
|
42
|
+
export const BorderSettings = (defaults) => {
|
|
43
|
+
return new Settings(defaults?.title ?? "Border", {
|
|
44
|
+
borderWidth: new NumberSetting({
|
|
45
|
+
title: "Border Width",
|
|
46
|
+
defaultValue: defaults?.borderWidth ?? 0,
|
|
47
|
+
extra: { min: 0, max: 24, step: 1 },
|
|
48
|
+
}),
|
|
49
|
+
borderColor: new ColorSetting({
|
|
50
|
+
title: "Border Color",
|
|
51
|
+
defaultValue: defaults?.borderColor ?? "#000000",
|
|
52
|
+
}),
|
|
53
|
+
borderRadius: new NumberSetting({
|
|
54
|
+
title: "Border Radius",
|
|
55
|
+
defaultValue: defaults?.borderRadius ?? 0,
|
|
56
|
+
extra: { min: 0, max: 24, step: 1 },
|
|
57
|
+
}),
|
|
58
|
+
});
|
|
59
|
+
};
|
|
@@ -2,6 +2,7 @@ import TextSettingUI from './components/TextSettings.svelte';
|
|
|
2
2
|
import NumberSettingUI from './components/NumberSettings.svelte';
|
|
3
3
|
import ColorSettingUI from './components/ColorSettings.svelte';
|
|
4
4
|
import SelectSettingUI from './components/SelectSettings.svelte';
|
|
5
|
+
import SegmentSettingUI from './components/SegmentSettings.svelte';
|
|
5
6
|
import ListSettingUI from './components/ListSettings.svelte';
|
|
6
7
|
import UploadSettingUI from './components/UploadSettings.svelte';
|
|
7
8
|
import TranslatableSettingUI from './components/TranslatableSettings.svelte';
|
|
@@ -21,6 +22,9 @@ export class ListSetting extends Setting {
|
|
|
21
22
|
export class SelectSetting extends Setting {
|
|
22
23
|
component = SelectSettingUI;
|
|
23
24
|
}
|
|
25
|
+
export class SegmentSetting extends Setting {
|
|
26
|
+
component = SegmentSettingUI;
|
|
27
|
+
}
|
|
24
28
|
export class UploadSetting extends Setting {
|
|
25
29
|
component = UploadSettingUI;
|
|
26
30
|
}
|
package/dist/settings/index.d.ts
CHANGED
package/dist/settings/index.js
CHANGED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Component } from 'svelte';
|
|
2
|
+
import { Settings } from './base.svelte';
|
|
3
|
+
import type { SettingMap } from './types';
|
|
4
|
+
export declare class RepeaterSetting<T extends SettingMap = SettingMap> {
|
|
5
|
+
readonly title: string;
|
|
6
|
+
readonly itemLabel: string;
|
|
7
|
+
readonly addButtonText: string;
|
|
8
|
+
readonly factory: (index: number) => Settings<T>;
|
|
9
|
+
readonly component: Component<Record<string, unknown>>;
|
|
10
|
+
items: Settings<T>[];
|
|
11
|
+
onItemsChange: ((oldItems: Settings<T>[]) => void) | null;
|
|
12
|
+
constructor(options: {
|
|
13
|
+
title: string;
|
|
14
|
+
itemLabel?: string;
|
|
15
|
+
addButtonText?: string;
|
|
16
|
+
factory: (index: number) => Settings<T>;
|
|
17
|
+
count?: number;
|
|
18
|
+
});
|
|
19
|
+
addItem(): void;
|
|
20
|
+
removeItem(index: number): void;
|
|
21
|
+
moveItem(from: number, to: number): void;
|
|
22
|
+
getProps(): Record<string, unknown>;
|
|
23
|
+
clone(): RepeaterSetting<T>;
|
|
24
|
+
resolvedValues(): unknown[];
|
|
25
|
+
}
|
|
26
|
+
export declare function isRepeaterSetting(entry: unknown): entry is RepeaterSetting;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { Settings } from './base.svelte';
|
|
2
|
+
import RepeaterSettingUI from './components/RepeaterSettings.svelte';
|
|
3
|
+
export class RepeaterSetting {
|
|
4
|
+
title;
|
|
5
|
+
itemLabel;
|
|
6
|
+
addButtonText;
|
|
7
|
+
factory;
|
|
8
|
+
component = RepeaterSettingUI;
|
|
9
|
+
items = $state([]);
|
|
10
|
+
onItemsChange = null;
|
|
11
|
+
constructor(options) {
|
|
12
|
+
this.title = options.title;
|
|
13
|
+
this.itemLabel = options.itemLabel ?? 'Item';
|
|
14
|
+
this.addButtonText = options.addButtonText ?? `+ Add ${this.itemLabel}`;
|
|
15
|
+
this.factory = options.factory;
|
|
16
|
+
const count = options.count ?? 0;
|
|
17
|
+
const initial = [];
|
|
18
|
+
for (let index = 0; index < count; index++)
|
|
19
|
+
initial.push(options.factory(index));
|
|
20
|
+
this.items = initial;
|
|
21
|
+
}
|
|
22
|
+
addItem() {
|
|
23
|
+
const oldItems = this.items;
|
|
24
|
+
this.items = [...this.items, this.factory(this.items.length)];
|
|
25
|
+
this.onItemsChange?.(oldItems);
|
|
26
|
+
}
|
|
27
|
+
removeItem(index) {
|
|
28
|
+
const oldItems = this.items;
|
|
29
|
+
this.items = this.items.filter((_, i) => i !== index);
|
|
30
|
+
this.onItemsChange?.(oldItems);
|
|
31
|
+
}
|
|
32
|
+
moveItem(from, to) {
|
|
33
|
+
if (to < 0 || to >= this.items.length)
|
|
34
|
+
return;
|
|
35
|
+
const oldItems = this.items;
|
|
36
|
+
const next = [...this.items];
|
|
37
|
+
const [moved] = next.splice(from, 1);
|
|
38
|
+
next.splice(to, 0, moved);
|
|
39
|
+
this.items = next;
|
|
40
|
+
this.onItemsChange?.(oldItems);
|
|
41
|
+
}
|
|
42
|
+
getProps() {
|
|
43
|
+
return {
|
|
44
|
+
title: this.title,
|
|
45
|
+
itemLabel: this.itemLabel,
|
|
46
|
+
addButtonText: this.addButtonText,
|
|
47
|
+
items: this.items,
|
|
48
|
+
onadd: () => this.addItem(),
|
|
49
|
+
onremove: (index) => this.removeItem(index),
|
|
50
|
+
onmove: (from, to) => this.moveItem(from, to)
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
clone() {
|
|
54
|
+
const cloned = new RepeaterSetting({
|
|
55
|
+
title: this.title,
|
|
56
|
+
itemLabel: this.itemLabel,
|
|
57
|
+
addButtonText: this.addButtonText,
|
|
58
|
+
factory: this.factory,
|
|
59
|
+
count: 0
|
|
60
|
+
});
|
|
61
|
+
cloned.items = this.items.map((item) => item.clone());
|
|
62
|
+
return cloned;
|
|
63
|
+
}
|
|
64
|
+
resolvedValues() {
|
|
65
|
+
return this.items.map((item) => item.values);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
export function isRepeaterSetting(entry) {
|
|
69
|
+
return entry instanceof RepeaterSetting;
|
|
70
|
+
}
|