@happyvertical/smrt-assets 0.30.0 → 0.31.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/dist/manifest.json +2 -2
- package/dist/smrt-knowledge.json +4 -4
- package/dist/svelte/AssetDetail.svelte +8 -3
- package/dist/svelte/AssetDetail.svelte.d.ts.map +1 -1
- package/dist/svelte/AssetGrid.svelte +6 -0
- package/dist/svelte/AssetList.svelte +4 -3
- package/dist/svelte/AssetManager.svelte +42 -13
- package/dist/svelte/AssetManager.svelte.d.ts.map +1 -1
- package/dist/svelte/CreateAssetModal.svelte +40 -9
- package/dist/svelte/CreateAssetModal.svelte.d.ts +3 -2
- package/dist/svelte/CreateAssetModal.svelte.d.ts.map +1 -1
- package/dist/svelte/i18n.d.ts +1 -0
- package/dist/svelte/i18n.d.ts.map +1 -1
- package/dist/svelte/i18n.js +1 -0
- package/dist/svelte/types.d.ts +22 -0
- package/dist/svelte/types.d.ts.map +1 -1
- package/package.json +8 -8
package/dist/manifest.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": "1.0.0",
|
|
3
|
-
"timestamp":
|
|
3
|
+
"timestamp": 1782192573306,
|
|
4
4
|
"packageName": "@happyvertical/smrt-assets",
|
|
5
|
-
"packageVersion": "0.
|
|
5
|
+
"packageVersion": "0.31.1",
|
|
6
6
|
"objects": {
|
|
7
7
|
"@happyvertical/smrt-assets:AssetAssociation": {
|
|
8
8
|
"name": "assetassociation",
|
package/dist/smrt-knowledge.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
|
-
"generatedAt": "2026-06-
|
|
3
|
+
"generatedAt": "2026-06-23T05:29:33.785Z",
|
|
4
4
|
"packageName": "@happyvertical/smrt-assets",
|
|
5
|
-
"packageVersion": "0.
|
|
5
|
+
"packageVersion": "0.31.1",
|
|
6
6
|
"sourceManifestPath": "dist/manifest.json",
|
|
7
7
|
"agentDocPath": "AGENTS.md",
|
|
8
8
|
"sourceHashes": {
|
|
9
|
-
"manifest": "
|
|
10
|
-
"packageJson": "
|
|
9
|
+
"manifest": "94542de15d094fff8c6c68a8f792aa4efcf8545cdf20433859e657b0b1e24d9d",
|
|
10
|
+
"packageJson": "be919d8c81721eec863e118768f5b12095971e8885b40214ff3dd35955d5bd84",
|
|
11
11
|
"agents": "a034545874fb7767b31168d98aa2b1b8cac205b14f2f04fb5a8e5acf33690eef"
|
|
12
12
|
},
|
|
13
13
|
"exports": [
|
|
@@ -275,9 +275,7 @@ function formatDate(date: Date | string | undefined): string {
|
|
|
275
275
|
</button>
|
|
276
276
|
{/if}
|
|
277
277
|
</div>
|
|
278
|
-
{
|
|
279
|
-
<div class="copy-feedback">{copyFeedback}</div>
|
|
280
|
-
{/if}
|
|
278
|
+
<div class="copy-feedback" role="status" aria-live="polite">{copyFeedback}</div>
|
|
281
279
|
</section>
|
|
282
280
|
|
|
283
281
|
<!-- Content References (injected) -->
|
|
@@ -499,6 +497,13 @@ function formatDate(date: Date | string | undefined): string {
|
|
|
499
497
|
animation: fadeIn 150ms ease;
|
|
500
498
|
}
|
|
501
499
|
|
|
500
|
+
/* The live region stays in the DOM (empty) so screen readers announce
|
|
501
|
+
copy results; collapse its spacing/animation when there's no message. */
|
|
502
|
+
.copy-feedback:empty {
|
|
503
|
+
margin-top: 0;
|
|
504
|
+
animation: none;
|
|
505
|
+
}
|
|
506
|
+
|
|
502
507
|
@keyframes fadeIn {
|
|
503
508
|
from { opacity: 0; }
|
|
504
509
|
to { opacity: 1; }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssetDetail.svelte.d.ts","sourceRoot":"","sources":["../../src/svelte/AssetDetail.svelte.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAG9C,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,2BAA2B;IAC3B,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC;IAC7B,sCAAsC;IACtC,IAAI,EAAE,OAAO,CAAC;IACd,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,qDAAqD;IACrD,MAAM,CAAC,EAAE,CACP,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,kBAAkB,KACxB,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,MAAM,CAAC,EAAE,CACP,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,kBAAkB,KACxB,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,qCAAqC;IACrC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IAC3C,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IAC3C,wCAAwC;IACxC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IACzC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IACzC,4DAA4D;IAC5D,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;CACpD;
|
|
1
|
+
{"version":3,"file":"AssetDetail.svelte.d.ts","sourceRoot":"","sources":["../../src/svelte/AssetDetail.svelte.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAG9C,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,2BAA2B;IAC3B,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC;IAC7B,sCAAsC;IACtC,IAAI,EAAE,OAAO,CAAC;IACd,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,qDAAqD;IACrD,MAAM,CAAC,EAAE,CACP,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,kBAAkB,KACxB,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,MAAM,CAAC,EAAE,CACP,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,kBAAkB,KACxB,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,qCAAqC;IACrC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IAC3C,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IAC3C,wCAAwC;IACxC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IACzC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IACzC,4DAA4D;IAC5D,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;CACpD;AAqQD,QAAA,MAAM,WAAW,sDAAwC,CAAC;AAC1D,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAClD,eAAe,WAAW,CAAC"}
|
|
@@ -338,6 +338,12 @@ function getAltText(asset: PersistedAsset): string {
|
|
|
338
338
|
to { transform: rotate(360deg); }
|
|
339
339
|
}
|
|
340
340
|
|
|
341
|
+
@media (prefers-reduced-motion: reduce) {
|
|
342
|
+
.spinner {
|
|
343
|
+
animation: none;
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
|
|
341
347
|
@media (max-width: 640px) {
|
|
342
348
|
.grid {
|
|
343
349
|
grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
|
|
@@ -429,8 +429,9 @@ function setIndeterminate(node: HTMLInputElement, value: boolean) {
|
|
|
429
429
|
to { transform: rotate(360deg); }
|
|
430
430
|
}
|
|
431
431
|
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
432
|
+
@media (prefers-reduced-motion: reduce) {
|
|
433
|
+
.spinner {
|
|
434
|
+
animation: none;
|
|
435
|
+
}
|
|
435
436
|
}
|
|
436
437
|
</style>
|
|
@@ -50,6 +50,9 @@ let {
|
|
|
50
50
|
onconfirm,
|
|
51
51
|
initialView = 'grid',
|
|
52
52
|
showFolders = false,
|
|
53
|
+
onSave,
|
|
54
|
+
onCreate,
|
|
55
|
+
onDelete,
|
|
53
56
|
}: AssetManagerProps = $props();
|
|
54
57
|
|
|
55
58
|
function getInitialManagerState() {
|
|
@@ -63,6 +66,7 @@ let view = $state<AssetViewMode>(initialManagerState.view);
|
|
|
63
66
|
let selectedIds = $state<Set<string>>(new Set());
|
|
64
67
|
let assets = $state<PersistedAsset[]>([]);
|
|
65
68
|
let loading = $state(false);
|
|
69
|
+
let actionError = $state('');
|
|
66
70
|
let showCreateModal = $state(false);
|
|
67
71
|
let showDetail = $state(false);
|
|
68
72
|
let detailAsset = $state<PersistedAsset | null>(null);
|
|
@@ -148,8 +152,14 @@ async function handleDetailSave(
|
|
|
148
152
|
caption?: string;
|
|
149
153
|
},
|
|
150
154
|
) {
|
|
151
|
-
|
|
152
|
-
|
|
155
|
+
try {
|
|
156
|
+
await onSave?.(asset, updates);
|
|
157
|
+
Object.assign(asset, updates);
|
|
158
|
+
actionError = '';
|
|
159
|
+
} catch (err) {
|
|
160
|
+
actionError =
|
|
161
|
+
err instanceof Error ? err.message : 'Failed to save the asset.';
|
|
162
|
+
}
|
|
153
163
|
}
|
|
154
164
|
|
|
155
165
|
function handleAssetDblClick(asset: PersistedAsset) {
|
|
@@ -168,25 +178,30 @@ function handleUpload() {
|
|
|
168
178
|
showCreateModal = true;
|
|
169
179
|
}
|
|
170
180
|
|
|
171
|
-
function handleCreate(data: {
|
|
181
|
+
async function handleCreate(data: {
|
|
172
182
|
file: File;
|
|
173
183
|
name: string;
|
|
174
184
|
description: string;
|
|
175
185
|
altText: string;
|
|
176
186
|
}) {
|
|
177
|
-
|
|
187
|
+
// Let a rejection propagate: CreateAssetModal awaits this and surfaces the
|
|
188
|
+
// error while keeping the form populated. Only close the modal on success.
|
|
189
|
+
await onCreate?.(data);
|
|
178
190
|
showCreateModal = false;
|
|
179
191
|
}
|
|
180
192
|
|
|
181
|
-
function handleDelete(toDelete: PersistedAsset[]) {
|
|
182
|
-
|
|
183
|
-
(
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
193
|
+
async function handleDelete(toDelete: PersistedAsset[]) {
|
|
194
|
+
try {
|
|
195
|
+
await onDelete?.(toDelete);
|
|
196
|
+
assets = assets.filter(
|
|
197
|
+
(asset) => !toDelete.some((item) => item.id === asset.id),
|
|
198
|
+
);
|
|
199
|
+
selectedIds = new Set();
|
|
200
|
+
actionError = '';
|
|
201
|
+
} catch (err) {
|
|
202
|
+
actionError =
|
|
203
|
+
err instanceof Error ? err.message : 'Failed to delete the asset(s).';
|
|
204
|
+
}
|
|
190
205
|
}
|
|
191
206
|
|
|
192
207
|
function handlePaste(event: ClipboardEvent) {
|
|
@@ -238,6 +253,11 @@ function handleManagerDrop(event: DragEvent) {
|
|
|
238
253
|
ondragleave={handleManagerDragLeave}
|
|
239
254
|
ondrop={handleManagerDrop}
|
|
240
255
|
>
|
|
256
|
+
{#if actionError}
|
|
257
|
+
<p class="asset-manager__error" role="alert" aria-live="assertive">
|
|
258
|
+
{actionError}
|
|
259
|
+
</p>
|
|
260
|
+
{/if}
|
|
241
261
|
<!-- Toolbar -->
|
|
242
262
|
<AssetToolbar
|
|
243
263
|
{view}
|
|
@@ -329,6 +349,15 @@ function handleManagerDrop(event: DragEvent) {
|
|
|
329
349
|
</div>
|
|
330
350
|
|
|
331
351
|
<style>
|
|
352
|
+
.asset-manager__error {
|
|
353
|
+
margin: 0 0 var(--smrt-spacing-2, 0.5rem);
|
|
354
|
+
padding: var(--smrt-spacing-2, 0.5rem) var(--smrt-spacing-3, 0.75rem);
|
|
355
|
+
border-radius: var(--smrt-radius-medium, 0.5rem);
|
|
356
|
+
background: var(--smrt-color-error-container, #fde8e6);
|
|
357
|
+
color: var(--smrt-color-on-error-container, #410002);
|
|
358
|
+
font-size: var(--smrt-typography-body-small-size, 0.8rem);
|
|
359
|
+
}
|
|
360
|
+
|
|
332
361
|
.asset-manager {
|
|
333
362
|
position: relative;
|
|
334
363
|
display: flex;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssetManager.svelte.d.ts","sourceRoot":"","sources":["../../src/svelte/AssetManager.svelte.ts"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAEV,iBAAiB,EAIlB,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"AssetManager.svelte.d.ts","sourceRoot":"","sources":["../../src/svelte/AssetManager.svelte.ts"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAEV,iBAAiB,EAIlB,MAAM,SAAS,CAAC;AA6RjB,QAAA,MAAM,YAAY,uDAAwC,CAAC;AAC3D,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AACpD,eAAe,YAAY,CAAC"}
|
|
@@ -23,13 +23,14 @@ export interface CreateAssetModalProps {
|
|
|
23
23
|
open: boolean;
|
|
24
24
|
/** Pre-loaded file (from paste or drag) */
|
|
25
25
|
initialFile?: File | null;
|
|
26
|
-
/** Callback when creation is complete
|
|
26
|
+
/** Callback when creation is complete. May be async; a rejection keeps the
|
|
27
|
+
* form populated and surfaces an error instead of clearing silently. */
|
|
27
28
|
oncreate: (data: {
|
|
28
29
|
file: File;
|
|
29
30
|
name: string;
|
|
30
31
|
description: string;
|
|
31
32
|
altText: string;
|
|
32
|
-
}) => void
|
|
33
|
+
}) => void | Promise<void>;
|
|
33
34
|
/** Callback when modal is closed */
|
|
34
35
|
onclose: () => void;
|
|
35
36
|
}
|
|
@@ -47,6 +48,8 @@ let description = $state('');
|
|
|
47
48
|
let altText = $state('');
|
|
48
49
|
let dragOver = $state(false);
|
|
49
50
|
let previewUrl: string | null = $state(null);
|
|
51
|
+
let submitting = $state(false);
|
|
52
|
+
let error = $state('');
|
|
50
53
|
|
|
51
54
|
// Sync initial file
|
|
52
55
|
$effect(() => {
|
|
@@ -100,10 +103,24 @@ function handleFileSelect(e: Event) {
|
|
|
100
103
|
}
|
|
101
104
|
}
|
|
102
105
|
|
|
103
|
-
function handleSubmit() {
|
|
104
|
-
if (!file) return;
|
|
105
|
-
|
|
106
|
-
|
|
106
|
+
async function handleSubmit() {
|
|
107
|
+
if (!file || submitting) return;
|
|
108
|
+
submitting = true;
|
|
109
|
+
error = '';
|
|
110
|
+
try {
|
|
111
|
+
// Await in case `oncreate` performs an async upload; awaiting a sync
|
|
112
|
+
// (void) return is a harmless no-op. Only clear the form on success so a
|
|
113
|
+
// rejected upload keeps the user's input and surfaces the failure.
|
|
114
|
+
await oncreate({ file, name, description, altText });
|
|
115
|
+
resetForm();
|
|
116
|
+
} catch (err) {
|
|
117
|
+
error =
|
|
118
|
+
err instanceof Error
|
|
119
|
+
? err.message
|
|
120
|
+
: t(M['assets.create_asset_modal.upload_failed']);
|
|
121
|
+
} finally {
|
|
122
|
+
submitting = false;
|
|
123
|
+
}
|
|
107
124
|
}
|
|
108
125
|
|
|
109
126
|
function handleClose() {
|
|
@@ -116,6 +133,7 @@ function resetForm() {
|
|
|
116
133
|
name = '';
|
|
117
134
|
description = '';
|
|
118
135
|
altText = '';
|
|
136
|
+
error = '';
|
|
119
137
|
}
|
|
120
138
|
|
|
121
139
|
function formatSize(bytes: number): string {
|
|
@@ -196,15 +214,28 @@ const isLargeFile = $derived((file?.size ?? 0) > 2 * 1024 * 1024);
|
|
|
196
214
|
</div>
|
|
197
215
|
{/if}
|
|
198
216
|
|
|
217
|
+
{#if error}
|
|
218
|
+
<p class="create-error" role="alert" aria-live="assertive">{error}</p>
|
|
219
|
+
{/if}
|
|
220
|
+
|
|
199
221
|
{#snippet footer()}
|
|
200
|
-
<Button variant="ghost" size="sm" onclick={handleClose}>Cancel</Button>
|
|
201
|
-
<Button variant="primary" size="sm" onclick={handleSubmit} disabled={!file}>
|
|
202
|
-
Upload
|
|
222
|
+
<Button variant="ghost" size="sm" onclick={handleClose} disabled={submitting}>Cancel</Button>
|
|
223
|
+
<Button variant="primary" size="sm" onclick={handleSubmit} disabled={!file || submitting}>
|
|
224
|
+
{submitting ? 'Uploading…' : 'Upload'}
|
|
203
225
|
</Button>
|
|
204
226
|
{/snippet}
|
|
205
227
|
</Modal>
|
|
206
228
|
|
|
207
229
|
<style>
|
|
230
|
+
.create-error {
|
|
231
|
+
margin: var(--smrt-spacing-2, 0.5rem) 0 0;
|
|
232
|
+
padding: var(--smrt-spacing-2, 0.5rem) var(--smrt-spacing-3, 0.75rem);
|
|
233
|
+
border-radius: var(--smrt-radius-medium, 0.5rem);
|
|
234
|
+
background: var(--smrt-color-error-container, #fde8e6);
|
|
235
|
+
color: var(--smrt-color-on-error-container, #410002);
|
|
236
|
+
font-size: var(--smrt-typography-body-small-size, 0.8rem);
|
|
237
|
+
}
|
|
238
|
+
|
|
208
239
|
/* Dropzone */
|
|
209
240
|
.dropzone {
|
|
210
241
|
display: flex;
|
|
@@ -3,13 +3,14 @@ export interface CreateAssetModalProps {
|
|
|
3
3
|
open: boolean;
|
|
4
4
|
/** Pre-loaded file (from paste or drag) */
|
|
5
5
|
initialFile?: File | null;
|
|
6
|
-
/** Callback when creation is complete
|
|
6
|
+
/** Callback when creation is complete. May be async; a rejection keeps the
|
|
7
|
+
* form populated and surfaces an error instead of clearing silently. */
|
|
7
8
|
oncreate: (data: {
|
|
8
9
|
file: File;
|
|
9
10
|
name: string;
|
|
10
11
|
description: string;
|
|
11
12
|
altText: string;
|
|
12
|
-
}) => void
|
|
13
|
+
}) => void | Promise<void>;
|
|
13
14
|
/** Callback when modal is closed */
|
|
14
15
|
onclose: () => void;
|
|
15
16
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreateAssetModal.svelte.d.ts","sourceRoot":"","sources":["../../src/svelte/CreateAssetModal.svelte.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,qBAAqB;IACpC,gCAAgC;IAChC,IAAI,EAAE,OAAO,CAAC;IACd,2CAA2C;IAC3C,WAAW,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAC1B
|
|
1
|
+
{"version":3,"file":"CreateAssetModal.svelte.d.ts","sourceRoot":"","sources":["../../src/svelte/CreateAssetModal.svelte.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,qBAAqB;IACpC,gCAAgC;IAChC,IAAI,EAAE,OAAO,CAAC;IACd,2CAA2C;IAC3C,WAAW,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAC1B;4EACwE;IACxE,QAAQ,EAAE,CAAC,IAAI,EAAE;QACf,IAAI,EAAE,IAAI,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;KACjB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,oCAAoC;IACpC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAyMD,QAAA,MAAM,gBAAgB,2DAAwC,CAAC;AAC/D,KAAK,gBAAgB,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC5D,eAAe,gBAAgB,CAAC"}
|
package/dist/svelte/i18n.d.ts
CHANGED
|
@@ -52,6 +52,7 @@ export declare const M: {
|
|
|
52
52
|
readonly 'assets.create_asset_modal.upload_asset': "assets.create_asset_modal.upload_asset";
|
|
53
53
|
readonly 'assets.create_asset_modal.preview_alt': "assets.create_asset_modal.preview_alt";
|
|
54
54
|
readonly 'assets.create_asset_modal.remove_file': "assets.create_asset_modal.remove_file";
|
|
55
|
+
readonly 'assets.create_asset_modal.upload_failed': "assets.create_asset_modal.upload_failed";
|
|
55
56
|
readonly 'assets.asset_detail_preview.modal_preview': "assets.asset_detail_preview.modal_preview";
|
|
56
57
|
readonly 'assets.asset_detail_preview.description': "assets.asset_detail_preview.description";
|
|
57
58
|
readonly 'assets.asset_detail_preview.open_asset_detail': "assets.asset_detail_preview.open_asset_detail";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/svelte/i18n.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,CAAC
|
|
1
|
+
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/svelte/i18n.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+GZ,CAAC"}
|
package/dist/svelte/i18n.js
CHANGED
|
@@ -61,6 +61,7 @@ export const M = defineMessages({
|
|
|
61
61
|
'assets.create_asset_modal.upload_asset': 'Upload Asset',
|
|
62
62
|
'assets.create_asset_modal.preview_alt': 'Preview',
|
|
63
63
|
'assets.create_asset_modal.remove_file': 'Remove file',
|
|
64
|
+
'assets.create_asset_modal.upload_failed': 'Upload failed. Please try again.',
|
|
64
65
|
// AssetDetailPreview (playground)
|
|
65
66
|
'assets.asset_detail_preview.modal_preview': 'Modal Preview',
|
|
66
67
|
'assets.asset_detail_preview.description': 'Launch the asset detail dialog from inside the preview stage so the shared\n playground stays navigable.',
|
package/dist/svelte/types.d.ts
CHANGED
|
@@ -98,6 +98,28 @@ export interface AssetManagerProps {
|
|
|
98
98
|
initialView?: AssetViewMode;
|
|
99
99
|
/** Whether to show folder navigation */
|
|
100
100
|
showFolders?: boolean;
|
|
101
|
+
/**
|
|
102
|
+
* Persist an asset edit from the detail drawer. Consumer-supplied — when
|
|
103
|
+
* omitted, edits apply to local state only (preview/demo). Awaited; a
|
|
104
|
+
* rejection surfaces an error and skips the local update.
|
|
105
|
+
*/
|
|
106
|
+
onSave?: (asset: PersistedAsset, updates: Record<string, unknown>) => void | Promise<void>;
|
|
107
|
+
/**
|
|
108
|
+
* Persist a newly created asset. Consumer-supplied; awaited. A rejection
|
|
109
|
+
* propagates to the create modal, which surfaces it and keeps the form.
|
|
110
|
+
*/
|
|
111
|
+
onCreate?: (data: {
|
|
112
|
+
file: File;
|
|
113
|
+
name: string;
|
|
114
|
+
description: string;
|
|
115
|
+
altText: string;
|
|
116
|
+
}) => void | Promise<void>;
|
|
117
|
+
/**
|
|
118
|
+
* Persist asset deletion. Consumer-supplied — when omitted, deletion applies
|
|
119
|
+
* to local state only. Awaited; a rejection surfaces an error and skips the
|
|
120
|
+
* local removal.
|
|
121
|
+
*/
|
|
122
|
+
onDelete?: (assets: PersistedAsset[]) => void | Promise<void>;
|
|
101
123
|
}
|
|
102
124
|
/** Props for AssetToolbar */
|
|
103
125
|
export interface AssetToolbarProps {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/svelte/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/svelte/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@happyvertical/smrt-assets",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.31.1",
|
|
4
4
|
"description": "Asset management system with versioning, metadata, and AI-powered operations for SMRT framework",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -38,11 +38,11 @@
|
|
|
38
38
|
"@happyvertical/logger": "^0.74.7",
|
|
39
39
|
"@happyvertical/sql": "^0.74.7",
|
|
40
40
|
"@happyvertical/utils": "^0.74.7",
|
|
41
|
-
"@happyvertical/smrt-core": "0.
|
|
42
|
-
"@happyvertical/smrt-
|
|
43
|
-
"@happyvertical/smrt-
|
|
44
|
-
"@happyvertical/smrt-types": "0.
|
|
45
|
-
"@happyvertical/smrt-ui": "0.
|
|
41
|
+
"@happyvertical/smrt-core": "0.31.1",
|
|
42
|
+
"@happyvertical/smrt-tenancy": "0.31.1",
|
|
43
|
+
"@happyvertical/smrt-tags": "0.31.1",
|
|
44
|
+
"@happyvertical/smrt-types": "0.31.1",
|
|
45
|
+
"@happyvertical/smrt-ui": "0.31.1"
|
|
46
46
|
},
|
|
47
47
|
"peerDependencies": {
|
|
48
48
|
"svelte": "^5.18.0"
|
|
@@ -64,8 +64,8 @@
|
|
|
64
64
|
"typescript": "^5.9.3",
|
|
65
65
|
"vite": "^7.3.1",
|
|
66
66
|
"vitest": "^4.0.17",
|
|
67
|
-
"@happyvertical/smrt-
|
|
68
|
-
"@happyvertical/smrt-
|
|
67
|
+
"@happyvertical/smrt-vitest": "0.31.1",
|
|
68
|
+
"@happyvertical/smrt-playground": "0.31.1"
|
|
69
69
|
},
|
|
70
70
|
"keywords": [
|
|
71
71
|
"ai",
|