create-jilatax 0.0.7 → 0.0.9
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/dist/bin.cjs +1 -1
- package/dist/bin.js +1 -1
- package/dist/{cli-D56yqirN.cjs → cli-6qr3BMqu.cjs} +3 -7
- package/dist/{cli-yS2KRczW.js → cli-CrpTfN81.js} +3 -7
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/template/assets/jilatax-icon.png +0 -0
- package/template/assets/splash-icon.png +0 -0
- package/template/src/app/App.tsx +18 -0
- package/template/src/app/navigation.ts +1 -0
- package/template/src/components/navigation/BottomBar.tsx +36 -0
- package/template/src/components/ui/Brand.tsx +19 -0
- package/template/src/index.tsx +1 -1
- package/template/src/screens/AboutScreen.tsx +37 -0
- package/template/src/screens/HomeScreen.tsx +45 -0
- package/template/src/styles/global.css +401 -0
- package/template/src/App.css +0 -95
- package/template/src/App.tsx.tmpl +0 -23
package/dist/bin.cjs
CHANGED
package/dist/bin.js
CHANGED
|
@@ -30,18 +30,14 @@ node_path = __toESM(node_path, 1);
|
|
|
30
30
|
let node_url = require("node:url");
|
|
31
31
|
let jilatax = require("jilatax");
|
|
32
32
|
//#region src/generator.ts
|
|
33
|
-
const JILATAX_CLI_VERSION = "^0.0.
|
|
33
|
+
const JILATAX_CLI_VERSION = "^0.0.9";
|
|
34
34
|
const JILATAX_VERSION = "^0.0.6";
|
|
35
35
|
const LYNX_QRCODE_PLUGIN_VERSION = "^0.4.4";
|
|
36
36
|
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,7 +184,7 @@ function createInitialConfig(displayName, projectName, packageId) {
|
|
|
188
184
|
android: {
|
|
189
185
|
adaptiveIcon: {
|
|
190
186
|
backgroundColor: "#E8FFF2",
|
|
191
|
-
foregroundImage: "./assets/
|
|
187
|
+
foregroundImage: "./assets/icon.png"
|
|
192
188
|
},
|
|
193
189
|
package: packageId,
|
|
194
190
|
predictiveBackGestureEnabled: false,
|
|
@@ -6,18 +6,14 @@ import path from "node:path";
|
|
|
6
6
|
import { fileURLToPath } from "node:url";
|
|
7
7
|
import { parseAppConfig, syncAndroidProjectConfig } from "jilatax";
|
|
8
8
|
//#region src/generator.ts
|
|
9
|
-
const JILATAX_CLI_VERSION = "^0.0.
|
|
9
|
+
const JILATAX_CLI_VERSION = "^0.0.9";
|
|
10
10
|
const JILATAX_VERSION = "^0.0.6";
|
|
11
11
|
const LYNX_QRCODE_PLUGIN_VERSION = "^0.4.4";
|
|
12
12
|
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,7 +160,7 @@ function createInitialConfig(displayName, projectName, packageId) {
|
|
|
164
160
|
android: {
|
|
165
161
|
adaptiveIcon: {
|
|
166
162
|
backgroundColor: "#E8FFF2",
|
|
167
|
-
foregroundImage: "./assets/
|
|
163
|
+
foregroundImage: "./assets/icon.png"
|
|
168
164
|
},
|
|
169
165
|
package: packageId,
|
|
170
166
|
predictiveBackGestureEnabled: false,
|
package/dist/index.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_cli = require("./cli-
|
|
2
|
+
const require_cli = require("./cli-6qr3BMqu.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-
|
|
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-CrpTfN81.js";
|
|
2
2
|
export { createHelpText, createProject, defaultPackageId, normalizeDisplayName, normalizeProjectName, runCreateCli, validatePackageId };
|
package/package.json
CHANGED
|
Binary file
|
|
Binary file
|
|
@@ -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 '../../../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${compact ? ' brand__icon-wrap--compact' : ''}`}>
|
|
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
|
+
}
|
package/template/src/index.tsx
CHANGED
|
@@ -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,401 @@
|
|
|
1
|
+
:root {
|
|
2
|
+
background-color: #f3f7f5;
|
|
3
|
+
color: #10241d;
|
|
4
|
+
font-family: system-ui, sans-serif;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
.app-shell {
|
|
8
|
+
background-color: #f3f7f5;
|
|
9
|
+
height: 100vh;
|
|
10
|
+
overflow: hidden;
|
|
11
|
+
position: relative;
|
|
12
|
+
width: 100%;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.screen {
|
|
16
|
+
height: 100%;
|
|
17
|
+
width: 100%;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.screen__content {
|
|
21
|
+
display: flex;
|
|
22
|
+
flex-direction: column;
|
|
23
|
+
padding: 48px 22px 124px;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.brand {
|
|
27
|
+
align-items: center;
|
|
28
|
+
display: flex;
|
|
29
|
+
flex-direction: row;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.brand--compact {
|
|
33
|
+
margin-bottom: 38px;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.brand__icon-wrap {
|
|
37
|
+
align-items: center;
|
|
38
|
+
background-color: #e3eee9;
|
|
39
|
+
border-radius: 18px;
|
|
40
|
+
display: flex;
|
|
41
|
+
height: 58px;
|
|
42
|
+
justify-content: center;
|
|
43
|
+
overflow: hidden;
|
|
44
|
+
width: 58px;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.brand__icon-wrap--compact {
|
|
48
|
+
border-radius: 15px;
|
|
49
|
+
height: 48px;
|
|
50
|
+
width: 48px;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.brand__icon {
|
|
54
|
+
height: 82%;
|
|
55
|
+
width: 82%;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.brand__copy {
|
|
59
|
+
display: flex;
|
|
60
|
+
flex-direction: column;
|
|
61
|
+
margin-left: 13px;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.brand__name {
|
|
65
|
+
color: #10241d;
|
|
66
|
+
font-size: 18px;
|
|
67
|
+
font-weight: 800;
|
|
68
|
+
letter-spacing: 2px;
|
|
69
|
+
line-height: 22px;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.brand__caption {
|
|
73
|
+
color: #688078;
|
|
74
|
+
font-size: 9px;
|
|
75
|
+
font-weight: 700;
|
|
76
|
+
letter-spacing: 1.5px;
|
|
77
|
+
line-height: 14px;
|
|
78
|
+
margin-top: 2px;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.hero {
|
|
82
|
+
display: flex;
|
|
83
|
+
flex-direction: column;
|
|
84
|
+
margin-top: 50px;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.eyebrow {
|
|
88
|
+
align-items: center;
|
|
89
|
+
display: flex;
|
|
90
|
+
flex-direction: row;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.eyebrow__dot {
|
|
94
|
+
background-color: #0abf78;
|
|
95
|
+
border-radius: 999px;
|
|
96
|
+
height: 7px;
|
|
97
|
+
margin-right: 8px;
|
|
98
|
+
width: 7px;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
.eyebrow__text,
|
|
102
|
+
.about-heading__label {
|
|
103
|
+
color: #008f5a;
|
|
104
|
+
font-size: 11px;
|
|
105
|
+
font-weight: 800;
|
|
106
|
+
letter-spacing: 1.8px;
|
|
107
|
+
line-height: 16px;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
.hero__title,
|
|
111
|
+
.about-heading__title {
|
|
112
|
+
color: #10241d;
|
|
113
|
+
font-size: 42px;
|
|
114
|
+
font-weight: 800;
|
|
115
|
+
letter-spacing: -1.5px;
|
|
116
|
+
line-height: 46px;
|
|
117
|
+
margin-top: 14px;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.hero__description,
|
|
121
|
+
.about-heading__description {
|
|
122
|
+
color: #5c726a;
|
|
123
|
+
font-size: 16px;
|
|
124
|
+
line-height: 24px;
|
|
125
|
+
margin-top: 16px;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
.workspace-card {
|
|
129
|
+
background-color: #10241d;
|
|
130
|
+
border-radius: 26px;
|
|
131
|
+
display: flex;
|
|
132
|
+
flex-direction: column;
|
|
133
|
+
margin-top: 38px;
|
|
134
|
+
overflow: hidden;
|
|
135
|
+
padding: 24px;
|
|
136
|
+
position: relative;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
.workspace-card__glow {
|
|
140
|
+
background: linear-gradient(135deg, #c7ff36, #00b879);
|
|
141
|
+
border-radius: 999px;
|
|
142
|
+
height: 150px;
|
|
143
|
+
opacity: 0.14;
|
|
144
|
+
position: absolute;
|
|
145
|
+
right: -64px;
|
|
146
|
+
top: -76px;
|
|
147
|
+
width: 150px;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
.workspace-card__top {
|
|
151
|
+
align-items: center;
|
|
152
|
+
display: flex;
|
|
153
|
+
flex-direction: row;
|
|
154
|
+
justify-content: space-between;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
.workspace-card__label {
|
|
158
|
+
color: #a8bbb4;
|
|
159
|
+
font-size: 10px;
|
|
160
|
+
font-weight: 800;
|
|
161
|
+
letter-spacing: 1.6px;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
.workspace-card__status {
|
|
165
|
+
align-items: center;
|
|
166
|
+
background-color: #1b382e;
|
|
167
|
+
border-radius: 999px;
|
|
168
|
+
display: flex;
|
|
169
|
+
flex-direction: row;
|
|
170
|
+
padding: 6px 10px;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
.workspace-card__status-dot {
|
|
174
|
+
background-color: #b7ff33;
|
|
175
|
+
border-radius: 999px;
|
|
176
|
+
height: 6px;
|
|
177
|
+
margin-right: 6px;
|
|
178
|
+
width: 6px;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
.workspace-card__status-text {
|
|
182
|
+
color: #d9ff9c;
|
|
183
|
+
font-size: 9px;
|
|
184
|
+
font-weight: 800;
|
|
185
|
+
letter-spacing: 1px;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
.workspace-card__title {
|
|
189
|
+
color: #f5fff9;
|
|
190
|
+
font-size: 24px;
|
|
191
|
+
font-weight: 750;
|
|
192
|
+
line-height: 30px;
|
|
193
|
+
margin-top: 28px;
|
|
194
|
+
max-width: 250px;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
.workspace-card__description {
|
|
198
|
+
color: #a8bbb4;
|
|
199
|
+
font-size: 14px;
|
|
200
|
+
line-height: 21px;
|
|
201
|
+
margin-top: 10px;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
.workspace-card__footer {
|
|
205
|
+
display: flex;
|
|
206
|
+
flex-direction: row;
|
|
207
|
+
margin-top: 24px;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
.tech-pill {
|
|
211
|
+
border-color: #395248;
|
|
212
|
+
border-radius: 999px;
|
|
213
|
+
border-style: solid;
|
|
214
|
+
border-width: 1px;
|
|
215
|
+
padding: 7px 11px;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
.tech-pill--accent {
|
|
219
|
+
border-color: #377b5f;
|
|
220
|
+
margin-left: 8px;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
.tech-pill__text {
|
|
224
|
+
color: #9eb1aa;
|
|
225
|
+
font-size: 9px;
|
|
226
|
+
font-weight: 800;
|
|
227
|
+
letter-spacing: 1.1px;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
.tech-pill__text--accent {
|
|
231
|
+
color: #8ee3b7;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
.about-heading {
|
|
235
|
+
display: flex;
|
|
236
|
+
flex-direction: column;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
.principles {
|
|
240
|
+
display: flex;
|
|
241
|
+
flex-direction: column;
|
|
242
|
+
margin-top: 34px;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
.principle {
|
|
246
|
+
align-items: flex-start;
|
|
247
|
+
background-color: #ffffff;
|
|
248
|
+
border-color: #dfe9e5;
|
|
249
|
+
border-radius: 20px;
|
|
250
|
+
border-style: solid;
|
|
251
|
+
border-width: 1px;
|
|
252
|
+
display: flex;
|
|
253
|
+
flex-direction: row;
|
|
254
|
+
margin-bottom: 12px;
|
|
255
|
+
padding: 18px;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
.principle__number {
|
|
259
|
+
color: #00a969;
|
|
260
|
+
font-size: 11px;
|
|
261
|
+
font-weight: 800;
|
|
262
|
+
letter-spacing: 1px;
|
|
263
|
+
line-height: 18px;
|
|
264
|
+
width: 36px;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
.principle__copy {
|
|
268
|
+
display: flex;
|
|
269
|
+
flex: 1;
|
|
270
|
+
flex-direction: column;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
.principle__title {
|
|
274
|
+
color: #10241d;
|
|
275
|
+
font-size: 15px;
|
|
276
|
+
font-weight: 750;
|
|
277
|
+
line-height: 20px;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
.principle__detail {
|
|
281
|
+
color: #647970;
|
|
282
|
+
font-size: 13px;
|
|
283
|
+
line-height: 19px;
|
|
284
|
+
margin-top: 4px;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
.bottom-bar-wrap {
|
|
288
|
+
bottom: 22px;
|
|
289
|
+
left: 0;
|
|
290
|
+
padding: 0 22px;
|
|
291
|
+
position: absolute;
|
|
292
|
+
width: 100%;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
.bottom-bar {
|
|
296
|
+
background-color: #ffffff;
|
|
297
|
+
border-color: #dfe9e5;
|
|
298
|
+
border-radius: 22px;
|
|
299
|
+
border-style: solid;
|
|
300
|
+
border-width: 1px;
|
|
301
|
+
display: flex;
|
|
302
|
+
flex-direction: row;
|
|
303
|
+
padding: 7px;
|
|
304
|
+
width: 100%;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
.bottom-bar__button {
|
|
308
|
+
align-items: center;
|
|
309
|
+
border-radius: 16px;
|
|
310
|
+
display: flex;
|
|
311
|
+
flex: 1;
|
|
312
|
+
flex-direction: row;
|
|
313
|
+
height: 54px;
|
|
314
|
+
justify-content: center;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
.bottom-bar__button--active {
|
|
318
|
+
background-color: #e8f7ef;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
.bottom-bar__mark {
|
|
322
|
+
border-color: #879990;
|
|
323
|
+
border-radius: 999px;
|
|
324
|
+
border-style: solid;
|
|
325
|
+
border-width: 2px;
|
|
326
|
+
height: 10px;
|
|
327
|
+
margin-right: 8px;
|
|
328
|
+
width: 10px;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
.bottom-bar__mark--active {
|
|
332
|
+
background-color: #00aa6b;
|
|
333
|
+
border-color: #00aa6b;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
.bottom-bar__label {
|
|
337
|
+
color: #72847c;
|
|
338
|
+
font-size: 13px;
|
|
339
|
+
font-weight: 650;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
.bottom-bar__label--active {
|
|
343
|
+
color: #08774f;
|
|
344
|
+
font-weight: 800;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
@media (prefers-color-scheme: dark) {
|
|
348
|
+
:root,
|
|
349
|
+
.app-shell {
|
|
350
|
+
background-color: #071510;
|
|
351
|
+
color: #f3fff8;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
.brand__icon-wrap {
|
|
355
|
+
background-color: #102b21;
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
.brand__name,
|
|
359
|
+
.hero__title,
|
|
360
|
+
.about-heading__title,
|
|
361
|
+
.principle__title {
|
|
362
|
+
color: #f3fff8;
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
.brand__caption,
|
|
366
|
+
.hero__description,
|
|
367
|
+
.about-heading__description,
|
|
368
|
+
.principle__detail {
|
|
369
|
+
color: #8ca198;
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
.eyebrow__text,
|
|
373
|
+
.about-heading__label {
|
|
374
|
+
color: #5ce7a6;
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
.workspace-card {
|
|
378
|
+
background-color: #0e251c;
|
|
379
|
+
border-color: #1a392d;
|
|
380
|
+
border-style: solid;
|
|
381
|
+
border-width: 1px;
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
.principle,
|
|
385
|
+
.bottom-bar {
|
|
386
|
+
background-color: #0d2119;
|
|
387
|
+
border-color: #1b382d;
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
.bottom-bar__button--active {
|
|
391
|
+
background-color: #15392b;
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
.bottom-bar__label {
|
|
395
|
+
color: #82978e;
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
.bottom-bar__label--active {
|
|
399
|
+
color: #79efb5;
|
|
400
|
+
}
|
|
401
|
+
}
|
package/template/src/App.css
DELETED
|
@@ -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
|
-
}
|