](https://splitting.js.org)
+### Options
+
+- `rtl` (boolean, default: `false`)
+ When `true`, **each word** is left intact in a *single* `.char` span—rather than splitting into letters—so that Persian/Arabic ligatures remain connected.
+
+#### Usage
+
+```js
+Splitting({
+ target: ".my-text",
+ by: "words chars",
+ whitespace: false,
+ rtl: true // ← enable full-word spans for RTL scripts
+});
+
### _CSS Vars for split words, chars & more!_

diff --git a/dist/splitting-lite.js b/dist/splitting-lite.js
index a03b469..83b4b28 100644
--- a/dist/splitting-lite.js
+++ b/dist/splitting-lite.js
@@ -1,383 +1,405 @@
(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global.Splitting = factory());
-}(this, (function () { 'use strict';
-
-var root = document;
-var createText = root.createTextNode.bind(root);
-
-/**
- * # setProperty
- * Apply a CSS var
- * @param {HTMLElement} el
- * @param {string} varName
- * @param {string|number} value
- */
-function setProperty(el, varName, value) {
- el.style.setProperty(varName, value);
-}
-
-/**
- *
- * @param {!HTMLElement} el
- * @param {!HTMLElement} child
- */
-function appendChild(el, child) {
- return el.appendChild(child);
-}
-
-/**
- *
- * @param {!HTMLElement} parent
- * @param {string} key
- * @param {string} text
- * @param {boolean} whitespace
- */
-function createElement(parent, key, text, whitespace) {
- var el = root.createElement('span');
- key && (el.className = key);
- if (text) {
- !whitespace && el.setAttribute("data-" + key, text);
- el.textContent = text;
- }
- return (parent && appendChild(parent, el)) || el;
-}
-
-/**
- *
- * @param {!HTMLElement} el
- * @param {string} key
- */
-function getData(el, key) {
- return el.getAttribute("data-" + key)
-}
-
-/**
- *
- * @param {import('../types').Target} e
- * @param {!HTMLElement} parent
- * @returns {!Array}
- */
-function $(e, parent) {
- return !e || e.length == 0
- ? // null or empty string returns empty array
- []
- : e.nodeName
- ? // a single element is wrapped in an array
- [e]
- : // selector and NodeList are converted to Element[]
- [].slice.call(e[0].nodeName ? e : (parent || root).querySelectorAll(e));
-}
-
-/**
- * Creates and fills an array with the value provided
- * @param {number} len
- * @param {() => T} valueProvider
- * @return {T}
- * @template T
- */
-
-
-/**
- * A for loop wrapper used to reduce js minified size.
- * @param {!Array