tinacms 0.0.0-f608f48-20250617065117 → 0.0.0-f717193-20251205011605
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/__vite-browser-external-d06ac358.js +4 -0
- package/dist/admin/api.d.ts +4 -1
- package/dist/auth/AuthModal.d.ts +1 -4
- package/dist/auth/TinaCloudProvider.d.ts +0 -1
- package/dist/client.js +131 -185
- package/dist/index.js +119877 -118215
- package/dist/internalClient/index.d.ts +26 -1
- package/dist/{node-cache-5e8db9f0.mjs → node-cache-c9558e1e.js} +5 -5
- package/dist/react.d.ts +13 -6
- package/dist/react.js +209 -204
- package/dist/rich-text/index.d.ts +6 -0
- package/dist/rich-text/index.js +234 -230
- package/dist/rich-text/prism.js +16 -18
- package/dist/rich-text/static.d.ts +154 -0
- package/dist/rich-text/{index.mjs → static.js} +90 -96
- package/dist/tina-cms.d.ts +1 -1
- package/dist/toolkit/components/ProgressBar.d.ts +11 -0
- package/dist/toolkit/components/media/media-item.d.ts +10 -0
- package/dist/toolkit/components/ui/button.d.ts +11 -0
- package/dist/toolkit/components/ui/calendar.d.ts +8 -0
- package/dist/toolkit/components/ui/date-time-picker.d.ts +111 -0
- package/dist/toolkit/components/ui/input.d.ts +3 -0
- package/dist/toolkit/components/ui/popover.d.ts +7 -0
- package/dist/toolkit/components/ui/select.d.ts +13 -0
- package/dist/toolkit/fields/components/color-picker/block-widget.d.ts +3 -0
- package/dist/toolkit/fields/components/color-picker/color-input.d.ts +35 -0
- package/dist/toolkit/fields/components/color-picker/color-picker.d.ts +6 -2
- package/dist/toolkit/fields/components/color-picker/color-utils.d.ts +37 -0
- package/dist/toolkit/fields/components/color-picker/sketch-widget.d.ts +3 -0
- package/dist/toolkit/fields/components/select.d.ts +1 -1
- package/dist/toolkit/fields/plugins/button-toggle-field-plugin.d.ts +2 -2
- package/dist/toolkit/fields/plugins/checkbox-group-field-plugin.d.ts +2 -2
- package/dist/toolkit/fields/plugins/color-field-plugin.d.ts +1 -0
- package/dist/toolkit/fields/plugins/date-field-plugin.d.ts +0 -2
- package/dist/toolkit/fields/plugins/dnd-kit-wrapper.d.ts +49 -0
- package/dist/toolkit/fields/plugins/group-list-field-plugin.d.ts +3 -1
- package/dist/toolkit/fields/plugins/list-field-plugin.d.ts +3 -0
- package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/editor.d.ts +2 -2
- package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/blockquote-element.d.ts +1 -1
- package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/button.d.ts +2 -2
- package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/code-block/code-block-element.d.ts +1 -1
- package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/code-line-element.d.ts +1 -1
- package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/command.d.ts +7 -7
- package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/list-element.d.ts +2 -2
- package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/paragraph-element.d.ts +1 -1
- package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/slash-input-element.d.ts +1 -1
- package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/table/table-cell-element.d.ts +2 -2
- package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/table/table-element.d.ts +1 -1
- package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/table/table-row-element.d.ts +1 -1
- package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/use-floating-toolbar-hook.d.ts +1 -1
- package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/plugins/ui/components.d.ts +18 -18
- package/dist/toolkit/fields/plugins/radio-group-field-plugin.d.ts +2 -2
- package/dist/toolkit/fields/plugins/select-field-plugin.d.ts +2 -2
- package/dist/toolkit/fields/plugins/toggle-field-plugin.d.ts +2 -2
- package/dist/toolkit/form-builder/create-branch-modal.d.ts +13 -0
- package/dist/toolkit/form-builder/editorial-workflow-constants.d.ts +17 -0
- package/dist/toolkit/form-builder/form-builder.d.ts +0 -11
- package/dist/toolkit/form-builder/index.d.ts +1 -0
- package/dist/toolkit/forms/form.d.ts +18 -0
- package/dist/toolkit/icons/TinaExtended.d.ts +4 -0
- package/dist/toolkit/icons/index.d.ts +1 -0
- package/dist/toolkit/index.d.ts +1 -1
- package/dist/toolkit/plugin-branch-switcher/branch-button.d.ts +3 -1
- package/dist/toolkit/react-modals/modal/modal-actions.d.ts +2 -1
- package/dist/toolkit/react-modals/modal/modal-header.d.ts +1 -1
- package/dist/toolkit/react-sidebar/components/NavMenuTrigger.d.ts +11 -0
- package/dist/toolkit/react-sidebar/components/VersionInfo.d.ts +2 -0
- package/dist/toolkit/react-sidebar/components/badge.d.ts +6 -0
- package/dist/toolkit/react-sidebar/components/callout.d.ts +5 -0
- package/dist/toolkit/react-sidebar/components/form-list.d.ts +1 -1
- package/dist/toolkit/react-sidebar/components/local-warning.d.ts +3 -1
- package/dist/toolkit/react-sidebar/components/nav-components.d.ts +11 -0
- package/dist/toolkit/react-sidebar/components/nav-context.d.ts +15 -0
- package/dist/toolkit/react-sidebar/components/nav.d.ts +3 -2
- package/dist/toolkit/react-sidebar/index.d.ts +3 -0
- package/dist/toolkit/styles/button.d.ts +1 -1
- package/dist/toolkit/styles/dropdown-button.d.ts +75 -0
- package/dist/toolkit/styles/index.d.ts +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/package.json +29 -50
- package/dist/admin/pages/IndexingPage.d.ts +0 -2
- package/dist/client.mjs +0 -132
- package/dist/index.mjs +0 -121688
- package/dist/react.mjs +0 -246
- package/dist/rich-text/prism.mjs +0 -16
- package/dist/toolkit/react-datetime/DateTime.d.ts +0 -135
- package/dist/toolkit/react-sidebar/components/alert.d.ts +0 -5
- /package/dist/admin/components/{Sidebar.d.ts → AdminNav.d.ts} +0 -0
|
@@ -2,7 +2,7 @@ import { BranchData, EventBus } from '@tinacms/toolkit';
|
|
|
2
2
|
import { DocumentNode, GraphQLSchema } from 'graphql';
|
|
3
3
|
import { TokenObject } from '../auth/authenticate';
|
|
4
4
|
import { AuthProvider, Schema, TinaSchema } from '@tinacms/schema-tools';
|
|
5
|
-
import { SearchClient } from '@tinacms/search/
|
|
5
|
+
import { SearchClient } from '@tinacms/search/index-client';
|
|
6
6
|
import gql from 'graphql-tag';
|
|
7
7
|
import { TinaCloudProject } from './types';
|
|
8
8
|
export * from './authProvider';
|
|
@@ -141,6 +141,26 @@ export declare class Client {
|
|
|
141
141
|
}[]>;
|
|
142
142
|
usingProtectedBranch(): boolean;
|
|
143
143
|
createBranch({ baseBranch, branchName }: BranchData): Promise<string>;
|
|
144
|
+
getLatestVersion(): Promise<LatestVersionResponse>;
|
|
145
|
+
/**
|
|
146
|
+
* Initiate and poll for the results of an editorial workflow operation
|
|
147
|
+
*
|
|
148
|
+
* @param options Editorial workflow options
|
|
149
|
+
* @returns Object with branch and PR info when complete
|
|
150
|
+
*/
|
|
151
|
+
executeEditorialWorkflow(options: {
|
|
152
|
+
branchName: string;
|
|
153
|
+
baseBranch: string;
|
|
154
|
+
prTitle?: string;
|
|
155
|
+
graphQLContentOp?: {
|
|
156
|
+
query: string;
|
|
157
|
+
variables: Record<string, unknown>;
|
|
158
|
+
};
|
|
159
|
+
onStatusUpdate?: (status: {
|
|
160
|
+
status: string;
|
|
161
|
+
message?: string;
|
|
162
|
+
}) => void;
|
|
163
|
+
}): Promise<any>;
|
|
144
164
|
}
|
|
145
165
|
export declare const DEFAULT_LOCAL_TINA_GQL_SERVER_URL = "http://localhost:4001/graphql";
|
|
146
166
|
export declare class LocalClient extends Client {
|
|
@@ -185,3 +205,8 @@ export declare class LocalSearchClient implements SearchClient {
|
|
|
185
205
|
put(docs: any[]): Promise<any>;
|
|
186
206
|
supportsClientSideIndexing(): boolean;
|
|
187
207
|
}
|
|
208
|
+
export type PackageVersionInfo = {
|
|
209
|
+
version: string;
|
|
210
|
+
publishedAt: string;
|
|
211
|
+
};
|
|
212
|
+
export type LatestVersionResponse = Record<string, PackageVersionInfo>;
|
|
@@ -14,15 +14,15 @@ const makeCacheDir = async (dir, fs, path, os) => {
|
|
|
14
14
|
return cacheDir;
|
|
15
15
|
};
|
|
16
16
|
const NodeCache = async (dir) => {
|
|
17
|
-
const fs =
|
|
18
|
-
const path =
|
|
19
|
-
const os =
|
|
20
|
-
const
|
|
17
|
+
const fs = await import("./__vite-browser-external-d06ac358.js");
|
|
18
|
+
const path = await import("./__vite-browser-external-d06ac358.js");
|
|
19
|
+
const os = await import("./__vite-browser-external-d06ac358.js");
|
|
20
|
+
const crypto = await import("./__vite-browser-external-d06ac358.js");
|
|
21
21
|
const cacheDir = await makeCacheDir(dir, fs, path, os);
|
|
22
22
|
return {
|
|
23
23
|
makeKey: (key) => {
|
|
24
24
|
const input = key && key instanceof Object ? JSON.stringify(key) : key || "";
|
|
25
|
-
return createHash("sha256").update(input).digest("hex");
|
|
25
|
+
return crypto.createHash("sha256").update(input).digest("hex");
|
|
26
26
|
},
|
|
27
27
|
get: async (key) => {
|
|
28
28
|
let readValue;
|
package/dist/react.d.ts
CHANGED
|
@@ -15,16 +15,23 @@ export declare function useEditState(): {
|
|
|
15
15
|
* to signal to Tina which DOM element the field
|
|
16
16
|
* is working with.
|
|
17
17
|
*/
|
|
18
|
-
|
|
18
|
+
/**
|
|
19
|
+
* Generate a field identifier for Tina to associate DOM elements with form fields.
|
|
20
|
+
* Format: "queryId---path.to.field" or "queryId---path.to.array.index"
|
|
21
|
+
*/
|
|
22
|
+
export declare const tinaField: <T extends {
|
|
19
23
|
_content_source?: {
|
|
20
24
|
queryId: string;
|
|
21
25
|
path: (number | string)[];
|
|
22
26
|
};
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
27
|
+
} | Record<string, unknown> | null | undefined>(object: T, property?: keyof Omit<NonNullable<T>, "__typename" | "_sys">, index?: number) => string;
|
|
28
|
+
/**
|
|
29
|
+
* FIX: This function is updated to be more robust. It explicitly checks for
|
|
30
|
+
* `null` and `String` objects to prevent them from being processed as
|
|
31
|
+
* iterable objects, which is the root cause of the "Objects are not valid
|
|
32
|
+
* as a React child" error.
|
|
33
|
+
*/
|
|
34
|
+
export declare const addMetadata: <T extends object>(id: string, obj: T, path?: (string | number)[]) => T;
|
|
28
35
|
/**
|
|
29
36
|
* This is a pretty rudimentary approach to hashing the query and variables to
|
|
30
37
|
* ensure we treat multiple queries on the page uniquely. It's possible
|
package/dist/react.js
CHANGED
|
@@ -1,67 +1,70 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
import React from "react";
|
|
2
|
+
function useTina(props) {
|
|
3
|
+
const stringifiedQuery = JSON.stringify({
|
|
4
|
+
query: props.query,
|
|
5
|
+
variables: props.variables
|
|
6
|
+
});
|
|
7
|
+
const id = React.useMemo(
|
|
8
|
+
() => hashFromQuery(stringifiedQuery),
|
|
9
|
+
[stringifiedQuery]
|
|
10
|
+
);
|
|
11
|
+
const processedData = React.useMemo(() => {
|
|
12
|
+
if (props.data) {
|
|
13
|
+
const dataCopy = JSON.parse(JSON.stringify(props.data));
|
|
14
|
+
return addMetadata(id, dataCopy, []);
|
|
15
|
+
}
|
|
16
|
+
}, [props.data, id]);
|
|
17
|
+
const [data, setData] = React.useState(processedData);
|
|
18
|
+
const [isClient, setIsClient] = React.useState(false);
|
|
19
|
+
const [quickEditEnabled, setQuickEditEnabled] = React.useState(false);
|
|
20
|
+
const [isInTinaIframe, setIsInTinaIframe] = React.useState(false);
|
|
21
|
+
React.useEffect(() => {
|
|
22
|
+
setIsClient(true);
|
|
23
|
+
setData(processedData);
|
|
24
|
+
parent.postMessage({
|
|
25
|
+
type: "url-changed"
|
|
9
26
|
});
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
if (quickEditEnabled) {
|
|
27
|
-
let mouseDownHandler = function(e) {
|
|
28
|
-
const attributeNames = e.target.getAttributeNames();
|
|
29
|
-
const tinaAttribute = attributeNames.find(
|
|
30
|
-
(name) => name.startsWith("data-tina-field")
|
|
27
|
+
}, [id, processedData]);
|
|
28
|
+
React.useEffect(() => {
|
|
29
|
+
if (quickEditEnabled) {
|
|
30
|
+
let mouseDownHandler = function(e) {
|
|
31
|
+
const attributeNames = e.target.getAttributeNames();
|
|
32
|
+
const tinaAttribute = attributeNames.find(
|
|
33
|
+
(name) => name.startsWith("data-tina-field")
|
|
34
|
+
);
|
|
35
|
+
let fieldName;
|
|
36
|
+
if (tinaAttribute) {
|
|
37
|
+
e.preventDefault();
|
|
38
|
+
e.stopPropagation();
|
|
39
|
+
fieldName = e.target.getAttribute(tinaAttribute);
|
|
40
|
+
} else {
|
|
41
|
+
const ancestor = e.target.closest(
|
|
42
|
+
"[data-tina-field], [data-tina-field-overlay]"
|
|
31
43
|
);
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
fieldName = e.target.getAttribute(tinaAttribute);
|
|
37
|
-
} else {
|
|
38
|
-
const ancestor = e.target.closest(
|
|
39
|
-
"[data-tina-field], [data-tina-field-overlay]"
|
|
44
|
+
if (ancestor) {
|
|
45
|
+
const attributeNames2 = ancestor.getAttributeNames();
|
|
46
|
+
const tinaAttribute2 = attributeNames2.find(
|
|
47
|
+
(name) => name.startsWith("data-tina-field")
|
|
40
48
|
);
|
|
41
|
-
if (
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
);
|
|
46
|
-
if (tinaAttribute2) {
|
|
47
|
-
e.preventDefault();
|
|
48
|
-
e.stopPropagation();
|
|
49
|
-
fieldName = ancestor.getAttribute(tinaAttribute2);
|
|
50
|
-
}
|
|
49
|
+
if (tinaAttribute2) {
|
|
50
|
+
e.preventDefault();
|
|
51
|
+
e.stopPropagation();
|
|
52
|
+
fieldName = ancestor.getAttribute(tinaAttribute2);
|
|
51
53
|
}
|
|
52
54
|
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
55
|
+
}
|
|
56
|
+
if (fieldName) {
|
|
57
|
+
if (isInTinaIframe) {
|
|
58
|
+
parent.postMessage(
|
|
59
|
+
{ type: "field:selected", fieldName },
|
|
60
|
+
window.location.origin
|
|
61
|
+
);
|
|
60
62
|
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
const style = document.createElement("style");
|
|
66
|
+
style.type = "text/css";
|
|
67
|
+
style.textContent = `
|
|
65
68
|
[data-tina-field] {
|
|
66
69
|
outline: 2px dashed rgba(34,150,254,0.5);
|
|
67
70
|
transition: box-shadow ease-out 150ms;
|
|
@@ -92,158 +95,160 @@
|
|
|
92
95
|
opacity: 1;
|
|
93
96
|
}
|
|
94
97
|
`;
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
return () => {
|
|
99
|
-
document.removeEventListener("click", mouseDownHandler, true);
|
|
100
|
-
document.body.classList.remove("__tina-quick-editing-enabled");
|
|
101
|
-
style.remove();
|
|
102
|
-
};
|
|
103
|
-
}
|
|
104
|
-
}, [quickEditEnabled, isInTinaIframe]);
|
|
105
|
-
React.useEffect(() => {
|
|
106
|
-
if (props == null ? void 0 : props.experimental___selectFormByFormId) {
|
|
107
|
-
parent.postMessage({
|
|
108
|
-
type: "user-select-form",
|
|
109
|
-
formId: props.experimental___selectFormByFormId()
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
}, [id]);
|
|
113
|
-
React.useEffect(() => {
|
|
114
|
-
const { experimental___selectFormByFormId, ...rest } = props;
|
|
115
|
-
parent.postMessage({ type: "open", ...rest, id }, window.location.origin);
|
|
116
|
-
window.addEventListener("message", (event) => {
|
|
117
|
-
if (event.data.type === "quickEditEnabled") {
|
|
118
|
-
setQuickEditEnabled(event.data.value);
|
|
119
|
-
}
|
|
120
|
-
if (event.data.id === id && event.data.type === "updateData") {
|
|
121
|
-
setData(event.data.data);
|
|
122
|
-
setIsInTinaIframe(true);
|
|
123
|
-
const anyTinaField = document.querySelector("[data-tina-field]");
|
|
124
|
-
if (anyTinaField) {
|
|
125
|
-
parent.postMessage(
|
|
126
|
-
{ type: "quick-edit", value: true },
|
|
127
|
-
window.location.origin
|
|
128
|
-
);
|
|
129
|
-
} else {
|
|
130
|
-
parent.postMessage(
|
|
131
|
-
{ type: "quick-edit", value: false },
|
|
132
|
-
window.location.origin
|
|
133
|
-
);
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
});
|
|
98
|
+
document.head.appendChild(style);
|
|
99
|
+
document.body.classList.add("__tina-quick-editing-enabled");
|
|
100
|
+
document.addEventListener("click", mouseDownHandler, true);
|
|
137
101
|
return () => {
|
|
138
|
-
|
|
102
|
+
document.removeEventListener("click", mouseDownHandler, true);
|
|
103
|
+
document.body.classList.remove("__tina-quick-editing-enabled");
|
|
104
|
+
style.remove();
|
|
139
105
|
};
|
|
140
|
-
}, [id, setQuickEditEnabled]);
|
|
141
|
-
return { data, isClient };
|
|
142
|
-
}
|
|
143
|
-
function useEditState() {
|
|
144
|
-
const [edit, setEdit] = React.useState(false);
|
|
145
|
-
React.useEffect(() => {
|
|
146
|
-
if (typeof window !== "undefined") {
|
|
147
|
-
parent.postMessage({ type: "isEditMode" }, window.location.origin);
|
|
148
|
-
window.addEventListener("message", (event) => {
|
|
149
|
-
var _a;
|
|
150
|
-
if (((_a = event.data) == null ? void 0 : _a.type) === "tina:editMode") {
|
|
151
|
-
setEdit(true);
|
|
152
|
-
}
|
|
153
|
-
});
|
|
154
|
-
}
|
|
155
|
-
}, []);
|
|
156
|
-
return { edit };
|
|
157
|
-
}
|
|
158
|
-
const tinaField = (object, property, index) => {
|
|
159
|
-
var _a, _b, _c;
|
|
160
|
-
if (!object) {
|
|
161
|
-
return "";
|
|
162
106
|
}
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
}
|
|
170
|
-
if (typeof index === "number") {
|
|
171
|
-
return [
|
|
172
|
-
(_b = object._content_source) == null ? void 0 : _b.queryId,
|
|
173
|
-
[...object._content_source.path, property, index].join(".")
|
|
174
|
-
].join("---");
|
|
175
|
-
}
|
|
176
|
-
return [
|
|
177
|
-
(_c = object._content_source) == null ? void 0 : _c.queryId,
|
|
178
|
-
[...object._content_source.path, property].join(".")
|
|
179
|
-
].join("---");
|
|
107
|
+
}, [quickEditEnabled, isInTinaIframe]);
|
|
108
|
+
React.useEffect(() => {
|
|
109
|
+
if (props == null ? void 0 : props.experimental___selectFormByFormId) {
|
|
110
|
+
parent.postMessage({
|
|
111
|
+
type: "user-select-form",
|
|
112
|
+
formId: props.experimental___selectFormByFormId()
|
|
113
|
+
});
|
|
180
114
|
}
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
115
|
+
}, [id]);
|
|
116
|
+
React.useEffect(() => {
|
|
117
|
+
const { experimental___selectFormByFormId, ...rest } = props;
|
|
118
|
+
parent.postMessage({ type: "open", ...rest, id }, window.location.origin);
|
|
119
|
+
const handleMessage = (event) => {
|
|
120
|
+
if (event.data.type === "quickEditEnabled") {
|
|
121
|
+
setQuickEditEnabled(event.data.value);
|
|
122
|
+
}
|
|
123
|
+
if (event.data.id === id && event.data.type === "updateData") {
|
|
124
|
+
const rawData = event.data.data;
|
|
125
|
+
const newlyProcessedData = addMetadata(
|
|
126
|
+
id,
|
|
127
|
+
JSON.parse(JSON.stringify(rawData)),
|
|
128
|
+
[]
|
|
129
|
+
);
|
|
130
|
+
setData(newlyProcessedData);
|
|
131
|
+
setIsInTinaIframe(true);
|
|
132
|
+
const anyTinaField = document.querySelector("[data-tina-field]");
|
|
133
|
+
if (anyTinaField) {
|
|
134
|
+
parent.postMessage(
|
|
135
|
+
{ type: "quick-edit", value: true },
|
|
136
|
+
window.location.origin
|
|
137
|
+
);
|
|
138
|
+
} else {
|
|
139
|
+
parent.postMessage(
|
|
140
|
+
{ type: "quick-edit", value: false },
|
|
141
|
+
window.location.origin
|
|
142
|
+
);
|
|
199
143
|
}
|
|
200
|
-
const itemObject = value;
|
|
201
|
-
addMetadata(id, itemObject, [...path, key]);
|
|
202
144
|
}
|
|
203
|
-
});
|
|
204
|
-
if ((object == null ? void 0 : object.type) === "root") {
|
|
205
|
-
return;
|
|
206
|
-
}
|
|
207
|
-
object._content_source = {
|
|
208
|
-
queryId: id,
|
|
209
|
-
path
|
|
210
145
|
};
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
146
|
+
window.addEventListener("message", handleMessage);
|
|
147
|
+
return () => {
|
|
148
|
+
window.removeEventListener("message", handleMessage);
|
|
149
|
+
parent.postMessage({ type: "close", id }, window.location.origin);
|
|
150
|
+
};
|
|
151
|
+
}, [id, setQuickEditEnabled]);
|
|
152
|
+
return { data, isClient };
|
|
153
|
+
}
|
|
154
|
+
function useEditState() {
|
|
155
|
+
const [edit, setEdit] = React.useState(false);
|
|
156
|
+
React.useEffect(() => {
|
|
157
|
+
if (typeof window !== "undefined") {
|
|
158
|
+
parent.postMessage({ type: "isEditMode" }, window.location.origin);
|
|
159
|
+
window.addEventListener("message", (event) => {
|
|
160
|
+
var _a;
|
|
161
|
+
if (((_a = event.data) == null ? void 0 : _a.type) === "tina:editMode") {
|
|
162
|
+
setEdit(true);
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
}, []);
|
|
167
|
+
return { edit };
|
|
168
|
+
}
|
|
169
|
+
const tinaField = (object, property, index) => {
|
|
170
|
+
const contentSource = object == null ? void 0 : object._content_source;
|
|
171
|
+
if (!contentSource) {
|
|
172
|
+
return "";
|
|
173
|
+
}
|
|
174
|
+
const { queryId, path } = contentSource;
|
|
175
|
+
if (!property) {
|
|
176
|
+
return `${queryId}---${path.join(".")}`;
|
|
177
|
+
}
|
|
178
|
+
const fullPath = typeof index === "number" ? [...path, property, index] : [...path, property];
|
|
179
|
+
return `${queryId}---${fullPath.join(".")}`;
|
|
180
|
+
};
|
|
181
|
+
const addMetadata = (id, obj, path = []) => {
|
|
182
|
+
if (obj === null) {
|
|
183
|
+
return obj;
|
|
184
|
+
}
|
|
185
|
+
if (isScalarOrUndefined(obj)) {
|
|
186
|
+
return obj;
|
|
232
187
|
}
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
188
|
+
if (obj instanceof String) {
|
|
189
|
+
return obj.valueOf();
|
|
190
|
+
}
|
|
191
|
+
if (Array.isArray(obj)) {
|
|
192
|
+
return obj.map(
|
|
193
|
+
(item, index) => addMetadata(id, item, [...path, index])
|
|
194
|
+
);
|
|
195
|
+
}
|
|
196
|
+
const transformedObj = {};
|
|
197
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
198
|
+
const currentPath = [...path, key];
|
|
199
|
+
if ([
|
|
200
|
+
"__typename",
|
|
201
|
+
"_sys",
|
|
202
|
+
"_internalSys",
|
|
203
|
+
"_values",
|
|
204
|
+
"_internalValues",
|
|
205
|
+
"_content_source",
|
|
206
|
+
"_tina_metadata"
|
|
207
|
+
].includes(key)) {
|
|
208
|
+
transformedObj[key] = value;
|
|
209
|
+
} else {
|
|
210
|
+
transformedObj[key] = addMetadata(id, value, currentPath);
|
|
238
211
|
}
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
return
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
212
|
+
}
|
|
213
|
+
if (transformedObj && typeof transformedObj === "object" && "type" in transformedObj && transformedObj.type === "root") {
|
|
214
|
+
return transformedObj;
|
|
215
|
+
}
|
|
216
|
+
return { ...transformedObj, _content_source: { queryId: id, path } };
|
|
217
|
+
};
|
|
218
|
+
function isScalarOrUndefined(value) {
|
|
219
|
+
const type = typeof value;
|
|
220
|
+
if (type === "string")
|
|
221
|
+
return true;
|
|
222
|
+
if (type === "number")
|
|
223
|
+
return true;
|
|
224
|
+
if (type === "boolean")
|
|
225
|
+
return true;
|
|
226
|
+
if (type === "undefined")
|
|
227
|
+
return true;
|
|
228
|
+
if (value == null)
|
|
229
|
+
return true;
|
|
230
|
+
if (value instanceof String)
|
|
231
|
+
return true;
|
|
232
|
+
if (value instanceof Number)
|
|
233
|
+
return true;
|
|
234
|
+
if (value instanceof Boolean)
|
|
235
|
+
return true;
|
|
236
|
+
return false;
|
|
237
|
+
}
|
|
238
|
+
const hashFromQuery = (input) => {
|
|
239
|
+
let hash = 0;
|
|
240
|
+
for (let i = 0; i < input.length; i++) {
|
|
241
|
+
const char = input.charCodeAt(i);
|
|
242
|
+
hash = (hash << 5) - hash + char & 4294967295;
|
|
243
|
+
}
|
|
244
|
+
const nonNegativeHash = Math.abs(hash);
|
|
245
|
+
const alphanumericHash = nonNegativeHash.toString(36);
|
|
246
|
+
return alphanumericHash;
|
|
247
|
+
};
|
|
248
|
+
export {
|
|
249
|
+
addMetadata,
|
|
250
|
+
hashFromQuery,
|
|
251
|
+
tinaField,
|
|
252
|
+
useEditState,
|
|
253
|
+
useTina
|
|
254
|
+
};
|
|
@@ -58,9 +58,15 @@ type BaseComponents = {
|
|
|
58
58
|
lic?: {
|
|
59
59
|
children: JSX.Element;
|
|
60
60
|
};
|
|
61
|
+
/**
|
|
62
|
+
* @deprecated Use `blockquote` instead. This was incorrectly named and will be removed in a future version.
|
|
63
|
+
*/
|
|
61
64
|
block_quote?: {
|
|
62
65
|
children: JSX.Element;
|
|
63
66
|
};
|
|
67
|
+
blockquote?: {
|
|
68
|
+
children: JSX.Element;
|
|
69
|
+
};
|
|
64
70
|
code_block?: {
|
|
65
71
|
lang?: string;
|
|
66
72
|
value: string;
|