@happyvertical/smrt-assets 0.30.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.
Files changed (119) hide show
  1. package/AGENTS.md +78 -0
  2. package/CLAUDE.md +1 -0
  3. package/LICENSE +7 -0
  4. package/README.md +136 -0
  5. package/dist/__smrt-register__.d.ts +2 -0
  6. package/dist/__smrt-register__.d.ts.map +1 -0
  7. package/dist/asset-association.d.ts +16 -0
  8. package/dist/asset-association.d.ts.map +1 -0
  9. package/dist/asset-associations.d.ts +27 -0
  10. package/dist/asset-associations.d.ts.map +1 -0
  11. package/dist/asset-capabilities.d.ts +137 -0
  12. package/dist/asset-capabilities.d.ts.map +1 -0
  13. package/dist/asset-conventions.d.ts +76 -0
  14. package/dist/asset-conventions.d.ts.map +1 -0
  15. package/dist/asset-metafield.d.ts +27 -0
  16. package/dist/asset-metafield.d.ts.map +1 -0
  17. package/dist/asset-metafields.d.ts +27 -0
  18. package/dist/asset-metafields.d.ts.map +1 -0
  19. package/dist/asset-runtime.d.ts +218 -0
  20. package/dist/asset-runtime.d.ts.map +1 -0
  21. package/dist/asset-serving.d.ts +146 -0
  22. package/dist/asset-serving.d.ts.map +1 -0
  23. package/dist/asset-status.d.ts +15 -0
  24. package/dist/asset-status.d.ts.map +1 -0
  25. package/dist/asset-statuses.d.ts +25 -0
  26. package/dist/asset-statuses.d.ts.map +1 -0
  27. package/dist/asset-store.d.ts +200 -0
  28. package/dist/asset-store.d.ts.map +1 -0
  29. package/dist/asset-type.d.ts +15 -0
  30. package/dist/asset-type.d.ts.map +1 -0
  31. package/dist/asset-types.d.ts +28 -0
  32. package/dist/asset-types.d.ts.map +1 -0
  33. package/dist/asset.d.ts +158 -0
  34. package/dist/asset.d.ts.map +1 -0
  35. package/dist/assets.d.ts +125 -0
  36. package/dist/assets.d.ts.map +1 -0
  37. package/dist/folder.d.ts +16 -0
  38. package/dist/folder.d.ts.map +1 -0
  39. package/dist/folders.d.ts +45 -0
  40. package/dist/folders.d.ts.map +1 -0
  41. package/dist/index.d.ts +21 -0
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/index.js +2285 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/manifest.json +4079 -0
  46. package/dist/media-bundle-persistence.d.ts +99 -0
  47. package/dist/media-bundle-persistence.d.ts.map +1 -0
  48. package/dist/owned-asset-helpers.d.ts +20 -0
  49. package/dist/owned-asset-helpers.d.ts.map +1 -0
  50. package/dist/playground.d.ts +2 -0
  51. package/dist/playground.d.ts.map +1 -0
  52. package/dist/playground.js +127 -0
  53. package/dist/playground.js.map +1 -0
  54. package/dist/smrt-knowledge.json +1922 -0
  55. package/dist/svelte/ActionBar.svelte +203 -0
  56. package/dist/svelte/ActionBar.svelte.d.ts +5 -0
  57. package/dist/svelte/ActionBar.svelte.d.ts.map +1 -0
  58. package/dist/svelte/AssetDetail.svelte +521 -0
  59. package/dist/svelte/AssetDetail.svelte.d.ts +35 -0
  60. package/dist/svelte/AssetDetail.svelte.d.ts.map +1 -0
  61. package/dist/svelte/AssetGrid.svelte +351 -0
  62. package/dist/svelte/AssetGrid.svelte.d.ts +5 -0
  63. package/dist/svelte/AssetGrid.svelte.d.ts.map +1 -0
  64. package/dist/svelte/AssetList.svelte +436 -0
  65. package/dist/svelte/AssetList.svelte.d.ts +5 -0
  66. package/dist/svelte/AssetList.svelte.d.ts.map +1 -0
  67. package/dist/svelte/AssetManager.svelte +381 -0
  68. package/dist/svelte/AssetManager.svelte.d.ts +5 -0
  69. package/dist/svelte/AssetManager.svelte.d.ts.map +1 -0
  70. package/dist/svelte/AssetToolbar.svelte +388 -0
  71. package/dist/svelte/AssetToolbar.svelte.d.ts +5 -0
  72. package/dist/svelte/AssetToolbar.svelte.d.ts.map +1 -0
  73. package/dist/svelte/CreateAssetModal.svelte +373 -0
  74. package/dist/svelte/CreateAssetModal.svelte.d.ts +19 -0
  75. package/dist/svelte/CreateAssetModal.svelte.d.ts.map +1 -0
  76. package/dist/svelte/__tests__/ActionBar.test.js +72 -0
  77. package/dist/svelte/__tests__/AssetDetail.test.js +57 -0
  78. package/dist/svelte/__tests__/AssetGrid.test.js +69 -0
  79. package/dist/svelte/__tests__/AssetList.test.js +72 -0
  80. package/dist/svelte/__tests__/AssetManager.test.js +21 -0
  81. package/dist/svelte/__tests__/AssetManagerRoute.test.js +16 -0
  82. package/dist/svelte/__tests__/AssetToolbar.test.js +39 -0
  83. package/dist/svelte/__tests__/CreateAssetModal.test.js +42 -0
  84. package/dist/svelte/i18n.d.ts +76 -0
  85. package/dist/svelte/i18n.d.ts.map +1 -0
  86. package/dist/svelte/i18n.js +87 -0
  87. package/dist/svelte/index.d.ts +19 -0
  88. package/dist/svelte/index.d.ts.map +1 -0
  89. package/dist/svelte/index.js +30 -0
  90. package/dist/svelte/playground/AssetDetailPreview.svelte +131 -0
  91. package/dist/svelte/playground/AssetDetailPreview.svelte.d.ts +8 -0
  92. package/dist/svelte/playground/AssetDetailPreview.svelte.d.ts.map +1 -0
  93. package/dist/svelte/playground/CreateAssetModalPreview.svelte +151 -0
  94. package/dist/svelte/playground/CreateAssetModalPreview.svelte.d.ts +4 -0
  95. package/dist/svelte/playground/CreateAssetModalPreview.svelte.d.ts.map +1 -0
  96. package/dist/svelte/playground.d.ts +60 -0
  97. package/dist/svelte/playground.d.ts.map +1 -0
  98. package/dist/svelte/playground.js +93 -0
  99. package/dist/svelte/routes/AssetManagerRoute.svelte +209 -0
  100. package/dist/svelte/routes/AssetManagerRoute.svelte.d.ts +4 -0
  101. package/dist/svelte/routes/AssetManagerRoute.svelte.d.ts.map +1 -0
  102. package/dist/svelte/routes/index.d.ts +2 -0
  103. package/dist/svelte/routes/index.d.ts.map +1 -0
  104. package/dist/svelte/routes/index.js +1 -0
  105. package/dist/svelte/routes/shared.d.ts +25 -0
  106. package/dist/svelte/routes/shared.d.ts.map +1 -0
  107. package/dist/svelte/routes/shared.js +31 -0
  108. package/dist/svelte/types.d.ts +179 -0
  109. package/dist/svelte/types.d.ts.map +1 -0
  110. package/dist/svelte/types.js +6 -0
  111. package/dist/types.d.ts +80 -0
  112. package/dist/types.d.ts.map +1 -0
  113. package/dist/types.js +2 -0
  114. package/dist/types.js.map +1 -0
  115. package/dist/ui.d.ts +10 -0
  116. package/dist/ui.d.ts.map +1 -0
  117. package/dist/ui.js +85 -0
  118. package/dist/ui.js.map +1 -0
  119. package/package.json +102 -0
@@ -0,0 +1,99 @@
1
+ export type MediaSupportFileVisibility = 'visible' | 'hidden-retained' | 'drop-after-extract';
2
+ export interface MediaBundleFileDescriptor {
3
+ path: string;
4
+ relativePath?: string;
5
+ name?: string;
6
+ mimeType?: string;
7
+ sizeBytes?: number;
8
+ sha256?: string;
9
+ modifiedAt?: Date | string;
10
+ metadata?: Record<string, unknown>;
11
+ }
12
+ export interface MediaBundleGpsTrackPoint {
13
+ tSeconds: number;
14
+ recordedAt?: Date | string | null;
15
+ latitude: number;
16
+ longitude: number;
17
+ altitude?: number | null;
18
+ heading?: number | null;
19
+ speedMps?: number | null;
20
+ sourceFilePath?: string;
21
+ }
22
+ export interface MediaBundleNormalizedMetadata {
23
+ captureTime?: Date | string | null;
24
+ width?: number;
25
+ height?: number;
26
+ durationMs?: number;
27
+ mimeType?: string;
28
+ gpsTrack?: MediaBundleGpsTrackPoint[];
29
+ raw?: Record<string, unknown>;
30
+ private?: Record<string, unknown>;
31
+ [key: string]: unknown;
32
+ }
33
+ export interface MediaBundleSupportFileInspection {
34
+ file: MediaBundleFileDescriptor;
35
+ role: string;
36
+ relationship: string;
37
+ visibility?: MediaSupportFileVisibility;
38
+ metadata?: MediaBundleNormalizedMetadata;
39
+ }
40
+ export interface MediaBundleInspection {
41
+ handlerId: string;
42
+ handlerVersion: string;
43
+ formatFamily: string;
44
+ primary: MediaBundleFileDescriptor;
45
+ supportFiles: MediaBundleSupportFileInspection[];
46
+ metadata: MediaBundleNormalizedMetadata;
47
+ capabilities: string[];
48
+ warnings: string[];
49
+ errors: string[];
50
+ raw?: Record<string, unknown>;
51
+ }
52
+ export type MediaBundleInspectionLike = MediaBundleInspection;
53
+ export interface PersistMediaBundleAssetInput {
54
+ file: MediaBundleFileDescriptor;
55
+ role: 'primary' | 'support';
56
+ typeSlug?: string;
57
+ parentAssetId?: string | null;
58
+ relationship?: string;
59
+ visibility?: MediaSupportFileVisibility;
60
+ metadata: MediaBundleNormalizedMetadata;
61
+ inspection: MediaBundleInspection;
62
+ }
63
+ export interface PersistMediaBundleAssociationInput {
64
+ primaryAssetId: string;
65
+ supportAssetId: string;
66
+ relationship: string;
67
+ visibility: MediaSupportFileVisibility;
68
+ metadata?: MediaBundleNormalizedMetadata;
69
+ }
70
+ export interface PersistMediaBundleMetadataArtifactInput {
71
+ primaryAssetId: string;
72
+ inspection: MediaBundleInspection;
73
+ }
74
+ export interface SmrtMediaBundlePersistenceAdapter {
75
+ upsertAsset(input: PersistMediaBundleAssetInput): Promise<{
76
+ id: string;
77
+ }>;
78
+ associateSupportFile?(input: PersistMediaBundleAssociationInput): Promise<void>;
79
+ writeMetadataArtifact?(input: PersistMediaBundleMetadataArtifactInput): Promise<{
80
+ id: string;
81
+ } | null | undefined>;
82
+ replaceGpsTrack?(primaryAssetId: string, points: MediaBundleGpsTrackPoint[]): Promise<number>;
83
+ }
84
+ export interface PersistMediaBundleInspectionOptions {
85
+ primaryTypeSlug?: string;
86
+ supportTypeSlug?: string;
87
+ supportVisibility?: MediaSupportFileVisibility;
88
+ writeGpsTrack?: boolean;
89
+ writeMetadataArtifact?: boolean;
90
+ }
91
+ export interface PersistMediaBundleInspectionResult {
92
+ primaryAssetId: string;
93
+ supportAssetIds: string[];
94
+ metadataArtifactId?: string;
95
+ gpsTrackPointCount: number;
96
+ warnings: string[];
97
+ }
98
+ export declare function persistMediaBundleInspection(adapter: SmrtMediaBundlePersistenceAdapter, inspection: MediaBundleInspection, options?: PersistMediaBundleInspectionOptions): Promise<PersistMediaBundleInspectionResult>;
99
+ //# sourceMappingURL=media-bundle-persistence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-bundle-persistence.d.ts","sourceRoot":"","sources":["../src/media-bundle-persistence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { SmrtCollectionOptions } from '@happyvertical/smrt-core';
2
+ import { Asset } from './asset';
3
+ export declare const OWNED_ASSET_RELATIONSHIP_PATTERN: RegExp;
4
+ export interface AssetOwnerRecord {
5
+ getAssets(relationship?: string): Promise<Asset[]>;
6
+ addAsset(asset: Asset, relationship?: string, sortOrder?: number): Promise<void>;
7
+ removeAsset(assetId: string, relationship?: string): Promise<void>;
8
+ }
9
+ export interface AssetOwnerCollection<OwnerType extends AssetOwnerRecord> {
10
+ get(where: {
11
+ id: string;
12
+ }): Promise<OwnerType | null>;
13
+ }
14
+ export declare function assertValidOwnedAssetRelationship(relationship: string): void;
15
+ export declare function assertValidOwnedAssetSortOrder(sortOrder: number): void;
16
+ export declare function resolveOwnedAssetsById(db: SmrtCollectionOptions['db'], assetIds: string[], tenantId?: string | null): Promise<Asset[]>;
17
+ export declare function getOwnedAssetsFromCollection<OwnerType extends AssetOwnerRecord>(collection: AssetOwnerCollection<OwnerType>, ownerId: string, relationship?: string): Promise<Asset[]>;
18
+ export declare function addOwnedAssetFromCollection<OwnerType extends AssetOwnerRecord>(collection: AssetOwnerCollection<OwnerType>, ownerType: string, ownerId: string, asset: Asset, relationship?: string, sortOrder?: number): Promise<void>;
19
+ export declare function removeOwnedAssetFromCollection<OwnerType extends AssetOwnerRecord>(collection: AssetOwnerCollection<OwnerType>, ownerType: string, ownerId: string, assetId: string, relationship?: string): Promise<void>;
20
+ //# sourceMappingURL=owned-asset-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"owned-asset-helpers.d.ts","sourceRoot":"","sources":["../src/owned-asset-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEtE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAGrC,eAAO,MAAM,gCAAgC,QAA6B,CAAC;AAE3E,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IACnD,QAAQ,CACN,KAAK,EAAE,KAAK,EACZ,YAAY,CAAC,EAAE,MAAM,EACrB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACpE;AAED,MAAM,WAAW,oBAAoB,CAAC,SAAS,SAAS,gBAAgB;IACtE,GAAG,CAAC,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;CACvD;AAED,wBAAgB,iCAAiC,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAM5E;AAED,wBAAgB,8BAA8B,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAMtE;AAED,wBAAsB,sBAAsB,CAC1C,EAAE,EAAE,qBAAqB,CAAC,IAAI,CAAC,EAC/B,QAAQ,EAAE,MAAM,EAAE,EAClB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GACvB,OAAO,CAAC,KAAK,EAAE,CAAC,CAuBlB;AASD,wBAAsB,4BAA4B,CAChD,SAAS,SAAS,gBAAgB,EAElC,UAAU,EAAE,oBAAoB,CAAC,SAAS,CAAC,EAC3C,OAAO,EAAE,MAAM,EACf,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,KAAK,EAAE,CAAC,CAOlB;AAED,wBAAsB,2BAA2B,CAC/C,SAAS,SAAS,gBAAgB,EAElC,UAAU,EAAE,oBAAoB,CAAC,SAAS,CAAC,EAC3C,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,KAAK,EACZ,YAAY,SAAe,EAC3B,SAAS,SAAI,GACZ,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,wBAAsB,8BAA8B,CAClD,SAAS,SAAS,gBAAgB,EAElC,UAAU,EAAE,oBAAoB,CAAC,SAAS,CAAC,EAC3C,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC,CAOf"}
@@ -0,0 +1,2 @@
1
+ export { default } from './svelte/playground.js';
2
+ //# sourceMappingURL=playground.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playground.d.ts","sourceRoot":"","sources":["../src/playground.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,127 @@
1
+ const ASSETS_ROUTE_IDS = {
2
+ manager: "@happyvertical/smrt-assets:manager"
3
+ };
4
+ const ASSETS_ROUTE_META = {
5
+ manager: {
6
+ id: ASSETS_ROUTE_IDS.manager,
7
+ title: "Asset Manager",
8
+ description: "Manage uploads, browse the asset library, and review selection state from the package-owned asset management route.",
9
+ defaultPath: "/assets",
10
+ loadKind: void 0,
11
+ nav: {
12
+ label: "Assets",
13
+ description: "Manage uploaded media and reusable files.",
14
+ icon: "folder-image",
15
+ order: 10,
16
+ group: "content"
17
+ }
18
+ }
19
+ };
20
+ function createAssetsRouteNavigation(mounts = {}) {
21
+ return [ASSETS_ROUTE_META.manager].map((route) => ({
22
+ routeId: route.id,
23
+ href: mounts[route.id] ?? route.defaultPath,
24
+ label: route.nav?.label ?? route.title,
25
+ description: route.nav?.description ?? route.description,
26
+ icon: route.nav?.icon,
27
+ order: route.nav?.order,
28
+ group: route.nav?.group
29
+ }));
30
+ }
31
+ createAssetsRouteNavigation();
32
+ function createPreviewAssetUri(label, accent) {
33
+ const svg = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 800">
34
+ <defs>
35
+ <linearGradient id="bg" x1="0%" x2="100%" y1="0%" y2="100%">
36
+ <stop offset="0%" stop-color="${accent}" />
37
+ <stop offset="100%" stop-color="#0f172a" />
38
+ </linearGradient>
39
+ </defs>
40
+ <rect width="1200" height="800" fill="url(#bg)" rx="48" />
41
+ <circle cx="260" cy="220" r="110" fill="rgba(255,255,255,0.16)" />
42
+ <path d="M120 620L430 330l210 190 150-120 290 220H120z" fill="rgba(255,255,255,0.22)" />
43
+ <text x="96" y="126" fill="#e2e8f0" font-size="64" font-family="Arial, sans-serif" font-weight="700">${label}</text>
44
+ <text x="96" y="690" fill="#cbd5e1" font-size="34" font-family="Arial, sans-serif">SMRT Assets preview</text>
45
+ </svg>`;
46
+ return `data:image/svg+xml;charset=UTF-8,${encodeURIComponent(svg)}`;
47
+ }
48
+ const sampleAssets = [
49
+ {
50
+ id: "asset-harbor-map",
51
+ name: "Harbor Map",
52
+ description: "Annotated port operations map for logistics planning.",
53
+ sourceUri: createPreviewAssetUri("Harbor Map", "#0891b2"),
54
+ mimeType: "image/png",
55
+ createdAt: "2026-03-11T09:15:00.000Z",
56
+ updatedAt: "2026-03-18T15:44:00.000Z",
57
+ statusSlug: "active",
58
+ alt: "Stylized harbor map with highlighted shipping lanes."
59
+ },
60
+ {
61
+ id: "asset-spring-lookbook",
62
+ name: "Spring Lookbook",
63
+ description: "Photography sheet prepared for the seasonal launch.",
64
+ sourceUri: createPreviewAssetUri("Lookbook", "#7c3aed"),
65
+ mimeType: "image/jpeg",
66
+ createdAt: "2026-03-07T13:22:00.000Z",
67
+ updatedAt: "2026-03-19T08:05:00.000Z",
68
+ statusSlug: "draft",
69
+ alt: ""
70
+ },
71
+ {
72
+ id: "asset-style-guide",
73
+ name: "Brand Style Guide",
74
+ description: "Reference PDF for typography, voice, and image treatment.",
75
+ sourceUri: "",
76
+ mimeType: "application/pdf",
77
+ createdAt: "2026-03-01T18:00:00.000Z",
78
+ updatedAt: "2026-03-10T18:45:00.000Z",
79
+ statusSlug: "published"
80
+ }
81
+ ];
82
+ const loadAssetGrid = () => import("./svelte/AssetGrid.svelte");
83
+ const loadAssetManagerRoute = () => import("./svelte/routes/AssetManagerRoute.svelte");
84
+ const playground = {
85
+ packageName: "@happyvertical/smrt-assets",
86
+ displayName: "Assets",
87
+ description: ASSETS_ROUTE_META.manager.description,
88
+ entries: [
89
+ {
90
+ id: "asset-manager-route",
91
+ title: "Asset Manager Route",
92
+ description: "Package-owned route surface for browsing, selecting, and reviewing assets.",
93
+ loadComponent: loadAssetManagerRoute,
94
+ order: 1,
95
+ tags: ["route", "assets", "admin"],
96
+ modes: {
97
+ mock: {
98
+ label: "Mock"
99
+ }
100
+ }
101
+ },
102
+ {
103
+ id: "asset-grid",
104
+ title: "Asset Grid",
105
+ description: "Thumbnail grid preview showing selection state and missing-alt warnings.",
106
+ loadComponent: loadAssetGrid,
107
+ order: 2,
108
+ tags: ["grid", "assets", "media"],
109
+ props: {
110
+ assets: sampleAssets,
111
+ selectedIds: /* @__PURE__ */ new Set(["asset-spring-lookbook"]),
112
+ loading: false,
113
+ onSelectionChange: () => void 0,
114
+ onAssetClick: () => void 0
115
+ },
116
+ modes: {
117
+ mock: {
118
+ label: "Mock"
119
+ }
120
+ }
121
+ }
122
+ ]
123
+ };
124
+ export {
125
+ playground as default
126
+ };
127
+ //# sourceMappingURL=playground.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playground.js","sources":["../src/svelte/routes/shared.ts","../src/svelte/playground.ts"],"sourcesContent":["import type {\n SmrtRouteDefinition,\n SmrtRouteNavigationItem,\n} from '@happyvertical/smrt-types';\n\nexport const ASSETS_ROUTE_IDS = {\n manager: '@happyvertical/smrt-assets:manager',\n} as const;\n\nexport type AssetsRouteId =\n (typeof ASSETS_ROUTE_IDS)[keyof typeof ASSETS_ROUTE_IDS];\n\nexport type AssetsRouteNavigationItem = SmrtRouteNavigationItem;\n\nexport const ASSETS_ROUTE_META = {\n manager: {\n id: ASSETS_ROUTE_IDS.manager,\n title: 'Asset Manager',\n description:\n 'Manage uploads, browse the asset library, and review selection state from the package-owned asset management route.',\n defaultPath: '/assets',\n loadKind: undefined,\n nav: {\n label: 'Assets',\n description: 'Manage uploaded media and reusable files.',\n icon: 'folder-image',\n order: 10,\n group: 'content',\n },\n } satisfies Omit<SmrtRouteDefinition, 'component'>,\n} as const;\n\nexport function createAssetsRouteNavigation(\n mounts: Partial<Record<AssetsRouteId, string>> = {},\n): AssetsRouteNavigationItem[] {\n return [ASSETS_ROUTE_META.manager].map((route) => ({\n routeId: route.id,\n href: mounts[route.id] ?? route.defaultPath,\n label: route.nav?.label ?? route.title,\n description: route.nav?.description ?? route.description,\n icon: route.nav?.icon,\n order: route.nav?.order,\n group: route.nav?.group,\n }));\n}\n\nexport const ASSETS_DEFAULT_ROUTE_NAVIGATION = createAssetsRouteNavigation();\n","import { ASSETS_ROUTE_META } from './routes/shared.js';\n\nfunction createPreviewAssetUri(label: string, accent: string): string {\n const svg = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1200 800\">\n <defs>\n <linearGradient id=\"bg\" x1=\"0%\" x2=\"100%\" y1=\"0%\" y2=\"100%\">\n <stop offset=\"0%\" stop-color=\"${accent}\" />\n <stop offset=\"100%\" stop-color=\"#0f172a\" />\n </linearGradient>\n </defs>\n <rect width=\"1200\" height=\"800\" fill=\"url(#bg)\" rx=\"48\" />\n <circle cx=\"260\" cy=\"220\" r=\"110\" fill=\"rgba(255,255,255,0.16)\" />\n <path d=\"M120 620L430 330l210 190 150-120 290 220H120z\" fill=\"rgba(255,255,255,0.22)\" />\n <text x=\"96\" y=\"126\" fill=\"#e2e8f0\" font-size=\"64\" font-family=\"Arial, sans-serif\" font-weight=\"700\">${label}</text>\n <text x=\"96\" y=\"690\" fill=\"#cbd5e1\" font-size=\"34\" font-family=\"Arial, sans-serif\">SMRT Assets preview</text>\n </svg>`;\n\n return `data:image/svg+xml;charset=UTF-8,${encodeURIComponent(svg)}`;\n}\n\nconst sampleAssets = [\n {\n id: 'asset-harbor-map',\n name: 'Harbor Map',\n description: 'Annotated port operations map for logistics planning.',\n sourceUri: createPreviewAssetUri('Harbor Map', '#0891b2'),\n mimeType: 'image/png',\n createdAt: '2026-03-11T09:15:00.000Z',\n updatedAt: '2026-03-18T15:44:00.000Z',\n statusSlug: 'active',\n alt: 'Stylized harbor map with highlighted shipping lanes.',\n },\n {\n id: 'asset-spring-lookbook',\n name: 'Spring Lookbook',\n description: 'Photography sheet prepared for the seasonal launch.',\n sourceUri: createPreviewAssetUri('Lookbook', '#7c3aed'),\n mimeType: 'image/jpeg',\n createdAt: '2026-03-07T13:22:00.000Z',\n updatedAt: '2026-03-19T08:05:00.000Z',\n statusSlug: 'draft',\n alt: '',\n },\n {\n id: 'asset-style-guide',\n name: 'Brand Style Guide',\n description: 'Reference PDF for typography, voice, and image treatment.',\n sourceUri: '',\n mimeType: 'application/pdf',\n createdAt: '2026-03-01T18:00:00.000Z',\n updatedAt: '2026-03-10T18:45:00.000Z',\n statusSlug: 'published',\n },\n];\n\nconst loadAssetGrid = () => import('./AssetGrid.svelte');\nconst loadAssetManagerRoute = () => import('./routes/AssetManagerRoute.svelte');\n\nexport default {\n packageName: '@happyvertical/smrt-assets',\n displayName: 'Assets',\n description: ASSETS_ROUTE_META.manager.description,\n entries: [\n {\n id: 'asset-manager-route',\n title: 'Asset Manager Route',\n description:\n 'Package-owned route surface for browsing, selecting, and reviewing assets.',\n loadComponent: loadAssetManagerRoute,\n order: 1,\n tags: ['route', 'assets', 'admin'],\n modes: {\n mock: {\n label: 'Mock',\n },\n },\n },\n {\n id: 'asset-grid',\n title: 'Asset Grid',\n description:\n 'Thumbnail grid preview showing selection state and missing-alt warnings.',\n loadComponent: loadAssetGrid,\n order: 2,\n tags: ['grid', 'assets', 'media'],\n props: {\n assets: sampleAssets,\n selectedIds: new Set(['asset-spring-lookbook']),\n loading: false,\n onSelectionChange: () => undefined,\n onAssetClick: () => undefined,\n },\n modes: {\n mock: {\n label: 'Mock',\n },\n },\n },\n ],\n};\n"],"names":[],"mappings":"AAKO,MAAM,mBAAmB;AAAA,EAC9B,SAAS;AACX;AAOO,MAAM,oBAAoB;AAAA,EAC/B,SAAS;AAAA,IACP,IAAI,iBAAiB;AAAA,IACrB,OAAO;AAAA,IACP,aACE;AAAA,IACF,aAAa;AAAA,IACb,UAAU;AAAA,IACV,KAAK;AAAA,MACH,OAAO;AAAA,MACP,aAAa;AAAA,MACb,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,IAAA;AAAA,EACT;AAEJ;AAEO,SAAS,4BACd,SAAiD,IACpB;AAC7B,SAAO,CAAC,kBAAkB,OAAO,EAAE,IAAI,CAAC,WAAW;AAAA,IACjD,SAAS,MAAM;AAAA,IACf,MAAM,OAAO,MAAM,EAAE,KAAK,MAAM;AAAA,IAChC,OAAO,MAAM,KAAK,SAAS,MAAM;AAAA,IACjC,aAAa,MAAM,KAAK,eAAe,MAAM;AAAA,IAC7C,MAAM,MAAM,KAAK;AAAA,IACjB,OAAO,MAAM,KAAK;AAAA,IAClB,OAAO,MAAM,KAAK;AAAA,EAAA,EAClB;AACJ;AAE+C,4BAAA;AC5C/C,SAAS,sBAAsB,OAAe,QAAwB;AACpE,QAAM,MAAM;AAAA;AAAA;AAAA,wCAG0B,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2GAO6D,KAAK;AAAA;AAAA;AAI9G,SAAO,oCAAoC,mBAAmB,GAAG,CAAC;AACpE;AAEA,MAAM,eAAe;AAAA,EACnB;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,IACb,WAAW,sBAAsB,cAAc,SAAS;AAAA,IACxD,UAAU;AAAA,IACV,WAAW;AAAA,IACX,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,KAAK;AAAA,EAAA;AAAA,EAEP;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,IACb,WAAW,sBAAsB,YAAY,SAAS;AAAA,IACtD,UAAU;AAAA,IACV,WAAW;AAAA,IACX,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,KAAK;AAAA,EAAA;AAAA,EAEP;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,IACb,WAAW;AAAA,IACX,UAAU;AAAA,IACV,WAAW;AAAA,IACX,WAAW;AAAA,IACX,YAAY;AAAA,EAAA;AAEhB;AAEA,MAAM,gBAAgB,MAAM,OAAO,2BAAoB;AACvD,MAAM,wBAAwB,MAAM,OAAO,0CAAmC;AAE9E,MAAA,aAAe;AAAA,EACb,aAAa;AAAA,EACb,aAAa;AAAA,EACb,aAAa,kBAAkB,QAAQ;AAAA,EACvC,SAAS;AAAA,IACP;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,aACE;AAAA,MACF,eAAe;AAAA,MACf,OAAO;AAAA,MACP,MAAM,CAAC,SAAS,UAAU,OAAO;AAAA,MACjC,OAAO;AAAA,QACL,MAAM;AAAA,UACJ,OAAO;AAAA,QAAA;AAAA,MACT;AAAA,IACF;AAAA,IAEF;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,aACE;AAAA,MACF,eAAe;AAAA,MACf,OAAO;AAAA,MACP,MAAM,CAAC,QAAQ,UAAU,OAAO;AAAA,MAChC,OAAO;AAAA,QACL,QAAQ;AAAA,QACR,aAAa,oBAAI,IAAI,CAAC,uBAAuB,CAAC;AAAA,QAC9C,SAAS;AAAA,QACT,mBAAmB,MAAM;AAAA,QACzB,cAAc,MAAM;AAAA,MAAA;AAAA,MAEtB,OAAO;AAAA,QACL,MAAM;AAAA,UACJ,OAAO;AAAA,QAAA;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAEJ;"}