@portabletext/plugin-typography 1.0.8 → 1.0.10
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.cjs.map +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +9 -9
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/create-decorator-guard.ts","../src/input-rules.typography.ts","../src/plugin.typography.tsx"],"sourcesContent":["import type {EditorSchema} from '@portabletext/editor'\nimport {\n getSelectedSpans,\n isActiveDecorator,\n} from '@portabletext/editor/selectors'\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: ({schema}) => schema.decorators.flatMap((decorator) => decorator.name === 'code' ? [decorator.name] : []),\n * })\n *\n * <TypographyPlugin guard={guard} />\n * ```\n */\nexport function createDecoratorGuard(config: {\n decorators: ({schema}: {schema: EditorSchema}) => Array<string>\n}): InputRuleGuard {\n return ({snapshot, event}) => {\n const decorators = config.decorators({schema: snapshot.context.schema})\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)(1\\/2)\\s/,\n transform: () => '½',\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?([*x])\\s?\\d+/,\n transform: () => '×',\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)(1\\/4)\\s/,\n transform: () => '¼',\n})\n\n/**\n * @public\n */\nexport const threeQuartersRule = defineTextTransformRule({\n on: /(?:^|\\s)(3\\/4)\\s/,\n transform: () => '¾',\n})\n","import {\n InputRulePlugin,\n type InputRule,\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\n/**\n * @public\n */\nexport type TypographyPluginProps = {\n guard?: InputRuleGuard\n /**\n * Configure which rules to enable or disable. Ordinary rules like `emDash` and `ellipsis` are enabled by default.\n * Less common rules like `multiplication` are disabled by default.\n */\n rules?: {\n /**\n * @defaultValue 'on'\n */\n emDash?: 'on' | 'off'\n /**\n * @defaultValue 'on'\n */\n ellipsis?: 'on' | 'off'\n /**\n * @defaultValue 'on'\n */\n openingDoubleQuote?: 'on' | 'off'\n /**\n * @defaultValue 'on'\n */\n closingDoubleQuote?: 'on' | 'off'\n /**\n * @defaultValue 'on'\n */\n openingSingleQuote?: 'on' | 'off'\n /**\n * @defaultValue 'on'\n */\n closingSingleQuote?: 'on' | 'off'\n /**\n * @defaultValue 'on'\n */\n leftArrow?: 'on' | 'off'\n /**\n * @defaultValue 'on'\n */\n rightArrow?: 'on' | 'off'\n /**\n * @defaultValue 'on'\n */\n copyright?: 'on' | 'off'\n /**\n * @defaultValue 'on'\n */\n trademark?: 'on' | 'off'\n /**\n * @defaultValue 'on'\n */\n servicemark?: 'on' | 'off'\n /**\n * @defaultValue 'on'\n */\n registeredTrademark?: 'on' | 'off'\n /**\n * @defaultValue 'off'\n */\n oneHalf?: 'on' | 'off'\n /**\n * @defaultValue 'off'\n */\n plusMinus?: 'on' | 'off'\n /**\n * @defaultValue 'off'\n */\n notEqual?: 'on' | 'off'\n /**\n * @defaultValue 'off'\n */\n laquo?: 'on' | 'off'\n /**\n * @defaultValue 'off'\n */\n raquo?: 'on' | 'off'\n /**\n * @defaultValue 'off'\n */\n multiplication?: 'on' | 'off'\n /**\n * @defaultValue 'off'\n */\n superscriptTwo?: 'on' | 'off'\n /**\n * @defaultValue 'off'\n */\n superscriptThree?: 'on' | 'off'\n /**\n * @defaultValue 'off'\n */\n oneQuarter?: 'on' | 'off'\n /**\n * @defaultValue 'off'\n */\n threeQuarters?: 'on' | 'off'\n }\n}\n\ntype RuleName = keyof NonNullable<TypographyPluginProps['rules']>\n\nconst defaultRuleConfig: Array<{\n name: RuleName\n rule: InputRule\n state: 'on' | 'off'\n}> = [\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]\n\n/**\n * @public\n */\nexport function TypographyPlugin(props: TypographyPluginProps) {\n const configuredInputRules = useMemo(\n () =>\n defaultRuleConfig.flatMap((rule) =>\n props.rules && props.rules[rule.name] === 'on'\n ? {...rule.rule, guard: props.guard ?? (() => true)}\n : (props.rules && props.rules[rule.name] === 'off') ||\n rule.state === 'off'\n ? []\n : {...rule.rule, guard: props.guard ?? (() => true)},\n ),\n [props.guard, props.rules],\n )\n\n return <InputRulePlugin {...props} rules={configuredInputRules} />\n}\n"],"names":["createDecoratorGuard","config","snapshot","event","decorators","schema","context","length","matchedSpans","matches","flatMap","match","getSelectedSpans","selection","preventInputRule","decorator","isActiveDecorator","some","span","node","marks","includes","emDashRule","defineTextTransformRule","on","transform","ellipsisRule","openingDoubleQuoteRule","closingDoubleQuoteRule","openingSingleQuoteRule","closingSingleQuoteRule","smartQuotesRules","leftArrowRule","rightArrowRule","copyrightRule","servicemarkRule","trademarkRule","registeredTrademarkRule","oneHalfRule","plusMinusRule","notEqualRule","laquoRule","raquoRule","multiplicationRule","superscriptTwoRule","superscriptThreeRule","oneQuarterRule","threeQuartersRule","defaultRuleConfig","name","rule","state","TypographyPlugin","props","$","_c","t0","guard","rules","_temp","_temp2","configuredInputRules","t1","jsx","InputRulePlugin"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/create-decorator-guard.ts","../src/input-rules.typography.ts","../src/plugin.typography.tsx"],"sourcesContent":["import type {EditorSchema} from '@portabletext/editor'\nimport {\n getSelectedSpans,\n isActiveDecorator,\n} from '@portabletext/editor/selectors'\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: ({schema}) => schema.decorators.flatMap((decorator) => decorator.name === 'code' ? [decorator.name] : []),\n * })\n *\n * <TypographyPlugin guard={guard} />\n * ```\n */\nexport function createDecoratorGuard(config: {\n decorators: ({schema}: {schema: EditorSchema}) => Array<string>\n}): InputRuleGuard {\n return ({snapshot, event}) => {\n const decorators = config.decorators({schema: snapshot.context.schema})\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)(1\\/2)\\s/,\n transform: () => '½',\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?([*x])\\s?\\d+/,\n transform: () => '×',\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)(1\\/4)\\s/,\n transform: () => '¼',\n})\n\n/**\n * @public\n */\nexport const threeQuartersRule = defineTextTransformRule({\n on: /(?:^|\\s)(3\\/4)\\s/,\n transform: () => '¾',\n})\n","import {\n InputRulePlugin,\n type InputRule,\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\n/**\n * @public\n */\nexport type TypographyPluginProps = {\n guard?: InputRuleGuard\n /**\n * Configure which rules to enable or disable. Ordinary rules like `emDash` and `ellipsis` are enabled by default.\n * Less common rules like `multiplication` are disabled by default.\n */\n rules?: {\n /**\n * @defaultValue 'on'\n */\n emDash?: 'on' | 'off'\n /**\n * @defaultValue 'on'\n */\n ellipsis?: 'on' | 'off'\n /**\n * @defaultValue 'on'\n */\n openingDoubleQuote?: 'on' | 'off'\n /**\n * @defaultValue 'on'\n */\n closingDoubleQuote?: 'on' | 'off'\n /**\n * @defaultValue 'on'\n */\n openingSingleQuote?: 'on' | 'off'\n /**\n * @defaultValue 'on'\n */\n closingSingleQuote?: 'on' | 'off'\n /**\n * @defaultValue 'on'\n */\n leftArrow?: 'on' | 'off'\n /**\n * @defaultValue 'on'\n */\n rightArrow?: 'on' | 'off'\n /**\n * @defaultValue 'on'\n */\n copyright?: 'on' | 'off'\n /**\n * @defaultValue 'on'\n */\n trademark?: 'on' | 'off'\n /**\n * @defaultValue 'on'\n */\n servicemark?: 'on' | 'off'\n /**\n * @defaultValue 'on'\n */\n registeredTrademark?: 'on' | 'off'\n /**\n * @defaultValue 'off'\n */\n oneHalf?: 'on' | 'off'\n /**\n * @defaultValue 'off'\n */\n plusMinus?: 'on' | 'off'\n /**\n * @defaultValue 'off'\n */\n notEqual?: 'on' | 'off'\n /**\n * @defaultValue 'off'\n */\n laquo?: 'on' | 'off'\n /**\n * @defaultValue 'off'\n */\n raquo?: 'on' | 'off'\n /**\n * @defaultValue 'off'\n */\n multiplication?: 'on' | 'off'\n /**\n * @defaultValue 'off'\n */\n superscriptTwo?: 'on' | 'off'\n /**\n * @defaultValue 'off'\n */\n superscriptThree?: 'on' | 'off'\n /**\n * @defaultValue 'off'\n */\n oneQuarter?: 'on' | 'off'\n /**\n * @defaultValue 'off'\n */\n threeQuarters?: 'on' | 'off'\n }\n}\n\ntype RuleName = keyof NonNullable<TypographyPluginProps['rules']>\n\nconst defaultRuleConfig: Array<{\n name: RuleName\n rule: InputRule\n state: 'on' | 'off'\n}> = [\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]\n\n/**\n * @public\n */\nexport function TypographyPlugin(props: TypographyPluginProps) {\n const configuredInputRules = useMemo(\n () =>\n defaultRuleConfig.flatMap((rule) =>\n props.rules && props.rules[rule.name] === 'on'\n ? {...rule.rule, guard: props.guard ?? (() => true)}\n : (props.rules && props.rules[rule.name] === 'off') ||\n rule.state === 'off'\n ? []\n : {...rule.rule, guard: props.guard ?? (() => true)},\n ),\n [props.guard, props.rules],\n )\n\n return <InputRulePlugin {...props} rules={configuredInputRules} />\n}\n"],"names":["createDecoratorGuard","config","snapshot","event","decorators","schema","context","length","matchedSpans","matches","flatMap","match","getSelectedSpans","selection","preventInputRule","decorator","isActiveDecorator","some","span","node","marks","includes","emDashRule","defineTextTransformRule","on","transform","ellipsisRule","openingDoubleQuoteRule","closingDoubleQuoteRule","openingSingleQuoteRule","closingSingleQuoteRule","smartQuotesRules","leftArrowRule","rightArrowRule","copyrightRule","servicemarkRule","trademarkRule","registeredTrademarkRule","oneHalfRule","plusMinusRule","notEqualRule","laquoRule","raquoRule","multiplicationRule","superscriptTwoRule","superscriptThreeRule","oneQuarterRule","threeQuartersRule","defaultRuleConfig","name","rule","state","TypographyPlugin","props","$","_c","t0","guard","rules","_temp","_temp2","configuredInputRules","t1","jsx","InputRulePlugin"],"mappings":"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"}
|
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 {EditorSchema} from '@portabletext/editor'\nimport {\n getSelectedSpans,\n isActiveDecorator,\n} from '@portabletext/editor/selectors'\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: ({schema}) => schema.decorators.flatMap((decorator) => decorator.name === 'code' ? [decorator.name] : []),\n * })\n *\n * <TypographyPlugin guard={guard} />\n * ```\n */\nexport function createDecoratorGuard(config: {\n decorators: ({schema}: {schema: EditorSchema}) => Array<string>\n}): InputRuleGuard {\n return ({snapshot, event}) => {\n const decorators = config.decorators({schema: snapshot.context.schema})\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)(1\\/2)\\s/,\n transform: () => '½',\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?([*x])\\s?\\d+/,\n transform: () => '×',\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)(1\\/4)\\s/,\n transform: () => '¼',\n})\n\n/**\n * @public\n */\nexport const threeQuartersRule = defineTextTransformRule({\n on: /(?:^|\\s)(3\\/4)\\s/,\n transform: () => '¾',\n})\n","import {\n InputRulePlugin,\n type InputRule,\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\n/**\n * @public\n */\nexport type TypographyPluginProps = {\n guard?: InputRuleGuard\n /**\n * Configure which rules to enable or disable. Ordinary rules like `emDash` and `ellipsis` are enabled by default.\n * Less common rules like `multiplication` are disabled by default.\n */\n rules?: {\n /**\n * @defaultValue 'on'\n */\n emDash?: 'on' | 'off'\n /**\n * @defaultValue 'on'\n */\n ellipsis?: 'on' | 'off'\n /**\n * @defaultValue 'on'\n */\n openingDoubleQuote?: 'on' | 'off'\n /**\n * @defaultValue 'on'\n */\n closingDoubleQuote?: 'on' | 'off'\n /**\n * @defaultValue 'on'\n */\n openingSingleQuote?: 'on' | 'off'\n /**\n * @defaultValue 'on'\n */\n closingSingleQuote?: 'on' | 'off'\n /**\n * @defaultValue 'on'\n */\n leftArrow?: 'on' | 'off'\n /**\n * @defaultValue 'on'\n */\n rightArrow?: 'on' | 'off'\n /**\n * @defaultValue 'on'\n */\n copyright?: 'on' | 'off'\n /**\n * @defaultValue 'on'\n */\n trademark?: 'on' | 'off'\n /**\n * @defaultValue 'on'\n */\n servicemark?: 'on' | 'off'\n /**\n * @defaultValue 'on'\n */\n registeredTrademark?: 'on' | 'off'\n /**\n * @defaultValue 'off'\n */\n oneHalf?: 'on' | 'off'\n /**\n * @defaultValue 'off'\n */\n plusMinus?: 'on' | 'off'\n /**\n * @defaultValue 'off'\n */\n notEqual?: 'on' | 'off'\n /**\n * @defaultValue 'off'\n */\n laquo?: 'on' | 'off'\n /**\n * @defaultValue 'off'\n */\n raquo?: 'on' | 'off'\n /**\n * @defaultValue 'off'\n */\n multiplication?: 'on' | 'off'\n /**\n * @defaultValue 'off'\n */\n superscriptTwo?: 'on' | 'off'\n /**\n * @defaultValue 'off'\n */\n superscriptThree?: 'on' | 'off'\n /**\n * @defaultValue 'off'\n */\n oneQuarter?: 'on' | 'off'\n /**\n * @defaultValue 'off'\n */\n threeQuarters?: 'on' | 'off'\n }\n}\n\ntype RuleName = keyof NonNullable<TypographyPluginProps['rules']>\n\nconst defaultRuleConfig: Array<{\n name: RuleName\n rule: InputRule\n state: 'on' | 'off'\n}> = [\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]\n\n/**\n * @public\n */\nexport function TypographyPlugin(props: TypographyPluginProps) {\n const configuredInputRules = useMemo(\n () =>\n defaultRuleConfig.flatMap((rule) =>\n props.rules && props.rules[rule.name] === 'on'\n ? {...rule.rule, guard: props.guard ?? (() => true)}\n : (props.rules && props.rules[rule.name] === 'off') ||\n rule.state === 'off'\n ? []\n : {...rule.rule, guard: props.guard ?? (() => true)},\n ),\n [props.guard, props.rules],\n )\n\n return <InputRulePlugin {...props} rules={configuredInputRules} />\n}\n"],"names":["createDecoratorGuard","config","snapshot","event","decorators","schema","context","length","matchedSpans","matches","flatMap","match","getSelectedSpans","selection","preventInputRule","decorator","isActiveDecorator","some","span","node","marks","includes","emDashRule","defineTextTransformRule","on","transform","ellipsisRule","openingDoubleQuoteRule","closingDoubleQuoteRule","openingSingleQuoteRule","closingSingleQuoteRule","smartQuotesRules","leftArrowRule","rightArrowRule","copyrightRule","servicemarkRule","trademarkRule","registeredTrademarkRule","oneHalfRule","plusMinusRule","notEqualRule","laquoRule","raquoRule","multiplicationRule","superscriptTwoRule","superscriptThreeRule","oneQuarterRule","threeQuartersRule","defaultRuleConfig","name","rule","state","TypographyPlugin","props","$","_c","t0","guard","rules","_temp","_temp2","configuredInputRules","t1"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/create-decorator-guard.ts","../src/input-rules.typography.ts","../src/plugin.typography.tsx"],"sourcesContent":["import type {EditorSchema} from '@portabletext/editor'\nimport {\n getSelectedSpans,\n isActiveDecorator,\n} from '@portabletext/editor/selectors'\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: ({schema}) => schema.decorators.flatMap((decorator) => decorator.name === 'code' ? [decorator.name] : []),\n * })\n *\n * <TypographyPlugin guard={guard} />\n * ```\n */\nexport function createDecoratorGuard(config: {\n decorators: ({schema}: {schema: EditorSchema}) => Array<string>\n}): InputRuleGuard {\n return ({snapshot, event}) => {\n const decorators = config.decorators({schema: snapshot.context.schema})\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)(1\\/2)\\s/,\n transform: () => '½',\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?([*x])\\s?\\d+/,\n transform: () => '×',\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)(1\\/4)\\s/,\n transform: () => '¼',\n})\n\n/**\n * @public\n */\nexport const threeQuartersRule = defineTextTransformRule({\n on: /(?:^|\\s)(3\\/4)\\s/,\n transform: () => '¾',\n})\n","import {\n InputRulePlugin,\n type InputRule,\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\n/**\n * @public\n */\nexport type TypographyPluginProps = {\n guard?: InputRuleGuard\n /**\n * Configure which rules to enable or disable. Ordinary rules like `emDash` and `ellipsis` are enabled by default.\n * Less common rules like `multiplication` are disabled by default.\n */\n rules?: {\n /**\n * @defaultValue 'on'\n */\n emDash?: 'on' | 'off'\n /**\n * @defaultValue 'on'\n */\n ellipsis?: 'on' | 'off'\n /**\n * @defaultValue 'on'\n */\n openingDoubleQuote?: 'on' | 'off'\n /**\n * @defaultValue 'on'\n */\n closingDoubleQuote?: 'on' | 'off'\n /**\n * @defaultValue 'on'\n */\n openingSingleQuote?: 'on' | 'off'\n /**\n * @defaultValue 'on'\n */\n closingSingleQuote?: 'on' | 'off'\n /**\n * @defaultValue 'on'\n */\n leftArrow?: 'on' | 'off'\n /**\n * @defaultValue 'on'\n */\n rightArrow?: 'on' | 'off'\n /**\n * @defaultValue 'on'\n */\n copyright?: 'on' | 'off'\n /**\n * @defaultValue 'on'\n */\n trademark?: 'on' | 'off'\n /**\n * @defaultValue 'on'\n */\n servicemark?: 'on' | 'off'\n /**\n * @defaultValue 'on'\n */\n registeredTrademark?: 'on' | 'off'\n /**\n * @defaultValue 'off'\n */\n oneHalf?: 'on' | 'off'\n /**\n * @defaultValue 'off'\n */\n plusMinus?: 'on' | 'off'\n /**\n * @defaultValue 'off'\n */\n notEqual?: 'on' | 'off'\n /**\n * @defaultValue 'off'\n */\n laquo?: 'on' | 'off'\n /**\n * @defaultValue 'off'\n */\n raquo?: 'on' | 'off'\n /**\n * @defaultValue 'off'\n */\n multiplication?: 'on' | 'off'\n /**\n * @defaultValue 'off'\n */\n superscriptTwo?: 'on' | 'off'\n /**\n * @defaultValue 'off'\n */\n superscriptThree?: 'on' | 'off'\n /**\n * @defaultValue 'off'\n */\n oneQuarter?: 'on' | 'off'\n /**\n * @defaultValue 'off'\n */\n threeQuarters?: 'on' | 'off'\n }\n}\n\ntype RuleName = keyof NonNullable<TypographyPluginProps['rules']>\n\nconst defaultRuleConfig: Array<{\n name: RuleName\n rule: InputRule\n state: 'on' | 'off'\n}> = [\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]\n\n/**\n * @public\n */\nexport function TypographyPlugin(props: TypographyPluginProps) {\n const configuredInputRules = useMemo(\n () =>\n defaultRuleConfig.flatMap((rule) =>\n props.rules && props.rules[rule.name] === 'on'\n ? {...rule.rule, guard: props.guard ?? (() => true)}\n : (props.rules && props.rules[rule.name] === 'off') ||\n rule.state === 'off'\n ? []\n : {...rule.rule, guard: props.guard ?? (() => true)},\n ),\n [props.guard, props.rules],\n )\n\n return <InputRulePlugin {...props} rules={configuredInputRules} />\n}\n"],"names":["createDecoratorGuard","config","snapshot","event","decorators","schema","context","length","matchedSpans","matches","flatMap","match","getSelectedSpans","selection","preventInputRule","decorator","isActiveDecorator","some","span","node","marks","includes","emDashRule","defineTextTransformRule","on","transform","ellipsisRule","openingDoubleQuoteRule","closingDoubleQuoteRule","openingSingleQuoteRule","closingSingleQuoteRule","smartQuotesRules","leftArrowRule","rightArrowRule","copyrightRule","servicemarkRule","trademarkRule","registeredTrademarkRule","oneHalfRule","plusMinusRule","notEqualRule","laquoRule","raquoRule","multiplicationRule","superscriptTwoRule","superscriptThreeRule","oneQuarterRule","threeQuartersRule","defaultRuleConfig","name","rule","state","TypographyPlugin","props","$","_c","t0","guard","rules","_temp","_temp2","configuredInputRules","t1"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@portabletext/plugin-typography",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.10",
|
|
4
4
|
"description": "Automatically transform text to typographic variants",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"portabletext",
|
|
@@ -37,27 +37,27 @@
|
|
|
37
37
|
"src"
|
|
38
38
|
],
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"react-compiler-runtime": "
|
|
41
|
-
"@portabletext/plugin-input-rule": "~0.3.
|
|
40
|
+
"react-compiler-runtime": "1.0.0",
|
|
41
|
+
"@portabletext/plugin-input-rule": "~0.3.5"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
44
|
"@sanity/pkg-utils": "^8.1.4",
|
|
45
45
|
"@types/react": "^19.2.0",
|
|
46
46
|
"@vitejs/plugin-react": "^5.0.3",
|
|
47
|
-
"babel-plugin-react-compiler": "
|
|
48
|
-
"eslint": "^9.
|
|
47
|
+
"babel-plugin-react-compiler": "1.0.0",
|
|
48
|
+
"eslint": "^9.38.0",
|
|
49
49
|
"eslint-formatter-gha": "^1.6.0",
|
|
50
|
-
"eslint-plugin-react-hooks": "
|
|
50
|
+
"eslint-plugin-react-hooks": "7.0.0",
|
|
51
51
|
"react": "^19.2.0",
|
|
52
52
|
"typescript": "5.9.3",
|
|
53
|
-
"typescript-eslint": "^8.
|
|
53
|
+
"typescript-eslint": "^8.46.1",
|
|
54
54
|
"vitest": "^3.2.4",
|
|
55
|
-
"@portabletext/editor": "^2.14.
|
|
55
|
+
"@portabletext/editor": "^2.14.4",
|
|
56
56
|
"@portabletext/schema": "^1.2.0",
|
|
57
57
|
"racejar": "1.3.1"
|
|
58
58
|
},
|
|
59
59
|
"peerDependencies": {
|
|
60
|
-
"@portabletext/editor": "^2.14.
|
|
60
|
+
"@portabletext/editor": "^2.14.4",
|
|
61
61
|
"react": "^19.1.1"
|
|
62
62
|
},
|
|
63
63
|
"publishConfig": {
|