@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.
Files changed (124) hide show
  1. package/dist/builder/BuilderView.svelte +158 -0
  2. package/dist/builder/BuilderView.svelte.d.ts +8 -0
  3. package/dist/builder/builder.vanilla.es.js +6514 -0
  4. package/dist/builder/builder.vanilla.umd.js +89 -0
  5. package/dist/builder/canvas/canvas.svelte +92 -0
  6. package/dist/builder/canvas/canvas.svelte.d.ts +17 -0
  7. package/dist/builder/canvas/styles.css +63 -0
  8. package/dist/builder/createBuilder.svelte.d.ts +9 -0
  9. package/dist/builder/createBuilder.svelte.js +17 -0
  10. package/dist/builder/index.d.ts +8 -0
  11. package/dist/builder/index.js +7 -0
  12. package/dist/builder/leftbar/leftBar.svelte +740 -0
  13. package/dist/builder/leftbar/leftBar.svelte.d.ts +8 -0
  14. package/dist/builder/leftbar/styles.css +152 -0
  15. package/dist/builder/pageMeta.svelte.d.ts +13 -0
  16. package/dist/builder/pageMeta.svelte.js +25 -0
  17. package/dist/builder/rightbar/rightBar.svelte +100 -0
  18. package/dist/builder/rightbar/rightBar.svelte.d.ts +10 -0
  19. package/dist/builder/rightbar/styles.css +167 -0
  20. package/dist/builder/topbar/TopBar.svelte +337 -0
  21. package/dist/builder/topbar/TopBar.svelte.d.ts +12 -0
  22. package/dist/builder/topbar/styles.css +123 -0
  23. package/dist/builder/viewport.svelte.d.ts +9 -0
  24. package/dist/builder/viewport.svelte.js +17 -0
  25. package/dist/elements/_shared/Arrow.svelte +58 -0
  26. package/dist/elements/_shared/Arrow.svelte.d.ts +11 -0
  27. package/dist/elements/_shared/GradientBorder.svelte +55 -0
  28. package/dist/elements/_shared/GradientBorder.svelte.d.ts +10 -0
  29. package/dist/elements/banner/bannerElement.svelte +120 -24
  30. package/dist/elements/banner/settings.d.ts +15 -3
  31. package/dist/elements/banner/settings.js +93 -8
  32. package/dist/elements/button/buttonElement.svelte +31 -21
  33. package/dist/elements/button/settings.d.ts +12 -9
  34. package/dist/elements/button/settings.js +21 -38
  35. package/dist/elements/globalSettings.js +5 -4
  36. package/dist/elements/howItWorks/howItWorksElement.svelte +221 -0
  37. package/dist/elements/howItWorks/howItWorksElement.svelte.d.ts +7 -0
  38. package/dist/elements/howItWorks/settings.d.ts +16 -0
  39. package/dist/elements/howItWorks/settings.js +70 -0
  40. package/dist/elements/steps/settings.d.ts +17 -0
  41. package/dist/elements/steps/settings.js +69 -0
  42. package/dist/elements/steps/stepsElement.svelte +220 -0
  43. package/dist/elements/steps/stepsElement.svelte.d.ts +7 -0
  44. package/dist/elements/terms/settings.d.ts +8 -5
  45. package/dist/elements/terms/settings.js +26 -33
  46. package/dist/elements/terms/termsElement.svelte +164 -79
  47. package/dist/elements/text/settings.d.ts +5 -3
  48. package/dist/elements/text/settings.js +22 -8
  49. package/dist/elements/text/textElement.svelte +25 -20
  50. package/dist/hooks/index.d.ts +1 -0
  51. package/dist/hooks/index.js +1 -0
  52. package/dist/hooks/useTranslation.svelte.d.ts +9 -0
  53. package/dist/hooks/useTranslation.svelte.js +10 -0
  54. package/dist/index.d.ts +3 -0
  55. package/dist/index.js +3 -0
  56. package/dist/renderer/BuilderRenderer.svelte +30 -2
  57. package/dist/renderer/registry.js +7 -13
  58. package/dist/renderer/renderer.vanilla.es.js +1395 -1218
  59. package/dist/renderer/renderer.vanilla.umd.js +64 -31
  60. package/dist/renderer/resolve.d.ts +1 -1
  61. package/dist/renderer/resolve.js +28 -14
  62. package/dist/renderer/types.d.ts +2 -0
  63. package/dist/service/element.action.svelte.d.ts +21 -0
  64. package/dist/service/element.action.svelte.js +125 -0
  65. package/dist/service/element.history.svelte.d.ts +8 -0
  66. package/dist/service/element.history.svelte.js +36 -0
  67. package/dist/service/element.io.svelte.d.ts +4 -0
  68. package/dist/service/element.io.svelte.js +232 -0
  69. package/dist/service/element.reader.svelte.d.ts +4 -0
  70. package/dist/service/element.reader.svelte.js +51 -0
  71. package/dist/service/element.translate.svelte.d.ts +12 -0
  72. package/dist/service/element.translate.svelte.js +81 -0
  73. package/dist/service/index.d.ts +5 -0
  74. package/dist/service/index.js +5 -0
  75. package/dist/service/types.d.ts +13 -0
  76. package/dist/service/types.js +1 -0
  77. package/dist/settings/base.svelte.d.ts +6 -1
  78. package/dist/settings/base.svelte.js +64 -22
  79. package/dist/settings/components/ColorSettings.svelte +174 -45
  80. package/dist/settings/components/ColorSettings.svelte.d.ts +3 -2
  81. package/dist/settings/components/ListSettings.svelte +11 -12
  82. package/dist/settings/components/NumberSettings.svelte +121 -24
  83. package/dist/settings/components/RepeaterSettings.svelte +145 -0
  84. package/dist/settings/components/RepeaterSettings.svelte.d.ts +14 -0
  85. package/dist/settings/components/SegmentSettings.svelte +85 -0
  86. package/dist/settings/components/SegmentSettings.svelte.d.ts +5 -0
  87. package/dist/settings/components/SelectSettings.svelte +6 -7
  88. package/dist/settings/components/SettingsGroup.svelte +13 -68
  89. package/dist/settings/components/SettingsRenderer.svelte +76 -0
  90. package/dist/settings/components/SettingsRenderer.svelte.d.ts +8 -0
  91. package/dist/settings/components/TextSettings.svelte +52 -2
  92. package/dist/settings/components/TranslatableSettings.svelte +16 -17
  93. package/dist/settings/components/UploadSettings.svelte +7 -8
  94. package/dist/settings/groups.d.ts +23 -7
  95. package/dist/settings/groups.js +48 -24
  96. package/dist/settings/implementation.svelte.js +4 -0
  97. package/dist/settings/index.d.ts +2 -0
  98. package/dist/settings/index.js +2 -0
  99. package/dist/settings/mode.svelte.d.ts +4 -0
  100. package/dist/settings/mode.svelte.js +4 -0
  101. package/dist/settings/repeater.svelte.d.ts +26 -0
  102. package/dist/settings/repeater.svelte.js +70 -0
  103. package/dist/settings/types.d.ts +28 -2
  104. package/package.json +11 -5
  105. package/dist/elements/auth/authElement.svelte +0 -115
  106. package/dist/elements/auth/authElement.svelte.d.ts +0 -7
  107. package/dist/elements/auth/settings.d.ts +0 -25
  108. package/dist/elements/auth/settings.js +0 -63
  109. package/dist/elements/badge/badgeElement.svelte +0 -48
  110. package/dist/elements/badge/badgeElement.svelte.d.ts +0 -7
  111. package/dist/elements/badge/settings.d.ts +0 -13
  112. package/dist/elements/badge/settings.js +0 -57
  113. package/dist/elements/cards/cardsElement.svelte +0 -136
  114. package/dist/elements/cards/cardsElement.svelte.d.ts +0 -7
  115. package/dist/elements/cards/settings.d.ts +0 -14
  116. package/dist/elements/cards/settings.js +0 -52
  117. package/dist/elements/divider/dividerElement.svelte +0 -34
  118. package/dist/elements/divider/dividerElement.svelte.d.ts +0 -7
  119. package/dist/elements/divider/settings.d.ts +0 -7
  120. package/dist/elements/divider/settings.js +0 -15
  121. package/dist/elements/products/productsElement.svelte +0 -283
  122. package/dist/elements/products/productsElement.svelte.d.ts +0 -7
  123. package/dist/elements/products/settings.d.ts +0 -16
  124. package/dist/elements/products/settings.js +0 -56
@@ -0,0 +1,8 @@
1
+ import type { ElementEntry } from '../../service';
2
+ interface LeftBarProps {
3
+ components: ElementEntry[];
4
+ addComponent: (component: ElementEntry) => void;
5
+ }
6
+ declare const LeftBar: import("svelte").Component<LeftBarProps, {}, "">;
7
+ type LeftBar = ReturnType<typeof LeftBar>;
8
+ export default LeftBar;
@@ -0,0 +1,152 @@
1
+ aside {
2
+ width: var(--sidebar-width);
3
+ flex-shrink: 0;
4
+ background-color: var(--bg-surface);
5
+ border-right: 1px solid var(--border);
6
+ box-sizing: border-box;
7
+ transition:
8
+ width var(--transition),
9
+ padding var(--transition);
10
+ display: flex;
11
+ flex-direction: column;
12
+ height: calc(100dvh - 56px);
13
+ overflow: hidden;
14
+ }
15
+
16
+ .sidebar-header {
17
+ display: flex;
18
+ align-items: center;
19
+ gap: 10px;
20
+ padding: 18px 16px 14px;
21
+ border-bottom: 1px solid var(--border);
22
+ }
23
+
24
+ .sidebar-header .logo-dot {
25
+ width: 8px;
26
+ height: 8px;
27
+ border-radius: 50%;
28
+ background: var(--accent);
29
+ box-shadow: 0 0 8px var(--accent);
30
+ flex-shrink: 0;
31
+ }
32
+
33
+ .sidebar-header h2 {
34
+ font-size: 0.7rem;
35
+ font-weight: 600;
36
+ letter-spacing: 0.1em;
37
+ text-transform: uppercase;
38
+ color: var(--text-secondary);
39
+ }
40
+
41
+ .elements-list {
42
+ padding: 12px 10px;
43
+ display: flex;
44
+ flex-direction: column;
45
+ gap: 4px;
46
+ overflow-y: auto;
47
+ flex: 1;
48
+ }
49
+
50
+ .element-btn {
51
+ display: flex;
52
+ align-items: center;
53
+ gap: 10px;
54
+ width: 100%;
55
+ padding: 9px 12px;
56
+ background: transparent;
57
+ border: 1px solid transparent;
58
+ border-radius: var(--radius-md);
59
+ cursor: pointer;
60
+ color: var(--text-secondary);
61
+ font-size: 0.85rem;
62
+ font-weight: 500;
63
+ font-family: var(--font);
64
+ text-align: left;
65
+ transition:
66
+ background var(--transition),
67
+ border-color var(--transition),
68
+ color var(--transition);
69
+ }
70
+
71
+ .element-btn:hover {
72
+ background: var(--accent-subtle);
73
+ border-color: var(--accent);
74
+ color: var(--text-primary);
75
+ }
76
+
77
+ .element-btn:hover .element-add {
78
+ opacity: 1;
79
+ color: var(--accent-hover);
80
+ }
81
+
82
+ .element-icon {
83
+ font-size: 0.55rem;
84
+ color: var(--accent);
85
+ opacity: 0.7;
86
+ flex-shrink: 0;
87
+ }
88
+
89
+ .element-name {
90
+ flex: 1;
91
+ text-transform: capitalize;
92
+ }
93
+
94
+ .element-add {
95
+ font-size: 1rem;
96
+ font-weight: 300;
97
+ color: var(--text-muted);
98
+ opacity: 0;
99
+ transition: opacity var(--transition);
100
+ }
101
+
102
+ .element-btn {
103
+ display: flex;
104
+ align-items: center;
105
+ gap: 10px;
106
+ width: 100%;
107
+ padding: 9px 12px;
108
+ background: transparent;
109
+ border: 1px solid transparent;
110
+ border-radius: var(--radius-md);
111
+ cursor: pointer;
112
+ color: var(--text-secondary);
113
+ font-size: 0.85rem;
114
+ font-weight: 500;
115
+ font-family: var(--font);
116
+ text-align: left;
117
+ transition:
118
+ background var(--transition),
119
+ border-color var(--transition),
120
+ color var(--transition);
121
+ }
122
+
123
+ .element-btn:hover {
124
+ background: var(--accent-subtle);
125
+ border-color: var(--accent);
126
+ color: var(--text-primary);
127
+ }
128
+
129
+ .element-btn:hover .element-add {
130
+ opacity: 1;
131
+ color: var(--accent-hover);
132
+ }
133
+
134
+ .element-icon {
135
+ font-size: 0.55rem;
136
+ color: var(--accent);
137
+ opacity: 0.7;
138
+ flex-shrink: 0;
139
+ }
140
+
141
+ .element-name {
142
+ flex: 1;
143
+ text-transform: capitalize;
144
+ }
145
+
146
+ .element-add {
147
+ font-size: 1rem;
148
+ font-weight: 300;
149
+ color: var(--text-muted);
150
+ opacity: 0;
151
+ transition: opacity var(--transition);
152
+ }
@@ -0,0 +1,13 @@
1
+ export declare const pageMeta: {
2
+ isActive: boolean;
3
+ showOnPromotionPages: boolean;
4
+ seoTitle: string;
5
+ slug: string;
6
+ promoTitle: string;
7
+ promoDescription: string;
8
+ promoImage: string;
9
+ promoTitleNoTranslate: boolean;
10
+ promoDescriptionNoTranslate: boolean;
11
+ };
12
+ export declare function setSlug(raw: string): void;
13
+ export declare function readPromoImage(input: HTMLInputElement): void;
@@ -0,0 +1,25 @@
1
+ export const pageMeta = $state({
2
+ isActive: true,
3
+ showOnPromotionPages: false,
4
+ seoTitle: '',
5
+ slug: '',
6
+ promoTitle: '',
7
+ promoDescription: '',
8
+ promoImage: '',
9
+ promoTitleNoTranslate: false,
10
+ promoDescriptionNoTranslate: false
11
+ });
12
+ export function setSlug(raw) {
13
+ pageMeta.slug = raw.toLowerCase().replace(/[^a-z0-9/-]+/g, '-');
14
+ }
15
+ export function readPromoImage(input) {
16
+ const file = input.files?.[0];
17
+ if (!file)
18
+ return;
19
+ const reader = new FileReader();
20
+ reader.onload = () => {
21
+ if (typeof reader.result === 'string')
22
+ pageMeta.promoImage = reader.result;
23
+ };
24
+ reader.readAsDataURL(file);
25
+ }
@@ -0,0 +1,100 @@
1
+ <script lang="ts">
2
+ import type { ElementEntry } from "../../service";
3
+ import { settingsMode } from "../../settings";
4
+ import SettingsRenderer from "../../settings/components/SettingsRenderer.svelte";
5
+
6
+ import "./styles.css";
7
+
8
+ interface RightBarProps {
9
+ selectedComponent: ElementEntry | null;
10
+ GlobalSettings: ElementEntry | null;
11
+ deleteComponent: (id: string) => void;
12
+ }
13
+
14
+ let { selectedComponent, GlobalSettings, deleteComponent }: RightBarProps =
15
+ $props();
16
+ let activeTab = $state<"global" | "component">("component");
17
+
18
+ $effect(() => {
19
+ activeTab = selectedComponent ? "component" : "global";
20
+ });
21
+ </script>
22
+
23
+ <aside>
24
+ <div class="header">
25
+ <h1>Properties</h1>
26
+ </div>
27
+
28
+ <div class="tabs-wrapper">
29
+ <div class="tab-bar">
30
+ <button
31
+ class="tab-label"
32
+ class:active={activeTab === "global"}
33
+ onclick={() => (activeTab = "global")}
34
+ >
35
+ Global
36
+ </button>
37
+ <button
38
+ class="tab-label"
39
+ class:active={activeTab === "component"}
40
+ onclick={() => (activeTab = "component")}
41
+ >
42
+ Component
43
+ </button>
44
+ <div class="tab-indicator" class:right={activeTab === "component"}></div>
45
+ </div>
46
+
47
+ {#if settingsMode.device === "mobile"}
48
+ <div class="mobile-note">
49
+ Editing <strong>mobile</strong> overrides — empty fields inherit desktop.
50
+ </div>
51
+ {/if}
52
+
53
+ <div class="tab-panels">
54
+ {#if activeTab === "global"}
55
+ <div class="tab-panel" id="panel-global">
56
+ <div class="panel-inner">
57
+ {#if GlobalSettings}
58
+ <SettingsRenderer entries={GlobalSettings.settings.entries} />
59
+ {/if}
60
+ </div>
61
+ </div>
62
+ {:else}
63
+ <div class="tab-panel" id="panel-component">
64
+ <div class="panel-inner">
65
+ {#if selectedComponent}
66
+ <p class="component-name">{selectedComponent.name}</p>
67
+ <SettingsRenderer entries={selectedComponent.settings.entries} />
68
+ {:else}
69
+ <div class="empty-state">
70
+ <div class="empty-icon">&#9632;</div>
71
+ <p class="empty-msg">
72
+ Select an element<br />to edit its settings
73
+ </p>
74
+ </div>
75
+ {/if}
76
+ {#if selectedComponent}
77
+ <button
78
+ onclick={() => deleteComponent(selectedComponent.id)}
79
+ class="delete-button">Delete</button
80
+ >
81
+ {/if}
82
+ </div>
83
+ </div>
84
+ {/if}
85
+ </div>
86
+ </div>
87
+ </aside>
88
+
89
+ <style>
90
+ .mobile-note {
91
+ margin: 10px 14px 0;
92
+ padding: 8px 10px;
93
+ background: var(--accent-subtle);
94
+ border: 1px solid var(--accent-glow);
95
+ border-radius: 8px;
96
+ font-size: 11px;
97
+ line-height: 1.4;
98
+ color: var(--accent);
99
+ }
100
+ </style>
@@ -0,0 +1,10 @@
1
+ import type { ElementEntry } from "../../service";
2
+ import "./styles.css";
3
+ interface RightBarProps {
4
+ selectedComponent: ElementEntry | null;
5
+ GlobalSettings: ElementEntry | null;
6
+ deleteComponent: (id: string) => void;
7
+ }
8
+ declare const RightBar: import("svelte").Component<RightBarProps, {}, "">;
9
+ type RightBar = ReturnType<typeof RightBar>;
10
+ export default RightBar;
@@ -0,0 +1,167 @@
1
+ aside {
2
+ width: var(--sidebar-width);
3
+ flex-shrink: 0;
4
+ background-color: var(--bg-surface);
5
+ border-left: 1px solid var(--border);
6
+ box-sizing: border-box;
7
+ display: flex;
8
+ flex-direction: column;
9
+ height: calc(100dvh - 56px);
10
+ overflow: hidden;
11
+ }
12
+
13
+ .header {
14
+ display: flex;
15
+ align-items: center;
16
+ padding: 18px 16px 14px;
17
+ border-bottom: 1px solid var(--border);
18
+ flex-shrink: 0;
19
+ }
20
+
21
+ .header h1 {
22
+ font-size: 0.7rem;
23
+ font-weight: 600;
24
+ letter-spacing: 0.1em;
25
+ text-transform: uppercase;
26
+ color: var(--text-secondary);
27
+ }
28
+
29
+ .tabs-wrapper {
30
+ display: flex;
31
+ flex-direction: column;
32
+ flex: 1;
33
+ overflow: hidden;
34
+ }
35
+
36
+ .tab-bar {
37
+ display: grid;
38
+ grid-template-columns: 1fr 1fr;
39
+ position: relative;
40
+ border-bottom: 1px solid var(--border);
41
+ flex-shrink: 0;
42
+ }
43
+
44
+ .tab-label {
45
+ display: flex;
46
+ align-items: center;
47
+ justify-content: center;
48
+ padding: 10px 0;
49
+ font-size: 0.78rem;
50
+ font-weight: 500;
51
+ color: var(--text-muted);
52
+ cursor: pointer;
53
+ transition: color var(--transition);
54
+ position: relative;
55
+ z-index: 1;
56
+ user-select: none;
57
+ background: none;
58
+ border: none;
59
+ font-family: inherit;
60
+ }
61
+
62
+ .tab-label.active {
63
+ color: var(--accent-hover);
64
+ }
65
+
66
+ .tab-label:hover {
67
+ color: var(--text-secondary);
68
+ }
69
+
70
+ .tab-indicator {
71
+ position: absolute;
72
+ bottom: -1px;
73
+ left: 0;
74
+ width: 50%;
75
+ height: 2px;
76
+ background: var(--accent);
77
+ border-radius: 2px 2px 0 0;
78
+ transition: transform var(--transition);
79
+ z-index: 2;
80
+ }
81
+
82
+ .tab-indicator.right {
83
+ transform: translateX(100%);
84
+ }
85
+
86
+ .tab-panels {
87
+ flex: 1;
88
+ overflow: hidden;
89
+ }
90
+
91
+ .tab-panel {
92
+ width: 100%;
93
+ height: 100%;
94
+ overflow-y: auto;
95
+ overflow-x: hidden;
96
+ }
97
+
98
+ .panel-inner {
99
+ padding: 16px;
100
+ }
101
+
102
+ .setting-row {
103
+ margin-bottom: 4px;
104
+ }
105
+
106
+ .component-name {
107
+ font-size: 0.75rem;
108
+ font-weight: 600;
109
+ color: var(--accent-hover);
110
+ text-transform: capitalize;
111
+ margin-bottom: 14px;
112
+ padding: 6px 10px;
113
+ background: var(--accent-subtle);
114
+ border-radius: var(--radius-sm);
115
+ }
116
+
117
+ .empty-state {
118
+ display: flex;
119
+ flex-direction: column;
120
+ align-items: center;
121
+ gap: 12px;
122
+ padding: 32px 16px;
123
+ }
124
+
125
+ .empty-icon {
126
+ font-size: 1.5rem;
127
+ color: var(--text-muted);
128
+ opacity: 0.4;
129
+ }
130
+
131
+ .empty-msg {
132
+ color: var(--text-muted);
133
+ font-size: 0.8rem;
134
+ text-align: center;
135
+ line-height: 1.6;
136
+ }
137
+ .delete-button {
138
+ display: flex;
139
+ align-items: center;
140
+ justify-content: center;
141
+ gap: 7px;
142
+ margin-top: 20px;
143
+ width: 100%;
144
+ padding: 9px 12px;
145
+ background: var(--danger-subtle);
146
+ color: var(--danger);
147
+ border: 1px solid rgba(240, 68, 68, 0.25);
148
+ border-radius: var(--radius-md);
149
+ cursor: pointer;
150
+ font-size: 0.82rem;
151
+ font-weight: 500;
152
+ font-family: var(--font);
153
+ transition:
154
+ background var(--transition),
155
+ border-color var(--transition),
156
+ color var(--transition);
157
+ }
158
+
159
+ .delete-btn:hover {
160
+ background: rgba(240, 68, 68, 0.2);
161
+ border-color: var(--danger);
162
+ color: var(--danger-hover);
163
+ }
164
+
165
+ .delete-icon {
166
+ font-size: 0.7rem;
167
+ }