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 🙏

© 2025 – Pkg Stats / Ryan Hefner

mesdan

v1.1.7

Published

Latinî mesdan ile Osmanî metin yazmak için hazırlanmış bir alettir.

Readme

Mesdan (مسدان)

NPM Version License: MIT React

Mesdan kelimesi tuş (touch) takımı yani keyboard demektir.

İşbu menba Latin hurufatlı mesdanları kullanarak Osmanlı Türkçesi yazabilmek için hazırlanmıştır. Kancaya tanıtılan <textarea> ya <input> unsurlarının idâresini ele alıp yazma, silme, belleme (copy), koparma (cut), yerleme (paste) ilh. amelleri Osmanlı Türkçesiyle çalışacak şekilde îfâ eder.


Mesdan (مسدان)

The word Mesdan is an old Turkish word for keyboard.

This React hook is designed to facilitate writing Ottoman Turkish text using a standard Latin keyboard. It takes control of a given <textarea> or <input> element to ensure that actions like typing, deleting, copying, cutting, and pasting work correctly for the Ottoman script.


Kurma (Installation)

npm install mesdan
# ya / or
yarn add mesdan

Temel Kullanım (Basic Usage)

useMesdan kancasını unsura (component) dahil edin ve dönen metin ile metinSahasıİması değerlerini alâkalı unsura tanıtın.

  • metin: Unsurun value hassasına verilecek olan metindir.
  • metinSahasıİması: Unsurun ref hassasına verilecek olan delîldir.
import React from 'react';
import { useMesdan } from 'mesdan';

const TemelMesdan = () => {
  const { metin, metinSahasıİması } = useMesdan<HTMLInputElement>({
    ibtidaiMetin: '',
    tekSatırMı: true, // `true` ise <input>, `false` ise <textarea>
  });

  return (
    <input
      ref={metinSahasıİması}
      dir="rtl"
      value={metin}
      onChange={() => {}} // Kanca metni kendi idare ettiği için boş bırakılabilir
    />
  );
};

export default TemelMesdan;

Şerh: onChange vaqası (event) kanca tarafından dâhilen idare edildiği için boş bırakılabilir. React, value hassası olan unsurlarda bir onChange ameli beklediği için ekledik ama lâzım değil.

Kancanın Hassaları (Hook Props)

useMesdan kancası bir nesne (object) alır. İşte bu nesnenin alabileceği hassalar:

| Hususiyet (Prop) | Nev (Type) | Mecburi mi? (Required?) | İzah (Description) | | -------------------- | ----------------------------- | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | | ibtidaiMetin | string | Yo (No) | Metin sahasının ilk değeridir. Varsayılan (default) ''. | | tekSatırMı | boolean | He (Yes) | true ise tek satırlı (<input>) gibi çalışır ve Enter tuşuna basılınca aramaTalepEdilince amelini tetikler. false ise yeni satır ekler. | | latiniMi | boolean | Yo (No) | true ise kanca âtıl hale gelir ve Alfabe ile yazmağa başlar. Varsayılan false. | | aramaTalepEdilince | () => void | Yo (No) | tekSatırMı true iken Enter tuşuna basıldığında koşulan ameldir. | | metin | string | Yo (No) | Kancanın idâresini harice verir. tayinMetin ile beraber kullanılır. | | tayinMetin | (yeniMetin: string) => void | Yo (No) | Kancanın idâresini harice verir. metin ile beraber kullanılır. |

Kancanın Vâsılatı (Return Values)

Kanca, dört unsurdan müteşekkil bir dizi (array) vâsıl eder:

type MesdanCevabı<T> = {
  metinSahasıİması: RefObject<T | null>;
  metin: string;
  tebdilMetin: (yeniMetin: string) => void;
  latiniMi: boolean;
  tebdilLatiniMi: (latiniMi: boolean) => void;
};
  1. metinSahasıİması (RefObject): input veya textarea unsuruna banılacak olan ref. (ba-mak => bağlamak, rapt etmek)

  2. metin (string): Metin sahasının cârî değeri.

  3. tebdilMetin ((yeniMetin: string) => void): Metni haricen (programmatically) değiştirir.

  4. latiniMi (boolean): Kancanın o anki yazım haletini gösterir (false Elifba, true Alfabe).

  5. tebdilLatiniMi ((latiniMi: boolean) => void): Haleti Elifba ile Alfabe değiştirmek için kullanılır.

İleri Seviye Kullanım Misâlleri (Advanced Usage Examples)

1. Çok Satırlı Metin Sahası (<textarea>)

tekSatırMı hassasını false yaparak adid satırlı metin girişi sağlayabilirsiniz. Bu halde Enter mesine basmak yeni bir satır ekler.

import { useMesdan } from 'mesdan';

const AdidSatırlıMesdan = () => {
  const { metin, metinSahasıİması } = useMesdan<HTMLTextAreaElement>({
    ibtidaiMetin: '',
    tekSatırMı: false,
  });

  return <textarea ref={metinSahasıİması} dir="rtl" value={metin} onChange={() => {}} rows={5} />;
};

2. Hâriçten İdâreli Unsur (Controlled Component)

Metin vaziyetini (state) kancanın hâricinden idâre etmek isterseniz, metin ve tayinMetin hassalarını kullanabilirsiniz.

import { useState } from 'react';
import { useMesdan } from 'mesdan';

const HariçtenİdareliMesdan = () => {
  const [hariciMetin, tayinHariciMetin] = useState('');

  const { metinSahasıİması } = useMesdan<HTMLInputElement>({
    tekSatırMı: true,

    metin: hariciMetin,
    tayinMetin: tayinHariciMetin,
  });

  return (
    <div>
      <input ref={metinSahasıİması} dir="rtl" value={hariciMetin} onChange={() => {}} />
      <button onClick={() => tayinHariciMetin('')}>Metni İmhâ Et</button>
      <p>Hârici Metin: {hariciMetin}</p>
    </div>
  );
};

3. Yazım Haletini Zirleme (Toggling Input Mode)

Kullanıcının Elifba ve Alfabe yazım arasında geçiş yapmasını sağlamak için tebdilLatiniMi amelini kullanabilirsiniz.

import { useState } from 'react';
import { useMesdan } from 'mesdan';

const LisanZirliMesdan = () => {
  const { metin, metinSahasıİması, latiniMi, tebdilLatiniMi } = useMesdan<HTMLInputElement>({
    ibtidaiMetin: '',
    tekSatırMı: true,
    latiniMi: latiniMi,
  });

  const ifaZir = () => {
    tebdilLatiniMi(!latiniMi);
  };

  return (
    <div>
      <input
        ref={metinSahasıİması}
        value={metin}
        onChange={() => {}}
        dir={latiniMi ? 'ltr' : 'rtl'}
        placeholder={latiniMi ? 'Alfabe ile yaz...' : 'الفبا ايله‌ ياز...'}
      />
      <button onClick={ifaZir}>{latiniMi ? "Elifba'ya geç" : "Alfabe'ye geç"}</button>
    </div>
  );
};

4. Metni Haricen Değiştirme (Programmatically Setting Text)

tebdilMetin fonksiyonu ile metni bir vaqaya (event) bağlı olarak değiştirebilirsiniz.

import { useMesdan } from 'mesdan';

const HariçtenMetinTebdilliMesdan = () => {
  const { metin, metinSahasıİması, tebdilMetin } = useMesdan<HTMLTextAreaElement>({
    tekSatırMı: false,
  });

  return (
    <div>
      <textarea ref={metinSahasıİması} dir="rtl" value={metin} onChange={() => {}} rows={5} />
      <button onClick={() => tebdilMetin('السلام عليكم')}>Selam Ver</button>
    </div>
  );
};

Lexical İlâvesi: OsmaniMesdanEki

mesdan menbaı, Lexical zengin metingeri (rich text editor) ile Osmanî Türkçe yazmayı kolaylaştıran bir ilâve (plugin) de sunmaktadır. OsmaniMesdanEki, metingerin içine yerleştirildiğinde Latin hurufatlı mesdanlardan Osmanî Türkçe yazma imkânı sağlar.

Bu ilâveyi kullanmak için azîmenizde Lexical'in kurulu olması gerekir.

Lexical ile Kullanım

OsmaniMesdanEki ilâvesi bir unsur (component) olup, LexicalComposer unsurunun içine yerleştirilmelidir. Herhangi bir görünür unsur oluşturmaz; bunun yerine metingerin hâline erişerek mesdan vaqalarını takip ve idâre eder.

Aşağıda Lexical metingerinin temel bir misâli verilmiştir:

import { LexicalComposer } from '@lexical/react/LexicalComposer';
import { RichTextPlugin } from '@lexical/react/LexicalRichTextPlugin';
import { ContentEditable } from '@lexical/react/LexicalContentEditable';
import { HistoryPlugin } from '@lexical/react/LexicalHistoryPlugin';
import LexicalErrorBoundary from '@lexical/react/LexicalErrorBoundary';

import { OsmaniMesdanEki } from 'mesdan';

const tarz = {};

const iptidaiAyarlar = {
  namespace: 'OsmaniEditor',
  theme: tarz,
  onError: (hata: Error) => console.error(hata),
};

const LexicalMetigeri = () => {
  return (
    <LexicalComposer initialConfig={ibdaiAyarlar}>
      <div className="editor-container" style={{ position: 'relative' }}>
        <RichTextPlugin
          contentEditable={
            <ContentEditable
              dir="rtl"
              style={{
                border: '1px solid #ccc',
                minHeight: '150px',
                padding: '10px',
                direction: 'rtl',
                textAlign: 'right',
              }}
            />
          }
          placeholder={
            <div
              style={{
                position: 'absolute',
                top: '10px',
                right: '10px',
                color: '#aaa',
                pointerEvents: 'none',
              }}
            >
              الفبا ايله‌ ياز...
            </div>
          }
          ErrorBoundary={LexicalErrorBoundary}
        />

        <HistoryPlugin />
        <OsmaniMesdanEki />
      </div>
    </LexicalComposer>
  );
};

export default LexicalMetigeri;

Îzah (Explanation)

  1. LexicalComposer: Bütün Lexical metingeri bu unsur ile sarmalanmalıdır.
  2. ContentEditable: Kullanıcının metin girdiği asıl sahadır. Osmanî metin için dir="rtl" ve alâkalı CSS hassalarını (direction, textAlign) eklemek, doğru bir yazım tecrübesi için elzemdir.
  3. OsmaniMesdanEki: Bu ilâveyi LexicalComposer'ın herhangi bir yerine yerleştirmeniz kâfidir.

Anahtar Kelimeler (Keywords)

osmanlıca, türkçe, türki, osmani, turkish, elifba, keyboard, tercüme, ottoman, latini, react, hook

Ruhsat (License)

Bu menba MIT Ruhsatlıdır.