includio-cms 0.5.1 → 0.5.3

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 (106) hide show
  1. package/CHANGELOG.md +35 -12
  2. package/ROADMAP.md +17 -0
  3. package/dist/admin/client/entry/entry-form.svelte +1 -0
  4. package/dist/admin/client/entry/entry.svelte +130 -123
  5. package/dist/admin/client/entry/hybrid/hybrid-preview.svelte +92 -9
  6. package/dist/admin/components/dashboard/changelog-dialog.svelte +16 -6
  7. package/dist/admin/components/fields/blocks-field.svelte +142 -112
  8. package/dist/admin/components/fields/blocks-field.svelte.d.ts +10 -30
  9. package/dist/admin/components/fields/boolean-field.svelte +28 -38
  10. package/dist/admin/components/fields/boolean-field.svelte.d.ts +5 -27
  11. package/dist/admin/components/fields/checkboxes-field.svelte +12 -24
  12. package/dist/admin/components/fields/checkboxes-field.svelte.d.ts +5 -27
  13. package/dist/admin/components/fields/content-field.svelte +4 -17
  14. package/dist/admin/components/fields/content-field.svelte.d.ts +5 -27
  15. package/dist/admin/components/fields/date-field.svelte +8 -21
  16. package/dist/admin/components/fields/date-field.svelte.d.ts +5 -27
  17. package/dist/admin/components/fields/datetime-field.svelte +8 -21
  18. package/dist/admin/components/fields/datetime-field.svelte.d.ts +5 -27
  19. package/dist/admin/components/fields/field-renderer.svelte +32 -19
  20. package/dist/admin/components/fields/field-renderer.svelte.d.ts +1 -1
  21. package/dist/admin/components/fields/field-value-bridge.svelte +21 -0
  22. package/dist/admin/components/fields/field-value-bridge.svelte.d.ts +31 -0
  23. package/dist/admin/components/fields/fields-form.svelte +13 -10
  24. package/dist/admin/components/fields/file-field.svelte +12 -27
  25. package/dist/admin/components/fields/file-field.svelte.d.ts +5 -27
  26. package/dist/admin/components/fields/image-field.svelte +13 -28
  27. package/dist/admin/components/fields/image-field.svelte.d.ts +5 -27
  28. package/dist/admin/components/fields/media-field.svelte +15 -30
  29. package/dist/admin/components/fields/media-field.svelte.d.ts +5 -27
  30. package/dist/admin/components/fields/number-field.svelte +6 -20
  31. package/dist/admin/components/fields/number-field.svelte.d.ts +5 -27
  32. package/dist/admin/components/fields/object-field.svelte +26 -29
  33. package/dist/admin/components/fields/object-field.svelte.d.ts +11 -31
  34. package/dist/admin/components/fields/radio-field.svelte +8 -20
  35. package/dist/admin/components/fields/radio-field.svelte.d.ts +5 -27
  36. package/dist/admin/components/fields/relation-field.svelte +15 -30
  37. package/dist/admin/components/fields/relation-field.svelte.d.ts +5 -27
  38. package/dist/admin/components/fields/richtext-field.svelte +4 -17
  39. package/dist/admin/components/fields/richtext-field.svelte.d.ts +5 -27
  40. package/dist/admin/components/fields/select-field.svelte +14 -28
  41. package/dist/admin/components/fields/select-field.svelte.d.ts +5 -27
  42. package/dist/admin/components/fields/seo-field.svelte +5 -12
  43. package/dist/admin/components/fields/seo-field.svelte.d.ts +8 -28
  44. package/dist/admin/components/fields/simple-array-field.svelte +29 -42
  45. package/dist/admin/components/fields/simple-array-field.svelte.d.ts +5 -27
  46. package/dist/admin/components/fields/slug-field.svelte +6 -11
  47. package/dist/admin/components/fields/slug-field.svelte.d.ts +6 -26
  48. package/dist/admin/components/fields/text-field-wrapper.svelte +22 -40
  49. package/dist/admin/components/fields/text-field.svelte +7 -19
  50. package/dist/admin/components/fields/text-field.svelte.d.ts +5 -27
  51. package/dist/admin/components/fields/url-field-wrapper.svelte +8 -3
  52. package/dist/admin/components/fields/url-field.svelte +294 -128
  53. package/dist/admin/components/fields/url-field.svelte.d.ts +5 -27
  54. package/dist/admin/components/layout/layout-renderer.svelte +8 -6
  55. package/dist/admin/components/tiptap/InlineBlockNodeView.svelte +221 -31
  56. package/dist/admin/components/tiptap/content-editor.svelte +13 -2
  57. package/dist/admin/components/tiptap/inline-block-node.d.ts +1 -0
  58. package/dist/admin/components/tiptap/inline-block-node.js +18 -1
  59. package/dist/admin/components/tiptap/slash-command.js +2 -3
  60. package/dist/admin/components/tiptap/standalone-form.d.ts +7 -0
  61. package/dist/admin/components/tiptap/standalone-form.js +31 -0
  62. package/dist/admin/components/tiptap/tiptap-editor.svelte +7 -0
  63. package/dist/admin/remote/entry.remote.js +16 -0
  64. package/dist/admin/styles/admin.css +10 -0
  65. package/dist/admin/utils/fieldCondition.d.ts +6 -0
  66. package/dist/admin/utils/fieldCondition.js +20 -0
  67. package/dist/components/ui/switch/index.d.ts +2 -0
  68. package/dist/components/ui/switch/index.js +4 -0
  69. package/dist/components/ui/switch/switch.svelte +26 -0
  70. package/dist/components/ui/switch/switch.svelte.d.ts +4 -0
  71. package/dist/core/fields/fieldSchemaToTs.js +15 -3
  72. package/dist/core/fields/formFieldSchemaToTs.js +22 -6
  73. package/dist/core/fields/urlUtils.d.ts +14 -0
  74. package/dist/core/fields/urlUtils.js +21 -0
  75. package/dist/core/server/fields/populateEntry.js +43 -0
  76. package/dist/core/server/fields/resolveImageFields.js +33 -1
  77. package/dist/core/server/fields/resolveRelationFields.js +46 -0
  78. package/dist/core/server/fields/resolveRichtextLinks.js +15 -1
  79. package/dist/core/server/fields/resolveUrlFields.js +65 -0
  80. package/dist/core/server/generator/formFieldSchemaToString.js +40 -9
  81. package/dist/core/server/generator/formFields.js +2 -0
  82. package/dist/core/server/generator/generator.js +25 -1
  83. package/dist/schemas/field/url.d.ts +2 -0
  84. package/dist/schemas/field/url.js +4 -2
  85. package/dist/types/fields.d.ts +9 -0
  86. package/dist/types/formFields.d.ts +15 -2
  87. package/dist/types/index.d.ts +1 -0
  88. package/dist/types/index.js +1 -0
  89. package/dist/updates/0.0.65/index.js +1 -1
  90. package/dist/updates/0.0.67/index.js +1 -1
  91. package/dist/updates/0.1.2/index.js +1 -1
  92. package/dist/updates/0.1.5/index.js +1 -1
  93. package/dist/updates/0.2.0/index.js +1 -1
  94. package/dist/updates/0.2.2/index.js +1 -1
  95. package/dist/updates/0.5.0/index.js +1 -1
  96. package/dist/updates/0.5.2/index.d.ts +2 -0
  97. package/dist/updates/0.5.2/index.js +14 -0
  98. package/dist/updates/0.5.3/index.d.ts +2 -0
  99. package/dist/updates/0.5.3/index.js +19 -0
  100. package/dist/updates/index.d.ts +2 -1
  101. package/dist/updates/index.js +3 -1
  102. package/package.json +2 -1
  103. package/dist/admin/components/fields/standalone-field-renderer.svelte +0 -148
  104. package/dist/admin/components/fields/standalone-field-renderer.svelte.d.ts +0 -9
  105. package/dist/updates/0.0.65/migration.sql +0 -55
  106. package/dist/updates/0.0.67/migration.sql +0 -9
@@ -1,30 +1,8 @@
1
- import { type FormPathLeaves, type SuperForm } from 'sveltekit-superforms';
2
1
  import type { ImageField } from '../../../types/fields.js';
3
- declare function $$render<T extends Record<string, unknown>>(): {
4
- props: {
5
- field: ImageField;
6
- form: SuperForm<T>;
7
- path: FormPathLeaves<T, string | string[] | undefined>;
8
- };
9
- exports: {};
10
- bindings: "";
11
- slots: {};
12
- events: {};
2
+ type Props = {
3
+ field: ImageField;
4
+ value: string | string[] | undefined;
13
5
  };
14
- declare class __sveltets_Render<T extends Record<string, unknown>> {
15
- props(): ReturnType<typeof $$render<T>>['props'];
16
- events(): ReturnType<typeof $$render<T>>['events'];
17
- slots(): ReturnType<typeof $$render<T>>['slots'];
18
- bindings(): "";
19
- exports(): {};
20
- }
21
- interface $$IsomorphicComponent {
22
- new <T extends Record<string, unknown>>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T>['props']>, ReturnType<__sveltets_Render<T>['events']>, ReturnType<__sveltets_Render<T>['slots']>> & {
23
- $$bindings?: ReturnType<__sveltets_Render<T>['bindings']>;
24
- } & ReturnType<__sveltets_Render<T>['exports']>;
25
- <T extends Record<string, unknown>>(internal: unknown, props: ReturnType<__sveltets_Render<T>['props']> & {}): ReturnType<__sveltets_Render<T>['exports']>;
26
- z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
27
- }
28
- declare const ImageField: $$IsomorphicComponent;
29
- type ImageField<T extends Record<string, unknown>> = InstanceType<typeof ImageField<T>>;
6
+ declare const ImageField: import("svelte").Component<Props, {}, "value">;
7
+ type ImageField = ReturnType<typeof ImageField>;
30
8
  export default ImageField;
@@ -1,15 +1,5 @@
1
- <script lang="ts" module>
2
- type T = Record<string, unknown>;
3
- </script>
4
-
5
- <script lang="ts" generics="T extends Record<string, unknown>">
1
+ <script lang="ts">
6
2
  import * as Dialog from '../../../components/ui/dialog/index.js';
7
- import {
8
- formFieldProxy,
9
- type FormFieldProxy,
10
- type FormPathLeaves,
11
- type SuperForm
12
- } from 'sveltekit-superforms';
13
3
  import { onMount } from 'svelte';
14
4
  import Button from '../../../components/ui/button/button.svelte';
15
5
  import type { MediaField } from '../../../types/fields.js';
@@ -110,19 +100,14 @@
110
100
 
111
101
  type Props = {
112
102
  field: MediaField;
113
- form: SuperForm<T>;
114
- path: FormPathLeaves<T, string | string[] | undefined>;
103
+ value: string | string[] | undefined;
115
104
  };
116
105
 
117
- let { field, form, path, ...props }: Props = $props();
118
-
119
- const { value } = formFieldProxy(form, path) satisfies FormFieldProxy<
120
- string | string[] | undefined
121
- >;
106
+ let { field, value = $bindable(), ...props }: Props = $props();
122
107
 
123
108
  onMount(() => {
124
- if ($value === undefined) {
125
- $value = field.multiple ? [] : '';
109
+ if (value === undefined) {
110
+ value = field.multiple ? [] : '';
126
111
  }
127
112
  });
128
113
  </script>
@@ -203,14 +188,14 @@
203
188
  {/if}
204
189
  {/snippet}
205
190
 
206
- {#if $value !== undefined}
191
+ {#if value !== undefined}
207
192
  <Dialog.Root>
208
193
  <Dialog.Trigger>
209
194
  {#snippet child({ props })}
210
- {#if $value && ((typeof $value === 'string' && $value !== '') || (Array.isArray($value) && $value.length > 0))}
195
+ {#if value && ((typeof value === 'string' && value !== '') || (Array.isArray(value) && value.length > 0))}
211
196
  <div class="max-w-96">
212
- {#if typeof $value === 'string'}
213
- {#await remotes.getFileById($value)}
197
+ {#if typeof value === 'string'}
198
+ {#await remotes.getFileById(value)}
214
199
  <div class="animate-pulse bg-muted w-full aspect-video rounded-xl"></div>
215
200
  {:then file}
216
201
  {#if file}
@@ -223,7 +208,7 @@
223
208
  {lang[interfaceLanguage.current].change}
224
209
  </Button>
225
210
  {#if !field.required}
226
- <Button variant="destructive" size="sm" class="h-8" onclick={(e) => { e.stopPropagation(); $value = ''; }}>
211
+ <Button variant="destructive" size="sm" class="h-8" onclick={(e) => { e.stopPropagation(); value = ''; }}>
227
212
  <X class="h-4 w-4" />
228
213
  {lang[interfaceLanguage.current].remove}
229
214
  </Button>
@@ -246,7 +231,7 @@
246
231
  {lang[interfaceLanguage.current].change}
247
232
  </Button>
248
233
  {#if !field.required}
249
- <Button variant="destructive" size="sm" class="h-8" onclick={(e) => { e.stopPropagation(); $value = ''; }}>
234
+ <Button variant="destructive" size="sm" class="h-8" onclick={(e) => { e.stopPropagation(); value = ''; }}>
250
235
  <X class="h-4 w-4" />
251
236
  {lang[interfaceLanguage.current].remove}
252
237
  </Button>
@@ -256,8 +241,8 @@
256
241
  {/if}
257
242
  {/if}
258
243
  {/await}
259
- {:else if Array.isArray($value) && $value.length > 0}
260
- {@const valueArr = $value}
244
+ {:else if Array.isArray(value) && value.length > 0}
245
+ {@const valueArr = value}
261
246
  {#await remotes.getMediaFiles({ data: { ids: valueArr } })}
262
247
  <div class="animate-pulse bg-muted w-full aspect-video rounded-xl"></div>
263
248
  {:then files}
@@ -304,7 +289,7 @@
304
289
  {lang[interfaceLanguage.current].change}
305
290
  </Button>
306
291
  {#if !field.required}
307
- <Button variant="destructive" size="sm" class="h-8" onclick={(e) => { e.stopPropagation(); $value = field.multiple ? [] : ''; }}>
292
+ <Button variant="destructive" size="sm" class="h-8" onclick={(e) => { e.stopPropagation(); value = field.multiple ? [] : ''; }}>
308
293
  <X class="h-4 w-4" />
309
294
  {lang[interfaceLanguage.current].remove}
310
295
  </Button>
@@ -331,7 +316,7 @@
331
316
  {/snippet}
332
317
  </Dialog.Trigger>
333
318
  <Dialog.Content class="h-[85vh] w-full max-w-6xl! sm:max-w-6xl! overflow-hidden p-0 flex flex-col">
334
- <MediaSelector bind:selected={$value} multiple={field.multiple} accept={field.accept} />
319
+ <MediaSelector bind:selected={value} multiple={field.multiple} accept={field.accept} />
335
320
  </Dialog.Content>
336
321
  </Dialog.Root>
337
322
 
@@ -1,30 +1,8 @@
1
- import { type FormPathLeaves, type SuperForm } from 'sveltekit-superforms';
2
1
  import type { MediaField } from '../../../types/fields.js';
3
- declare function $$render<T extends Record<string, unknown>>(): {
4
- props: {
5
- field: MediaField;
6
- form: SuperForm<T>;
7
- path: FormPathLeaves<T, string | string[] | undefined>;
8
- };
9
- exports: {};
10
- bindings: "";
11
- slots: {};
12
- events: {};
2
+ type Props = {
3
+ field: MediaField;
4
+ value: string | string[] | undefined;
13
5
  };
14
- declare class __sveltets_Render<T extends Record<string, unknown>> {
15
- props(): ReturnType<typeof $$render<T>>['props'];
16
- events(): ReturnType<typeof $$render<T>>['events'];
17
- slots(): ReturnType<typeof $$render<T>>['slots'];
18
- bindings(): "";
19
- exports(): {};
20
- }
21
- interface $$IsomorphicComponent {
22
- new <T extends Record<string, unknown>>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T>['props']>, ReturnType<__sveltets_Render<T>['events']>, ReturnType<__sveltets_Render<T>['slots']>> & {
23
- $$bindings?: ReturnType<__sveltets_Render<T>['bindings']>;
24
- } & ReturnType<__sveltets_Render<T>['exports']>;
25
- <T extends Record<string, unknown>>(internal: unknown, props: ReturnType<__sveltets_Render<T>['props']> & {}): ReturnType<__sveltets_Render<T>['exports']>;
26
- z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
27
- }
28
- declare const MediaField: $$IsomorphicComponent;
29
- type MediaField<T extends Record<string, unknown>> = InstanceType<typeof MediaField<T>>;
6
+ declare const MediaField: import("svelte").Component<Props, {}, "value">;
7
+ type MediaField = ReturnType<typeof MediaField>;
30
8
  export default MediaField;
@@ -1,34 +1,20 @@
1
- <script lang="ts" module>
2
- type T = Record<string, unknown>;
3
- </script>
4
-
5
- <script lang="ts" generics="T extends Record<string, unknown>">
1
+ <script lang="ts">
6
2
  import Input from '../../../components/ui/input/input.svelte';
7
- import Textarea from '../../../components/ui/textarea/textarea.svelte';
8
3
  import type { NumberField } from '../../../types/fields.js';
9
4
  import { onMount } from 'svelte';
10
- import {
11
- formFieldProxy,
12
- type FormFieldProxy,
13
- type FormPathLeaves,
14
- type SuperForm
15
- } from 'sveltekit-superforms';
16
5
 
17
6
  type Props = {
18
7
  field: NumberField;
19
- form: SuperForm<T>;
20
- path: FormPathLeaves<T, number | undefined>;
8
+ value: number | undefined;
21
9
  };
22
10
 
23
- let { field, form, path, ...props }: Props = $props();
24
-
25
- const { value } = formFieldProxy(form, path) satisfies FormFieldProxy<number | undefined>;
11
+ let { field, value = $bindable(), ...props }: Props = $props();
26
12
 
27
13
  onMount(() => {
28
- if ($value === undefined && field.defaultValue !== undefined) {
29
- $value = field.defaultValue;
14
+ if (value === undefined && field.defaultValue !== undefined) {
15
+ value = field.defaultValue;
30
16
  }
31
17
  });
32
18
  </script>
33
19
 
34
- <Input {...props} bind:value={$value} type="number" min={field.min} max={field.max} step={field.step} />
20
+ <Input {...props} bind:value type="number" min={field.min} max={field.max} step={field.step} />
@@ -1,30 +1,8 @@
1
1
  import type { NumberField } from '../../../types/fields.js';
2
- import { type FormPathLeaves, type SuperForm } from 'sveltekit-superforms';
3
- declare function $$render<T extends Record<string, unknown>>(): {
4
- props: {
5
- field: NumberField;
6
- form: SuperForm<T>;
7
- path: FormPathLeaves<T, number | undefined>;
8
- };
9
- exports: {};
10
- bindings: "";
11
- slots: {};
12
- events: {};
2
+ type Props = {
3
+ field: NumberField;
4
+ value: number | undefined;
13
5
  };
14
- declare class __sveltets_Render<T extends Record<string, unknown>> {
15
- props(): ReturnType<typeof $$render<T>>['props'];
16
- events(): ReturnType<typeof $$render<T>>['events'];
17
- slots(): ReturnType<typeof $$render<T>>['slots'];
18
- bindings(): "";
19
- exports(): {};
20
- }
21
- interface $$IsomorphicComponent {
22
- new <T extends Record<string, unknown>>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T>['props']>, ReturnType<__sveltets_Render<T>['events']>, ReturnType<__sveltets_Render<T>['slots']>> & {
23
- $$bindings?: ReturnType<__sveltets_Render<T>['bindings']>;
24
- } & ReturnType<__sveltets_Render<T>['exports']>;
25
- <T extends Record<string, unknown>>(internal: unknown, props: ReturnType<__sveltets_Render<T>['props']> & {}): ReturnType<__sveltets_Render<T>['exports']>;
26
- z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
27
- }
28
- declare const NumberField: $$IsomorphicComponent;
29
- type NumberField<T extends Record<string, unknown>> = InstanceType<typeof NumberField<T>>;
6
+ declare const NumberField: import("svelte").Component<Props, {}, "value">;
7
+ type NumberField = ReturnType<typeof NumberField>;
30
8
  export default NumberField;
@@ -1,17 +1,13 @@
1
- <script lang="ts" module>
2
- type T = Record<string, unknown>;
3
- </script>
4
-
5
- <script lang="ts" generics="T extends Record<string, unknown>">
1
+ <script lang="ts">
6
2
  import {
7
3
  formFieldProxy,
8
- type FormFieldProxy,
9
4
  type FormPathLeaves,
10
5
  type SuperForm
11
6
  } from 'sveltekit-superforms';
12
7
  import FieldRenderer from './field-renderer.svelte';
13
8
  import { joinPath, normalizePath } from '../../utils/objectPath.js';
14
9
  import type { ObjectField, ObjectFieldData } from '../../../types/fields.js';
10
+ import { evaluateCondition } from '../../utils/fieldCondition.js';
15
11
  import { onMount } from 'svelte';
16
12
  import * as Item from '../../../components/ui/item/index.js';
17
13
  import { useInterfaceLanguage } from '../../state/interface-language.svelte.js';
@@ -21,8 +17,8 @@
21
17
  type Props = {
22
18
  objectFieldType?: 'default' | 'inline';
23
19
  field: ObjectField;
24
- form: SuperForm<T>;
25
- path: FormPathLeaves<T, ObjectFieldData | undefined>;
20
+ form: SuperForm<Record<string, unknown>>;
21
+ path: FormPathLeaves<Record<string, unknown>>;
26
22
  focusedPath?: string | null;
27
23
  flashingPath?: string | null;
28
24
  depth?: number;
@@ -31,9 +27,8 @@
31
27
  let { field, form, path, objectFieldType = 'default', focusedPath = null, flashingPath = null, depth = 0, ...props }: Props = $props();
32
28
 
33
29
  const interfaceLanguage = useInterfaceLanguage();
34
- const { value } = formFieldProxy(form, path) satisfies FormFieldProxy<
35
- ObjectFieldData | undefined
36
- >;
30
+ const { form: formData } = form;
31
+ const { value } = formFieldProxy(form, path) as { value: import('svelte/store').Writable<ObjectFieldData | undefined> };
37
32
 
38
33
  onMount(() => {
39
34
  if (!$value) {
@@ -64,24 +59,26 @@
64
59
  {#snippet content()}
65
60
  <div class="space-y-4">
66
61
  {#each field.fields as f}
67
- {@const fieldPath = joinPath(path, 'data', f.slug)}
68
- {@const showFlash = isFlashing(fieldPath)}
69
- <div
70
- data-field-path={fieldPath}
71
- class={cn(
72
- 'rounded-lg transition-all duration-500',
73
- showFlash && 'ring-2 ring-primary ring-offset-2 bg-primary/5'
74
- )}
75
- >
76
- <FieldRenderer
77
- field={f}
78
- form={form as SuperForm<Record<string, unknown>>}
79
- path={fieldPath}
80
- {focusedPath}
81
- {flashingPath}
82
- depth={depth + 1}
83
- />
84
- </div>
62
+ {#if evaluateCondition(f.showWhen, (slug) => $value?.data?.[slug] ?? $formData[slug])}
63
+ {@const fieldPath = joinPath(path, 'data', f.slug)}
64
+ {@const showFlash = isFlashing(fieldPath)}
65
+ <div
66
+ data-field-path={fieldPath}
67
+ class={cn(
68
+ 'rounded-lg transition-all duration-500',
69
+ showFlash && 'ring-2 ring-primary ring-offset-2 bg-primary/5'
70
+ )}
71
+ >
72
+ <FieldRenderer
73
+ field={f}
74
+ {form}
75
+ path={fieldPath}
76
+ {focusedPath}
77
+ {flashingPath}
78
+ depth={depth + 1}
79
+ />
80
+ </div>
81
+ {/if}
85
82
  {/each}
86
83
  </div>
87
84
  {/snippet}
@@ -1,34 +1,14 @@
1
1
  import { type FormPathLeaves, type SuperForm } from 'sveltekit-superforms';
2
- import type { ObjectField, ObjectFieldData } from '../../../types/fields.js';
3
- declare function $$render<T extends Record<string, unknown>>(): {
4
- props: {
5
- objectFieldType?: "default" | "inline";
6
- field: ObjectField;
7
- form: SuperForm<T>;
8
- path: FormPathLeaves<T, ObjectFieldData | undefined>;
9
- focusedPath?: string | null;
10
- flashingPath?: string | null;
11
- depth?: number;
12
- };
13
- exports: {};
14
- bindings: "";
15
- slots: {};
16
- events: {};
2
+ import type { ObjectField } from '../../../types/fields.js';
3
+ type Props = {
4
+ objectFieldType?: 'default' | 'inline';
5
+ field: ObjectField;
6
+ form: SuperForm<Record<string, unknown>>;
7
+ path: FormPathLeaves<Record<string, unknown>>;
8
+ focusedPath?: string | null;
9
+ flashingPath?: string | null;
10
+ depth?: number;
17
11
  };
18
- declare class __sveltets_Render<T extends Record<string, unknown>> {
19
- props(): ReturnType<typeof $$render<T>>['props'];
20
- events(): ReturnType<typeof $$render<T>>['events'];
21
- slots(): ReturnType<typeof $$render<T>>['slots'];
22
- bindings(): "";
23
- exports(): {};
24
- }
25
- interface $$IsomorphicComponent {
26
- new <T extends Record<string, unknown>>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T>['props']>, ReturnType<__sveltets_Render<T>['events']>, ReturnType<__sveltets_Render<T>['slots']>> & {
27
- $$bindings?: ReturnType<__sveltets_Render<T>['bindings']>;
28
- } & ReturnType<__sveltets_Render<T>['exports']>;
29
- <T extends Record<string, unknown>>(internal: unknown, props: ReturnType<__sveltets_Render<T>['props']> & {}): ReturnType<__sveltets_Render<T>['exports']>;
30
- z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
31
- }
32
- declare const ObjectField: $$IsomorphicComponent;
33
- type ObjectField<T extends Record<string, unknown>> = InstanceType<typeof ObjectField<T>>;
12
+ declare const ObjectField: import("svelte").Component<Props, {}, "">;
13
+ type ObjectField = ReturnType<typeof ObjectField>;
34
14
  export default ObjectField;
@@ -1,16 +1,6 @@
1
- <script lang="ts" module>
2
- type T = Record<string, unknown>;
3
- </script>
4
-
5
- <script lang="ts" generics="T extends Record<string, unknown>">
6
- import {
7
- formFieldProxy,
8
- type FormFieldProxy,
9
- type FormPathLeaves,
10
- type SuperForm
11
- } from 'sveltekit-superforms';
1
+ <script lang="ts">
12
2
  import { onMount } from 'svelte';
13
- import type { BooleanField, ImageField, RadioField } from '../../../types/fields.js';
3
+ import type { RadioField } from '../../../types/fields.js';
14
4
  import * as Form from '../../../components/ui/form/index.js';
15
5
  import * as RadioGroup from '../../../components/ui/radio-group/index.js';
16
6
  import { useInterfaceLanguage } from '../../state/interface-language.svelte.js';
@@ -18,24 +8,22 @@
18
8
 
19
9
  type Props = {
20
10
  field: RadioField;
21
- form: SuperForm<T>;
22
- path: FormPathLeaves<T, string | undefined>;
11
+ value: string | undefined;
23
12
  };
24
13
 
25
- let { field, form, path, ...props }: Props = $props();
14
+ let { field, value = $bindable(), ...props }: Props = $props();
26
15
 
27
16
  const interfaceLanguage = useInterfaceLanguage();
28
- const { value } = formFieldProxy(form, path) satisfies FormFieldProxy<string | undefined>;
29
17
 
30
18
  onMount(() => {
31
- if ($value === undefined) {
32
- $value = field.defaultValue ?? '';
19
+ if (value === undefined) {
20
+ value = field.defaultValue ?? '';
33
21
  }
34
22
  });
35
23
  </script>
36
24
 
37
- {#if $value !== undefined}
38
- <RadioGroup.Root bind:value={$value} class="flex flex-col space-y-1" name={path}>
25
+ {#if value !== undefined}
26
+ <RadioGroup.Root bind:value class="flex flex-col space-y-1">
39
27
  {#each field.options as option}
40
28
  <div class="flex items-center space-y-0 space-x-3">
41
29
  <Form.Control>
@@ -1,30 +1,8 @@
1
- import { type FormPathLeaves, type SuperForm } from 'sveltekit-superforms';
2
1
  import type { RadioField } from '../../../types/fields.js';
3
- declare function $$render<T extends Record<string, unknown>>(): {
4
- props: {
5
- field: RadioField;
6
- form: SuperForm<T>;
7
- path: FormPathLeaves<T, string | undefined>;
8
- };
9
- exports: {};
10
- bindings: "";
11
- slots: {};
12
- events: {};
2
+ type Props = {
3
+ field: RadioField;
4
+ value: string | undefined;
13
5
  };
14
- declare class __sveltets_Render<T extends Record<string, unknown>> {
15
- props(): ReturnType<typeof $$render<T>>['props'];
16
- events(): ReturnType<typeof $$render<T>>['events'];
17
- slots(): ReturnType<typeof $$render<T>>['slots'];
18
- bindings(): "";
19
- exports(): {};
20
- }
21
- interface $$IsomorphicComponent {
22
- new <T extends Record<string, unknown>>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T>['props']>, ReturnType<__sveltets_Render<T>['events']>, ReturnType<__sveltets_Render<T>['slots']>> & {
23
- $$bindings?: ReturnType<__sveltets_Render<T>['bindings']>;
24
- } & ReturnType<__sveltets_Render<T>['exports']>;
25
- <T extends Record<string, unknown>>(internal: unknown, props: ReturnType<__sveltets_Render<T>['props']> & {}): ReturnType<__sveltets_Render<T>['exports']>;
26
- z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
27
- }
28
- declare const RadioField: $$IsomorphicComponent;
29
- type RadioField<T extends Record<string, unknown>> = InstanceType<typeof RadioField<T>>;
6
+ declare const RadioField: import("svelte").Component<Props, {}, "value">;
7
+ type RadioField = ReturnType<typeof RadioField>;
30
8
  export default RadioField;
@@ -1,16 +1,6 @@
1
- <script lang="ts" module>
2
- type T = Record<string, unknown>;
3
- </script>
4
-
5
- <script lang="ts" generics="T extends Record<string, unknown>">
1
+ <script lang="ts">
6
2
  import type { RelationFieldData, RelationField } from '../../../types/fields.js';
7
3
  import type { CollectionConfig } from '../../../types/collections.js';
8
- import {
9
- formFieldProxy,
10
- type FormFieldProxy,
11
- type FormPathLeaves,
12
- type SuperForm
13
- } from 'sveltekit-superforms';
14
4
  import { getRemotes } from '../../../sveltekit/index.js';
15
5
  import { buttonVariants } from '../../../components/ui/button/button.svelte';
16
6
  import { getCollectionEntryLabel } from '../../utils/entryLabel.js';
@@ -43,27 +33,24 @@
43
33
 
44
34
  type Props = {
45
35
  field: RelationField;
46
- form: SuperForm<T>;
47
- path: FormPathLeaves<T, RelationFieldData>;
36
+ value: RelationFieldData;
48
37
  };
49
38
 
50
- let { field, form, path, ...props }: Props = $props();
51
-
52
- const { value } = formFieldProxy(form, path) satisfies FormFieldProxy<RelationFieldData>;
39
+ let { field, value = $bindable(), ...props }: Props = $props();
53
40
 
54
41
  const multiple = $derived(field.multiple === true);
55
42
 
56
43
  // Ensure value is array when multiple
57
44
  onMount(() => {
58
- if (multiple && !Array.isArray($value)) {
59
- $value = $value ? [$value] : [];
45
+ if (multiple && !Array.isArray(value)) {
46
+ value = value ? [value] : [];
60
47
  }
61
48
  });
62
49
 
63
50
  // Helper to get current array value safely
64
51
  function getArrayValue(): string[] {
65
- if (Array.isArray($value)) return $value;
66
- return $value ? [$value] : [];
52
+ if (Array.isArray(value)) return value;
53
+ return value ? [value] : [];
67
54
  }
68
55
 
69
56
  function isSelected(id: string): boolean {
@@ -73,14 +60,14 @@
73
60
  function toggleItem(id: string) {
74
61
  const arr = getArrayValue();
75
62
  if (arr.includes(id)) {
76
- $value = arr.filter((v) => v !== id);
63
+ value = arr.filter((v) => v !== id);
77
64
  } else {
78
- $value = [...arr, id];
65
+ value = [...arr, id];
79
66
  }
80
67
  }
81
68
 
82
69
  function removeItem(id: string) {
83
- $value = getArrayValue().filter((v) => v !== id);
70
+ value = getArrayValue().filter((v) => v !== id);
84
71
  }
85
72
 
86
73
  type RelationOption = { label: string; value: string };
@@ -154,7 +141,6 @@
154
141
  {/if}
155
142
  <Selector class="opacity-50" />
156
143
  </Popover.Trigger>
157
- <input hidden value={JSON.stringify(getArrayValue())} name={path} />
158
144
 
159
145
  <Popover.Content class="w-[200px] p-0">
160
146
  <Command.Root>
@@ -199,7 +185,7 @@
199
185
  const dropIndex = parseInt(state.targetContainer ?? '');
200
186
 
201
187
  if (!isNaN(dragIndex) && !isNaN(dropIndex)) {
202
- $value = [...arrayMove(getArrayValue(), dragIndex, dropIndex)];
188
+ value = [...arrayMove(getArrayValue(), dragIndex, dropIndex)];
203
189
  }
204
190
  }
205
191
  }
@@ -231,7 +217,7 @@
231
217
  </div>
232
218
  {/if}
233
219
  {:else}
234
- <!-- Single-select mode (unchanged) -->
220
+ <!-- Single-select mode -->
235
221
  <Popover.Root bind:open>
236
222
  <Popover.Trigger
237
223
  id={triggerId}
@@ -243,11 +229,10 @@
243
229
  role="combobox"
244
230
  {...props}
245
231
  >
246
- {options.find((f) => f.value === $value)?.label ??
232
+ {options.find((f) => f.value === value)?.label ??
247
233
  `${lang[interfaceLanguage.current].select} ${getLocalizedLabel(collectionConfig.labels?.singular, interfaceLanguage.current) || collectionConfig.slug}`}
248
234
  <Selector class="opacity-50" />
249
235
  </Popover.Trigger>
250
- <input hidden value={$value} name={path} />
251
236
 
252
237
  <Popover.Content class="w-[200px] p-0">
253
238
  <Command.Root>
@@ -265,12 +250,12 @@
265
250
  <Command.Item
266
251
  value={option.label}
267
252
  onSelect={() => {
268
- $value = option.value;
253
+ value = option.value;
269
254
  closeAndFocusTrigger(triggerId);
270
255
  }}
271
256
  >
272
257
  {option.label}
273
- <Check class={cn('ml-auto', option.value !== $value && 'text-transparent')} />
258
+ <Check class={cn('ml-auto', option.value !== value && 'text-transparent')} />
274
259
  </Command.Item>
275
260
  {/each}
276
261
  </Command.Group>
@@ -1,30 +1,8 @@
1
1
  import type { RelationFieldData, RelationField } from '../../../types/fields.js';
2
- import { type FormPathLeaves, type SuperForm } from 'sveltekit-superforms';
3
- declare function $$render<T extends Record<string, unknown>>(): {
4
- props: {
5
- field: RelationField;
6
- form: SuperForm<T>;
7
- path: FormPathLeaves<T, RelationFieldData>;
8
- };
9
- exports: {};
10
- bindings: "";
11
- slots: {};
12
- events: {};
2
+ type Props = {
3
+ field: RelationField;
4
+ value: RelationFieldData;
13
5
  };
14
- declare class __sveltets_Render<T extends Record<string, unknown>> {
15
- props(): ReturnType<typeof $$render<T>>['props'];
16
- events(): ReturnType<typeof $$render<T>>['events'];
17
- slots(): ReturnType<typeof $$render<T>>['slots'];
18
- bindings(): "";
19
- exports(): {};
20
- }
21
- interface $$IsomorphicComponent {
22
- new <T extends Record<string, unknown>>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T>['props']>, ReturnType<__sveltets_Render<T>['events']>, ReturnType<__sveltets_Render<T>['slots']>> & {
23
- $$bindings?: ReturnType<__sveltets_Render<T>['bindings']>;
24
- } & ReturnType<__sveltets_Render<T>['exports']>;
25
- <T extends Record<string, unknown>>(internal: unknown, props: ReturnType<__sveltets_Render<T>['props']> & {}): ReturnType<__sveltets_Render<T>['exports']>;
26
- z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
27
- }
28
- declare const RelationField: $$IsomorphicComponent;
29
- type RelationField<T extends Record<string, unknown>> = InstanceType<typeof RelationField<T>>;
6
+ declare const RelationField: import("svelte").Component<Props, {}, "value">;
7
+ type RelationField = ReturnType<typeof RelationField>;
30
8
  export default RelationField;