generator-white-label 9.0.0 → 10.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLI.md +13 -17
- package/EXISTING_APPLICATIONS.md +155 -0
- package/PACKAGE_MANAGERS.md +6 -4
- package/README.md +135 -153
- package/app/404.ts +28 -0
- package/app/README.md +19 -7
- package/{scaffold/no-jsx/app → app}/assets/script/index.ts +1 -0
- package/{scaffold/no-jsx/app → app}/assets/script/tasks/TaskView.ts +1 -1
- package/app/assets/view/CodeBlock.ts +15 -0
- package/app/assets/view/examples/tasks/TaskExample.ts +50 -0
- package/app/assets/view/examples/tasks/task-state.ts +1 -1
- package/app/assets/view/layout/SiteFooter.ts +11 -0
- package/app/assets/view/layout/SiteHeader.ts +17 -0
- package/app/assets/view/page-data.ts +2 -2
- package/app/assets/view/sections/GettingStartedSection.ts +26 -0
- package/app/assets/view/sections/HeroSection.ts +15 -0
- package/app/assets/view/sections/LiveExampleSection.ts +24 -0
- package/app/assets/view/sections/PackageDocsSection.ts +69 -0
- package/app/assets/view/sections/{SourceGuideSection.tsx → SourceGuideSection.ts} +11 -16
- package/app/index.ts +50 -0
- package/cli/index.ts +4 -41
- package/dist/app/404.d.ts +1 -1
- package/dist/app/404.js +18 -2
- package/dist/app/404.js.map +1 -1
- package/dist/app/assets/script/index.d.ts +1 -6
- package/dist/app/assets/script/index.js +1 -6
- package/dist/app/assets/script/index.js.map +1 -1
- package/dist/app/assets/script/tasks/TaskView.d.ts +1 -6
- package/dist/app/assets/script/tasks/TaskView.js +2 -8
- package/dist/app/assets/script/tasks/TaskView.js.map +1 -1
- package/dist/app/assets/view/CodeBlock.d.ts +3 -3
- package/dist/app/assets/view/CodeBlock.js +4 -2
- package/dist/app/assets/view/CodeBlock.js.map +1 -1
- package/dist/app/assets/view/examples/tasks/TaskExample.d.ts +2 -8
- package/dist/app/assets/view/examples/tasks/TaskExample.js +41 -9
- package/dist/app/assets/view/examples/tasks/TaskExample.js.map +1 -1
- package/dist/app/assets/view/examples/tasks/task-state.d.ts +1 -1
- package/dist/app/assets/view/examples/tasks/task-state.js.map +1 -1
- package/dist/app/assets/view/layout/SiteFooter.d.ts +2 -2
- package/dist/app/assets/view/layout/SiteFooter.js +8 -3
- package/dist/app/assets/view/layout/SiteFooter.js.map +1 -1
- package/dist/app/assets/view/layout/SiteHeader.d.ts +2 -8
- package/dist/app/assets/view/layout/SiteHeader.js +14 -9
- package/dist/app/assets/view/layout/SiteHeader.js.map +1 -1
- package/dist/app/assets/view/page-data.d.ts +2 -2
- package/dist/app/assets/view/page-data.js.map +1 -1
- package/dist/app/assets/view/sections/GettingStartedSection.d.ts +1 -1
- package/dist/app/assets/view/sections/GettingStartedSection.js +21 -6
- package/dist/app/assets/view/sections/GettingStartedSection.js.map +1 -1
- package/dist/app/assets/view/sections/HeroSection.d.ts +2 -8
- package/dist/app/assets/view/sections/HeroSection.js +12 -9
- package/dist/app/assets/view/sections/HeroSection.js.map +1 -1
- package/dist/app/assets/view/sections/LiveExampleSection.d.ts +2 -6
- package/dist/app/assets/view/sections/LiveExampleSection.js +17 -7
- package/dist/app/assets/view/sections/LiveExampleSection.js.map +1 -1
- package/dist/app/assets/view/sections/PackageDocsSection.d.ts +1 -1
- package/dist/app/assets/view/sections/PackageDocsSection.js +57 -20
- package/dist/app/assets/view/sections/PackageDocsSection.js.map +1 -1
- package/dist/app/assets/view/sections/SourceGuideSection.d.ts +2 -7
- package/dist/app/assets/view/sections/SourceGuideSection.js +20 -8
- package/dist/app/assets/view/sections/SourceGuideSection.js.map +1 -1
- package/dist/app/index.d.ts +2 -8
- package/dist/app/index.js +36 -11
- package/dist/app/index.js.map +1 -1
- package/dist/cli/index.d.ts +0 -3
- package/dist/cli/index.js +4 -36
- package/dist/cli/index.js.map +1 -1
- package/dist/scaffold/index.d.ts +2 -13
- package/dist/scaffold/index.js +17 -53
- package/dist/scaffold/index.js.map +1 -1
- package/dist/scripts/build.js +97 -28
- package/dist/scripts/build.js.map +1 -1
- package/dist/server/handler.js +2 -9
- package/dist/server/handler.js.map +1 -1
- package/package.json +22 -22
- package/pnpm-workspace.yaml +0 -1
- package/scaffold/AGENTS.md +13 -8
- package/scaffold/index.ts +17 -57
- package/scripts/build.ts +90 -30
- package/server/handler.ts +2 -10
- package/tsconfig.site.json +1 -4
- package/app/404.tsx +0 -28
- package/app/assets/script/index.tsx +0 -13
- package/app/assets/script/tasks/TaskView.tsx +0 -24
- package/app/assets/view/CodeBlock.tsx +0 -17
- package/app/assets/view/examples/tasks/TaskExample.tsx +0 -63
- package/app/assets/view/layout/SiteFooter.tsx +0 -11
- package/app/assets/view/layout/SiteHeader.tsx +0 -23
- package/app/assets/view/sections/GettingStartedSection.tsx +0 -27
- package/app/assets/view/sections/HeroSection.tsx +0 -21
- package/app/assets/view/sections/LiveExampleSection.tsx +0 -29
- package/app/assets/view/sections/PackageDocsSection.tsx +0 -69
- package/app/index.tsx +0 -54
- package/scaffold/no-jsx/README.md +0 -73
- package/scaffold/no-jsx/app/404.ts +0 -10
- package/scaffold/no-jsx/app/assets/view/examples/tasks/TaskExample.ts +0 -39
- package/scaffold/no-jsx/app/index.ts +0 -58
- package/tsconfig.site.no-jsx.json +0 -24
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-state.js","sourceRoot":"","sources":["../../../../../../app/assets/view/examples/tasks/task-state.ts"],"names":[],"mappings":"AAcA,MAAM,cAAc,GAAoD;IACpE,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ;IAC9B,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI;IACf,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ;CACnC,CAAC;AAEF,uDAAuD;AACvD,MAAM,UAAU,eAAe,CAAC,KAAgB;IAC5C,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,kBAAkB,CAAC,KAAgB;IAC/C,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;IAC9C,OAAO,WAAW,OAAO,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,YAAY,KAAK,CAAC,MAAM,UAAU,CAAC;AACpG,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB;IAClC,OAAO;QACH,MAAM,EAAE,KAAK;QACb,KAAK,EAAE;YACH,EAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAC;YACvD,EAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,kCAAkC,EAAC;SACtE;KACJ,CAAC;AACN,CAAC","sourcesContent":["/** Shared state shape used by build-time
|
|
1
|
+
{"version":3,"file":"task-state.js","sourceRoot":"","sources":["../../../../../../app/assets/view/examples/tasks/task-state.ts"],"names":[],"mappings":"AAcA,MAAM,cAAc,GAAoD;IACpE,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ;IAC9B,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI;IACf,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ;CACnC,CAAC;AAEF,uDAAuD;AACvD,MAAM,UAAU,eAAe,CAAC,KAAgB;IAC5C,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,kBAAkB,CAAC,KAAgB;IAC/C,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;IAC9C,OAAO,WAAW,OAAO,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,YAAY,KAAK,CAAC,MAAM,UAAU,CAAC;AACpG,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB;IAClC,OAAO;QACH,MAAM,EAAE,KAAK;QACb,KAAK,EAAE;YACH,EAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAC;YACvD,EAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,kCAAkC,EAAC;SACtE;KACJ,CAAC;AACN,CAAC","sourcesContent":["/** Shared state shape used by build-time tagged HTML and the browser application. */\nexport type TaskFilter = 'all' | 'active' | 'completed';\n\nexport interface TaskItem {\n complete: boolean;\n id: number;\n title: string;\n}\n\nexport interface TaskState extends Record<PropertyKey, unknown> {\n filter: TaskFilter;\n tasks: TaskItem[];\n}\n\nconst taskPredicates: Record<TaskFilter, (task: TaskItem) => boolean> = {\n active: task => !task.complete,\n all: () => true,\n completed: task => task.complete\n};\n\n/** Return the tasks visible for the current filter. */\nexport function getVisibleTasks(state: TaskState): TaskItem[] {\n return state.tasks.filter(taskPredicates[state.filter]);\n}\n\n/** Describe the currently rendered task result for assistive technology. */\nexport function describeTaskStatus(state: TaskState): string {\n const visible = getVisibleTasks(state).length;\n return `Showing ${visible} ${visible === 1 ? 'task' : 'tasks'} for the ${state.filter} filter.`;\n}\n\n/**\n * Return fresh demo data for each application instance.\n *\n * A factory avoids sharing mutable state between tests, pages, or future\n * server-side renders while keeping the initial HTML deterministic.\n */\nexport function createInitialTaskState(): TaskState {\n return {\n filter: 'all',\n tasks: [\n {complete: true, id: 1, title: 'Read the architecture'},\n {complete: false, id: 2, title: 'Build something with White Label'}\n ]\n };\n}\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/**
|
|
2
|
-
export default function SiteFooter(): import("white-label-view/
|
|
1
|
+
/** Keep reusable static page chrome as a small tagged-template function. */
|
|
2
|
+
export default function SiteFooter(): import("white-label-view/html").HTMLMarkup;
|
|
@@ -1,6 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
/**
|
|
1
|
+
import { html } from 'white-label-view/html';
|
|
2
|
+
/** Keep reusable static page chrome as a small tagged-template function. */
|
|
3
3
|
export default function SiteFooter() {
|
|
4
|
-
return
|
|
4
|
+
return html `<footer class="site-footer">
|
|
5
|
+
<div class="container site-footer__inner">
|
|
6
|
+
<p>White Label. Framework-independent TypeScript building blocks.</p>
|
|
7
|
+
<a href="#top">Back to top</a>
|
|
8
|
+
</div>
|
|
9
|
+
</footer>`;
|
|
5
10
|
}
|
|
6
11
|
//# sourceMappingURL=SiteFooter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SiteFooter.js","sourceRoot":"","sources":["../../../../../app/assets/view/layout/SiteFooter.
|
|
1
|
+
{"version":3,"file":"SiteFooter.js","sourceRoot":"","sources":["../../../../../app/assets/view/layout/SiteFooter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,uBAAuB,CAAC;AAE3C,4EAA4E;AAC5E,MAAM,CAAC,OAAO,UAAU,UAAU;IAC9B,OAAO,IAAI,CAAA;;;;;kBAKG,CAAC;AACnB,CAAC","sourcesContent":["import {html} from 'white-label-view/html';\n\n/** Keep reusable static page chrome as a small tagged-template function. */\nexport default function SiteFooter() {\n return html`<footer class=\"site-footer\">\n <div class=\"container site-footer__inner\">\n <p>White Label. Framework-independent TypeScript building blocks.</p>\n <a href=\"#top\">Back to top</a>\n </div>\n </footer>`;\n}\n"]}
|
|
@@ -1,8 +1,2 @@
|
|
|
1
|
-
/**
|
|
2
|
-
|
|
3
|
-
*
|
|
4
|
-
* White Label's router enhances only links that opt in with data-pushstate,
|
|
5
|
-
* so global navigation stays conventional, crawlable, and usable without
|
|
6
|
-
* client-side JavaScript.
|
|
7
|
-
*/
|
|
8
|
-
export default function SiteHeader(): import("white-label-view/jsx-runtime").JSXMarkup;
|
|
1
|
+
/** Static navigation remains ordinary crawlable HTML; JavaScript enhances only opted-in links. */
|
|
2
|
+
export default function SiteHeader(): import("white-label-view/html").HTMLMarkup;
|
|
@@ -1,12 +1,17 @@
|
|
|
1
|
-
import {
|
|
2
|
-
/**
|
|
3
|
-
* Static navigation is ordinary HTML first.
|
|
4
|
-
*
|
|
5
|
-
* White Label's router enhances only links that opt in with data-pushstate,
|
|
6
|
-
* so global navigation stays conventional, crawlable, and usable without
|
|
7
|
-
* client-side JavaScript.
|
|
8
|
-
*/
|
|
1
|
+
import { html } from 'white-label-view/html';
|
|
2
|
+
/** Static navigation remains ordinary crawlable HTML; JavaScript enhances only opted-in links. */
|
|
9
3
|
export default function SiteHeader() {
|
|
10
|
-
return
|
|
4
|
+
return html `<header class="site-header">
|
|
5
|
+
<div class="container site-header__inner">
|
|
6
|
+
<a class="wordmark" href="#top">White Label</a>
|
|
7
|
+
<nav aria-label="Primary navigation">
|
|
8
|
+
<a href="#example">Example</a>
|
|
9
|
+
<a href="#packages">Packages</a>
|
|
10
|
+
<a href="#source">Source</a>
|
|
11
|
+
<a href="#start">Get started</a>
|
|
12
|
+
<a href="https://github.com/bshack/white-label">GitHub</a>
|
|
13
|
+
</nav>
|
|
14
|
+
</div>
|
|
15
|
+
</header>`;
|
|
11
16
|
}
|
|
12
17
|
//# sourceMappingURL=SiteHeader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SiteHeader.js","sourceRoot":"","sources":["../../../../../app/assets/view/layout/SiteHeader.
|
|
1
|
+
{"version":3,"file":"SiteHeader.js","sourceRoot":"","sources":["../../../../../app/assets/view/layout/SiteHeader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,uBAAuB,CAAC;AAE3C,kGAAkG;AAClG,MAAM,CAAC,OAAO,UAAU,UAAU;IAC9B,OAAO,IAAI,CAAA;;;;;;;;;;;kBAWG,CAAC;AACnB,CAAC","sourcesContent":["import {html} from 'white-label-view/html';\n\n/** Static navigation remains ordinary crawlable HTML; JavaScript enhances only opted-in links. */\nexport default function SiteHeader() {\n return html`<header class=\"site-header\">\n <div class=\"container site-header__inner\">\n <a class=\"wordmark\" href=\"#top\">White Label</a>\n <nav aria-label=\"Primary navigation\">\n <a href=\"#example\">Example</a>\n <a href=\"#packages\">Packages</a>\n <a href=\"#source\">Source</a>\n <a href=\"#start\">Get started</a>\n <a href=\"https://github.com/bshack/white-label\">GitHub</a>\n </nav>\n </div>\n </header>`;\n}\n"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Build-time data available to every page template.
|
|
3
3
|
*
|
|
4
|
-
* Keeping this contract separate from the
|
|
5
|
-
*
|
|
4
|
+
* Keeping this contract separate from the renderer keeps top-level tagged
|
|
5
|
+
* HTML focused on application composition instead of deployment plumbing.
|
|
6
6
|
*/
|
|
7
7
|
export interface PageData {
|
|
8
8
|
cdn: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-data.js","sourceRoot":"","sources":["../../../../app/assets/view/page-data.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * Build-time data available to every page template.\n *\n * Keeping this contract separate from the
|
|
1
|
+
{"version":3,"file":"page-data.js","sourceRoot":"","sources":["../../../../app/assets/view/page-data.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * Build-time data available to every page template.\n *\n * Keeping this contract separate from the renderer keeps top-level tagged\n * HTML focused on application composition instead of deployment plumbing.\n */\nexport interface PageData {\n cdn: string;\n meta: {description: string};\n siteUrl: string;\n structuredData: unknown;\n title: string;\n version: string;\n}\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/** Keep the shortest path from generator install to a verified local build visible. */
|
|
2
|
-
export default function GettingStartedSection(): import("white-label-view/
|
|
2
|
+
export default function GettingStartedSection(): import("white-label-view/html").HTMLMarkup;
|
|
@@ -1,11 +1,26 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { html } from 'white-label-view/html';
|
|
2
2
|
import CodeBlock, { syntax } from '../CodeBlock.js';
|
|
3
3
|
/** Keep the shortest path from generator install to a verified local build visible. */
|
|
4
4
|
export default function GettingStartedSection() {
|
|
5
|
-
return
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
return html `<section class="section" id="start" aria-labelledby="start-title">
|
|
6
|
+
<div class="container start-grid">
|
|
7
|
+
<div class="section-intro">
|
|
8
|
+
<p class="eyebrow">Get started</p>
|
|
9
|
+
<h2 id="start-title">Create a project with the generator.</h2>
|
|
10
|
+
<p>The generated project is static-first, TypeScript-first, accessible by default, and ready for application-specific code.</p>
|
|
11
|
+
</div>
|
|
12
|
+
<div>
|
|
13
|
+
<p class="code-label">Create a project</p>
|
|
14
|
+
${CodeBlock({ lines: [html `<span class="${syntax.type}">npx</span> generator-white-label`] })}
|
|
15
|
+
<p class="code-label">Then develop</p>
|
|
16
|
+
${CodeBlock({ lines: [
|
|
17
|
+
html `<span class="${syntax.type}">npm</span> ci`,
|
|
18
|
+
html `<span class="${syntax.type}">npm</span> test`,
|
|
19
|
+
html `<span class="${syntax.type}">npm</span> run build -- --version=<span class="${syntax.value}">local</span>`
|
|
20
|
+
] })}
|
|
21
|
+
<p><a href="https://github.com/bshack/white-label#readme">Read the complete generator documentation</a></p>
|
|
22
|
+
</div>
|
|
23
|
+
</div>
|
|
24
|
+
</section>`;
|
|
10
25
|
}
|
|
11
26
|
//# sourceMappingURL=GettingStartedSection.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GettingStartedSection.js","sourceRoot":"","sources":["../../../../../app/assets/view/sections/GettingStartedSection.
|
|
1
|
+
{"version":3,"file":"GettingStartedSection.js","sourceRoot":"","sources":["../../../../../app/assets/view/sections/GettingStartedSection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,uBAAuB,CAAC;AAC3C,OAAO,SAAS,EAAE,EAAC,MAAM,EAAC,MAAM,iBAAiB,CAAC;AAElD,uFAAuF;AACvF,MAAM,CAAC,OAAO,UAAU,qBAAqB;IACzC,OAAO,IAAI,CAAA;;;;;;;;;sBASO,SAAS,CAAC,EAAC,KAAK,EAAE,CAAC,IAAI,CAAA,gBAAgB,MAAM,CAAC,IAAI,oCAAoC,CAAC,EAAC,CAAC;;sBAEzF,SAAS,CAAC,EAAC,KAAK,EAAE;YAChB,IAAI,CAAA,gBAAgB,MAAM,CAAC,IAAI,iBAAiB;YAChD,IAAI,CAAA,gBAAgB,MAAM,CAAC,IAAI,mBAAmB;YAClD,IAAI,CAAA,gBAAgB,MAAM,CAAC,IAAI,oDAAoD,MAAM,CAAC,KAAK,gBAAgB;SAClH,EAAC,CAAC;;;;mBAIJ,CAAC;AACpB,CAAC","sourcesContent":["import {html} from 'white-label-view/html';\nimport CodeBlock, {syntax} from '../CodeBlock.js';\n\n/** Keep the shortest path from generator install to a verified local build visible. */\nexport default function GettingStartedSection() {\n return html`<section class=\"section\" id=\"start\" aria-labelledby=\"start-title\">\n <div class=\"container start-grid\">\n <div class=\"section-intro\">\n <p class=\"eyebrow\">Get started</p>\n <h2 id=\"start-title\">Create a project with the generator.</h2>\n <p>The generated project is static-first, TypeScript-first, accessible by default, and ready for application-specific code.</p>\n </div>\n <div>\n <p class=\"code-label\">Create a project</p>\n ${CodeBlock({lines: [html`<span class=\"${syntax.type}\">npx</span> generator-white-label`]})}\n <p class=\"code-label\">Then develop</p>\n ${CodeBlock({lines: [\n html`<span class=\"${syntax.type}\">npm</span> ci`,\n html`<span class=\"${syntax.type}\">npm</span> test`,\n html`<span class=\"${syntax.type}\">npm</span> run build -- --version=<span class=\"${syntax.value}\">local</span>`\n ]})}\n <p><a href=\"https://github.com/bshack/white-label#readme\">Read the complete generator documentation</a></p>\n </div>\n </div>\n </section>`;\n}\n"]}
|
|
@@ -1,8 +1,2 @@
|
|
|
1
|
-
/**
|
|
2
|
-
|
|
3
|
-
*
|
|
4
|
-
* White Label does not require every piece of markup to become a stateful
|
|
5
|
-
* View instance. Use View where lifecycle or observable state is useful;
|
|
6
|
-
* keep static presentation simple.
|
|
7
|
-
*/
|
|
8
|
-
export default function HeroSection(): import("white-label-view/jsx-runtime").JSXMarkup;
|
|
1
|
+
/** Static presentation stays a plain tagged-template function; View is only needed for lifecycle/state. */
|
|
2
|
+
export default function HeroSection(): import("white-label-view/html").HTMLMarkup;
|
|
@@ -1,12 +1,15 @@
|
|
|
1
|
-
import {
|
|
2
|
-
/**
|
|
3
|
-
* Marketing content can stay a plain JSX function.
|
|
4
|
-
*
|
|
5
|
-
* White Label does not require every piece of markup to become a stateful
|
|
6
|
-
* View instance. Use View where lifecycle or observable state is useful;
|
|
7
|
-
* keep static presentation simple.
|
|
8
|
-
*/
|
|
1
|
+
import { html } from 'white-label-view/html';
|
|
2
|
+
/** Static presentation stays a plain tagged-template function; View is only needed for lifecycle/state. */
|
|
9
3
|
export default function HeroSection() {
|
|
10
|
-
return
|
|
4
|
+
return html `<section class="hero" id="top" aria-labelledby="hero-title">
|
|
5
|
+
<div class="container hero__inner">
|
|
6
|
+
<h1 id="hero-title">Small pieces.<br>Complete applications.</h1>
|
|
7
|
+
<p class="hero__lede">Framework-independent TypeScript packages for state, rendering, coordination, routing, and project generation.</p>
|
|
8
|
+
<div class="hero__links">
|
|
9
|
+
<a class="primary-link" href="#example">See the example</a>
|
|
10
|
+
<a href="#start">Install the generator</a>
|
|
11
|
+
</div>
|
|
12
|
+
</div>
|
|
13
|
+
</section>`;
|
|
11
14
|
}
|
|
12
15
|
//# sourceMappingURL=HeroSection.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HeroSection.js","sourceRoot":"","sources":["../../../../../app/assets/view/sections/HeroSection.
|
|
1
|
+
{"version":3,"file":"HeroSection.js","sourceRoot":"","sources":["../../../../../app/assets/view/sections/HeroSection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,uBAAuB,CAAC;AAE3C,2GAA2G;AAC3G,MAAM,CAAC,OAAO,UAAU,WAAW;IAC/B,OAAO,IAAI,CAAA;;;;;;;;;mBASI,CAAC;AACpB,CAAC","sourcesContent":["import {html} from 'white-label-view/html';\n\n/** Static presentation stays a plain tagged-template function; View is only needed for lifecycle/state. */\nexport default function HeroSection() {\n return html`<section class=\"hero\" id=\"top\" aria-labelledby=\"hero-title\">\n <div class=\"container hero__inner\">\n <h1 id=\"hero-title\">Small pieces.<br>Complete applications.</h1>\n <p class=\"hero__lede\">Framework-independent TypeScript packages for state, rendering, coordination, routing, and project generation.</p>\n <div class=\"hero__links\">\n <a class=\"primary-link\" href=\"#example\">See the example</a>\n <a href=\"#start\">Install the generator</a>\n </div>\n </div>\n </section>`;\n}\n"]}
|
|
@@ -1,6 +1,2 @@
|
|
|
1
|
-
/**
|
|
2
|
-
|
|
3
|
-
* by white-label-view in the browser. JavaScript adds behavior; it does not
|
|
4
|
-
* need to invent the initial document.
|
|
5
|
-
*/
|
|
6
|
-
export default function LiveExampleSection(): import("white-label-view/jsx-runtime").JSXMarkup;
|
|
1
|
+
/** Render useful initial HTML with the same tagged template reused by Browser View. */
|
|
2
|
+
export default function LiveExampleSection(): import("white-label-view/html").HTMLMarkup;
|
|
@@ -1,13 +1,23 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { html } from 'white-label-view/html';
|
|
2
2
|
import TaskExample from '../examples/tasks/TaskExample.js';
|
|
3
3
|
import { createInitialTaskState, describeTaskStatus } from '../examples/tasks/task-state.js';
|
|
4
|
-
/**
|
|
5
|
-
* The initial task UI is rendered at build time with the same JSX used later
|
|
6
|
-
* by white-label-view in the browser. JavaScript adds behavior; it does not
|
|
7
|
-
* need to invent the initial document.
|
|
8
|
-
*/
|
|
4
|
+
/** Render useful initial HTML with the same tagged template reused by Browser View. */
|
|
9
5
|
export default function LiveExampleSection() {
|
|
10
6
|
const state = createInitialTaskState();
|
|
11
|
-
return
|
|
7
|
+
return html `<section class="section" id="example" aria-labelledby="example-title">
|
|
8
|
+
<div class="container">
|
|
9
|
+
<div class="section-intro">
|
|
10
|
+
<p class="eyebrow">Live example</p>
|
|
11
|
+
<h2 id="example-title">Four packages. One small application.</h2>
|
|
12
|
+
<p>Add a task, toggle its state, or change the filter. Router translates the URL into intent, Mediator coordinates actions, Model owns state, and View keeps the interface in sync.</p>
|
|
13
|
+
</div>
|
|
14
|
+
<div class="demo" data-task-example>
|
|
15
|
+
${TaskExample({ state })}
|
|
16
|
+
<p class="visually-hidden" role="status" aria-live="polite" aria-atomic="true" data-task-status>
|
|
17
|
+
${describeTaskStatus(state)}
|
|
18
|
+
</p>
|
|
19
|
+
</div>
|
|
20
|
+
</div>
|
|
21
|
+
</section>`;
|
|
12
22
|
}
|
|
13
23
|
//# sourceMappingURL=LiveExampleSection.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LiveExampleSection.js","sourceRoot":"","sources":["../../../../../app/assets/view/sections/LiveExampleSection.
|
|
1
|
+
{"version":3,"file":"LiveExampleSection.js","sourceRoot":"","sources":["../../../../../app/assets/view/sections/LiveExampleSection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,uBAAuB,CAAC;AAC3C,OAAO,WAAW,MAAM,kCAAkC,CAAC;AAC3D,OAAO,EAAC,sBAAsB,EAAE,kBAAkB,EAAC,MAAM,iCAAiC,CAAC;AAE3F,uFAAuF;AACvF,MAAM,CAAC,OAAO,UAAU,kBAAkB;IACtC,MAAM,KAAK,GAAG,sBAAsB,EAAE,CAAC;IAEvC,OAAO,IAAI,CAAA;;;;;;;;sBAQO,WAAW,CAAC,EAAC,KAAK,EAAC,CAAC;;0BAEhB,kBAAkB,CAAC,KAAK,CAAC;;;;mBAIhC,CAAC;AACpB,CAAC","sourcesContent":["import {html} from 'white-label-view/html';\nimport TaskExample from '../examples/tasks/TaskExample.js';\nimport {createInitialTaskState, describeTaskStatus} from '../examples/tasks/task-state.js';\n\n/** Render useful initial HTML with the same tagged template reused by Browser View. */\nexport default function LiveExampleSection() {\n const state = createInitialTaskState();\n\n return html`<section class=\"section\" id=\"example\" aria-labelledby=\"example-title\">\n <div class=\"container\">\n <div class=\"section-intro\">\n <p class=\"eyebrow\">Live example</p>\n <h2 id=\"example-title\">Four packages. One small application.</h2>\n <p>Add a task, toggle its state, or change the filter. Router translates the URL into intent, Mediator coordinates actions, Model owns state, and View keeps the interface in sync.</p>\n </div>\n <div class=\"demo\" data-task-example>\n ${TaskExample({state})}\n <p class=\"visually-hidden\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\" data-task-status>\n ${describeTaskStatus(state)}\n </p>\n </div>\n </div>\n </section>`;\n}\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/** Package documentation stays close to the example it describes. */
|
|
2
|
-
export default function PackageDocsSection(): import("white-label-view/
|
|
2
|
+
export default function PackageDocsSection(): import("white-label-view/html").HTMLMarkup;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { html } from 'white-label-view/html';
|
|
2
2
|
import CodeBlock, { syntax } from '../CodeBlock.js';
|
|
3
3
|
const repositories = {
|
|
4
4
|
mediator: 'https://github.com/bshack/white-label-mediator',
|
|
@@ -8,24 +8,61 @@ const repositories = {
|
|
|
8
8
|
};
|
|
9
9
|
/** Package documentation stays close to the example it describes. */
|
|
10
10
|
export default function PackageDocsSection() {
|
|
11
|
-
return
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
11
|
+
return html `<section class="section" id="packages" aria-labelledby="packages-title">
|
|
12
|
+
<div class="container">
|
|
13
|
+
<div class="section-intro">
|
|
14
|
+
<p class="eyebrow">Documentation</p>
|
|
15
|
+
<h2 id="packages-title">The core flow stays explicit.</h2>
|
|
16
|
+
<p>Each package has one job, can be used independently, and stays easy to replace or test because application concerns are not hidden behind a framework.</p>
|
|
17
|
+
</div>
|
|
18
|
+
<div class="architecture"><ol>
|
|
19
|
+
<li><strong>Router</strong><span>turns a URL into application intent</span></li>
|
|
20
|
+
<li><strong>Mediator</strong><span>coordinates that intent between modules</span></li>
|
|
21
|
+
<li><strong>Model</strong><span>stores and publishes application state</span></li>
|
|
22
|
+
<li><strong>View</strong><span>renders the resulting interface</span></li>
|
|
23
|
+
</ol></div>
|
|
24
|
+
<div class="docs-grid">
|
|
25
|
+
<article>
|
|
26
|
+
<p class="eyebrow">Model</p><h3>State is observable, not magical.</h3>
|
|
27
|
+
${CodeBlock({ lines: [
|
|
28
|
+
html `<span class="${syntax.keyword}">const</span> model = <span class="${syntax.keyword}">new</span> <span class="${syntax.type}">Model</span>({count: 0});`,
|
|
29
|
+
html `model.addEventListener(<span class="${syntax.value}">'change'</span>, event => render(event.detail));`,
|
|
30
|
+
html `model.update({count: 1});`
|
|
31
|
+
] })}
|
|
32
|
+
<p><a href="${repositories.model}">Model documentation</a></p>
|
|
33
|
+
</article>
|
|
34
|
+
<article>
|
|
35
|
+
<p class="eyebrow">View</p><h3>Tagged HTML is the first-party template syntax.</h3>
|
|
36
|
+
${CodeBlock({ lines: [
|
|
37
|
+
html `<span class="${syntax.keyword}">import</span> {html} from <span class="${syntax.value}">'white-label-view/html'</span>;`,
|
|
38
|
+
html `<span class="${syntax.keyword}">const</span> view = <span class="${syntax.keyword}">new</span> <span class="${syntax.type}">View</span>({`,
|
|
39
|
+
html ` model,`,
|
|
40
|
+
html ` template: state => html\`${'<p>'}\${state.count}${'</p>'}\``,
|
|
41
|
+
html `}).initialize();`
|
|
42
|
+
] })}
|
|
43
|
+
<p><a href="${repositories.view}">View documentation</a></p>
|
|
44
|
+
</article>
|
|
45
|
+
<article>
|
|
46
|
+
<p class="eyebrow">Mediator</p><h3>Modules communicate through events.</h3>
|
|
47
|
+
${CodeBlock({ lines: [
|
|
48
|
+
html `mediator.addEventListener(<span class="${syntax.value}">'counter:increment'</span>, increment);`,
|
|
49
|
+
html `mediator.dispatchEvent(<span class="${syntax.keyword}">new</span> <span class="${syntax.type}">CustomEvent</span>(<span class="${syntax.value}">'counter:increment'</span>));`
|
|
50
|
+
] })}
|
|
51
|
+
<p><a href="${repositories.mediator}">Mediator documentation</a></p>
|
|
52
|
+
</article>
|
|
53
|
+
<article>
|
|
54
|
+
<p class="eyebrow">Router</p><h3>Routes describe intent.</h3>
|
|
55
|
+
${CodeBlock({ lines: [
|
|
56
|
+
html `router.routes = {`,
|
|
57
|
+
html ` <span class="${syntax.value}">'/'</span>: (_scope, location) => {`,
|
|
58
|
+
html ` mediator.dispatchEvent(<span class="${syntax.keyword}">new</span> <span class="${syntax.type}">CustomEvent</span>(<span class="${syntax.value}">'filter:set'</span>, {detail: location.data.query.filter}));`,
|
|
59
|
+
html ` }`,
|
|
60
|
+
html `};`
|
|
61
|
+
] })}
|
|
62
|
+
<p><a href="${repositories.router}">Router documentation</a></p>
|
|
63
|
+
</article>
|
|
64
|
+
</div>
|
|
65
|
+
</div>
|
|
66
|
+
</section>`;
|
|
30
67
|
}
|
|
31
68
|
//# sourceMappingURL=PackageDocsSection.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PackageDocsSection.js","sourceRoot":"","sources":["../../../../../app/assets/view/sections/PackageDocsSection.
|
|
1
|
+
{"version":3,"file":"PackageDocsSection.js","sourceRoot":"","sources":["../../../../../app/assets/view/sections/PackageDocsSection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,uBAAuB,CAAC;AAC3C,OAAO,SAAS,EAAE,EAAC,MAAM,EAAC,MAAM,iBAAiB,CAAC;AAElD,MAAM,YAAY,GAAG;IACjB,QAAQ,EAAE,gDAAgD;IAC1D,KAAK,EAAE,6CAA6C;IACpD,MAAM,EAAE,8CAA8C;IACtD,IAAI,EAAE,4CAA4C;CACrD,CAAC;AAEF,qEAAqE;AACrE,MAAM,CAAC,OAAO,UAAU,kBAAkB;IACtC,OAAO,IAAI,CAAA;;;;;;;;;;;;;;;;0BAgBW,SAAS,CAAC,EAAC,KAAK,EAAE;YAChB,IAAI,CAAA,gBAAgB,MAAM,CAAC,OAAO,uCAAuC,MAAM,CAAC,OAAO,6BAA6B,MAAM,CAAC,IAAI,6BAA6B;YAC5J,IAAI,CAAA,uCAAuC,MAAM,CAAC,KAAK,uDAAuD;YAC9G,IAAI,CAAA,2BAA2B;SAClC,EAAC,CAAC;sCACW,YAAY,CAAC,KAAK;;;;0BAI9B,SAAS,CAAC,EAAC,KAAK,EAAE;YAChB,IAAI,CAAA,gBAAgB,MAAM,CAAC,OAAO,4CAA4C,MAAM,CAAC,KAAK,mCAAmC;YAC7H,IAAI,CAAA,gBAAgB,MAAM,CAAC,OAAO,sCAAsC,MAAM,CAAC,OAAO,6BAA6B,MAAM,CAAC,IAAI,iBAAiB;YAC/I,IAAI,CAAA,UAAU;YACd,IAAI,CAAA,iCAAiC,KAAK,kBAAkB,MAAM,IAAI;YACtE,IAAI,CAAA,kBAAkB;SACzB,EAAC,CAAC;sCACW,YAAY,CAAC,IAAI;;;;0BAI7B,SAAS,CAAC,EAAC,KAAK,EAAE;YAChB,IAAI,CAAA,0CAA0C,MAAM,CAAC,KAAK,2CAA2C;YACrG,IAAI,CAAA,uCAAuC,MAAM,CAAC,OAAO,6BAA6B,MAAM,CAAC,IAAI,qCAAqC,MAAM,CAAC,KAAK,iCAAiC;SACtL,EAAC,CAAC;sCACW,YAAY,CAAC,QAAQ;;;;0BAIjC,SAAS,CAAC,EAAC,KAAK,EAAE;YAChB,IAAI,CAAA,mBAAmB;YACvB,IAAI,CAAA,kBAAkB,MAAM,CAAC,KAAK,0CAA0C;YAC5E,IAAI,CAAA,2CAA2C,MAAM,CAAC,OAAO,6BAA6B,MAAM,CAAC,IAAI,qCAAqC,MAAM,CAAC,KAAK,gEAAgE;YACtN,IAAI,CAAA,KAAK;YACT,IAAI,CAAA,IAAI;SACX,EAAC,CAAC;sCACW,YAAY,CAAC,MAAM;;;;mBAItC,CAAC;AACpB,CAAC","sourcesContent":["import {html} from 'white-label-view/html';\nimport CodeBlock, {syntax} from '../CodeBlock.js';\n\nconst repositories = {\n mediator: 'https://github.com/bshack/white-label-mediator',\n model: 'https://github.com/bshack/white-label-model',\n router: 'https://github.com/bshack/white-label-router',\n view: 'https://github.com/bshack/white-label-view'\n};\n\n/** Package documentation stays close to the example it describes. */\nexport default function PackageDocsSection() {\n return html`<section class=\"section\" id=\"packages\" aria-labelledby=\"packages-title\">\n <div class=\"container\">\n <div class=\"section-intro\">\n <p class=\"eyebrow\">Documentation</p>\n <h2 id=\"packages-title\">The core flow stays explicit.</h2>\n <p>Each package has one job, can be used independently, and stays easy to replace or test because application concerns are not hidden behind a framework.</p>\n </div>\n <div class=\"architecture\"><ol>\n <li><strong>Router</strong><span>turns a URL into application intent</span></li>\n <li><strong>Mediator</strong><span>coordinates that intent between modules</span></li>\n <li><strong>Model</strong><span>stores and publishes application state</span></li>\n <li><strong>View</strong><span>renders the resulting interface</span></li>\n </ol></div>\n <div class=\"docs-grid\">\n <article>\n <p class=\"eyebrow\">Model</p><h3>State is observable, not magical.</h3>\n ${CodeBlock({lines: [\n html`<span class=\"${syntax.keyword}\">const</span> model = <span class=\"${syntax.keyword}\">new</span> <span class=\"${syntax.type}\">Model</span>({count: 0});`,\n html`model.addEventListener(<span class=\"${syntax.value}\">'change'</span>, event => render(event.detail));`,\n html`model.update({count: 1});`\n ]})}\n <p><a href=\"${repositories.model}\">Model documentation</a></p>\n </article>\n <article>\n <p class=\"eyebrow\">View</p><h3>Tagged HTML is the first-party template syntax.</h3>\n ${CodeBlock({lines: [\n html`<span class=\"${syntax.keyword}\">import</span> {html} from <span class=\"${syntax.value}\">'white-label-view/html'</span>;`,\n html`<span class=\"${syntax.keyword}\">const</span> view = <span class=\"${syntax.keyword}\">new</span> <span class=\"${syntax.type}\">View</span>({`,\n html` model,`,\n html` template: state => html\\`${'<p>'}\\${state.count}${'</p>'}\\``,\n html`}).initialize();`\n ]})}\n <p><a href=\"${repositories.view}\">View documentation</a></p>\n </article>\n <article>\n <p class=\"eyebrow\">Mediator</p><h3>Modules communicate through events.</h3>\n ${CodeBlock({lines: [\n html`mediator.addEventListener(<span class=\"${syntax.value}\">'counter:increment'</span>, increment);`,\n html`mediator.dispatchEvent(<span class=\"${syntax.keyword}\">new</span> <span class=\"${syntax.type}\">CustomEvent</span>(<span class=\"${syntax.value}\">'counter:increment'</span>));`\n ]})}\n <p><a href=\"${repositories.mediator}\">Mediator documentation</a></p>\n </article>\n <article>\n <p class=\"eyebrow\">Router</p><h3>Routes describe intent.</h3>\n ${CodeBlock({lines: [\n html`router.routes = {`,\n html` <span class=\"${syntax.value}\">'/'</span>: (_scope, location) => {`,\n html` mediator.dispatchEvent(<span class=\"${syntax.keyword}\">new</span> <span class=\"${syntax.type}\">CustomEvent</span>(<span class=\"${syntax.value}\">'filter:set'</span>, {detail: location.data.query.filter}));`,\n html` }`,\n html`};`\n ]})}\n <p><a href=\"${repositories.router}\">Router documentation</a></p>\n </article>\n </div>\n </div>\n </section>`;\n}\n"]}
|
|
@@ -1,7 +1,2 @@
|
|
|
1
|
-
/**
|
|
2
|
-
|
|
3
|
-
*
|
|
4
|
-
* The landing page is intentionally organized so each path answers a different
|
|
5
|
-
* question: composition, rendering, state, coordination, routing, or testing.
|
|
6
|
-
*/
|
|
7
|
-
export default function SourceGuideSection(): import("white-label-view/jsx-runtime").JSXMarkup;
|
|
1
|
+
/** Point learners at the implementation paths that demonstrate each responsibility. */
|
|
2
|
+
export default function SourceGuideSection(): import("white-label-view/html").HTMLMarkup;
|
|
@@ -1,11 +1,23 @@
|
|
|
1
|
-
import {
|
|
2
|
-
/**
|
|
3
|
-
* Point learners at the implementation itself.
|
|
4
|
-
*
|
|
5
|
-
* The landing page is intentionally organized so each path answers a different
|
|
6
|
-
* question: composition, rendering, state, coordination, routing, or testing.
|
|
7
|
-
*/
|
|
1
|
+
import { html } from 'white-label-view/html';
|
|
2
|
+
/** Point learners at the implementation paths that demonstrate each responsibility. */
|
|
8
3
|
export default function SourceGuideSection() {
|
|
9
|
-
return
|
|
4
|
+
return html `<section class="section" id="source" aria-labelledby="source-title">
|
|
5
|
+
<div class="container start-grid">
|
|
6
|
+
<div class="section-intro">
|
|
7
|
+
<p class="eyebrow">Read the source</p>
|
|
8
|
+
<h2 id="source-title">This site is part of the documentation.</h2>
|
|
9
|
+
<p>The landing page is built with the same White Label packages it teaches. Start at the page composition, then follow the imports into the interactive example.</p>
|
|
10
|
+
</div>
|
|
11
|
+
<div class="source-paths">
|
|
12
|
+
<dl>
|
|
13
|
+
<div><dt>Page composition</dt><dd><code>app/index.ts</code></dd></div>
|
|
14
|
+
<div><dt>Tagged HTML views</dt><dd><code>app/assets/view/</code></dd></div>
|
|
15
|
+
<div><dt>Task application</dt><dd><code>app/assets/script/tasks/</code></dd></div>
|
|
16
|
+
<div><dt>Integration tests</dt><dd><code>test/app.test.js</code></dd></div>
|
|
17
|
+
</dl>
|
|
18
|
+
<p><a href="https://github.com/bshack/white-label/tree/master/app">Browse the application source</a></p>
|
|
19
|
+
</div>
|
|
20
|
+
</div>
|
|
21
|
+
</section>`;
|
|
10
22
|
}
|
|
11
23
|
//# sourceMappingURL=SourceGuideSection.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SourceGuideSection.js","sourceRoot":"","sources":["../../../../../app/assets/view/sections/SourceGuideSection.
|
|
1
|
+
{"version":3,"file":"SourceGuideSection.js","sourceRoot":"","sources":["../../../../../app/assets/view/sections/SourceGuideSection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,uBAAuB,CAAC;AAE3C,uFAAuF;AACvF,MAAM,CAAC,OAAO,UAAU,kBAAkB;IACtC,OAAO,IAAI,CAAA;;;;;;;;;;;;;;;;;mBAiBI,CAAC;AACpB,CAAC","sourcesContent":["import {html} from 'white-label-view/html';\n\n/** Point learners at the implementation paths that demonstrate each responsibility. */\nexport default function SourceGuideSection() {\n return html`<section class=\"section\" id=\"source\" aria-labelledby=\"source-title\">\n <div class=\"container start-grid\">\n <div class=\"section-intro\">\n <p class=\"eyebrow\">Read the source</p>\n <h2 id=\"source-title\">This site is part of the documentation.</h2>\n <p>The landing page is built with the same White Label packages it teaches. Start at the page composition, then follow the imports into the interactive example.</p>\n </div>\n <div class=\"source-paths\">\n <dl>\n <div><dt>Page composition</dt><dd><code>app/index.ts</code></dd></div>\n <div><dt>Tagged HTML views</dt><dd><code>app/assets/view/</code></dd></div>\n <div><dt>Task application</dt><dd><code>app/assets/script/tasks/</code></dd></div>\n <div><dt>Integration tests</dt><dd><code>test/app.test.js</code></dd></div>\n </dl>\n <p><a href=\"https://github.com/bshack/white-label/tree/master/app\">Browse the application source</a></p>\n </div>\n </div>\n </section>`;\n}\n"]}
|
package/dist/app/index.d.ts
CHANGED
|
@@ -1,8 +1,2 @@
|
|
|
1
|
-
/**
|
|
2
|
-
|
|
3
|
-
*
|
|
4
|
-
* Developers learning White Label can start here to see the complete page at
|
|
5
|
-
* a glance, then follow each import into a focused example. Build-time data is
|
|
6
|
-
* kept at this boundary while individual views stay reusable and easy to read.
|
|
7
|
-
*/
|
|
8
|
-
export default function IndexPage(data: Record<string, unknown>): import("white-label-view/jsx-runtime").JSXMarkup;
|
|
1
|
+
/** Compose the static page from small tagged-template functions. */
|
|
2
|
+
export default function IndexPage(data: Record<string, unknown>): import("white-label-view/html").HTMLMarkup;
|