anentrypoint-design 1.0.6 → 1.0.8
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 +141 -36
- package/dist/index.html +116 -11
- package/package.json +1 -1
- package/src/page-html/client-script.js +73 -10
- package/src/page-html/page-styles.js +42 -0
- package/src/page-html.js +2 -0
package/dist/index.html
CHANGED
|
@@ -115,8 +115,50 @@ a.row:hover .ds-row-arrow { opacity: 1 }
|
|
|
115
115
|
.ds-page-footer-links { display: flex; gap: var(--space-4, 24px) }
|
|
116
116
|
.ds-page-footer-links a { color: var(--fg-3) }
|
|
117
117
|
.ds-page-footer-links a:hover { color: var(--fg) }
|
|
118
|
+
/* Live component showcase: a grid of cards, each holding a real mounted
|
|
119
|
+
specimen (not a screenshot) of the actual SDK components. */
|
|
120
|
+
.ds-showcase-grid {
|
|
121
|
+
display: grid; gap: var(--space-3, 16px);
|
|
122
|
+
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
|
|
123
|
+
}
|
|
124
|
+
.ds-showcase-card {
|
|
125
|
+
padding: var(--space-3, 16px); background: var(--panel-1, var(--bg));
|
|
126
|
+
border-radius: var(--r-2, 14px); display: grid; gap: var(--space-2, 8px);
|
|
127
|
+
}
|
|
128
|
+
.ds-showcase-card--wide { grid-column: 1 / -1; }
|
|
129
|
+
.ds-showcase-label {
|
|
130
|
+
font-size: var(--fs-tiny, 13px); font-weight: 600; text-transform: uppercase;
|
|
131
|
+
letter-spacing: 0.06em; color: var(--fg-3, #6b6b6b);
|
|
132
|
+
}
|
|
133
|
+
.ds-showcase-row { display: flex; flex-wrap: wrap; gap: var(--space-2, 8px); align-items: center; }
|
|
134
|
+
/* Card-grid layout (panel.layout === 'cards'): a browsable gallery of tiles
|
|
135
|
+
instead of a dense text-row list, opt-in per panel via home.yaml's
|
|
136
|
+
kits.layout: cards. */
|
|
137
|
+
.ds-kit-card-grid {
|
|
138
|
+
display: grid; gap: var(--space-2, 8px);
|
|
139
|
+
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
|
|
140
|
+
}
|
|
141
|
+
.ds-kit-card {
|
|
142
|
+
display: grid; gap: var(--space-1, 4px); align-content: start;
|
|
143
|
+
padding: var(--space-3, 16px); background: var(--panel-1, var(--bg));
|
|
144
|
+
border-radius: var(--r-2, 14px); color: inherit; text-decoration: none;
|
|
145
|
+
transition: transform var(--dur-base, .18s) var(--ease, ease), box-shadow var(--dur-base, .18s) var(--ease, ease);
|
|
146
|
+
position: relative;
|
|
147
|
+
}
|
|
148
|
+
.ds-kit-card:hover { transform: translateY(-2px); box-shadow: var(--shadow-1, 0 1px 2px rgba(0,0,0,.1)); }
|
|
149
|
+
.ds-kit-card:focus-visible { outline: var(--focus-w, 2px) solid var(--focus-color, currentColor); outline-offset: var(--focus-offset, 2px); }
|
|
150
|
+
.ds-kit-card-code {
|
|
151
|
+
font-family: var(--ff-mono, monospace); font-size: var(--fs-micro, 12px);
|
|
152
|
+
color: var(--fg-3, #6b6b6b);
|
|
153
|
+
}
|
|
154
|
+
.ds-kit-card-title { font-weight: 600; font-size: var(--fs-base, 16px); }
|
|
155
|
+
.ds-kit-card-sub { font-size: var(--fs-sm, 15px); color: var(--fg-2, #444); }
|
|
156
|
+
.ds-kit-card-arrow {
|
|
157
|
+
position: absolute; top: var(--space-3, 16px); right: var(--space-3, 16px);
|
|
158
|
+
color: var(--fg-3, #6b6b6b); font-size: var(--fs-sm, 15px);
|
|
159
|
+
}
|
|
118
160
|
</style>
|
|
119
|
-
<script id="__site__" type="application/json">{"title":"design","slug":"index","siteName":"design","navItems":[["247420","https://247420.xyz"],["AnEntrypoint ->","https://github.com/AnEntrypoint"]],"theme":"auto","hero":{"heading":"Design","subheading":"The 247420 design system","body":"A complete, tokens-driven component system for building consistent, accessible interfaces fast: 15 ready-to-ship kit surfaces, 25 live previews, a slide deck, and a full desktop-shell demo — plus a web component and an SDK. Every panel, row, and form control reads its color, radius, and spacing from one shared token file, so a single theme change updates every surface built on it at once. WCAG AA verified across all 21 kits, zero JavaScript bundler required.","badges":[{"label":"Design system"},{"label":"Design tokens"},{"label":"WCAG AA"}],"ctas":[{"label":"GitHub","href":"https://github.com/AnEntrypoint/design","primary":true},{"label":"247420","href":"https://247420.xyz"}]},"sections":[],"examples":[],"bodyHtml":"","sidebar":{"sections":[{"group":"open","items":[{"glyph":"+","label":"open","href":"./ui_kits/homepage/"}]},{"group":"bins","items":[{"label":"Everything","href":"#all","active":true,"count":48},{"label":"Pinned","href":"#kits","count":15},{"label":"Shipped","href":"#previews","count":25},{"label":"Drafts","href":"#decks","count":1}]},{"group":"Labels","items":[{"label":"UI kits","href":"#kits","count":15},{"label":"Decks","href":"#decks","count":1},{"label":"Previews","href":"#previews","count":25},{"label":"Docs","href":"#docs","count":7}]},{"group":"More","items":[{"label":"Readme","href":"https://github.com/AnEntrypoint/design/blob/main/README.md"},{"label":"Skill","href":"https://github.com/AnEntrypoint/design/blob/main/SKILL.md"},{"label":"Tokens","href":"https://github.com/AnEntrypoint/design/blob/main/colors_and_type.css"},{"label":"Source","href":"https://github.com/AnEntrypoint/design"},{"label":"MIT license","href":"https://github.com/AnEntrypoint/design/blob/main/LICENSE"}]}]},"marquee":{"items":["Open source","Design tokens","WCAG AA verified","No bundler required"],"sep":"/"},"panels":[{"id":"kits","title":"UI kits","count":"15 surfaces","items":[{"code":"","title":"Homepage","sub":"Marquee and works grid","meta":"open ->","href":"./ui_kits/homepage/"},{"code":"","title":"Project page","sub":"Hero, receipt, install, changelog","meta":"open ->","href":"./ui_kits/project_page/"},{"code":"","title":"Docs","sub":"Long-form prose chrome","meta":"open ->","href":"./ui_kits/docs/"},{"code":"","title":"Blog","sub":"Dated index and reading view","meta":"open ->","href":"./ui_kits/blog/"},{"code":"","title":"Chat","sub":"Message thread and composer","meta":"open ->","href":"./ui_kits/chat/"},{"code":"","title":"AICat","sub":"AI assistant with a cat persona","meta":"open ->","href":"./ui_kits/aicat/"},{"code":"","title":"File browser","sub":"Type-aware rails, drop zone, preview","meta":"open ->","href":"./ui_kits/file_browser/"},{"code":"","title":"Dashboard","sub":"KPIs, tables, receipts, changelog","meta":"open ->","href":"./ui_kits/dashboard/"},{"code":"","title":"Terminal","sub":"CLI prompt, command lines, log view","meta":"open ->","href":"./ui_kits/terminal/"},{"code":"","title":"Settings","sub":"Sectioned forms, toggles, save bar","meta":"open ->","href":"./ui_kits/settings/"},{"code":"","title":"Sign in","sub":"Auth providers and magic link","meta":"open ->","href":"./ui_kits/signin/"},{"code":"","title":"Search","sub":"Topbar query, faceted filters, rows","meta":"open ->","href":"./ui_kits/search/"},{"code":"","title":"404","sub":"Empty-state hero, suggested routes","meta":"open ->","href":"./ui_kits/error_404/"},{"code":"","title":"Gallery","sub":"Visual grid, tonal cards, lightbox","meta":"open ->","href":"./ui_kits/gallery/"},{"code":"","title":"OS shell","sub":"Menubar, window manager, taskbar","meta":"open ->","href":"./ui_kits/os/"}]},{"id":"file_browser","title":"File browser","count":"primitives","items":[{"code":"fb","title":"file_browser kit","sub":"Drop, list, preview, dialogs","meta":"open ->","href":"./ui_kits/file_browser/"},{"code":"fb","title":"FileRow","sub":"Rail, icon, name, meta","meta":"open ->","href":"./preview/file-row.html"},{"code":"fb","title":"FileGrid","sub":"A stack of rows in a panel","meta":"open ->","href":"./preview/file-grid.html"},{"code":"fb","title":"DropZone","sub":"Tonal upload target","meta":"open ->","href":"./preview/dropzone.html"},{"code":"fb","title":"FileViewer","sub":"Modal preview, keyed head","meta":"open ->","href":"./preview/file-viewer.html"},{"code":"fb","title":"FileToolbar","sub":"Actions, breadcrumb, upload","meta":"open ->","href":"./preview/file-toolbar.html"},{"code":"fb","title":"fsbrowse","sub":"Express + busboy backend","meta":"source","href":"https://github.com/AnEntrypoint/fsbrowse"}]},{"id":"desktop_os","title":"Desktop OS shell","count":"in-page window manager","items":[{"code":"os","title":"Live demo","sub":"menubar, apps drawer, side rail, taskbar, floating windows","meta":"open ->","href":"./ui_kits/os/"},{"code":"os","title":"createDesktopShell","sub":"menubar, apps launcher, taskbar, window manager","meta":"shell.js","href":"https://github.com/AnEntrypoint/design/blob/main/src/kits/os/shell.js"},{"code":"os","title":"renderWindow / renderDock","sub":"pure paint-surface primitives","meta":"wm.js","href":"https://github.com/AnEntrypoint/design/blob/main/src/kits/os/wm.js"},{"code":"os","title":"Icon set","sub":"SVG glyphs for menubar and taskbar","meta":"icons.js","href":"https://github.com/AnEntrypoint/design/blob/main/src/kits/os/icons.js"},{"code":"os","title":"theme.css","sub":"OS chrome tokens: menubar, launcher, window manager","meta":"theme.css","href":"https://github.com/AnEntrypoint/design/blob/main/src/kits/os/theme.css"},{"code":"os","title":"Import path","sub":"anentrypoint-design/kits/os","meta":"exports","href":"https://github.com/AnEntrypoint/design/blob/main/package.json"}]},{"id":"web_components","title":"Web components","count":"1 element","items":[{"code":"wc","title":"\u003cds-chat>","sub":"Auto-registers when the SDK loads in a browser","meta":"ds-chat.js","href":"https://github.com/AnEntrypoint/design/blob/main/src/web-components/ds-chat.js"},{"code":"wc","title":"registerChatElement","sub":"Manual register helper","meta":"source","href":"https://github.com/AnEntrypoint/design/blob/main/src/index.js"}]},{"id":"api_exports","title":"Public API","count":"SDK surface","items":[{"code":"api","title":"h / applyDiff","sub":"webjsx createElement and diff","meta":"index.js","href":"https://github.com/AnEntrypoint/design/blob/main/src/index.js"},{"code":"api","title":"installStyles / scope","sub":"ds-247420 CSS scope and bootstrap","meta":"styles.js","href":"https://github.com/AnEntrypoint/design/blob/main/src/styles.js"},{"code":"api","title":"loadCss","sub":"Fetch the bundled CSS string","meta":"styles.js","href":"https://github.com/AnEntrypoint/design/blob/main/src/styles.js"},{"code":"api","title":"mount / mountKit","sub":"Shell and ui_kit bootstrap","meta":"bootstrap.js","href":"https://github.com/AnEntrypoint/design/blob/main/src/bootstrap.js"},{"code":"api","title":"registerDeckStage / getDeckStage","sub":"16:9 deck stage API","meta":"deck-stage.js","href":"https://github.com/AnEntrypoint/design/blob/main/src/deck-stage.js"},{"code":"api","title":"renderMarkdown","sub":"marked v15 + DOMPurify, lazy-loaded","meta":"markdown.js","href":"https://github.com/AnEntrypoint/design/blob/main/src/markdown.js"},{"code":"api","title":"ensurePrism / highlightAllUnder","sub":"Prism core plus per-language","meta":"highlight.js","href":"https://github.com/AnEntrypoint/design/blob/main/src/highlight.js"},{"code":"api","title":"renderPageHtml","sub":"Static page HTML template","meta":"page-html.js","href":"https://github.com/AnEntrypoint/design/blob/main/src/page-html.js"},{"code":"api","title":"components / motion / debug","sub":"Namespaces from the default export","meta":"components.js","href":"https://github.com/AnEntrypoint/design/blob/main/src/components.js"}]},{"id":"decks","title":"Decks","count":1,"items":[{"code":"","title":"Deck template","sub":"16:9 stage with auto-fit","meta":"open ->","href":"./slides/"}]},{"id":"docs","title":"Docs","count":7,"items":[{"code":"md","title":"Readme","sub":"Overview, manifesto, conventions","meta":"open ->","href":"https://github.com/AnEntrypoint/design/blob/main/README.md"},{"code":"md","title":"Skill","sub":"Authoring rules for the agent","meta":"open ->","href":"https://github.com/AnEntrypoint/design/blob/main/SKILL.md"},{"code":"css","title":"Tokens","sub":"Colors, type, panel surface tokens","meta":"open ->","href":"https://github.com/AnEntrypoint/design/blob/main/colors_and_type.css"},{"code":"md","title":"Component props","sub":"Generated prop reference","meta":"open ->","href":"https://github.com/AnEntrypoint/design/blob/main/docs/component-props.md"},{"code":"md","title":"Changelog","sub":"Release history","meta":"open ->","href":"https://github.com/AnEntrypoint/design/blob/main/CHANGELOG.md"},{"code":"md","title":"Accessibility","sub":"WCAG AA compliance, keyboard navigation","meta":"open ->","href":"https://github.com/AnEntrypoint/design/blob/main/docs/accessibility.md"},{"code":"md","title":"Responsive breakpoints","sub":"The documented breakpoint scale in use","meta":"open ->","href":"https://github.com/AnEntrypoint/design/blob/main/docs/responsive.md"}]},{"id":"features","title":"Why teams choose 247420","count":5,"items":[{"code":"","title":"Clear visual hierarchy","sub":"Panel-on-panel layering keeps dense dashboards scannable — important content stays legible even in complex, data-heavy screens.","meta":"panel-row.css","href":"https://github.com/AnEntrypoint/design/blob/main/src/css/app-shell/panel-row.css"},{"code":"","title":"Readable at a glance","sub":"A disciplined type system reserves monospace for codes and labels and sans-serif for everything meant to be read, so interfaces stay legible under real workloads.","meta":"colors_and_type.css","href":"https://github.com/AnEntrypoint/design/blob/main/colors_and_type.css"},{"code":"","title":"Instant status recognition","sub":"Color-coded indicator rails let users scan for status and category at a glance, without relying on borders that add visual noise.","meta":"panel-row.css","href":"https://github.com/AnEntrypoint/design/blob/main/src/css/app-shell/panel-row.css#L126"},{"code":"","title":"Rebrand in minutes, not sprints","sub":"Every surface, type scale, and accent color is driven entirely by design tokens — retheme an entire product by editing one file, with zero component code changes.","meta":"colors_and_type.css","href":"https://github.com/AnEntrypoint/design/blob/main/colors_and_type.css"},{"code":"","title":"Accessible by default","sub":"Every kit is WCAG AA verified (0 blocking violations across all 21 surfaces), with shared focus-visible tokens, skip links, and correct ARIA roles built into every component.","meta":"a11y-report.md","href":"https://github.com/AnEntrypoint/design/blob/main/docs/a11y-report.md"}]},{"id":"previews","title":"Previews","count":25,"items":[{"code":"","title":"buttons","sub":"preview · buttons.html","meta":"open ->","href":"./preview/buttons.html"},{"code":"","title":"colors core","sub":"preview · colors-core.html","meta":"open ->","href":"./preview/colors-core.html"},{"code":"","title":"colors lore","sub":"preview · colors-lore.html","meta":"open ->","href":"./preview/colors-lore.html"},{"code":"","title":"colors semantic","sub":"preview · colors-semantic.html","meta":"open ->","href":"./preview/colors-semantic.html"},{"code":"","title":"dateline","sub":"preview · dateline.html","meta":"open ->","href":"./preview/dateline.html"},{"code":"","title":"dropzone","sub":"preview · dropzone.html","meta":"open ->","href":"./preview/dropzone.html"},{"code":"","title":"file grid","sub":"preview · file-grid.html","meta":"open ->","href":"./preview/file-grid.html"},{"code":"","title":"file row","sub":"preview · file-row.html","meta":"open ->","href":"./preview/file-row.html"},{"code":"","title":"file toolbar","sub":"preview · file-toolbar.html","meta":"open ->","href":"./preview/file-toolbar.html"},{"code":"","title":"file viewer","sub":"preview · file-viewer.html","meta":"open ->","href":"./preview/file-viewer.html"},{"code":"","title":"header","sub":"preview · header.html","meta":"open ->","href":"./preview/header.html"},{"code":"","title":"icons unicode","sub":"preview · icons-unicode.html","meta":"open ->","href":"./preview/icons-unicode.html"},{"code":"","title":"index row","sub":"preview · index-row.html","meta":"open ->","href":"./preview/index-row.html"},{"code":"","title":"inputs","sub":"preview · inputs.html","meta":"open ->","href":"./preview/inputs.html"},{"code":"","title":"manifesto","sub":"preview · manifesto.html","meta":"open ->","href":"./preview/manifesto.html"},{"code":"","title":"rules","sub":"preview · rules.html","meta":"open ->","href":"./preview/rules.html"},{"code":"","title":"spacing","sub":"preview · spacing.html","meta":"open ->","href":"./preview/spacing.html"},{"code":"","title":"stamps","sub":"preview · stamps.html","meta":"open ->","href":"./preview/stamps.html"},{"code":"","title":"stamps lore","sub":"preview · stamps-lore.html","meta":"open ->","href":"./preview/stamps-lore.html"},{"code":"","title":"theme ink","sub":"preview · theme-ink.html","meta":"open ->","href":"./preview/theme-ink.html"},{"code":"","title":"type display","sub":"preview · type-display.html","meta":"open ->","href":"./preview/type-display.html"},{"code":"","title":"type mono","sub":"preview · type-mono.html","meta":"open ->","href":"./preview/type-mono.html"},{"code":"","title":"type prose","sub":"preview · type-prose.html","meta":"open ->","href":"./preview/type-prose.html"},{"code":"","title":"type scale","sub":"preview · type-scale.html","meta":"open ->","href":"./preview/type-scale.html"},{"code":"","title":"wordmarks","sub":"preview · wordmarks.html","meta":"open ->","href":"./preview/wordmarks.html"}]}],"quickstart":{"heading":"Quick start","lines":[{"kind":"cmt","text":"# Install via importmap (no bundler)"},{"kind":"cmd","text":"\u003cscript type='importmap'>{\"imports\":{\"anentrypoint-design\":\"https://unpkg.com/anentrypoint-design@latest/dist/247420.js\"}}\u003c/script>"},{"kind":"cmt","text":"# Or clone the source"},{"kind":"cmd","text":"git clone https://github.com/AnEntrypoint/design.git"}]},"statusLeft":["main","utf-8","lf"],"statusRight":["anentrypoint-design@latest","15 kits"],"seoAuthor":"247420 · a design system by AnEntrypoint"}</script>
|
|
161
|
+
<script id="__site__" type="application/json">{"title":"design","slug":"index","siteName":"design","navItems":[["247420","https://247420.xyz"],["AnEntrypoint ->","https://github.com/AnEntrypoint"]],"theme":"auto","hero":{"heading":"Design","subheading":"The 247420 design system","body":"A complete, tokens-driven component system for building consistent, accessible interfaces fast: 15 ready-to-ship kit surfaces, 25 live previews, a slide deck, and a full desktop-shell demo — plus a web component and an SDK. Every panel, row, and form control reads its color, radius, and spacing from one shared token file, so a single theme change updates every surface built on it at once. WCAG AA verified across all 21 kits, zero JavaScript bundler required.","badges":[{"label":"Design system"},{"label":"Design tokens"},{"label":"WCAG AA"}],"ctas":[{"label":"GitHub","href":"https://github.com/AnEntrypoint/design","primary":true},{"label":"247420","href":"https://247420.xyz"}]},"sections":[],"examples":[],"bodyHtml":"","sidebar":{"sections":[{"group":"open","items":[{"glyph":"+","label":"open","href":"./ui_kits/homepage/"}]},{"group":"bins","items":[{"label":"Everything","href":"#all","active":true,"count":48},{"label":"Pinned","href":"#kits","count":15},{"label":"Shipped","href":"#previews","count":25},{"label":"Drafts","href":"#decks","count":1}]},{"group":"Labels","items":[{"label":"UI kits","href":"#kits","count":15},{"label":"Decks","href":"#decks","count":1},{"label":"Previews","href":"#previews","count":25},{"label":"Docs","href":"#docs","count":7}]},{"group":"More","items":[{"label":"Readme","href":"https://github.com/AnEntrypoint/design/blob/main/README.md"},{"label":"Skill","href":"https://github.com/AnEntrypoint/design/blob/main/SKILL.md"},{"label":"Tokens","href":"https://github.com/AnEntrypoint/design/blob/main/colors_and_type.css"},{"label":"Source","href":"https://github.com/AnEntrypoint/design"},{"label":"MIT license","href":"https://github.com/AnEntrypoint/design/blob/main/LICENSE"}]}]},"marquee":{"items":["Open source","Design tokens","WCAG AA verified","No bundler required"],"sep":"/"},"showcase":{"heading":"Live components","lede":"Not a screenshot — the same Btn, Chip, Badge, and Table components every kit page imports, rendered right here from the SDK you'd actually install."},"panels":[{"id":"kits","title":"UI kits","count":"15 surfaces","items":[{"code":"","title":"Homepage","sub":"Marquee and works grid","meta":"open ->","href":"./ui_kits/homepage/"},{"code":"","title":"Project page","sub":"Hero, receipt, install, changelog","meta":"open ->","href":"./ui_kits/project_page/"},{"code":"","title":"Docs","sub":"Long-form prose chrome","meta":"open ->","href":"./ui_kits/docs/"},{"code":"","title":"Blog","sub":"Dated index and reading view","meta":"open ->","href":"./ui_kits/blog/"},{"code":"","title":"Chat","sub":"Message thread and composer","meta":"open ->","href":"./ui_kits/chat/"},{"code":"","title":"AICat","sub":"AI assistant with a cat persona","meta":"open ->","href":"./ui_kits/aicat/"},{"code":"","title":"File browser","sub":"Type-aware rails, drop zone, preview","meta":"open ->","href":"./ui_kits/file_browser/"},{"code":"","title":"Dashboard","sub":"KPIs, tables, receipts, changelog","meta":"open ->","href":"./ui_kits/dashboard/"},{"code":"","title":"Terminal","sub":"CLI prompt, command lines, log view","meta":"open ->","href":"./ui_kits/terminal/"},{"code":"","title":"Settings","sub":"Sectioned forms, toggles, save bar","meta":"open ->","href":"./ui_kits/settings/"},{"code":"","title":"Sign in","sub":"Auth providers and magic link","meta":"open ->","href":"./ui_kits/signin/"},{"code":"","title":"Search","sub":"Topbar query, faceted filters, rows","meta":"open ->","href":"./ui_kits/search/"},{"code":"","title":"404","sub":"Empty-state hero, suggested routes","meta":"open ->","href":"./ui_kits/error_404/"},{"code":"","title":"Gallery","sub":"Visual grid, tonal cards, lightbox","meta":"open ->","href":"./ui_kits/gallery/"},{"code":"","title":"OS shell","sub":"Menubar, window manager, taskbar","meta":"open ->","href":"./ui_kits/os/"}],"layout":"cards"},{"id":"file_browser","title":"File browser","count":"primitives","items":[{"code":"fb","title":"file_browser kit","sub":"Drop, list, preview, dialogs","meta":"open ->","href":"./ui_kits/file_browser/"},{"code":"fb","title":"FileRow","sub":"Rail, icon, name, meta","meta":"open ->","href":"./preview/file-row.html"},{"code":"fb","title":"FileGrid","sub":"A stack of rows in a panel","meta":"open ->","href":"./preview/file-grid.html"},{"code":"fb","title":"DropZone","sub":"Tonal upload target","meta":"open ->","href":"./preview/dropzone.html"},{"code":"fb","title":"FileViewer","sub":"Modal preview, keyed head","meta":"open ->","href":"./preview/file-viewer.html"},{"code":"fb","title":"FileToolbar","sub":"Actions, breadcrumb, upload","meta":"open ->","href":"./preview/file-toolbar.html"},{"code":"fb","title":"fsbrowse","sub":"Express + busboy backend","meta":"source","href":"https://github.com/AnEntrypoint/fsbrowse"}],"layout":null},{"id":"desktop_os","title":"Desktop OS shell","count":"in-page window manager","items":[{"code":"os","title":"Live demo","sub":"menubar, apps drawer, side rail, taskbar, floating windows","meta":"open ->","href":"./ui_kits/os/"},{"code":"os","title":"createDesktopShell","sub":"menubar, apps launcher, taskbar, window manager","meta":"shell.js","href":"https://github.com/AnEntrypoint/design/blob/main/src/kits/os/shell.js"},{"code":"os","title":"renderWindow / renderDock","sub":"pure paint-surface primitives","meta":"wm.js","href":"https://github.com/AnEntrypoint/design/blob/main/src/kits/os/wm.js"},{"code":"os","title":"Icon set","sub":"SVG glyphs for menubar and taskbar","meta":"icons.js","href":"https://github.com/AnEntrypoint/design/blob/main/src/kits/os/icons.js"},{"code":"os","title":"theme.css","sub":"OS chrome tokens: menubar, launcher, window manager","meta":"theme.css","href":"https://github.com/AnEntrypoint/design/blob/main/src/kits/os/theme.css"},{"code":"os","title":"Import path","sub":"anentrypoint-design/kits/os","meta":"exports","href":"https://github.com/AnEntrypoint/design/blob/main/package.json"}],"layout":null},{"id":"web_components","title":"Web components","count":"1 element","items":[{"code":"wc","title":"\u003cds-chat>","sub":"Auto-registers when the SDK loads in a browser","meta":"ds-chat.js","href":"https://github.com/AnEntrypoint/design/blob/main/src/web-components/ds-chat.js"},{"code":"wc","title":"registerChatElement","sub":"Manual register helper","meta":"source","href":"https://github.com/AnEntrypoint/design/blob/main/src/index.js"}],"layout":null},{"id":"api_exports","title":"Public API","count":"SDK surface","items":[{"code":"api","title":"h / applyDiff","sub":"webjsx createElement and diff","meta":"index.js","href":"https://github.com/AnEntrypoint/design/blob/main/src/index.js"},{"code":"api","title":"installStyles / scope","sub":"ds-247420 CSS scope and bootstrap","meta":"styles.js","href":"https://github.com/AnEntrypoint/design/blob/main/src/styles.js"},{"code":"api","title":"loadCss","sub":"Fetch the bundled CSS string","meta":"styles.js","href":"https://github.com/AnEntrypoint/design/blob/main/src/styles.js"},{"code":"api","title":"mount / mountKit","sub":"Shell and ui_kit bootstrap","meta":"bootstrap.js","href":"https://github.com/AnEntrypoint/design/blob/main/src/bootstrap.js"},{"code":"api","title":"registerDeckStage / getDeckStage","sub":"16:9 deck stage API","meta":"deck-stage.js","href":"https://github.com/AnEntrypoint/design/blob/main/src/deck-stage.js"},{"code":"api","title":"renderMarkdown","sub":"marked v15 + DOMPurify, lazy-loaded","meta":"markdown.js","href":"https://github.com/AnEntrypoint/design/blob/main/src/markdown.js"},{"code":"api","title":"ensurePrism / highlightAllUnder","sub":"Prism core plus per-language","meta":"highlight.js","href":"https://github.com/AnEntrypoint/design/blob/main/src/highlight.js"},{"code":"api","title":"renderPageHtml","sub":"Static page HTML template","meta":"page-html.js","href":"https://github.com/AnEntrypoint/design/blob/main/src/page-html.js"},{"code":"api","title":"components / motion / debug","sub":"Namespaces from the default export","meta":"components.js","href":"https://github.com/AnEntrypoint/design/blob/main/src/components.js"}],"layout":null},{"id":"decks","title":"Decks","count":1,"items":[{"code":"","title":"Deck template","sub":"16:9 stage with auto-fit","meta":"open ->","href":"./slides/"}],"layout":null},{"id":"docs","title":"Docs","count":7,"items":[{"code":"md","title":"Readme","sub":"Overview, manifesto, conventions","meta":"open ->","href":"https://github.com/AnEntrypoint/design/blob/main/README.md"},{"code":"md","title":"Skill","sub":"Authoring rules for the agent","meta":"open ->","href":"https://github.com/AnEntrypoint/design/blob/main/SKILL.md"},{"code":"css","title":"Tokens","sub":"Colors, type, panel surface tokens","meta":"open ->","href":"https://github.com/AnEntrypoint/design/blob/main/colors_and_type.css"},{"code":"md","title":"Component props","sub":"Generated prop reference","meta":"open ->","href":"https://github.com/AnEntrypoint/design/blob/main/docs/component-props.md"},{"code":"md","title":"Changelog","sub":"Release history","meta":"open ->","href":"https://github.com/AnEntrypoint/design/blob/main/CHANGELOG.md"},{"code":"md","title":"Accessibility","sub":"WCAG AA compliance, keyboard navigation","meta":"open ->","href":"https://github.com/AnEntrypoint/design/blob/main/docs/accessibility.md"},{"code":"md","title":"Responsive breakpoints","sub":"The documented breakpoint scale in use","meta":"open ->","href":"https://github.com/AnEntrypoint/design/blob/main/docs/responsive.md"}],"layout":null},{"id":"features","title":"Why teams choose 247420","count":5,"items":[{"code":"","title":"Clear visual hierarchy","sub":"Panel-on-panel layering keeps dense dashboards scannable — important content stays legible even in complex, data-heavy screens.","meta":"panel-row.css","href":"https://github.com/AnEntrypoint/design/blob/main/src/css/app-shell/panel-row.css"},{"code":"","title":"Readable at a glance","sub":"A disciplined type system reserves monospace for codes and labels and sans-serif for everything meant to be read, so interfaces stay legible under real workloads.","meta":"colors_and_type.css","href":"https://github.com/AnEntrypoint/design/blob/main/colors_and_type.css"},{"code":"","title":"Instant status recognition","sub":"Color-coded indicator rails let users scan for status and category at a glance, without relying on borders that add visual noise.","meta":"panel-row.css","href":"https://github.com/AnEntrypoint/design/blob/main/src/css/app-shell/panel-row.css#L126"},{"code":"","title":"Rebrand in minutes, not sprints","sub":"Every surface, type scale, and accent color is driven entirely by design tokens — retheme an entire product by editing one file, with zero component code changes.","meta":"colors_and_type.css","href":"https://github.com/AnEntrypoint/design/blob/main/colors_and_type.css"},{"code":"","title":"Accessible by default","sub":"Every kit is WCAG AA verified (0 blocking violations across all 21 surfaces), with shared focus-visible tokens, skip links, and correct ARIA roles built into every component.","meta":"a11y-report.md","href":"https://github.com/AnEntrypoint/design/blob/main/docs/a11y-report.md"}],"layout":null},{"id":"previews","title":"Previews","count":25,"items":[{"code":"","title":"buttons","sub":"preview · buttons.html","meta":"open ->","href":"./preview/buttons.html"},{"code":"","title":"colors core","sub":"preview · colors-core.html","meta":"open ->","href":"./preview/colors-core.html"},{"code":"","title":"colors lore","sub":"preview · colors-lore.html","meta":"open ->","href":"./preview/colors-lore.html"},{"code":"","title":"colors semantic","sub":"preview · colors-semantic.html","meta":"open ->","href":"./preview/colors-semantic.html"},{"code":"","title":"dateline","sub":"preview · dateline.html","meta":"open ->","href":"./preview/dateline.html"},{"code":"","title":"dropzone","sub":"preview · dropzone.html","meta":"open ->","href":"./preview/dropzone.html"},{"code":"","title":"file grid","sub":"preview · file-grid.html","meta":"open ->","href":"./preview/file-grid.html"},{"code":"","title":"file row","sub":"preview · file-row.html","meta":"open ->","href":"./preview/file-row.html"},{"code":"","title":"file toolbar","sub":"preview · file-toolbar.html","meta":"open ->","href":"./preview/file-toolbar.html"},{"code":"","title":"file viewer","sub":"preview · file-viewer.html","meta":"open ->","href":"./preview/file-viewer.html"},{"code":"","title":"header","sub":"preview · header.html","meta":"open ->","href":"./preview/header.html"},{"code":"","title":"icons unicode","sub":"preview · icons-unicode.html","meta":"open ->","href":"./preview/icons-unicode.html"},{"code":"","title":"index row","sub":"preview · index-row.html","meta":"open ->","href":"./preview/index-row.html"},{"code":"","title":"inputs","sub":"preview · inputs.html","meta":"open ->","href":"./preview/inputs.html"},{"code":"","title":"manifesto","sub":"preview · manifesto.html","meta":"open ->","href":"./preview/manifesto.html"},{"code":"","title":"rules","sub":"preview · rules.html","meta":"open ->","href":"./preview/rules.html"},{"code":"","title":"spacing","sub":"preview · spacing.html","meta":"open ->","href":"./preview/spacing.html"},{"code":"","title":"stamps","sub":"preview · stamps.html","meta":"open ->","href":"./preview/stamps.html"},{"code":"","title":"stamps lore","sub":"preview · stamps-lore.html","meta":"open ->","href":"./preview/stamps-lore.html"},{"code":"","title":"theme ink","sub":"preview · theme-ink.html","meta":"open ->","href":"./preview/theme-ink.html"},{"code":"","title":"type display","sub":"preview · type-display.html","meta":"open ->","href":"./preview/type-display.html"},{"code":"","title":"type mono","sub":"preview · type-mono.html","meta":"open ->","href":"./preview/type-mono.html"},{"code":"","title":"type prose","sub":"preview · type-prose.html","meta":"open ->","href":"./preview/type-prose.html"},{"code":"","title":"type scale","sub":"preview · type-scale.html","meta":"open ->","href":"./preview/type-scale.html"},{"code":"","title":"wordmarks","sub":"preview · wordmarks.html","meta":"open ->","href":"./preview/wordmarks.html"}]}],"quickstart":{"heading":"Quick start","lines":[{"kind":"cmt","text":"# Install via importmap (no bundler)"},{"kind":"cmd","text":"\u003cscript type='importmap'>{\"imports\":{\"anentrypoint-design\":\"https://unpkg.com/anentrypoint-design@latest/dist/247420.js\"}}\u003c/script>"},{"kind":"cmt","text":"# Or clone the source"},{"kind":"cmd","text":"git clone https://github.com/AnEntrypoint/design.git"}]},"statusLeft":["main","utf-8","lf"],"statusRight":["anentrypoint-design@latest","15 kits"],"seoAuthor":"247420 · a design system by AnEntrypoint"}</script>
|
|
120
162
|
<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>
|
|
121
163
|
</head>
|
|
122
164
|
<body>
|
|
@@ -159,6 +201,51 @@ function heroNode(hero) {
|
|
|
159
201
|
|
|
160
202
|
function __esc(s) { return String(s).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>'); }
|
|
161
203
|
|
|
204
|
+
// A live, interactive strip of the actual SDK components (not a screenshot,
|
|
205
|
+
// not a description) rendered directly below the hero -- "show, don't just
|
|
206
|
+
// tell" concretely: real Btn/Chip/Badge/Table specimens, mounted from the
|
|
207
|
+
// same C.* namespace every kit page uses, so what a visitor sees IS what a
|
|
208
|
+
// consumer gets by importing the SDK.
|
|
209
|
+
function showcaseNode(showcase) {
|
|
210
|
+
if (!showcase) return null;
|
|
211
|
+
const btnRow = h('div', { class: 'ds-showcase-row' },
|
|
212
|
+
C.Btn({ key: 'b1', variant: 'primary', children: 'Primary' }),
|
|
213
|
+
C.Btn({ key: 'b2', variant: 'default', children: 'Default' }),
|
|
214
|
+
C.Btn({ key: 'b3', variant: 'ghost', children: 'Ghost' }),
|
|
215
|
+
C.Btn({ key: 'b4', variant: 'danger', children: 'Danger' }),
|
|
216
|
+
);
|
|
217
|
+
const chipRow = h('div', { class: 'ds-showcase-row' },
|
|
218
|
+
C.Chip({ key: 'c1', tone: 'green', children: 'Live' }),
|
|
219
|
+
C.Chip({ key: 'c2', tone: 'blue', children: 'Beta' }),
|
|
220
|
+
C.Chip({ key: 'c3', tone: 'purple', children: 'New' }),
|
|
221
|
+
C.Badge({ key: 'c4', tone: 'success', children: '0 violations' }),
|
|
222
|
+
);
|
|
223
|
+
const table = C.Table({
|
|
224
|
+
headers: ['Kit', 'Status', 'A11y'],
|
|
225
|
+
rows: [
|
|
226
|
+
['chat', 'shipped', 'pass'],
|
|
227
|
+
['dashboard', 'shipped', 'pass'],
|
|
228
|
+
['os', 'shipped', 'pass'],
|
|
229
|
+
],
|
|
230
|
+
compact: true,
|
|
231
|
+
});
|
|
232
|
+
return C.Section({
|
|
233
|
+
id: 'showcase',
|
|
234
|
+
title: showcase.heading || 'Live components',
|
|
235
|
+
children: [
|
|
236
|
+
showcase.lede ? h('p', { class: 'ds-lede' }, showcase.lede) : null,
|
|
237
|
+
h('div', { class: 'ds-showcase-grid' },
|
|
238
|
+
h('div', { key: 'btns', class: 'ds-showcase-card' },
|
|
239
|
+
h('span', { class: 'ds-showcase-label' }, 'Buttons'), btnRow),
|
|
240
|
+
h('div', { key: 'chips', class: 'ds-showcase-card' },
|
|
241
|
+
h('span', { class: 'ds-showcase-label' }, 'Chips & badges'), chipRow),
|
|
242
|
+
h('div', { key: 'table', class: 'ds-showcase-card ds-showcase-card--wide' },
|
|
243
|
+
h('span', { class: 'ds-showcase-label' }, 'Table'), table),
|
|
244
|
+
),
|
|
245
|
+
].filter(Boolean),
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
|
|
162
249
|
function sectionNode(sec, idx) {
|
|
163
250
|
const features = sec.features || sec.items || [];
|
|
164
251
|
const rows = features.map((f, i) => {
|
|
@@ -252,16 +339,33 @@ function panelNode(panel, idx, rerender) {
|
|
|
252
339
|
}
|
|
253
340
|
return filterInput ? h('div', { class: 'ds-kits-panel-wrap' }, filterInput) : null;
|
|
254
341
|
}
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
342
|
+
// Card-grid layout (panel.layout === 'cards'): each item gets its own
|
|
343
|
+
// visual tile with a code badge and a two-line title/sub stack, instead of
|
|
344
|
+
// a single-line text row -- the "show, don't just tell" request for a
|
|
345
|
+
// browsable gallery feel on the kits panel specifically, opt-in per panel
|
|
346
|
+
// so every other panel (docs, api_exports, etc) keeps its dense row list,
|
|
347
|
+
// which suits reference material better than a card grid would.
|
|
348
|
+
const rows = panel.layout === 'cards'
|
|
349
|
+
? items.map((it, i) => {
|
|
350
|
+
const code = it.code == null ? '' : String(it.code).trim();
|
|
351
|
+
return h('a', { key: i, class: 'ds-kit-card', href: it.href || '#' },
|
|
352
|
+
code ? h('span', { key: 'c', class: 'ds-kit-card-code' }, code) : null,
|
|
353
|
+
h('span', { key: 't', class: 'ds-kit-card-title' }, String(it.title || it.name || '')),
|
|
354
|
+
(it.sub || it.desc) ? h('span', { key: 'm', class: 'ds-kit-card-sub' }, it.sub || it.desc) : null,
|
|
355
|
+
h('span', { key: 'a', class: 'ds-kit-card-arrow' }, it.meta || '->'),
|
|
356
|
+
);
|
|
357
|
+
})
|
|
358
|
+
: items.map((it, i) => {
|
|
359
|
+
const code = it.code == null ? '' : String(it.code).trim();
|
|
360
|
+
const kids = [];
|
|
361
|
+
if (code) kids.push(h('span', { key: 'c', class: 'code' }, code));
|
|
362
|
+
kids.push(h('span', { key: 't', class: 'title' }, String(it.title || it.name || '')));
|
|
363
|
+
if (it.sub || it.desc) kids.push(h('span', { key: 'm', class: 'meta dim' }, ' — ' + (it.sub || it.desc)));
|
|
364
|
+
kids.push(h('span', { key: 'a', class: 'ds-row-arrow' }, it.meta || '->'));
|
|
365
|
+
return h('a', { key: i, class: 'row', href: it.href || '#' }, ...kids);
|
|
366
|
+
});
|
|
367
|
+
const rowsWrapped = panel.layout === 'cards' ? h('div', { class: 'ds-kit-card-grid' }, ...rows) : rows;
|
|
368
|
+
const panelEl = C.Panel({ id: panel.id || null, title: titleNode, count: items.length, children: rowsWrapped });
|
|
265
369
|
return filterInput ? h('div', { class: 'ds-kits-panel-wrap' }, filterInput, panelEl) : panelEl;
|
|
266
370
|
}
|
|
267
371
|
|
|
@@ -417,6 +521,7 @@ function buildMainChildren(rerender) {
|
|
|
417
521
|
|
|
418
522
|
return [
|
|
419
523
|
heroNode(data.hero),
|
|
524
|
+
showcaseNode(data.showcase),
|
|
420
525
|
marqueeNode(data.marquee),
|
|
421
526
|
...data.sections.map(sectionNode),
|
|
422
527
|
...tierNodes,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "anentrypoint-design",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.8",
|
|
4
4
|
"description": "247420 design system SDK — webjsx + modified ripple-ui, single-file ESM bundle for reproducible use of the AnEntrypoint design.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/247420.js",
|
|
@@ -45,6 +45,51 @@ function heroNode(hero) {
|
|
|
45
45
|
|
|
46
46
|
function __esc(s) { return String(s).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>'); }
|
|
47
47
|
|
|
48
|
+
// A live, interactive strip of the actual SDK components (not a screenshot,
|
|
49
|
+
// not a description) rendered directly below the hero -- "show, don't just
|
|
50
|
+
// tell" concretely: real Btn/Chip/Badge/Table specimens, mounted from the
|
|
51
|
+
// same C.* namespace every kit page uses, so what a visitor sees IS what a
|
|
52
|
+
// consumer gets by importing the SDK.
|
|
53
|
+
function showcaseNode(showcase) {
|
|
54
|
+
if (!showcase) return null;
|
|
55
|
+
const btnRow = h('div', { class: 'ds-showcase-row' },
|
|
56
|
+
C.Btn({ key: 'b1', variant: 'primary', children: 'Primary' }),
|
|
57
|
+
C.Btn({ key: 'b2', variant: 'default', children: 'Default' }),
|
|
58
|
+
C.Btn({ key: 'b3', variant: 'ghost', children: 'Ghost' }),
|
|
59
|
+
C.Btn({ key: 'b4', variant: 'danger', children: 'Danger' }),
|
|
60
|
+
);
|
|
61
|
+
const chipRow = h('div', { class: 'ds-showcase-row' },
|
|
62
|
+
C.Chip({ key: 'c1', tone: 'green', children: 'Live' }),
|
|
63
|
+
C.Chip({ key: 'c2', tone: 'blue', children: 'Beta' }),
|
|
64
|
+
C.Chip({ key: 'c3', tone: 'purple', children: 'New' }),
|
|
65
|
+
C.Badge({ key: 'c4', tone: 'success', children: '0 violations' }),
|
|
66
|
+
);
|
|
67
|
+
const table = C.Table({
|
|
68
|
+
headers: ['Kit', 'Status', 'A11y'],
|
|
69
|
+
rows: [
|
|
70
|
+
['chat', 'shipped', 'pass'],
|
|
71
|
+
['dashboard', 'shipped', 'pass'],
|
|
72
|
+
['os', 'shipped', 'pass'],
|
|
73
|
+
],
|
|
74
|
+
compact: true,
|
|
75
|
+
});
|
|
76
|
+
return C.Section({
|
|
77
|
+
id: 'showcase',
|
|
78
|
+
title: showcase.heading || 'Live components',
|
|
79
|
+
children: [
|
|
80
|
+
showcase.lede ? h('p', { class: 'ds-lede' }, showcase.lede) : null,
|
|
81
|
+
h('div', { class: 'ds-showcase-grid' },
|
|
82
|
+
h('div', { key: 'btns', class: 'ds-showcase-card' },
|
|
83
|
+
h('span', { class: 'ds-showcase-label' }, 'Buttons'), btnRow),
|
|
84
|
+
h('div', { key: 'chips', class: 'ds-showcase-card' },
|
|
85
|
+
h('span', { class: 'ds-showcase-label' }, 'Chips & badges'), chipRow),
|
|
86
|
+
h('div', { key: 'table', class: 'ds-showcase-card ds-showcase-card--wide' },
|
|
87
|
+
h('span', { class: 'ds-showcase-label' }, 'Table'), table),
|
|
88
|
+
),
|
|
89
|
+
].filter(Boolean),
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
|
|
48
93
|
function sectionNode(sec, idx) {
|
|
49
94
|
const features = sec.features || sec.items || [];
|
|
50
95
|
const rows = features.map((f, i) => {
|
|
@@ -138,16 +183,33 @@ function panelNode(panel, idx, rerender) {
|
|
|
138
183
|
}
|
|
139
184
|
return filterInput ? h('div', { class: 'ds-kits-panel-wrap' }, filterInput) : null;
|
|
140
185
|
}
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
186
|
+
// Card-grid layout (panel.layout === 'cards'): each item gets its own
|
|
187
|
+
// visual tile with a code badge and a two-line title/sub stack, instead of
|
|
188
|
+
// a single-line text row -- the "show, don't just tell" request for a
|
|
189
|
+
// browsable gallery feel on the kits panel specifically, opt-in per panel
|
|
190
|
+
// so every other panel (docs, api_exports, etc) keeps its dense row list,
|
|
191
|
+
// which suits reference material better than a card grid would.
|
|
192
|
+
const rows = panel.layout === 'cards'
|
|
193
|
+
? items.map((it, i) => {
|
|
194
|
+
const code = it.code == null ? '' : String(it.code).trim();
|
|
195
|
+
return h('a', { key: i, class: 'ds-kit-card', href: it.href || '#' },
|
|
196
|
+
code ? h('span', { key: 'c', class: 'ds-kit-card-code' }, code) : null,
|
|
197
|
+
h('span', { key: 't', class: 'ds-kit-card-title' }, String(it.title || it.name || '')),
|
|
198
|
+
(it.sub || it.desc) ? h('span', { key: 'm', class: 'ds-kit-card-sub' }, it.sub || it.desc) : null,
|
|
199
|
+
h('span', { key: 'a', class: 'ds-kit-card-arrow' }, it.meta || '->'),
|
|
200
|
+
);
|
|
201
|
+
})
|
|
202
|
+
: items.map((it, i) => {
|
|
203
|
+
const code = it.code == null ? '' : String(it.code).trim();
|
|
204
|
+
const kids = [];
|
|
205
|
+
if (code) kids.push(h('span', { key: 'c', class: 'code' }, code));
|
|
206
|
+
kids.push(h('span', { key: 't', class: 'title' }, String(it.title || it.name || '')));
|
|
207
|
+
if (it.sub || it.desc) kids.push(h('span', { key: 'm', class: 'meta dim' }, ' — ' + (it.sub || it.desc)));
|
|
208
|
+
kids.push(h('span', { key: 'a', class: 'ds-row-arrow' }, it.meta || '->'));
|
|
209
|
+
return h('a', { key: i, class: 'row', href: it.href || '#' }, ...kids);
|
|
210
|
+
});
|
|
211
|
+
const rowsWrapped = panel.layout === 'cards' ? h('div', { class: 'ds-kit-card-grid' }, ...rows) : rows;
|
|
212
|
+
const panelEl = C.Panel({ id: panel.id || null, title: titleNode, count: items.length, children: rowsWrapped });
|
|
151
213
|
return filterInput ? h('div', { class: 'ds-kits-panel-wrap' }, filterInput, panelEl) : panelEl;
|
|
152
214
|
}
|
|
153
215
|
|
|
@@ -303,6 +365,7 @@ function buildMainChildren(rerender) {
|
|
|
303
365
|
|
|
304
366
|
return [
|
|
305
367
|
heroNode(data.hero),
|
|
368
|
+
showcaseNode(data.showcase),
|
|
306
369
|
marqueeNode(data.marquee),
|
|
307
370
|
...data.sections.map(sectionNode),
|
|
308
371
|
...tierNodes,
|
|
@@ -90,4 +90,46 @@ a.row:hover .ds-row-arrow { opacity: 1 }
|
|
|
90
90
|
.ds-page-footer-links { display: flex; gap: var(--space-4, 24px) }
|
|
91
91
|
.ds-page-footer-links a { color: var(--fg-3) }
|
|
92
92
|
.ds-page-footer-links a:hover { color: var(--fg) }
|
|
93
|
+
/* Live component showcase: a grid of cards, each holding a real mounted
|
|
94
|
+
specimen (not a screenshot) of the actual SDK components. */
|
|
95
|
+
.ds-showcase-grid {
|
|
96
|
+
display: grid; gap: var(--space-3, 16px);
|
|
97
|
+
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
|
|
98
|
+
}
|
|
99
|
+
.ds-showcase-card {
|
|
100
|
+
padding: var(--space-3, 16px); background: var(--panel-1, var(--bg));
|
|
101
|
+
border-radius: var(--r-2, 14px); display: grid; gap: var(--space-2, 8px);
|
|
102
|
+
}
|
|
103
|
+
.ds-showcase-card--wide { grid-column: 1 / -1; }
|
|
104
|
+
.ds-showcase-label {
|
|
105
|
+
font-size: var(--fs-tiny, 13px); font-weight: 600; text-transform: uppercase;
|
|
106
|
+
letter-spacing: 0.06em; color: var(--fg-3, #6b6b6b);
|
|
107
|
+
}
|
|
108
|
+
.ds-showcase-row { display: flex; flex-wrap: wrap; gap: var(--space-2, 8px); align-items: center; }
|
|
109
|
+
/* Card-grid layout (panel.layout === 'cards'): a browsable gallery of tiles
|
|
110
|
+
instead of a dense text-row list, opt-in per panel via home.yaml's
|
|
111
|
+
kits.layout: cards. */
|
|
112
|
+
.ds-kit-card-grid {
|
|
113
|
+
display: grid; gap: var(--space-2, 8px);
|
|
114
|
+
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
|
|
115
|
+
}
|
|
116
|
+
.ds-kit-card {
|
|
117
|
+
display: grid; gap: var(--space-1, 4px); align-content: start;
|
|
118
|
+
padding: var(--space-3, 16px); background: var(--panel-1, var(--bg));
|
|
119
|
+
border-radius: var(--r-2, 14px); color: inherit; text-decoration: none;
|
|
120
|
+
transition: transform var(--dur-base, .18s) var(--ease, ease), box-shadow var(--dur-base, .18s) var(--ease, ease);
|
|
121
|
+
position: relative;
|
|
122
|
+
}
|
|
123
|
+
.ds-kit-card:hover { transform: translateY(-2px); box-shadow: var(--shadow-1, 0 1px 2px rgba(0,0,0,.1)); }
|
|
124
|
+
.ds-kit-card:focus-visible { outline: var(--focus-w, 2px) solid var(--focus-color, currentColor); outline-offset: var(--focus-offset, 2px); }
|
|
125
|
+
.ds-kit-card-code {
|
|
126
|
+
font-family: var(--ff-mono, monospace); font-size: var(--fs-micro, 12px);
|
|
127
|
+
color: var(--fg-3, #6b6b6b);
|
|
128
|
+
}
|
|
129
|
+
.ds-kit-card-title { font-weight: 600; font-size: var(--fs-base, 16px); }
|
|
130
|
+
.ds-kit-card-sub { font-size: var(--fs-sm, 15px); color: var(--fg-2, #444); }
|
|
131
|
+
.ds-kit-card-arrow {
|
|
132
|
+
position: absolute; top: var(--space-3, 16px); right: var(--space-3, 16px);
|
|
133
|
+
color: var(--fg-3, #6b6b6b); font-size: var(--fs-sm, 15px);
|
|
134
|
+
}
|
|
93
135
|
`.trim();
|
package/src/page-html.js
CHANGED
|
@@ -40,6 +40,7 @@ export function renderPageHtml({
|
|
|
40
40
|
seo = null, // { description, keywords, author, twitter, locale, lang, image, url, glyph, ldJson:boolean }
|
|
41
41
|
sidebar = null, // { sections: [{ group, items: [{glyph,label,href}] }] } -> C.Side
|
|
42
42
|
marquee = null, // { items: [...strings], sep }
|
|
43
|
+
showcase = null, // { heading, lede } -> a live strip of real Btn/Chip/Table specimens, rendered right below the hero
|
|
43
44
|
panels = null, // [{ id, title, count, items: [{code,title,sub,meta,href}] }] -> C.Panel + RowLink rows
|
|
44
45
|
quickstart = null, // { heading, lines: [{ kind, text }] } -> cli block panel
|
|
45
46
|
statusLeft = null, // override the default [siteName.toLowerCase(), slug] status-bar left cluster
|
|
@@ -78,6 +79,7 @@ export function renderPageHtml({
|
|
|
78
79
|
bodyHtml: body ? renderMarkdown(body) : '',
|
|
79
80
|
sidebar: sidebar || null,
|
|
80
81
|
marquee: marquee || null,
|
|
82
|
+
showcase: showcase || null,
|
|
81
83
|
panels: Array.isArray(panels) ? panels : [],
|
|
82
84
|
quickstart: quickstart || null,
|
|
83
85
|
statusLeft: Array.isArray(statusLeft) ? statusLeft : null,
|