@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,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;
@@ -19,8 +19,8 @@
19
19
  .setting-item {
20
20
  display: flex;
21
21
  flex-direction: column;
22
- gap: 6px;
23
- padding: 10px 0;
22
+ gap: 8px;
23
+ padding: 12px 0;
24
24
  }
25
25
 
26
26
  .label-row {
@@ -30,20 +30,19 @@
30
30
  }
31
31
 
32
32
  label {
33
- font-size: 0.75rem;
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: 7px 10px;
40
+ padding: 9px 11px;
42
41
  background: var(--bg-elevated);
43
42
  border: 1px solid var(--border-light);
44
- border-radius: var(--radius-sm);
43
+ border-radius: var(--radius-md);
45
44
  color: var(--text-primary);
46
- font-size: 0.82rem;
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, defaultOpen = false, children }: SettingsGroupProps = $props();
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" class:open={isOpen}>
16
- <button class="group-header" onclick={() => (isOpen = !isOpen)}>
17
- <span class="group-title">{title}</span>
18
- <svg
19
- class="chevron"
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
- border: 1px solid var(--border-light);
44
- border-radius: var(--radius-sm);
45
- overflow: hidden;
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: 10px 12px;
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-title {
27
+ .group-legend {
73
28
  font-size: 0.72rem;
74
29
  font-weight: 600;
75
- letter-spacing: 0.06em;
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
- padding: 4px 12px 8px;
92
- border-top: 1px solid var(--border-light);
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;
@@ -4,5 +4,55 @@
4
4
  let { value, title, onchange }: BaseSettingProps<string> = $props();
5
5
  </script>
6
6
 
7
- <label for={title}>{title}</label>
8
- <input type="text" bind:value onchange={() => onchange(value)} />
7
+ <div class="setting-item">
8
+ <div class="label-row">
9
+ <label for={title}>{title}</label>
10
+ </div>
11
+ <input
12
+ type="text"
13
+ id={title}
14
+ bind:value
15
+ onchange={() => onchange(value)}
16
+ />
17
+ </div>
18
+
19
+ <style>
20
+ .setting-item {
21
+ display: flex;
22
+ flex-direction: column;
23
+ gap: 8px;
24
+ padding: 12px 0;
25
+ }
26
+
27
+ .label-row {
28
+ display: flex;
29
+ justify-content: space-between;
30
+ align-items: center;
31
+ }
32
+
33
+ label {
34
+ font-size: 0.8rem;
35
+ font-weight: 500;
36
+ color: var(--text-secondary);
37
+ }
38
+
39
+ input[type='text'] {
40
+ width: 100%;
41
+ padding: 9px 11px;
42
+ background: var(--bg-elevated);
43
+ border: 1px solid var(--border-light);
44
+ border-radius: var(--radius-md);
45
+ color: var(--text-primary);
46
+ font-size: 0.8rem;
47
+ font-family: var(--font);
48
+ outline: none;
49
+ transition:
50
+ border-color var(--transition),
51
+ box-shadow var(--transition);
52
+ }
53
+
54
+ input[type='text']:focus {
55
+ border-color: var(--accent);
56
+ box-shadow: 0 0 0 3px var(--accent-glow);
57
+ }
58
+ </style>
@@ -1,5 +1,5 @@
1
1
  <script lang="ts">
2
- import { languages, locale } from '../../../hooks/useTranslation.svelte.js';
2
+ import { languages, locale } from '../../hooks/useTranslation.svelte.js';
3
3
 
4
4
  interface Props {
5
5
  value: Record<string, string>;
@@ -23,7 +23,7 @@
23
23
 
24
24
  <div class="translatable-setting">
25
25
  <button class="translatable-header" onclick={() => (isExpanded = !isExpanded)}>
26
- <label>{title}</label>
26
+ <span class="title-label">{title}</span>
27
27
  <div class="header-right">
28
28
  <span class="current-lang-badge">{locale.current.toUpperCase()}</span>
29
29
  <svg
@@ -74,8 +74,8 @@
74
74
  .translatable-setting {
75
75
  display: flex;
76
76
  flex-direction: column;
77
- gap: 6px;
78
- padding: 10px 0;
77
+ gap: 8px;
78
+ padding: 12px 0;
79
79
  }
80
80
 
81
81
  .translatable-header {
@@ -90,11 +90,10 @@
90
90
  width: 100%;
91
91
  }
92
92
 
93
- .translatable-header label {
94
- font-size: 0.75rem;
93
+ .translatable-header .title-label {
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: 8px 10px;
128
+ padding: 9px 11px;
130
129
  background: var(--bg-elevated);
131
130
  border: 1px solid var(--border-light);
132
- border-radius: var(--radius-sm);
133
- font-size: 0.78rem;
131
+ border-radius: var(--radius-md);
132
+ font-size: 0.8rem;
134
133
  color: var(--text-primary);
135
134
  font-family: inherit;
136
135
  outline: none;
@@ -145,17 +144,17 @@
145
144
  .lang-inputs {
146
145
  display: flex;
147
146
  flex-direction: column;
148
- gap: 4px;
147
+ gap: 6px;
149
148
  border: 1px solid var(--border-light);
150
- border-radius: var(--radius-sm);
151
- padding: 6px;
149
+ border-radius: var(--radius-md);
150
+ padding: 8px;
152
151
  background: var(--bg-elevated);
153
152
  }
154
153
 
155
154
  .lang-row {
156
155
  display: flex;
157
156
  align-items: center;
158
- gap: 8px;
157
+ gap: 10px;
159
158
  }
160
159
 
161
160
  .lang-row.active {
@@ -185,11 +184,11 @@
185
184
  .lang-row input {
186
185
  flex: 1;
187
186
  min-width: 0;
188
- padding: 6px 8px;
187
+ padding: 8px 10px;
189
188
  background: var(--bg-surface);
190
189
  border: 1px solid var(--border-light);
191
- border-radius: var(--radius-sm);
192
- font-size: 0.75rem;
190
+ border-radius: var(--radius-md);
191
+ font-size: 0.82rem;
193
192
  color: var(--text-primary);
194
193
  font-family: inherit;
195
194
  outline: none;
@@ -51,15 +51,14 @@
51
51
  .setting-item {
52
52
  display: flex;
53
53
  flex-direction: column;
54
- gap: 8px;
55
- padding: 10px 0;
54
+ gap: 10px;
55
+ padding: 12px 0;
56
56
  }
57
57
 
58
58
  label:not(.upload-zone):not(.replace-btn) {
59
- font-size: 0.75rem;
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.8rem;
98
+ font-size: 0.72rem;
100
99
  font-weight: 500;
101
100
  color: var(--text-secondary);
102
101
  }
@@ -142,11 +141,11 @@
142
141
  display: inline-flex;
143
142
  align-items: center;
144
143
  gap: 5px;
145
- padding: 6px 12px;
144
+ padding: 8px 14px;
146
145
  background: var(--accent);
147
146
  color: #fff;
148
- border-radius: var(--radius-sm);
149
- font-size: 0.75rem;
147
+ border-radius: var(--radius-md);
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 { ColorSetting, NumberSetting, SelectSetting, TextSetting } from './implementation.svelte';
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 createTypographySettings(defaults?: TypographyDefaults): {
9
- readonly color: ColorSetting;
10
- readonly fontSize: NumberSetting;
11
- readonly fontFamily: TextSetting;
12
- readonly fontWeight: SelectSetting;
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 {};
@@ -1,35 +1,59 @@
1
- import { ColorSetting, NumberSetting, SelectSetting, TextSetting } from './implementation.svelte';
2
- export function createTypographySettings(defaults) {
3
- return {
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: 'Color',
6
- defaultValue: defaults?.color ?? '#000000'
10
+ title: "Color",
11
+ defaultValue: defaults?.color ?? "#000000",
12
+ extra: { allowGradient: defaults?.colorGradient ?? false },
7
13
  }),
8
14
  fontSize: new NumberSetting({
9
- title: 'Font Size',
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: 'Font Family',
15
- defaultValue: defaults?.fontFamily ?? 'Arial'
20
+ title: "Font Family",
21
+ defaultValue: defaults?.fontFamily ?? "Arial",
16
22
  }),
17
23
  fontWeight: new SelectSetting({
18
- title: 'Font Weight',
19
- defaultValue: defaults?.fontWeight ?? '400',
24
+ title: "Font Weight",
25
+ defaultValue: defaults?.fontWeight ?? "400",
20
26
  extra: {
21
27
  options: [
22
- { label: 'Thin', value: '100' },
23
- { label: 'Extra Light', value: '200' },
24
- { label: 'Light', value: '300' },
25
- { label: 'Regular', value: '400' },
26
- { label: 'Medium', value: '500' },
27
- { label: 'Semi Bold', value: '600' },
28
- { label: 'Bold', value: '700' },
29
- { label: 'Extra Bold', value: '800' },
30
- { label: 'Black', value: '900' }
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
  }
@@ -1,4 +1,6 @@
1
1
  export * from './base.svelte';
2
+ export * from './mode.svelte';
2
3
  export * from './implementation.svelte';
4
+ export * from './repeater.svelte';
3
5
  export * from './groups';
4
6
  export * from './types';
@@ -1,4 +1,6 @@
1
1
  export * from './base.svelte';
2
+ export * from './mode.svelte';
2
3
  export * from './implementation.svelte';
4
+ export * from './repeater.svelte';
3
5
  export * from './groups';
4
6
  export * from './types';
@@ -0,0 +1,4 @@
1
+ export declare const settingsMode: {
2
+ device: "desktop" | "mobile";
3
+ };
4
+ export declare function setSettingsDevice(device: 'desktop' | 'mobile'): void;
@@ -0,0 +1,4 @@
1
+ export const settingsMode = $state({ device: 'desktop' });
2
+ export function setSettingsDevice(device) {
3
+ settingsMode.device = device;
4
+ }