poe-svelte-ui-lib 1.0.0 → 1.0.2

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 (36) hide show
  1. package/LICENSE +3 -3
  2. package/dist/Accordion/Accordion.svelte +53 -53
  3. package/dist/Accordion/AccordionProps.svelte +70 -70
  4. package/dist/Button/Button.svelte +144 -144
  5. package/dist/Button/ButtonProps.svelte +200 -200
  6. package/dist/ColorPicker/ColorPicker.svelte +207 -207
  7. package/dist/ColorPicker/ColorPickerProps.svelte +100 -100
  8. package/dist/FileAttach/FileAttach.svelte +103 -103
  9. package/dist/Graph/Graph.svelte +270 -270
  10. package/dist/Graph/GraphProps.svelte +56 -56
  11. package/dist/Input/Input.svelte +239 -239
  12. package/dist/Input/InputProps.svelte +221 -221
  13. package/dist/Loader.svelte +12 -12
  14. package/dist/MessageModal.svelte +54 -54
  15. package/dist/ProgressBar/ProgressBar.svelte +48 -48
  16. package/dist/ProgressBar/ProgressBarProps.svelte +145 -145
  17. package/dist/Select/Select.svelte +191 -187
  18. package/dist/Select/SelectProps.svelte +260 -260
  19. package/dist/Slider/Slider.svelte +260 -260
  20. package/dist/Slider/SliderProps.svelte +161 -161
  21. package/dist/Switch/Switch.svelte +83 -83
  22. package/dist/Switch/SwitchProps.svelte +144 -144
  23. package/dist/Table/Table.svelte +276 -276
  24. package/dist/Table/TableProps.svelte +286 -286
  25. package/dist/TextField/TextField.svelte +22 -22
  26. package/dist/TextField/TextFieldProps.svelte +92 -92
  27. package/dist/{appIcons → libIcons}/ButtonAdd.svelte +10 -10
  28. package/dist/{appIcons → libIcons}/ButtonDelete.svelte +13 -13
  29. package/dist/{appIcons → libIcons}/LoaderRotate.svelte +9 -9
  30. package/dist/locales/CircleFlagsEn.svelte +14 -14
  31. package/dist/locales/CircleFlagsRu.svelte +8 -8
  32. package/dist/locales/CircleFlagsZh.svelte +8 -8
  33. package/package.json +49 -47
  34. /package/dist/{appIcons → libIcons}/ButtonAdd.svelte.d.ts +0 -0
  35. /package/dist/{appIcons → libIcons}/ButtonDelete.svelte.d.ts +0 -0
  36. /package/dist/{appIcons → libIcons}/LoaderRotate.svelte.d.ts +0 -0
@@ -1,103 +1,103 @@
1
- <!-- $lib/ElementsUI/FileAttach.svelte -->
2
- <script lang="ts">
3
- interface FileInputProps {
4
- id?: string
5
- wrapperClass?: string
6
- label?: { name?: string; class?: string }
7
- type?: 'file' | 'image'
8
- accept?: string
9
- imageSize?: { height?: string; width?: string; fitMode?: 'cover' | 'contain'; form?: 'square' | 'circle' }
10
- disabled?: boolean
11
- currentImage?: string | null
12
- onChange?: (event: Event, file: File | null) => void
13
- }
14
-
15
- let {
16
- id = crypto.randomUUID(),
17
- wrapperClass = '',
18
- label = { name: '', class: '' },
19
- type = 'file',
20
- accept = '*/*',
21
- imageSize = { height: '10rem', width: '10rem', fitMode: 'cover', form: 'square' },
22
- disabled = false,
23
- currentImage = null,
24
- onChange = () => {},
25
- }: FileInputProps = $props()
26
-
27
- let selectedFile = $state<File | null>(null)
28
- let previewUrl = $state<string | null>(null)
29
-
30
- $effect(() => {
31
- if (currentImage && !selectedFile) {
32
- previewUrl = currentImage.startsWith('data:') ? currentImage : `data:image/png;base64,${currentImage}`
33
- }
34
- })
35
-
36
- const handleFileChange = (event: Event) => {
37
- const input = event.target as HTMLInputElement
38
- if (!input.files || input.files.length === 0) {
39
- onChange(event, null)
40
- return
41
- }
42
-
43
- const file = input.files[0]
44
- selectedFile = file
45
-
46
- if (file.type.startsWith('image/')) {
47
- previewUrl = URL.createObjectURL(file)
48
- }
49
-
50
- onChange(event, file)
51
- }
52
-
53
- const triggerFileInput = () => {
54
- const input = document.getElementById(id)
55
- input?.click()
56
- }
57
- </script>
58
-
59
- <div class={`flex flex-col items-center ${wrapperClass}`}>
60
- {#if label.name}
61
- <h5 class={`${label.class}`}>{label.name}</h5>
62
- {/if}
63
-
64
- {#if type === 'image'}
65
- <div class="relative">
66
- <button
67
- class="flex items-center justify-center overflow-hidden {imageSize.form === 'circle' ? 'rounded-full' : 'rounded-2xl'}
68
- border border-[var(--border-color)] bg-[var(--back-color)] transition duration-250 hover:shadow-lg
69
- {disabled ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'}"
70
- style={`height: ${imageSize.height}; width: ${imageSize.width}`}
71
- onclick={triggerFileInput}
72
- {disabled}
73
- >
74
- {#if previewUrl || currentImage}
75
- <img
76
- src={previewUrl ?? (currentImage?.startsWith('data:') ? currentImage : `data:image/png;base64,${currentImage}`)}
77
- alt="Preview"
78
- class={`
79
- h-full w-full
80
- ${imageSize.fitMode === 'cover' ? 'object-cover' : 'object-contain'}
81
- `}
82
- />
83
- {:else}
84
- <span class="text-sm text-gray-500">Image</span>
85
- {/if}
86
- </button>
87
- <input {id} type="file" class="absolute -z-10 h-0 w-0 overflow-hidden opacity-0" {accept} {disabled} onchange={handleFileChange} />
88
- </div>
89
- {:else}
90
- <label class="relative inline-block w-full font-normal">
91
- <input
92
- {id}
93
- type="file"
94
- class={`h-9 w-full rounded-2xl border border-[var(--border-color)] bg-[var(--back-color)] transition duration-250 hover:shadow-lg
95
- ${disabled ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'} file:h-full file:w-1/3 file:cursor-pointer
96
- file:border-none file:bg-[var(--blue-color)] invalid:border-red-400 invalid:shadow-[0_0_6px_var(--red-color)]`}
97
- {accept}
98
- {disabled}
99
- onchange={handleFileChange}
100
- />
101
- </label>
102
- {/if}
103
- </div>
1
+ <!-- $lib/ElementsUI/FileAttach.svelte -->
2
+ <script lang="ts">
3
+ interface FileInputProps {
4
+ id?: string
5
+ wrapperClass?: string
6
+ label?: { name?: string; class?: string }
7
+ type?: 'file' | 'image'
8
+ accept?: string
9
+ imageSize?: { height?: string; width?: string; fitMode?: 'cover' | 'contain'; form?: 'square' | 'circle' }
10
+ disabled?: boolean
11
+ currentImage?: string | null
12
+ onChange?: (event: Event, file: File | null) => void
13
+ }
14
+
15
+ let {
16
+ id = crypto.randomUUID(),
17
+ wrapperClass = '',
18
+ label = { name: '', class: '' },
19
+ type = 'file',
20
+ accept = '*/*',
21
+ imageSize = { height: '10rem', width: '10rem', fitMode: 'cover', form: 'square' },
22
+ disabled = false,
23
+ currentImage = null,
24
+ onChange = () => {},
25
+ }: FileInputProps = $props()
26
+
27
+ let selectedFile = $state<File | null>(null)
28
+ let previewUrl = $state<string | null>(null)
29
+
30
+ $effect(() => {
31
+ if (currentImage && !selectedFile) {
32
+ previewUrl = currentImage.startsWith('data:') ? currentImage : `data:image/png;base64,${currentImage}`
33
+ }
34
+ })
35
+
36
+ const handleFileChange = (event: Event) => {
37
+ const input = event.target as HTMLInputElement
38
+ if (!input.files || input.files.length === 0) {
39
+ onChange(event, null)
40
+ return
41
+ }
42
+
43
+ const file = input.files[0]
44
+ selectedFile = file
45
+
46
+ if (file.type.startsWith('image/')) {
47
+ previewUrl = URL.createObjectURL(file)
48
+ }
49
+
50
+ onChange(event, file)
51
+ }
52
+
53
+ const triggerFileInput = () => {
54
+ const input = document.getElementById(id)
55
+ input?.click()
56
+ }
57
+ </script>
58
+
59
+ <div class={`flex flex-col items-center ${wrapperClass}`}>
60
+ {#if label.name}
61
+ <h5 class={`${label.class}`}>{label.name}</h5>
62
+ {/if}
63
+
64
+ {#if type === 'image'}
65
+ <div class="relative">
66
+ <button
67
+ class="flex items-center justify-center overflow-hidden {imageSize.form === 'circle' ? 'rounded-full' : 'rounded-2xl'}
68
+ border border-[var(--border-color)] bg-[var(--back-color)] transition duration-250 hover:shadow-lg
69
+ {disabled ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'}"
70
+ style={`height: ${imageSize.height}; width: ${imageSize.width}`}
71
+ onclick={triggerFileInput}
72
+ {disabled}
73
+ >
74
+ {#if previewUrl || currentImage}
75
+ <img
76
+ src={previewUrl ?? (currentImage?.startsWith('data:') ? currentImage : `data:image/png;base64,${currentImage}`)}
77
+ alt="Preview"
78
+ class={`
79
+ h-full w-full
80
+ ${imageSize.fitMode === 'cover' ? 'object-cover' : 'object-contain'}
81
+ `}
82
+ />
83
+ {:else}
84
+ <span class="text-sm text-gray-500">Image</span>
85
+ {/if}
86
+ </button>
87
+ <input {id} type="file" class="absolute -z-10 h-0 w-0 overflow-hidden opacity-0" {accept} {disabled} onchange={handleFileChange} />
88
+ </div>
89
+ {:else}
90
+ <label class="relative inline-block w-full font-normal">
91
+ <input
92
+ {id}
93
+ type="file"
94
+ class={`h-9 w-full rounded-2xl border border-[var(--border-color)] bg-[var(--back-color)] transition duration-250 hover:shadow-lg
95
+ ${disabled ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'} file:h-full file:w-1/3 file:cursor-pointer
96
+ file:border-none file:bg-[var(--blue-color)] invalid:border-red-400 invalid:shadow-[0_0_6px_var(--red-color)]`}
97
+ {accept}
98
+ {disabled}
99
+ onchange={handleFileChange}
100
+ />
101
+ </label>
102
+ {/if}
103
+ </div>