@dataimago/hub-chrome 0.2.0-alpha.0 → 0.2.0-alpha.1
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/index.cjs +116 -44
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +38 -5
- package/dist/index.d.ts +38 -5
- package/dist/index.js +117 -46
- package/dist/index.js.map +1 -1
- package/package.json +5 -3
package/dist/index.cjs
CHANGED
|
@@ -30,6 +30,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
30
30
|
// src/index.ts
|
|
31
31
|
var index_exports = {};
|
|
32
32
|
__export(index_exports, {
|
|
33
|
+
MinimalFooter: () => MinimalFooter,
|
|
33
34
|
PhilosophyFooter: () => PhilosophyFooter,
|
|
34
35
|
PlatformNav: () => PlatformNav,
|
|
35
36
|
SiteFooter: () => SiteFooter
|
|
@@ -46,6 +47,8 @@ var DEFAULT_LINKS = [
|
|
|
46
47
|
];
|
|
47
48
|
var DEFAULT_CTA = { href: "/onboard", label: "Begin" };
|
|
48
49
|
function PlatformNav({
|
|
50
|
+
brandMark = "dataimago_ai_OVERLAP",
|
|
51
|
+
brandLabel = "dataimago.ai home",
|
|
49
52
|
links = DEFAULT_LINKS,
|
|
50
53
|
cta = DEFAULT_CTA,
|
|
51
54
|
navLabel = "Primary",
|
|
@@ -57,23 +60,21 @@ function PlatformNav({
|
|
|
57
60
|
className: "mx-auto flex max-w-7xl items-center justify-between px-6 py-4",
|
|
58
61
|
"aria-label": navLabel,
|
|
59
62
|
children: [
|
|
60
|
-
/* @__PURE__ */ (0, import_jsx_runtime.
|
|
63
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
61
64
|
import_link.default,
|
|
62
65
|
{
|
|
63
66
|
href: homeHref,
|
|
64
|
-
className: "
|
|
65
|
-
"aria-label":
|
|
66
|
-
children:
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "font-mono text-sm text-stone-500", children: ".ai" })
|
|
76
|
-
]
|
|
67
|
+
className: "flex items-center text-stone-900 transition hover:opacity-80",
|
|
68
|
+
"aria-label": brandLabel,
|
|
69
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
70
|
+
import_ui.Logo,
|
|
71
|
+
{
|
|
72
|
+
name: brandMark,
|
|
73
|
+
variant: "PATH",
|
|
74
|
+
"aria-hidden": true,
|
|
75
|
+
className: "[&_svg]:h-7 [&_svg]:w-auto sm:[&_svg]:h-8"
|
|
76
|
+
}
|
|
77
|
+
)
|
|
77
78
|
}
|
|
78
79
|
),
|
|
79
80
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center gap-2 sm:gap-6", children: [
|
|
@@ -130,21 +131,12 @@ var DEFAULT_COLUMNS = [
|
|
|
130
131
|
external: true
|
|
131
132
|
}
|
|
132
133
|
]
|
|
133
|
-
},
|
|
134
|
-
{
|
|
135
|
-
heading: "Legacy",
|
|
136
|
-
links: [
|
|
137
|
-
{ label: "super-alignment" },
|
|
138
|
-
{ label: "human-centered ai" },
|
|
139
|
-
{ label: "critical transformation" }
|
|
140
|
-
]
|
|
141
134
|
}
|
|
142
135
|
];
|
|
143
|
-
var DEFAULT_CLOSING = '"dataimago is the instantiation of critical theory in software."';
|
|
144
136
|
function SiteFooter({
|
|
145
137
|
tagline = DEFAULT_TAGLINE,
|
|
146
138
|
columns = DEFAULT_COLUMNS,
|
|
147
|
-
closingStatement
|
|
139
|
+
closingStatement
|
|
148
140
|
}) {
|
|
149
141
|
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
150
142
|
"footer",
|
|
@@ -154,14 +146,27 @@ function SiteFooter({
|
|
|
154
146
|
children: /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { className: "mx-auto max-w-6xl px-6 py-12", children: [
|
|
155
147
|
/* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { className: "grid gap-8 md:grid-cols-4", children: [
|
|
156
148
|
/* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { children: [
|
|
157
|
-
/* @__PURE__ */ (0, import_jsx_runtime2.
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
149
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
150
|
+
import_link2.default,
|
|
151
|
+
{
|
|
152
|
+
href: "/",
|
|
153
|
+
className: "inline-flex items-center text-stone-100 transition hover:opacity-80",
|
|
154
|
+
"aria-label": "dataimago",
|
|
155
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
156
|
+
import_ui2.Logo,
|
|
157
|
+
{
|
|
158
|
+
name: "dataimago",
|
|
159
|
+
variant: "PATH",
|
|
160
|
+
"aria-hidden": true,
|
|
161
|
+
className: "[&_svg]:h-7 [&_svg]:w-auto"
|
|
162
|
+
}
|
|
163
|
+
)
|
|
164
|
+
}
|
|
165
|
+
),
|
|
161
166
|
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("p", { className: "mt-3 text-xs text-stone-400", children: tagline })
|
|
162
167
|
] }),
|
|
163
168
|
columns.map((col) => /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { children: [
|
|
164
|
-
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("h4", { className: "font-mono text-xs uppercase tracking-wider text-accent-
|
|
169
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("h4", { className: "font-mono text-xs uppercase tracking-wider text-accent-300", children: col.heading }),
|
|
165
170
|
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("ul", { className: "mt-3 space-y-2 text-sm", children: col.links.map(({ href, label, external }) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("li", { children: !href ? label : external ? /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
166
171
|
"a",
|
|
167
172
|
{
|
|
@@ -174,14 +179,80 @@ function SiteFooter({
|
|
|
174
179
|
) : /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_link2.default, { href, className: "hover:text-paper-100", children: label }) }, label)) })
|
|
175
180
|
] }, col.heading))
|
|
176
181
|
] }),
|
|
177
|
-
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: "mt-12 border-t border-stone-800 pt-6 text-xs text-stone-400", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("p", { children: closingStatement }) })
|
|
182
|
+
closingStatement ? /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: "mt-12 border-t border-stone-800 pt-6 text-xs text-stone-400", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("p", { children: closingStatement }) }) : null
|
|
178
183
|
] })
|
|
179
184
|
}
|
|
180
185
|
);
|
|
181
186
|
}
|
|
182
187
|
|
|
183
|
-
// src/
|
|
188
|
+
// src/MinimalFooter.tsx
|
|
189
|
+
var import_link3 = __toESM(require("next/link"), 1);
|
|
190
|
+
var import_ui3 = require("@dataimago/ui");
|
|
184
191
|
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
192
|
+
var DEFAULT_BRAND_HREF = "https://dataimago.ai";
|
|
193
|
+
var DEFAULT_EMBODIMENT = "An embodiment of dataimago";
|
|
194
|
+
function MinimalFooter({
|
|
195
|
+
brandHref = DEFAULT_BRAND_HREF,
|
|
196
|
+
embodimentLabel = DEFAULT_EMBODIMENT,
|
|
197
|
+
links = [],
|
|
198
|
+
copyright
|
|
199
|
+
}) {
|
|
200
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
201
|
+
"footer",
|
|
202
|
+
{
|
|
203
|
+
className: "border-t border-stone-800 bg-stone-900 text-stone-400",
|
|
204
|
+
"data-bs-theme": "dark",
|
|
205
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "mx-auto flex max-w-6xl flex-col items-center gap-4 px-6 py-10 text-center", children: [
|
|
206
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
207
|
+
"a",
|
|
208
|
+
{
|
|
209
|
+
href: brandHref,
|
|
210
|
+
className: "inline-flex flex-col items-center gap-2 text-stone-100 transition hover:opacity-80",
|
|
211
|
+
target: "_blank",
|
|
212
|
+
rel: "noreferrer",
|
|
213
|
+
"aria-label": `${embodimentLabel} \u2014 visit dataimago.ai`,
|
|
214
|
+
children: [
|
|
215
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
216
|
+
import_ui3.Logo,
|
|
217
|
+
{
|
|
218
|
+
name: "dataimago",
|
|
219
|
+
variant: "PATH",
|
|
220
|
+
"aria-hidden": true,
|
|
221
|
+
className: "[&_svg]:h-7 [&_svg]:w-auto"
|
|
222
|
+
}
|
|
223
|
+
),
|
|
224
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "text-sm text-stone-400", children: embodimentLabel })
|
|
225
|
+
]
|
|
226
|
+
}
|
|
227
|
+
),
|
|
228
|
+
links.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
229
|
+
"nav",
|
|
230
|
+
{
|
|
231
|
+
className: "flex flex-wrap items-center justify-center gap-x-6 gap-y-2 text-sm",
|
|
232
|
+
"aria-label": "Footer",
|
|
233
|
+
children: links.map(
|
|
234
|
+
({ href, label, external }) => !href ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "text-stone-400", children: label }, label) : external ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
235
|
+
"a",
|
|
236
|
+
{
|
|
237
|
+
href,
|
|
238
|
+
className: "text-stone-300 hover:text-paper-100",
|
|
239
|
+
target: "_blank",
|
|
240
|
+
rel: "noreferrer",
|
|
241
|
+
children: label
|
|
242
|
+
},
|
|
243
|
+
label
|
|
244
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_link3.default, { href, className: "text-stone-300 hover:text-paper-100", children: label }, label)
|
|
245
|
+
)
|
|
246
|
+
}
|
|
247
|
+
) : null,
|
|
248
|
+
copyright ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("p", { className: "text-xs text-stone-400", children: copyright }) : null
|
|
249
|
+
] })
|
|
250
|
+
}
|
|
251
|
+
);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
// src/PhilosophyFooter.tsx
|
|
255
|
+
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
185
256
|
var DEFAULT_PAIRS = [
|
|
186
257
|
{
|
|
187
258
|
eyebrow: "our belief",
|
|
@@ -202,48 +273,49 @@ var DEFAULT_QUOTE = {
|
|
|
202
273
|
work: "Xerox and Infinity",
|
|
203
274
|
year: 1988
|
|
204
275
|
};
|
|
205
|
-
var
|
|
276
|
+
var DEFAULT_CLOSING = "dataimago is the structural answer to this critique. Every architectural choice \u2014 R as source of truth, editorial authority with the domain expert, the non-destructive retrofit principle, the ecosystem-as-commons \u2014 refuses to release the scholar from responsibility to their own knowledge. The AI serves the culture; the culture governs the AI.";
|
|
206
277
|
function PhilosophyFooter({
|
|
207
278
|
pairs = DEFAULT_PAIRS,
|
|
208
279
|
quote = DEFAULT_QUOTE,
|
|
209
|
-
closingStatement =
|
|
280
|
+
closingStatement = DEFAULT_CLOSING
|
|
210
281
|
}) {
|
|
211
|
-
return /* @__PURE__ */ (0,
|
|
282
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
212
283
|
"section",
|
|
213
284
|
{
|
|
214
285
|
"aria-labelledby": "philosophy-heading",
|
|
215
286
|
className: "border-t border-stone-200 bg-stone-900 py-20 text-paper-100 sm:py-28",
|
|
216
|
-
children: /* @__PURE__ */ (0,
|
|
217
|
-
/* @__PURE__ */ (0,
|
|
218
|
-
/* @__PURE__ */ (0,
|
|
219
|
-
i === 0 ? /* @__PURE__ */ (0,
|
|
287
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-auto max-w-6xl px-6", children: [
|
|
288
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "grid gap-12 lg:grid-cols-3", children: pairs.map((pair, i) => /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { children: [
|
|
289
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "font-mono text-xs uppercase tracking-wider text-accent-500", children: pair.eyebrow }),
|
|
290
|
+
i === 0 ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
220
291
|
"h3",
|
|
221
292
|
{
|
|
222
293
|
id: "philosophy-heading",
|
|
223
294
|
className: "mt-2 font-display text-xl text-paper-100",
|
|
224
295
|
children: pair.body
|
|
225
296
|
}
|
|
226
|
-
) : /* @__PURE__ */ (0,
|
|
297
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mt-2 font-display text-xl text-paper-100", children: pair.body })
|
|
227
298
|
] }, i)) }),
|
|
228
|
-
/* @__PURE__ */ (0,
|
|
229
|
-
/* @__PURE__ */ (0,
|
|
230
|
-
/* @__PURE__ */ (0,
|
|
299
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("blockquote", { className: "mt-16 max-w-prose-wide border-l-2 border-copper-500 pl-6 font-display italic text-paper-100", children: [
|
|
300
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "text-base leading-relaxed", children: quote.text }),
|
|
301
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("footer", { className: "mt-4 text-sm not-italic text-stone-400", children: [
|
|
231
302
|
"\u2014 ",
|
|
232
303
|
quote.attribution,
|
|
233
304
|
", ",
|
|
234
|
-
/* @__PURE__ */ (0,
|
|
305
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("cite", { children: quote.work }),
|
|
235
306
|
" (",
|
|
236
307
|
quote.year,
|
|
237
308
|
")"
|
|
238
309
|
] })
|
|
239
310
|
] }),
|
|
240
|
-
/* @__PURE__ */ (0,
|
|
311
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mt-8 max-w-prose-wide text-sm text-stone-400", children: closingStatement })
|
|
241
312
|
] })
|
|
242
313
|
}
|
|
243
314
|
);
|
|
244
315
|
}
|
|
245
316
|
// Annotate the CommonJS export names for ESM import in node:
|
|
246
317
|
0 && (module.exports = {
|
|
318
|
+
MinimalFooter,
|
|
247
319
|
PhilosophyFooter,
|
|
248
320
|
PlatformNav,
|
|
249
321
|
SiteFooter
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/PlatformNav.tsx","../src/SiteFooter.tsx","../src/PhilosophyFooter.tsx"],"sourcesContent":["/**\n * @dataimago/hub-chrome — public surface barrel.\n *\n * All three chrome components are named exports. The original apps/hub\n * versions were default exports; the package exposes them as named exports\n * for tree-shaking and to keep the import surface symmetric with\n * @dataimago/ui and @dataimago/interview.\n */\nexport { PlatformNav } from './PlatformNav';\nexport { SiteFooter } from './SiteFooter';\nexport { PhilosophyFooter } from './PhilosophyFooter';\n\nexport type {\n NavLink,\n FooterColumn,\n EditorialPair,\n PullQuote,\n PlatformNavProps,\n SiteFooterProps,\n PhilosophyFooterProps,\n} from './types';\n","'use client';\n\nimport Link from 'next/link';\nimport { LogoMonogramBg } from '@dataimago/ui';\nimport type { PlatformNavProps } from './types';\n\n/**\n * Platform navigation — sticky header with logo + nav link cluster.\n *\n * Iteration-2-tail (Plan A, 2026-05-07):\n * The wordmark is the LogoMonogramBg badge — the 'ai' SVG monogram on a\n * sky-blue rounded accent backplate sourced from @dataimago/ui — paired\n * with a \".ai\" mono span. Hover shifts the backplate from accent-500 to\n * accent-600 via a scoped CSS-variable override on the Link's group.\n *\n * Extracted from apps/hub into @dataimago/hub-chrome during iteration-3-B.2\n * (2026-05-11) to make the chrome available to Level-2 verticals. The\n * `links` and `cta` props allow per-vertical nav customization; all props\n * default to the Level-1 hub configuration.\n */\n\nconst DEFAULT_LINKS = [\n { href: '/ecosystem', label: 'Ecosystem' },\n { href: '/philosophy', label: 'Philosophy' },\n];\n\nconst DEFAULT_CTA = { href: '/onboard', label: 'Begin' };\n\nexport function PlatformNav({\n links = DEFAULT_LINKS,\n cta = DEFAULT_CTA,\n navLabel = 'Primary',\n homeHref = '/',\n}: PlatformNavProps) {\n return (\n <header className=\"sticky top-0 z-40 border-b border-stone-200 bg-stone-100/95 backdrop-blur-sm\">\n <nav\n className=\"mx-auto flex max-w-7xl items-center justify-between px-6 py-4\"\n aria-label={navLabel}\n >\n <Link\n href={homeHref}\n className=\"group flex items-center gap-1.5 hover:[--color-interactive-accent:#154d6f]\"\n aria-label=\"dataimago.ai home\"\n >\n <LogoMonogramBg\n className=\"h-8 w-8 sm:h-9 sm:w-9\"\n aria-hidden\n title={undefined}\n />\n <span className=\"font-mono text-sm text-stone-500\">.ai</span>\n </Link>\n\n <div className=\"flex items-center gap-2 sm:gap-6\">\n {links.map(({ href, label, external }) =>\n external ? (\n <a\n key={href}\n href={href}\n className=\"btn-ghost hidden sm:inline-flex\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {label}\n </a>\n ) : (\n <Link key={href} href={href} className=\"btn-ghost hidden sm:inline-flex\">\n {label}\n </Link>\n )\n )}\n <Link href={cta.href} className=\"btn-primary\">\n {cta.label}\n </Link>\n </div>\n </nav>\n </header>\n );\n}\n","'use client';\n\nimport Link from 'next/link';\nimport { LogoWordmark } from '@dataimago/ui';\nimport type { SiteFooterProps } from './types';\n\n/**\n * Site footer — dark-surface footer with wordmark + nav column grid.\n *\n * Iteration-2-tail (Plan A, 2026-05-07):\n * The wordmark is the LogoWordmark SVG on a sky-blue backplate, scoped to\n * dark-surface token resolution via data-bs-theme=\"dark\". The backplate\n * resolves to accent-300 (#3498DB) on bg-stone-900 at 5.41:1 AA.\n *\n * Extracted from apps/hub into @dataimago/hub-chrome during iteration-3-B.2\n * (2026-05-11). The `tagline` and `columns` props allow per-vertical\n * customization; all props default to the Level-1 hub configuration.\n *\n * Note (open regression from iteration-2): text-accent-500 column eyebrows\n * render at 2.56:1 on stone-900 because Tailwind's static class binds to the\n * absolute color, not the mode-aware role. Migration to text-accent-300 or a\n * CSS-variable consumer closes the gap. Deferred to iteration-3 candidate.\n */\n\nconst DEFAULT_TAGLINE = 'A living AI-native application ecosystem.';\n\nconst DEFAULT_COLUMNS = [\n {\n heading: 'Platform',\n links: [\n { href: '/onboard', label: 'Begin a project' },\n { href: '/ecosystem', label: 'Ecosystem' },\n { href: '/philosophy', label: 'Philosophy' },\n ],\n },\n {\n heading: 'Framework',\n links: [\n {\n href: 'https://github.com/dataimago/dataimago-design',\n label: 'dataimago-design',\n external: true,\n },\n {\n href: 'https://github.com/dataimago/dataimago-rpkg',\n label: 'dataimago-rpkg',\n external: true,\n },\n {\n href: 'https://github.com/dataimago/dataimago-ai',\n label: 'dataimago-ai',\n external: true,\n },\n ],\n },\n {\n heading: 'Legacy',\n links: [\n { label: 'super-alignment' },\n { label: 'human-centered ai' },\n { label: 'critical transformation' },\n ],\n },\n];\n\nconst DEFAULT_CLOSING =\n '\"dataimago is the instantiation of critical theory in software.\"';\n\nexport function SiteFooter({\n tagline = DEFAULT_TAGLINE,\n columns = DEFAULT_COLUMNS,\n closingStatement = DEFAULT_CLOSING,\n}: SiteFooterProps) {\n return (\n <footer\n className=\"border-t border-stone-800 bg-stone-900 text-stone-400\"\n data-bs-theme=\"dark\"\n >\n <div className=\"mx-auto max-w-6xl px-6 py-12\">\n <div className=\"grid gap-8 md:grid-cols-4\">\n <div>\n <Link href=\"/\" className=\"inline-flex items-center gap-1.5\">\n <LogoWordmark className=\"w-32 sm:w-36\" aria-label=\"dataimago\" />\n <span className=\"font-mono text-xs text-stone-500\">.ai</span>\n </Link>\n <p className=\"mt-3 text-xs text-stone-400\">{tagline}</p>\n </div>\n\n {columns.map((col) => (\n <div key={col.heading}>\n <h4 className=\"font-mono text-xs uppercase tracking-wider text-accent-500\">\n {col.heading}\n </h4>\n <ul className=\"mt-3 space-y-2 text-sm\">\n {col.links.map(({ href, label, external }) => (\n <li key={label}>\n {!href ? (\n label\n ) : external ? (\n <a\n href={href}\n className=\"hover:text-paper-100\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {label}\n </a>\n ) : (\n <Link href={href} className=\"hover:text-paper-100\">\n {label}\n </Link>\n )}\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n\n <div className=\"mt-12 border-t border-stone-800 pt-6 text-xs text-stone-400\">\n <p>{closingStatement}</p>\n </div>\n </div>\n </footer>\n );\n}\n","'use client';\n\nimport type { PhilosophyFooterProps } from './types';\n\n/**\n * Philosophy footer — the platform's moral weight, rendered as a dark\n * editorial section with three belief/mission/vision pairs and a pull-quote.\n *\n * Iteration-1 visual identity (Phase B.3, 2026-05-06):\n * Dark-surface chrome with text-accent-500 eyebrows, font-display body, and\n * the Baudrillard blockquote with border-copper-500 (preserved-decorative-\n * copper per iteration-1 §5.2 governance).\n *\n * Iteration-2 role-shift (2026-05-07): text-accent-500 eyebrows resolve to\n * sky-blue accent-300 (#3498DB) on this dark surface via mode-aware mapping —\n * 5.41:1 on stone-900 (was 3.23:1 AA-large only with copper). The\n * border-copper-500 blockquote frame survives untouched. \"Two warmths\"\n * coexist: cool sky-blue on editorial eyebrows, warm copper on the\n * philosophical-quote frame.\n *\n * Extracted from apps/hub into @dataimago/hub-chrome during iteration-3-B.2\n * (2026-05-11). The `pairs`, `quote`, and `closingStatement` props allow\n * per-vertical adaptation; all props default to the Level-1 hub content.\n */\n\nconst DEFAULT_PAIRS = [\n {\n eyebrow: 'our belief',\n body: 'AI can enable virtuous cycles of improvement in the world.',\n },\n {\n eyebrow: 'our mission',\n body: 'The emancipation of humanity through ai super-alignment.',\n },\n {\n eyebrow: 'our vision',\n body: 'Super-alignment embeds ai in culture, not culture in ai.',\n },\n];\n\nconst DEFAULT_QUOTE = {\n text: `If men create intelligent machines, or fantasize about them, it is either because they secretly despair of their own intelligence or because they are in danger of succumbing to the weight of a monstrous and useless intelligence which they seek to exorcize by transferring it to machines, where they can play with it and make fun of it. By entrusting this burdensome intelligence to machines we are released from any responsibility to knowledge.`,\n attribution: 'Jean Baudrillard',\n work: 'Xerox and Infinity',\n year: 1988,\n};\n\nconst DEFAULT_CLOSING =\n 'dataimago is the structural answer to this critique. Every architectural choice — R as source of truth, editorial authority with the domain expert, the non-destructive retrofit principle, the ecosystem-as-commons — refuses to release the scholar from responsibility to their own knowledge. The AI serves the culture; the culture governs the AI.';\n\nexport function PhilosophyFooter({\n pairs = DEFAULT_PAIRS,\n quote = DEFAULT_QUOTE,\n closingStatement = DEFAULT_CLOSING,\n}: PhilosophyFooterProps) {\n return (\n <section\n aria-labelledby=\"philosophy-heading\"\n className=\"border-t border-stone-200 bg-stone-900 py-20 text-paper-100 sm:py-28\"\n >\n <div className=\"mx-auto max-w-6xl px-6\">\n <div className=\"grid gap-12 lg:grid-cols-3\">\n {pairs.map((pair, i) => (\n <div key={i}>\n <p className=\"font-mono text-xs uppercase tracking-wider text-accent-500\">\n {pair.eyebrow}\n </p>\n {i === 0 ? (\n <h3\n id=\"philosophy-heading\"\n className=\"mt-2 font-display text-xl text-paper-100\"\n >\n {pair.body}\n </h3>\n ) : (\n <p className=\"mt-2 font-display text-xl text-paper-100\">\n {pair.body}\n </p>\n )}\n </div>\n ))}\n </div>\n\n {/* Pull-quote — border-copper-500 PRESERVED: decorative-emphasis\n blockquote frame per iteration-1 §5.2 preserved-decorative-copper\n governance. */}\n <blockquote className=\"mt-16 max-w-prose-wide border-l-2 border-copper-500 pl-6 font-display italic text-paper-100\">\n <p className=\"text-base leading-relaxed\">{quote.text}</p>\n <footer className=\"mt-4 text-sm not-italic text-stone-400\">\n — {quote.attribution}, <cite>{quote.work}</cite> ({quote.year})\n </footer>\n </blockquote>\n\n <p className=\"mt-8 max-w-prose-wide text-sm text-stone-400\">\n {closingStatement}\n </p>\n </div>\n </section>\n );\n}\n"],"mappings":"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","names":["Link","import_link","import_ui","import_jsx_runtime","Link","import_jsx_runtime","DEFAULT_CLOSING"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/PlatformNav.tsx","../src/SiteFooter.tsx","../src/MinimalFooter.tsx","../src/PhilosophyFooter.tsx"],"sourcesContent":["/**\n * @dataimago/hub-chrome — public surface barrel.\n *\n * All three chrome components are named exports. The original apps/hub\n * versions were default exports; the package exposes them as named exports\n * for tree-shaking and to keep the import surface symmetric with\n * @dataimago/ui and @dataimago/interview.\n */\nexport { PlatformNav } from './PlatformNav';\nexport { SiteFooter } from './SiteFooter';\nexport { MinimalFooter } from './MinimalFooter';\nexport { PhilosophyFooter } from './PhilosophyFooter';\n\nexport type {\n NavLink,\n FooterColumn,\n EditorialPair,\n PullQuote,\n BrandMark,\n PlatformNavProps,\n SiteFooterProps,\n MinimalFooterProps,\n PhilosophyFooterProps,\n} from './types';\n","'use client';\n\nimport Link from 'next/link';\nimport { Logo } from '@dataimago/ui';\nimport type { PlatformNavProps } from './types';\n\n/**\n * Platform navigation — sticky header with the property's brand mark + nav cluster.\n *\n * The header logo is the property's `@dataimago/brand` wordmark, rendered via\n * `<Logo>` (font-free, IoU-locked, `currentColor`) — sized by height so any mark\n * (Level-1 `dataimago_ai_OVERLAP`, Level-2 `dissertation_ai_OVERLAP`, …) fits the\n * nav regardless of aspect. The a/i overlap already encodes the \"ai\", so the old\n * hardcoded \".ai\" text span is gone.\n *\n * Extracted from apps/hub into @dataimago/hub-chrome during iteration-3-B.2\n * (2026-05-11). `brandMark`/`brandLabel`/`links`/`cta` allow per-vertical\n * customization; all props default to the Level-1 hub configuration.\n */\n\nconst DEFAULT_LINKS = [\n { href: '/ecosystem', label: 'Ecosystem' },\n { href: '/philosophy', label: 'Philosophy' },\n];\n\nconst DEFAULT_CTA = { href: '/onboard', label: 'Begin' };\n\nexport function PlatformNav({\n brandMark = 'dataimago_ai_OVERLAP',\n brandLabel = 'dataimago.ai home',\n links = DEFAULT_LINKS,\n cta = DEFAULT_CTA,\n navLabel = 'Primary',\n homeHref = '/',\n}: PlatformNavProps) {\n return (\n <header className=\"sticky top-0 z-40 border-b border-stone-200 bg-stone-100/95 backdrop-blur-sm\">\n <nav\n className=\"mx-auto flex max-w-7xl items-center justify-between px-6 py-4\"\n aria-label={navLabel}\n >\n <Link\n href={homeHref}\n className=\"flex items-center text-stone-900 transition hover:opacity-80\"\n aria-label={brandLabel}\n >\n <Logo\n name={brandMark}\n variant=\"PATH\"\n aria-hidden\n className=\"[&_svg]:h-7 [&_svg]:w-auto sm:[&_svg]:h-8\"\n />\n </Link>\n\n <div className=\"flex items-center gap-2 sm:gap-6\">\n {links.map(({ href, label, external }) =>\n external ? (\n <a\n key={href}\n href={href}\n className=\"btn-ghost hidden sm:inline-flex\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {label}\n </a>\n ) : (\n <Link key={href} href={href} className=\"btn-ghost hidden sm:inline-flex\">\n {label}\n </Link>\n )\n )}\n <Link href={cta.href} className=\"btn-primary\">\n {cta.label}\n </Link>\n </div>\n </nav>\n </header>\n );\n}\n","'use client';\n\nimport Link from 'next/link';\nimport { Logo } from '@dataimago/ui';\nimport type { SiteFooterProps } from './types';\n\n/**\n * Site footer — the Level-1 hub footer: dark surface, dataimago wordmark + a\n * trimmed nav column grid.\n *\n * The wordmark is the `dataimago` brand mark via `<Logo>` (font-free, in a light\n * `currentColor` on the dark surface) — no backplate, no hardcoded \".ai\" span.\n *\n * Extracted from apps/hub into @dataimago/hub-chrome during iteration-3-B.2\n * (2026-05-11). The defaults drop the former \"Legacy\" column + the critical-theory\n * closing statement (the philosophical-basis editorial lives on the PhilosophyFooter,\n * which is Level-1-only). Level-2 verticals use `MinimalFooter` instead.\n */\n\nconst DEFAULT_TAGLINE = 'A living AI-native application ecosystem.';\n\nconst DEFAULT_COLUMNS = [\n {\n heading: 'Platform',\n links: [\n { href: '/onboard', label: 'Begin a project' },\n { href: '/ecosystem', label: 'Ecosystem' },\n { href: '/philosophy', label: 'Philosophy' },\n ],\n },\n {\n heading: 'Framework',\n links: [\n {\n href: 'https://github.com/dataimago/dataimago-design',\n label: 'dataimago-design',\n external: true,\n },\n {\n href: 'https://github.com/dataimago/dataimago-rpkg',\n label: 'dataimago-rpkg',\n external: true,\n },\n {\n href: 'https://github.com/dataimago/dataimago-ai',\n label: 'dataimago-ai',\n external: true,\n },\n ],\n },\n];\n\nexport function SiteFooter({\n tagline = DEFAULT_TAGLINE,\n columns = DEFAULT_COLUMNS,\n closingStatement,\n}: SiteFooterProps) {\n return (\n <footer\n className=\"border-t border-stone-800 bg-stone-900 text-stone-400\"\n data-bs-theme=\"dark\"\n >\n <div className=\"mx-auto max-w-6xl px-6 py-12\">\n <div className=\"grid gap-8 md:grid-cols-4\">\n <div>\n <Link\n href=\"/\"\n className=\"inline-flex items-center text-stone-100 transition hover:opacity-80\"\n aria-label=\"dataimago\"\n >\n <Logo\n name=\"dataimago\"\n variant=\"PATH\"\n aria-hidden\n className=\"[&_svg]:h-7 [&_svg]:w-auto\"\n />\n </Link>\n <p className=\"mt-3 text-xs text-stone-400\">{tagline}</p>\n </div>\n\n {columns.map((col) => (\n <div key={col.heading}>\n <h4 className=\"font-mono text-xs uppercase tracking-wider text-accent-300\">\n {col.heading}\n </h4>\n <ul className=\"mt-3 space-y-2 text-sm\">\n {col.links.map(({ href, label, external }) => (\n <li key={label}>\n {!href ? (\n label\n ) : external ? (\n <a\n href={href}\n className=\"hover:text-paper-100\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {label}\n </a>\n ) : (\n <Link href={href} className=\"hover:text-paper-100\">\n {label}\n </Link>\n )}\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n\n {closingStatement ? (\n <div className=\"mt-12 border-t border-stone-800 pt-6 text-xs text-stone-400\">\n <p>{closingStatement}</p>\n </div>\n ) : null}\n </div>\n </footer>\n );\n}\n","'use client';\n\nimport Link from 'next/link';\nimport { Logo } from '@dataimago/ui';\nimport type { MinimalFooterProps } from './types';\n\n/**\n * MinimalFooter — the Level-2 vertical footer.\n *\n * A Level-2 vertical (dissertation.ai, future rpkg.ai / sgpc.ai) is \"an embodiment\n * of dataimago\": the footer shows the parent `dataimago` wordmark linking UP to\n * dataimago.ai, the embodiment line, a compact links row, and a copyright line.\n * No nav columns, no philosophy — those belong to the Level-1 hub (SiteFooter +\n * PhilosophyFooter). See dataimago-design wiki/patterns/hub-hero-anatomy.\n */\n\nconst DEFAULT_BRAND_HREF = 'https://dataimago.ai';\nconst DEFAULT_EMBODIMENT = 'An embodiment of dataimago';\n\nexport function MinimalFooter({\n brandHref = DEFAULT_BRAND_HREF,\n embodimentLabel = DEFAULT_EMBODIMENT,\n links = [],\n copyright,\n}: MinimalFooterProps) {\n return (\n <footer\n className=\"border-t border-stone-800 bg-stone-900 text-stone-400\"\n data-bs-theme=\"dark\"\n >\n <div className=\"mx-auto flex max-w-6xl flex-col items-center gap-4 px-6 py-10 text-center\">\n <a\n href={brandHref}\n className=\"inline-flex flex-col items-center gap-2 text-stone-100 transition hover:opacity-80\"\n target=\"_blank\"\n rel=\"noreferrer\"\n aria-label={`${embodimentLabel} — visit dataimago.ai`}\n >\n <Logo\n name=\"dataimago\"\n variant=\"PATH\"\n aria-hidden\n className=\"[&_svg]:h-7 [&_svg]:w-auto\"\n />\n <span className=\"text-sm text-stone-400\">{embodimentLabel}</span>\n </a>\n\n {links.length > 0 ? (\n <nav\n className=\"flex flex-wrap items-center justify-center gap-x-6 gap-y-2 text-sm\"\n aria-label=\"Footer\"\n >\n {links.map(({ href, label, external }) =>\n !href ? (\n <span key={label} className=\"text-stone-400\">\n {label}\n </span>\n ) : external ? (\n <a\n key={label}\n href={href}\n className=\"text-stone-300 hover:text-paper-100\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {label}\n </a>\n ) : (\n <Link key={label} href={href} className=\"text-stone-300 hover:text-paper-100\">\n {label}\n </Link>\n )\n )}\n </nav>\n ) : null}\n\n {copyright ? <p className=\"text-xs text-stone-400\">{copyright}</p> : null}\n </div>\n </footer>\n );\n}\n","'use client';\n\nimport type { PhilosophyFooterProps } from './types';\n\n/**\n * Philosophy footer — the platform's moral weight, rendered as a dark\n * editorial section with three belief/mission/vision pairs and a pull-quote.\n *\n * Iteration-1 visual identity (Phase B.3, 2026-05-06):\n * Dark-surface chrome with text-accent-500 eyebrows, font-display body, and\n * the Baudrillard blockquote with border-copper-500 (preserved-decorative-\n * copper per iteration-1 §5.2 governance).\n *\n * Iteration-2 role-shift (2026-05-07): text-accent-500 eyebrows resolve to\n * sky-blue accent-300 (#3498DB) on this dark surface via mode-aware mapping —\n * 5.41:1 on stone-900 (was 3.23:1 AA-large only with copper). The\n * border-copper-500 blockquote frame survives untouched. \"Two warmths\"\n * coexist: cool sky-blue on editorial eyebrows, warm copper on the\n * philosophical-quote frame.\n *\n * Extracted from apps/hub into @dataimago/hub-chrome during iteration-3-B.2\n * (2026-05-11). The `pairs`, `quote`, and `closingStatement` props allow\n * per-vertical adaptation; all props default to the Level-1 hub content.\n */\n\nconst DEFAULT_PAIRS = [\n {\n eyebrow: 'our belief',\n body: 'AI can enable virtuous cycles of improvement in the world.',\n },\n {\n eyebrow: 'our mission',\n body: 'The emancipation of humanity through ai super-alignment.',\n },\n {\n eyebrow: 'our vision',\n body: 'Super-alignment embeds ai in culture, not culture in ai.',\n },\n];\n\nconst DEFAULT_QUOTE = {\n text: `If men create intelligent machines, or fantasize about them, it is either because they secretly despair of their own intelligence or because they are in danger of succumbing to the weight of a monstrous and useless intelligence which they seek to exorcize by transferring it to machines, where they can play with it and make fun of it. By entrusting this burdensome intelligence to machines we are released from any responsibility to knowledge.`,\n attribution: 'Jean Baudrillard',\n work: 'Xerox and Infinity',\n year: 1988,\n};\n\nconst DEFAULT_CLOSING =\n 'dataimago is the structural answer to this critique. Every architectural choice — R as source of truth, editorial authority with the domain expert, the non-destructive retrofit principle, the ecosystem-as-commons — refuses to release the scholar from responsibility to their own knowledge. The AI serves the culture; the culture governs the AI.';\n\nexport function PhilosophyFooter({\n pairs = DEFAULT_PAIRS,\n quote = DEFAULT_QUOTE,\n closingStatement = DEFAULT_CLOSING,\n}: PhilosophyFooterProps) {\n return (\n <section\n aria-labelledby=\"philosophy-heading\"\n className=\"border-t border-stone-200 bg-stone-900 py-20 text-paper-100 sm:py-28\"\n >\n <div className=\"mx-auto max-w-6xl px-6\">\n <div className=\"grid gap-12 lg:grid-cols-3\">\n {pairs.map((pair, i) => (\n <div key={i}>\n <p className=\"font-mono text-xs uppercase tracking-wider text-accent-500\">\n {pair.eyebrow}\n </p>\n {i === 0 ? (\n <h3\n id=\"philosophy-heading\"\n className=\"mt-2 font-display text-xl text-paper-100\"\n >\n {pair.body}\n </h3>\n ) : (\n <p className=\"mt-2 font-display text-xl text-paper-100\">\n {pair.body}\n </p>\n )}\n </div>\n ))}\n </div>\n\n {/* Pull-quote — border-copper-500 PRESERVED: decorative-emphasis\n blockquote frame per iteration-1 §5.2 preserved-decorative-copper\n governance. */}\n <blockquote className=\"mt-16 max-w-prose-wide border-l-2 border-copper-500 pl-6 font-display italic text-paper-100\">\n <p className=\"text-base leading-relaxed\">{quote.text}</p>\n <footer className=\"mt-4 text-sm not-italic text-stone-400\">\n — {quote.attribution}, <cite>{quote.work}</cite> ({quote.year})\n </footer>\n </blockquote>\n\n <p className=\"mt-8 max-w-prose-wide text-sm text-stone-400\">\n {closingStatement}\n </p>\n </div>\n </section>\n );\n}\n"],"mappings":"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","names":["Link","import_link","import_ui","import_jsx_runtime","Link","import_link","import_ui","import_jsx_runtime","Link","import_jsx_runtime"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { LogoProps } from '@dataimago/ui';
|
|
2
3
|
|
|
3
4
|
/**
|
|
4
5
|
* @dataimago/hub-chrome — configuration type surface.
|
|
@@ -7,6 +8,9 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
|
7
8
|
* component. Verticals (dissertation.ai, sgpc.ai, rpkg.ai) override
|
|
8
9
|
* whichever values differ from the hub defaults.
|
|
9
10
|
*/
|
|
11
|
+
|
|
12
|
+
/** A canonical @dataimago/brand mark id (e.g. `dataimago_ai_OVERLAP`). */
|
|
13
|
+
type BrandMark = LogoProps['name'];
|
|
10
14
|
/** A single navigation link or plain-text label (when href is omitted). */
|
|
11
15
|
interface NavLink {
|
|
12
16
|
/** Omit to render as a non-interactive text label (e.g. legacy items). */
|
|
@@ -33,6 +37,17 @@ interface PullQuote {
|
|
|
33
37
|
year: number;
|
|
34
38
|
}
|
|
35
39
|
interface PlatformNavProps {
|
|
40
|
+
/**
|
|
41
|
+
* The brand mark rendered in the header, by `@dataimago/brand` id.
|
|
42
|
+
* Defaults to the Level-1 house mark `dataimago_ai_OVERLAP`; Level-2
|
|
43
|
+
* verticals pass their own (e.g. `dissertation_ai_OVERLAP`).
|
|
44
|
+
*/
|
|
45
|
+
brandMark?: BrandMark;
|
|
46
|
+
/**
|
|
47
|
+
* Accessible name for the logo/home link.
|
|
48
|
+
* Defaults to "dataimago.ai home".
|
|
49
|
+
*/
|
|
50
|
+
brandLabel?: string;
|
|
36
51
|
/**
|
|
37
52
|
* Secondary nav links rendered in the header's right-side cluster.
|
|
38
53
|
* Defaults to the Level-1 hub links: Ecosystem, Philosophy.
|
|
@@ -64,15 +79,31 @@ interface SiteFooterProps {
|
|
|
64
79
|
tagline?: string;
|
|
65
80
|
/**
|
|
66
81
|
* Nav columns rendered in the footer grid.
|
|
67
|
-
* Defaults to the hub's Platform / Framework
|
|
82
|
+
* Defaults to the hub's Platform / Framework columns.
|
|
68
83
|
*/
|
|
69
84
|
columns?: FooterColumn[];
|
|
70
85
|
/**
|
|
71
|
-
*
|
|
72
|
-
*
|
|
86
|
+
* Optional closing statement in the dark strip below the nav grid.
|
|
87
|
+
* When omitted, the closing strip is not rendered.
|
|
73
88
|
*/
|
|
74
89
|
closingStatement?: string;
|
|
75
90
|
}
|
|
91
|
+
/**
|
|
92
|
+
* MinimalFooter — the Level-2 vertical footer. A vertical is "an embodiment of
|
|
93
|
+
* dataimago": it shows the parent `dataimago` wordmark linking up to dataimago.ai,
|
|
94
|
+
* the embodiment line, a compact links row, and a copyright line. No nav columns,
|
|
95
|
+
* no philosophy — those live on the Level-1 hub.
|
|
96
|
+
*/
|
|
97
|
+
interface MinimalFooterProps {
|
|
98
|
+
/** Where the dataimago wordmark links (the parent hub). Defaults to https://dataimago.ai. */
|
|
99
|
+
brandHref?: string;
|
|
100
|
+
/** The embodiment line. Defaults to "An embodiment of dataimago". */
|
|
101
|
+
embodimentLabel?: string;
|
|
102
|
+
/** A compact row of essential links. */
|
|
103
|
+
links?: NavLink[];
|
|
104
|
+
/** Optional copyright / fine-print line. */
|
|
105
|
+
copyright?: string;
|
|
106
|
+
}
|
|
76
107
|
interface PhilosophyFooterProps {
|
|
77
108
|
/**
|
|
78
109
|
* The three editorial pairs (belief / mission / vision or equivalent).
|
|
@@ -91,10 +122,12 @@ interface PhilosophyFooterProps {
|
|
|
91
122
|
closingStatement?: string;
|
|
92
123
|
}
|
|
93
124
|
|
|
94
|
-
declare function PlatformNav({ links, cta, navLabel, homeHref, }: PlatformNavProps): react_jsx_runtime.JSX.Element;
|
|
125
|
+
declare function PlatformNav({ brandMark, brandLabel, links, cta, navLabel, homeHref, }: PlatformNavProps): react_jsx_runtime.JSX.Element;
|
|
95
126
|
|
|
96
127
|
declare function SiteFooter({ tagline, columns, closingStatement, }: SiteFooterProps): react_jsx_runtime.JSX.Element;
|
|
97
128
|
|
|
129
|
+
declare function MinimalFooter({ brandHref, embodimentLabel, links, copyright, }: MinimalFooterProps): react_jsx_runtime.JSX.Element;
|
|
130
|
+
|
|
98
131
|
declare function PhilosophyFooter({ pairs, quote, closingStatement, }: PhilosophyFooterProps): react_jsx_runtime.JSX.Element;
|
|
99
132
|
|
|
100
|
-
export { type EditorialPair, type FooterColumn, type NavLink, PhilosophyFooter, type PhilosophyFooterProps, PlatformNav, type PlatformNavProps, type PullQuote, SiteFooter, type SiteFooterProps };
|
|
133
|
+
export { type BrandMark, type EditorialPair, type FooterColumn, MinimalFooter, type MinimalFooterProps, type NavLink, PhilosophyFooter, type PhilosophyFooterProps, PlatformNav, type PlatformNavProps, type PullQuote, SiteFooter, type SiteFooterProps };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { LogoProps } from '@dataimago/ui';
|
|
2
3
|
|
|
3
4
|
/**
|
|
4
5
|
* @dataimago/hub-chrome — configuration type surface.
|
|
@@ -7,6 +8,9 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
|
7
8
|
* component. Verticals (dissertation.ai, sgpc.ai, rpkg.ai) override
|
|
8
9
|
* whichever values differ from the hub defaults.
|
|
9
10
|
*/
|
|
11
|
+
|
|
12
|
+
/** A canonical @dataimago/brand mark id (e.g. `dataimago_ai_OVERLAP`). */
|
|
13
|
+
type BrandMark = LogoProps['name'];
|
|
10
14
|
/** A single navigation link or plain-text label (when href is omitted). */
|
|
11
15
|
interface NavLink {
|
|
12
16
|
/** Omit to render as a non-interactive text label (e.g. legacy items). */
|
|
@@ -33,6 +37,17 @@ interface PullQuote {
|
|
|
33
37
|
year: number;
|
|
34
38
|
}
|
|
35
39
|
interface PlatformNavProps {
|
|
40
|
+
/**
|
|
41
|
+
* The brand mark rendered in the header, by `@dataimago/brand` id.
|
|
42
|
+
* Defaults to the Level-1 house mark `dataimago_ai_OVERLAP`; Level-2
|
|
43
|
+
* verticals pass their own (e.g. `dissertation_ai_OVERLAP`).
|
|
44
|
+
*/
|
|
45
|
+
brandMark?: BrandMark;
|
|
46
|
+
/**
|
|
47
|
+
* Accessible name for the logo/home link.
|
|
48
|
+
* Defaults to "dataimago.ai home".
|
|
49
|
+
*/
|
|
50
|
+
brandLabel?: string;
|
|
36
51
|
/**
|
|
37
52
|
* Secondary nav links rendered in the header's right-side cluster.
|
|
38
53
|
* Defaults to the Level-1 hub links: Ecosystem, Philosophy.
|
|
@@ -64,15 +79,31 @@ interface SiteFooterProps {
|
|
|
64
79
|
tagline?: string;
|
|
65
80
|
/**
|
|
66
81
|
* Nav columns rendered in the footer grid.
|
|
67
|
-
* Defaults to the hub's Platform / Framework
|
|
82
|
+
* Defaults to the hub's Platform / Framework columns.
|
|
68
83
|
*/
|
|
69
84
|
columns?: FooterColumn[];
|
|
70
85
|
/**
|
|
71
|
-
*
|
|
72
|
-
*
|
|
86
|
+
* Optional closing statement in the dark strip below the nav grid.
|
|
87
|
+
* When omitted, the closing strip is not rendered.
|
|
73
88
|
*/
|
|
74
89
|
closingStatement?: string;
|
|
75
90
|
}
|
|
91
|
+
/**
|
|
92
|
+
* MinimalFooter — the Level-2 vertical footer. A vertical is "an embodiment of
|
|
93
|
+
* dataimago": it shows the parent `dataimago` wordmark linking up to dataimago.ai,
|
|
94
|
+
* the embodiment line, a compact links row, and a copyright line. No nav columns,
|
|
95
|
+
* no philosophy — those live on the Level-1 hub.
|
|
96
|
+
*/
|
|
97
|
+
interface MinimalFooterProps {
|
|
98
|
+
/** Where the dataimago wordmark links (the parent hub). Defaults to https://dataimago.ai. */
|
|
99
|
+
brandHref?: string;
|
|
100
|
+
/** The embodiment line. Defaults to "An embodiment of dataimago". */
|
|
101
|
+
embodimentLabel?: string;
|
|
102
|
+
/** A compact row of essential links. */
|
|
103
|
+
links?: NavLink[];
|
|
104
|
+
/** Optional copyright / fine-print line. */
|
|
105
|
+
copyright?: string;
|
|
106
|
+
}
|
|
76
107
|
interface PhilosophyFooterProps {
|
|
77
108
|
/**
|
|
78
109
|
* The three editorial pairs (belief / mission / vision or equivalent).
|
|
@@ -91,10 +122,12 @@ interface PhilosophyFooterProps {
|
|
|
91
122
|
closingStatement?: string;
|
|
92
123
|
}
|
|
93
124
|
|
|
94
|
-
declare function PlatformNav({ links, cta, navLabel, homeHref, }: PlatformNavProps): react_jsx_runtime.JSX.Element;
|
|
125
|
+
declare function PlatformNav({ brandMark, brandLabel, links, cta, navLabel, homeHref, }: PlatformNavProps): react_jsx_runtime.JSX.Element;
|
|
95
126
|
|
|
96
127
|
declare function SiteFooter({ tagline, columns, closingStatement, }: SiteFooterProps): react_jsx_runtime.JSX.Element;
|
|
97
128
|
|
|
129
|
+
declare function MinimalFooter({ brandHref, embodimentLabel, links, copyright, }: MinimalFooterProps): react_jsx_runtime.JSX.Element;
|
|
130
|
+
|
|
98
131
|
declare function PhilosophyFooter({ pairs, quote, closingStatement, }: PhilosophyFooterProps): react_jsx_runtime.JSX.Element;
|
|
99
132
|
|
|
100
|
-
export { type EditorialPair, type FooterColumn, type NavLink, PhilosophyFooter, type PhilosophyFooterProps, PlatformNav, type PlatformNavProps, type PullQuote, SiteFooter, type SiteFooterProps };
|
|
133
|
+
export { type BrandMark, type EditorialPair, type FooterColumn, MinimalFooter, type MinimalFooterProps, type NavLink, PhilosophyFooter, type PhilosophyFooterProps, PlatformNav, type PlatformNavProps, type PullQuote, SiteFooter, type SiteFooterProps };
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// src/PlatformNav.tsx
|
|
2
2
|
import Link from "next/link";
|
|
3
|
-
import {
|
|
3
|
+
import { Logo } from "@dataimago/ui";
|
|
4
4
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
5
|
var DEFAULT_LINKS = [
|
|
6
6
|
{ href: "/ecosystem", label: "Ecosystem" },
|
|
@@ -8,6 +8,8 @@ var DEFAULT_LINKS = [
|
|
|
8
8
|
];
|
|
9
9
|
var DEFAULT_CTA = { href: "/onboard", label: "Begin" };
|
|
10
10
|
function PlatformNav({
|
|
11
|
+
brandMark = "dataimago_ai_OVERLAP",
|
|
12
|
+
brandLabel = "dataimago.ai home",
|
|
11
13
|
links = DEFAULT_LINKS,
|
|
12
14
|
cta = DEFAULT_CTA,
|
|
13
15
|
navLabel = "Primary",
|
|
@@ -19,23 +21,21 @@ function PlatformNav({
|
|
|
19
21
|
className: "mx-auto flex max-w-7xl items-center justify-between px-6 py-4",
|
|
20
22
|
"aria-label": navLabel,
|
|
21
23
|
children: [
|
|
22
|
-
/* @__PURE__ */
|
|
24
|
+
/* @__PURE__ */ jsx(
|
|
23
25
|
Link,
|
|
24
26
|
{
|
|
25
27
|
href: homeHref,
|
|
26
|
-
className: "
|
|
27
|
-
"aria-label":
|
|
28
|
-
children:
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
/* @__PURE__ */ jsx("span", { className: "font-mono text-sm text-stone-500", children: ".ai" })
|
|
38
|
-
]
|
|
28
|
+
className: "flex items-center text-stone-900 transition hover:opacity-80",
|
|
29
|
+
"aria-label": brandLabel,
|
|
30
|
+
children: /* @__PURE__ */ jsx(
|
|
31
|
+
Logo,
|
|
32
|
+
{
|
|
33
|
+
name: brandMark,
|
|
34
|
+
variant: "PATH",
|
|
35
|
+
"aria-hidden": true,
|
|
36
|
+
className: "[&_svg]:h-7 [&_svg]:w-auto sm:[&_svg]:h-8"
|
|
37
|
+
}
|
|
38
|
+
)
|
|
39
39
|
}
|
|
40
40
|
),
|
|
41
41
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 sm:gap-6", children: [
|
|
@@ -61,7 +61,7 @@ function PlatformNav({
|
|
|
61
61
|
|
|
62
62
|
// src/SiteFooter.tsx
|
|
63
63
|
import Link2 from "next/link";
|
|
64
|
-
import {
|
|
64
|
+
import { Logo as Logo2 } from "@dataimago/ui";
|
|
65
65
|
import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
66
66
|
var DEFAULT_TAGLINE = "A living AI-native application ecosystem.";
|
|
67
67
|
var DEFAULT_COLUMNS = [
|
|
@@ -92,21 +92,12 @@ var DEFAULT_COLUMNS = [
|
|
|
92
92
|
external: true
|
|
93
93
|
}
|
|
94
94
|
]
|
|
95
|
-
},
|
|
96
|
-
{
|
|
97
|
-
heading: "Legacy",
|
|
98
|
-
links: [
|
|
99
|
-
{ label: "super-alignment" },
|
|
100
|
-
{ label: "human-centered ai" },
|
|
101
|
-
{ label: "critical transformation" }
|
|
102
|
-
]
|
|
103
95
|
}
|
|
104
96
|
];
|
|
105
|
-
var DEFAULT_CLOSING = '"dataimago is the instantiation of critical theory in software."';
|
|
106
97
|
function SiteFooter({
|
|
107
98
|
tagline = DEFAULT_TAGLINE,
|
|
108
99
|
columns = DEFAULT_COLUMNS,
|
|
109
|
-
closingStatement
|
|
100
|
+
closingStatement
|
|
110
101
|
}) {
|
|
111
102
|
return /* @__PURE__ */ jsx2(
|
|
112
103
|
"footer",
|
|
@@ -116,14 +107,27 @@ function SiteFooter({
|
|
|
116
107
|
children: /* @__PURE__ */ jsxs2("div", { className: "mx-auto max-w-6xl px-6 py-12", children: [
|
|
117
108
|
/* @__PURE__ */ jsxs2("div", { className: "grid gap-8 md:grid-cols-4", children: [
|
|
118
109
|
/* @__PURE__ */ jsxs2("div", { children: [
|
|
119
|
-
/* @__PURE__ */
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
110
|
+
/* @__PURE__ */ jsx2(
|
|
111
|
+
Link2,
|
|
112
|
+
{
|
|
113
|
+
href: "/",
|
|
114
|
+
className: "inline-flex items-center text-stone-100 transition hover:opacity-80",
|
|
115
|
+
"aria-label": "dataimago",
|
|
116
|
+
children: /* @__PURE__ */ jsx2(
|
|
117
|
+
Logo2,
|
|
118
|
+
{
|
|
119
|
+
name: "dataimago",
|
|
120
|
+
variant: "PATH",
|
|
121
|
+
"aria-hidden": true,
|
|
122
|
+
className: "[&_svg]:h-7 [&_svg]:w-auto"
|
|
123
|
+
}
|
|
124
|
+
)
|
|
125
|
+
}
|
|
126
|
+
),
|
|
123
127
|
/* @__PURE__ */ jsx2("p", { className: "mt-3 text-xs text-stone-400", children: tagline })
|
|
124
128
|
] }),
|
|
125
129
|
columns.map((col) => /* @__PURE__ */ jsxs2("div", { children: [
|
|
126
|
-
/* @__PURE__ */ jsx2("h4", { className: "font-mono text-xs uppercase tracking-wider text-accent-
|
|
130
|
+
/* @__PURE__ */ jsx2("h4", { className: "font-mono text-xs uppercase tracking-wider text-accent-300", children: col.heading }),
|
|
127
131
|
/* @__PURE__ */ jsx2("ul", { className: "mt-3 space-y-2 text-sm", children: col.links.map(({ href, label, external }) => /* @__PURE__ */ jsx2("li", { children: !href ? label : external ? /* @__PURE__ */ jsx2(
|
|
128
132
|
"a",
|
|
129
133
|
{
|
|
@@ -136,14 +140,80 @@ function SiteFooter({
|
|
|
136
140
|
) : /* @__PURE__ */ jsx2(Link2, { href, className: "hover:text-paper-100", children: label }) }, label)) })
|
|
137
141
|
] }, col.heading))
|
|
138
142
|
] }),
|
|
139
|
-
/* @__PURE__ */ jsx2("div", { className: "mt-12 border-t border-stone-800 pt-6 text-xs text-stone-400", children: /* @__PURE__ */ jsx2("p", { children: closingStatement }) })
|
|
143
|
+
closingStatement ? /* @__PURE__ */ jsx2("div", { className: "mt-12 border-t border-stone-800 pt-6 text-xs text-stone-400", children: /* @__PURE__ */ jsx2("p", { children: closingStatement }) }) : null
|
|
140
144
|
] })
|
|
141
145
|
}
|
|
142
146
|
);
|
|
143
147
|
}
|
|
144
148
|
|
|
145
|
-
// src/
|
|
149
|
+
// src/MinimalFooter.tsx
|
|
150
|
+
import Link3 from "next/link";
|
|
151
|
+
import { Logo as Logo3 } from "@dataimago/ui";
|
|
146
152
|
import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
153
|
+
var DEFAULT_BRAND_HREF = "https://dataimago.ai";
|
|
154
|
+
var DEFAULT_EMBODIMENT = "An embodiment of dataimago";
|
|
155
|
+
function MinimalFooter({
|
|
156
|
+
brandHref = DEFAULT_BRAND_HREF,
|
|
157
|
+
embodimentLabel = DEFAULT_EMBODIMENT,
|
|
158
|
+
links = [],
|
|
159
|
+
copyright
|
|
160
|
+
}) {
|
|
161
|
+
return /* @__PURE__ */ jsx3(
|
|
162
|
+
"footer",
|
|
163
|
+
{
|
|
164
|
+
className: "border-t border-stone-800 bg-stone-900 text-stone-400",
|
|
165
|
+
"data-bs-theme": "dark",
|
|
166
|
+
children: /* @__PURE__ */ jsxs3("div", { className: "mx-auto flex max-w-6xl flex-col items-center gap-4 px-6 py-10 text-center", children: [
|
|
167
|
+
/* @__PURE__ */ jsxs3(
|
|
168
|
+
"a",
|
|
169
|
+
{
|
|
170
|
+
href: brandHref,
|
|
171
|
+
className: "inline-flex flex-col items-center gap-2 text-stone-100 transition hover:opacity-80",
|
|
172
|
+
target: "_blank",
|
|
173
|
+
rel: "noreferrer",
|
|
174
|
+
"aria-label": `${embodimentLabel} \u2014 visit dataimago.ai`,
|
|
175
|
+
children: [
|
|
176
|
+
/* @__PURE__ */ jsx3(
|
|
177
|
+
Logo3,
|
|
178
|
+
{
|
|
179
|
+
name: "dataimago",
|
|
180
|
+
variant: "PATH",
|
|
181
|
+
"aria-hidden": true,
|
|
182
|
+
className: "[&_svg]:h-7 [&_svg]:w-auto"
|
|
183
|
+
}
|
|
184
|
+
),
|
|
185
|
+
/* @__PURE__ */ jsx3("span", { className: "text-sm text-stone-400", children: embodimentLabel })
|
|
186
|
+
]
|
|
187
|
+
}
|
|
188
|
+
),
|
|
189
|
+
links.length > 0 ? /* @__PURE__ */ jsx3(
|
|
190
|
+
"nav",
|
|
191
|
+
{
|
|
192
|
+
className: "flex flex-wrap items-center justify-center gap-x-6 gap-y-2 text-sm",
|
|
193
|
+
"aria-label": "Footer",
|
|
194
|
+
children: links.map(
|
|
195
|
+
({ href, label, external }) => !href ? /* @__PURE__ */ jsx3("span", { className: "text-stone-400", children: label }, label) : external ? /* @__PURE__ */ jsx3(
|
|
196
|
+
"a",
|
|
197
|
+
{
|
|
198
|
+
href,
|
|
199
|
+
className: "text-stone-300 hover:text-paper-100",
|
|
200
|
+
target: "_blank",
|
|
201
|
+
rel: "noreferrer",
|
|
202
|
+
children: label
|
|
203
|
+
},
|
|
204
|
+
label
|
|
205
|
+
) : /* @__PURE__ */ jsx3(Link3, { href, className: "text-stone-300 hover:text-paper-100", children: label }, label)
|
|
206
|
+
)
|
|
207
|
+
}
|
|
208
|
+
) : null,
|
|
209
|
+
copyright ? /* @__PURE__ */ jsx3("p", { className: "text-xs text-stone-400", children: copyright }) : null
|
|
210
|
+
] })
|
|
211
|
+
}
|
|
212
|
+
);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
// src/PhilosophyFooter.tsx
|
|
216
|
+
import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
147
217
|
var DEFAULT_PAIRS = [
|
|
148
218
|
{
|
|
149
219
|
eyebrow: "our belief",
|
|
@@ -164,47 +234,48 @@ var DEFAULT_QUOTE = {
|
|
|
164
234
|
work: "Xerox and Infinity",
|
|
165
235
|
year: 1988
|
|
166
236
|
};
|
|
167
|
-
var
|
|
237
|
+
var DEFAULT_CLOSING = "dataimago is the structural answer to this critique. Every architectural choice \u2014 R as source of truth, editorial authority with the domain expert, the non-destructive retrofit principle, the ecosystem-as-commons \u2014 refuses to release the scholar from responsibility to their own knowledge. The AI serves the culture; the culture governs the AI.";
|
|
168
238
|
function PhilosophyFooter({
|
|
169
239
|
pairs = DEFAULT_PAIRS,
|
|
170
240
|
quote = DEFAULT_QUOTE,
|
|
171
|
-
closingStatement =
|
|
241
|
+
closingStatement = DEFAULT_CLOSING
|
|
172
242
|
}) {
|
|
173
|
-
return /* @__PURE__ */
|
|
243
|
+
return /* @__PURE__ */ jsx4(
|
|
174
244
|
"section",
|
|
175
245
|
{
|
|
176
246
|
"aria-labelledby": "philosophy-heading",
|
|
177
247
|
className: "border-t border-stone-200 bg-stone-900 py-20 text-paper-100 sm:py-28",
|
|
178
|
-
children: /* @__PURE__ */
|
|
179
|
-
/* @__PURE__ */
|
|
180
|
-
/* @__PURE__ */
|
|
181
|
-
i === 0 ? /* @__PURE__ */
|
|
248
|
+
children: /* @__PURE__ */ jsxs4("div", { className: "mx-auto max-w-6xl px-6", children: [
|
|
249
|
+
/* @__PURE__ */ jsx4("div", { className: "grid gap-12 lg:grid-cols-3", children: pairs.map((pair, i) => /* @__PURE__ */ jsxs4("div", { children: [
|
|
250
|
+
/* @__PURE__ */ jsx4("p", { className: "font-mono text-xs uppercase tracking-wider text-accent-500", children: pair.eyebrow }),
|
|
251
|
+
i === 0 ? /* @__PURE__ */ jsx4(
|
|
182
252
|
"h3",
|
|
183
253
|
{
|
|
184
254
|
id: "philosophy-heading",
|
|
185
255
|
className: "mt-2 font-display text-xl text-paper-100",
|
|
186
256
|
children: pair.body
|
|
187
257
|
}
|
|
188
|
-
) : /* @__PURE__ */
|
|
258
|
+
) : /* @__PURE__ */ jsx4("p", { className: "mt-2 font-display text-xl text-paper-100", children: pair.body })
|
|
189
259
|
] }, i)) }),
|
|
190
|
-
/* @__PURE__ */
|
|
191
|
-
/* @__PURE__ */
|
|
192
|
-
/* @__PURE__ */
|
|
260
|
+
/* @__PURE__ */ jsxs4("blockquote", { className: "mt-16 max-w-prose-wide border-l-2 border-copper-500 pl-6 font-display italic text-paper-100", children: [
|
|
261
|
+
/* @__PURE__ */ jsx4("p", { className: "text-base leading-relaxed", children: quote.text }),
|
|
262
|
+
/* @__PURE__ */ jsxs4("footer", { className: "mt-4 text-sm not-italic text-stone-400", children: [
|
|
193
263
|
"\u2014 ",
|
|
194
264
|
quote.attribution,
|
|
195
265
|
", ",
|
|
196
|
-
/* @__PURE__ */
|
|
266
|
+
/* @__PURE__ */ jsx4("cite", { children: quote.work }),
|
|
197
267
|
" (",
|
|
198
268
|
quote.year,
|
|
199
269
|
")"
|
|
200
270
|
] })
|
|
201
271
|
] }),
|
|
202
|
-
/* @__PURE__ */
|
|
272
|
+
/* @__PURE__ */ jsx4("p", { className: "mt-8 max-w-prose-wide text-sm text-stone-400", children: closingStatement })
|
|
203
273
|
] })
|
|
204
274
|
}
|
|
205
275
|
);
|
|
206
276
|
}
|
|
207
277
|
export {
|
|
278
|
+
MinimalFooter,
|
|
208
279
|
PhilosophyFooter,
|
|
209
280
|
PlatformNav,
|
|
210
281
|
SiteFooter
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/PlatformNav.tsx","../src/SiteFooter.tsx","../src/PhilosophyFooter.tsx"],"sourcesContent":["'use client';\n\nimport Link from 'next/link';\nimport { LogoMonogramBg } from '@dataimago/ui';\nimport type { PlatformNavProps } from './types';\n\n/**\n * Platform navigation — sticky header with logo + nav link cluster.\n *\n * Iteration-2-tail (Plan A, 2026-05-07):\n * The wordmark is the LogoMonogramBg badge — the 'ai' SVG monogram on a\n * sky-blue rounded accent backplate sourced from @dataimago/ui — paired\n * with a \".ai\" mono span. Hover shifts the backplate from accent-500 to\n * accent-600 via a scoped CSS-variable override on the Link's group.\n *\n * Extracted from apps/hub into @dataimago/hub-chrome during iteration-3-B.2\n * (2026-05-11) to make the chrome available to Level-2 verticals. The\n * `links` and `cta` props allow per-vertical nav customization; all props\n * default to the Level-1 hub configuration.\n */\n\nconst DEFAULT_LINKS = [\n { href: '/ecosystem', label: 'Ecosystem' },\n { href: '/philosophy', label: 'Philosophy' },\n];\n\nconst DEFAULT_CTA = { href: '/onboard', label: 'Begin' };\n\nexport function PlatformNav({\n links = DEFAULT_LINKS,\n cta = DEFAULT_CTA,\n navLabel = 'Primary',\n homeHref = '/',\n}: PlatformNavProps) {\n return (\n <header className=\"sticky top-0 z-40 border-b border-stone-200 bg-stone-100/95 backdrop-blur-sm\">\n <nav\n className=\"mx-auto flex max-w-7xl items-center justify-between px-6 py-4\"\n aria-label={navLabel}\n >\n <Link\n href={homeHref}\n className=\"group flex items-center gap-1.5 hover:[--color-interactive-accent:#154d6f]\"\n aria-label=\"dataimago.ai home\"\n >\n <LogoMonogramBg\n className=\"h-8 w-8 sm:h-9 sm:w-9\"\n aria-hidden\n title={undefined}\n />\n <span className=\"font-mono text-sm text-stone-500\">.ai</span>\n </Link>\n\n <div className=\"flex items-center gap-2 sm:gap-6\">\n {links.map(({ href, label, external }) =>\n external ? (\n <a\n key={href}\n href={href}\n className=\"btn-ghost hidden sm:inline-flex\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {label}\n </a>\n ) : (\n <Link key={href} href={href} className=\"btn-ghost hidden sm:inline-flex\">\n {label}\n </Link>\n )\n )}\n <Link href={cta.href} className=\"btn-primary\">\n {cta.label}\n </Link>\n </div>\n </nav>\n </header>\n );\n}\n","'use client';\n\nimport Link from 'next/link';\nimport { LogoWordmark } from '@dataimago/ui';\nimport type { SiteFooterProps } from './types';\n\n/**\n * Site footer — dark-surface footer with wordmark + nav column grid.\n *\n * Iteration-2-tail (Plan A, 2026-05-07):\n * The wordmark is the LogoWordmark SVG on a sky-blue backplate, scoped to\n * dark-surface token resolution via data-bs-theme=\"dark\". The backplate\n * resolves to accent-300 (#3498DB) on bg-stone-900 at 5.41:1 AA.\n *\n * Extracted from apps/hub into @dataimago/hub-chrome during iteration-3-B.2\n * (2026-05-11). The `tagline` and `columns` props allow per-vertical\n * customization; all props default to the Level-1 hub configuration.\n *\n * Note (open regression from iteration-2): text-accent-500 column eyebrows\n * render at 2.56:1 on stone-900 because Tailwind's static class binds to the\n * absolute color, not the mode-aware role. Migration to text-accent-300 or a\n * CSS-variable consumer closes the gap. Deferred to iteration-3 candidate.\n */\n\nconst DEFAULT_TAGLINE = 'A living AI-native application ecosystem.';\n\nconst DEFAULT_COLUMNS = [\n {\n heading: 'Platform',\n links: [\n { href: '/onboard', label: 'Begin a project' },\n { href: '/ecosystem', label: 'Ecosystem' },\n { href: '/philosophy', label: 'Philosophy' },\n ],\n },\n {\n heading: 'Framework',\n links: [\n {\n href: 'https://github.com/dataimago/dataimago-design',\n label: 'dataimago-design',\n external: true,\n },\n {\n href: 'https://github.com/dataimago/dataimago-rpkg',\n label: 'dataimago-rpkg',\n external: true,\n },\n {\n href: 'https://github.com/dataimago/dataimago-ai',\n label: 'dataimago-ai',\n external: true,\n },\n ],\n },\n {\n heading: 'Legacy',\n links: [\n { label: 'super-alignment' },\n { label: 'human-centered ai' },\n { label: 'critical transformation' },\n ],\n },\n];\n\nconst DEFAULT_CLOSING =\n '\"dataimago is the instantiation of critical theory in software.\"';\n\nexport function SiteFooter({\n tagline = DEFAULT_TAGLINE,\n columns = DEFAULT_COLUMNS,\n closingStatement = DEFAULT_CLOSING,\n}: SiteFooterProps) {\n return (\n <footer\n className=\"border-t border-stone-800 bg-stone-900 text-stone-400\"\n data-bs-theme=\"dark\"\n >\n <div className=\"mx-auto max-w-6xl px-6 py-12\">\n <div className=\"grid gap-8 md:grid-cols-4\">\n <div>\n <Link href=\"/\" className=\"inline-flex items-center gap-1.5\">\n <LogoWordmark className=\"w-32 sm:w-36\" aria-label=\"dataimago\" />\n <span className=\"font-mono text-xs text-stone-500\">.ai</span>\n </Link>\n <p className=\"mt-3 text-xs text-stone-400\">{tagline}</p>\n </div>\n\n {columns.map((col) => (\n <div key={col.heading}>\n <h4 className=\"font-mono text-xs uppercase tracking-wider text-accent-500\">\n {col.heading}\n </h4>\n <ul className=\"mt-3 space-y-2 text-sm\">\n {col.links.map(({ href, label, external }) => (\n <li key={label}>\n {!href ? (\n label\n ) : external ? (\n <a\n href={href}\n className=\"hover:text-paper-100\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {label}\n </a>\n ) : (\n <Link href={href} className=\"hover:text-paper-100\">\n {label}\n </Link>\n )}\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n\n <div className=\"mt-12 border-t border-stone-800 pt-6 text-xs text-stone-400\">\n <p>{closingStatement}</p>\n </div>\n </div>\n </footer>\n );\n}\n","'use client';\n\nimport type { PhilosophyFooterProps } from './types';\n\n/**\n * Philosophy footer — the platform's moral weight, rendered as a dark\n * editorial section with three belief/mission/vision pairs and a pull-quote.\n *\n * Iteration-1 visual identity (Phase B.3, 2026-05-06):\n * Dark-surface chrome with text-accent-500 eyebrows, font-display body, and\n * the Baudrillard blockquote with border-copper-500 (preserved-decorative-\n * copper per iteration-1 §5.2 governance).\n *\n * Iteration-2 role-shift (2026-05-07): text-accent-500 eyebrows resolve to\n * sky-blue accent-300 (#3498DB) on this dark surface via mode-aware mapping —\n * 5.41:1 on stone-900 (was 3.23:1 AA-large only with copper). The\n * border-copper-500 blockquote frame survives untouched. \"Two warmths\"\n * coexist: cool sky-blue on editorial eyebrows, warm copper on the\n * philosophical-quote frame.\n *\n * Extracted from apps/hub into @dataimago/hub-chrome during iteration-3-B.2\n * (2026-05-11). The `pairs`, `quote`, and `closingStatement` props allow\n * per-vertical adaptation; all props default to the Level-1 hub content.\n */\n\nconst DEFAULT_PAIRS = [\n {\n eyebrow: 'our belief',\n body: 'AI can enable virtuous cycles of improvement in the world.',\n },\n {\n eyebrow: 'our mission',\n body: 'The emancipation of humanity through ai super-alignment.',\n },\n {\n eyebrow: 'our vision',\n body: 'Super-alignment embeds ai in culture, not culture in ai.',\n },\n];\n\nconst DEFAULT_QUOTE = {\n text: `If men create intelligent machines, or fantasize about them, it is either because they secretly despair of their own intelligence or because they are in danger of succumbing to the weight of a monstrous and useless intelligence which they seek to exorcize by transferring it to machines, where they can play with it and make fun of it. By entrusting this burdensome intelligence to machines we are released from any responsibility to knowledge.`,\n attribution: 'Jean Baudrillard',\n work: 'Xerox and Infinity',\n year: 1988,\n};\n\nconst DEFAULT_CLOSING =\n 'dataimago is the structural answer to this critique. Every architectural choice — R as source of truth, editorial authority with the domain expert, the non-destructive retrofit principle, the ecosystem-as-commons — refuses to release the scholar from responsibility to their own knowledge. The AI serves the culture; the culture governs the AI.';\n\nexport function PhilosophyFooter({\n pairs = DEFAULT_PAIRS,\n quote = DEFAULT_QUOTE,\n closingStatement = DEFAULT_CLOSING,\n}: PhilosophyFooterProps) {\n return (\n <section\n aria-labelledby=\"philosophy-heading\"\n className=\"border-t border-stone-200 bg-stone-900 py-20 text-paper-100 sm:py-28\"\n >\n <div className=\"mx-auto max-w-6xl px-6\">\n <div className=\"grid gap-12 lg:grid-cols-3\">\n {pairs.map((pair, i) => (\n <div key={i}>\n <p className=\"font-mono text-xs uppercase tracking-wider text-accent-500\">\n {pair.eyebrow}\n </p>\n {i === 0 ? (\n <h3\n id=\"philosophy-heading\"\n className=\"mt-2 font-display text-xl text-paper-100\"\n >\n {pair.body}\n </h3>\n ) : (\n <p className=\"mt-2 font-display text-xl text-paper-100\">\n {pair.body}\n </p>\n )}\n </div>\n ))}\n </div>\n\n {/* Pull-quote — border-copper-500 PRESERVED: decorative-emphasis\n blockquote frame per iteration-1 §5.2 preserved-decorative-copper\n governance. */}\n <blockquote className=\"mt-16 max-w-prose-wide border-l-2 border-copper-500 pl-6 font-display italic text-paper-100\">\n <p className=\"text-base leading-relaxed\">{quote.text}</p>\n <footer className=\"mt-4 text-sm not-italic text-stone-400\">\n — {quote.attribution}, <cite>{quote.work}</cite> ({quote.year})\n </footer>\n </blockquote>\n\n <p className=\"mt-8 max-w-prose-wide text-sm text-stone-400\">\n {closingStatement}\n </p>\n </div>\n </section>\n );\n}\n"],"mappings":"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","names":["Link","jsx","jsxs","jsx","jsxs","DEFAULT_CLOSING"]}
|
|
1
|
+
{"version":3,"sources":["../src/PlatformNav.tsx","../src/SiteFooter.tsx","../src/MinimalFooter.tsx","../src/PhilosophyFooter.tsx"],"sourcesContent":["'use client';\n\nimport Link from 'next/link';\nimport { Logo } from '@dataimago/ui';\nimport type { PlatformNavProps } from './types';\n\n/**\n * Platform navigation — sticky header with the property's brand mark + nav cluster.\n *\n * The header logo is the property's `@dataimago/brand` wordmark, rendered via\n * `<Logo>` (font-free, IoU-locked, `currentColor`) — sized by height so any mark\n * (Level-1 `dataimago_ai_OVERLAP`, Level-2 `dissertation_ai_OVERLAP`, …) fits the\n * nav regardless of aspect. The a/i overlap already encodes the \"ai\", so the old\n * hardcoded \".ai\" text span is gone.\n *\n * Extracted from apps/hub into @dataimago/hub-chrome during iteration-3-B.2\n * (2026-05-11). `brandMark`/`brandLabel`/`links`/`cta` allow per-vertical\n * customization; all props default to the Level-1 hub configuration.\n */\n\nconst DEFAULT_LINKS = [\n { href: '/ecosystem', label: 'Ecosystem' },\n { href: '/philosophy', label: 'Philosophy' },\n];\n\nconst DEFAULT_CTA = { href: '/onboard', label: 'Begin' };\n\nexport function PlatformNav({\n brandMark = 'dataimago_ai_OVERLAP',\n brandLabel = 'dataimago.ai home',\n links = DEFAULT_LINKS,\n cta = DEFAULT_CTA,\n navLabel = 'Primary',\n homeHref = '/',\n}: PlatformNavProps) {\n return (\n <header className=\"sticky top-0 z-40 border-b border-stone-200 bg-stone-100/95 backdrop-blur-sm\">\n <nav\n className=\"mx-auto flex max-w-7xl items-center justify-between px-6 py-4\"\n aria-label={navLabel}\n >\n <Link\n href={homeHref}\n className=\"flex items-center text-stone-900 transition hover:opacity-80\"\n aria-label={brandLabel}\n >\n <Logo\n name={brandMark}\n variant=\"PATH\"\n aria-hidden\n className=\"[&_svg]:h-7 [&_svg]:w-auto sm:[&_svg]:h-8\"\n />\n </Link>\n\n <div className=\"flex items-center gap-2 sm:gap-6\">\n {links.map(({ href, label, external }) =>\n external ? (\n <a\n key={href}\n href={href}\n className=\"btn-ghost hidden sm:inline-flex\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {label}\n </a>\n ) : (\n <Link key={href} href={href} className=\"btn-ghost hidden sm:inline-flex\">\n {label}\n </Link>\n )\n )}\n <Link href={cta.href} className=\"btn-primary\">\n {cta.label}\n </Link>\n </div>\n </nav>\n </header>\n );\n}\n","'use client';\n\nimport Link from 'next/link';\nimport { Logo } from '@dataimago/ui';\nimport type { SiteFooterProps } from './types';\n\n/**\n * Site footer — the Level-1 hub footer: dark surface, dataimago wordmark + a\n * trimmed nav column grid.\n *\n * The wordmark is the `dataimago` brand mark via `<Logo>` (font-free, in a light\n * `currentColor` on the dark surface) — no backplate, no hardcoded \".ai\" span.\n *\n * Extracted from apps/hub into @dataimago/hub-chrome during iteration-3-B.2\n * (2026-05-11). The defaults drop the former \"Legacy\" column + the critical-theory\n * closing statement (the philosophical-basis editorial lives on the PhilosophyFooter,\n * which is Level-1-only). Level-2 verticals use `MinimalFooter` instead.\n */\n\nconst DEFAULT_TAGLINE = 'A living AI-native application ecosystem.';\n\nconst DEFAULT_COLUMNS = [\n {\n heading: 'Platform',\n links: [\n { href: '/onboard', label: 'Begin a project' },\n { href: '/ecosystem', label: 'Ecosystem' },\n { href: '/philosophy', label: 'Philosophy' },\n ],\n },\n {\n heading: 'Framework',\n links: [\n {\n href: 'https://github.com/dataimago/dataimago-design',\n label: 'dataimago-design',\n external: true,\n },\n {\n href: 'https://github.com/dataimago/dataimago-rpkg',\n label: 'dataimago-rpkg',\n external: true,\n },\n {\n href: 'https://github.com/dataimago/dataimago-ai',\n label: 'dataimago-ai',\n external: true,\n },\n ],\n },\n];\n\nexport function SiteFooter({\n tagline = DEFAULT_TAGLINE,\n columns = DEFAULT_COLUMNS,\n closingStatement,\n}: SiteFooterProps) {\n return (\n <footer\n className=\"border-t border-stone-800 bg-stone-900 text-stone-400\"\n data-bs-theme=\"dark\"\n >\n <div className=\"mx-auto max-w-6xl px-6 py-12\">\n <div className=\"grid gap-8 md:grid-cols-4\">\n <div>\n <Link\n href=\"/\"\n className=\"inline-flex items-center text-stone-100 transition hover:opacity-80\"\n aria-label=\"dataimago\"\n >\n <Logo\n name=\"dataimago\"\n variant=\"PATH\"\n aria-hidden\n className=\"[&_svg]:h-7 [&_svg]:w-auto\"\n />\n </Link>\n <p className=\"mt-3 text-xs text-stone-400\">{tagline}</p>\n </div>\n\n {columns.map((col) => (\n <div key={col.heading}>\n <h4 className=\"font-mono text-xs uppercase tracking-wider text-accent-300\">\n {col.heading}\n </h4>\n <ul className=\"mt-3 space-y-2 text-sm\">\n {col.links.map(({ href, label, external }) => (\n <li key={label}>\n {!href ? (\n label\n ) : external ? (\n <a\n href={href}\n className=\"hover:text-paper-100\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {label}\n </a>\n ) : (\n <Link href={href} className=\"hover:text-paper-100\">\n {label}\n </Link>\n )}\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n\n {closingStatement ? (\n <div className=\"mt-12 border-t border-stone-800 pt-6 text-xs text-stone-400\">\n <p>{closingStatement}</p>\n </div>\n ) : null}\n </div>\n </footer>\n );\n}\n","'use client';\n\nimport Link from 'next/link';\nimport { Logo } from '@dataimago/ui';\nimport type { MinimalFooterProps } from './types';\n\n/**\n * MinimalFooter — the Level-2 vertical footer.\n *\n * A Level-2 vertical (dissertation.ai, future rpkg.ai / sgpc.ai) is \"an embodiment\n * of dataimago\": the footer shows the parent `dataimago` wordmark linking UP to\n * dataimago.ai, the embodiment line, a compact links row, and a copyright line.\n * No nav columns, no philosophy — those belong to the Level-1 hub (SiteFooter +\n * PhilosophyFooter). See dataimago-design wiki/patterns/hub-hero-anatomy.\n */\n\nconst DEFAULT_BRAND_HREF = 'https://dataimago.ai';\nconst DEFAULT_EMBODIMENT = 'An embodiment of dataimago';\n\nexport function MinimalFooter({\n brandHref = DEFAULT_BRAND_HREF,\n embodimentLabel = DEFAULT_EMBODIMENT,\n links = [],\n copyright,\n}: MinimalFooterProps) {\n return (\n <footer\n className=\"border-t border-stone-800 bg-stone-900 text-stone-400\"\n data-bs-theme=\"dark\"\n >\n <div className=\"mx-auto flex max-w-6xl flex-col items-center gap-4 px-6 py-10 text-center\">\n <a\n href={brandHref}\n className=\"inline-flex flex-col items-center gap-2 text-stone-100 transition hover:opacity-80\"\n target=\"_blank\"\n rel=\"noreferrer\"\n aria-label={`${embodimentLabel} — visit dataimago.ai`}\n >\n <Logo\n name=\"dataimago\"\n variant=\"PATH\"\n aria-hidden\n className=\"[&_svg]:h-7 [&_svg]:w-auto\"\n />\n <span className=\"text-sm text-stone-400\">{embodimentLabel}</span>\n </a>\n\n {links.length > 0 ? (\n <nav\n className=\"flex flex-wrap items-center justify-center gap-x-6 gap-y-2 text-sm\"\n aria-label=\"Footer\"\n >\n {links.map(({ href, label, external }) =>\n !href ? (\n <span key={label} className=\"text-stone-400\">\n {label}\n </span>\n ) : external ? (\n <a\n key={label}\n href={href}\n className=\"text-stone-300 hover:text-paper-100\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {label}\n </a>\n ) : (\n <Link key={label} href={href} className=\"text-stone-300 hover:text-paper-100\">\n {label}\n </Link>\n )\n )}\n </nav>\n ) : null}\n\n {copyright ? <p className=\"text-xs text-stone-400\">{copyright}</p> : null}\n </div>\n </footer>\n );\n}\n","'use client';\n\nimport type { PhilosophyFooterProps } from './types';\n\n/**\n * Philosophy footer — the platform's moral weight, rendered as a dark\n * editorial section with three belief/mission/vision pairs and a pull-quote.\n *\n * Iteration-1 visual identity (Phase B.3, 2026-05-06):\n * Dark-surface chrome with text-accent-500 eyebrows, font-display body, and\n * the Baudrillard blockquote with border-copper-500 (preserved-decorative-\n * copper per iteration-1 §5.2 governance).\n *\n * Iteration-2 role-shift (2026-05-07): text-accent-500 eyebrows resolve to\n * sky-blue accent-300 (#3498DB) on this dark surface via mode-aware mapping —\n * 5.41:1 on stone-900 (was 3.23:1 AA-large only with copper). The\n * border-copper-500 blockquote frame survives untouched. \"Two warmths\"\n * coexist: cool sky-blue on editorial eyebrows, warm copper on the\n * philosophical-quote frame.\n *\n * Extracted from apps/hub into @dataimago/hub-chrome during iteration-3-B.2\n * (2026-05-11). The `pairs`, `quote`, and `closingStatement` props allow\n * per-vertical adaptation; all props default to the Level-1 hub content.\n */\n\nconst DEFAULT_PAIRS = [\n {\n eyebrow: 'our belief',\n body: 'AI can enable virtuous cycles of improvement in the world.',\n },\n {\n eyebrow: 'our mission',\n body: 'The emancipation of humanity through ai super-alignment.',\n },\n {\n eyebrow: 'our vision',\n body: 'Super-alignment embeds ai in culture, not culture in ai.',\n },\n];\n\nconst DEFAULT_QUOTE = {\n text: `If men create intelligent machines, or fantasize about them, it is either because they secretly despair of their own intelligence or because they are in danger of succumbing to the weight of a monstrous and useless intelligence which they seek to exorcize by transferring it to machines, where they can play with it and make fun of it. By entrusting this burdensome intelligence to machines we are released from any responsibility to knowledge.`,\n attribution: 'Jean Baudrillard',\n work: 'Xerox and Infinity',\n year: 1988,\n};\n\nconst DEFAULT_CLOSING =\n 'dataimago is the structural answer to this critique. Every architectural choice — R as source of truth, editorial authority with the domain expert, the non-destructive retrofit principle, the ecosystem-as-commons — refuses to release the scholar from responsibility to their own knowledge. The AI serves the culture; the culture governs the AI.';\n\nexport function PhilosophyFooter({\n pairs = DEFAULT_PAIRS,\n quote = DEFAULT_QUOTE,\n closingStatement = DEFAULT_CLOSING,\n}: PhilosophyFooterProps) {\n return (\n <section\n aria-labelledby=\"philosophy-heading\"\n className=\"border-t border-stone-200 bg-stone-900 py-20 text-paper-100 sm:py-28\"\n >\n <div className=\"mx-auto max-w-6xl px-6\">\n <div className=\"grid gap-12 lg:grid-cols-3\">\n {pairs.map((pair, i) => (\n <div key={i}>\n <p className=\"font-mono text-xs uppercase tracking-wider text-accent-500\">\n {pair.eyebrow}\n </p>\n {i === 0 ? (\n <h3\n id=\"philosophy-heading\"\n className=\"mt-2 font-display text-xl text-paper-100\"\n >\n {pair.body}\n </h3>\n ) : (\n <p className=\"mt-2 font-display text-xl text-paper-100\">\n {pair.body}\n </p>\n )}\n </div>\n ))}\n </div>\n\n {/* Pull-quote — border-copper-500 PRESERVED: decorative-emphasis\n blockquote frame per iteration-1 §5.2 preserved-decorative-copper\n governance. */}\n <blockquote className=\"mt-16 max-w-prose-wide border-l-2 border-copper-500 pl-6 font-display italic text-paper-100\">\n <p className=\"text-base leading-relaxed\">{quote.text}</p>\n <footer className=\"mt-4 text-sm not-italic text-stone-400\">\n — {quote.attribution}, <cite>{quote.work}</cite> ({quote.year})\n </footer>\n </blockquote>\n\n <p className=\"mt-8 max-w-prose-wide text-sm text-stone-400\">\n {closingStatement}\n </p>\n </div>\n </section>\n );\n}\n"],"mappings":"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","names":["Link","Logo","jsx","jsxs","Link","Logo","jsx","jsxs","jsx","jsxs"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dataimago/hub-chrome",
|
|
3
|
-
"version": "0.2.0-alpha.
|
|
3
|
+
"version": "0.2.0-alpha.1",
|
|
4
4
|
"description": "Configurable hub chrome components — PlatformNav, SiteFooter, PhilosophyFooter — with dataimago house defaults and props for per-vertical adaptation. Extracted from dataimago-ai/apps/hub during iteration-3-B.2 (2026-05-11). Consumed by both the Level-1 dataimago.ai hub and Level-2 verticals (dissertation.ai, future sgpc.ai / rpkg.ai).",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -36,13 +36,15 @@
|
|
|
36
36
|
"README.md"
|
|
37
37
|
],
|
|
38
38
|
"peerDependencies": {
|
|
39
|
-
"@dataimago/
|
|
39
|
+
"@dataimago/brand": ">=0.1.0-alpha.1",
|
|
40
|
+
"@dataimago/ui": ">=0.1.0-alpha.6",
|
|
40
41
|
"next": ">=14",
|
|
41
42
|
"react": "^18.2.0",
|
|
42
43
|
"react-dom": "^18.2.0"
|
|
43
44
|
},
|
|
44
45
|
"devDependencies": {
|
|
45
|
-
"@dataimago/
|
|
46
|
+
"@dataimago/brand": "^0.1.0-alpha.1",
|
|
47
|
+
"@dataimago/ui": "^0.1.0-alpha.6",
|
|
46
48
|
"@types/react": "^18.2.43",
|
|
47
49
|
"@types/react-dom": "^18.2.17",
|
|
48
50
|
"lucide-react": "^0.344.0",
|