PyTypeFx 0.1.1__tar.gz → 2.1.1__tar.gz
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.
- {pytypefx-0.1.1 → pytypefx-2.1.1}/LICENSE +1 -1
- pytypefx-2.1.1/PKG-INFO +671 -0
- pytypefx-2.1.1/PyTypeFx.egg-info/PKG-INFO +671 -0
- pytypefx-2.1.1/PyTypeFx.egg-info/SOURCES.txt +28 -0
- pytypefx-2.1.1/PyTypeFx.egg-info/entry_points.txt +2 -0
- pytypefx-2.1.1/PyTypeFx.egg-info/requires.txt +3 -0
- pytypefx-2.1.1/PyTypeFx.egg-info/top_level.txt +1 -0
- pytypefx-2.1.1/README.md +648 -0
- pytypefx-2.1.1/pyproject.toml +35 -0
- {pytypefx-0.1.1 → pytypefx-2.1.1}/setup.py +30 -26
- pytypefx-2.1.1/tests/test_banners.py +453 -0
- pytypefx-2.1.1/tests/test_colors.py +146 -0
- pytypefx-2.1.1/tests/test_decorator.py +63 -0
- pytypefx-2.1.1/tests/test_effects.py +22 -0
- pytypefx-2.1.1/tests/test_styles.py +250 -0
- pytypefx-2.1.1/tests/test_utility.py +115 -0
- pytypefx-2.1.1/tests/test_writers.py +388 -0
- pytypefx-2.1.1/typefx/__init__.py +606 -0
- pytypefx-2.1.1/typefx/_types.py +16 -0
- pytypefx-2.1.1/typefx/banners.py +1264 -0
- pytypefx-2.1.1/typefx/cli.py +71 -0
- pytypefx-2.1.1/typefx/colors.py +371 -0
- {pytypefx-0.1.1/PyTypeFx → pytypefx-2.1.1/typefx}/constant.py +6 -4
- pytypefx-2.1.1/typefx/decorator.py +82 -0
- pytypefx-2.1.1/typefx/effects.py +80 -0
- pytypefx-2.1.1/typefx/styles.py +172 -0
- pytypefx-2.1.1/typefx/utility.py +454 -0
- pytypefx-2.1.1/typefx/writers.py +1207 -0
- pytypefx-0.1.1/PKG-INFO +0 -213
- pytypefx-0.1.1/PyTypeFx/__init__.py +0 -286
- pytypefx-0.1.1/PyTypeFx/cli.py +0 -49
- pytypefx-0.1.1/PyTypeFx/colors.py +0 -266
- pytypefx-0.1.1/PyTypeFx/decorator.py +0 -81
- pytypefx-0.1.1/PyTypeFx/effects.py +0 -69
- pytypefx-0.1.1/PyTypeFx/utility.py +0 -284
- pytypefx-0.1.1/PyTypeFx/writers.py +0 -621
- pytypefx-0.1.1/PyTypeFx.egg-info/PKG-INFO +0 -213
- pytypefx-0.1.1/PyTypeFx.egg-info/SOURCES.txt +0 -16
- pytypefx-0.1.1/PyTypeFx.egg-info/entry_points.txt +0 -2
- pytypefx-0.1.1/PyTypeFx.egg-info/top_level.txt +0 -1
- pytypefx-0.1.1/README.md +0 -184
- {pytypefx-0.1.1 → pytypefx-2.1.1}/PyTypeFx.egg-info/dependency_links.txt +0 -0
- {pytypefx-0.1.1 → pytypefx-2.1.1}/setup.cfg +0 -0
pytypefx-2.1.1/PKG-INFO
ADDED
|
@@ -0,0 +1,671 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: PyTypeFx
|
|
3
|
+
Version: 2.1.1
|
|
4
|
+
Summary: Terminal text effects, ASCII art banners, and mascot displays — zero dependencies.
|
|
5
|
+
Author: RK RIAD KHAN
|
|
6
|
+
Author-email: RK RIAD KHAN <rkriad585@gmail.com>
|
|
7
|
+
License-Expression: MIT
|
|
8
|
+
Project-URL: Homepage, https://github.com/rkriad585/PyTypeFx
|
|
9
|
+
Project-URL: Source, https://github.com/rkriad585/PyTypeFx
|
|
10
|
+
Classifier: Programming Language :: Python :: 3
|
|
11
|
+
Classifier: Programming Language :: Python :: 3.7
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
16
|
+
Requires-Python: >=3.7
|
|
17
|
+
Description-Content-Type: text/markdown
|
|
18
|
+
License-File: LICENSE
|
|
19
|
+
Requires-Dist: typing_extensions; python_version < "3.8"
|
|
20
|
+
Dynamic: author
|
|
21
|
+
Dynamic: license-file
|
|
22
|
+
Dynamic: requires-python
|
|
23
|
+
|
|
24
|
+
<p align="center">
|
|
25
|
+
<img src="https://img.shields.io/badge/Python-3.7%2B-blue?logo=python&logoColor=white" alt="Python">
|
|
26
|
+
<img src="https://img.shields.io/badge/version-2.1.0-green?logo=git&logoColor=white" alt="Version">
|
|
27
|
+
<img src="https://img.shields.io/badge/license-MIT-blue" alt="License">
|
|
28
|
+
<img src="https://img.shields.io/badge/tests-198%20passing-brightgreen" alt="Tests">
|
|
29
|
+
<img src="https://img.shields.io/badge/dependencies-0-success" alt="Zero Deps">
|
|
30
|
+
</p>
|
|
31
|
+
|
|
32
|
+
<h1 align="center">TypeFx</h1>
|
|
33
|
+
<p align="center"><em>Terminal text effects, ASCII art banners, and mascot displays — zero dependencies.</em></p>
|
|
34
|
+
|
|
35
|
+
TypeFx brings your terminal applications to life with dynamic typing effects, customizable banner templates, **55+ ASCII art animals**, **600+ kaomoji expressions**, and **90+ Unicode emoji symbols** — all with zero external dependencies.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Table of Contents
|
|
40
|
+
|
|
41
|
+
- [Quick Start](#quick-start)
|
|
42
|
+
- [Installation](#installation)
|
|
43
|
+
- [Features](#features)
|
|
44
|
+
- [Typing Effects](#typing-effects)
|
|
45
|
+
- [Banners & ASCII Art](#banners--ascii-art)
|
|
46
|
+
- [ASCII Animals](#ascii-animals)
|
|
47
|
+
- [Kaomoji](#kaomoji)
|
|
48
|
+
- [Emoji Symbols](#emoji-symbols)
|
|
49
|
+
- [Buddy / Mascot System](#buddy--mascot-system)
|
|
50
|
+
- [Color System](#color-system)
|
|
51
|
+
- [Style Presets](#style-presets)
|
|
52
|
+
- [Decorator](#decorator)
|
|
53
|
+
- [Command-Line Interface](#command-line-interface)
|
|
54
|
+
- [Full API Reference](#full-api-reference)
|
|
55
|
+
- [Configuration](#configuration)
|
|
56
|
+
- [Examples Gallery](#examples-gallery)
|
|
57
|
+
- [Contributing](#contributing)
|
|
58
|
+
- [Code of Conduct](#code-of-conduct)
|
|
59
|
+
- [License](#license)
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Quick Start
|
|
64
|
+
|
|
65
|
+
```python
|
|
66
|
+
from typefx import project_banner, hero_banner, alert_banner, progress_bar, tag, divider, animal, kaomoji, buddy
|
|
67
|
+
from typefx.colors import BRIGHT_CYAN, CYAN, GREEN
|
|
68
|
+
|
|
69
|
+
# Project banner
|
|
70
|
+
print(project_banner("MyApp", tagline="v2.0", version="1.0.0"))
|
|
71
|
+
|
|
72
|
+
# Alert
|
|
73
|
+
print(alert_banner("Server started", level="success", width=50))
|
|
74
|
+
|
|
75
|
+
# Progress bar
|
|
76
|
+
print(progress_bar(75, width=20, label="Loading", color=GREEN))
|
|
77
|
+
|
|
78
|
+
# ASCII animal
|
|
79
|
+
print(animal("dragon"))
|
|
80
|
+
|
|
81
|
+
# Buddy mascot
|
|
82
|
+
buddy("MyApp", animal_name="cat1", color=BRIGHT_CYAN, message="Ready!")
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Installation
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
pip install PyTypeFx
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
**Or from source:**
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
git clone https://github.com/rkriad585/PyTypeFx.git
|
|
95
|
+
cd PyTypeFx
|
|
96
|
+
pip install -e .
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## Features
|
|
102
|
+
|
|
103
|
+
### Typing Effects
|
|
104
|
+
|
|
105
|
+
All 18 writers share consistent parameters: `text`, `delay`, `color`, `style`, `position`.
|
|
106
|
+
|
|
107
|
+
```python
|
|
108
|
+
from typefx import TypeWriter, RainbowWriter, GlitchWriter, GradientWriter, BounceWriter
|
|
109
|
+
|
|
110
|
+
# Classic typewriter
|
|
111
|
+
TypeWriter("Hello, World!", delay=0.05)
|
|
112
|
+
|
|
113
|
+
# Rainbow cycling text
|
|
114
|
+
RainbowWriter("Rainbow effect!", delay=0.03)
|
|
115
|
+
|
|
116
|
+
# Glitch / distortion effect
|
|
117
|
+
GlitchWriter("SYSTEM ONLINE", delay=0.05, color="green")
|
|
118
|
+
|
|
119
|
+
# Smooth color gradient
|
|
120
|
+
GradientWriter("Gradient text", start_hex="#FF0000", end_hex="#0000FF")
|
|
121
|
+
|
|
122
|
+
# Bounce animation
|
|
123
|
+
BounceWriter("BOUNCE!", delay=0.08, color="cyan")
|
|
124
|
+
|
|
125
|
+
# Loop write-delete animation
|
|
126
|
+
LoopWriter("Loading...", loops=5, delay=0.03, color="yellow")
|
|
127
|
+
|
|
128
|
+
# Game-style dialog box
|
|
129
|
+
GameDialog("Hello, adventurer!", delay=0.03, color="green")
|
|
130
|
+
|
|
131
|
+
# Markdown rendering
|
|
132
|
+
MarkdownWriter("This is **bold** and *italic* text.")
|
|
133
|
+
|
|
134
|
+
# HTML rendering
|
|
135
|
+
HTMLWriter("This is <b>bold</b> and <i>italic</i> text.")
|
|
136
|
+
|
|
137
|
+
# Reverse type
|
|
138
|
+
ReverseWriter("Reverse text")
|
|
139
|
+
|
|
140
|
+
# Thinking animation with blinking dots
|
|
141
|
+
ThinkWriter("Analyzing...", color="cyan")
|
|
142
|
+
|
|
143
|
+
# Ghost autocomplete suggestion
|
|
144
|
+
AutoCompleteWriter("autocomplete", color="bright_black")
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
**Full writer list:**
|
|
148
|
+
|
|
149
|
+
| Writer | Effect |
|
|
150
|
+
| --- | --- |
|
|
151
|
+
| `TypeWriter` | Standard character-by-character typing |
|
|
152
|
+
| `RainbowWriter` | Rainbow color cycling |
|
|
153
|
+
| `HexWriter` | Custom hex color cycling |
|
|
154
|
+
| `DelWriter` | Type then delete |
|
|
155
|
+
| `LoopWriter` | Repeated type-delete loop |
|
|
156
|
+
| `SoundWriter` | Type with beep sounds |
|
|
157
|
+
| `GameDialog` | Game-style dialog box |
|
|
158
|
+
| `RandomWriter` | Random color per character |
|
|
159
|
+
| `MarkdownWriter` | Renders `**bold**`, `*italic*`, `__underline__` |
|
|
160
|
+
| `HTMLWriter` | Renders `<b>`, `<i>`, `<u>`, `<s>`, `<blink>` |
|
|
161
|
+
| `GlitchWriter` | Glitch/distortion effect |
|
|
162
|
+
| `ThinkWriter` | Blinking ellipsis before text |
|
|
163
|
+
| `ReverseWriter` | Reverse order typing |
|
|
164
|
+
| `ReverseGlitchWriter` | Reverse + glitch combined |
|
|
165
|
+
| `BounceWriter` | Bounce highlight effect |
|
|
166
|
+
| `BounceGlitchWriter` | Bounce + glitch combined |
|
|
167
|
+
| `GradientWriter` | Smooth hex-to-hex gradient |
|
|
168
|
+
| `AutoCompleteWriter` | Ghost autocomplete suggestion |
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
### Banners & ASCII Art
|
|
173
|
+
|
|
174
|
+
Every banner function accepts optional `color`, `align`, `padding`, `width`, `border_color`, and `title_color` parameters with full backward compatibility.
|
|
175
|
+
|
|
176
|
+
```python
|
|
177
|
+
from typefx import box, project_banner, hero_banner, alert_banner, progress_bar, tag, divider, frame, centered_banner, section_header, banner_block, banner_arrow, banner_dash, rule, color_art
|
|
178
|
+
from typefx.colors import BRIGHT_CYAN, CYAN, GREEN, YELLOW, RED, MAGENTA
|
|
179
|
+
|
|
180
|
+
# --- Box Layouts (7 styles) ---
|
|
181
|
+
print(box("Hello")) # single box
|
|
182
|
+
print(box("Content", style="double", title="Output")) # double-line
|
|
183
|
+
print(box("Rounded", style="rounded")) # rounded corners
|
|
184
|
+
print(box("Heavy", style="heavy")) # thick lines
|
|
185
|
+
print(box("ASCII", style="ascii")) # pure ASCII +-*/
|
|
186
|
+
|
|
187
|
+
# Fully customized box
|
|
188
|
+
print(box("Customized", color=BRIGHT_CYAN, align="center", padding=1, width=30, title="Demo", title_color=GREEN, border_color=CYAN))
|
|
189
|
+
|
|
190
|
+
# --- Project Banner ---
|
|
191
|
+
print(project_banner("MyApp", tagline="Terminal Text Effects", version="2.0.1", color=BRIGHT_CYAN, accent=GREEN))
|
|
192
|
+
|
|
193
|
+
# --- Hero Banner ---
|
|
194
|
+
print(hero_banner("Welcome to MyApp", color=BRIGHT_CYAN, width=60))
|
|
195
|
+
|
|
196
|
+
# --- Alert Banners (5 levels) ---
|
|
197
|
+
print(alert_banner("Everything OK", level="success", width=50))
|
|
198
|
+
print(alert_banner("Disk at 85%", level="warning", width=50))
|
|
199
|
+
print(alert_banner("Server down", level="error", width=50))
|
|
200
|
+
print(alert_banner("Connection lost", level="critical", width=50))
|
|
201
|
+
|
|
202
|
+
# --- Progress Bars ---
|
|
203
|
+
print(progress_bar(25, width=20, label="Download"))
|
|
204
|
+
print(progress_bar(50, width=20, label="Processing", color=YELLOW))
|
|
205
|
+
print(progress_bar(100, width=20, label="Complete", color=GREEN, show_percent=True))
|
|
206
|
+
|
|
207
|
+
# --- Tags / Badges ---
|
|
208
|
+
print(tag("INFO", color=BRIGHT_CYAN, bracket="square"))
|
|
209
|
+
print(tag("URGENT", color=RED, bracket="curly"))
|
|
210
|
+
|
|
211
|
+
# --- Dividers ---
|
|
212
|
+
print(divider(length=50, label="Section", color=CYAN, align="center"))
|
|
213
|
+
print(divider(length=40, fill="~", label="Chapter 1", color=YELLOW))
|
|
214
|
+
|
|
215
|
+
# --- Frames ---
|
|
216
|
+
print(frame(" Hello\n World", box_style="double"))
|
|
217
|
+
print(color_art(" ╔═══╗\n ║ ♥ ║\n ╚═══╝", color=RED))
|
|
218
|
+
|
|
219
|
+
# --- Centered Banner ---
|
|
220
|
+
print(centered_banner("★ PyTypeFx ★", width=50, color=BRIGHT_CYAN, fill="="))
|
|
221
|
+
|
|
222
|
+
# --- Section Header ---
|
|
223
|
+
print(section_header("Features", color=CYAN, align="center"))
|
|
224
|
+
|
|
225
|
+
# --- Banner Block with arrow ---
|
|
226
|
+
print(banner_block("Main Title", color=BRIGHT_CYAN, align="center"))
|
|
227
|
+
print(banner_arrow("Next Step", color=GREEN))
|
|
228
|
+
print(banner_dash("Item", color=CYAN))
|
|
229
|
+
|
|
230
|
+
# --- Rule ---
|
|
231
|
+
print(rule(color=CYAN))
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
**Full banner function list:**
|
|
235
|
+
|
|
236
|
+
| Function | Description |
|
|
237
|
+
| --- | --- |
|
|
238
|
+
| `box()` | Multi-style box layouts (7 styles) |
|
|
239
|
+
| `project_banner()` | Full project header with name, tagline, version |
|
|
240
|
+
| `hero_banner()` | Big attention-grabbing header |
|
|
241
|
+
| `alert_banner()` | Contextual alerts (info/success/warning/error/critical) |
|
|
242
|
+
| `progress_bar()` | Visual progress bars with labels |
|
|
243
|
+
| `tag()` | Badges and labels |
|
|
244
|
+
| `divider()` | Horizontal dividers with labels |
|
|
245
|
+
| `frame()` | Frame ASCII art inside boxes |
|
|
246
|
+
| `centered_banner()` | Text centered between fill characters |
|
|
247
|
+
| `section_header()` | Section header with decorative borders |
|
|
248
|
+
| `banner_block()` | Large banner block with top/bottom borders |
|
|
249
|
+
| `banner_arrow()` | Arrow-pointing banner |
|
|
250
|
+
| `banner_dash()` | Dashed prefix banner |
|
|
251
|
+
| `rule()` | Colored horizontal rule |
|
|
252
|
+
| `color_art()` | Color existing ASCII art |
|
|
253
|
+
| `buddy()` | Combine animal + project name |
|
|
254
|
+
| `buddy_box()` | Buddy mascot inside a box |
|
|
255
|
+
| `buddy_multi()` | Multiple animals side-by-side |
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
### ASCII Animals
|
|
260
|
+
|
|
261
|
+
55+ built-in ASCII art animals. Display one by name, or get a random one.
|
|
262
|
+
|
|
263
|
+
```python
|
|
264
|
+
from typefx import animal, animal_names
|
|
265
|
+
|
|
266
|
+
# Specific animal
|
|
267
|
+
print(animal("dragon"))
|
|
268
|
+
# /\_/\
|
|
269
|
+
# ( o.o )
|
|
270
|
+
# > ^ <
|
|
271
|
+
|
|
272
|
+
print(animal("cat1"))
|
|
273
|
+
# /\_/\
|
|
274
|
+
# ( o.o )
|
|
275
|
+
# > ^ <
|
|
276
|
+
|
|
277
|
+
print(animal("penguin1"))
|
|
278
|
+
# .---.
|
|
279
|
+
# / \
|
|
280
|
+
# \.-.-./
|
|
281
|
+
|
|
282
|
+
# Random animal
|
|
283
|
+
print(animal())
|
|
284
|
+
|
|
285
|
+
# List all available names
|
|
286
|
+
names = animal_names()
|
|
287
|
+
print(len(names)) # 55+
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
**Available animals:**
|
|
291
|
+
`cat1`, `cat2`, `cat_love`, `dog1`, `dog2`, `dog_sleep`, `bear`, `penguin1`, `penguin2`, `penguin_dance`, `bunny1`, `bunny2`, `bunny3`, `bird`, `fish`, `fox`, `pig`, `frog`, `koala`, `panda`, `turtle`, `monkey`, `octopus1`, `octopus2`, `lion`, `horse`, `cow`, `sheep`, `elephant`, `whale`, `dolphin`, `shark`, `snake`, `spider`, `butterfly`, `parrot`, `eagle`, `wolf`, `deer`, `chicken`, `hamster`, `mouse`, `sloth`, `dragon`, `bat`, `seal`, `crab`, `dino`, and more.
|
|
292
|
+
|
|
293
|
+
---
|
|
294
|
+
|
|
295
|
+
### Kaomoji
|
|
296
|
+
|
|
297
|
+
600+ Japanese emoticons across 30 categories.
|
|
298
|
+
|
|
299
|
+
```python
|
|
300
|
+
from typefx import kaomoji, kaomoji_categories
|
|
301
|
+
|
|
302
|
+
# By category
|
|
303
|
+
print(kaomoji("happy")) # (◕‿◕✿)
|
|
304
|
+
print(kaomoji("love")) # ♥‿♥
|
|
305
|
+
print(kaomoji("fight")) # (งಠ_ಠ)ง
|
|
306
|
+
print(kaomoji("cat")) # (=^‥^=)
|
|
307
|
+
print(kaomoji("dance")) # └(^‿^)┘
|
|
308
|
+
print(kaomoji("party")) # d(^‿^)b
|
|
309
|
+
print(kaomoji("magic")) # (∩‿∩)⊃━☆゚.*・。゚
|
|
310
|
+
print(kaomoji("sorry")) # (シ_ _)シ
|
|
311
|
+
print(kaomoji("excited")) # ヽ(°〇°)ノ
|
|
312
|
+
print(kaomoji("cold")) # (っ◕‿◕)っ❄
|
|
313
|
+
|
|
314
|
+
# Random kaomoji
|
|
315
|
+
print(kaomoji())
|
|
316
|
+
|
|
317
|
+
# List categories
|
|
318
|
+
print(kaomoji_categories())
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
**Categories:** happy, sad, angry, love, shrug, cat, dog, bear, cute, surprise, sleep, dance, party, greeting, wave, hug, sorry, thank, excited, nervous, cool, run, fight, magic, food, drink, music, rain, star, flower, cold.
|
|
322
|
+
|
|
323
|
+
---
|
|
324
|
+
|
|
325
|
+
### Emoji Symbols
|
|
326
|
+
|
|
327
|
+
90+ Unicode symbols organized by category.
|
|
328
|
+
|
|
329
|
+
```python
|
|
330
|
+
from typefx import emoji, emoji_categories
|
|
331
|
+
|
|
332
|
+
# Get emoji by name
|
|
333
|
+
print(emoji("heart_red")) # ♥
|
|
334
|
+
print(emoji("star")) # ★
|
|
335
|
+
print(emoji("fire")) # ♨
|
|
336
|
+
print(emoji("aries")) # ♈
|
|
337
|
+
print(emoji("chess_king")) # ♔
|
|
338
|
+
print(emoji("infinity")) # ∞
|
|
339
|
+
print(emoji("euro")) # €
|
|
340
|
+
print(emoji("sun")) # ☀
|
|
341
|
+
print(emoji("peace")) # ☮
|
|
342
|
+
|
|
343
|
+
# Random emoji
|
|
344
|
+
print(emoji())
|
|
345
|
+
|
|
346
|
+
# List categories
|
|
347
|
+
print(emoji_categories())
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
**Categories:** hearts, stars, zodiac, chess, math, arrows, currency, weather, geometric, music, misc.
|
|
351
|
+
|
|
352
|
+
---
|
|
353
|
+
|
|
354
|
+
### Buddy / Mascot System
|
|
355
|
+
|
|
356
|
+
Combine any ASCII animal with a project name for mascot displays.
|
|
357
|
+
|
|
358
|
+
```python
|
|
359
|
+
from typefx import buddy, buddy_box, buddy_multi
|
|
360
|
+
from typefx.colors import BRIGHT_CYAN, GREEN, MAGENTA
|
|
361
|
+
|
|
362
|
+
# Single mascot
|
|
363
|
+
buddy("MyApp", animal_name="cat1", color=BRIGHT_CYAN)
|
|
364
|
+
|
|
365
|
+
# With message
|
|
366
|
+
buddy("MyApp", animal_name="penguin2", color=BRIGHT_CYAN,
|
|
367
|
+
message="Making terminals beautiful!")
|
|
368
|
+
|
|
369
|
+
# Boxed mascot
|
|
370
|
+
buddy_box("MyApp", tagline="v2.0", animal_name="fox", color=BRIGHT_CYAN)
|
|
371
|
+
|
|
372
|
+
# Multi-animal team (aligned side-by-side)
|
|
373
|
+
buddy_multi("MyApp", animal_names=["cat1", "fox", "penguin2"],
|
|
374
|
+
color=BRIGHT_CYAN)
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
---
|
|
378
|
+
|
|
379
|
+
### Color System
|
|
380
|
+
|
|
381
|
+
```python
|
|
382
|
+
from typefx.colors import (
|
|
383
|
+
RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE,
|
|
384
|
+
BRIGHT_RED, BRIGHT_GREEN, BRIGHT_CYAN, BRIGHT_WHITE,
|
|
385
|
+
ORANGE, PINK, TEAL, CORAL, MINT, PLUM, GOLD,
|
|
386
|
+
BG_RED, BG_GREEN, BG_CYAN,
|
|
387
|
+
BOLD, UNDERLINE, ITALIC, INVERT, STRIKETHROUGH,
|
|
388
|
+
hex_to_ansi, rgb_to_ansi, colorize
|
|
389
|
+
)
|
|
390
|
+
|
|
391
|
+
# Apply multiple styles
|
|
392
|
+
print(colorize("Error!", RED, BOLD, UNDERLINE))
|
|
393
|
+
|
|
394
|
+
# Hex to ANSI
|
|
395
|
+
print(f"{hex_to_ansi('#FF5733')}Orange text{RESET}")
|
|
396
|
+
|
|
397
|
+
# RGB to ANSI
|
|
398
|
+
print(f"{rgb_to_ansi(100, 200, 255)}Custom RGB{RESET}")
|
|
399
|
+
|
|
400
|
+
# Use a palette
|
|
401
|
+
from typefx.colors import PALETTES
|
|
402
|
+
print(PALETTES["OCEAN"]) # ['#0077BE', '#0099CC', '#00BFFF', ...]
|
|
403
|
+
print(PALETTES["SUNSET"]) # ['#FF4500', '#FF6347', '#FF8C00', ...]
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
**What's included:**
|
|
407
|
+
- 16 basic + 16 bright ANSI colors
|
|
408
|
+
- 50+ extended named colors (Coral, Mint, Plum, Slate, Gold, etc.)
|
|
409
|
+
- Background variants for all colors (`BG_RED`, `BG_GREEN`, ...)
|
|
410
|
+
- HEX and RGB to ANSI converters
|
|
411
|
+
- 256-color 8-bit helpers (`fg_256()`, `bg_256()`)
|
|
412
|
+
- 6 curated palettes: `SUCCESS`, `ERROR`, `WARNING`, `INFO`, `NEON`, `PASTEL`, `OCEAN`, `SUNSET`, `FOREST`, `GARDEN`, `CYBER`, `NOIR`, `ROSE`
|
|
413
|
+
|
|
414
|
+
---
|
|
415
|
+
|
|
416
|
+
### Style Presets
|
|
417
|
+
|
|
418
|
+
40+ composable style presets for quick formatting.
|
|
419
|
+
|
|
420
|
+
```python
|
|
421
|
+
from typefx.styles import apply_style, compose, ERROR, SUCCESS, WARNING, INFO, TITLE, HEADING, CODE, HIGHLIGHT, BANNER, NEON, GHOST
|
|
422
|
+
|
|
423
|
+
# Apply a preset
|
|
424
|
+
print(apply_style("Something went wrong!", ERROR))
|
|
425
|
+
print(apply_style("Task completed!", SUCCESS))
|
|
426
|
+
print(apply_style("Chapter 1", TITLE))
|
|
427
|
+
print(apply_style("Important note", HIGHLIGHT))
|
|
428
|
+
print(apply_style("Neon sign", NEON))
|
|
429
|
+
|
|
430
|
+
# Compose a custom style
|
|
431
|
+
from typefx.colors import BRIGHT_MAGENTA, BRIGHT_CYAN, INVERT, BOLD
|
|
432
|
+
custom = compose(BRIGHT_MAGENTA, BRIGHT_CYAN, INVERT, BOLD)
|
|
433
|
+
print(apply_style("Custom!", custom))
|
|
434
|
+
|
|
435
|
+
# Use with writers
|
|
436
|
+
from typefx import TypeWriter
|
|
437
|
+
TypeWriter("Banner text", **BANNER)
|
|
438
|
+
TypeWriter("Error text", **ERROR)
|
|
439
|
+
```
|
|
440
|
+
|
|
441
|
+
---
|
|
442
|
+
|
|
443
|
+
## Decorator
|
|
444
|
+
|
|
445
|
+
The `@typefx` decorator applies typing effects to any function's output.
|
|
446
|
+
|
|
447
|
+
```python
|
|
448
|
+
from PyTypeFx import typefx
|
|
449
|
+
|
|
450
|
+
@typefx(hex_colors=["#FF0000", "#00FF00", "#0000FF"], delay=0.03)
|
|
451
|
+
def my_message():
|
|
452
|
+
print("This message will be typed out with a cool effect!")
|
|
453
|
+
|
|
454
|
+
my_message()
|
|
455
|
+
```
|
|
456
|
+
|
|
457
|
+
---
|
|
458
|
+
|
|
459
|
+
## Command-Line Interface
|
|
460
|
+
|
|
461
|
+
```bash
|
|
462
|
+
# Basic
|
|
463
|
+
typefx --text "Hello from the CLI!" --delay 0.05 --rainbow
|
|
464
|
+
|
|
465
|
+
# From file
|
|
466
|
+
typefx --file message.txt --delay 0.03
|
|
467
|
+
|
|
468
|
+
# Random effect
|
|
469
|
+
typefx --text "Random text" --random
|
|
470
|
+
|
|
471
|
+
# Looping
|
|
472
|
+
typefx --text "Looping" --loops 5
|
|
473
|
+
```
|
|
474
|
+
|
|
475
|
+
**CLI Options:**
|
|
476
|
+
|
|
477
|
+
| Option | Description |
|
|
478
|
+
| --- | --- |
|
|
479
|
+
| `-t`, `--text` | Text to type |
|
|
480
|
+
| `-d`, `--delay` | Delay between characters |
|
|
481
|
+
| `-l`, `--loops` | Loop count for `LoopWriter` |
|
|
482
|
+
| `-r`, `--rainbow` | Rainbow effect |
|
|
483
|
+
| `-rnd`, `--random` | Random writer effect |
|
|
484
|
+
| `-s`, `--sound` | Sound effect |
|
|
485
|
+
| `-f`, `--file` | Read text from a file |
|
|
486
|
+
|
|
487
|
+
---
|
|
488
|
+
|
|
489
|
+
## Full API Reference
|
|
490
|
+
|
|
491
|
+
### `typefx.writers`
|
|
492
|
+
|
|
493
|
+
| Function | Signature |
|
|
494
|
+
| --- | --- |
|
|
495
|
+
| `TypeWriter` | `(text, delay, color, style, reverse, position)` |
|
|
496
|
+
| `RainbowWriter` | `(text, delay, style, position)` |
|
|
497
|
+
| `HexWriter` | `(text, delay, style, position)` |
|
|
498
|
+
| `DelWriter` | `(text, delay, color, style, reverse, position)` |
|
|
499
|
+
| `LoopWriter` | `(text, delay, color, style, reverse, position, loops)` |
|
|
500
|
+
| `SoundWriter` | `(text, delay, color, style, reverse, position, frequency, duration)` |
|
|
501
|
+
| `GameDialog` | `(text, delay, color, style, position)` |
|
|
502
|
+
| `RandomWriter` | `(text, delay, style, position)` |
|
|
503
|
+
| `MarkdownWriter` | `(text, delay, style, position)` |
|
|
504
|
+
| `HTMLWriter` | `(text, delay, style, position)` |
|
|
505
|
+
| `GlitchWriter` | `(text, delay, color, style, position, glitch_chars, glitch_duration)` |
|
|
506
|
+
| `ThinkWriter` | `(text, delay, color, style, position)` |
|
|
507
|
+
| `ReverseWriter` | `(text, delay, color, style, position)` |
|
|
508
|
+
| `ReverseGlitchWriter` | `(text, delay, color, style, position)` |
|
|
509
|
+
| `BounceWriter` | `(text, delay, color, style, position)` |
|
|
510
|
+
| `BounceGlitchWriter` | `(text, delay, color, style, position)` |
|
|
511
|
+
| `GradientWriter` | `(text, delay, style, position, start_hex, end_hex)` |
|
|
512
|
+
| `AutoCompleteWriter` | `(text, delay, color, style, position, options)` |
|
|
513
|
+
|
|
514
|
+
### `typefx.banners`
|
|
515
|
+
|
|
516
|
+
| Function | Description |
|
|
517
|
+
| --- | --- |
|
|
518
|
+
| `box(text, style, color, align, padding, width, title, title_color, border_color)` | Box layouts in 7 styles |
|
|
519
|
+
| `project_banner(name, tagline, version, color, accent)` | Full project header |
|
|
520
|
+
| `hero_banner(text, color, width)` | Large attention header |
|
|
521
|
+
| `alert_banner(text, level, width)` | 5-level alert banners |
|
|
522
|
+
| `progress_bar(percent, width, label, color, show_percent, fill, empty)` | Progress bars |
|
|
523
|
+
| `tag(text, color, bracket)` | Badges / labels |
|
|
524
|
+
| `divider(length, label, fill, color, align)` | Horizontal dividers |
|
|
525
|
+
| `frame(art, box_style, color, padding)` | Frame ASCII art |
|
|
526
|
+
| `centered_banner(text, width, fill, color)` | Centered text banner |
|
|
527
|
+
| `section_header(text, color, align)` | Section headers |
|
|
528
|
+
| `banner_block(text, color, align, padding, width)` | Large banner block |
|
|
529
|
+
| `banner_arrow(text, color, align)` | Arrow banner |
|
|
530
|
+
| `banner_dash(text, color, align)` | Dashed banner |
|
|
531
|
+
| `rule(color, length)` | Colored horizontal rule |
|
|
532
|
+
| `color_art(art, color)` | Colorize ASCII art |
|
|
533
|
+
| `animal(name)` | Get ASCII animal |
|
|
534
|
+
| `animal_names()` | List all animal names |
|
|
535
|
+
| `kaomoji(category)` | Get kaomoji by category |
|
|
536
|
+
| `kaomoji_categories()` | List all kaomoji categories |
|
|
537
|
+
| `emoji(name)` | Get emoji by name |
|
|
538
|
+
| `emoji_categories()` | List all emoji categories |
|
|
539
|
+
| `buddy(name, animal_name, color, message)` | Mascot display |
|
|
540
|
+
| `buddy_box(name, tagline, animal_name, color)` | Boxed mascot |
|
|
541
|
+
| `buddy_multi(name, animal_names, color)` | Multi-animal mascot |
|
|
542
|
+
| `ALERT_STYLES` | Dict: info, success, warning, error, critical |
|
|
543
|
+
|
|
544
|
+
### `typefx.effects`
|
|
545
|
+
|
|
546
|
+
- `BlinkEffect(duration, cursor, delay)` — Blinking cursor animation
|
|
547
|
+
- `SoundEffect(frequency, duration)` — System beep sound
|
|
548
|
+
|
|
549
|
+
### `typefx.colors`
|
|
550
|
+
|
|
551
|
+
- `hex_to_ansi(hex_color)` — Hex to ANSI foreground
|
|
552
|
+
- `bg_hex_to_ansi(hex_color)` — Hex to ANSI background
|
|
553
|
+
- `rgb_to_ansi(r, g, b)` — RGB to ANSI foreground
|
|
554
|
+
- `bg_rgb_to_ansi(r, g, b)` — RGB to ANSI background
|
|
555
|
+
- `fg_256(n)` — 8-bit 256-color foreground
|
|
556
|
+
- `bg_256(n)` — 8-bit 256-color background
|
|
557
|
+
- `colorize(text, *styles)` — Apply ANSI codes to text
|
|
558
|
+
|
|
559
|
+
### `typefx.styles`
|
|
560
|
+
|
|
561
|
+
- `compose(color, *formats)` — Build style dict
|
|
562
|
+
- `apply_style(text, style)` — Apply style to string
|
|
563
|
+
|
|
564
|
+
### `typefx.utility`
|
|
565
|
+
|
|
566
|
+
- `gradient(text, start_hex, end_hex)` — Apply gradient to text
|
|
567
|
+
- `supports_ansi()` — Check terminal ANSI support
|
|
568
|
+
|
|
569
|
+
---
|
|
570
|
+
|
|
571
|
+
## Configuration
|
|
572
|
+
|
|
573
|
+
The `typefx.constant` module contains all default values:
|
|
574
|
+
|
|
575
|
+
| Constant | Default | Description |
|
|
576
|
+
| --- | --- | --- |
|
|
577
|
+
| `TEXT` | `"Hello World!"` | Default text for writers |
|
|
578
|
+
| `GLITCH` | `"!@#$%^&*()..."` | Glitch character set |
|
|
579
|
+
| `CURSOR` | `_` | BlinkEffect cursor |
|
|
580
|
+
| `DELAY` | `0.05` | Default character delay |
|
|
581
|
+
| `HOLD` | `1` | DelWriter hold time |
|
|
582
|
+
| `LOOP` | `3` | Default loop count |
|
|
583
|
+
| `DOTS` | `3` | ThinkWriter dot count |
|
|
584
|
+
| `FREQUENCY` | `800` | Sound frequency |
|
|
585
|
+
| `SOUND_DURATION` | `30` | Sound duration |
|
|
586
|
+
| `START_HEX` | `"#E74C3C"` | Gradient start color |
|
|
587
|
+
| `END_HEX` | `"#2ECC71"` | Gradient end color |
|
|
588
|
+
|
|
589
|
+
---
|
|
590
|
+
|
|
591
|
+
## Examples Gallery
|
|
592
|
+
|
|
593
|
+
### Gradient Text
|
|
594
|
+
|
|
595
|
+
```python
|
|
596
|
+
from PyTypeFx import GradientWriter
|
|
597
|
+
|
|
598
|
+
GradientWriter("This is a beautiful gradient!", start_hex="#FF00FF", end_hex="#00FFFF", delay=0.02)
|
|
599
|
+
```
|
|
600
|
+
|
|
601
|
+
### Game Dialog
|
|
602
|
+
|
|
603
|
+
```python
|
|
604
|
+
from PyTypeFx import GameDialog
|
|
605
|
+
|
|
606
|
+
GameDialog(speaker="Hero", text="I must defeat the final boss!", delay=0.04, sound=True)
|
|
607
|
+
```
|
|
608
|
+
|
|
609
|
+
### Chaining Effects
|
|
610
|
+
|
|
611
|
+
```python
|
|
612
|
+
from PyTypeFx import TypeWriter, DelWriter, BlinkEffect
|
|
613
|
+
|
|
614
|
+
TypeWriter("Preparing for deletion...")
|
|
615
|
+
DelWriter("This message will self-destruct.", hold=2)
|
|
616
|
+
BlinkEffect(duration=2)
|
|
617
|
+
```
|
|
618
|
+
|
|
619
|
+
### Alert Dashboard
|
|
620
|
+
|
|
621
|
+
```python
|
|
622
|
+
from typefx import alert_banner, divider, box
|
|
623
|
+
from typefx.colors import CYAN
|
|
624
|
+
|
|
625
|
+
print(box("System Dashboard", style="double", align="center", width=60))
|
|
626
|
+
print(alert_banner("CPU: 45%", level="info"))
|
|
627
|
+
print(alert_banner("Memory: 72%", level="warning"))
|
|
628
|
+
print(alert_banner("Errors: 0", level="success"))
|
|
629
|
+
print(divider(length=60, fill="─", color=CYAN))
|
|
630
|
+
```
|
|
631
|
+
|
|
632
|
+
### Multi-Animal Team Mascot
|
|
633
|
+
|
|
634
|
+
```python
|
|
635
|
+
from typefx import buddy_multi
|
|
636
|
+
from typefx.colors import BRIGHT_CYAN
|
|
637
|
+
|
|
638
|
+
buddy_multi("PyTypeFx", animal_names=["dragon", "fox", "penguin2"],
|
|
639
|
+
color=BRIGHT_CYAN)
|
|
640
|
+
```
|
|
641
|
+
|
|
642
|
+
### Custom Box Style
|
|
643
|
+
|
|
644
|
+
```python
|
|
645
|
+
from typefx import box
|
|
646
|
+
from typefx.colors import BRIGHT_CYAN, GREEN, CYAN
|
|
647
|
+
|
|
648
|
+
print(box("Welcome to TypeFx!\nZero dependencies.\n55+ animals. 600+ kaomoji.",
|
|
649
|
+
style="double", color=BRIGHT_CYAN, align="center", padding=1,
|
|
650
|
+
width=50, title="PyTypeFx", title_color=GREEN, border_color=CYAN))
|
|
651
|
+
```
|
|
652
|
+
|
|
653
|
+
---
|
|
654
|
+
|
|
655
|
+
## Contributing
|
|
656
|
+
|
|
657
|
+
See [`CONTRIBUTING.md`](CONTRIBUTING.md) for development setup, testing, code style, and pull request guidelines.
|
|
658
|
+
|
|
659
|
+
## Code of Conduct
|
|
660
|
+
|
|
661
|
+
This project follows the [Contributor Covenant](CODE_OF_CONDUCT.md). See [`CODE_OF_CONDUCT.md`](CODE_OF_CONDUCT.md) for details.
|
|
662
|
+
|
|
663
|
+
## License
|
|
664
|
+
|
|
665
|
+
This project is licensed under the MIT License. See the [`LICENSE`](LICENSE) file for details.
|
|
666
|
+
|
|
667
|
+
---
|
|
668
|
+
|
|
669
|
+
<p align="center">
|
|
670
|
+
<sub>Built with ❤ by <a href="https://github.com/rkriad585">RK RIAD KHAN</a></sub>
|
|
671
|
+
</p>
|