rimecms 0.27.5 → 0.28.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 (231) hide show
  1. package/dist/adapter-sqlite/{area.js → area.server.js} +2 -2
  2. package/dist/adapter-sqlite/{blocks.d.ts → blocks.server.d.ts} +1 -1
  3. package/dist/adapter-sqlite/{blocks.js → blocks.server.js} +1 -1
  4. package/dist/adapter-sqlite/{collection.js → collection.server.js} +17 -8
  5. package/dist/adapter-sqlite/generate-schema/templates.server.d.ts +1 -1
  6. package/dist/adapter-sqlite/generate-schema/templates.server.js +3 -2
  7. package/dist/adapter-sqlite/generate-schema/write.server.js +2 -2
  8. package/dist/adapter-sqlite/index.server.d.ts +8 -8
  9. package/dist/adapter-sqlite/index.server.js +7 -7
  10. package/dist/adapter-sqlite/{orderBy.js → orderBy.server.js} +1 -1
  11. package/dist/adapter-sqlite/{relations.d.ts → relations.server.d.ts} +1 -1
  12. package/dist/adapter-sqlite/{relations.js → relations.server.js} +1 -1
  13. package/dist/adapter-sqlite/{transform.js → transform.server.js} +2 -3
  14. package/dist/adapter-sqlite/{tree.d.ts → tree.server.d.ts} +1 -1
  15. package/dist/adapter-sqlite/{tree.js → tree.server.js} +1 -1
  16. package/dist/adapter-sqlite/url.server.d.ts +1 -1
  17. package/dist/core/areas/local-api.server.d.ts +1 -1
  18. package/dist/core/areas/local-api.server.js +1 -0
  19. package/dist/core/collections/api/delete.server.js +1 -1
  20. package/dist/core/collections/api/get.server.js +1 -1
  21. package/dist/core/collections/api/getById.server.js +3 -1
  22. package/dist/core/collections/config/augment-panel.d.ts +13 -0
  23. package/dist/core/collections/config/augment-panel.js +19 -0
  24. package/dist/core/collections/config/augment-upload.server.d.ts +1 -0
  25. package/dist/core/collections/config/augment-upload.server.js +1 -0
  26. package/dist/core/collections/config/builder.js +3 -1
  27. package/dist/core/collections/config/builder.server.js +3 -1
  28. package/dist/core/collections/local-api.server.js +3 -1
  29. package/dist/core/collections/operations/findById.js +3 -1
  30. package/dist/core/collections/upload/hooks/convert-base64.server.js +1 -1
  31. package/dist/core/config/auth/better-auth.server.d.ts +3 -3
  32. package/dist/core/config/auth/better-auth.server.js +1 -1
  33. package/dist/core/config/client/augment-panel.d.ts +4 -4
  34. package/dist/core/config/client/build-config.d.ts +5 -5
  35. package/dist/core/config/server/augment-directories.server.js +3 -3
  36. package/dist/core/config/server/augment-staff.server.d.ts +1 -1
  37. package/dist/core/config/server/augment-staff.server.js +1 -1
  38. package/dist/core/config/server/build-config.server.d.ts +12 -12
  39. package/dist/core/config/server/build-config.server.js +1 -1
  40. package/dist/core/config/server/{validate.js → validate.server.js} +1 -1
  41. package/dist/core/config/server/{write.js → write.server.js} +1 -1
  42. package/dist/core/config/shared/augment-icons.d.ts +1 -2
  43. package/dist/core/config/shared/get-staff-collection.d.ts +1 -1
  44. package/dist/core/config/shared/upload-directories.js +1 -1
  45. package/dist/core/config/types.d.ts +20 -8
  46. package/dist/core/dev/cli/generate/{index.js → index.server.js} +2 -2
  47. package/dist/core/dev/cli/index.js +3 -3
  48. package/dist/core/dev/cli/init/{index.js → index.server.js} +68 -25
  49. package/dist/core/dev/cli/init/{packageManagerUtil.js → package-manager-util.server.js} +5 -5
  50. package/dist/core/dev/generate/routes/{area.d.ts → area.server.d.ts} +1 -1
  51. package/dist/core/dev/generate/routes/{area.js → area.server.js} +1 -1
  52. package/dist/core/dev/generate/routes/{collection.d.ts → collection.server.d.ts} +1 -1
  53. package/dist/core/dev/generate/routes/{collection.js → collection.server.js} +1 -1
  54. package/dist/core/dev/generate/routes/{common.d.ts → common.server.d.ts} +1 -1
  55. package/dist/core/dev/generate/routes/{common.js → common.server.js} +26 -11
  56. package/dist/core/dev/generate/routes/{index.js → index.server.js} +5 -5
  57. package/dist/core/dev/generate/routes/{util.js → util.server.js} +1 -1
  58. package/dist/core/dev/generate/types/{index.js → index.server.js} +1 -1
  59. package/dist/core/dev/vite/{index.js → index.server.js} +1 -1
  60. package/dist/core/fields/util.d.ts +13 -0
  61. package/dist/core/fields/util.js +77 -4
  62. package/dist/core/i18n/en/common.d.ts +2 -0
  63. package/dist/core/i18n/en/common.js +2 -0
  64. package/dist/core/i18n/fr/common.d.ts +2 -0
  65. package/dist/core/i18n/fr/common.js +2 -0
  66. package/dist/core/operations/hooks/before-read/populate-url.server.js +10 -2
  67. package/dist/core/operations/hooks/before-upsert/handle-new-version.server.js +5 -4
  68. package/dist/core/operations/relations/diff.server.d.ts +1 -1
  69. package/dist/core/operations/relations/extract.server.d.ts +1 -1
  70. package/dist/core/operations/shared/fallback-data-from-original.d.ts +1 -0
  71. package/dist/core/operations/shared/fallback-data-from-original.js +5 -0
  72. package/dist/core/rime.server.d.ts +22 -8
  73. package/dist/core/rime.server.js +5 -5
  74. package/dist/fields/blocks/component/Block.svelte +13 -19
  75. package/dist/fields/blocks/component/Blocks.svelte +6 -13
  76. package/dist/fields/checkbox/index.server.js +1 -1
  77. package/dist/fields/combobox/index.server.js +3 -2
  78. package/dist/fields/date/index.server.js +1 -1
  79. package/dist/fields/email/index.server.js +1 -1
  80. package/dist/fields/group/component/Group.svelte +6 -13
  81. package/dist/fields/link/index.server.js +1 -1
  82. package/dist/fields/number/component/number.css +2 -0
  83. package/dist/fields/number/index.server.js +1 -1
  84. package/dist/fields/radio/index.server.js +1 -1
  85. package/dist/fields/relation/component/default/Default.svelte +1 -7
  86. package/dist/fields/relation/component/upload/upload.css +1 -10
  87. package/dist/fields/relation/index.d.ts +21 -6
  88. package/dist/fields/relation/index.js +41 -11
  89. package/dist/fields/relation/index.server.js +1 -1
  90. package/dist/fields/rich-text/component/RichText.svelte +4 -4
  91. package/dist/fields/rich-text/component/bubble-menu/bubble-menu.svelte +6 -6
  92. package/dist/fields/rich-text/component/bubble-menu/bubble-menu.svelte.d.ts +2 -0
  93. package/dist/fields/rich-text/component/drag-handle/drag-handle.css +1 -0
  94. package/dist/fields/rich-text/component/styles/rich-text.css +0 -7
  95. package/dist/fields/rich-text/core/features/resource/resource.svelte +2 -9
  96. package/dist/fields/rich-text/core/features/upload/upload.svelte +5 -12
  97. package/dist/fields/rich-text/core/render-rich-text.svelte +5 -3
  98. package/dist/fields/rich-text/index.d.ts +1 -1
  99. package/dist/fields/rich-text/index.server.d.ts +1 -1
  100. package/dist/fields/rich-text/index.server.js +1 -1
  101. package/dist/fields/select/component/Select.svelte +5 -11
  102. package/dist/fields/select/index.server.d.ts +1 -1
  103. package/dist/fields/select/index.server.js +2 -1
  104. package/dist/fields/slug/index.server.js +1 -1
  105. package/dist/fields/tabs/index.d.ts +1 -0
  106. package/dist/fields/tabs/index.js +3 -0
  107. package/dist/fields/text/index.server.js +1 -1
  108. package/dist/fields/textarea/component/TextArea.svelte +5 -13
  109. package/dist/fields/textarea/index.server.js +1 -1
  110. package/dist/fields/time/index.server.js +1 -1
  111. package/dist/fields/toggle/index.server.js +1 -1
  112. package/dist/fields/tree/component/TreeBlock.svelte +12 -18
  113. package/dist/fields/types.d.ts +3 -2
  114. package/dist/live.d.ts +2 -1
  115. package/dist/live.js +2 -1
  116. package/dist/panel/components/fields/Error.svelte +1 -7
  117. package/dist/panel/components/sections/auth/AuthForm.svelte +2 -4
  118. package/dist/panel/components/sections/collection/Empty.svelte +1 -0
  119. package/dist/panel/components/sections/collection/folder/Folder.svelte +7 -16
  120. package/dist/panel/components/sections/collection/folder/FolderWithActions.svelte +1 -1
  121. package/dist/panel/components/sections/collection/grid/CollectionGrid.svelte +22 -12
  122. package/dist/panel/components/sections/collection/grid/create-directory-dialog/CreateDirectoryDialog.svelte +4 -5
  123. package/dist/panel/components/sections/collection/grid/grid-item/GridItem.svelte +41 -33
  124. package/dist/panel/components/sections/collection/grid/grid-item/GridItem.svelte.d.ts +4 -0
  125. package/dist/panel/components/sections/collection/header/ButtonCreate.svelte +14 -16
  126. package/dist/panel/components/sections/collection/header/ButtonCreate.svelte.d.ts +2 -0
  127. package/dist/panel/components/sections/collection/header/DisplayMode.svelte +10 -10
  128. package/dist/panel/components/sections/collection/header/SearchInput.svelte +2 -8
  129. package/dist/panel/components/sections/collection/list/CollectionList.svelte +32 -3
  130. package/dist/panel/components/sections/collection/list/header/Header.svelte +3 -9
  131. package/dist/panel/components/sections/collection/list/row/Row.svelte +41 -27
  132. package/dist/panel/components/sections/collection/list/row/Row.svelte.d.ts +9 -0
  133. package/dist/panel/components/sections/collection/tree/CollectionTree.svelte +1 -1
  134. package/dist/panel/components/sections/collection/upload-thumb-cell/UploadThumbCell.svelte +11 -1
  135. package/dist/panel/components/sections/document/ButtonStatus.svelte +3 -11
  136. package/dist/panel/components/sections/document/CurrentlyEdited.svelte +1 -2
  137. package/dist/panel/components/sections/document/Document.svelte +24 -41
  138. package/dist/panel/components/sections/document/Document.svelte.d.ts +0 -1
  139. package/dist/panel/components/sections/document/Versions.svelte +1 -2
  140. package/dist/panel/components/sections/document/upload-header/UploadHeader.svelte +11 -21
  141. package/dist/panel/components/sections/live/LiveEdit.svelte +114 -0
  142. package/dist/panel/components/sections/live/LiveEdit.svelte.d.ts +32 -0
  143. package/dist/panel/components/sections/live/LiveEditPanel.svelte +53 -0
  144. package/dist/panel/components/sections/live/LiveEditPanel.svelte.d.ts +11 -0
  145. package/dist/panel/components/sections/live/LiveFloatingUI.svelte +106 -0
  146. package/dist/panel/components/sections/live/LiveFloatingUI.svelte.d.ts +12 -0
  147. package/dist/panel/components/sections/live/Provider.svelte +4 -4
  148. package/dist/panel/components/sections/live/Provider.svelte.d.ts +5 -3
  149. package/dist/panel/components/sections/live/live-edit-panel.css +12 -0
  150. package/dist/panel/components/sections/page-layout/Page.svelte +0 -4
  151. package/dist/panel/components/ui/breadcrumb/BreadCrumb.svelte +2 -9
  152. package/dist/panel/components/ui/button/button.svelte +35 -54
  153. package/dist/panel/components/ui/calendar/calendar.css +11 -0
  154. package/dist/panel/components/ui/card-document/card-document.svelte +21 -14
  155. package/dist/panel/components/ui/card-resource/card-resource.svelte +8 -14
  156. package/dist/panel/components/ui/checkbox/checkbox.svelte +1 -1
  157. package/dist/panel/components/ui/command/command-group.css +1 -0
  158. package/dist/panel/components/ui/dialog/dialog-overlay.css +1 -2
  159. package/dist/panel/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +1 -7
  160. package/dist/panel/components/ui/input/input.svelte +13 -23
  161. package/dist/panel/components/ui/label/label.css +0 -1
  162. package/dist/panel/components/ui/nav/NavItemButton.svelte +2 -8
  163. package/dist/panel/components/ui/page-header/PageHeader.svelte +6 -13
  164. package/dist/panel/components/ui/radio-group/radio-group.css +2 -0
  165. package/dist/panel/components/ui/scroll-area/scroll-area.css +0 -4
  166. package/dist/panel/components/ui/sheet/sheet.css +1 -18
  167. package/dist/panel/components/ui/tabs/tabs.css +7 -0
  168. package/dist/panel/context/collection.svelte.d.ts +0 -4
  169. package/dist/panel/context/collection.svelte.js +0 -3
  170. package/dist/panel/context/documentForm.svelte.js +1 -0
  171. package/dist/panel/context/live.svelte.d.ts +8 -20
  172. package/dist/panel/context/live.svelte.js +65 -35
  173. package/dist/panel/context/livePanel.svelte.d.ts +11 -0
  174. package/dist/panel/context/livePanel.svelte.js +8 -0
  175. package/dist/panel/pages/auth/forgot-password/ForgotPassword.svelte +1 -7
  176. package/dist/panel/pages/collection/Collection.svelte +3 -1
  177. package/dist/panel/pages/dashboard/Dashboard.svelte +52 -28
  178. package/dist/panel/pages/dashboard/DashboardCollection.svelte +91 -0
  179. package/dist/panel/pages/dashboard/DashboardCollection.svelte.d.ts +9 -0
  180. package/dist/panel/pages/dashboard/load.server.js +30 -14
  181. package/dist/panel/pages/dashboard/types.d.ts +1 -0
  182. package/dist/panel/pages/live/Live.svelte +244 -67
  183. package/dist/panel/pages/live/Live.svelte.d.ts +9 -1
  184. package/dist/panel/pages/live/load.server.js +14 -1
  185. package/dist/panel/style/index.css +563 -8
  186. package/dist/panel/style/mixins/index.css +1 -3
  187. package/dist/panel/util/upload.d.ts +1 -1
  188. package/dist/util/object.js +3 -0
  189. package/package.json +12 -10
  190. package/dist/panel/components/sections/document/FloatingUI.svelte +0 -81
  191. package/dist/panel/components/sections/document/FloatingUI.svelte.d.ts +0 -8
  192. package/dist/panel/components/sections/live/SidePanel.svelte +0 -61
  193. package/dist/panel/components/sections/live/SidePanel.svelte.d.ts +0 -14
  194. package/dist/panel/components/sections/live/side-panel.css +0 -15
  195. /package/dist/adapter-sqlite/{area.d.ts → area.server.d.ts} +0 -0
  196. /package/dist/adapter-sqlite/{collection.d.ts → collection.server.d.ts} +0 -0
  197. /package/dist/adapter-sqlite/{orderBy.d.ts → orderBy.server.d.ts} +0 -0
  198. /package/dist/adapter-sqlite/{transform.d.ts → transform.server.d.ts} +0 -0
  199. /package/dist/adapter-sqlite/{types.d.ts → types.server.d.ts} +0 -0
  200. /package/dist/adapter-sqlite/{types.js → types.server.js} +0 -0
  201. /package/dist/adapter-sqlite/{util.d.ts → util.server.d.ts} +0 -0
  202. /package/dist/adapter-sqlite/{util.js → util.server.js} +0 -0
  203. /package/dist/adapter-sqlite/{where.d.ts → where.server.d.ts} +0 -0
  204. /package/dist/adapter-sqlite/{where.js → where.server.js} +0 -0
  205. /package/dist/adapter-sqlite/{with.d.ts → with.server.d.ts} +0 -0
  206. /package/dist/adapter-sqlite/{with.js → with.server.js} +0 -0
  207. /package/dist/core/collections/upload/util/{converter.d.ts → converter.server.d.ts} +0 -0
  208. /package/dist/core/collections/upload/util/{converter.js → converter.server.js} +0 -0
  209. /package/dist/core/config/auth/{better-auth-hooks.d.ts → better-auth-hooks.server.d.ts} +0 -0
  210. /package/dist/core/config/auth/{better-auth-hooks.js → better-auth-hooks.server.js} +0 -0
  211. /package/dist/core/config/server/{augment-cors.d.ts → augment-cors.server.d.ts} +0 -0
  212. /package/dist/core/config/server/{augment-cors.js → augment-cors.server.js} +0 -0
  213. /package/dist/core/config/server/{validate.d.ts → validate.server.d.ts} +0 -0
  214. /package/dist/core/config/server/{write.d.ts → write.server.d.ts} +0 -0
  215. /package/dist/core/dev/cache/{index.d.ts → index.server.d.ts} +0 -0
  216. /package/dist/core/dev/cache/{index.js → index.server.js} +0 -0
  217. /package/dist/core/dev/cli/clear/{index.d.ts → index.server.d.ts} +0 -0
  218. /package/dist/core/dev/cli/clear/{index.js → index.server.js} +0 -0
  219. /package/dist/core/dev/cli/generate/{index.d.ts → index.server.d.ts} +0 -0
  220. /package/dist/core/dev/cli/init/{getPackageName.d.ts → get-package-info.server.d.ts} +0 -0
  221. /package/dist/core/dev/cli/init/{getPackageName.js → get-package-info.server.js} +0 -0
  222. /package/dist/core/dev/cli/init/{index.d.ts → index.server.d.ts} +0 -0
  223. /package/dist/core/dev/cli/init/{packageManagerUtil.d.ts → package-manager-util.server.d.ts} +0 -0
  224. /package/dist/core/dev/generate/routes/{custom-css.d.ts → custom-css.server.d.ts} +0 -0
  225. /package/dist/core/dev/generate/routes/{custom-css.js → custom-css.server.js} +0 -0
  226. /package/dist/core/dev/generate/routes/{index.d.ts → index.server.d.ts} +0 -0
  227. /package/dist/core/dev/generate/routes/{util.d.ts → util.server.d.ts} +0 -0
  228. /package/dist/core/dev/generate/sanitize/{index.d.ts → index.server.d.ts} +0 -0
  229. /package/dist/core/dev/generate/sanitize/{index.js → index.server.js} +0 -0
  230. /package/dist/core/dev/generate/types/{index.d.ts → index.server.d.ts} +0 -0
  231. /package/dist/core/dev/vite/{index.d.ts → index.server.d.ts} +0 -0
@@ -1,7 +1,8 @@
1
- import { isBlocksFieldRaw } from '../../fields/blocks/index.js';
2
- import { isGroupFieldRaw } from '../../fields/group/index.js';
3
- import { isTabsFieldRaw } from '../../fields/tabs/index.js';
4
- import { isTreeFieldRaw } from '../../fields/tree/index.js';
1
+ import { BlocksBuilder, isBlocksFieldRaw } from '../../fields/blocks/index.js';
2
+ import { GroupFieldBuilder, isGroupFieldRaw } from '../../fields/group/index.js';
3
+ import { isTabsFieldRaw, TabsBuilder } from '../../fields/tabs/index.js';
4
+ import { isTreeFieldRaw, TreeBuilder } from '../../fields/tree/index.js';
5
+ import { normalizeFieldPath } from '../../util/doc.js';
5
6
  /**
6
7
  * Checks if a field is a presentative field (currently only separator fields).
7
8
  * Presentative fields are used for UI organization and don't store data.
@@ -168,3 +169,75 @@ export const getFieldConfigByPath = (path, fields) => {
168
169
  };
169
170
  return findInFields(fields, parts);
170
171
  };
172
+ /**
173
+ * Traverses a FieldBuilder[] tree and returns the subset of builders to pass to
174
+ * RenderFields, along with the path prefix those builders should be rendered at.
175
+ *
176
+ * Containers (tabs, groups) are treated as transparent navigation layers.
177
+ * Blocks are treated as endpoints — the blocks builder itself is returned
178
+ * regardless of any index:blockType suffix in the path.
179
+ */
180
+ export function getFieldBuildersAtPath(fieldPath, builders, parentPath = '') {
181
+ if (!fieldPath)
182
+ return { fields: builders, path: parentPath };
183
+ const dotIndex = fieldPath.indexOf('.');
184
+ const head = dotIndex === -1 ? fieldPath : fieldPath.slice(0, dotIndex);
185
+ const tail = dotIndex === -1 ? '' : fieldPath.slice(dotIndex + 1);
186
+ const isEndpoint = fieldPath.split('.').length === 1;
187
+ const nextParentPath = normalizeFieldPath(`${parentPath}${parentPath ? '.' : ''}${head}`);
188
+ for (const builder of builders) {
189
+ // ── Tabs container: navigate into the matching tab
190
+ if (builder instanceof TabsBuilder) {
191
+ const tab = builder.field.tabs.find((t) => t.name === head);
192
+ if (!tab)
193
+ continue;
194
+ if (isEndpoint) {
195
+ // Path targets the tab → return all its inner fields
196
+ return { fields: tab.raw.fields, path: nextParentPath };
197
+ }
198
+ return getFieldBuildersAtPath(tail, tab.raw.fields, nextParentPath);
199
+ }
200
+ if (!isFormField(builder.raw))
201
+ continue;
202
+ // ── Group field: navigate into children
203
+ if (builder instanceof GroupFieldBuilder && builder.raw.name === head) {
204
+ const children = builder.field.fields;
205
+ if (isEndpoint)
206
+ return { fields: children, path: nextParentPath };
207
+ return getFieldBuildersAtPath(tail, children, nextParentPath);
208
+ }
209
+ // —— Blocks
210
+ if (builder instanceof BlocksBuilder && builder.raw.name === head) {
211
+ const blockType = tail.split('.')[0]?.split(':')[1];
212
+ const isInnerBlockLookup = tail.split('.').length > 1;
213
+ const nextParentPathWithBlockIndex = `${nextParentPath}.${tail.split('.')[0]}`;
214
+ if (blockType) {
215
+ const block = builder.raw.blocks.find((b) => b.name === blockType);
216
+ if (!isInnerBlockLookup && block?.raw.fields) {
217
+ return {
218
+ fields: block?.raw.fields,
219
+ path: normalizeFieldPath(nextParentPathWithBlockIndex)
220
+ };
221
+ }
222
+ if (block) {
223
+ return getFieldBuildersAtPath(tail.split('.').slice(1).join('.'), block?.raw.fields, normalizeFieldPath(nextParentPathWithBlockIndex));
224
+ }
225
+ }
226
+ return { fields: [builder], path: parentPath };
227
+ }
228
+ // Tree
229
+ if (builder instanceof TreeBuilder && builder.raw.name === head) {
230
+ const children = builder.raw.fields;
231
+ const nextParentPathWithIndex = `${nextParentPath}.${tail.split('.')[0]}`;
232
+ if (isEndpoint)
233
+ return { fields: children, path: nextParentPath };
234
+ return getFieldBuildersAtPath(tail.split('.').slice(1).join('.'), children, nextParentPathWithIndex);
235
+ }
236
+ // Direct unique field match
237
+ if (isEndpoint && isFormField(builder.raw) && builder.raw.name === fieldPath) {
238
+ return { fields: [builder], path: parentPath };
239
+ }
240
+ }
241
+ console.warn(`[LiveEditPanel] fieldPath "${fieldPath}" not found in config fields`);
242
+ return { fields: builders, path: parentPath };
243
+ }
@@ -56,7 +56,9 @@ declare namespace _default {
56
56
  export let signin: string;
57
57
  export let unsaved_dialog_title: string;
58
58
  export let unsaved_dialog_text: string;
59
+ export let version_created: string;
59
60
  export let versions_history: string;
61
+ export let view_all: string;
60
62
  export let view_page: string;
61
63
  export let view_site: string;
62
64
  export let welcome: string;
@@ -56,7 +56,9 @@ export default {
56
56
  signin: 'Sign In',
57
57
  unsaved_dialog_title: 'Changes unsaved',
58
58
  unsaved_dialog_text: 'There are unsaved modifications in the document.',
59
+ version_created: 'New version created',
59
60
  versions_history: 'Versions history',
61
+ view_all: 'View all',
60
62
  view_page: 'View page',
61
63
  view_site: 'View website',
62
64
  welcome: 'Welcome'
@@ -55,8 +55,10 @@ declare namespace _default {
55
55
  export let signin: string;
56
56
  export let unsaved_dialog_title: string;
57
57
  export let unsaved_dialog_text: string;
58
+ export let version_created: string;
58
59
  export let versions_history: string;
59
60
  export let versions: string;
61
+ export let view_all: string;
60
62
  export let view_page: string;
61
63
  export let view_site: string;
62
64
  export let welcome: string;
@@ -58,8 +58,10 @@ export default {
58
58
  signin: 'Se connecter',
59
59
  unsaved_dialog_title: 'Modification(s) non-enregistrée(s)',
60
60
  unsaved_dialog_text: 'Il y a des modifications non-enregistrées pour ce document.',
61
+ version_created: 'Nouvelle version créée',
61
62
  versions_history: 'Historique des versions',
62
63
  versions: 'Versions',
64
+ view_all: 'Voir tout',
63
65
  view_page: 'Voir la page',
64
66
  view_site: 'Voir le site',
65
67
  welcome: 'Bienvenue',
@@ -1,5 +1,7 @@
1
+ import { PARAMS } from '../../../constant.js';
1
2
  import { logger } from '../../../logger/index.server.js';
2
3
  import { getValueAtPath } from '../../../../util/object.js';
4
+ import validate from '../../../../util/validate.js';
3
5
  import { Hooks } from '../index.server.js';
4
6
  /**
5
7
  * Hook to populate _children property on document from a nested collection
@@ -25,6 +27,11 @@ export const populateURL = Hooks.beforeRead(async (args) => {
25
27
  logger.error(`Error while generating url of ${config.slug} with id: ${args.doc.id}, ${err.message}`);
26
28
  return args;
27
29
  }
30
+ const isValidURL = validate.url(url);
31
+ if (typeof isValidURL === 'string') {
32
+ logger.warn(`Invalid URL generated for ${config.slug} with id: ${args.doc.id}, url: ${url}`);
33
+ return args;
34
+ }
28
35
  const match = url.match(/\[\.\.\.parent\.(\w+(?:\.\w+)*)\]/);
29
36
  if (match) {
30
37
  const fullMatch = match[0];
@@ -91,8 +98,9 @@ export const populateURL = Hooks.beforeRead(async (args) => {
91
98
  }
92
99
  // Add the live url if needed
93
100
  if (config.live && event.locals.user && url) {
94
- args.doc._live = `${process.env.PUBLIC_RIME_URL}/live?src=${url}&slug=${config.slug}&id=${args.doc.id}`;
95
- args.doc._live += locale ? `&locale=${locale}` : '';
101
+ args.doc._live = `${process.env.PUBLIC_RIME_URL}/panel/live-edit?src=${url}&slug=${config.slug}&id=${args.doc.id}`;
102
+ args.doc._live += args.doc.versionId ? `&${PARAMS.VERSION_ID}=${args.doc.versionId}` : '';
103
+ args.doc._live += locale ? `&${PARAMS.LOCALE}=${locale}` : '';
96
104
  }
97
105
  }
98
106
  return args;
@@ -1,4 +1,4 @@
1
- import { filePathToFile } from '../../../collections/upload/util/converter.js';
1
+ import { filePathToFile } from '../../../collections/upload/util/converter.server.js';
2
2
  import { VersionOperations } from '../../../collections/versions/operations.js';
3
3
  import { VERSIONS_STATUS } from '../../../constant.js';
4
4
  import { RimeError } from '../../../errors/index.js';
@@ -78,18 +78,19 @@ async function prepareDataForNewVersion(args) {
78
78
  console.error(`Failed to create file from path: ${filePath}`, err);
79
79
  }
80
80
  }
81
- // Use missing data from original version
81
+ // Use missing required data from original version
82
82
  data = await fallbackDataFromOriginal({
83
83
  data,
84
84
  original: originalDoc,
85
85
  configMap: originalConfigMap,
86
- ignore: ['status']
86
+ ignore: ['status'],
87
+ mode: 'all'
87
88
  });
88
89
  // Set default status to "draft" if no data.status
89
90
  if (!data.status) {
90
91
  data.status = VERSIONS_STATUS.DRAFT;
91
92
  }
92
- // Remove ownerId and id props from data
93
+ // Remove ownerId and id props from data this force new relation/blocks creations
93
94
  data = recursiveRemoveKeys('ownerId', 'id').from(data);
94
95
  data.ownerId = originalDoc.id;
95
96
  delete data.id;
@@ -1,4 +1,4 @@
1
- import type { BeforeOperationRelation } from '../../../adapter-sqlite/relations.js';
1
+ import type { BeforeOperationRelation } from '../../../adapter-sqlite/relations.server.js';
2
2
  import type { Relation } from '../../../fields/relation/index.js';
3
3
  export type RelationDiff = {
4
4
  toAdd: BeforeOperationRelation[];
@@ -1,4 +1,4 @@
1
- import type { BeforeOperationRelation } from '../../../adapter-sqlite/relations.js';
1
+ import type { BeforeOperationRelation } from '../../../adapter-sqlite/relations.server.js';
2
2
  import type { Dic } from '../../../util/types.js';
3
3
  import type { ConfigMap } from '../configMap/types.js';
4
4
  type Args = {
@@ -5,4 +5,5 @@ export declare const fallbackDataFromOriginal: <T extends Dic>(args: {
5
5
  original: T;
6
6
  configMap: ConfigMap;
7
7
  ignore: string[];
8
+ mode?: "required" | "all";
8
9
  }) => Promise<T>;
@@ -2,12 +2,17 @@ import { logger } from '../../logger/index.server.js';
2
2
  import { getValueAtPath, setValueAtPath } from '../../../util/object.js';
3
3
  export const fallbackDataFromOriginal = async (args) => {
4
4
  //
5
+ const mode = args.mode || 'all';
5
6
  const { original, configMap, ignore } = args;
6
7
  let output = { ...args.data };
7
8
  for (const [key, config] of Object.entries(configMap)) {
8
9
  // skip keys in ignore list
9
10
  if (ignore.includes(key))
10
11
  continue;
12
+ // skip if not required and mode is 'required'
13
+ const shouldUpdate = (config.required && mode === 'required') || mode === 'all';
14
+ if (!shouldUpdate)
15
+ continue;
11
16
  let value = getValueAtPath(key, output);
12
17
  let isEmpty;
13
18
  try {
@@ -76,7 +76,14 @@ export declare function createRime<const C extends Config>(config: BuildConfig<C
76
76
  appName: string;
77
77
  baseURL: string;
78
78
  trustedOrigins: string[];
79
- isTrustedOrigin: (url: string, settings?: {
79
+ isTrustedOrigin: (url: string, settings
80
+ /**
81
+ * Get a collection api
82
+ * @example
83
+ *
84
+ * rime.collection('pages').find({ query: 'where[isHome][equals]=true' })
85
+ */
86
+ ?: {
80
87
  allowRelativePaths: boolean;
81
88
  }) => boolean;
82
89
  oauthConfig: {
@@ -1149,7 +1156,7 @@ export declare function createRime<const C extends Config>(config: BuildConfig<C
1149
1156
  $Infer: {
1150
1157
  body: {
1151
1158
  userId: string;
1152
- role: "user" | "staff" | "admin" | ("user" | "staff" | "admin")[];
1159
+ role: "user" | "admin" | "staff" | ("user" | "admin" | "staff")[];
1153
1160
  };
1154
1161
  };
1155
1162
  };
@@ -1229,7 +1236,7 @@ export declare function createRime<const C extends Config>(config: BuildConfig<C
1229
1236
  email: string;
1230
1237
  password?: string | undefined;
1231
1238
  name: string;
1232
- role?: "user" | "staff" | "admin" | ("user" | "staff" | "admin")[] | undefined;
1239
+ role?: "user" | "admin" | "staff" | ("user" | "admin" | "staff")[] | undefined;
1233
1240
  data?: Record<string, any> | undefined;
1234
1241
  };
1235
1242
  };
@@ -1773,7 +1780,7 @@ export declare function createRime<const C extends Config>(config: BuildConfig<C
1773
1780
  permission?: never | undefined;
1774
1781
  }) & {
1775
1782
  userId?: string | undefined;
1776
- role?: "user" | "staff" | "admin" | undefined;
1783
+ role?: "user" | "admin" | "staff" | undefined;
1777
1784
  };
1778
1785
  };
1779
1786
  };
@@ -2082,7 +2089,14 @@ export declare function createRime<const C extends Config>(config: BuildConfig<C
2082
2089
  appName: string;
2083
2090
  baseURL: string;
2084
2091
  trustedOrigins: string[];
2085
- isTrustedOrigin: (url: string, settings?: {
2092
+ isTrustedOrigin: (url: string, settings
2093
+ /**
2094
+ * Get a collection api
2095
+ * @example
2096
+ *
2097
+ * rime.collection('pages').find({ query: 'where[isHome][equals]=true' })
2098
+ */
2099
+ ?: {
2086
2100
  allowRelativePaths: boolean;
2087
2101
  }) => boolean;
2088
2102
  oauthConfig: {
@@ -3155,7 +3169,7 @@ export declare function createRime<const C extends Config>(config: BuildConfig<C
3155
3169
  $Infer: {
3156
3170
  body: {
3157
3171
  userId: string;
3158
- role: "user" | "staff" | "admin" | ("user" | "staff" | "admin")[];
3172
+ role: "user" | "admin" | "staff" | ("user" | "admin" | "staff")[];
3159
3173
  };
3160
3174
  };
3161
3175
  };
@@ -3235,7 +3249,7 @@ export declare function createRime<const C extends Config>(config: BuildConfig<C
3235
3249
  email: string;
3236
3250
  password?: string | undefined;
3237
3251
  name: string;
3238
- role?: "user" | "staff" | "admin" | ("user" | "staff" | "admin")[] | undefined;
3252
+ role?: "user" | "admin" | "staff" | ("user" | "admin" | "staff")[] | undefined;
3239
3253
  data?: Record<string, any> | undefined;
3240
3254
  };
3241
3255
  };
@@ -3779,7 +3793,7 @@ export declare function createRime<const C extends Config>(config: BuildConfig<C
3779
3793
  permission?: never | undefined;
3780
3794
  }) & {
3781
3795
  userId?: string | undefined;
3782
- role?: "user" | "staff" | "admin" | undefined;
3796
+ role?: "user" | "admin" | "staff" | undefined;
3783
3797
  };
3784
3798
  };
3785
3799
  };
@@ -1,15 +1,15 @@
1
1
  // import type { Adapter } from '../adapter-sqlite/index.server.js';
2
2
  import { dev } from '$app/environment';
3
- import devCache from './dev/cache/index.js';
3
+ import devCache from './dev/cache/index.server.js';
4
4
  import { betterAuth } from 'better-auth';
5
5
  import { AreaAPI } from './areas/local-api.server.js';
6
6
  import { CollectionAPI } from './collections/local-api.server.js';
7
7
  import { getBaseAuthConfig } from './config/auth/better-auth.server.js';
8
8
  import { createConfigContext } from './config/config-context.server.js';
9
- import validate from './config/server/validate.js';
10
- import writeMemo from './config/server/write.js';
11
- import generateRoutes from './dev/generate/routes/index.js';
12
- import generateTypes from './dev/generate/types/index.js';
9
+ import validate from './config/server/validate.server.js';
10
+ import writeMemo from './config/server/write.server.js';
11
+ import generateRoutes from './dev/generate/routes/index.server.js';
12
+ import generateTypes from './dev/generate/types/index.server.js';
13
13
  import { RimeError } from './errors/index.js';
14
14
  import i18n from './i18n/index.js';
15
15
  import { registerTranslation } from './i18n/register.server.js';
@@ -91,33 +91,27 @@
91
91
  </div>
92
92
  </div>
93
93
 
94
- <style>/**************************************/
95
-
96
- /* Font */
97
-
98
- /**************************************/
99
-
100
- .rz-block {
94
+ <style>.rz-block {
101
95
  --rz-fields-padding: var(--rz-size-5);
102
96
  position: relative;
103
97
  border: var(--rz-border);
104
98
  border-radius: var(--rz-radius-sm);
105
99
  }
106
100
 
107
- .rz-block__grip {
101
+ .rz-block__grip {
108
102
  cursor: grab;
109
103
  }
110
104
 
111
- .rz-block:hover > :global(.rz-block__content > .rz-block__header > .rz-block-actions) {
105
+ .rz-block:hover > :global(.rz-block__content > .rz-block__header > .rz-block-actions) {
112
106
  opacity: 1;
113
107
  pointer-events: all;
114
108
  }
115
109
 
116
- .rz-block__content {
110
+ .rz-block__content {
117
111
  background-color: var(--rz-collapse-fields-content-bg);
118
112
  }
119
113
 
120
- .rz-block__header {
114
+ .rz-block__header {
121
115
  display: flex;
122
116
  position: relative;
123
117
  align-items: center;
@@ -129,14 +123,14 @@
129
123
  background-color: hsl(var(--rz-row-bg));
130
124
  }
131
125
 
132
- .rz-block__title-button {
126
+ .rz-block__title-button {
133
127
  flex: 1;
134
128
  justify-content: flex-start;
135
129
  flex-direction: row;
136
130
  padding: var(--rz-size-3);
137
131
  }
138
132
 
139
- .rz-block__content--closed {
133
+ .rz-block__content--closed {
140
134
  border-radius: var(--rz-radius-md);
141
135
  .rz-block__header {
142
136
  border-color: transparent;
@@ -157,7 +151,7 @@
157
151
  }
158
152
  }
159
153
 
160
- .rz-block__title {
154
+ .rz-block__title {
161
155
  display: flex;
162
156
  height: var(--rz-size-6);
163
157
  align-items: center;
@@ -167,25 +161,25 @@
167
161
  font-size: var(--rz-text-xs);
168
162
  }
169
163
 
170
- .rz-block__heading {
164
+ .rz-block__heading {
171
165
  font-variation-settings: 'wght' 500;
172
166
  font-weight: 500;
173
167
  }
174
168
 
175
- .rz-block__fields {
169
+ .rz-block__fields {
176
170
  flex: 1;
177
171
  padding: var(--rz-size-6) 0;
178
172
  }
179
173
 
180
- .rz-block__fields--hidden {
174
+ .rz-block__fields--hidden {
181
175
  display: none;
182
176
  }
183
177
 
184
- .rz-block[data-sorting='true'] .rz-block__grip {
178
+ .rz-block[data-sorting='true'] .rz-block__grip {
185
179
  display: none;
186
180
  }
187
181
 
188
- :global(.rz-block-actions) {
182
+ :global(.rz-block-actions) {
189
183
  position: absolute;
190
184
  opacity: 0;
191
185
  pointer-events: none;
@@ -131,30 +131,24 @@
131
131
  </div>
132
132
  </fieldset>
133
133
 
134
- <style>/**************************************/
135
-
136
- /* Font */
137
-
138
- /**************************************/
139
-
140
- .rz-blocks__title {
134
+ <style>.rz-blocks__title {
141
135
  font-variation-settings: 'wght' 500;
142
136
  font-weight: 500;
143
137
  }
144
138
 
145
- sup {
139
+ sup {
146
140
  font-size: var(--rz-text-2xs);
147
141
  text-transform: uppercase;
148
142
  }
149
143
 
150
- .rz-blocks__actions {
144
+ .rz-blocks__actions {
151
145
  /* translate: 0 calc(-1 * var(--rz-size-2)); */
152
146
  display: flex;
153
147
  align-items: end;
154
148
  gap: var(--rz-size-2);
155
149
  }
156
150
 
157
- .rz-blocks__list {
151
+ .rz-blocks__list {
158
152
  display: grid;
159
153
  gap: var(--rz-size-4);
160
154
 
@@ -163,13 +157,12 @@ sup {
163
157
  }
164
158
  }
165
159
 
166
- .rz-blocks__header {
160
+ .rz-blocks__header {
167
161
  display: flex;
168
162
  justify-content: space-between;
169
163
  margin-bottom: var(--rz-size-4);
170
164
  }
171
-
172
- .rz-blocks__actions-bottom {
165
+ .rz-blocks__actions-bottom {
173
166
  display: flex;
174
167
  gap: var(--rz-size-3);
175
168
  padding-right: var(--rz-size-3);
@@ -2,7 +2,7 @@ import { templateUniqueRequired } from '../../adapter-sqlite/generate-schema/tem
2
2
  import { getSchemaColumnNames } from '../../adapter-sqlite/generate-schema/util.js';
3
3
  export const toSchema = (field, parentPath) => {
4
4
  const { camel, snake } = getSchemaColumnNames({ name: field.raw.name, parentPath });
5
- const suffix = templateUniqueRequired(field.raw);
5
+ const suffix = templateUniqueRequired(field.raw, field.raw.defaultValue ?? false);
6
6
  if (field._generateSchema)
7
7
  return field._generateSchema({ camel, snake, suffix });
8
8
  return `${camel}: integer('${snake}', { mode: 'boolean' })${suffix}`;
@@ -2,11 +2,12 @@ import { templateUniqueRequired } from '../../adapter-sqlite/generate-schema/tem
2
2
  import { getSchemaColumnNames } from '../../adapter-sqlite/generate-schema/util.js';
3
3
  export const toSchema = (field, parentPath) => {
4
4
  const { camel, snake } = getSchemaColumnNames({ name: field.raw.name, parentPath });
5
- const suffix = templateUniqueRequired(field.raw);
5
+ const suffix = templateUniqueRequired({ ...field.raw }, typeof field.raw.defaultValue === 'string' ? field.raw.defaultValue : '');
6
6
  if (field._generateSchema)
7
7
  return field._generateSchema({ camel, snake, suffix });
8
8
  return `${camel}: text('${snake}')${suffix}`;
9
9
  };
10
10
  export const toType = (field) => {
11
- return `${field.raw.name}${field.raw.required ? '' : '?'}: string`;
11
+ const optionsJoinedType = field.raw.options.map((o) => `'${o.value}'`).join(' | ');
12
+ return `${field.raw.name}${field.raw.required ? '' : '?'}: ${optionsJoinedType}`;
12
13
  };
@@ -2,7 +2,7 @@ import { templateUniqueRequired } from '../../adapter-sqlite/generate-schema/tem
2
2
  import { getSchemaColumnNames } from '../../adapter-sqlite/generate-schema/util.js';
3
3
  export const toSchema = (field, parentPath) => {
4
4
  const { camel, snake } = getSchemaColumnNames({ name: field.raw.name, parentPath });
5
- const suffix = templateUniqueRequired(field.raw);
5
+ const suffix = templateUniqueRequired({ ...field.raw }, field.raw.defaultValue instanceof Date ? field.raw.defaultValue.getTime() : 0);
6
6
  if (field._generateSchema)
7
7
  return field._generateSchema({ camel, snake, suffix });
8
8
  return `${camel}: integer('${snake}', { mode : 'timestamp_ms' })${suffix}`;
@@ -2,7 +2,7 @@ import { templateUniqueRequired } from '../../adapter-sqlite/generate-schema/tem
2
2
  import { getSchemaColumnNames } from '../../adapter-sqlite/generate-schema/util.js';
3
3
  export function toSchema(field, parentPath) {
4
4
  const { camel, snake } = getSchemaColumnNames({ name: field.name, parentPath });
5
- const suffix = templateUniqueRequired({ unique: field.raw.unique, required: field.raw.required });
5
+ const suffix = templateUniqueRequired({ unique: field.raw.unique, required: field.raw.required }, typeof field.raw.defaultValue === 'string' ? field.raw.defaultValue : '');
6
6
  if (field._generateSchema)
7
7
  return field._generateSchema({ camel, snake, suffix });
8
8
  return `${camel}: text('${snake}')${suffix}`;
@@ -91,19 +91,13 @@
91
91
  {/if}
92
92
  </div>
93
93
 
94
- <style>/**************************************/
95
-
96
- /* Font */
97
-
98
- /**************************************/
99
-
100
- :root {
94
+ <style>:root {
101
95
  --rz-group-trigger-bg: hsl(var(--rz-row-bg));
102
96
  --rz-group-preview-bg: light-dark(hsl(var(--rz-gray-16)), hsl(var(--rz-gray-3)));
103
97
  --rz-group-content-bg: var(--rz-collapse-fields-content-bg);
104
98
  }
105
99
 
106
- .rz-group-field__wrapper {
100
+ .rz-group-field__wrapper {
107
101
  border: var(--rz-border);
108
102
  border-radius: var(--rz-radius-md);
109
103
  background-color: var(--rz-group-trigger-bg);
@@ -114,18 +108,18 @@
114
108
  }
115
109
  }
116
110
 
117
- .rz-group-field__wrapper--hidden {
111
+ .rz-group-field__wrapper--hidden {
118
112
  display: none;
119
113
  }
120
114
 
121
- .rz-group-field__content {
115
+ .rz-group-field__content {
122
116
  --rz-fields-padding: var(--rz-size-5);
123
117
  padding-top: var(--rz-fields-padding);
124
118
  padding-bottom: var(--rz-fields-padding);
125
119
  background-color: var(--rz-group-content-bg);
126
120
  }
127
121
 
128
- .rz-group-field__trigger {
122
+ .rz-group-field__trigger {
129
123
  display: flex;
130
124
  align-items: center;
131
125
  justify-content: space-between;
@@ -149,8 +143,7 @@
149
143
  rotate: -180deg;
150
144
  }
151
145
  }
152
-
153
- .rz-group-field__trigger--live {
146
+ .rz-group-field__trigger--live {
154
147
  font-size: var(--rz-text-md);
155
148
  }
156
149
  </style>
@@ -5,7 +5,7 @@ import { logger } from '../../core/logger/index.server.js';
5
5
  import { trycatch } from '../../util/function.js';
6
6
  export const toSchema = (field, parentPath) => {
7
7
  const { camel, snake } = getSchemaColumnNames({ name: field.name, parentPath });
8
- const suffix = templateUniqueRequired(field.raw);
8
+ const suffix = templateUniqueRequired(field.raw, typeof field.raw.defaultValue === 'object' ? field.raw.defaultValue : {});
9
9
  if (field._generateSchema)
10
10
  return field._generateSchema({ camel, snake, suffix });
11
11
  return `${camel}: text('${snake}', { mode: 'json'})${suffix}`;
@@ -76,6 +76,7 @@
76
76
  }
77
77
 
78
78
  /* Chrome, Safari, Edge, Opera */
79
+
79
80
  .rz-number__input::-webkit-outer-spin-button,
80
81
  .rz-number__input::-webkit-inner-spin-button {
81
82
  -webkit-appearance: none;
@@ -83,6 +84,7 @@
83
84
  }
84
85
 
85
86
  /* Firefox */
87
+
86
88
  .rz-number__input[type='number'] {
87
89
  -webkit-appearance: textfield;
88
90
  appearance: textfield;
@@ -2,7 +2,7 @@ import { templateUniqueRequired } from '../../adapter-sqlite/generate-schema/tem
2
2
  import { getSchemaColumnNames } from '../../adapter-sqlite/generate-schema/util.js';
3
3
  export const toSchema = (field, parentPath) => {
4
4
  const { camel, snake } = getSchemaColumnNames({ name: field.name, parentPath });
5
- const suffix = templateUniqueRequired(field.raw);
5
+ const suffix = templateUniqueRequired(field.raw, typeof field.raw.defaultValue === 'number' ? field.raw.defaultValue : 0);
6
6
  if (field._generateSchema)
7
7
  return field._generateSchema({ camel, snake, suffix });
8
8
  return `${camel}: real('${snake}')${suffix}`;
@@ -2,7 +2,7 @@ import { templateUniqueRequired } from '../../adapter-sqlite/generate-schema/tem
2
2
  import { getSchemaColumnNames } from '../../adapter-sqlite/generate-schema/util.js';
3
3
  export const toSchema = (field, parentPath) => {
4
4
  const { camel, snake } = getSchemaColumnNames({ name: field.raw.name, parentPath });
5
- const suffix = templateUniqueRequired(field.raw);
5
+ const suffix = templateUniqueRequired(field.raw, typeof field.raw.defaultValue === 'string' ? field.raw.defaultValue : '');
6
6
  if (field._generateSchema)
7
7
  return field._generateSchema({ camel, snake, suffix });
8
8
  return `${camel}: text('${snake}')${suffix}`;