@n8n/chat 0.3.0 → 0.4.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/README.md +22 -5
- package/chat.bundle.es.js +10757 -0
- package/chat.bundle.umd.js +18 -0
- package/chat.es.js +6867 -0
- package/chat.umd.js +18 -0
- package/package.json +62 -2
- package/style.css +1 -0
- package/types/App.vue.d.ts +8 -0
- package/types/__stories__/App.stories.d.ts +17 -0
- package/types/__tests__/index.spec.d.ts +1 -0
- package/types/__tests__/setup.d.ts +0 -0
- package/types/__tests__/utils/create.d.ts +5 -0
- package/types/__tests__/utils/fetch.d.ts +4 -0
- package/types/__tests__/utils/selectors.d.ts +12 -0
- package/types/api/generic.d.ts +6 -0
- package/types/api/message.d.ts +3 -0
- package/types/components/Button.vue.d.ts +9 -0
- package/types/components/Chat.vue.d.ts +2 -0
- package/types/components/ChatWindow.vue.d.ts +2 -0
- package/types/components/GetStarted.vue.d.ts +2 -0
- package/types/components/GetStartedFooter.vue.d.ts +2 -0
- package/types/components/Input.vue.d.ts +2 -0
- package/types/components/Layout.vue.d.ts +11 -0
- package/types/components/Message.vue.d.ts +21 -0
- package/types/components/MessageTyping.vue.d.ts +15 -0
- package/types/components/MessagesList.vue.d.ts +14 -0
- package/types/components/PoweredBy.vue.d.ts +2 -0
- package/types/composables/useChat.d.ts +2 -0
- package/types/composables/useI18n.d.ts +4 -0
- package/types/composables/useOptions.d.ts +4 -0
- package/types/constants/defaults.d.ts +3 -0
- package/types/constants/localStorage.d.ts +2 -0
- package/types/constants/symbols.d.ts +4 -0
- package/types/event-buses/chatEventBus.d.ts +1 -0
- package/types/index.d.ts +2 -0
- package/types/plugins/chat.d.ts +3 -0
- package/types/types/chat.d.ts +11 -0
- package/types/types/messages.d.ts +6 -0
- package/types/types/options.d.ts +24 -0
- package/types/types/webhook.d.ts +15 -0
- package/types/utils/event-bus.d.ts +8 -0
- package/types/utils/mount.d.ts +1 -0
- package/.eslintignore +0 -2
- package/.eslintrc.cjs +0 -52
- package/.np-config.json +0 -5
- package/.storybook/main.ts +0 -27
- package/.storybook/preview.scss +0 -4
- package/.storybook/preview.ts +0 -16
- package/.vscode/extensions.json +0 -3
- package/env.d.ts +0 -1
- package/index.html +0 -13
- package/resources/workflow.json +0 -293
- package/scripts/pack.js +0 -11
- package/scripts/postbuild.js +0 -16
- package/src/App.vue +0 -23
- package/src/__stories__/App.stories.ts +0 -43
- package/src/__tests__/index.spec.ts +0 -223
- package/src/__tests__/setup.ts +0 -1
- package/src/__tests__/utils/create.ts +0 -16
- package/src/__tests__/utils/fetch.ts +0 -18
- package/src/__tests__/utils/selectors.ts +0 -53
- package/src/api/generic.ts +0 -64
- package/src/api/message.ts +0 -31
- package/src/components/Button.vue +0 -41
- package/src/components/Chat.vue +0 -48
- package/src/components/ChatWindow.vue +0 -125
- package/src/components/GetStarted.vue +0 -24
- package/src/components/GetStartedFooter.vue +0 -20
- package/src/components/Input.vue +0 -93
- package/src/components/Layout.vue +0 -82
- package/src/components/Message.vue +0 -97
- package/src/components/MessageTyping.vue +0 -109
- package/src/components/MessagesList.vue +0 -37
- package/src/components/PoweredBy.vue +0 -17
- package/src/composables/useChat.ts +0 -7
- package/src/composables/useI18n.ts +0 -16
- package/src/composables/useOptions.ts +0 -11
- package/src/constants/defaults.ts +0 -25
- package/src/constants/localStorage.ts +0 -2
- package/src/constants/symbols.ts +0 -8
- package/src/event-buses/chatEventBus.ts +0 -3
- package/src/index.ts +0 -42
- package/src/main.scss +0 -40
- package/src/plugins/chat.ts +0 -101
- package/src/shims.d.ts +0 -6
- package/src/types/chat.ts +0 -12
- package/src/types/messages.ts +0 -6
- package/src/types/options.ts +0 -23
- package/src/types/webhook.ts +0 -17
- package/src/utils/event-bus.ts +0 -51
- package/src/utils/mount.ts +0 -16
- package/tsconfig.json +0 -27
- package/vite.config.ts +0 -51
- package/vitest.config.ts +0 -20
- /package/{public/favicon.ico → favicon.ico} +0 -0
- /package/{src/__tests__/utils/index.ts → types/__tests__/utils/index.d.ts} +0 -0
- /package/{src/api/index.ts → types/api/index.d.ts} +0 -0
- /package/{src/components/index.ts → types/components/index.d.ts} +0 -0
- /package/{src/composables/index.ts → types/composables/index.d.ts} +0 -0
- /package/{src/constants/index.ts → types/constants/index.d.ts} +0 -0
- /package/{src/event-buses/index.ts → types/event-buses/index.d.ts} +0 -0
- /package/{src/plugins/index.ts → types/plugins/index.d.ts} +0 -0
- /package/{src/types/index.ts → types/types/index.d.ts} +0 -0
- /package/{src/utils/index.ts → types/utils/index.d.ts} +0 -0
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function authenticatedFetch<T>(...args: Parameters<typeof fetch>): Promise<T>;
|
|
2
|
+
export declare function get<T>(url: string, query?: object, options?: RequestInit): Promise<T>;
|
|
3
|
+
export declare function post<T>(url: string, body?: object, options?: RequestInit): Promise<T>;
|
|
4
|
+
export declare function put<T>(url: string, body?: object, options?: RequestInit): Promise<T>;
|
|
5
|
+
export declare function patch<T>(url: string, body?: object, options?: RequestInit): Promise<T>;
|
|
6
|
+
export declare function del<T>(url: string, body?: object, options?: RequestInit): Promise<T>;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { ChatOptions, LoadPreviousSessionResponse, SendMessageResponse } from '../types';
|
|
2
|
+
export declare function loadPreviousSession(sessionId: string, options: ChatOptions): Promise<LoadPreviousSessionResponse>;
|
|
3
|
+
export declare function sendMessage(message: string, sessionId: string, options: ChatOptions): Promise<SendMessageResponse>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}, {}>, {
|
|
2
|
+
default?(_: {}): any;
|
|
3
|
+
}>;
|
|
4
|
+
export default _default;
|
|
5
|
+
type __VLS_WithTemplateSlots<T, S> = T & {
|
|
6
|
+
new (): {
|
|
7
|
+
$slots: S;
|
|
8
|
+
};
|
|
9
|
+
};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}, {}>;
|
|
2
|
+
export default _default;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}, {}>;
|
|
2
|
+
export default _default;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}, {}>;
|
|
2
|
+
export default _default;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}, {}>;
|
|
2
|
+
export default _default;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}, {}>;
|
|
2
|
+
export default _default;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}, {}>, {
|
|
2
|
+
header?(_: {}): any;
|
|
3
|
+
default?(_: {}): any;
|
|
4
|
+
footer?(_: {}): any;
|
|
5
|
+
}>;
|
|
6
|
+
export default _default;
|
|
7
|
+
type __VLS_WithTemplateSlots<T, S> = T & {
|
|
8
|
+
new (): {
|
|
9
|
+
$slots: S;
|
|
10
|
+
};
|
|
11
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ChatMessage } from '../types';
|
|
2
|
+
import type { PropType } from 'vue';
|
|
3
|
+
declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<{
|
|
4
|
+
message: {
|
|
5
|
+
type: PropType<ChatMessage>;
|
|
6
|
+
required: true;
|
|
7
|
+
};
|
|
8
|
+
}, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
|
|
9
|
+
message: {
|
|
10
|
+
type: PropType<ChatMessage>;
|
|
11
|
+
required: true;
|
|
12
|
+
};
|
|
13
|
+
}>>, {}, {}>, {
|
|
14
|
+
default?(_: {}): any;
|
|
15
|
+
}>;
|
|
16
|
+
export default _default;
|
|
17
|
+
type __VLS_WithTemplateSlots<T, S> = T & {
|
|
18
|
+
new (): {
|
|
19
|
+
$slots: S;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { PropType } from 'vue';
|
|
2
|
+
declare const _default: import("vue").DefineComponent<{
|
|
3
|
+
animation: {
|
|
4
|
+
type: PropType<"bouncing" | "scaling">;
|
|
5
|
+
default: string;
|
|
6
|
+
};
|
|
7
|
+
}, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
|
|
8
|
+
animation: {
|
|
9
|
+
type: PropType<"bouncing" | "scaling">;
|
|
10
|
+
default: string;
|
|
11
|
+
};
|
|
12
|
+
}>>, {
|
|
13
|
+
animation: "bouncing" | "scaling";
|
|
14
|
+
}, {}>;
|
|
15
|
+
export default _default;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { PropType } from 'vue';
|
|
2
|
+
import type { ChatMessage } from '../types';
|
|
3
|
+
declare const _default: import("vue").DefineComponent<{
|
|
4
|
+
messages: {
|
|
5
|
+
type: PropType<ChatMessage[]>;
|
|
6
|
+
required: true;
|
|
7
|
+
};
|
|
8
|
+
}, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
|
|
9
|
+
messages: {
|
|
10
|
+
type: PropType<ChatMessage[]>;
|
|
11
|
+
required: true;
|
|
12
|
+
};
|
|
13
|
+
}>>, {}, {}>;
|
|
14
|
+
export default _default;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}, {}>;
|
|
2
|
+
export default _default;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const chatEventBus: import('../utils').EventBus;
|
package/types/index.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ChatMessage } from '../types/messages';
|
|
2
|
+
import type { Ref } from 'vue';
|
|
3
|
+
export interface Chat {
|
|
4
|
+
initialMessages: Ref<ChatMessage[]>;
|
|
5
|
+
messages: Ref<ChatMessage[]>;
|
|
6
|
+
currentSessionId: Ref<string | null>;
|
|
7
|
+
waitingForResponse: Ref<boolean>;
|
|
8
|
+
loadPreviousSession: () => Promise<string>;
|
|
9
|
+
startNewSession: () => Promise<void>;
|
|
10
|
+
sendMessage: (text: string) => Promise<void>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export interface ChatOptions {
|
|
2
|
+
webhookUrl: string;
|
|
3
|
+
webhookConfig?: {
|
|
4
|
+
method?: 'GET' | 'POST';
|
|
5
|
+
headers?: Record<string, string>;
|
|
6
|
+
};
|
|
7
|
+
target?: string | Element;
|
|
8
|
+
mode?: 'window' | 'fullscreen';
|
|
9
|
+
showWelcomeScreen?: boolean;
|
|
10
|
+
chatInputKey?: string;
|
|
11
|
+
chatHistoryKey?: string;
|
|
12
|
+
defaultLanguage?: 'en';
|
|
13
|
+
initialMessages?: string[];
|
|
14
|
+
metadata?: Record<string, unknown>;
|
|
15
|
+
i18n: Record<string, {
|
|
16
|
+
title: string;
|
|
17
|
+
subtitle: string;
|
|
18
|
+
footer: string;
|
|
19
|
+
getStarted: string;
|
|
20
|
+
inputPlaceholder: string;
|
|
21
|
+
[message: string]: string;
|
|
22
|
+
}>;
|
|
23
|
+
theme?: {};
|
|
24
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface LoadPreviousSessionResponseItem {
|
|
2
|
+
id: string[];
|
|
3
|
+
kwargs: {
|
|
4
|
+
content: string;
|
|
5
|
+
additional_kwargs: Record<string, unknown>;
|
|
6
|
+
};
|
|
7
|
+
lc: number;
|
|
8
|
+
type: string;
|
|
9
|
+
}
|
|
10
|
+
export interface LoadPreviousSessionResponse {
|
|
11
|
+
data: LoadPreviousSessionResponseItem[];
|
|
12
|
+
}
|
|
13
|
+
export interface SendMessageResponse {
|
|
14
|
+
output: string;
|
|
15
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type CallbackFn = Function;
|
|
2
|
+
export type UnregisterFn = () => void;
|
|
3
|
+
export interface EventBus {
|
|
4
|
+
on: (eventName: string, fn: CallbackFn) => UnregisterFn;
|
|
5
|
+
off: (eventName: string, fn: CallbackFn) => void;
|
|
6
|
+
emit: <T = Event>(eventName: string, event?: T) => void;
|
|
7
|
+
}
|
|
8
|
+
export declare function createEventBus(): EventBus;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function createDefaultMountingTarget(mountingTarget: string): void;
|
package/.eslintignore
DELETED
package/.eslintrc.cjs
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
const sharedOptions = require('@n8n_io/eslint-config/shared');
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* @type {import('@types/eslint').ESLint.ConfigData}
|
|
5
|
-
*/
|
|
6
|
-
module.exports = {
|
|
7
|
-
extends: ['@n8n_io/eslint-config/frontend'],
|
|
8
|
-
|
|
9
|
-
...sharedOptions(__dirname, 'frontend'),
|
|
10
|
-
|
|
11
|
-
rules: {
|
|
12
|
-
'n8n-local-rules/dangerously-use-html-string-missing': 'off',
|
|
13
|
-
|
|
14
|
-
// TODO: Remove these
|
|
15
|
-
'id-denylist': 'warn',
|
|
16
|
-
'import/extensions': 'warn',
|
|
17
|
-
'import/no-default-export': 'warn',
|
|
18
|
-
'import/no-extraneous-dependencies': 'warn',
|
|
19
|
-
'import/order': 'off',
|
|
20
|
-
'import/no-cycle': 'warn',
|
|
21
|
-
'import/no-duplicates': 'warn',
|
|
22
|
-
'@typescript-eslint/ban-types': 'warn',
|
|
23
|
-
'@typescript-eslint/dot-notation': 'warn',
|
|
24
|
-
'@typescript-eslint/lines-between-class-members': 'warn',
|
|
25
|
-
'@typescript-eslint/member-delimiter-style': 'warn',
|
|
26
|
-
'@typescript-eslint/naming-convention': 'warn',
|
|
27
|
-
'@typescript-eslint/no-empty-interface': 'warn',
|
|
28
|
-
'@typescript-eslint/no-for-in-array': 'warn',
|
|
29
|
-
'@typescript-eslint/no-loop-func': 'warn',
|
|
30
|
-
'@typescript-eslint/no-non-null-assertion': 'warn',
|
|
31
|
-
'@typescript-eslint/no-shadow': 'warn',
|
|
32
|
-
'@typescript-eslint/no-this-alias': 'warn',
|
|
33
|
-
'@typescript-eslint/no-unnecessary-boolean-literal-compare': 'warn',
|
|
34
|
-
'@typescript-eslint/no-unnecessary-type-assertion': 'warn',
|
|
35
|
-
'@typescript-eslint/no-unsafe-argument': 'warn',
|
|
36
|
-
'@typescript-eslint/no-unsafe-call': 'warn',
|
|
37
|
-
'@typescript-eslint/no-unsafe-return': 'warn',
|
|
38
|
-
'@typescript-eslint/no-unused-expressions': 'warn',
|
|
39
|
-
'@typescript-eslint/no-unused-vars': 'warn',
|
|
40
|
-
'@typescript-eslint/no-use-before-define': 'warn',
|
|
41
|
-
'@typescript-eslint/no-var-requires': 'warn',
|
|
42
|
-
'@typescript-eslint/prefer-nullish-coalescing': 'warn',
|
|
43
|
-
'@typescript-eslint/prefer-optional-chain': 'warn',
|
|
44
|
-
'@typescript-eslint/restrict-plus-operands': 'warn',
|
|
45
|
-
'@typescript-eslint/unbound-method': 'warn',
|
|
46
|
-
'@typescript-eslint/ban-ts-comment': ['warn', { 'ts-ignore': true }],
|
|
47
|
-
'@typescript-eslint/no-redundant-type-constituents': 'warn',
|
|
48
|
-
'@typescript-eslint/no-base-to-string': 'warn',
|
|
49
|
-
'@typescript-eslint/no-explicit-any': 'warn',
|
|
50
|
-
'@typescript-eslint/no-unsafe-enum-comparison': 'warn',
|
|
51
|
-
},
|
|
52
|
-
};
|
package/.np-config.json
DELETED
package/.storybook/main.ts
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import type { StorybookConfig } from '@storybook/vue3-vite';
|
|
2
|
-
|
|
3
|
-
import { join, dirname } from 'path';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* This function is used to resolve the absolute path of a package.
|
|
7
|
-
* It is needed in projects that use Yarn PnP or are set up within a monorepo.
|
|
8
|
-
*/
|
|
9
|
-
function getAbsolutePath(value: string): any {
|
|
10
|
-
return dirname(require.resolve(join(value, 'package.json')));
|
|
11
|
-
}
|
|
12
|
-
const config: StorybookConfig = {
|
|
13
|
-
stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|mjs|ts|tsx)'],
|
|
14
|
-
addons: [
|
|
15
|
-
getAbsolutePath('@storybook/addon-links'),
|
|
16
|
-
getAbsolutePath('@storybook/addon-essentials'),
|
|
17
|
-
getAbsolutePath('@storybook/addon-interactions'),
|
|
18
|
-
],
|
|
19
|
-
framework: {
|
|
20
|
-
name: getAbsolutePath('@storybook/vue3-vite'),
|
|
21
|
-
options: {},
|
|
22
|
-
},
|
|
23
|
-
docs: {
|
|
24
|
-
autodocs: 'tag',
|
|
25
|
-
},
|
|
26
|
-
};
|
|
27
|
-
export default config;
|
package/.storybook/preview.scss
DELETED
package/.storybook/preview.ts
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import type { Preview } from '@storybook/vue3';
|
|
2
|
-
import './preview.scss';
|
|
3
|
-
|
|
4
|
-
const preview: Preview = {
|
|
5
|
-
parameters: {
|
|
6
|
-
actions: { argTypesRegex: '^on[A-Z].*' },
|
|
7
|
-
controls: {
|
|
8
|
-
matchers: {
|
|
9
|
-
color: /(background|color)$/i,
|
|
10
|
-
date: /Date$/,
|
|
11
|
-
},
|
|
12
|
-
},
|
|
13
|
-
},
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
export default preview;
|
package/.vscode/extensions.json
DELETED
package/env.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
/// <reference types="vite/client" />
|
package/index.html
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8">
|
|
5
|
-
<link rel="icon" href="/favicon.ico">
|
|
6
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
7
|
-
<title>Vite App</title>
|
|
8
|
-
</head>
|
|
9
|
-
<body>
|
|
10
|
-
<div id="app"></div>
|
|
11
|
-
<script type="module" src="/src/main.ts"></script>
|
|
12
|
-
</body>
|
|
13
|
-
</html>
|