anentrypoint-design 0.0.414 → 0.0.415
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/247420.js +62 -12
- package/dist/app-shell.css +40 -594
- package/dist/colors_and_type.css +607 -47
- package/dist/index.html +227 -277
- package/dist/preview/buttons.html +39 -28
- package/dist/preview/colors-core.html +18 -8
- package/dist/preview/colors-lore.html +26 -17
- package/dist/preview/colors-semantic.html +24 -18
- package/dist/preview/dateline.html +6 -5
- package/dist/preview/dropzone.html +4 -3
- package/dist/preview/file-grid.html +10 -9
- package/dist/preview/file-row.html +14 -13
- package/dist/preview/file-toolbar.html +4 -3
- package/dist/preview/file-viewer.html +4 -3
- package/dist/preview/header.html +26 -24
- package/dist/preview/icons-unicode.html +8 -5
- package/dist/preview/index-row.html +17 -9
- package/dist/preview/inputs.html +4 -3
- package/dist/preview/manifesto.html +34 -17
- package/dist/preview/motion-default.js +77 -57
- package/dist/preview/rules.html +4 -3
- package/dist/preview/spacing.html +13 -12
- package/dist/preview/stamps-lore.html +5 -4
- package/dist/preview/stamps.html +4 -3
- package/dist/preview/theme-ink.html +7 -6
- package/dist/preview/type-display.html +14 -5
- package/dist/preview/type-mono.html +6 -5
- package/dist/preview/type-prose.html +12 -10
- package/dist/preview/type-scale.html +4 -3
- package/dist/preview/wordmarks.html +10 -7
- package/dist/site/content/globals/site.yaml +5 -3
- package/dist/site/content/pages/freddie.yaml +2 -2
- package/dist/site/content/pages/home.yaml +55 -55
- package/dist/site/theme.mjs +96 -348
- package/dist/slides/index.html +13 -13
- package/dist/src/bootstrap.js +10 -1
- package/dist/src/components/chat.js +43 -195
- package/dist/src/components/community.js +18 -166
- package/dist/src/components/content.js +30 -210
- package/dist/src/components/files-modals.js +14 -106
- package/dist/src/components/files.js +15 -116
- package/dist/src/components/freddie/helpers.js +53 -8
- package/dist/src/components/freddie.js +35 -25
- package/dist/src/components/shell.js +16 -114
- package/dist/src/components/theme-toggle.js +69 -25
- package/dist/src/components.js +92 -13
- package/dist/src/deck-stage.js +6 -4
- package/dist/src/highlight.js +51 -7
- package/dist/src/index.js +58 -12
- package/dist/src/kits/os/about-app.js +2 -3
- package/dist/src/kits/os/app-panes.css +46 -70
- package/dist/src/kits/os/browser-app.js +28 -1
- package/dist/src/kits/os/files-app.js +7 -0
- package/dist/src/kits/os/freddie/pages-chat.js +90 -75
- package/dist/src/kits/os/freddie/pages-core.js +9 -9
- package/dist/src/kits/os/freddie/pages-os.js +8 -8
- package/dist/src/kits/os/freddie/pages-tools.js +14 -14
- package/dist/src/kits/os/freddie/routes.js +21 -19
- package/dist/src/kits/os/freddie-dashboard.css +42 -21
- package/dist/src/kits/os/freddie-dashboard.js +6 -6
- package/dist/src/kits/os/icons.js +38 -16
- package/dist/src/kits/os/index.js +11 -0
- package/dist/src/kits/os/launcher.css +26 -10
- package/dist/src/kits/os/launcher.js +3 -0
- package/dist/src/kits/os/shell.js +72 -108
- package/dist/src/kits/os/terminal-app.js +1 -1
- package/dist/src/kits/os/theme.css +1330 -150
- package/dist/src/kits/os/wm.css +68 -15
- package/dist/src/kits/os/wm.js +93 -17
- package/dist/src/markdown.js +121 -12
- package/dist/src/motion.js +18 -2
- package/dist/src/page-html.js +62 -134
- package/dist/src/theme.js +106 -13
- package/dist/src/web-components/ds-chat.js +80 -9
- package/dist/ui_kits/aicat/app.js +54 -6
- package/dist/ui_kits/aicat/index.html +2 -0
- package/dist/ui_kits/blog/index.html +33 -17
- package/dist/ui_kits/chat/app.js +90 -22
- package/dist/ui_kits/chat/index.html +2 -0
- package/dist/ui_kits/community/app.js +86 -24
- package/dist/ui_kits/community/index.html +1 -0
- package/dist/ui_kits/dashboard/app.js +123 -34
- package/dist/ui_kits/dashboard/index.html +1 -0
- package/dist/ui_kits/docs/index.html +43 -33
- package/dist/ui_kits/error_404/app.js +78 -23
- package/dist/ui_kits/file_browser/README.md +1 -1
- package/dist/ui_kits/file_browser/app.js +45 -10
- package/dist/ui_kits/file_browser/index.html +1 -0
- package/dist/ui_kits/gallery/app.js +130 -51
- package/dist/ui_kits/homepage/app.js +156 -138
- package/dist/ui_kits/project_page/app.js +142 -125
- package/dist/ui_kits/project_page/index.html +2 -1
- package/dist/ui_kits/search/app.js +52 -15
- package/dist/ui_kits/settings/app.js +166 -39
- package/dist/ui_kits/signin/app.js +175 -49
- package/dist/ui_kits/signin/index.html +1 -0
- package/dist/ui_kits/slide_deck/app.js +83 -49
- package/dist/ui_kits/system_primer/app.js +57 -40
- package/dist/ui_kits/terminal/app.js +160 -43
- package/package.json +1 -1
- package/src/page-html/client-script.js +40 -11
- package/src/page-html/page-styles.js +22 -1
package/dist/site/theme.mjs
CHANGED
|
@@ -1,368 +1,116 @@
|
|
|
1
|
-
// AnEntrypoint design-system theme for flatspace
|
|
2
|
-
//
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
const clientScript = `
|
|
19
|
-
import { h, applyDiff, installStyles, components as C, initTheme } from 'anentrypoint-design';
|
|
20
|
-
installStyles();
|
|
21
|
-
document.documentElement.classList.add('ds-247420');
|
|
22
|
-
// initTheme picks up data-theme on <html>, reapplies stored override from
|
|
23
|
-
// localStorage if present, and binds matchMedia so OS-level dark-mode flips
|
|
24
|
-
// re-emit to listeners. Safe no-op if data-theme is already 'auto'.
|
|
25
|
-
try { initTheme && initTheme(); } catch {}
|
|
26
|
-
|
|
27
|
-
const __reveal = () => document.documentElement.classList.add('ds-ready');
|
|
28
|
-
const __fallback = setTimeout(__reveal, 1500);
|
|
29
|
-
|
|
30
|
-
const data = JSON.parse(document.getElementById('__site__').textContent);
|
|
31
|
-
const { site, nav, home } = data;
|
|
32
|
-
|
|
33
|
-
function Hero() {
|
|
34
|
-
if (!home || !home.hero) return null;
|
|
35
|
-
const hero = home.hero;
|
|
36
|
-
return C.Panel({
|
|
37
|
-
style: 'margin:8px',
|
|
38
|
-
children: h('div', { style: 'padding:24px 22px' },
|
|
39
|
-
C.Heading({ level: 1, style: 'margin:0 0 8px 0', children: hero.heading || site.title }),
|
|
40
|
-
hero.subheading ? C.Lede({ children: hero.subheading }) : null,
|
|
41
|
-
hero.body ? h('p', { style: 'margin:8px 0 16px 0;color:var(--panel-text-2);max-width:64ch' }, hero.body) : null,
|
|
42
|
-
(hero.badges && hero.badges.length) ? h('div', { style: 'display:flex;gap:6px;flex-wrap:wrap;margin:0 0 12px 0' },
|
|
43
|
-
...hero.badges.map((b, i) => C.Chip({ key: 'b' + i, children: b.label }))
|
|
44
|
-
) : null,
|
|
45
|
-
(hero.ctas && hero.ctas.length) ? h('div', { style: 'display:flex;gap:8px;flex-wrap:wrap' },
|
|
46
|
-
...hero.ctas.map((c, i) => C.Btn({ key: 'c' + i, href: c.href, primary: c.primary, children: c.label }))
|
|
47
|
-
) : null
|
|
48
|
-
)
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
function rowsFromItems(items, prefix) {
|
|
53
|
-
return items.map((it, i) => C.RowLink({
|
|
54
|
-
key: prefix + i,
|
|
55
|
-
code: it.code || String(i + 1).padStart(2, '0'),
|
|
1
|
+
// AnEntrypoint design-system theme for flatspace — thin delegate over this
|
|
2
|
+
// repo's OWN renderPageHtml (../src/page-html.js). The SDK owns all 247420
|
|
3
|
+
// page scaffolding (hero, sections, panels, sidebar, marquee, quickstart,
|
|
4
|
+
// SEO meta); this file only maps site/content YAML -> renderPageHtml's data
|
|
5
|
+
// shape. Same repo, so this imports the source module directly (no npm
|
|
6
|
+
// package-boundary round-trip needed).
|
|
7
|
+
|
|
8
|
+
import { renderPageHtml } from '../src/page-html.js';
|
|
9
|
+
|
|
10
|
+
// A row `code` is a type tag (md, css, fb, os, wc, api), never a position.
|
|
11
|
+
// Bare ordinals carry no information the row order does not already show, so
|
|
12
|
+
// a numeric code is dropped rather than rendered as decoration.
|
|
13
|
+
const isOrdinal = (c) => /^\d+$/.test(String(c).trim());
|
|
14
|
+
|
|
15
|
+
function rows(items) {
|
|
16
|
+
return (items || []).map((it) => ({
|
|
17
|
+
code: it.code && !isOrdinal(it.code) ? it.code : '',
|
|
56
18
|
title: it.title || it.name,
|
|
57
19
|
sub: it.sub || it.desc || '',
|
|
58
|
-
meta: it.cta || it.meta || 'open
|
|
59
|
-
href: it.href || '#'
|
|
20
|
+
meta: it.cta || it.meta || 'open ->',
|
|
21
|
+
href: it.href || '#',
|
|
60
22
|
}));
|
|
61
23
|
}
|
|
62
24
|
|
|
63
|
-
function
|
|
64
|
-
if (!
|
|
65
|
-
return
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
function Decks() {
|
|
74
|
-
if (!home.decks || !home.decks.items || !home.decks.items.length) return null;
|
|
75
|
-
return C.Panel({
|
|
76
|
-
title: home.decks.heading || 'decks',
|
|
77
|
-
style: 'margin:8px',
|
|
78
|
-
children: rowsFromItems(home.decks.items, 'd')
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
function FileBrowser() {
|
|
83
|
-
if (!home.file_browser || !home.file_browser.items || !home.file_browser.items.length) return null;
|
|
84
|
-
return C.Panel({
|
|
85
|
-
title: home.file_browser.heading || 'file browser',
|
|
86
|
-
count: home.file_browser.count || home.file_browser.items.length,
|
|
87
|
-
style: 'margin:8px',
|
|
88
|
-
children: rowsFromItems(home.file_browser.items, 'fb')
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
function Docs() {
|
|
93
|
-
if (!home.docs || !home.docs.items || !home.docs.items.length) return null;
|
|
94
|
-
return C.Panel({
|
|
95
|
-
title: home.docs.heading || 'docs',
|
|
96
|
-
style: 'margin:8px',
|
|
97
|
-
children: rowsFromItems(home.docs.items, 'doc')
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
function Previews() {
|
|
102
|
-
if (!home.previews || !home.previews.items || !home.previews.items.length) return null;
|
|
103
|
-
const base = home.previews.base || './preview/';
|
|
104
|
-
const rows = home.previews.items.map((name, i) => C.RowLink({
|
|
105
|
-
key: 'p' + i,
|
|
106
|
-
code: String(i + 1).padStart(2, '0'),
|
|
107
|
-
title: String(name).replace(/-/g, ' '),
|
|
108
|
-
sub: 'preview · ' + name + '.html',
|
|
109
|
-
meta: 'open ↗',
|
|
110
|
-
href: base + name + '.html'
|
|
111
|
-
}));
|
|
112
|
-
return C.Panel({
|
|
113
|
-
title: home.previews.heading || 'previews',
|
|
114
|
-
count: rows.length,
|
|
115
|
-
style: 'margin:8px',
|
|
116
|
-
children: rows
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
function Features() {
|
|
121
|
-
if (!home.features || !home.features.items || !home.features.items.length) return null;
|
|
122
|
-
const rows = home.features.items.map((it, i) => C.RowLink({
|
|
123
|
-
key: 'f' + i,
|
|
124
|
-
code: String(i + 1).padStart(2, '0'),
|
|
125
|
-
title: it.name,
|
|
126
|
-
sub: it.desc || '',
|
|
127
|
-
meta: it.meta || '',
|
|
128
|
-
href: it.href || '#'
|
|
129
|
-
}));
|
|
130
|
-
return C.Panel({
|
|
131
|
-
title: home.features.heading || 'why design',
|
|
132
|
-
style: 'margin:8px',
|
|
133
|
-
children: rows
|
|
134
|
-
});
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
function Quickstart() {
|
|
138
|
-
if (!home.quickstart || !home.quickstart.lines || !home.quickstart.lines.length) return null;
|
|
139
|
-
const lineNodes = home.quickstart.lines.map((l, i) => h('div', { key: 'q' + i, class: 'cli' },
|
|
140
|
-
h('span', { class: 'prompt' }, l.kind === 'cmt' ? '#' : '$'),
|
|
141
|
-
h('span', { class: 'cmd' }, l.text)
|
|
142
|
-
));
|
|
143
|
-
return C.Panel({
|
|
144
|
-
title: home.quickstart.heading || 'quick start',
|
|
145
|
-
style: 'margin:8px',
|
|
146
|
-
children: h('div', { style: 'padding:16px 22px;display:flex;flex-direction:column;gap:6px' }, ...lineNodes)
|
|
147
|
-
});
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
function DesktopOS() {
|
|
151
|
-
if (!home.desktop_os || !home.desktop_os.items || !home.desktop_os.items.length) return null;
|
|
152
|
-
return C.Panel({
|
|
153
|
-
title: home.desktop_os.heading || 'desktop os shell',
|
|
154
|
-
count: home.desktop_os.count || home.desktop_os.items.length,
|
|
155
|
-
style: 'margin:8px',
|
|
156
|
-
children: rowsFromItems(home.desktop_os.items, 'os')
|
|
157
|
-
});
|
|
25
|
+
function panel(section, id, itemsKey = 'items') {
|
|
26
|
+
if (!section || !section[itemsKey] || !section[itemsKey].length) return null;
|
|
27
|
+
return {
|
|
28
|
+
id: section.id || id,
|
|
29
|
+
title: section.heading,
|
|
30
|
+
count: section.count || section[itemsKey].length,
|
|
31
|
+
items: rows(section[itemsKey]),
|
|
32
|
+
};
|
|
158
33
|
}
|
|
159
34
|
|
|
160
|
-
function
|
|
161
|
-
if (!home.web_components || !home.web_components.items || !home.web_components.items.length) return null;
|
|
162
|
-
return C.Panel({
|
|
163
|
-
title: home.web_components.heading || 'web components',
|
|
164
|
-
count: home.web_components.count || home.web_components.items.length,
|
|
165
|
-
style: 'margin:8px',
|
|
166
|
-
children: rowsFromItems(home.web_components.items, 'wc')
|
|
167
|
-
});
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
function ApiExports() {
|
|
171
|
-
if (!home.api_exports || !home.api_exports.items || !home.api_exports.items.length) return null;
|
|
172
|
-
return C.Panel({
|
|
173
|
-
title: home.api_exports.heading || 'public api',
|
|
174
|
-
count: home.api_exports.count || home.api_exports.items.length,
|
|
175
|
-
style: 'margin:8px',
|
|
176
|
-
children: rowsFromItems(home.api_exports.items, 'api')
|
|
177
|
-
});
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
function Examples() {
|
|
181
|
-
if (!home.examples || !home.examples.items || !home.examples.items.length) return null;
|
|
182
|
-
return C.Panel({
|
|
183
|
-
title: home.examples.heading || 'live examples',
|
|
184
|
-
count: home.examples.items.length,
|
|
185
|
-
style: 'margin:8px',
|
|
186
|
-
children: rowsFromItems(home.examples.items, 'e')
|
|
187
|
-
});
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
function buildSide() {
|
|
35
|
+
function buildSidebar(home) {
|
|
191
36
|
const sb = home.sidebar || {};
|
|
192
37
|
const sections = [];
|
|
193
|
-
if (sb.fab) {
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
}
|
|
199
|
-
if (sb.bins && sb.bins.length) {
|
|
200
|
-
sections.push({ group: 'bins', items: sb.bins });
|
|
201
|
-
}
|
|
202
|
-
if (sb.labels && sb.labels.length) {
|
|
203
|
-
sections.push({ group: sb.labels_group || 'labels', items: sb.labels });
|
|
204
|
-
}
|
|
205
|
-
if (sb.more && sb.more.length) {
|
|
206
|
-
sections.push({ group: sb.more_group || 'more', items: sb.more });
|
|
207
|
-
}
|
|
208
|
-
return C.Side({ sections });
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
function Tabs() {
|
|
212
|
-
if (!home.tabs || !home.tabs.length) return null;
|
|
213
|
-
return h('div', { class: 'tabs', role: 'tablist', style: 'margin:8px' },
|
|
214
|
-
...home.tabs.map((t, i) => h('a', {
|
|
215
|
-
key: 't' + i,
|
|
216
|
-
href: t.href || '#',
|
|
217
|
-
class: t.active ? 'active' : '',
|
|
218
|
-
role: 'tab'
|
|
219
|
-
},
|
|
220
|
-
t.glyph ? h('span', { class: 'glyph' }, t.glyph) : null,
|
|
221
|
-
h('span', {}, t.label)
|
|
222
|
-
))
|
|
223
|
-
);
|
|
38
|
+
if (sb.fab) sections.push({ group: 'open', items: [{ glyph: sb.fab.glyph || '+', label: sb.fab.label || 'open', href: sb.fab.href || '#' }] });
|
|
39
|
+
if (sb.bins && sb.bins.length) sections.push({ group: 'bins', items: sb.bins });
|
|
40
|
+
if (sb.labels && sb.labels.length) sections.push({ group: sb.labels_group || 'labels', items: sb.labels });
|
|
41
|
+
if (sb.more && sb.more.length) sections.push({ group: sb.more_group || 'more', items: sb.more });
|
|
42
|
+
return sections.length ? { sections } : null;
|
|
224
43
|
}
|
|
225
44
|
|
|
226
|
-
const navItems = (nav && nav.links ? nav.links : []).map(l => [String(l.label || ''), l.href]);
|
|
227
|
-
|
|
228
|
-
const statusLeft = home.status_left || ['main', '• utf-8', '• lf'];
|
|
229
|
-
const statusRight = home.status_right || ['247420 / mmxxvi', '• probably emerging'];
|
|
230
|
-
|
|
231
|
-
const App = C.AppShell({
|
|
232
|
-
topbar: C.Topbar({
|
|
233
|
-
brand: '247420',
|
|
234
|
-
leaf: site.title || 'design',
|
|
235
|
-
items: navItems
|
|
236
|
-
}),
|
|
237
|
-
crumb: C.Crumb({ trail: ['247420'], leaf: site.title || 'design' }),
|
|
238
|
-
side: buildSide(),
|
|
239
|
-
main: h('div', {},
|
|
240
|
-
Hero(),
|
|
241
|
-
Tabs(),
|
|
242
|
-
Kits(),
|
|
243
|
-
FileBrowser(),
|
|
244
|
-
DesktopOS(),
|
|
245
|
-
WebComponents(),
|
|
246
|
-
ApiExports(),
|
|
247
|
-
Decks(),
|
|
248
|
-
Docs(),
|
|
249
|
-
Previews(),
|
|
250
|
-
Features(),
|
|
251
|
-
Quickstart(),
|
|
252
|
-
Examples()
|
|
253
|
-
),
|
|
254
|
-
status: C.Status({ left: statusLeft, right: statusRight })
|
|
255
|
-
});
|
|
256
|
-
|
|
257
|
-
applyDiff(document.getElementById('app'), [App]);
|
|
258
|
-
|
|
259
|
-
const __fontsReady = (document.fonts && document.fonts.ready) ? document.fonts.ready : Promise.resolve();
|
|
260
|
-
Promise.race([__fontsReady, new Promise(r => setTimeout(r, 1200))]).then(() => {
|
|
261
|
-
requestAnimationFrame(() => requestAnimationFrame(() => {
|
|
262
|
-
clearTimeout(__fallback);
|
|
263
|
-
__reveal();
|
|
264
|
-
}));
|
|
265
|
-
});
|
|
266
|
-
`;
|
|
267
|
-
|
|
268
|
-
const html = ({ site, nav, home }) => {
|
|
269
|
-
const title = `${escapeHtml(site.title)}${site.tagline ? ' — ' + escapeHtml(site.tagline) : ''}`;
|
|
270
|
-
const desc = escapeHtml(site.description || site.tagline || site.title);
|
|
271
|
-
const url = escapeHtml(site.url || '');
|
|
272
|
-
const image = escapeHtml(site.image || (site.url ? site.url.replace(/\/$/, '') + '/og-card.png' : ''));
|
|
273
|
-
const siteName = escapeHtml(site.siteName || site.title);
|
|
274
|
-
const author = escapeHtml(site.author || '247420 / AnEntrypoint');
|
|
275
|
-
const twitter = escapeHtml(site.twitter || '@AnEntrypoint');
|
|
276
|
-
const keywords = escapeHtml((site.keywords && site.keywords.join(', ')) || '247420, anentrypoint, design system');
|
|
277
|
-
const locale = escapeHtml(site.locale || 'en_US');
|
|
278
|
-
const lang = escapeHtml(site.lang || 'en');
|
|
279
|
-
const ldJson = JSON.stringify({
|
|
280
|
-
'@context': 'https://schema.org',
|
|
281
|
-
'@type': 'WebSite',
|
|
282
|
-
name: site.title || '',
|
|
283
|
-
alternateName: site.siteName || undefined,
|
|
284
|
-
url: site.url || '',
|
|
285
|
-
description: site.description || site.tagline || '',
|
|
286
|
-
inLanguage: site.lang || 'en',
|
|
287
|
-
publisher: {
|
|
288
|
-
'@type': 'Organization',
|
|
289
|
-
name: site.author || '247420 / AnEntrypoint',
|
|
290
|
-
url: 'https://247420.xyz'
|
|
291
|
-
}
|
|
292
|
-
}).replace(/</g, '\\u003c');
|
|
293
|
-
return `<!DOCTYPE html>
|
|
294
|
-
<html lang="${lang}" class="ds-247420" data-theme="auto">
|
|
295
|
-
<head>
|
|
296
|
-
<meta charset="UTF-8" />
|
|
297
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
298
|
-
<title>${title}</title>
|
|
299
|
-
<meta name="description" content="${desc}" />
|
|
300
|
-
<meta name="keywords" content="${keywords}" />
|
|
301
|
-
<meta name="author" content="${author}" />
|
|
302
|
-
<meta name="robots" content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1" />
|
|
303
|
-
<meta name="referrer" content="strict-origin-when-cross-origin" />
|
|
304
|
-
<meta name="generator" content="anentrypoint-design" />
|
|
305
|
-
<meta name="theme-color" content="#247420" media="(prefers-color-scheme: light)" />
|
|
306
|
-
<meta name="theme-color" content="#3A9A34" media="(prefers-color-scheme: dark)" />
|
|
307
|
-
<meta name="color-scheme" content="light dark" />
|
|
308
|
-
<meta name="application-name" content="${siteName}" />
|
|
309
|
-
<meta name="apple-mobile-web-app-title" content="${siteName}" />
|
|
310
|
-
<meta name="apple-mobile-web-app-capable" content="yes" />
|
|
311
|
-
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
|
|
312
|
-
<meta name="mobile-web-app-capable" content="yes" />
|
|
313
|
-
<meta name="msapplication-TileColor" content="#247420" />
|
|
314
|
-
<meta http-equiv="content-language" content="${lang}" />
|
|
315
|
-
<link rel="canonical" href="${url}" />
|
|
316
|
-
<link rel="alternate" hreflang="${lang}" href="${url}" />
|
|
317
|
-
<link rel="alternate" hreflang="x-default" href="${url}" />
|
|
318
|
-
<meta property="og:type" content="website" />
|
|
319
|
-
<meta property="og:title" content="${escapeHtml(site.title)}" />
|
|
320
|
-
<meta property="og:description" content="${escapeHtml(site.description || site.tagline || '')}" />
|
|
321
|
-
<meta property="og:url" content="${url}" />
|
|
322
|
-
<meta property="og:site_name" content="${siteName}" />
|
|
323
|
-
<meta property="og:locale" content="${locale}" />
|
|
324
|
-
${image ? `<meta property="og:image" content="${image}" />
|
|
325
|
-
<meta property="og:image:secure_url" content="${image}" />
|
|
326
|
-
<meta property="og:image:type" content="image/png" />
|
|
327
|
-
<meta property="og:image:width" content="1200" />
|
|
328
|
-
<meta property="og:image:height" content="630" />
|
|
329
|
-
<meta property="og:image:alt" content="${escapeHtml(site.title)}" />` : ''}
|
|
330
|
-
<meta name="twitter:card" content="summary_large_image" />
|
|
331
|
-
<meta name="twitter:title" content="${escapeHtml(site.title)}" />
|
|
332
|
-
<meta name="twitter:description" content="${escapeHtml(site.description || site.tagline || '')}" />
|
|
333
|
-
<meta name="twitter:site" content="${twitter}" />
|
|
334
|
-
<meta name="twitter:creator" content="${twitter}" />
|
|
335
|
-
${image ? `<meta name="twitter:image" content="${image}" />
|
|
336
|
-
<meta name="twitter:image:alt" content="${escapeHtml(site.title)}" />` : ''}
|
|
337
|
-
<link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctext y='26' font-size='26'%3E${encodeURIComponent(site.glyph || '◆')}%3C/text%3E%3C/svg%3E" />
|
|
338
|
-
<link rel="apple-touch-icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctext y='26' font-size='26'%3E${encodeURIComponent(site.glyph || '◆')}%3C/text%3E%3C/svg%3E" />
|
|
339
|
-
<script type="application/ld+json">${ldJson}</script>
|
|
340
|
-
<script type="importmap">{"imports":{"anentrypoint-design":"${SDK_URL}"}}</script>
|
|
341
|
-
<link rel="stylesheet" href="https://unpkg.com/anentrypoint-design@latest/dist/247420.css">
|
|
342
|
-
<link rel="preconnect" href="https://unpkg.com" crossorigin>
|
|
343
|
-
<link rel="dns-prefetch" href="https://unpkg.com">
|
|
344
|
-
<style>html,body{margin:0;padding:0}body{background:var(--app-bg,#FBF6EB);color:var(--ink,#1F1B16);font-family:var(--ff-ui,'Nunito',system-ui,sans-serif)}html:not(.ds-ready) body{visibility:hidden}html.ds-ready body{visibility:visible;animation:ds-fade-in .18s ease-out both}@keyframes ds-fade-in{from{opacity:0}to{opacity:1}}</style>
|
|
345
|
-
<noscript><style>html body{visibility:visible !important}</style></noscript>
|
|
346
|
-
</head>
|
|
347
|
-
<body>
|
|
348
|
-
<div id="app"></div>
|
|
349
|
-
<script type="application/json" id="__site__">${escapeJson({ site, nav, home })}</script>
|
|
350
|
-
<script type="module">${clientScript}</script>
|
|
351
|
-
</body>
|
|
352
|
-
</html>
|
|
353
|
-
`;
|
|
354
|
-
};
|
|
355
|
-
|
|
356
45
|
export default {
|
|
357
46
|
render: async (ctx) => {
|
|
358
47
|
const site = ctx.readGlobal('site') || {};
|
|
359
48
|
const nav = ctx.readGlobal('navigation') || { links: [] };
|
|
360
49
|
const homeDoc = ctx.read('pages').docs.find(p => p.id === 'home');
|
|
361
50
|
if (!homeDoc) throw new Error('site/content/pages/home.yaml missing or has no id: home');
|
|
51
|
+
const home = homeDoc;
|
|
52
|
+
const hero = home.hero || null;
|
|
53
|
+
|
|
54
|
+
const panels = [
|
|
55
|
+
panel(home.kits, 'kits'),
|
|
56
|
+
panel(home.file_browser, 'file_browser'),
|
|
57
|
+
panel(home.desktop_os, 'desktop_os'),
|
|
58
|
+
panel(home.web_components, 'web_components'),
|
|
59
|
+
panel(home.api_exports, 'api_exports'),
|
|
60
|
+
panel(home.decks, 'decks'),
|
|
61
|
+
panel(home.docs, 'docs'),
|
|
62
|
+
panel(home.features, 'features'),
|
|
63
|
+
].filter(Boolean);
|
|
64
|
+
|
|
65
|
+
if (home.previews && home.previews.items && home.previews.items.length) {
|
|
66
|
+
const base = home.previews.base || './preview/';
|
|
67
|
+
panels.push({
|
|
68
|
+
id: 'previews',
|
|
69
|
+
title: home.previews.heading || 'previews',
|
|
70
|
+
count: home.previews.items.length,
|
|
71
|
+
items: home.previews.items.map((name) => ({
|
|
72
|
+
code: '',
|
|
73
|
+
title: String(name).replace(/-/g, ' '),
|
|
74
|
+
sub: 'preview · ' + name + '.html',
|
|
75
|
+
meta: 'open ->',
|
|
76
|
+
href: base + name + '.html',
|
|
77
|
+
})),
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
const html = renderPageHtml({
|
|
82
|
+
title: site.title || home.title || '247420',
|
|
83
|
+
slug: 'index',
|
|
84
|
+
siteName: site.siteName || site.title || '247420',
|
|
85
|
+
navItems: (nav.links || []).map(l => [String(l.label || ''), l.href]),
|
|
86
|
+
hero: hero ? {
|
|
87
|
+
heading: hero.heading, subheading: hero.subheading || site.tagline,
|
|
88
|
+
body: hero.body, badges: hero.badges,
|
|
89
|
+
ctas: hero.ctas,
|
|
90
|
+
} : null,
|
|
91
|
+
panels,
|
|
92
|
+
examples: home.examples && home.examples.items ? home.examples.items.map((e) => ({
|
|
93
|
+
label: e.name || e.title, desc: e.desc, href: e.href,
|
|
94
|
+
})) : null,
|
|
95
|
+
marquee: { items: ['open source', 'design tokens', 'buildless components', 'zero raw color literals'], sep: '/' },
|
|
96
|
+
quickstart: home.quickstart && home.quickstart.lines ? { heading: home.quickstart.heading, lines: home.quickstart.lines } : null,
|
|
97
|
+
sidebar: buildSidebar(home),
|
|
98
|
+
statusLeft: home.status_left || ['main', '- utf-8', '- lf'],
|
|
99
|
+
statusRight: home.status_right || ['247420 · mmxxvi', '- probably emerging'],
|
|
100
|
+
seo: {
|
|
101
|
+
description: site.description || site.tagline || site.title,
|
|
102
|
+
keywords: site.keywords || ['247420', 'anentrypoint', 'design system'],
|
|
103
|
+
author: site.author || '247420 / AnEntrypoint',
|
|
104
|
+
twitter: site.twitter || '@AnEntrypoint',
|
|
105
|
+
locale: site.locale || 'en_US',
|
|
106
|
+
lang: site.lang || 'en',
|
|
107
|
+
image: site.image || (site.url ? site.url.replace(/\/$/, '') + '/og-card.png' : ''),
|
|
108
|
+
url: site.url || '',
|
|
109
|
+
},
|
|
110
|
+
faviconGlyph: site.glyph || (site.title ? site.title.trim().charAt(0).toUpperCase() : '2'),
|
|
111
|
+
headExtra: `<style>html,body{margin:0;padding:0}body{background:var(--bg,#F6F5F1);color:var(--fg,#131318);font-family:var(--ff-body,system-ui,sans-serif)}</style>`,
|
|
112
|
+
});
|
|
362
113
|
|
|
363
|
-
return [{
|
|
364
|
-
path: 'index.html',
|
|
365
|
-
html: html({ site, nav, home: homeDoc })
|
|
366
|
-
}];
|
|
114
|
+
return [{ path: 'index.html', html }];
|
|
367
115
|
}
|
|
368
116
|
};
|
package/dist/slides/index.html
CHANGED
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<link rel="stylesheet" href="../colors_and_type.css">
|
|
31
31
|
<link rel="stylesheet" href="../app-shell.css">
|
|
32
32
|
<style>
|
|
33
|
-
/* Slides consume panel tokens
|
|
33
|
+
/* Slides consume panel tokens -> auto light/dark */
|
|
34
34
|
body { background: var(--panel-0); margin: 0; }
|
|
35
35
|
deck-stage { display: block; }
|
|
36
36
|
section {
|
|
@@ -93,7 +93,7 @@
|
|
|
93
93
|
color: var(--panel-accent);
|
|
94
94
|
}
|
|
95
95
|
.s-sub {
|
|
96
|
-
font-family:
|
|
96
|
+
font-family: var(--ff-body);
|
|
97
97
|
font-size: 34px;
|
|
98
98
|
line-height: 1.4;
|
|
99
99
|
margin-top: 32px;
|
|
@@ -154,7 +154,7 @@
|
|
|
154
154
|
}
|
|
155
155
|
.cmp .cmp-after .cmp-h { color: var(--panel-accent-fg); }
|
|
156
156
|
.cmp .cmp-p {
|
|
157
|
-
font-family:
|
|
157
|
+
font-family: var(--ff-body);
|
|
158
158
|
font-size: 28px;
|
|
159
159
|
line-height: 1.45;
|
|
160
160
|
color: var(--panel-text-3);
|
|
@@ -190,15 +190,15 @@
|
|
|
190
190
|
color: var(--panel-text);
|
|
191
191
|
}
|
|
192
192
|
</style>
|
|
193
|
-
<script type="module" src="deck-stage.js"></script>
|
|
193
|
+
<script type="module" src="../src/kits/slides/deck-stage.js"></script>
|
|
194
194
|
</head>
|
|
195
195
|
<body>
|
|
196
196
|
<deck-stage width="1920" height="1080">
|
|
197
197
|
|
|
198
198
|
<section class="s-elev" data-label="Title">
|
|
199
|
-
<div class="s-dateline"><span>247420
|
|
199
|
+
<div class="s-dateline"><span>247420 · an entrypoint</span><span class="spread"></span><span>apr 20 · 2026 · live</span></div>
|
|
200
200
|
<div>
|
|
201
|
-
<div class="s-label" style="margin-bottom:24px"
|
|
201
|
+
<div class="s-label" style="margin-bottom:24px">internal · do not circulate</div>
|
|
202
202
|
<div class="s-hero">we fart in its<br/>general direction.</div>
|
|
203
203
|
<div class="s-sub">a short presentation about what comes next, delivered at 4:20 sharp.</div>
|
|
204
204
|
</div>
|
|
@@ -206,7 +206,7 @@
|
|
|
206
206
|
</section>
|
|
207
207
|
|
|
208
208
|
<section data-label="Section Intro">
|
|
209
|
-
<div class="s-dateline"><span>247420</span><span
|
|
209
|
+
<div class="s-dateline"><span>247420</span><span>01</span><span class="spread"></span><span>of 05</span></div>
|
|
210
210
|
<div>
|
|
211
211
|
<div class="s-label" style="margin-bottom:32px">chapter one</div>
|
|
212
212
|
<div class="s-h1">the problem<br/>with everything.</div>
|
|
@@ -215,7 +215,7 @@
|
|
|
215
215
|
</section>
|
|
216
216
|
|
|
217
217
|
<section class="s-canvas" data-label="Big Quote">
|
|
218
|
-
<div class="s-dateline"><span>247420</span><span
|
|
218
|
+
<div class="s-dateline"><span>247420</span><span>quote</span><span class="spread"></span><span>overheard · 2am</span></div>
|
|
219
219
|
<div style="display:flex;align-items:center;height:100%">
|
|
220
220
|
<div>
|
|
221
221
|
<div style="font-family:var(--ff-display);font-size:240px;line-height:0.8;margin-bottom:-40px;color:var(--panel-accent)">“</div>
|
|
@@ -227,9 +227,9 @@
|
|
|
227
227
|
</section>
|
|
228
228
|
|
|
229
229
|
<section class="s-elev" data-label="Receipt">
|
|
230
|
-
<div class="s-dateline"><span>247420</span><span
|
|
230
|
+
<div class="s-dateline"><span>247420</span><span>receipt · gm v0.4.1</span><span class="spread"></span><span>live</span></div>
|
|
231
231
|
<div>
|
|
232
|
-
<div class="s-label" style="margin-bottom:32px"
|
|
232
|
+
<div class="s-label" style="margin-bottom:32px">by the numbers</div>
|
|
233
233
|
<div class="receipt">
|
|
234
234
|
<div class="receipt-row"><span>stars</span><span>3,124</span></div>
|
|
235
235
|
<div class="receipt-row"><span>weekly downloads</span><span>47k</span></div>
|
|
@@ -243,7 +243,7 @@
|
|
|
243
243
|
</section>
|
|
244
244
|
|
|
245
245
|
<section data-label="Comparison">
|
|
246
|
-
<div class="s-dateline"><span>247420</span><span
|
|
246
|
+
<div class="s-dateline"><span>247420</span><span>a vs b</span><span class="spread"></span><span>it's not close</span></div>
|
|
247
247
|
<div>
|
|
248
248
|
<div class="cmp">
|
|
249
249
|
<div class="cmp-before">
|
|
@@ -262,11 +262,11 @@
|
|
|
262
262
|
</section>
|
|
263
263
|
|
|
264
264
|
<section class="s-accent" data-label="End">
|
|
265
|
-
<div class="s-dateline"><span>247420
|
|
265
|
+
<div class="s-dateline"><span>247420 · an entrypoint</span><span class="spread"></span><span>end · q&a</span></div>
|
|
266
266
|
<div style="display:flex;align-items:center;height:100%">
|
|
267
267
|
<div>
|
|
268
268
|
<div class="s-hero" style="font-size:280px;color:var(--panel-accent-fg)">gm.</div>
|
|
269
|
-
<div style="font-family:var(--ff-mono);font-size:32px;margin-top:32px;color:var(--panel-accent-fg);opacity:0.85"
|
|
269
|
+
<div style="font-family:var(--ff-mono);font-size:32px;margin-top:32px;color:var(--panel-accent-fg);opacity:0.85">questions? open a pr.</div>
|
|
270
270
|
</div>
|
|
271
271
|
</div>
|
|
272
272
|
<div class="s-footer"><span>fin</span><span>247420 / mmxxvi</span></div>
|
package/dist/src/bootstrap.js
CHANGED
|
@@ -5,9 +5,18 @@ import * as webjsx from '../vendor/webjsx/index.js';
|
|
|
5
5
|
import * as motion from './motion.js';
|
|
6
6
|
import { register } from './debug.js';
|
|
7
7
|
|
|
8
|
+
// Tracks nodes already mounted via mountKit() so a second mountKit() call
|
|
9
|
+
// onto the same root fails loud instead of silently layering a second
|
|
10
|
+
// applyDiff/motion loop on one DOM node.
|
|
11
|
+
const _mountedKitRoots = new WeakSet();
|
|
12
|
+
|
|
8
13
|
export function mountKit({ root, view, screen, animateOnMount = true } = {}) {
|
|
9
|
-
if (!root) throw new Error('mountKit: root required');
|
|
14
|
+
if (!root) throw new Error('mountKit: root required (received ' + (root === null ? 'null' : typeof root) + ')');
|
|
10
15
|
if (typeof view !== 'function') throw new Error('mountKit: view fn required');
|
|
16
|
+
if (_mountedKitRoots.has(root)) {
|
|
17
|
+
throw new Error('mountKit: this root is already mounted — call the returned render()/schedule() to re-render, do not mountKit() the same root twice');
|
|
18
|
+
}
|
|
19
|
+
_mountedKitRoots.add(root);
|
|
11
20
|
if (screen && typeof document !== 'undefined') document.body.dataset.screenLabel = screen;
|
|
12
21
|
motion.installMotion();
|
|
13
22
|
let scheduled = false;
|