lutra 0.0.19 → 0.0.33

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 (192) hide show
  1. package/dist/color.css +0 -0
  2. package/dist/display/Avatar.svelte +1 -1
  3. package/dist/display/Avatar.svelte.d.ts +18 -22
  4. package/dist/display/Badge.svelte +2 -4
  5. package/dist/display/Badge.svelte.d.ts +28 -32
  6. package/dist/display/Callout.svelte +8 -8
  7. package/dist/display/Callout.svelte.d.ts +27 -35
  8. package/dist/display/Close.svelte.d.ts +17 -20
  9. package/dist/display/Code.svelte +26 -31
  10. package/dist/display/Code.svelte.d.ts +31 -30
  11. package/dist/display/ContextTip.svelte +2 -5
  12. package/dist/display/ContextTip.svelte.d.ts +16 -20
  13. package/dist/display/DataList.svelte +16 -0
  14. package/dist/display/DataList.svelte.d.ts +21 -0
  15. package/dist/display/Details.svelte.d.ts +25 -30
  16. package/dist/display/Hero.svelte.d.ts +24 -28
  17. package/dist/display/Icon.svelte +3 -4
  18. package/dist/display/Icon.svelte.d.ts +18 -23
  19. package/dist/display/IconButton.svelte +12 -5
  20. package/dist/display/IconButton.svelte.d.ts +26 -29
  21. package/dist/display/Image.svelte.d.ts +25 -36
  22. package/dist/display/Indicator.svelte.d.ts +21 -22
  23. package/dist/display/Inset.svelte.d.ts +16 -20
  24. package/dist/display/LineChart.svelte +385 -0
  25. package/dist/display/LineChart.svelte.d.ts +24 -0
  26. package/dist/display/LoadingIndicator.svelte +33 -0
  27. package/dist/display/LoadingIndicator.svelte.d.ts +15 -0
  28. package/dist/display/Modal.svelte +116 -0
  29. package/dist/display/Modal.svelte.d.ts +27 -0
  30. package/dist/display/Notification.svelte.d.ts +22 -41
  31. package/dist/display/Panel.svelte +23 -0
  32. package/dist/display/Panel.svelte.d.ts +19 -0
  33. package/dist/display/Popup.svelte.d.ts +23 -28
  34. package/dist/{data → display}/Stat.svelte +9 -17
  35. package/dist/display/Stat.svelte.d.ts +30 -0
  36. package/dist/display/Table.svelte +14 -10
  37. package/dist/display/Table.svelte.d.ts +22 -32
  38. package/dist/display/TablePaginator.svelte +51 -0
  39. package/dist/display/TablePaginator.svelte.d.ts +21 -0
  40. package/dist/display/Tag.svelte.d.ts +29 -32
  41. package/dist/display/Tooltip.svelte +5 -4
  42. package/dist/display/Tooltip.svelte.d.ts +21 -26
  43. package/dist/display/chart.d.ts +78 -0
  44. package/dist/display/chart.js +212 -0
  45. package/dist/display/index.d.ts +11 -1
  46. package/dist/display/index.js +11 -1
  47. package/dist/display/notifications.svelte.d.ts +3 -3
  48. package/dist/display/notifications.svelte.js +2 -2
  49. package/dist/form/Button.svelte +7 -2
  50. package/dist/form/Button.svelte.d.ts +25 -35
  51. package/dist/form/FieldActions.svelte +25 -3
  52. package/dist/form/FieldActions.svelte.d.ts +18 -22
  53. package/dist/form/FieldContainer.svelte +1 -1
  54. package/dist/form/FieldContainer.svelte.d.ts +17 -22
  55. package/dist/form/FieldContent.svelte +52 -33
  56. package/dist/form/FieldContent.svelte.d.ts +28 -56
  57. package/dist/form/FieldError.svelte.d.ts +17 -20
  58. package/dist/form/FieldSection.svelte.d.ts +18 -32
  59. package/dist/form/Fieldset.svelte.d.ts +29 -40
  60. package/dist/form/Form.svelte +55 -16
  61. package/dist/form/Form.svelte.d.ts +36 -31
  62. package/dist/form/ImageUpload.svelte +259 -0
  63. package/dist/form/ImageUpload.svelte.d.ts +31 -0
  64. package/dist/form/Input.svelte +192 -153
  65. package/dist/form/Input.svelte.d.ts +115 -140
  66. package/dist/form/InputLength.svelte.d.ts +19 -20
  67. package/dist/form/Label.svelte +21 -4
  68. package/dist/form/Label.svelte.d.ts +24 -30
  69. package/dist/form/LogoUpload.svelte +100 -0
  70. package/dist/form/LogoUpload.svelte.d.ts +29 -0
  71. package/dist/form/Select.svelte +84 -36
  72. package/dist/form/Select.svelte.d.ts +69 -96
  73. package/dist/form/Textarea.svelte +163 -0
  74. package/dist/form/Textarea.svelte.d.ts +108 -0
  75. package/dist/form/Toggle.svelte +2 -0
  76. package/dist/form/Toggle.svelte.d.ts +15 -0
  77. package/dist/form/client.svelte.d.ts +8 -9
  78. package/dist/form/client.svelte.js +18 -10
  79. package/dist/form/form.d.ts +6 -4
  80. package/dist/form/form.js +23 -9
  81. package/dist/form/index.d.ts +6 -3
  82. package/dist/form/index.js +6 -3
  83. package/dist/form/types.d.ts +11 -1
  84. package/dist/icons/IconAlert.svelte.d.ts +23 -0
  85. package/dist/icons/{Copy.svelte → IconCopy.svelte} +1 -1
  86. package/dist/icons/IconCopy.svelte.d.ts +23 -0
  87. package/dist/icons/IconDone.svelte.d.ts +23 -0
  88. package/dist/icons/IconError.svelte.d.ts +23 -0
  89. package/dist/icons/IconHelp.svelte.d.ts +23 -0
  90. package/dist/icons/IconHide.svelte.d.ts +23 -0
  91. package/dist/icons/IconInfo.svelte.d.ts +23 -0
  92. package/dist/icons/IconLink.svelte.d.ts +23 -0
  93. package/dist/icons/IconMenuBurger.svelte.d.ts +23 -0
  94. package/dist/icons/IconMenuDots.svelte.d.ts +23 -0
  95. package/dist/icons/IconSearch.svelte +3 -0
  96. package/dist/icons/IconSearch.svelte.d.ts +23 -0
  97. package/dist/icons/IconShow.svelte.d.ts +23 -0
  98. package/dist/icons/IconSuccess.svelte.d.ts +23 -0
  99. package/dist/icons/IconWarning.svelte.d.ts +23 -0
  100. package/dist/icons/index.d.ts +14 -11
  101. package/dist/icons/index.js +14 -11
  102. package/dist/layout/Layout.svelte +7 -5
  103. package/dist/layout/Layout.svelte.d.ts +19 -22
  104. package/dist/layout/LayoutFooter.svelte.d.ts +17 -18
  105. package/dist/layout/LayoutGrid.svelte.d.ts +25 -36
  106. package/dist/layout/LayoutHeader.svelte +3 -0
  107. package/dist/layout/LayoutHeader.svelte.d.ts +33 -38
  108. package/dist/layout/LayoutSideMenu.svelte +18 -17
  109. package/dist/layout/LayoutSideMenu.svelte.d.ts +18 -22
  110. package/dist/layout/Overlay.svelte.d.ts +22 -32
  111. package/dist/layout/OverlayContainer.svelte.d.ts +14 -15
  112. package/dist/layout/OverlayLayer.svelte +6 -11
  113. package/dist/layout/OverlayLayer.svelte.d.ts +17 -20
  114. package/dist/layout/PageContent.svelte +9 -24
  115. package/dist/layout/PageContent.svelte.d.ts +23 -26
  116. package/dist/layout/Theme.svelte +19 -4
  117. package/dist/layout/Theme.svelte.d.ts +17 -22
  118. package/dist/layout/UIContent.svelte.d.ts +16 -20
  119. package/dist/layout/index.d.ts +5 -1
  120. package/dist/layout/index.js +5 -1
  121. package/dist/layout/overlays.svelte.d.ts +2 -2
  122. package/dist/nav/Breadcrumb.svelte +1 -1
  123. package/dist/nav/Breadcrumb.svelte.d.ts +26 -31
  124. package/dist/nav/Menu.svelte +6 -13
  125. package/dist/nav/Menu.svelte.d.ts +25 -31
  126. package/dist/nav/MenuItem.svelte +15 -8
  127. package/dist/nav/MenuItem.svelte.d.ts +20 -24
  128. package/dist/nav/MenuTypes.d.ts +7 -7
  129. package/dist/nav/NavMenu.svelte +7 -9
  130. package/dist/nav/NavMenu.svelte.d.ts +17 -18
  131. package/dist/nav/TabbedContent.svelte +1 -1
  132. package/dist/nav/TabbedContent.svelte.d.ts +21 -22
  133. package/dist/nav/Tabs.svelte +53 -13
  134. package/dist/nav/Tabs.svelte.d.ts +24 -25
  135. package/dist/nav/index.d.ts +2 -1
  136. package/dist/nav/index.js +2 -1
  137. package/dist/style.css +176 -79
  138. package/dist/typo/Clamp.svelte.d.ts +22 -26
  139. package/dist/typo/H.svelte.d.ts +26 -30
  140. package/dist/typo/H1.svelte.d.ts +24 -28
  141. package/dist/typo/H2.svelte.d.ts +24 -28
  142. package/dist/typo/H3.svelte.d.ts +24 -28
  143. package/dist/typo/H4.svelte.d.ts +24 -28
  144. package/dist/typo/H5.svelte.d.ts +24 -28
  145. package/dist/typo/H6.svelte.d.ts +24 -28
  146. package/dist/typo/P.svelte.d.ts +24 -28
  147. package/dist/utils/StringOrComponent.svelte +14 -0
  148. package/dist/utils/StringOrComponent.svelte.d.ts +19 -0
  149. package/dist/utils/StringOrSnippet.svelte +11 -0
  150. package/dist/utils/StringOrSnippet.svelte.d.ts +19 -0
  151. package/dist/utils/color.d.ts +1 -1
  152. package/dist/utils/index.d.ts +2 -1
  153. package/dist/utils/index.js +2 -1
  154. package/dist/utils/isSnippet.d.ts +3 -5
  155. package/dist/utils/isSnippet.js +9 -4
  156. package/package.json +32 -25
  157. package/dist/data/Stat.svelte.d.ts +0 -39
  158. package/dist/data/index.d.ts +0 -1
  159. package/dist/data/index.js +0 -1
  160. package/dist/grid/Column.svelte +0 -11
  161. package/dist/grid/Column.svelte.d.ts +0 -22
  162. package/dist/grid/Grid.svelte +0 -19
  163. package/dist/grid/Grid.svelte.d.ts +0 -24
  164. package/dist/grid/Row.svelte +0 -44
  165. package/dist/grid/Row.svelte.d.ts +0 -24
  166. package/dist/icons/Alert.svelte.d.ts +0 -23
  167. package/dist/icons/Copy.svelte.d.ts +0 -23
  168. package/dist/icons/Done.svelte.d.ts +0 -23
  169. package/dist/icons/Error.svelte.d.ts +0 -23
  170. package/dist/icons/Help.svelte.d.ts +0 -23
  171. package/dist/icons/Hide.svelte.d.ts +0 -23
  172. package/dist/icons/Info.svelte.d.ts +0 -23
  173. package/dist/icons/Link.svelte.d.ts +0 -23
  174. package/dist/icons/MenuBurger.svelte.d.ts +0 -23
  175. package/dist/icons/MenuDots.svelte.d.ts +0 -23
  176. package/dist/icons/Show.svelte.d.ts +0 -23
  177. package/dist/icons/Success.svelte.d.ts +0 -23
  178. package/dist/icons/Warning.svelte.d.ts +0 -23
  179. package/dist/utils/StringOrComponentOrSnippet.svelte +0 -14
  180. package/dist/utils/StringOrComponentOrSnippet.svelte.d.ts +0 -24
  181. /package/dist/icons/{Alert.svelte → IconAlert.svelte} +0 -0
  182. /package/dist/icons/{Done.svelte → IconDone.svelte} +0 -0
  183. /package/dist/icons/{Error.svelte → IconError.svelte} +0 -0
  184. /package/dist/icons/{Help.svelte → IconHelp.svelte} +0 -0
  185. /package/dist/icons/{Hide.svelte → IconHide.svelte} +0 -0
  186. /package/dist/icons/{Info.svelte → IconInfo.svelte} +0 -0
  187. /package/dist/icons/{Link.svelte → IconLink.svelte} +0 -0
  188. /package/dist/icons/{MenuBurger.svelte → IconMenuBurger.svelte} +0 -0
  189. /package/dist/icons/{MenuDots.svelte → IconMenuDots.svelte} +0 -0
  190. /package/dist/icons/{Show.svelte → IconShow.svelte} +0 -0
  191. /package/dist/icons/{Success.svelte → IconSuccess.svelte} +0 -0
  192. /package/dist/icons/{Warning.svelte → IconWarning.svelte} +0 -0
@@ -0,0 +1,259 @@
1
+ <script lang="ts">import { getContext, onMount } from "svelte";
2
+ import imageCompression from "browser-image-compression";
3
+ import { fade } from "svelte/transition";
4
+ import { addNotification } from "../display/index.js";
5
+ let {
6
+ src,
7
+ uploadUrl,
8
+ name,
9
+ id = `ImageUpload-${name}`,
10
+ title = name,
11
+ button,
12
+ maxSize = 256e3,
13
+ compressSize = 0.5,
14
+ // MB
15
+ compressMaxWidth = 512,
16
+ // px
17
+ accept = "image/png,image/svg+xml,image/jpg",
18
+ removable = false,
19
+ shape = "square",
20
+ onFile,
21
+ children
22
+ } = $props();
23
+ let files = $state(null);
24
+ let el = $state(null);
25
+ let urlEl = $state(null);
26
+ let error = $state(null);
27
+ let resizeProgress = $state(0);
28
+ let uploadState = $state("idle");
29
+ const beforeSubmit = getContext("form.beforeSubmit");
30
+ beforeSubmit(id, async ({ data, cancel }) => {
31
+ if (!files || !files[0]) {
32
+ return;
33
+ }
34
+ try {
35
+ uploadState = "resizing";
36
+ resizeProgress = 0;
37
+ const compressedFile = await imageCompression(files[0], {
38
+ maxSizeMB: compressSize,
39
+ maxWidthOrHeight: compressMaxWidth,
40
+ useWebWorker: true,
41
+ onProgress: (progress) => resizeProgress = progress
42
+ });
43
+ console.log("compressedFile instanceof Blob", compressedFile instanceof Blob);
44
+ console.log(`compressedFile size ${compressedFile.size / 1024 / 1024} MB`);
45
+ uploadState = "uploading";
46
+ const response = await fetch(uploadUrl, {
47
+ method: "PUT",
48
+ headers: {
49
+ "Content-Type": files[0].type
50
+ },
51
+ body: compressedFile
52
+ });
53
+ uploadState = "idle";
54
+ if (!response.ok) {
55
+ addNotification({ content: "Something went wrong. Please try again.", autoClose: 3e3 });
56
+ cancel();
57
+ }
58
+ console.log("setting", name, new URL(response.url).href.split("?")[0]);
59
+ const imgUrl = new URL(response.url).href.split("?")[0];
60
+ data.set(name, imgUrl);
61
+ src = imgUrl;
62
+ console.log("response", response, response.url);
63
+ console.log("data", data.forEach((v, k) => console.log(k, v)));
64
+ } catch (err) {
65
+ console.error("error", err);
66
+ addNotification({ content: "Something went wrong. Please try again.", autoClose: 3e3 });
67
+ cancel();
68
+ }
69
+ });
70
+ function handleFile(event) {
71
+ error = null;
72
+ const file = files ? files[0] : null;
73
+ if (file && file.type.startsWith("image/") && file.size < maxSize) {
74
+ if (onFile) onFile(file);
75
+ src = URL.createObjectURL(file);
76
+ } else if (file && file.type.startsWith("image/") && file.size > maxSize) {
77
+ error = `Image must be less than ${maxSize / 1024 / 1024}MB.`;
78
+ } else {
79
+ error = `File must be an image.`;
80
+ }
81
+ }
82
+ function remove(e) {
83
+ e.preventDefault();
84
+ e.stopPropagation();
85
+ src = "";
86
+ files = null;
87
+ }
88
+ function pick(e) {
89
+ e.preventDefault();
90
+ e.stopPropagation();
91
+ el.click();
92
+ }
93
+ let jsEnabled = $state(false);
94
+ onMount(() => {
95
+ jsEnabled = true;
96
+ });
97
+ </script>
98
+
99
+ <div class="ImageUpload {shape}">
100
+ <div class="Image" class:hasSrc={!!src}>
101
+ {#if src}
102
+ <img src={src} alt="{title} logo" />
103
+ {/if}
104
+ {#if uploadState !== 'idle'}
105
+ <div class="Loading" in:fade={{ duration: 100 }} out:fade={{ duration: 100 }}>
106
+ {#if uploadState === 'resizing'}
107
+ <small>Resizing.. {resizeProgress}%</small>
108
+ {:else if uploadState === 'uploading'}
109
+ <small>Uploading..</small>
110
+ {/if}
111
+ </div>
112
+ {/if}
113
+ </div>
114
+ <div class="ImageUploadActions" style="{!jsEnabled ? 'display: none;' : ''}">
115
+ {#if children}
116
+ <div class="description">
117
+ {@render children()}
118
+ </div>
119
+ {/if}
120
+ <button type="button" class="button outlined" onclick={pick}>
121
+ {button}
122
+ </button>
123
+ {#if removable && src}
124
+ <button type="button" class="button warn" onclick={remove}>
125
+ Remove
126
+ </button>
127
+ {/if}
128
+ {#if error}
129
+ <div class="error">
130
+ <small>{error}</small>
131
+ </div>
132
+ {/if}
133
+ <input
134
+ type="file"
135
+ {accept}
136
+ {id}
137
+ bind:files
138
+ onchange={handleFile}
139
+ bind:this={el}
140
+ />
141
+ <input type="hidden" {name} value={src} bind:this={urlEl} />
142
+ </div>
143
+ <noscript>
144
+ <small>Sorry, you need to enable Javascript to upload images.</small>
145
+ </noscript>
146
+ </div>
147
+
148
+ <style>
149
+ .ImageUpload {
150
+ display: grid;
151
+ grid-template-columns: 1fr;
152
+ align-items: center;
153
+ gap: 1rem;
154
+ container-type: inline-size;
155
+ }
156
+ .Image {
157
+ border: 1px solid var(--border-light);
158
+ pointer-events: none;
159
+ position: relative;
160
+ display: none;
161
+ }
162
+ .Image.hasSrc {
163
+ display: block;
164
+ }
165
+ .Image img {
166
+ display: block;
167
+ object-fit: contain;
168
+ width: 100%;
169
+ height: 100%;
170
+ }
171
+ .ImageUpload.square .Image img {
172
+ object-fit: cover;
173
+ }
174
+ .ImageUpload.circle .Image {
175
+ border-radius: 50%;
176
+ overflow: hidden;
177
+ }
178
+ .ImageUpload.circle .Image img {
179
+ object-fit: cover;
180
+ }
181
+ .placeholder {
182
+ display: flex;
183
+ align-items: center;
184
+ justify-content: center;
185
+ height: 100%;
186
+ width: 100%;
187
+ object-fit: contain;
188
+ padding: 1rem;
189
+ text-align: center;
190
+ border: 1px dashed var(--border-color);
191
+ border-radius: var(--border-radius);
192
+ }
193
+ .Loading {
194
+ position: absolute;
195
+ top: 0;
196
+ left: 0;
197
+ right: 0;
198
+ bottom: 0;
199
+ z-index: 5;
200
+ backdrop-filter: blur(5px);
201
+ background: var(--bg-overlay);
202
+ display: flex;
203
+ align-items: center;
204
+ justify-content: center;
205
+ flex-direction: column;
206
+ gap: 1rem;
207
+ padding: 1rem;
208
+ }
209
+ input {
210
+ display: none;
211
+ }
212
+ .error {
213
+ margin-top: 0.75rem;
214
+ }
215
+ .ImageUpload.banner {
216
+ grid-template-areas: "image";
217
+ width: 100%;
218
+ }
219
+ .ImageUpload.banner .Image {
220
+ height: 100%;
221
+ grid-area: image;
222
+ overflow: hidden;
223
+ object-fit: cover;
224
+ height: 15rem;
225
+ aspect-ratio: initial !important;
226
+ }
227
+ .ImageUpload.banner .Image img {
228
+ object-fit: cover;
229
+ }
230
+ .ImageUpload.banner .ImageUploadActions {
231
+ display: flex;
232
+ grid-area: image;
233
+ flex-direction: column;
234
+ justify-content: center;
235
+ padding: 1rem;
236
+ }
237
+ .ImageUpload.banner:hover .ImageUploadActions {
238
+ background: var(--bg-overlay);
239
+ }
240
+ .ImageUploadActions {
241
+ display: grid;
242
+ grid-template-columns: 1fr 1fr;
243
+ gap: 0.75rem;
244
+ align-items: start;
245
+ }
246
+ @container (min-width: 320px) {
247
+ .ImageUpload:not(.banner) {
248
+ grid-template-columns: minmax(auto, var(--max-image-width)) 1fr;
249
+ gap: 2rem;
250
+ }
251
+ .ImageUpload.banner .ImageUploadActions {
252
+ padding: 3rem;
253
+ }
254
+ .ImageUploadActions {
255
+ grid-template-columns: 1fr;
256
+ gap: 1rem;
257
+ }
258
+ }
259
+ </style>
@@ -0,0 +1,31 @@
1
+ import { type Snippet } from 'svelte';
2
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
3
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
4
+ $$bindings?: Bindings;
5
+ } & Exports;
6
+ (internal: unknown, props: Props & {
7
+ $$events?: Events;
8
+ $$slots?: Slots;
9
+ }): Exports;
10
+ z_$$bindings?: Bindings;
11
+ }
12
+ declare const ImageUpload: $$__sveltets_2_IsomorphicComponent<{
13
+ src?: string | null;
14
+ uploadUrl: string;
15
+ name: string;
16
+ id?: string;
17
+ title?: string;
18
+ button: string;
19
+ maxSize?: number;
20
+ compressSize?: number;
21
+ compressMaxWidth?: number;
22
+ accept?: string;
23
+ removable?: boolean;
24
+ shape?: "square" | "circle" | "banner";
25
+ onFile?: (file: File) => void;
26
+ children?: Snippet;
27
+ }, {
28
+ [evt: string]: CustomEvent<any>;
29
+ }, {}, {}, "">;
30
+ type ImageUpload = InstanceType<typeof ImageUpload>;
31
+ export default ImageUpload;