@papu1337/builder 0.0.4 → 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 +120 -24
- package/dist/elements/banner/settings.d.ts +15 -3
- package/dist/elements/banner/settings.js +93 -8
- package/dist/elements/button/buttonElement.svelte +31 -21
- package/dist/elements/button/settings.d.ts +12 -9
- package/dist/elements/button/settings.js +21 -38
- 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 +8 -5
- package/dist/elements/terms/settings.js +26 -33
- package/dist/elements/terms/termsElement.svelte +164 -79
- package/dist/elements/text/settings.d.ts +5 -3
- package/dist/elements/text/settings.js +22 -8
- package/dist/elements/text/textElement.svelte +25 -20
- 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 +7 -13
- package/dist/renderer/renderer.vanilla.es.js +1395 -1218
- package/dist/renderer/renderer.vanilla.umd.js +64 -31
- 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 +64 -22
- package/dist/settings/components/ColorSettings.svelte +174 -45
- package/dist/settings/components/ColorSettings.svelte.d.ts +3 -2
- package/dist/settings/components/ListSettings.svelte +11 -12
- package/dist/settings/components/NumberSettings.svelte +121 -24
- 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 +6 -7
- package/dist/settings/components/SettingsGroup.svelte +13 -68
- package/dist/settings/components/SettingsRenderer.svelte +76 -0
- package/dist/settings/components/SettingsRenderer.svelte.d.ts +8 -0
- package/dist/settings/components/TextSettings.svelte +52 -2
- package/dist/settings/components/TranslatableSettings.svelte +16 -17
- package/dist/settings/components/UploadSettings.svelte +7 -8
- 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 +11 -5
- package/dist/elements/auth/authElement.svelte +0 -115
- package/dist/elements/auth/authElement.svelte.d.ts +0 -7
- package/dist/elements/auth/settings.d.ts +0 -25
- package/dist/elements/auth/settings.js +0 -63
- package/dist/elements/badge/badgeElement.svelte +0 -48
- package/dist/elements/badge/badgeElement.svelte.d.ts +0 -7
- package/dist/elements/badge/settings.d.ts +0 -13
- package/dist/elements/badge/settings.js +0 -57
- package/dist/elements/cards/cardsElement.svelte +0 -136
- package/dist/elements/cards/cardsElement.svelte.d.ts +0 -7
- package/dist/elements/cards/settings.d.ts +0 -14
- package/dist/elements/cards/settings.js +0 -52
- package/dist/elements/divider/dividerElement.svelte +0 -34
- package/dist/elements/divider/dividerElement.svelte.d.ts +0 -7
- package/dist/elements/divider/settings.d.ts +0 -7
- package/dist/elements/divider/settings.js +0 -15
- package/dist/elements/products/productsElement.svelte +0 -283
- package/dist/elements/products/productsElement.svelte.d.ts +0 -7
- package/dist/elements/products/settings.d.ts +0 -16
- package/dist/elements/products/settings.js +0 -56
|
@@ -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
|
+
}
|
package/dist/settings/types.d.ts
CHANGED
|
@@ -3,6 +3,9 @@ export type BaseSettingProps<V> = {
|
|
|
3
3
|
title: string;
|
|
4
4
|
onchange: (value: V) => void;
|
|
5
5
|
onpreview?: (value: V) => void;
|
|
6
|
+
isMobile?: boolean;
|
|
7
|
+
overridden?: boolean;
|
|
8
|
+
onreset?: () => void;
|
|
6
9
|
};
|
|
7
10
|
export interface SettingComponent {
|
|
8
11
|
readonly title: string;
|
|
@@ -15,7 +18,15 @@ export interface SettingsGroupComponent {
|
|
|
15
18
|
readonly entries: SettingMap;
|
|
16
19
|
clone(): SettingsGroupComponent;
|
|
17
20
|
}
|
|
18
|
-
export
|
|
21
|
+
export interface SettingRepeaterComponent {
|
|
22
|
+
readonly title: string;
|
|
23
|
+
readonly component: unknown;
|
|
24
|
+
readonly factory: (index: number) => unknown;
|
|
25
|
+
getProps(): Record<string, unknown>;
|
|
26
|
+
resolvedValues(): unknown[];
|
|
27
|
+
clone(): SettingRepeaterComponent;
|
|
28
|
+
}
|
|
29
|
+
export type SettingMapEntry = SettingComponent | SettingsGroupComponent | SettingRepeaterComponent;
|
|
19
30
|
export type SettingMap = Record<string, SettingMapEntry>;
|
|
20
31
|
type ResolveValue<E> = E extends {
|
|
21
32
|
isTranslatable: true;
|
|
@@ -25,7 +36,11 @@ type ResolveValue<E> = E extends {
|
|
|
25
36
|
export type InferSettingsMapType<T> = T extends {
|
|
26
37
|
entries: infer E;
|
|
27
38
|
} ? {
|
|
28
|
-
[K in keyof E]:
|
|
39
|
+
[K in keyof E]: E[K] extends {
|
|
40
|
+
entries: unknown;
|
|
41
|
+
} ? InferSettingsMapType<E[K]> : E[K] extends {
|
|
42
|
+
factory: (...args: never[]) => infer S;
|
|
43
|
+
} ? InferSettingsMapType<S>[] : ResolveValue<E[K]>;
|
|
29
44
|
} : never;
|
|
30
45
|
export type NumberExtra = {
|
|
31
46
|
min?: number;
|
|
@@ -48,4 +63,15 @@ export type SelectOption = {
|
|
|
48
63
|
export type SelectExtra = {
|
|
49
64
|
options: SelectOption[];
|
|
50
65
|
};
|
|
66
|
+
export type SegmentOption = {
|
|
67
|
+
label: string;
|
|
68
|
+
value: string;
|
|
69
|
+
icon?: string;
|
|
70
|
+
};
|
|
71
|
+
export type SegmentExtra = {
|
|
72
|
+
options: SegmentOption[];
|
|
73
|
+
};
|
|
74
|
+
export type ColorExtra = {
|
|
75
|
+
allowGradient?: boolean;
|
|
76
|
+
};
|
|
51
77
|
export {};
|
package/package.json
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@papu1337/builder",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"scripts": {
|
|
5
5
|
"dev": "vite dev",
|
|
6
6
|
"build": "vite build && npm run prepack",
|
|
7
7
|
"preview": "vite preview",
|
|
8
8
|
"prepare": "svelte-kit sync || echo ''",
|
|
9
9
|
"build:renderer": "vite build --config vite.config.renderer.ts",
|
|
10
|
-
"
|
|
10
|
+
"build:builder": "vite build --config vite.config.builder.ts",
|
|
11
|
+
"prepack": "svelte-kit sync && svelte-package && npm run build:renderer && npm run build:builder && publint",
|
|
11
12
|
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
|
|
12
13
|
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
|
|
13
14
|
"lint": "prettier --check . && eslint .",
|
|
@@ -15,9 +16,9 @@
|
|
|
15
16
|
"format": "prettier --write .",
|
|
16
17
|
"test:unit": "vitest",
|
|
17
18
|
"test": "npm run test:unit -- --run",
|
|
18
|
-
"release": "npm run prepack && npm version patch && npm publish --access public",
|
|
19
|
-
"release:minor": "npm run prepack && npm version minor && npm publish --access public",
|
|
20
|
-
"release:major": "npm run prepack && npm version major && npm publish --access public"
|
|
19
|
+
"release": "npm run prepack && npm version patch --no-git-tag-version && npm publish --access public",
|
|
20
|
+
"release:minor": "npm run prepack && npm version minor --no-git-tag-version && npm publish --access public",
|
|
21
|
+
"release:major": "npm run prepack && npm version major --no-git-tag-version && npm publish --access public"
|
|
21
22
|
},
|
|
22
23
|
"files": [
|
|
23
24
|
"dist",
|
|
@@ -42,6 +43,11 @@
|
|
|
42
43
|
"./renderer/vanilla": {
|
|
43
44
|
"types": "./dist/renderer/types.d.ts",
|
|
44
45
|
"default": "./dist/renderer/renderer.vanilla.es.js"
|
|
46
|
+
},
|
|
47
|
+
"./builder": {
|
|
48
|
+
"types": "./dist/builder/index.d.ts",
|
|
49
|
+
"svelte": "./dist/builder/index.js",
|
|
50
|
+
"default": "./dist/builder/builder.vanilla.es.js"
|
|
45
51
|
}
|
|
46
52
|
},
|
|
47
53
|
"peerDependencies": {
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import type { AuthSettingsMap } from './settings';
|
|
3
|
-
|
|
4
|
-
let { settings }: { settings: AuthSettingsMap } = $props();
|
|
5
|
-
</script>
|
|
6
|
-
|
|
7
|
-
<div
|
|
8
|
-
class="auth-banner"
|
|
9
|
-
style="border-color: {settings.borderColor}; background: {settings.backgroundColor}; margin-top: {settings.marginTop}px; padding: {settings.padding}px;"
|
|
10
|
-
>
|
|
11
|
-
<div class="auth-left">
|
|
12
|
-
<div class="auth-icon" style="border-color: {settings.iconColor};">
|
|
13
|
-
<svg width="18" height="18" viewBox="0 0 24 24" fill="none">
|
|
14
|
-
<path
|
|
15
|
-
d="M12 12c2.7 0 4.8-2.1 4.8-4.8S14.7 2.4 12 2.4 7.2 4.5 7.2 7.2 9.3 12 12 12zm0 2.4c-3.2 0-9.6 1.6-9.6 4.8v2.4h19.2v-2.4c0-3.2-6.4-4.8-9.6-4.8z"
|
|
16
|
-
fill={settings.iconColor}
|
|
17
|
-
/>
|
|
18
|
-
</svg>
|
|
19
|
-
</div>
|
|
20
|
-
<p class="auth-prompt" style="color: {settings.textColor};">
|
|
21
|
-
{settings.promptText}
|
|
22
|
-
</p>
|
|
23
|
-
</div>
|
|
24
|
-
<div class="auth-buttons">
|
|
25
|
-
<button
|
|
26
|
-
class="auth-btn login-btn"
|
|
27
|
-
style="background: {settings.loginButtonBackground}; color: {settings.loginButtonColor};"
|
|
28
|
-
>
|
|
29
|
-
{settings.loginButtonText}
|
|
30
|
-
</button>
|
|
31
|
-
<button
|
|
32
|
-
class="auth-btn signup-btn"
|
|
33
|
-
style="background: {settings.signupButtonBackground}; color: {settings.signupButtonColor};"
|
|
34
|
-
>
|
|
35
|
-
{settings.signupButtonText}
|
|
36
|
-
</button>
|
|
37
|
-
</div>
|
|
38
|
-
</div>
|
|
39
|
-
|
|
40
|
-
<style>
|
|
41
|
-
.auth-banner {
|
|
42
|
-
display: flex;
|
|
43
|
-
align-items: center;
|
|
44
|
-
justify-content: space-between;
|
|
45
|
-
gap: 20px;
|
|
46
|
-
border-radius: 10px;
|
|
47
|
-
border: 1.5px solid;
|
|
48
|
-
max-width: 750px;
|
|
49
|
-
width: 100%;
|
|
50
|
-
margin: 0 auto;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
.auth-left {
|
|
54
|
-
display: flex;
|
|
55
|
-
align-items: center;
|
|
56
|
-
gap: 16px;
|
|
57
|
-
flex: 1;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
.auth-icon {
|
|
61
|
-
display: flex;
|
|
62
|
-
align-items: center;
|
|
63
|
-
justify-content: center;
|
|
64
|
-
width: 36px;
|
|
65
|
-
height: 36px;
|
|
66
|
-
border-radius: 50%;
|
|
67
|
-
border: 2px solid;
|
|
68
|
-
flex-shrink: 0;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
.auth-prompt {
|
|
72
|
-
font-size: 0.95rem;
|
|
73
|
-
line-height: 1.4;
|
|
74
|
-
margin: 0;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
.auth-buttons {
|
|
78
|
-
display: flex;
|
|
79
|
-
gap: 12px;
|
|
80
|
-
flex-shrink: 0;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
.auth-btn {
|
|
84
|
-
height: 48px;
|
|
85
|
-
border-radius: 8px;
|
|
86
|
-
padding: 13px 32px;
|
|
87
|
-
display: flex;
|
|
88
|
-
align-items: center;
|
|
89
|
-
justify-content: center;
|
|
90
|
-
font-size: 14px;
|
|
91
|
-
font-weight: 600;
|
|
92
|
-
border: none;
|
|
93
|
-
cursor: pointer;
|
|
94
|
-
white-space: nowrap;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
@media (max-width: 640px) {
|
|
98
|
-
.auth-banner {
|
|
99
|
-
flex-direction: column;
|
|
100
|
-
text-align: center;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
.auth-left {
|
|
104
|
-
flex-direction: column;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
.auth-buttons {
|
|
108
|
-
width: 100%;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
.auth-btn {
|
|
112
|
-
flex: 1;
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
</style>
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { AuthSettingsMap } from './settings';
|
|
2
|
-
type $$ComponentProps = {
|
|
3
|
-
settings: AuthSettingsMap;
|
|
4
|
-
};
|
|
5
|
-
declare const AuthElement: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
6
|
-
type AuthElement = ReturnType<typeof AuthElement>;
|
|
7
|
-
export default AuthElement;
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { ColorSetting, NumberSetting, TextSetting, Settings, type InferSettingsMapType } from '../../settings';
|
|
2
|
-
export declare const authSettings: Settings<{
|
|
3
|
-
layout: Settings<{
|
|
4
|
-
marginTop: NumberSetting;
|
|
5
|
-
padding: NumberSetting;
|
|
6
|
-
}>;
|
|
7
|
-
content: Settings<{
|
|
8
|
-
promptText: TextSetting;
|
|
9
|
-
loginButtonText: TextSetting;
|
|
10
|
-
signupButtonText: TextSetting;
|
|
11
|
-
}>;
|
|
12
|
-
colors: Settings<{
|
|
13
|
-
borderColor: ColorSetting;
|
|
14
|
-
backgroundColor: ColorSetting;
|
|
15
|
-
textColor: ColorSetting;
|
|
16
|
-
iconColor: ColorSetting;
|
|
17
|
-
}>;
|
|
18
|
-
buttons: Settings<{
|
|
19
|
-
loginButtonBackground: ColorSetting;
|
|
20
|
-
loginButtonColor: ColorSetting;
|
|
21
|
-
signupButtonBackground: ColorSetting;
|
|
22
|
-
signupButtonColor: ColorSetting;
|
|
23
|
-
}>;
|
|
24
|
-
}>;
|
|
25
|
-
export type AuthSettingsMap = InferSettingsMapType<typeof authSettings>;
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import { ColorSetting, NumberSetting, TextSetting, Settings } from '../../settings';
|
|
2
|
-
export const authSettings = new Settings('Auth', {
|
|
3
|
-
layout: new Settings('Layout', {
|
|
4
|
-
marginTop: new NumberSetting({
|
|
5
|
-
title: 'Margin Top',
|
|
6
|
-
defaultValue: 0
|
|
7
|
-
}),
|
|
8
|
-
padding: new NumberSetting({
|
|
9
|
-
title: 'Padding',
|
|
10
|
-
defaultValue: 20
|
|
11
|
-
})
|
|
12
|
-
}),
|
|
13
|
-
content: new Settings('Content', {
|
|
14
|
-
promptText: new TextSetting({
|
|
15
|
-
title: 'Prompt Text',
|
|
16
|
-
defaultValue: 'Log in or sign up now to participate in the campaign!'
|
|
17
|
-
}),
|
|
18
|
-
loginButtonText: new TextSetting({
|
|
19
|
-
title: 'Login Button Text',
|
|
20
|
-
defaultValue: 'Log In'
|
|
21
|
-
}),
|
|
22
|
-
signupButtonText: new TextSetting({
|
|
23
|
-
title: 'Signup Button Text',
|
|
24
|
-
defaultValue: 'Sign Up'
|
|
25
|
-
})
|
|
26
|
-
}),
|
|
27
|
-
colors: new Settings('Colors', {
|
|
28
|
-
borderColor: new ColorSetting({
|
|
29
|
-
title: 'Border Color',
|
|
30
|
-
defaultValue: '#b8962a'
|
|
31
|
-
}),
|
|
32
|
-
backgroundColor: new ColorSetting({
|
|
33
|
-
title: 'Background Color',
|
|
34
|
-
defaultValue: '#1a2e3e'
|
|
35
|
-
}),
|
|
36
|
-
textColor: new ColorSetting({
|
|
37
|
-
title: 'Text Color',
|
|
38
|
-
defaultValue: '#ffffff'
|
|
39
|
-
}),
|
|
40
|
-
iconColor: new ColorSetting({
|
|
41
|
-
title: 'Icon Color',
|
|
42
|
-
defaultValue: '#ffffff'
|
|
43
|
-
})
|
|
44
|
-
}),
|
|
45
|
-
buttons: new Settings('Buttons', {
|
|
46
|
-
loginButtonBackground: new ColorSetting({
|
|
47
|
-
title: 'Login Button Background',
|
|
48
|
-
defaultValue: '#4a5568'
|
|
49
|
-
}),
|
|
50
|
-
loginButtonColor: new ColorSetting({
|
|
51
|
-
title: 'Login Button Text Color',
|
|
52
|
-
defaultValue: '#ffffff'
|
|
53
|
-
}),
|
|
54
|
-
signupButtonBackground: new ColorSetting({
|
|
55
|
-
title: 'Signup Button Background',
|
|
56
|
-
defaultValue: '#f0c845'
|
|
57
|
-
}),
|
|
58
|
-
signupButtonColor: new ColorSetting({
|
|
59
|
-
title: 'Signup Button Text Color',
|
|
60
|
-
defaultValue: '#000000'
|
|
61
|
-
})
|
|
62
|
-
})
|
|
63
|
-
});
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import type { BadgeSettingsMap } from './settings';
|
|
3
|
-
|
|
4
|
-
let { settings }: { settings: BadgeSettingsMap } = $props();
|
|
5
|
-
|
|
6
|
-
const justifyMap: Record<string, string> = {
|
|
7
|
-
left: 'flex-start',
|
|
8
|
-
center: 'center',
|
|
9
|
-
right: 'flex-end'
|
|
10
|
-
};
|
|
11
|
-
</script>
|
|
12
|
-
|
|
13
|
-
<div
|
|
14
|
-
class="badge-wrapper"
|
|
15
|
-
style="justify-content: {justifyMap[settings.align] ??
|
|
16
|
-
'center'}; margin-top: {settings.marginTop}px;"
|
|
17
|
-
>
|
|
18
|
-
<span
|
|
19
|
-
class="badge"
|
|
20
|
-
style="
|
|
21
|
-
background: {settings.backgroundColor};
|
|
22
|
-
color: {settings.textColor};
|
|
23
|
-
border-radius: {settings.borderRadius}px;
|
|
24
|
-
padding: {settings.paddingY}px {settings.paddingX}px;
|
|
25
|
-
font-size: {settings.fontSize}px;
|
|
26
|
-
"
|
|
27
|
-
>
|
|
28
|
-
{settings.text}
|
|
29
|
-
</span>
|
|
30
|
-
</div>
|
|
31
|
-
|
|
32
|
-
<style>
|
|
33
|
-
.badge-wrapper {
|
|
34
|
-
display: flex;
|
|
35
|
-
max-width: 750px;
|
|
36
|
-
width: 100%;
|
|
37
|
-
margin: 0 auto;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
.badge {
|
|
41
|
-
display: inline-block;
|
|
42
|
-
font-weight: 700;
|
|
43
|
-
text-transform: uppercase;
|
|
44
|
-
letter-spacing: 0.06em;
|
|
45
|
-
line-height: 1;
|
|
46
|
-
white-space: nowrap;
|
|
47
|
-
}
|
|
48
|
-
</style>
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { BadgeSettingsMap } from './settings';
|
|
2
|
-
type $$ComponentProps = {
|
|
3
|
-
settings: BadgeSettingsMap;
|
|
4
|
-
};
|
|
5
|
-
declare const BadgeElement: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
6
|
-
type BadgeElement = ReturnType<typeof BadgeElement>;
|
|
7
|
-
export default BadgeElement;
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { ColorSetting, NumberSetting, TextSetting, Settings, type InferSettingsMapType } from '../../settings';
|
|
2
|
-
export declare const badgeSettings: Settings<{
|
|
3
|
-
marginTop: NumberSetting;
|
|
4
|
-
text: TextSetting;
|
|
5
|
-
backgroundColor: ColorSetting;
|
|
6
|
-
textColor: ColorSetting;
|
|
7
|
-
borderRadius: NumberSetting;
|
|
8
|
-
paddingX: NumberSetting;
|
|
9
|
-
paddingY: NumberSetting;
|
|
10
|
-
fontSize: NumberSetting;
|
|
11
|
-
align: TextSetting;
|
|
12
|
-
}>;
|
|
13
|
-
export type BadgeSettingsMap = InferSettingsMapType<typeof badgeSettings>;
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import { ColorSetting, NumberSetting, TextSetting, Settings } from '../../settings';
|
|
2
|
-
export const badgeSettings = new Settings('Badge', {
|
|
3
|
-
marginTop: new NumberSetting({
|
|
4
|
-
title: 'Margin Top',
|
|
5
|
-
defaultValue: 0
|
|
6
|
-
}),
|
|
7
|
-
text: new TextSetting({
|
|
8
|
-
title: 'Badge Text',
|
|
9
|
-
defaultValue: 'NEW'
|
|
10
|
-
}),
|
|
11
|
-
backgroundColor: new ColorSetting({
|
|
12
|
-
title: 'Background Color',
|
|
13
|
-
defaultValue: '#f0c845'
|
|
14
|
-
}),
|
|
15
|
-
textColor: new ColorSetting({
|
|
16
|
-
title: 'Text Color',
|
|
17
|
-
defaultValue: '#000000'
|
|
18
|
-
}),
|
|
19
|
-
borderRadius: new NumberSetting({
|
|
20
|
-
title: 'Border Radius',
|
|
21
|
-
defaultValue: 20,
|
|
22
|
-
extra: {
|
|
23
|
-
min: 0,
|
|
24
|
-
max: 50,
|
|
25
|
-
step: 1
|
|
26
|
-
}
|
|
27
|
-
}),
|
|
28
|
-
paddingX: new NumberSetting({
|
|
29
|
-
title: 'Padding Horizontal',
|
|
30
|
-
defaultValue: 16,
|
|
31
|
-
extra: {
|
|
32
|
-
min: 0,
|
|
33
|
-
step: 1
|
|
34
|
-
}
|
|
35
|
-
}),
|
|
36
|
-
paddingY: new NumberSetting({
|
|
37
|
-
title: 'Padding Vertical',
|
|
38
|
-
defaultValue: 6,
|
|
39
|
-
extra: {
|
|
40
|
-
min: 0,
|
|
41
|
-
step: 1
|
|
42
|
-
}
|
|
43
|
-
}),
|
|
44
|
-
fontSize: new NumberSetting({
|
|
45
|
-
title: 'Font Size',
|
|
46
|
-
defaultValue: 12,
|
|
47
|
-
extra: {
|
|
48
|
-
min: 8,
|
|
49
|
-
max: 32,
|
|
50
|
-
step: 1
|
|
51
|
-
}
|
|
52
|
-
}),
|
|
53
|
-
align: new TextSetting({
|
|
54
|
-
title: 'Align (left / center / right)',
|
|
55
|
-
defaultValue: 'center'
|
|
56
|
-
})
|
|
57
|
-
});
|
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import type { CardsSettingsMap } from './settings';
|
|
3
|
-
|
|
4
|
-
let { settings }: { settings: CardsSettingsMap } = $props();
|
|
5
|
-
|
|
6
|
-
const rows = $derived(() => {
|
|
7
|
-
const all = settings.cards;
|
|
8
|
-
const chunks: (typeof all)[] = [];
|
|
9
|
-
for (let i = 0; i < all.length; i += 3) {
|
|
10
|
-
chunks.push(all.slice(i, i + 3));
|
|
11
|
-
}
|
|
12
|
-
return chunks;
|
|
13
|
-
});
|
|
14
|
-
</script>
|
|
15
|
-
|
|
16
|
-
<div class="cards-wrapper" style="margin-top: {settings.marginTop}px;">
|
|
17
|
-
{#each rows() as row}
|
|
18
|
-
<div class="cards-row">
|
|
19
|
-
{#each row as card, i}
|
|
20
|
-
{#if i > 0}
|
|
21
|
-
<div class="arrow" style="color: {settings.arrowColor};">
|
|
22
|
-
<svg width="20" height="20" viewBox="0 0 24 24" fill="none">
|
|
23
|
-
<path
|
|
24
|
-
d="M9 6l6 6-6 6"
|
|
25
|
-
stroke="currentColor"
|
|
26
|
-
stroke-width="2"
|
|
27
|
-
stroke-linecap="round"
|
|
28
|
-
stroke-linejoin="round"
|
|
29
|
-
/>
|
|
30
|
-
</svg>
|
|
31
|
-
</div>
|
|
32
|
-
{/if}
|
|
33
|
-
<div
|
|
34
|
-
class="card"
|
|
35
|
-
style="background: {settings.backgroundColor}; border: 1px solid {settings.borderColor};"
|
|
36
|
-
>
|
|
37
|
-
<h3 class="card-title" style="color: {settings.titleColor};">
|
|
38
|
-
{card.title}
|
|
39
|
-
</h3>
|
|
40
|
-
<p class="card-content" style="color: {settings.contentColor};">
|
|
41
|
-
{card.content}
|
|
42
|
-
</p>
|
|
43
|
-
</div>
|
|
44
|
-
{/each}
|
|
45
|
-
</div>
|
|
46
|
-
{/each}
|
|
47
|
-
|
|
48
|
-
{#if settings.footerText}
|
|
49
|
-
<div
|
|
50
|
-
class="cards-footer"
|
|
51
|
-
style="background: {settings.footerBackground}; color: {settings.footerTextColor};"
|
|
52
|
-
>
|
|
53
|
-
<p>{settings.footerText}</p>
|
|
54
|
-
</div>
|
|
55
|
-
{/if}
|
|
56
|
-
</div>
|
|
57
|
-
|
|
58
|
-
<style>
|
|
59
|
-
.cards-wrapper {
|
|
60
|
-
display: flex;
|
|
61
|
-
flex-direction: column;
|
|
62
|
-
gap: 12px;
|
|
63
|
-
max-width: 750px;
|
|
64
|
-
width: 100%;
|
|
65
|
-
margin: 0 auto;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
.cards-row {
|
|
69
|
-
display: flex;
|
|
70
|
-
align-items: stretch;
|
|
71
|
-
gap: 0;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
.arrow {
|
|
75
|
-
display: flex;
|
|
76
|
-
align-items: center;
|
|
77
|
-
justify-content: center;
|
|
78
|
-
flex-shrink: 0;
|
|
79
|
-
padding: 0 6px;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
.card {
|
|
83
|
-
flex: 1;
|
|
84
|
-
max-width: calc(33.333% - 12px);
|
|
85
|
-
border-radius: 10px;
|
|
86
|
-
padding: 24px 20px;
|
|
87
|
-
display: flex;
|
|
88
|
-
flex-direction: column;
|
|
89
|
-
align-items: center;
|
|
90
|
-
text-align: center;
|
|
91
|
-
gap: 10px;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
.card-title {
|
|
95
|
-
margin: 0;
|
|
96
|
-
font-size: 0.95rem;
|
|
97
|
-
font-weight: 800;
|
|
98
|
-
text-transform: uppercase;
|
|
99
|
-
letter-spacing: 0.03em;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
.card-content {
|
|
103
|
-
margin: 0;
|
|
104
|
-
font-size: 0.85rem;
|
|
105
|
-
line-height: 1.5;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
.cards-footer {
|
|
109
|
-
border-radius: 8px;
|
|
110
|
-
padding: 14px 20px;
|
|
111
|
-
text-align: center;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
.cards-footer p {
|
|
115
|
-
margin: 0;
|
|
116
|
-
font-size: 0.85rem;
|
|
117
|
-
line-height: 1.5;
|
|
118
|
-
font-style: italic;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
@media (max-width: 640px) {
|
|
122
|
-
.cards-row {
|
|
123
|
-
flex-direction: column;
|
|
124
|
-
gap: 12px;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
.card {
|
|
128
|
-
max-width: 100%;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
.arrow {
|
|
132
|
-
transform: rotate(90deg);
|
|
133
|
-
padding: 4px 0;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
</style>
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { CardsSettingsMap } from './settings';
|
|
2
|
-
type $$ComponentProps = {
|
|
3
|
-
settings: CardsSettingsMap;
|
|
4
|
-
};
|
|
5
|
-
declare const CardsElement: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
6
|
-
type CardsElement = ReturnType<typeof CardsElement>;
|
|
7
|
-
export default CardsElement;
|