{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "autoformat-kit",
  "dependencies": [
    "@platejs/code-block",
    "@platejs/list"
  ],
  "files": [
    {
      "path": "src/registry/components/editor/plugins/autoformat-kit.tsx",
      "content": "'use client';\n\nimport type { SlateEditor } from 'platejs';\n\nimport {\n  createSlatePlugin,\n  createTextSubstitutionInputRule,\n  KEYS,\n} from 'platejs';\n\nconst isTextSubstitutionBlocked = (editor: SlateEditor) =>\n  editor.api.some({\n    match: {\n      type: [editor.getType(KEYS.codeBlock)],\n    },\n  });\n\nconst createAutoformatTextSubstitutionRule = ({\n  patterns,\n}: {\n  patterns: Parameters<typeof createTextSubstitutionInputRule>[0]['patterns'];\n}) =>\n  createTextSubstitutionInputRule({\n    enabled: ({ editor }) => !isTextSubstitutionBlocked(editor),\n    patterns,\n  });\n\nconst arrowsRule = createAutoformatTextSubstitutionRule({\n  patterns: [\n    { format: '→', match: '->' },\n    { format: '←', match: '<-' },\n    { format: '⇒', match: '=>' },\n    { format: '⇐', match: ['<=', '≤='] },\n  ],\n});\n\nconst comparisonsRule = createAutoformatTextSubstitutionRule({\n  patterns: [\n    { format: '≯', match: '!>' },\n    { format: '≮', match: '!<' },\n    { format: '≥', match: '>=' },\n    { format: '≤', match: '<=' },\n    { format: '≱', match: '!>=' },\n    { format: '≰', match: '!<=' },\n  ],\n});\n\nconst equalityRule = createAutoformatTextSubstitutionRule({\n  patterns: [\n    { format: '≠', match: '!=' },\n    { format: '≡', match: '==' },\n    { format: '≢', match: ['!==', '≠='] },\n    { format: '≈', match: '~=' },\n    { format: '≉', match: '!~=' },\n  ],\n});\n\nconst fractionsRule = createAutoformatTextSubstitutionRule({\n  patterns: [\n    { format: '½', match: '1/2' },\n    { format: '⅓', match: '1/3' },\n    { format: '¼', match: '1/4' },\n    { format: '⅕', match: '1/5' },\n    { format: '⅙', match: '1/6' },\n    { format: '⅐', match: '1/7' },\n    { format: '⅛', match: '1/8' },\n    { format: '⅑', match: '1/9' },\n    { format: '⅒', match: '1/10' },\n    { format: '⅔', match: '2/3' },\n    { format: '⅖', match: '2/5' },\n    { format: '¾', match: '3/4' },\n    { format: '⅗', match: '3/5' },\n    { format: '⅜', match: '3/8' },\n    { format: '⅘', match: '4/5' },\n    { format: '⅚', match: '5/6' },\n    { format: '⅝', match: '5/8' },\n    { format: '⅞', match: '7/8' },\n  ],\n});\n\nconst legalRule = createAutoformatTextSubstitutionRule({\n  patterns: [\n    { format: '™', match: ['(tm)', '(TM)'] },\n    { format: '®', match: ['(r)', '(R)'] },\n    { format: '©', match: ['(c)', '(C)'] },\n  ],\n});\n\nconst legalHtmlRule = createAutoformatTextSubstitutionRule({\n  patterns: [\n    { format: '™', match: '&trade;' },\n    { format: '®', match: '&reg;' },\n    { format: '©', match: '&copy;' },\n    { format: '§', match: '&sect;' },\n  ],\n});\n\nconst operatorsRule = createAutoformatTextSubstitutionRule({\n  patterns: [\n    { format: '±', match: '+-' },\n    { format: '‰', match: '%%' },\n    { format: '‱', match: ['%%%', '‰%'] },\n  ],\n});\n\nconst punctuationRule = createAutoformatTextSubstitutionRule({\n  patterns: [\n    { format: '»', match: '>>' },\n    { format: '«', match: '<<' },\n  ],\n});\n\nconst smartQuotesRule = createAutoformatTextSubstitutionRule({\n  patterns: [\n    { format: ['“', '”'], match: '\"' },\n    { format: ['‘', '’'], match: \"'\" },\n  ],\n});\n\nconst subscriptNumbersRule = createAutoformatTextSubstitutionRule({\n  patterns: [\n    { format: '₀', match: '~0' },\n    { format: '₁', match: '~1' },\n    { format: '₂', match: '~2' },\n    { format: '₃', match: '~3' },\n    { format: '₄', match: '~4' },\n    { format: '₅', match: '~5' },\n    { format: '₆', match: '~6' },\n    { format: '₇', match: '~7' },\n    { format: '₈', match: '~8' },\n    { format: '₉', match: '~9' },\n  ],\n});\n\nconst subscriptSymbolsRule = createAutoformatTextSubstitutionRule({\n  patterns: [\n    { format: '₊', match: '~+' },\n    { format: '₋', match: '~-' },\n  ],\n});\n\nconst superscriptNumbersRule = createAutoformatTextSubstitutionRule({\n  patterns: [\n    { format: '⁰', match: '^0' },\n    { format: '¹', match: '^1' },\n    { format: '²', match: '^2' },\n    { format: '³', match: '^3' },\n    { format: '⁴', match: '^4' },\n    { format: '⁵', match: '^5' },\n    { format: '⁶', match: '^6' },\n    { format: '⁷', match: '^7' },\n    { format: '⁸', match: '^8' },\n    { format: '⁹', match: '^9' },\n  ],\n});\n\nconst superscriptSymbolsRule = createAutoformatTextSubstitutionRule({\n  patterns: [\n    { format: '°', match: '^o' },\n    { format: '⁺', match: '^+' },\n    { format: '⁻', match: '^-' },\n  ],\n});\n\nconst AutoformatShortcutsPlugin = createSlatePlugin({\n  key: 'autoformatShortcuts',\n  inputRules: [\n    legalRule,\n    legalHtmlRule,\n    arrowsRule,\n    comparisonsRule,\n    equalityRule,\n    fractionsRule,\n    operatorsRule,\n    punctuationRule,\n    smartQuotesRule,\n    subscriptNumbersRule,\n    subscriptSymbolsRule,\n    superscriptNumbersRule,\n    superscriptSymbolsRule,\n  ],\n});\n\nexport const AutoformatKit = [AutoformatShortcutsPlugin];\n",
      "type": "registry:component",
      "target": "@components/editor/plugins/autoformat-kit.tsx"
    }
  ],
  "type": "registry:component"
}