@mdwrk/lander-theme 0.1.4

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 ADDED
@@ -0,0 +1,34 @@
1
+ # @mdwrk/lander-theme
2
+
3
+ **Portable lander styles and tokens**
4
+
5
+ <p align="center">
6
+ <a href="https://github.com/groupsum/markdown_workspace/blob/master/packages/lander/lander-theme/README.md"><img alt="Hits" src="https://visitor-badge.laobi.icu/badge?page_id=groupsum.markdown_workspace.packages_lander_lander_theme_README&amp;left_text=hits" /></a>
7
+ <a href="https://www.npmjs.com/package/@mdwrk/lander-theme"><img alt="Downloads" src="https://img.shields.io/npm/dm/%40mdwrk%2Flander-theme?label=downloads" /></a>
8
+ <a href="../../../package.json"><img alt="Node" src="https://img.shields.io/badge/node-20.x%20%7C%2021.x%20%7C%2022.x-339933?logo=node.js&amp;logoColor=white" /></a>
9
+ <a href="../../../LICENSE"><img alt="License: Apache-2.0" src="https://img.shields.io/badge/license-Apache--2.0-blue.svg" /></a>
10
+ </p>
11
+
12
+ This package provides the default theme layer for generic lander components.
13
+
14
+ ## Why
15
+ Use it when you want a baseline visual system for lander components before product-specific styling is layered on top.
16
+
17
+ ## What
18
+ - Portable default styles for lander components.
19
+ - A shared theme baseline for first-party and downstream lander surfaces.
20
+ - A styling layer that stays separate from content, compile, and React logic.
21
+
22
+ ## Installation
23
+ Node.js 20.x through 22.x, matching the workspace engine contract in the root package manifest.
24
+
25
+ ```bash
26
+ npm install @mdwrk/lander-theme
27
+ ```
28
+
29
+ ## Usage
30
+ Import the package styles into your lander app or component library entrypoint.
31
+
32
+ ## Related
33
+ - [Packages index](../../README.md) - family and package navigation
34
+ - [Root README](../../../README.md) - repo overview
@@ -0,0 +1,14 @@
1
+ export * from "./version.js";
2
+ export interface LanderThemeTokens {
3
+ background: string;
4
+ foreground: string;
5
+ muted: string;
6
+ accent: string;
7
+ panel: string;
8
+ border: string;
9
+ radius: string;
10
+ maxWidth: string;
11
+ }
12
+ export declare const defaultLightLanderTokens: LanderThemeTokens;
13
+ export declare const defaultDarkLanderTokens: LanderThemeTokens;
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAE7B,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,wBAAwB,EAAE,iBAStC,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,iBASrC,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,22 @@
1
+ export * from "./version.js";
2
+ export const defaultLightLanderTokens = {
3
+ background: "#ffffff",
4
+ foreground: "#111111",
5
+ muted: "#5f6368",
6
+ accent: "#2454d6",
7
+ panel: "#f6f7f9",
8
+ border: "#d9dde4",
9
+ radius: "8px",
10
+ maxWidth: "1120px",
11
+ };
12
+ export const defaultDarkLanderTokens = {
13
+ background: "#101214",
14
+ foreground: "#f4f6f8",
15
+ muted: "#aeb6c2",
16
+ accent: "#7aa2ff",
17
+ panel: "#191d22",
18
+ border: "#303741",
19
+ radius: "8px",
20
+ maxWidth: "1120px",
21
+ };
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAa7B,MAAM,CAAC,MAAM,wBAAwB,GAAsB;IACzD,UAAU,EAAE,SAAS;IACrB,UAAU,EAAE,SAAS;IACrB,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE,SAAS;IACjB,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,KAAK;IACb,QAAQ,EAAE,QAAQ;CACnB,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAsB;IACxD,UAAU,EAAE,SAAS;IACrB,UAAU,EAAE,SAAS;IACrB,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE,SAAS;IACjB,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,KAAK;IACb,QAAQ,EAAE,QAAQ;CACnB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const LANDER_THEME_VERSION = "0.1.2";
2
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,UAAU,CAAC"}
@@ -0,0 +1,2 @@
1
+ export const LANDER_THEME_VERSION = "0.1.2";
2
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,oBAAoB,GAAG,OAAO,CAAC"}
package/package.json ADDED
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "@mdwrk/lander-theme",
3
+ "version": "0.1.4",
4
+ "type": "module",
5
+ "license": "Apache-2.0",
6
+ "publishConfig": {
7
+ "access": "public"
8
+ },
9
+ "engines": {
10
+ "node": ">=20 <23"
11
+ },
12
+ "files": [
13
+ "dist",
14
+ "src/styles",
15
+ "README.md"
16
+ ],
17
+ "sideEffects": [
18
+ "./src/styles/default.css"
19
+ ],
20
+ "keywords": [
21
+ "lander",
22
+ "theme",
23
+ "tokens"
24
+ ],
25
+ "description": "Portable design tokens and default styles for generic lander components.",
26
+ "scripts": {
27
+ "build": "tsc -p tsconfig.json",
28
+ "typecheck": "tsc --noEmit -p tsconfig.json",
29
+ "lint": "npm run typecheck",
30
+ "test": "npm run typecheck",
31
+ "prepack": "npm run build"
32
+ },
33
+ "exports": {
34
+ ".": {
35
+ "types": "./dist/index.d.ts",
36
+ "import": "./dist/index.js"
37
+ },
38
+ "./version": {
39
+ "types": "./dist/version.d.ts",
40
+ "import": "./dist/version.js"
41
+ },
42
+ "./styles/default.css": "./src/styles/default.css"
43
+ },
44
+ "main": "./dist/index.js",
45
+ "types": "./dist/index.d.ts",
46
+ "author": "Jacob Stewart <jacob@swarmauri.com>",
47
+ "homepage": "https://mdwrk.com"
48
+ }
@@ -0,0 +1,322 @@
1
+ :root,
2
+ :root[data-lander-theme="lander-light"],
3
+ [data-lander-theme="lander-light"] {
4
+ --lander-bg: #ffffff;
5
+ --lander-app-bg: #f8fafc;
6
+ --lander-panel: #ffffff;
7
+ --lander-panel-muted: #eff6ff;
8
+ --lander-surface: var(--lander-panel);
9
+ --lander-nav-bg: #ffffff;
10
+ --lander-fg: #0f172a;
11
+ --lander-fg-muted: #475569;
12
+ --lander-fg-subtle: #475569;
13
+ --lander-heading-fg: #0f172a;
14
+ --lander-border: rgba(15, 23, 42, 0.12);
15
+ --lander-border-strong: rgba(15, 23, 42, 0.2);
16
+ --lander-accent: #4f46e5;
17
+ --lander-accent-strong: #4338ca;
18
+ --lander-accent-alt: #0e7490;
19
+ --lander-accent-soft: rgba(79, 70, 229, 0.12);
20
+ --lander-success: #047857;
21
+ --lander-success-strong: #065f46;
22
+ --lander-selection-fg: #312e81;
23
+ --lander-radius: 0.75rem;
24
+ --lander-max-width: 1280px;
25
+ --lander-shadow: rgba(15, 23, 42, 0.12);
26
+ color-scheme: light;
27
+ }
28
+
29
+ [data-lander-theme="lander-dark"],
30
+ [data-lander-theme="dark"],
31
+ .dark {
32
+ --lander-bg: #020617;
33
+ --lander-app-bg: #020617;
34
+ --lander-panel: #0f172a;
35
+ --lander-panel-muted: #111c32;
36
+ --lander-surface: var(--lander-panel);
37
+ --lander-nav-bg: #020617;
38
+ --lander-fg: #f8fafc;
39
+ --lander-fg-muted: #94a3b8;
40
+ --lander-fg-subtle: #94a3b8;
41
+ --lander-heading-fg: #ffffff;
42
+ --lander-border: rgba(148, 163, 184, 0.18);
43
+ --lander-border-strong: rgba(148, 163, 184, 0.32);
44
+ --lander-accent: #818cf8;
45
+ --lander-accent-strong: #a5b4fc;
46
+ --lander-accent-alt: #22d3ee;
47
+ --lander-accent-soft: rgba(129, 140, 248, 0.14);
48
+ --lander-success: #34d399;
49
+ --lander-success-strong: #6ee7b7;
50
+ --lander-selection-fg: #e0e7ff;
51
+ --lander-shadow: rgba(0, 0, 0, 0.28);
52
+ color-scheme: dark;
53
+ }
54
+
55
+ .lander-page {
56
+ background:
57
+ radial-gradient(circle at top left, var(--lander-accent-soft), transparent 32%),
58
+ linear-gradient(180deg, var(--lander-app-bg) 0%, var(--lander-panel-muted) 100%);
59
+ color: var(--lander-fg);
60
+ }
61
+
62
+ .lander-page__inner,
63
+ .lander-page__section {
64
+ width: min(calc(100% - 2rem), var(--lander-max-width));
65
+ margin: 0 auto;
66
+ }
67
+
68
+ .lander-page__hero {
69
+ padding: 8rem 0 5rem;
70
+ background: var(--lander-app-bg);
71
+ }
72
+
73
+ .lander-page__eyebrow,
74
+ .lander-page__muted {
75
+ color: var(--lander-fg-muted);
76
+ }
77
+
78
+ .lander-page__eyebrow {
79
+ display: inline-flex;
80
+ align-items: center;
81
+ border: 1px solid var(--lander-border);
82
+ border-radius: 9999px;
83
+ background: var(--lander-panel-muted);
84
+ padding: 0.375rem 0.875rem;
85
+ font-size: 0.875rem;
86
+ font-weight: 600;
87
+ }
88
+
89
+ .hero-copy.home-subtitle,
90
+ .home-subtitle {
91
+ display: block;
92
+ max-width: 48rem;
93
+ margin-left: auto;
94
+ margin-right: auto;
95
+ text-align: center;
96
+ }
97
+
98
+ .navbar-inner {
99
+ display: flex;
100
+ flex-wrap: wrap;
101
+ align-items: center;
102
+ justify-content: space-between;
103
+ width: min(calc(100% - 2rem), var(--lander-max-width));
104
+ margin-left: auto;
105
+ margin-right: auto;
106
+ min-height: 4.75rem;
107
+ padding: 1rem;
108
+ }
109
+
110
+ .navbar-brand {
111
+ display: flex;
112
+ align-items: center;
113
+ gap: 0.75rem;
114
+ cursor: pointer;
115
+ }
116
+
117
+ .navbar-actions {
118
+ display: flex;
119
+ align-items: center;
120
+ gap: 0.75rem;
121
+ }
122
+
123
+ .navbar-menu-panel {
124
+ align-items: center;
125
+ justify-content: flex-end;
126
+ width: 100%;
127
+ }
128
+
129
+ .navbar-menu-panel.is-open {
130
+ display: block;
131
+ }
132
+
133
+ .navbar-menu-panel.is-closed {
134
+ display: none;
135
+ }
136
+
137
+ .navbar-menu-list {
138
+ display: flex;
139
+ flex-direction: column;
140
+ gap: 0;
141
+ margin-top: 1rem;
142
+ border: 1px solid var(--lander-border);
143
+ border-radius: 0.5rem;
144
+ padding: 1rem;
145
+ font-weight: 500;
146
+ }
147
+
148
+ .navbar-menu-toggle[aria-expanded="false"] .static-menu-close-icon,
149
+ .navbar-menu-toggle[aria-expanded="true"] .static-menu-open-icon {
150
+ display: none;
151
+ }
152
+
153
+ .navbar-link {
154
+ display: block;
155
+ border-radius: 0.25rem;
156
+ padding: 0.5rem 0.75rem;
157
+ line-height: 1.45;
158
+ transition:
159
+ color 0.15s ease,
160
+ background-color 0.15s ease,
161
+ border-color 0.15s ease;
162
+ }
163
+
164
+ @media (min-width: 768px) {
165
+ .navbar-brand {
166
+ margin-right: auto;
167
+ }
168
+
169
+ .navbar-actions {
170
+ margin-left: 0.75rem;
171
+ }
172
+
173
+ .navbar-menu-panel,
174
+ .navbar-menu-panel.is-open,
175
+ .navbar-menu-panel.is-closed {
176
+ display: flex;
177
+ width: auto;
178
+ margin-left: auto;
179
+ margin-right: 1rem;
180
+ }
181
+
182
+ .navbar-menu-list {
183
+ flex-direction: row;
184
+ justify-content: flex-end;
185
+ gap: 1rem;
186
+ margin-top: 0;
187
+ border: 0;
188
+ padding: 0;
189
+ }
190
+
191
+ .navbar-link {
192
+ padding: 0;
193
+ }
194
+ }
195
+
196
+ @media (min-width: 1024px) {
197
+ .navbar-menu-panel {
198
+ margin-right: 1.5rem;
199
+ }
200
+
201
+ .navbar-menu-list {
202
+ gap: 1.5rem;
203
+ }
204
+ }
205
+
206
+ .lander-page__title,
207
+ .lander-page h1 {
208
+ color: var(--lander-heading-fg);
209
+ font-weight: 900;
210
+ letter-spacing: 0;
211
+ }
212
+
213
+ .lander-page__title {
214
+ margin: 1.25rem 0 0;
215
+ max-width: 14ch;
216
+ font-size: clamp(2.25rem, 7vw, 3.75rem);
217
+ line-height: 1;
218
+ }
219
+
220
+ .lander-page__intro {
221
+ max-width: 48rem;
222
+ margin-top: 1.5rem;
223
+ color: var(--lander-fg-muted);
224
+ font-size: 1.125rem;
225
+ line-height: 1.75;
226
+ }
227
+
228
+ .lander-page__grid {
229
+ display: grid;
230
+ grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr));
231
+ gap: 1.5rem;
232
+ }
233
+
234
+ .lander-page__card,
235
+ .lander-page__panel {
236
+ border: 1px solid var(--lander-border);
237
+ border-radius: 1rem;
238
+ background: color-mix(in srgb, var(--lander-panel) 92%, transparent);
239
+ box-shadow: 0 18px 50px var(--lander-shadow);
240
+ padding: 1.5rem;
241
+ }
242
+
243
+ .lander-page__card h3,
244
+ .lander-page__panel h2,
245
+ .lander-page__section > h2 {
246
+ color: var(--lander-heading-fg);
247
+ }
248
+
249
+ .lander-page__card p,
250
+ .lander-page__panel p {
251
+ color: var(--lander-fg-muted);
252
+ line-height: 1.65;
253
+ }
254
+
255
+ .lander-page__button-row {
256
+ display: flex;
257
+ flex-wrap: wrap;
258
+ gap: 1rem;
259
+ margin-top: 1.875rem;
260
+ }
261
+
262
+ .lander-page__button {
263
+ display: inline-flex;
264
+ align-items: center;
265
+ justify-content: center;
266
+ border: 1px solid var(--lander-border-strong);
267
+ border-radius: 0.5rem;
268
+ min-height: 3rem;
269
+ padding: 0 1.25rem;
270
+ color: var(--lander-fg);
271
+ font-weight: 700;
272
+ text-decoration: none;
273
+ transition: background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease;
274
+ }
275
+
276
+ .lander-page__button:hover {
277
+ background: var(--lander-panel-muted);
278
+ }
279
+
280
+ .lander-page__button--primary {
281
+ border-color: var(--lander-accent);
282
+ background: var(--lander-accent);
283
+ color: #ffffff;
284
+ box-shadow: 0 12px 28px color-mix(in srgb, var(--lander-accent) 28%, transparent);
285
+ }
286
+
287
+ .lander-page__button--primary:hover {
288
+ border-color: var(--lander-accent-strong);
289
+ background: var(--lander-accent-strong);
290
+ }
291
+
292
+ .lander-page__section {
293
+ padding: 4rem 0;
294
+ }
295
+
296
+ .lander-page__section > h2 {
297
+ margin: 0 0 1.5rem;
298
+ font-size: clamp(1.875rem, 5vw, 2.75rem);
299
+ line-height: 1.1;
300
+ }
301
+
302
+ .lander-page__comparison {
303
+ width: 100%;
304
+ border-collapse: collapse;
305
+ overflow: hidden;
306
+ border-radius: 1rem;
307
+ background: color-mix(in srgb, var(--lander-panel) 92%, transparent);
308
+ box-shadow: 0 18px 50px var(--lander-shadow);
309
+ }
310
+
311
+ .lander-page__comparison th,
312
+ .lander-page__comparison td {
313
+ border: 1px solid var(--lander-border);
314
+ padding: 0.875rem 1rem;
315
+ text-align: left;
316
+ vertical-align: top;
317
+ }
318
+
319
+ .lander-page__comparison th {
320
+ background: var(--lander-panel-muted);
321
+ color: var(--lander-heading-fg);
322
+ }