@wix/ditto-codegen-public 1.0.136 → 1.0.137
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/examples-apps/ai-chatbot/src/dashboard/pages/product/ProductChat.tsx +26 -20
- package/dist/examples-apps/ai-chatbot/src/dashboard/pages/product/page.tsx +12 -11
- package/dist/out.js +213 -170
- package/package.json +2 -2
- package/dist/examples-apps/ai-chatbot/src/backend/api/chat/api.ts +0 -62
- package/dist/examples-apps/ai-chatbot/src/backend/api/settings/api.ts +0 -39
- package/dist/examples-apps/ai-chatbot/src/backend/database.ts +0 -86
- package/dist/examples-apps/ai-chatbot/src/dashboard/pages/product/page.json +0 -6
- package/dist/examples-apps/ai-chatbot/src/dashboard/pages/settings/page.json +0 -6
- package/dist/examples-apps/ai-chatbot/src/dashboard/pages/settings/page.tsx +0 -105
- package/dist/examples-apps/ai-chatbot/src/dashboard/pages/wix_logo.svg +0 -18
- package/dist/examples-apps/ai-chatbot/src/dashboard/utils.ts +0 -27
- package/dist/examples-apps/custom-products-catalog/.nvmrc +0 -1
- package/dist/examples-apps/custom-products-catalog/README.md +0 -21
- package/dist/examples-apps/custom-products-catalog/package-lock.json +0 -8694
- package/dist/examples-apps/custom-products-catalog/package.json +0 -33
- package/dist/examples-apps/custom-products-catalog/src/dashboard/components/create-product.tsx +0 -54
- package/dist/examples-apps/custom-products-catalog/src/dashboard/hooks/stores.ts +0 -60
- package/dist/examples-apps/custom-products-catalog/src/dashboard/pages/page.json +0 -5
- package/dist/examples-apps/custom-products-catalog/src/dashboard/pages/page.tsx +0 -297
- package/dist/examples-apps/custom-products-catalog/src/dashboard/pages/wix_logo.svg +0 -18
- package/dist/examples-apps/custom-products-catalog/src/dashboard/withProviders.tsx +0 -16
- package/dist/examples-apps/custom-products-catalog/src/env.d.ts +0 -4
- package/dist/examples-apps/custom-products-catalog/tsconfig.json +0 -8
- package/dist/examples-apps/custom-products-catalog/wix.config.json +0 -5
- package/dist/examples-apps/site-popup/.nvmrc +0 -1
- package/dist/examples-apps/site-popup/README.md +0 -21
- package/dist/examples-apps/site-popup/package.json +0 -51
- package/dist/examples-apps/site-popup/src/components/activation-configuration.tsx +0 -49
- package/dist/examples-apps/site-popup/src/components/close-button.css +0 -33
- package/dist/examples-apps/site-popup/src/components/close-button.tsx +0 -31
- package/dist/examples-apps/site-popup/src/components/date-range-picker.tsx +0 -49
- package/dist/examples-apps/site-popup/src/components/image-picker.tsx +0 -33
- package/dist/examples-apps/site-popup/src/components/popup/index.css +0 -133
- package/dist/examples-apps/site-popup/src/components/popup/index.tsx +0 -71
- package/dist/examples-apps/site-popup/src/components/site-popup-settings.tsx +0 -120
- package/dist/examples-apps/site-popup/src/dashboard/hooks/wix-embeds.ts +0 -33
- package/dist/examples-apps/site-popup/src/dashboard/pages/page.tsx +0 -78
- package/dist/examples-apps/site-popup/src/dashboard/withProviders.tsx +0 -22
- package/dist/examples-apps/site-popup/src/extensions.ts +0 -20
- package/dist/examples-apps/site-popup/src/site/embedded-scripts/site-popup/embedded.html +0 -13
- package/dist/examples-apps/site-popup/src/site/embedded-scripts/site-popup/popup-overlay/index.css +0 -21
- package/dist/examples-apps/site-popup/src/site/embedded-scripts/site-popup/popup-overlay/index.tsx +0 -57
- package/dist/examples-apps/site-popup/src/types.ts +0 -14
- package/dist/examples-apps/site-popup/tsconfig.json +0 -9
- package/dist/examples-apps/site-popup/wix.config.json +0 -5
- package/dist/examples-apps/spis-examples/src/dashboard/pages/page.tsx +0 -59
- package/dist/examples-apps/spis-examples/src/dashboard/pages/wix_logo.svg +0 -18
- package/dist/examples-apps/top-blog-posts/.nvmrc +0 -1
- package/dist/examples-apps/top-blog-posts/README.md +0 -21
- package/dist/examples-apps/top-blog-posts/package-lock.json +0 -6406
- package/dist/examples-apps/top-blog-posts/package.json +0 -31
- package/dist/examples-apps/top-blog-posts/src/dashboard/pages/blog-utils.ts +0 -44
- package/dist/examples-apps/top-blog-posts/src/dashboard/pages/page.tsx +0 -129
- package/dist/examples-apps/top-blog-posts/src/dashboard/pages/wix_logo.svg +0 -18
- package/dist/examples-apps/top-blog-posts/src/env.d.ts +0 -4
- package/dist/examples-apps/top-blog-posts/tsconfig.json +0 -8
- package/dist/examples-apps/top-blog-posts/wix.config.json +0 -5
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wix/ditto-codegen-public",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.137",
|
|
4
4
|
"description": "AI-powered Wix CLI app generator - standalone executable",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"build": "node build.mjs",
|
|
@@ -24,5 +24,5 @@
|
|
|
24
24
|
"@wix/ditto-codegen": "1.0.0",
|
|
25
25
|
"esbuild": "^0.25.9"
|
|
26
26
|
},
|
|
27
|
-
"falconPackageHash": "
|
|
27
|
+
"falconPackageHash": "dbe549ff7876a6b68935bcfe206a0f50a4799b2218e9ec2c94a3d154"
|
|
28
28
|
}
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { appInstances } from "@wix/app-management";
|
|
2
|
-
import OpenAI from "openai";
|
|
3
|
-
import { getBehaviorDirective } from "../../database";
|
|
4
|
-
|
|
5
|
-
type ChatRequestBody = {
|
|
6
|
-
messages: {
|
|
7
|
-
author: string;
|
|
8
|
-
text: string;
|
|
9
|
-
}[];
|
|
10
|
-
product: string;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export async function POST(req: Request) {
|
|
14
|
-
try {
|
|
15
|
-
const { instance } = await appInstances.getAppInstance();
|
|
16
|
-
const { messages, product } = (await req.json()) as ChatRequestBody;
|
|
17
|
-
|
|
18
|
-
if (!instance?.instanceId) {
|
|
19
|
-
return new Response("Unauthorized", { status: 401 });
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
const openai = new OpenAI({
|
|
23
|
-
apiKey: "", // Use your OpenAi API key here
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
const behaviorDirective = await getBehaviorDirective(instance.instanceId);
|
|
27
|
-
|
|
28
|
-
const completion = await openai.chat.completions.create({
|
|
29
|
-
model: "gpt-3.5-turbo",
|
|
30
|
-
messages: [
|
|
31
|
-
{
|
|
32
|
-
role: "system",
|
|
33
|
-
content: `
|
|
34
|
-
You are Business Buddy, a chatbot that helps business owners with their businesses.
|
|
35
|
-
You are tasked with helping a business owner with one of their products.
|
|
36
|
-
The business owner will chat with you about their product and you will give them advice on how to improve it.
|
|
37
|
-
|
|
38
|
-
The business owner has given the following directive as to how you should respond to their messages:
|
|
39
|
-
|
|
40
|
-
${behaviorDirective}
|
|
41
|
-
|
|
42
|
-
The product is presented below as a JSON object: ${product}
|
|
43
|
-
`,
|
|
44
|
-
},
|
|
45
|
-
...messages.map((message) => ({
|
|
46
|
-
role:
|
|
47
|
-
message.author === "Business Buddy"
|
|
48
|
-
? ("assistant" as const)
|
|
49
|
-
: ("user" as const),
|
|
50
|
-
content: message.text,
|
|
51
|
-
})),
|
|
52
|
-
],
|
|
53
|
-
max_tokens: 2000,
|
|
54
|
-
n: 1,
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
return Response.json({ message: completion.choices[0].message?.content });
|
|
58
|
-
} catch (error) {
|
|
59
|
-
console.error(`Error getting settings for an instance`, error);
|
|
60
|
-
return new Response("Internal Server Error", { status: 500 });
|
|
61
|
-
}
|
|
62
|
-
}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { appInstances } from "@wix/app-management";
|
|
2
|
-
import { getBehaviorDirective, saveBehaviorDirective } from "../../database";
|
|
3
|
-
|
|
4
|
-
export async function GET() {
|
|
5
|
-
try {
|
|
6
|
-
const { instance } = await appInstances.getAppInstance();
|
|
7
|
-
|
|
8
|
-
if (!instance?.instanceId) {
|
|
9
|
-
return new Response("Unauthorized", { status: 401 });
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
const behaviorDirective = await getBehaviorDirective(instance.instanceId);
|
|
13
|
-
|
|
14
|
-
return Response.json({ behaviorDirective });
|
|
15
|
-
} catch (error) {
|
|
16
|
-
console.log(`Error getting settings for an instance`, error);
|
|
17
|
-
return new Response("Internal Server Error", { status: 500 });
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export async function POST(req: Request) {
|
|
22
|
-
const settingsUpdate = await req.json();
|
|
23
|
-
|
|
24
|
-
try {
|
|
25
|
-
const { instance } = await appInstances.getAppInstance();
|
|
26
|
-
|
|
27
|
-
if (!instance?.instanceId) {
|
|
28
|
-
return new Response("Unauthorized", { status: 401 });
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
console.log("Updating settings for", instance.instanceId, settingsUpdate);
|
|
32
|
-
await saveBehaviorDirective(instance.instanceId, settingsUpdate);
|
|
33
|
-
|
|
34
|
-
return new Response("Success");
|
|
35
|
-
} catch (error) {
|
|
36
|
-
console.error("Error updating settings", error);
|
|
37
|
-
return new Response(`Internal Server Error: ${error}`, { status: 500 });
|
|
38
|
-
}
|
|
39
|
-
}
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
// Implementation using Wix CMS to store behavior directives for each app instance.
|
|
2
|
-
import { items } from '@wix/data';
|
|
3
|
-
|
|
4
|
-
// Collection ID for storing behavior directives in CMS
|
|
5
|
-
const BEHAVIOR_DIRECTIVES_COLLECTION = 'behaviorDirectives';
|
|
6
|
-
|
|
7
|
-
interface BehaviorDirectiveItem {
|
|
8
|
-
_id?: string;
|
|
9
|
-
instanceId: string;
|
|
10
|
-
behaviorDirective: string;
|
|
11
|
-
_createdDate?: Date;
|
|
12
|
-
_updatedDate?: Date;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export async function getBehaviorDirective(instanceId: string): Promise<string> {
|
|
16
|
-
console.log(`Getting directive for instanceId: ${instanceId}`);
|
|
17
|
-
|
|
18
|
-
try {
|
|
19
|
-
// Query CMS for behavior directive by instanceId
|
|
20
|
-
const results = await items.query(BEHAVIOR_DIRECTIVES_COLLECTION)
|
|
21
|
-
.eq('instanceId', instanceId)
|
|
22
|
-
.limit(1)
|
|
23
|
-
.find();
|
|
24
|
-
|
|
25
|
-
if (results.items.length > 0) {
|
|
26
|
-
const item = results.items[0] as BehaviorDirectiveItem;
|
|
27
|
-
return item.behaviorDirective;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
// Return default behavior directive if none exists
|
|
31
|
-
return [
|
|
32
|
-
`This is the behavior directive of instanceId: ${instanceId}.`,
|
|
33
|
-
"This behavior directive is stored in Wix CMS.",
|
|
34
|
-
].join("\n");
|
|
35
|
-
} catch (error) {
|
|
36
|
-
console.error('Error getting behavior directive from CMS:', error);
|
|
37
|
-
// Fallback to default behavior directive
|
|
38
|
-
return [
|
|
39
|
-
`This is the behavior directive of instanceId: ${instanceId}.`,
|
|
40
|
-
"Error retrieving from CMS - using default directive.",
|
|
41
|
-
].join("\n");
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
export async function saveBehaviorDirective(
|
|
46
|
-
instanceId: string,
|
|
47
|
-
directives: Record<string, string>,
|
|
48
|
-
): Promise<void> {
|
|
49
|
-
console.log(
|
|
50
|
-
`Storing directive: '${JSON.stringify(directives)}' for instanceId: ${instanceId}`,
|
|
51
|
-
);
|
|
52
|
-
|
|
53
|
-
try {
|
|
54
|
-
// Extract behavior directive from the directives object
|
|
55
|
-
// Assuming the main directive is stored in a 'behaviorDirective' key
|
|
56
|
-
const behaviorDirectiveValue = directives.behaviorDirective || JSON.stringify(directives);
|
|
57
|
-
|
|
58
|
-
// Check if an item already exists for this instanceId
|
|
59
|
-
const existingResults = await items.query(BEHAVIOR_DIRECTIVES_COLLECTION)
|
|
60
|
-
.eq('instanceId', instanceId)
|
|
61
|
-
.limit(1)
|
|
62
|
-
.find();
|
|
63
|
-
|
|
64
|
-
if (existingResults.items.length > 0) {
|
|
65
|
-
// Update existing item
|
|
66
|
-
const existingItem = existingResults.items[0] as BehaviorDirectiveItem;
|
|
67
|
-
await items.update(BEHAVIOR_DIRECTIVES_COLLECTION, {
|
|
68
|
-
_id: existingItem._id!,
|
|
69
|
-
instanceId: instanceId,
|
|
70
|
-
behaviorDirective: behaviorDirectiveValue,
|
|
71
|
-
});
|
|
72
|
-
console.log(`Updated behavior directive for instanceId: ${instanceId}`);
|
|
73
|
-
} else {
|
|
74
|
-
// Insert new item
|
|
75
|
-
await items.insert(BEHAVIOR_DIRECTIVES_COLLECTION, {
|
|
76
|
-
instanceId: instanceId,
|
|
77
|
-
behaviorDirective: behaviorDirectiveValue,
|
|
78
|
-
});
|
|
79
|
-
console.log(`Created new behavior directive for instanceId: ${instanceId}`);
|
|
80
|
-
}
|
|
81
|
-
} catch (error) {
|
|
82
|
-
console.error('Error saving behavior directive to CMS:', error);
|
|
83
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
84
|
-
throw new Error(`Failed to save behavior directive: ${errorMessage}`);
|
|
85
|
-
}
|
|
86
|
-
}
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
import React, { useState, type FC } from "react";
|
|
2
|
-
import { useMutation, useQuery } from "react-query";
|
|
3
|
-
import { dashboard } from '@wix/dashboard';
|
|
4
|
-
import { httpClient } from "@wix/essentials";
|
|
5
|
-
import {
|
|
6
|
-
Button,
|
|
7
|
-
Card,
|
|
8
|
-
EmptyState,
|
|
9
|
-
FormField,
|
|
10
|
-
InputArea,
|
|
11
|
-
Loader,
|
|
12
|
-
Page,
|
|
13
|
-
SectionHeader,
|
|
14
|
-
} from "@wix/design-system";
|
|
15
|
-
import "@wix/design-system/styles.global.css";
|
|
16
|
-
import { withProviders } from "../../withProviders";
|
|
17
|
-
|
|
18
|
-
async function getSettings() {
|
|
19
|
-
const data = await httpClient.fetchWithAuth(`${import.meta.env.BASE_API_URL}/settings`);
|
|
20
|
-
const settings = await data.json();
|
|
21
|
-
|
|
22
|
-
return settings;
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
async function saveSettings(behaviorDirective: string) {
|
|
26
|
-
return httpClient.fetchWithAuth(`${import.meta.env.BASE_API_URL}/settings`, {
|
|
27
|
-
method: "POST",
|
|
28
|
-
body: JSON.stringify({ behaviorDirective }),
|
|
29
|
-
});
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
const SettingsPage: FC = () => {
|
|
33
|
-
const { data, isLoading, isError } = useQuery("settings", getSettings);
|
|
34
|
-
const [behaviorDirective, setBehaviorDirective] = useState<string>(data?.behaviorDirective);
|
|
35
|
-
|
|
36
|
-
const mutation = useMutation(
|
|
37
|
-
async (newBehaviorDirective: string) => saveSettings(newBehaviorDirective),
|
|
38
|
-
{
|
|
39
|
-
onSuccess: () => {
|
|
40
|
-
dashboard.showToast({
|
|
41
|
-
message: "Changes saved!",
|
|
42
|
-
type: "success",
|
|
43
|
-
});
|
|
44
|
-
},
|
|
45
|
-
},
|
|
46
|
-
);
|
|
47
|
-
|
|
48
|
-
if (isLoading) {
|
|
49
|
-
return (
|
|
50
|
-
<Page>
|
|
51
|
-
<Page.Content>
|
|
52
|
-
<Loader />
|
|
53
|
-
</Page.Content>
|
|
54
|
-
</Page>
|
|
55
|
-
);
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
if (isError) {
|
|
59
|
-
return (
|
|
60
|
-
<EmptyState
|
|
61
|
-
theme="page-no-border"
|
|
62
|
-
title="We couldn't load settings"
|
|
63
|
-
subtitle="Looks like there was a technical issue."
|
|
64
|
-
/>
|
|
65
|
-
);
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
return (
|
|
69
|
-
<Page>
|
|
70
|
-
<Page.Header title="Behavior Settings" />
|
|
71
|
-
<Page.Content>
|
|
72
|
-
<Card>
|
|
73
|
-
<Card.Header
|
|
74
|
-
title="Behavior Directive"
|
|
75
|
-
suffix={
|
|
76
|
-
<Button
|
|
77
|
-
size="small"
|
|
78
|
-
onClick={() => { mutation.mutate(behaviorDirective) }}
|
|
79
|
-
disabled={mutation.isLoading}
|
|
80
|
-
>
|
|
81
|
-
{mutation.isLoading ? <Loader size="tiny" /> : "Save"}
|
|
82
|
-
</Button>
|
|
83
|
-
}
|
|
84
|
-
/>
|
|
85
|
-
<SectionHeader title="Give Business Buddy directives on how to answer your questions" />
|
|
86
|
-
<Card.Content>
|
|
87
|
-
<FormField label="Directive">
|
|
88
|
-
<InputArea
|
|
89
|
-
rows={4}
|
|
90
|
-
maxLength={300}
|
|
91
|
-
hasCounter
|
|
92
|
-
resizable
|
|
93
|
-
value={behaviorDirective}
|
|
94
|
-
onChange={(e) => setBehaviorDirective(e.target.value)}
|
|
95
|
-
placeholder={data?.behaviorDirective ?? "You always end your messages with a Spanish goodbye."}
|
|
96
|
-
/>
|
|
97
|
-
</FormField>
|
|
98
|
-
</Card.Content>
|
|
99
|
-
</Card>
|
|
100
|
-
</Page.Content>
|
|
101
|
-
</Page>
|
|
102
|
-
);
|
|
103
|
-
};
|
|
104
|
-
|
|
105
|
-
export default withProviders(SettingsPage);
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
<svg width="166" height="64" viewBox="0 0 166 64" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
-
<g clip-path="url(#clip0_14809_9463)">
|
|
3
|
-
<path
|
|
4
|
-
d="M165.304 0H156.173C153.64 0 151.273 1.25433 149.85 3.35199L137.639 21.3662C137.313 21.844 136.608 21.844 136.283 21.3662L124.071 3.35199C122.651 1.25433 120.281 0 117.748 0H108.617L130.371 32.0894L108.737 64H117.868C120.401 64 122.769 62.7457 124.192 60.648L136.283 42.8126C136.608 42.3349 137.313 42.3349 137.639 42.8126L149.73 60.648C151.15 62.7457 153.52 64 156.053 64H165.184L143.551 32.0894L165.304 0Z"
|
|
5
|
-
fill="black" />
|
|
6
|
-
<path
|
|
7
|
-
d="M89.8281 6.54652V64H94.1922C97.8088 64 100.74 61.0697 100.74 57.4535V0H96.3755C92.7588 0 89.8281 2.93032 89.8281 6.54652Z"
|
|
8
|
-
fill="black" />
|
|
9
|
-
<path
|
|
10
|
-
d="M81.8276 0H77.944C73.6681 0 69.9633 2.95701 69.0158 7.12564L60.3278 45.3185L52.7234 9.66632C51.3168 3.0771 44.5559 -1.36641 37.6375 0.544431C33.2307 1.76139 29.9637 5.48434 29.0108 9.95455L21.4839 45.2705L12.8118 7.12831C11.8616 2.95968 8.15687 0 3.88092 0H0L14.5548 63.9973H20.0692C25.0738 63.9973 29.3978 60.4986 30.4415 55.604L39.7461 11.9401C39.8608 11.3984 40.3466 11.006 40.8991 11.006C41.4516 11.006 41.9374 11.3984 42.0522 11.9401L51.3648 55.6067C52.4084 60.5012 56.7324 63.9973 61.7371 63.9973H67.2702L81.8276 0Z"
|
|
11
|
-
fill="black" />
|
|
12
|
-
</g>
|
|
13
|
-
<defs>
|
|
14
|
-
<clipPath id="clip0_14809_9463">
|
|
15
|
-
<rect width="165.305" height="64" fill="white" />
|
|
16
|
-
</clipPath>
|
|
17
|
-
</defs>
|
|
18
|
-
</svg>
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
export function getAppInstance() {
|
|
2
|
-
return new URLSearchParams(window.location.search).get("instance")!;
|
|
3
|
-
}
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
export async function fetchWithWixInstance(
|
|
7
|
-
relativePath: string,
|
|
8
|
-
method: string,
|
|
9
|
-
body?: any,
|
|
10
|
-
) {
|
|
11
|
-
// In Wix CLI apps, backend APIs are served from the current origin
|
|
12
|
-
const baseUrl = import.meta.env.VITE_API_BASE_URL || window.location.origin;
|
|
13
|
-
const res = await fetch(
|
|
14
|
-
`${baseUrl}/${relativePath}`,
|
|
15
|
-
{
|
|
16
|
-
method,
|
|
17
|
-
headers: {
|
|
18
|
-
Authorization: getAppInstance(),
|
|
19
|
-
...(body && { "Content-Type": "application/json" }),
|
|
20
|
-
},
|
|
21
|
-
body: body && JSON.stringify(body),
|
|
22
|
-
},
|
|
23
|
-
);
|
|
24
|
-
|
|
25
|
-
const json = await res.json();
|
|
26
|
-
return json;
|
|
27
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
22.10.0
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
# custom-products-catalog
|
|
2
|
-
|
|
3
|
-
This project was bootstrapped with [Create Wix App](https://www.npmjs.com/package/@wix/create-app).
|
|
4
|
-
Read more about it in the [Wix CLI for Apps
|
|
5
|
-
documentation](https://dev.wix.com/docs/build-apps/developer-tools/cli/get-started/about-the-wix-cli-for-apps).
|
|
6
|
-
|
|
7
|
-
## Setup 🔧
|
|
8
|
-
|
|
9
|
-
##### Install dependencies:
|
|
10
|
-
|
|
11
|
-
```console
|
|
12
|
-
npm install
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
## Available Scripts
|
|
16
|
-
|
|
17
|
-
In the project directory, you can run:
|
|
18
|
-
|
|
19
|
-
```console
|
|
20
|
-
npm run dev
|
|
21
|
-
```
|