shelving 1.50.1 → 1.50.2

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.
@@ -33,8 +33,3 @@ import type { MarkupOptions, MarkupNode } from "./types.js";
33
33
  * @returns ReactNode, i.e. either a complete `ReactElement`, `null`, `undefined`, `string`, or an array of zero or more of those.
34
34
  */
35
35
  export declare function renderMarkup(content: string, options?: Partial<MarkupOptions>): MarkupNode;
36
- /**
37
- * Parse a text string as user-generated markup.
38
- * - Like `renderMarkup()` but only enables a subset of rules and applies `rel="nofollow ugc"` to all links.
39
- */
40
- export declare function renderUgcMarkup(content: string, options?: Partial<MarkupOptions>): MarkupNode;
package/markup/render.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /* eslint-disable no-param-reassign */
2
2
  import { sanitizeLines } from "../index.js";
3
- import { MARKUP_RULES, MARKUP_RULES_UGC } from "./rules.js";
3
+ import { MARKUP_RULES } from "./rules.js";
4
4
  /** Convert a string into an array of React nodes using a set of rules. */
5
5
  function renderString(content, options) {
6
6
  // If there's no context return the unmodified string.
@@ -154,15 +154,3 @@ const defaults = {
154
154
  rel: undefined,
155
155
  schemes: ["http:", "https:"],
156
156
  };
157
- /**
158
- * Parse a text string as user-generated markup.
159
- * - Like `renderMarkup()` but only enables a subset of rules and applies `rel="nofollow ugc"` to all links.
160
- */
161
- export function renderUgcMarkup(content, options) {
162
- return renderString(sanitizeLines(content), { ...defaultsUgc, ...options });
163
- }
164
- const defaultsUgc = {
165
- ...defaults,
166
- rules: MARKUP_RULES_UGC,
167
- rel: "nofollow ugc",
168
- };
package/markup/rules.d.ts CHANGED
@@ -1,4 +1,115 @@
1
- import type { MarkupRule } from "./types.js";
1
+ import type { MarkupRule, MarkupRuleMatcher } from "./types.js";
2
+ export declare const getMarkupMatcher: (regexp: RegExp) => MarkupRuleMatcher;
3
+ export declare const getMarkupBlockMatcher: (middle?: string, end?: string, start?: string) => MarkupRuleMatcher;
4
+ export declare const getMarkupLineMatcher: (middle?: string, end?: string, start?: string) => MarkupRuleMatcher;
5
+ export declare const getMarkupWrapMatcher: (chars: string, middle?: string) => MarkupRuleMatcher;
6
+ /**
7
+ * Headings are single line only (don't allow multiline).
8
+ * - 1-6 hashes then 1+ spaces, then the title.
9
+ * - Same as Markdown syntax.
10
+ * - Markdown's underline syntax is not supported (for simplification).
11
+ */
12
+ export declare const HEADING_RULE: MarkupRule;
13
+ /**
14
+ * Horizontal rules
15
+ * - Same as Markdown syntax but also allows `•` bullet character (in addition to `-` dash, `+` plus, `*` asterisk, and `_` underscore).
16
+ * - Character must be repeated three (or more) times.
17
+ * - Character must be the same every time (can't mix)
18
+ * - Might have infinite number of spaces between the characters.
19
+ */
20
+ export declare const HORIZONTAL_RULE: MarkupRule;
21
+ export declare const UNORDERED_LIST_RULE: MarkupRule;
22
+ export declare const ORDERED_LIST_RULE: MarkupRule;
23
+ /**
24
+ * Blockquote block.
25
+ * - Same as Markdown's syntax.
26
+ * - Block continues until it finds a line that doesn't start with `>`
27
+ * - Quote indent symbol can be followed by zero or more spaces.
28
+ */
29
+ export declare const BLOCKQUOTE_RULE: MarkupRule;
30
+ /**
31
+ * Fenced code blocks
32
+ * - Same as Markdown syntax.
33
+ * - Closing fence must be exactly the same as the opening fence, and can be made of at least three "```" backticks or three `~~~` tildes.
34
+ * - If there's no closing fence the code block will run to the end of the current string.
35
+ * - Markdown-style four-space indent syntax is not supported (only fenced code, since it's easier to use).
36
+ */
37
+ export declare const FENCED_CODE_RULE: MarkupRule;
38
+ /**
39
+ * Paragraph.
40
+ * - When ordering rules, paragraph should go after other "block" context elements (because it has a very generous capture).
41
+ */
42
+ export declare const PARAGRAPH_RULE: MarkupRule;
43
+ /**
44
+ * Markdown-style link.
45
+ * - Link in standard Markdown format, e.g. `[http://google.com/maps](Google Maps)`
46
+ * - If no title is specified a cleaned up version of the URL will be used, e.g. `google.com/maps`
47
+ * - Does not need space before/after the link.
48
+ * - If link is not valid (using `new URL(url)` then unparsed text will be returned.
49
+ * - For security only `http://` or `https://` links will work (if invalid the unparsed text will be returned).
50
+ */
51
+ export declare const LINK_MARKUP: MarkupRule;
52
+ /**
53
+ * Autolinked URL starts with `http:` or `https:` and matches an unlimited number of non-space characters.
54
+ * - If followed by space and then text in `()` round or `[]` square brackets that will be used as the title, e.g. `http://google.com/maps (Google Maps)` or `http://google.com/maps [Google Maps]` (this syntax is from Todoist and maybe other things too).
55
+ * - If no title is specified a cleaned up version of the URL will be used, e.g. `google.com/maps`
56
+ * - If link is not valid (using `new URL(url)` then unparsed text will be returned.
57
+ * - For security only schemes that appear in the `options.schemes` will match (defaults to `http:` and `https:`).
58
+ */
59
+ export declare const AUTOLINK_RULE: MarkupRule;
60
+ /**
61
+ * Inline code.
62
+ * - Text surrounded by one or more "`" backtick tilde characters.
63
+ * - Unlike strong/emphasis first or last character of the element can be space, (e.g. `- abc -` will not work).
64
+ * - Closing characters must exactly match opening characters.
65
+ * - Same as Markdown syntax.
66
+ */
67
+ export declare const CODE_RULE: MarkupRule;
68
+ /**
69
+ * Inline strong.
70
+ * - Inline text wrapped in one or more `*` asterisks.
71
+ * - Must be surrounded by space (e.g. ` *abc* `) — so formatting cannot be applied inside a word (e.g. `a*b*c`).
72
+ * - Whitespace cannot be the first or last character of the element (e.g. `* abc *` will not work).
73
+ * - Closing characters must exactly match opening characters.
74
+ * - Different to Markdown: strong is always surrounded by `*asterisks*` and emphasis is always surrounded by `_underscores_` (strong isn't 'double emphasis').
75
+ */
76
+ export declare const STRONG_MARKUP: MarkupRule;
77
+ /**
78
+ * Inline emphasis.
79
+ * - Inline text wrapped in one or more `_` underscore symbols.
80
+ * - Works inside words (e.g. `magi_carp_carp`).
81
+ * - Whitespace cannot be the first or last character of the element (e.g. `_ abc _` will not work).
82
+ * - Closing characters must exactly match opening characters.
83
+ * - Different to Markdown: strong is always surrounded by `*asterisks*` and emphasis is always surrounded by `_underscores_` (strong isn't 'double emphasis').
84
+ */
85
+ export declare const EMPHASIS_RULE: MarkupRule;
86
+ /**
87
+ * Inserted text (`<ins>` tag),
88
+ * - Inline text wrapped in two or more `++` pluses.
89
+ * - Works inside words (e.g. `magi+karp+carp`).
90
+ * - Whitespace cannot be the first or last character of the element (e.g. `+ abc +` will not work).
91
+ * - Closing characters must exactly match opening characters.
92
+ * - Markdown doesn't have this.
93
+ */
94
+ export declare const INSERT_RULE: MarkupRule;
95
+ /**
96
+ * Deleted text (`<del>` tag),
97
+ * - Inline text wrapped in two or more `--` hyphens or `~~` tildes.
98
+ * - Works inside words (e.g. `magi--karp--carp`).
99
+ * - Whitespace cannot be the first or last character of the element (e.g. `-- abc --` will not work).
100
+ * - Closing characters must exactly match opening characters.
101
+ * - Markdown doesn't have this.
102
+ */
103
+ export declare const DELETE_RULE: MarkupRule;
104
+ /**
105
+ * Hard linebreak (`<br />` tag).
106
+ * - Any line break in a paragraph will become a hard `<br />` tag.
107
+ * - Different to Markdown:
108
+ * - Markdown needs two spaces at the end of a line, any line break in a paragraph will be a `<br />` tag (lines without two spaces are not joined together).
109
+ * - This is more intuitive (a linebreak becomes a linebreak is isn't silently ignored).
110
+ * - This works better with textareas that wrap text (since manually breaking up long lines is no longer necessary).
111
+ */
112
+ export declare const LINEBREAK_RULE: MarkupRule;
2
113
  /**
3
114
  * All markup rules.
4
115
  * - Syntax parsed by `renderMarkup()` is defined entirely by the list of rules (i.e. not by code).
@@ -9,5 +120,9 @@ import type { MarkupRule } from "./types.js";
9
120
  * - HTML tags and character entities are never allowed (our use cases generally require a locked-down subset of syntax).
10
121
  */
11
122
  export declare const MARKUP_RULES: MarkupRule[];
12
- /** Default markup rules for user-generated-content rendering. */
13
- export declare const MARKUP_RULES_UGC: MarkupRule[];
123
+ /** Subset of markup rules that work in a block context. */
124
+ export declare const MARKUP_RULES_BLOCK: MarkupRule[];
125
+ /** Subset of markup rules that work in an inline context. */
126
+ export declare const MARKUP_RULES_INLINE: MarkupRule[];
127
+ /** Subset of markup rules that are relevant for collapsed shortform content. */
128
+ export declare const MARKUP_RULES_SHORTFORM: MarkupRule[];
package/markup/rules.js CHANGED
@@ -11,10 +11,10 @@ const WORDS = `\\S(?:[\\s\\S]*?\\S)?`; // Run of text that starts and ends with
11
11
  // Regular expressions.
12
12
  const REPLACE_INDENT = /^ {1,2}/gm;
13
13
  // Regular expression makers.
14
- const getMatcher = regexp => content => content.match(regexp);
15
- const getBlockMatcher = (middle = BLOCK, end = BLOCK_END, start = BLOCK_START) => getMatcher(new RegExp(`(?:${start})${middle}(?:${end})`));
16
- const getLineMatcher = (middle = LINE, end = LINE_END, start = LINE_START) => getMatcher(new RegExp(`(?:${start})${middle}(?:${end})`));
17
- const getWrapMatcher = (chars, middle = WORDS) => {
14
+ export const getMarkupMatcher = regexp => content => content.match(regexp);
15
+ export const getMarkupBlockMatcher = (middle = BLOCK, end = BLOCK_END, start = BLOCK_START) => getMarkupMatcher(new RegExp(`(?:${start})${middle}(?:${end})`));
16
+ export const getMarkupLineMatcher = (middle = LINE, end = LINE_END, start = LINE_START) => getMarkupMatcher(new RegExp(`(?:${start})${middle}(?:${end})`));
17
+ export const getMarkupWrapMatcher = (chars, middle = WORDS) => {
18
18
  const regexp = new RegExp(`(${chars})(${middle})\\1`);
19
19
  return content => content.match(regexp);
20
20
  };
@@ -24,8 +24,8 @@ const getWrapMatcher = (chars, middle = WORDS) => {
24
24
  * - Same as Markdown syntax.
25
25
  * - Markdown's underline syntax is not supported (for simplification).
26
26
  */
27
- const HEADING = {
28
- match: getLineMatcher(`(#{1,6}) +(${LINE})`),
27
+ export const HEADING_RULE = {
28
+ match: getMarkupLineMatcher(`(#{1,6}) +(${LINE})`),
29
29
  render: ([, prefix = "", children = ""]) => ({ type: `h${prefix.length}`, key: null, props: { children } }),
30
30
  contexts: ["block"],
31
31
  childContext: "inline",
@@ -37,8 +37,8 @@ const HEADING = {
37
37
  * - Character must be the same every time (can't mix)
38
38
  * - Might have infinite number of spaces between the characters.
39
39
  */
40
- const HR = {
41
- match: getLineMatcher(`([${BULLETS}])(?: *\\1){2,}`),
40
+ export const HORIZONTAL_RULE = {
41
+ match: getMarkupLineMatcher(`([${BULLETS}])(?: *\\1){2,}`),
42
42
  render: () => ({ type: "hr", key: null, props: {} }),
43
43
  contexts: ["block"],
44
44
  };
@@ -50,8 +50,8 @@ const HR = {
50
50
  * - Second-level list can be indented with 1-2 spaces.
51
51
  */
52
52
  const UNORDERED = `[${BULLETS}] +`; // Anything that can be a bullet (used for unordered lists and horizontal rules).
53
- const UL = {
54
- match: getBlockMatcher(`${UNORDERED}(${BLOCK})`),
53
+ export const UNORDERED_LIST_RULE = {
54
+ match: getMarkupBlockMatcher(`${UNORDERED}(${BLOCK})`),
55
55
  render: ([, list = ""]) => {
56
56
  const children = list.split(SPLIT_UL_ITEMS).map(mapUnorderedItem);
57
57
  return { type: "ul", key: null, props: { children } };
@@ -70,8 +70,8 @@ const mapUnorderedItem = (item, key) => {
70
70
  * - Second-level list can be indented with 1-3 spaces.
71
71
  */
72
72
  const ORDERED = "[0-9]+[.):] +"; // Number for a numbered list (e.g. `1.` or `2)` or `3:`)
73
- const OL = {
74
- match: getBlockMatcher(`(${ORDERED}${BLOCK})`),
73
+ export const ORDERED_LIST_RULE = {
74
+ match: getMarkupBlockMatcher(`(${ORDERED}${BLOCK})`),
75
75
  render: ([, list = ""]) => {
76
76
  const children = list.split(SPLIT_OL_ITEMS).map(mapOrderedItem);
77
77
  return { type: "ol", key: null, props: { children } };
@@ -95,8 +95,8 @@ const mapOrderedItem = (item, key) => {
95
95
  * - Block continues until it finds a line that doesn't start with `>`
96
96
  * - Quote indent symbol can be followed by zero or more spaces.
97
97
  */
98
- const BLOCKQUOTE = {
99
- match: getLineMatcher(`(>${LINE}(?:\\n>${LINE})*)`),
98
+ export const BLOCKQUOTE_RULE = {
99
+ match: getMarkupLineMatcher(`(>${LINE}(?:\\n>${LINE})*)`),
100
100
  render: ([, quote = ""]) => ({
101
101
  type: "blockquote",
102
102
  key: null,
@@ -113,9 +113,9 @@ const BLOCKQUOTE_LINES = /^>/gm;
113
113
  * - If there's no closing fence the code block will run to the end of the current string.
114
114
  * - Markdown-style four-space indent syntax is not supported (only fenced code, since it's easier to use).
115
115
  */
116
- const FENCED = {
116
+ export const FENCED_CODE_RULE = {
117
117
  // Matcher has its own end that only stops when it reaches a matching closing fence or the end of the string.
118
- match: getBlockMatcher(`(\`{3,}|~{3,}) *(${LINE})\\n(${BLOCK})`, `\\n\\1\\n+|\\n\\1$|$`),
118
+ match: getMarkupBlockMatcher(`(\`{3,}|~{3,}) *(${LINE})\\n(${BLOCK})`, `\\n\\1\\n+|\\n\\1$|$`),
119
119
  render: ([, , file, children]) => ({
120
120
  type: "pre",
121
121
  key: null,
@@ -133,8 +133,8 @@ const FENCED = {
133
133
  * Paragraph.
134
134
  * - When ordering rules, paragraph should go after other "block" context elements (because it has a very generous capture).
135
135
  */
136
- const PARAGRAPH = {
137
- match: getBlockMatcher(` *(${BLOCK})`),
136
+ export const PARAGRAPH_RULE = {
137
+ match: getMarkupBlockMatcher(` *(${BLOCK})`),
138
138
  render: ([, children]) => ({ type: `p`, key: null, props: { children } }),
139
139
  contexts: ["block"],
140
140
  childContext: "inline",
@@ -148,7 +148,7 @@ const PARAGRAPH = {
148
148
  * - If link is not valid (using `new URL(url)` then unparsed text will be returned.
149
149
  * - For security only `http://` or `https://` links will work (if invalid the unparsed text will be returned).
150
150
  */
151
- const LINK = {
151
+ export const LINK_MARKUP = {
152
152
  // Custom matcher to check the URL against the allowed schemes.
153
153
  match: (content, { schemes, url: base }) => {
154
154
  const matches = content.match(MATCH_LINK);
@@ -178,7 +178,7 @@ const MATCH_LINK = /\[([^\]]*?)\]\(([^)]*?)\)/;
178
178
  * - If link is not valid (using `new URL(url)` then unparsed text will be returned.
179
179
  * - For security only schemes that appear in the `options.schemes` will match (defaults to `http:` and `https:`).
180
180
  */
181
- const AUTOLINK = {
181
+ export const AUTOLINK_RULE = {
182
182
  // Custom matcher to check the URL against the allowed schemes.
183
183
  match: (content, { schemes, url: base }) => {
184
184
  const matches = content.match(MATCH_AUTOLINK);
@@ -192,7 +192,7 @@ const AUTOLINK = {
192
192
  }
193
193
  }
194
194
  },
195
- render: LINK.render,
195
+ render: LINK_MARKUP.render,
196
196
  contexts: ["inline", "list"],
197
197
  childContext: "link",
198
198
  };
@@ -204,8 +204,8 @@ const MATCH_AUTOLINK = /([a-z][a-z0-9-]*[a-z0-9]:\S+)(?: +(?:\(([^)]*?)\)|\[([^\
204
204
  * - Closing characters must exactly match opening characters.
205
205
  * - Same as Markdown syntax.
206
206
  */
207
- const CODE = {
208
- match: getWrapMatcher("`+", BLOCK),
207
+ export const CODE_RULE = {
208
+ match: getMarkupWrapMatcher("`+", BLOCK),
209
209
  render: ([, , children]) => ({ type: "code", key: null, props: { children } }),
210
210
  contexts: ["inline", "list"],
211
211
  priority: 10, // Higher priority than other inlines so it matches first before e.g. `strong` or `em` (from CommonMark spec: "Code span backticks have higher precedence than any other inline constructs except HTML tags and autolinks.")
@@ -218,8 +218,8 @@ const CODE = {
218
218
  * - Closing characters must exactly match opening characters.
219
219
  * - Different to Markdown: strong is always surrounded by `*asterisks*` and emphasis is always surrounded by `_underscores_` (strong isn't 'double emphasis').
220
220
  */
221
- const STRONG = {
222
- match: getWrapMatcher("\\*+"),
221
+ export const STRONG_MARKUP = {
222
+ match: getMarkupWrapMatcher("\\*+"),
223
223
  render: ([, , children]) => ({ type: "strong", key: null, props: { children } }),
224
224
  contexts: ["inline", "list", "link"],
225
225
  childContext: "inline",
@@ -232,36 +232,36 @@ const STRONG = {
232
232
  * - Closing characters must exactly match opening characters.
233
233
  * - Different to Markdown: strong is always surrounded by `*asterisks*` and emphasis is always surrounded by `_underscores_` (strong isn't 'double emphasis').
234
234
  */
235
- const EM = {
236
- match: getWrapMatcher("_+"),
235
+ export const EMPHASIS_RULE = {
236
+ match: getMarkupWrapMatcher("_+"),
237
237
  render: ([, , children]) => ({ type: "em", key: null, props: { children } }),
238
238
  contexts: ["inline", "list", "link"],
239
239
  childContext: "inline",
240
240
  };
241
241
  /**
242
242
  * Inserted text (`<ins>` tag),
243
- * - Inline text wrapped in one or more `+` pluses.
243
+ * - Inline text wrapped in two or more `++` pluses.
244
244
  * - Works inside words (e.g. `magi+karp+carp`).
245
245
  * - Whitespace cannot be the first or last character of the element (e.g. `+ abc +` will not work).
246
246
  * - Closing characters must exactly match opening characters.
247
247
  * - Markdown doesn't have this.
248
248
  */
249
- const INS = {
250
- match: getWrapMatcher("\\++"),
249
+ export const INSERT_RULE = {
250
+ match: getMarkupWrapMatcher("\\+\\++"),
251
251
  render: ([, , children]) => ({ type: "ins", key: null, props: { children } }),
252
252
  contexts: ["inline", "list", "link"],
253
253
  childContext: "inline",
254
254
  };
255
255
  /**
256
256
  * Deleted text (`<del>` tag),
257
- * - Inline text wrapped in one or more `~` tildes.
258
- * - Works inside words (e.g. `magi~karp~carp`).
259
- * - Whitespace cannot be the first or last character of the element (e.g. `~ abc ~` will not work).
257
+ * - Inline text wrapped in two or more `--` hyphens or `~~` tildes.
258
+ * - Works inside words (e.g. `magi--karp--carp`).
259
+ * - Whitespace cannot be the first or last character of the element (e.g. `-- abc --` will not work).
260
260
  * - Closing characters must exactly match opening characters.
261
261
  * - Markdown doesn't have this.
262
262
  */
263
- const DEL = {
264
- match: getWrapMatcher("~+"),
263
+ export const DELETE_RULE = {
264
+ match: getMarkupWrapMatcher("--+|~~+"),
265
265
  render: ([, , children]) => ({ type: "del", key: null, props: { children } }),
266
266
  contexts: ["inline", "list", "link"],
267
267
  childContext: "inline",
@@ -274,8 +274,8 @@ const DEL = {
274
274
  * - This is more intuitive (a linebreak becomes a linebreak is isn't silently ignored).
275
275
  * - This works better with textareas that wrap text (since manually breaking up long lines is no longer necessary).
276
276
  */
277
- const BR = {
278
- match: getMatcher(/\n/),
277
+ export const LINEBREAK_RULE = {
278
+ match: getMarkupMatcher(/\n/),
279
279
  render: () => ({ type: "br", key: null, props: {} }),
280
280
  contexts: ["inline", "list", "link"],
281
281
  childContext: "inline",
@@ -289,6 +289,55 @@ const BR = {
289
289
  * 3. more aligned with smaller textboxes and editors that have line wrapping
290
290
  * - HTML tags and character entities are never allowed (our use cases generally require a locked-down subset of syntax).
291
291
  */
292
- export const MARKUP_RULES = [HEADING, HR, UL, OL, BLOCKQUOTE, FENCED, PARAGRAPH, LINK, AUTOLINK, CODE, STRONG, EM, INS, DEL, BR];
293
- /** Default markup rules for user-generated-content rendering. */
294
- export const MARKUP_RULES_UGC = [UL, OL, PARAGRAPH, LINK, AUTOLINK, CODE, STRONG, EM, INS, DEL, BR];
292
+ export const MARKUP_RULES = [
293
+ HEADING_RULE,
294
+ HORIZONTAL_RULE,
295
+ UNORDERED_LIST_RULE,
296
+ ORDERED_LIST_RULE,
297
+ BLOCKQUOTE_RULE,
298
+ FENCED_CODE_RULE,
299
+ PARAGRAPH_RULE,
300
+ LINK_MARKUP,
301
+ AUTOLINK_RULE,
302
+ CODE_RULE,
303
+ STRONG_MARKUP,
304
+ EMPHASIS_RULE,
305
+ INSERT_RULE,
306
+ DELETE_RULE,
307
+ LINEBREAK_RULE,
308
+ ];
309
+ /** Subset of markup rules that work in a block context. */
310
+ export const MARKUP_RULES_BLOCK = [
311
+ HEADING_RULE,
312
+ HORIZONTAL_RULE,
313
+ UNORDERED_LIST_RULE,
314
+ ORDERED_LIST_RULE,
315
+ BLOCKQUOTE_RULE,
316
+ FENCED_CODE_RULE,
317
+ PARAGRAPH_RULE,
318
+ ];
319
+ /** Subset of markup rules that work in an inline context. */
320
+ export const MARKUP_RULES_INLINE = [
321
+ LINK_MARKUP,
322
+ AUTOLINK_RULE,
323
+ CODE_RULE,
324
+ STRONG_MARKUP,
325
+ EMPHASIS_RULE,
326
+ INSERT_RULE,
327
+ DELETE_RULE,
328
+ LINEBREAK_RULE,
329
+ ];
330
+ /** Subset of markup rules that are relevant for collapsed shortform content. */
331
+ export const MARKUP_RULES_SHORTFORM = [
332
+ UNORDERED_LIST_RULE,
333
+ ORDERED_LIST_RULE,
334
+ PARAGRAPH_RULE,
335
+ LINK_MARKUP,
336
+ AUTOLINK_RULE,
337
+ CODE_RULE,
338
+ STRONG_MARKUP,
339
+ EMPHASIS_RULE,
340
+ INSERT_RULE,
341
+ DELETE_RULE,
342
+ LINEBREAK_RULE,
343
+ ];
package/package.json CHANGED
@@ -11,7 +11,7 @@
11
11
  "state-management",
12
12
  "query-builder"
13
13
  ],
14
- "version": "1.50.1",
14
+ "version": "1.50.2",
15
15
  "repository": "https://github.com/dhoulb/shelving",
16
16
  "author": "Dave Houlbrooke <dave@shax.com>",
17
17
  "license": "0BSD",