text-slicer 1.3.1-dev.1 → 1.4.0-dev.0
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/package.json +18 -18
- package/dist/index.cjs.js +0 -1
- package/dist/index.d.ts +0 -25
- package/dist/index.es.js +0 -65
- package/dist/index.umd.js +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "text-slicer",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.0-dev.0",
|
|
4
4
|
"description": "TextSlicer is designed to split text within an HTML element into separate words and/or characters, wrapping each word and/or character in separate span elements.",
|
|
5
5
|
"author": "ux-ui.pro",
|
|
6
6
|
"license": "MIT",
|
|
@@ -16,10 +16,10 @@
|
|
|
16
16
|
"scripts": {
|
|
17
17
|
"clean": "rimraf dist",
|
|
18
18
|
"build": "vite build",
|
|
19
|
-
"lint:
|
|
20
|
-
"lint:fix:
|
|
21
|
-
"format:
|
|
22
|
-
"lint:fix": "yarn lint:fix:
|
|
19
|
+
"lint:ts": "eslint src/**/*.ts",
|
|
20
|
+
"lint:fix:ts": "eslint src/**/*.ts --fix",
|
|
21
|
+
"format:ts": "prettier --write src/**/*.ts",
|
|
22
|
+
"lint:fix": "yarn lint:fix:ts && yarn format:ts"
|
|
23
23
|
},
|
|
24
24
|
"source": "src/index.ts",
|
|
25
25
|
"main": "dist/index.cjs.js",
|
|
@@ -38,21 +38,21 @@
|
|
|
38
38
|
"dist/"
|
|
39
39
|
],
|
|
40
40
|
"devDependencies": {
|
|
41
|
-
"@eslint/js": "9.
|
|
41
|
+
"@eslint/js": "9.34.0",
|
|
42
42
|
"@rollup/plugin-terser": "0.4.4",
|
|
43
|
-
"@types/node": "
|
|
44
|
-
"@typescript-eslint/eslint-plugin": "8.
|
|
45
|
-
"@typescript-eslint/parser": "8.
|
|
46
|
-
"eslint": "9.
|
|
47
|
-
"eslint-config-prettier": "10.1.
|
|
48
|
-
"eslint-import-resolver-typescript": "
|
|
49
|
-
"eslint-plugin-import": "2.
|
|
50
|
-
"globals": "16.
|
|
51
|
-
"prettier": "3.
|
|
43
|
+
"@types/node": "24.3.0",
|
|
44
|
+
"@typescript-eslint/eslint-plugin": "8.40.0",
|
|
45
|
+
"@typescript-eslint/parser": "8.40.0",
|
|
46
|
+
"eslint": "9.34.0",
|
|
47
|
+
"eslint-config-prettier": "10.1.8",
|
|
48
|
+
"eslint-import-resolver-typescript": "4.4.4",
|
|
49
|
+
"eslint-plugin-import": "2.32.0",
|
|
50
|
+
"globals": "16.3.0",
|
|
51
|
+
"prettier": "3.6.2",
|
|
52
52
|
"rimraf": "6.0.1",
|
|
53
|
-
"typescript": "5.
|
|
54
|
-
"vite": "
|
|
55
|
-
"vite-plugin-dts": "4.5.
|
|
53
|
+
"typescript": "5.9.2",
|
|
54
|
+
"vite": "7.1.3",
|
|
55
|
+
"vite-plugin-dts": "4.5.4"
|
|
56
56
|
},
|
|
57
57
|
"keywords": [
|
|
58
58
|
"text",
|
package/dist/index.cjs.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";var l=Object.defineProperty;var d=(r,t,e)=>t in r?l(r,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[t]=e;var a=(r,t,e)=>d(r,typeof t!="symbol"?t+"":t,e);class h{constructor(t={}){a(this,"textElement");a(this,"originalText");a(this,"splitMode");a(this,"cssVariables");a(this,"dataAttributes");a(this,"charIndexCounter");var o;const{container:e=".text-slicer",splitMode:s="both",cssVariables:n=!1,dataAttributes:i=!1}=t;if(this.textElement=typeof e=="string"?document.querySelector(e):e??null,!this.textElement)return this.originalText="",this.splitMode="both",this.cssVariables=!1,this.dataAttributes=!1,void(this.charIndexCounter=0);this.originalText=((o=this.textElement.textContent)==null?void 0:o.trim())||"",this.splitMode=s,this.cssVariables=n,this.dataAttributes=i,this.charIndexCounter=0}split(){if(!this.textElement)return;this.clear(),this.charIndexCounter=0;const t=document.createDocumentFragment(),e=this.originalText.split(" "),s=this.originalText.length;this.splitMode==="words"||this.splitMode==="both"?this.splitWords(t,e):this.splitMode==="chars"&&this.splitChars(t),this.textElement.appendChild(t),this.cssVariables&&(this.textElement.style.setProperty("--word-total",e.length.toString()),this.textElement.style.setProperty("--char-total",s.toString()))}splitWords(t,e){e.forEach((s,n)=>{if(this.splitMode==="both"){const i=this.createWordSpan(n,s);s.split("").forEach(o=>{const c=this.createCharSpan(o);i.append(c)}),t.append(i)}else{const i=this.createWordSpan(n);i.append(document.createTextNode(s)),t.append(i)}n<e.length-1&&t.append(h.createSpaceSpan())})}splitChars(t){this.originalText.split("").forEach(e=>{const s=this.createCharSpan(e);t.append(s)})}createWordSpan(t,e=""){const s=document.createElement("span");return s.classList.add("word"),this.dataAttributes&&s.setAttribute("data-word",e),this.cssVariables&&s.style.setProperty("--word-index",t.toString()),s}createCharSpan(t){const e=document.createElement("span");return e.textContent=t,this.dataAttributes&&e.setAttribute("data-char",t),t===" "?e.classList.add("whitespace"):(e.classList.add("char"),this.cssVariables&&e.style.setProperty("--char-index",this.charIndexCounter.toString()),this.charIndexCounter+=1),e}static createSpaceSpan(){const t=document.createElement("span");return t.classList.add("whitespace"),t.textContent=" ",t}clear(){this.textElement&&(this.textElement.innerHTML="")}init(){this.split()}}module.exports=h;
|
package/dist/index.d.ts
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
export type SplitMode = 'words' | 'chars' | 'both';
|
|
2
|
-
export interface TextSlicerOptions {
|
|
3
|
-
container?: HTMLElement | string;
|
|
4
|
-
splitMode?: SplitMode;
|
|
5
|
-
cssVariables?: boolean;
|
|
6
|
-
dataAttributes?: boolean;
|
|
7
|
-
}
|
|
8
|
-
declare class TextSlicer {
|
|
9
|
-
private readonly textElement;
|
|
10
|
-
private originalText;
|
|
11
|
-
private readonly splitMode;
|
|
12
|
-
private readonly cssVariables;
|
|
13
|
-
private readonly dataAttributes;
|
|
14
|
-
private charIndexCounter;
|
|
15
|
-
constructor(options?: TextSlicerOptions);
|
|
16
|
-
split(): void;
|
|
17
|
-
private splitWords;
|
|
18
|
-
private splitChars;
|
|
19
|
-
private createWordSpan;
|
|
20
|
-
private createCharSpan;
|
|
21
|
-
private static createSpaceSpan;
|
|
22
|
-
private clear;
|
|
23
|
-
init(): void;
|
|
24
|
-
}
|
|
25
|
-
export default TextSlicer;
|
package/dist/index.es.js
DELETED
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
var l = Object.defineProperty;
|
|
2
|
-
var d = (r, t, e) => t in r ? l(r, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : r[t] = e;
|
|
3
|
-
var a = (r, t, e) => d(r, typeof t != "symbol" ? t + "" : t, e);
|
|
4
|
-
class h {
|
|
5
|
-
constructor(t = {}) {
|
|
6
|
-
a(this, "textElement");
|
|
7
|
-
a(this, "originalText");
|
|
8
|
-
a(this, "splitMode");
|
|
9
|
-
a(this, "cssVariables");
|
|
10
|
-
a(this, "dataAttributes");
|
|
11
|
-
a(this, "charIndexCounter");
|
|
12
|
-
var o;
|
|
13
|
-
const { container: e = ".text-slicer", splitMode: s = "both", cssVariables: n = !1, dataAttributes: i = !1 } = t;
|
|
14
|
-
if (this.textElement = typeof e == "string" ? document.querySelector(e) : e ?? null, !this.textElement) return this.originalText = "", this.splitMode = "both", this.cssVariables = !1, this.dataAttributes = !1, void (this.charIndexCounter = 0);
|
|
15
|
-
this.originalText = ((o = this.textElement.textContent) == null ? void 0 : o.trim()) || "", this.splitMode = s, this.cssVariables = n, this.dataAttributes = i, this.charIndexCounter = 0;
|
|
16
|
-
}
|
|
17
|
-
split() {
|
|
18
|
-
if (!this.textElement) return;
|
|
19
|
-
this.clear(), this.charIndexCounter = 0;
|
|
20
|
-
const t = document.createDocumentFragment(), e = this.originalText.split(" "), s = this.originalText.length;
|
|
21
|
-
this.splitMode === "words" || this.splitMode === "both" ? this.splitWords(t, e) : this.splitMode === "chars" && this.splitChars(t), this.textElement.appendChild(t), this.cssVariables && (this.textElement.style.setProperty("--word-total", e.length.toString()), this.textElement.style.setProperty("--char-total", s.toString()));
|
|
22
|
-
}
|
|
23
|
-
splitWords(t, e) {
|
|
24
|
-
e.forEach((s, n) => {
|
|
25
|
-
if (this.splitMode === "both") {
|
|
26
|
-
const i = this.createWordSpan(n, s);
|
|
27
|
-
s.split("").forEach((o) => {
|
|
28
|
-
const c = this.createCharSpan(o);
|
|
29
|
-
i.append(c);
|
|
30
|
-
}), t.append(i);
|
|
31
|
-
} else {
|
|
32
|
-
const i = this.createWordSpan(n);
|
|
33
|
-
i.append(document.createTextNode(s)), t.append(i);
|
|
34
|
-
}
|
|
35
|
-
n < e.length - 1 && t.append(h.createSpaceSpan());
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
splitChars(t) {
|
|
39
|
-
this.originalText.split("").forEach((e) => {
|
|
40
|
-
const s = this.createCharSpan(e);
|
|
41
|
-
t.append(s);
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
createWordSpan(t, e = "") {
|
|
45
|
-
const s = document.createElement("span");
|
|
46
|
-
return s.classList.add("word"), this.dataAttributes && s.setAttribute("data-word", e), this.cssVariables && s.style.setProperty("--word-index", t.toString()), s;
|
|
47
|
-
}
|
|
48
|
-
createCharSpan(t) {
|
|
49
|
-
const e = document.createElement("span");
|
|
50
|
-
return e.textContent = t, this.dataAttributes && e.setAttribute("data-char", t), t === " " ? e.classList.add("whitespace") : (e.classList.add("char"), this.cssVariables && e.style.setProperty("--char-index", this.charIndexCounter.toString()), this.charIndexCounter += 1), e;
|
|
51
|
-
}
|
|
52
|
-
static createSpaceSpan() {
|
|
53
|
-
const t = document.createElement("span");
|
|
54
|
-
return t.classList.add("whitespace"), t.textContent = " ", t;
|
|
55
|
-
}
|
|
56
|
-
clear() {
|
|
57
|
-
this.textElement && (this.textElement.innerHTML = "");
|
|
58
|
-
}
|
|
59
|
-
init() {
|
|
60
|
-
this.split();
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
export {
|
|
64
|
-
h as default
|
|
65
|
-
};
|
package/dist/index.umd.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(function(i,r){typeof exports=="object"&&typeof module<"u"?module.exports=r():typeof define=="function"&&define.amd?define(r):(i=typeof globalThis<"u"?globalThis:i||self).TextSlicer=r()})(this,function(){"use strict";var l=Object.defineProperty;var d=(i,r,t)=>r in i?l(i,r,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[r]=t;var n=(i,r,t)=>d(i,typeof r!="symbol"?r+"":r,t);class i{constructor(t={}){n(this,"textElement");n(this,"originalText");n(this,"splitMode");n(this,"cssVariables");n(this,"dataAttributes");n(this,"charIndexCounter");var h;const{container:e=".text-slicer",splitMode:s="both",cssVariables:o=!1,dataAttributes:a=!1}=t;if(this.textElement=typeof e=="string"?document.querySelector(e):e??null,!this.textElement)return this.originalText="",this.splitMode="both",this.cssVariables=!1,this.dataAttributes=!1,void(this.charIndexCounter=0);this.originalText=((h=this.textElement.textContent)==null?void 0:h.trim())||"",this.splitMode=s,this.cssVariables=o,this.dataAttributes=a,this.charIndexCounter=0}split(){if(!this.textElement)return;this.clear(),this.charIndexCounter=0;const t=document.createDocumentFragment(),e=this.originalText.split(" "),s=this.originalText.length;this.splitMode==="words"||this.splitMode==="both"?this.splitWords(t,e):this.splitMode==="chars"&&this.splitChars(t),this.textElement.appendChild(t),this.cssVariables&&(this.textElement.style.setProperty("--word-total",e.length.toString()),this.textElement.style.setProperty("--char-total",s.toString()))}splitWords(t,e){e.forEach((s,o)=>{if(this.splitMode==="both"){const a=this.createWordSpan(o,s);s.split("").forEach(h=>{const c=this.createCharSpan(h);a.append(c)}),t.append(a)}else{const a=this.createWordSpan(o);a.append(document.createTextNode(s)),t.append(a)}o<e.length-1&&t.append(i.createSpaceSpan())})}splitChars(t){this.originalText.split("").forEach(e=>{const s=this.createCharSpan(e);t.append(s)})}createWordSpan(t,e=""){const s=document.createElement("span");return s.classList.add("word"),this.dataAttributes&&s.setAttribute("data-word",e),this.cssVariables&&s.style.setProperty("--word-index",t.toString()),s}createCharSpan(t){const e=document.createElement("span");return e.textContent=t,this.dataAttributes&&e.setAttribute("data-char",t),t===" "?e.classList.add("whitespace"):(e.classList.add("char"),this.cssVariables&&e.style.setProperty("--char-index",this.charIndexCounter.toString()),this.charIndexCounter+=1),e}static createSpaceSpan(){const t=document.createElement("span");return t.classList.add("whitespace"),t.textContent=" ",t}clear(){this.textElement&&(this.textElement.innerHTML="")}init(){this.split()}}return i});
|