@papu1337/builder 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +65 -0
- package/dist/elements/auth/authElement.svelte +115 -0
- package/dist/elements/auth/authElement.svelte.d.ts +7 -0
- package/dist/elements/auth/settings.d.ts +25 -0
- package/dist/elements/auth/settings.js +63 -0
- package/dist/elements/badge/badgeElement.svelte +48 -0
- package/dist/elements/badge/badgeElement.svelte.d.ts +7 -0
- package/dist/elements/badge/settings.d.ts +13 -0
- package/dist/elements/badge/settings.js +57 -0
- package/dist/elements/banner/bannerElement.svelte +46 -0
- package/dist/elements/banner/bannerElement.svelte.d.ts +7 -0
- package/dist/elements/banner/settings.d.ts +6 -0
- package/dist/elements/banner/settings.js +15 -0
- package/dist/elements/button/buttonElement.svelte +42 -0
- package/dist/elements/button/buttonElement.svelte.d.ts +7 -0
- package/dist/elements/button/settings.d.ts +16 -0
- package/dist/elements/button/settings.js +43 -0
- package/dist/elements/cards/cardsElement.svelte +136 -0
- package/dist/elements/cards/cardsElement.svelte.d.ts +7 -0
- package/dist/elements/cards/settings.d.ts +14 -0
- package/dist/elements/cards/settings.js +52 -0
- package/dist/elements/divider/dividerElement.svelte +34 -0
- package/dist/elements/divider/dividerElement.svelte.d.ts +7 -0
- package/dist/elements/divider/settings.d.ts +7 -0
- package/dist/elements/divider/settings.js +15 -0
- package/dist/elements/globalSettings.d.ts +8 -0
- package/dist/elements/globalSettings.js +39 -0
- package/dist/elements/products/productsElement.svelte +283 -0
- package/dist/elements/products/productsElement.svelte.d.ts +7 -0
- package/dist/elements/products/settings.d.ts +16 -0
- package/dist/elements/products/settings.js +56 -0
- package/dist/elements/terms/settings.d.ts +11 -0
- package/dist/elements/terms/settings.js +39 -0
- package/dist/elements/terms/termsElement.svelte +124 -0
- package/dist/elements/terms/termsElement.svelte.d.ts +7 -0
- package/dist/elements/text/settings.d.ts +11 -0
- package/dist/elements/text/settings.js +12 -0
- package/dist/elements/text/textElement.svelte +33 -0
- package/dist/elements/text/textElement.svelte.d.ts +7 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +3 -0
- package/dist/renderer/BuilderRenderer.svelte +38 -0
- package/dist/renderer/BuilderRenderer.svelte.d.ts +4 -0
- package/dist/renderer/index.d.ts +4 -0
- package/dist/renderer/index.js +3 -0
- package/dist/renderer/registry.d.ts +4 -0
- package/dist/renderer/registry.js +20 -0
- package/dist/renderer/renderer.vanilla.es.js +2835 -0
- package/dist/renderer/renderer.vanilla.umd.js +31 -0
- package/dist/renderer/resolve.d.ts +1 -0
- package/dist/renderer/resolve.js +30 -0
- package/dist/renderer/types.d.ts +19 -0
- package/dist/renderer/types.js +1 -0
- package/dist/renderer/vanilla.svelte.d.ts +2 -0
- package/dist/renderer/vanilla.svelte.js +28 -0
- package/dist/settings/base.svelte.d.ts +30 -0
- package/dist/settings/base.svelte.js +91 -0
- package/dist/settings/components/ColorSettings.svelte +141 -0
- package/dist/settings/components/ColorSettings.svelte.d.ts +4 -0
- package/dist/settings/components/ListSettings.svelte +167 -0
- package/dist/settings/components/ListSettings.svelte.d.ts +14 -0
- package/dist/settings/components/NumberSettings.svelte +67 -0
- package/dist/settings/components/NumberSettings.svelte.d.ts +5 -0
- package/dist/settings/components/SelectSettings.svelte +64 -0
- package/dist/settings/components/SelectSettings.svelte.d.ts +5 -0
- package/dist/settings/components/SettingsGroup.svelte +94 -0
- package/dist/settings/components/SettingsGroup.svelte.d.ts +9 -0
- package/dist/settings/components/TextSettings.svelte +8 -0
- package/dist/settings/components/TextSettings.svelte.d.ts +4 -0
- package/dist/settings/components/TranslatableSettings.svelte +208 -0
- package/dist/settings/components/TranslatableSettings.svelte.d.ts +8 -0
- package/dist/settings/components/UploadSettings.svelte +185 -0
- package/dist/settings/components/UploadSettings.svelte.d.ts +4 -0
- package/dist/settings/groups.d.ts +14 -0
- package/dist/settings/groups.js +35 -0
- package/dist/settings/implementation.svelte.js +41 -0
- package/dist/settings/index.d.ts +4 -0
- package/dist/settings/index.js +4 -0
- package/dist/settings/types.d.ts +51 -0
- package/dist/settings/types.js +1 -0
- package/package.json +86 -0
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { BaseSettingProps } from '../types';
|
|
3
|
+
|
|
4
|
+
let { title, value, onchange }: BaseSettingProps<string> = $props();
|
|
5
|
+
|
|
6
|
+
function handleFileChange(e: Event & { currentTarget: HTMLInputElement }) {
|
|
7
|
+
const file = e.currentTarget.files?.[0];
|
|
8
|
+
|
|
9
|
+
if (!file) return;
|
|
10
|
+
|
|
11
|
+
const reader = new FileReader();
|
|
12
|
+
|
|
13
|
+
reader.onload = () => {
|
|
14
|
+
const result = reader.result;
|
|
15
|
+
if (typeof result === 'string') {
|
|
16
|
+
onchange(result);
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
reader.readAsDataURL(file);
|
|
21
|
+
}
|
|
22
|
+
</script>
|
|
23
|
+
|
|
24
|
+
<div class="setting-item">
|
|
25
|
+
<label for={title}>{title}</label>
|
|
26
|
+
|
|
27
|
+
{#if value}
|
|
28
|
+
<div class="preview-container">
|
|
29
|
+
<img src={value} alt="Preview" class="preview-img" />
|
|
30
|
+
<div class="preview-overlay">
|
|
31
|
+
<label class="replace-btn">
|
|
32
|
+
↻ Replace
|
|
33
|
+
<input type="file" accept="image/*" onchange={handleFileChange} />
|
|
34
|
+
</label>
|
|
35
|
+
<button type="button" class="remove-btn" onclick={() => onchange('')}>✕</button>
|
|
36
|
+
</div>
|
|
37
|
+
</div>
|
|
38
|
+
{:else}
|
|
39
|
+
<label class="upload-zone">
|
|
40
|
+
<div class="upload-inner">
|
|
41
|
+
<span class="upload-icon">⇧</span>
|
|
42
|
+
<span class="upload-text">Click to upload</span>
|
|
43
|
+
<span class="upload-hint">PNG, JPG, GIF, SVG</span>
|
|
44
|
+
</div>
|
|
45
|
+
<input type="file" accept="image/*" onchange={handleFileChange} />
|
|
46
|
+
</label>
|
|
47
|
+
{/if}
|
|
48
|
+
</div>
|
|
49
|
+
|
|
50
|
+
<style>
|
|
51
|
+
.setting-item {
|
|
52
|
+
display: flex;
|
|
53
|
+
flex-direction: column;
|
|
54
|
+
gap: 8px;
|
|
55
|
+
padding: 10px 0;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
label:not(.upload-zone):not(.replace-btn) {
|
|
59
|
+
font-size: 0.75rem;
|
|
60
|
+
font-weight: 500;
|
|
61
|
+
color: var(--text-secondary);
|
|
62
|
+
text-transform: capitalize;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.upload-zone {
|
|
66
|
+
display: block;
|
|
67
|
+
cursor: pointer;
|
|
68
|
+
border: 1px dashed var(--border-light);
|
|
69
|
+
border-radius: var(--radius-md);
|
|
70
|
+
padding: 20px;
|
|
71
|
+
text-align: center;
|
|
72
|
+
transition:
|
|
73
|
+
border-color var(--transition),
|
|
74
|
+
background var(--transition);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.upload-zone:hover {
|
|
78
|
+
border-color: var(--accent);
|
|
79
|
+
background: var(--accent-subtle);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.upload-zone input[type='file'] {
|
|
83
|
+
display: none;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.upload-inner {
|
|
87
|
+
display: flex;
|
|
88
|
+
flex-direction: column;
|
|
89
|
+
align-items: center;
|
|
90
|
+
gap: 4px;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.upload-icon {
|
|
94
|
+
font-size: 1.5rem;
|
|
95
|
+
color: var(--text-muted);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.upload-text {
|
|
99
|
+
font-size: 0.8rem;
|
|
100
|
+
font-weight: 500;
|
|
101
|
+
color: var(--text-secondary);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.upload-hint {
|
|
105
|
+
font-size: 0.7rem;
|
|
106
|
+
color: var(--text-muted);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.preview-container {
|
|
110
|
+
position: relative;
|
|
111
|
+
width: 100%;
|
|
112
|
+
height: 100px;
|
|
113
|
+
border-radius: var(--radius-md);
|
|
114
|
+
overflow: hidden;
|
|
115
|
+
border: 1px solid var(--border-light);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
.preview-img {
|
|
119
|
+
width: 100%;
|
|
120
|
+
height: 100%;
|
|
121
|
+
object-fit: cover;
|
|
122
|
+
display: block;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.preview-overlay {
|
|
126
|
+
position: absolute;
|
|
127
|
+
inset: 0;
|
|
128
|
+
background: rgba(0, 0, 0, 0.55);
|
|
129
|
+
display: flex;
|
|
130
|
+
align-items: center;
|
|
131
|
+
justify-content: center;
|
|
132
|
+
gap: 8px;
|
|
133
|
+
opacity: 0;
|
|
134
|
+
transition: opacity var(--transition);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.preview-container:hover .preview-overlay {
|
|
138
|
+
opacity: 1;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
.replace-btn {
|
|
142
|
+
display: inline-flex;
|
|
143
|
+
align-items: center;
|
|
144
|
+
gap: 5px;
|
|
145
|
+
padding: 6px 12px;
|
|
146
|
+
background: var(--accent);
|
|
147
|
+
color: #fff;
|
|
148
|
+
border-radius: var(--radius-sm);
|
|
149
|
+
font-size: 0.75rem;
|
|
150
|
+
font-weight: 500;
|
|
151
|
+
cursor: pointer;
|
|
152
|
+
font-family: var(--font);
|
|
153
|
+
transition: background var(--transition);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
.replace-btn:hover {
|
|
157
|
+
background: var(--accent-hover);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
.replace-btn input[type='file'] {
|
|
161
|
+
display: none;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
.remove-btn {
|
|
165
|
+
display: inline-flex;
|
|
166
|
+
align-items: center;
|
|
167
|
+
justify-content: center;
|
|
168
|
+
width: 28px;
|
|
169
|
+
height: 28px;
|
|
170
|
+
background: var(--danger-subtle);
|
|
171
|
+
color: var(--danger);
|
|
172
|
+
border: 1px solid rgba(240, 68, 68, 0.3);
|
|
173
|
+
border-radius: var(--radius-sm);
|
|
174
|
+
font-size: 0.75rem;
|
|
175
|
+
cursor: pointer;
|
|
176
|
+
transition:
|
|
177
|
+
background var(--transition),
|
|
178
|
+
color var(--transition);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
.remove-btn:hover {
|
|
182
|
+
background: rgba(240, 68, 68, 0.25);
|
|
183
|
+
color: var(--danger-hover);
|
|
184
|
+
}
|
|
185
|
+
</style>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ColorSetting, NumberSetting, SelectSetting, TextSetting } from './implementation.svelte';
|
|
2
|
+
type TypographyDefaults = {
|
|
3
|
+
color?: string;
|
|
4
|
+
fontSize?: number;
|
|
5
|
+
fontFamily?: string;
|
|
6
|
+
fontWeight?: string;
|
|
7
|
+
};
|
|
8
|
+
export declare function createTypographySettings(defaults?: TypographyDefaults): {
|
|
9
|
+
readonly color: ColorSetting;
|
|
10
|
+
readonly fontSize: NumberSetting;
|
|
11
|
+
readonly fontFamily: TextSetting;
|
|
12
|
+
readonly fontWeight: SelectSetting;
|
|
13
|
+
};
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { ColorSetting, NumberSetting, SelectSetting, TextSetting } from './implementation.svelte';
|
|
2
|
+
export function createTypographySettings(defaults) {
|
|
3
|
+
return {
|
|
4
|
+
color: new ColorSetting({
|
|
5
|
+
title: 'Color',
|
|
6
|
+
defaultValue: defaults?.color ?? '#000000'
|
|
7
|
+
}),
|
|
8
|
+
fontSize: new NumberSetting({
|
|
9
|
+
title: 'Font Size',
|
|
10
|
+
defaultValue: defaults?.fontSize ?? 16,
|
|
11
|
+
extra: { min: 8, max: 120, step: 1 }
|
|
12
|
+
}),
|
|
13
|
+
fontFamily: new TextSetting({
|
|
14
|
+
title: 'Font Family',
|
|
15
|
+
defaultValue: defaults?.fontFamily ?? 'Arial'
|
|
16
|
+
}),
|
|
17
|
+
fontWeight: new SelectSetting({
|
|
18
|
+
title: 'Font Weight',
|
|
19
|
+
defaultValue: defaults?.fontWeight ?? '400',
|
|
20
|
+
extra: {
|
|
21
|
+
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
|
+
};
|
|
35
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import TextSettingUI from './components/TextSettings.svelte';
|
|
2
|
+
import NumberSettingUI from './components/NumberSettings.svelte';
|
|
3
|
+
import ColorSettingUI from './components/ColorSettings.svelte';
|
|
4
|
+
import SelectSettingUI from './components/SelectSettings.svelte';
|
|
5
|
+
import ListSettingUI from './components/ListSettings.svelte';
|
|
6
|
+
import UploadSettingUI from './components/UploadSettings.svelte';
|
|
7
|
+
import TranslatableSettingUI from './components/TranslatableSettings.svelte';
|
|
8
|
+
import { Setting } from './base.svelte';
|
|
9
|
+
export class TextSetting extends Setting {
|
|
10
|
+
component = TextSettingUI;
|
|
11
|
+
}
|
|
12
|
+
export class NumberSetting extends Setting {
|
|
13
|
+
component = NumberSettingUI;
|
|
14
|
+
}
|
|
15
|
+
export class ColorSetting extends Setting {
|
|
16
|
+
component = ColorSettingUI;
|
|
17
|
+
}
|
|
18
|
+
export class ListSetting extends Setting {
|
|
19
|
+
component = ListSettingUI;
|
|
20
|
+
}
|
|
21
|
+
export class SelectSetting extends Setting {
|
|
22
|
+
component = SelectSettingUI;
|
|
23
|
+
}
|
|
24
|
+
export class UploadSetting extends Setting {
|
|
25
|
+
component = UploadSettingUI;
|
|
26
|
+
}
|
|
27
|
+
export class TranslatableSetting extends Setting {
|
|
28
|
+
component = TranslatableSettingUI;
|
|
29
|
+
isTranslatable = true;
|
|
30
|
+
getProps() {
|
|
31
|
+
return {
|
|
32
|
+
value: this.value,
|
|
33
|
+
title: this.title,
|
|
34
|
+
onchange: (v) => {
|
|
35
|
+
const oldValue = this.value;
|
|
36
|
+
this.value = v;
|
|
37
|
+
this.onValueChange?.(oldValue, v);
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
export type BaseSettingProps<V> = {
|
|
2
|
+
value: V;
|
|
3
|
+
title: string;
|
|
4
|
+
onchange: (value: V) => void;
|
|
5
|
+
onpreview?: (value: V) => void;
|
|
6
|
+
};
|
|
7
|
+
export interface SettingComponent {
|
|
8
|
+
readonly title: string;
|
|
9
|
+
readonly component: unknown;
|
|
10
|
+
value: unknown;
|
|
11
|
+
getProps(): Record<string, unknown>;
|
|
12
|
+
}
|
|
13
|
+
export interface SettingsGroupComponent {
|
|
14
|
+
readonly title: string;
|
|
15
|
+
readonly entries: SettingMap;
|
|
16
|
+
clone(): SettingsGroupComponent;
|
|
17
|
+
}
|
|
18
|
+
export type SettingMapEntry = SettingComponent | SettingsGroupComponent;
|
|
19
|
+
export type SettingMap = Record<string, SettingMapEntry>;
|
|
20
|
+
type ResolveValue<E> = E extends {
|
|
21
|
+
isTranslatable: true;
|
|
22
|
+
} ? string : E extends {
|
|
23
|
+
value: infer V;
|
|
24
|
+
} ? V : never;
|
|
25
|
+
export type InferSettingsMapType<T> = T extends {
|
|
26
|
+
entries: infer E;
|
|
27
|
+
} ? {
|
|
28
|
+
[K in keyof E]: ResolveValue<E[K]>;
|
|
29
|
+
} : never;
|
|
30
|
+
export type NumberExtra = {
|
|
31
|
+
min?: number;
|
|
32
|
+
max?: number;
|
|
33
|
+
step?: number;
|
|
34
|
+
};
|
|
35
|
+
export type ListItem = {
|
|
36
|
+
title: string;
|
|
37
|
+
content: string;
|
|
38
|
+
};
|
|
39
|
+
export type ListExtra = {
|
|
40
|
+
addButtonText?: string;
|
|
41
|
+
titlePlaceholder?: string;
|
|
42
|
+
contentPlaceholder?: string;
|
|
43
|
+
};
|
|
44
|
+
export type SelectOption = {
|
|
45
|
+
label: string;
|
|
46
|
+
value: string;
|
|
47
|
+
};
|
|
48
|
+
export type SelectExtra = {
|
|
49
|
+
options: SelectOption[];
|
|
50
|
+
};
|
|
51
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/package.json
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@papu1337/builder",
|
|
3
|
+
"version": "0.0.3",
|
|
4
|
+
"scripts": {
|
|
5
|
+
"dev": "vite dev",
|
|
6
|
+
"build": "vite build && npm run prepack",
|
|
7
|
+
"preview": "vite preview",
|
|
8
|
+
"prepare": "svelte-kit sync || echo ''",
|
|
9
|
+
"build:renderer": "vite build --config vite.config.renderer.ts",
|
|
10
|
+
"prepack": "svelte-kit sync && svelte-package && npm run build:renderer && publint",
|
|
11
|
+
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
|
|
12
|
+
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
|
|
13
|
+
"lint": "prettier --check . && eslint .",
|
|
14
|
+
"lint:fix": "prettier --write . && eslint . --fix",
|
|
15
|
+
"format": "prettier --write .",
|
|
16
|
+
"test:unit": "vitest",
|
|
17
|
+
"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"
|
|
21
|
+
},
|
|
22
|
+
"files": [
|
|
23
|
+
"dist",
|
|
24
|
+
"!dist/**/*.test.*",
|
|
25
|
+
"!dist/**/*.spec.*"
|
|
26
|
+
],
|
|
27
|
+
"sideEffects": [
|
|
28
|
+
"**/*.css"
|
|
29
|
+
],
|
|
30
|
+
"svelte": "./dist/index.js",
|
|
31
|
+
"types": "./dist/index.d.ts",
|
|
32
|
+
"type": "module",
|
|
33
|
+
"exports": {
|
|
34
|
+
".": {
|
|
35
|
+
"types": "./dist/index.d.ts",
|
|
36
|
+
"svelte": "./dist/index.js"
|
|
37
|
+
},
|
|
38
|
+
"./renderer": {
|
|
39
|
+
"types": "./dist/renderer/index.d.ts",
|
|
40
|
+
"svelte": "./dist/renderer/index.js"
|
|
41
|
+
},
|
|
42
|
+
"./renderer/vanilla": {
|
|
43
|
+
"types": "./dist/renderer/types.d.ts",
|
|
44
|
+
"default": "./dist/renderer/renderer.vanilla.es.js"
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
"peerDependencies": {
|
|
48
|
+
"svelte": "^5.0.0"
|
|
49
|
+
},
|
|
50
|
+
"devDependencies": {
|
|
51
|
+
"@eslint/compat": "^2.0.2",
|
|
52
|
+
"@eslint/js": "^9.39.2",
|
|
53
|
+
"@sveltejs/adapter-auto": "^7.0.0",
|
|
54
|
+
"@sveltejs/kit": "^2.50.2",
|
|
55
|
+
"@sveltejs/package": "^2.5.7",
|
|
56
|
+
"@sveltejs/vite-plugin-svelte": "^6.2.4",
|
|
57
|
+
"@tailwindcss/forms": "^0.5.11",
|
|
58
|
+
"@tailwindcss/typography": "^0.5.19",
|
|
59
|
+
"@tailwindcss/vite": "^4.1.18",
|
|
60
|
+
"@types/node": "^24",
|
|
61
|
+
"@vitest/browser-playwright": "^4.1.0",
|
|
62
|
+
"eslint": "^9.39.2",
|
|
63
|
+
"eslint-config-prettier": "^10.1.8",
|
|
64
|
+
"eslint-plugin-svelte": "^3.14.0",
|
|
65
|
+
"globals": "^17.3.0",
|
|
66
|
+
"playwright": "^1.58.2",
|
|
67
|
+
"prettier": "^3.8.1",
|
|
68
|
+
"prettier-plugin-svelte": "^3.4.1",
|
|
69
|
+
"prettier-plugin-tailwindcss": "^0.7.2",
|
|
70
|
+
"publint": "^0.3.17",
|
|
71
|
+
"svelte": "^5.51.0",
|
|
72
|
+
"svelte-check": "^4.4.2",
|
|
73
|
+
"tailwindcss": "^4.1.18",
|
|
74
|
+
"typescript": "^5.9.3",
|
|
75
|
+
"typescript-eslint": "^8.54.0",
|
|
76
|
+
"vite": "^7.3.1",
|
|
77
|
+
"vitest": "^4.1.0",
|
|
78
|
+
"vitest-browser-svelte": "^2.0.2"
|
|
79
|
+
},
|
|
80
|
+
"keywords": [
|
|
81
|
+
"svelte"
|
|
82
|
+
],
|
|
83
|
+
"dependencies": {
|
|
84
|
+
"svelte-dnd-action": "^0.9.69"
|
|
85
|
+
}
|
|
86
|
+
}
|