tinacms 0.0.0-a5bc4cd-20241024211559 → 0.0.0-a6daef4-20250115020754

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/index.mjs CHANGED
@@ -6,8 +6,8 @@ var __publicField = (obj, key, value) => {
6
6
  };
7
7
  import { z } from "zod";
8
8
  import * as React from "react";
9
- import React__default, { useState, useCallback, useEffect, useRef, createContext, forwardRef, useContext, useMemo, startTransition, createElement, Component } from "react";
10
- import { createPortal, findDOMNode } from "react-dom";
9
+ import React__default, { useState, useCallback, useEffect, useRef, createContext, forwardRef, useContext, useMemo, startTransition } from "react";
10
+ import { createPortal } from "react-dom";
11
11
  import { withRef, cn as cn$1, withVariants, withProps, withCn, createPrimitiveElement } from "@udecode/cn";
12
12
  import { toggleList, ELEMENT_UL, ELEMENT_OL, ELEMENT_H1 as ELEMENT_H1$1, ELEMENT_H2 as ELEMENT_H2$1, ELEMENT_H3 as ELEMENT_H3$1, ELEMENT_H4, ELEMENT_H5, ELEMENT_H6, ELEMENT_PARAGRAPH, ELEMENT_BLOCKQUOTE, ELEMENT_CODE_BLOCK, ELEMENT_CODE_LINE, ELEMENT_CODE_SYNTAX, ELEMENT_LI, ELEMENT_LINK, MARK_CODE, MARK_UNDERLINE, MARK_STRIKETHROUGH, MARK_ITALIC, MARK_BOLD, ELEMENT_HR, ELEMENT_TABLE, ELEMENT_TR, ELEMENT_TD, ELEMENT_TH, unwrapList, ELEMENT_TODO_LI, createTrailingBlockPlugin, createAutoformatPlugin, createExitBreakPlugin, KEYS_HEADING, createResetNodePlugin, createHeadingPlugin, createParagraphPlugin, createBlockquotePlugin, createBoldPlugin, createItalicPlugin, createUnderlinePlugin, createCodePlugin, createListPlugin, createIndentListPlugin, createHorizontalRulePlugin, createNodeIdPlugin, createTablePlugin, getListItemEntry, useListToolbarButtonState, useListToolbarButton } from "@udecode/plate";
13
13
  import { PlateElement, isCollapsed, findNodePath, getPointAfter, insertNodes, ELEMENT_DEFAULT, focusEditor, getPointBefore, setNodes, isElement, PlateLeaf, createPluginFactory, useComposedRef, useEditorRef, createPointRef, insertText, moveSelection, toggleNodeType, useElement, useRemoveNodeButton, useEditorSelector, isSelectionExpanded, withHOC, normalizeEditor, getBlockAbove, queryNode, getParentNode, isType, someNode, isSelectionAtBlockStart, setElements, insertNode, getPluginType, isBlock, isBlockAboveEmpty, findNode, PlateContent, getNodeEntries, useEditorState, collapseSelection, useMarkToolbarButtonState, useMarkToolbarButton, insertEmptyElement, usePlateSelectors, useEventEditorSelectors, PortalBody, useFormInputProps, createPlugins, Plate } from "@udecode/plate-common";
@@ -801,6 +801,22 @@ function wrapFieldsWithMeta(Field2) {
801
801
  );
802
802
  };
803
803
  }
804
+ function wrapFieldWithNoHeader(Field2) {
805
+ return (props) => {
806
+ return /* @__PURE__ */ React.createElement(
807
+ FieldMeta,
808
+ {
809
+ name: props.input.name,
810
+ label: false,
811
+ description: "",
812
+ error: props.meta.error,
813
+ index: props.index,
814
+ tinaForm: props.tinaForm
815
+ },
816
+ /* @__PURE__ */ React.createElement(Field2, { ...props })
817
+ );
818
+ };
819
+ }
804
820
  function wrapFieldWithError(Field2) {
805
821
  return (props) => {
806
822
  return /* @__PURE__ */ React.createElement(
@@ -873,6 +889,16 @@ const FieldDescription = ({
873
889
  className,
874
890
  ...props
875
891
  }) => {
892
+ if (typeof children === "string") {
893
+ return /* @__PURE__ */ React.createElement(
894
+ "span",
895
+ {
896
+ className: `block font-sans text-xs italic font-light text-gray-400 pt-0.5 whitespace-normal m-0 ${className}`,
897
+ ...props,
898
+ dangerouslySetInnerHTML: { __html: children }
899
+ }
900
+ );
901
+ }
876
902
  return /* @__PURE__ */ React.createElement(
877
903
  "span",
878
904
  {
@@ -1332,8 +1358,8 @@ const ListElementVariants = withVariants(PlateElement, listVariants, [
1332
1358
  ]);
1333
1359
  const ListElement = withRef(
1334
1360
  ({ children, variant = "ul", ...props }, ref) => {
1335
- const Component2 = variant;
1336
- return /* @__PURE__ */ React__default.createElement(ListElementVariants, { asChild: true, ref, variant, ...props }, /* @__PURE__ */ React__default.createElement(Component2, null, children));
1361
+ const Component = variant;
1362
+ return /* @__PURE__ */ React__default.createElement(ListElementVariants, { asChild: true, ref, variant, ...props }, /* @__PURE__ */ React__default.createElement(Component, null, children));
1337
1363
  }
1338
1364
  );
1339
1365
  const ELEMENT_MERMAID = "mermaid";
@@ -3653,7 +3679,7 @@ function TinaForm({ form, children }) {
3653
3679
  }));
3654
3680
  }
3655
3681
  function TinaField({
3656
- Component: Component2,
3682
+ Component,
3657
3683
  children,
3658
3684
  ...fieldProps
3659
3685
  }) {
@@ -3661,7 +3687,7 @@ function TinaField({
3661
3687
  if (!isEditing)
3662
3688
  return children || null;
3663
3689
  return /* @__PURE__ */ React.createElement(Field, { ...fieldProps }, ({ input, meta }) => {
3664
- return /* @__PURE__ */ React.createElement(Component2, { input, meta, ...fieldProps });
3690
+ return /* @__PURE__ */ React.createElement(Component, { input, meta, ...fieldProps });
3665
3691
  });
3666
3692
  }
3667
3693
  TinaField.propTypes = {
@@ -3831,7 +3857,7 @@ var _excluded = ["attr", "size", "title"];
3831
3857
  function _objectWithoutProperties(source, excluded) {
3832
3858
  if (source == null)
3833
3859
  return {};
3834
- var target = _objectWithoutPropertiesLoose$1(source, excluded);
3860
+ var target = _objectWithoutPropertiesLoose(source, excluded);
3835
3861
  var key, i;
3836
3862
  if (Object.getOwnPropertySymbols) {
3837
3863
  var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
@@ -3846,7 +3872,7 @@ function _objectWithoutProperties(source, excluded) {
3846
3872
  }
3847
3873
  return target;
3848
3874
  }
3849
- function _objectWithoutPropertiesLoose$1(source, excluded) {
3875
+ function _objectWithoutPropertiesLoose(source, excluded) {
3850
3876
  if (source == null)
3851
3877
  return {};
3852
3878
  var target = {};
@@ -4936,7 +4962,28 @@ const NumberInput = ({
4936
4962
  onChange,
4937
4963
  value,
4938
4964
  step
4939
- }) => /* @__PURE__ */ React.createElement(Input, { type: "number", step, value, onChange });
4965
+ }) => /* @__PURE__ */ React.createElement(
4966
+ Input,
4967
+ {
4968
+ type: "number",
4969
+ step,
4970
+ value,
4971
+ onChange: (event) => {
4972
+ const inputValue = event.target.value;
4973
+ const newValue = inputValue === "" ? void 0 : inputValue;
4974
+ if (onChange) {
4975
+ const syntheticEvent = {
4976
+ ...event,
4977
+ target: {
4978
+ ...event.target,
4979
+ value: newValue
4980
+ }
4981
+ };
4982
+ onChange(syntheticEvent);
4983
+ }
4984
+ }
4985
+ }
4986
+ );
4940
4987
  function useCMS() {
4941
4988
  return useCMS$1();
4942
4989
  }
@@ -5737,10 +5784,11 @@ const ItemDeleteButton = ({ onClick, disabled = false }) => {
5737
5784
  return /* @__PURE__ */ React__default.createElement(
5738
5785
  "button",
5739
5786
  {
5740
- className: `w-8 px-1 py-2.5 flex items-center justify-center hover:bg-gray-50 text-gray-200 hover:text-red-500 ${disabled && "pointer-events-none opacity-30 cursor-not-allowed"}`,
5787
+ type: "button",
5788
+ className: `w-8 px-1 py-2.5 flex items-center justify-center text-gray-200 hover:opacity-100 opacity-30 hover:bg-gray-50 ${disabled && "pointer-events-none opacity-30 cursor-not-allowed"}`,
5741
5789
  onClick
5742
5790
  },
5743
- /* @__PURE__ */ React__default.createElement(TrashIcon, { className: "fill-current transition-colors ease-out duration-100" })
5791
+ /* @__PURE__ */ React__default.createElement(TrashIcon, { className: "h-5 w-auto fill-current text-red-500 transition-colors duration-150 ease-out" })
5744
5792
  );
5745
5793
  };
5746
5794
  const DragHandle = ({ isDragging }) => {
@@ -5818,27 +5866,35 @@ const BlockSelector = ({
5818
5866
  ))))
5819
5867
  ))));
5820
5868
  };
5821
- const Group = wrapFieldWithError(({ tinaForm, field }) => {
5822
- const cms = useCMS$1();
5823
- React.useState(false);
5824
- return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
5825
- Header,
5826
- {
5827
- onClick: () => {
5828
- const state = tinaForm.finalForm.getState();
5829
- if (state.invalid === true) {
5830
- cms.alerts.error("Cannot navigate away from an invalid form.");
5831
- return;
5869
+ const Group = wrapFieldWithNoHeader(
5870
+ ({ tinaForm, field }) => {
5871
+ const cms = useCMS$1();
5872
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
5873
+ Header,
5874
+ {
5875
+ onClick: () => {
5876
+ const state = tinaForm.finalForm.getState();
5877
+ if (state.invalid === true) {
5878
+ cms.alerts.error("Cannot navigate away from an invalid form.");
5879
+ return;
5880
+ }
5881
+ cms.dispatch({
5882
+ type: "forms:set-active-field-name",
5883
+ value: { formId: tinaForm.id, fieldName: field.name }
5884
+ });
5832
5885
  }
5833
- cms.dispatch({
5834
- type: "forms:set-active-field-name",
5835
- value: { formId: tinaForm.id, fieldName: field.name }
5836
- });
5837
- }
5838
- },
5839
- field.label || field.name
5840
- ));
5841
- });
5886
+ },
5887
+ field.label || field.name,
5888
+ field.description && /* @__PURE__ */ React.createElement(
5889
+ "span",
5890
+ {
5891
+ className: `block font-sans text-xs italic font-light text-gray-400 pt-0.5 whitespace-normal m-0`,
5892
+ dangerouslySetInnerHTML: { __html: field.description }
5893
+ }
5894
+ )
5895
+ ));
5896
+ }
5897
+ );
5842
5898
  const Header = ({ onClick, children }) => {
5843
5899
  return /* @__PURE__ */ React.createElement("div", { className: "pt-1 mb-5" }, /* @__PURE__ */ React.createElement(
5844
5900
  "button",
@@ -7180,244 +7236,65 @@ function pad(type, value) {
7180
7236
  str = "0" + str;
7181
7237
  return str;
7182
7238
  }
7183
- function _inheritsLoose(subClass, superClass) {
7184
- subClass.prototype = Object.create(superClass.prototype);
7185
- subClass.prototype.constructor = subClass;
7186
- _setPrototypeOf(subClass, superClass);
7187
- }
7188
- function _setPrototypeOf(o, p) {
7189
- _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf2(o2, p2) {
7190
- o2.__proto__ = p2;
7191
- return o2;
7192
- };
7193
- return _setPrototypeOf(o, p);
7194
- }
7195
- function _objectWithoutPropertiesLoose(source, excluded) {
7196
- if (source == null)
7197
- return {};
7198
- var target = {};
7199
- var sourceKeys = Object.keys(source);
7200
- var key, i;
7201
- for (i = 0; i < sourceKeys.length; i++) {
7202
- key = sourceKeys[i];
7203
- if (excluded.indexOf(key) >= 0)
7204
- continue;
7205
- target[key] = source[key];
7206
- }
7207
- return target;
7208
- }
7209
- function _assertThisInitialized(self) {
7210
- if (self === void 0) {
7211
- throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
7212
- }
7213
- return self;
7214
- }
7215
- function isNodeFound(current, componentNode, ignoreClass) {
7216
- if (current === componentNode) {
7217
- return true;
7239
+ var useClickAway$1 = {};
7240
+ var util = {};
7241
+ Object.defineProperty(util, "__esModule", { value: true });
7242
+ util.isNavigator = util.isBrowser = util.off = util.on = util.noop = void 0;
7243
+ var noop = function() {
7244
+ };
7245
+ util.noop = noop;
7246
+ function on(obj) {
7247
+ var args = [];
7248
+ for (var _i = 1; _i < arguments.length; _i++) {
7249
+ args[_i - 1] = arguments[_i];
7218
7250
  }
7219
- if (current.correspondingElement) {
7220
- return current.correspondingElement.classList.contains(ignoreClass);
7251
+ if (obj && obj.addEventListener) {
7252
+ obj.addEventListener.apply(obj, args);
7221
7253
  }
7222
- return current.classList.contains(ignoreClass);
7223
7254
  }
7224
- function findHighest(current, componentNode, ignoreClass) {
7225
- if (current === componentNode) {
7226
- return true;
7255
+ util.on = on;
7256
+ function off(obj) {
7257
+ var args = [];
7258
+ for (var _i = 1; _i < arguments.length; _i++) {
7259
+ args[_i - 1] = arguments[_i];
7227
7260
  }
7228
- while (current.parentNode || current.host) {
7229
- if (current.parentNode && isNodeFound(current, componentNode, ignoreClass)) {
7230
- return true;
7231
- }
7232
- current = current.parentNode || current.host;
7261
+ if (obj && obj.removeEventListener) {
7262
+ obj.removeEventListener.apply(obj, args);
7233
7263
  }
7234
- return current;
7235
- }
7236
- function clickedScrollbar(evt) {
7237
- return document.documentElement.clientWidth <= evt.clientX || document.documentElement.clientHeight <= evt.clientY;
7238
7264
  }
7239
- var testPassiveEventSupport = function testPassiveEventSupport2() {
7240
- if (typeof window === "undefined" || typeof window.addEventListener !== "function") {
7241
- return;
7242
- }
7243
- var passive = false;
7244
- var options = Object.defineProperty({}, "passive", {
7245
- get: function get2() {
7246
- passive = true;
7247
- }
7248
- });
7249
- var noop = function noop2() {
7250
- };
7251
- window.addEventListener("testPassiveEventSupport", noop, options);
7252
- window.removeEventListener("testPassiveEventSupport", noop, options);
7253
- return passive;
7254
- };
7255
- function autoInc(seed) {
7256
- if (seed === void 0) {
7257
- seed = 0;
7258
- }
7259
- return function() {
7260
- return ++seed;
7261
- };
7262
- }
7263
- var uid = autoInc();
7264
- var passiveEventSupport;
7265
- var handlersMap = {};
7266
- var enabledInstances = {};
7267
- var touchEvents = ["touchstart", "touchmove"];
7268
- var IGNORE_CLASS_NAME = "ignore-react-onclickoutside";
7269
- function getEventHandlerOptions(instance, eventName) {
7270
- var handlerOptions = {};
7271
- var isTouchEvent = touchEvents.indexOf(eventName) !== -1;
7272
- if (isTouchEvent && passiveEventSupport) {
7273
- handlerOptions.passive = !instance.props.preventDefault;
7274
- }
7275
- return handlerOptions;
7276
- }
7277
- function onClickOutsideHOC(WrappedComponent, config) {
7278
- var _class, _temp;
7279
- var componentName = WrappedComponent.displayName || WrappedComponent.name || "Component";
7280
- return _temp = _class = /* @__PURE__ */ function(_Component) {
7281
- _inheritsLoose(onClickOutside, _Component);
7282
- function onClickOutside(props) {
7283
- var _this;
7284
- _this = _Component.call(this, props) || this;
7285
- _this.__outsideClickHandler = function(event) {
7286
- if (typeof _this.__clickOutsideHandlerProp === "function") {
7287
- _this.__clickOutsideHandlerProp(event);
7288
- return;
7289
- }
7290
- var instance = _this.getInstance();
7291
- if (typeof instance.props.handleClickOutside === "function") {
7292
- instance.props.handleClickOutside(event);
7293
- return;
7294
- }
7295
- if (typeof instance.handleClickOutside === "function") {
7296
- instance.handleClickOutside(event);
7297
- return;
7298
- }
7299
- throw new Error("WrappedComponent: " + componentName + " lacks a handleClickOutside(event) function for processing outside click events.");
7300
- };
7301
- _this.__getComponentNode = function() {
7302
- var instance = _this.getInstance();
7303
- if (config && typeof config.setClickOutsideRef === "function") {
7304
- return config.setClickOutsideRef()(instance);
7305
- }
7306
- if (typeof instance.setClickOutsideRef === "function") {
7307
- return instance.setClickOutsideRef();
7308
- }
7309
- return findDOMNode(instance);
7310
- };
7311
- _this.enableOnClickOutside = function() {
7312
- if (typeof document === "undefined" || enabledInstances[_this._uid]) {
7313
- return;
7314
- }
7315
- if (typeof passiveEventSupport === "undefined") {
7316
- passiveEventSupport = testPassiveEventSupport();
7317
- }
7318
- enabledInstances[_this._uid] = true;
7319
- var events = _this.props.eventTypes;
7320
- if (!events.forEach) {
7321
- events = [events];
7322
- }
7323
- handlersMap[_this._uid] = function(event) {
7324
- if (_this.componentNode === null)
7325
- return;
7326
- if (_this.initTimeStamp > event.timeStamp)
7327
- return;
7328
- if (_this.props.preventDefault) {
7329
- event.preventDefault();
7330
- }
7331
- if (_this.props.stopPropagation) {
7332
- event.stopPropagation();
7333
- }
7334
- if (_this.props.excludeScrollbar && clickedScrollbar(event))
7335
- return;
7336
- var current = event.composed && event.composedPath && event.composedPath().shift() || event.target;
7337
- if (findHighest(current, _this.componentNode, _this.props.outsideClickIgnoreClass) !== document) {
7338
- return;
7339
- }
7340
- _this.__outsideClickHandler(event);
7341
- };
7342
- events.forEach(function(eventName) {
7343
- document.addEventListener(eventName, handlersMap[_this._uid], getEventHandlerOptions(_assertThisInitialized(_this), eventName));
7344
- });
7345
- };
7346
- _this.disableOnClickOutside = function() {
7347
- delete enabledInstances[_this._uid];
7348
- var fn = handlersMap[_this._uid];
7349
- if (fn && typeof document !== "undefined") {
7350
- var events = _this.props.eventTypes;
7351
- if (!events.forEach) {
7352
- events = [events];
7353
- }
7354
- events.forEach(function(eventName) {
7355
- return document.removeEventListener(eventName, fn, getEventHandlerOptions(_assertThisInitialized(_this), eventName));
7356
- });
7357
- delete handlersMap[_this._uid];
7358
- }
7359
- };
7360
- _this.getRef = function(ref) {
7361
- return _this.instanceRef = ref;
7362
- };
7363
- _this._uid = uid();
7364
- _this.initTimeStamp = performance.now();
7365
- return _this;
7366
- }
7367
- var _proto = onClickOutside.prototype;
7368
- _proto.getInstance = function getInstance() {
7369
- if (WrappedComponent.prototype && !WrappedComponent.prototype.isReactComponent) {
7370
- return this;
7371
- }
7372
- var ref = this.instanceRef;
7373
- return ref.getInstance ? ref.getInstance() : ref;
7265
+ util.off = off;
7266
+ util.isBrowser = typeof window !== "undefined";
7267
+ util.isNavigator = typeof navigator !== "undefined";
7268
+ Object.defineProperty(useClickAway$1, "__esModule", { value: true });
7269
+ var react_1 = React__default;
7270
+ var util_1 = util;
7271
+ var defaultEvents = ["mousedown", "touchstart"];
7272
+ var useClickAway = function(ref, onClickAway, events) {
7273
+ if (events === void 0) {
7274
+ events = defaultEvents;
7275
+ }
7276
+ var savedCallback = react_1.useRef(onClickAway);
7277
+ react_1.useEffect(function() {
7278
+ savedCallback.current = onClickAway;
7279
+ }, [onClickAway]);
7280
+ react_1.useEffect(function() {
7281
+ var handler = function(event) {
7282
+ var el = ref.current;
7283
+ el && !el.contains(event.target) && savedCallback.current(event);
7374
7284
  };
7375
- _proto.componentDidMount = function componentDidMount() {
7376
- if (typeof document === "undefined" || !document.createElement) {
7377
- return;
7378
- }
7379
- var instance = this.getInstance();
7380
- if (config && typeof config.handleClickOutside === "function") {
7381
- this.__clickOutsideHandlerProp = config.handleClickOutside(instance);
7382
- if (typeof this.__clickOutsideHandlerProp !== "function") {
7383
- throw new Error("WrappedComponent: " + componentName + " lacks a function for processing outside click events specified by the handleClickOutside config option.");
7384
- }
7385
- }
7386
- this.componentNode = this.__getComponentNode();
7387
- if (this.props.disableOnClickOutside)
7388
- return;
7389
- this.enableOnClickOutside();
7390
- };
7391
- _proto.componentDidUpdate = function componentDidUpdate() {
7392
- this.componentNode = this.__getComponentNode();
7393
- };
7394
- _proto.componentWillUnmount = function componentWillUnmount() {
7395
- this.disableOnClickOutside();
7396
- };
7397
- _proto.render = function render() {
7398
- var _this$props = this.props;
7399
- _this$props.excludeScrollbar;
7400
- var props = _objectWithoutPropertiesLoose(_this$props, ["excludeScrollbar"]);
7401
- if (WrappedComponent.prototype && WrappedComponent.prototype.isReactComponent) {
7402
- props.ref = this.getRef;
7403
- } else {
7404
- props.wrappedRef = this.getRef;
7285
+ for (var _i = 0, events_1 = events; _i < events_1.length; _i++) {
7286
+ var eventName = events_1[_i];
7287
+ util_1.on(document, eventName, handler);
7288
+ }
7289
+ return function() {
7290
+ for (var _i2 = 0, events_2 = events; _i2 < events_2.length; _i2++) {
7291
+ var eventName2 = events_2[_i2];
7292
+ util_1.off(document, eventName2, handler);
7405
7293
  }
7406
- props.disableOnClickOutside = this.disableOnClickOutside;
7407
- props.enableOnClickOutside = this.enableOnClickOutside;
7408
- return createElement(WrappedComponent, props);
7409
7294
  };
7410
- return onClickOutside;
7411
- }(Component), _class.displayName = "OnClickOutside(" + componentName + ")", _class.defaultProps = {
7412
- eventTypes: ["mousedown", "touchstart"],
7413
- excludeScrollbar: config && config.excludeScrollbar || false,
7414
- outsideClickIgnoreClass: IGNORE_CLASS_NAME,
7415
- preventDefault: false,
7416
- stopPropagation: false
7417
- }, _class.getClass = function() {
7418
- return WrappedComponent.getClass ? WrappedComponent.getClass() : WrappedComponent;
7419
- }, _temp;
7420
- }
7295
+ }, [events, ref]);
7296
+ };
7297
+ var _default = useClickAway$1.default = useClickAway;
7421
7298
  const viewModes = {
7422
7299
  YEARS: "years",
7423
7300
  MONTHS: "months",
@@ -7946,22 +7823,13 @@ function log(message, method) {
7946
7823
  }
7947
7824
  con[method]("***react-datetime:" + message);
7948
7825
  }
7949
- class ClickOutBase extends React__default.Component {
7950
- constructor() {
7951
- super(...arguments);
7952
- __publicField(this, "container", React__default.createRef());
7953
- }
7954
- render() {
7955
- return /* @__PURE__ */ React__default.createElement("div", { className: this.props.className, ref: this.container }, this.props.children);
7956
- }
7957
- handleClickOutside(e) {
7958
- this.props.onClickOut(e);
7959
- }
7960
- setClickOutsideRef() {
7961
- return this.container.current;
7962
- }
7826
+ function ClickableWrapper({ className, onClickOut, children }) {
7827
+ const containerRef = useRef(null);
7828
+ _default(containerRef, (event) => {
7829
+ onClickOut(event);
7830
+ });
7831
+ return /* @__PURE__ */ React__default.createElement("div", { className, ref: containerRef }, children);
7963
7832
  }
7964
- const ClickableWrapper = onClickOutsideHOC(ClickOutBase);
7965
7833
  const DEFAULT_DATE_DISPLAY_FORMAT = "MMM DD, YYYY";
7966
7834
  const DEFAULT_TIME_DISPLAY_FORMAT = "h:mm A";
7967
7835
  const format$1 = (val, _name, field) => {
@@ -8004,7 +7872,10 @@ const DateField = wrapFieldsWithMeta(
8004
7872
  ReactDateTimeWithStyles,
8005
7873
  {
8006
7874
  value: input.value,
8007
- onChange: input.onChange,
7875
+ onChange: (value) => {
7876
+ const newValue = value === "" ? void 0 : value;
7877
+ input.onChange(newValue);
7878
+ },
8008
7879
  dateFormat: dateFormat || DEFAULT_DATE_DISPLAY_FORMAT,
8009
7880
  timeFormat: timeFormat || false,
8010
7881
  inputProps: { className: textFieldClasses },
@@ -9815,7 +9686,7 @@ class SidebarState {
9815
9686
  }
9816
9687
  }
9817
9688
  function createScreen({
9818
- Component: Component2,
9689
+ Component,
9819
9690
  props,
9820
9691
  ...options
9821
9692
  }) {
@@ -9824,7 +9695,7 @@ function createScreen({
9824
9695
  layout: "popup",
9825
9696
  ...options,
9826
9697
  Component(screenProps) {
9827
- return /* @__PURE__ */ React__default.createElement(Component2, { ...screenProps, ...props });
9698
+ return /* @__PURE__ */ React__default.createElement(Component, { ...screenProps, ...props });
9828
9699
  }
9829
9700
  };
9830
9701
  }
@@ -10335,7 +10206,7 @@ const SyncStatus = ({ cms, setEventsOpen }) => {
10335
10206
  "Event Log"
10336
10207
  ));
10337
10208
  };
10338
- const version = "2.3.0";
10209
+ const version = "2.6.0";
10339
10210
  const Nav = ({
10340
10211
  isLocalMode,
10341
10212
  className = "",
@@ -13264,9 +13135,9 @@ const EllipsisIcon = ({ title }) => {
13264
13135
  ));
13265
13136
  };
13266
13137
  const Wrapper$1 = ({ inline, children }) => {
13267
- const Component2 = inline ? "span" : "div";
13138
+ const Component = inline ? "span" : "div";
13268
13139
  return /* @__PURE__ */ React__default.createElement(
13269
- Component2,
13140
+ Component,
13270
13141
  {
13271
13142
  contentEditable: false,
13272
13143
  style: { userSelect: "none" },
@@ -14054,13 +13925,13 @@ const TooltipContent = withCn(
14054
13925
  }),
14055
13926
  "z-[9999] overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md"
14056
13927
  );
14057
- function withTooltip(Component2) {
13928
+ function withTooltip(Component) {
14058
13929
  return React__default.forwardRef(function ExtendComponent({ tooltip, tooltipContentProps, tooltipProps, ...props }, ref) {
14059
13930
  const [mounted, setMounted] = React__default.useState(false);
14060
13931
  React__default.useEffect(() => {
14061
13932
  setMounted(true);
14062
13933
  }, []);
14063
- const component = /* @__PURE__ */ React__default.createElement(Component2, { ref, ...props });
13934
+ const component = /* @__PURE__ */ React__default.createElement(Component, { ref, ...props });
14064
13935
  if (tooltip && mounted) {
14065
13936
  return /* @__PURE__ */ React__default.createElement(Tooltip, { ...tooltipProps }, /* @__PURE__ */ React__default.createElement(TooltipTrigger, { asChild: true }, component), /* @__PURE__ */ React__default.createElement(TooltipPortal, null, /* @__PURE__ */ React__default.createElement(TooltipContent, { ...tooltipContentProps }, tooltip)));
14066
13937
  }
@@ -14452,6 +14323,7 @@ function OverflowMenu({
14452
14323
  ToolbarButton,
14453
14324
  {
14454
14325
  showArrow: false,
14326
+ "data-testid": "rich-text-editor-overflow-menu-button",
14455
14327
  className: "lg:min-w-[130px]",
14456
14328
  isDropdown: true,
14457
14329
  pressed: openState.open,
@@ -14505,7 +14377,17 @@ const useRawMarkdownToolbarButton = () => {
14505
14377
  };
14506
14378
  const RawMarkdownToolbarButton = withRef(({ clear, ...rest }, ref) => {
14507
14379
  const { props } = useRawMarkdownToolbarButton();
14508
- return /* @__PURE__ */ React__default.createElement(ToolbarButton, { ref, tooltip: "Link", ...rest, ...props }, /* @__PURE__ */ React__default.createElement(Icons.raw, null));
14380
+ return /* @__PURE__ */ React__default.createElement(
14381
+ ToolbarButton,
14382
+ {
14383
+ ref,
14384
+ tooltip: "Link",
14385
+ ...rest,
14386
+ ...props,
14387
+ "data-testid": "markdown-button"
14388
+ },
14389
+ /* @__PURE__ */ React__default.createElement(Icons.raw, null)
14390
+ );
14509
14391
  });
14510
14392
  function TableDropdownMenu(props) {
14511
14393
  const tableSelected = useEditorSelector(
@@ -14730,7 +14612,12 @@ function FixedToolbarButtons() {
14730
14612
  const [itemsShown, setItemsShown] = React__default.useState(11);
14731
14613
  const { overrides, templates } = useToolbarContext();
14732
14614
  const showEmbedButton = templates.length > 0;
14733
- let items2 = overrides === void 0 ? Object.values(toolbarItems) : overrides.map((item) => toolbarItems[item]).filter((item) => item !== void 0);
14615
+ let items2 = [];
14616
+ if (Array.isArray(overrides)) {
14617
+ items2 = overrides === void 0 ? Object.values(toolbarItems) : overrides.map((item) => toolbarItems[item]).filter((item) => item !== void 0);
14618
+ } else {
14619
+ items2 = (overrides == null ? void 0 : overrides.toolbar) === void 0 ? Object.values(toolbarItems) : overrides.toolbar.map((item) => toolbarItems[item]).filter((item) => item !== void 0);
14620
+ }
14734
14621
  if (!showEmbedButton) {
14735
14622
  items2 = items2.filter((item) => item.label !== toolbarItems.embed.label);
14736
14623
  }
@@ -15058,6 +14945,9 @@ const isUrl = (string) => {
15058
14945
  if (typeof string !== "string") {
15059
14946
  return false;
15060
14947
  }
14948
+ if (string.startsWith("#")) {
14949
+ return true;
14950
+ }
15061
14951
  const generalMatch = string.match(protocolAndDomainRE);
15062
14952
  const emailLinkMatch = string.match(emailLintRE);
15063
14953
  const localUrlMatch = string.match(localUrlRE);
@@ -15079,12 +14969,12 @@ const isUrl = (string) => {
15079
14969
  }
15080
14970
  return localhostDomainRE.test(everythingAfterProtocol) || nonLocalhostDomainRE.test(everythingAfterProtocol);
15081
14971
  };
15082
- const RichEditor = (props) => {
14972
+ const RichEditor = ({ input, tinaForm, field }) => {
15083
14973
  var _a;
15084
14974
  const initialValue = React__default.useMemo(
15085
14975
  () => {
15086
14976
  var _a2, _b;
15087
- return ((_b = (_a2 = props.input.value) == null ? void 0 : _a2.children) == null ? void 0 : _b.length) ? props.input.value.children.map(helpers.normalize) : [{ type: "p", children: [{ type: "text", text: "" }] }];
14977
+ return ((_b = (_a2 = input.value) == null ? void 0 : _a2.children) == null ? void 0 : _b.length) ? input.value.children.map(helpers.normalize) : [{ type: "p", children: [{ type: "text", text: "" }] }];
15088
14978
  },
15089
14979
  []
15090
14980
  );
@@ -15112,7 +15002,7 @@ const RichEditor = (props) => {
15112
15002
  ),
15113
15003
  []
15114
15004
  );
15115
- const tempId = [props.tinaForm.id, props.input.name].join(".");
15005
+ const tempId = [tinaForm.id, input.name].join(".");
15116
15006
  const id = React__default.useMemo(() => uuid() + tempId, [tempId]);
15117
15007
  const ref = React__default.useRef(null);
15118
15008
  React__default.useEffect(() => {
@@ -15122,13 +15012,13 @@ const RichEditor = (props) => {
15122
15012
  const plateElement = (_a2 = ref.current) == null ? void 0 : _a2.querySelector(
15123
15013
  '[role="textbox"]'
15124
15014
  );
15125
- if (props.field.experimental_focusIntent && plateElement) {
15015
+ if (field.experimental_focusIntent && plateElement) {
15126
15016
  if (plateElement)
15127
15017
  plateElement.focus();
15128
15018
  }
15129
15019
  }, 100);
15130
15020
  }
15131
- }, [props.field.experimental_focusIntent, ref]);
15021
+ }, [field.experimental_focusIntent, ref]);
15132
15022
  return /* @__PURE__ */ React__default.createElement("div", { ref }, /* @__PURE__ */ React__default.createElement(
15133
15023
  Plate,
15134
15024
  {
@@ -15136,21 +15026,22 @@ const RichEditor = (props) => {
15136
15026
  initialValue,
15137
15027
  plugins: plugins$2,
15138
15028
  onChange: (value) => {
15139
- props.input.onChange({
15029
+ input.onChange({
15140
15030
  type: "root",
15141
- children: value
15031
+ children: value,
15032
+ embedCode: input.value.embedCode
15142
15033
  });
15143
15034
  }
15144
15035
  },
15145
15036
  /* @__PURE__ */ React__default.createElement(TooltipProvider, null, /* @__PURE__ */ React__default.createElement(
15146
15037
  ToolbarProvider,
15147
15038
  {
15148
- tinaForm: props.tinaForm,
15149
- templates: props.field.templates,
15150
- overrides: (_a = props.field) == null ? void 0 : _a.toolbarOverride
15039
+ tinaForm,
15040
+ templates: field.templates,
15041
+ overrides: (field == null ? void 0 : field.toolbarOverride) ? field.toolbarOverride : field.overrides
15151
15042
  },
15152
15043
  /* @__PURE__ */ React__default.createElement(FixedToolbar, null, /* @__PURE__ */ React__default.createElement(FixedToolbarButtons, null)),
15153
- /* @__PURE__ */ React__default.createElement(FloatingToolbar, null, /* @__PURE__ */ React__default.createElement(FloatingToolbarButtons, null))
15044
+ ((_a = field == null ? void 0 : field.overrides) == null ? void 0 : _a.showFloatingToolbar) !== false ? /* @__PURE__ */ React__default.createElement(FloatingToolbar, null, /* @__PURE__ */ React__default.createElement(FloatingToolbarButtons, null)) : null
15154
15045
  ), /* @__PURE__ */ React__default.createElement(Editor, null))
15155
15046
  ));
15156
15047
  };
@@ -30104,6 +29995,7 @@ class TinaAdminApi {
30104
29995
  relativePath
30105
29996
  filename
30106
29997
  extension
29998
+ hasReferences
30107
29999
  }
30108
30000
  }
30109
30001
  }
@@ -30195,6 +30087,9 @@ class TinaAdminApi {
30195
30087
  document(collection:$collection, relativePath:$relativePath) {
30196
30088
  ... on Document {
30197
30089
  _values
30090
+ _sys {
30091
+ hasReferences
30092
+ }
30198
30093
  }
30199
30094
  }
30200
30095
  }`;
@@ -31921,6 +31816,23 @@ const CollectionListPage = () => {
31921
31816
  DeleteModal,
31922
31817
  {
31923
31818
  filename: vars.relativePath,
31819
+ checkRefsFunc: async () => {
31820
+ var _a2, _b2;
31821
+ try {
31822
+ const doc = await admin.fetchDocument(
31823
+ collection.name,
31824
+ vars.relativePath,
31825
+ true
31826
+ );
31827
+ return (_b2 = (_a2 = doc == null ? void 0 : doc.document) == null ? void 0 : _a2._sys) == null ? void 0 : _b2.hasReferences;
31828
+ } catch (error) {
31829
+ cms.alerts.error(
31830
+ "Document was not found, ask a developer for help or check the console for an error message"
31831
+ );
31832
+ console.error(error);
31833
+ throw error;
31834
+ }
31835
+ },
31924
31836
  deleteFunc: async () => {
31925
31837
  try {
31926
31838
  await admin.deleteDocument(vars);
@@ -31929,6 +31841,12 @@ const CollectionListPage = () => {
31929
31841
  );
31930
31842
  reFetchCollection();
31931
31843
  } catch (error) {
31844
+ if (error.message.indexOf("has references")) {
31845
+ cms.alerts.error(
31846
+ error.message.split("\n ").filter(Boolean)[1]
31847
+ );
31848
+ return;
31849
+ }
31932
31850
  cms.alerts.warn(
31933
31851
  "Document was not deleted, ask a developer for help or check the console for an error message"
31934
31852
  );
@@ -31980,6 +31898,12 @@ const CollectionListPage = () => {
31980
31898
  cms.alerts.info("Document was successfully renamed");
31981
31899
  reFetchCollection();
31982
31900
  } catch (error) {
31901
+ if (error.message.indexOf("has references")) {
31902
+ cms.alerts.error(
31903
+ error.message.split("\n ").filter(Boolean)[1]
31904
+ );
31905
+ return;
31906
+ }
31983
31907
  cms.alerts.warn(
31984
31908
  "Document was not renamed, ask a developer for help or check the console for an error message"
31985
31909
  );
@@ -32453,8 +32377,19 @@ const Breadcrumb = ({ folder, navigate, collectionName }) => {
32453
32377
  const NoDocumentsPlaceholder = () => {
32454
32378
  return /* @__PURE__ */ React__default.createElement("div", { className: "text-center px-5 py-3 flex flex-col items-center justify-center shadow border border-gray-100 bg-gray-50 border-b border-gray-200 w-full max-w-full rounded-lg" }, /* @__PURE__ */ React__default.createElement("p", { className: "text-base italic font-medium text-gray-300" }, "No documents found."));
32455
32379
  };
32456
- const DeleteModal = ({ close: close2, deleteFunc, filename }) => {
32457
- return /* @__PURE__ */ React__default.createElement(Modal, null, /* @__PURE__ */ React__default.createElement(PopupModal, null, /* @__PURE__ */ React__default.createElement(ModalHeader, { close: close2 }, "Delete ", filename), /* @__PURE__ */ React__default.createElement(ModalBody, { padded: true }, /* @__PURE__ */ React__default.createElement("p", null, `Are you sure you want to delete ${filename}?`)), /* @__PURE__ */ React__default.createElement(ModalActions, null, /* @__PURE__ */ React__default.createElement(Button$1, { style: { flexGrow: 2 }, onClick: close2 }, "Cancel"), /* @__PURE__ */ React__default.createElement(
32380
+ const DeleteModal = ({
32381
+ close: close2,
32382
+ deleteFunc,
32383
+ checkRefsFunc,
32384
+ filename
32385
+ }) => {
32386
+ const [hasRefs, setHasRefs] = React__default.useState();
32387
+ useEffect(() => {
32388
+ checkRefsFunc().then((result) => {
32389
+ setHasRefs(result);
32390
+ });
32391
+ }, [filename, checkRefsFunc]);
32392
+ return /* @__PURE__ */ React__default.createElement(Modal, null, /* @__PURE__ */ React__default.createElement(PopupModal, null, /* @__PURE__ */ React__default.createElement(ModalHeader, { close: close2 }, "Delete ", filename), /* @__PURE__ */ React__default.createElement(ModalBody, { padded: true }, /* @__PURE__ */ React__default.createElement("p", null, `Are you sure you want to delete ${filename}?${hasRefs ? " References to this document will also be deleted." : ""}`)), /* @__PURE__ */ React__default.createElement(ModalActions, null, /* @__PURE__ */ React__default.createElement(Button$1, { style: { flexGrow: 2 }, onClick: close2 }, "Cancel"), /* @__PURE__ */ React__default.createElement(
32458
32393
  Button$1,
32459
32394
  {
32460
32395
  style: { flexGrow: 3 },
@@ -33816,5 +33751,6 @@ export {
33816
33751
  useScreenPlugin,
33817
33752
  useTinaAuthRedirect,
33818
33753
  wrapFieldWithError,
33754
+ wrapFieldWithNoHeader,
33819
33755
  wrapFieldsWithMeta
33820
33756
  };