rimecms 0.33.0 → 1.0.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.
Files changed (526) hide show
  1. package/dist/adapter-sqlite/auth.server.d.ts +2 -2
  2. package/dist/adapter-sqlite/columns.server.js +2 -2
  3. package/dist/adapter-sqlite/connect.server.d.ts +12 -0
  4. package/dist/adapter-sqlite/connect.server.js +31 -0
  5. package/dist/adapter-sqlite/generate-schema/index.server.js +11 -3
  6. package/dist/adapter-sqlite/generate-schema/root.server.d.ts +13 -4
  7. package/dist/adapter-sqlite/generate-schema/root.server.js +75 -131
  8. package/dist/adapter-sqlite/generate-schema/templates.server.d.ts +36 -15
  9. package/dist/adapter-sqlite/generate-schema/templates.server.js +60 -18
  10. package/dist/adapter-sqlite/index.server.d.ts +13 -5
  11. package/dist/adapter-sqlite/index.server.js +9 -6
  12. package/dist/adapter-sqlite/naming.server.d.ts +6 -8
  13. package/dist/adapter-sqlite/naming.server.js +22 -4
  14. package/dist/adapter-sqlite/paths.server.d.ts +10 -0
  15. package/dist/adapter-sqlite/paths.server.js +131 -0
  16. package/dist/adapter-sqlite/read.server.d.ts +10 -1
  17. package/dist/adapter-sqlite/read.server.js +22 -10
  18. package/dist/adapter-sqlite/rows.server.d.ts +1 -1
  19. package/dist/adapter-sqlite/select.server.d.ts +19 -0
  20. package/dist/adapter-sqlite/select.server.js +71 -63
  21. package/dist/adapter-sqlite/table.server.d.ts +2 -2
  22. package/dist/adapter-sqlite/transform.server.js +33 -3
  23. package/dist/adapter-sqlite/types.server.d.ts +10 -3
  24. package/dist/adapter-sqlite/where.server.d.ts +2 -3
  25. package/dist/adapter-sqlite/where.server.js +19 -1
  26. package/dist/core/adapter.d.ts +98 -0
  27. package/dist/core/auth/better-auth/config.server.d.ts +3 -3
  28. package/dist/core/auth/better-auth/instance.server.d.ts +6 -6
  29. package/dist/core/auth/handler/index.server.js +1 -1
  30. package/dist/core/auth/staff/derive.js +1 -1
  31. package/dist/core/auth/validate-config.js +3 -5
  32. package/dist/core/boot.server.d.ts +8 -8
  33. package/dist/core/config/context.server.d.ts +2 -2
  34. package/dist/core/config/types.d.ts +43 -5
  35. package/dist/core/config/validate.server.js +34 -51
  36. package/dist/core/dev/cli/commands/build.js +21 -6
  37. package/dist/core/dev/cli/commands/init.server.d.ts +2 -1
  38. package/dist/core/dev/cli/commands/init.server.js +32 -6
  39. package/dist/core/dev/cli/index.js +1 -0
  40. package/dist/core/dev/cli/templates/init.d.ts +6 -1
  41. package/dist/core/dev/cli/templates/init.js +30 -2
  42. package/dist/core/dev/cli/util/package-manager.server.d.ts +1 -0
  43. package/dist/core/dev/cli/util/package-manager.server.js +11 -8
  44. package/dist/core/dev/cli/util/package.server.d.ts +9 -0
  45. package/dist/core/dev/cli/util/package.server.js +43 -0
  46. package/dist/core/dev/codegen/routes/common.server.d.ts +2 -0
  47. package/dist/core/dev/codegen/routes/common.server.js +7 -3
  48. package/dist/core/dev/codegen/routes/util.server.d.ts +2 -1
  49. package/dist/core/dev/codegen/routes/util.server.js +4 -1
  50. package/dist/core/dev/codegen/types/contributions.server.d.ts +3 -2
  51. package/dist/core/dev/codegen/types/contributions.server.js +10 -3
  52. package/dist/core/dev/config-memo.server.js +4 -0
  53. package/dist/core/dev/vite.server.js +4 -3
  54. package/dist/core/fields/blank.d.ts +21 -0
  55. package/dist/core/fields/blank.js +37 -0
  56. package/dist/core/fields/builders/field-builder.d.ts +53 -0
  57. package/dist/core/fields/builders/field-builder.js +14 -1
  58. package/dist/core/fields/builders/form-field-builder.d.ts +8 -0
  59. package/dist/core/fields/builders/form-field-builder.js +14 -1
  60. package/dist/core/fields/util.d.ts +9 -2
  61. package/dist/core/fields/util.js +123 -135
  62. package/dist/core/fields/walk.d.ts +44 -0
  63. package/dist/core/fields/walk.js +55 -0
  64. package/dist/core/handler.server.js +4 -0
  65. package/dist/core/i18n/context.d.ts +5 -0
  66. package/dist/core/i18n/context.js +6 -0
  67. package/dist/core/i18n/en/common.d.ts +71 -0
  68. package/dist/core/i18n/en/common.js +72 -1
  69. package/dist/core/i18n/en/fields.d.ts +68 -0
  70. package/dist/core/i18n/en/fields.js +69 -1
  71. package/dist/core/i18n/fr/common.d.ts +71 -0
  72. package/dist/core/i18n/fr/common.js +72 -1
  73. package/dist/core/i18n/fr/fields.d.ts +68 -0
  74. package/dist/core/i18n/fr/fields.js +69 -1
  75. package/dist/core/i18n/index.d.ts +29 -3
  76. package/dist/core/i18n/index.js +55 -29
  77. package/dist/core/locale/copy.server.js +3 -3
  78. package/dist/core/logger.server.js +15 -6
  79. package/dist/core/pipeline/build-document.server.d.ts +3 -0
  80. package/dist/core/pipeline/build-document.server.js +10 -7
  81. package/dist/core/pipeline/config-map/index.d.ts +9 -0
  82. package/dist/core/pipeline/config-map/index.js +16 -50
  83. package/dist/core/pipeline/hooks/process-document-fields.server.d.ts +3 -0
  84. package/dist/core/pipeline/hooks/process-document-fields.server.js +48 -12
  85. package/dist/core/pipeline/hooks/set-default-values.server.d.ts +1 -0
  86. package/dist/core/pipeline/hooks/set-default-values.server.js +1 -0
  87. package/dist/core/pipeline/persist/blocks/extract.server.js +1 -1
  88. package/dist/core/pipeline/persist/relations/extract.server.js +2 -0
  89. package/dist/core/pipeline/populate-relations.server.d.ts +27 -0
  90. package/dist/core/pipeline/populate-relations.server.js +42 -0
  91. package/dist/core/pipeline/run.server.d.ts +17 -6
  92. package/dist/core/pipeline/run.server.js +44 -30
  93. package/dist/core/plugins/cache/module.server.d.ts +1 -1
  94. package/dist/core/plugins/cache/module.server.js +5 -5
  95. package/dist/core/prototype/area/api.server.js +1 -2
  96. package/dist/core/prototype/area/definition.js +1 -10
  97. package/dist/core/prototype/area/definition.server.js +4 -5
  98. package/dist/core/prototype/area/hooks.server.js +3 -2
  99. package/dist/core/prototype/area/operations/find.js +2 -0
  100. package/dist/core/prototype/blank.d.ts +26 -0
  101. package/dist/core/prototype/blank.js +22 -0
  102. package/dist/core/prototype/collection/api.server.d.ts +29 -3
  103. package/dist/core/prototype/collection/api.server.js +47 -4
  104. package/dist/core/prototype/collection/definition.js +0 -3
  105. package/dist/core/prototype/collection/hooks/merge-with-blank.server.d.ts +5 -1
  106. package/dist/core/prototype/collection/hooks/merge-with-blank.server.js +8 -22
  107. package/dist/core/prototype/collection/hooks.server.js +11 -5
  108. package/dist/core/prototype/collection/nested/module.server.js +3 -1
  109. package/dist/core/prototype/collection/nested/tree.d.ts +12 -0
  110. package/dist/core/prototype/collection/nested/tree.js +42 -0
  111. package/dist/core/prototype/collection/operations/duplicate.js +1 -1
  112. package/dist/core/prototype/collection/operations/find-by-id.js +2 -0
  113. package/dist/core/prototype/collection/operations/find-by-ids.d.ts +19 -0
  114. package/dist/core/prototype/collection/operations/find-by-ids.js +54 -0
  115. package/dist/core/prototype/collection/operations/find.js +21 -27
  116. package/dist/core/prototype/collection/operations/update-slug-by-id.d.ts +20 -0
  117. package/dist/core/prototype/collection/operations/update-slug-by-id.js +53 -0
  118. package/dist/core/prototype/collection/rest/index.server.js +3 -1
  119. package/dist/core/prototype/collection/rest/update-slug-by-id.server.d.ts +2 -0
  120. package/dist/core/prototype/collection/rest/update-slug-by-id.server.js +20 -0
  121. package/dist/core/prototype/collection/thumbnail/find-thumbnail.d.ts +2 -1
  122. package/dist/core/prototype/collection/thumbnail/find-thumbnail.js +4 -27
  123. package/dist/core/prototype/collection/thumbnail/hooks/set-document-thumbnail.server.js +1 -1
  124. package/dist/core/prototype/collection/upload/directories/derive.js +3 -1
  125. package/dist/core/prototype/collection/upload/disk/delete.server.js +1 -2
  126. package/dist/core/prototype/define.js +2 -0
  127. package/dist/core/prototype/shared/metas/fields.js +2 -1
  128. package/dist/core/prototype/shared/title/find-title.d.ts +2 -1
  129. package/dist/core/prototype/shared/title/find-title.js +5 -28
  130. package/dist/core/prototype/shared/title/hooks/set-document-title.server.js +1 -1
  131. package/dist/core/prototype/shared/url/addresses.server.d.ts +36 -0
  132. package/dist/core/prototype/shared/url/addresses.server.js +119 -0
  133. package/dist/core/prototype/shared/url/doc-type.d.ts +6 -0
  134. package/dist/core/prototype/shared/url/doc-type.js +9 -0
  135. package/dist/core/prototype/shared/url/format.server.d.ts +27 -0
  136. package/dist/core/prototype/shared/url/format.server.js +38 -0
  137. package/dist/core/prototype/shared/url/hooks/create-paths.server.d.ts +2 -0
  138. package/dist/core/prototype/shared/url/hooks/create-paths.server.js +9 -0
  139. package/dist/core/prototype/shared/url/hooks/detach-paths.server.d.ts +6 -0
  140. package/dist/core/prototype/shared/url/hooks/detach-paths.server.js +19 -0
  141. package/dist/core/prototype/shared/url/hooks/index.server.d.ts +5 -1
  142. package/dist/core/prototype/shared/url/hooks/index.server.js +5 -1
  143. package/dist/core/prototype/shared/url/hooks/set-area-url.server.d.ts +2 -0
  144. package/dist/core/prototype/shared/url/hooks/set-area-url.server.js +8 -0
  145. package/dist/core/prototype/shared/url/hooks/set-live-url.server.d.ts +5 -0
  146. package/dist/core/prototype/shared/url/hooks/set-live-url.server.js +19 -0
  147. package/dist/core/prototype/shared/url/hooks/sync-paths.server.d.ts +8 -0
  148. package/dist/core/prototype/shared/url/hooks/sync-paths.server.js +38 -0
  149. package/dist/core/prototype/shared/url/refresh.server.d.ts +36 -0
  150. package/dist/core/prototype/shared/url/refresh.server.js +58 -0
  151. package/dist/core/prototype/shared/versions/configure.server.js +3 -0
  152. package/dist/core/routes/context.server.d.ts +2 -1
  153. package/dist/fields/blocks/component/AddBlockButton.svelte +48 -137
  154. package/dist/fields/blocks/component/Block.svelte +153 -117
  155. package/dist/fields/blocks/component/Block.svelte.d.ts +11 -5
  156. package/dist/fields/blocks/component/BlockActions.svelte +76 -26
  157. package/dist/fields/blocks/component/BlockActions.svelte.d.ts +3 -0
  158. package/dist/fields/blocks/component/Blocks.svelte +248 -91
  159. package/dist/fields/blocks/component/focus/BlocksFocus.svelte +680 -0
  160. package/dist/fields/blocks/component/focus/BlocksFocus.svelte.d.ts +7 -0
  161. package/dist/fields/blocks/component/focus/Layers.svelte +145 -0
  162. package/dist/fields/blocks/component/focus/Layers.svelte.d.ts +9 -0
  163. package/dist/fields/blocks/component/focus/LayersList.svelte +304 -0
  164. package/dist/fields/blocks/component/focus/LayersList.svelte.d.ts +10 -0
  165. package/dist/fields/blocks/component/focus/Palette.svelte +135 -0
  166. package/dist/fields/blocks/component/focus/Palette.svelte.d.ts +9 -0
  167. package/dist/fields/blocks/component/focus/RenderPlaceholder.svelte +77 -0
  168. package/dist/fields/blocks/component/focus/RenderPlaceholder.svelte.d.ts +10 -0
  169. package/dist/fields/blocks/component/focus/Renders.svelte +302 -0
  170. package/dist/fields/blocks/component/focus/Renders.svelte.d.ts +11 -0
  171. package/dist/fields/blocks/component/focus/Stage.svelte +190 -0
  172. package/dist/fields/blocks/component/focus/Stage.svelte.d.ts +8 -0
  173. package/dist/fields/blocks/component/focus/StagePlaceholder.svelte +69 -0
  174. package/dist/fields/blocks/component/focus/StagePlaceholder.svelte.d.ts +3 -0
  175. package/dist/fields/blocks/component/focus/focus.svelte.d.ts +140 -0
  176. package/dist/fields/blocks/component/focus/focus.svelte.js +424 -0
  177. package/dist/fields/blocks/component/picker/BlockPicker.svelte +88 -0
  178. package/dist/fields/blocks/component/picker/BlockPicker.svelte.d.ts +10 -0
  179. package/dist/fields/blocks/component/picker/BlockTile.svelte +121 -0
  180. package/dist/fields/blocks/component/picker/BlockTile.svelte.d.ts +12 -0
  181. package/dist/fields/blocks/index.d.ts +49 -7
  182. package/dist/fields/blocks/index.js +61 -12
  183. package/dist/fields/checkbox/component/Checkbox.svelte +11 -37
  184. package/dist/fields/checkbox/component/Checkbox.svelte.d.ts +1 -0
  185. package/dist/fields/combobox/component/ComboBox.svelte +37 -7
  186. package/dist/fields/combobox/component/combobox.css +26 -10
  187. package/dist/fields/date/component/Date.svelte +43 -12
  188. package/dist/fields/group/component/Group.svelte +110 -41
  189. package/dist/fields/group/index.d.ts +5 -1
  190. package/dist/fields/group/index.js +10 -2
  191. package/dist/fields/link/component/Link.svelte +184 -143
  192. package/dist/fields/link/component/RessourceInput.svelte +26 -24
  193. package/dist/fields/link/index.d.ts +2 -1
  194. package/dist/fields/link/module.server.js +2 -4
  195. package/dist/fields/number/component/Number.svelte +38 -20
  196. package/dist/fields/number/component/number.css +22 -20
  197. package/dist/fields/number/index.d.ts +1 -0
  198. package/dist/fields/radio/component/Radio.svelte +12 -0
  199. package/dist/fields/radio/index.js +1 -1
  200. package/dist/fields/relation/component/Relation.svelte +169 -40
  201. package/dist/fields/relation/component/RelationInline.svelte +258 -0
  202. package/dist/fields/relation/component/RelationInline.svelte.d.ts +26 -0
  203. package/dist/fields/relation/component/default/Default.svelte +210 -100
  204. package/dist/fields/relation/component/default/Default.svelte.d.ts +14 -1
  205. package/dist/fields/relation/component/types.d.ts +4 -0
  206. package/dist/fields/relation/component/upload/Browse.svelte +619 -88
  207. package/dist/fields/relation/component/upload/Browse.svelte.d.ts +10 -2
  208. package/dist/fields/relation/component/upload/Create.svelte +41 -0
  209. package/dist/fields/relation/component/upload/Create.svelte.d.ts +13 -0
  210. package/dist/fields/relation/component/upload/Upload.svelte +287 -101
  211. package/dist/fields/relation/component/upload/Upload.svelte.d.ts +6 -1
  212. package/dist/fields/relation/component/upload/upload.css +5 -81
  213. package/dist/fields/relation/index.d.ts +1 -41
  214. package/dist/fields/relation/index.js +0 -67
  215. package/dist/fields/relation/module.server.js +7 -1
  216. package/dist/fields/relation/populate.d.ts +8 -0
  217. package/dist/fields/relation/populate.js +49 -0
  218. package/dist/fields/relation/util.d.ts +69 -0
  219. package/dist/fields/relation/util.js +103 -0
  220. package/dist/fields/relation/value.d.ts +25 -0
  221. package/dist/fields/relation/value.js +27 -0
  222. package/dist/fields/rich-text/client.d.ts +2 -5
  223. package/dist/fields/rich-text/client.js +1 -3
  224. package/dist/fields/rich-text/component/Cell.svelte +1 -1
  225. package/dist/fields/rich-text/component/RichText.svelte +12 -80
  226. package/dist/fields/rich-text/component/RichText.svelte.d.ts +1 -1
  227. package/dist/fields/rich-text/component/RichTextInline.svelte +28 -0
  228. package/dist/fields/rich-text/component/RichTextInline.svelte.d.ts +11 -0
  229. package/dist/fields/rich-text/component/bubble-menu/bubble-menu.css +4 -3
  230. package/dist/fields/rich-text/component/bubble-menu/bubble-menu.svelte +3 -1
  231. package/dist/fields/rich-text/component/bubble-menu/icon-button/icon-button.css +2 -2
  232. package/dist/fields/rich-text/component/bubble-menu/node-selector/node-selector.css +7 -10
  233. package/dist/fields/rich-text/component/drag-handle/drag-handle.css +0 -2
  234. package/dist/fields/rich-text/component/styles/editor.css +111 -0
  235. package/dist/fields/rich-text/component/styles/field.css +71 -0
  236. package/dist/fields/rich-text/component/suggestion/suggestion.svelte +41 -56
  237. package/dist/fields/rich-text/core/build-editor-config.js +1 -1
  238. package/dist/fields/rich-text/core/extensions/drag-handle/drag-handle-plugin.js +29 -3
  239. package/dist/fields/rich-text/core/extensions/drag-handle/drag-handle.d.ts +1 -0
  240. package/dist/fields/rich-text/core/extensions/drag-handle/drag-handle.js +2 -1
  241. package/dist/fields/rich-text/core/features/fields/fields.css +2 -3
  242. package/dist/fields/rich-text/core/features/hr/hr.css +4 -4
  243. package/dist/fields/rich-text/core/features/link/component/link-selector.css +0 -4
  244. package/dist/fields/rich-text/core/features/link/component/link-selector.svelte +24 -8
  245. package/dist/fields/rich-text/core/features/resource/resource-extension.js +3 -3
  246. package/dist/fields/rich-text/core/features/resource/resource.svelte +21 -7
  247. package/dist/fields/rich-text/core/features/upload/upload-extension.js +3 -4
  248. package/dist/fields/rich-text/core/features/upload/upload.svelte +21 -9
  249. package/dist/fields/rich-text/core/rich-text-editor-core.svelte +103 -0
  250. package/dist/fields/rich-text/core/rich-text-editor-core.svelte.d.ts +15 -0
  251. package/dist/fields/rich-text/index.d.ts +0 -17
  252. package/dist/fields/rich-text/index.js +0 -44
  253. package/dist/fields/rich-text/json.d.ts +18 -0
  254. package/dist/fields/rich-text/json.js +44 -0
  255. package/dist/fields/select/component/Select.svelte +67 -28
  256. package/dist/fields/slug/component/Slug.svelte +26 -53
  257. package/dist/fields/slug/index.d.ts +1 -0
  258. package/dist/fields/slug/index.js +1 -1
  259. package/dist/fields/tabs/component/Tabs.svelte +28 -22
  260. package/dist/fields/tabs/index.d.ts +4 -1
  261. package/dist/fields/tabs/index.js +17 -5
  262. package/dist/fields/text/index.d.ts +1 -0
  263. package/dist/fields/textarea/component/TextArea.svelte +28 -13
  264. package/dist/fields/textarea/index.d.ts +1 -0
  265. package/dist/fields/time/component/Time.svelte +9 -2
  266. package/dist/fields/toggle/component/Toggle.svelte +8 -25
  267. package/dist/fields/toggle/component/Toggle.svelte.d.ts +1 -0
  268. package/dist/fields/toggle/index.d.ts +1 -0
  269. package/dist/fields/tree/component/AddItemButton.svelte +18 -5
  270. package/dist/fields/tree/component/Tree.svelte +48 -19
  271. package/dist/fields/tree/component/TreeBlock.svelte +318 -104
  272. package/dist/fields/tree/component/TreeBlockActions.svelte +71 -7
  273. package/dist/fields/tree/component/TreeBlockActions.svelte.d.ts +4 -0
  274. package/dist/fields/tree/component/props.d.ts +2 -1
  275. package/dist/fields/tree/index.d.ts +13 -1
  276. package/dist/fields/tree/index.js +35 -9
  277. package/dist/fields/types.d.ts +3 -1
  278. package/dist/index.d.ts +2 -8
  279. package/dist/index.js +2 -6
  280. package/dist/{panel/components/sections/live → live}/Consumer.svelte +2 -2
  281. package/dist/{panel/components/sections/live → live}/Consumer.svelte.d.ts +1 -1
  282. package/dist/{panel/components/sections/live → live}/LiveEdit.svelte +3 -3
  283. package/dist/{panel/components/sections/live → live}/Provider.svelte +1 -1
  284. package/dist/{panel/context/live.svelte.d.ts → live/context.svelte.d.ts} +1 -1
  285. package/dist/{panel/context/live.svelte.js → live/context.svelte.js} +3 -74
  286. package/dist/panel/components/Root.svelte +16 -44
  287. package/dist/panel/components/Root.svelte.d.ts +1 -1
  288. package/dist/panel/components/fields/Error.svelte +18 -3
  289. package/dist/panel/components/fields/FieldsPreview.svelte +30 -17
  290. package/dist/panel/components/fields/FieldsPreviewTrigger.svelte +25 -3
  291. package/dist/panel/components/fields/Hint.svelte +51 -8
  292. package/dist/panel/components/fields/Hint.svelte.d.ts +11 -0
  293. package/dist/panel/components/fields/Label.svelte +2 -0
  294. package/dist/panel/components/fields/LabelFor.svelte +7 -2
  295. package/dist/panel/components/fields/RenderFields.svelte +10 -3
  296. package/dist/panel/components/fields/fieldset.svelte.d.ts +4 -1
  297. package/dist/panel/components/fields/fieldset.svelte.js +9 -2
  298. package/dist/panel/components/fields/index.d.ts +1 -0
  299. package/dist/panel/components/fields/setting.css +82 -0
  300. package/dist/panel/components/sections/auth/AuthForm.svelte +25 -26
  301. package/dist/panel/components/sections/collection/Avatar.svelte +61 -0
  302. package/dist/panel/components/sections/collection/Avatar.svelte.d.ts +9 -0
  303. package/dist/panel/components/sections/collection/DocStatus.svelte +28 -0
  304. package/dist/panel/components/sections/collection/DocStatus.svelte.d.ts +7 -0
  305. package/dist/panel/components/sections/collection/Empty.svelte +3 -3
  306. package/dist/panel/components/sections/collection/StatusDot.svelte +7 -5
  307. package/dist/panel/components/sections/collection/When.svelte +33 -0
  308. package/dist/panel/components/sections/collection/When.svelte.d.ts +8 -0
  309. package/dist/panel/components/sections/collection/bulk-upload/BulkUploadDialog.svelte +65 -21
  310. package/dist/panel/components/sections/collection/bulk-upload/BulkUploadDialog.svelte.d.ts +3 -2
  311. package/dist/panel/components/sections/collection/bulk-upload/DropZone.svelte +45 -162
  312. package/dist/panel/components/sections/collection/bulk-upload/DropZone.svelte.d.ts +3 -2
  313. package/dist/panel/components/sections/collection/bulk-upload/FileDrop.svelte +151 -0
  314. package/dist/panel/components/sections/collection/bulk-upload/FileDrop.svelte.d.ts +17 -0
  315. package/dist/panel/components/sections/collection/bulk-upload/PageDrop.svelte +177 -0
  316. package/dist/panel/components/sections/collection/bulk-upload/PageDrop.svelte.d.ts +12 -0
  317. package/dist/panel/components/sections/collection/bulk-upload/UploadProgress.svelte +75 -0
  318. package/dist/panel/components/sections/collection/bulk-upload/UploadProgress.svelte.d.ts +8 -0
  319. package/dist/panel/components/sections/collection/folder/Folder.svelte +18 -3
  320. package/dist/panel/components/sections/collection/folder/FolderEdit.svelte +26 -18
  321. package/dist/panel/components/sections/collection/folder/FolderWithActions.svelte +98 -58
  322. package/dist/panel/components/sections/collection/folder/FolderWithActions.svelte.d.ts +0 -1
  323. package/dist/panel/components/sections/collection/folder/Folders.svelte +60 -0
  324. package/dist/panel/components/sections/collection/folder/Folders.svelte.d.ts +7 -0
  325. package/dist/panel/components/sections/collection/grid/CollectionGrid.svelte +31 -71
  326. package/dist/panel/components/sections/collection/grid/CollectionGrid.svelte.d.ts +1 -0
  327. package/dist/panel/components/sections/collection/grid/create-directory-dialog/CreateDirectoryDialog.svelte +5 -3
  328. package/dist/panel/components/sections/collection/grid/grid-item/GridItem.svelte +250 -37
  329. package/dist/panel/components/sections/collection/grid/grid-item/GridItem.svelte.d.ts +2 -0
  330. package/dist/panel/components/sections/collection/header/ButtonCreate.svelte +43 -18
  331. package/dist/panel/components/sections/collection/header/ButtonCreate.svelte.d.ts +6 -4
  332. package/dist/panel/components/sections/collection/header/DisplayMode.svelte +69 -58
  333. package/dist/panel/components/sections/collection/header/DisplayMode.svelte.d.ts +0 -1
  334. package/dist/panel/components/sections/collection/header/FilterMenu.svelte +60 -0
  335. package/dist/panel/components/sections/collection/header/FilterMenu.svelte.d.ts +14 -0
  336. package/dist/panel/components/sections/collection/header/SearchInput.svelte +17 -26
  337. package/dist/panel/components/sections/collection/header/SelectUI.svelte +19 -34
  338. package/dist/panel/components/sections/collection/list/CollectionList.svelte +99 -68
  339. package/dist/panel/components/sections/collection/list/columns.d.ts +21 -0
  340. package/dist/panel/components/sections/collection/list/columns.js +23 -0
  341. package/dist/panel/components/sections/collection/list/header/Header.svelte +99 -51
  342. package/dist/panel/components/sections/collection/list/row/Row.svelte +165 -82
  343. package/dist/panel/components/sections/collection/list/row/Row.svelte.d.ts +4 -0
  344. package/dist/panel/components/sections/collection/tree/CollectionTree.svelte +92 -44
  345. package/dist/panel/components/sections/collection/tree/CollectionTree.svelte.d.ts +1 -0
  346. package/dist/panel/components/sections/collection/tree/CollectionTreeNode.svelte +139 -43
  347. package/dist/panel/components/sections/collection/tree/CollectionTreeNode.svelte.d.ts +2 -0
  348. package/dist/panel/components/sections/collection/upload-thumb-cell/UploadThumbCell.svelte +1 -1
  349. package/dist/panel/components/sections/commands/CommandButton.svelte +99 -0
  350. package/dist/panel/components/sections/commands/CommandButton.svelte.d.ts +10 -0
  351. package/dist/panel/components/sections/commands/CommandPalette.svelte +275 -0
  352. package/dist/panel/components/sections/commands/CommandPalette.svelte.d.ts +8 -0
  353. package/dist/panel/components/sections/commands/Commands.svelte +18 -0
  354. package/dist/panel/components/sections/commands/Commands.svelte.d.ts +9 -0
  355. package/dist/panel/components/sections/document/AuthAPIKeyDialog.svelte +23 -7
  356. package/dist/panel/components/sections/document/AuthFooter.svelte +31 -12
  357. package/dist/panel/components/sections/document/AutoSaveBanner.svelte +24 -7
  358. package/dist/panel/components/sections/document/ButtonSave.svelte +32 -21
  359. package/dist/panel/components/sections/document/ButtonSave.svelte.d.ts +5 -5
  360. package/dist/panel/components/sections/document/ButtonStatus.svelte +68 -20
  361. package/dist/panel/components/sections/document/ChangeSlugDialog.svelte +199 -0
  362. package/dist/panel/components/sections/document/ChangeSlugDialog.svelte.d.ts +10 -0
  363. package/dist/panel/components/sections/document/CurrentlyEdited.svelte +2 -2
  364. package/dist/panel/components/sections/document/Document.svelte +96 -65
  365. package/dist/panel/components/sections/document/DocumentChildren.svelte +175 -0
  366. package/dist/panel/components/sections/document/DocumentChildren.svelte.d.ts +8 -0
  367. package/dist/panel/components/sections/document/DocumentUrl.svelte +119 -0
  368. package/dist/panel/components/sections/document/DocumentUrl.svelte.d.ts +9 -0
  369. package/dist/panel/components/sections/document/Header.svelte +171 -94
  370. package/dist/panel/components/sections/document/Settings.svelte +255 -110
  371. package/dist/panel/components/sections/document/Settings.svelte.d.ts +0 -1
  372. package/dist/panel/components/sections/document/Versions.svelte +5 -3
  373. package/dist/panel/components/sections/document/upload-header/UploadHeader.svelte +112 -53
  374. package/dist/panel/components/sections/document/upload-header/UploadHeader.svelte.d.ts +2 -2
  375. package/dist/panel/components/sections/document/upload-header/drop-zone/DropZone.svelte +74 -41
  376. package/dist/panel/components/sections/live/LiveFloatingUI.svelte +30 -11
  377. package/dist/panel/components/sections/live/live-edit-panel.css +2 -2
  378. package/dist/panel/components/sections/page-layout/Page.svelte +13 -1
  379. package/dist/panel/components/ui/breadcrumb/BreadCrumb.svelte +55 -27
  380. package/dist/panel/components/ui/button/button.svelte +81 -54
  381. package/dist/panel/components/ui/button/index.d.ts +7 -3
  382. package/dist/panel/components/ui/button/index.js +2 -2
  383. package/dist/panel/components/ui/calendar/calendar.css +27 -27
  384. package/dist/panel/components/ui/card/card-description.svelte +1 -1
  385. package/dist/panel/components/ui/card/card.svelte +21 -4
  386. package/dist/panel/components/ui/card-document/card-document.svelte +24 -12
  387. package/dist/panel/components/ui/card-resource/card-resource.svelte +26 -8
  388. package/dist/panel/components/ui/checkbox/checkbox.css +8 -10
  389. package/dist/panel/components/ui/checkbox/checkbox.svelte.d.ts +1 -1
  390. package/dist/panel/components/ui/command/command-dialog.css +28 -4
  391. package/dist/panel/components/ui/command/command-dialog.svelte +4 -1
  392. package/dist/panel/components/ui/command/command-dialog.svelte.d.ts +2 -0
  393. package/dist/panel/components/ui/command/command-empty.css +1 -1
  394. package/dist/panel/components/ui/command/command-group.css +3 -3
  395. package/dist/panel/components/ui/command/command-input-select.svelte +3 -3
  396. package/dist/panel/components/ui/command/command-input.svelte +38 -14
  397. package/dist/panel/components/ui/command/command-input.svelte.d.ts +6 -1
  398. package/dist/panel/components/ui/command/command-item.css +2 -2
  399. package/dist/panel/components/ui/command/command-list.css +1 -1
  400. package/dist/panel/components/ui/command/command-separator.css +1 -1
  401. package/dist/panel/components/ui/context-menu/context-menu-item.css +2 -2
  402. package/dist/panel/components/ui/context-menu/context-menu.css +6 -7
  403. package/dist/panel/components/ui/dialog/dialog-content.css +8 -10
  404. package/dist/panel/components/ui/dialog/dialog-content.svelte +19 -0
  405. package/dist/panel/components/ui/dialog/dialog-description.css +1 -1
  406. package/dist/panel/components/ui/dialog/dialog-footer.svelte +5 -1
  407. package/dist/panel/components/ui/dialog/dialog-overlay.css +1 -1
  408. package/dist/panel/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +19 -5
  409. package/dist/panel/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte.d.ts +1 -1
  410. package/dist/panel/components/ui/dropdown-menu/dropdown-menu-content.css +6 -4
  411. package/dist/panel/components/ui/dropdown-menu/dropdown-menu-item.css +1 -1
  412. package/dist/panel/components/ui/dropdown-menu/dropdown-menu-radio-item.css +1 -1
  413. package/dist/panel/components/ui/dropdown-menu/dropdown-menu-separator.css +1 -1
  414. package/dist/panel/components/ui/input/input.svelte +57 -31
  415. package/dist/panel/components/ui/kbd/Kbd.svelte +90 -0
  416. package/dist/panel/components/ui/kbd/Kbd.svelte.d.ts +11 -0
  417. package/dist/panel/components/ui/kbd/index.d.ts +1 -0
  418. package/dist/panel/components/ui/kbd/index.js +1 -0
  419. package/dist/panel/components/ui/label/label.css +5 -3
  420. package/dist/panel/components/ui/language-switcher/LanguageSwitcher.svelte +27 -15
  421. package/dist/panel/components/ui/nav/Nav.svelte +180 -110
  422. package/dist/panel/components/ui/nav/Nav.svelte.d.ts +0 -2
  423. package/dist/panel/components/ui/nav/NavGroup.svelte +87 -73
  424. package/dist/panel/components/ui/nav/NavItemButton.svelte +69 -29
  425. package/dist/panel/components/ui/nav/UserButton.svelte +132 -71
  426. package/dist/panel/components/ui/page-header/PageHeader.svelte +140 -42
  427. package/dist/panel/components/ui/page-header/PageHeader.svelte.d.ts +8 -1
  428. package/dist/panel/components/ui/popover/popover-content.css +4 -3
  429. package/dist/panel/components/ui/radio-group/radio-group.css +4 -6
  430. package/dist/panel/components/ui/radio-row-group/radio-row-group.css +19 -7
  431. package/dist/panel/components/ui/scroll-area/scroll-area.css +2 -2
  432. package/dist/panel/components/ui/separator/separator.svelte +1 -1
  433. package/dist/panel/components/ui/sheet/index.d.ts +4 -4
  434. package/dist/panel/components/ui/sheet/index.js +5 -5
  435. package/dist/panel/components/ui/sheet/sheet.css +50 -11
  436. package/dist/panel/components/ui/sonner/sonner.css +11 -8
  437. package/dist/panel/components/ui/switch/switch.css +13 -18
  438. package/dist/panel/components/ui/switch/switch.svelte.d.ts +1 -1
  439. package/dist/panel/components/ui/tabs/tabs.css +44 -35
  440. package/dist/panel/components/ui/tag/tag.svelte +20 -6
  441. package/dist/panel/components/ui/tooltip/tooltip-content.svelte +14 -4
  442. package/dist/panel/components/ui/tree/tree-rows.css +146 -0
  443. package/dist/panel/context/blocks-ops.d.ts +78 -0
  444. package/dist/panel/context/blocks-ops.js +170 -0
  445. package/dist/panel/context/collection.svelte.d.ts +28 -0
  446. package/dist/panel/context/collection.svelte.js +120 -65
  447. package/dist/panel/context/commands.svelte.d.ts +80 -0
  448. package/dist/panel/context/commands.svelte.js +108 -0
  449. package/dist/panel/context/config.svelte.d.ts +2 -2
  450. package/dist/panel/context/documentForm.svelte.d.ts +34 -2
  451. package/dist/panel/context/documentForm.svelte.js +106 -103
  452. package/dist/panel/context/nav.svelte.d.ts +23 -0
  453. package/dist/panel/context/nav.svelte.js +56 -0
  454. package/dist/panel/fonts/Geist-VariableFont_wght.ttf +0 -0
  455. package/dist/panel/fonts/GeistMono-VariableFont_wght.ttf +0 -0
  456. package/dist/panel/index.d.ts +7 -4
  457. package/dist/panel/index.js +11 -5
  458. package/dist/panel/pages/auth/forgot-password/ForgotPassword.svelte +16 -1
  459. package/dist/panel/pages/collection/CollectionPage.svelte +236 -61
  460. package/dist/panel/pages/collection/load.server.js +1 -1
  461. package/dist/panel/pages/dashboard/Dashboard.svelte +135 -90
  462. package/dist/panel/pages/dashboard/DashboardCard.svelte +109 -0
  463. package/dist/panel/pages/dashboard/DashboardCard.svelte.d.ts +14 -0
  464. package/dist/panel/pages/dashboard/DashboardCollection.svelte +180 -57
  465. package/dist/panel/pages/dashboard/DashboardCollection.svelte.d.ts +1 -0
  466. package/dist/panel/pages/dashboard/DashboardRow.svelte +93 -0
  467. package/dist/panel/pages/dashboard/DashboardRow.svelte.d.ts +16 -0
  468. package/dist/panel/pages/dashboard/load.server.js +49 -25
  469. package/dist/panel/pages/dashboard/time.d.ts +19 -0
  470. package/dist/panel/pages/dashboard/time.js +29 -0
  471. package/dist/panel/pages/dashboard/types.d.ts +9 -2
  472. package/dist/panel/pages/live/Live.svelte +53 -50
  473. package/dist/panel/public.d.ts +4 -0
  474. package/dist/panel/public.js +6 -0
  475. package/dist/panel/style/font.css +21 -32
  476. package/dist/panel/style/index.css +191 -122
  477. package/dist/panel/style/mixins/index.css +14 -0
  478. package/dist/panel/style/palette.css +35 -26
  479. package/dist/panel/style/postcss/size-function.d.ts +4 -0
  480. package/dist/panel/style/postcss/size-function.js +24 -0
  481. package/dist/panel/style/radius.css +4 -5
  482. package/dist/panel/style/scheme.css +111 -0
  483. package/dist/panel/style/size.css +3 -0
  484. package/dist/panel/util/Sortable.js +9 -4
  485. package/dist/panel/util/keys.d.ts +24 -0
  486. package/dist/panel/util/keys.js +63 -0
  487. package/dist/panel/util/time.d.ts +12 -0
  488. package/dist/panel/util/time.js +35 -0
  489. package/dist/panel/util/upload-file.d.ts +106 -0
  490. package/dist/panel/util/upload-file.js +165 -0
  491. package/dist/public.d.ts +13 -0
  492. package/dist/public.js +12 -0
  493. package/dist/util/index.d.ts +7 -10
  494. package/dist/util/index.js +7 -8
  495. package/dist/util/object.d.ts +10 -0
  496. package/dist/util/object.js +22 -1
  497. package/dist/util/string.d.ts +17 -0
  498. package/dist/util/string.js +23 -0
  499. package/package.json +12 -8
  500. package/dist/core/pipeline/config-map/build-tree-map.d.ts +0 -4
  501. package/dist/core/pipeline/config-map/build-tree-map.js +0 -30
  502. package/dist/core/prototype/doc.d.ts +0 -31
  503. package/dist/core/prototype/doc.js +0 -118
  504. package/dist/core/prototype/shared/url/augment.d.ts +0 -13
  505. package/dist/core/prototype/shared/url/augment.js +0 -11
  506. package/dist/core/prototype/shared/url/hooks/populate-url.server.d.ts +0 -4
  507. package/dist/core/prototype/shared/url/hooks/populate-url.server.js +0 -120
  508. package/dist/fields/relation/client.d.ts +0 -28
  509. package/dist/fields/relation/client.js +0 -37
  510. package/dist/fields/rich-text/component/styles/rich-text.css +0 -183
  511. package/dist/panel/components/sections/collection/header/Header.svelte +0 -17
  512. package/dist/panel/components/sections/collection/header/Header.svelte.d.ts +0 -3
  513. package/dist/panel/components/sections/collection/header/Separator.svelte +0 -8
  514. package/dist/panel/components/sections/collection/header/Separator.svelte.d.ts +0 -26
  515. package/dist/panel/components/sections/collection/tree/util.d.ts +0 -12
  516. package/dist/panel/components/sections/collection/tree/util.js +0 -22
  517. package/dist/panel/fonts/ChivoMono-Italic-VariableFont_wght.ttf +0 -0
  518. package/dist/panel/fonts/ChivoMono-VariableFont_wght.ttf +0 -0
  519. package/dist/panel/fonts/Inter-VariableFont_slnt,wght.ttf +0 -0
  520. package/dist/panel/fonts/Lora-Italic-VariableFont_wght.ttf +0 -0
  521. package/dist/panel/fonts/Lora-VariableFont_wght.ttf +0 -0
  522. package/dist/panel/style/shadow.css +0 -10
  523. package/dist/util/path.d.ts +0 -16
  524. package/dist/util/path.js +0 -19
  525. /package/dist/{panel/components/sections/live → live}/LiveEdit.svelte.d.ts +0 -0
  526. /package/dist/{panel/components/sections/live → live}/Provider.svelte.d.ts +0 -0
@@ -1,5 +1,4 @@
1
1
  import { FormFieldBuilder } from '../../core/fields/builders/form-field-builder.js';
2
- import { hasProps, isObjectLiteral } from '../../util/object.js';
3
2
  import { capitalize } from '../../util/string.js';
4
3
  import { ensureRelationExists } from 'rimecms/fields/relation/module';
5
4
  import dedent from 'dedent';
@@ -60,69 +59,3 @@ export class RelationFieldBuilder extends FormFieldBuilder {
60
59
  }
61
60
  }
62
61
  export const relation = (name) => new RelationFieldBuilder(name);
63
- /**
64
- * Checks if a relation value is resolved (contains the actual referenced document).
65
- *
66
- * @example
67
- * // Returns true for a resolved relation
68
- * isRelationResolved({ title: 'Home Page', _prototype: 'collection', _type: 'pages' });
69
- */
70
- export const isRelationResolved = (value) => {
71
- return value && isObjectLiteral(value) && hasProps(['title', '_prototype', '_type'], value);
72
- };
73
- /**
74
- * Checks if a relation value is a reference (contains only the relationTo and documentId).
75
- *
76
- * @example
77
- * // Returns true for a relation reference
78
- * isRelationRef({ relationTo: 'pages', documentId: '123' });
79
- */
80
- export const isRelationRef = (value) => typeof value === 'object' &&
81
- value !== null &&
82
- typeof value.relationTo === 'string' &&
83
- typeof value.documentId === 'string';
84
- /**
85
- * Checks if a relation value is unresolved (contains only reference information).
86
- *
87
- * @example
88
- * // Returns true for an unresolved relation
89
- * isRelationUnresolved({ relationTo: 'pages', documentId: '123' });
90
- */
91
- export const isRelationUnresolved = (value) => {
92
- return value && isObjectLiteral(value) && hasProps(['relationTo', 'documentId'], value);
93
- };
94
- /**
95
- * Resolves a relation reference to the actual document it points to.
96
- *
97
- * @example
98
- * // Resolves a relation reference to the actual document
99
- * const doc = await resolveRelationRef({ relationTo: 'pages', documentId: '123' });
100
- */
101
- export async function resolveRelationRef(item) {
102
- if (isRelationRef(item)) {
103
- return fetch(`api/${item.relationTo}/${item.documentId}`)
104
- .then((r) => r.json())
105
- .then((r) => r.doc);
106
- }
107
- if (typeof item === 'string') {
108
- throw new Error(`Cannot resolve relation from a bare id ("${item}") — missing "relationTo". ` +
109
- `resolveRelationRef only works on populated docs or { relationTo, documentId } objects.`);
110
- }
111
- if (isRelationResolved(item)) {
112
- return item;
113
- }
114
- throw new Error(`Unrecognized relation shape: ${JSON.stringify(item)}`);
115
- }
116
- /**
117
- * Resolves a relation field value to the actual documents it points to.
118
- *
119
- * @example
120
- * // Resolves a relation value to the actual documents
121
- * const docs = await resolveRelation([{ relationTo: 'pages', documentId: '123' }]);
122
- */
123
- export async function resolveRelation(value) {
124
- if (value === null || value === undefined)
125
- return value;
126
- const items = Array.isArray(value) ? value : [value];
127
- return Promise.all(items.map((item) => resolveRelationRef(item)));
128
- }
@@ -9,9 +9,15 @@ import { toKebabCase } from '../../util/string.js';
9
9
  export const ensureRelationExists = async (value, { config }) => {
10
10
  const output = [];
11
11
  const retrieveRelation = async (id) => {
12
+ // Forward auth, not the incoming body's headers: Bun's fetch keeps a `content-length` on a
13
+ // bodiless GET (Node's drops it), and the server then waits for a body that never comes.
14
+ const headers = new Headers(getRequestEvent().request.headers);
15
+ for (const name of ['content-length', 'content-type', 'transfer-encoding']) {
16
+ headers.delete(name);
17
+ }
12
18
  const [err, response] = await trycatchFetch(`${env.PUBLIC_RIME_URL}/api/${toKebabCase(config.relationTo)}/${id}?${PARAMS.SELECT}=id`, {
13
19
  method: 'GET',
14
- headers: getRequestEvent().request.headers
20
+ headers
15
21
  });
16
22
  if (err)
17
23
  return null;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Relations and resource links resolved at depth 1, the shape the API answers with.
3
+ * A resolved document is returned as is; a relation that cannot be fetched stays a reference.
4
+ */
5
+ export declare function populate<T>(value: T): Promise<T>;
6
+ export declare namespace populate {
7
+ var clear: () => void;
8
+ }
@@ -0,0 +1,49 @@
1
+ import { API_PREFIX } from '../../core/routes/constants.js';
2
+ import { isObjectLiteral } from '../../util/object.js';
3
+ import { toKebabCase } from '../../util/string.js';
4
+ const cache = new Map();
5
+ /** One request per document for the page's life. */
6
+ function fetchDoc(slug, id) {
7
+ const key = `${slug}/${id}`;
8
+ if (!cache.has(key)) {
9
+ const url = `${API_PREFIX}/${toKebabCase(slug)}/${id}?depth=1`;
10
+ cache.set(key, fetch(url)
11
+ .then((response) => response.json())
12
+ .then((response) => response?.doc ?? null)
13
+ .catch((error) => {
14
+ console.error(error);
15
+ return null;
16
+ }));
17
+ }
18
+ return cache.get(key);
19
+ }
20
+ const isLink = (value) => 'value' in value &&
21
+ 'target' in value &&
22
+ 'type' in value &&
23
+ !['url', 'email', 'tel', 'anchor'].includes(value.type);
24
+ const isRelation = (value) => 'documentId' in value && 'relationTo' in value;
25
+ /**
26
+ * Relations and resource links resolved at depth 1, the shape the API answers with.
27
+ * A resolved document is returned as is; a relation that cannot be fetched stays a reference.
28
+ */
29
+ export async function populate(value) {
30
+ if (Array.isArray(value)) {
31
+ return Promise.all(value.map((item) => populate(item)));
32
+ }
33
+ if (!isObjectLiteral(value))
34
+ return value;
35
+ if (isLink(value)) {
36
+ if (!value.type || !value.value)
37
+ return value;
38
+ const doc = await fetchDoc(value.type, value.value);
39
+ return doc?.url ? { ...value, url: doc.url } : value;
40
+ }
41
+ if (isRelation(value)) {
42
+ if ('livePreview' in value)
43
+ return value.livePreview;
44
+ return ((await fetchDoc(value.relationTo, value.documentId)) ?? value);
45
+ }
46
+ const entries = await Promise.all(Object.entries(value).map(async ([key, item]) => [key, await populate(item)]));
47
+ return Object.fromEntries(entries);
48
+ }
49
+ populate.clear = () => cache.clear();
@@ -0,0 +1,69 @@
1
+ import type { RelationRef, RelationValue } from '../types.js';
2
+ import type { Relation } from './index.js';
3
+ /**
4
+ * Checks if a relation field's value is populated with full documents.
5
+ *
6
+ * A relation is considered populated if it is an array of objects that do not
7
+ * contain only the relation identifiers (`id`, `relationTo`, `documentId`).
8
+ * If the value is a string or an array of relation identifier objects,
9
+ * it is considered not populated.
10
+ *
11
+ * @example
12
+ * // Returns: false
13
+ * isRelationPopulated('7674e91b-598a-4a72-a5cd-9594736a34dd');
14
+ *
15
+ * @example
16
+ * // Returns: false
17
+ * isRelationPopulated([]);
18
+ *
19
+ * @example
20
+ * // Returns: false
21
+ * isRelationPopulated([
22
+ * {
23
+ * id: '7674e91b-598a-4a72-a5cd-9594736a34dd',
24
+ * relationTo: 'articles',
25
+ * documentId: 'b674e91b-598a-4a72-a5cd-9594736a34dd'
26
+ * }
27
+ * ]);
28
+ */
29
+ export declare const isRelationPopulated: <T>(value: RelationValue<T>) => value is T[];
30
+ /**
31
+ * Checks if a relation value is resolved (contains the actual referenced document).
32
+ *
33
+ * @example
34
+ * // Returns true for a resolved relation
35
+ * isRelationResolved({ title: 'Home Page', _prototype: 'collection', _type: 'pages' });
36
+ */
37
+ export declare const isRelationResolved: <T>(value: any) => value is T;
38
+ /**
39
+ * Checks if a relation value is a reference (contains only the relationTo and documentId).
40
+ *
41
+ * @example
42
+ * // Returns true for a relation reference
43
+ * isRelationRef({ relationTo: 'pages', documentId: '123' });
44
+ */
45
+ export declare const isRelationRef: (value: unknown) => value is RelationRef;
46
+ /**
47
+ * Checks if a relation value is unresolved (contains only reference information).
48
+ *
49
+ * @example
50
+ * // Returns true for an unresolved relation
51
+ * isRelationUnresolved({ relationTo: 'pages', documentId: '123' });
52
+ */
53
+ export declare const isRelationUnresolved: (value: any) => value is Omit<Relation, "path" | "position" | "ownerId">;
54
+ /**
55
+ * Resolves a relation reference to the actual document it points to.
56
+ *
57
+ * @example
58
+ * // Resolves a relation reference to the actual document
59
+ * const doc = await resolveRelationRef({ relationTo: 'pages', documentId: '123' });
60
+ */
61
+ export declare function resolveRelationRef<T>(item: T | RelationRef | string): Promise<T>;
62
+ /**
63
+ * Resolves a relation field value to the actual documents it points to.
64
+ *
65
+ * @example
66
+ * // Resolves a relation value to the actual documents
67
+ * const docs = await resolveRelation([{ relationTo: 'pages', documentId: '123' }]);
68
+ */
69
+ export declare function resolveRelation<T>(value: RelationValue<T> | null | undefined): Promise<T[] | null | undefined>;
@@ -0,0 +1,103 @@
1
+ import { hasProps, isObjectLiteral } from '../../util/object.js';
2
+ /**
3
+ * Checks if a relation field's value is populated with full documents.
4
+ *
5
+ * A relation is considered populated if it is an array of objects that do not
6
+ * contain only the relation identifiers (`id`, `relationTo`, `documentId`).
7
+ * If the value is a string or an array of relation identifier objects,
8
+ * it is considered not populated.
9
+ *
10
+ * @example
11
+ * // Returns: false
12
+ * isRelationPopulated('7674e91b-598a-4a72-a5cd-9594736a34dd');
13
+ *
14
+ * @example
15
+ * // Returns: false
16
+ * isRelationPopulated([]);
17
+ *
18
+ * @example
19
+ * // Returns: false
20
+ * isRelationPopulated([
21
+ * {
22
+ * id: '7674e91b-598a-4a72-a5cd-9594736a34dd',
23
+ * relationTo: 'articles',
24
+ * documentId: 'b674e91b-598a-4a72-a5cd-9594736a34dd'
25
+ * }
26
+ * ]);
27
+ */
28
+ export const isRelationPopulated = (value) => {
29
+ if (Array.isArray(value)) {
30
+ if (value.length === 0)
31
+ return false;
32
+ return value.every((v) => {
33
+ return isObjectLiteral(v) && !hasProps(['id', 'relationTo', 'documentId'], v);
34
+ });
35
+ }
36
+ return typeof value !== 'string';
37
+ };
38
+ /**
39
+ * Checks if a relation value is resolved (contains the actual referenced document).
40
+ *
41
+ * @example
42
+ * // Returns true for a resolved relation
43
+ * isRelationResolved({ title: 'Home Page', _prototype: 'collection', _type: 'pages' });
44
+ */
45
+ export const isRelationResolved = (value) => {
46
+ return value && isObjectLiteral(value) && hasProps(['title', '_prototype', '_type'], value);
47
+ };
48
+ /**
49
+ * Checks if a relation value is a reference (contains only the relationTo and documentId).
50
+ *
51
+ * @example
52
+ * // Returns true for a relation reference
53
+ * isRelationRef({ relationTo: 'pages', documentId: '123' });
54
+ */
55
+ export const isRelationRef = (value) => typeof value === 'object' &&
56
+ value !== null &&
57
+ typeof value.relationTo === 'string' &&
58
+ typeof value.documentId === 'string';
59
+ /**
60
+ * Checks if a relation value is unresolved (contains only reference information).
61
+ *
62
+ * @example
63
+ * // Returns true for an unresolved relation
64
+ * isRelationUnresolved({ relationTo: 'pages', documentId: '123' });
65
+ */
66
+ export const isRelationUnresolved = (value) => {
67
+ return value && isObjectLiteral(value) && hasProps(['relationTo', 'documentId'], value);
68
+ };
69
+ /**
70
+ * Resolves a relation reference to the actual document it points to.
71
+ *
72
+ * @example
73
+ * // Resolves a relation reference to the actual document
74
+ * const doc = await resolveRelationRef({ relationTo: 'pages', documentId: '123' });
75
+ */
76
+ export async function resolveRelationRef(item) {
77
+ if (isRelationRef(item)) {
78
+ return fetch(`api/${item.relationTo}/${item.documentId}`)
79
+ .then((r) => r.json())
80
+ .then((r) => r.doc);
81
+ }
82
+ if (typeof item === 'string') {
83
+ throw new Error(`Cannot resolve relation from a bare id ("${item}") — missing "relationTo". ` +
84
+ `resolveRelationRef only works on populated docs or { relationTo, documentId } objects.`);
85
+ }
86
+ if (isRelationResolved(item)) {
87
+ return item;
88
+ }
89
+ throw new Error(`Unrecognized relation shape: ${JSON.stringify(item)}`);
90
+ }
91
+ /**
92
+ * Resolves a relation field value to the actual documents it points to.
93
+ *
94
+ * @example
95
+ * // Resolves a relation value to the actual documents
96
+ * const docs = await resolveRelation([{ relationTo: 'pages', documentId: '123' }]);
97
+ */
98
+ export async function resolveRelation(value) {
99
+ if (value === null || value === undefined)
100
+ return value;
101
+ const items = Array.isArray(value) ? value : [value];
102
+ return Promise.all(items.map((item) => resolveRelationRef(item)));
103
+ }
@@ -0,0 +1,25 @@
1
+ import type { GenericDoc } from '../../core/prototype/types.js';
2
+ import type { Relation } from './index.js';
3
+ /** A related document as the field holds it before it is written: its id, and its row if any. */
4
+ export type RelationItem = {
5
+ documentId: string;
6
+ id?: string;
7
+ livePreview?: GenericDoc;
8
+ };
9
+ /**
10
+ * The value a relation field writes for these documents, in this order.
11
+ *
12
+ * ```ts
13
+ * toRelationValue([{ documentId: 'a' }, { documentId: 'b', id: 'r1' }], { relationTo: 'medias', path: 'photos' })
14
+ * // [{ relationTo: 'medias', path: 'photos', position: 0, documentId: 'a' },
15
+ * // { id: 'r1', relationTo: 'medias', path: 'photos', position: 1, documentId: 'b' }]
16
+ * ```
17
+ *
18
+ * `locale` is set on a localized field; `livePreview` rides along in a live-edit form.
19
+ */
20
+ export declare function toRelationValue(items: RelationItem[], args: {
21
+ relationTo: string;
22
+ path: string;
23
+ locale?: string;
24
+ live?: boolean;
25
+ }): Omit<Relation, 'ownerId'>[];
@@ -0,0 +1,27 @@
1
+ /**
2
+ * The value a relation field writes for these documents, in this order.
3
+ *
4
+ * ```ts
5
+ * toRelationValue([{ documentId: 'a' }, { documentId: 'b', id: 'r1' }], { relationTo: 'medias', path: 'photos' })
6
+ * // [{ relationTo: 'medias', path: 'photos', position: 0, documentId: 'a' },
7
+ * // { id: 'r1', relationTo: 'medias', path: 'photos', position: 1, documentId: 'b' }]
8
+ * ```
9
+ *
10
+ * `locale` is set on a localized field; `livePreview` rides along in a live-edit form.
11
+ */
12
+ export function toRelationValue(items, args) {
13
+ return items.map((item, index) => {
14
+ const relation = {
15
+ id: item.id,
16
+ relationTo: args.relationTo,
17
+ path: args.path,
18
+ position: index,
19
+ documentId: item.documentId
20
+ };
21
+ if (args.locale)
22
+ relation.locale = args.locale;
23
+ if (args.live && item.livePreview)
24
+ relation.livePreview = item.livePreview;
25
+ return relation;
26
+ });
27
+ }
@@ -5,11 +5,8 @@ import { type LinkFeatureOptions } from './core/features/link/index.js';
5
5
  import type { ResourceFeatureExtensionOptions } from './core/features/resource/resource-extension.js';
6
6
  import type { RichTextResource } from './core/features/resource/types.js';
7
7
  import type { UploadFeatureExtensionOptions } from './core/features/upload/upload-extension.js';
8
- import RenderRichText from './core/render-rich-text.svelte';
9
8
  import SvelteNodeViewRenderer from './core/svelte/node-view-renderer.svelte';
10
9
  import NodeViewWrapper from './core/svelte/node-view-wrapper.svelte';
11
- import type { RichTextNodeRenderer, RichTextNodeRendererProps } from './core/types.js';
12
- import { richTextJSONToText } from './index.js';
13
10
  export declare const fields: (args: FieldsFeatureOptions) => import("./core/types.js").RichTextFeature;
14
11
  export declare const bold: () => import("./core/types.js").RichTextFeature;
15
12
  export declare const bulletList: () => import("./core/types.js").RichTextFeature;
@@ -22,5 +19,5 @@ export declare const blockquote: () => import("./core/types.js").RichTextFeature
22
19
  export declare const italic: () => import("./core/types.js").RichTextFeature;
23
20
  export declare const upload: (args: UploadFeatureExtensionOptions) => import("./core/types.js").RichTextFeature;
24
21
  export declare const resource: (args: ResourceFeatureExtensionOptions) => import("./core/types.js").RichTextFeature;
25
- export { NodeViewWrapper, RenderRichText, richTextJSONToText, SvelteNodeViewRenderer };
26
- export type { JSONContent, RichTextNodeRenderer, RichTextNodeRendererProps, RichTextResource };
22
+ export { NodeViewWrapper, SvelteNodeViewRenderer };
23
+ export type { JSONContent, RichTextResource };
@@ -10,10 +10,8 @@ import { OrderedListFeature } from './core/features/ordered-list.js';
10
10
  import { ParagraphFeature } from './core/features/paragraph.js';
11
11
  import { ResourceFeature } from './core/features/resource/index.js';
12
12
  import { UploadFeature } from './core/features/upload/index.js';
13
- import RenderRichText from './core/render-rich-text.svelte';
14
13
  import SvelteNodeViewRenderer from './core/svelte/node-view-renderer.svelte';
15
14
  import NodeViewWrapper from './core/svelte/node-view-wrapper.svelte';
16
- import { richTextJSONToText } from './index.js';
17
15
  export const fields = (args) => FieldsFeature(args);
18
16
  export const bold = () => BoldFeature;
19
17
  export const bulletList = () => BulletListFeature;
@@ -26,4 +24,4 @@ export const blockquote = () => BlockquoteFeature;
26
24
  export const italic = () => ItalicFeature;
27
25
  export const upload = (args) => UploadFeature(args);
28
26
  export const resource = (args) => ResourceFeature(args);
29
- export { NodeViewWrapper, RenderRichText, richTextJSONToText, SvelteNodeViewRenderer };
27
+ export { NodeViewWrapper, SvelteNodeViewRenderer };
@@ -1,5 +1,5 @@
1
1
  <script lang="ts">
2
- import { richTextJSONToText } from '../index.js';
2
+ import { richTextJSONToText } from '../json.js';
3
3
 
4
4
  let { value }: { value: string } = $props();
5
5
 
@@ -1,61 +1,15 @@
1
1
  <script lang="ts">
2
2
  import { fieldset } from '../../../panel/components/fields/fieldset.svelte.js';
3
3
  import { Field } from '../../../panel/components/fields/index.js';
4
- import { random } from '../../../util/index.js';
5
- import { Editor, type JSONContent } from '@tiptap/core';
6
- import { onMount } from 'svelte';
7
- import { buildEditorConfig } from '../core/build-editor-config.js';
4
+ import type { JSONContent } from '@tiptap/core';
8
5
  import { defaultFeatures } from '../core/features/index.js';
9
- import type { RichTextFeature } from '../core/types';
10
- import { hasSuggestion } from '../util.js';
11
- import EditorBubbleMenu from './bubble-menu/bubble-menu.svelte';
12
- import { setRichTextContext } from './context.svelte.js';
13
- import DragHandler from './drag-handle/drag-handle.svelte';
6
+ import RichTextEditorCore from '../core/rich-text-editor-core.svelte';
14
7
  import type { RichTextFieldProps } from './props.js';
15
- import './styles/rich-text.css';
16
- import Suggestion from './suggestion/suggestion.svelte';
8
+ import './styles/field.css';
17
9
 
18
10
  const { path, config, form, standAlone, class: className }: RichTextFieldProps = $props();
19
11
 
20
- let element: HTMLElement;
21
- const key = $derived(`richtext-${path}`);
22
-
23
- let editor = $state<Editor>();
24
- let features = $state<RichTextFeature[]>([]);
25
12
  const field = $derived(form.useField<JSONContent>(path, config));
26
- const instanceId = random.randomId(8);
27
-
28
- const ctx = setRichTextContext(instanceId);
29
-
30
- const withSuggestion = $derived(hasSuggestion(config.get.features || defaultFeatures));
31
-
32
- onMount(() => {
33
- // Build editor configuration
34
- const richTextEditorConfig = buildEditorConfig({
35
- features: config.get.features || defaultFeatures
36
- });
37
-
38
- features = richTextEditorConfig.features;
39
- editor = new Editor({
40
- ...richTextEditorConfig.tiptap,
41
- element,
42
- editable: field.editable
43
- });
44
-
45
- if (field.value?.content) {
46
- try {
47
- editor.commands.setContent(field.value.content);
48
- } catch (err) {
49
- editor.commands.setContent('');
50
- console.log(err);
51
- }
52
- }
53
-
54
- // Update field value when editor content changes
55
- editor.on('update', ({ editor }) => {
56
- field.value = editor.getJSON();
57
- });
58
- });
59
13
  </script>
60
14
 
61
15
  <fieldset
@@ -67,25 +21,15 @@
67
21
 
68
22
  <Field.Error error={field.error} />
69
23
 
70
- <div class="rz-rich-text__editor-wrapper">
71
- <div
72
- bind:this={element}
73
- data-error={field.error ? 'true' : null}
74
- class="rz-rich-text__editor {className}"
75
- ></div>
76
-
77
- {#if editor && editor.isEditable}
78
- <DragHandler {editor} />
79
-
80
- {#if withSuggestion}
81
- <Suggestion {editor} {features} />
82
- {/if}
83
-
84
- {#key key}
85
- <EditorBubbleMenu {features} {editor} {path} context={ctx} />
86
- {/key}
87
- {/if}
88
- </div>
24
+ <RichTextEditorCore
25
+ {path}
26
+ features={config.get.features || defaultFeatures}
27
+ value={field.value}
28
+ editable={field.editable}
29
+ error={!!field.error}
30
+ class={className}
31
+ onUpdate={(json) => (field.value = json)}
32
+ />
89
33
 
90
34
  {#if !standAlone}
91
35
  <Field.Hint {config} />
@@ -93,18 +37,6 @@
93
37
  </fieldset>
94
38
 
95
39
  <style>
96
- .rz-rich-text__editor-wrapper {
97
- position: relative;
98
- }
99
-
100
- .rz-field-rich-text {
101
- :global {
102
- .ProseMirror-gapcursor:after {
103
- border-top: 1px solid hsl(var(--rz-color-fg));
104
- }
105
- }
106
- }
107
-
108
40
  .rz-field-rich-text__label-box {
109
41
  display: flex;
110
42
  align-items: center;
@@ -1,5 +1,5 @@
1
1
  import type { RichTextFieldProps } from './props.js';
2
- import './styles/rich-text.css';
2
+ import './styles/field.css';
3
3
  declare const RichText: import("svelte").Component<RichTextFieldProps, {}, "">;
4
4
  type RichText = ReturnType<typeof RichText>;
5
5
  export default RichText;
@@ -0,0 +1,28 @@
1
+ <script lang="ts">
2
+ import type { DocumentFormContext } from '../../../panel/context/documentForm.svelte.js';
3
+ import type { JSONContent } from '@tiptap/core';
4
+ import { defaultFeatures } from '../core/features/index.js';
5
+ import RichTextEditorCore from '../core/rich-text-editor-core.svelte';
6
+ import type { RichTextFieldBuilder } from '../index.js';
7
+
8
+ type Props = {
9
+ path: string;
10
+ config: RichTextFieldBuilder;
11
+ form: DocumentFormContext;
12
+ class?: string;
13
+ };
14
+ const { path, config, form, class: className }: Props = $props();
15
+
16
+ const field = $derived(form.useField<JSONContent>(path, config));
17
+ </script>
18
+
19
+ <!-- A rich text edited where a block render draws it: the editor's controls, no fieldset. -->
20
+ <RichTextEditorCore
21
+ {path}
22
+ features={config.get.features || defaultFeatures}
23
+ value={field.value}
24
+ editable={field.editable}
25
+ error={!!field.error}
26
+ class={className}
27
+ onUpdate={(json) => (field.value = json)}
28
+ />
@@ -0,0 +1,11 @@
1
+ import type { DocumentFormContext } from '../../../panel/context/documentForm.svelte.js';
2
+ import type { RichTextFieldBuilder } from '../index.js';
3
+ type Props = {
4
+ path: string;
5
+ config: RichTextFieldBuilder;
6
+ form: DocumentFormContext;
7
+ class?: string;
8
+ };
9
+ declare const RichTextInline: import("svelte").Component<Props, {}, "">;
10
+ type RichTextInline = ReturnType<typeof RichTextInline>;
11
+ export default RichTextInline;
@@ -5,10 +5,11 @@
5
5
  width: fit-content;
6
6
  gap: var(--rz-size-1);
7
7
  border-radius: var(--rz-radius-lg);
8
- border: var(--rz-border);
9
- background-color: hsl(var(--rz-color-bg));
8
+ background-color: var(--rz-bg-float);
9
+ box-shadow:
10
+ 0 0 0 1px var(--rz-border),
11
+ var(--rz-shadow-float);
10
12
  padding: var(--rz-size-1);
11
- box-shadow: var(--rz-shadow-xl);
12
13
  visibility: hidden;
13
14
  position: absolute;
14
15
  left: -9999px;
@@ -1,4 +1,5 @@
1
1
  <script lang="ts">
2
+ import * as random from '../../../../util/random.js';
2
3
  import type { Editor } from '@tiptap/core';
3
4
  import { BubbleMenuPlugin } from '@tiptap/extension-bubble-menu';
4
5
  import { onDestroy, onMount } from 'svelte';
@@ -59,7 +60,8 @@
59
60
  ...features.flatMap((feature) => getBubbleMenuItems(feature.nodes || [], feature))
60
61
  ]);
61
62
 
62
- const pluginKey = $derived(path);
63
+ // One key for the menu's life: the path changes when the field moves, the plugin stays.
64
+ const pluginKey = `rz-bubble-menu-${random.randomId(8)}`;
63
65
  const updateDelay = 250;
64
66
 
65
67
  const shouldShow = ({ editor }: { editor: Editor }) => {
@@ -6,10 +6,10 @@
6
6
  justify-content: center;
7
7
  border-radius: var(--rz-radius-lg);
8
8
  /* padding: var(--rz-size-2); */
9
- color: hsl(var(--rz-color-fg));
9
+ color: var(--rz-fg);
10
10
  }
11
11
 
12
12
  .rz-icon-button__icon--active {
13
- color: hsl(var(--rz-color-spot));
13
+ color: var(--rz-accent-text);
14
14
  opacity: 1;
15
15
  }