rimecms 0.27.6 → 0.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapter-sqlite/{area.js → area.server.js} +2 -2
- package/dist/adapter-sqlite/{blocks.d.ts → blocks.server.d.ts} +1 -1
- package/dist/adapter-sqlite/{blocks.js → blocks.server.js} +1 -1
- package/dist/adapter-sqlite/{collection.js → collection.server.js} +17 -8
- package/dist/adapter-sqlite/generate-schema/write.server.js +2 -2
- package/dist/adapter-sqlite/index.server.d.ts +8 -8
- package/dist/adapter-sqlite/index.server.js +7 -7
- package/dist/adapter-sqlite/{orderBy.js → orderBy.server.js} +1 -1
- package/dist/adapter-sqlite/{relations.d.ts → relations.server.d.ts} +1 -1
- package/dist/adapter-sqlite/{relations.js → relations.server.js} +1 -1
- package/dist/adapter-sqlite/{transform.js → transform.server.js} +2 -3
- package/dist/adapter-sqlite/{tree.d.ts → tree.server.d.ts} +1 -1
- package/dist/adapter-sqlite/{tree.js → tree.server.js} +1 -1
- package/dist/adapter-sqlite/url.server.d.ts +1 -1
- package/dist/core/areas/local-api.server.d.ts +1 -1
- package/dist/core/areas/local-api.server.js +1 -0
- package/dist/core/collections/api/delete.server.js +1 -1
- package/dist/core/collections/api/get.server.js +1 -1
- package/dist/core/collections/api/getById.server.js +3 -1
- package/dist/core/collections/config/augment-panel.d.ts +13 -0
- package/dist/core/collections/config/augment-panel.js +19 -0
- package/dist/core/collections/config/augment-upload.server.d.ts +1 -0
- package/dist/core/collections/config/augment-upload.server.js +1 -0
- package/dist/core/collections/config/builder.js +3 -1
- package/dist/core/collections/config/builder.server.js +3 -1
- package/dist/core/collections/local-api.server.js +3 -1
- package/dist/core/collections/operations/findById.js +3 -1
- package/dist/core/collections/upload/hooks/convert-base64.server.js +1 -1
- package/dist/core/config/auth/better-auth.server.d.ts +3 -3
- package/dist/core/config/auth/better-auth.server.js +1 -1
- package/dist/core/config/client/augment-panel.d.ts +4 -4
- package/dist/core/config/client/build-config.d.ts +5 -5
- package/dist/core/config/server/augment-directories.server.js +3 -3
- package/dist/core/config/server/augment-staff.server.d.ts +1 -1
- package/dist/core/config/server/augment-staff.server.js +1 -1
- package/dist/core/config/server/build-config.server.d.ts +12 -12
- package/dist/core/config/server/build-config.server.js +1 -1
- package/dist/core/config/server/{validate.js → validate.server.js} +1 -1
- package/dist/core/config/server/{write.js → write.server.js} +1 -1
- package/dist/core/config/shared/augment-icons.d.ts +1 -2
- package/dist/core/config/shared/get-staff-collection.d.ts +1 -1
- package/dist/core/config/shared/upload-directories.js +1 -1
- package/dist/core/config/types.d.ts +20 -8
- package/dist/core/dev/cli/generate/{index.js → index.server.js} +2 -2
- package/dist/core/dev/cli/index.js +3 -3
- package/dist/core/dev/cli/init/{index.js → index.server.js} +68 -25
- package/dist/core/dev/cli/init/{packageManagerUtil.js → package-manager-util.server.js} +5 -5
- package/dist/core/dev/generate/routes/{area.d.ts → area.server.d.ts} +1 -1
- package/dist/core/dev/generate/routes/{area.js → area.server.js} +1 -1
- package/dist/core/dev/generate/routes/{collection.d.ts → collection.server.d.ts} +1 -1
- package/dist/core/dev/generate/routes/{collection.js → collection.server.js} +1 -1
- package/dist/core/dev/generate/routes/{common.d.ts → common.server.d.ts} +1 -1
- package/dist/core/dev/generate/routes/{common.js → common.server.js} +3 -3
- package/dist/core/dev/generate/routes/{index.js → index.server.js} +5 -5
- package/dist/core/dev/generate/routes/{util.js → util.server.js} +1 -1
- package/dist/core/dev/generate/types/{index.js → index.server.js} +1 -1
- package/dist/core/dev/vite/{index.js → index.server.js} +1 -1
- package/dist/core/fields/util.d.ts +13 -0
- package/dist/core/fields/util.js +77 -4
- package/dist/core/i18n/en/common.d.ts +1 -0
- package/dist/core/i18n/en/common.js +1 -0
- package/dist/core/i18n/fr/common.d.ts +1 -0
- package/dist/core/i18n/fr/common.js +1 -0
- package/dist/core/operations/hooks/before-read/populate-url.server.js +10 -2
- package/dist/core/operations/hooks/before-upsert/handle-new-version.server.js +2 -2
- package/dist/core/operations/relations/diff.server.d.ts +1 -1
- package/dist/core/operations/relations/extract.server.d.ts +1 -1
- package/dist/core/rime.server.d.ts +22 -8
- package/dist/core/rime.server.js +5 -5
- package/dist/fields/blocks/component/Block.svelte +13 -19
- package/dist/fields/blocks/component/Blocks.svelte +6 -13
- package/dist/fields/group/component/Group.svelte +6 -13
- package/dist/fields/number/component/number.css +2 -0
- package/dist/fields/relation/component/default/Default.svelte +1 -7
- package/dist/fields/relation/component/upload/upload.css +1 -10
- package/dist/fields/relation/index.d.ts +21 -6
- package/dist/fields/relation/index.js +41 -11
- package/dist/fields/rich-text/component/RichText.svelte +4 -4
- package/dist/fields/rich-text/component/bubble-menu/bubble-menu.svelte +6 -6
- package/dist/fields/rich-text/component/bubble-menu/bubble-menu.svelte.d.ts +2 -0
- package/dist/fields/rich-text/component/drag-handle/drag-handle.css +1 -0
- package/dist/fields/rich-text/component/styles/rich-text.css +0 -7
- package/dist/fields/rich-text/core/features/resource/resource.svelte +2 -9
- package/dist/fields/rich-text/core/features/upload/upload.svelte +5 -12
- package/dist/fields/rich-text/core/render-rich-text.svelte +5 -3
- package/dist/fields/rich-text/index.d.ts +1 -1
- package/dist/fields/select/component/Select.svelte +5 -11
- package/dist/fields/tabs/index.d.ts +1 -0
- package/dist/fields/tabs/index.js +3 -0
- package/dist/fields/textarea/component/TextArea.svelte +5 -13
- package/dist/fields/tree/component/TreeBlock.svelte +12 -18
- package/dist/fields/types.d.ts +3 -2
- package/dist/live.d.ts +2 -1
- package/dist/live.js +2 -1
- package/dist/panel/components/fields/Error.svelte +1 -7
- package/dist/panel/components/sections/collection/Empty.svelte +1 -0
- package/dist/panel/components/sections/collection/folder/Folder.svelte +7 -16
- package/dist/panel/components/sections/collection/folder/FolderWithActions.svelte +1 -1
- package/dist/panel/components/sections/collection/grid/CollectionGrid.svelte +22 -12
- package/dist/panel/components/sections/collection/grid/create-directory-dialog/CreateDirectoryDialog.svelte +4 -5
- package/dist/panel/components/sections/collection/grid/grid-item/GridItem.svelte +41 -33
- package/dist/panel/components/sections/collection/grid/grid-item/GridItem.svelte.d.ts +4 -0
- package/dist/panel/components/sections/collection/header/ButtonCreate.svelte +14 -16
- package/dist/panel/components/sections/collection/header/ButtonCreate.svelte.d.ts +2 -0
- package/dist/panel/components/sections/collection/header/DisplayMode.svelte +10 -10
- package/dist/panel/components/sections/collection/header/SearchInput.svelte +2 -8
- package/dist/panel/components/sections/collection/list/CollectionList.svelte +32 -3
- package/dist/panel/components/sections/collection/list/header/Header.svelte +3 -9
- package/dist/panel/components/sections/collection/list/row/Row.svelte +34 -24
- package/dist/panel/components/sections/collection/list/row/Row.svelte.d.ts +9 -0
- package/dist/panel/components/sections/collection/upload-thumb-cell/UploadThumbCell.svelte +11 -1
- package/dist/panel/components/sections/document/ButtonStatus.svelte +3 -11
- package/dist/panel/components/sections/document/Document.svelte +22 -41
- package/dist/panel/components/sections/document/Document.svelte.d.ts +0 -1
- package/dist/panel/components/sections/document/upload-header/UploadHeader.svelte +11 -21
- package/dist/panel/components/sections/live/LiveEdit.svelte +114 -0
- package/dist/panel/components/sections/live/LiveEdit.svelte.d.ts +32 -0
- package/dist/panel/components/sections/live/LiveEditPanel.svelte +53 -0
- package/dist/panel/components/sections/live/LiveEditPanel.svelte.d.ts +11 -0
- package/dist/panel/components/sections/live/LiveFloatingUI.svelte +106 -0
- package/dist/panel/components/sections/live/LiveFloatingUI.svelte.d.ts +12 -0
- package/dist/panel/components/sections/live/Provider.svelte +4 -4
- package/dist/panel/components/sections/live/Provider.svelte.d.ts +5 -3
- package/dist/panel/components/sections/live/live-edit-panel.css +12 -0
- package/dist/panel/components/ui/breadcrumb/BreadCrumb.svelte +2 -9
- package/dist/panel/components/ui/button/button.svelte +35 -54
- package/dist/panel/components/ui/calendar/calendar.css +11 -0
- package/dist/panel/components/ui/card-document/card-document.svelte +21 -14
- package/dist/panel/components/ui/card-resource/card-resource.svelte +8 -14
- package/dist/panel/components/ui/checkbox/checkbox.svelte +1 -1
- package/dist/panel/components/ui/command/command-group.css +1 -0
- package/dist/panel/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +1 -7
- package/dist/panel/components/ui/input/input.svelte +13 -23
- package/dist/panel/components/ui/label/label.css +0 -1
- package/dist/panel/components/ui/nav/NavItemButton.svelte +2 -8
- package/dist/panel/components/ui/page-header/PageHeader.svelte +6 -13
- package/dist/panel/components/ui/radio-group/radio-group.css +2 -0
- package/dist/panel/components/ui/scroll-area/scroll-area.css +0 -4
- package/dist/panel/components/ui/sheet/sheet.css +0 -16
- package/dist/panel/components/ui/tabs/tabs.css +7 -0
- package/dist/panel/context/collection.svelte.d.ts +0 -4
- package/dist/panel/context/collection.svelte.js +0 -3
- package/dist/panel/context/documentForm.svelte.js +1 -0
- package/dist/panel/context/live.svelte.d.ts +8 -20
- package/dist/panel/context/live.svelte.js +65 -35
- package/dist/panel/context/livePanel.svelte.d.ts +11 -0
- package/dist/panel/context/livePanel.svelte.js +8 -0
- package/dist/panel/pages/auth/forgot-password/ForgotPassword.svelte +1 -7
- package/dist/panel/pages/collection/Collection.svelte +3 -1
- package/dist/panel/pages/dashboard/Dashboard.svelte +52 -28
- package/dist/panel/pages/dashboard/DashboardCollection.svelte +91 -0
- package/dist/panel/pages/dashboard/DashboardCollection.svelte.d.ts +9 -0
- package/dist/panel/pages/dashboard/load.server.js +30 -14
- package/dist/panel/pages/dashboard/types.d.ts +1 -0
- package/dist/panel/pages/live/Live.svelte +244 -67
- package/dist/panel/pages/live/Live.svelte.d.ts +9 -1
- package/dist/panel/pages/live/load.server.js +14 -1
- package/dist/panel/style/index.css +562 -8
- package/dist/panel/style/mixins/index.css +1 -3
- package/dist/panel/util/upload.d.ts +1 -1
- package/dist/util/object.js +3 -0
- package/package.json +12 -10
- package/dist/panel/components/sections/document/FloatingUI.svelte +0 -81
- package/dist/panel/components/sections/document/FloatingUI.svelte.d.ts +0 -8
- package/dist/panel/components/sections/live/SidePanel.svelte +0 -61
- package/dist/panel/components/sections/live/SidePanel.svelte.d.ts +0 -14
- package/dist/panel/components/sections/live/side-panel.css +0 -15
- /package/dist/adapter-sqlite/{area.d.ts → area.server.d.ts} +0 -0
- /package/dist/adapter-sqlite/{collection.d.ts → collection.server.d.ts} +0 -0
- /package/dist/adapter-sqlite/{orderBy.d.ts → orderBy.server.d.ts} +0 -0
- /package/dist/adapter-sqlite/{transform.d.ts → transform.server.d.ts} +0 -0
- /package/dist/adapter-sqlite/{types.d.ts → types.server.d.ts} +0 -0
- /package/dist/adapter-sqlite/{types.js → types.server.js} +0 -0
- /package/dist/adapter-sqlite/{util.d.ts → util.server.d.ts} +0 -0
- /package/dist/adapter-sqlite/{util.js → util.server.js} +0 -0
- /package/dist/adapter-sqlite/{where.d.ts → where.server.d.ts} +0 -0
- /package/dist/adapter-sqlite/{where.js → where.server.js} +0 -0
- /package/dist/adapter-sqlite/{with.d.ts → with.server.d.ts} +0 -0
- /package/dist/adapter-sqlite/{with.js → with.server.js} +0 -0
- /package/dist/core/collections/upload/util/{converter.d.ts → converter.server.d.ts} +0 -0
- /package/dist/core/collections/upload/util/{converter.js → converter.server.js} +0 -0
- /package/dist/core/config/auth/{better-auth-hooks.d.ts → better-auth-hooks.server.d.ts} +0 -0
- /package/dist/core/config/auth/{better-auth-hooks.js → better-auth-hooks.server.js} +0 -0
- /package/dist/core/config/server/{augment-cors.d.ts → augment-cors.server.d.ts} +0 -0
- /package/dist/core/config/server/{augment-cors.js → augment-cors.server.js} +0 -0
- /package/dist/core/config/server/{validate.d.ts → validate.server.d.ts} +0 -0
- /package/dist/core/config/server/{write.d.ts → write.server.d.ts} +0 -0
- /package/dist/core/dev/cache/{index.d.ts → index.server.d.ts} +0 -0
- /package/dist/core/dev/cache/{index.js → index.server.js} +0 -0
- /package/dist/core/dev/cli/clear/{index.d.ts → index.server.d.ts} +0 -0
- /package/dist/core/dev/cli/clear/{index.js → index.server.js} +0 -0
- /package/dist/core/dev/cli/generate/{index.d.ts → index.server.d.ts} +0 -0
- /package/dist/core/dev/cli/init/{getPackageName.d.ts → get-package-info.server.d.ts} +0 -0
- /package/dist/core/dev/cli/init/{getPackageName.js → get-package-info.server.js} +0 -0
- /package/dist/core/dev/cli/init/{index.d.ts → index.server.d.ts} +0 -0
- /package/dist/core/dev/cli/init/{packageManagerUtil.d.ts → package-manager-util.server.d.ts} +0 -0
- /package/dist/core/dev/generate/routes/{custom-css.d.ts → custom-css.server.d.ts} +0 -0
- /package/dist/core/dev/generate/routes/{custom-css.js → custom-css.server.js} +0 -0
- /package/dist/core/dev/generate/routes/{index.d.ts → index.server.d.ts} +0 -0
- /package/dist/core/dev/generate/routes/{util.d.ts → util.server.d.ts} +0 -0
- /package/dist/core/dev/generate/sanitize/{index.d.ts → index.server.d.ts} +0 -0
- /package/dist/core/dev/generate/sanitize/{index.js → index.server.js} +0 -0
- /package/dist/core/dev/generate/types/{index.d.ts → index.server.d.ts} +0 -0
- /package/dist/core/dev/vite/{index.d.ts → index.server.d.ts} +0 -0
|
@@ -58,6 +58,7 @@ declare namespace _default {
|
|
|
58
58
|
export let version_created: string;
|
|
59
59
|
export let versions_history: string;
|
|
60
60
|
export let versions: string;
|
|
61
|
+
export let view_all: string;
|
|
61
62
|
export let view_page: string;
|
|
62
63
|
export let view_site: string;
|
|
63
64
|
export let welcome: string;
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import { PARAMS } from '../../../constant.js';
|
|
1
2
|
import { logger } from '../../../logger/index.server.js';
|
|
2
3
|
import { getValueAtPath } from '../../../../util/object.js';
|
|
4
|
+
import validate from '../../../../util/validate.js';
|
|
3
5
|
import { Hooks } from '../index.server.js';
|
|
4
6
|
/**
|
|
5
7
|
* Hook to populate _children property on document from a nested collection
|
|
@@ -25,6 +27,11 @@ export const populateURL = Hooks.beforeRead(async (args) => {
|
|
|
25
27
|
logger.error(`Error while generating url of ${config.slug} with id: ${args.doc.id}, ${err.message}`);
|
|
26
28
|
return args;
|
|
27
29
|
}
|
|
30
|
+
const isValidURL = validate.url(url);
|
|
31
|
+
if (typeof isValidURL === 'string') {
|
|
32
|
+
logger.warn(`Invalid URL generated for ${config.slug} with id: ${args.doc.id}, url: ${url}`);
|
|
33
|
+
return args;
|
|
34
|
+
}
|
|
28
35
|
const match = url.match(/\[\.\.\.parent\.(\w+(?:\.\w+)*)\]/);
|
|
29
36
|
if (match) {
|
|
30
37
|
const fullMatch = match[0];
|
|
@@ -91,8 +98,9 @@ export const populateURL = Hooks.beforeRead(async (args) => {
|
|
|
91
98
|
}
|
|
92
99
|
// Add the live url if needed
|
|
93
100
|
if (config.live && event.locals.user && url) {
|
|
94
|
-
args.doc._live = `${process.env.PUBLIC_RIME_URL}/live?src=${url}&slug=${config.slug}&id=${args.doc.id}`;
|
|
95
|
-
args.doc._live +=
|
|
101
|
+
args.doc._live = `${process.env.PUBLIC_RIME_URL}/panel/live-edit?src=${url}&slug=${config.slug}&id=${args.doc.id}`;
|
|
102
|
+
args.doc._live += args.doc.versionId ? `&${PARAMS.VERSION_ID}=${args.doc.versionId}` : '';
|
|
103
|
+
args.doc._live += locale ? `&${PARAMS.LOCALE}=${locale}` : '';
|
|
96
104
|
}
|
|
97
105
|
}
|
|
98
106
|
return args;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { filePathToFile } from '../../../collections/upload/util/converter.js';
|
|
1
|
+
import { filePathToFile } from '../../../collections/upload/util/converter.server.js';
|
|
2
2
|
import { VersionOperations } from '../../../collections/versions/operations.js';
|
|
3
3
|
import { VERSIONS_STATUS } from '../../../constant.js';
|
|
4
4
|
import { RimeError } from '../../../errors/index.js';
|
|
@@ -84,7 +84,7 @@ async function prepareDataForNewVersion(args) {
|
|
|
84
84
|
original: originalDoc,
|
|
85
85
|
configMap: originalConfigMap,
|
|
86
86
|
ignore: ['status'],
|
|
87
|
-
mode: '
|
|
87
|
+
mode: 'all'
|
|
88
88
|
});
|
|
89
89
|
// Set default status to "draft" if no data.status
|
|
90
90
|
if (!data.status) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { BeforeOperationRelation } from '../../../adapter-sqlite/relations.js';
|
|
1
|
+
import type { BeforeOperationRelation } from '../../../adapter-sqlite/relations.server.js';
|
|
2
2
|
import type { Relation } from '../../../fields/relation/index.js';
|
|
3
3
|
export type RelationDiff = {
|
|
4
4
|
toAdd: BeforeOperationRelation[];
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { BeforeOperationRelation } from '../../../adapter-sqlite/relations.js';
|
|
1
|
+
import type { BeforeOperationRelation } from '../../../adapter-sqlite/relations.server.js';
|
|
2
2
|
import type { Dic } from '../../../util/types.js';
|
|
3
3
|
import type { ConfigMap } from '../configMap/types.js';
|
|
4
4
|
type Args = {
|
|
@@ -76,7 +76,14 @@ export declare function createRime<const C extends Config>(config: BuildConfig<C
|
|
|
76
76
|
appName: string;
|
|
77
77
|
baseURL: string;
|
|
78
78
|
trustedOrigins: string[];
|
|
79
|
-
isTrustedOrigin: (url: string, settings
|
|
79
|
+
isTrustedOrigin: (url: string, settings
|
|
80
|
+
/**
|
|
81
|
+
* Get a collection api
|
|
82
|
+
* @example
|
|
83
|
+
*
|
|
84
|
+
* rime.collection('pages').find({ query: 'where[isHome][equals]=true' })
|
|
85
|
+
*/
|
|
86
|
+
?: {
|
|
80
87
|
allowRelativePaths: boolean;
|
|
81
88
|
}) => boolean;
|
|
82
89
|
oauthConfig: {
|
|
@@ -1149,7 +1156,7 @@ export declare function createRime<const C extends Config>(config: BuildConfig<C
|
|
|
1149
1156
|
$Infer: {
|
|
1150
1157
|
body: {
|
|
1151
1158
|
userId: string;
|
|
1152
|
-
role: "user" | "
|
|
1159
|
+
role: "user" | "admin" | "staff" | ("user" | "admin" | "staff")[];
|
|
1153
1160
|
};
|
|
1154
1161
|
};
|
|
1155
1162
|
};
|
|
@@ -1229,7 +1236,7 @@ export declare function createRime<const C extends Config>(config: BuildConfig<C
|
|
|
1229
1236
|
email: string;
|
|
1230
1237
|
password?: string | undefined;
|
|
1231
1238
|
name: string;
|
|
1232
|
-
role?: "user" | "
|
|
1239
|
+
role?: "user" | "admin" | "staff" | ("user" | "admin" | "staff")[] | undefined;
|
|
1233
1240
|
data?: Record<string, any> | undefined;
|
|
1234
1241
|
};
|
|
1235
1242
|
};
|
|
@@ -1773,7 +1780,7 @@ export declare function createRime<const C extends Config>(config: BuildConfig<C
|
|
|
1773
1780
|
permission?: never | undefined;
|
|
1774
1781
|
}) & {
|
|
1775
1782
|
userId?: string | undefined;
|
|
1776
|
-
role?: "user" | "
|
|
1783
|
+
role?: "user" | "admin" | "staff" | undefined;
|
|
1777
1784
|
};
|
|
1778
1785
|
};
|
|
1779
1786
|
};
|
|
@@ -2082,7 +2089,14 @@ export declare function createRime<const C extends Config>(config: BuildConfig<C
|
|
|
2082
2089
|
appName: string;
|
|
2083
2090
|
baseURL: string;
|
|
2084
2091
|
trustedOrigins: string[];
|
|
2085
|
-
isTrustedOrigin: (url: string, settings
|
|
2092
|
+
isTrustedOrigin: (url: string, settings
|
|
2093
|
+
/**
|
|
2094
|
+
* Get a collection api
|
|
2095
|
+
* @example
|
|
2096
|
+
*
|
|
2097
|
+
* rime.collection('pages').find({ query: 'where[isHome][equals]=true' })
|
|
2098
|
+
*/
|
|
2099
|
+
?: {
|
|
2086
2100
|
allowRelativePaths: boolean;
|
|
2087
2101
|
}) => boolean;
|
|
2088
2102
|
oauthConfig: {
|
|
@@ -3155,7 +3169,7 @@ export declare function createRime<const C extends Config>(config: BuildConfig<C
|
|
|
3155
3169
|
$Infer: {
|
|
3156
3170
|
body: {
|
|
3157
3171
|
userId: string;
|
|
3158
|
-
role: "user" | "
|
|
3172
|
+
role: "user" | "admin" | "staff" | ("user" | "admin" | "staff")[];
|
|
3159
3173
|
};
|
|
3160
3174
|
};
|
|
3161
3175
|
};
|
|
@@ -3235,7 +3249,7 @@ export declare function createRime<const C extends Config>(config: BuildConfig<C
|
|
|
3235
3249
|
email: string;
|
|
3236
3250
|
password?: string | undefined;
|
|
3237
3251
|
name: string;
|
|
3238
|
-
role?: "user" | "
|
|
3252
|
+
role?: "user" | "admin" | "staff" | ("user" | "admin" | "staff")[] | undefined;
|
|
3239
3253
|
data?: Record<string, any> | undefined;
|
|
3240
3254
|
};
|
|
3241
3255
|
};
|
|
@@ -3779,7 +3793,7 @@ export declare function createRime<const C extends Config>(config: BuildConfig<C
|
|
|
3779
3793
|
permission?: never | undefined;
|
|
3780
3794
|
}) & {
|
|
3781
3795
|
userId?: string | undefined;
|
|
3782
|
-
role?: "user" | "
|
|
3796
|
+
role?: "user" | "admin" | "staff" | undefined;
|
|
3783
3797
|
};
|
|
3784
3798
|
};
|
|
3785
3799
|
};
|
package/dist/core/rime.server.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
// import type { Adapter } from '../adapter-sqlite/index.server.js';
|
|
2
2
|
import { dev } from '$app/environment';
|
|
3
|
-
import devCache from './dev/cache/index.js';
|
|
3
|
+
import devCache from './dev/cache/index.server.js';
|
|
4
4
|
import { betterAuth } from 'better-auth';
|
|
5
5
|
import { AreaAPI } from './areas/local-api.server.js';
|
|
6
6
|
import { CollectionAPI } from './collections/local-api.server.js';
|
|
7
7
|
import { getBaseAuthConfig } from './config/auth/better-auth.server.js';
|
|
8
8
|
import { createConfigContext } from './config/config-context.server.js';
|
|
9
|
-
import validate from './config/server/validate.js';
|
|
10
|
-
import writeMemo from './config/server/write.js';
|
|
11
|
-
import generateRoutes from './dev/generate/routes/index.js';
|
|
12
|
-
import generateTypes from './dev/generate/types/index.js';
|
|
9
|
+
import validate from './config/server/validate.server.js';
|
|
10
|
+
import writeMemo from './config/server/write.server.js';
|
|
11
|
+
import generateRoutes from './dev/generate/routes/index.server.js';
|
|
12
|
+
import generateTypes from './dev/generate/types/index.server.js';
|
|
13
13
|
import { RimeError } from './errors/index.js';
|
|
14
14
|
import i18n from './i18n/index.js';
|
|
15
15
|
import { registerTranslation } from './i18n/register.server.js';
|
|
@@ -91,33 +91,27 @@
|
|
|
91
91
|
</div>
|
|
92
92
|
</div>
|
|
93
93
|
|
|
94
|
-
<style
|
|
95
|
-
|
|
96
|
-
/* Font */
|
|
97
|
-
|
|
98
|
-
/**************************************/
|
|
99
|
-
|
|
100
|
-
.rz-block {
|
|
94
|
+
<style>.rz-block {
|
|
101
95
|
--rz-fields-padding: var(--rz-size-5);
|
|
102
96
|
position: relative;
|
|
103
97
|
border: var(--rz-border);
|
|
104
98
|
border-radius: var(--rz-radius-sm);
|
|
105
99
|
}
|
|
106
100
|
|
|
107
|
-
.rz-block__grip {
|
|
101
|
+
.rz-block__grip {
|
|
108
102
|
cursor: grab;
|
|
109
103
|
}
|
|
110
104
|
|
|
111
|
-
.rz-block:hover > :global(.rz-block__content > .rz-block__header > .rz-block-actions) {
|
|
105
|
+
.rz-block:hover > :global(.rz-block__content > .rz-block__header > .rz-block-actions) {
|
|
112
106
|
opacity: 1;
|
|
113
107
|
pointer-events: all;
|
|
114
108
|
}
|
|
115
109
|
|
|
116
|
-
.rz-block__content {
|
|
110
|
+
.rz-block__content {
|
|
117
111
|
background-color: var(--rz-collapse-fields-content-bg);
|
|
118
112
|
}
|
|
119
113
|
|
|
120
|
-
.rz-block__header {
|
|
114
|
+
.rz-block__header {
|
|
121
115
|
display: flex;
|
|
122
116
|
position: relative;
|
|
123
117
|
align-items: center;
|
|
@@ -129,14 +123,14 @@
|
|
|
129
123
|
background-color: hsl(var(--rz-row-bg));
|
|
130
124
|
}
|
|
131
125
|
|
|
132
|
-
.rz-block__title-button {
|
|
126
|
+
.rz-block__title-button {
|
|
133
127
|
flex: 1;
|
|
134
128
|
justify-content: flex-start;
|
|
135
129
|
flex-direction: row;
|
|
136
130
|
padding: var(--rz-size-3);
|
|
137
131
|
}
|
|
138
132
|
|
|
139
|
-
.rz-block__content--closed {
|
|
133
|
+
.rz-block__content--closed {
|
|
140
134
|
border-radius: var(--rz-radius-md);
|
|
141
135
|
.rz-block__header {
|
|
142
136
|
border-color: transparent;
|
|
@@ -157,7 +151,7 @@
|
|
|
157
151
|
}
|
|
158
152
|
}
|
|
159
153
|
|
|
160
|
-
.rz-block__title {
|
|
154
|
+
.rz-block__title {
|
|
161
155
|
display: flex;
|
|
162
156
|
height: var(--rz-size-6);
|
|
163
157
|
align-items: center;
|
|
@@ -167,25 +161,25 @@
|
|
|
167
161
|
font-size: var(--rz-text-xs);
|
|
168
162
|
}
|
|
169
163
|
|
|
170
|
-
.rz-block__heading {
|
|
164
|
+
.rz-block__heading {
|
|
171
165
|
font-variation-settings: 'wght' 500;
|
|
172
166
|
font-weight: 500;
|
|
173
167
|
}
|
|
174
168
|
|
|
175
|
-
.rz-block__fields {
|
|
169
|
+
.rz-block__fields {
|
|
176
170
|
flex: 1;
|
|
177
171
|
padding: var(--rz-size-6) 0;
|
|
178
172
|
}
|
|
179
173
|
|
|
180
|
-
.rz-block__fields--hidden {
|
|
174
|
+
.rz-block__fields--hidden {
|
|
181
175
|
display: none;
|
|
182
176
|
}
|
|
183
177
|
|
|
184
|
-
.rz-block[data-sorting='true'] .rz-block__grip {
|
|
178
|
+
.rz-block[data-sorting='true'] .rz-block__grip {
|
|
185
179
|
display: none;
|
|
186
180
|
}
|
|
187
181
|
|
|
188
|
-
:global(.rz-block-actions) {
|
|
182
|
+
:global(.rz-block-actions) {
|
|
189
183
|
position: absolute;
|
|
190
184
|
opacity: 0;
|
|
191
185
|
pointer-events: none;
|
|
@@ -131,30 +131,24 @@
|
|
|
131
131
|
</div>
|
|
132
132
|
</fieldset>
|
|
133
133
|
|
|
134
|
-
<style
|
|
135
|
-
|
|
136
|
-
/* Font */
|
|
137
|
-
|
|
138
|
-
/**************************************/
|
|
139
|
-
|
|
140
|
-
.rz-blocks__title {
|
|
134
|
+
<style>.rz-blocks__title {
|
|
141
135
|
font-variation-settings: 'wght' 500;
|
|
142
136
|
font-weight: 500;
|
|
143
137
|
}
|
|
144
138
|
|
|
145
|
-
sup {
|
|
139
|
+
sup {
|
|
146
140
|
font-size: var(--rz-text-2xs);
|
|
147
141
|
text-transform: uppercase;
|
|
148
142
|
}
|
|
149
143
|
|
|
150
|
-
.rz-blocks__actions {
|
|
144
|
+
.rz-blocks__actions {
|
|
151
145
|
/* translate: 0 calc(-1 * var(--rz-size-2)); */
|
|
152
146
|
display: flex;
|
|
153
147
|
align-items: end;
|
|
154
148
|
gap: var(--rz-size-2);
|
|
155
149
|
}
|
|
156
150
|
|
|
157
|
-
.rz-blocks__list {
|
|
151
|
+
.rz-blocks__list {
|
|
158
152
|
display: grid;
|
|
159
153
|
gap: var(--rz-size-4);
|
|
160
154
|
|
|
@@ -163,13 +157,12 @@ sup {
|
|
|
163
157
|
}
|
|
164
158
|
}
|
|
165
159
|
|
|
166
|
-
.rz-blocks__header {
|
|
160
|
+
.rz-blocks__header {
|
|
167
161
|
display: flex;
|
|
168
162
|
justify-content: space-between;
|
|
169
163
|
margin-bottom: var(--rz-size-4);
|
|
170
164
|
}
|
|
171
|
-
|
|
172
|
-
.rz-blocks__actions-bottom {
|
|
165
|
+
.rz-blocks__actions-bottom {
|
|
173
166
|
display: flex;
|
|
174
167
|
gap: var(--rz-size-3);
|
|
175
168
|
padding-right: var(--rz-size-3);
|
|
@@ -91,19 +91,13 @@
|
|
|
91
91
|
{/if}
|
|
92
92
|
</div>
|
|
93
93
|
|
|
94
|
-
<style
|
|
95
|
-
|
|
96
|
-
/* Font */
|
|
97
|
-
|
|
98
|
-
/**************************************/
|
|
99
|
-
|
|
100
|
-
:root {
|
|
94
|
+
<style>:root {
|
|
101
95
|
--rz-group-trigger-bg: hsl(var(--rz-row-bg));
|
|
102
96
|
--rz-group-preview-bg: light-dark(hsl(var(--rz-gray-16)), hsl(var(--rz-gray-3)));
|
|
103
97
|
--rz-group-content-bg: var(--rz-collapse-fields-content-bg);
|
|
104
98
|
}
|
|
105
99
|
|
|
106
|
-
.rz-group-field__wrapper {
|
|
100
|
+
.rz-group-field__wrapper {
|
|
107
101
|
border: var(--rz-border);
|
|
108
102
|
border-radius: var(--rz-radius-md);
|
|
109
103
|
background-color: var(--rz-group-trigger-bg);
|
|
@@ -114,18 +108,18 @@
|
|
|
114
108
|
}
|
|
115
109
|
}
|
|
116
110
|
|
|
117
|
-
.rz-group-field__wrapper--hidden {
|
|
111
|
+
.rz-group-field__wrapper--hidden {
|
|
118
112
|
display: none;
|
|
119
113
|
}
|
|
120
114
|
|
|
121
|
-
.rz-group-field__content {
|
|
115
|
+
.rz-group-field__content {
|
|
122
116
|
--rz-fields-padding: var(--rz-size-5);
|
|
123
117
|
padding-top: var(--rz-fields-padding);
|
|
124
118
|
padding-bottom: var(--rz-fields-padding);
|
|
125
119
|
background-color: var(--rz-group-content-bg);
|
|
126
120
|
}
|
|
127
121
|
|
|
128
|
-
.rz-group-field__trigger {
|
|
122
|
+
.rz-group-field__trigger {
|
|
129
123
|
display: flex;
|
|
130
124
|
align-items: center;
|
|
131
125
|
justify-content: space-between;
|
|
@@ -149,8 +143,7 @@
|
|
|
149
143
|
rotate: -180deg;
|
|
150
144
|
}
|
|
151
145
|
}
|
|
152
|
-
|
|
153
|
-
.rz-group-field__trigger--live {
|
|
146
|
+
.rz-group-field__trigger--live {
|
|
154
147
|
font-size: var(--rz-text-md);
|
|
155
148
|
}
|
|
156
149
|
</style>
|
|
@@ -76,6 +76,7 @@
|
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
/* Chrome, Safari, Edge, Opera */
|
|
79
|
+
|
|
79
80
|
.rz-number__input::-webkit-outer-spin-button,
|
|
80
81
|
.rz-number__input::-webkit-inner-spin-button {
|
|
81
82
|
-webkit-appearance: none;
|
|
@@ -83,6 +84,7 @@
|
|
|
83
84
|
}
|
|
84
85
|
|
|
85
86
|
/* Firefox */
|
|
87
|
+
|
|
86
88
|
.rz-number__input[type='number'] {
|
|
87
89
|
-webkit-appearance: textfield;
|
|
88
90
|
appearance: textfield;
|
|
@@ -24,11 +24,10 @@
|
|
|
24
24
|
flex-wrap: wrap;
|
|
25
25
|
gap: var(--rz-size-4);
|
|
26
26
|
}
|
|
27
|
-
|
|
28
27
|
.rz-relation-upload__list:not(.rz-relation-upload__list[data-many]) {
|
|
29
28
|
@container relation-upload-list (min-width: 285px) {
|
|
30
29
|
.rz-card-resource {
|
|
31
|
-
width: min(
|
|
30
|
+
width: min(310px, 100%);
|
|
32
31
|
.rz-card-resource__info {
|
|
33
32
|
display: block;
|
|
34
33
|
}
|
|
@@ -41,7 +40,6 @@
|
|
|
41
40
|
}
|
|
42
41
|
}
|
|
43
42
|
}
|
|
44
|
-
|
|
45
43
|
.rz-relation-upload__actions {
|
|
46
44
|
display: flex;
|
|
47
45
|
margin-top: var(--rz-size-3);
|
|
@@ -58,7 +56,6 @@
|
|
|
58
56
|
.rz-relation-upload__actions.rz-relation-upload__actions--list-empty {
|
|
59
57
|
margin-top: 0;
|
|
60
58
|
}
|
|
61
|
-
|
|
62
59
|
.rz-relation-upload__search {
|
|
63
60
|
height: var(--rz-size-10);
|
|
64
61
|
align-items: center;
|
|
@@ -67,30 +64,25 @@
|
|
|
67
64
|
border-bottom-left-radius: 0;
|
|
68
65
|
border-bottom-right-radius: 0;
|
|
69
66
|
}
|
|
70
|
-
|
|
71
67
|
.rz-relation-upload__command-list {
|
|
72
68
|
padding: var(--rz-size-2);
|
|
73
69
|
}
|
|
74
|
-
|
|
75
70
|
.rz-relation-upload__command-item[aria-selected='true'] {
|
|
76
71
|
/* background-color: hsl(var(--rz-gray-5)); */
|
|
77
72
|
background-color: var(--rz-popover-high-light-bg);
|
|
78
73
|
}
|
|
79
|
-
|
|
80
74
|
.rz-relation-upload__grid-item {
|
|
81
75
|
display: flex;
|
|
82
76
|
gap: var(--rz-size-4);
|
|
83
77
|
padding-left: var(--rz-size-1);
|
|
84
78
|
padding-right: var(--rz-size-1);
|
|
85
79
|
}
|
|
86
|
-
|
|
87
80
|
.rz-relation-upload__grid-thumbnail {
|
|
88
81
|
width: var(--rz-size-16);
|
|
89
82
|
height: var(--rz-size-16);
|
|
90
83
|
overflow: hidden;
|
|
91
84
|
border-radius: var(--rz-radius-lg);
|
|
92
85
|
}
|
|
93
|
-
|
|
94
86
|
.rz-relation-upload__grid-filename {
|
|
95
87
|
margin-top: var(--rz-size-2);
|
|
96
88
|
display: -webkit-box;
|
|
@@ -102,7 +94,6 @@
|
|
|
102
94
|
font-variation-settings: 'wght' 600;
|
|
103
95
|
font-weight: 600;
|
|
104
96
|
}
|
|
105
|
-
|
|
106
97
|
.rz-relation-upload__grid-filesize,
|
|
107
98
|
.rz-relation-upload__grid-mimetype {
|
|
108
99
|
text-align: left;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { FormFieldBuilder } from '../../core/fields/builders/form-field-builder.js';
|
|
2
2
|
import type { CollectionSlug, GenericDoc } from '../../core/types/doc.js';
|
|
3
|
-
import type { DefaultValueFn, Field, FieldHookShared, FormField } from '../types.js';
|
|
3
|
+
import type { DefaultValueFn, Field, FieldHookShared, FormField, RelationRef, RelationValue } from '../types.js';
|
|
4
4
|
import type { RegisterCollection } from '../../index.js';
|
|
5
5
|
import type { WithOptional } from '../../util/types';
|
|
6
6
|
export declare const ensureRelationExists: FieldHookShared;
|
|
@@ -38,6 +38,14 @@ export declare const isRelationField: (field: Field) => field is RelationField;
|
|
|
38
38
|
* isRelationResolved({ title: 'Home Page', _prototype: 'collection', _type: 'pages' });
|
|
39
39
|
*/
|
|
40
40
|
export declare const isRelationResolved: <T>(value: any) => value is T;
|
|
41
|
+
/**
|
|
42
|
+
* Checks if a relation value is a reference (contains only the relationTo and documentId).
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* // Returns true for a relation reference
|
|
46
|
+
* isRelationRef({ relationTo: 'pages', documentId: '123' });
|
|
47
|
+
*/
|
|
48
|
+
export declare const isRelationRef: (value: unknown) => value is RelationRef;
|
|
41
49
|
/**
|
|
42
50
|
* Checks if a relation value is unresolved (contains only reference information).
|
|
43
51
|
*
|
|
@@ -47,14 +55,21 @@ export declare const isRelationResolved: <T>(value: any) => value is T;
|
|
|
47
55
|
*/
|
|
48
56
|
export declare const isRelationUnresolved: (value: any) => value is Omit<Relation, "path" | "position" | "ownerId">;
|
|
49
57
|
/**
|
|
50
|
-
* Resolves a relation
|
|
51
|
-
*
|
|
58
|
+
* Resolves a relation reference to the actual document it points to.
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* // Resolves a relation reference to the actual document
|
|
62
|
+
* const doc = await resolveRelationRef({ relationTo: 'pages', documentId: '123' });
|
|
63
|
+
*/
|
|
64
|
+
export declare function resolveRelationRef<T>(item: T | RelationRef | string): Promise<T>;
|
|
65
|
+
/**
|
|
66
|
+
* Resolves a relation field value to the actual documents it points to.
|
|
52
67
|
*
|
|
53
68
|
* @example
|
|
54
|
-
* // Resolves a relation to
|
|
55
|
-
* const
|
|
69
|
+
* // Resolves a relation value to the actual documents
|
|
70
|
+
* const docs = await resolveRelation([{ relationTo: 'pages', documentId: '123' }]);
|
|
56
71
|
*/
|
|
57
|
-
export declare
|
|
72
|
+
export declare function resolveRelation<T>(value: RelationValue<T> | null | undefined): Promise<T[] | null | undefined>;
|
|
58
73
|
/****************************************************/
|
|
59
74
|
export type RelationField<Doc extends GenericDoc = GenericDoc> = FormField & {
|
|
60
75
|
type: 'relation';
|
|
@@ -102,6 +102,17 @@ export const isRelationField = (field) => field.type === 'relation';
|
|
|
102
102
|
export const isRelationResolved = (value) => {
|
|
103
103
|
return value && isObjectLiteral(value) && hasProps(['title', '_prototype', '_type'], value);
|
|
104
104
|
};
|
|
105
|
+
/**
|
|
106
|
+
* Checks if a relation value is a reference (contains only the relationTo and documentId).
|
|
107
|
+
*
|
|
108
|
+
* @example
|
|
109
|
+
* // Returns true for a relation reference
|
|
110
|
+
* isRelationRef({ relationTo: 'pages', documentId: '123' });
|
|
111
|
+
*/
|
|
112
|
+
export const isRelationRef = (value) => typeof value === 'object' &&
|
|
113
|
+
value !== null &&
|
|
114
|
+
typeof value.relationTo === 'string' &&
|
|
115
|
+
typeof value.documentId === 'string';
|
|
105
116
|
/**
|
|
106
117
|
* Checks if a relation value is unresolved (contains only reference information).
|
|
107
118
|
*
|
|
@@ -113,18 +124,37 @@ export const isRelationUnresolved = (value) => {
|
|
|
113
124
|
return value && isObjectLiteral(value) && hasProps(['relationTo', 'documentId'], value);
|
|
114
125
|
};
|
|
115
126
|
/**
|
|
116
|
-
* Resolves a relation
|
|
117
|
-
* If the relation is already resolved, returns it as is.
|
|
127
|
+
* Resolves a relation reference to the actual document it points to.
|
|
118
128
|
*
|
|
119
129
|
* @example
|
|
120
|
-
* // Resolves a relation to
|
|
121
|
-
* const
|
|
130
|
+
* // Resolves a relation reference to the actual document
|
|
131
|
+
* const doc = await resolveRelationRef({ relationTo: 'pages', documentId: '123' });
|
|
122
132
|
*/
|
|
123
|
-
export
|
|
124
|
-
if (
|
|
125
|
-
return
|
|
133
|
+
export async function resolveRelationRef(item) {
|
|
134
|
+
if (isRelationRef(item)) {
|
|
135
|
+
return fetch(`api/${item.relationTo}/${item.documentId}`)
|
|
136
|
+
.then((r) => r.json())
|
|
137
|
+
.then((r) => r.doc);
|
|
126
138
|
}
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
}
|
|
139
|
+
if (typeof item === 'string') {
|
|
140
|
+
throw new Error(`Cannot resolve relation from a bare id ("${item}") — missing "relationTo". ` +
|
|
141
|
+
`resolveRelationRef only works on populated docs or { relationTo, documentId } objects.`);
|
|
142
|
+
}
|
|
143
|
+
if (isRelationResolved(item)) {
|
|
144
|
+
return item;
|
|
145
|
+
}
|
|
146
|
+
throw new Error(`Unrecognized relation shape: ${JSON.stringify(item)}`);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Resolves a relation field value to the actual documents it points to.
|
|
150
|
+
*
|
|
151
|
+
* @example
|
|
152
|
+
* // Resolves a relation value to the actual documents
|
|
153
|
+
* const docs = await resolveRelation([{ relationTo: 'pages', documentId: '123' }]);
|
|
154
|
+
*/
|
|
155
|
+
export async function resolveRelation(value) {
|
|
156
|
+
if (value === null || value === undefined)
|
|
157
|
+
return value;
|
|
158
|
+
const items = Array.isArray(value) ? value : [value];
|
|
159
|
+
return Promise.all(items.map((item) => resolveRelationRef(item)));
|
|
160
|
+
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import { Field } from '../../../panel/components/fields/index.js';
|
|
3
3
|
import { root } from '../../../panel/components/fields/root.svelte.js';
|
|
4
|
+
import { random } from '../../../util/index.js';
|
|
4
5
|
import { Editor, type JSONContent } from '@tiptap/core';
|
|
5
6
|
import { onMount } from 'svelte';
|
|
6
7
|
import { buildEditorConfig } from '../core/build-editor-config.js';
|
|
@@ -22,10 +23,9 @@
|
|
|
22
23
|
let editor = $state<Editor>();
|
|
23
24
|
let features = $state<RichTextFeature[]>([]);
|
|
24
25
|
const field = $derived(form.useField<JSONContent>(path, config));
|
|
26
|
+
const instanceId = random.randomId(8);
|
|
25
27
|
|
|
26
|
-
|
|
27
|
-
setRichTextContext(path);
|
|
28
|
-
});
|
|
28
|
+
const ctx = setRichTextContext(instanceId);
|
|
29
29
|
|
|
30
30
|
const withSuggestion = $derived(hasSuggestion(config.features || defaultFeatures));
|
|
31
31
|
|
|
@@ -82,7 +82,7 @@
|
|
|
82
82
|
{/if}
|
|
83
83
|
|
|
84
84
|
{#key key}
|
|
85
|
-
<EditorBubbleMenu {features} {editor} {path} />
|
|
85
|
+
<EditorBubbleMenu {features} {editor} {path} context={ctx} />
|
|
86
86
|
{/key}
|
|
87
87
|
{/if}
|
|
88
88
|
</div>
|