tinacms 1.5.10 → 1.5.12

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.
@@ -0,0 +1,496 @@
1
+ (function(global, factory) {
2
+ typeof exports === "object" && typeof module !== "undefined" ? factory(exports, require("react")) : typeof define === "function" && define.amd ? define(["exports", "react"], factory) : (global = typeof globalThis !== "undefined" ? globalThis : global || self, factory(global.tinacms = {}, global.NOOP));
3
+ })(this, function(exports2, React) {
4
+ "use strict";
5
+ function _interopDefaultLegacy(e) {
6
+ return e && typeof e === "object" && "default" in e ? e : { "default": e };
7
+ }
8
+ var React__default = /* @__PURE__ */ _interopDefaultLegacy(React);
9
+ const TinaMarkdown = ({
10
+ content,
11
+ components = {}
12
+ }) => {
13
+ if (!content) {
14
+ return null;
15
+ }
16
+ const nodes = Array.isArray(content) ? content : content.children;
17
+ if (!nodes) {
18
+ return null;
19
+ }
20
+ return /* @__PURE__ */ React__default["default"].createElement(React__default["default"].Fragment, null, nodes.map((child, index) => {
21
+ return /* @__PURE__ */ React__default["default"].createElement(MemoNode, {
22
+ components,
23
+ key: index,
24
+ child
25
+ });
26
+ }));
27
+ };
28
+ const Leaf = (props) => {
29
+ if (props.bold) {
30
+ const { bold, ...rest } = props;
31
+ if (props.components.bold) {
32
+ const Component = props.components.bold;
33
+ return /* @__PURE__ */ React__default["default"].createElement(Component, null, /* @__PURE__ */ React__default["default"].createElement(Leaf, {
34
+ ...rest
35
+ }));
36
+ }
37
+ return /* @__PURE__ */ React__default["default"].createElement("strong", null, /* @__PURE__ */ React__default["default"].createElement(Leaf, {
38
+ ...rest
39
+ }));
40
+ }
41
+ if (props.italic) {
42
+ const { italic, ...rest } = props;
43
+ if (props.components.italic) {
44
+ const Component = props.components.italic;
45
+ return /* @__PURE__ */ React__default["default"].createElement(Component, null, /* @__PURE__ */ React__default["default"].createElement(Leaf, {
46
+ ...rest
47
+ }));
48
+ }
49
+ return /* @__PURE__ */ React__default["default"].createElement("em", null, /* @__PURE__ */ React__default["default"].createElement(Leaf, {
50
+ ...rest
51
+ }));
52
+ }
53
+ if (props.underline) {
54
+ const { underline, ...rest } = props;
55
+ if (props.components.underline) {
56
+ const Component = props.components.underline;
57
+ return /* @__PURE__ */ React__default["default"].createElement(Component, null, /* @__PURE__ */ React__default["default"].createElement(Leaf, {
58
+ ...rest
59
+ }));
60
+ }
61
+ return /* @__PURE__ */ React__default["default"].createElement("u", null, /* @__PURE__ */ React__default["default"].createElement(Leaf, {
62
+ ...rest
63
+ }));
64
+ }
65
+ if (props.strikethrough) {
66
+ const { strikethrough, ...rest } = props;
67
+ if (props.components.strikethrough) {
68
+ const Component = props.components.strikethrough;
69
+ return /* @__PURE__ */ React__default["default"].createElement(Component, null, /* @__PURE__ */ React__default["default"].createElement(Leaf, {
70
+ ...rest
71
+ }));
72
+ }
73
+ return /* @__PURE__ */ React__default["default"].createElement("s", null, /* @__PURE__ */ React__default["default"].createElement(Leaf, {
74
+ ...rest
75
+ }));
76
+ }
77
+ if (props.code) {
78
+ const { code, ...rest } = props;
79
+ if (props.components.code) {
80
+ const Component = props.components.code;
81
+ return /* @__PURE__ */ React__default["default"].createElement(Component, null, /* @__PURE__ */ React__default["default"].createElement(Leaf, {
82
+ ...rest
83
+ }));
84
+ }
85
+ return /* @__PURE__ */ React__default["default"].createElement("code", null, /* @__PURE__ */ React__default["default"].createElement(Leaf, {
86
+ ...rest
87
+ }));
88
+ }
89
+ if (props.components.text) {
90
+ const Component = props.components.text;
91
+ return /* @__PURE__ */ React__default["default"].createElement(Component, null, props.text);
92
+ }
93
+ return /* @__PURE__ */ React__default["default"].createElement(React__default["default"].Fragment, null, props.text);
94
+ };
95
+ const MemoNode = (props) => {
96
+ const MNode = React__default["default"].useMemo(() => /* @__PURE__ */ React__default["default"].createElement(Node, {
97
+ ...props
98
+ }), [JSON.stringify(props)]);
99
+ return MNode;
100
+ };
101
+ const Node = ({ components, child }) => {
102
+ const { children, ...props } = child;
103
+ switch (child.type) {
104
+ case "h1":
105
+ case "h2":
106
+ case "h3":
107
+ case "h4":
108
+ case "h5":
109
+ case "h6":
110
+ case "p":
111
+ case "blockquote":
112
+ case "ol":
113
+ case "ul":
114
+ case "li":
115
+ if (components[child.type]) {
116
+ const Component2 = components[child.type];
117
+ return /* @__PURE__ */ React__default["default"].createElement(Component2, {
118
+ ...props
119
+ }, /* @__PURE__ */ React__default["default"].createElement(TinaMarkdown, {
120
+ components,
121
+ content: children
122
+ }));
123
+ }
124
+ return React__default["default"].createElement(child.type, {
125
+ children: /* @__PURE__ */ React__default["default"].createElement(TinaMarkdown, {
126
+ components,
127
+ content: children
128
+ })
129
+ });
130
+ case "lic":
131
+ if (components.lic) {
132
+ const Component2 = components.lic;
133
+ return /* @__PURE__ */ React__default["default"].createElement(Component2, {
134
+ ...props
135
+ }, /* @__PURE__ */ React__default["default"].createElement(TinaMarkdown, {
136
+ components,
137
+ content: children
138
+ }));
139
+ }
140
+ return /* @__PURE__ */ React__default["default"].createElement("div", null, /* @__PURE__ */ React__default["default"].createElement(TinaMarkdown, {
141
+ components,
142
+ content: child.children
143
+ }));
144
+ case "img":
145
+ if (components[child.type]) {
146
+ const Component2 = components[child.type];
147
+ return /* @__PURE__ */ React__default["default"].createElement(Component2, {
148
+ ...props
149
+ });
150
+ }
151
+ return /* @__PURE__ */ React__default["default"].createElement("img", {
152
+ src: child.url,
153
+ alt: child.caption
154
+ });
155
+ case "a":
156
+ if (components[child.type]) {
157
+ const Component2 = components[child.type];
158
+ return /* @__PURE__ */ React__default["default"].createElement(Component2, {
159
+ ...props
160
+ }, /* @__PURE__ */ React__default["default"].createElement(TinaMarkdown, {
161
+ components,
162
+ content: children
163
+ }));
164
+ }
165
+ return /* @__PURE__ */ React__default["default"].createElement("a", {
166
+ href: child.url
167
+ }, /* @__PURE__ */ React__default["default"].createElement(TinaMarkdown, {
168
+ components,
169
+ content: children
170
+ }));
171
+ case "code_block":
172
+ const value = child.value;
173
+ if (components[child.type]) {
174
+ const Component2 = components[child.type];
175
+ return /* @__PURE__ */ React__default["default"].createElement(Component2, {
176
+ ...props
177
+ });
178
+ }
179
+ return /* @__PURE__ */ React__default["default"].createElement("pre", null, /* @__PURE__ */ React__default["default"].createElement("code", null, value));
180
+ case "hr":
181
+ if (components[child.type]) {
182
+ const Component2 = components[child.type];
183
+ return /* @__PURE__ */ React__default["default"].createElement(Component2, {
184
+ ...props
185
+ });
186
+ }
187
+ return /* @__PURE__ */ React__default["default"].createElement("hr", null);
188
+ case "break":
189
+ if (components[child.type]) {
190
+ const Component2 = components[child.type];
191
+ return /* @__PURE__ */ React__default["default"].createElement(Component2, {
192
+ ...props
193
+ });
194
+ }
195
+ return /* @__PURE__ */ React__default["default"].createElement("br", null);
196
+ case "text":
197
+ return /* @__PURE__ */ React__default["default"].createElement(Leaf, {
198
+ components,
199
+ ...child
200
+ });
201
+ case "mdxJsxTextElement":
202
+ case "mdxJsxFlowElement":
203
+ const Component = components[child.name];
204
+ if (Component) {
205
+ const props2 = child.props ? child.props : {};
206
+ return /* @__PURE__ */ React__default["default"].createElement(Component, {
207
+ ...props2
208
+ });
209
+ } else {
210
+ const ComponentMissing = components["component_missing"];
211
+ if (ComponentMissing) {
212
+ return /* @__PURE__ */ React__default["default"].createElement(ComponentMissing, {
213
+ name: child.name
214
+ });
215
+ } else {
216
+ return /* @__PURE__ */ React__default["default"].createElement("span", null, `No component provided for ${child.name}`);
217
+ }
218
+ }
219
+ case "maybe_mdx":
220
+ return null;
221
+ case "html":
222
+ case "html_inline":
223
+ if (components[child.type]) {
224
+ const Component2 = components[child.type];
225
+ return /* @__PURE__ */ React__default["default"].createElement(Component2, {
226
+ ...props
227
+ });
228
+ }
229
+ return child.value;
230
+ case "invalid_markdown":
231
+ return /* @__PURE__ */ React__default["default"].createElement("pre", null, child.value);
232
+ default:
233
+ if (typeof child.text === "string") {
234
+ return /* @__PURE__ */ React__default["default"].createElement(Leaf, {
235
+ components,
236
+ ...child
237
+ });
238
+ }
239
+ }
240
+ };
241
+ const tinaField = (object, property, index) => {
242
+ var _a, _b, _c;
243
+ if (!object) {
244
+ return "";
245
+ }
246
+ if (object._content_source) {
247
+ if (!property) {
248
+ return [
249
+ (_a = object._content_source) == null ? void 0 : _a.queryId,
250
+ object._content_source.path.join(".")
251
+ ].join("---");
252
+ }
253
+ if (typeof index === "number") {
254
+ return [
255
+ (_b = object._content_source) == null ? void 0 : _b.queryId,
256
+ [...object._content_source.path, property, index].join(".")
257
+ ].join("---");
258
+ }
259
+ return [
260
+ (_c = object._content_source) == null ? void 0 : _c.queryId,
261
+ [...object._content_source.path, property].join(".")
262
+ ].join("---");
263
+ }
264
+ return "";
265
+ };
266
+ const Explorer = (props) => {
267
+ return /* @__PURE__ */ React__default["default"].createElement("div", {
268
+ className: "font-mono"
269
+ }, /* @__PURE__ */ React__default["default"].createElement(ObjectValueRenderer, {
270
+ ...props
271
+ }));
272
+ };
273
+ const ObjectValueRenderer = (props) => {
274
+ const subEntries = Object.entries(props.value).map(([keyName, subValue]) => {
275
+ return /* @__PURE__ */ React__default["default"].createElement("div", {
276
+ key: keyName,
277
+ className: "gap-2"
278
+ }, /* @__PURE__ */ React__default["default"].createElement(UnknownRenderer, {
279
+ keyName,
280
+ value: subValue,
281
+ parentValue: props.value,
282
+ parentKeyName: props.parentKeyName,
283
+ renderValue: props.renderValue,
284
+ renderRichText: props.renderRichText,
285
+ showMetaFields: props.showMetaFields
286
+ }));
287
+ });
288
+ return /* @__PURE__ */ React__default["default"].createElement("div", null, subEntries);
289
+ };
290
+ const UnknownRenderer = ({
291
+ keyName,
292
+ value,
293
+ parentValue,
294
+ parentKeyName,
295
+ renderValue,
296
+ renderRichText,
297
+ showMetaFields
298
+ }) => {
299
+ const typeOfValue = typeof value;
300
+ const [expanded, setExpanded] = React__default["default"].useState((value == null ? void 0 : value.type) === "root" ? false : true);
301
+ if (!showMetaFields) {
302
+ if ([
303
+ "_sys",
304
+ "__typename",
305
+ "_internalValues",
306
+ "_internalSys"
307
+ ].includes(keyName)) {
308
+ return;
309
+ }
310
+ }
311
+ if (Array.isArray(value)) {
312
+ return /* @__PURE__ */ React__default["default"].createElement("div", null, /* @__PURE__ */ React__default["default"].createElement("button", {
313
+ onClick: () => setExpanded((exp) => !exp),
314
+ className: "min-w-[48px] flex justify-start gap-2"
315
+ }, keyName, ": ", "[", !expanded && `...]`), expanded && /* @__PURE__ */ React__default["default"].createElement("div", {
316
+ className: "pl-4"
317
+ }, value.map((item, index) => /* @__PURE__ */ React__default["default"].createElement(UnknownRenderer, {
318
+ key: String(index),
319
+ keyName: String(index),
320
+ value: item,
321
+ parentKeyName: keyName,
322
+ parentValue,
323
+ renderValue,
324
+ renderRichText
325
+ }))), expanded && /* @__PURE__ */ React__default["default"].createElement("div", null, "]"));
326
+ }
327
+ if (typeOfValue === "object") {
328
+ if ((value == null ? void 0 : value.type) === "root" && renderRichText) {
329
+ return /* @__PURE__ */ React__default["default"].createElement("div", {
330
+ className: "flex gap-2"
331
+ }, /* @__PURE__ */ React__default["default"].createElement("button", {
332
+ onClick: () => setExpanded((exp) => !exp),
333
+ className: "min-w-[48px] flex justify-start gap-2"
334
+ }, keyName, ": ", !expanded && "{...}"), /* @__PURE__ */ React__default["default"].createElement("div", null, expanded && renderRichText({ value, keyName, parentValue, parentKeyName })));
335
+ }
336
+ return /* @__PURE__ */ React__default["default"].createElement(ObjectRenderer, {
337
+ keyName,
338
+ value,
339
+ parentValue,
340
+ parentKeyName,
341
+ renderValue,
342
+ renderRichText
343
+ });
344
+ }
345
+ return /* @__PURE__ */ React__default["default"].createElement(Value, {
346
+ keyName,
347
+ value,
348
+ parentValue,
349
+ parentKeyName,
350
+ renderValue
351
+ });
352
+ };
353
+ const Value = ({
354
+ keyName,
355
+ value,
356
+ parentValue,
357
+ parentKeyName,
358
+ renderValue
359
+ }) => {
360
+ const keyDisplay = isNaN(Number(keyName)) ? `${keyName}: ` : ``;
361
+ return /* @__PURE__ */ React__default["default"].createElement("div", {
362
+ className: "flex gap-2"
363
+ }, /* @__PURE__ */ React__default["default"].createElement("div", null, keyDisplay), /* @__PURE__ */ React__default["default"].createElement("div", null, renderValue({ value, keyName, parentValue, parentKeyName })));
364
+ };
365
+ const ObjectRenderer = ({
366
+ keyName,
367
+ value,
368
+ parentValue,
369
+ parentKeyName,
370
+ renderValue,
371
+ renderRichText
372
+ }) => {
373
+ const { withDataTinaFieldState } = React.useContext(JsonContext);
374
+ const [showMetaFields, setShowMetaFields] = React__default["default"].useState(false);
375
+ const [expanded, setExpanded] = React__default["default"].useState(true);
376
+ const v = value;
377
+ const keyDisplay = isNaN(Number(keyName)) ? `${keyName}: ` : ``;
378
+ if (value === null) {
379
+ return /* @__PURE__ */ React__default["default"].createElement("div", null, /* @__PURE__ */ React__default["default"].createElement("div", {
380
+ className: "flex gap-2"
381
+ }, /* @__PURE__ */ React__default["default"].createElement("div", {
382
+ className: ""
383
+ }, keyDisplay), /* @__PURE__ */ React__default["default"].createElement("div", {
384
+ className: "text-gray-400"
385
+ }, "null")));
386
+ } else {
387
+ const fieldName = tinaField(v);
388
+ const extraProps = {};
389
+ if (fieldName !== "undefined#undefined" && withDataTinaFieldState) {
390
+ extraProps["data-tina-field"] = fieldName;
391
+ }
392
+ return /* @__PURE__ */ React__default["default"].createElement("div", null, /* @__PURE__ */ React__default["default"].createElement("div", {
393
+ className: "flex justify-between"
394
+ }, /* @__PURE__ */ React__default["default"].createElement("button", {
395
+ onClick: () => setExpanded((exp) => !exp),
396
+ className: "min-w-[48px] flex justify-start gap-2"
397
+ }, keyDisplay, "{", !expanded && `...}`), expanded && /* @__PURE__ */ React__default["default"].createElement("button", {
398
+ onClick: () => {
399
+ setShowMetaFields((show) => !show);
400
+ },
401
+ className: "min-w-[48px] text-sm text-gray-400"
402
+ }, showMetaFields ? "Hide meta fields" : "Show meta fields")), expanded && /* @__PURE__ */ React__default["default"].createElement("div", {
403
+ className: "pl-4",
404
+ ...extraProps
405
+ }, /* @__PURE__ */ React__default["default"].createElement(ObjectValueRenderer, {
406
+ value: v,
407
+ parentValue,
408
+ parentKeyName,
409
+ renderValue,
410
+ renderRichText,
411
+ showMetaFields
412
+ })), expanded && /* @__PURE__ */ React__default["default"].createElement("div", null, "}"));
413
+ }
414
+ };
415
+ const JsonContext = React__default["default"].createContext({ withDataTinaFieldState: true });
416
+ function Json({
417
+ src,
418
+ withDataTinaFieldState = true
419
+ }) {
420
+ const [isClient, setIsClient] = React.useState(false);
421
+ React.useEffect(() => {
422
+ setIsClient(true);
423
+ }, []);
424
+ if (!isClient) {
425
+ return null;
426
+ }
427
+ return /* @__PURE__ */ React__default["default"].createElement(React.Suspense, {
428
+ fallback: /* @__PURE__ */ React__default["default"].createElement("div", {
429
+ className: ""
430
+ }, "Loading...")
431
+ }, /* @__PURE__ */ React__default["default"].createElement(JsonContext.Provider, {
432
+ value: {
433
+ withDataTinaFieldState: withDataTinaFieldState === false ? false : true
434
+ }
435
+ }, /* @__PURE__ */ React__default["default"].createElement("div", {
436
+ className: "px-4"
437
+ }, /* @__PURE__ */ React__default["default"].createElement("div", {
438
+ className: "mx-auto my-8 border rounded-lg p-8 shadow-lg max-w-5xl mx-auto shadow-lg"
439
+ }, /* @__PURE__ */ React__default["default"].createElement("div", {
440
+ className: "h-full overflow-scroll"
441
+ }, /* @__PURE__ */ React__default["default"].createElement(Explorer, {
442
+ value: src,
443
+ renderRichText: ({
444
+ value,
445
+ keyName,
446
+ parentValue,
447
+ parentKeyName
448
+ }) => {
449
+ let fieldName = "";
450
+ if (!isNaN(Number(keyName))) {
451
+ fieldName = `${tinaField(parentValue, parentKeyName)}.${keyName}`;
452
+ } else {
453
+ fieldName = tinaField(parentValue, keyName);
454
+ }
455
+ const extraProps = {};
456
+ if (fieldName !== "undefined#undefined") {
457
+ if (fieldName && withDataTinaFieldState) {
458
+ extraProps["data-tina-field"] = fieldName;
459
+ }
460
+ }
461
+ return /* @__PURE__ */ React__default["default"].createElement("div", {
462
+ className: "font-sans px-2 border-l-2 bg-gray-50 w-full prose",
463
+ ...extraProps
464
+ }, /* @__PURE__ */ React__default["default"].createElement(TinaMarkdown, {
465
+ content: value
466
+ }));
467
+ },
468
+ renderValue: ({
469
+ value,
470
+ keyName,
471
+ parentValue,
472
+ parentKeyName
473
+ }) => {
474
+ let fieldName = "";
475
+ if (!isNaN(Number(keyName))) {
476
+ fieldName = `${tinaField(parentValue, parentKeyName)}.${keyName}`;
477
+ } else {
478
+ fieldName = tinaField(parentValue, keyName);
479
+ }
480
+ const extraProps = {};
481
+ if (fieldName !== "undefined#undefined") {
482
+ if (fieldName && withDataTinaFieldState) {
483
+ extraProps["data-tina-field"] = fieldName;
484
+ }
485
+ }
486
+ return /* @__PURE__ */ React__default["default"].createElement("span", {
487
+ className: "text-orange-600",
488
+ ...extraProps
489
+ }, value);
490
+ }
491
+ }))))));
492
+ }
493
+ exports2.Explorer = Explorer;
494
+ exports2.Json = Json;
495
+ Object.defineProperties(exports2, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
496
+ });