@portabletext/plugin-typography 8.0.43 → 8.0.45

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.d.ts CHANGED
@@ -1,24 +1,5 @@
1
- import type {EditorContext} from '@portabletext/editor'
2
- import type {EditorSchema} from '@portabletext/editor'
3
- import {InputRule} from '@portabletext/plugin-input-rule'
4
- import {InputRuleGuard} from '@portabletext/plugin-input-rule'
5
- import {JSX} from 'react'
6
-
7
- /**
8
- * @public
9
- */
10
- export declare const closingDoubleQuoteRule: InputRule<true>
11
-
12
- /**
13
- * @public
14
- */
15
- export declare const closingSingleQuoteRule: InputRule<true>
16
-
17
- /**
18
- * @public
19
- */
20
- export declare const copyrightRule: InputRule<true>
21
-
1
+ import { InputRule, InputRuleGuard } from "@portabletext/plugin-input-rule";
2
+ import { EditorContext, EditorSchema } from "@portabletext/editor";
22
3
  /**
23
4
  * @public
24
5
  * Create an `InputRuleGuard` that can prevent the rule from running inside
@@ -33,247 +14,198 @@ export declare const copyrightRule: InputRule<true>
33
14
  * <TypographyPlugin guard={guard} />
34
15
  * ```
35
16
  */
36
- export declare function createDecoratorGuard(config: {
37
- decorators: ({
38
- context,
39
- }: {
40
- context: Pick<EditorContext, 'schema'>
41
- }) => Array<EditorSchema['decorators'][number]['name']>
42
- }): InputRuleGuard
43
-
44
- declare const defaultRuleConfig: readonly [
45
- {
46
- readonly name: 'emDash'
47
- readonly rule: InputRule<true>
48
- readonly state: 'on'
49
- },
50
- {
51
- readonly name: 'ellipsis'
52
- readonly rule: InputRule<true>
53
- readonly state: 'on'
54
- },
55
- {
56
- readonly name: 'openingDoubleQuote'
57
- readonly rule: InputRule<true>
58
- readonly state: 'on'
59
- },
60
- {
61
- readonly name: 'closingDoubleQuote'
62
- readonly rule: InputRule<true>
63
- readonly state: 'on'
64
- },
65
- {
66
- readonly name: 'openingSingleQuote'
67
- readonly rule: InputRule<true>
68
- readonly state: 'on'
69
- },
70
- {
71
- readonly name: 'closingSingleQuote'
72
- readonly rule: InputRule<true>
73
- readonly state: 'on'
74
- },
75
- {
76
- readonly name: 'leftArrow'
77
- readonly rule: InputRule<true>
78
- readonly state: 'on'
79
- },
80
- {
81
- readonly name: 'rightArrow'
82
- readonly rule: InputRule<true>
83
- readonly state: 'on'
84
- },
85
- {
86
- readonly name: 'copyright'
87
- readonly rule: InputRule<true>
88
- readonly state: 'on'
89
- },
90
- {
91
- readonly name: 'trademark'
92
- readonly rule: InputRule<true>
93
- readonly state: 'on'
94
- },
95
- {
96
- readonly name: 'servicemark'
97
- readonly rule: InputRule<true>
98
- readonly state: 'on'
99
- },
100
- {
101
- readonly name: 'registeredTrademark'
102
- readonly rule: InputRule<true>
103
- readonly state: 'on'
104
- },
105
- {
106
- readonly name: 'oneHalf'
107
- readonly rule: InputRule<true>
108
- readonly state: 'off'
109
- },
110
- {
111
- readonly name: 'plusMinus'
112
- readonly rule: InputRule<true>
113
- readonly state: 'off'
114
- },
115
- {
116
- readonly name: 'laquo'
117
- readonly rule: InputRule<true>
118
- readonly state: 'off'
119
- },
120
- {
121
- readonly name: 'notEqual'
122
- readonly rule: InputRule<true>
123
- readonly state: 'off'
124
- },
125
- {
126
- readonly name: 'raquo'
127
- readonly rule: InputRule<true>
128
- readonly state: 'off'
129
- },
130
- {
131
- readonly name: 'multiplication'
132
- readonly rule: InputRule<true>
133
- readonly state: 'off'
134
- },
135
- {
136
- readonly name: 'superscriptTwo'
137
- readonly rule: InputRule<true>
138
- readonly state: 'off'
139
- },
140
- {
141
- readonly name: 'superscriptThree'
142
- readonly rule: InputRule<true>
143
- readonly state: 'off'
144
- },
145
- {
146
- readonly name: 'oneQuarter'
147
- readonly rule: InputRule<true>
148
- readonly state: 'off'
149
- },
150
- {
151
- readonly name: 'threeQuarters'
152
- readonly rule: InputRule<true>
153
- readonly state: 'off'
154
- },
155
- ]
156
-
17
+ declare function createDecoratorGuard(config: {
18
+ decorators: ({ context }: {
19
+ context: Pick<EditorContext, 'schema'>;
20
+ }) => Array<EditorSchema['decorators'][number]['name']>;
21
+ }): InputRuleGuard;
157
22
  /**
158
23
  * @public
159
24
  */
160
- export declare const ellipsisRule: InputRule<true>
161
-
25
+ declare const emDashRule: InputRule<true>;
162
26
  /**
163
27
  * @public
164
28
  */
165
- export declare const emDashRule: InputRule<true>
166
-
29
+ declare const ellipsisRule: InputRule<true>;
167
30
  /**
168
31
  * @public
169
32
  */
170
- export declare const laquoRule: InputRule<true>
171
-
33
+ declare const openingDoubleQuoteRule: InputRule<true>;
172
34
  /**
173
35
  * @public
174
36
  */
175
- export declare const leftArrowRule: InputRule<true>
176
-
37
+ declare const closingDoubleQuoteRule: InputRule<true>;
177
38
  /**
178
39
  * @public
179
40
  */
180
- export declare const multiplicationRule: InputRule<true>
181
-
41
+ declare const openingSingleQuoteRule: InputRule<true>;
182
42
  /**
183
43
  * @public
184
44
  */
185
- export declare const notEqualRule: InputRule<true>
186
-
45
+ declare const closingSingleQuoteRule: InputRule<true>;
187
46
  /**
188
47
  * @public
189
48
  */
190
- export declare const oneHalfRule: InputRule<true>
191
-
49
+ declare const smartQuotesRules: Array<InputRule>;
192
50
  /**
193
51
  * @public
194
52
  */
195
- export declare const oneQuarterRule: InputRule<true>
196
-
53
+ declare const leftArrowRule: InputRule<true>;
197
54
  /**
198
55
  * @public
199
56
  */
200
- export declare const openingDoubleQuoteRule: InputRule<true>
201
-
57
+ declare const rightArrowRule: InputRule<true>;
202
58
  /**
203
59
  * @public
204
60
  */
205
- export declare const openingSingleQuoteRule: InputRule<true>
206
-
61
+ declare const copyrightRule: InputRule<true>;
207
62
  /**
208
63
  * @public
209
64
  */
210
- export declare const plusMinusRule: InputRule<true>
211
-
65
+ declare const servicemarkRule: InputRule<true>;
212
66
  /**
213
67
  * @public
214
68
  */
215
- export declare const raquoRule: InputRule<true>
216
-
69
+ declare const trademarkRule: InputRule<true>;
217
70
  /**
218
71
  * @beta
219
72
  */
220
- export declare const registeredTrademarkRule: InputRule<true>
221
-
73
+ declare const registeredTrademarkRule: InputRule<true>;
222
74
  /**
223
75
  * @public
224
76
  */
225
- export declare const rightArrowRule: InputRule<true>
226
-
227
- declare type RuleName = (typeof defaultRuleConfig)[number]['name']
228
-
77
+ declare const oneHalfRule: InputRule<true>;
229
78
  /**
230
79
  * @public
231
80
  */
232
- export declare const servicemarkRule: InputRule<true>
233
-
81
+ declare const plusMinusRule: InputRule<true>;
234
82
  /**
235
83
  * @public
236
84
  */
237
- export declare const smartQuotesRules: Array<InputRule>
238
-
85
+ declare const notEqualRule: InputRule<true>;
239
86
  /**
240
87
  * @public
241
88
  */
242
- export declare const superscriptThreeRule: InputRule<true>
243
-
89
+ declare const laquoRule: InputRule<true>;
244
90
  /**
245
91
  * @public
246
92
  */
247
- export declare const superscriptTwoRule: InputRule<true>
248
-
93
+ declare const raquoRule: InputRule<true>;
249
94
  /**
250
95
  * @public
251
96
  */
252
- export declare const threeQuartersRule: InputRule<true>
253
-
97
+ declare const multiplicationRule: InputRule<true>;
254
98
  /**
255
- * @public
256
- */
257
- export declare const trademarkRule: InputRule<true>
258
-
99
+ * @public
100
+ */
101
+ declare const superscriptTwoRule: InputRule<true>;
102
+ /**
103
+ * @public
104
+ */
105
+ declare const superscriptThreeRule: InputRule<true>;
259
106
  /**
260
107
  * @public
261
108
  */
262
- export declare function TypographyPlugin<
263
- TEnabledRuleName extends RuleName = never,
264
- TDisabledRuleName extends Exclude<RuleName, TEnabledRuleName> = never,
265
- >(
266
- props: TypographyPluginProps<TEnabledRuleName, TDisabledRuleName>,
267
- ): JSX.Element
268
-
109
+ declare const oneQuarterRule: InputRule<true>;
269
110
  /**
270
111
  * @public
271
112
  */
272
- export declare type TypographyPluginProps<
273
- TEnabledRuleName extends RuleName = never,
274
- TDisabledRuleName extends Exclude<RuleName, TEnabledRuleName> = never,
275
- > = {
276
- guard?: InputRuleGuard
113
+ declare const threeQuartersRule: InputRule<true>;
114
+ declare const defaultRuleConfig: readonly [{
115
+ readonly name: "emDash";
116
+ readonly rule: import("@portabletext/plugin-input-rule").InputRule<true>;
117
+ readonly state: "on";
118
+ }, {
119
+ readonly name: "ellipsis";
120
+ readonly rule: import("@portabletext/plugin-input-rule").InputRule<true>;
121
+ readonly state: "on";
122
+ }, {
123
+ readonly name: "openingDoubleQuote";
124
+ readonly rule: import("@portabletext/plugin-input-rule").InputRule<true>;
125
+ readonly state: "on";
126
+ }, {
127
+ readonly name: "closingDoubleQuote";
128
+ readonly rule: import("@portabletext/plugin-input-rule").InputRule<true>;
129
+ readonly state: "on";
130
+ }, {
131
+ readonly name: "openingSingleQuote";
132
+ readonly rule: import("@portabletext/plugin-input-rule").InputRule<true>;
133
+ readonly state: "on";
134
+ }, {
135
+ readonly name: "closingSingleQuote";
136
+ readonly rule: import("@portabletext/plugin-input-rule").InputRule<true>;
137
+ readonly state: "on";
138
+ }, {
139
+ readonly name: "leftArrow";
140
+ readonly rule: import("@portabletext/plugin-input-rule").InputRule<true>;
141
+ readonly state: "on";
142
+ }, {
143
+ readonly name: "rightArrow";
144
+ readonly rule: import("@portabletext/plugin-input-rule").InputRule<true>;
145
+ readonly state: "on";
146
+ }, {
147
+ readonly name: "copyright";
148
+ readonly rule: import("@portabletext/plugin-input-rule").InputRule<true>;
149
+ readonly state: "on";
150
+ }, {
151
+ readonly name: "trademark";
152
+ readonly rule: import("@portabletext/plugin-input-rule").InputRule<true>;
153
+ readonly state: "on";
154
+ }, {
155
+ readonly name: "servicemark";
156
+ readonly rule: import("@portabletext/plugin-input-rule").InputRule<true>;
157
+ readonly state: "on";
158
+ }, {
159
+ readonly name: "registeredTrademark";
160
+ readonly rule: import("@portabletext/plugin-input-rule").InputRule<true>;
161
+ readonly state: "on";
162
+ }, {
163
+ readonly name: "oneHalf";
164
+ readonly rule: import("@portabletext/plugin-input-rule").InputRule<true>;
165
+ readonly state: "off";
166
+ }, {
167
+ readonly name: "plusMinus";
168
+ readonly rule: import("@portabletext/plugin-input-rule").InputRule<true>;
169
+ readonly state: "off";
170
+ }, {
171
+ readonly name: "laquo";
172
+ readonly rule: import("@portabletext/plugin-input-rule").InputRule<true>;
173
+ readonly state: "off";
174
+ }, {
175
+ readonly name: "notEqual";
176
+ readonly rule: import("@portabletext/plugin-input-rule").InputRule<true>;
177
+ readonly state: "off";
178
+ }, {
179
+ readonly name: "raquo";
180
+ readonly rule: import("@portabletext/plugin-input-rule").InputRule<true>;
181
+ readonly state: "off";
182
+ }, {
183
+ readonly name: "multiplication";
184
+ readonly rule: import("@portabletext/plugin-input-rule").InputRule<true>;
185
+ readonly state: "off";
186
+ }, {
187
+ readonly name: "superscriptTwo";
188
+ readonly rule: import("@portabletext/plugin-input-rule").InputRule<true>;
189
+ readonly state: "off";
190
+ }, {
191
+ readonly name: "superscriptThree";
192
+ readonly rule: import("@portabletext/plugin-input-rule").InputRule<true>;
193
+ readonly state: "off";
194
+ }, {
195
+ readonly name: "oneQuarter";
196
+ readonly rule: import("@portabletext/plugin-input-rule").InputRule<true>;
197
+ readonly state: "off";
198
+ }, {
199
+ readonly name: "threeQuarters";
200
+ readonly rule: import("@portabletext/plugin-input-rule").InputRule<true>;
201
+ readonly state: "off";
202
+ }];
203
+ type RuleName = (typeof defaultRuleConfig)[number]['name'];
204
+ /**
205
+ * @public
206
+ */
207
+ type TypographyPluginProps<TEnabledRuleName extends RuleName = never, TDisabledRuleName extends Exclude<RuleName, TEnabledRuleName> = never> = {
208
+ guard?: InputRuleGuard;
277
209
  /**
278
210
  * Preset configuration for rules.
279
211
  * - `'default'`: Common typography rules enabled (em dash, ellipsis, quotes, arrows, copyright symbols)
@@ -282,7 +214,7 @@ export declare type TypographyPluginProps<
282
214
  *
283
215
  * @defaultValue 'default'
284
216
  */
285
- preset?: 'default' | 'all' | 'none'
217
+ preset?: 'default' | 'all' | 'none';
286
218
  /**
287
219
  * Enable specific rules (additive to preset).
288
220
  * Use this to enable additional rules beyond the preset.
@@ -293,7 +225,7 @@ export declare type TypographyPluginProps<
293
225
  * <TypographyPlugin enable={['multiplication', 'plusMinus']} />
294
226
  * ```
295
227
  */
296
- enable?: ReadonlyArray<TEnabledRuleName>
228
+ enable?: ReadonlyArray<TEnabledRuleName>;
297
229
  /**
298
230
  * Disable specific rules (subtractive from preset).
299
231
  * Use this to disable rules that would otherwise be enabled by the preset.
@@ -305,7 +237,11 @@ export declare type TypographyPluginProps<
305
237
  * <TypographyPlugin disable={['emDash']} />
306
238
  * ```
307
239
  */
308
- disable?: ReadonlyArray<TDisabledRuleName>
309
- }
310
-
311
- export {}
240
+ disable?: ReadonlyArray<TDisabledRuleName>;
241
+ };
242
+ /**
243
+ * @public
244
+ */
245
+ declare function TypographyPlugin<TEnabledRuleName extends RuleName = never, TDisabledRuleName extends Exclude<RuleName, TEnabledRuleName> = never>(props: TypographyPluginProps<TEnabledRuleName, TDisabledRuleName>): import("react").JSX.Element;
246
+ export { TypographyPlugin, TypographyPluginProps, closingDoubleQuoteRule, closingSingleQuoteRule, copyrightRule, createDecoratorGuard, ellipsisRule, emDashRule, laquoRule, leftArrowRule, multiplicationRule, notEqualRule, oneHalfRule, oneQuarterRule, openingDoubleQuoteRule, openingSingleQuoteRule, plusMinusRule, raquoRule, registeredTrademarkRule, rightArrowRule, servicemarkRule, smartQuotesRules, superscriptThreeRule, superscriptTwoRule, threeQuartersRule, trademarkRule };
247
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/create-decorator-guard.ts","../src/input-rules.typography.ts","../src/plugin.typography.tsx"],"mappings":";;;;;;;;;;;;;;;;iBAsBgB,qBAAqB;EACnC,eACE;IAEA,SAAS,KAAK;QACV,MAAM;IACV;;;;cCpBS,YAAU;;;;cAQV,cAAY;;;;cAQZ,wBAAsB;;;;cAQtB,wBAAsB;;;;cAQtB,wBAAsB;;;;cAQtB,wBAAsB;;;;cAQtB,kBAAkB,MAAM;;;;cAUxB,eAAa;;;;cAQb,gBAAc;;;;cAQd,eAAa;;;;cAQb,iBAAe;;;;cAQf,eAAa;;;;cAQb,yBAAuB;;;;cAQvB,aAAW;;;;cAQX,eAAa;;;;cAQb,cAAY;;;;cAQZ,WAAS;;;;cAQT,WAAS;;;;cAQT,oBAAkB;;;;cAQlB,oBAAkB;;;;cAQlB,sBAAoB;;;;cAQpB,gBAAc;;;;cAQd,mBAAiB;cC5JxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAyBD,mBAAmB;;;;KAKZ,sBACV,yBAAyB,kBACzB,0BAA0B,QAAQ,UAAU;EAE5C,QAAQ;;;;;;;;;EASR;;;;;;;;;;;EAWA,SAAS,cAAc;;;;;;;;;;;;EAYvB,UAAU,cAAc;;;;;iBAMV,iBACd,yBAAyB,kBACzB,0BAA0B,QAAQ,UAAU,2BAC5C,OAAO,sBAAsB,kBAAkB,qCAAkB,IAAA"}
package/dist/index.js CHANGED
@@ -1,270 +1,260 @@
1
1
  import { getSelectedSpans, isActiveDecorator } from "@portabletext/editor/selectors";
2
2
  import { getPathSubSchema } from "@portabletext/editor/traversal";
3
- import { defineTextTransformRule, InputRulePlugin } from "@portabletext/plugin-input-rule";
4
- import { jsx } from "react/jsx-runtime";
3
+ import { InputRulePlugin, defineTextTransformRule } from "@portabletext/plugin-input-rule";
5
4
  import { c } from "react/compiler-runtime";
6
5
  import "react";
6
+ import { jsx } from "react/jsx-runtime";
7
+ /**
8
+ * @public
9
+ * Create an `InputRuleGuard` that can prevent the rule from running inside
10
+ * certain decorators.
11
+ *
12
+ * @example
13
+ * ```tsx
14
+ * const guard = createDecoratorGuard({
15
+ * decorators: ({context}) => context.schema.decorators.flatMap((decorator) => decorator.name === 'code' ? [] : [decorator.name]),
16
+ * })
17
+ *
18
+ * <TypographyPlugin guard={guard} />
19
+ * ```
20
+ */
7
21
  function createDecoratorGuard(config) {
8
- return ({
9
- snapshot,
10
- event
11
- }) => {
12
- const subSchema = getPathSubSchema(snapshot, event.focusBlock.path), allowedDecorators = config.decorators({
13
- context: {
14
- schema: subSchema
15
- }
16
- }), decorators = subSchema.decorators.flatMap((decorator) => allowedDecorators.includes(decorator.name) ? [] : [decorator.name]);
17
- if (decorators.length === 0)
18
- return !0;
19
- const matchedSpans = event.matches.flatMap((match) => getSelectedSpans({
20
- ...snapshot,
21
- context: {
22
- ...snapshot.context,
23
- selection: match.selection
24
- }
25
- }));
26
- let preventInputRule = !1;
27
- for (const decorator of decorators) {
28
- if (isActiveDecorator(decorator)(snapshot)) {
29
- preventInputRule = !0;
30
- break;
31
- }
32
- if (matchedSpans.some((span) => span.node.marks?.includes(decorator))) {
33
- preventInputRule = !0;
34
- break;
35
- }
36
- }
37
- return !preventInputRule;
38
- };
22
+ return ({ snapshot, event }) => {
23
+ let subSchema = getPathSubSchema(snapshot, event.focusBlock.path), allowedDecorators = config.decorators({ context: { schema: subSchema } }), decorators = subSchema.decorators.flatMap((decorator) => allowedDecorators.includes(decorator.name) ? [] : [decorator.name]);
24
+ if (decorators.length === 0) return !0;
25
+ let matchedSpans = event.matches.flatMap((match) => getSelectedSpans({
26
+ ...snapshot,
27
+ context: {
28
+ ...snapshot.context,
29
+ selection: match.selection
30
+ }
31
+ })), preventInputRule = !1;
32
+ for (let decorator of decorators) {
33
+ if (isActiveDecorator(decorator)(snapshot)) {
34
+ preventInputRule = !0;
35
+ break;
36
+ }
37
+ if (matchedSpans.some((span) => span.node.marks?.includes(decorator))) {
38
+ preventInputRule = !0;
39
+ break;
40
+ }
41
+ }
42
+ return !preventInputRule;
43
+ };
39
44
  }
45
+ /**
46
+ * @public
47
+ */
40
48
  const emDashRule = defineTextTransformRule({
41
- on: /--/,
42
- transform: () => "\u2014"
49
+ on: /--/,
50
+ transform: () => ""
43
51
  }), ellipsisRule = defineTextTransformRule({
44
- on: /\.\.\./,
45
- transform: () => "\u2026"
52
+ on: /\.\.\./,
53
+ transform: () => ""
46
54
  }), openingDoubleQuoteRule = defineTextTransformRule({
47
- on: new RegExp(`(?:^|(?<=[\\s{[(<'"\\u2018\\u201C]))"`, "g"),
48
- transform: () => "\u201C"
55
+ on: RegExp("(?:^|(?<=[\\s{[(<'\"\\u2018\\u201C]))\"", "g"),
56
+ transform: () => ""
49
57
  }), closingDoubleQuoteRule = defineTextTransformRule({
50
- on: /"/g,
51
- transform: () => "\u201D"
58
+ on: /"/g,
59
+ transform: () => ""
52
60
  }), openingSingleQuoteRule = defineTextTransformRule({
53
- on: new RegExp(`(?:^|(?<=[\\s{[(<'"\\u2018\\u201C]))'`, "g"),
54
- transform: () => "\u2018"
61
+ on: RegExp("(?:^|(?<=[\\s{[(<'\"\\u2018\\u201C]))'", "g"),
62
+ transform: () => ""
55
63
  }), closingSingleQuoteRule = defineTextTransformRule({
56
- on: /'/g,
57
- transform: () => "\u2019"
58
- }), smartQuotesRules = [openingDoubleQuoteRule, closingDoubleQuoteRule, openingSingleQuoteRule, closingSingleQuoteRule], leftArrowRule = defineTextTransformRule({
59
- on: /<-/,
60
- transform: () => "\u2190"
64
+ on: /'/g,
65
+ transform: () => ""
66
+ }), smartQuotesRules = [
67
+ openingDoubleQuoteRule,
68
+ closingDoubleQuoteRule,
69
+ openingSingleQuoteRule,
70
+ closingSingleQuoteRule
71
+ ], leftArrowRule = defineTextTransformRule({
72
+ on: /<-/,
73
+ transform: () => "←"
61
74
  }), rightArrowRule = defineTextTransformRule({
62
- on: /->/,
63
- transform: () => "\u2192"
75
+ on: /->/,
76
+ transform: () => ""
64
77
  }), copyrightRule = defineTextTransformRule({
65
- on: /\(c\)/,
66
- transform: () => "\xA9"
78
+ on: /\(c\)/,
79
+ transform: () => "©"
67
80
  }), servicemarkRule = defineTextTransformRule({
68
- on: /\(sm\)/,
69
- transform: () => "\u2120"
81
+ on: /\(sm\)/,
82
+ transform: () => ""
70
83
  }), trademarkRule = defineTextTransformRule({
71
- on: /\(tm\)/,
72
- transform: () => "\u2122"
84
+ on: /\(tm\)/,
85
+ transform: () => ""
73
86
  }), registeredTrademarkRule = defineTextTransformRule({
74
- on: /\(r\)/,
75
- transform: () => "\xAE"
87
+ on: /\(r\)/,
88
+ transform: () => "®"
76
89
  }), oneHalfRule = defineTextTransformRule({
77
- on: /(?:^|\s)(?<fraction>1\/2)\s/,
78
- transform: {
79
- fraction: () => "\xBD"
80
- }
90
+ on: /(?:^|\s)(?<fraction>1\/2)\s/,
91
+ transform: { fraction: () => "½" }
81
92
  }), plusMinusRule = defineTextTransformRule({
82
- on: /\+\/-/,
83
- transform: () => "\xB1"
93
+ on: /\+\/-/,
94
+ transform: () => "±"
84
95
  }), notEqualRule = defineTextTransformRule({
85
- on: /!=/,
86
- transform: () => "\u2260"
96
+ on: /!=/,
97
+ transform: () => ""
87
98
  }), laquoRule = defineTextTransformRule({
88
- on: /<</,
89
- transform: () => "\xAB"
99
+ on: /<</,
100
+ transform: () => "«"
90
101
  }), raquoRule = defineTextTransformRule({
91
- on: />>/,
92
- transform: () => "\xBB"
102
+ on: />>/,
103
+ transform: () => "»"
93
104
  }), multiplicationRule = defineTextTransformRule({
94
- on: /\d+\s?(?<operator>[*x])\s?\d+/,
95
- transform: {
96
- operator: () => "\xD7"
97
- }
105
+ on: /\d+\s?(?<operator>[*x])\s?\d+/,
106
+ transform: { operator: () => "×" }
98
107
  }), superscriptTwoRule = defineTextTransformRule({
99
- on: /\^2/,
100
- transform: () => "\xB2"
108
+ on: /\^2/,
109
+ transform: () => "²"
101
110
  }), superscriptThreeRule = defineTextTransformRule({
102
- on: /\^3/,
103
- transform: () => "\xB3"
111
+ on: /\^3/,
112
+ transform: () => "³"
104
113
  }), oneQuarterRule = defineTextTransformRule({
105
- on: /(?:^|\s)(?<fraction>1\/4)\s/,
106
- transform: {
107
- fraction: () => "\xBC"
108
- }
114
+ on: /(?:^|\s)(?<fraction>1\/4)\s/,
115
+ transform: { fraction: () => "¼" }
109
116
  }), threeQuartersRule = defineTextTransformRule({
110
- on: /(?:^|\s)(?<fraction>3\/4)\s/,
111
- transform: {
112
- fraction: () => "\xBE"
113
- }
114
- }), defaultRuleConfig = [{
115
- name: "emDash",
116
- rule: emDashRule,
117
- state: "on"
118
- }, {
119
- name: "ellipsis",
120
- rule: ellipsisRule,
121
- state: "on"
122
- }, {
123
- name: "openingDoubleQuote",
124
- rule: openingDoubleQuoteRule,
125
- state: "on"
126
- }, {
127
- name: "closingDoubleQuote",
128
- rule: closingDoubleQuoteRule,
129
- state: "on"
130
- }, {
131
- name: "openingSingleQuote",
132
- rule: openingSingleQuoteRule,
133
- state: "on"
134
- }, {
135
- name: "closingSingleQuote",
136
- rule: closingSingleQuoteRule,
137
- state: "on"
138
- }, {
139
- name: "leftArrow",
140
- rule: leftArrowRule,
141
- state: "on"
142
- }, {
143
- name: "rightArrow",
144
- rule: rightArrowRule,
145
- state: "on"
146
- }, {
147
- name: "copyright",
148
- rule: copyrightRule,
149
- state: "on"
150
- }, {
151
- name: "trademark",
152
- rule: trademarkRule,
153
- state: "on"
154
- }, {
155
- name: "servicemark",
156
- rule: servicemarkRule,
157
- state: "on"
158
- }, {
159
- name: "registeredTrademark",
160
- rule: registeredTrademarkRule,
161
- state: "on"
162
- }, {
163
- name: "oneHalf",
164
- rule: oneHalfRule,
165
- state: "off"
166
- }, {
167
- name: "plusMinus",
168
- rule: plusMinusRule,
169
- state: "off"
170
- }, {
171
- name: "laquo",
172
- rule: laquoRule,
173
- state: "off"
174
- }, {
175
- name: "notEqual",
176
- rule: notEqualRule,
177
- state: "off"
178
- }, {
179
- name: "raquo",
180
- rule: raquoRule,
181
- state: "off"
182
- }, {
183
- name: "multiplication",
184
- rule: multiplicationRule,
185
- state: "off"
186
- }, {
187
- name: "superscriptTwo",
188
- rule: superscriptTwoRule,
189
- state: "off"
190
- }, {
191
- name: "superscriptThree",
192
- rule: superscriptThreeRule,
193
- state: "off"
194
- }, {
195
- name: "oneQuarter",
196
- rule: oneQuarterRule,
197
- state: "off"
198
- }, {
199
- name: "threeQuarters",
200
- rule: threeQuartersRule,
201
- state: "off"
202
- }];
117
+ on: /(?:^|\s)(?<fraction>3\/4)\s/,
118
+ transform: { fraction: () => "¾" }
119
+ }), defaultRuleConfig = [
120
+ {
121
+ name: "emDash",
122
+ rule: emDashRule,
123
+ state: "on"
124
+ },
125
+ {
126
+ name: "ellipsis",
127
+ rule: ellipsisRule,
128
+ state: "on"
129
+ },
130
+ {
131
+ name: "openingDoubleQuote",
132
+ rule: openingDoubleQuoteRule,
133
+ state: "on"
134
+ },
135
+ {
136
+ name: "closingDoubleQuote",
137
+ rule: closingDoubleQuoteRule,
138
+ state: "on"
139
+ },
140
+ {
141
+ name: "openingSingleQuote",
142
+ rule: openingSingleQuoteRule,
143
+ state: "on"
144
+ },
145
+ {
146
+ name: "closingSingleQuote",
147
+ rule: closingSingleQuoteRule,
148
+ state: "on"
149
+ },
150
+ {
151
+ name: "leftArrow",
152
+ rule: leftArrowRule,
153
+ state: "on"
154
+ },
155
+ {
156
+ name: "rightArrow",
157
+ rule: rightArrowRule,
158
+ state: "on"
159
+ },
160
+ {
161
+ name: "copyright",
162
+ rule: copyrightRule,
163
+ state: "on"
164
+ },
165
+ {
166
+ name: "trademark",
167
+ rule: trademarkRule,
168
+ state: "on"
169
+ },
170
+ {
171
+ name: "servicemark",
172
+ rule: servicemarkRule,
173
+ state: "on"
174
+ },
175
+ {
176
+ name: "registeredTrademark",
177
+ rule: registeredTrademarkRule,
178
+ state: "on"
179
+ },
180
+ {
181
+ name: "oneHalf",
182
+ rule: oneHalfRule,
183
+ state: "off"
184
+ },
185
+ {
186
+ name: "plusMinus",
187
+ rule: plusMinusRule,
188
+ state: "off"
189
+ },
190
+ {
191
+ name: "laquo",
192
+ rule: laquoRule,
193
+ state: "off"
194
+ },
195
+ {
196
+ name: "notEqual",
197
+ rule: notEqualRule,
198
+ state: "off"
199
+ },
200
+ {
201
+ name: "raquo",
202
+ rule: raquoRule,
203
+ state: "off"
204
+ },
205
+ {
206
+ name: "multiplication",
207
+ rule: multiplicationRule,
208
+ state: "off"
209
+ },
210
+ {
211
+ name: "superscriptTwo",
212
+ rule: superscriptTwoRule,
213
+ state: "off"
214
+ },
215
+ {
216
+ name: "superscriptThree",
217
+ rule: superscriptThreeRule,
218
+ state: "off"
219
+ },
220
+ {
221
+ name: "oneQuarter",
222
+ rule: oneQuarterRule,
223
+ state: "off"
224
+ },
225
+ {
226
+ name: "threeQuarters",
227
+ rule: threeQuartersRule,
228
+ state: "off"
229
+ }
230
+ ];
231
+ /**
232
+ * @public
233
+ */
203
234
  function TypographyPlugin(props) {
204
- const $ = c(13), {
205
- preset: t0,
206
- enable: t1,
207
- disable: t2,
208
- guard
209
- } = props, preset = t0 === void 0 ? "default" : t0;
210
- let t3;
211
- $[0] !== t1 ? (t3 = t1 === void 0 ? [] : t1, $[0] = t1, $[1] = t3) : t3 = $[1];
212
- const enable = t3;
213
- let t4;
214
- $[2] !== t2 ? (t4 = t2 === void 0 ? [] : t2, $[2] = t2, $[3] = t4) : t4 = $[3];
215
- const disable = t4;
216
- let enabledRules;
217
- if ($[4] !== disable || $[5] !== enable || $[6] !== preset) {
218
- if (enabledRules = /* @__PURE__ */ new Set(), preset === "all")
219
- for (const rule of defaultRuleConfig)
220
- enabledRules.add(rule.name);
221
- else if (preset === "default")
222
- for (const rule_0 of defaultRuleConfig)
223
- rule_0.state === "on" && enabledRules.add(rule_0.name);
224
- for (const ruleName of enable)
225
- enabledRules.add(ruleName);
226
- for (const ruleName_0 of disable)
227
- enabledRules.delete(ruleName_0);
228
- $[4] = disable, $[5] = enable, $[6] = preset, $[7] = enabledRules;
229
- } else
230
- enabledRules = $[7];
231
- let t5;
232
- $[8] !== enabledRules || $[9] !== guard ? (t5 = defaultRuleConfig.flatMap((rule_1) => enabledRules.has(rule_1.name) ? [{
233
- ...rule_1.rule,
234
- guard: guard ?? _temp
235
- }] : []), $[8] = enabledRules, $[9] = guard, $[10] = t5) : t5 = $[10];
236
- const configuredInputRules = t5;
237
- let t6;
238
- return $[11] !== configuredInputRules ? (t6 = /* @__PURE__ */ jsx(InputRulePlugin, { rules: configuredInputRules }), $[11] = configuredInputRules, $[12] = t6) : t6 = $[12], t6;
235
+ let $ = c(13), { preset: t0, enable: t1, disable: t2, guard } = props, preset = t0 === void 0 ? "default" : t0, t3;
236
+ $[0] === t1 ? t3 = $[1] : (t3 = t1 === void 0 ? [] : t1, $[0] = t1, $[1] = t3);
237
+ let enable = t3, t4;
238
+ $[2] === t2 ? t4 = $[3] : (t4 = t2 === void 0 ? [] : t2, $[2] = t2, $[3] = t4);
239
+ let disable = t4, enabledRules;
240
+ if ($[4] !== disable || $[5] !== enable || $[6] !== preset) {
241
+ if (enabledRules = /* @__PURE__ */ new Set(), preset === "all") for (let rule of defaultRuleConfig) enabledRules.add(rule.name);
242
+ else if (preset === "default") for (let rule_0 of defaultRuleConfig) rule_0.state === "on" && enabledRules.add(rule_0.name);
243
+ for (let ruleName of enable) enabledRules.add(ruleName);
244
+ for (let ruleName_0 of disable) enabledRules.delete(ruleName_0);
245
+ $[4] = disable, $[5] = enable, $[6] = preset, $[7] = enabledRules;
246
+ } else enabledRules = $[7];
247
+ let t5;
248
+ $[8] !== enabledRules || $[9] !== guard ? (t5 = defaultRuleConfig.flatMap((rule_1) => enabledRules.has(rule_1.name) ? [{
249
+ ...rule_1.rule,
250
+ guard: guard ?? _temp
251
+ }] : []), $[8] = enabledRules, $[9] = guard, $[10] = t5) : t5 = $[10];
252
+ let configuredInputRules = t5, t6;
253
+ return $[11] === configuredInputRules ? t6 = $[12] : (t6 = /* @__PURE__ */ jsx(InputRulePlugin, { rules: configuredInputRules }), $[11] = configuredInputRules, $[12] = t6), t6;
239
254
  }
240
255
  function _temp() {
241
- return !0;
256
+ return !0;
242
257
  }
243
- export {
244
- TypographyPlugin,
245
- closingDoubleQuoteRule,
246
- closingSingleQuoteRule,
247
- copyrightRule,
248
- createDecoratorGuard,
249
- ellipsisRule,
250
- emDashRule,
251
- laquoRule,
252
- leftArrowRule,
253
- multiplicationRule,
254
- notEqualRule,
255
- oneHalfRule,
256
- oneQuarterRule,
257
- openingDoubleQuoteRule,
258
- openingSingleQuoteRule,
259
- plusMinusRule,
260
- raquoRule,
261
- registeredTrademarkRule,
262
- rightArrowRule,
263
- servicemarkRule,
264
- smartQuotesRules,
265
- superscriptThreeRule,
266
- superscriptTwoRule,
267
- threeQuartersRule,
268
- trademarkRule
269
- };
270
- //# sourceMappingURL=index.js.map
258
+ export { TypographyPlugin, closingDoubleQuoteRule, closingSingleQuoteRule, copyrightRule, createDecoratorGuard, ellipsisRule, emDashRule, laquoRule, leftArrowRule, multiplicationRule, notEqualRule, oneHalfRule, oneQuarterRule, openingDoubleQuoteRule, openingSingleQuoteRule, plusMinusRule, raquoRule, registeredTrademarkRule, rightArrowRule, servicemarkRule, smartQuotesRules, superscriptThreeRule, superscriptTwoRule, threeQuartersRule, trademarkRule };
259
+
260
+ //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/create-decorator-guard.ts","../src/input-rules.typography.ts","../src/plugin.typography.tsx"],"sourcesContent":["import type {EditorContext, EditorSchema} from '@portabletext/editor'\nimport {\n getSelectedSpans,\n isActiveDecorator,\n} from '@portabletext/editor/selectors'\nimport {getPathSubSchema} from '@portabletext/editor/traversal'\nimport type {InputRuleGuard} from '@portabletext/plugin-input-rule'\n\n/**\n * @public\n * Create an `InputRuleGuard` that can prevent the rule from running inside\n * certain decorators.\n *\n * @example\n * ```tsx\n * const guard = createDecoratorGuard({\n * decorators: ({context}) => context.schema.decorators.flatMap((decorator) => decorator.name === 'code' ? [] : [decorator.name]),\n * })\n *\n * <TypographyPlugin guard={guard} />\n * ```\n */\nexport function createDecoratorGuard(config: {\n decorators: ({\n context,\n }: {\n context: Pick<EditorContext, 'schema'>\n }) => Array<EditorSchema['decorators'][number]['name']>\n}): InputRuleGuard {\n return ({snapshot, event}) => {\n const subSchema = getPathSubSchema(snapshot, event.focusBlock.path)\n const allowedDecorators = config.decorators({\n context: {\n schema: subSchema,\n },\n })\n const decorators = subSchema.decorators.flatMap((decorator) =>\n allowedDecorators.includes(decorator.name) ? [] : [decorator.name],\n )\n\n if (decorators.length === 0) {\n return true\n }\n\n const matchedSpans = event.matches.flatMap((match) =>\n getSelectedSpans({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: match.selection,\n },\n }),\n )\n\n let preventInputRule = false\n\n for (const decorator of decorators) {\n if (isActiveDecorator(decorator)(snapshot)) {\n preventInputRule = true\n break\n }\n\n if (matchedSpans.some((span) => span.node.marks?.includes(decorator))) {\n preventInputRule = true\n break\n }\n }\n\n return !preventInputRule\n }\n}\n","import {\n defineTextTransformRule,\n type InputRule,\n} from '@portabletext/plugin-input-rule'\n\n/**\n * @public\n */\nexport const emDashRule = defineTextTransformRule({\n on: /--/,\n transform: () => '—',\n})\n\n/**\n * @public\n */\nexport const ellipsisRule = defineTextTransformRule({\n on: /\\.\\.\\./,\n transform: () => '…',\n})\n\n/**\n * @public\n */\nexport const openingDoubleQuoteRule = defineTextTransformRule({\n on: /(?:^|(?<=[\\s{[(<'\"\\u2018\\u201C]))\"/g,\n transform: () => '“',\n})\n\n/**\n * @public\n */\nexport const closingDoubleQuoteRule = defineTextTransformRule({\n on: /\"/g,\n transform: () => '”',\n})\n\n/**\n * @public\n */\nexport const openingSingleQuoteRule = defineTextTransformRule({\n on: /(?:^|(?<=[\\s{[(<'\"\\u2018\\u201C]))'/g,\n transform: () => '‘',\n})\n\n/**\n * @public\n */\nexport const closingSingleQuoteRule = defineTextTransformRule({\n on: /'/g,\n transform: () => '’',\n})\n\n/**\n * @public\n */\nexport const smartQuotesRules: Array<InputRule> = [\n openingDoubleQuoteRule,\n closingDoubleQuoteRule,\n openingSingleQuoteRule,\n closingSingleQuoteRule,\n]\n\n/**\n * @public\n */\nexport const leftArrowRule = defineTextTransformRule({\n on: /<-/,\n transform: () => '←',\n})\n\n/**\n * @public\n */\nexport const rightArrowRule = defineTextTransformRule({\n on: /->/,\n transform: () => '→',\n})\n\n/**\n * @public\n */\nexport const copyrightRule = defineTextTransformRule({\n on: /\\(c\\)/,\n transform: () => '©',\n})\n\n/**\n * @public\n */\nexport const servicemarkRule = defineTextTransformRule({\n on: /\\(sm\\)/,\n transform: () => '℠',\n})\n\n/**\n * @public\n */\nexport const trademarkRule = defineTextTransformRule({\n on: /\\(tm\\)/,\n transform: () => '™',\n})\n\n/**\n * @beta\n */\nexport const registeredTrademarkRule = defineTextTransformRule({\n on: /\\(r\\)/,\n transform: () => '®',\n})\n\n/**\n * @public\n */\nexport const oneHalfRule = defineTextTransformRule({\n on: /(?:^|\\s)(?<fraction>1\\/2)\\s/,\n transform: {fraction: () => '½'},\n})\n\n/**\n * @public\n */\nexport const plusMinusRule = defineTextTransformRule({\n on: /\\+\\/-/,\n transform: () => '±',\n})\n\n/**\n * @public\n */\nexport const notEqualRule = defineTextTransformRule({\n on: /!=/,\n transform: () => '≠',\n})\n\n/**\n * @public\n */\nexport const laquoRule = defineTextTransformRule({\n on: /<</,\n transform: () => '«',\n})\n\n/**\n * @public\n */\nexport const raquoRule = defineTextTransformRule({\n on: />>/,\n transform: () => '»',\n})\n\n/**\n * @public\n */\nexport const multiplicationRule = defineTextTransformRule({\n on: /\\d+\\s?(?<operator>[*x])\\s?\\d+/,\n transform: {operator: () => '×'},\n})\n\n/**\n * @public\n */\nexport const superscriptTwoRule = defineTextTransformRule({\n on: /\\^2/,\n transform: () => '²',\n})\n\n/**\n * @public\n */\nexport const superscriptThreeRule = defineTextTransformRule({\n on: /\\^3/,\n transform: () => '³',\n})\n\n/**\n * @public\n */\nexport const oneQuarterRule = defineTextTransformRule({\n on: /(?:^|\\s)(?<fraction>1\\/4)\\s/,\n transform: {fraction: () => '¼'},\n})\n\n/**\n * @public\n */\nexport const threeQuartersRule = defineTextTransformRule({\n on: /(?:^|\\s)(?<fraction>3\\/4)\\s/,\n transform: {fraction: () => '¾'},\n})\n","import {\n InputRulePlugin,\n type InputRuleGuard,\n} from '@portabletext/plugin-input-rule'\nimport {useMemo} from 'react'\nimport {\n closingDoubleQuoteRule,\n closingSingleQuoteRule,\n copyrightRule,\n ellipsisRule,\n emDashRule,\n laquoRule,\n leftArrowRule,\n multiplicationRule,\n notEqualRule,\n oneHalfRule,\n oneQuarterRule,\n openingDoubleQuoteRule,\n openingSingleQuoteRule,\n plusMinusRule,\n raquoRule,\n registeredTrademarkRule,\n rightArrowRule,\n servicemarkRule,\n superscriptThreeRule,\n superscriptTwoRule,\n threeQuartersRule,\n trademarkRule,\n} from './input-rules.typography'\n\nconst defaultRuleConfig = [\n {name: 'emDash', rule: emDashRule, state: 'on'},\n {name: 'ellipsis', rule: ellipsisRule, state: 'on'},\n {name: 'openingDoubleQuote', rule: openingDoubleQuoteRule, state: 'on'},\n {name: 'closingDoubleQuote', rule: closingDoubleQuoteRule, state: 'on'},\n {name: 'openingSingleQuote', rule: openingSingleQuoteRule, state: 'on'},\n {name: 'closingSingleQuote', rule: closingSingleQuoteRule, state: 'on'},\n {name: 'leftArrow', rule: leftArrowRule, state: 'on'},\n {name: 'rightArrow', rule: rightArrowRule, state: 'on'},\n {name: 'copyright', rule: copyrightRule, state: 'on'},\n {name: 'trademark', rule: trademarkRule, state: 'on'},\n {name: 'servicemark', rule: servicemarkRule, state: 'on'},\n {name: 'registeredTrademark', rule: registeredTrademarkRule, state: 'on'},\n {name: 'oneHalf', rule: oneHalfRule, state: 'off'},\n {name: 'plusMinus', rule: plusMinusRule, state: 'off'},\n {name: 'laquo', rule: laquoRule, state: 'off'},\n {name: 'notEqual', rule: notEqualRule, state: 'off'},\n {name: 'raquo', rule: raquoRule, state: 'off'},\n {name: 'multiplication', rule: multiplicationRule, state: 'off'},\n {name: 'superscriptTwo', rule: superscriptTwoRule, state: 'off'},\n {name: 'superscriptThree', rule: superscriptThreeRule, state: 'off'},\n {name: 'oneQuarter', rule: oneQuarterRule, state: 'off'},\n {name: 'threeQuarters', rule: threeQuartersRule, state: 'off'},\n] as const\n\ntype RuleName = (typeof defaultRuleConfig)[number]['name']\n\n/**\n * @public\n */\nexport type TypographyPluginProps<\n TEnabledRuleName extends RuleName = never,\n TDisabledRuleName extends Exclude<RuleName, TEnabledRuleName> = never,\n> = {\n guard?: InputRuleGuard\n /**\n * Preset configuration for rules.\n * - `'default'`: Common typography rules enabled (em dash, ellipsis, quotes, arrows, copyright symbols)\n * - `'all'`: All rules enabled\n * - `'none'`: No rules enabled (use with `enable` prop)\n *\n * @defaultValue 'default'\n */\n preset?: 'default' | 'all' | 'none'\n /**\n * Enable specific rules (additive to preset).\n * Use this to enable additional rules beyond the preset.\n *\n * @example\n * ```tsx\n * // Enable multiplication and plusMinus in addition to default rules\n * <TypographyPlugin enable={['multiplication', 'plusMinus']} />\n * ```\n */\n enable?: ReadonlyArray<TEnabledRuleName>\n /**\n * Disable specific rules (subtractive from preset).\n * Use this to disable rules that would otherwise be enabled by the preset.\n * Cannot contain rules that are in the `enable` array (TypeScript will enforce this).\n *\n * @example\n * ```tsx\n * // Disable em dash from the default rules\n * <TypographyPlugin disable={['emDash']} />\n * ```\n */\n disable?: ReadonlyArray<TDisabledRuleName>\n}\n\n/**\n * @public\n */\nexport function TypographyPlugin<\n TEnabledRuleName extends RuleName = never,\n TDisabledRuleName extends Exclude<RuleName, TEnabledRuleName> = never,\n>(props: TypographyPluginProps<TEnabledRuleName, TDisabledRuleName>) {\n const {preset = 'default', enable = [], disable = [], guard} = props\n\n const configuredInputRules = useMemo(() => {\n // Determine which rules should be enabled based on preset\n const enabledRules = new Set<RuleName>()\n\n if (preset === 'all') {\n // Enable all rules\n for (const rule of defaultRuleConfig) {\n enabledRules.add(rule.name)\n }\n } else if (preset === 'default') {\n // Enable only default rules (state: 'on')\n for (const rule of defaultRuleConfig) {\n if (rule.state === 'on') {\n enabledRules.add(rule.name)\n }\n }\n }\n // preset === 'none' starts with empty set\n\n // Apply enable list (additive)\n for (const ruleName of enable) {\n enabledRules.add(ruleName)\n }\n\n // Apply disable list (subtractive)\n for (const ruleName of disable) {\n enabledRules.delete(ruleName)\n }\n\n // Build final rule list\n return defaultRuleConfig.flatMap((rule) =>\n enabledRules.has(rule.name)\n ? [{...rule.rule, guard: guard ?? (() => true)}]\n : [],\n )\n }, [preset, enable, disable, guard])\n\n return <InputRulePlugin rules={configuredInputRules} />\n}\n"],"names":["createDecoratorGuard","config","snapshot","event","subSchema","getPathSubSchema","focusBlock","path","allowedDecorators","decorators","context","schema","flatMap","decorator","includes","name","length","matchedSpans","matches","match","getSelectedSpans","selection","preventInputRule","isActiveDecorator","some","span","node","marks","emDashRule","defineTextTransformRule","on","transform","ellipsisRule","openingDoubleQuoteRule","closingDoubleQuoteRule","openingSingleQuoteRule","closingSingleQuoteRule","smartQuotesRules","leftArrowRule","rightArrowRule","copyrightRule","servicemarkRule","trademarkRule","registeredTrademarkRule","oneHalfRule","fraction","plusMinusRule","notEqualRule","laquoRule","raquoRule","multiplicationRule","operator","superscriptTwoRule","superscriptThreeRule","oneQuarterRule","threeQuartersRule","defaultRuleConfig","rule","state","TypographyPlugin","props","$","_c","preset","t0","enable","t1","disable","t2","guard","undefined","t3","t4","enabledRules","Set","add","rule_0","ruleName","ruleName_0","delete","t5","rule_1","has","_temp","configuredInputRules","t6"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["EditorContext","EditorSchema","getSelectedSpans","isActiveDecorator","getPathSubSchema","InputRuleGuard","createDecoratorGuard","config","decorators","context","Pick","Array","snapshot","event","subSchema","focusBlock","path","allowedDecorators","schema","flatMap","decorator","includes","name","length","matchedSpans","matches","match","selection","preventInputRule","some","span","node","marks","defineTextTransformRule","InputRule","emDashRule","on","transform","ellipsisRule","openingDoubleQuoteRule","closingDoubleQuoteRule","openingSingleQuoteRule","closingSingleQuoteRule","smartQuotesRules","Array","leftArrowRule","rightArrowRule","copyrightRule","servicemarkRule","trademarkRule","registeredTrademarkRule","oneHalfRule","fraction","plusMinusRule","notEqualRule","laquoRule","raquoRule","multiplicationRule","operator","superscriptTwoRule","superscriptThreeRule","oneQuarterRule","threeQuartersRule","InputRulePlugin","InputRuleGuard","useMemo","closingDoubleQuoteRule","closingSingleQuoteRule","copyrightRule","ellipsisRule","emDashRule","laquoRule","leftArrowRule","multiplicationRule","notEqualRule","oneHalfRule","oneQuarterRule","openingDoubleQuoteRule","openingSingleQuoteRule","plusMinusRule","raquoRule","registeredTrademarkRule","rightArrowRule","servicemarkRule","superscriptThreeRule","superscriptTwoRule","threeQuartersRule","trademarkRule","defaultRuleConfig","name","rule","state","const","RuleName","TypographyPluginProps","Exclude","TEnabledRuleName","guard","preset","enable","ReadonlyArray","disable","TDisabledRuleName","TypographyPlugin","props","$","_c","t0","t1","t2","undefined","t3","t4","enabledRules","Set","add","rule_0","ruleName","ruleName_0","delete","t5","flatMap","rule_1","has","_temp","configuredInputRules","t6"],"sources":["../src/create-decorator-guard.ts","../src/input-rules.typography.ts","../src/plugin.typography.tsx"],"sourcesContent":["import type {EditorContext, EditorSchema} from '@portabletext/editor'\nimport {\n getSelectedSpans,\n isActiveDecorator,\n} from '@portabletext/editor/selectors'\nimport {getPathSubSchema} from '@portabletext/editor/traversal'\nimport type {InputRuleGuard} from '@portabletext/plugin-input-rule'\n\n/**\n * @public\n * Create an `InputRuleGuard` that can prevent the rule from running inside\n * certain decorators.\n *\n * @example\n * ```tsx\n * const guard = createDecoratorGuard({\n * decorators: ({context}) => context.schema.decorators.flatMap((decorator) => decorator.name === 'code' ? [] : [decorator.name]),\n * })\n *\n * <TypographyPlugin guard={guard} />\n * ```\n */\nexport function createDecoratorGuard(config: {\n decorators: ({\n context,\n }: {\n context: Pick<EditorContext, 'schema'>\n }) => Array<EditorSchema['decorators'][number]['name']>\n}): InputRuleGuard {\n return ({snapshot, event}) => {\n const subSchema = getPathSubSchema(snapshot, event.focusBlock.path)\n const allowedDecorators = config.decorators({\n context: {\n schema: subSchema,\n },\n })\n const decorators = subSchema.decorators.flatMap((decorator) =>\n allowedDecorators.includes(decorator.name) ? [] : [decorator.name],\n )\n\n if (decorators.length === 0) {\n return true\n }\n\n const matchedSpans = event.matches.flatMap((match) =>\n getSelectedSpans({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: match.selection,\n },\n }),\n )\n\n let preventInputRule = false\n\n for (const decorator of decorators) {\n if (isActiveDecorator(decorator)(snapshot)) {\n preventInputRule = true\n break\n }\n\n if (matchedSpans.some((span) => span.node.marks?.includes(decorator))) {\n preventInputRule = true\n break\n }\n }\n\n return !preventInputRule\n }\n}\n","import {\n defineTextTransformRule,\n type InputRule,\n} from '@portabletext/plugin-input-rule'\n\n/**\n * @public\n */\nexport const emDashRule = defineTextTransformRule({\n on: /--/,\n transform: () => '—',\n})\n\n/**\n * @public\n */\nexport const ellipsisRule = defineTextTransformRule({\n on: /\\.\\.\\./,\n transform: () => '…',\n})\n\n/**\n * @public\n */\nexport const openingDoubleQuoteRule = defineTextTransformRule({\n on: /(?:^|(?<=[\\s{[(<'\"\\u2018\\u201C]))\"/g,\n transform: () => '“',\n})\n\n/**\n * @public\n */\nexport const closingDoubleQuoteRule = defineTextTransformRule({\n on: /\"/g,\n transform: () => '”',\n})\n\n/**\n * @public\n */\nexport const openingSingleQuoteRule = defineTextTransformRule({\n on: /(?:^|(?<=[\\s{[(<'\"\\u2018\\u201C]))'/g,\n transform: () => '‘',\n})\n\n/**\n * @public\n */\nexport const closingSingleQuoteRule = defineTextTransformRule({\n on: /'/g,\n transform: () => '’',\n})\n\n/**\n * @public\n */\nexport const smartQuotesRules: Array<InputRule> = [\n openingDoubleQuoteRule,\n closingDoubleQuoteRule,\n openingSingleQuoteRule,\n closingSingleQuoteRule,\n]\n\n/**\n * @public\n */\nexport const leftArrowRule = defineTextTransformRule({\n on: /<-/,\n transform: () => '←',\n})\n\n/**\n * @public\n */\nexport const rightArrowRule = defineTextTransformRule({\n on: /->/,\n transform: () => '→',\n})\n\n/**\n * @public\n */\nexport const copyrightRule = defineTextTransformRule({\n on: /\\(c\\)/,\n transform: () => '©',\n})\n\n/**\n * @public\n */\nexport const servicemarkRule = defineTextTransformRule({\n on: /\\(sm\\)/,\n transform: () => '℠',\n})\n\n/**\n * @public\n */\nexport const trademarkRule = defineTextTransformRule({\n on: /\\(tm\\)/,\n transform: () => '™',\n})\n\n/**\n * @beta\n */\nexport const registeredTrademarkRule = defineTextTransformRule({\n on: /\\(r\\)/,\n transform: () => '®',\n})\n\n/**\n * @public\n */\nexport const oneHalfRule = defineTextTransformRule({\n on: /(?:^|\\s)(?<fraction>1\\/2)\\s/,\n transform: {fraction: () => '½'},\n})\n\n/**\n * @public\n */\nexport const plusMinusRule = defineTextTransformRule({\n on: /\\+\\/-/,\n transform: () => '±',\n})\n\n/**\n * @public\n */\nexport const notEqualRule = defineTextTransformRule({\n on: /!=/,\n transform: () => '≠',\n})\n\n/**\n * @public\n */\nexport const laquoRule = defineTextTransformRule({\n on: /<</,\n transform: () => '«',\n})\n\n/**\n * @public\n */\nexport const raquoRule = defineTextTransformRule({\n on: />>/,\n transform: () => '»',\n})\n\n/**\n * @public\n */\nexport const multiplicationRule = defineTextTransformRule({\n on: /\\d+\\s?(?<operator>[*x])\\s?\\d+/,\n transform: {operator: () => '×'},\n})\n\n/**\n * @public\n */\nexport const superscriptTwoRule = defineTextTransformRule({\n on: /\\^2/,\n transform: () => '²',\n})\n\n/**\n * @public\n */\nexport const superscriptThreeRule = defineTextTransformRule({\n on: /\\^3/,\n transform: () => '³',\n})\n\n/**\n * @public\n */\nexport const oneQuarterRule = defineTextTransformRule({\n on: /(?:^|\\s)(?<fraction>1\\/4)\\s/,\n transform: {fraction: () => '¼'},\n})\n\n/**\n * @public\n */\nexport const threeQuartersRule = defineTextTransformRule({\n on: /(?:^|\\s)(?<fraction>3\\/4)\\s/,\n transform: {fraction: () => '¾'},\n})\n","import {\n InputRulePlugin,\n type InputRuleGuard,\n} from '@portabletext/plugin-input-rule'\nimport {useMemo} from 'react'\nimport {\n closingDoubleQuoteRule,\n closingSingleQuoteRule,\n copyrightRule,\n ellipsisRule,\n emDashRule,\n laquoRule,\n leftArrowRule,\n multiplicationRule,\n notEqualRule,\n oneHalfRule,\n oneQuarterRule,\n openingDoubleQuoteRule,\n openingSingleQuoteRule,\n plusMinusRule,\n raquoRule,\n registeredTrademarkRule,\n rightArrowRule,\n servicemarkRule,\n superscriptThreeRule,\n superscriptTwoRule,\n threeQuartersRule,\n trademarkRule,\n} from './input-rules.typography'\n\nconst defaultRuleConfig = [\n {name: 'emDash', rule: emDashRule, state: 'on'},\n {name: 'ellipsis', rule: ellipsisRule, state: 'on'},\n {name: 'openingDoubleQuote', rule: openingDoubleQuoteRule, state: 'on'},\n {name: 'closingDoubleQuote', rule: closingDoubleQuoteRule, state: 'on'},\n {name: 'openingSingleQuote', rule: openingSingleQuoteRule, state: 'on'},\n {name: 'closingSingleQuote', rule: closingSingleQuoteRule, state: 'on'},\n {name: 'leftArrow', rule: leftArrowRule, state: 'on'},\n {name: 'rightArrow', rule: rightArrowRule, state: 'on'},\n {name: 'copyright', rule: copyrightRule, state: 'on'},\n {name: 'trademark', rule: trademarkRule, state: 'on'},\n {name: 'servicemark', rule: servicemarkRule, state: 'on'},\n {name: 'registeredTrademark', rule: registeredTrademarkRule, state: 'on'},\n {name: 'oneHalf', rule: oneHalfRule, state: 'off'},\n {name: 'plusMinus', rule: plusMinusRule, state: 'off'},\n {name: 'laquo', rule: laquoRule, state: 'off'},\n {name: 'notEqual', rule: notEqualRule, state: 'off'},\n {name: 'raquo', rule: raquoRule, state: 'off'},\n {name: 'multiplication', rule: multiplicationRule, state: 'off'},\n {name: 'superscriptTwo', rule: superscriptTwoRule, state: 'off'},\n {name: 'superscriptThree', rule: superscriptThreeRule, state: 'off'},\n {name: 'oneQuarter', rule: oneQuarterRule, state: 'off'},\n {name: 'threeQuarters', rule: threeQuartersRule, state: 'off'},\n] as const\n\ntype RuleName = (typeof defaultRuleConfig)[number]['name']\n\n/**\n * @public\n */\nexport type TypographyPluginProps<\n TEnabledRuleName extends RuleName = never,\n TDisabledRuleName extends Exclude<RuleName, TEnabledRuleName> = never,\n> = {\n guard?: InputRuleGuard\n /**\n * Preset configuration for rules.\n * - `'default'`: Common typography rules enabled (em dash, ellipsis, quotes, arrows, copyright symbols)\n * - `'all'`: All rules enabled\n * - `'none'`: No rules enabled (use with `enable` prop)\n *\n * @defaultValue 'default'\n */\n preset?: 'default' | 'all' | 'none'\n /**\n * Enable specific rules (additive to preset).\n * Use this to enable additional rules beyond the preset.\n *\n * @example\n * ```tsx\n * // Enable multiplication and plusMinus in addition to default rules\n * <TypographyPlugin enable={['multiplication', 'plusMinus']} />\n * ```\n */\n enable?: ReadonlyArray<TEnabledRuleName>\n /**\n * Disable specific rules (subtractive from preset).\n * Use this to disable rules that would otherwise be enabled by the preset.\n * Cannot contain rules that are in the `enable` array (TypeScript will enforce this).\n *\n * @example\n * ```tsx\n * // Disable em dash from the default rules\n * <TypographyPlugin disable={['emDash']} />\n * ```\n */\n disable?: ReadonlyArray<TDisabledRuleName>\n}\n\n/**\n * @public\n */\nexport function TypographyPlugin<\n TEnabledRuleName extends RuleName = never,\n TDisabledRuleName extends Exclude<RuleName, TEnabledRuleName> = never,\n>(props: TypographyPluginProps<TEnabledRuleName, TDisabledRuleName>) {\n const {preset = 'default', enable = [], disable = [], guard} = props\n\n const configuredInputRules = useMemo(() => {\n // Determine which rules should be enabled based on preset\n const enabledRules = new Set<RuleName>()\n\n if (preset === 'all') {\n // Enable all rules\n for (const rule of defaultRuleConfig) {\n enabledRules.add(rule.name)\n }\n } else if (preset === 'default') {\n // Enable only default rules (state: 'on')\n for (const rule of defaultRuleConfig) {\n if (rule.state === 'on') {\n enabledRules.add(rule.name)\n }\n }\n }\n // preset === 'none' starts with empty set\n\n // Apply enable list (additive)\n for (const ruleName of enable) {\n enabledRules.add(ruleName)\n }\n\n // Apply disable list (subtractive)\n for (const ruleName of disable) {\n enabledRules.delete(ruleName)\n }\n\n // Build final rule list\n return defaultRuleConfig.flatMap((rule) =>\n enabledRules.has(rule.name)\n ? [{...rule.rule, guard: guard ?? (() => true)}]\n : [],\n )\n }, [preset, enable, disable, guard])\n\n return <InputRulePlugin rules={configuredInputRules} />\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@portabletext/plugin-typography",
3
- "version": "8.0.43",
3
+ "version": "8.0.45",
4
4
  "description": "Automatically transform text to typographic variants",
5
5
  "keywords": [
6
6
  "plugin",
@@ -24,19 +24,21 @@
24
24
  "type": "module",
25
25
  "sideEffects": false,
26
26
  "main": "./dist/index.js",
27
+ "module": "./dist/index.js",
27
28
  "types": "./dist/index.d.ts",
28
29
  "exports": {
29
30
  ".": "./dist/index.js",
30
31
  "./package.json": "./package.json"
31
32
  },
32
33
  "dependencies": {
33
- "@portabletext/plugin-input-rule": "^6.0.12"
34
+ "@portabletext/plugin-input-rule": "^6.0.14"
34
35
  },
35
36
  "devDependencies": {
36
- "@sanity/pkg-utils": "^10.8.2",
37
+ "@rolldown/plugin-babel": "^0.2.3",
38
+ "@sanity/pkg-utils": "^12.1.0",
37
39
  "@sanity/tsconfig": "^2.1.0",
38
40
  "@types/react": "^19.2.17",
39
- "@vitejs/plugin-react": "^5.2.0",
41
+ "@vitejs/plugin-react": "^6.0.5",
40
42
  "@vitest/browser": "^4.1.10",
41
43
  "@vitest/browser-playwright": "^4.1.10",
42
44
  "babel-plugin-react-compiler": "^1.0.0",
@@ -46,21 +48,21 @@
46
48
  "react": "^19.2.7",
47
49
  "typescript": "6.0.3",
48
50
  "typescript-eslint": "^8.62.0",
49
- "vite": "^7.3.5",
51
+ "vite": "^8.2.0",
50
52
  "vitest": "^4.1.10",
51
- "@portabletext/editor": "^7.10.15",
52
- "@portabletext/schema": "^2.2.3",
53
- "racejar": "2.0.10"
53
+ "@portabletext/editor": "^7.10.17",
54
+ "@portabletext/schema": "^2.2.4",
55
+ "racejar": "2.0.11"
54
56
  },
55
57
  "peerDependencies": {
56
- "@portabletext/editor": "^7.10.15",
58
+ "@portabletext/editor": "^7.10.17",
57
59
  "react": "^19.2"
58
60
  },
59
61
  "engines": {
60
62
  "node": ">=20.19 <22 || >=22.12"
61
63
  },
62
64
  "scripts": {
63
- "build": "pkg-utils build --strict --check --clean",
65
+ "build": "pkg-utils build --strict --check",
64
66
  "check:lint": "biome lint .",
65
67
  "check:react-compiler": "eslint --cache .",
66
68
  "check:types": "tsc",