tinacms 0.0.0-9db4961-20250328182422 → 0.0.0-9e33054-20250728033205

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. package/README.md +1 -1
  2. package/dist/admin/api.d.ts +3 -0
  3. package/dist/admin/components/Page.d.ts +3 -9
  4. package/dist/admin/components/Sidebar.d.ts +0 -3
  5. package/dist/admin/components/ui/tooltip.d.ts +7 -0
  6. package/dist/admin/pages/CollectionCreatePage.d.ts +1 -1
  7. package/dist/admin/pages/CollectionListPage.d.ts +2 -2
  8. package/dist/admin/pages/DashboardPage.d.ts +0 -3
  9. package/dist/admin/pages/ScreenPage.d.ts +0 -3
  10. package/dist/client.d.ts +4 -1
  11. package/dist/client.js +10 -1
  12. package/dist/client.mjs +10 -1
  13. package/dist/index.d.ts +61 -1
  14. package/dist/index.js +103020 -15500
  15. package/dist/index.mjs +102441 -14921
  16. package/dist/internalClient/index.d.ts +28 -3
  17. package/dist/react.d.ts +41 -1
  18. package/dist/react.js +60 -52
  19. package/dist/react.mjs +60 -52
  20. package/dist/rich-text/index.d.ts +142 -1
  21. package/dist/rich-text/index.js +10 -4
  22. package/dist/rich-text/index.mjs +10 -4
  23. package/dist/rich-text/prism.d.ts +10 -1
  24. package/dist/rich-text/prism.js +1 -1
  25. package/dist/rich-text/prism.mjs +1 -1
  26. package/dist/rich-text/static.d.ts +148 -0
  27. package/dist/rich-text/static.js +239 -0
  28. package/dist/rich-text/static.mjs +236 -0
  29. package/dist/toolkit/components/ProgressBar.d.ts +11 -0
  30. package/dist/toolkit/components/media/media-item.d.ts +1 -1
  31. package/dist/toolkit/components/media/media-manager.d.ts +1 -1
  32. package/dist/toolkit/components/ui/breadcrumb.d.ts +11 -0
  33. package/dist/toolkit/components/ui/dropdown-menu.d.ts +25 -0
  34. package/dist/toolkit/fields/components/password-field.d.ts +1 -1
  35. package/dist/toolkit/fields/components/reference/components/button.d.ts +2 -2
  36. package/dist/toolkit/fields/components/reference/components/command.d.ts +21 -33
  37. package/dist/toolkit/fields/components/reference/components/popover.d.ts +1 -1
  38. package/dist/toolkit/fields/components/reference/model/reference-link-props.d.ts +2 -0
  39. package/dist/toolkit/fields/components/select.d.ts +2 -2
  40. package/dist/toolkit/fields/components/text-field.d.ts +1 -1
  41. package/dist/toolkit/fields/plugins/group-field-plugin.d.ts +1 -1
  42. package/dist/toolkit/fields/plugins/list-field-meta.d.ts +1 -1
  43. package/dist/toolkit/fields/plugins/mdx-field-plugin/index.d.ts +2 -2
  44. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/editor.d.ts +20 -18
  45. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/blockquote-element.d.ts +14 -10
  46. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/button.d.ts +3 -3
  47. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/code-block/code-block-element.d.ts +17 -0
  48. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/code-block/error-message.d.ts +6 -0
  49. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/code-block-combobox.d.ts +6 -0
  50. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/code-block-toolbar-button.d.ts +6 -6
  51. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/code-leaf.d.ts +2 -11
  52. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/code-line-element.d.ts +14 -10
  53. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/code-syntax-leaf.d.ts +2 -11
  54. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/command.d.ts +112 -0
  55. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/dialog.d.ts +12 -0
  56. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/dropdown-menu.d.ts +10 -10
  57. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/floating-toolbar.d.ts +2 -2
  58. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/hr-element.d.ts +3 -0
  59. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/hr-toolbar-button.d.ts +18 -0
  60. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/icons.d.ts +2 -1
  61. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/image-toolbar-button.d.ts +6 -6
  62. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/indent-list-toolbar-button.d.ts +6 -19
  63. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/inline-combobox.d.ts +1 -1
  64. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/input.d.ts +3 -3
  65. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/link-element.d.ts +4 -11
  66. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/link-floating-toolbar.d.ts +4 -5
  67. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/link-toolbar-button.d.ts +4 -4
  68. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/list-element.d.ts +28 -11
  69. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/mermaid-element.d.ts +3 -10
  70. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/mermaid-toolbar-button.d.ts +6 -8
  71. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/paragraph-element.d.ts +15 -0
  72. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/popover.d.ts +7 -2
  73. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/quote-toolbar-button.d.ts +6 -6
  74. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/raw-markdown-toolbar-button.d.ts +6 -6
  75. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/resizable.d.ts +24 -21
  76. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/separator.d.ts +2 -2
  77. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/slash-input-element.d.ts +15 -11
  78. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/table/block-selection.d.ts +6 -0
  79. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/table/table-cell-element.d.ts +33 -0
  80. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/{table-dropdown-menu.d.ts → table/table-dropdown-menu.d.ts} +1 -0
  81. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/table/table-element.d.ts +20 -0
  82. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/table/table-row-element.d.ts +15 -0
  83. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/toolbar.d.ts +7 -7
  84. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/use-floating-toolbar-hook.d.ts +10 -0
  85. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/use-floating-toolbar-state.d.ts +22 -0
  86. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/hooks/use-create-editor.d.ts +6 -0
  87. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/plugins/core/autoformat/autoformat-block.d.ts +1 -1
  88. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/plugins/core/autoformat/autoformat-lists.d.ts +1 -1
  89. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/plugins/core/autoformat/autoformat-marks.d.ts +1 -1
  90. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/plugins/core/autoformat/autoformat-utils.d.ts +3 -5
  91. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/plugins/core/common.d.ts +11 -6
  92. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/plugins/core/formatting.d.ts +18 -2
  93. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/plugins/core/index.d.ts +0 -1
  94. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/plugins/create-html-block/index.d.ts +6 -0
  95. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/plugins/create-img-plugin/index.d.ts +2 -2
  96. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/plugins/create-invalid-markdown-plugin/index.d.ts +5 -5
  97. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/plugins/create-mdx-plugins/component.d.ts +7 -4
  98. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/plugins/create-mdx-plugins/index.d.ts +3 -5
  99. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/plugins/editor-plugins.d.ts +520 -0
  100. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/plugins/ui/components.d.ts +262 -207
  101. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/plugins/ui/floating-toolbar-plugin.d.ts +1 -0
  102. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/toolbar/toolbar-overrides.d.ts +1 -1
  103. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/transforms/is-url.d.ts +1 -2
  104. package/dist/toolkit/form-builder/editorial-workflow-constants.d.ts +17 -0
  105. package/dist/toolkit/form-builder/fields-builder.d.ts +1 -1
  106. package/dist/toolkit/form-builder/form-builder.d.ts +15 -5
  107. package/dist/toolkit/forms/field.d.ts +3 -0
  108. package/dist/toolkit/forms/form.d.ts +22 -3
  109. package/dist/toolkit/git-client/git-client.d.ts +25 -2
  110. package/dist/toolkit/git-client/git-file.d.ts +18 -0
  111. package/dist/toolkit/git-client/git-media-store.d.ts +13 -0
  112. package/dist/toolkit/git-client/use-git-file.d.ts +4 -0
  113. package/dist/toolkit/icons/Tina.d.ts +0 -5
  114. package/dist/toolkit/index.d.ts +1 -1
  115. package/dist/toolkit/plugin-branch-switcher/branch-button.d.ts +1 -0
  116. package/dist/toolkit/plugin-branch-switcher/branch-switcher-legacy.d.ts +1 -1
  117. package/dist/toolkit/plugin-branch-switcher/branch-switcher.d.ts +1 -1
  118. package/dist/toolkit/plugin-branch-switcher/index.d.ts +0 -1
  119. package/dist/toolkit/react-cloud-config/cloud-config-plugin.d.ts +3 -3
  120. package/dist/toolkit/react-sidebar/components/VersionInfo.d.ts +2 -0
  121. package/dist/toolkit/react-sidebar/components/alert.d.ts +5 -0
  122. package/dist/toolkit/react-sidebar/components/form-list.d.ts +1 -1
  123. package/dist/toolkit/react-sidebar/components/nav.d.ts +6 -3
  124. package/dist/toolkit/react-sidebar/components/resize-handle.d.ts +0 -5
  125. package/dist/toolkit/react-sidebar/components/sidebar-body.d.ts +3 -7
  126. package/dist/toolkit/react-sidebar/components/sidebar.d.ts +0 -7
  127. package/dist/toolkit/react-sidebar/components/sync-status.d.ts +5 -8
  128. package/dist/toolkit/react-sidebar/index.d.ts +1 -1
  129. package/dist/toolkit/styles/button.d.ts +2 -2
  130. package/dist/toolkit/tina-cms.d.ts +3 -3
  131. package/dist/toolkit/tina-state.d.ts +11 -0
  132. package/dist/unifiedClient/index.d.ts +1 -1
  133. package/dist/utils/cn.d.ts +2 -0
  134. package/package.json +40 -27
  135. package/dist/admin/pages/IndexingPage.d.ts +0 -2
  136. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/code-block-element.d.ts +0 -11
  137. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/table-cell-element.d.ts +0 -27
  138. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/table-element.d.ts +0 -14
  139. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/table-row-element.d.ts +0 -13
  140. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/plugins/core/with-correct-void-behavior.d.ts +0 -8
  141. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/plugins/create-code-block/index.d.ts +0 -3
  142. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/plugins/create-link-plugin/index.d.ts +0 -15
  143. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/plugins/custom/mermaid-plugin.d.ts +0 -2
  144. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/plugins/soft-break/create-soft-break-plugin.d.ts +0 -7
  145. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/plugins/soft-break/index.d.ts +0 -6
  146. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/plugins/soft-break/on-key-down-soft-break.d.ts +0 -5
  147. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/plugins/soft-break/types.d.ts +0 -11
  148. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/plugins/ui/code-block/index.d.ts +0 -11
  149. package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/transforms/insert-empty-block.d.ts +0 -2
  150. package/dist/toolkit/plugin-branch-switcher/branch-banner.d.ts +0 -2
@@ -1,10 +1,10 @@
1
- import { TokenObject } from '../auth/authenticate';
2
1
  import { BranchData, EventBus } from '@tinacms/toolkit';
3
2
  import { DocumentNode, GraphQLSchema } from 'graphql';
3
+ import { TokenObject } from '../auth/authenticate';
4
+ import { AuthProvider, Schema, TinaSchema } from '@tinacms/schema-tools';
5
+ import { SearchClient } from '@tinacms/search/dist/index-client';
4
6
  import gql from 'graphql-tag';
5
- import { TinaSchema, Schema, AuthProvider } from '@tinacms/schema-tools';
6
7
  import { TinaCloudProject } from './types';
7
- import { SearchClient } from '@tinacms/search/dist/index-client';
8
8
  export * from './authProvider';
9
9
  export type OnLoginFunc = (args: {
10
10
  token?: TokenObject;
@@ -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>;
package/dist/react.d.ts CHANGED
@@ -1 +1,41 @@
1
- export * from "../src/react"
1
+ export declare function useTina<T extends object>(props: {
2
+ query: string;
3
+ variables: object;
4
+ data: T;
5
+ experimental___selectFormByFormId?: () => string | false | undefined;
6
+ }): {
7
+ data: T;
8
+ isClient: boolean;
9
+ };
10
+ export declare function useEditState(): {
11
+ edit: boolean;
12
+ };
13
+ /**
14
+ * Grab the field name for the given attribute
15
+ * to signal to Tina which DOM element the field
16
+ * is working with.
17
+ */
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 {
23
+ _content_source?: {
24
+ queryId: string;
25
+ path: (number | string)[];
26
+ };
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;
35
+ /**
36
+ * This is a pretty rudimentary approach to hashing the query and variables to
37
+ * ensure we treat multiple queries on the page uniquely. It's possible
38
+ * that we would have collisions, and I'm not sure of the likeliness but seems
39
+ * like it'd be rare.
40
+ */
41
+ export declare const hashFromQuery: (input: string) => string;
package/dist/react.js CHANGED
@@ -11,17 +11,23 @@
11
11
  () => hashFromQuery(stringifiedQuery),
12
12
  [stringifiedQuery]
13
13
  );
14
- const [data, setData] = React.useState(props.data);
14
+ const processedData = React.useMemo(() => {
15
+ if (props.data) {
16
+ const dataCopy = JSON.parse(JSON.stringify(props.data));
17
+ return addMetadata(id, dataCopy, []);
18
+ }
19
+ }, [props.data, id]);
20
+ const [data, setData] = React.useState(processedData);
15
21
  const [isClient, setIsClient] = React.useState(false);
16
22
  const [quickEditEnabled, setQuickEditEnabled] = React.useState(false);
17
23
  const [isInTinaIframe, setIsInTinaIframe] = React.useState(false);
18
24
  React.useEffect(() => {
19
25
  setIsClient(true);
20
- setData(props.data);
26
+ setData(processedData);
21
27
  parent.postMessage({
22
28
  type: "url-changed"
23
29
  });
24
- }, [id]);
30
+ }, [id, processedData]);
25
31
  React.useEffect(() => {
26
32
  if (quickEditEnabled) {
27
33
  let mouseDownHandler = function(e) {
@@ -113,12 +119,18 @@
113
119
  React.useEffect(() => {
114
120
  const { experimental___selectFormByFormId, ...rest } = props;
115
121
  parent.postMessage({ type: "open", ...rest, id }, window.location.origin);
116
- window.addEventListener("message", (event) => {
122
+ const handleMessage = (event) => {
117
123
  if (event.data.type === "quickEditEnabled") {
118
124
  setQuickEditEnabled(event.data.value);
119
125
  }
120
126
  if (event.data.id === id && event.data.type === "updateData") {
121
- setData(event.data.data);
127
+ const rawData = event.data.data;
128
+ const newlyProcessedData = addMetadata(
129
+ id,
130
+ JSON.parse(JSON.stringify(rawData)),
131
+ []
132
+ );
133
+ setData(newlyProcessedData);
122
134
  setIsInTinaIframe(true);
123
135
  const anyTinaField = document.querySelector("[data-tina-field]");
124
136
  if (anyTinaField) {
@@ -133,8 +145,10 @@
133
145
  );
134
146
  }
135
147
  }
136
- });
148
+ };
149
+ window.addEventListener("message", handleMessage);
137
150
  return () => {
151
+ window.removeEventListener("message", handleMessage);
138
152
  parent.postMessage({ type: "close", id }, window.location.origin);
139
153
  };
140
154
  }, [id, setQuickEditEnabled]);
@@ -156,59 +170,53 @@
156
170
  return { edit };
157
171
  }
158
172
  const tinaField = (object, property, index) => {
159
- var _a, _b, _c;
160
- if (!object) {
173
+ const contentSource = object == null ? void 0 : object._content_source;
174
+ if (!contentSource) {
161
175
  return "";
162
176
  }
163
- if (object._content_source) {
164
- if (!property) {
165
- return [
166
- (_a = object._content_source) == null ? void 0 : _a.queryId,
167
- object._content_source.path.join(".")
168
- ].join("---");
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("---");
177
+ const { queryId, path } = contentSource;
178
+ if (!property) {
179
+ return `${queryId}---${path.join(".")}`;
180
180
  }
181
- return "";
181
+ const fullPath = typeof index === "number" ? [...path, property, index] : [...path, property];
182
+ return `${queryId}---${fullPath.join(".")}`;
182
183
  };
183
- const addMetadata = (id, object, path) => {
184
- Object.entries(object).forEach(([key, value]) => {
185
- if (Array.isArray(value)) {
186
- value.forEach((item, index) => {
187
- if (isScalarOrUndefined(item)) {
188
- return;
189
- }
190
- if (Array.isArray(item)) {
191
- return;
192
- }
193
- const itemObject = item;
194
- addMetadata(id, itemObject, [...path, key, index]);
195
- });
184
+ const addMetadata = (id, obj, path = []) => {
185
+ if (obj === null) {
186
+ return obj;
187
+ }
188
+ if (isScalarOrUndefined(obj)) {
189
+ return obj;
190
+ }
191
+ if (obj instanceof String) {
192
+ return obj.valueOf();
193
+ }
194
+ if (Array.isArray(obj)) {
195
+ return obj.map(
196
+ (item, index) => addMetadata(id, item, [...path, index])
197
+ );
198
+ }
199
+ const transformedObj = {};
200
+ for (const [key, value] of Object.entries(obj)) {
201
+ const currentPath = [...path, key];
202
+ if ([
203
+ "__typename",
204
+ "_sys",
205
+ "_internalSys",
206
+ "_values",
207
+ "_internalValues",
208
+ "_content_source",
209
+ "_tina_metadata"
210
+ ].includes(key)) {
211
+ transformedObj[key] = value;
196
212
  } else {
197
- if (isScalarOrUndefined(value)) {
198
- return;
199
- }
200
- const itemObject = value;
201
- addMetadata(id, itemObject, [...path, key]);
213
+ transformedObj[key] = addMetadata(id, value, currentPath);
202
214
  }
203
- });
204
- if ((object == null ? void 0 : object.type) === "root") {
205
- return;
206
215
  }
207
- object._content_source = {
208
- queryId: id,
209
- path
210
- };
211
- return object;
216
+ if (transformedObj && typeof transformedObj === "object" && "type" in transformedObj && transformedObj.type === "root") {
217
+ return transformedObj;
218
+ }
219
+ return { ...transformedObj, _content_source: { queryId: id, path } };
212
220
  };
213
221
  function isScalarOrUndefined(value) {
214
222
  const type = typeof value;
package/dist/react.mjs CHANGED
@@ -8,17 +8,23 @@ function useTina(props) {
8
8
  () => hashFromQuery(stringifiedQuery),
9
9
  [stringifiedQuery]
10
10
  );
11
- const [data, setData] = React.useState(props.data);
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);
12
18
  const [isClient, setIsClient] = React.useState(false);
13
19
  const [quickEditEnabled, setQuickEditEnabled] = React.useState(false);
14
20
  const [isInTinaIframe, setIsInTinaIframe] = React.useState(false);
15
21
  React.useEffect(() => {
16
22
  setIsClient(true);
17
- setData(props.data);
23
+ setData(processedData);
18
24
  parent.postMessage({
19
25
  type: "url-changed"
20
26
  });
21
- }, [id]);
27
+ }, [id, processedData]);
22
28
  React.useEffect(() => {
23
29
  if (quickEditEnabled) {
24
30
  let mouseDownHandler = function(e) {
@@ -110,12 +116,18 @@ function useTina(props) {
110
116
  React.useEffect(() => {
111
117
  const { experimental___selectFormByFormId, ...rest } = props;
112
118
  parent.postMessage({ type: "open", ...rest, id }, window.location.origin);
113
- window.addEventListener("message", (event) => {
119
+ const handleMessage = (event) => {
114
120
  if (event.data.type === "quickEditEnabled") {
115
121
  setQuickEditEnabled(event.data.value);
116
122
  }
117
123
  if (event.data.id === id && event.data.type === "updateData") {
118
- setData(event.data.data);
124
+ const rawData = event.data.data;
125
+ const newlyProcessedData = addMetadata(
126
+ id,
127
+ JSON.parse(JSON.stringify(rawData)),
128
+ []
129
+ );
130
+ setData(newlyProcessedData);
119
131
  setIsInTinaIframe(true);
120
132
  const anyTinaField = document.querySelector("[data-tina-field]");
121
133
  if (anyTinaField) {
@@ -130,8 +142,10 @@ function useTina(props) {
130
142
  );
131
143
  }
132
144
  }
133
- });
145
+ };
146
+ window.addEventListener("message", handleMessage);
134
147
  return () => {
148
+ window.removeEventListener("message", handleMessage);
135
149
  parent.postMessage({ type: "close", id }, window.location.origin);
136
150
  };
137
151
  }, [id, setQuickEditEnabled]);
@@ -153,59 +167,53 @@ function useEditState() {
153
167
  return { edit };
154
168
  }
155
169
  const tinaField = (object, property, index) => {
156
- var _a, _b, _c;
157
- if (!object) {
170
+ const contentSource = object == null ? void 0 : object._content_source;
171
+ if (!contentSource) {
158
172
  return "";
159
173
  }
160
- if (object._content_source) {
161
- if (!property) {
162
- return [
163
- (_a = object._content_source) == null ? void 0 : _a.queryId,
164
- object._content_source.path.join(".")
165
- ].join("---");
166
- }
167
- if (typeof index === "number") {
168
- return [
169
- (_b = object._content_source) == null ? void 0 : _b.queryId,
170
- [...object._content_source.path, property, index].join(".")
171
- ].join("---");
172
- }
173
- return [
174
- (_c = object._content_source) == null ? void 0 : _c.queryId,
175
- [...object._content_source.path, property].join(".")
176
- ].join("---");
174
+ const { queryId, path } = contentSource;
175
+ if (!property) {
176
+ return `${queryId}---${path.join(".")}`;
177
177
  }
178
- return "";
178
+ const fullPath = typeof index === "number" ? [...path, property, index] : [...path, property];
179
+ return `${queryId}---${fullPath.join(".")}`;
179
180
  };
180
- const addMetadata = (id, object, path) => {
181
- Object.entries(object).forEach(([key, value]) => {
182
- if (Array.isArray(value)) {
183
- value.forEach((item, index) => {
184
- if (isScalarOrUndefined(item)) {
185
- return;
186
- }
187
- if (Array.isArray(item)) {
188
- return;
189
- }
190
- const itemObject = item;
191
- addMetadata(id, itemObject, [...path, key, index]);
192
- });
181
+ const addMetadata = (id, obj, path = []) => {
182
+ if (obj === null) {
183
+ return obj;
184
+ }
185
+ if (isScalarOrUndefined(obj)) {
186
+ return obj;
187
+ }
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;
193
209
  } else {
194
- if (isScalarOrUndefined(value)) {
195
- return;
196
- }
197
- const itemObject = value;
198
- addMetadata(id, itemObject, [...path, key]);
210
+ transformedObj[key] = addMetadata(id, value, currentPath);
199
211
  }
200
- });
201
- if ((object == null ? void 0 : object.type) === "root") {
202
- return;
203
212
  }
204
- object._content_source = {
205
- queryId: id,
206
- path
207
- };
208
- return object;
213
+ if (transformedObj && typeof transformedObj === "object" && "type" in transformedObj && transformedObj.type === "root") {
214
+ return transformedObj;
215
+ }
216
+ return { ...transformedObj, _content_source: { queryId: id, path } };
209
217
  };
210
218
  function isScalarOrUndefined(value) {
211
219
  const type = typeof value;
@@ -1 +1,142 @@
1
- export * from "../../src/rich-text/index"
1
+ /**
2
+
3
+ */
4
+ import React from 'react';
5
+ type BaseComponents = {
6
+ h1?: {
7
+ children: JSX.Element;
8
+ };
9
+ h2?: {
10
+ children: JSX.Element;
11
+ };
12
+ h3?: {
13
+ children: JSX.Element;
14
+ };
15
+ h4?: {
16
+ children: JSX.Element;
17
+ };
18
+ h5?: {
19
+ children: JSX.Element;
20
+ };
21
+ h6?: {
22
+ children: JSX.Element;
23
+ };
24
+ p?: {
25
+ children: JSX.Element;
26
+ };
27
+ a?: {
28
+ url: string;
29
+ children: JSX.Element;
30
+ };
31
+ italic?: {
32
+ children: JSX.Element;
33
+ };
34
+ bold?: {
35
+ children: JSX.Element;
36
+ };
37
+ strikethrough?: {
38
+ children: JSX.Element;
39
+ };
40
+ underline?: {
41
+ children: JSX.Element;
42
+ };
43
+ code?: {
44
+ children: JSX.Element;
45
+ };
46
+ text?: {
47
+ children: string;
48
+ };
49
+ ul?: {
50
+ children: JSX.Element;
51
+ };
52
+ ol?: {
53
+ children: JSX.Element;
54
+ };
55
+ li?: {
56
+ children: JSX.Element;
57
+ };
58
+ lic?: {
59
+ children: JSX.Element;
60
+ };
61
+ block_quote?: {
62
+ children: JSX.Element;
63
+ };
64
+ code_block?: {
65
+ lang?: string;
66
+ value: string;
67
+ };
68
+ mermaid?: {
69
+ value: string;
70
+ };
71
+ img?: {
72
+ url: string;
73
+ caption?: string;
74
+ alt?: string;
75
+ };
76
+ hr?: {};
77
+ break?: {};
78
+ maybe_mdx?: {
79
+ children: JSX.Element;
80
+ };
81
+ html?: {
82
+ value: string;
83
+ };
84
+ html_inline?: {
85
+ value: string;
86
+ };
87
+ table?: {
88
+ align?: ('left' | 'right' | 'center')[];
89
+ tableRows: {
90
+ tableCells: {
91
+ value: TinaMarkdownContent;
92
+ }[];
93
+ }[];
94
+ };
95
+ component_missing?: {
96
+ name: string;
97
+ };
98
+ };
99
+ type BaseComponentSignature = {
100
+ [BK in keyof BaseComponents]: (props: BaseComponents[BK]) => JSX.Element;
101
+ };
102
+ /**
103
+ * Define the allowed components and their props
104
+ * ```ts
105
+ * const components:
106
+ * Components<{
107
+ * BlockQuote: {
108
+ * children: TinaMarkdownContent;
109
+ * authorName: string;
110
+ * };
111
+ * }> = {
112
+ * BlockQuote: (props: {
113
+ * children: TinaMarkdownContent;
114
+ * authorName: string;
115
+ * }) => {
116
+ * return (
117
+ * <div>
118
+ * <blockquote>
119
+ * <TinaMarkdown content={props.children} />
120
+ * {props.authorName}
121
+ * </blockquote>
122
+ * </div>
123
+ * );
124
+ * }
125
+ * }
126
+ * }
127
+ * ```
128
+ */
129
+ export type Components<ComponentAndProps extends object> = {
130
+ [K in keyof ComponentAndProps]: (props: ComponentAndProps[K]) => JSX.Element;
131
+ } & BaseComponentSignature;
132
+ export type TinaMarkdownContent = {
133
+ type: string;
134
+ children: TinaMarkdownContent[];
135
+ };
136
+ export declare const TinaMarkdown: <CustomComponents extends {
137
+ [key: string]: object;
138
+ } = any>({ content, components, }: {
139
+ content: TinaMarkdownContent | TinaMarkdownContent[];
140
+ components?: Components<{}> | Components<{ [BK in keyof CustomComponents]: (props: CustomComponents[BK]) => JSX.Element; }>;
141
+ }) => React.JSX.Element;
142
+ export {};
@@ -117,17 +117,23 @@
117
117
  // @ts-ignore FIXME: TinaMarkdownContent needs to be a union of all possible node types
118
118
  /* @__PURE__ */ React.createElement("a", { href: child.url }, /* @__PURE__ */ React.createElement(TinaMarkdown, { components, content: children }))
119
119
  );
120
- case "mermaid":
121
120
  case "code_block": {
122
- const value = child.value;
121
+ let codeString = "";
122
+ if (Array.isArray(child.children)) {
123
+ codeString = child.children.map(
124
+ (line) => Array.isArray(line.children) ? line.children.map((t) => t.text).join("") : ""
125
+ ).join("\n");
126
+ } else if (typeof child.value === "string") {
127
+ codeString = child.value;
128
+ }
123
129
  if (components[child.type]) {
124
130
  const Component2 = components[child.type];
125
131
  return (
126
132
  // @ts-ignore FIXME: TinaMarkdownContent needs to be a union of all possible node types
127
- /* @__PURE__ */ React.createElement(Component2, { ...props })
133
+ /* @__PURE__ */ React.createElement(Component2, { ...props, value: codeString })
128
134
  );
129
135
  }
130
- return /* @__PURE__ */ React.createElement("pre", null, /* @__PURE__ */ React.createElement("code", null, value));
136
+ return /* @__PURE__ */ React.createElement("pre", null, /* @__PURE__ */ React.createElement("code", null, codeString));
131
137
  }
132
138
  case "hr":
133
139
  if (components[child.type]) {
@@ -114,17 +114,23 @@ const Node = ({ components, child }) => {
114
114
  // @ts-ignore FIXME: TinaMarkdownContent needs to be a union of all possible node types
115
115
  /* @__PURE__ */ React.createElement("a", { href: child.url }, /* @__PURE__ */ React.createElement(TinaMarkdown, { components, content: children }))
116
116
  );
117
- case "mermaid":
118
117
  case "code_block": {
119
- const value = child.value;
118
+ let codeString = "";
119
+ if (Array.isArray(child.children)) {
120
+ codeString = child.children.map(
121
+ (line) => Array.isArray(line.children) ? line.children.map((t) => t.text).join("") : ""
122
+ ).join("\n");
123
+ } else if (typeof child.value === "string") {
124
+ codeString = child.value;
125
+ }
120
126
  if (components[child.type]) {
121
127
  const Component2 = components[child.type];
122
128
  return (
123
129
  // @ts-ignore FIXME: TinaMarkdownContent needs to be a union of all possible node types
124
- /* @__PURE__ */ React.createElement(Component2, { ...props })
130
+ /* @__PURE__ */ React.createElement(Component2, { ...props, value: codeString })
125
131
  );
126
132
  }
127
- return /* @__PURE__ */ React.createElement("pre", null, /* @__PURE__ */ React.createElement("code", null, value));
133
+ return /* @__PURE__ */ React.createElement("pre", null, /* @__PURE__ */ React.createElement("code", null, codeString));
128
134
  }
129
135
  case "hr":
130
136
  if (components[child.type]) {
@@ -1 +1,10 @@
1
- export * from "../../src/rich-text/prism"
1
+ /**
2
+
3
+ */
4
+ import React from 'react';
5
+ import { themes } from 'prism-react-renderer';
6
+ export declare const Prism: (props: {
7
+ value: string;
8
+ lang?: string;
9
+ theme?: keyof typeof themes;
10
+ }) => React.JSX.Element;
@@ -7,7 +7,7 @@
7
7
  prismReactRenderer.Highlight,
8
8
  {
9
9
  theme: prismReactRenderer.themes[props.theme || "github"],
10
- code: props.value,
10
+ code: props.value || "",
11
11
  language: props.lang || ""
12
12
  },
13
13
  ({ className, style, tokens, getLineProps, getTokenProps }) => /* @__PURE__ */ React.createElement("pre", { className, style }, tokens.map((line, i) => /* @__PURE__ */ React.createElement("div", { ...getLineProps({ line, key: i }) }, line.map((token, key) => /* @__PURE__ */ React.createElement("span", { ...getTokenProps({ token, key }) })))))
@@ -5,7 +5,7 @@ const Prism = (props) => {
5
5
  Highlight,
6
6
  {
7
7
  theme: themes[props.theme || "github"],
8
- code: props.value,
8
+ code: props.value || "",
9
9
  language: props.lang || ""
10
10
  },
11
11
  ({ className, style, tokens, getLineProps, getTokenProps }) => /* @__PURE__ */ React.createElement("pre", { className, style }, tokens.map((line, i) => /* @__PURE__ */ React.createElement("div", { ...getLineProps({ line, key: i }) }, line.map((token, key) => /* @__PURE__ */ React.createElement("span", { ...getTokenProps({ token, key }) })))))