emoji-banner-generator 1.0.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/LICENSE +21 -0
- package/README.md +160 -0
- package/dist/animation.d.ts +14 -0
- package/dist/animation.d.ts.map +1 -0
- package/dist/animation.js +194 -0
- package/dist/animation.js.map +1 -0
- package/dist/bitmap.d.ts +25 -0
- package/dist/bitmap.d.ts.map +1 -0
- package/dist/bitmap.js +141 -0
- package/dist/bitmap.js.map +1 -0
- package/dist/cli.d.ts +19 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +174 -0
- package/dist/cli.js.map +1 -0
- package/dist/clipboard.d.ts +17 -0
- package/dist/clipboard.d.ts.map +1 -0
- package/dist/clipboard.js +47 -0
- package/dist/clipboard.js.map +1 -0
- package/dist/emoji.d.ts +25 -0
- package/dist/emoji.d.ts.map +1 -0
- package/dist/emoji.js +180 -0
- package/dist/emoji.js.map +1 -0
- package/dist/fonts.d.ts +26 -0
- package/dist/fonts.d.ts.map +1 -0
- package/dist/fonts.js +551 -0
- package/dist/fonts.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +108 -0
- package/dist/index.js.map +1 -0
- package/dist/output.d.ts +26 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +113 -0
- package/dist/output.js.map +1 -0
- package/dist/renderer.d.ts +18 -0
- package/dist/renderer.d.ts.map +1 -0
- package/dist/renderer.js +247 -0
- package/dist/renderer.js.map +1 -0
- package/dist/slack.d.ts +35 -0
- package/dist/slack.d.ts.map +1 -0
- package/dist/slack.js +129 -0
- package/dist/slack.js.map +1 -0
- package/dist/themes.d.ts +31 -0
- package/dist/themes.d.ts.map +1 -0
- package/dist/themes.js +84 -0
- package/dist/themes.js.map +1 -0
- package/dist/types.d.ts +113 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/package.json +57 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 levyxx
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
# 🎨 Emoji Banner Generator
|
|
2
|
+
|
|
3
|
+
テキストを絵文字バナーアートに変換するCLIツールです。
|
|
4
|
+
|
|
5
|
+
## ✨ 特徴
|
|
6
|
+
|
|
7
|
+
- 🔥 テキストを絵文字でビットマップ表示
|
|
8
|
+
- 📋 ワンクリックでクリップボードにコピー
|
|
9
|
+
- 💬 Slack Block Kit JSON形式での出力
|
|
10
|
+
- 🎨 GitHubコントリビューショングラフ風テーマ
|
|
11
|
+
- 🌈 複数絵文字でのグラデーション表示
|
|
12
|
+
|
|
13
|
+
## 📦 インストール
|
|
14
|
+
|
|
15
|
+
### npxで直接実行(推奨)
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npx emjtxt "Hello" -e 🔥
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### グローバルインストール
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
npm install -g emjtxt
|
|
25
|
+
emjtxt "Hello" -e 🔥
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## 🚀 使い方
|
|
29
|
+
|
|
30
|
+
### 基本的な使い方
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
# 直接絵文字を指定
|
|
34
|
+
npx emjtxt "Hello" -e 🔥
|
|
35
|
+
|
|
36
|
+
# 絵文字エイリアスを使用(コロンあり/なし両対応)
|
|
37
|
+
npx emjtxt "World" -e fire
|
|
38
|
+
npx emjtxt "World" -e :fire:
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### 背景絵文字を指定
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
# 背景を黒い四角で埋める
|
|
45
|
+
npx emjtxt "Hello" -e 🔥 -b ⬛
|
|
46
|
+
|
|
47
|
+
# 背景も絵文字エイリアスで指定可能
|
|
48
|
+
npx emjtxt "Hello" -e fire -b black_square
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### クリップボードにコピー
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
# 生成結果をクリップボードにコピー
|
|
55
|
+
npx emjtxt "Copy Me" -e 🎉 --copy
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### 複数の絵文字を使用
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
# カンマ区切りで複数指定
|
|
62
|
+
npx emjtxt "Rainbow" -e "🔴,🟠,🟡,🟢,🔵,🟣"
|
|
63
|
+
|
|
64
|
+
# エイリアスでも可能
|
|
65
|
+
npx emjtxt "Colors" -e "fire,star,gem,heart"
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### 絵文字モード
|
|
69
|
+
|
|
70
|
+
複数の絵文字を指定した場合の表示モードを選択できます:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
# ランダム(デフォルト)
|
|
74
|
+
npx emjtxt "Random" -e "🔥,⭐,💎" -m random
|
|
75
|
+
|
|
76
|
+
# 行ごとに絵文字を変更
|
|
77
|
+
npx emjtxt "Rows" -e "🔴,🟠,🟡,🟢" -m row
|
|
78
|
+
|
|
79
|
+
# 列ごとに絵文字を変更
|
|
80
|
+
npx emjtxt "Cols" -e "🔴,🟠,🟡,🟢" -m column
|
|
81
|
+
|
|
82
|
+
# 行方向にグラデーション
|
|
83
|
+
npx emjtxt "Gradient" -e "🔴,🟠,🟡,🟢,🔵" -m row-gradient
|
|
84
|
+
|
|
85
|
+
# 列方向にグラデーション
|
|
86
|
+
npx emjtxt "Gradient" -e "🔴,🟠,🟡,🟢,🔵" -m column-gradient
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### GitHubテーマ
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
# GitHubのコントリビューショングラフ風に表示
|
|
93
|
+
npx emjtxt "GitHub" --theme github
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### ファイルからテキストを読み込み
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
# ファイルの内容をバナーに変換
|
|
100
|
+
npx emjtxt --file ./message.txt -e 📝
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Slack形式で出力
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
# Slack Block Kit JSON形式で出力
|
|
107
|
+
npx emjtxt "Slack" -e 🎉 --format slack
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## ⚙️ オプション一覧
|
|
111
|
+
|
|
112
|
+
| オプション | 短縮形 | 説明 | デフォルト |
|
|
113
|
+
| -------------- | ------ | ---------------------------------------------------- | ---------- |
|
|
114
|
+
| `--emoji` | `-e` | 使用する絵文字(カンマ区切りで複数可) | 🔥 |
|
|
115
|
+
| `--background` | `-b` | 背景の絵文字 | 空白 |
|
|
116
|
+
| `--file` | `-f` | テキストを読み込むファイルパス | - |
|
|
117
|
+
| `--copy` | `-c` | クリップボードにコピー | false |
|
|
118
|
+
| `--format` | - | 出力形式(text, slack) | text |
|
|
119
|
+
| `--theme` | - | テーマ(default, github) | default |
|
|
120
|
+
| `--mode` | `-m` | 絵文字選択モード | random |
|
|
121
|
+
| `--border` | - | 外枠を付ける(絵文字省略時は背景と同じ絵文字を使用) | - |
|
|
122
|
+
| `--font` | - | 使用するピクセルフォント名 | block |
|
|
123
|
+
| `--help` | `-h` | ヘルプを表示 | - |
|
|
124
|
+
| `--version` | `-V` | バージョンを表示 | - |
|
|
125
|
+
|
|
126
|
+
## 🎨 絵文字選択モード
|
|
127
|
+
|
|
128
|
+
| モード | 説明 |
|
|
129
|
+
| ----------------- | -------------------------------- |
|
|
130
|
+
| `random` | 各ドットにランダムな絵文字を配置 |
|
|
131
|
+
| `row` | 行ごとに異なる絵文字を使用 |
|
|
132
|
+
| `column` | 列ごとに異なる絵文字を使用 |
|
|
133
|
+
| `row-gradient` | 行方向にグラデーション |
|
|
134
|
+
| `column-gradient` | 列方向にグラデーション |
|
|
135
|
+
|
|
136
|
+
## 🔧 開発
|
|
137
|
+
|
|
138
|
+
### 開発環境のセットアップ
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
git clone https://github.com/yourusername/emoji-banner-generator.git
|
|
142
|
+
cd emoji-banner-generator
|
|
143
|
+
npm install
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### 開発モードで実行
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
npm run dev -- "Hello" -e 🔥
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
### ビルド
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
npm run build
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
## 📄 ライセンス
|
|
159
|
+
|
|
160
|
+
MIT
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Animation module
|
|
3
|
+
* Handles marquee-style scrolling animation in terminal
|
|
4
|
+
*/
|
|
5
|
+
import type { AnimationConfig } from './types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Run marquee animation for multi-line banner
|
|
8
|
+
*/
|
|
9
|
+
export declare function runAnimation(bannerText: string, config?: Partial<AnimationConfig>): Promise<void>;
|
|
10
|
+
/**
|
|
11
|
+
* Run a single scroll cycle (for testing)
|
|
12
|
+
*/
|
|
13
|
+
export declare function runSingleCycle(bannerText: string, config?: Partial<AnimationConfig>): Promise<void>;
|
|
14
|
+
//# sourceMappingURL=animation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"animation.d.ts","sourceRoot":"","sources":["../src/animation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAmFlD;;GAEG;AACH,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,EAClB,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM,GACpC,OAAO,CAAC,IAAI,CAAC,CAkFf;AASD;;GAEG;AACH,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,EAClB,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM,GACpC,OAAO,CAAC,IAAI,CAAC,CA+Cf"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Animation module
|
|
3
|
+
* Handles marquee-style scrolling animation in terminal
|
|
4
|
+
*/
|
|
5
|
+
// ANSI escape codes for terminal control
|
|
6
|
+
const ANSI = {
|
|
7
|
+
CLEAR_LINE: '\x1b[2K',
|
|
8
|
+
CURSOR_TO_START: '\x1b[0G',
|
|
9
|
+
HIDE_CURSOR: '\x1b[?25l',
|
|
10
|
+
SHOW_CURSOR: '\x1b[?25h',
|
|
11
|
+
MOVE_UP: (n) => `\x1b[${n}A`,
|
|
12
|
+
CLEAR_SCREEN: '\x1b[2J',
|
|
13
|
+
CURSOR_HOME: '\x1b[H',
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Default animation configuration
|
|
17
|
+
*/
|
|
18
|
+
const DEFAULT_CONFIG = {
|
|
19
|
+
speed: 100, // milliseconds per frame
|
|
20
|
+
terminalWidth: process.stdout.columns || 80,
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Get visible width of a string (accounting for emoji width)
|
|
24
|
+
*/
|
|
25
|
+
function getVisibleWidth(str) {
|
|
26
|
+
// Emojis typically take 2 character widths
|
|
27
|
+
// This is a simplified calculation
|
|
28
|
+
let width = 0;
|
|
29
|
+
for (const char of str) {
|
|
30
|
+
const code = char.codePointAt(0) || 0;
|
|
31
|
+
// Check if it's likely an emoji (simplified check)
|
|
32
|
+
if (code > 0x1F300) {
|
|
33
|
+
width += 2;
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
width += 1;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return width;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Pad string to specified visible width
|
|
43
|
+
*/
|
|
44
|
+
function padToWidth(str, targetWidth, padChar = ' ') {
|
|
45
|
+
const currentWidth = getVisibleWidth(str);
|
|
46
|
+
if (currentWidth >= targetWidth) {
|
|
47
|
+
return str;
|
|
48
|
+
}
|
|
49
|
+
const padCount = targetWidth - currentWidth;
|
|
50
|
+
return str + padChar.repeat(padCount);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Extract a visible substring with emoji support
|
|
54
|
+
*/
|
|
55
|
+
function visibleSubstring(str, start, length) {
|
|
56
|
+
const chars = [...str]; // Properly split including emojis
|
|
57
|
+
let currentPos = 0;
|
|
58
|
+
let result = '';
|
|
59
|
+
let resultWidth = 0;
|
|
60
|
+
for (const char of chars) {
|
|
61
|
+
const charWidth = getVisibleWidth(char);
|
|
62
|
+
// Skip characters before start
|
|
63
|
+
if (currentPos + charWidth <= start) {
|
|
64
|
+
currentPos += charWidth;
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
// Check if we've collected enough
|
|
68
|
+
if (resultWidth >= length) {
|
|
69
|
+
break;
|
|
70
|
+
}
|
|
71
|
+
result += char;
|
|
72
|
+
resultWidth += charWidth;
|
|
73
|
+
currentPos += charWidth;
|
|
74
|
+
}
|
|
75
|
+
return result;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Run marquee animation for multi-line banner
|
|
79
|
+
*/
|
|
80
|
+
export async function runAnimation(bannerText, config = {}) {
|
|
81
|
+
const { speed, terminalWidth } = { ...DEFAULT_CONFIG, ...config };
|
|
82
|
+
const lines = bannerText.split('\n');
|
|
83
|
+
const bannerHeight = lines.length;
|
|
84
|
+
// Get the maximum width of the banner
|
|
85
|
+
const maxBannerWidth = Math.max(...lines.map(getVisibleWidth));
|
|
86
|
+
// Pad all lines to the same width
|
|
87
|
+
const paddedLines = lines.map((line) => padToWidth(line, maxBannerWidth));
|
|
88
|
+
// Total scroll distance (screen width + banner width)
|
|
89
|
+
const totalFrames = terminalWidth + maxBannerWidth;
|
|
90
|
+
// Hide cursor and setup
|
|
91
|
+
process.stdout.write(ANSI.HIDE_CURSOR);
|
|
92
|
+
// Handle cleanup on exit
|
|
93
|
+
const cleanup = () => {
|
|
94
|
+
process.stdout.write(ANSI.SHOW_CURSOR);
|
|
95
|
+
process.stdout.write('\n');
|
|
96
|
+
};
|
|
97
|
+
process.on('SIGINT', () => {
|
|
98
|
+
cleanup();
|
|
99
|
+
process.exit(0);
|
|
100
|
+
});
|
|
101
|
+
process.on('SIGTERM', () => {
|
|
102
|
+
cleanup();
|
|
103
|
+
process.exit(0);
|
|
104
|
+
});
|
|
105
|
+
try {
|
|
106
|
+
let frame = 0;
|
|
107
|
+
// Animation loop
|
|
108
|
+
while (true) {
|
|
109
|
+
// Calculate scroll offset (starts from right, moves left)
|
|
110
|
+
const offset = terminalWidth - frame;
|
|
111
|
+
// Clear and redraw each line
|
|
112
|
+
for (let i = 0; i < bannerHeight; i++) {
|
|
113
|
+
const line = paddedLines[i];
|
|
114
|
+
let displayLine = '';
|
|
115
|
+
if (offset >= 0) {
|
|
116
|
+
// Banner is still entering from the right
|
|
117
|
+
displayLine = ' '.repeat(offset) + visibleSubstring(line, 0, terminalWidth - offset);
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
// Banner is scrolling through
|
|
121
|
+
const startPos = -offset;
|
|
122
|
+
displayLine = visibleSubstring(line, startPos, terminalWidth);
|
|
123
|
+
}
|
|
124
|
+
// Pad to terminal width to clear any leftover characters
|
|
125
|
+
displayLine = padToWidth(displayLine, terminalWidth);
|
|
126
|
+
process.stdout.write(ANSI.CLEAR_LINE + displayLine);
|
|
127
|
+
if (i < bannerHeight - 1) {
|
|
128
|
+
process.stdout.write('\n');
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
// Move cursor back to start of banner
|
|
132
|
+
if (bannerHeight > 1) {
|
|
133
|
+
process.stdout.write(ANSI.MOVE_UP(bannerHeight - 1));
|
|
134
|
+
}
|
|
135
|
+
process.stdout.write(ANSI.CURSOR_TO_START);
|
|
136
|
+
// Wait for next frame
|
|
137
|
+
await sleep(speed);
|
|
138
|
+
// Advance frame
|
|
139
|
+
frame = (frame + 1) % totalFrames;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
finally {
|
|
143
|
+
cleanup();
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Sleep utility
|
|
148
|
+
*/
|
|
149
|
+
function sleep(ms) {
|
|
150
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Run a single scroll cycle (for testing)
|
|
154
|
+
*/
|
|
155
|
+
export async function runSingleCycle(bannerText, config = {}) {
|
|
156
|
+
const { speed, terminalWidth } = { ...DEFAULT_CONFIG, ...config };
|
|
157
|
+
const lines = bannerText.split('\n');
|
|
158
|
+
const maxBannerWidth = Math.max(...lines.map(getVisibleWidth));
|
|
159
|
+
const paddedLines = lines.map((line) => padToWidth(line, maxBannerWidth));
|
|
160
|
+
const totalFrames = terminalWidth + maxBannerWidth;
|
|
161
|
+
const bannerHeight = lines.length;
|
|
162
|
+
process.stdout.write(ANSI.HIDE_CURSOR);
|
|
163
|
+
try {
|
|
164
|
+
for (let frame = 0; frame < totalFrames; frame++) {
|
|
165
|
+
const offset = terminalWidth - frame;
|
|
166
|
+
for (let i = 0; i < bannerHeight; i++) {
|
|
167
|
+
const line = paddedLines[i];
|
|
168
|
+
let displayLine = '';
|
|
169
|
+
if (offset >= 0) {
|
|
170
|
+
displayLine = ' '.repeat(offset) + visibleSubstring(line, 0, terminalWidth - offset);
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
const startPos = -offset;
|
|
174
|
+
displayLine = visibleSubstring(line, startPos, terminalWidth);
|
|
175
|
+
}
|
|
176
|
+
displayLine = padToWidth(displayLine, terminalWidth);
|
|
177
|
+
process.stdout.write(ANSI.CLEAR_LINE + displayLine);
|
|
178
|
+
if (i < bannerHeight - 1) {
|
|
179
|
+
process.stdout.write('\n');
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
if (bannerHeight > 1) {
|
|
183
|
+
process.stdout.write(ANSI.MOVE_UP(bannerHeight - 1));
|
|
184
|
+
}
|
|
185
|
+
process.stdout.write(ANSI.CURSOR_TO_START);
|
|
186
|
+
await sleep(speed);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
finally {
|
|
190
|
+
process.stdout.write(ANSI.SHOW_CURSOR);
|
|
191
|
+
process.stdout.write('\n'.repeat(bannerHeight));
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=animation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"animation.js","sourceRoot":"","sources":["../src/animation.ts"],"names":[],"mappings":"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"}
|
package/dist/bitmap.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bitmap conversion module
|
|
3
|
+
* Converts text to bitmap representation using pixel fonts
|
|
4
|
+
*/
|
|
5
|
+
import type { Bitmap } from './types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Convert text to bitmap using built-in pixel font
|
|
8
|
+
*/
|
|
9
|
+
export declare function textToBitmap(text: string, fontName?: string): Promise<Bitmap>;
|
|
10
|
+
/**
|
|
11
|
+
* Get available pixel fonts
|
|
12
|
+
*/
|
|
13
|
+
export declare function getAvailableFonts(): Promise<string[]>;
|
|
14
|
+
/**
|
|
15
|
+
* Get bitmap dimensions
|
|
16
|
+
*/
|
|
17
|
+
export declare function getBitmapDimensions(bitmap: Bitmap): {
|
|
18
|
+
width: number;
|
|
19
|
+
height: number;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Validate bitmap integrity
|
|
23
|
+
*/
|
|
24
|
+
export declare function validateBitmap(bitmap: Bitmap): boolean;
|
|
25
|
+
//# sourceMappingURL=bitmap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bitmap.d.ts","sourceRoot":"","sources":["../src/bitmap.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAkHzC;;GAEG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,MAA0B,GACnC,OAAO,CAAC,MAAM,CAAC,CAqBjB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAErD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,CAQA;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAQtD"}
|
package/dist/bitmap.js
ADDED
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bitmap conversion module
|
|
3
|
+
* Converts text to bitmap representation using pixel fonts
|
|
4
|
+
*/
|
|
5
|
+
import { DEFAULT_FONT_NAME, getAvailableFonts as listPixelFonts, getFont, } from './fonts.js';
|
|
6
|
+
const MAX_TEXT_LENGTH = 100;
|
|
7
|
+
/**
|
|
8
|
+
* Clean up bitmap by removing empty rows at start and end
|
|
9
|
+
*/
|
|
10
|
+
function trimBitmap(bitmap) {
|
|
11
|
+
if (bitmap.length === 0)
|
|
12
|
+
return bitmap;
|
|
13
|
+
// Find first non-empty row
|
|
14
|
+
let startRow = 0;
|
|
15
|
+
while (startRow < bitmap.length && bitmap[startRow].every((cell) => !cell)) {
|
|
16
|
+
startRow++;
|
|
17
|
+
}
|
|
18
|
+
// Find last non-empty row
|
|
19
|
+
let endRow = bitmap.length - 1;
|
|
20
|
+
while (endRow >= 0 && bitmap[endRow].every((cell) => !cell)) {
|
|
21
|
+
endRow--;
|
|
22
|
+
}
|
|
23
|
+
if (startRow > endRow) {
|
|
24
|
+
return [[]]; // All empty
|
|
25
|
+
}
|
|
26
|
+
return bitmap.slice(startRow, endRow + 1);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Get the pixel pattern for a character, with fallbacks.
|
|
30
|
+
*/
|
|
31
|
+
function getCharacterPattern(char, font) {
|
|
32
|
+
if (font.map[char]) {
|
|
33
|
+
return font.map[char];
|
|
34
|
+
}
|
|
35
|
+
const upper = char.toUpperCase();
|
|
36
|
+
if (font.map[upper]) {
|
|
37
|
+
return font.map[upper];
|
|
38
|
+
}
|
|
39
|
+
return font.map['?'] || font.map[' '] || [];
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Render a single line of text to bitmap rows.
|
|
43
|
+
*/
|
|
44
|
+
function renderLineToBitmap(line, font) {
|
|
45
|
+
const rows = Array.from({ length: font.height }, () => []);
|
|
46
|
+
const characters = Array.from(line);
|
|
47
|
+
if (characters.length === 0) {
|
|
48
|
+
return rows;
|
|
49
|
+
}
|
|
50
|
+
characters.forEach((char, charIndex) => {
|
|
51
|
+
const pattern = getCharacterPattern(char, font);
|
|
52
|
+
const width = pattern.reduce((max, row) => Math.max(max, row.length), 0);
|
|
53
|
+
for (let rowIndex = 0; rowIndex < font.height; rowIndex++) {
|
|
54
|
+
const rowPattern = pattern[rowIndex] || '';
|
|
55
|
+
for (let colIndex = 0; colIndex < width; colIndex++) {
|
|
56
|
+
rows[rowIndex].push(rowPattern[colIndex] === '#');
|
|
57
|
+
}
|
|
58
|
+
if (charIndex < characters.length - 1) {
|
|
59
|
+
for (let space = 0; space < font.letterSpacing; space++) {
|
|
60
|
+
rows[rowIndex].push(false);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
return rows;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Merge multiple line bitmaps into a single bitmap with line spacing.
|
|
69
|
+
*/
|
|
70
|
+
function mergeLines(lineBitmaps, lineSpacing) {
|
|
71
|
+
if (lineBitmaps.length === 0)
|
|
72
|
+
return [[]];
|
|
73
|
+
const width = Math.max(...lineBitmaps.map((line) => line[0]?.length ?? 0));
|
|
74
|
+
const merged = [];
|
|
75
|
+
lineBitmaps.forEach((lineBitmap, index) => {
|
|
76
|
+
for (let row = 0; row < lineBitmap.length; row++) {
|
|
77
|
+
const rowData = lineBitmap[row] || [];
|
|
78
|
+
const paddedRow = rowData.slice();
|
|
79
|
+
while (paddedRow.length < width) {
|
|
80
|
+
paddedRow.push(false);
|
|
81
|
+
}
|
|
82
|
+
merged.push(paddedRow);
|
|
83
|
+
}
|
|
84
|
+
if (index < lineBitmaps.length - 1 && lineSpacing > 0) {
|
|
85
|
+
for (let i = 0; i < lineSpacing; i++) {
|
|
86
|
+
merged.push(new Array(width).fill(false));
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
return trimBitmap(merged);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Convert text to bitmap using built-in pixel font
|
|
94
|
+
*/
|
|
95
|
+
export async function textToBitmap(text, fontName = DEFAULT_FONT_NAME) {
|
|
96
|
+
// Validate input
|
|
97
|
+
if (!text || typeof text !== 'string') {
|
|
98
|
+
throw new Error('Text input is required');
|
|
99
|
+
}
|
|
100
|
+
// Sanitize input - remove control characters
|
|
101
|
+
const sanitizedText = text.replace(/[\x00-\x1F\x7F]/g, '');
|
|
102
|
+
if (sanitizedText.length === 0) {
|
|
103
|
+
throw new Error('Text input is empty after sanitization');
|
|
104
|
+
}
|
|
105
|
+
// Limit text length for security
|
|
106
|
+
const truncatedText = sanitizedText.slice(0, MAX_TEXT_LENGTH);
|
|
107
|
+
const font = getFont(fontName);
|
|
108
|
+
const lines = truncatedText.split('\n');
|
|
109
|
+
const lineBitmaps = lines.map((line) => renderLineToBitmap(line, font));
|
|
110
|
+
return mergeLines(lineBitmaps, font.lineSpacing);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Get available pixel fonts
|
|
114
|
+
*/
|
|
115
|
+
export function getAvailableFonts() {
|
|
116
|
+
return Promise.resolve(listPixelFonts());
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Get bitmap dimensions
|
|
120
|
+
*/
|
|
121
|
+
export function getBitmapDimensions(bitmap) {
|
|
122
|
+
if (bitmap.length === 0) {
|
|
123
|
+
return { width: 0, height: 0 };
|
|
124
|
+
}
|
|
125
|
+
return {
|
|
126
|
+
width: bitmap[0].length,
|
|
127
|
+
height: bitmap.length,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Validate bitmap integrity
|
|
132
|
+
*/
|
|
133
|
+
export function validateBitmap(bitmap) {
|
|
134
|
+
if (!Array.isArray(bitmap))
|
|
135
|
+
return false;
|
|
136
|
+
if (bitmap.length === 0)
|
|
137
|
+
return true;
|
|
138
|
+
const width = bitmap[0].length;
|
|
139
|
+
return bitmap.every((row) => Array.isArray(row) && row.length === width);
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=bitmap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bitmap.js","sourceRoot":"","sources":["../src/bitmap.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI module
|
|
3
|
+
* Handles command line argument parsing
|
|
4
|
+
*/
|
|
5
|
+
import { Command } from 'commander';
|
|
6
|
+
import type { CLIOptions } from './types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Create and configure the CLI program
|
|
9
|
+
*/
|
|
10
|
+
export declare function createCLI(): Command;
|
|
11
|
+
/**
|
|
12
|
+
* Parse and validate CLI options
|
|
13
|
+
*/
|
|
14
|
+
export declare function parseCLIOptions(program: Command): Promise<CLIOptions>;
|
|
15
|
+
/**
|
|
16
|
+
* Validate that required options are provided
|
|
17
|
+
*/
|
|
18
|
+
export declare function validateOptions(options: CLIOptions): void;
|
|
19
|
+
//# sourceMappingURL=cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,KAAK,EAAE,UAAU,EAAkC,MAAM,YAAY,CAAC;AAwB7E;;GAEG;AACH,wBAAgB,SAAS,IAAI,OAAO,CA4DnC;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAgD3E;AAgDD;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,CAkBzD"}
|