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/index.js
CHANGED
|
@@ -4150,6 +4150,137 @@ var useFocused = function useFocused() {
|
|
|
4150
4150
|
return React.useContext(FocusedContext);
|
|
4151
4151
|
};
|
|
4152
4152
|
|
|
4153
|
+
function isError(error) {
|
|
4154
|
+
return error instanceof Error;
|
|
4155
|
+
}
|
|
4156
|
+
/**
|
|
4157
|
+
* A React context for sharing the editor selector context in a way to control rerenders
|
|
4158
|
+
*/
|
|
4159
|
+
|
|
4160
|
+
|
|
4161
|
+
var SlateSelectorContext = /*#__PURE__*/React.createContext({});
|
|
4162
|
+
|
|
4163
|
+
var refEquality = function refEquality(a, b) {
|
|
4164
|
+
return a === b;
|
|
4165
|
+
};
|
|
4166
|
+
/**
|
|
4167
|
+
* use redux style selectors to prevent rerendering on every keystroke.
|
|
4168
|
+
* 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.
|
|
4169
|
+
*
|
|
4170
|
+
* Example:
|
|
4171
|
+
* ```
|
|
4172
|
+
* const isSelectionActive = useSlateSelector(editor => Boolean(editor.selection));
|
|
4173
|
+
* ```
|
|
4174
|
+
*/
|
|
4175
|
+
|
|
4176
|
+
|
|
4177
|
+
function useSlateSelector(selector) {
|
|
4178
|
+
var equalityFn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : refEquality;
|
|
4179
|
+
|
|
4180
|
+
var _useReducer = React.useReducer(function (s) {
|
|
4181
|
+
return s + 1;
|
|
4182
|
+
}, 0),
|
|
4183
|
+
_useReducer2 = _slicedToArray(_useReducer, 2),
|
|
4184
|
+
forceRender = _useReducer2[1];
|
|
4185
|
+
|
|
4186
|
+
var context = React.useContext(SlateSelectorContext);
|
|
4187
|
+
|
|
4188
|
+
if (!context) {
|
|
4189
|
+
throw new Error("The `useSlateSelector` hook must be used inside the <Slate> component's context.");
|
|
4190
|
+
}
|
|
4191
|
+
|
|
4192
|
+
var getSlate = context.getSlate,
|
|
4193
|
+
addEventListener = context.addEventListener;
|
|
4194
|
+
var latestSubscriptionCallbackError = React.useRef();
|
|
4195
|
+
var latestSelector = React.useRef(function () {
|
|
4196
|
+
return null;
|
|
4197
|
+
});
|
|
4198
|
+
var latestSelectedState = React.useRef(null);
|
|
4199
|
+
var selectedState;
|
|
4200
|
+
|
|
4201
|
+
try {
|
|
4202
|
+
if (selector !== latestSelector.current || latestSubscriptionCallbackError.current) {
|
|
4203
|
+
selectedState = selector(getSlate());
|
|
4204
|
+
} else {
|
|
4205
|
+
selectedState = latestSelectedState.current;
|
|
4206
|
+
}
|
|
4207
|
+
} catch (err) {
|
|
4208
|
+
if (latestSubscriptionCallbackError.current && isError(err)) {
|
|
4209
|
+
err.message += "\nThe error may be correlated with this previous error:\n".concat(latestSubscriptionCallbackError.current.stack, "\n\n");
|
|
4210
|
+
}
|
|
4211
|
+
|
|
4212
|
+
throw err;
|
|
4213
|
+
}
|
|
4214
|
+
|
|
4215
|
+
useIsomorphicLayoutEffect(function () {
|
|
4216
|
+
latestSelector.current = selector;
|
|
4217
|
+
latestSelectedState.current = selectedState;
|
|
4218
|
+
latestSubscriptionCallbackError.current = undefined;
|
|
4219
|
+
});
|
|
4220
|
+
useIsomorphicLayoutEffect(function () {
|
|
4221
|
+
function checkForUpdates() {
|
|
4222
|
+
try {
|
|
4223
|
+
var newSelectedState = latestSelector.current(getSlate());
|
|
4224
|
+
|
|
4225
|
+
if (equalityFn(newSelectedState, latestSelectedState.current)) {
|
|
4226
|
+
return;
|
|
4227
|
+
}
|
|
4228
|
+
|
|
4229
|
+
latestSelectedState.current = newSelectedState;
|
|
4230
|
+
} catch (err) {
|
|
4231
|
+
// we ignore all errors here, since when the component
|
|
4232
|
+
// is re-rendered, the selectors are called again, and
|
|
4233
|
+
// will throw again, if neither props nor store state
|
|
4234
|
+
// changed
|
|
4235
|
+
latestSubscriptionCallbackError.current = err;
|
|
4236
|
+
}
|
|
4237
|
+
|
|
4238
|
+
forceRender();
|
|
4239
|
+
}
|
|
4240
|
+
|
|
4241
|
+
var unsubscribe = addEventListener(checkForUpdates);
|
|
4242
|
+
checkForUpdates();
|
|
4243
|
+
return function () {
|
|
4244
|
+
return unsubscribe();
|
|
4245
|
+
};
|
|
4246
|
+
}, // don't rerender on equalityFn change since we want to be able to define it inline
|
|
4247
|
+
[addEventListener, getSlate]);
|
|
4248
|
+
return selectedState;
|
|
4249
|
+
}
|
|
4250
|
+
/**
|
|
4251
|
+
* Create selector context with editor updating on every editor change
|
|
4252
|
+
*/
|
|
4253
|
+
|
|
4254
|
+
function getSelectorContext(editor) {
|
|
4255
|
+
var eventListeners = React.useRef([]).current;
|
|
4256
|
+
var slateRef = React.useRef({
|
|
4257
|
+
editor: editor
|
|
4258
|
+
}).current;
|
|
4259
|
+
var onChange = React.useCallback(function (editor) {
|
|
4260
|
+
slateRef.editor = editor;
|
|
4261
|
+
eventListeners.forEach(function (listener) {
|
|
4262
|
+
return listener(editor);
|
|
4263
|
+
});
|
|
4264
|
+
}, []);
|
|
4265
|
+
var selectorContext = React.useMemo(function () {
|
|
4266
|
+
return {
|
|
4267
|
+
getSlate: function getSlate() {
|
|
4268
|
+
return slateRef.editor;
|
|
4269
|
+
},
|
|
4270
|
+
addEventListener: function addEventListener(callback) {
|
|
4271
|
+
eventListeners.push(callback);
|
|
4272
|
+
return function () {
|
|
4273
|
+
eventListeners.splice(eventListeners.indexOf(callback), 1);
|
|
4274
|
+
};
|
|
4275
|
+
}
|
|
4276
|
+
};
|
|
4277
|
+
}, [eventListeners, slateRef]);
|
|
4278
|
+
return {
|
|
4279
|
+
selectorContext: selectorContext,
|
|
4280
|
+
onChange: onChange
|
|
4281
|
+
};
|
|
4282
|
+
}
|
|
4283
|
+
|
|
4153
4284
|
var _excluded = ["editor", "children", "onChange", "value"];
|
|
4154
4285
|
/**
|
|
4155
4286
|
* A wrapper around the provider to handle `onChange` events, because the editor
|
|
@@ -4182,9 +4313,14 @@ var Slate = function Slate(props) {
|
|
|
4182
4313
|
context = _React$useState2[0],
|
|
4183
4314
|
setContext = _React$useState2[1];
|
|
4184
4315
|
|
|
4316
|
+
var _getSelectorContext = getSelectorContext(editor),
|
|
4317
|
+
selectorContext = _getSelectorContext.selectorContext,
|
|
4318
|
+
handleSelectorChange = _getSelectorContext.onChange;
|
|
4319
|
+
|
|
4185
4320
|
var onContextChange = React.useCallback(function () {
|
|
4186
4321
|
onChange(editor.children);
|
|
4187
4322
|
setContext([editor]);
|
|
4323
|
+
handleSelectorChange(editor);
|
|
4188
4324
|
}, [onChange]);
|
|
4189
4325
|
EDITOR_TO_ON_CHANGE.set(editor, onContextChange);
|
|
4190
4326
|
React.useEffect(function () {
|
|
@@ -4220,13 +4356,15 @@ var Slate = function Slate(props) {
|
|
|
4220
4356
|
document.removeEventListener('blur', fn, true);
|
|
4221
4357
|
};
|
|
4222
4358
|
}, []);
|
|
4223
|
-
return /*#__PURE__*/React__default['default'].createElement(
|
|
4359
|
+
return /*#__PURE__*/React__default['default'].createElement(SlateSelectorContext.Provider, {
|
|
4360
|
+
value: selectorContext
|
|
4361
|
+
}, /*#__PURE__*/React__default['default'].createElement(SlateContext.Provider, {
|
|
4224
4362
|
value: context
|
|
4225
4363
|
}, /*#__PURE__*/React__default['default'].createElement(EditorContext.Provider, {
|
|
4226
4364
|
value: editor
|
|
4227
4365
|
}, /*#__PURE__*/React__default['default'].createElement(FocusedContext.Provider, {
|
|
4228
4366
|
value: isFocused
|
|
4229
|
-
}, children)));
|
|
4367
|
+
}, children))));
|
|
4230
4368
|
};
|
|
4231
4369
|
|
|
4232
4370
|
/**
|
|
@@ -4634,6 +4772,7 @@ exports.useFocused = useFocused;
|
|
|
4634
4772
|
exports.useReadOnly = useReadOnly;
|
|
4635
4773
|
exports.useSelected = useSelected;
|
|
4636
4774
|
exports.useSlate = useSlate;
|
|
4775
|
+
exports.useSlateSelector = useSlateSelector;
|
|
4637
4776
|
exports.useSlateStatic = useSlateStatic;
|
|
4638
4777
|
exports.withReact = withReact;
|
|
4639
4778
|
//# sourceMappingURL=index.js.map
|