Skip to content

Commit 8a4a3ca

Browse files
committed
fix: resolve navigation, resolver and translator bugs; add test scripts, CI, and full Laravel-style docs
1 parent c8f8869 commit 8a4a3ca

20 files changed

Lines changed: 3439 additions & 8 deletions

‎README.md‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ every plugin is an "installed app" with its own independent
77
`manifest.php`. Built on PHP 8.5+, Symfony DependencyInjection/
88
HttpClient/Cache, and Doctrine ORM/Migrations.
99

10-
**📖 Full documentation: [`docs/guide/00-index.md`](docs/guide/00-index.md)**
10+
**📖 Full documentation: [`docs/guide/00-index.html`](docs/guide/00-index.html)**
1111
(installation, architecture, Activity/Intent, View/Widget, ViewModel,
1212
database, caching, plugins, Broadcasts, Webhook/Polling, full API
1313
reference, i18n, testing, deployment, and advanced features — each
@@ -41,7 +41,7 @@ $kernel->handle($update); // runs the matching Activity and sends the reply auto
4141
```
4242

4343
Full installation/configuration/run details in
44-
[Installation](docs/guide/01-installation.md).
44+
[Installation](docs/guide/01-installation.html).
4545

4646
## A Small Activity
4747

@@ -67,7 +67,7 @@ final class StartActivity extends BotActivity
6767
}
6868
```
6969

70-
More in [Activities and Intents](docs/guide/04-activities-and-intents.md).
70+
More in [Activities and Intents](docs/guide/04-activities-and-intents.html).
7171

7272
## Building a New Plugin
7373

@@ -76,7 +76,7 @@ Every plugin lives in `plugins/<package-name>/` and includes
7676
`migrations/` folder for Doctrine Migrations, which run automatically
7777
on the first request after deployment — no CLI command required. A
7878
complete example is available at `plugins/greeter/`; the full guide
79-
is at [Plugin System](docs/guide/09-plugins.md).
79+
is at [Plugin System](docs/guide/09-plugins.html).
8080

8181
## Telegram Bot API Coverage
8282

@@ -85,7 +85,7 @@ topic management, payments and Stars, Rich Messages, reactions,
8585
Inline mode, Business accounts, gifts and stickers, join requests,
8686
Bot-to-Bot, Guest Mode, and Managed Bots — all available through the
8787
fluent `Api\Telegram` facade. The full table is in the
88-
[Telegram API Reference](docs/guide/12-telegram-api-reference.md).
88+
[Telegram API Reference](docs/guide/12-telegram-api-reference.html).
8989

9090
```php
9191
Telegram::message()->to($chatId)->text('Hello from Aicrion')->send();
@@ -101,4 +101,4 @@ vendor/bin/phpunit
101101
```
102102

103103
A guide to writing new tests (including testing Activity navigation
104-
chains) is at [Testing](docs/guide/14-testing.md).
104+
chains) is at [Testing](docs/guide/14-testing.html).

‎docs/assets/docs.css‎

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
2+
.docs-shell{display:flex;min-height:100dvh;padding-top:64px}
3+
.docs-sidebar{width:280px;flex:none;border-right:1px solid var(--color-border);background:var(--color-surface);position:sticky;top:64px;height:calc(100dvh - 64px);overflow-y:auto;padding:var(--space-6) var(--space-4)}
4+
.sidebar-brand{margin-bottom:var(--space-6)}
5+
.sidebar-brand a{display:flex;align-items:center;gap:var(--space-2);font:700 var(--text-base) var(--font-display)}
6+
.sidebar-nav{display:flex;flex-direction:column;gap:var(--space-1)}
7+
.side-group{margin-top:var(--space-4)}
8+
.side-group-title{font-size:var(--text-xs);text-transform:uppercase;letter-spacing:.08em;color:var(--color-text-faint);margin:0 var(--space-3) var(--space-2)}
9+
.side-link{display:block;padding:var(--space-2) var(--space-3);border-radius:var(--radius-lg);font-size:var(--text-sm);color:var(--color-text-muted);transition:all var(--transition-interactive)}
10+
.side-link:hover{background:var(--color-surface-2);color:var(--color-text)}
11+
.side-link.active{background:var(--color-primary);color:var(--color-text-inverse);font-weight:600}
12+
.docs-content{flex:1;min-width:0;padding:var(--space-10) var(--space-8)}
13+
.docs-article{max-width:760px;margin:0 auto}
14+
.docs-article h1{font:700 var(--text-2xl)/1.1 var(--font-display);margin:0 0 var(--space-6)}
15+
.docs-article h2{font:700 var(--text-xl)/1.2 var(--font-display);margin:var(--space-10) 0 var(--space-4);border-bottom:1px solid var(--color-divider);padding-bottom:var(--space-2)}
16+
.docs-article h3{font:600 var(--text-lg)/1.3 var(--font-display);margin:var(--space-6) 0 var(--space-3)}
17+
.docs-article p{color:var(--color-text);line-height:1.7;margin:var(--space-4) 0}
18+
.docs-article ul,.docs-article ol{padding-left:1.4em;line-height:1.7}
19+
.docs-article li{margin:var(--space-2) 0}
20+
.docs-article a{color:var(--color-primary);text-decoration:underline}
21+
.docs-article code{background:var(--color-surface-offset);padding:.15em .4em;border-radius:.35em;font-size:.9em}
22+
.docs-article pre{background:var(--color-surface-2);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--space-4);overflow-x:auto;margin:var(--space-5) 0}
23+
.docs-article pre code{background:none;padding:0}
24+
.docs-article blockquote{border-left:3px solid var(--color-primary);margin:var(--space-5) 0;padding:var(--space-2) var(--space-4);color:var(--color-text-muted);background:var(--color-surface-2);border-radius:0 var(--radius-lg) var(--radius-lg) 0}
25+
.docs-article table{width:100%;border-collapse:collapse;margin:var(--space-5) 0;font-size:var(--text-sm)}
26+
.docs-article th,.docs-article td{border:1px solid var(--color-divider);padding:var(--space-2) var(--space-3);text-align:left}
27+
.docs-article th{background:var(--color-surface-2)}
28+
.docs-pagination{display:flex;justify-content:space-between;margin-top:var(--space-10);padding-top:var(--space-6);border-top:1px solid var(--color-divider)}
29+
.docs-pagination a{padding:var(--space-2) var(--space-4);border:1px solid var(--color-border);border-radius:999px;font-size:var(--text-sm)}
30+
.sidebar-toggle{display:none;position:fixed;left:var(--space-4);top:var(--space-4);z-index:30}
31+
@media(max-width:900px){
32+
.docs-sidebar{position:fixed;left:-300px;top:0;height:100dvh;z-index:25;transition:left .2s ease;padding-top:80px}
33+
.docs-sidebar.open{left:0}
34+
.sidebar-toggle{display:inline-flex}
35+
.docs-content{padding:var(--space-8) var(--space-4)}
36+
}

‎docs/guide/00-index.html‎

Lines changed: 179 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,179 @@
1+
<!doctype html>
2+
<html lang="en" dir="ltr">
3+
<head>
4+
<meta charset="utf-8">
5+
<meta name="viewport" content="width=device-width,initial-scale=1">
6+
<title>Documentation Home — Aicrion Tandroid Docs</title>
7+
<link rel="stylesheet" href="../assets/style.css">
8+
<link rel="stylesheet" href="../assets/docs.css">
9+
</head>
10+
<body>
11+
<a class="skip" href="#content">Skip to content</a>
12+
<button class="btn theme" data-theme-toggle aria-label="Toggle theme">Theme</button>
13+
<button class="btn sidebar-toggle" data-sidebar-toggle aria-label="Toggle sidebar">Menu</button>
14+
<div class="docs-shell">
15+
<aside class="docs-sidebar" data-sidebar>
16+
<div class="sidebar-brand">
17+
<a href="../index.html" class="logo">
18+
<svg class="logo-mark" viewBox="0 0 48 48" fill="none" width="28" height="28"><path d="M24 6l14 8v20l-14 8-14-8V14l14-8Z" stroke="currentColor" stroke-width="2.5"/></svg>
19+
<span>Aicrion Tandroid</span>
20+
</a>
21+
</div>
22+
<nav class="sidebar-nav">
23+
<a class="side-link active" href="00-index.html">Home</a>
24+
<div class="side-group"><div class="side-group-title">Getting Started</div>
25+
<a class="side-link" href="01-installation.html">Installation</a>
26+
<a class="side-link" href="02-configuration.html">Configuration</a>
27+
</div>
28+
<div class="side-group"><div class="side-group-title">Core Architecture</div>
29+
<a class="side-link" href="03-architecture.html">Kernel & Boot Lifecycle</a>
30+
<a class="side-link" href="04-activities-and-intents.html">Activities & Intents</a>
31+
<a class="side-link" href="05-views-and-widgets.html">Views & Widgets</a>
32+
<a class="side-link" href="06-viewmodel-and-state.html">ViewModel & State</a>
33+
</div>
34+
<div class="side-group"><div class="side-group-title">Data & Infrastructure</div>
35+
<a class="side-link" href="07-database-and-doctrine.html">Database & Doctrine</a>
36+
<a class="side-link" href="08-caching-and-redis.html">Caching & Redis</a>
37+
</div>
38+
<div class="side-group"><div class="side-group-title">Extensibility</div>
39+
<a class="side-link" href="09-plugins.html">Plugin System</a>
40+
<a class="side-link" href="10-broadcasts.html">Broadcasts</a>
41+
</div>
42+
<div class="side-group"><div class="side-group-title">Telegram Integration</div>
43+
<a class="side-link" href="11-transport-webhook-and-polling.html">Webhook & Polling</a>
44+
<a class="side-link" href="12-telegram-api-reference.html">Telegram API Reference</a>
45+
</div>
46+
<div class="side-group"><div class="side-group-title">Other Topics</div>
47+
<a class="side-link" href="13-localization.html">Localization (i18n)</a>
48+
<a class="side-link" href="14-testing.html">Testing</a>
49+
<a class="side-link" href="15-deployment.html">Deployment</a>
50+
<a class="side-link" href="16-advanced-features.html">Advanced Features</a>
51+
</div>
52+
</nav>
53+
</aside>
54+
<main id="content" class="docs-content">
55+
<div class="docs-article">
56+
<h1 id="aicriontandroid-documentation">Aicrion\Tandroid Documentation</h1>
57+
<p>The complete reference for a Telegram bot framework built around an
58+
Android-inspired architecture. This documentation is written
59+
Laravel-style: every chapter is self-contained, but the order below
60+
is the recommended learning path.</p>
61+
<h2 id="getting-started">Getting Started</h2>
62+
<ul>
63+
<li><a href="01-installation.md">Installation</a></li>
64+
<li><a href="02-configuration.md">Configuration</a></li>
65+
</ul>
66+
<h2 id="core-architecture">Core Architecture</h2>
67+
<ul>
68+
<li><a href="03-architecture.md">The Kernel and the Boot Lifecycle</a></li>
69+
<li><a href="04-activities-and-intents.md">Activities and Intents</a></li>
70+
<li><a href="05-views-and-widgets.md">Views and Widgets</a></li>
71+
<li><a href="06-viewmodel-and-state.md">ViewModel and State Management</a></li>
72+
</ul>
73+
<h2 id="data-and-infrastructure">Data and Infrastructure</h2>
74+
<ul>
75+
<li><a href="07-database-and-doctrine.md">Database and Doctrine</a></li>
76+
<li><a href="08-caching-and-redis.md">Caching and Redis</a></li>
77+
</ul>
78+
<h2 id="extensibility">Extensibility</h2>
79+
<ul>
80+
<li><a href="09-plugins.md">Plugin System (Package Manager)</a></li>
81+
<li><a href="10-broadcasts.md">Broadcasts and System-Wide Events</a></li>
82+
</ul>
83+
<h2 id="connecting-to-telegram">Connecting to Telegram</h2>
84+
<ul>
85+
<li><a href="11-transport-webhook-and-polling.md">Webhook and Polling Modes</a></li>
86+
<li><a href="12-telegram-api-reference.md">Complete Telegram API Reference</a></li>
87+
</ul>
88+
<h2 id="other-features">Other Features</h2>
89+
<ul>
90+
<li><a href="13-localization.md">Localization (i18n)</a></li>
91+
<li><a href="14-testing.md">Testing</a></li>
92+
<li><a href="15-deployment.md">Deployment: Shared Hosting and VPS</a></li>
93+
<li><a href="16-advanced-features.md">Advanced Features: Remote Intents, Guest Mode, Managed Bots</a></li>
94+
</ul>
95+
<h2 id="quick-reference">Quick Reference</h2>
96+
<table>
97+
<thead>
98+
<tr>
99+
<th>Android concept</th>
100+
<th>Aicrion\Tandroid equivalent</th>
101+
<th>Docs</th>
102+
</tr>
103+
</thead>
104+
<tbody>
105+
<tr>
106+
<td><code>Activity</code></td>
107+
<td><code>Activity\BotActivity</code></td>
108+
<td><a href="04-activities-and-intents.md">Activities and Intents</a></td>
109+
</tr>
110+
<tr>
111+
<td><code>Intent</code> / <code>IntentFilter</code></td>
112+
<td><code>Intent\Intent</code> / <code>Attribute\IntentFilter</code></td>
113+
<td><a href="04-activities-and-intents.md">Activities and Intents</a></td>
114+
</tr>
115+
<tr>
116+
<td><code>ActivityManagerService</code></td>
117+
<td><code>Kernel\ActivityManager</code></td>
118+
<td><a href="03-architecture.md">The Kernel</a></td>
119+
</tr>
120+
<tr>
121+
<td><code>PackageManagerService</code></td>
122+
<td><code>Package\PackageManager</code></td>
123+
<td><a href="09-plugins.md">Plugins</a></td>
124+
</tr>
125+
<tr>
126+
<td><code>AndroidManifest.xml</code></td>
127+
<td>each plugin's <code>Package\Manifest</code></td>
128+
<td><a href="09-plugins.md">Plugins</a></td>
129+
</tr>
130+
<tr>
131+
<td><code>View</code> / <code>Widget</code></td>
132+
<td><code>View\View</code> / <code>Widget\*</code></td>
133+
<td><a href="05-views-and-widgets.md">Views and Widgets</a></td>
134+
</tr>
135+
<tr>
136+
<td><code>androidx.lifecycle.ViewModel</code></td>
137+
<td><code>Kernel\ViewModel\ViewModel</code></td>
138+
<td><a href="06-viewmodel-and-state.md">ViewModel</a></td>
139+
</tr>
140+
<tr>
141+
<td><code>BroadcastReceiver</code></td>
142+
<td><code>Attribute\BroadcastFilter</code></td>
143+
<td><a href="10-broadcasts.md">Broadcasts</a></td>
144+
</tr>
145+
<tr>
146+
<td>Back Stack</td>
147+
<td><code>Kernel\BackStackStore</code></td>
148+
<td><a href="03-architecture.md">The Kernel</a></td>
149+
</tr>
150+
<tr>
151+
<td>Navigation Deep Links</td>
152+
<td><code>Kernel\DeepLinkResolver</code></td>
153+
<td><a href="04-activities-and-intents.md">Activities and Intents</a></td>
154+
</tr>
155+
</tbody>
156+
</table>
157+
<h2 id="found-a-bug">Found a bug?</h2>
158+
<p>If the framework's actual behavior doesn't match what's written here,
159+
treat it as a bug — this documentation is meant to always be an
160+
accurate reflection of the real code in <code>src/</code>, not architectural
161+
aspirations.</p>
162+
<div class="docs-pagination">
163+
<span></span><a href="01-installation.html">Installation &rarr;</a>
164+
</div>
165+
</div>
166+
</main>
167+
</div>
168+
<script>
169+
(function(){
170+
const r=document.documentElement,t=document.querySelector('[data-theme-toggle]');
171+
let d=matchMedia('(prefers-color-scheme: dark)').matches?'dark':'light';
172+
r.setAttribute('data-theme',d);
173+
t&&t.addEventListener('click',()=>{d=d==='dark'?'light':'dark';r.setAttribute('data-theme',d);});
174+
const s=document.querySelector('[data-sidebar]'),st=document.querySelector('[data-sidebar-toggle]');
175+
st&&st.addEventListener('click',()=>s.classList.toggle('open'));
176+
})();
177+
</script>
178+
</body>
179+
</html>

0 commit comments

Comments
 (0)