@happyvertical/smrt-content 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 (291) hide show
  1. package/AGENTS.md +194 -0
  2. package/CLAUDE.md +1 -0
  3. package/LICENSE +7 -0
  4. package/README.md +634 -0
  5. package/dist/__smrt-register__.d.ts +2 -0
  6. package/dist/__smrt-register__.d.ts.map +1 -0
  7. package/dist/asset-associable.d.ts +115 -0
  8. package/dist/asset-associable.d.ts.map +1 -0
  9. package/dist/body-format.d.ts +29 -0
  10. package/dist/body-format.d.ts.map +1 -0
  11. package/dist/body-format.js +604 -0
  12. package/dist/body-format.js.map +1 -0
  13. package/dist/content-asset.d.ts +17 -0
  14. package/dist/content-asset.d.ts.map +1 -0
  15. package/dist/content-assets.d.ts +10 -0
  16. package/dist/content-assets.d.ts.map +1 -0
  17. package/dist/content-chat-handlers.d.ts +115 -0
  18. package/dist/content-chat-handlers.d.ts.map +1 -0
  19. package/dist/content-chat-prompts.d.ts +3 -0
  20. package/dist/content-chat-prompts.d.ts.map +1 -0
  21. package/dist/content-chat-session.d.ts +26 -0
  22. package/dist/content-chat-session.d.ts.map +1 -0
  23. package/dist/content-contribution-attachment.d.ts +42 -0
  24. package/dist/content-contribution-attachment.d.ts.map +1 -0
  25. package/dist/content-contribution-attachments.d.ts +8 -0
  26. package/dist/content-contribution-attachments.d.ts.map +1 -0
  27. package/dist/content-contribution-config.d.ts +84 -0
  28. package/dist/content-contribution-config.d.ts.map +1 -0
  29. package/dist/content-contribution-revision.d.ts +38 -0
  30. package/dist/content-contribution-revision.d.ts.map +1 -0
  31. package/dist/content-contribution-revisions.d.ts +8 -0
  32. package/dist/content-contribution-revisions.d.ts.map +1 -0
  33. package/dist/content-contribution-type.d.ts +51 -0
  34. package/dist/content-contribution-type.d.ts.map +1 -0
  35. package/dist/content-contribution-types.d.ts +7 -0
  36. package/dist/content-contribution-types.d.ts.map +1 -0
  37. package/dist/content-contribution.d.ts +161 -0
  38. package/dist/content-contribution.d.ts.map +1 -0
  39. package/dist/content-contributions.d.ts +53 -0
  40. package/dist/content-contributions.d.ts.map +1 -0
  41. package/dist/content-contributor.d.ts +30 -0
  42. package/dist/content-contributor.d.ts.map +1 -0
  43. package/dist/content-contributors.d.ts +13 -0
  44. package/dist/content-contributors.d.ts.map +1 -0
  45. package/dist/content-correction.d.ts +39 -0
  46. package/dist/content-correction.d.ts.map +1 -0
  47. package/dist/content-corrections.d.ts +9 -0
  48. package/dist/content-corrections.d.ts.map +1 -0
  49. package/dist/content-editor-assistant.d.ts +68 -0
  50. package/dist/content-editor-assistant.d.ts.map +1 -0
  51. package/dist/content-editor-assistant.js +97 -0
  52. package/dist/content-editor-assistant.js.map +1 -0
  53. package/dist/content-feed-parser.d.ts +19 -0
  54. package/dist/content-feed-parser.d.ts.map +1 -0
  55. package/dist/content-feed-source.d.ts +52 -0
  56. package/dist/content-feed-source.d.ts.map +1 -0
  57. package/dist/content-feed-sources.d.ts +11 -0
  58. package/dist/content-feed-sources.d.ts.map +1 -0
  59. package/dist/content-feed-sync.d.ts +23 -0
  60. package/dist/content-feed-sync.d.ts.map +1 -0
  61. package/dist/content-governance-assignment.d.ts +42 -0
  62. package/dist/content-governance-assignment.d.ts.map +1 -0
  63. package/dist/content-governance-assignments.d.ts +11 -0
  64. package/dist/content-governance-assignments.d.ts.map +1 -0
  65. package/dist/content-governance-policies.d.ts +7 -0
  66. package/dist/content-governance-policies.d.ts.map +1 -0
  67. package/dist/content-governance-policy.d.ts +29 -0
  68. package/dist/content-governance-policy.d.ts.map +1 -0
  69. package/dist/content-governance-profile.d.ts +31 -0
  70. package/dist/content-governance-profile.d.ts.map +1 -0
  71. package/dist/content-governance-profiles.d.ts +7 -0
  72. package/dist/content-governance-profiles.d.ts.map +1 -0
  73. package/dist/content-governance.d.ts +188 -0
  74. package/dist/content-governance.d.ts.map +1 -0
  75. package/dist/content-prompts.d.ts +10 -0
  76. package/dist/content-prompts.d.ts.map +1 -0
  77. package/dist/content-reference.d.ts +17 -0
  78. package/dist/content-reference.d.ts.map +1 -0
  79. package/dist/content-references.d.ts +55 -0
  80. package/dist/content-references.d.ts.map +1 -0
  81. package/dist/content-review.d.ts +34 -0
  82. package/dist/content-review.d.ts.map +1 -0
  83. package/dist/content-reviews.d.ts +21 -0
  84. package/dist/content-reviews.d.ts.map +1 -0
  85. package/dist/content-transparency.d.ts +72 -0
  86. package/dist/content-transparency.d.ts.map +1 -0
  87. package/dist/content-types.d.ts +51 -0
  88. package/dist/content-types.d.ts.map +1 -0
  89. package/dist/content-version.d.ts +38 -0
  90. package/dist/content-version.d.ts.map +1 -0
  91. package/dist/content-versions.d.ts +16 -0
  92. package/dist/content-versions.d.ts.map +1 -0
  93. package/dist/content.d.ts +736 -0
  94. package/dist/content.d.ts.map +1 -0
  95. package/dist/contents.d.ts +292 -0
  96. package/dist/contents.d.ts.map +1 -0
  97. package/dist/database-utils.d.ts +3 -0
  98. package/dist/database-utils.d.ts.map +1 -0
  99. package/dist/index.d.ts +78 -0
  100. package/dist/index.d.ts.map +1 -0
  101. package/dist/index.js +11602 -0
  102. package/dist/index.js.map +1 -0
  103. package/dist/manifest.json +12308 -0
  104. package/dist/mock-smrt-client.d.ts +493 -0
  105. package/dist/mock-smrt-client.d.ts.map +1 -0
  106. package/dist/mock-smrt-client.js +390 -0
  107. package/dist/mock-smrt-client.js.map +1 -0
  108. package/dist/playground.d.ts +2 -0
  109. package/dist/playground.d.ts.map +1 -0
  110. package/dist/playground.js +454 -0
  111. package/dist/playground.js.map +1 -0
  112. package/dist/publish-readiness.d.ts +30 -0
  113. package/dist/publish-readiness.d.ts.map +1 -0
  114. package/dist/publish-readiness.js +74 -0
  115. package/dist/publish-readiness.js.map +1 -0
  116. package/dist/safe-remote-url.d.ts +52 -0
  117. package/dist/safe-remote-url.d.ts.map +1 -0
  118. package/dist/serialization.d.ts +78 -0
  119. package/dist/serialization.d.ts.map +1 -0
  120. package/dist/smrt-knowledge.json +6130 -0
  121. package/dist/svelte/api.d.ts +3 -0
  122. package/dist/svelte/api.d.ts.map +1 -0
  123. package/dist/svelte/api.js +10 -0
  124. package/dist/svelte/components/ArticleCard.svelte +159 -0
  125. package/dist/svelte/components/ArticleCard.svelte.d.ts +17 -0
  126. package/dist/svelte/components/ArticleCard.svelte.d.ts.map +1 -0
  127. package/dist/svelte/components/ArticleList.svelte +75 -0
  128. package/dist/svelte/components/ArticleList.svelte.d.ts +21 -0
  129. package/dist/svelte/components/ArticleList.svelte.d.ts.map +1 -0
  130. package/dist/svelte/components/ContentAgentChat.svelte +652 -0
  131. package/dist/svelte/components/ContentAgentChat.svelte.d.ts +17 -0
  132. package/dist/svelte/components/ContentAgentChat.svelte.d.ts.map +1 -0
  133. package/dist/svelte/components/ContentBodyEditor.svelte +1446 -0
  134. package/dist/svelte/components/ContentBodyEditor.svelte.d.ts +25 -0
  135. package/dist/svelte/components/ContentBodyEditor.svelte.d.ts.map +1 -0
  136. package/dist/svelte/components/ContentBodyRenderer.svelte +152 -0
  137. package/dist/svelte/components/ContentBodyRenderer.svelte.d.ts +10 -0
  138. package/dist/svelte/components/ContentBodyRenderer.svelte.d.ts.map +1 -0
  139. package/dist/svelte/components/ContentClaimAuditTool.svelte +441 -0
  140. package/dist/svelte/components/ContentClaimAuditTool.svelte.d.ts +12 -0
  141. package/dist/svelte/components/ContentClaimAuditTool.svelte.d.ts.map +1 -0
  142. package/dist/svelte/components/ContentContributionForm.svelte +226 -0
  143. package/dist/svelte/components/ContentContributionForm.svelte.d.ts +23 -0
  144. package/dist/svelte/components/ContentContributionForm.svelte.d.ts.map +1 -0
  145. package/dist/svelte/components/ContentContributionInbox.svelte +322 -0
  146. package/dist/svelte/components/ContentContributionInbox.svelte.d.ts +22 -0
  147. package/dist/svelte/components/ContentContributionInbox.svelte.d.ts.map +1 -0
  148. package/dist/svelte/components/ContentContributionPortal.svelte +182 -0
  149. package/dist/svelte/components/ContentContributionPortal.svelte.d.ts +12 -0
  150. package/dist/svelte/components/ContentContributionPortal.svelte.d.ts.map +1 -0
  151. package/dist/svelte/components/ContentContributionTypeManager.svelte +281 -0
  152. package/dist/svelte/components/ContentContributionTypeManager.svelte.d.ts +10 -0
  153. package/dist/svelte/components/ContentContributionTypeManager.svelte.d.ts.map +1 -0
  154. package/dist/svelte/components/ContentContributorManager.svelte +140 -0
  155. package/dist/svelte/components/ContentContributorManager.svelte.d.ts +10 -0
  156. package/dist/svelte/components/ContentContributorManager.svelte.d.ts.map +1 -0
  157. package/dist/svelte/components/ContentCorrectionsTool.svelte +361 -0
  158. package/dist/svelte/components/ContentCorrectionsTool.svelte.d.ts +11 -0
  159. package/dist/svelte/components/ContentCorrectionsTool.svelte.d.ts.map +1 -0
  160. package/dist/svelte/components/ContentEditor.svelte +2166 -0
  161. package/dist/svelte/components/ContentEditor.svelte.d.ts +26 -0
  162. package/dist/svelte/components/ContentEditor.svelte.d.ts.map +1 -0
  163. package/dist/svelte/components/ContentGovernanceAssignmentEditor.svelte +199 -0
  164. package/dist/svelte/components/ContentGovernanceAssignmentEditor.svelte.d.ts +11 -0
  165. package/dist/svelte/components/ContentGovernanceAssignmentEditor.svelte.d.ts.map +1 -0
  166. package/dist/svelte/components/ContentGovernanceManager.svelte +340 -0
  167. package/dist/svelte/components/ContentGovernanceManager.svelte.d.ts +11 -0
  168. package/dist/svelte/components/ContentGovernanceManager.svelte.d.ts.map +1 -0
  169. package/dist/svelte/components/ContentGovernancePanel.svelte +2244 -0
  170. package/dist/svelte/components/ContentGovernancePanel.svelte.d.ts +26 -0
  171. package/dist/svelte/components/ContentGovernancePanel.svelte.d.ts.map +1 -0
  172. package/dist/svelte/components/ContentGovernancePolicyEditor.svelte +110 -0
  173. package/dist/svelte/components/ContentGovernancePolicyEditor.svelte.d.ts +10 -0
  174. package/dist/svelte/components/ContentGovernancePolicyEditor.svelte.d.ts.map +1 -0
  175. package/dist/svelte/components/ContentGovernanceProfileEditor.svelte +185 -0
  176. package/dist/svelte/components/ContentGovernanceProfileEditor.svelte.d.ts +11 -0
  177. package/dist/svelte/components/ContentGovernanceProfileEditor.svelte.d.ts.map +1 -0
  178. package/dist/svelte/components/ContentGovernanceTool.svelte +56 -0
  179. package/dist/svelte/components/ContentGovernanceTool.svelte.d.ts +13 -0
  180. package/dist/svelte/components/ContentGovernanceTool.svelte.d.ts.map +1 -0
  181. package/dist/svelte/components/ContentImageBrowser.svelte +243 -0
  182. package/dist/svelte/components/ContentImageBrowser.svelte.d.ts +18 -0
  183. package/dist/svelte/components/ContentImageBrowser.svelte.d.ts.map +1 -0
  184. package/dist/svelte/components/ContentImageChooser.svelte +134 -0
  185. package/dist/svelte/components/ContentImageChooser.svelte.d.ts +11 -0
  186. package/dist/svelte/components/ContentImageChooser.svelte.d.ts.map +1 -0
  187. package/dist/svelte/components/ContentList.svelte +906 -0
  188. package/dist/svelte/components/ContentList.svelte.d.ts +16 -0
  189. package/dist/svelte/components/ContentList.svelte.d.ts.map +1 -0
  190. package/dist/svelte/components/ContentMetadataFields.svelte +107 -0
  191. package/dist/svelte/components/ContentMetadataFields.svelte.d.ts +8 -0
  192. package/dist/svelte/components/ContentMetadataFields.svelte.d.ts.map +1 -0
  193. package/dist/svelte/components/ContentReferencesPanel.svelte +221 -0
  194. package/dist/svelte/components/ContentReferencesPanel.svelte.d.ts +20 -0
  195. package/dist/svelte/components/ContentReferencesPanel.svelte.d.ts.map +1 -0
  196. package/dist/svelte/components/ContentReviewStatusTray.svelte +151 -0
  197. package/dist/svelte/components/ContentReviewStatusTray.svelte.d.ts +20 -0
  198. package/dist/svelte/components/ContentReviewStatusTray.svelte.d.ts.map +1 -0
  199. package/dist/svelte/components/ContentStatusFields.svelte +85 -0
  200. package/dist/svelte/components/ContentStatusFields.svelte.d.ts +8 -0
  201. package/dist/svelte/components/ContentStatusFields.svelte.d.ts.map +1 -0
  202. package/dist/svelte/components/ContentTitleField.svelte +54 -0
  203. package/dist/svelte/components/ContentTitleField.svelte.d.ts +10 -0
  204. package/dist/svelte/components/ContentTitleField.svelte.d.ts.map +1 -0
  205. package/dist/svelte/components/ContentTransparencyReport.svelte +322 -0
  206. package/dist/svelte/components/ContentTransparencyReport.svelte.d.ts +10 -0
  207. package/dist/svelte/components/ContentTransparencyReport.svelte.d.ts.map +1 -0
  208. package/dist/svelte/components/ContentTransparencyTool.svelte +314 -0
  209. package/dist/svelte/components/ContentTransparencyTool.svelte.d.ts +10 -0
  210. package/dist/svelte/components/ContentTransparencyTool.svelte.d.ts.map +1 -0
  211. package/dist/svelte/components/ContentVersionsTool.svelte +291 -0
  212. package/dist/svelte/components/ContentVersionsTool.svelte.d.ts +10 -0
  213. package/dist/svelte/components/ContentVersionsTool.svelte.d.ts.map +1 -0
  214. package/dist/svelte/components/GovernedContentEditor.svelte +409 -0
  215. package/dist/svelte/components/GovernedContentEditor.svelte.d.ts +35 -0
  216. package/dist/svelte/components/GovernedContentEditor.svelte.d.ts.map +1 -0
  217. package/dist/svelte/components/ImageThumbnail.cache.d.ts +14 -0
  218. package/dist/svelte/components/ImageThumbnail.cache.d.ts.map +1 -0
  219. package/dist/svelte/components/ImageThumbnail.cache.js +36 -0
  220. package/dist/svelte/components/ImageThumbnail.svelte +159 -0
  221. package/dist/svelte/components/ImageThumbnail.svelte.d.ts +8 -0
  222. package/dist/svelte/components/ImageThumbnail.svelte.d.ts.map +1 -0
  223. package/dist/svelte/components/Markdown.svelte +125 -0
  224. package/dist/svelte/components/Markdown.svelte.d.ts +11 -0
  225. package/dist/svelte/components/Markdown.svelte.d.ts.map +1 -0
  226. package/dist/svelte/content-editor-form.d.ts +63 -0
  227. package/dist/svelte/content-editor-form.d.ts.map +1 -0
  228. package/dist/svelte/content-editor-form.js +94 -0
  229. package/dist/svelte/content-editor-media.d.ts +12 -0
  230. package/dist/svelte/content-editor-media.d.ts.map +1 -0
  231. package/dist/svelte/content-editor-media.js +84 -0
  232. package/dist/svelte/content-editor-state.svelte.d.ts +35 -0
  233. package/dist/svelte/content-editor-state.svelte.d.ts.map +1 -0
  234. package/dist/svelte/content-editor-state.svelte.js +141 -0
  235. package/dist/svelte/governance-manager-client.d.ts +22 -0
  236. package/dist/svelte/governance-manager-client.d.ts.map +1 -0
  237. package/dist/svelte/governance-manager-client.js +1 -0
  238. package/dist/svelte/i18n.contribution.d.ts +57 -0
  239. package/dist/svelte/i18n.contribution.d.ts.map +1 -0
  240. package/dist/svelte/i18n.contribution.js +64 -0
  241. package/dist/svelte/i18n.editor.d.ts +71 -0
  242. package/dist/svelte/i18n.editor.d.ts.map +1 -0
  243. package/dist/svelte/i18n.editor.js +87 -0
  244. package/dist/svelte/i18n.governance.d.ts +66 -0
  245. package/dist/svelte/i18n.governance.d.ts.map +1 -0
  246. package/dist/svelte/i18n.governance.js +66 -0
  247. package/dist/svelte/i18n.routes.d.ts +66 -0
  248. package/dist/svelte/i18n.routes.d.ts.map +1 -0
  249. package/dist/svelte/i18n.routes.js +75 -0
  250. package/dist/svelte/i18n.tools.d.ts +81 -0
  251. package/dist/svelte/i18n.tools.d.ts.map +1 -0
  252. package/dist/svelte/i18n.tools.js +90 -0
  253. package/dist/svelte/index.d.ts +101 -0
  254. package/dist/svelte/index.d.ts.map +1 -0
  255. package/dist/svelte/index.js +63 -0
  256. package/dist/svelte/playground.d.ts +281 -0
  257. package/dist/svelte/playground.d.ts.map +1 -0
  258. package/dist/svelte/playground.js +438 -0
  259. package/dist/svelte/routes/ContentContributionsRoute.svelte +809 -0
  260. package/dist/svelte/routes/ContentContributionsRoute.svelte.d.ts +10 -0
  261. package/dist/svelte/routes/ContentContributionsRoute.svelte.d.ts.map +1 -0
  262. package/dist/svelte/routes/ContentFactsRoute.svelte +612 -0
  263. package/dist/svelte/routes/ContentFactsRoute.svelte.d.ts +11 -0
  264. package/dist/svelte/routes/ContentFactsRoute.svelte.d.ts.map +1 -0
  265. package/dist/svelte/routes/ContentGovernanceRoute.svelte +218 -0
  266. package/dist/svelte/routes/ContentGovernanceRoute.svelte.d.ts +10 -0
  267. package/dist/svelte/routes/ContentGovernanceRoute.svelte.d.ts.map +1 -0
  268. package/dist/svelte/routes/ContentWorkspaceRoute.svelte +431 -0
  269. package/dist/svelte/routes/ContentWorkspaceRoute.svelte.d.ts +12 -0
  270. package/dist/svelte/routes/ContentWorkspaceRoute.svelte.d.ts.map +1 -0
  271. package/dist/svelte/routes/PublishedArticleRoute.svelte +194 -0
  272. package/dist/svelte/routes/PublishedArticleRoute.svelte.d.ts +10 -0
  273. package/dist/svelte/routes/PublishedArticleRoute.svelte.d.ts.map +1 -0
  274. package/dist/svelte/routes/index.d.ts +8 -0
  275. package/dist/svelte/routes/index.d.ts.map +1 -0
  276. package/dist/svelte/routes/index.js +6 -0
  277. package/dist/svelte/routes/shared.d.ts +90 -0
  278. package/dist/svelte/routes/shared.d.ts.map +1 -0
  279. package/dist/svelte/routes/shared.js +104 -0
  280. package/dist/svelte/types.d.ts +69 -0
  281. package/dist/svelte/types.d.ts.map +1 -0
  282. package/dist/svelte/types.js +6 -0
  283. package/dist/thumbnail-generator.d.ts +174 -0
  284. package/dist/thumbnail-generator.d.ts.map +1 -0
  285. package/dist/ui.d.ts +10 -0
  286. package/dist/ui.d.ts.map +1 -0
  287. package/dist/ui.js +42 -0
  288. package/dist/ui.js.map +1 -0
  289. package/dist/utils.d.ts +18 -0
  290. package/dist/utils.d.ts.map +1 -0
  291. package/package.json +119 -0
@@ -0,0 +1,26 @@
1
+ import { type ContentGovernanceStateData, type FactAuditStateData, type FactData } from '../../mock-smrt-client';
2
+ export type ContentGovernancePanelSection = 'factAudit' | 'facts' | 'reviews' | 'transparency' | 'corrections' | 'versions';
3
+ export interface Props {
4
+ apiBaseUrl?: string;
5
+ contentId?: string;
6
+ draftType?: string | null;
7
+ draftVariant?: string | null;
8
+ selectedFactIds?: string[];
9
+ selectedFacts?: FactData[];
10
+ defaultRelationship?: string;
11
+ reviewProfileKey?: string;
12
+ customReviewLabel?: string;
13
+ customReviewInstructions?: string;
14
+ customReviewPolicyKey?: string;
15
+ showFactCatalog?: boolean;
16
+ onFactsChange?: (factIds: string[], facts: FactData[]) => void;
17
+ onGovernanceStateChange?: (state: ContentGovernanceStateData | null) => void;
18
+ onFactAuditChange?: (state: FactAuditStateData | null) => void;
19
+ hiddenSections?: ContentGovernancePanelSection[];
20
+ }
21
+ declare const ContentGovernancePanel: import("svelte").Component<Props, {
22
+ triggerReview: (actionKind: string) => Promise<void>;
23
+ }, "">;
24
+ type ContentGovernancePanel = ReturnType<typeof ContentGovernancePanel>;
25
+ export default ContentGovernancePanel;
26
+ //# sourceMappingURL=ContentGovernancePanel.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContentGovernancePanel.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/components/ContentGovernancePanel.svelte.ts"],"names":[],"mappings":"AAIA,OAAO,EAIL,KAAK,0BAA0B,EAQ/B,KAAK,kBAAkB,EACvB,KAAK,QAAQ,EAEd,MAAM,wBAAwB,CAAC;AAMhC,MAAM,MAAM,6BAA6B,GACrC,WAAW,GACX,OAAO,GACP,SAAS,GACT,cAAc,GACd,aAAa,GACb,UAAU,CAAC;AASf,MAAM,WAAW,KAAK;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,IAAI,CAAC;IAC/D,uBAAuB,CAAC,EAAE,CAAC,KAAK,EAAE,0BAA0B,GAAG,IAAI,KAAK,IAAI,CAAC;IAC7E,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI,KAAK,IAAI,CAAC;IAC/D,cAAc,CAAC,EAAE,6BAA6B,EAAE,CAAC;CAClD;AA2mDD,QAAA,MAAM,sBAAsB;gCAx3Bc,MAAM;MAw3BoB,CAAC;AACrE,KAAK,sBAAsB,GAAG,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACxE,eAAe,sBAAsB,CAAC"}
@@ -0,0 +1,110 @@
1
+ <script lang="ts">
2
+ import { useI18n } from '@happyvertical/smrt-ui/i18n';
3
+ import type { ContentReviewPolicyData } from '../../mock-smrt-client';
4
+ import { M } from '../i18n.tools.js';
5
+
6
+ const { t } = useI18n();
7
+
8
+ export interface Props {
9
+ policy?: Partial<ContentReviewPolicyData>;
10
+ onSave: (policy: Partial<ContentReviewPolicyData>) => void;
11
+ onCancel?: () => void;
12
+ }
13
+
14
+ let { policy = {}, onSave, onCancel = undefined }: Props = $props();
15
+
16
+ function createDraft(sourcePolicy: Partial<ContentReviewPolicyData>) {
17
+ return {
18
+ key: sourcePolicy.key || '',
19
+ label: sourcePolicy.label || '',
20
+ kind: sourcePolicy.kind || 'custom',
21
+ instructions: sourcePolicy.instructions || '',
22
+ enabled: sourcePolicy.enabled ?? true,
23
+ };
24
+ }
25
+
26
+ let draft = $state(createDraft({}));
27
+
28
+ $effect(() => {
29
+ draft = createDraft(policy);
30
+ });
31
+
32
+ function handleSubmit() {
33
+ onSave({
34
+ ...policy,
35
+ key: draft.key,
36
+ label: draft.label,
37
+ kind: draft.kind,
38
+ instructions: draft.instructions,
39
+ enabled: draft.enabled,
40
+ });
41
+ }
42
+ </script>
43
+
44
+ <form class="governance-editor" onsubmit={(event) => {
45
+ event.preventDefault();
46
+ handleSubmit();
47
+ }}>
48
+ <label>
49
+ Key
50
+ <input type="text" bind:value={draft.key} required />
51
+ </label>
52
+ <label>
53
+ Label
54
+ <input type="text" bind:value={draft.label} />
55
+ </label>
56
+ <label>
57
+ Kind
58
+ <select bind:value={draft.kind}>
59
+ <option value="facts">Facts</option>
60
+ <option value="safety">Safety</option>
61
+ <option value="custom">Custom</option>
62
+ </select>
63
+ </label>
64
+ <label>
65
+ Instructions
66
+ <textarea rows="4" bind:value={draft.instructions}></textarea>
67
+ </label>
68
+ <label class="checkbox">
69
+ <input type="checkbox" bind:checked={draft.enabled} />
70
+ Enabled
71
+ </label>
72
+ <div class="actions">
73
+ <button type="submit">{t(M['content.governance_policy_editor.save_policy'])}</button>
74
+ {#if onCancel}
75
+ <button type="button" class="secondary" onclick={() => onCancel?.()}>
76
+ Cancel
77
+ </button>
78
+ {/if}
79
+ </div>
80
+ </form>
81
+
82
+ <style>
83
+ .governance-editor {
84
+ display: grid;
85
+ gap: 0.75rem;
86
+ }
87
+
88
+ label {
89
+ display: grid;
90
+ gap: 0.35rem;
91
+ font-size: var(--smrt-typography-label-large-size, 0.9rem);
92
+ }
93
+
94
+ input,
95
+ select,
96
+ textarea {
97
+ width: 100%;
98
+ }
99
+
100
+ .checkbox {
101
+ display: flex;
102
+ align-items: center;
103
+ gap: 0.5rem;
104
+ }
105
+
106
+ .actions {
107
+ display: flex;
108
+ gap: 0.75rem;
109
+ }
110
+ </style>
@@ -0,0 +1,10 @@
1
+ import type { ContentReviewPolicyData } from '../../mock-smrt-client';
2
+ export interface Props {
3
+ policy?: Partial<ContentReviewPolicyData>;
4
+ onSave: (policy: Partial<ContentReviewPolicyData>) => void;
5
+ onCancel?: () => void;
6
+ }
7
+ declare const ContentGovernancePolicyEditor: import("svelte").Component<Props, {}, "">;
8
+ type ContentGovernancePolicyEditor = ReturnType<typeof ContentGovernancePolicyEditor>;
9
+ export default ContentGovernancePolicyEditor;
10
+ //# sourceMappingURL=ContentGovernancePolicyEditor.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContentGovernancePolicyEditor.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/components/ContentGovernancePolicyEditor.svelte.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAItE,MAAM,WAAW,KAAK;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAC1C,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,uBAAuB,CAAC,KAAK,IAAI,CAAC;IAC3D,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAiFD,QAAA,MAAM,6BAA6B,2CAAwC,CAAC;AAC5E,KAAK,6BAA6B,GAAG,UAAU,CAAC,OAAO,6BAA6B,CAAC,CAAC;AACtF,eAAe,6BAA6B,CAAC"}
@@ -0,0 +1,185 @@
1
+ <script lang="ts">
2
+ import { useI18n } from '@happyvertical/smrt-ui/i18n';
3
+ import type {
4
+ ContentGovernanceProfileData,
5
+ ContentReviewPolicyData,
6
+ } from '../../mock-smrt-client';
7
+ import { M } from '../i18n.tools.js';
8
+
9
+ const { t } = useI18n();
10
+
11
+ export interface Props {
12
+ profile?: Partial<ContentGovernanceProfileData>;
13
+ policies?: ContentReviewPolicyData[];
14
+ onSave: (profile: Partial<ContentGovernanceProfileData>) => void;
15
+ onCancel?: () => void;
16
+ }
17
+
18
+ let {
19
+ profile = {},
20
+ policies = [],
21
+ onSave,
22
+ onCancel = undefined,
23
+ }: Props = $props();
24
+
25
+ function createDefaultRequirement(
26
+ availablePolicies: ContentReviewPolicyData[],
27
+ ) {
28
+ return {
29
+ policyKey: availablePolicies[0]?.key || 'safety',
30
+ label: availablePolicies[0]?.label || 'Safety Review',
31
+ blocking: false,
32
+ acceptedStatuses: ['passed', 'waived'],
33
+ };
34
+ }
35
+
36
+ function createDraft(
37
+ sourceProfile: Partial<ContentGovernanceProfileData>,
38
+ availablePolicies: ContentReviewPolicyData[],
39
+ ) {
40
+ return {
41
+ key: sourceProfile.key || '',
42
+ label: sourceProfile.label || '',
43
+ description: sourceProfile.description || '',
44
+ enabled: sourceProfile.enabled ?? true,
45
+ requirements:
46
+ Array.isArray(sourceProfile.requirements) &&
47
+ sourceProfile.requirements.length > 0
48
+ ? sourceProfile.requirements.map((requirement) => ({ ...requirement }))
49
+ : [createDefaultRequirement(availablePolicies)],
50
+ };
51
+ }
52
+
53
+ let draft = $state(createDraft({}, []));
54
+
55
+ $effect(() => {
56
+ draft = createDraft(profile, policies);
57
+ });
58
+
59
+ function addRequirement() {
60
+ draft.requirements = [
61
+ ...draft.requirements,
62
+ createDefaultRequirement(policies),
63
+ ];
64
+ }
65
+
66
+ function removeRequirement(index: number) {
67
+ draft.requirements = draft.requirements.filter(
68
+ (_, requirementIndex) => requirementIndex !== index,
69
+ );
70
+ }
71
+
72
+ function handleSubmit() {
73
+ onSave({
74
+ ...profile,
75
+ key: draft.key,
76
+ label: draft.label,
77
+ description: draft.description,
78
+ enabled: draft.enabled,
79
+ requirements: draft.requirements,
80
+ });
81
+ }
82
+ </script>
83
+
84
+ <form class="governance-editor" onsubmit={(event) => {
85
+ event.preventDefault();
86
+ handleSubmit();
87
+ }}>
88
+ <label>
89
+ Key
90
+ <input type="text" bind:value={draft.key} required />
91
+ </label>
92
+ <label>
93
+ Label
94
+ <input type="text" bind:value={draft.label} />
95
+ </label>
96
+ <label>
97
+ Description
98
+ <textarea rows="2" bind:value={draft.description}></textarea>
99
+ </label>
100
+ <label class="checkbox">
101
+ <input type="checkbox" bind:checked={draft.enabled} />
102
+ Enabled
103
+ </label>
104
+
105
+ <div class="requirements">
106
+ <div class="requirements__header">
107
+ <strong>Requirements</strong>
108
+ <button type="button" class="secondary" onclick={addRequirement}>
109
+ {t(M['content.governance_profile_editor.add_requirement'])}
110
+ </button>
111
+ </div>
112
+
113
+ {#each draft.requirements as requirement, index (`${requirement.policyKey}-${index}`)}
114
+ <div class="requirement-row">
115
+ <label>
116
+ Policy
117
+ <select bind:value={requirement.policyKey}>
118
+ {#each policies as policy (policy.key)}
119
+ <option value={policy.key}>{policy.label}</option>
120
+ {/each}
121
+ </select>
122
+ </label>
123
+ <label>
124
+ Label
125
+ <input type="text" bind:value={requirement.label} />
126
+ </label>
127
+ <label class="checkbox">
128
+ <input type="checkbox" bind:checked={requirement.blocking} />
129
+ Blocking
130
+ </label>
131
+ <button type="button" class="secondary" onclick={() => removeRequirement(index)}>
132
+ Remove
133
+ </button>
134
+ </div>
135
+ {/each}
136
+ </div>
137
+
138
+ <div class="actions">
139
+ <button type="submit">{t(M['content.governance_profile_editor.save_profile'])}</button>
140
+ {#if onCancel}
141
+ <button type="button" class="secondary" onclick={() => onCancel?.()}>
142
+ Cancel
143
+ </button>
144
+ {/if}
145
+ </div>
146
+ </form>
147
+
148
+ <style>
149
+ .governance-editor {
150
+ display: grid;
151
+ gap: 0.75rem;
152
+ }
153
+
154
+ label {
155
+ display: grid;
156
+ gap: 0.35rem;
157
+ font-size: var(--smrt-typography-label-large-size, 0.9rem);
158
+ }
159
+
160
+ input,
161
+ select,
162
+ textarea {
163
+ width: 100%;
164
+ }
165
+
166
+ .checkbox {
167
+ display: flex;
168
+ align-items: center;
169
+ gap: 0.5rem;
170
+ }
171
+
172
+ .requirements {
173
+ display: grid;
174
+ gap: 0.75rem;
175
+ }
176
+
177
+ .requirements__header,
178
+ .requirement-row,
179
+ .actions {
180
+ display: flex;
181
+ gap: 0.75rem;
182
+ align-items: center;
183
+ flex-wrap: wrap;
184
+ }
185
+ </style>
@@ -0,0 +1,11 @@
1
+ import type { ContentGovernanceProfileData, ContentReviewPolicyData } from '../../mock-smrt-client';
2
+ export interface Props {
3
+ profile?: Partial<ContentGovernanceProfileData>;
4
+ policies?: ContentReviewPolicyData[];
5
+ onSave: (profile: Partial<ContentGovernanceProfileData>) => void;
6
+ onCancel?: () => void;
7
+ }
8
+ declare const ContentGovernanceProfileEditor: import("svelte").Component<Props, {}, "">;
9
+ type ContentGovernanceProfileEditor = ReturnType<typeof ContentGovernanceProfileEditor>;
10
+ export default ContentGovernanceProfileEditor;
11
+ //# sourceMappingURL=ContentGovernanceProfileEditor.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContentGovernanceProfileEditor.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/components/ContentGovernanceProfileEditor.svelte.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,4BAA4B,EAC5B,uBAAuB,EACxB,MAAM,wBAAwB,CAAC;AAIhC,MAAM,WAAW,KAAK;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC,4BAA4B,CAAC,CAAC;IAChD,QAAQ,CAAC,EAAE,uBAAuB,EAAE,CAAC;IACrC,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,4BAA4B,CAAC,KAAK,IAAI,CAAC;IACjE,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AA+ID,QAAA,MAAM,8BAA8B,2CAAwC,CAAC;AAC7E,KAAK,8BAA8B,GAAG,UAAU,CAAC,OAAO,8BAA8B,CAAC,CAAC;AACxF,eAAe,8BAA8B,CAAC"}
@@ -0,0 +1,56 @@
1
+ <script lang="ts">
2
+ import type {
3
+ ContentGovernanceStateData,
4
+ FactAuditStateData,
5
+ } from '../../mock-smrt-client';
6
+ import ContentClaimAuditTool from './ContentClaimAuditTool.svelte';
7
+ import ContentCorrectionsTool from './ContentCorrectionsTool.svelte';
8
+ import ContentTransparencyTool from './ContentTransparencyTool.svelte';
9
+ import ContentVersionsTool from './ContentVersionsTool.svelte';
10
+
11
+ export type ContentGovernanceToolSection =
12
+ | 'claimAudit'
13
+ | 'corrections'
14
+ | 'versions'
15
+ | 'transparency';
16
+
17
+ export interface Props {
18
+ section: ContentGovernanceToolSection;
19
+ apiBaseUrl?: string;
20
+ contentId: string;
21
+ onGovernanceStateChange?: (state: ContentGovernanceStateData | null) => void;
22
+ onFactAuditChange?: (state: FactAuditStateData | null) => void;
23
+ }
24
+
25
+ let {
26
+ section,
27
+ apiBaseUrl = '/api/v1',
28
+ contentId,
29
+ onGovernanceStateChange = undefined,
30
+ onFactAuditChange = undefined,
31
+ }: Props = $props();
32
+ </script>
33
+
34
+ {#if section === 'claimAudit'}
35
+ <ContentClaimAuditTool
36
+ {apiBaseUrl}
37
+ {contentId}
38
+ {onFactAuditChange}
39
+ />
40
+ {:else if section === 'corrections'}
41
+ <ContentCorrectionsTool
42
+ {apiBaseUrl}
43
+ {contentId}
44
+ />
45
+ {:else if section === 'versions'}
46
+ <ContentVersionsTool
47
+ {apiBaseUrl}
48
+ {contentId}
49
+ />
50
+ {:else if section === 'transparency'}
51
+ <ContentTransparencyTool
52
+ {apiBaseUrl}
53
+ {contentId}
54
+ {onGovernanceStateChange}
55
+ />
56
+ {/if}
@@ -0,0 +1,13 @@
1
+ import type { ContentGovernanceStateData, FactAuditStateData } from '../../mock-smrt-client';
2
+ export type ContentGovernanceToolSection = 'claimAudit' | 'corrections' | 'versions' | 'transparency';
3
+ export interface Props {
4
+ section: ContentGovernanceToolSection;
5
+ apiBaseUrl?: string;
6
+ contentId: string;
7
+ onGovernanceStateChange?: (state: ContentGovernanceStateData | null) => void;
8
+ onFactAuditChange?: (state: FactAuditStateData | null) => void;
9
+ }
10
+ declare const ContentGovernanceTool: import("svelte").Component<Props, {}, "">;
11
+ type ContentGovernanceTool = ReturnType<typeof ContentGovernanceTool>;
12
+ export default ContentGovernanceTool;
13
+ //# sourceMappingURL=ContentGovernanceTool.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContentGovernanceTool.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/components/ContentGovernanceTool.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,0BAA0B,EAC1B,kBAAkB,EACnB,MAAM,wBAAwB,CAAC;AAOhC,MAAM,MAAM,4BAA4B,GACpC,YAAY,GACZ,aAAa,GACb,UAAU,GACV,cAAc,CAAC;AAEnB,MAAM,WAAW,KAAK;IACpB,OAAO,EAAE,4BAA4B,CAAC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,uBAAuB,CAAC,EAAE,CAAC,KAAK,EAAE,0BAA0B,GAAG,IAAI,KAAK,IAAI,CAAC;IAC7E,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI,KAAK,IAAI,CAAC;CAChE;AA+BD,QAAA,MAAM,qBAAqB,2CAAwC,CAAC;AACpE,KAAK,qBAAqB,GAAG,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACtE,eAAe,qBAAqB,CAAC"}
@@ -0,0 +1,243 @@
1
+ <script lang="ts">
2
+ import {
3
+ type ImageLike,
4
+ ImageUploader,
5
+ } from '@happyvertical/smrt-images/svelte';
6
+ import { useI18n } from '@happyvertical/smrt-ui/i18n';
7
+ import type { ContentEditorAsset } from '../content-editor-form';
8
+ import { M } from '../i18n.editor.js';
9
+
10
+ const { t } = useI18n();
11
+
12
+ export interface Props {
13
+ apiBaseUrl?: string;
14
+ assets?: ContentEditorAsset[];
15
+ thumbnailAssetId?: string | null;
16
+ addButtonLabel?: string;
17
+ selectActionLabel?: string;
18
+ showUploaderInitially?: boolean;
19
+ onSelectImage?: (image: ImageLike | File | string) => void;
20
+ onUseAsset?: (asset: ContentEditorAsset) => void;
21
+ onRemoveAsset?: (assetId: string) => void;
22
+ onUseAsThumbnail?: (assetId: string) => void;
23
+ }
24
+
25
+ let {
26
+ apiBaseUrl = '/api/v1',
27
+ assets = [],
28
+ thumbnailAssetId = null,
29
+ addButtonLabel = 'Add Image',
30
+ selectActionLabel = 'Use',
31
+ showUploaderInitially = false,
32
+ onSelectImage = undefined,
33
+ onUseAsset = undefined,
34
+ onRemoveAsset = undefined,
35
+ onUseAsThumbnail = undefined,
36
+ }: Props = $props();
37
+
38
+ let showUploader = $state(false);
39
+
40
+ $effect(() => {
41
+ showUploader = showUploaderInitially;
42
+ });
43
+
44
+ function getAssetImageSource(asset: ContentEditorAsset): string {
45
+ return String(
46
+ asset?.sourceUri ||
47
+ asset?.thumbnailUri ||
48
+ asset?.thumbnailUrl ||
49
+ asset?.deliveryUrl ||
50
+ asset?.url ||
51
+ asset?.src ||
52
+ '',
53
+ );
54
+ }
55
+
56
+ function getAssetLabel(asset: ContentEditorAsset): string {
57
+ return String(
58
+ asset?.name || asset?.title || asset?.filename || asset?.id || 'Image',
59
+ );
60
+ }
61
+
62
+ function handleSelect(selected: ImageLike | File | string) {
63
+ onSelectImage?.(selected);
64
+ showUploader = false;
65
+ }
66
+ </script>
67
+
68
+ <div class="content-image-browser">
69
+ {#if assets.length}
70
+ <div class="asset-grid">
71
+ {#each assets as asset, index (asset.id || `${getAssetLabel(asset)}-${index}`)}
72
+ {@const source = getAssetImageSource(asset)}
73
+ {@const assetId = typeof asset.id === 'string' ? asset.id : ''}
74
+ <article class="asset-card" class:asset-card--thumbnail={thumbnailAssetId === assetId}>
75
+ <div class="asset-preview">
76
+ {#if source}
77
+ <img src={source} alt={getAssetLabel(asset)} loading="lazy" decoding="async" />
78
+ {:else}
79
+ <span>{getAssetLabel(asset).slice(0, 1).toUpperCase()}</span>
80
+ {/if}
81
+ </div>
82
+ <div class="asset-meta">
83
+ <strong>{getAssetLabel(asset)}</strong>
84
+ {#if thumbnailAssetId === assetId}
85
+ <span>Thumbnail</span>
86
+ {/if}
87
+ </div>
88
+ <div class="asset-actions">
89
+ {#if onUseAsset}
90
+ <button type="button" onclick={() => onUseAsset?.(asset)}>{selectActionLabel}</button>
91
+ {/if}
92
+ {#if onUseAsThumbnail && assetId && thumbnailAssetId !== assetId}
93
+ <button type="button" onclick={() => onUseAsThumbnail?.(assetId)}>Thumbnail</button>
94
+ {/if}
95
+ {#if onRemoveAsset && assetId}
96
+ <button type="button" class="danger" onclick={() => onRemoveAsset?.(assetId)}>Remove</button>
97
+ {/if}
98
+ </div>
99
+ </article>
100
+ {/each}
101
+ </div>
102
+ {:else}
103
+ <p class="empty-state">{t(M['content.content_image_browser.no_images_attached'])}</p>
104
+ {/if}
105
+
106
+ {#if showUploader}
107
+ <div class="uploader-panel">
108
+ <ImageUploader {apiBaseUrl} onSelect={handleSelect} onCancel={() => showUploader = false} />
109
+ </div>
110
+ {:else if onSelectImage}
111
+ <button type="button" class="add-image-button" onclick={() => showUploader = true}>
112
+ <svg viewBox="0 0 24 24" aria-hidden="true">
113
+ <rect x="3" y="3" width="18" height="18" rx="2"></rect>
114
+ <circle cx="8.5" cy="8.5" r="1.5"></circle>
115
+ <path d="m21 15-5-5L5 21"></path>
116
+ </svg>
117
+ {addButtonLabel}
118
+ </button>
119
+ {/if}
120
+ </div>
121
+
122
+ <style>
123
+ .content-image-browser {
124
+ display: grid;
125
+ gap: 1rem;
126
+ min-height: 5.5rem;
127
+ padding: 1rem;
128
+ border: 1px dashed color-mix(in srgb, var(--smrt-color-outline) 45%, transparent);
129
+ border-radius: 0.5rem;
130
+ }
131
+
132
+ .asset-grid {
133
+ display: grid;
134
+ grid-template-columns: repeat(auto-fill, minmax(12rem, 1fr));
135
+ gap: 0.75rem;
136
+ }
137
+
138
+ .asset-card {
139
+ display: grid;
140
+ gap: 0.75rem;
141
+ border: 1px solid color-mix(in srgb, var(--smrt-color-outline) 28%, transparent);
142
+ border-radius: 0.5rem;
143
+ background: var(--smrt-color-surface-container-low);
144
+ padding: 0.75rem;
145
+ }
146
+
147
+ .asset-card--thumbnail {
148
+ border-color: var(--smrt-color-primary);
149
+ }
150
+
151
+ .asset-preview {
152
+ display: grid;
153
+ place-items: center;
154
+ aspect-ratio: 16 / 9;
155
+ overflow: hidden;
156
+ border-radius: 0.375rem;
157
+ background: var(--smrt-color-surface-container);
158
+ color: var(--smrt-color-on-surface-variant);
159
+ font-size: var(--smrt-typography-headline-small-size, 1.5rem);
160
+ font-weight: var(--smrt-typography-weight-bold, 700);
161
+ }
162
+
163
+ .asset-preview img {
164
+ width: 100%;
165
+ height: 100%;
166
+ object-fit: cover;
167
+ }
168
+
169
+ .asset-meta {
170
+ display: grid;
171
+ gap: 0.2rem;
172
+ min-width: 0;
173
+ }
174
+
175
+ .asset-meta strong {
176
+ overflow: hidden;
177
+ color: var(--smrt-color-on-surface);
178
+ font-size: var(--smrt-typography-title-small-size, 0.875rem);
179
+ text-overflow: ellipsis;
180
+ white-space: nowrap;
181
+ }
182
+
183
+ .asset-meta span,
184
+ .empty-state {
185
+ color: var(--smrt-color-on-surface-variant);
186
+ font-size: var(--smrt-typography-body-medium-size, 0.875rem);
187
+ }
188
+
189
+ .empty-state {
190
+ margin: 0;
191
+ font-style: italic;
192
+ }
193
+
194
+ .asset-actions {
195
+ display: flex;
196
+ flex-wrap: wrap;
197
+ gap: 0.5rem;
198
+ }
199
+
200
+ button {
201
+ display: inline-flex;
202
+ align-items: center;
203
+ justify-content: center;
204
+ gap: 0.45rem;
205
+ min-height: 2.35rem;
206
+ border: 1px solid var(--smrt-color-outline);
207
+ border-radius: 0.5rem;
208
+ background: var(--smrt-color-surface-container);
209
+ color: var(--smrt-color-on-surface);
210
+ cursor: pointer;
211
+ font: inherit;
212
+ font-size: var(--smrt-typography-label-large-size, 0.875rem);
213
+ font-weight: var(--smrt-typography-weight-semibold, 600);
214
+ padding: 0.5rem 0.875rem;
215
+ }
216
+
217
+ button:hover {
218
+ background: var(--smrt-color-surface-container-high);
219
+ }
220
+
221
+ button.danger {
222
+ color: var(--smrt-color-error);
223
+ }
224
+
225
+ .add-image-button {
226
+ justify-self: start;
227
+ }
228
+
229
+ .add-image-button svg {
230
+ width: 1rem;
231
+ height: 1rem;
232
+ fill: none;
233
+ stroke: currentColor;
234
+ stroke-width: 2;
235
+ stroke-linecap: round;
236
+ stroke-linejoin: round;
237
+ }
238
+
239
+ .uploader-panel {
240
+ border-radius: 0.5rem;
241
+ overflow: hidden;
242
+ }
243
+ </style>
@@ -0,0 +1,18 @@
1
+ import { type ImageLike } from '@happyvertical/smrt-images/svelte';
2
+ import type { ContentEditorAsset } from '../content-editor-form';
3
+ export interface Props {
4
+ apiBaseUrl?: string;
5
+ assets?: ContentEditorAsset[];
6
+ thumbnailAssetId?: string | null;
7
+ addButtonLabel?: string;
8
+ selectActionLabel?: string;
9
+ showUploaderInitially?: boolean;
10
+ onSelectImage?: (image: ImageLike | File | string) => void;
11
+ onUseAsset?: (asset: ContentEditorAsset) => void;
12
+ onRemoveAsset?: (assetId: string) => void;
13
+ onUseAsThumbnail?: (assetId: string) => void;
14
+ }
15
+ declare const ContentImageBrowser: import("svelte").Component<Props, {}, "">;
16
+ type ContentImageBrowser = ReturnType<typeof ContentImageBrowser>;
17
+ export default ContentImageBrowser;
18
+ //# sourceMappingURL=ContentImageBrowser.svelte.d.ts.map