@bexis2/bexis2-core-ui 0.0.17 → 0.0.18

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 (59) hide show
  1. package/.eslintignore +13 -0
  2. package/.eslintrc.cjs +20 -0
  3. package/.github/workflows/main.yml +44 -0
  4. package/.prettierignore +13 -0
  5. package/.prettierrc +9 -0
  6. package/package.json +3 -6
  7. package/playwright.config.ts +11 -0
  8. package/postcss.config.cjs +6 -0
  9. package/src/app.d.ts +11 -0
  10. package/src/app.html +15 -0
  11. package/src/app.postcss +2 -0
  12. package/src/index.test.ts +7 -0
  13. package/src/lib/components/File/FileUploader.svelte +217 -0
  14. package/src/lib/components/ListView.svelte +13 -0
  15. package/src/lib/index.ts +15 -0
  16. package/src/lib/models/Models.ts +39 -0
  17. package/{dist/services/Api.js → src/lib/services/Api.ts} +58 -44
  18. package/src/lib/stores/apistore.ts +32 -0
  19. package/src/routes/+layout.js +5 -0
  20. package/src/routes/+layout.svelte +10 -0
  21. package/src/routes/+page.svelte +0 -0
  22. package/src/routes/test/+page.svelte +1 -0
  23. package/static/favicon.png +0 -0
  24. package/svelte.config.js +23 -0
  25. package/tailwind.config.cjs +9 -0
  26. package/tests/test.ts +6 -0
  27. package/tsconfig.json +19 -0
  28. package/vite.config.ts +9 -0
  29. package/dist/TableView.svelte.d.ts +0 -23
  30. package/dist/components/File/FileIcon.svelte.d.ts +0 -23
  31. package/dist/components/File/FileInfo.svelte.d.ts +0 -27
  32. package/dist/components/File/FileUploader.svelte +0 -135
  33. package/dist/components/File/FileUploader.svelte.d.ts +0 -27
  34. package/dist/components/ListView.svelte +0 -6
  35. package/dist/components/ListView.svelte.d.ts +0 -14
  36. package/dist/components/Spinner/Spinner.svelte.d.ts +0 -23
  37. package/dist/index.d.ts +0 -9
  38. package/dist/index.js +0 -9
  39. package/dist/models/Models.d.ts +0 -31
  40. package/dist/models/Models.js +0 -1
  41. package/dist/services/Api.d.ts +0 -7
  42. package/dist/stores/apistore.d.ts +0 -4
  43. package/dist/stores/apistore.js +0 -22
  44. /package/{dist → src/lib}/TableView.svelte +0 -0
  45. /package/{dist → src/lib}/components/File/FileIcon.svelte +0 -0
  46. /package/{dist → src/lib}/components/File/FileInfo.svelte +0 -0
  47. /package/{dist → src/lib}/components/Spinner/Spinner.svelte +0 -0
  48. /package/{dist → src/lib}/css/core.ui.css +0 -0
  49. /package/{dist → src/lib}/css/themes/theme-bexis2.css +0 -0
  50. /package/{dist → src/lib}/css/themes/theme-crimson.css +0 -0
  51. /package/{dist → src/lib}/css/themes/theme-gold-nouveau.css +0 -0
  52. /package/{dist → src/lib}/css/themes/theme-hamlindigo.css +0 -0
  53. /package/{dist → src/lib}/css/themes/theme-modern.css +0 -0
  54. /package/{dist → src/lib}/css/themes/theme-rocket.css +0 -0
  55. /package/{dist → src/lib}/css/themes/theme-sahara.css +0 -0
  56. /package/{dist → src/lib}/css/themes/theme-seafoam.css +0 -0
  57. /package/{dist → src/lib}/css/themes/theme-seasonal.css +0 -0
  58. /package/{dist → src/lib}/css/themes/theme-skeleton.css +0 -0
  59. /package/{dist → src/lib}/css/themes/theme-vintage.css +0 -0
package/.eslintignore ADDED
@@ -0,0 +1,13 @@
1
+ .DS_Store
2
+ node_modules
3
+ /build
4
+ /.svelte-kit
5
+ /package
6
+ .env
7
+ .env.*
8
+ !.env.example
9
+
10
+ # Ignore files for PNPM, NPM and YARN
11
+ pnpm-lock.yaml
12
+ package-lock.json
13
+ yarn.lock
package/.eslintrc.cjs ADDED
@@ -0,0 +1,20 @@
1
+ module.exports = {
2
+ root: true,
3
+ parser: '@typescript-eslint/parser',
4
+ extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended', 'prettier'],
5
+ plugins: ['svelte3', '@typescript-eslint'],
6
+ ignorePatterns: ['*.cjs'],
7
+ overrides: [{ files: ['*.svelte'], processor: 'svelte3/svelte3' }],
8
+ settings: {
9
+ 'svelte3/typescript': () => require('typescript')
10
+ },
11
+ parserOptions: {
12
+ sourceType: 'module',
13
+ ecmaVersion: 2020
14
+ },
15
+ env: {
16
+ browser: true,
17
+ es2017: true,
18
+ node: true
19
+ }
20
+ };
@@ -0,0 +1,44 @@
1
+ name: GitHub Pages
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - master # Set a branch name to trigger deployment
7
+ pull_request:
8
+
9
+ jobs:
10
+ deploy:
11
+ runs-on: ubuntu-20.04 # Set platform for runner
12
+ concurrency:
13
+ group: ${{ github.workflow }}-${{ github.ref }}
14
+ steps:
15
+ - uses: actions/checkout@v2
16
+
17
+ - name: Setup Node
18
+ uses: actions/setup-node@v2
19
+ with:
20
+ node-version: '16'
21
+
22
+ - name: Cache pnpm modules
23
+ uses: actions/cache@v2
24
+ with:
25
+ path: ~/.pnpm-store
26
+ key: ${{ runner.os }}-${{ hashFiles('**/pnpm-lock.yaml') }}
27
+ restore-keys: |
28
+ ${{ runner.os }}-
29
+ - uses: pnpm/action-setup@v2.0.1
30
+ with:
31
+ version: 6.20.1
32
+ run_install: true
33
+
34
+ - run: pnpm i # Run install
35
+ - run: pnpm run build # Run build
36
+ - run: dir
37
+ - run: cp -a static/. ./build/ # Copy missing files to build folder
38
+
39
+ - name: Deploy
40
+ uses: peaceiris/actions-gh-pages@v3
41
+ if: ${{ github.ref == 'refs/heads/master' }}
42
+ with:
43
+ github_token: ${{ secrets.GITHUB_TOKEN }}
44
+ publish_dir: ./build # Copy all files from the build folder to the gh-page branch
@@ -0,0 +1,13 @@
1
+ .DS_Store
2
+ node_modules
3
+ /build
4
+ /.svelte-kit
5
+ /package
6
+ .env
7
+ .env.*
8
+ !.env.example
9
+
10
+ # Ignore files for PNPM, NPM and YARN
11
+ pnpm-lock.yaml
12
+ package-lock.json
13
+ yarn.lock
package/.prettierrc ADDED
@@ -0,0 +1,9 @@
1
+ {
2
+ "useTabs": true,
3
+ "singleQuote": true,
4
+ "trailingComma": "none",
5
+ "printWidth": 100,
6
+ "plugins": ["prettier-plugin-svelte"],
7
+ "pluginSearchDirs": ["."],
8
+ "overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }]
9
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bexis2/bexis2-core-ui",
3
- "version": "0.0.17",
3
+ "version": "0.0.18",
4
4
  "private": false,
5
5
  "scripts": {
6
6
  "dev": "vite dev",
@@ -22,9 +22,10 @@
22
22
  "@playwright/test": "^1.28.1",
23
23
  "@skeletonlabs/skeleton": "^1.2.5",
24
24
  "@sveltejs/adapter-auto": "^2.0.0",
25
+ "@sveltejs/adapter-static": "^2.0.2",
25
26
  "@sveltejs/kit": "^1.5.0",
26
27
  "@sveltejs/package": "^2.0.2",
27
- "@sveltejs/adapter-static": "^2.0.2",
28
+ "svelte-fa": "^3.0.3",
28
29
  "@typescript-eslint/eslint-plugin": "^5.45.0",
29
30
  "@typescript-eslint/parser": "^5.45.0",
30
31
  "autoprefixer": "^10.4.14",
@@ -50,9 +51,6 @@
50
51
  "directories": {
51
52
  "test": "tests"
52
53
  },
53
- "files": [
54
- "dist"
55
- ],
56
54
  "dependencies": {
57
55
  "@fortawesome/fontawesome-free": "^6.2.1",
58
56
  "@fortawesome/fontawesome-svg-core": "^6.2.1",
@@ -60,7 +58,6 @@
60
58
  "@fortawesome/free-solid-svg-icons": "^6.2.1",
61
59
  "axios": "^1.2.1",
62
60
  "svelte": "^3.54.0",
63
- "svelte-fa": "^3.0.3",
64
61
  "svelte-file-dropzone": "^2.0.1"
65
62
  },
66
63
  "author": "David Schöne",
@@ -0,0 +1,11 @@
1
+ import type { PlaywrightTestConfig } from '@playwright/test';
2
+
3
+ const config: PlaywrightTestConfig = {
4
+ webServer: {
5
+ command: 'npm run build && npm run preview',
6
+ port: 4173
7
+ },
8
+ testDir: 'tests'
9
+ };
10
+
11
+ export default config;
@@ -0,0 +1,6 @@
1
+ module.exports = {
2
+ plugins: {
3
+ tailwindcss: {},
4
+ autoprefixer: {},
5
+ },
6
+ }
package/src/app.d.ts ADDED
@@ -0,0 +1,11 @@
1
+ /// <reference types="@sveltejs/kit" />
2
+
3
+ // See https://kit.svelte.dev/docs/types#app
4
+ // for information about these interfaces
5
+ // and what to do when importing types
6
+ declare namespace App {
7
+ // interface Error {}
8
+ // interface Locals {}
9
+ // interface PageData {}
10
+ // interface Platform {}
11
+ }
package/src/app.html ADDED
@@ -0,0 +1,15 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <link rel="icon" href="%sveltekit.assets%/favicon.png" />
6
+
7
+
8
+
9
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
10
+ %sveltekit.head%
11
+ </head>
12
+ <body>
13
+ <div>%sveltekit.body%</div>
14
+ </body>
15
+ </html>
@@ -0,0 +1,2 @@
1
+ /*place global styles here */
2
+ html, body { @apply h-full; }
@@ -0,0 +1,7 @@
1
+ import { describe, it, expect } from 'vitest';
2
+
3
+ describe('sum test', () => {
4
+ it('adds 1 + 2 to equal 3', () => {
5
+ expect(1 + 2).toBe(3);
6
+ });
7
+ });
@@ -0,0 +1,217 @@
1
+ <script lang="ts">
2
+
3
+ import type { FileUploaderModel, FileInfo, Files} from '../../models/Models.js'
4
+
5
+
6
+ import DropZone from "svelte-file-dropzone/Dropzone.svelte";
7
+ import Fa from 'svelte-fa/src/fa.svelte'
8
+
9
+ import Spinner from '../Spinner/Spinner.svelte';
10
+ import { createEventDispatcher } from 'svelte';
11
+ import { faTrash } from '@fortawesome/free-solid-svg-icons'
12
+ import { faSave } from '@fortawesome/free-regular-svg-icons'
13
+ import { faFileUpload } from '@fortawesome/free-solid-svg-icons'
14
+
15
+ import { Api } from '../../services/Api.js'
16
+
17
+ export let id=0;
18
+ export let version=1;
19
+
20
+ import { onMount } from 'svelte'
21
+
22
+ // export let description="";
23
+ // export let status=0;
24
+
25
+
26
+ //action to load fileupload model
27
+ export let start="";
28
+ //action to save selected file
29
+ export let submit="";
30
+
31
+ export let context="";
32
+
33
+ export let data:FileUploaderModel | undefined;
34
+
35
+ $:model= data;
36
+ $:submitBt ="submit";
37
+
38
+ let maxSize=0;
39
+
40
+ const dispatch = createEventDispatcher();
41
+
42
+ let fx:FileInfo[]
43
+
44
+ let files:Files = {accepted:[], rejected:[]};
45
+ $:files;
46
+
47
+ onMount(async () => {
48
+
49
+ console.log("fileupload - OnMount", data);
50
+
51
+
52
+ if(!data)
53
+ {
54
+ load();
55
+ }
56
+ else
57
+ {
58
+ model = data;
59
+ }
60
+
61
+ if(model)
62
+ {
63
+ submitBt += context;
64
+ maxSize = (model.maxSize*1024)*1024
65
+ }
66
+
67
+ })
68
+
69
+ // load modal from server
70
+ async function load()
71
+ {
72
+ let url = start+"?id="+id+"&version="+version;
73
+
74
+ // load menu froms server
75
+ const res = await Api.get(url);
76
+ model = await res.data();
77
+
78
+ console.log("fileupload",model);
79
+
80
+
81
+ }
82
+
83
+ function handleFilesSelect(e:any) {
84
+
85
+ console.log("handleFilesSelect", e);
86
+ console.log("files", files);
87
+
88
+
89
+ const { acceptedFiles, fileRejections } = e.detail;
90
+
91
+
92
+ files.accepted = [...files.accepted, ...acceptedFiles];
93
+ files.rejected = [...files.rejected, ...fileRejections];
94
+
95
+
96
+ console.log("acceptedFiles", acceptedFiles);
97
+ console.log("files.accepted", files.accepted);
98
+
99
+
100
+ if(fileRejections.length>0)
101
+ {
102
+ //alert("the dropped file is not supported");
103
+ console.log("the dropped file is not supported.");
104
+ console.log(files.rejected);
105
+
106
+ let messages = [""];
107
+
108
+ for (let index = 0; index < fileRejections.length; index++) {
109
+ const element = fileRejections[index];
110
+ messages.push(getErrorMessage(element))
111
+ }
112
+
113
+ console.log(messages);
114
+
115
+ dispatch("error", {messages})
116
+ //list up the errors somewhere
117
+ files.rejected = []
118
+ }
119
+
120
+ if(acceptedFiles.length>0)
121
+ {
122
+ document.getElementById(submitBt)?.click();
123
+ }
124
+
125
+ }
126
+
127
+ function getErrorMessage(rejected)
128
+ {
129
+ let message = "";
130
+ message = rejected.file.path+" : ";
131
+ let errors = rejected.errors;
132
+ for (let index = 0; index < errors.length; index++) {
133
+ const error = errors[index];
134
+ message+=error.message
135
+ }
136
+
137
+ return message;
138
+ }
139
+
140
+ async function handleSubmit() {
141
+
142
+ console.log("SUBMIT");
143
+
144
+ dispatch('submit')
145
+
146
+ let url = submit+"?id="+id;
147
+
148
+ // console.log(model);
149
+ // console.log(url);
150
+ console.log("SUBMIT");
151
+
152
+ if (files.accepted.length > 0) {
153
+
154
+ console.log(files);
155
+
156
+ const formData = new FormData();
157
+ formData.append("files","123");
158
+ // Looping over all files and add it to FormData object
159
+ for (var i = 0; i < files.accepted.length; i++) {
160
+
161
+
162
+ formData.append(files.accepted[i].name, files.accepted[i]);
163
+ }
164
+
165
+
166
+ const response = await Api.post(url, formData);
167
+
168
+ if(response.status==200)
169
+ {
170
+ dispatch('submited');
171
+
172
+ let message = files.accepted.length +" is/are uploaded";
173
+ dispatch('success', {text:message})
174
+
175
+ files.accepted = [];
176
+
177
+ }
178
+ }
179
+ }
180
+
181
+ </script>
182
+
183
+ <form on:submit|preventDefault={handleSubmit}>
184
+ {#if model}
185
+ <!--if model exist -->
186
+ <div>
187
+
188
+ <DropZone
189
+ on:drop={handleFilesSelect}
190
+ accept={model.accept}
191
+ multiple={model.multiple}
192
+ {maxSize}>
193
+
194
+ <b style="font-size:xx-large"><Fa icon={faFileUpload}/></b>
195
+ <span><b>Drag 'n' drop some files here, or click to select files</b>
196
+ <b>max file : {model.maxSize} mb</b></span>
197
+ <p>
198
+ {#if model.accept}
199
+ {#each model.accept as ext}
200
+ {ext} ,
201
+ {/each}
202
+ {/if}
203
+ </p>
204
+ </DropZone>
205
+
206
+ </div>
207
+
208
+ <button id="{submitBt}" color="primary" style="display:none" ><Fa icon={faSave}/></button>
209
+
210
+ {:else} <!-- while data is not loaded show a loading information -->
211
+
212
+ <Spinner/>
213
+ {/if}
214
+
215
+ </form>
216
+
217
+
@@ -0,0 +1,13 @@
1
+ <script lang="ts">
2
+
3
+ type x={
4
+ name:string
5
+ }
6
+
7
+ let result:x = {name:"david"}
8
+
9
+ </script>
10
+
11
+ <h1>MyList</h1>
12
+ {result.name}
13
+ <b>from bexis-lib</b>
@@ -0,0 +1,15 @@
1
+
2
+ // Reexport your entry components here
3
+ import ListView from './components/ListView.svelte'
4
+
5
+ import TableView from './TableView.svelte'
6
+ import FileIcon from './components/File/FileIcon.svelte'
7
+ import FileInfo from './components/File/FileInfo.svelte'
8
+ import FileUploader from './components/File/FileUploader.svelte'
9
+
10
+ export {ListView,TableView, FileInfo, FileIcon, FileUploader }
11
+
12
+ export {Api} from './services/Api.js'
13
+ export {host,username,password,setApiConfig} from './stores/apistore.js'
14
+
15
+ export type {user, FileUploaderModel} from './models/Models.js'
@@ -0,0 +1,39 @@
1
+
2
+ export interface FileInfo {
3
+ name:string,
4
+ type:string,
5
+ length:number,
6
+ description:string,
7
+ validationHash:string,
8
+
9
+ }
10
+
11
+
12
+ export interface FileUploaderModel{
13
+ accept:string[],
14
+ existingFiles:FileInfo[],
15
+ descriptionType:number,
16
+ multiple:boolean,
17
+ maxSize:number,
18
+ lastModification:Date
19
+ }
20
+
21
+ export interface Files {
22
+ accepted:Blob[],
23
+ rejected:Blob[]
24
+ }
25
+
26
+
27
+ export type user = {
28
+ name:string
29
+ }
30
+
31
+ export interface FileObj{
32
+ path:string,
33
+ lastModified:number,
34
+ lastModifiedDate:Date,
35
+ name:string,
36
+ size:number,
37
+ type:string,
38
+ webkitRelativePath:string
39
+ }
@@ -1,44 +1,58 @@
1
- // Api.js
2
- import axios from "axios";
3
- import { host, username, password } from "../stores/apistore";
4
- console.log("setup axios");
5
- // implement a method to execute all the request from here.
6
- const apiRequest = (method, url, request) => {
7
- // Create a instance of axios to use the same base url.
8
- const axiosAPI = axios.create({
9
- baseURL: host
10
- });
11
- const headers = {
12
- authorization: 'Basic ' + btoa(username + ":" + password)
13
- };
14
- //using the axios instance to perform the request that received from each http method
15
- return axiosAPI({
16
- method,
17
- url,
18
- data: request,
19
- headers
20
- }).then(res => {
21
- return Promise.resolve(res);
22
- })
23
- .catch(err => {
24
- return Promise.reject(err);
25
- });
26
- };
27
- // function to execute the http get request
28
- const get = (url, request = "") => apiRequest("get", url, request);
29
- // function to execute the http delete request
30
- const deleteRequest = (url, request) => apiRequest("delete", url, request);
31
- // function to execute the http post request
32
- const post = (url, request) => apiRequest("post", url, request);
33
- // function to execute the http put request
34
- const put = (url, request) => apiRequest("put", url, request);
35
- // function to execute the http path request
36
- const patch = (url, request) => apiRequest("patch", url, request);
37
- // expose your method to other services or actions
38
- export const Api = {
39
- get,
40
- delete: deleteRequest,
41
- post,
42
- put,
43
- patch
44
- };
1
+ // Api.js
2
+ import axios from "axios";
3
+ import { host, username, password } from "../stores/apistore";
4
+
5
+ console.log("setup axios")
6
+
7
+
8
+ // implement a method to execute all the request from here.
9
+ const apiRequest = (method, url, request) => {
10
+
11
+
12
+ // Create a instance of axios to use the same base url.
13
+ const axiosAPI = axios.create({
14
+ baseURL : host
15
+ });
16
+
17
+ const headers = {
18
+ authorization: 'Basic ' + btoa(username + ":" + password)
19
+ };
20
+
21
+ //using the axios instance to perform the request that received from each http method
22
+ return axiosAPI({
23
+ method,
24
+ url,
25
+ data: request,
26
+ headers
27
+ }).then(res => {
28
+
29
+ return Promise.resolve(res);
30
+ })
31
+ .catch(err => {
32
+ return Promise.reject(err);
33
+ });
34
+ };
35
+
36
+ // function to execute the http get request
37
+ const get = (url, request="") => apiRequest("get",url,request);
38
+
39
+ // function to execute the http delete request
40
+ const deleteRequest = (url, request) => apiRequest("delete", url, request);
41
+
42
+ // function to execute the http post request
43
+ const post = (url, request) => apiRequest("post", url, request);
44
+
45
+ // function to execute the http put request
46
+ const put = (url, request) => apiRequest("put", url, request);
47
+
48
+ // function to execute the http path request
49
+ const patch = (url, request) => apiRequest("patch", url, request);
50
+
51
+ // expose your method to other services or actions
52
+ export const Api ={
53
+ get,
54
+ delete: deleteRequest,
55
+ post,
56
+ put,
57
+ patch
58
+ };
@@ -0,0 +1,32 @@
1
+ import { writable } from 'svelte/store'
2
+
3
+
4
+ export let host = "window.location.origin";
5
+ export let username = "";
6
+ export let password = "";
7
+
8
+ const hostStore = writable(""); //writable(window.location.origin);
9
+ const usernameStore = writable("");
10
+ const passwordStore = writable("");
11
+
12
+ hostStore.subscribe(value => {
13
+ host = value;
14
+ });
15
+
16
+ usernameStore.subscribe(value => {
17
+ username = value;
18
+ });
19
+
20
+ passwordStore.subscribe(value => {
21
+ password = value;
22
+ });
23
+
24
+
25
+
26
+ export function setApiConfig(_host:string ,_user:string,_pw:string)
27
+ {
28
+ console.log("overwrite settings");
29
+ hostStore.update(h=>h = _host);
30
+ usernameStore.update(u=>u = _user);
31
+ passwordStore.update(p=>p = _pw);
32
+ }
@@ -0,0 +1,5 @@
1
+ export const prerender = true;
2
+ export const ssr = false;
3
+ export const trailingSlash = 'always';
4
+
5
+ // import { API_URL } from '../../app.config';
@@ -0,0 +1,10 @@
1
+ <script lang='ts'>
2
+ // The ordering of these imports is critical to your app working properly
3
+ import '@skeletonlabs/skeleton/themes/theme-skeleton.css';
4
+ // If you have source.organizeImports set to true in VSCode, then it will auto change this ordering
5
+ import '@skeletonlabs/skeleton/styles/all.css';
6
+ // Most of your app wide CSS should be put in this file
7
+ import '../app.postcss';
8
+ </script>
9
+
10
+ <slot />
File without changes
@@ -0,0 +1 @@
1
+ <h1>test</h1>
Binary file
@@ -0,0 +1,23 @@
1
+ import adapter from '@sveltejs/adapter-static';
2
+ import { vitePreprocess } from '@sveltejs/kit/vite';
3
+
4
+ /** @type {import('@sveltejs/kit').Config} */
5
+ const config = {
6
+ // Consult https://kit.svelte.dev/docs/integrations#preprocessors
7
+ // for more information about preprocessors
8
+ preprocess: vitePreprocess(),
9
+
10
+ kit: {
11
+ adapter: adapter({
12
+ pages: 'build',
13
+ assets: 'build',
14
+ fallback: null,
15
+ precompress: false,
16
+ ssr: true
17
+ }
18
+ )
19
+
20
+ }
21
+ };
22
+
23
+ export default config;
@@ -0,0 +1,9 @@
1
+ /** @type {import('tailwindcss').Config} */
2
+ module.exports = {
3
+ darkMode: 'class',
4
+ content: ['./src/**/*.{html,js,svelte,ts}', require('path').join(require.resolve('@skeletonlabs/skeleton'), '../**/*.{html,js,svelte,ts}')],
5
+ theme: {
6
+ extend: {},
7
+ },
8
+ plugins: [...require('@skeletonlabs/skeleton/tailwind/skeleton.cjs')()],
9
+ }
package/tests/test.ts ADDED
@@ -0,0 +1,6 @@
1
+ import { expect, test } from '@playwright/test';
2
+
3
+ test('index page has expected h1', async ({ page }) => {
4
+ await page.goto('/');
5
+ await expect(page.getByRole('heading', { name: 'Welcome to SvelteKit' })).toBeVisible();
6
+ });
package/tsconfig.json ADDED
@@ -0,0 +1,19 @@
1
+ {
2
+ "extends": "./.svelte-kit/tsconfig.json",
3
+ "compilerOptions": {
4
+ "allowJs": true,
5
+ "checkJs": true,
6
+ "esModuleInterop": true,
7
+ "forceConsistentCasingInFileNames": true,
8
+ "resolveJsonModule": true,
9
+ "skipLibCheck": true,
10
+ "sourceMap": true,
11
+ "strict": true,
12
+ "noImplicitAny": false
13
+ },
14
+ "exclude": ["node_modules"]
15
+ // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias
16
+ //
17
+ // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes
18
+ // from the referenced tsconfig.json - TypeScript does not merge them in
19
+ }
package/vite.config.ts ADDED
@@ -0,0 +1,9 @@
1
+ import { sveltekit } from '@sveltejs/kit/vite';
2
+ import { defineConfig } from 'vitest/config';
3
+
4
+ export default defineConfig({
5
+ plugins: [sveltekit()],
6
+ test: {
7
+ include: ['src/**/*.{test,spec}.{js,ts}']
8
+ }
9
+ });
@@ -1,23 +0,0 @@
1
- /** @typedef {typeof __propDef.props} TableViewProps */
2
- /** @typedef {typeof __propDef.events} TableViewEvents */
3
- /** @typedef {typeof __propDef.slots} TableViewSlots */
4
- export default class TableView extends SvelteComponentTyped<{
5
- [x: string]: never;
6
- }, {
7
- [evt: string]: CustomEvent<any>;
8
- }, {}> {
9
- }
10
- export type TableViewProps = typeof __propDef.props;
11
- export type TableViewEvents = typeof __propDef.events;
12
- export type TableViewSlots = typeof __propDef.slots;
13
- import { SvelteComponentTyped } from "svelte";
14
- declare const __propDef: {
15
- props: {
16
- [x: string]: never;
17
- };
18
- events: {
19
- [evt: string]: CustomEvent<any>;
20
- };
21
- slots: {};
22
- };
23
- export {};
@@ -1,23 +0,0 @@
1
- /** @typedef {typeof __propDef.props} FileIconProps */
2
- /** @typedef {typeof __propDef.events} FileIconEvents */
3
- /** @typedef {typeof __propDef.slots} FileIconSlots */
4
- export default class FileIcon extends SvelteComponentTyped<{
5
- type?: string | undefined;
6
- }, {
7
- [evt: string]: CustomEvent<any>;
8
- }, {}> {
9
- }
10
- export type FileIconProps = typeof __propDef.props;
11
- export type FileIconEvents = typeof __propDef.events;
12
- export type FileIconSlots = typeof __propDef.slots;
13
- import { SvelteComponentTyped } from "svelte";
14
- declare const __propDef: {
15
- props: {
16
- type?: string | undefined;
17
- };
18
- events: {
19
- [evt: string]: CustomEvent<any>;
20
- };
21
- slots: {};
22
- };
23
- export {};
@@ -1,27 +0,0 @@
1
- /** @typedef {typeof __propDef.props} FileInfoProps */
2
- /** @typedef {typeof __propDef.events} FileInfoEvents */
3
- /** @typedef {typeof __propDef.slots} FileInfoSlots */
4
- export default class FileInfo extends SvelteComponentTyped<{
5
- type?: string | undefined;
6
- name?: string | undefined;
7
- size?: string | undefined;
8
- }, {
9
- [evt: string]: CustomEvent<any>;
10
- }, {}> {
11
- }
12
- export type FileInfoProps = typeof __propDef.props;
13
- export type FileInfoEvents = typeof __propDef.events;
14
- export type FileInfoSlots = typeof __propDef.slots;
15
- import { SvelteComponentTyped } from "svelte";
16
- declare const __propDef: {
17
- props: {
18
- type?: string | undefined;
19
- name?: string | undefined;
20
- size?: string | undefined;
21
- };
22
- events: {
23
- [evt: string]: CustomEvent<any>;
24
- };
25
- slots: {};
26
- };
27
- export {};
@@ -1,135 +0,0 @@
1
- <script>import DropZone from "svelte-file-dropzone/Dropzone.svelte";
2
- import { Fa } from "svelte-fa";
3
- import Spinner from "../Spinner/Spinner.svelte";
4
- import { createEventDispatcher } from "svelte";
5
- import { faTrash } from "@fortawesome/free-solid-svg-icons";
6
- import { faSave } from "@fortawesome/free-regular-svg-icons";
7
- import { faFileUpload } from "@fortawesome/free-solid-svg-icons";
8
- import { Api } from "../../services/Api.js";
9
- export let id = 0;
10
- export let version = 1;
11
- import { onMount } from "svelte";
12
- export let start = "";
13
- export let submit = "";
14
- export let context = "";
15
- export let data;
16
- $:
17
- model = data;
18
- $:
19
- submitBt = "submit";
20
- let maxSize = 0;
21
- const dispatch = createEventDispatcher();
22
- let fx;
23
- let files = { accepted: [], rejected: [] };
24
- $:
25
- files;
26
- onMount(async () => {
27
- console.log("fileupload - OnMount", data);
28
- if (!data) {
29
- load();
30
- } else {
31
- model = data;
32
- }
33
- if (model) {
34
- submitBt += context;
35
- maxSize = model.maxSize * 1024 * 1024;
36
- }
37
- });
38
- async function load() {
39
- let url = start + "?id=" + id + "&version=" + version;
40
- const res = await Api.get(url);
41
- model = await res.json();
42
- console.log("fileupload", model);
43
- }
44
- function handleFilesSelect(e) {
45
- console.log("handleFilesSelect", e);
46
- console.log("files", files);
47
- const { acceptedFiles, fileRejections } = e.detail;
48
- files.accepted = [...files.accepted, ...acceptedFiles];
49
- files.rejected = [...files.rejected, ...fileRejections];
50
- console.log("acceptedFiles", acceptedFiles);
51
- console.log("files.accepted", files.accepted);
52
- if (fileRejections.length > 0) {
53
- console.log("the dropped file is not supported.");
54
- console.log(files.rejected);
55
- let messages = [""];
56
- for (let index = 0; index < fileRejections.length; index++) {
57
- const element = fileRejections[index];
58
- messages.push(getErrorMessage(element));
59
- }
60
- console.log(messages);
61
- dispatch("error", { messages });
62
- files.rejected = [];
63
- }
64
- if (acceptedFiles.length > 0) {
65
- document.getElementById(submitBt)?.click();
66
- }
67
- }
68
- function getErrorMessage(rejected) {
69
- let message = "";
70
- message = rejected.file.path + " : ";
71
- let errors = rejected.errors;
72
- for (let index = 0; index < errors.length; index++) {
73
- const error = errors[index];
74
- message += error.message;
75
- }
76
- return message;
77
- }
78
- async function handleSubmit() {
79
- console.log("SUBMIT");
80
- dispatch("submit");
81
- let url = submit + "?id=" + id;
82
- console.log("SUBMIT");
83
- if (files.accepted.length > 0) {
84
- console.log(files);
85
- const formData = new FormData();
86
- formData.append("files", "123");
87
- for (var i = 0; i < files.accepted.length; i++) {
88
- formData.append(files.accepted[i].name, files.accepted[i]);
89
- }
90
- const response = await Api.post(url, formData);
91
- if (response.status == 200) {
92
- dispatch("submited");
93
- let message = files.accepted.length + " is/are uploaded";
94
- dispatch("success", { text: message });
95
- files.accepted = [];
96
- }
97
- }
98
- }
99
- </script>
100
-
101
- <form on:submit|preventDefault={handleSubmit}>
102
- {#if model}
103
- <!--if model exist -->
104
- <div>
105
-
106
- <DropZone
107
- on:drop={handleFilesSelect}
108
- accept={model.accept}
109
- multiple={model.multiple}
110
- {maxSize}>
111
-
112
- <b style="font-size:xx-large"><Fa icon={faFileUpload}/></b>
113
- <span><b>Drag 'n' drop some files here, or click to select files</b>
114
- <b>max file : {model.maxSize} mb</b></span>
115
- <p>
116
- {#if model.accept}
117
- {#each model.accept as ext}
118
- {ext} ,
119
- {/each}
120
- {/if}
121
- </p>
122
- </DropZone>
123
-
124
- </div>
125
-
126
- <button id="{submitBt}" color="primary" style="display:none" ><Fa icon={faSave}/></button>
127
-
128
- {:else} <!-- while data is not loaded show a loading information -->
129
-
130
- <Spinner/>
131
- {/if}
132
-
133
- </form>
134
-
135
-
@@ -1,27 +0,0 @@
1
- import { SvelteComponentTyped } from "svelte";
2
- import type { FileUploaderModel } from '../../models/Models.js';
3
- declare const __propDef: {
4
- props: {
5
- id?: number | undefined;
6
- version?: number | undefined;
7
- start?: string | undefined;
8
- submit?: string | undefined;
9
- context?: string | undefined;
10
- data: FileUploaderModel | undefined;
11
- };
12
- events: {
13
- error: CustomEvent<any>;
14
- submit: CustomEvent<any>;
15
- submited: CustomEvent<any>;
16
- success: CustomEvent<any>;
17
- } & {
18
- [evt: string]: CustomEvent<any>;
19
- };
20
- slots: {};
21
- };
22
- export type FileUploaderProps = typeof __propDef.props;
23
- export type FileUploaderEvents = typeof __propDef.events;
24
- export type FileUploaderSlots = typeof __propDef.slots;
25
- export default class FileUploader extends SvelteComponentTyped<FileUploaderProps, FileUploaderEvents, FileUploaderSlots> {
26
- }
27
- export {};
@@ -1,6 +0,0 @@
1
- <script>let result = { name: "david" };
2
- </script>
3
-
4
- <h1>MyList</h1>
5
- {result.name}
6
- <b>from bexis-lib</b>
@@ -1,14 +0,0 @@
1
- import { SvelteComponentTyped } from "svelte";
2
- declare const __propDef: {
3
- props: Record<string, never>;
4
- events: {
5
- [evt: string]: CustomEvent<any>;
6
- };
7
- slots: {};
8
- };
9
- export type ListViewProps = typeof __propDef.props;
10
- export type ListViewEvents = typeof __propDef.events;
11
- export type ListViewSlots = typeof __propDef.slots;
12
- export default class ListView extends SvelteComponentTyped<ListViewProps, ListViewEvents, ListViewSlots> {
13
- }
14
- export {};
@@ -1,23 +0,0 @@
1
- /** @typedef {typeof __propDef.props} SpinnerProps */
2
- /** @typedef {typeof __propDef.events} SpinnerEvents */
3
- /** @typedef {typeof __propDef.slots} SpinnerSlots */
4
- export default class Spinner extends SvelteComponentTyped<{
5
- [x: string]: never;
6
- }, {
7
- [evt: string]: CustomEvent<any>;
8
- }, {}> {
9
- }
10
- export type SpinnerProps = typeof __propDef.props;
11
- export type SpinnerEvents = typeof __propDef.events;
12
- export type SpinnerSlots = typeof __propDef.slots;
13
- import { SvelteComponentTyped } from "svelte";
14
- declare const __propDef: {
15
- props: {
16
- [x: string]: never;
17
- };
18
- events: {
19
- [evt: string]: CustomEvent<any>;
20
- };
21
- slots: {};
22
- };
23
- export {};
package/dist/index.d.ts DELETED
@@ -1,9 +0,0 @@
1
- import ListView from './components/ListView.svelte';
2
- import TableView from './TableView.svelte';
3
- import FileIcon from './components/File/FileIcon.svelte';
4
- import FileInfo from './components/File/FileInfo.svelte';
5
- import FileUploader from './components/File/FileUploader.svelte';
6
- export { ListView, TableView, FileInfo, FileIcon, FileUploader };
7
- export { Api } from './services/Api.js';
8
- export { host, username, password, setApiConfig } from './stores/apistore.js';
9
- export type { user, FileUploaderModel } from './models/Models.js';
package/dist/index.js DELETED
@@ -1,9 +0,0 @@
1
- // Reexport your entry components here
2
- import ListView from './components/ListView.svelte';
3
- import TableView from './TableView.svelte';
4
- import FileIcon from './components/File/FileIcon.svelte';
5
- import FileInfo from './components/File/FileInfo.svelte';
6
- import FileUploader from './components/File/FileUploader.svelte';
7
- export { ListView, TableView, FileInfo, FileIcon, FileUploader };
8
- export { Api } from './services/Api.js';
9
- export { host, username, password, setApiConfig } from './stores/apistore.js';
@@ -1,31 +0,0 @@
1
- export interface FileInfo {
2
- name: string;
3
- type: string;
4
- length: number;
5
- description: string;
6
- validationHash: string;
7
- }
8
- export interface FileUploaderModel {
9
- accept: string[];
10
- existingFiles: FileInfo[];
11
- descriptionType: number;
12
- multiple: boolean;
13
- maxSize: number;
14
- lastModification: Date;
15
- }
16
- export interface Files {
17
- accepted: Blob[];
18
- rejected: Blob[];
19
- }
20
- export type user = {
21
- name: string;
22
- };
23
- export interface FileObj {
24
- path: string;
25
- lastModified: number;
26
- lastModifiedDate: Date;
27
- name: string;
28
- size: number;
29
- type: string;
30
- webkitRelativePath: string;
31
- }
@@ -1 +0,0 @@
1
- export {};
@@ -1,7 +0,0 @@
1
- export declare const Api: {
2
- get: (url: any, request?: string) => Promise<import("axios").AxiosResponse<any, any>>;
3
- delete: (url: any, request: any) => Promise<import("axios").AxiosResponse<any, any>>;
4
- post: (url: any, request: any) => Promise<import("axios").AxiosResponse<any, any>>;
5
- put: (url: any, request: any) => Promise<import("axios").AxiosResponse<any, any>>;
6
- patch: (url: any, request: any) => Promise<import("axios").AxiosResponse<any, any>>;
7
- };
@@ -1,4 +0,0 @@
1
- export declare let host: string;
2
- export declare let username: string;
3
- export declare let password: string;
4
- export declare function setApiConfig(_host: string, _user: string, _pw: string): void;
@@ -1,22 +0,0 @@
1
- import { writable } from 'svelte/store';
2
- export let host = "window.location.origin";
3
- export let username = "";
4
- export let password = "";
5
- const hostStore = writable(""); //writable(window.location.origin);
6
- const usernameStore = writable("");
7
- const passwordStore = writable("");
8
- hostStore.subscribe(value => {
9
- host = value;
10
- });
11
- usernameStore.subscribe(value => {
12
- username = value;
13
- });
14
- passwordStore.subscribe(value => {
15
- password = value;
16
- });
17
- export function setApiConfig(_host, _user, _pw) {
18
- console.log("overwrite settings");
19
- hostStore.update(h => h = _host);
20
- usernameStore.update(u => u = _user);
21
- passwordStore.update(p => p = _pw);
22
- }
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes