rimecms 0.29.0 → 0.30.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 (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,9 @@
4
4
  import RenderFields from '../../../panel/components/fields/RenderFields.svelte';
5
5
  import * as Tabs from '../../../panel/components/ui/tabs/index.js';
6
6
  import type { DocumentFormContext } from '../../../panel/context/documentForm.svelte.js';
7
- import type { TabBuilder, TabsField } from '../index.js';
7
+ import type { TabBuilder, TabsBuilder } from '../index.js';
8
8
 
9
- type Props = { config: TabsField; path: string; form: DocumentFormContext };
9
+ type Props = { config: TabsBuilder; path: string; form: DocumentFormContext };
10
10
 
11
11
  const { config, path: initialPath, form }: Props = $props();
12
12
 
@@ -16,7 +16,7 @@
16
16
  const prependPath = $derived(initialPath === '' ? '' : `${initialPath}.`);
17
17
  // Generate unique IDs for each tab to use as data attributes for error handling.
18
18
  const tabIds = $derived(
19
- config.tabs.map((tab) => `${tab.name}-${new Date().getTime().toString()}`)
19
+ config.get.tabs.map((tab) => `${tab.name}-${new Date().getTime().toString()}`)
20
20
  );
21
21
 
22
22
  // Retrieve active tab from localStorage, if not found use the first tab.
@@ -24,17 +24,17 @@
24
24
  let activeTabName = $derived.by(() => {
25
25
  let storedActiveTab = localStorage.getItem(storageActiveKey);
26
26
  if (storedActiveTab && form.isLive) {
27
- const activeTab = config.tabs.find((tab) => tab.name === storedActiveTab);
28
- if (!activeTab || activeTab.raw.live === false) {
29
- return config.tabs[0].name;
27
+ const activeTab = config.get.tabs.find((tab) => tab.name === storedActiveTab);
28
+ if (!activeTab || activeTab.get.live === false) {
29
+ return config.get.tabs[0].name;
30
30
  }
31
31
  }
32
- return storedActiveTab || config.tabs[0].name;
32
+ return storedActiveTab || config.get.tabs[0].name;
33
33
  });
34
34
 
35
35
  // On live mode only show tabs with live=true
36
36
  function isTabVisible(tab: TabBuilder) {
37
- return form.isLive ? tab.raw.live === true : true;
37
+ return form.isLive ? tab.get.live === true : true;
38
38
  }
39
39
 
40
40
  function onActiveTabChange(value: string): void {
@@ -61,33 +61,33 @@
61
61
  <div class="rz-tabs">
62
62
  <Tabs.Root onValueChange={onActiveTabChange} value={activeTabName}>
63
63
  <Tabs.List>
64
- {#each config.tabs as tab, index (index)}
64
+ {#each config.get.tabs as tab, index (index)}
65
65
  {#if isTabVisible(tab)}
66
66
  <Tabs.Trigger
67
67
  data-error={errorTabs.includes(tabIds[index]) ? 'true' : null}
68
68
  value={tab.name}
69
69
  >
70
- {tab.raw.label || tab.name}
70
+ {tab.get.label || tab.name}
71
71
  </Tabs.Trigger>
72
72
  {/if}
73
73
  {/each}
74
74
  </Tabs.List>
75
75
 
76
- {#each config.tabs as tab, index (index)}
76
+ {#each config.get.tabs as tab, index (index)}
77
77
  {#if isTabVisible(tab)}
78
78
  <Tabs.Content data-tab-id={tabIds[index]} value={tab.name}>
79
79
  <!-- If the first and only field is a rich text field, render it directly -->
80
- {#if tab.fields.length === 1 && tab.raw.fields[0].type === 'richText'}
81
- {@const firstField = tab.raw.fields[0] as RichTextFieldBuilder}
80
+ {#if tab.get.fields.length === 1 && tab.get.fields[0].type === 'richText'}
81
+ {@const firstField = tab.get.fields[0] as RichTextFieldBuilder}
82
82
  <RichText
83
83
  standAlone={true}
84
84
  path="{prependPath}{tab.name}.{firstField.name}"
85
- config={firstField.raw}
85
+ config={firstField}
86
86
  {form}
87
87
  />
88
88
  {:else}
89
89
  <!-- Otherwise, render the fields -->
90
- <RenderFields fields={tab.raw.fields} path="{prependPath}{tab.name}" {form} />
90
+ <RenderFields fields={tab.get.fields} path="{prependPath}{tab.name}" {form} />
91
91
  {/if}
92
92
  </Tabs.Content>
93
93
  {/if}
@@ -1,8 +1,8 @@
1
1
  import * as Tabs from '../../../panel/components/ui/tabs/index.js';
2
2
  import type { DocumentFormContext } from '../../../panel/context/documentForm.svelte.js';
3
- import type { TabsField } from '../index.js';
3
+ import type { TabsBuilder } from '../index.js';
4
4
  type Props = {
5
- config: TabsField;
5
+ config: TabsBuilder;
6
6
  path: string;
7
7
  form: DocumentFormContext;
8
8
  };
@@ -7,7 +7,7 @@ export declare class TabsBuilder extends FieldBuilder<TabsField> {
7
7
  _metaUrl: string;
8
8
  constructor(...tabs: TabBuilder[]);
9
9
  get component(): import("svelte").Component<{
10
- config: TabsField;
10
+ config: TabsBuilder;
11
11
  path: string;
12
12
  form: import("../../panel").DocumentFormContext;
13
13
  }, {}, "">;
@@ -19,13 +19,14 @@ export declare class TabsBuilder extends FieldBuilder<TabsField> {
19
19
  fields: Field[];
20
20
  }[];
21
21
  component: import("svelte").Component<{
22
- config: TabsField;
22
+ config: TabsBuilder;
23
23
  path: string;
24
24
  form: import("../../panel").DocumentFormContext;
25
25
  }, {}, "">;
26
26
  cell: import("svelte").Component<{
27
27
  value: any;
28
28
  }, {}, string> | undefined;
29
+ name: string;
29
30
  type: "tabs";
30
31
  live?: boolean;
31
32
  condition?: (doc: any, siblings: any) => boolean;
@@ -43,9 +44,8 @@ export declare class TabBuilder {
43
44
  constructor(name: string);
44
45
  label(label: string): this;
45
46
  get name(): string;
46
- get tab(): TabsFieldTab;
47
47
  fields(...fields: FieldBuilder<Field>[]): this;
48
- get raw(): {
48
+ get get(): {
49
49
  name: string;
50
50
  label?: string;
51
51
  live: boolean;
@@ -58,10 +58,6 @@ export declare class TabBuilder {
58
58
  * Checks if a field is a tabs field.
59
59
  */
60
60
  export declare const isTabsField: (field: Field) => field is TabsField;
61
- /**
62
- * Checks if a field is a tabs field (raw type).
63
- */
64
- export declare const isTabsFieldRaw: (field: Field) => field is TabsFieldRaw;
65
61
  /****************************************************/
66
62
  export type TabsField = Field & {
67
63
  type: 'tabs';
@@ -73,11 +69,3 @@ export type TabsFieldTab = {
73
69
  live: boolean;
74
70
  fields: FieldBuilder<Field>[];
75
71
  };
76
- export type TabsFieldRaw = Field & {
77
- type: 'tabs';
78
- name: string;
79
- label?: string;
80
- tabs: Array<Omit<TabsFieldTab, 'fields'> & {
81
- fields: Field[];
82
- }>;
83
- };
@@ -36,14 +36,11 @@ export class TabBuilder {
36
36
  get name() {
37
37
  return this.#tab.name;
38
38
  }
39
- get tab() {
40
- return this.#tab;
41
- }
42
39
  fields(...fields) {
43
40
  this.#tab.fields = fields;
44
41
  return this;
45
42
  }
46
- get raw() {
43
+ get get() {
47
44
  return { ...this.#tab };
48
45
  }
49
46
  compile() {
@@ -58,7 +55,3 @@ export class TabBuilder {
58
55
  * Checks if a field is a tabs field.
59
56
  */
60
57
  export const isTabsField = (field) => field.type === 'tabs';
61
- /**
62
- * Checks if a field is a tabs field (raw type).
63
- */
64
- export const isTabsFieldRaw = (field) => field.type === 'tabs';
@@ -1,9 +1,9 @@
1
1
  import { getFieldPrivateModule } from '../index.server.js';
2
2
  export const toType = async (field) => {
3
3
  const types = [];
4
- for (const tab of field.raw.tabs) {
4
+ for (const tab of field.get.tabs) {
5
5
  const fieldsTypes = [];
6
- for (const field of tab.raw.fields) {
6
+ for (const field of tab.get.fields) {
7
7
  const fieldServerMethods = await getFieldPrivateModule(field);
8
8
  if (fieldServerMethods) {
9
9
  const result = await Promise.resolve(fieldServerMethods.toType(field));
@@ -11,7 +11,7 @@ export const toType = async (field) => {
11
11
  }
12
12
  }
13
13
  if (fieldsTypes.length) {
14
- types.push(`${tab.raw.name}: {${fieldsTypes.join(',\n\t\t')}}`);
14
+ types.push(`${tab.name}: {${fieldsTypes.join(',\n\t\t')}}`);
15
15
  }
16
16
  }
17
17
  return types.length ? types.join(',\n\t').replaceAll(',,', ',') : '';
@@ -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 { Input } from '../../../panel/components/ui/input/index.js';
5
5
  import { capitalize } from '../../../util/string.js';
6
6
  import type { TextFieldProps } from './props.js';
@@ -14,10 +14,10 @@
14
14
  </script>
15
15
 
16
16
  <fieldset
17
- class="rz-text-field {config.className || ''}"
17
+ class="rz-text-field {config.get.className || ''}"
18
18
  class:rz-text-field--with-icon={!!Icon}
19
- data-compact={config.layout === 'compact' ? '' : null}
20
- use:root={field}
19
+ data-compact={config.get.layout === 'compact' ? '' : null}
20
+ use:fieldset={field}
21
21
  >
22
22
  <Field.Label {config} for={path || config.name} />
23
23
  <div class="rz-text-field__input-wrapper">
@@ -26,7 +26,7 @@
26
26
  icon={Icon}
27
27
  autocomplete="off"
28
28
  name={path || config.name}
29
- placeholder={config.placeholder || capitalize(config.name)}
29
+ placeholder={config.get.placeholder || capitalize(config.get.name)}
30
30
  data-error={field.error ? '' : null}
31
31
  {type}
32
32
  value={field.value}
@@ -1,12 +1,11 @@
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
3
  import type { IconProps } from '@lucide/svelte';
5
4
  import type { Component } from 'svelte';
6
- import type { TextField } from '../index.js';
5
+ import type { TextFieldBuilder } from '../index.js';
7
6
  export type TextFieldProps = {
8
7
  path?: string;
9
- config: SimplerField<TextField>;
8
+ config: TextFieldBuilder;
10
9
  type?: 'text' | 'password';
11
10
  icon?: Component<IconProps>;
12
11
  form: DocumentFormContext | FormContext;
@@ -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
  /****************************************************/
@@ -8,6 +9,7 @@ export declare class TextFieldBuilder extends FormFieldBuilder<TextField> {
8
9
  get component(): import("svelte").Component<import("./component/props").TextFieldProps, {}, "">;
9
10
  get cell(): null;
10
11
  defaultValue(value: string | DefaultValueFn<string>): this;
12
+ get dataType(): DataType;
11
13
  isTitle(): this;
12
14
  placeholder(str: string): this;
13
15
  layout(layout: 'compact'): this;
@@ -18,7 +20,7 @@ export declare class TextFieldBuilder extends FormFieldBuilder<TextField> {
18
20
  isTitle?: true | undefined;
19
21
  placeholder: string;
20
22
  layout?: "compact" | undefined;
21
- _root?: boolean | undefined;
23
+ name: string;
22
24
  live?: boolean | undefined;
23
25
  condition?: ((doc: any, siblings: any) => boolean) | undefined;
24
26
  width?: import("../types.js").FieldWidth | undefined;
@@ -30,7 +32,6 @@ export declare class TextFieldBuilder extends FormFieldBuilder<TextField> {
30
32
  read: import("../types.js").FieldAccess;
31
33
  update: import("../types.js").FieldAccess;
32
34
  };
33
- name: string;
34
35
  hidden?: boolean | undefined;
35
36
  validate?: import("../types.js").FieldValidationFunc<any> | undefined;
36
37
  required?: boolean | undefined;
@@ -51,13 +52,13 @@ export declare class TextFieldBuilder extends FormFieldBuilder<TextField> {
51
52
  onChange?: import("../types.js").FieldHookClient[] | undefined;
52
53
  } | undefined;
53
54
  isEmpty: (value: unknown) => boolean;
55
+ _root?: boolean | undefined;
54
56
  } & {
55
57
  component: import("svelte").Component<any>;
56
58
  cell?: import("svelte").Component<{
57
59
  value: any;
58
60
  }> | null;
59
61
  };
60
- _root(): this;
61
62
  }
62
63
  export declare const text: (name: string) => TextFieldBuilder;
63
64
  /****************************************************/
@@ -68,11 +69,4 @@ export type TextField = {
68
69
  isTitle?: true;
69
70
  placeholder: string;
70
71
  layout?: 'compact';
71
- /**
72
- * Force the field to be on the root table
73
- * usefull for fields that should not be versioned
74
- * ex: _parent for nested structures should always be on the root table to prevent
75
- * different versions to have different parents
76
- */
77
- _root?: boolean;
78
72
  } & FormField;
@@ -25,6 +25,9 @@ export class TextFieldBuilder extends FormFieldBuilder {
25
25
  this.field.defaultValue = value;
26
26
  return this;
27
27
  }
28
+ get dataType() {
29
+ return 'text';
30
+ }
28
31
  isTitle() {
29
32
  this.field.isTitle = true;
30
33
  return this;
@@ -48,9 +51,5 @@ export class TextFieldBuilder extends FormFieldBuilder {
48
51
  }
49
52
  return super.compile();
50
53
  }
51
- _root() {
52
- this.field._root = true;
53
- return this;
54
- }
55
54
  }
56
55
  export const text = (name) => new TextFieldBuilder(name);
@@ -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 { TextFieldBuilder } from './index.js';
3
- export declare const toSchema: ToSchema<TextFieldBuilder>;
4
3
  export declare const toType: ToType<TextFieldBuilder>;
@@ -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.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 const toType = (field) => {
11
- return `${field.name}${field.raw.required ? '' : '?'}: string`;
2
+ return `${field.name}${field.get.required ? '' : '?'}: string`;
12
3
  };
@@ -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 { dataError } from '../../../panel/util/dataError.js';
5
5
  import type { TextAreaFieldProps } from './props.js';
6
6
 
@@ -14,13 +14,13 @@
14
14
  };
15
15
  </script>
16
16
 
17
- <fieldset use:root={field} class="rz-textarea-field {config.className || ''}">
17
+ <fieldset use:fieldset={field} class="rz-textarea-field {config.get.className || ''}">
18
18
  <Field.Label {config} for={path || config.name} />
19
19
  <textarea
20
20
  use:dataError={!!field.error}
21
21
  id={path || config.name}
22
22
  name={path || config.name}
23
- placeholder={config.placeholder}
23
+ placeholder={config.get.placeholder}
24
24
  value={field.value}
25
25
  oninput={onInput}
26
26
  ></textarea>
@@ -1,9 +1,9 @@
1
1
  import type { DocumentFormContext } from '../../../panel/context/documentForm.svelte.js';
2
2
  import type { FormContext } from '../../../panel/context/form.svelte.js';
3
- import type { TextAreaField } from '../index.js';
3
+ import type { TextAreaFieldBuilder } from '../index.js';
4
4
  export type TextAreaFieldProps = {
5
5
  path?: string;
6
- config: TextAreaField;
6
+ config: TextAreaFieldBuilder;
7
7
  type?: 'text' | 'password';
8
8
  form: DocumentFormContext | FormContext;
9
9
  };
@@ -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 textarea: (name: string) => TextAreaFieldBuilder;
@@ -7,9 +8,11 @@ export declare class TextAreaFieldBuilder extends FormFieldBuilder<TextAreaField
7
8
  get component(): import("svelte").Component<import("./component/props").TextAreaFieldProps, {}, "">;
8
9
  get cell(): null;
9
10
  defaultValue(value: string | DefaultValueFn<string>): this;
11
+ get dataType(): DataType;
10
12
  isTitle(): this;
11
13
  placeholder(str: string): this;
12
14
  compile(): {
15
+ name: string;
13
16
  type: "textarea";
14
17
  live?: boolean | undefined;
15
18
  condition?: ((doc: any, siblings: any) => boolean) | undefined;
@@ -22,7 +25,6 @@ export declare class TextAreaFieldBuilder extends FormFieldBuilder<TextAreaField
22
25
  read: import("../types.js").FieldAccess;
23
26
  update: import("../types.js").FieldAccess;
24
27
  };
25
- name: string;
26
28
  hidden?: boolean | undefined;
27
29
  validate?: import("../types.js").FieldValidationFunc<any> | undefined;
28
30
  required?: boolean | undefined;
@@ -44,6 +46,7 @@ export declare class TextAreaFieldBuilder extends FormFieldBuilder<TextAreaField
44
46
  } | undefined;
45
47
  defaultValue?: string | DefaultValueFn<string> | undefined;
46
48
  isEmpty: (value: unknown) => boolean;
49
+ _root?: boolean | undefined;
47
50
  isTitle?: true | undefined;
48
51
  placeholder: string;
49
52
  } & {
@@ -21,6 +21,9 @@ export class TextAreaFieldBuilder extends FormFieldBuilder {
21
21
  this.field.defaultValue = value;
22
22
  return this;
23
23
  }
24
+ get dataType() {
25
+ return 'text';
26
+ }
24
27
  isTitle() {
25
28
  this.field.isTitle = true;
26
29
  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 { TextAreaFieldBuilder } from './index.js';
3
- export declare const toSchema: ToSchema<TextAreaFieldBuilder>;
4
3
  export declare const toType: ToType<TextAreaFieldBuilder>;
@@ -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.name, parentPath });
5
- const suffix = templateUniqueRequired({ unique: false, 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 const toType = (field) => {
11
- return `${field.name}${field.raw.required ? '' : '?'}: string`;
2
+ return `${field.name}${field.get.required ? '' : '?'}: string`;
12
3
  };
@@ -1,9 +1,9 @@
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
5
  import { Clock } from '@lucide/svelte';
6
- import type { TimeFieldProps } from './props';
6
+ import type { TimeFieldProps } from './props.js';
7
7
 
8
8
  const { path, config, form }: TimeFieldProps = $props();
9
9
  const field = $derived(form.useField(path || config.name, config));
@@ -13,13 +13,13 @@
13
13
  };
14
14
  </script>
15
15
 
16
- <fieldset class="rz-time-field {config.className || ''}" use:root={field}>
16
+ <fieldset class="rz-time-field {config.get.className || ''}" use:fieldset={field}>
17
17
  <Field.Label {config} for={path || config.name} />
18
18
  <div class="rz-time-field__input-wrapper">
19
19
  <Input
20
20
  type="time"
21
- id={path}
22
- name={path}
21
+ id={path || config.name}
22
+ name={path || config.name}
23
23
  data-error={field.error ? '' : null}
24
24
  value={field.value}
25
25
  oninput={onInput}
@@ -1,4 +1,4 @@
1
- import type { TimeFieldProps } from './props';
1
+ import type { TimeFieldProps } from './props.js';
2
2
  declare const Time: import("svelte").Component<TimeFieldProps, {}, "">;
3
3
  type Time = ReturnType<typeof Time>;
4
4
  export default Time;
@@ -1,7 +1,7 @@
1
1
  import type { DocumentFormContext } from '../../../panel/context/documentForm.svelte.js';
2
- import type { TimeField } from '../index.js';
2
+ import type { TimeFieldBuilder } from '../index.js';
3
3
  export type TimeFieldProps = {
4
4
  path?: string;
5
- config: TimeField;
5
+ config: TimeFieldBuilder;
6
6
  form: DocumentFormContext;
7
7
  };
@@ -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 time: (name: string) => TimeFieldBuilder;
@@ -6,6 +7,7 @@ export declare class TimeFieldBuilder extends FormFieldBuilder<TimeField> {
6
7
  constructor(name: string);
7
8
  get component(): import("svelte").Component<import("./component/props").TimeFieldProps, {}, "">;
8
9
  defaultValue(value: string | DefaultValueFn<string>): this;
10
+ get dataType(): DataType;
9
11
  }
10
12
  /****************************************************/
11
13
  export type TimeField = FormField & {
@@ -21,4 +21,7 @@ export class TimeFieldBuilder extends FormFieldBuilder {
21
21
  this.field.defaultValue = value;
22
22
  return this;
23
23
  }
24
+ get dataType() {
25
+ return 'text';
26
+ }
24
27
  }
@@ -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 { TimeFieldBuilder } from './index.js';
3
- export declare const toSchema: ToSchema<TimeFieldBuilder>;
4
3
  export declare const toType: ToType<TimeFieldBuilder>;
@@ -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.name, parentPath });
5
- const suffix = templateUniqueRequired(field.raw, typeof field.raw.defaultValue === 'string' ? field.raw.defaultValue : '00:00');
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
- return `${field.name}${!field.raw.required ? '?' : ''}: string`;
2
+ return `${field.name}${!field.get.required ? '?' : ''}: string`;
12
3
  };
@@ -1,9 +1,9 @@
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 { Switch } from '../../../panel/components/ui/switch/index.js';
5
5
  import { slugify } from '../../../util/string.js';
6
- import type { ToggleProps } from './props';
6
+ import type { ToggleProps } from './props.js';
7
7
 
8
8
  const { path, config, form }: ToggleProps = $props();
9
9
  const field = $derived(form.useField<boolean>(path, config));
@@ -14,7 +14,7 @@
14
14
  };
15
15
  </script>
16
16
 
17
- <fieldset class="rz-toggle-field {config.className || ''}" use:root={field}>
17
+ <fieldset class="rz-toggle-field {config.get.className || ''}" use:fieldset={field}>
18
18
  <div class="rz-toggle-field-wrap">
19
19
  <Switch
20
20
  data-error={field.error ? '' : null}
@@ -1,4 +1,4 @@
1
- import type { ToggleProps } from './props';
1
+ import type { ToggleProps } from './props.js';
2
2
  declare const Toggle: import("svelte").Component<ToggleProps, {}, "">;
3
3
  type Toggle = ReturnType<typeof Toggle>;
4
4
  export default Toggle;
@@ -1,7 +1,7 @@
1
1
  import type { DocumentFormContext } from '../../../panel/context/documentForm.svelte.js';
2
- import type { ToggleField } from '../index.js';
2
+ import type { ToggleFieldBuilder } from '../index.js';
3
3
  export type ToggleProps = {
4
4
  path: string;
5
- config: ToggleField;
5
+ config: ToggleFieldBuilder;
6
6
  form: DocumentFormContext;
7
7
  };
@@ -11,6 +11,7 @@ export declare class ToggleFieldBuilder extends BooleanFieldBuilder<ToggleField>
11
11
  compile(): {
12
12
  type: "toggle";
13
13
  defaultValue?: (boolean | DefaultValueFn<boolean>) | undefined;
14
+ name: string;
14
15
  live?: boolean | undefined;
15
16
  condition?: ((doc: any, siblings: any) => boolean) | undefined;
16
17
  width?: import("../types.js").FieldWidth | undefined;
@@ -22,7 +23,6 @@ export declare class ToggleFieldBuilder extends BooleanFieldBuilder<ToggleField>
22
23
  read: import("../types.js").FieldAccess;
23
24
  update: import("../types.js").FieldAccess;
24
25
  };
25
- name: string;
26
26
  hidden?: boolean | undefined;
27
27
  validate?: import("../types.js").FieldValidationFunc<any> | undefined;
28
28
  required?: boolean | undefined;
@@ -43,6 +43,7 @@ export declare class ToggleFieldBuilder extends BooleanFieldBuilder<ToggleField>
43
43
  onChange?: import("../types.js").FieldHookClient[] | undefined;
44
44
  } | undefined;
45
45
  isEmpty: (value: unknown) => boolean;
46
+ _root?: boolean | undefined;
46
47
  } & {
47
48
  component: import("svelte").Component<any>;
48
49
  cell?: import("svelte").Component<{
@@ -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 { ToggleFieldBuilder } from './index.js';
3
- export declare const toSchema: ToSchema<ToggleFieldBuilder>;
4
3
  export declare const toType: ToType<ToggleFieldBuilder>;
@@ -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.name, parentPath });
5
- const suffix = templateUniqueRequired(field.raw, typeof field.raw.defaultValue === 'boolean' ? 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.name}${field.raw.required ? '?' : ''}: boolean`;
2
+ return `${field.name}${field.get.required ? '?' : ''}: boolean`;
12
3
  };
@@ -3,7 +3,6 @@
3
3
  import { emptyValuesFromFieldConfig, isFormField } from '../../../core/fields/util';
4
4
  import type { Field } from '../../types.js';
5
5
  import Button from '../../../panel/components/ui/button/button.svelte';
6
-
7
6
  import type { Dic } from '../../../util/types';
8
7
  import { Plus } from '@lucide/svelte';
9
8
  import type { Snippet } from 'svelte';
@@ -19,7 +18,7 @@
19
18
  const { class: className, fields, addItem, size, children }: Props = $props();
20
19
 
21
20
  const add = () => {
22
- const empty = emptyValuesFromFieldConfig(fields.map((f) => f.raw).filter(isFormField));
21
+ const empty = emptyValuesFromFieldConfig(fields.filter(isFormField));
23
22
  addItem(empty);
24
23
  };
25
24
  </script>