create-jilatax 0.0.8 → 0.1.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/README.md CHANGED
@@ -33,7 +33,8 @@ Generated projects include:
33
33
  - a Lynx and Rspeedy application;
34
34
  - `app.json` as the Jilatax application configuration;
35
35
  - an Android Gradle project linked to `jilatax/android`;
36
- - `bun run run:android` for development on a connected device;
36
+ - `bun run run:android` for development on a connected device; the generated
37
+ APK is located at `android/app/build/outputs/apk/debug/app-debug.apk`;
37
38
  - `bun run create:aab` for a Play Store Android App Bundle.
38
39
 
39
40
  The creator only writes the project and can run `bun install`. Device, Gradle,
package/dist/bin.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  //#region src/bin.ts
3
- require("./cli-DtDXFiYr.cjs").runCreateCli().then((exitCode) => {
3
+ require("./cli-DD2gvmMZ.cjs").runCreateCli().then((exitCode) => {
4
4
  process.exitCode = exitCode;
5
5
  });
6
6
  //#endregion
package/dist/bin.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { n as runCreateCli } from "./cli-CcoP3IQU.js";
2
+ import { n as runCreateCli } from "./cli-DLBJ0XnY.js";
3
3
  //#region src/bin.ts
4
4
  runCreateCli().then((exitCode) => {
5
5
  process.exitCode = exitCode;
@@ -37,11 +37,7 @@ const LYNX_REACT_VERSION = "^0.116.2";
37
37
  const LYNX_TYPES_VERSION = "^3.7.0";
38
38
  const REACT_PLUGIN_VERSION = "^0.12.7";
39
39
  const RSPEEDY_VERSION = "^0.13.3";
40
- const TEXT_TEMPLATE_FILES = /* @__PURE__ */ new Set([
41
- "README.md.tmpl",
42
- "android/settings.gradle.kts.tmpl",
43
- "src/App.tsx.tmpl"
44
- ]);
40
+ const TEXT_TEMPLATE_FILES = /* @__PURE__ */ new Set(["README.md.tmpl", "android/settings.gradle.kts.tmpl"]);
45
41
  async function createProject(options) {
46
42
  const projectDirectory = node_path.default.resolve(options.targetDirectory);
47
43
  const projectName = normalizeProjectName(node_path.default.basename(projectDirectory));
@@ -188,20 +184,20 @@ function createInitialConfig(displayName, projectName, packageId) {
188
184
  android: {
189
185
  adaptiveIcon: {
190
186
  backgroundColor: "#E8FFF2",
191
- foregroundImage: "./assets/icon.png"
187
+ foregroundImage: "./public/assets/icon.png"
192
188
  },
193
189
  package: packageId,
194
190
  predictiveBackGestureEnabled: false,
195
191
  versionCode: 1
196
192
  },
197
- icon: "./assets/icon.png",
193
+ icon: "./public/assets/icon.png",
198
194
  name: displayName,
199
195
  orientation: "portrait",
200
196
  scheme: schemeBase || "jilatax-app",
201
197
  slug,
202
198
  splash: {
203
199
  backgroundColor: "#041A17",
204
- image: "./assets/splash-icon.png",
200
+ image: "./public/assets/splash-icon.png",
205
201
  imageWidth: 96,
206
202
  resizeMode: "contain"
207
203
  },
@@ -13,11 +13,7 @@ const LYNX_REACT_VERSION = "^0.116.2";
13
13
  const LYNX_TYPES_VERSION = "^3.7.0";
14
14
  const REACT_PLUGIN_VERSION = "^0.12.7";
15
15
  const RSPEEDY_VERSION = "^0.13.3";
16
- const TEXT_TEMPLATE_FILES = /* @__PURE__ */ new Set([
17
- "README.md.tmpl",
18
- "android/settings.gradle.kts.tmpl",
19
- "src/App.tsx.tmpl"
20
- ]);
16
+ const TEXT_TEMPLATE_FILES = /* @__PURE__ */ new Set(["README.md.tmpl", "android/settings.gradle.kts.tmpl"]);
21
17
  async function createProject(options) {
22
18
  const projectDirectory = path.resolve(options.targetDirectory);
23
19
  const projectName = normalizeProjectName(path.basename(projectDirectory));
@@ -164,20 +160,20 @@ function createInitialConfig(displayName, projectName, packageId) {
164
160
  android: {
165
161
  adaptiveIcon: {
166
162
  backgroundColor: "#E8FFF2",
167
- foregroundImage: "./assets/icon.png"
163
+ foregroundImage: "./public/assets/icon.png"
168
164
  },
169
165
  package: packageId,
170
166
  predictiveBackGestureEnabled: false,
171
167
  versionCode: 1
172
168
  },
173
- icon: "./assets/icon.png",
169
+ icon: "./public/assets/icon.png",
174
170
  name: displayName,
175
171
  orientation: "portrait",
176
172
  scheme: schemeBase || "jilatax-app",
177
173
  slug,
178
174
  splash: {
179
175
  backgroundColor: "#041A17",
180
- image: "./assets/splash-icon.png",
176
+ image: "./public/assets/splash-icon.png",
181
177
  imageWidth: 96,
182
178
  resizeMode: "contain"
183
179
  },
package/dist/index.cjs CHANGED
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_cli = require("./cli-DtDXFiYr.cjs");
2
+ const require_cli = require("./cli-DD2gvmMZ.cjs");
3
3
  exports.createHelpText = require_cli.createHelpText;
4
4
  exports.createProject = require_cli.createProject;
5
5
  exports.defaultPackageId = require_cli.defaultPackageId;
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import { a as normalizeDisplayName, i as defaultPackageId, n as runCreateCli, o as normalizeProjectName, r as createProject, s as validatePackageId, t as createHelpText } from "./cli-CcoP3IQU.js";
1
+ import { a as normalizeDisplayName, i as defaultPackageId, n as runCreateCli, o as normalizeProjectName, r as createProject, s as validatePackageId, t as createHelpText } from "./cli-DLBJ0XnY.js";
2
2
  export { createHelpText, createProject, defaultPackageId, normalizeDisplayName, normalizeProjectName, runCreateCli, validatePackageId };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-jilatax",
3
- "version": "0.0.8",
3
+ "version": "0.1.0",
4
4
  "packageManager": "bun@1.3.4",
5
5
  "description": "Create an Android-first Jilatax application for Lynx and Rspeedy.",
6
6
  "type": "module",
@@ -2,20 +2,21 @@
2
2
 
3
3
  Android-first Lynx application created with Jilatax.
4
4
 
5
- ## Development
5
+ ## Development (QR)
6
6
 
7
7
  ```bash
8
- bun install
9
- bun run run:android
8
+ bun i
9
+ bun run dev
10
10
  ```
11
11
 
12
12
  The Android command starts Rspeedy, builds and installs the debug APK, verifies
13
- the ADB reverse tunnel, and launches the app once.
13
+ the ADB reverse tunnel, and launches the app once. The generated APK is located
14
+ at `android/app/build/outputs/apk/debug/app-debug.apk`.
14
15
 
15
- To run only the Lynx development server:
16
+ To run only the Lynx development APK (Real Mobile):
16
17
 
17
18
  ```bash
18
- bun run dev
19
+ bun run run:android
19
20
  ```
20
21
 
21
22
  When the build is ready, scan the printed QR code with the Lynx application on
@@ -33,6 +34,8 @@ Play Store release. Never commit signing credentials.
33
34
  Application metadata lives in `app.json`. Android is the only supported native
34
35
  platform in this phase.
35
36
 
36
- Default launcher and splash artwork lives in `assets/`. Update the image paths,
37
- background colors, or splash width in `app.json`; Jilatax synchronizes those
38
- resources before each Android build.
37
+ Default launcher and splash artwork lives in `public/assets/`. Additional local
38
+ fonts can be stored in `public/fonts/`; the included JilataX font is applied to
39
+ the `LYNX TO ANDROID` brand caption. Update the image paths, background colors,
40
+ or splash width in `app.json`; Jilatax synchronizes those resources before each
41
+ Android build.
@@ -0,0 +1,18 @@
1
+ import { useState } from '@lynx-js/react';
2
+
3
+ import { BottomBar } from '../components/navigation/BottomBar.js';
4
+ import { AboutScreen } from '../screens/AboutScreen.js';
5
+ import { HomeScreen } from '../screens/HomeScreen.js';
6
+ import '../styles/global.css';
7
+ import type { AppTab } from './navigation.js';
8
+
9
+ export function App() {
10
+ const [activeTab, setActiveTab] = useState<AppTab>('home');
11
+
12
+ return (
13
+ <view className="app-shell">
14
+ {activeTab === 'home' ? <HomeScreen /> : <AboutScreen />}
15
+ <BottomBar activeTab={activeTab} onSelect={setActiveTab} />
16
+ </view>
17
+ );
18
+ }
@@ -0,0 +1 @@
1
+ export type AppTab = 'home' | 'about';
@@ -0,0 +1,36 @@
1
+ import type { AppTab } from '../../app/navigation.js';
2
+
3
+ interface BottomBarProps {
4
+ activeTab: AppTab;
5
+ onSelect: (tab: AppTab) => void;
6
+ }
7
+
8
+ const tabs: ReadonlyArray<{ id: AppTab; label: string }> = [
9
+ { id: 'home', label: 'Home' },
10
+ { id: 'about', label: 'About' },
11
+ ];
12
+
13
+ export function BottomBar({ activeTab, onSelect }: BottomBarProps) {
14
+ return (
15
+ <view className="bottom-bar-wrap">
16
+ <view className="bottom-bar">
17
+ {tabs.map((tab) => {
18
+ const isActive = activeTab === tab.id;
19
+
20
+ return (
21
+ <view
22
+ className={`bottom-bar__button${isActive ? ' bottom-bar__button--active' : ''}`}
23
+ bindtap={() => onSelect(tab.id)}
24
+ key={tab.id}
25
+ >
26
+ <view className={`bottom-bar__mark${isActive ? ' bottom-bar__mark--active' : ''}`} />
27
+ <text className={`bottom-bar__label${isActive ? ' bottom-bar__label--active' : ''}`}>
28
+ {tab.label}
29
+ </text>
30
+ </view>
31
+ );
32
+ })}
33
+ </view>
34
+ </view>
35
+ );
36
+ }
@@ -0,0 +1,19 @@
1
+ import jilataxIcon from '../../../public/assets/jilatax-icon.png';
2
+
3
+ interface BrandProps {
4
+ compact?: boolean;
5
+ }
6
+
7
+ export function Brand({ compact = false }: BrandProps) {
8
+ return (
9
+ <view className={`brand${compact ? ' brand--compact' : ''}`}>
10
+ <view className="brand__icon-wrap">
11
+ <image className="brand__icon" mode="aspectFit" src={jilataxIcon} />
12
+ </view>
13
+ <view className="brand__copy">
14
+ <text className="brand__name">JILATAX</text>
15
+ <text className="brand__caption">LYNX TO ANDROID</text>
16
+ </view>
17
+ </view>
18
+ );
19
+ }
@@ -1,6 +1,6 @@
1
1
  import { root } from '@lynx-js/react';
2
2
 
3
- import { App } from './App.js';
3
+ import { App } from './app/App.js';
4
4
 
5
5
  root.render(<App />);
6
6
 
@@ -0,0 +1,37 @@
1
+ import { Brand } from '../components/ui/Brand.js';
2
+
3
+ const principles = [
4
+ { number: '01', title: 'Simple by default', detail: 'A small structure that stays easy to evolve.' },
5
+ { number: '02', title: 'Native in the end', detail: 'A direct path from Lynx UI to Android.' },
6
+ { number: '03', title: 'Built with intent', detail: 'Clear hierarchy, spacing, and interaction.' },
7
+ ] as const;
8
+
9
+ export function AboutScreen() {
10
+ return (
11
+ <scroll-view className="screen" scroll-orientation="vertical">
12
+ <view className="screen__content">
13
+ <Brand compact />
14
+
15
+ <view className="about-heading">
16
+ <text className="about-heading__label">THE FOUNDATION</text>
17
+ <text className="about-heading__title">Small core.{`\n`}Native result.</text>
18
+ <text className="about-heading__description">
19
+ JILATAX keeps the route from idea to Android direct and understandable.
20
+ </text>
21
+ </view>
22
+
23
+ <view className="principles">
24
+ {principles.map((principle) => (
25
+ <view className="principle" key={principle.number}>
26
+ <text className="principle__number">{principle.number}</text>
27
+ <view className="principle__copy">
28
+ <text className="principle__title">{principle.title}</text>
29
+ <text className="principle__detail">{principle.detail}</text>
30
+ </view>
31
+ </view>
32
+ ))}
33
+ </view>
34
+ </view>
35
+ </scroll-view>
36
+ );
37
+ }
@@ -0,0 +1,45 @@
1
+ import { Brand } from '../components/ui/Brand.js';
2
+
3
+ export function HomeScreen() {
4
+ return (
5
+ <scroll-view className="screen" scroll-orientation="vertical">
6
+ <view className="screen__content">
7
+ <Brand />
8
+
9
+ <view className="hero">
10
+ <view className="eyebrow">
11
+ <view className="eyebrow__dot" />
12
+ <text className="eyebrow__text">ANDROID READY</text>
13
+ </view>
14
+ <text className="hero__title">Build clean.{`\n`}Ship native.</text>
15
+ <text className="hero__description">
16
+ A focused foundation for fast Lynx experiences on Android.
17
+ </text>
18
+ </view>
19
+
20
+ <view className="workspace-card">
21
+ <view className="workspace-card__glow" />
22
+ <view className="workspace-card__top">
23
+ <text className="workspace-card__label">YOUR WORKSPACE</text>
24
+ <view className="workspace-card__status">
25
+ <view className="workspace-card__status-dot" />
26
+ <text className="workspace-card__status-text">LIVE</text>
27
+ </view>
28
+ </view>
29
+ <text className="workspace-card__title">Ready for what comes next.</text>
30
+ <text className="workspace-card__description">
31
+ One clear interface, powered by Lynx and prepared for Android.
32
+ </text>
33
+ <view className="workspace-card__footer">
34
+ <view className="tech-pill">
35
+ <text className="tech-pill__text">LYNX</text>
36
+ </view>
37
+ <view className="tech-pill tech-pill--accent">
38
+ <text className="tech-pill__text tech-pill__text--accent">JILATAX</text>
39
+ </view>
40
+ </view>
41
+ </view>
42
+ </view>
43
+ </scroll-view>
44
+ );
45
+ }
@@ -0,0 +1,400 @@
1
+ @font-face {
2
+ font-family: JilataX;
3
+ src: url('../../public/fonts/JilataX.otf');
4
+ }
5
+
6
+ :root {
7
+ background-color: #f3f7f5;
8
+ color: #10241d;
9
+ font-family: system-ui, sans-serif;
10
+ }
11
+
12
+ .app-shell {
13
+ background-color: #f3f7f5;
14
+ height: 100vh;
15
+ overflow: hidden;
16
+ position: relative;
17
+ width: 100%;
18
+ }
19
+
20
+ .screen {
21
+ height: 100%;
22
+ width: 100%;
23
+ }
24
+
25
+ .screen__content {
26
+ display: flex;
27
+ flex-direction: column;
28
+ padding: 48px 22px 124px;
29
+ }
30
+
31
+ .brand {
32
+ align-items: center;
33
+ display: flex;
34
+ flex-direction: row;
35
+ }
36
+
37
+ .brand--compact {
38
+ margin-bottom: 38px;
39
+ }
40
+
41
+ .brand__icon-wrap {
42
+ align-items: center;
43
+ background-color: #e3eee9;
44
+ border-radius: 15px;
45
+ display: flex;
46
+ height: 48px;
47
+ justify-content: center;
48
+ overflow: hidden;
49
+ width: 48px;
50
+ }
51
+
52
+ .brand__icon {
53
+ height: 82%;
54
+ width: 82%;
55
+ }
56
+
57
+ .brand__copy {
58
+ display: flex;
59
+ flex-direction: column;
60
+ margin-left: 13px;
61
+ }
62
+
63
+ .brand__name {
64
+ color: #10241d;
65
+ font-size: 18px;
66
+ font-weight: 800;
67
+ letter-spacing: 2px;
68
+ line-height: 22px;
69
+ }
70
+
71
+ .brand__caption {
72
+ color: #688078;
73
+ font-family: JilataX;
74
+ font-size: 9px;
75
+ letter-spacing: 1.5px;
76
+ line-height: 14px;
77
+ margin-top: 2px;
78
+ }
79
+
80
+ .hero {
81
+ display: flex;
82
+ flex-direction: column;
83
+ margin-top: 50px;
84
+ }
85
+
86
+ .eyebrow {
87
+ align-items: center;
88
+ display: flex;
89
+ flex-direction: row;
90
+ }
91
+
92
+ .eyebrow__dot {
93
+ background-color: #0abf78;
94
+ border-radius: 999px;
95
+ height: 7px;
96
+ margin-right: 8px;
97
+ width: 7px;
98
+ }
99
+
100
+ .eyebrow__text,
101
+ .about-heading__label {
102
+ color: #008f5a;
103
+ font-size: 11px;
104
+ font-weight: 800;
105
+ letter-spacing: 1.8px;
106
+ line-height: 16px;
107
+ }
108
+
109
+ .hero__title,
110
+ .about-heading__title {
111
+ color: #10241d;
112
+ font-size: 42px;
113
+ font-weight: 800;
114
+ letter-spacing: -1.5px;
115
+ line-height: 46px;
116
+ margin-top: 14px;
117
+ }
118
+
119
+ .hero__description,
120
+ .about-heading__description {
121
+ color: #5c726a;
122
+ font-size: 16px;
123
+ line-height: 24px;
124
+ margin-top: 16px;
125
+ }
126
+
127
+ .workspace-card {
128
+ background-color: #10241d;
129
+ border-radius: 26px;
130
+ display: flex;
131
+ flex-direction: column;
132
+ margin-top: 38px;
133
+ overflow: hidden;
134
+ padding: 24px;
135
+ position: relative;
136
+ }
137
+
138
+ .workspace-card__glow {
139
+ background: linear-gradient(135deg, #c7ff36, #00b879);
140
+ border-radius: 999px;
141
+ height: 150px;
142
+ opacity: 0.14;
143
+ position: absolute;
144
+ right: -64px;
145
+ top: -76px;
146
+ width: 150px;
147
+ }
148
+
149
+ .workspace-card__top {
150
+ align-items: center;
151
+ display: flex;
152
+ flex-direction: row;
153
+ justify-content: space-between;
154
+ }
155
+
156
+ .workspace-card__label {
157
+ color: #a8bbb4;
158
+ font-size: 10px;
159
+ font-weight: 800;
160
+ letter-spacing: 1.6px;
161
+ }
162
+
163
+ .workspace-card__status {
164
+ align-items: center;
165
+ background-color: #1b382e;
166
+ border-radius: 999px;
167
+ display: flex;
168
+ flex-direction: row;
169
+ padding: 6px 10px;
170
+ }
171
+
172
+ .workspace-card__status-dot {
173
+ background-color: #b7ff33;
174
+ border-radius: 999px;
175
+ height: 6px;
176
+ margin-right: 6px;
177
+ width: 6px;
178
+ }
179
+
180
+ .workspace-card__status-text {
181
+ color: #d9ff9c;
182
+ font-size: 9px;
183
+ font-weight: 800;
184
+ letter-spacing: 1px;
185
+ }
186
+
187
+ .workspace-card__title {
188
+ color: #f5fff9;
189
+ font-size: 24px;
190
+ font-weight: 750;
191
+ line-height: 30px;
192
+ margin-top: 28px;
193
+ max-width: 250px;
194
+ }
195
+
196
+ .workspace-card__description {
197
+ color: #a8bbb4;
198
+ font-size: 14px;
199
+ line-height: 21px;
200
+ margin-top: 10px;
201
+ }
202
+
203
+ .workspace-card__footer {
204
+ display: flex;
205
+ flex-direction: row;
206
+ margin-top: 24px;
207
+ }
208
+
209
+ .tech-pill {
210
+ border-color: #395248;
211
+ border-radius: 999px;
212
+ border-style: solid;
213
+ border-width: 1px;
214
+ padding: 7px 11px;
215
+ }
216
+
217
+ .tech-pill--accent {
218
+ border-color: #377b5f;
219
+ margin-left: 8px;
220
+ }
221
+
222
+ .tech-pill__text {
223
+ color: #9eb1aa;
224
+ font-size: 9px;
225
+ font-weight: 800;
226
+ letter-spacing: 1.1px;
227
+ }
228
+
229
+ .tech-pill__text--accent {
230
+ color: #8ee3b7;
231
+ }
232
+
233
+ .about-heading {
234
+ display: flex;
235
+ flex-direction: column;
236
+ }
237
+
238
+ .principles {
239
+ display: flex;
240
+ flex-direction: column;
241
+ margin-top: 34px;
242
+ }
243
+
244
+ .principle {
245
+ align-items: flex-start;
246
+ background-color: #ffffff;
247
+ border-color: #dfe9e5;
248
+ border-radius: 20px;
249
+ border-style: solid;
250
+ border-width: 1px;
251
+ display: flex;
252
+ flex-direction: row;
253
+ margin-bottom: 12px;
254
+ padding: 18px;
255
+ }
256
+
257
+ .principle__number {
258
+ color: #00a969;
259
+ font-size: 11px;
260
+ font-weight: 800;
261
+ letter-spacing: 1px;
262
+ line-height: 18px;
263
+ width: 36px;
264
+ }
265
+
266
+ .principle__copy {
267
+ display: flex;
268
+ flex: 1;
269
+ flex-direction: column;
270
+ }
271
+
272
+ .principle__title {
273
+ color: #10241d;
274
+ font-size: 15px;
275
+ font-weight: 750;
276
+ line-height: 20px;
277
+ }
278
+
279
+ .principle__detail {
280
+ color: #647970;
281
+ font-size: 13px;
282
+ line-height: 19px;
283
+ margin-top: 4px;
284
+ }
285
+
286
+ .bottom-bar-wrap {
287
+ bottom: 22px;
288
+ left: 0;
289
+ padding: 0 22px;
290
+ position: absolute;
291
+ width: 100%;
292
+ }
293
+
294
+ .bottom-bar {
295
+ background-color: #ffffff;
296
+ border-color: #dfe9e5;
297
+ border-radius: 22px;
298
+ border-style: solid;
299
+ border-width: 1px;
300
+ display: flex;
301
+ flex-direction: row;
302
+ padding: 7px;
303
+ width: 100%;
304
+ }
305
+
306
+ .bottom-bar__button {
307
+ align-items: center;
308
+ border-radius: 16px;
309
+ display: flex;
310
+ flex: 1;
311
+ flex-direction: row;
312
+ height: 54px;
313
+ justify-content: center;
314
+ }
315
+
316
+ .bottom-bar__button--active {
317
+ background-color: #e8f7ef;
318
+ }
319
+
320
+ .bottom-bar__mark {
321
+ border-color: #879990;
322
+ border-radius: 999px;
323
+ border-style: solid;
324
+ border-width: 2px;
325
+ height: 10px;
326
+ margin-right: 8px;
327
+ width: 10px;
328
+ }
329
+
330
+ .bottom-bar__mark--active {
331
+ background-color: #00aa6b;
332
+ border-color: #00aa6b;
333
+ }
334
+
335
+ .bottom-bar__label {
336
+ color: #72847c;
337
+ font-size: 13px;
338
+ font-weight: 650;
339
+ }
340
+
341
+ .bottom-bar__label--active {
342
+ color: #08774f;
343
+ font-weight: 800;
344
+ }
345
+
346
+ @media (prefers-color-scheme: dark) {
347
+ :root,
348
+ .app-shell {
349
+ background-color: #071510;
350
+ color: #f3fff8;
351
+ }
352
+
353
+ .brand__icon-wrap {
354
+ background-color: #102b21;
355
+ }
356
+
357
+ .brand__name,
358
+ .hero__title,
359
+ .about-heading__title,
360
+ .principle__title {
361
+ color: #f3fff8;
362
+ }
363
+
364
+ .brand__caption,
365
+ .hero__description,
366
+ .about-heading__description,
367
+ .principle__detail {
368
+ color: #8ca198;
369
+ }
370
+
371
+ .eyebrow__text,
372
+ .about-heading__label {
373
+ color: #5ce7a6;
374
+ }
375
+
376
+ .workspace-card {
377
+ background-color: #0e251c;
378
+ border-color: #1a392d;
379
+ border-style: solid;
380
+ border-width: 1px;
381
+ }
382
+
383
+ .principle,
384
+ .bottom-bar {
385
+ background-color: #0d2119;
386
+ border-color: #1b382d;
387
+ }
388
+
389
+ .bottom-bar__button--active {
390
+ background-color: #15392b;
391
+ }
392
+
393
+ .bottom-bar__label {
394
+ color: #82978e;
395
+ }
396
+
397
+ .bottom-bar__label--active {
398
+ color: #79efb5;
399
+ }
400
+ }
@@ -1,95 +0,0 @@
1
- :root {
2
- background-color: #0f172a;
3
- color: #f8fafc;
4
- font-family: system-ui, sans-serif;
5
- }
6
-
7
- .page {
8
- align-items: center;
9
- background-color: #0f172a;
10
- display: flex;
11
- height: 100vh;
12
- justify-content: center;
13
- overflow: hidden;
14
- padding: 24px;
15
- position: relative;
16
- width: 100%;
17
- }
18
-
19
- .orb {
20
- border-radius: 999px;
21
- opacity: 0.34;
22
- position: absolute;
23
- }
24
-
25
- .orb--top {
26
- background-color: #38bdf8;
27
- height: 240px;
28
- right: -100px;
29
- top: -110px;
30
- width: 240px;
31
- }
32
-
33
- .orb--bottom {
34
- background-color: #8b5cf6;
35
- bottom: -130px;
36
- height: 280px;
37
- left: -120px;
38
- width: 280px;
39
- }
40
-
41
- .card {
42
- background-color: #1e293b;
43
- border-color: #334155;
44
- border-radius: 24px;
45
- border-style: solid;
46
- border-width: 1px;
47
- display: flex;
48
- flex-direction: column;
49
- padding: 30px 26px;
50
- position: relative;
51
- width: 100%;
52
- }
53
-
54
- .label {
55
- color: #38bdf8;
56
- font-size: 13px;
57
- font-weight: 700;
58
- letter-spacing: 2px;
59
- }
60
-
61
- .title {
62
- color: #f8fafc;
63
- font-size: 32px;
64
- font-weight: 800;
65
- line-height: 40px;
66
- margin-top: 14px;
67
- }
68
-
69
- .description {
70
- color: #cbd5e1;
71
- font-size: 16px;
72
- line-height: 24px;
73
- margin-top: 14px;
74
- }
75
-
76
- .status {
77
- align-items: center;
78
- display: flex;
79
- flex-direction: row;
80
- margin-top: 24px;
81
- }
82
-
83
- .status__dot {
84
- background-color: #22c55e;
85
- border-radius: 999px;
86
- height: 10px;
87
- margin-right: 10px;
88
- width: 10px;
89
- }
90
-
91
- .status__text {
92
- color: #e2e8f0;
93
- font-size: 14px;
94
- font-weight: 600;
95
- }
@@ -1,23 +0,0 @@
1
- import './App.css';
2
-
3
- const applicationName = {{displayNameJson}};
4
-
5
- export function App() {
6
- return (
7
- <view className="page">
8
- <view className="orb orb--top" />
9
- <view className="orb orb--bottom" />
10
- <view className="card">
11
- <text className="label">JILATAX · ANDROID</text>
12
- <text className="title">{applicationName}</text>
13
- <text className="description">
14
- Your Lynx app is ready. Edit src/App.tsx and save to see changes.
15
- </text>
16
- <view className="status">
17
- <view className="status__dot" />
18
- <text className="status__text">Rspeedy development ready</text>
19
- </view>
20
- </view>
21
- </view>
22
- );
23
- }
File without changes