rimecms 0.29.0 → 0.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (215) hide show
  1. package/dist/adapter-sqlite/area.server.js +8 -8
  2. package/dist/adapter-sqlite/generate-schema/column.server.d.ts +13 -0
  3. package/dist/adapter-sqlite/generate-schema/column.server.js +77 -0
  4. package/dist/adapter-sqlite/generate-schema/index.server.js +7 -12
  5. package/dist/adapter-sqlite/generate-schema/root.server.js +35 -39
  6. package/dist/adapter-sqlite/generate-schema/templates.server.d.ts +12 -0
  7. package/dist/adapter-sqlite/generate-schema/templates.server.js +19 -0
  8. package/dist/adapter-sqlite/index.server.d.ts +1 -2
  9. package/dist/adapter-sqlite/index.server.js +0 -2
  10. package/dist/adapter-sqlite/relations.server.js +6 -1
  11. package/dist/adapter-sqlite/util.server.d.ts +1 -6
  12. package/dist/adapter-sqlite/util.server.js +6 -0
  13. package/dist/adapter-sqlite/where.server.js +17 -16
  14. package/dist/adapter-sqlite/with.server.js +9 -9
  15. package/dist/core/collections/auth/fields.d.ts +2 -182
  16. package/dist/core/collections/config/augment-auth.server.js +1 -1
  17. package/dist/core/collections/config/augment-nested.server.js +1 -1
  18. package/dist/core/collections/config/augment-upload.js +2 -2
  19. package/dist/core/collections/config/augment-upload.server.js +4 -1
  20. package/dist/core/collections/operations/duplicate.js +30 -11
  21. package/dist/core/collections/operations/updateById.js +6 -5
  22. package/dist/core/collections/rest/duplicate.server.js +7 -3
  23. package/dist/core/collections/upload/disk/delete.server.d.ts +1 -1
  24. package/dist/core/collections/upload/disk/delete.server.js +48 -1
  25. package/dist/core/collections/upload/hooks/clean-up-files.server.js +2 -2
  26. package/dist/core/collections/upload/hooks/extract-path.server.d.ts +1 -1
  27. package/dist/core/collections/upload/hooks/extract-path.server.js +1 -1
  28. package/dist/core/collections/upload/hooks/process-file-upload.server.js +3 -3
  29. package/dist/core/config/server/validate.server.js +50 -30
  30. package/dist/core/config/shared/find-thumbnail.js +12 -12
  31. package/dist/core/config/shared/find-title.js +13 -13
  32. package/dist/core/config/shared/upload-directories.js +1 -1
  33. package/dist/core/constant.server.d.ts +1 -0
  34. package/dist/core/constant.server.js +2 -0
  35. package/dist/core/dev/cache/index.server.js +9 -9
  36. package/dist/core/dev/cli/build/index.js +2 -2
  37. package/dist/core/dev/cli/clear/index.server.js +2 -1
  38. package/dist/core/dev/cli/generate/index.server.js +3 -2
  39. package/dist/core/dev/cli/init/index.server.js +1 -1
  40. package/dist/core/dev/generate/routes/index.server.js +2 -2
  41. package/dist/core/dev/generate/types/index.server.js +17 -17
  42. package/dist/core/dev/vite/index.server.js +21 -5
  43. package/dist/core/fields/builders/boolean-builder.d.ts +3 -1
  44. package/dist/core/fields/builders/boolean-builder.js +3 -0
  45. package/dist/core/fields/builders/field-builder.d.ts +35 -2
  46. package/dist/core/fields/builders/field-builder.js +33 -2
  47. package/dist/core/fields/builders/form-field-builder.d.ts +71 -12
  48. package/dist/core/fields/builders/form-field-builder.js +96 -6
  49. package/dist/core/fields/builders/select-builder.d.ts +4 -1
  50. package/dist/core/fields/builders/select-builder.js +3 -0
  51. package/dist/core/fields/util.d.ts +8 -16
  52. package/dist/core/fields/util.js +49 -83
  53. package/dist/core/handlers/routes.server.js +16 -3
  54. package/dist/core/naming.d.ts +34 -0
  55. package/dist/core/naming.js +39 -0
  56. package/dist/core/operations/blocks/diff.server.js +1 -1
  57. package/dist/core/operations/blocks/extract.server.js +1 -1
  58. package/dist/core/operations/configMap/buildTreeMap.d.ts +3 -2
  59. package/dist/core/operations/configMap/buildTreeMap.js +1 -1
  60. package/dist/core/operations/configMap/index.d.ts +2 -1
  61. package/dist/core/operations/configMap/index.js +13 -13
  62. package/dist/core/operations/configMap/types.d.ts +2 -2
  63. package/dist/core/operations/hooks/before-read/process-document-fields.server.js +14 -17
  64. package/dist/core/operations/hooks/before-upsert/data-config-map.server.js +1 -1
  65. package/dist/core/operations/hooks/before-upsert/original-config-map.server.js +1 -1
  66. package/dist/core/operations/hooks/before-upsert/set-default-values.server.d.ts +2 -4
  67. package/dist/core/operations/hooks/before-upsert/set-default-values.server.js +10 -15
  68. package/dist/core/operations/hooks/before-upsert/validate-fields.server.js +49 -31
  69. package/dist/core/operations/relations/extract.server.js +5 -5
  70. package/dist/core/operations/shared/fallback-data-from-original.js +2 -2
  71. package/dist/core/operations/tree/diff.server.js +1 -1
  72. package/dist/core/operations/tree/extract.server.js +1 -1
  73. package/dist/core/plugins/cache/cache.server.js +3 -3
  74. package/dist/fields/blocks/component/AddBlockButton.svelte +7 -7
  75. package/dist/fields/blocks/component/AddBlockButton.svelte.d.ts +2 -2
  76. package/dist/fields/blocks/component/Blocks.svelte +6 -7
  77. package/dist/fields/blocks/component/props.d.ts +2 -2
  78. package/dist/fields/blocks/index.d.ts +1 -1
  79. package/dist/fields/blocks/index.js +3 -3
  80. package/dist/fields/blocks/index.server.js +1 -1
  81. package/dist/fields/checkbox/component/Checkbox.svelte +2 -2
  82. package/dist/fields/checkbox/component/props.d.ts +2 -2
  83. package/dist/fields/checkbox/index.server.d.ts +1 -2
  84. package/dist/fields/checkbox/index.server.js +1 -10
  85. package/dist/fields/combobox/component/ComboBox.svelte +3 -3
  86. package/dist/fields/combobox/component/props.d.ts +2 -2
  87. package/dist/fields/combobox/index.server.d.ts +1 -2
  88. package/dist/fields/combobox/index.server.js +2 -11
  89. package/dist/fields/component/index.d.ts +1 -1
  90. package/dist/fields/date/component/Date.svelte +4 -4
  91. package/dist/fields/date/component/Date.svelte.d.ts +2 -2
  92. package/dist/fields/date/index.d.ts +3 -1
  93. package/dist/fields/date/index.js +3 -0
  94. package/dist/fields/date/index.server.d.ts +1 -2
  95. package/dist/fields/date/index.server.js +1 -10
  96. package/dist/fields/email/component/Email.svelte +5 -6
  97. package/dist/fields/email/component/props.d.ts +2 -3
  98. package/dist/fields/email/index.d.ts +3 -2
  99. package/dist/fields/email/index.js +4 -1
  100. package/dist/fields/email/index.server.d.ts +0 -3
  101. package/dist/fields/email/index.server.js +0 -9
  102. package/dist/fields/group/component/Group.svelte +9 -15
  103. package/dist/fields/group/component/Group.svelte.d.ts +2 -2
  104. package/dist/fields/group/index.d.ts +4 -2
  105. package/dist/fields/group/index.server.js +2 -2
  106. package/dist/fields/index.server.d.ts +1 -4
  107. package/dist/fields/index.server.js +17 -13
  108. package/dist/fields/link/component/Link.svelte +5 -5
  109. package/dist/fields/link/component/props.d.ts +2 -2
  110. package/dist/fields/link/index.d.ts +4 -1
  111. package/dist/fields/link/index.js +9 -10
  112. package/dist/fields/link/runtime.d.ts +2 -0
  113. package/dist/fields/link/runtime.js +1 -0
  114. package/dist/fields/link/{index.server.d.ts → runtime.server.d.ts} +1 -2
  115. package/dist/fields/link/{index.server.js → runtime.server.js} +2 -11
  116. package/dist/fields/number/component/Number.svelte +6 -6
  117. package/dist/fields/number/component/props.d.ts +2 -2
  118. package/dist/fields/number/index.d.ts +4 -10
  119. package/dist/fields/number/index.js +3 -4
  120. package/dist/fields/number/index.server.d.ts +1 -2
  121. package/dist/fields/number/index.server.js +1 -10
  122. package/dist/fields/radio/component/Radio.svelte +6 -7
  123. package/dist/fields/radio/component/props.d.ts +2 -2
  124. package/dist/fields/radio/index.server.d.ts +1 -2
  125. package/dist/fields/radio/index.server.js +2 -11
  126. package/dist/fields/relation/component/Relation.svelte +18 -14
  127. package/dist/fields/relation/component/Relation.svelte.d.ts +2 -2
  128. package/dist/fields/relation/index.d.ts +7 -4
  129. package/dist/fields/relation/index.js +8 -47
  130. package/dist/fields/relation/runtime.d.ts +5 -0
  131. package/dist/fields/relation/runtime.js +4 -0
  132. package/dist/fields/relation/runtime.server.d.ts +8 -0
  133. package/dist/fields/relation/runtime.server.js +49 -0
  134. package/dist/fields/rich-text/component/RichText.svelte +5 -5
  135. package/dist/fields/rich-text/component/props.d.ts +2 -2
  136. package/dist/fields/rich-text/core/features/fields/fields.svelte +2 -2
  137. package/dist/fields/rich-text/index.d.ts +2 -0
  138. package/dist/fields/rich-text/index.js +3 -0
  139. package/dist/fields/rich-text/index.server.d.ts +1 -2
  140. package/dist/fields/rich-text/index.server.js +1 -10
  141. package/dist/fields/select/component/Select.svelte +16 -16
  142. package/dist/fields/select/component/props.d.ts +2 -2
  143. package/dist/fields/select/index.d.ts +2 -0
  144. package/dist/fields/select/index.js +3 -0
  145. package/dist/fields/select/index.server.d.ts +1 -2
  146. package/dist/fields/select/index.server.js +2 -17
  147. package/dist/fields/slug/component/Slug.svelte +14 -10
  148. package/dist/fields/slug/component/Slug.svelte.d.ts +2 -2
  149. package/dist/fields/slug/index.d.ts +5 -2
  150. package/dist/fields/slug/index.js +3 -0
  151. package/dist/fields/slug/index.server.d.ts +1 -2
  152. package/dist/fields/slug/index.server.js +1 -10
  153. package/dist/fields/tabs/component/Tabs.svelte +15 -15
  154. package/dist/fields/tabs/component/Tabs.svelte.d.ts +2 -2
  155. package/dist/fields/tabs/index.d.ts +4 -16
  156. package/dist/fields/tabs/index.js +1 -8
  157. package/dist/fields/tabs/index.server.js +3 -3
  158. package/dist/fields/text/component/Text.svelte +5 -5
  159. package/dist/fields/text/component/props.d.ts +2 -3
  160. package/dist/fields/text/index.d.ts +4 -10
  161. package/dist/fields/text/index.js +3 -4
  162. package/dist/fields/text/index.server.d.ts +1 -2
  163. package/dist/fields/text/index.server.js +1 -10
  164. package/dist/fields/textarea/component/TextArea.svelte +3 -3
  165. package/dist/fields/textarea/component/props.d.ts +2 -2
  166. package/dist/fields/textarea/index.d.ts +4 -1
  167. package/dist/fields/textarea/index.js +3 -0
  168. package/dist/fields/textarea/index.server.d.ts +1 -2
  169. package/dist/fields/textarea/index.server.js +1 -10
  170. package/dist/fields/time/component/Time.svelte +5 -5
  171. package/dist/fields/time/component/Time.svelte.d.ts +1 -1
  172. package/dist/fields/time/component/props.d.ts +2 -2
  173. package/dist/fields/time/index.d.ts +2 -0
  174. package/dist/fields/time/index.js +3 -0
  175. package/dist/fields/time/index.server.d.ts +1 -2
  176. package/dist/fields/time/index.server.js +1 -10
  177. package/dist/fields/toggle/component/Toggle.svelte +3 -3
  178. package/dist/fields/toggle/component/Toggle.svelte.d.ts +1 -1
  179. package/dist/fields/toggle/component/props.d.ts +2 -2
  180. package/dist/fields/toggle/index.d.ts +2 -1
  181. package/dist/fields/toggle/index.server.d.ts +1 -2
  182. package/dist/fields/toggle/index.server.js +1 -10
  183. package/dist/fields/tree/component/AddItemButton.svelte +1 -2
  184. package/dist/fields/tree/component/Tree.svelte +6 -6
  185. package/dist/fields/tree/component/TreeBlock.svelte +5 -12
  186. package/dist/fields/tree/component/props.d.ts +3 -3
  187. package/dist/fields/tree/index.d.ts +3 -1
  188. package/dist/fields/tree/index.js +2 -2
  189. package/dist/fields/types.d.ts +11 -5
  190. package/dist/panel/components/fields/FieldsPreview.svelte +4 -5
  191. package/dist/panel/components/fields/Hint.svelte +5 -4
  192. package/dist/panel/components/fields/Hint.svelte.d.ts +3 -2
  193. package/dist/panel/components/fields/Label.svelte +6 -11
  194. package/dist/panel/components/fields/Label.svelte.d.ts +3 -2
  195. package/dist/panel/components/fields/LabelFor.svelte +4 -4
  196. package/dist/panel/components/fields/LabelFor.svelte.d.ts +2 -1
  197. package/dist/panel/components/fields/RenderFields.svelte +11 -16
  198. package/dist/panel/components/fields/{root.svelte.d.ts → fieldset.svelte.d.ts} +1 -1
  199. package/dist/panel/components/fields/{root.svelte.js → fieldset.svelte.js} +1 -1
  200. package/dist/panel/components/fields/index.d.ts +5 -5
  201. package/dist/panel/components/fields/index.js +2 -2
  202. package/dist/panel/components/sections/document/AuthFooter.svelte +2 -7
  203. package/dist/panel/components/sections/live/LiveEditPanel.svelte +2 -2
  204. package/dist/panel/context/collection.svelte.js +9 -9
  205. package/dist/panel/context/documentForm.svelte.d.ts +8 -21
  206. package/dist/panel/context/documentForm.svelte.js +45 -52
  207. package/dist/panel/context/form.svelte.d.ts +4 -3
  208. package/dist/panel/context/form.svelte.js +14 -16
  209. package/dist/panel/pages/auth/fields.d.ts +4 -4
  210. package/dist/panel/pages/auth/fields.js +6 -22
  211. package/dist/panel/pages/auth/reset-password/ResetPassword.svelte +3 -10
  212. package/dist/util/doc.js +15 -17
  213. package/package.json +3 -2
  214. package/dist/fields/relation/index.server.d.ts +0 -4
  215. package/dist/fields/relation/index.server.js +0 -13
@@ -4,9 +4,6 @@ import { logger } from '../../logger/index.server.js';
4
4
  import fs from 'fs';
5
5
  import path from 'path';
6
6
  const cachePath = path.resolve(process.cwd(), '.cache');
7
- if (!fs.existsSync(cachePath)) {
8
- fs.mkdirSync(cachePath);
9
- }
10
7
  const IS_ENV_CACHE_ENABLED = process.env.RIME_CACHE_ENABLED === 'true';
11
8
  export class Cache {
12
9
  static memoryCache = new Map();
@@ -68,6 +65,9 @@ export class Cache {
68
65
  this.memoryCache.set(key, value);
69
66
  }
70
67
  static async setToDisk(key, value) {
68
+ if (!fs.existsSync(cachePath)) {
69
+ fs.mkdirSync(cachePath);
70
+ }
71
71
  const keyPath = path.join(cachePath, key + '.txt');
72
72
  await fs.promises.writeFile(keyPath, value);
73
73
  }
@@ -7,11 +7,11 @@
7
7
  import * as Command from '../../../panel/components/ui/command/index.js';
8
8
  import { capitalize } from '../../../util/string.js';
9
9
  import { CirclePlus, ToyBrick } from '@lucide/svelte';
10
- import type { BlocksField, BlocksFieldBlock } from '../index.js';
10
+ import type { BlocksBuilder, BlocksFieldBlock } from '../index.js';
11
11
 
12
12
  type AddBlock = (options: Omit<GenericBlock, 'id' | 'path'>) => void;
13
13
  type Props = {
14
- config: BlocksField;
14
+ config: BlocksBuilder;
15
15
  addBlock: AddBlock;
16
16
  };
17
17
  const { config, addBlock }: Props = $props();
@@ -22,16 +22,16 @@
22
22
  const add = (block: BlocksFieldBlock) => {
23
23
  open = false;
24
24
  const empty = {
25
- ...emptyValuesFromFieldConfig(block.fields.map((f) => f.compile()).filter(isFormField)),
25
+ ...emptyValuesFromFieldConfig(block.fields.filter(isFormField)),
26
26
  type: block.name
27
27
  };
28
28
  addBlock(empty);
29
29
  };
30
30
  </script>
31
31
 
32
- {#if config.blocks.length === 1}
32
+ {#if config.get.blocks.length === 1}
33
33
  <Button
34
- onclick={() => add(config.blocks[0].block)}
34
+ onclick={() => add(config.get.blocks[0].block)}
35
35
  variant="ghost"
36
36
  icon={CirclePlus}
37
37
  size="icon"
@@ -51,7 +51,7 @@
51
51
  <Command.List class="rz-add-block-button__list">
52
52
  <Command.Empty>No results found.</Command.Empty>
53
53
  <Command.Group heading="Component">
54
- {#each config.blocks as blockBuilder, index (index)}
54
+ {#each config.get.blocks as blockBuilder, index (index)}
55
55
  {@const blockConfig = blockBuilder.block}
56
56
  {@const BlockIcon = blockConfig.icon || ToyBrick}
57
57
  <Command.Item
@@ -82,7 +82,7 @@
82
82
  </Command.List>
83
83
 
84
84
  <div class="rz-add-block-button__preview-wrap">
85
- {#each config.blocks as blockFieldBuilder, index (index)}
85
+ {#each config.get.blocks as blockFieldBuilder, index (index)}
86
86
  <div
87
87
  class:rz-add-block-button__preview--active={ariaSelected === blockFieldBuilder.name}
88
88
  class="rz-add-block-button__preview"
@@ -1,8 +1,8 @@
1
1
  import type { GenericBlock } from '../../../core/types/doc.js';
2
- import type { BlocksField } from '../index.js';
2
+ import type { BlocksBuilder } from '../index.js';
3
3
  type AddBlock = (options: Omit<GenericBlock, 'id' | 'path'>) => void;
4
4
  type Props = {
5
- config: BlocksField;
5
+ config: BlocksBuilder;
6
6
  addBlock: AddBlock;
7
7
  };
8
8
  declare const AddBlockButton: import("svelte").Component<Props, {}, "">;
@@ -2,12 +2,11 @@
2
2
  import { t__ } from '../../../core/i18n/index.js';
3
3
  import type { GenericBlock } from '../../../core/types/doc.js';
4
4
  import type { BlocksFieldBlock } from '../../types';
5
+ import { fieldset } from '../../../panel/components/fields/fieldset.svelte.js';
5
6
  import { Field } from '../../../panel/components/fields/index.js';
6
- import { root } from '../../../panel/components/fields/root.svelte.js';
7
7
  import Button from '../../../panel/components/ui/button/button.svelte';
8
8
  import { getLocaleContext } from '../../../panel/context/locale.svelte';
9
9
  import { useSortable } from '../../../panel/util/Sortable.js';
10
- import { capitalize } from '../../../util/string.js';
11
10
  import { Download } from '@lucide/svelte';
12
11
  import Sortable from 'sortablejs';
13
12
  import { onDestroy } from 'svelte';
@@ -63,7 +62,7 @@
63
62
  });
64
63
 
65
64
  function getConfigByBlockType(type: string): BlocksFieldBlock {
66
- const blockConfig = config.blocks.find((b) => type === b.name);
65
+ const blockConfig = config.get.blocks.find((b) => type === b.name);
67
66
  if (!blockConfig) {
68
67
  throw new Error(`Block configuration not found for type: ${type}`);
69
68
  }
@@ -82,14 +81,14 @@
82
81
  });
83
82
  </script>
84
83
 
85
- <fieldset class="rz-field-blocks {config.className || ''}" use:root={field}>
84
+ <fieldset class="rz-field-blocks {config.get.className || ''}" use:fieldset={field}>
86
85
  <Field.Error error={field.error} />
87
86
 
88
87
  <header class="rz-blocks__header">
89
88
  <div>
90
89
  <h3 class="rz-blocks__title">
91
- {config.label ? config.label : capitalize(config.name)}
92
- {#if config.localized}
90
+ {config.get.label}
91
+ {#if config.get.localized}
93
92
  <sup>{locale.code}</sup>
94
93
  {/if}
95
94
  </h3>
@@ -122,7 +121,7 @@
122
121
  <div class="rz-blocks__actions-bottom">
123
122
  <AddBlockButton addBlock={add} {config} />
124
123
 
125
- {#if locale && locale.code !== locale.defaultCode && config.localized}
124
+ {#if locale && locale.code !== locale.defaultCode && config.get.localized}
126
125
  <Button icon={Download} size="sm" onclick={field.setValueFromDefaultLocale} variant="text">
127
126
  {t__('fields.get_data_from')}
128
127
  {locale.defaultCode}
@@ -1,7 +1,7 @@
1
1
  import type { DocumentFormContext } from '../../../panel/context/documentForm.svelte.js';
2
- import type { BlocksField } from '../index.js';
2
+ import type { BlocksBuilder } from '../index.js';
3
3
  export type BlocksProps = {
4
4
  path: string;
5
- config: BlocksField;
5
+ config: BlocksBuilder;
6
6
  form: DocumentFormContext;
7
7
  };
@@ -41,7 +41,7 @@ declare class BlockBuilder {
41
41
  description(description: string): this;
42
42
  label(label: string): this;
43
43
  fields(...fields: FieldBuilder<Field>[]): this;
44
- get raw(): {
44
+ get get(): {
45
45
  name: string;
46
46
  label?: string;
47
47
  description?: string;
@@ -32,7 +32,7 @@ export class BlocksBuilder extends FormFieldBuilder {
32
32
  // Add a locale prop in each block
33
33
  const hasAlreadyLocale = !!blockBuilder.block.fields
34
34
  .filter((field) => field instanceof FormFieldBuilder)
35
- .find((field) => field.raw.name === 'locale');
35
+ .find((field) => field.name === 'locale');
36
36
  if (!hasAlreadyLocale) {
37
37
  blockBuilder.block.fields.push(text('locale').hidden());
38
38
  }
@@ -41,7 +41,7 @@ export class BlocksBuilder extends FormFieldBuilder {
41
41
  // If type / position / path field do not set as localized
42
42
  // as it's a block property
43
43
  if (field instanceof FormFieldBuilder &&
44
- ['position', 'type', 'path', 'locale'].includes(field.raw.name)) {
44
+ ['position', 'type', 'path', 'locale'].includes(field.name)) {
45
45
  return field;
46
46
  }
47
47
  // For all others fields set as localized
@@ -114,7 +114,7 @@ class BlockBuilder {
114
114
  this.block.fields = [...fields, ...this.block.fields];
115
115
  return this;
116
116
  }
117
- get raw() {
117
+ get get() {
118
118
  return { ...this.block };
119
119
  }
120
120
  get name() {
@@ -1,5 +1,5 @@
1
1
  import { toPascalCase } from '../../util/string.js';
2
2
  export const toType = (field) => {
3
- const blockNames = field.raw.blocks.map((block) => `Block${toPascalCase(block.raw.name)}`);
3
+ const blockNames = field.get.blocks.map((block) => `Block${toPascalCase(block.name)}`);
4
4
  return `${field.name}: Array<${blockNames.join(' | ')}>,`;
5
5
  };
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
+ import { fieldset } from '../../../panel/components/fields/fieldset.svelte.js';
2
3
  import { Field } from '../../../panel/components/fields/index.js';
3
- import { root } from '../../../panel/components/fields/root.svelte.js';
4
4
  import { Checkbox } from '../../../panel/components/ui/checkbox/index.js';
5
5
  import { slugify } from '../../../util/string.js';
6
6
  import type { CheckboxProps } from './props';
@@ -17,7 +17,7 @@
17
17
  const inputId = $derived(`${form.key}-${slugify(path)}`);
18
18
  </script>
19
19
 
20
- <fieldset class="rz-checkbox-field {config.className || ''}" use:root={field}>
20
+ <fieldset class="rz-checkbox-field {config.get.className || ''}" use:fieldset={field}>
21
21
  <div>
22
22
  <Checkbox
23
23
  class="rz-checkbox-field__input {checkboxErrorClass}"
@@ -1,7 +1,7 @@
1
1
  import type { DocumentFormContext } from '../../../panel/context/documentForm.svelte.js';
2
- import type { CheckboxField } from '../index.js';
2
+ import type { CheckboxFieldBuilder } from '../index.js';
3
3
  export type CheckboxProps = {
4
4
  path: string;
5
- config: CheckboxField;
5
+ config: CheckboxFieldBuilder;
6
6
  form: DocumentFormContext;
7
7
  };
@@ -1,4 +1,3 @@
1
- import type { ToSchema, ToType } from '../index.server.js';
1
+ import type { ToType } from '../index.server.js';
2
2
  import type { CheckboxFieldBuilder } from './index.js';
3
- export declare const toSchema: ToSchema<CheckboxFieldBuilder>;
4
3
  export declare const toType: ToType<CheckboxFieldBuilder>;
@@ -1,12 +1,3 @@
1
- import { templateUniqueRequired } from '../../adapter-sqlite/generate-schema/templates.server.js';
2
- import { getSchemaColumnNames } from '../../adapter-sqlite/generate-schema/util.server.js';
3
- export const toSchema = (field, parentPath) => {
4
- const { camel, snake } = getSchemaColumnNames({ name: field.raw.name, parentPath });
5
- const suffix = templateUniqueRequired(field.raw, field.raw.defaultValue ?? false);
6
- if (field._generateSchema)
7
- return field._generateSchema({ camel, snake, suffix });
8
- return `${camel}: integer('${snake}', { mode: 'boolean' })${suffix}`;
9
- };
10
1
  export const toType = (field) => {
11
- return `${field.raw.name}: boolean`;
2
+ return `${field.name}: boolean`;
12
3
  };
@@ -2,7 +2,7 @@
2
2
  import { t__ } from '../../../core/i18n/index.js';
3
3
  import type { OptionWithIcon } from '../../types.js';
4
4
  import { Field } from '../../../panel';
5
- import { root } from '../../../panel/components/fields/root.svelte.js';
5
+ import { fieldset } from '../../../panel/components/fields/fieldset.svelte.js';
6
6
  import { Button } from '../../../panel/components/ui/button/index.js';
7
7
  import * as Command from '../../../panel/components/ui/command/index.js';
8
8
  import * as Popover from '../../../panel/components/ui/popover/index.js';
@@ -13,7 +13,7 @@
13
13
  const { path, config, form }: ComboBoxProps = $props();
14
14
 
15
15
  const field = $derived(form.useField(path, config));
16
- const options = $derived(config.options);
16
+ const options = $derived(config.get.options);
17
17
 
18
18
  let search = $state('');
19
19
  let open = $state(false);
@@ -30,7 +30,7 @@
30
30
  </span>
31
31
  {/snippet}
32
32
 
33
- <fieldset class="rz-combobox-field {config.className || ''}" use:root={field}>
33
+ <fieldset class="rz-combobox-field {config.get.className || ''}" use:fieldset={field}>
34
34
  <Field.Label {config} for={path || config.name} />
35
35
 
36
36
  <Popover.Root bind:open>
@@ -1,7 +1,7 @@
1
1
  import type { DocumentFormContext } from '../../../panel/context/documentForm.svelte.js';
2
- import type { ComboBoxField } from '../index.js';
2
+ import type { ComboBoxFieldBuilder } from '../index.js';
3
3
  export type ComboBoxProps = {
4
4
  path: string;
5
- config: ComboBoxField;
5
+ config: ComboBoxFieldBuilder;
6
6
  form: DocumentFormContext;
7
7
  };
@@ -1,4 +1,3 @@
1
- import type { ToSchema, ToType } from '../index.server.js';
1
+ import type { ToType } from '../index.server.js';
2
2
  import type { ComboBoxFieldBuilder } from './index.js';
3
- export declare const toSchema: ToSchema<ComboBoxFieldBuilder>;
4
3
  export declare const toType: ToType<ComboBoxFieldBuilder>;
@@ -1,13 +1,4 @@
1
- import { templateUniqueRequired } from '../../adapter-sqlite/generate-schema/templates.server.js';
2
- import { getSchemaColumnNames } from '../../adapter-sqlite/generate-schema/util.server.js';
3
- export const toSchema = (field, parentPath) => {
4
- const { camel, snake } = getSchemaColumnNames({ name: field.raw.name, parentPath });
5
- const suffix = templateUniqueRequired({ ...field.raw }, typeof field.raw.defaultValue === 'string' ? field.raw.defaultValue : '');
6
- if (field._generateSchema)
7
- return field._generateSchema({ camel, snake, suffix });
8
- return `${camel}: text('${snake}')${suffix}`;
9
- };
10
1
  export const toType = (field) => {
11
- const optionsJoinedType = field.raw.options.map((o) => `'${o.value}'`).join(' | ');
12
- return `${field.raw.name}${field.raw.required ? '' : '?'}: ${optionsJoinedType}`;
2
+ const optionsJoinedType = field.get.options.map((o) => `'${o.value}'`).join(' | ');
3
+ return `${field.name}${field.get.required ? '' : '?'}: ${optionsJoinedType}`;
13
4
  };
@@ -6,7 +6,7 @@ import type { WithOptional } from '../../util/types.js';
6
6
  import type { Component } from 'svelte';
7
7
  type TypedComponent = Component<{
8
8
  path: string;
9
- config: ComponentField;
9
+ config: ComponentFieldBuilder;
10
10
  form: DocumentFormContext<WithOptional<GenericDoc, 'id'>>;
11
11
  }>;
12
12
  export declare const component: (component: TypedComponent) => ComponentFieldBuilder;
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
+ import { fieldset } from '../../../panel/components/fields/fieldset.svelte.js';
2
3
  import { Field } from '../../../panel/components/fields/index.js';
3
- import { root } from '../../../panel/components/fields/root.svelte.js';
4
4
  import { Button } from '../../../panel/components/ui/button/index.js';
5
5
  import { Calendar } from '../../../panel/components/ui/calendar/index.js';
6
6
  import * as Dialog from '../../../panel/components/ui/dialog/index.js';
@@ -8,9 +8,9 @@
8
8
  import { getLocaleContext } from '../../../panel/context/locale.svelte';
9
9
  import { CalendarDate, getLocalTimeZone, type DateValue } from '@internationalized/date';
10
10
  import { Calendar as CalendarIcon } from '@lucide/svelte';
11
- import type { DateField } from '../index.js';
11
+ import type { DateFieldBuilder } from '../index.js';
12
12
 
13
- type Props = { path: string; config: DateField; form: DocumentFormContext };
13
+ type Props = { path: string; config: DateFieldBuilder; form: DocumentFormContext };
14
14
 
15
15
  const { path, config, form }: Props = $props();
16
16
  const locale = getLocaleContext();
@@ -47,7 +47,7 @@
47
47
  const dateLabel = $derived(date ? locale.dateFormat(date) : 'Select a date');
48
48
  </script>
49
49
 
50
- <fieldset class="rz-date-field {config.className || ''}" use:root={field}>
50
+ <fieldset class="rz-date-field {config.get.className || ''}" use:fieldset={field}>
51
51
  <Field.Label {config} for={path || config.name} />
52
52
 
53
53
  <Button
@@ -1,8 +1,8 @@
1
1
  import { type DocumentFormContext } from '../../../panel/context/documentForm.svelte.js';
2
- import type { DateField } from '../index.js';
2
+ import type { DateFieldBuilder } from '../index.js';
3
3
  type Props = {
4
4
  path: string;
5
- config: DateField;
5
+ config: DateFieldBuilder;
6
6
  form: DocumentFormContext;
7
7
  };
8
8
  declare const Date: import("svelte").Component<Props, {}, "">;
@@ -1,3 +1,4 @@
1
+ import type { DataType } from '../../core/fields/builders/form-field-builder.js';
1
2
  import { FormFieldBuilder } from '../../core/fields/builders/form-field-builder.js';
2
3
  import type { DefaultValueFn, FormField } from '../types.js';
3
4
  export declare const date: (name: string) => DateFieldBuilder;
@@ -6,13 +7,14 @@ export declare class DateFieldBuilder extends FormFieldBuilder<DateField> {
6
7
  constructor(name: string);
7
8
  get component(): import("svelte").Component<{
8
9
  path: string;
9
- config: DateField;
10
+ config: DateFieldBuilder;
10
11
  form: import("../../panel").DocumentFormContext;
11
12
  }, {}, "">;
12
13
  get cell(): import("svelte").Component<{
13
14
  value: Date | undefined;
14
15
  }, {}, "">;
15
16
  defaultValue(value: Date | DefaultValueFn<Date>): this;
17
+ get dataType(): DataType;
16
18
  isTitle(): this;
17
19
  }
18
20
  /****************************************************/
@@ -24,6 +24,9 @@ export class DateFieldBuilder extends FormFieldBuilder {
24
24
  this.field.defaultValue = value;
25
25
  return this;
26
26
  }
27
+ get dataType() {
28
+ return 'timestamp';
29
+ }
27
30
  isTitle() {
28
31
  this.field.isTitle = true;
29
32
  return this;
@@ -1,4 +1,3 @@
1
- import type { ToSchema, ToType } from '../index.server.js';
1
+ import type { ToType } from '../index.server.js';
2
2
  import type { DateFieldBuilder } from './index.ts';
3
- export declare const toSchema: ToSchema<DateFieldBuilder>;
4
3
  export declare const toType: ToType<DateFieldBuilder>;
@@ -1,12 +1,3 @@
1
- import { templateUniqueRequired } from '../../adapter-sqlite/generate-schema/templates.server.js';
2
- import { getSchemaColumnNames } from '../../adapter-sqlite/generate-schema/util.server.js';
3
- export const toSchema = (field, parentPath) => {
4
- const { camel, snake } = getSchemaColumnNames({ name: field.raw.name, parentPath });
5
- const suffix = templateUniqueRequired({ ...field.raw }, field.raw.defaultValue instanceof Date ? field.raw.defaultValue.getTime() : 0);
6
- if (field._generateSchema)
7
- return field._generateSchema({ camel, snake, suffix });
8
- return `${camel}: integer('${snake}', { mode : 'timestamp_ms' })${suffix}`;
9
- };
10
1
  export const toType = (field) => {
11
- return `${field.raw.name}${field.raw.required ? '' : '?'}: Date`;
2
+ return `${field.name}${field.get.required ? '' : '?'}: Date`;
12
3
  };
@@ -1,8 +1,7 @@
1
1
  <script lang="ts">
2
+ import { fieldset } from '../../../panel/components/fields/fieldset.svelte.js';
2
3
  import { Field } from '../../../panel/components/fields/index.js';
3
- import { root } from '../../../panel/components/fields/root.svelte.js';
4
4
  import { Input } from '../../../panel/components/ui/input/index.js';
5
- import { capitalize } from '../../../util/string.js';
6
5
  import { Mail } from '@lucide/svelte';
7
6
  import type { EmailFieldProps } from './props';
8
7
 
@@ -23,9 +22,9 @@
23
22
  </script>
24
23
 
25
24
  <fieldset
26
- data-compact={config.layout === 'compact' ? '' : null}
27
- class="{config.className} rz-email-field"
28
- use:root={field}
25
+ data-compact={config.get.layout === 'compact' ? '' : null}
26
+ class="{config.get.className} rz-email-field"
27
+ use:fieldset={field}
29
28
  >
30
29
  <Field.Label {config} for={path || config.name} />
31
30
  <div class="rz-email-field-wrapper">
@@ -34,7 +33,7 @@
34
33
  id={path || config.name}
35
34
  name={path || config.name}
36
35
  autocomplete="off"
37
- placeholder={config.placeholder || capitalize(config.label || config.name)}
36
+ placeholder={config.get.placeholder || config.get.label}
38
37
  data-error={showError && field.error ? '' : null}
39
38
  value={field.value}
40
39
  onblur={onBlur}
@@ -1,10 +1,9 @@
1
- import type { SimplerField } from '../../types.js';
2
1
  import type { DocumentFormContext } from '../../../panel/context/documentForm.svelte.js';
3
2
  import type { FormContext } from '../../../panel/context/form.svelte.js';
4
- import type { EmailField } from '../index.js';
3
+ import type { EmailFieldBuilder } from '../index.js';
5
4
  export interface EmailFieldProps {
6
5
  path?: string;
7
- config: SimplerField<EmailField>;
6
+ config: EmailFieldBuilder;
8
7
  type?: 'text' | 'password';
9
8
  form: DocumentFormContext | FormContext;
10
9
  }
@@ -1,12 +1,14 @@
1
+ import type { DataType } from '../../core/fields/builders/form-field-builder.js';
1
2
  import { FormFieldBuilder } from '../../core/fields/builders/form-field-builder.js';
2
3
  import type { DefaultValueFn, FormField } from '../types.js';
3
- declare class EmailFieldBuilder extends FormFieldBuilder<EmailField> {
4
+ export declare class EmailFieldBuilder extends FormFieldBuilder<EmailField> {
4
5
  _metaUrl: string;
5
6
  constructor(name: string);
6
7
  layout(layout: 'compact' | 'default'): this;
7
8
  get component(): import("svelte").Component<import("./component/props").EmailFieldProps, {}, "">;
8
9
  unique(bool?: boolean): this;
9
10
  defaultValue(value: string | DefaultValueFn<string>): this;
11
+ get dataType(): DataType;
10
12
  isTitle(): this;
11
13
  }
12
14
  export declare const email: (name: string) => EmailFieldBuilder;
@@ -19,4 +21,3 @@ export type EmailField = FormField & {
19
21
  unique?: boolean;
20
22
  isTitle?: true;
21
23
  };
22
- export {};
@@ -2,7 +2,7 @@ import { FormFieldBuilder } from '../../core/fields/builders/form-field-builder.
2
2
  import { sanitize } from '../../util/string.js';
3
3
  import validate from '../../util/validate.js';
4
4
  import EmailComp from './component/Email.svelte';
5
- class EmailFieldBuilder extends FormFieldBuilder {
5
+ export class EmailFieldBuilder extends FormFieldBuilder {
6
6
  //
7
7
  _metaUrl = import.meta.url;
8
8
  constructor(name) {
@@ -27,6 +27,9 @@ class EmailFieldBuilder extends FormFieldBuilder {
27
27
  this.field.defaultValue = value;
28
28
  return this;
29
29
  }
30
+ get dataType() {
31
+ return 'text';
32
+ }
30
33
  isTitle() {
31
34
  this.field.isTitle = true;
32
35
  return this;
@@ -1,6 +1,3 @@
1
- import type { FormFieldBuilder } from '../../core/fields/builders/form-field-builder.js';
2
- import type { EmailField } from './index.js';
3
- export declare function toSchema(field: FormFieldBuilder<EmailField>, parentPath?: string): string;
4
1
  export declare function toType(args: {
5
2
  name: string;
6
3
  required: boolean;
@@ -1,12 +1,3 @@
1
- import { templateUniqueRequired } from '../../adapter-sqlite/generate-schema/templates.server.js';
2
- import { getSchemaColumnNames } from '../../adapter-sqlite/generate-schema/util.server.js';
3
- export function toSchema(field, parentPath) {
4
- const { camel, snake } = getSchemaColumnNames({ name: field.name, parentPath });
5
- const suffix = templateUniqueRequired({ unique: field.raw.unique, required: field.raw.required }, typeof field.raw.defaultValue === 'string' ? field.raw.defaultValue : '');
6
- if (field._generateSchema)
7
- return field._generateSchema({ camel, snake, suffix });
8
- return `${camel}: text('${snake}')${suffix}`;
9
- }
10
1
  export function toType(args) {
11
2
  return `${args.name}${args.required ? '' : '?'}: string`;
12
3
  }
@@ -2,7 +2,7 @@
2
2
  import { FormFieldBuilder } from '../../../core/fields/builders';
3
3
  import { isFormField } from '../../../core/fields/util.js';
4
4
  import type { GenericDoc } from '../../../core/types/doc.js';
5
- import type { GroupField } from '../index.js';
5
+ import type { GroupFieldBuilder } from '../index.js';
6
6
  import { TabsBuilder } from '../../tabs';
7
7
  import FieldsPreview from '../../../panel/components/fields/FieldsPreview.svelte';
8
8
  import FieldsPreviewTrigger from '../../../panel/components/fields/FieldsPreviewTrigger.svelte';
@@ -14,15 +14,14 @@
14
14
 
15
15
  type Props = {
16
16
  path: string;
17
- config: GroupField;
17
+ config: GroupFieldBuilder;
18
18
  form: DocumentFormContext<GenericDoc>;
19
19
  };
20
20
  const { config, path, form }: Props = $props();
21
21
 
22
22
  let groupOpen = $state(true);
23
23
  const key = $derived(
24
- `group-${config.fields
25
- .map((f) => f.raw)
24
+ `group-${config.get.fields
26
25
  .filter(isFormField)
27
26
  .map((f) => f.name)
28
27
  .join('-')}`
@@ -42,16 +41,11 @@
42
41
  const user = getUserContext() || undefined;
43
42
 
44
43
  const previewFields = $derived.by(() => {
45
- return config.fields
44
+ return config.get.fields
46
45
  .filter((field) => !(field instanceof TabsBuilder))
47
46
  .filter((field) => field instanceof FormFieldBuilder)
48
- .filter((field) => !form.isLive || (form.isLive && field.raw.live))
49
- .filter((field) => {
50
- if (field.raw.access && field.raw.access.read) {
51
- return field.raw.access.read(user.attributes, { id: form.values.id });
52
- }
53
- return true;
54
- });
47
+ .filter((field) => !form.isLive || (form.isLive && field.get.live))
48
+ .filter((field) => field.run.canRead(user.attributes, { id: form.values.id }));
55
49
  });
56
50
 
57
51
  const basePath = $derived(path ? `${path}.` : '');
@@ -71,7 +65,7 @@
71
65
  {:else}
72
66
  <FolderClosed size="12" />
73
67
  {/if}
74
- {config.label || config.name || 'Group'}
68
+ {config.get.label || config.name || 'Group'}
75
69
  </span>
76
70
  <ChevronDown size="14" />
77
71
  </button>
@@ -79,14 +73,14 @@
79
73
  {#if !groupOpen}
80
74
  <FieldsPreviewTrigger onclick={handleClick}>
81
75
  <FieldsPreview
82
- preview={config.preview}
76
+ preview={config.get.preview}
83
77
  fields={previewFields}
84
78
  getField={(field) => form.useField(basePath + field.name)}
85
79
  />
86
80
  </FieldsPreviewTrigger>
87
81
  {:else}
88
82
  <div class="rz-group-field__content">
89
- <RenderFields {path} fields={config.fields} {form} />
83
+ <RenderFields {path} fields={config.get.fields} {form} />
90
84
  </div>
91
85
  {/if}
92
86
  </div>
@@ -1,9 +1,9 @@
1
1
  import type { GenericDoc } from '../../../core/types/doc.js';
2
- import type { GroupField } from '../index.js';
2
+ import type { GroupFieldBuilder } from '../index.js';
3
3
  import type { DocumentFormContext } from '../../../panel/context/documentForm.svelte.js';
4
4
  type Props = {
5
5
  path: string;
6
- config: GroupField;
6
+ config: GroupFieldBuilder;
7
7
  form: DocumentFormContext<GenericDoc>;
8
8
  };
9
9
  declare const Group: import("svelte").Component<Props, {}, "">;