@fasl-work/caos-app-shell 0.6.4 → 0.6.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -49,6 +49,7 @@ const config: ShellConfig = {
49
49
  ```
50
50
 
51
51
  - **Land on the tool:** make `/` your interactive tool; Introduction/Methodology/etc. are separate routes.
52
+ - **Product metadata:** `footer.attribution` accepts bilingual text or `false` when a product excludes personal attribution. `footer.license` accepts the product's bilingual license label. Omitting these keeps existing consumer defaults. A product does not inherit the shell's MIT license.
52
53
  - **Hub case (Faena):** pass `routes: []` (or one) → the nav is hidden, header/footer identical.
53
54
  - **Deep pages:** compose with `Tabs`, `SubTabs`, `Equation`/`InlineMath`, `Callout`, `Figure`, and
54
55
  `CitationsProvider` + `Cite`/`Refs`/`ReferenceList`. Read the current language with `useShellLang()`.
package/dist/index.d.ts CHANGED
@@ -59,6 +59,16 @@ interface ShellConfig {
59
59
  * license (e.g. "Engine: lingbot-map (arXiv:2604.14141, Apache-2.0)") and the one-line honest
60
60
  * disclaimer of how the app runs. Both optional, both bilingual. */
61
61
  footer?: {
62
+ /** Explicit product attribution, or false when the product excludes personal attribution. */
63
+ attribution?: {
64
+ en: string;
65
+ es: string;
66
+ } | false;
67
+ /** The consuming product's license; the shell's MIT license is not inherited by applications. */
68
+ license?: {
69
+ en: string;
70
+ es: string;
71
+ };
62
72
  provenance?: {
63
73
  en: string;
64
74
  es: string;
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { createContext, useState, useRef, useEffect, useCallback, useId, useContext } from 'react';
2
2
  import { useLocation, NavLink } from 'react-router';
3
- import { Sun, Moon, Languages, Boxes, Github, Globe, Briefcase, Info } from 'lucide-react';
3
+ import { Sun, Moon, Languages, Boxes, CodeXml, Globe, Briefcase, Info } from 'lucide-react';
4
4
  import { create } from 'zustand';
5
5
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
6
6
  import katex from 'katex';
@@ -273,7 +273,7 @@ function AppShell({ config, children }) {
273
273
  r.path
274
274
  )) }),
275
275
  /* @__PURE__ */ jsxs("div", { className: "header-actions", children: [
276
- /* @__PURE__ */ jsx("a", { className: "icon-btn", href: config.links.github, target: "_blank", rel: "noreferrer noopener", "aria-label": c.github, title: c.github, children: /* @__PURE__ */ jsx(Github, { size: 18, "aria-hidden": "true" }) }),
276
+ /* @__PURE__ */ jsx("a", { className: "icon-btn", href: config.links.github, target: "_blank", rel: "noreferrer noopener", "aria-label": c.github, title: c.github, children: /* @__PURE__ */ jsx(CodeXml, { size: 18, "aria-hidden": "true" }) }),
277
277
  /* @__PURE__ */ jsx("a", { className: "icon-btn", href: personal, target: "_blank", rel: "noreferrer noopener", "aria-label": c.personal, title: c.personal, children: /* @__PURE__ */ jsx(Globe, { size: 18, "aria-hidden": "true" }) }),
278
278
  /* @__PURE__ */ jsx("a", { className: "icon-btn", href: portfolio, target: "_blank", rel: "noreferrer noopener", "aria-label": c.portfolio, title: c.portfolio, children: /* @__PURE__ */ jsx(Briefcase, { size: 18, "aria-hidden": "true" }) }),
279
279
  config.architecture && /* @__PURE__ */ jsx("button", { className: "icon-btn", type: "button", onClick: () => setArchOpen(true), "aria-label": archLabel, title: archLabel, children: /* @__PURE__ */ jsx(Info, { size: 18, "aria-hidden": "true" }) }),
@@ -293,8 +293,10 @@ function AppShell({ config, children }) {
293
293
  c.version,
294
294
  config.version
295
295
  ] }) }),
296
- /* @__PURE__ */ jsx("span", { "aria-hidden": "true", children: "\xB7" }),
297
- /* @__PURE__ */ jsx("span", { children: c.attribution }),
296
+ config.footer?.attribution !== false && /* @__PURE__ */ jsxs(Fragment, { children: [
297
+ /* @__PURE__ */ jsx("span", { "aria-hidden": "true", children: "\xB7" }),
298
+ /* @__PURE__ */ jsx("span", { children: config.footer?.attribution?.[lang] ?? c.attribution })
299
+ ] }),
298
300
  config.footer?.provenance && /* @__PURE__ */ jsxs(Fragment, { children: [
299
301
  /* @__PURE__ */ jsx("span", { "aria-hidden": "true", children: "\xB7" }),
300
302
  /* @__PURE__ */ jsx("span", { children: config.footer.provenance[lang] })
@@ -302,7 +304,7 @@ function AppShell({ config, children }) {
302
304
  /* @__PURE__ */ jsx("span", { "aria-hidden": "true", children: "\xB7" }),
303
305
  /* @__PURE__ */ jsx("a", { href: config.links.github, target: "_blank", rel: "noreferrer noopener", children: c.github }),
304
306
  /* @__PURE__ */ jsx("span", { "aria-hidden": "true", children: "\xB7" }),
305
- /* @__PURE__ */ jsx("span", { className: "faint", children: c.license }),
307
+ /* @__PURE__ */ jsx("span", { className: "faint", children: config.footer?.license?.[lang] ?? c.license }),
306
308
  config.footer?.disclaimer && /* @__PURE__ */ jsxs(Fragment, { children: [
307
309
  /* @__PURE__ */ jsx("span", { "aria-hidden": "true", children: "\xB7" }),
308
310
  /* @__PURE__ */ jsx("span", { className: "faint", children: config.footer.disclaimer[lang] })
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fasl-work/caos-app-shell",
3
- "version": "0.6.4",
3
+ "version": "0.6.6",
4
4
  "description": "Shared web-app shell + content primitives + design system for the CAOS / Faena public apps (ADR-0016).",
5
5
  "license": "MIT",
6
6
  "author": "Felipe Santibáñez-Leal",
@@ -43,8 +43,9 @@
43
43
  "@types/katex": "^0.16.7",
44
44
  "@types/react": "^19.0.0",
45
45
  "@types/react-dom": "^19.0.0",
46
+ "esbuild": "0.28.1",
46
47
  "katex": "^0.16.11",
47
- "lucide-react": "^0.469.0",
48
+ "lucide-react": "1.43.0",
48
49
  "react": "^19.0.0",
49
50
  "react-dom": "^19.0.0",
50
51
  "react-router": "^8.3.0",