@liwe3/webcomponents 1.0.2 → 1.1.0
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/AITextEditor.d.ts +173 -0
- package/dist/AITextEditor.d.ts.map +1 -0
- package/dist/ChunkUploader.d.ts +103 -0
- package/dist/ChunkUploader.d.ts.map +1 -0
- package/dist/ChunkUploader.js +614 -0
- package/dist/ChunkUploader.js.map +1 -0
- package/dist/ContainerBox.d.ts +112 -0
- package/dist/ContainerBox.d.ts.map +1 -0
- package/dist/ContainerBox.js +359 -0
- package/dist/ContainerBox.js.map +1 -0
- package/dist/DateSelector.d.ts +103 -0
- package/dist/DateSelector.d.ts.map +1 -0
- package/dist/DateSelector.js +372 -0
- package/dist/DateSelector.js.map +1 -0
- package/dist/Drawer.d.ts +63 -0
- package/dist/Drawer.d.ts.map +1 -0
- package/dist/Drawer.js +340 -0
- package/dist/Drawer.js.map +1 -0
- package/dist/ImageView.d.ts +42 -0
- package/dist/ImageView.d.ts.map +1 -0
- package/dist/ImageView.js +209 -0
- package/dist/ImageView.js.map +1 -0
- package/dist/PopoverMenu.d.ts +103 -0
- package/dist/PopoverMenu.d.ts.map +1 -0
- package/dist/PopoverMenu.js +312 -0
- package/dist/PopoverMenu.js.map +1 -0
- package/dist/SmartSelect.d.ts +99 -0
- package/dist/SmartSelect.d.ts.map +1 -0
- package/dist/SmartSelect.js.map +1 -1
- package/dist/Toast.d.ts +127 -0
- package/dist/Toast.d.ts.map +1 -0
- package/dist/Toast.js +507 -0
- package/dist/Toast.js.map +1 -0
- package/dist/TreeView.d.ts +84 -0
- package/dist/TreeView.d.ts.map +1 -0
- package/dist/TreeView.js +478 -0
- package/dist/TreeView.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +30 -6
- package/dist/index.js.map +1 -1
- package/package.json +43 -3
- package/src/ChunkUploader.ts +921 -0
- package/src/ContainerBox.ts +570 -0
- package/src/DateSelector.ts +550 -0
- package/src/Drawer.ts +435 -0
- package/src/ImageView.ts +265 -0
- package/src/PopoverMenu.ts +595 -0
- package/src/SmartSelect.ts +231 -231
- package/src/Toast.ts +834 -0
- package/src/TreeView.ts +673 -0
- package/src/index.ts +70 -3
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AITextEditor Web Component
|
|
3
|
+
* A text editor with AI-powered text continuation suggestions
|
|
4
|
+
*/
|
|
5
|
+
export interface AITextEditorConfig {
|
|
6
|
+
apiKey?: string;
|
|
7
|
+
suggestionDelay?: number;
|
|
8
|
+
systemPrompt?: string;
|
|
9
|
+
apiEndpoint?: string;
|
|
10
|
+
modelName?: string;
|
|
11
|
+
context?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare class AITextEditorElement extends HTMLElement {
|
|
14
|
+
shadowRoot: ShadowRoot;
|
|
15
|
+
private editor;
|
|
16
|
+
private editorBackground;
|
|
17
|
+
private loading;
|
|
18
|
+
private editorStatus;
|
|
19
|
+
private typingTimer;
|
|
20
|
+
private fullSuggestion;
|
|
21
|
+
private suggestionParagraphs;
|
|
22
|
+
private currentParagraphIndex;
|
|
23
|
+
private isShowingSuggestion;
|
|
24
|
+
private apiKey;
|
|
25
|
+
private suggestionDelay;
|
|
26
|
+
private systemPrompt;
|
|
27
|
+
private apiEndpoint;
|
|
28
|
+
private modelName;
|
|
29
|
+
private context;
|
|
30
|
+
constructor();
|
|
31
|
+
/**
|
|
32
|
+
* Renders the component's HTML structure
|
|
33
|
+
*/
|
|
34
|
+
private render;
|
|
35
|
+
/**
|
|
36
|
+
* Initializes the component after rendering
|
|
37
|
+
*/
|
|
38
|
+
private init;
|
|
39
|
+
/**
|
|
40
|
+
* Updates the background layer with current text and suggestions
|
|
41
|
+
*/
|
|
42
|
+
private updateBackground;
|
|
43
|
+
/**
|
|
44
|
+
* Synchronizes scroll position between editor and background
|
|
45
|
+
*/
|
|
46
|
+
private syncScroll;
|
|
47
|
+
/**
|
|
48
|
+
* Handles text input events
|
|
49
|
+
*/
|
|
50
|
+
private handleTextInput;
|
|
51
|
+
/**
|
|
52
|
+
* Handles keyboard events
|
|
53
|
+
*/
|
|
54
|
+
private handleKeyDown;
|
|
55
|
+
/**
|
|
56
|
+
* Requests an AI suggestion for the current text
|
|
57
|
+
*/
|
|
58
|
+
private requestSuggestion;
|
|
59
|
+
/**
|
|
60
|
+
* Calls the OpenAI API for text completion
|
|
61
|
+
*/
|
|
62
|
+
private callOpenAI;
|
|
63
|
+
/**
|
|
64
|
+
* Shows an AI suggestion
|
|
65
|
+
*/
|
|
66
|
+
private showSuggestion;
|
|
67
|
+
/**
|
|
68
|
+
* Splits text into paragraphs/sentences
|
|
69
|
+
*/
|
|
70
|
+
private splitIntoParagraphs;
|
|
71
|
+
/**
|
|
72
|
+
* Hides the current suggestion
|
|
73
|
+
*/
|
|
74
|
+
private hideSuggestion;
|
|
75
|
+
/**
|
|
76
|
+
* Accepts the current suggestion paragraph
|
|
77
|
+
*/
|
|
78
|
+
private acceptSuggestion;
|
|
79
|
+
/**
|
|
80
|
+
* Shows loading indicator
|
|
81
|
+
*/
|
|
82
|
+
private showLoading;
|
|
83
|
+
/**
|
|
84
|
+
* Hides loading indicator
|
|
85
|
+
*/
|
|
86
|
+
private hideLoading;
|
|
87
|
+
/**
|
|
88
|
+
* Shows an error message
|
|
89
|
+
*/
|
|
90
|
+
private showError;
|
|
91
|
+
/**
|
|
92
|
+
* Escapes HTML special characters
|
|
93
|
+
*/
|
|
94
|
+
private escapeHtml;
|
|
95
|
+
/**
|
|
96
|
+
* Sets the text content
|
|
97
|
+
*/
|
|
98
|
+
setText(text: string): void;
|
|
99
|
+
/**
|
|
100
|
+
* Gets the text content
|
|
101
|
+
*/
|
|
102
|
+
getText(): string;
|
|
103
|
+
/**
|
|
104
|
+
* Sets the API key
|
|
105
|
+
*/
|
|
106
|
+
setApiKey(key: string): void;
|
|
107
|
+
/**
|
|
108
|
+
* Saves API key to localStorage
|
|
109
|
+
*/
|
|
110
|
+
private _saveApiKey;
|
|
111
|
+
/**
|
|
112
|
+
* Loads API key from localStorage
|
|
113
|
+
*/
|
|
114
|
+
private _loadApiKey;
|
|
115
|
+
/**
|
|
116
|
+
* Gets the API key
|
|
117
|
+
*/
|
|
118
|
+
getApiKey(): string;
|
|
119
|
+
/**
|
|
120
|
+
* Sets the suggestion delay in seconds
|
|
121
|
+
*/
|
|
122
|
+
setSuggestionDelay(seconds: number): void;
|
|
123
|
+
/**
|
|
124
|
+
* Gets the suggestion delay in seconds
|
|
125
|
+
*/
|
|
126
|
+
getSuggestionDelay(): number;
|
|
127
|
+
/**
|
|
128
|
+
* Sets the system prompt
|
|
129
|
+
*/
|
|
130
|
+
setSystemPrompt(prompt: string): void;
|
|
131
|
+
/**
|
|
132
|
+
* Gets the system prompt
|
|
133
|
+
*/
|
|
134
|
+
getSystemPrompt(): string;
|
|
135
|
+
/**
|
|
136
|
+
* Sets the API endpoint
|
|
137
|
+
*/
|
|
138
|
+
setApiEndpoint(endpoint: string): void;
|
|
139
|
+
/**
|
|
140
|
+
* Gets the API endpoint
|
|
141
|
+
*/
|
|
142
|
+
getApiEndpoint(): string;
|
|
143
|
+
/**
|
|
144
|
+
* Sets the model name
|
|
145
|
+
*/
|
|
146
|
+
setModelName(modelName: string): void;
|
|
147
|
+
/**
|
|
148
|
+
* Gets the model name
|
|
149
|
+
*/
|
|
150
|
+
getModelName(): string;
|
|
151
|
+
/**
|
|
152
|
+
* Sets the context
|
|
153
|
+
*/
|
|
154
|
+
setContext(context: string): void;
|
|
155
|
+
/**
|
|
156
|
+
* Gets the context
|
|
157
|
+
*/
|
|
158
|
+
getContext(): string;
|
|
159
|
+
/**
|
|
160
|
+
* Saves settings to localStorage
|
|
161
|
+
*/
|
|
162
|
+
private _saveSettings;
|
|
163
|
+
/**
|
|
164
|
+
* Loads settings from localStorage
|
|
165
|
+
*/
|
|
166
|
+
private _loadSettings;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Conditionally defines the custom element if in a browser environment.
|
|
170
|
+
*/
|
|
171
|
+
declare const defineAITextEditor: (tagName?: string) => void;
|
|
172
|
+
export { defineAITextEditor };
|
|
173
|
+
//# sourceMappingURL=AITextEditor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AITextEditor.d.ts","sourceRoot":"","sources":["../src/AITextEditor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ChunkUploader Web Component
|
|
3
|
+
* A file uploader with drag & drop, file previews, and chunked upload support
|
|
4
|
+
*/
|
|
5
|
+
export interface UploadedFile {
|
|
6
|
+
id: string;
|
|
7
|
+
file: File;
|
|
8
|
+
status: 'pending' | 'uploading' | 'completed' | 'error' | 'aborted';
|
|
9
|
+
progress: number;
|
|
10
|
+
uploadedBytes: number;
|
|
11
|
+
preview?: string;
|
|
12
|
+
error?: string;
|
|
13
|
+
uploadId?: string;
|
|
14
|
+
key?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface ChunkUploaderConfig {
|
|
17
|
+
serverURL: string;
|
|
18
|
+
chunkSize: number;
|
|
19
|
+
authToken?: string;
|
|
20
|
+
validFiletypes?: string[];
|
|
21
|
+
maxFileSize?: number;
|
|
22
|
+
onfilecomplete?: (file: UploadedFile) => void;
|
|
23
|
+
onuploadcomplete?: (files: UploadedFile[]) => void;
|
|
24
|
+
}
|
|
25
|
+
export declare class ChunkUploaderElement extends HTMLElement {
|
|
26
|
+
shadowRoot: ShadowRoot;
|
|
27
|
+
private files;
|
|
28
|
+
private config;
|
|
29
|
+
private isUploading;
|
|
30
|
+
private abortController;
|
|
31
|
+
constructor();
|
|
32
|
+
static get observedAttributes(): string[];
|
|
33
|
+
attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
|
|
34
|
+
get serverURL(): string;
|
|
35
|
+
set serverURL(value: string);
|
|
36
|
+
get chunkSize(): number;
|
|
37
|
+
set chunkSize(value: number);
|
|
38
|
+
get authToken(): string | undefined;
|
|
39
|
+
set authToken(value: string | undefined);
|
|
40
|
+
get validFiletypes(): string[] | undefined;
|
|
41
|
+
set validFiletypes(value: string[] | undefined);
|
|
42
|
+
get maxFileSize(): number;
|
|
43
|
+
set maxFileSize(value: number);
|
|
44
|
+
set onfilecomplete(callback: ((file: UploadedFile) => void) | undefined);
|
|
45
|
+
set onuploadcomplete(callback: ((files: UploadedFile[]) => void) | undefined);
|
|
46
|
+
/**
|
|
47
|
+
* Formats bytes to human readable string
|
|
48
|
+
*/
|
|
49
|
+
private formatBytes;
|
|
50
|
+
/**
|
|
51
|
+
* Generates a unique ID for a file
|
|
52
|
+
*/
|
|
53
|
+
private generateFileId;
|
|
54
|
+
/**
|
|
55
|
+
* Validates a file based on config
|
|
56
|
+
*/
|
|
57
|
+
private validateFile;
|
|
58
|
+
/**
|
|
59
|
+
* Generates a preview for image files
|
|
60
|
+
*/
|
|
61
|
+
private generatePreview;
|
|
62
|
+
/**
|
|
63
|
+
* Adds files to the upload queue
|
|
64
|
+
*/
|
|
65
|
+
private addFiles;
|
|
66
|
+
/**
|
|
67
|
+
* Removes a file from the queue
|
|
68
|
+
*/
|
|
69
|
+
private removeFile;
|
|
70
|
+
/**
|
|
71
|
+
* Uploads a single file with chunking
|
|
72
|
+
*/
|
|
73
|
+
private uploadFile;
|
|
74
|
+
/**
|
|
75
|
+
* Starts uploading all pending files
|
|
76
|
+
*/
|
|
77
|
+
private startUpload;
|
|
78
|
+
/**
|
|
79
|
+
* Aborts all pending and uploading files
|
|
80
|
+
*/
|
|
81
|
+
private abortAllUploads;
|
|
82
|
+
/**
|
|
83
|
+
* Updates a single file card in the DOM
|
|
84
|
+
*/
|
|
85
|
+
private updateFileCard;
|
|
86
|
+
/**
|
|
87
|
+
* Renders all file cards
|
|
88
|
+
*/
|
|
89
|
+
private renderFileCards;
|
|
90
|
+
/**
|
|
91
|
+
* Binds event listeners
|
|
92
|
+
*/
|
|
93
|
+
private bindEvents;
|
|
94
|
+
/**
|
|
95
|
+
* Renders the component
|
|
96
|
+
*/
|
|
97
|
+
private render;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Defines the custom element if not already defined
|
|
101
|
+
*/
|
|
102
|
+
export declare const defineChunkUploader: (tagName?: string) => void;
|
|
103
|
+
//# sourceMappingURL=ChunkUploader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChunkUploader.d.ts","sourceRoot":"","sources":["../src/ChunkUploader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,WAAW,GAAG,OAAO,GAAG,SAAS,CAAC;IACpE,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,CAAE,IAAI,EAAE,YAAY,KAAM,IAAI,CAAC;IAChD,gBAAgB,CAAC,EAAE,CAAE,KAAK,EAAE,YAAY,EAAE,KAAM,IAAI,CAAC;CACtD;AAKD,qBAAa,oBAAqB,SAAQ,WAAW;IAC3C,UAAU,EAAE,UAAU,CAAC;IAC/B,OAAO,CAAC,KAAK,CAAwC;IACrD,OAAO,CAAC,MAAM,CAIZ;IACF,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,eAAe,CAAgC;;IASvD,MAAM,KAAK,kBAAkB,IAAK,MAAM,EAAE,CAEzC;IAED,wBAAwB,CAAG,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAI,IAAI;IAuBjG,IAAI,SAAS,IAAK,MAAM,CAEvB;IAED,IAAI,SAAS,CAAG,KAAK,EAAE,MAAM,EAG5B;IAED,IAAI,SAAS,IAAK,MAAM,CAEvB;IAED,IAAI,SAAS,CAAG,KAAK,EAAE,MAAM,EAG5B;IAED,IAAI,SAAS,IAAK,MAAM,GAAG,SAAS,CAEnC;IAED,IAAI,SAAS,CAAG,KAAK,EAAE,MAAM,GAAG,SAAS,EAQxC;IAED,IAAI,cAAc,IAAK,MAAM,EAAE,GAAG,SAAS,CAE1C;IAED,IAAI,cAAc,CAAG,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,EAO/C;IAED,IAAI,WAAW,IAAK,MAAM,CAEzB;IAED,IAAI,WAAW,CAAG,KAAK,EAAE,MAAM,EAG9B;IAED,IAAI,cAAc,CAAG,QAAQ,EAAE,CAAE,CAAE,IAAI,EAAE,YAAY,KAAM,IAAI,CAAE,GAAG,SAAS,EAE5E;IAED,IAAI,gBAAgB,CAAG,QAAQ,EAAE,CAAE,CAAE,KAAK,EAAE,YAAY,EAAE,KAAM,IAAI,CAAE,GAAG,SAAS,EAEjF;IAED;;OAEG;IACH,OAAO,CAAC,WAAW;IAQnB;;OAEG;IACH,OAAO,CAAC,cAAc;IAItB;;OAEG;IACH,OAAO,CAAC,YAAY;IAwBpB;;OAEG;YACW,eAAe;IAW7B;;OAEG;YACW,QAAQ;IA0BtB;;OAEG;IACH,OAAO,CAAC,UAAU;IAKlB;;OAEG;YACW,UAAU;IAoIxB;;OAEG;YACW,WAAW;IA2DzB;;OAEG;YACW,eAAe;IAiE7B;;OAEG;IACH,OAAO,CAAC,cAAc;IAoCtB;;OAEG;IACH,OAAO,CAAC,eAAe;IA6CvB;;OAEG;IACH,OAAO,CAAC,UAAU;IA6ClB;;OAEG;IACH,OAAO,CAAC,MAAM;CA8Qf;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAAK,gBAAgC,KAAI,IAIxE,CAAC"}
|