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.
- package/dist/adapter-sqlite/area.server.js +8 -8
- package/dist/adapter-sqlite/generate-schema/column.server.d.ts +13 -0
- package/dist/adapter-sqlite/generate-schema/column.server.js +77 -0
- package/dist/adapter-sqlite/generate-schema/index.server.js +7 -12
- package/dist/adapter-sqlite/generate-schema/root.server.js +35 -39
- package/dist/adapter-sqlite/generate-schema/templates.server.d.ts +12 -0
- package/dist/adapter-sqlite/generate-schema/templates.server.js +19 -0
- package/dist/adapter-sqlite/index.server.d.ts +1 -2
- package/dist/adapter-sqlite/index.server.js +0 -2
- package/dist/adapter-sqlite/relations.server.js +6 -1
- package/dist/adapter-sqlite/util.server.d.ts +1 -6
- package/dist/adapter-sqlite/util.server.js +6 -0
- package/dist/adapter-sqlite/where.server.js +17 -16
- package/dist/adapter-sqlite/with.server.js +9 -9
- package/dist/core/collections/auth/fields.d.ts +2 -182
- package/dist/core/collections/config/augment-auth.server.js +1 -1
- package/dist/core/collections/config/augment-nested.server.js +1 -1
- package/dist/core/collections/config/augment-upload.js +2 -2
- package/dist/core/collections/config/augment-upload.server.js +4 -1
- package/dist/core/collections/operations/duplicate.js +30 -11
- package/dist/core/collections/operations/updateById.js +6 -5
- package/dist/core/collections/rest/duplicate.server.js +7 -3
- package/dist/core/collections/upload/disk/delete.server.d.ts +1 -1
- package/dist/core/collections/upload/disk/delete.server.js +48 -1
- package/dist/core/collections/upload/hooks/clean-up-files.server.js +2 -2
- package/dist/core/collections/upload/hooks/extract-path.server.d.ts +1 -1
- package/dist/core/collections/upload/hooks/extract-path.server.js +1 -1
- package/dist/core/collections/upload/hooks/process-file-upload.server.js +3 -3
- package/dist/core/config/server/validate.server.js +50 -30
- package/dist/core/config/shared/find-thumbnail.js +12 -12
- package/dist/core/config/shared/find-title.js +13 -13
- package/dist/core/config/shared/upload-directories.js +1 -1
- package/dist/core/constant.server.d.ts +1 -0
- package/dist/core/constant.server.js +2 -0
- package/dist/core/dev/cache/index.server.js +9 -9
- package/dist/core/dev/cli/build/index.js +2 -2
- package/dist/core/dev/cli/clear/index.server.js +2 -1
- package/dist/core/dev/cli/generate/index.server.js +3 -2
- package/dist/core/dev/cli/init/index.server.js +1 -1
- package/dist/core/dev/generate/routes/index.server.js +2 -2
- package/dist/core/dev/generate/types/index.server.js +17 -17
- package/dist/core/dev/vite/index.server.js +21 -5
- package/dist/core/fields/builders/boolean-builder.d.ts +3 -1
- package/dist/core/fields/builders/boolean-builder.js +3 -0
- package/dist/core/fields/builders/field-builder.d.ts +35 -2
- package/dist/core/fields/builders/field-builder.js +33 -2
- package/dist/core/fields/builders/form-field-builder.d.ts +71 -12
- package/dist/core/fields/builders/form-field-builder.js +96 -6
- package/dist/core/fields/builders/select-builder.d.ts +4 -1
- package/dist/core/fields/builders/select-builder.js +3 -0
- package/dist/core/fields/util.d.ts +8 -16
- package/dist/core/fields/util.js +49 -83
- package/dist/core/handlers/routes.server.js +16 -3
- package/dist/core/naming.d.ts +34 -0
- package/dist/core/naming.js +39 -0
- package/dist/core/operations/blocks/diff.server.js +1 -1
- package/dist/core/operations/blocks/extract.server.js +1 -1
- package/dist/core/operations/configMap/buildTreeMap.d.ts +3 -2
- package/dist/core/operations/configMap/buildTreeMap.js +1 -1
- package/dist/core/operations/configMap/index.d.ts +2 -1
- package/dist/core/operations/configMap/index.js +13 -13
- package/dist/core/operations/configMap/types.d.ts +2 -2
- package/dist/core/operations/hooks/before-read/process-document-fields.server.js +14 -17
- package/dist/core/operations/hooks/before-upsert/data-config-map.server.js +1 -1
- package/dist/core/operations/hooks/before-upsert/original-config-map.server.js +1 -1
- package/dist/core/operations/hooks/before-upsert/set-default-values.server.d.ts +2 -4
- package/dist/core/operations/hooks/before-upsert/set-default-values.server.js +10 -15
- package/dist/core/operations/hooks/before-upsert/validate-fields.server.js +49 -31
- package/dist/core/operations/relations/extract.server.js +5 -5
- package/dist/core/operations/shared/fallback-data-from-original.js +2 -2
- package/dist/core/operations/tree/diff.server.js +1 -1
- package/dist/core/operations/tree/extract.server.js +1 -1
- package/dist/core/plugins/cache/cache.server.js +3 -3
- package/dist/fields/blocks/component/AddBlockButton.svelte +7 -7
- package/dist/fields/blocks/component/AddBlockButton.svelte.d.ts +2 -2
- package/dist/fields/blocks/component/Blocks.svelte +6 -7
- package/dist/fields/blocks/component/props.d.ts +2 -2
- package/dist/fields/blocks/index.d.ts +1 -1
- package/dist/fields/blocks/index.js +3 -3
- package/dist/fields/blocks/index.server.js +1 -1
- package/dist/fields/checkbox/component/Checkbox.svelte +2 -2
- package/dist/fields/checkbox/component/props.d.ts +2 -2
- package/dist/fields/checkbox/index.server.d.ts +1 -2
- package/dist/fields/checkbox/index.server.js +1 -10
- package/dist/fields/combobox/component/ComboBox.svelte +3 -3
- package/dist/fields/combobox/component/props.d.ts +2 -2
- package/dist/fields/combobox/index.server.d.ts +1 -2
- package/dist/fields/combobox/index.server.js +2 -11
- package/dist/fields/component/index.d.ts +1 -1
- package/dist/fields/date/component/Date.svelte +4 -4
- package/dist/fields/date/component/Date.svelte.d.ts +2 -2
- package/dist/fields/date/index.d.ts +3 -1
- package/dist/fields/date/index.js +3 -0
- package/dist/fields/date/index.server.d.ts +1 -2
- package/dist/fields/date/index.server.js +1 -10
- package/dist/fields/email/component/Email.svelte +5 -6
- package/dist/fields/email/component/props.d.ts +2 -3
- package/dist/fields/email/index.d.ts +3 -2
- package/dist/fields/email/index.js +4 -1
- package/dist/fields/email/index.server.d.ts +0 -3
- package/dist/fields/email/index.server.js +0 -9
- package/dist/fields/group/component/Group.svelte +9 -15
- package/dist/fields/group/component/Group.svelte.d.ts +2 -2
- package/dist/fields/group/index.d.ts +4 -2
- package/dist/fields/group/index.server.js +2 -2
- package/dist/fields/index.server.d.ts +1 -4
- package/dist/fields/index.server.js +17 -13
- package/dist/fields/link/component/Link.svelte +5 -5
- package/dist/fields/link/component/props.d.ts +2 -2
- package/dist/fields/link/index.d.ts +4 -1
- package/dist/fields/link/index.js +9 -10
- package/dist/fields/link/runtime.d.ts +2 -0
- package/dist/fields/link/runtime.js +1 -0
- package/dist/fields/link/{index.server.d.ts → runtime.server.d.ts} +1 -2
- package/dist/fields/link/{index.server.js → runtime.server.js} +2 -11
- package/dist/fields/number/component/Number.svelte +6 -6
- package/dist/fields/number/component/props.d.ts +2 -2
- package/dist/fields/number/index.d.ts +4 -10
- package/dist/fields/number/index.js +3 -4
- package/dist/fields/number/index.server.d.ts +1 -2
- package/dist/fields/number/index.server.js +1 -10
- package/dist/fields/radio/component/Radio.svelte +6 -7
- package/dist/fields/radio/component/props.d.ts +2 -2
- package/dist/fields/radio/index.server.d.ts +1 -2
- package/dist/fields/radio/index.server.js +2 -11
- package/dist/fields/relation/component/Relation.svelte +18 -14
- package/dist/fields/relation/component/Relation.svelte.d.ts +2 -2
- package/dist/fields/relation/index.d.ts +7 -4
- package/dist/fields/relation/index.js +8 -47
- package/dist/fields/relation/runtime.d.ts +5 -0
- package/dist/fields/relation/runtime.js +4 -0
- package/dist/fields/relation/runtime.server.d.ts +8 -0
- package/dist/fields/relation/runtime.server.js +49 -0
- package/dist/fields/rich-text/component/RichText.svelte +5 -5
- package/dist/fields/rich-text/component/props.d.ts +2 -2
- package/dist/fields/rich-text/core/features/fields/fields.svelte +2 -2
- package/dist/fields/rich-text/index.d.ts +2 -0
- package/dist/fields/rich-text/index.js +3 -0
- package/dist/fields/rich-text/index.server.d.ts +1 -2
- package/dist/fields/rich-text/index.server.js +1 -10
- package/dist/fields/select/component/Select.svelte +16 -16
- package/dist/fields/select/component/props.d.ts +2 -2
- package/dist/fields/select/index.d.ts +2 -0
- package/dist/fields/select/index.js +3 -0
- package/dist/fields/select/index.server.d.ts +1 -2
- package/dist/fields/select/index.server.js +2 -17
- package/dist/fields/slug/component/Slug.svelte +14 -10
- package/dist/fields/slug/component/Slug.svelte.d.ts +2 -2
- package/dist/fields/slug/index.d.ts +5 -2
- package/dist/fields/slug/index.js +3 -0
- package/dist/fields/slug/index.server.d.ts +1 -2
- package/dist/fields/slug/index.server.js +1 -10
- package/dist/fields/tabs/component/Tabs.svelte +15 -15
- package/dist/fields/tabs/component/Tabs.svelte.d.ts +2 -2
- package/dist/fields/tabs/index.d.ts +4 -16
- package/dist/fields/tabs/index.js +1 -8
- package/dist/fields/tabs/index.server.js +3 -3
- package/dist/fields/text/component/Text.svelte +5 -5
- package/dist/fields/text/component/props.d.ts +2 -3
- package/dist/fields/text/index.d.ts +4 -10
- package/dist/fields/text/index.js +3 -4
- package/dist/fields/text/index.server.d.ts +1 -2
- package/dist/fields/text/index.server.js +1 -10
- package/dist/fields/textarea/component/TextArea.svelte +3 -3
- package/dist/fields/textarea/component/props.d.ts +2 -2
- package/dist/fields/textarea/index.d.ts +4 -1
- package/dist/fields/textarea/index.js +3 -0
- package/dist/fields/textarea/index.server.d.ts +1 -2
- package/dist/fields/textarea/index.server.js +1 -10
- package/dist/fields/time/component/Time.svelte +5 -5
- package/dist/fields/time/component/Time.svelte.d.ts +1 -1
- package/dist/fields/time/component/props.d.ts +2 -2
- package/dist/fields/time/index.d.ts +2 -0
- package/dist/fields/time/index.js +3 -0
- package/dist/fields/time/index.server.d.ts +1 -2
- package/dist/fields/time/index.server.js +1 -10
- package/dist/fields/toggle/component/Toggle.svelte +3 -3
- package/dist/fields/toggle/component/Toggle.svelte.d.ts +1 -1
- package/dist/fields/toggle/component/props.d.ts +2 -2
- package/dist/fields/toggle/index.d.ts +2 -1
- package/dist/fields/toggle/index.server.d.ts +1 -2
- package/dist/fields/toggle/index.server.js +1 -10
- package/dist/fields/tree/component/AddItemButton.svelte +1 -2
- package/dist/fields/tree/component/Tree.svelte +6 -6
- package/dist/fields/tree/component/TreeBlock.svelte +5 -12
- package/dist/fields/tree/component/props.d.ts +3 -3
- package/dist/fields/tree/index.d.ts +3 -1
- package/dist/fields/tree/index.js +2 -2
- package/dist/fields/types.d.ts +11 -5
- package/dist/panel/components/fields/FieldsPreview.svelte +4 -5
- package/dist/panel/components/fields/Hint.svelte +5 -4
- package/dist/panel/components/fields/Hint.svelte.d.ts +3 -2
- package/dist/panel/components/fields/Label.svelte +6 -11
- package/dist/panel/components/fields/Label.svelte.d.ts +3 -2
- package/dist/panel/components/fields/LabelFor.svelte +4 -4
- package/dist/panel/components/fields/LabelFor.svelte.d.ts +2 -1
- package/dist/panel/components/fields/RenderFields.svelte +11 -16
- package/dist/panel/components/fields/{root.svelte.d.ts → fieldset.svelte.d.ts} +1 -1
- package/dist/panel/components/fields/{root.svelte.js → fieldset.svelte.js} +1 -1
- package/dist/panel/components/fields/index.d.ts +5 -5
- package/dist/panel/components/fields/index.js +2 -2
- package/dist/panel/components/sections/document/AuthFooter.svelte +2 -7
- package/dist/panel/components/sections/live/LiveEditPanel.svelte +2 -2
- package/dist/panel/context/collection.svelte.js +9 -9
- package/dist/panel/context/documentForm.svelte.d.ts +8 -21
- package/dist/panel/context/documentForm.svelte.js +45 -52
- package/dist/panel/context/form.svelte.d.ts +4 -3
- package/dist/panel/context/form.svelte.js +14 -16
- package/dist/panel/pages/auth/fields.d.ts +4 -4
- package/dist/panel/pages/auth/fields.js +6 -22
- package/dist/panel/pages/auth/reset-password/ResetPassword.svelte +3 -10
- package/dist/util/doc.js +15 -17
- package/package.json +3 -2
- package/dist/fields/relation/index.server.d.ts +0 -4
- 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 {
|
|
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:
|
|
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.
|
|
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 {
|
|
2
|
+
import type { BlocksBuilder } from '../index.js';
|
|
3
3
|
type AddBlock = (options: Omit<GenericBlock, 'id' | 'path'>) => void;
|
|
4
4
|
type Props = {
|
|
5
|
-
config:
|
|
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:
|
|
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.
|
|
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 {
|
|
2
|
+
import type { BlocksBuilder } from '../index.js';
|
|
3
3
|
export type BlocksProps = {
|
|
4
4
|
path: string;
|
|
5
|
-
config:
|
|
5
|
+
config: BlocksBuilder;
|
|
6
6
|
form: DocumentFormContext;
|
|
7
7
|
};
|
|
@@ -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.
|
|
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.
|
|
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
|
|
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.
|
|
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:
|
|
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 {
|
|
2
|
+
import type { CheckboxFieldBuilder } from '../index.js';
|
|
3
3
|
export type CheckboxProps = {
|
|
4
4
|
path: string;
|
|
5
|
-
config:
|
|
5
|
+
config: CheckboxFieldBuilder;
|
|
6
6
|
form: DocumentFormContext;
|
|
7
7
|
};
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type {
|
|
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.
|
|
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 {
|
|
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:
|
|
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 {
|
|
2
|
+
import type { ComboBoxFieldBuilder } from '../index.js';
|
|
3
3
|
export type ComboBoxProps = {
|
|
4
4
|
path: string;
|
|
5
|
-
config:
|
|
5
|
+
config: ComboBoxFieldBuilder;
|
|
6
6
|
form: DocumentFormContext;
|
|
7
7
|
};
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type {
|
|
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.
|
|
12
|
-
return `${field.
|
|
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:
|
|
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 {
|
|
11
|
+
import type { DateFieldBuilder } from '../index.js';
|
|
12
12
|
|
|
13
|
-
type Props = { path: string; config:
|
|
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:
|
|
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 {
|
|
2
|
+
import type { DateFieldBuilder } from '../index.js';
|
|
3
3
|
type Props = {
|
|
4
4
|
path: string;
|
|
5
|
-
config:
|
|
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:
|
|
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
|
/****************************************************/
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type {
|
|
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.
|
|
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:
|
|
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 ||
|
|
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 {
|
|
3
|
+
import type { EmailFieldBuilder } from '../index.js';
|
|
5
4
|
export interface EmailFieldProps {
|
|
6
5
|
path?: string;
|
|
7
|
-
config:
|
|
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 {
|
|
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:
|
|
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.
|
|
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 {
|
|
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:
|
|
6
|
+
config: GroupFieldBuilder;
|
|
7
7
|
form: DocumentFormContext<GenericDoc>;
|
|
8
8
|
};
|
|
9
9
|
declare const Group: import("svelte").Component<Props, {}, "">;
|