npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@hebamuh28/mini-editor

v1.2.18

Published

A lightweight rich text editor component for Vue 3

Readme

Mini Editor - Enhanced Rich Text Editor

A powerful, modular Vue 3 rich text editor with comprehensive translation support, customizable toolbar, preview functionality, and enhanced media handling.

✨ Features

🎨 Core Features

  • Rich Text Editing: Bold, italic, underline, strikethrough
  • Text Formatting: Headings (H1-H5), text color, highlight colors
  • Lists & Alignment: Bullet lists, numbered lists, text alignment
  • Multilingual Support: Arabic and English with RTL/LTR switching
  • Media Support: Images, videos, audio with size controls
  • HTML Paste: Paste HTML code directly into the editor
  • Preview Mode: Preview content in a popup modal
  • Undo/Redo: Full undo/redo functionality
  • Clear Formatting: Remove all formatting with one click

🔧 Modular Architecture

  • Separate Toolbar Component: Customizable toolbar with show/hide options
  • Preview Component: Standalone preview modal
  • Media Uploader: Enhanced media upload with multiple tabs
  • Unified Icon System: Centralized icon management
  • CSS Separation: All styles moved to external CSS file

🎛️ Toolbar Customization

Control which buttons appear in the toolbar:

<MiniEditor
  :show-bold="true"
  :show-italic="true"
  :show-underline="false"
  :show-headings="true"
  :show-media="true"
  :show-preview="true"
  :show-language-switcher="true"
  :show-text-color="true"
  :show-highlight="true"
  :show-bullet-list="true"
  :show-numbered-list="true"
  :show-align-right="true"
  :show-align-center="true"
  :show-align-left="true"
  :show-undo="true"
  :show-redo="true"
  :show-clear-formatting="true"
/>

📱 Enhanced Media Upload

  • File Upload: Drag & drop or click to upload
  • URL Input: Paste media URLs directly
  • HTML Paste: Paste HTML code for custom media
  • Size Controls: Adjust width/height with presets
  • Preview: See media before inserting
  • Multiple Formats: Images, videos, audio files

🌐 Translation System

  • Built-in Translations: Arabic and English
  • Custom Translations: Override any translation
  • Exportable Utilities: Use translation functions in your app
  • RTL/LTR Support: Automatic direction switching

📦 Installation

npm install @hebamuh28/mini-editor
# or
yarn add @hebamuh28/mini-editor
# or
pnpm add @hebamuh28/mini-editor

🚀 Quick Start

<template>
  <div>
    <MiniEditor 
      v-model="content" 
      label="My Editor"
      placeholder="Start typing..."
    />
    <pre>{{ content }}</pre>
  </div>
</template>

<script setup>
import { ref } from 'vue'
import { MiniEditor } from '@hebamuh28/mini-editor'

const content = ref({ ar: '', en: '' })
</script>

📖 Advanced Usage

Full Featured Editor

<MiniEditor 
  v-model="content" 
  label="Full Featured Editor"
  placeholder="Start typing here..."
  :show-language-switcher="true"
  :show-text-color="true"
  :show-highlight="true"
  :show-bold="true"
  :show-italic="true"
  :show-underline="true"
  :show-strike="true"
  :show-bullet-list="true"
  :show-numbered-list="true"
  :show-align-right="true"
  :show-align-center="true"
  :show-align-left="true"
  :show-headings="true"
  :show-media="true"
  :show-undo="true"
  :show-redo="true"
  :show-clear-formatting="true"
  :show-preview="true"
/>

Minimal Editor

<MiniEditor 
  v-model="content" 
  label="Minimal Editor"
  placeholder="Basic formatting only..."
  :show-language-switcher="false"
  :show-text-color="false"
  :show-highlight="false"
  :show-bold="true"
  :show-italic="true"
  :show-underline="false"
  :show-strike="false"
  :show-bullet-list="true"
  :show-numbered-list="true"
  :show-align-right="false"
  :show-align-center="false"
  :show-align-left="false"
  :show-headings="false"
  :show-media="false"
  :show-undo="true"
  :show-redo="true"
  :show-clear-formatting="false"
  :show-preview="false"
/>

Custom Translations

<template>
  <MiniEditor 
    v-model="content" 
    label="Custom Translations"
    :translations="customTranslations"
  />
</template>

<script setup>
import { ref } from 'vue'
import { MiniEditor } from '@hebamuh28/mini-editor'

const content = ref({ ar: '', en: '' })

const customTranslations = {
  ar: {
    switchLanguage: "تغيير اللغة",
    textColor: "لون النص",
    highlight: "تظليل",
    bold: "عريض",
    italic: "مائل",
    // ... more translations
  },
  en: {
    switchLanguage: "Change Language",
    textColor: "Text Color",
    highlight: "Highlight",
    bold: "Bold",
    italic: "Italic",
    // ... more translations
  }
}
</script>

Using Translation Utilities

import { 
  defaultTranslations, 
  mergeTranslations, 
  getTranslation,
  langConfig 
} from '@hebamuh28/mini-editor'

// Merge custom translations with defaults
const customTranslations = mergeTranslations(defaultTranslations, {
  ar: { bold: "عريض جداً" },
  en: { bold: "Very Bold" }
})

// Get specific translation
const boldText = getTranslation('bold', 'ar', customTranslations)

// Language configuration
console.log(langConfig.ar.label) // "العربية"

🎨 Styling

The editor uses Tailwind CSS classes and custom CSS. All styles are in editor.css:

/* Custom styles */
.editor-area {
  min-height: 120px;
  max-height: 260px;
  padding: 12px;
  border: 1px solid #e5e7eb;
  border-radius: 8px;
  background: #f9fafb;
  font-family: "Tajawal", sans-serif;
}

.toolbar-btn {
  background: #f3f4f6;
  border: none;
  border-radius: 6px;
  padding: 5px 7px;
  transition: background 0.2s;
}

📋 Props

| Prop | Type | Default | Description | |------|------|---------|-------------| | modelValue | Object | Required | Content object with ar and en keys | | label | String | - | Editor label | | hint | String | - | Help text shown with info icon | | required | Boolean | false | Show required indicator | | placeholder | String | - | Placeholder text | | translations | Object | Built-in | Custom translations | | showLanguageSwitcher | Boolean | true | Show language switcher | | defaultLanguage | 'ar' \| 'en' | 'ar' | Default language | | showTextColor | Boolean | true | Show text color button | | showHighlight | Boolean | true | Show highlight button | | showBold | Boolean | true | Show bold button | | showItalic | Boolean | true | Show italic button | | showUnderline | Boolean | true | Show underline button | | showStrike | Boolean | true | Show strikethrough button | | showBulletList | Boolean | true | Show bullet list button | | showNumberedList | Boolean | true | Show numbered list button | | showAlignRight | Boolean | true | Show align right button | | showAlignCenter | Boolean | true | Show align center button | | showAlignLeft | Boolean | true | Show align left button | | showHeadings | Boolean | true | Show heading buttons | | showMedia | Boolean | true | Show media upload button | | showUndo | Boolean | true | Show undo button | | showRedo | Boolean | true | Show redo button | | showClearFormatting | Boolean | true | Show clear formatting button | | showPreview | Boolean | true | Show preview button |

🎯 Events

| Event | Payload | Description | |-------|---------|-------------| | update:modelValue | Object | Content updated | | languageChange | String | Language switched |

🏗️ Architecture

Components

  • MiniEditor.vue: Main editor component
  • MiniEditorToolbar.vue: Customizable toolbar
  • MiniEditorPreview.vue: Preview modal
  • MediaUploader.vue: Enhanced media upload
  • Icon.vue: Unified icon system

Utilities

  • translations.ts: Translation management
  • editor.css: All editor styles
  • types/index.ts: TypeScript definitions

🔧 Development

# Install dependencies
pnpm install

# Run development server
pnpm run dev

# Build for production
pnpm run build

# Run tests
pnpm run test

# Publish package
pnpm publish

Testing

Unit Tests

Run the unit tests:

npm run test

Integration Tests

Run comprehensive integration tests that simulate real-world package consumption:

npm run test:integration

The integration tests check:

  • ✅ All required files exist in dist/
  • ✅ Package.json exports are correctly configured
  • ✅ Import syntax is valid for ES and UMD modules
  • ✅ CSS file is valid and contains expected content
  • ✅ Types field points to existing files
  • ✅ Files field includes all necessary directories
  • ✅ All export paths are valid
  • ✅ Module compatibility (ES/UMD formats)
  • ✅ Package size optimization warnings
  • ✅ Common build issues (source maps, console.log, etc.)

These tests run automatically before publishing to catch issues that would break consumer projects.

📄 License

MIT License - see LICENSE file for details.

🤝 Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

📞 Support

If you have any questions or need help, please open an issue on GitHub.


Version: 1.2.0
Size: 91.71 kB (gzipped)
Dependencies: Vue 3, Tailwind CSS
Browser Support: Modern browsers with ES6+ support