slate-react 0.73.0 → 0.74.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/dist/components/slate.d.ts.map +1 -1
- package/dist/hooks/use-slate-selector.d.ts +32 -0
- package/dist/hooks/use-slate-selector.d.ts.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.es.js +128 -4
- package/dist/index.es.js.map +1 -1
- package/dist/index.js +141 -2
- package/dist/index.js.map +1 -1
- package/dist/slate-react.js +141 -2
- package/dist/slate-react.min.js +1 -1
- package/package.json +1 -1
package/dist/slate-react.js
CHANGED
|
@@ -5060,6 +5060,137 @@
|
|
|
5060
5060
|
return React.useContext(FocusedContext);
|
|
5061
5061
|
};
|
|
5062
5062
|
|
|
5063
|
+
function isError(error) {
|
|
5064
|
+
return error instanceof Error;
|
|
5065
|
+
}
|
|
5066
|
+
/**
|
|
5067
|
+
* A React context for sharing the editor selector context in a way to control rerenders
|
|
5068
|
+
*/
|
|
5069
|
+
|
|
5070
|
+
|
|
5071
|
+
var SlateSelectorContext = /*#__PURE__*/React.createContext({});
|
|
5072
|
+
|
|
5073
|
+
var refEquality = function refEquality(a, b) {
|
|
5074
|
+
return a === b;
|
|
5075
|
+
};
|
|
5076
|
+
/**
|
|
5077
|
+
* use redux style selectors to prevent rerendering on every keystroke.
|
|
5078
|
+
* Bear in mind rerendering can only prevented if the returned value is a value type or for reference types (e.g. objects and arrays) add a custom equality function.
|
|
5079
|
+
*
|
|
5080
|
+
* Example:
|
|
5081
|
+
* ```
|
|
5082
|
+
* const isSelectionActive = useSlateSelector(editor => Boolean(editor.selection));
|
|
5083
|
+
* ```
|
|
5084
|
+
*/
|
|
5085
|
+
|
|
5086
|
+
|
|
5087
|
+
function useSlateSelector(selector) {
|
|
5088
|
+
var equalityFn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : refEquality;
|
|
5089
|
+
|
|
5090
|
+
var _useReducer = React.useReducer(function (s) {
|
|
5091
|
+
return s + 1;
|
|
5092
|
+
}, 0),
|
|
5093
|
+
_useReducer2 = _slicedToArray(_useReducer, 2),
|
|
5094
|
+
forceRender = _useReducer2[1];
|
|
5095
|
+
|
|
5096
|
+
var context = React.useContext(SlateSelectorContext);
|
|
5097
|
+
|
|
5098
|
+
if (!context) {
|
|
5099
|
+
throw new Error("The `useSlateSelector` hook must be used inside the <Slate> component's context.");
|
|
5100
|
+
}
|
|
5101
|
+
|
|
5102
|
+
var getSlate = context.getSlate,
|
|
5103
|
+
addEventListener = context.addEventListener;
|
|
5104
|
+
var latestSubscriptionCallbackError = React.useRef();
|
|
5105
|
+
var latestSelector = React.useRef(function () {
|
|
5106
|
+
return null;
|
|
5107
|
+
});
|
|
5108
|
+
var latestSelectedState = React.useRef(null);
|
|
5109
|
+
var selectedState;
|
|
5110
|
+
|
|
5111
|
+
try {
|
|
5112
|
+
if (selector !== latestSelector.current || latestSubscriptionCallbackError.current) {
|
|
5113
|
+
selectedState = selector(getSlate());
|
|
5114
|
+
} else {
|
|
5115
|
+
selectedState = latestSelectedState.current;
|
|
5116
|
+
}
|
|
5117
|
+
} catch (err) {
|
|
5118
|
+
if (latestSubscriptionCallbackError.current && isError(err)) {
|
|
5119
|
+
err.message += "\nThe error may be correlated with this previous error:\n".concat(latestSubscriptionCallbackError.current.stack, "\n\n");
|
|
5120
|
+
}
|
|
5121
|
+
|
|
5122
|
+
throw err;
|
|
5123
|
+
}
|
|
5124
|
+
|
|
5125
|
+
useIsomorphicLayoutEffect(function () {
|
|
5126
|
+
latestSelector.current = selector;
|
|
5127
|
+
latestSelectedState.current = selectedState;
|
|
5128
|
+
latestSubscriptionCallbackError.current = undefined;
|
|
5129
|
+
});
|
|
5130
|
+
useIsomorphicLayoutEffect(function () {
|
|
5131
|
+
function checkForUpdates() {
|
|
5132
|
+
try {
|
|
5133
|
+
var newSelectedState = latestSelector.current(getSlate());
|
|
5134
|
+
|
|
5135
|
+
if (equalityFn(newSelectedState, latestSelectedState.current)) {
|
|
5136
|
+
return;
|
|
5137
|
+
}
|
|
5138
|
+
|
|
5139
|
+
latestSelectedState.current = newSelectedState;
|
|
5140
|
+
} catch (err) {
|
|
5141
|
+
// we ignore all errors here, since when the component
|
|
5142
|
+
// is re-rendered, the selectors are called again, and
|
|
5143
|
+
// will throw again, if neither props nor store state
|
|
5144
|
+
// changed
|
|
5145
|
+
latestSubscriptionCallbackError.current = err;
|
|
5146
|
+
}
|
|
5147
|
+
|
|
5148
|
+
forceRender();
|
|
5149
|
+
}
|
|
5150
|
+
|
|
5151
|
+
var unsubscribe = addEventListener(checkForUpdates);
|
|
5152
|
+
checkForUpdates();
|
|
5153
|
+
return function () {
|
|
5154
|
+
return unsubscribe();
|
|
5155
|
+
};
|
|
5156
|
+
}, // don't rerender on equalityFn change since we want to be able to define it inline
|
|
5157
|
+
[addEventListener, getSlate]);
|
|
5158
|
+
return selectedState;
|
|
5159
|
+
}
|
|
5160
|
+
/**
|
|
5161
|
+
* Create selector context with editor updating on every editor change
|
|
5162
|
+
*/
|
|
5163
|
+
|
|
5164
|
+
function getSelectorContext(editor) {
|
|
5165
|
+
var eventListeners = React.useRef([]).current;
|
|
5166
|
+
var slateRef = React.useRef({
|
|
5167
|
+
editor: editor
|
|
5168
|
+
}).current;
|
|
5169
|
+
var onChange = React.useCallback(function (editor) {
|
|
5170
|
+
slateRef.editor = editor;
|
|
5171
|
+
eventListeners.forEach(function (listener) {
|
|
5172
|
+
return listener(editor);
|
|
5173
|
+
});
|
|
5174
|
+
}, []);
|
|
5175
|
+
var selectorContext = React.useMemo(function () {
|
|
5176
|
+
return {
|
|
5177
|
+
getSlate: function getSlate() {
|
|
5178
|
+
return slateRef.editor;
|
|
5179
|
+
},
|
|
5180
|
+
addEventListener: function addEventListener(callback) {
|
|
5181
|
+
eventListeners.push(callback);
|
|
5182
|
+
return function () {
|
|
5183
|
+
eventListeners.splice(eventListeners.indexOf(callback), 1);
|
|
5184
|
+
};
|
|
5185
|
+
}
|
|
5186
|
+
};
|
|
5187
|
+
}, [eventListeners, slateRef]);
|
|
5188
|
+
return {
|
|
5189
|
+
selectorContext: selectorContext,
|
|
5190
|
+
onChange: onChange
|
|
5191
|
+
};
|
|
5192
|
+
}
|
|
5193
|
+
|
|
5063
5194
|
var _excluded = ["editor", "children", "onChange", "value"];
|
|
5064
5195
|
/**
|
|
5065
5196
|
* A wrapper around the provider to handle `onChange` events, because the editor
|
|
@@ -5092,9 +5223,14 @@
|
|
|
5092
5223
|
context = _React$useState2[0],
|
|
5093
5224
|
setContext = _React$useState2[1];
|
|
5094
5225
|
|
|
5226
|
+
var _getSelectorContext = getSelectorContext(editor),
|
|
5227
|
+
selectorContext = _getSelectorContext.selectorContext,
|
|
5228
|
+
handleSelectorChange = _getSelectorContext.onChange;
|
|
5229
|
+
|
|
5095
5230
|
var onContextChange = React.useCallback(function () {
|
|
5096
5231
|
onChange(editor.children);
|
|
5097
5232
|
setContext([editor]);
|
|
5233
|
+
handleSelectorChange(editor);
|
|
5098
5234
|
}, [onChange]);
|
|
5099
5235
|
EDITOR_TO_ON_CHANGE.set(editor, onContextChange);
|
|
5100
5236
|
React.useEffect(function () {
|
|
@@ -5130,13 +5266,15 @@
|
|
|
5130
5266
|
document.removeEventListener('blur', fn, true);
|
|
5131
5267
|
};
|
|
5132
5268
|
}, []);
|
|
5133
|
-
return /*#__PURE__*/React__default['default'].createElement(
|
|
5269
|
+
return /*#__PURE__*/React__default['default'].createElement(SlateSelectorContext.Provider, {
|
|
5270
|
+
value: selectorContext
|
|
5271
|
+
}, /*#__PURE__*/React__default['default'].createElement(SlateContext.Provider, {
|
|
5134
5272
|
value: context
|
|
5135
5273
|
}, /*#__PURE__*/React__default['default'].createElement(EditorContext.Provider, {
|
|
5136
5274
|
value: editor
|
|
5137
5275
|
}, /*#__PURE__*/React__default['default'].createElement(FocusedContext.Provider, {
|
|
5138
5276
|
value: isFocused
|
|
5139
|
-
}, children)));
|
|
5277
|
+
}, children))));
|
|
5140
5278
|
};
|
|
5141
5279
|
|
|
5142
5280
|
/**
|
|
@@ -32968,6 +33106,7 @@
|
|
|
32968
33106
|
exports.useReadOnly = useReadOnly;
|
|
32969
33107
|
exports.useSelected = useSelected;
|
|
32970
33108
|
exports.useSlate = useSlate;
|
|
33109
|
+
exports.useSlateSelector = useSlateSelector;
|
|
32971
33110
|
exports.useSlateStatic = useSlateStatic;
|
|
32972
33111
|
exports.withReact = withReact;
|
|
32973
33112
|
|