@nanisoft/prism-ui 0.2.0 → 0.4.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.
Files changed (61) hide show
  1. package/dist/blocks/index.d.ts +2 -0
  2. package/dist/blocks/index.d.ts.map +1 -1
  3. package/dist/blocks/index.js +2 -0
  4. package/dist/blocks/index.js.map +1 -1
  5. package/dist/blocks/site-footer/SiteFooter.d.ts +26 -0
  6. package/dist/blocks/site-footer/SiteFooter.d.ts.map +1 -0
  7. package/dist/blocks/site-footer/SiteFooter.js +10 -0
  8. package/dist/blocks/site-footer/SiteFooter.js.map +1 -0
  9. package/dist/blocks/site-footer/index.d.ts +2 -0
  10. package/dist/blocks/site-footer/index.d.ts.map +1 -0
  11. package/dist/blocks/site-footer/index.js +2 -0
  12. package/dist/blocks/site-footer/index.js.map +1 -0
  13. package/dist/blocks/site-header/SiteHeader.d.ts +19 -0
  14. package/dist/blocks/site-header/SiteHeader.d.ts.map +1 -0
  15. package/dist/blocks/site-header/SiteHeader.js +32 -0
  16. package/dist/blocks/site-header/SiteHeader.js.map +1 -0
  17. package/dist/blocks/site-header/index.d.ts +2 -0
  18. package/dist/blocks/site-header/index.d.ts.map +1 -0
  19. package/dist/blocks/site-header/index.js +2 -0
  20. package/dist/blocks/site-header/index.js.map +1 -0
  21. package/dist/index.d.ts +5 -0
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +7 -0
  24. package/dist/index.js.map +1 -1
  25. package/dist/products/ProductDot.d.ts +7 -0
  26. package/dist/products/ProductDot.d.ts.map +1 -0
  27. package/dist/products/ProductDot.js +7 -0
  28. package/dist/products/ProductDot.js.map +1 -0
  29. package/dist/products/index.d.ts +22 -0
  30. package/dist/products/index.d.ts.map +1 -0
  31. package/dist/products/index.js +72 -0
  32. package/dist/products/index.js.map +1 -0
  33. package/dist/provider/PrismThemeMode.d.ts +17 -0
  34. package/dist/provider/PrismThemeMode.d.ts.map +1 -0
  35. package/dist/provider/PrismThemeMode.js +61 -0
  36. package/dist/provider/PrismThemeMode.js.map +1 -0
  37. package/dist/provider/index.d.ts +1 -0
  38. package/dist/provider/index.d.ts.map +1 -1
  39. package/dist/provider/index.js +1 -0
  40. package/dist/provider/index.js.map +1 -1
  41. package/dist/styles.css +300 -1
  42. package/dist/theming/bake.d.ts +24 -0
  43. package/dist/theming/bake.d.ts.map +1 -0
  44. package/dist/theming/bake.js +78 -0
  45. package/dist/theming/bake.js.map +1 -0
  46. package/dist/theming/bootScript.d.ts +9 -0
  47. package/dist/theming/bootScript.d.ts.map +1 -0
  48. package/dist/theming/bootScript.js +27 -0
  49. package/dist/theming/bootScript.js.map +1 -0
  50. package/dist/theming/index.d.ts +4 -0
  51. package/dist/theming/index.d.ts.map +1 -0
  52. package/dist/theming/index.js +8 -0
  53. package/dist/theming/index.js.map +1 -0
  54. package/dist/theming/storage.d.ts +5 -0
  55. package/dist/theming/storage.d.ts.map +1 -0
  56. package/dist/theming/storage.js +11 -0
  57. package/dist/theming/storage.js.map +1 -0
  58. package/dist/wrapped-registry.d.ts.map +1 -1
  59. package/dist/wrapped-registry.js +4 -0
  60. package/dist/wrapped-registry.js.map +1 -1
  61. package/package.json +11 -2
@@ -1,3 +1,5 @@
1
1
  export { ComponentDemo, type ComponentDemoProps } from './component-demo/index.js';
2
2
  export { PageHeader, type PageHeaderProps } from './page-header/index.js';
3
+ export { SiteHeader, type SiteHeaderProps, type PrismNavLink } from './site-header/index.js';
4
+ export { SiteFooter, type SiteFooterProps, type SiteFooterColumn, type SiteFooterSocialLink, } from './site-footer/index.js';
3
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/blocks/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/blocks/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC7F,OAAO,EACL,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,GAC1B,MAAM,wBAAwB,CAAC"}
@@ -1,4 +1,6 @@
1
1
  // prism-ui blocks barrel — pre-composed components, npm-delivered, never copied.
2
2
  export { ComponentDemo } from './component-demo/index.js';
3
3
  export { PageHeader } from './page-header/index.js';
4
+ export { SiteHeader } from './site-header/index.js';
5
+ export { SiteFooter, } from './site-footer/index.js';
4
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/blocks/index.ts"],"names":[],"mappings":"AAAA,iFAAiF;AAEjF,OAAO,EAAE,aAAa,EAA2B,MAAM,2BAA2B,CAAC;AACnF,OAAO,EAAE,UAAU,EAAwB,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/blocks/index.ts"],"names":[],"mappings":"AAAA,iFAAiF;AAEjF,OAAO,EAAE,aAAa,EAA2B,MAAM,2BAA2B,CAAC;AACnF,OAAO,EAAE,UAAU,EAAwB,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EAAE,UAAU,EAA2C,MAAM,wBAAwB,CAAC;AAC7F,OAAO,EACL,UAAU,GAIX,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,26 @@
1
+ import type { ReactNode } from 'react';
2
+ import { type PrismProductId } from '../../products/index.js';
3
+ import type { PrismNavLink } from '../site-header/index.js';
4
+ export interface SiteFooterColumn {
5
+ title: string;
6
+ links: readonly PrismNavLink[];
7
+ }
8
+ export interface SiteFooterSocialLink {
9
+ label: string;
10
+ url: string;
11
+ /** App-supplied icon — take it from the @nanisoft/prism-ui/icons re-export. */
12
+ icon: ReactNode;
13
+ }
14
+ export interface SiteFooterProps {
15
+ /** The site's registry id — marks the current product in the grid. */
16
+ site: PrismProductId;
17
+ /** Site-declared link columns, rendered beside the product grid. */
18
+ columns?: readonly SiteFooterColumn[];
19
+ /** Social links with app-supplied icons. */
20
+ social?: readonly SiteFooterSocialLink[];
21
+ /** Overrides the default "© NaniSoft" line. */
22
+ legal?: ReactNode;
23
+ className?: string;
24
+ }
25
+ export declare function SiteFooter({ site, columns, social, legal, className }: SiteFooterProps): ReactNode;
26
+ //# sourceMappingURL=SiteFooter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SiteFooter.d.ts","sourceRoot":"","sources":["../../../src/blocks/site-footer/SiteFooter.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAG7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,+EAA+E;IAC/E,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,sEAAsE;IACtE,IAAI,EAAE,cAAc,CAAC;IACrB,oEAAoE;IACpE,OAAO,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACtC,4CAA4C;IAC5C,MAAM,CAAC,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACzC,+CAA+C;IAC/C,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,eAAe,GAAG,SAAS,CAkElG"}
@@ -0,0 +1,10 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { prismProducts } from '../../products/index.js';
4
+ import { ProductDot } from '../../products/ProductDot.js';
5
+ import { usePrismLink } from '../../provider/index.js';
6
+ export function SiteFooter({ site, columns, social, legal, className }) {
7
+ const Link = usePrismLink();
8
+ return (_jsx("footer", { className: ['prism-site-footer', className].filter(Boolean).join(' '), "data-prism": "site-footer", children: _jsxs("div", { className: "prism-site-footer__inner", children: [_jsx("div", { className: "prism-site-footer__products", "data-prism": "site-footer-products", children: prismProducts.map((product) => (_jsx(Link, { href: product.url, children: _jsxs("span", { className: "prism-site-footer__product", "data-prism": "site-footer-product", "data-product": product.id, "data-current": product.id === site ? 'true' : undefined, children: [_jsxs("span", { className: "prism-site-footer__product-head", children: [_jsx(ProductDot, { product: product }), _jsx("span", { className: "prism-site-footer__product-name", children: product.name })] }), _jsx("span", { className: "prism-site-footer__product-tagline", children: product.tagline })] }) }, product.id))) }), columns?.length ? (_jsx("nav", { className: "prism-site-footer__columns", children: columns.map((column) => (_jsxs("div", { className: "prism-site-footer__column", children: [_jsx("h3", { className: "prism-site-footer__column-title", children: column.title }), column.links.map((link) => (_jsx(Link, { href: link.url, children: link.label }, link.url)))] }, column.title))) })) : null, _jsxs("div", { className: "prism-site-footer__base", children: [social?.length ? (_jsx("div", { className: "prism-site-footer__social", children: social.map((entry) => (_jsx(Link, { href: entry.url, children: _jsxs("span", { className: "prism-site-footer__social-link", title: entry.label, children: [_jsx("span", { "aria-hidden": "true", children: entry.icon }), _jsx("span", { className: "prism-visually-hidden", children: entry.label })] }) }, entry.url))) })) : null, _jsx("div", { className: "prism-site-footer__legal", children: legal ?? _jsx("span", { children: "\u00A9 NaniSoft" }) })] })] }) }));
9
+ }
10
+ //# sourceMappingURL=SiteFooter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SiteFooter.js","sourceRoot":"","sources":["../../../src/blocks/site-footer/SiteFooter.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAWb,OAAO,EAAE,aAAa,EAAuB,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AA2BvD,MAAM,UAAU,UAAU,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAmB;IACrF,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;IAE5B,OAAO,CACL,iBACE,SAAS,EAAE,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,gBAC1D,aAAa,YAExB,eAAK,SAAS,EAAC,0BAA0B,aACvC,cAAK,SAAS,EAAC,6BAA6B,gBAAY,sBAAsB,YAC3E,aAAa,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAG9B,KAAC,IAAI,IAAkB,IAAI,EAAE,OAAO,CAAC,GAAG,YACtC,gBACE,SAAS,EAAC,4BAA4B,gBAC3B,qBAAqB,kBAClB,OAAO,CAAC,EAAE,kBACV,OAAO,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,aAEtD,gBAAM,SAAS,EAAC,iCAAiC,aAC/C,KAAC,UAAU,IAAC,OAAO,EAAE,OAAO,GAAI,EAChC,eAAM,SAAS,EAAC,iCAAiC,YAAE,OAAO,CAAC,IAAI,GAAQ,IAClE,EACP,eAAM,SAAS,EAAC,oCAAoC,YAAE,OAAO,CAAC,OAAO,GAAQ,IACxE,IAZE,OAAO,CAAC,EAAE,CAad,CACR,CAAC,GACE,EAEL,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CACjB,cAAK,SAAS,EAAC,4BAA4B,YACxC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACvB,eAAwB,SAAS,EAAC,2BAA2B,aAC3D,aAAI,SAAS,EAAC,iCAAiC,YAAE,MAAM,CAAC,KAAK,GAAM,EAClE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAC1B,KAAC,IAAI,IAAgB,IAAI,EAAE,IAAI,CAAC,GAAG,YAChC,IAAI,CAAC,KAAK,IADF,IAAI,CAAC,GAAG,CAEZ,CACR,CAAC,KANM,MAAM,CAAC,KAAK,CAOhB,CACP,CAAC,GACE,CACP,CAAC,CAAC,CAAC,IAAI,EAER,eAAK,SAAS,EAAC,yBAAyB,aACrC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAChB,cAAK,SAAS,EAAC,2BAA2B,YACvC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACrB,KAAC,IAAI,IAAiB,IAAI,EAAE,KAAK,CAAC,GAAG,YAInC,gBAAM,SAAS,EAAC,gCAAgC,EAAC,KAAK,EAAE,KAAK,CAAC,KAAK,aACjE,8BAAkB,MAAM,YAAE,KAAK,CAAC,IAAI,GAAQ,EAC5C,eAAM,SAAS,EAAC,uBAAuB,YAAE,KAAK,CAAC,KAAK,GAAQ,IACvD,IAPE,KAAK,CAAC,GAAG,CAQb,CACR,CAAC,GACE,CACP,CAAC,CAAC,CAAC,IAAI,EACR,cAAK,SAAS,EAAC,0BAA0B,YAAE,KAAK,IAAI,6CAAuB,GAAO,IAC9E,IACF,GACC,CACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { SiteFooter, type SiteFooterProps, type SiteFooterColumn, type SiteFooterSocialLink, } from './SiteFooter.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/blocks/site-footer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,GAC1B,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { SiteFooter, } from './SiteFooter.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/blocks/site-footer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,GAIX,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { type ReactNode } from 'react';
2
+ import { type PrismProductId } from '../../products/index.js';
3
+ export interface PrismNavLink {
4
+ label: string;
5
+ url: string;
6
+ }
7
+ export interface SiteHeaderProps {
8
+ /** The site's registry id — identity is static and known at build time. */
9
+ site: PrismProductId;
10
+ /** Lean site nav, rendered between the brand and the actions. */
11
+ nav?: readonly PrismNavLink[];
12
+ /** Right-pinned call to action, before the switcher. */
13
+ cta?: ReactNode;
14
+ /** Sticky by default; pass false to pin the header static. */
15
+ sticky?: boolean;
16
+ className?: string;
17
+ }
18
+ export declare function SiteHeader({ site, nav, cta, sticky, className }: SiteHeaderProps): ReactNode;
19
+ //# sourceMappingURL=SiteHeader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SiteHeader.d.ts","sourceRoot":"","sources":["../../../src/blocks/site-header/SiteHeader.tsx"],"names":[],"mappings":"AAUA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEjD,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAI7E,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,eAAe;IAC9B,2EAA2E;IAC3E,IAAI,EAAE,cAAc,CAAC;IACrB,iEAAiE;IACjE,GAAG,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;IAC9B,wDAAwD;IACxD,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,8DAA8D;IAC9D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,MAAa,EAAE,SAAS,EAAE,EAAE,eAAe,GAAG,SAAS,CA+GnG"}
@@ -0,0 +1,32 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ // SiteHeader (ADR-0006 §1): the one header a site wears everywhere — landing
4
+ // and docs alike. Identity by registry id as a plain prop; nav is lean
5
+ // { label, url } through usePrismLink; optional right-pinned CTA; sticky by
6
+ // default. Built in and not prop-configurable: the product switcher, the
7
+ // theme-mode toggle, and the mobile drawer. One header, no variants.
8
+ import { AppstoreOutlined, DownOutlined, MenuOutlined, MoonOutlined, SunOutlined } from '@ant-design/icons';
9
+ import { Button, Drawer, Dropdown } from 'antd';
10
+ import { useState } from 'react';
11
+ import { prismProducts } from '../../products/index.js';
12
+ import { ProductDot } from '../../products/ProductDot.js';
13
+ import { usePrismLink, usePrismThemeMode } from '../../provider/index.js';
14
+ export function SiteHeader({ site, nav, cta, sticky = true, className }) {
15
+ const Link = usePrismLink();
16
+ const { mode, toggleMode } = usePrismThemeMode();
17
+ const [drawerOpen, setDrawerOpen] = useState(false);
18
+ const current = prismProducts.find((product) => product.id === site);
19
+ const switcherItems = prismProducts.map((product) => ({
20
+ key: product.id,
21
+ label: product.id === site ? (_jsxs("span", { className: "prism-site-header__switcher-current", "aria-current": "true", children: [_jsx(ProductDot, { product: product }), product.name] })) : (_jsxs(Link, { href: product.url, children: [_jsx(ProductDot, { product: product }), product.name] })),
22
+ }));
23
+ const nextMode = mode === 'dark' ? 'light' : 'beam-dark';
24
+ return (_jsxs("header", { className: ['prism-site-header', sticky ? null : 'prism-site-header--static', className]
25
+ .filter(Boolean)
26
+ .join(' '), "data-prism": "site-header", children: [_jsxs("div", { className: "prism-site-header__inner", children: [_jsx(Link, { href: "/", children: _jsxs("span", { className: "prism-site-header__brand", children: [_jsx(ProductDot, { product: current }), current.name] }) }), nav?.length ? (_jsx("nav", { className: "prism-site-header__nav", "aria-label": "Site", children: nav.map((entry) => (_jsx(Link, { href: entry.url, children: entry.label }, entry.url))) })) : null, _jsxs("div", { className: "prism-site-header__actions", children: [cta, _jsx(Button, { className: "prism-site-header__menu-button", type: "text", "aria-label": "Menu", icon: _jsx(MenuOutlined, {}), onClick: () => setDrawerOpen(true) }), _jsx(Dropdown, { trigger: ['click'], menu: {
27
+ items: switcherItems,
28
+ selectable: false,
29
+ className: 'prism-site-header__switcher',
30
+ }, children: _jsx(Button, { icon: _jsx(AppstoreOutlined, {}), "aria-label": "NaniSoft products", children: _jsxs("span", { className: "prism-site-header__switcher-trigger", children: [current.name, _jsx(DownOutlined, { className: "prism-site-header__switcher-caret" })] }) }) }), _jsx(Button, { type: "text", "aria-label": `Switch to ${nextMode} mode`, icon: mode === 'dark' ? _jsx(SunOutlined, {}) : _jsx(MoonOutlined, {}), onClick: toggleMode })] })] }), _jsx(Drawer, { open: drawerOpen, onClose: () => setDrawerOpen(false), title: current.name, placement: "left", className: "prism-site-header__drawer-root", children: _jsxs("div", { className: "prism-site-header__drawer", "data-prism": "site-drawer", children: [_jsx("nav", { className: "prism-site-header__drawer-nav", "aria-label": "Site", children: nav?.map((entry) => (_jsx(Link, { href: entry.url, children: entry.label }, entry.url))) }), _jsx("div", { className: "prism-site-header__drawer-products", children: prismProducts.map((product) => (_jsxs(Link, { href: product.url, children: [_jsx(ProductDot, { product: product }), product.name, product.id === site ? _jsx("span", { className: "prism-site-header__drawer-here", children: "here" }) : null] }, product.id))) })] }) })] }));
31
+ }
32
+ //# sourceMappingURL=SiteHeader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SiteHeader.js","sourceRoot":"","sources":["../../../src/blocks/site-header/SiteHeader.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { SiteHeader, type SiteHeaderProps, type PrismNavLink, } from './SiteHeader.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/blocks/site-header/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,YAAY,GAClB,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { SiteHeader, } from './SiteHeader.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/blocks/site-header/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,GAGX,MAAM,iBAAiB,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,11 @@
1
1
  export { PrismProvider, type PrismProviderProps } from './provider/index.js';
2
2
  export { mergePrismTheme, toAntdTheme, isPrismTheme } from './provider/index.js';
3
3
  export { usePrismLink, PrismLinkContextProvider, type PrismLinkContextValue } from './provider/index.js';
4
+ export { PrismThemeModeProvider, usePrismThemeMode, type PrismThemeModeProviderProps, type PrismThemeModeValue, } from './provider/index.js';
5
+ export { prismProducts, getPrismProduct, productDotBackground, type PrismProduct, type PrismProductId, } from './products/index.js';
6
+ export { ProductDot } from './products/ProductDot.js';
7
+ export { PRISM_THEME_MODE_STORAGE_KEY, parsePrismThemeMode } from './theming/storage.js';
8
+ export { prismThemeBootScript, type PrismThemeBootScriptOptions } from './theming/bootScript.js';
4
9
  export * from './components/index.js';
5
10
  export * from './blocks/index.js';
6
11
  export * from './pages/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,wBAAwB,EAAE,KAAK,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACzG,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC3H,YAAY,EACV,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,eAAe,GAChB,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,wBAAwB,EAAE,KAAK,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACzG,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,KAAK,2BAA2B,EAChC,KAAK,mBAAmB,GACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,aAAa,EACb,eAAe,EACf,oBAAoB,EACpB,KAAK,YAAY,EACjB,KAAK,cAAc,GACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAGtD,OAAO,EAAE,4BAA4B,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACzF,OAAO,EAAE,oBAAoB,EAAE,KAAK,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AACjG,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC3H,YAAY,EACV,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,eAAe,GAChB,MAAM,uBAAuB,CAAC"}
package/dist/index.js CHANGED
@@ -6,6 +6,13 @@
6
6
  export { PrismProvider } from './provider/index.js';
7
7
  export { mergePrismTheme, toAntdTheme, isPrismTheme } from './provider/index.js';
8
8
  export { usePrismLink, PrismLinkContextProvider } from './provider/index.js';
9
+ export { PrismThemeModeProvider, usePrismThemeMode, } from './provider/index.js';
10
+ export { prismProducts, getPrismProduct, productDotBackground, } from './products/index.js';
11
+ export { ProductDot } from './products/ProductDot.js';
12
+ // Mode mechanics — the runtime-safe half of ./theming. The bake helper stays on
13
+ // the ./theming subpath: it pulls the SSR extractor.
14
+ export { PRISM_THEME_MODE_STORAGE_KEY, parsePrismThemeMode } from './theming/storage.js';
15
+ export { prismThemeBootScript } from './theming/bootScript.js';
9
16
  export * from './components/index.js';
10
17
  export * from './blocks/index.js';
11
18
  export * from './pages/index.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,sEAAsE;AACtE,mCAAmC;AACnC,6EAA6E;AAC7E,iEAAiE;AAEjE,OAAO,EAAE,aAAa,EAA2B,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,wBAAwB,EAA8B,MAAM,qBAAqB,CAAC;AACzG,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,sEAAsE;AACtE,mCAAmC;AACnC,6EAA6E;AAC7E,iEAAiE;AAEjE,OAAO,EAAE,aAAa,EAA2B,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,wBAAwB,EAA8B,MAAM,qBAAqB,CAAC;AACzG,OAAO,EACL,sBAAsB,EACtB,iBAAiB,GAGlB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,aAAa,EACb,eAAe,EACf,oBAAoB,GAGrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,gFAAgF;AAChF,qDAAqD;AACrD,OAAO,EAAE,4BAA4B,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACzF,OAAO,EAAE,oBAAoB,EAAoC,MAAM,yBAAyB,CAAC;AACjG,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { ReactNode } from 'react';
2
+ import { type PrismProduct } from './index.js';
3
+ export declare function ProductDot({ product, className }: {
4
+ product: PrismProduct;
5
+ className?: string;
6
+ }): ReactNode;
7
+ //# sourceMappingURL=ProductDot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProductDot.d.ts","sourceRoot":"","sources":["../../src/products/ProductDot.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,OAAO,CAAC;AAEtD,OAAO,EAAwB,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAErE,wBAAgB,UAAU,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE;IAAE,OAAO,EAAE,YAAY,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAU3G"}
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { productDotBackground } from './index.js';
3
+ export function ProductDot({ product, className }) {
4
+ const style = { background: productDotBackground(product) };
5
+ return (_jsx("span", { className: ['prism-product-dot', className].filter(Boolean).join(' '), style: style, "aria-hidden": "true", "data-product": product.id }));
6
+ }
7
+ //# sourceMappingURL=ProductDot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProductDot.js","sourceRoot":"","sources":["../../src/products/ProductDot.tsx"],"names":[],"mappings":";AAOA,OAAO,EAAE,oBAAoB,EAAqB,MAAM,YAAY,CAAC;AAErE,MAAM,UAAU,UAAU,CAAC,EAAE,OAAO,EAAE,SAAS,EAAiD;IAC9F,MAAM,KAAK,GAAkB,EAAE,UAAU,EAAE,oBAAoB,CAAC,OAAO,CAAC,EAAE,CAAC;IAC3E,OAAO,CACL,eACE,SAAS,EAAE,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EACrE,KAAK,EAAE,KAAK,iBACA,MAAM,kBACJ,OAAO,CAAC,EAAE,GACxB,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { type PrismPackId } from '@nanisoft/prism-tokens';
2
+ export type PrismProductId = 'www' | 'nexus' | 'atlas' | 'alphalens' | 'prism';
3
+ export interface PrismProduct {
4
+ readonly id: PrismProductId;
5
+ readonly kind: 'company' | 'product';
6
+ readonly name: string;
7
+ readonly tagline: string;
8
+ readonly url: string;
9
+ /** The product's brand pack. Null only for the company root (www), which wears all five. */
10
+ readonly pack: PrismPackId | null;
11
+ }
12
+ /** The registry in platform-story order: company root, then the products built on Nexus, then the language they wear. */
13
+ export declare const prismProducts: readonly PrismProduct[];
14
+ /** Registry lookup; misses return undefined so callers can branch on identity. */
15
+ export declare function getPrismProduct(id: PrismProductId): PrismProduct | undefined;
16
+ /**
17
+ * The pack-colour dot's CSS `background`: a product wears its own pack ink;
18
+ * www wears the five-pack spectrum (a conic sweep of every ink), because the
19
+ * company is the one entry that has no single colour.
20
+ */
21
+ export declare function productDotBackground(product: PrismProduct): string;
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/products/index.ts"],"names":[],"mappings":"AAUA,OAAO,EAAmB,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE3E,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,GAAG,WAAW,GAAG,OAAO,CAAC;AAE/E,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,cAAc,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,4FAA4F;IAC5F,QAAQ,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC;CACnC;AAWD,yHAAyH;AACzH,eAAO,MAAM,aAAa,EAAE,SAAS,YAAY,EAkC/C,CAAC;AAEH,kFAAkF;AAClF,wBAAgB,eAAe,CAAC,EAAE,EAAE,cAAc,GAAG,YAAY,GAAG,SAAS,CAE5E;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAQlE"}
@@ -0,0 +1,72 @@
1
+ // The products registry (ADR-0006 §3): the closed five-entry list that
2
+ // SiteHeader's switcher and SiteFooter's product grid both render from — one
3
+ // list, so the two can never disagree. Subdomain URLs are hardcoded constants;
4
+ // the list is frozen, so "closed" is true by construction.
5
+ //
6
+ // Future Products is deliberately absent: it is a www landing node, not a
7
+ // site, and the chrome only ever links to real ones. www rides in as the
8
+ // company root (every product site's switcher needs the way back) and carries
9
+ // no single pack — it layers all five.
10
+ import { prismBrandPacks } from '@nanisoft/prism-tokens';
11
+ const WWW = Object.freeze({
12
+ id: 'www',
13
+ kind: 'company',
14
+ name: 'NaniSoft',
15
+ tagline: 'Software that builds software.',
16
+ url: 'https://www.nanisoft.com',
17
+ pack: null,
18
+ });
19
+ /** The registry in platform-story order: company root, then the products built on Nexus, then the language they wear. */
20
+ export const prismProducts = Object.freeze([
21
+ WWW,
22
+ Object.freeze({
23
+ id: 'nexus',
24
+ kind: 'product',
25
+ name: 'Nexus',
26
+ tagline: 'The Agent Factory — autonomous software creation.',
27
+ url: 'https://nexus.nanisoft.com',
28
+ pack: 'lavender',
29
+ }),
30
+ Object.freeze({
31
+ id: 'atlas',
32
+ kind: 'product',
33
+ name: 'Atlas',
34
+ tagline: 'The Digital Twin Platform — living models of real systems.',
35
+ url: 'https://atlas.nanisoft.com',
36
+ pack: 'green',
37
+ }),
38
+ Object.freeze({
39
+ id: 'alphalens',
40
+ kind: 'product',
41
+ name: 'AlphaLens',
42
+ tagline: 'Quantitative trading research for the Indian market.',
43
+ url: 'https://alphalens.nanisoft.com',
44
+ pack: 'rose',
45
+ }),
46
+ Object.freeze({
47
+ id: 'prism',
48
+ kind: 'product',
49
+ name: 'Prism',
50
+ tagline: 'One design language across every product.',
51
+ url: 'https://prism.nanisoft.com',
52
+ pack: 'blue',
53
+ }),
54
+ ]);
55
+ /** Registry lookup; misses return undefined so callers can branch on identity. */
56
+ export function getPrismProduct(id) {
57
+ return prismProducts.find((product) => product.id === id);
58
+ }
59
+ /**
60
+ * The pack-colour dot's CSS `background`: a product wears its own pack ink;
61
+ * www wears the five-pack spectrum (a conic sweep of every ink), because the
62
+ * company is the one entry that has no single colour.
63
+ */
64
+ export function productDotBackground(product) {
65
+ if (product.pack)
66
+ return prismBrandPacks[product.pack].ink.light;
67
+ // The five-pack spectrum in ADR-0005 order, closed back onto blue so the
68
+ // wheel is seamless at 0°.
69
+ const inks = ['blue', 'green', 'lavender', 'rose', 'peach', 'blue'].map((pack) => prismBrandPacks[pack].ink.light);
70
+ return `conic-gradient(${inks.join(', ')})`;
71
+ }
72
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/products/index.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,6EAA6E;AAC7E,+EAA+E;AAC/E,2DAA2D;AAC3D,EAAE;AACF,0EAA0E;AAC1E,yEAAyE;AACzE,8EAA8E;AAC9E,uCAAuC;AAEvC,OAAO,EAAE,eAAe,EAAoB,MAAM,wBAAwB,CAAC;AAc3E,MAAM,GAAG,GAAiB,MAAM,CAAC,MAAM,CAAC;IACtC,EAAE,EAAE,KAAK;IACT,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,UAAU;IAChB,OAAO,EAAE,gCAAgC;IACzC,GAAG,EAAE,0BAA0B;IAC/B,IAAI,EAAE,IAAI;CACX,CAAC,CAAC;AAEH,yHAAyH;AACzH,MAAM,CAAC,MAAM,aAAa,GAA4B,MAAM,CAAC,MAAM,CAAC;IAClE,GAAG;IACH,MAAM,CAAC,MAAM,CAAC;QACZ,EAAE,EAAE,OAAO;QACX,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,mDAAmD;QAC5D,GAAG,EAAE,4BAA4B;QACjC,IAAI,EAAE,UAAU;KACjB,CAAC;IACF,MAAM,CAAC,MAAM,CAAC;QACZ,EAAE,EAAE,OAAO;QACX,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,4DAA4D;QACrE,GAAG,EAAE,4BAA4B;QACjC,IAAI,EAAE,OAAO;KACd,CAAC;IACF,MAAM,CAAC,MAAM,CAAC;QACZ,EAAE,EAAE,WAAW;QACf,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,sDAAsD;QAC/D,GAAG,EAAE,gCAAgC;QACrC,IAAI,EAAE,MAAM;KACb,CAAC;IACF,MAAM,CAAC,MAAM,CAAC;QACZ,EAAE,EAAE,OAAO;QACX,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,2CAA2C;QACpD,GAAG,EAAE,4BAA4B;QACjC,IAAI,EAAE,MAAM;KACb,CAAC;CACH,CAAC,CAAC;AAEH,kFAAkF;AAClF,MAAM,UAAU,eAAe,CAAC,EAAkB;IAChD,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AAC5D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAqB;IACxD,IAAI,OAAO,CAAC,IAAI;QAAE,OAAO,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;IACjE,yEAAyE;IACzE,2BAA2B;IAC3B,MAAM,IAAI,GAAI,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAW,CAAC,GAAG,CAChF,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAC1C,CAAC;IACF,OAAO,kBAAkB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { type ReactNode } from 'react';
2
+ import { type PrismMode, type PrismPackId } from '@nanisoft/prism-tokens';
3
+ export interface PrismThemeModeValue {
4
+ readonly mode: PrismMode;
5
+ readonly setMode: (mode: PrismMode) => void;
6
+ readonly toggleMode: () => void;
7
+ }
8
+ export interface PrismThemeModeProviderProps {
9
+ /** The site's fixed pack — identity is static and known at build time. */
10
+ pack: PrismPackId;
11
+ /** The mode when nothing (valid) is stored. Defaults to beam-dark — the standing site default. */
12
+ defaultMode?: PrismMode;
13
+ children: ReactNode;
14
+ }
15
+ export declare function PrismThemeModeProvider({ pack, defaultMode, children, }: PrismThemeModeProviderProps): ReactNode;
16
+ export declare function usePrismThemeMode(): PrismThemeModeValue;
17
+ //# sourceMappingURL=PrismThemeMode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PrismThemeMode.d.ts","sourceRoot":"","sources":["../../src/provider/PrismThemeMode.tsx"],"names":[],"mappings":"AAUA,OAAO,EAAwE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAC7G,OAAO,EAAiC,KAAK,SAAS,EAAE,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAKzG,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;IAC5C,QAAQ,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC;CACjC;AAaD,MAAM,WAAW,2BAA2B;IAC1C,0EAA0E;IAC1E,IAAI,EAAE,WAAW,CAAC;IAClB,kGAAkG;IAClG,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,sBAAsB,CAAC,EACrC,IAAI,EACJ,WAAoB,EACpB,QAAQ,GACT,EAAE,2BAA2B,GAAG,SAAS,CAuCzC;AAED,wBAAgB,iBAAiB,IAAI,mBAAmB,CAIvD"}
@@ -0,0 +1,61 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ // PrismThemeModeProvider (ADR-0006 §4): the chrome's one context. Static
4
+ // identity travels as props (the pack is fixed per site — the chrome flips
5
+ // mode only); mode is the one stateful thing in the chrome, so it is the one
6
+ // context. It wraps PrismProvider with the theme for the current mode, swaps
7
+ // the pre-baked variable class on <html> (the same class the boot script set
8
+ // pre-paint, so toggle and boot can never disagree), and persists to the one
9
+ // shared storage key.
10
+ import { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react';
11
+ import { getPrismTheme, prismCssVarKey } from '@nanisoft/prism-tokens';
12
+ import { PRISM_THEME_MODE_STORAGE_KEY, parsePrismThemeMode } from '../theming/storage.js';
13
+ import { PrismProvider } from './PrismProvider.js';
14
+ const PrismThemeModeContext = createContext(undefined);
15
+ /** Swap the pre-baked variable class on <html> — colors come from the class, so the swap is the whole repaint. */
16
+ function applyModeClass(pack, mode) {
17
+ const el = document.documentElement;
18
+ for (const className of Array.from(el.classList)) {
19
+ if (className.startsWith('prism-'))
20
+ el.classList.remove(className);
21
+ }
22
+ el.classList.add(prismCssVarKey(pack, mode));
23
+ }
24
+ export function PrismThemeModeProvider({ pack, defaultMode = 'dark', children, }) {
25
+ const [mode, setModeState] = useState(defaultMode);
26
+ // SSR renders the default; the boot script may have restored a stored mode
27
+ // before paint — sync React onto it after mount (no visual impact: colors
28
+ // come from the class, not from React).
29
+ useEffect(() => {
30
+ try {
31
+ const stored = parsePrismThemeMode(localStorage.getItem(PRISM_THEME_MODE_STORAGE_KEY));
32
+ if (stored)
33
+ setModeState(stored);
34
+ }
35
+ catch {
36
+ // Blocked storage — keep the default.
37
+ }
38
+ }, []);
39
+ const setMode = useCallback((next) => {
40
+ applyModeClass(pack, next);
41
+ try {
42
+ localStorage.setItem(PRISM_THEME_MODE_STORAGE_KEY, next);
43
+ }
44
+ catch {
45
+ // Private mode / storage disabled — the session keeps the in-memory choice.
46
+ }
47
+ setModeState(next);
48
+ }, [pack]);
49
+ const toggleMode = useCallback(() => {
50
+ setMode(mode === 'dark' ? 'light' : 'dark');
51
+ }, [mode, setMode]);
52
+ const value = useMemo(() => ({ mode, setMode, toggleMode }), [mode, setMode, toggleMode]);
53
+ return (_jsx(PrismThemeModeContext.Provider, { value: value, children: _jsx(PrismProvider, { prismTheme: getPrismTheme(pack, mode), children: children }) }));
54
+ }
55
+ export function usePrismThemeMode() {
56
+ const value = useContext(PrismThemeModeContext);
57
+ if (!value)
58
+ throw new Error('usePrismThemeMode must be used inside <PrismThemeModeProvider>');
59
+ return value;
60
+ }
61
+ //# sourceMappingURL=PrismThemeMode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PrismThemeMode.js","sourceRoot":"","sources":["../../src/provider/PrismThemeMode.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,yEAAyE;AACzE,2EAA2E;AAC3E,6EAA6E;AAC7E,6EAA6E;AAC7E,6EAA6E;AAC7E,6EAA6E;AAC7E,sBAAsB;AAEtB,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AAC7G,OAAO,EAAE,aAAa,EAAE,cAAc,EAAoC,MAAM,wBAAwB,CAAC;AAEzG,OAAO,EAAE,4BAA4B,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAQnD,MAAM,qBAAqB,GAAG,aAAa,CAAkC,SAAS,CAAC,CAAC;AAExF,kHAAkH;AAClH,SAAS,cAAc,CAAC,IAAiB,EAAE,IAAe;IACxD,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;IACpC,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;QACjD,IAAI,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACrE,CAAC;IACD,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAC/C,CAAC;AAUD,MAAM,UAAU,sBAAsB,CAAC,EACrC,IAAI,EACJ,WAAW,GAAG,MAAM,EACpB,QAAQ,GACoB;IAC5B,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAY,WAAW,CAAC,CAAC;IAE9D,2EAA2E;IAC3E,0EAA0E;IAC1E,wCAAwC;IACxC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,mBAAmB,CAAC,YAAY,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC,CAAC;YACvF,IAAI,MAAM;gBAAE,YAAY,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,sCAAsC;QACxC,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,OAAO,GAAG,WAAW,CACzB,CAAC,IAAe,EAAE,EAAE;QAClB,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC3B,IAAI,CAAC;YACH,YAAY,CAAC,OAAO,CAAC,4BAA4B,EAAE,IAAI,CAAC,CAAC;QAC3D,CAAC;QAAC,MAAM,CAAC;YACP,4EAA4E;QAC9E,CAAC;QACD,YAAY,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC,EACD,CAAC,IAAI,CAAC,CACP,CAAC;IAEF,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;QAClC,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAEpB,MAAM,KAAK,GAAG,OAAO,CAAsB,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;IAE/G,OAAO,CACL,KAAC,qBAAqB,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YAC1C,KAAC,aAAa,IAAC,UAAU,EAAE,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,YAAG,QAAQ,GAAiB,GACjD,CAClC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,MAAM,KAAK,GAAG,UAAU,CAAC,qBAAqB,CAAC,CAAC;IAChD,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;IAC9F,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export { PrismProvider, type PrismProviderProps } from './PrismProvider.js';
2
2
  export { mergePrismTheme, toAntdTheme, isPrismTheme } from './mergePrismTheme.js';
3
3
  export { usePrismLink, PrismLinkContextProvider, type PrismLinkContextValue } from './PrismLinkContext.js';
4
+ export { PrismThemeModeProvider, usePrismThemeMode, type PrismThemeModeProviderProps, type PrismThemeModeValue, } from './PrismThemeMode.js';
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/provider/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,YAAY,EAAE,wBAAwB,EAAE,KAAK,qBAAqB,EAAE,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/provider/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,YAAY,EAAE,wBAAwB,EAAE,KAAK,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC3G,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,KAAK,2BAA2B,EAChC,KAAK,mBAAmB,GACzB,MAAM,qBAAqB,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export { PrismProvider } from './PrismProvider.js';
2
2
  export { mergePrismTheme, toAntdTheme, isPrismTheme } from './mergePrismTheme.js';
3
3
  export { usePrismLink, PrismLinkContextProvider } from './PrismLinkContext.js';
4
+ export { PrismThemeModeProvider, usePrismThemeMode, } from './PrismThemeMode.js';
4
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/provider/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA2B,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,YAAY,EAAE,wBAAwB,EAA8B,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/provider/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA2B,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,YAAY,EAAE,wBAAwB,EAA8B,MAAM,uBAAuB,CAAC;AAC3G,OAAO,EACL,sBAAsB,EACtB,iBAAiB,GAGlB,MAAM,qBAAqB,CAAC"}
package/dist/styles.css CHANGED
@@ -1,5 +1,5 @@
1
1
  /* @nanisoft/prism-ui — styles.css
2
- * Font faces, display width-axis, and dither patterns.
2
+ * Font faces, display width-axis, dither patterns, and the cross-site chrome.
3
3
  * Imported by the app (never by PrismProvider), keeping sideEffects: [] honest.
4
4
  *
5
5
  * Fonts:
@@ -70,4 +70,303 @@
70
70
  background-size: 4px 4px;
71
71
  opacity: 0.04;
72
72
  }
73
+
74
+ /* ---------- Cross-site chrome (ADR-0006) ----------
75
+ * SiteHeader / SiteFooter / the pack dot. Tokens resolve through the
76
+ * pre-baked `prism-<pack>-<mode>` class on <html> (the boot script's
77
+ * class-swap recipe); the fallbacks keep the chrome legible when it renders
78
+ * outside that recipe. Sites cap the chrome's measure with
79
+ * `--prism-chrome-max-width`.
80
+ */
81
+
82
+ .prism-visually-hidden {
83
+ position: absolute;
84
+ width: 1px;
85
+ height: 1px;
86
+ padding: 0;
87
+ margin: -1px;
88
+ overflow: hidden;
89
+ clip-path: inset(50%);
90
+ white-space: nowrap;
91
+ border: 0;
92
+ }
93
+
94
+ .prism-product-dot {
95
+ display: inline-block;
96
+ flex: none;
97
+ width: 10px;
98
+ height: 10px;
99
+ border-radius: 50%;
100
+ box-shadow: inset 0 0 0 1px var(--prism-color-border, rgb(0 0 0 / 0.15));
101
+ }
102
+
103
+ /* ----- SiteHeader ----- */
104
+
105
+ .prism-site-header {
106
+ position: sticky;
107
+ top: 0;
108
+ z-index: 100;
109
+ background: var(--prism-color-bg-container, #fff);
110
+ border-bottom: 1px solid var(--prism-color-border-secondary, transparent);
111
+ }
112
+
113
+ .prism-site-header--static {
114
+ position: static;
115
+ }
116
+
117
+ .prism-site-header__inner {
118
+ display: flex;
119
+ gap: 24px;
120
+ align-items: center;
121
+ max-width: var(--prism-chrome-max-width, 1120px);
122
+ min-height: 64px;
123
+ margin-inline: auto;
124
+ padding-inline: 24px;
125
+ }
126
+
127
+ .prism-site-header a {
128
+ text-decoration: none;
129
+ color: inherit;
130
+ }
131
+
132
+ .prism-site-header__brand {
133
+ display: inline-flex;
134
+ gap: 8px;
135
+ align-items: center;
136
+ font-weight: 600;
137
+ font-variation-settings: 'wdth' 110;
138
+ color: var(--prism-color-text, rgb(0 0 0 / 0.88));
139
+ }
140
+
141
+ .prism-site-header__nav {
142
+ display: flex;
143
+ gap: 4px;
144
+ align-items: center;
145
+ }
146
+
147
+ .prism-site-header__nav a {
148
+ padding: 6px 10px;
149
+ border-radius: var(--prism-border-radius, 4px);
150
+ color: var(--prism-color-text-secondary, rgb(0 0 0 / 0.65));
151
+ transition:
152
+ color var(--prism-motion-duration-mid, 160ms) var(--prism-motion-ease-out, cubic-bezier(0.25, 1, 0.5, 1)),
153
+ background-color var(--prism-motion-duration-mid, 160ms) var(--prism-motion-ease-out, cubic-bezier(0.25, 1, 0.5, 1));
154
+ }
155
+
156
+ .prism-site-header__nav a:hover {
157
+ background: var(--prism-color-primary-bg, transparent);
158
+ color: var(--prism-color-primary, inherit);
159
+ }
160
+
161
+ .prism-site-header__actions {
162
+ display: flex;
163
+ gap: 8px;
164
+ align-items: center;
165
+ margin-left: auto;
166
+ }
167
+
168
+ .prism-site-header__switcher-trigger {
169
+ display: inline-flex;
170
+ gap: 6px;
171
+ align-items: center;
172
+ }
173
+
174
+ .prism-site-header__switcher-caret {
175
+ font-size: 10px;
176
+ }
177
+
178
+ .prism-site-header__switcher a,
179
+ .prism-site-header__switcher [aria-current] {
180
+ display: inline-flex;
181
+ gap: 8px;
182
+ align-items: center;
183
+ text-decoration: none;
184
+ color: inherit;
185
+ }
186
+
187
+ .prism-site-header__switcher [aria-current] {
188
+ font-weight: 600;
189
+ }
190
+
191
+ .prism-site-header__menu-button {
192
+ display: none;
193
+ }
194
+
195
+ .prism-site-header__drawer {
196
+ display: flex;
197
+ flex-direction: column;
198
+ gap: 24px;
199
+ }
200
+
201
+ .prism-site-header__drawer a {
202
+ display: flex;
203
+ gap: 8px;
204
+ align-items: center;
205
+ padding: 8px 4px;
206
+ border-radius: var(--prism-border-radius, 4px);
207
+ text-decoration: none;
208
+ color: var(--prism-color-text, inherit);
209
+ }
210
+
211
+ .prism-site-header__drawer a:hover {
212
+ background: var(--prism-color-primary-bg, transparent);
213
+ color: var(--prism-color-primary, inherit);
214
+ }
215
+
216
+ .prism-site-header__drawer-nav {
217
+ display: flex;
218
+ flex-direction: column;
219
+ }
220
+
221
+ .prism-site-header__drawer-products {
222
+ display: flex;
223
+ flex-direction: column;
224
+ padding-top: 16px;
225
+ border-top: 1px solid var(--prism-color-border-secondary, transparent);
226
+ }
227
+
228
+ .prism-site-header__drawer-here {
229
+ margin-left: auto;
230
+ font-size: 12px;
231
+ color: var(--prism-color-text-quaternary, rgb(0 0 0 / 0.45));
232
+ }
233
+
234
+ @media (max-width: 767.98px) {
235
+ .prism-site-header__inner {
236
+ gap: 16px;
237
+ padding-inline: 16px;
238
+ }
239
+
240
+ .prism-site-header__nav,
241
+ .prism-site-header__switcher-trigger {
242
+ display: none;
243
+ }
244
+
245
+ .prism-site-header__menu-button {
246
+ display: inline-flex;
247
+ }
248
+ }
249
+
250
+ /* ----- SiteFooter ----- */
251
+
252
+ .prism-site-footer {
253
+ background: var(--prism-color-bg-layout, transparent);
254
+ border-top: 1px solid var(--prism-color-border-secondary, transparent);
255
+ color: var(--prism-color-text, rgb(0 0 0 / 0.88));
256
+ }
257
+
258
+ .prism-site-footer__inner {
259
+ display: flex;
260
+ flex-direction: column;
261
+ gap: 32px;
262
+ max-width: var(--prism-chrome-max-width, 1120px);
263
+ margin-inline: auto;
264
+ padding: 48px 24px 32px;
265
+ }
266
+
267
+ .prism-site-footer a {
268
+ text-decoration: none;
269
+ color: inherit;
270
+ }
271
+
272
+ .prism-site-footer__products {
273
+ display: grid;
274
+ grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
275
+ gap: 16px;
276
+ }
277
+
278
+ .prism-site-footer__product {
279
+ display: flex;
280
+ flex-direction: column;
281
+ gap: 8px;
282
+ height: 100%;
283
+ padding: 16px;
284
+ background: var(--prism-color-bg-container, #fff);
285
+ border: 1px solid var(--prism-color-border-secondary, transparent);
286
+ border-radius: var(--prism-border-radius, 4px);
287
+ transition: border-color var(--prism-motion-duration-mid, 160ms) var(--prism-motion-ease-out, cubic-bezier(0.25, 1, 0.5, 1));
288
+ }
289
+
290
+ .prism-site-footer__products a:hover .prism-site-footer__product,
291
+ .prism-site-footer__product[data-current='true'] {
292
+ border-color: var(--prism-color-primary-border, var(--prism-color-border, transparent));
293
+ }
294
+
295
+ .prism-site-footer__product-head {
296
+ display: flex;
297
+ gap: 8px;
298
+ align-items: center;
299
+ font-weight: 600;
300
+ }
301
+
302
+ .prism-site-footer__product-tagline {
303
+ font-size: 13px;
304
+ color: var(--prism-color-text-secondary, rgb(0 0 0 / 0.65));
305
+ }
306
+
307
+ .prism-site-footer__columns {
308
+ display: grid;
309
+ grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
310
+ gap: 24px;
311
+ }
312
+
313
+ .prism-site-footer__column {
314
+ display: flex;
315
+ flex-direction: column;
316
+ gap: 8px;
317
+ }
318
+
319
+ .prism-site-footer__column-title {
320
+ margin: 0;
321
+ font-size: 13px;
322
+ font-weight: 600;
323
+ color: var(--prism-color-text-secondary, rgb(0 0 0 / 0.65));
324
+ }
325
+
326
+ .prism-site-footer__column a {
327
+ color: var(--prism-color-text-secondary, rgb(0 0 0 / 0.65));
328
+ transition: color var(--prism-motion-duration-mid, 160ms) var(--prism-motion-ease-out, cubic-bezier(0.25, 1, 0.5, 1));
329
+ }
330
+
331
+ .prism-site-footer__column a:hover {
332
+ color: var(--prism-color-primary, inherit);
333
+ }
334
+
335
+ .prism-site-footer__base {
336
+ display: flex;
337
+ flex-wrap: wrap;
338
+ gap: 16px;
339
+ align-items: center;
340
+ justify-content: space-between;
341
+ padding-top: 24px;
342
+ border-top: 1px solid var(--prism-color-border-secondary, transparent);
343
+ }
344
+
345
+ .prism-site-footer__social {
346
+ display: flex;
347
+ gap: 8px;
348
+ }
349
+
350
+ .prism-site-footer__social-link {
351
+ display: inline-flex;
352
+ align-items: center;
353
+ justify-content: center;
354
+ width: 32px;
355
+ height: 32px;
356
+ border-radius: var(--prism-border-radius, 4px);
357
+ color: var(--prism-color-text-secondary, rgb(0 0 0 / 0.65));
358
+ transition:
359
+ color var(--prism-motion-duration-mid, 160ms) var(--prism-motion-ease-out, cubic-bezier(0.25, 1, 0.5, 1)),
360
+ background-color var(--prism-motion-duration-mid, 160ms) var(--prism-motion-ease-out, cubic-bezier(0.25, 1, 0.5, 1));
361
+ }
362
+
363
+ .prism-site-footer__social-link:hover {
364
+ background: var(--prism-color-primary-bg, transparent);
365
+ color: var(--prism-color-primary, inherit);
366
+ }
367
+
368
+ .prism-site-footer__legal {
369
+ font-size: 13px;
370
+ color: var(--prism-color-text-tertiary, rgb(0 0 0 / 0.45));
371
+ }
73
372
  }
@@ -0,0 +1,24 @@
1
+ import { type PrismMode, type PrismPackId, type PrismTheme } from '@nanisoft/prism-tokens';
2
+ /**
3
+ * Keep only the rules scoped to `key`'s variable class — the bare token
4
+ * ruleset and the component-level `.{key}.ant-*-css-var` rulesets. The
5
+ * theme-agnostic component styles that make up the rest of the extraction are
6
+ * baked into every page by AntdRegistry at prerender; duplicating them here
7
+ * would multiply the payload for nothing. At-rules are recursed and kept only
8
+ * when something inside survives.
9
+ */
10
+ export declare function keepThemeVariableRules(css: string, key: string): string;
11
+ export interface BakePrismThemeRulesOptions {
12
+ /** The theme to bake — pass `getPrismTheme(pack, mode)` or a `createPrismTheme()` result (overrides bake too). */
13
+ theme: PrismTheme;
14
+ }
15
+ /** Extract and filter one theme's variable ruleset. Throws when extraction yields nothing. */
16
+ export declare function bakePrismThemeRules({ theme }: BakePrismThemeRulesOptions): string;
17
+ export interface BakePrismThemeCssOptions {
18
+ pack: PrismPackId;
19
+ /** Defaults to both — a site ships exactly two pre-baked rulesets. */
20
+ modes?: readonly PrismMode[];
21
+ }
22
+ /** The standard bake: one labelled variable ruleset per mode, ready for a site's build to write out. */
23
+ export declare function bakePrismThemeCss({ pack, modes }: BakePrismThemeCssOptions): string;
24
+ //# sourceMappingURL=bake.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bake.d.ts","sourceRoot":"","sources":["../../src/theming/bake.ts"],"names":[],"mappings":"AAaA,OAAO,EAAiB,KAAK,SAAS,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAI1G;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CA6BvE;AAED,MAAM,WAAW,0BAA0B;IACzC,kHAAkH;IAClH,KAAK,EAAE,UAAU,CAAC;CACnB;AAED,8FAA8F;AAC9F,wBAAgB,mBAAmB,CAAC,EAAE,KAAK,EAAE,EAAE,0BAA0B,GAAG,MAAM,CASjF;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,WAAW,CAAC;IAClB,sEAAsE;IACtE,KAAK,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC;CAC9B;AAED,wGAAwG;AACxG,wBAAgB,iBAAiB,CAAC,EAAE,IAAI,EAAE,KAAyB,EAAE,EAAE,wBAAwB,GAAG,MAAM,CAOvG"}
@@ -0,0 +1,78 @@
1
+ // The build-time bake helper (ADR-0006 §4): library-owned flash-free recipe.
2
+ // With `cssVar: { key: 'prism-<pack>-<mode>' }` + `hashed: false`, a theme's
3
+ // identity collapses into one ruleset per key — the bare token ruleset plus
4
+ // the component-level `.{key}.ant-*-css-var` variable rulesets. Component
5
+ // *styles* are theme-agnostic (they reference `var(--prism-*)`), so those
6
+ // variable rulesets are all a site needs pre-baked: the boot script swaps the
7
+ // class on <html> and the whole page re-themes without a flash.
8
+ //
9
+ // Node/build-time only: it pulls the SSR extractor. The package ships it on
10
+ // the ./theming subpath, never the root barrel.
11
+ import { extractStyle } from '@ant-design/static-style-extract';
12
+ import React from 'react';
13
+ import { getPrismTheme } from '@nanisoft/prism-tokens';
14
+ import { PrismProvider } from '../provider/PrismProvider.js';
15
+ /**
16
+ * Keep only the rules scoped to `key`'s variable class — the bare token
17
+ * ruleset and the component-level `.{key}.ant-*-css-var` rulesets. The
18
+ * theme-agnostic component styles that make up the rest of the extraction are
19
+ * baked into every page by AntdRegistry at prerender; duplicating them here
20
+ * would multiply the payload for nothing. At-rules are recursed and kept only
21
+ * when something inside survives.
22
+ */
23
+ export function keepThemeVariableRules(css, key) {
24
+ const keep = (selector) => selector === `.${key}` || selector.startsWith(`.${key}.`);
25
+ const walk = (text) => {
26
+ const out = [];
27
+ let i = 0;
28
+ while (i < text.length) {
29
+ const brace = text.indexOf('{', i);
30
+ if (brace === -1)
31
+ break;
32
+ const selector = text.slice(i, brace).trim();
33
+ let depth = 1;
34
+ let j = brace + 1;
35
+ while (j < text.length && depth > 0) {
36
+ const ch = text[j];
37
+ if (ch === '{')
38
+ depth += 1;
39
+ else if (ch === '}')
40
+ depth -= 1;
41
+ j += 1;
42
+ }
43
+ const body = text.slice(brace + 1, j - 1);
44
+ if (selector.startsWith('@') && depth === 0) {
45
+ const inner = walk(body);
46
+ if (inner)
47
+ out.push(`${selector}{${inner}}`);
48
+ }
49
+ else if (keep(selector)) {
50
+ out.push(`${selector}{${body}}`);
51
+ }
52
+ i = j;
53
+ }
54
+ return out.join('');
55
+ };
56
+ return walk(css);
57
+ }
58
+ /** Extract and filter one theme's variable ruleset. Throws when extraction yields nothing. */
59
+ export function bakePrismThemeRules({ theme }) {
60
+ const full = extractStyle({
61
+ customTheme: (node) => React.createElement(PrismProvider, { prismTheme: theme }, node),
62
+ });
63
+ const rules = keepThemeVariableRules(full, theme.cssVarKey);
64
+ if (!rules.includes('--prism-color-primary')) {
65
+ throw new Error(`bakePrismThemeRules: no theme variables extracted for ${theme.pack}/${theme.mode}`);
66
+ }
67
+ return rules;
68
+ }
69
+ /** The standard bake: one labelled variable ruleset per mode, ready for a site's build to write out. */
70
+ export function bakePrismThemeCss({ pack, modes = ['light', 'dark'] }) {
71
+ const chunks = [];
72
+ for (const mode of modes) {
73
+ const theme = getPrismTheme(pack, mode);
74
+ chunks.push(`/* ${theme.pack} · ${theme.mode} (${theme.cssVarKey}) */\n${bakePrismThemeRules({ theme })}\n`);
75
+ }
76
+ return chunks.join('\n');
77
+ }
78
+ //# sourceMappingURL=bake.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bake.js","sourceRoot":"","sources":["../../src/theming/bake.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { PrismMode, PrismPackId } from '@nanisoft/prism-tokens';
2
+ export interface PrismThemeBootScriptOptions {
3
+ /** The site's fixed pack — the chrome flips mode only, never pack. */
4
+ pack: PrismPackId;
5
+ /** The mode when nothing (valid) is stored. Defaults to beam-dark — the standing site default. */
6
+ defaultMode?: PrismMode;
7
+ }
8
+ export declare function prismThemeBootScript({ pack, defaultMode }: PrismThemeBootScriptOptions): string;
9
+ //# sourceMappingURL=bootScript.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootScript.d.ts","sourceRoot":"","sources":["../../src/theming/bootScript.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAIrE,MAAM,WAAW,2BAA2B;IAC1C,sEAAsE;IACtE,IAAI,EAAE,WAAW,CAAC;IAClB,kGAAkG;IAClG,WAAW,CAAC,EAAE,SAAS,CAAC;CACzB;AAED,wBAAgB,oBAAoB,CAAC,EAAE,IAAI,EAAE,WAAoB,EAAE,EAAE,2BAA2B,GAAG,MAAM,CAkBxG"}
@@ -0,0 +1,27 @@
1
+ // The flash-free boot (ADR-0006 §4): `prismThemeBootScript({ pack, defaultMode })`
2
+ // returns the inline script string a site drops into its root layout's <head>.
3
+ // It applies the stored-or-default `prism-<pack>-<mode>` class to <html>
4
+ // before first paint — the exact class that carries the pre-baked variable
5
+ // rulesets (the bake helper) and antd's cssVar key. Dependency-free by
6
+ // construction: it must never wait on the bundle.
7
+ import { PRISM_THEME_MODE_STORAGE_KEY } from './storage.js';
8
+ export function prismThemeBootScript({ pack, defaultMode = 'dark' }) {
9
+ // The mode-class prefix is prismCssVarKey(pack, mode) minus the mode; the
10
+ // theming test pins the emitted class to prismCssVarKey itself.
11
+ const classPrefix = JSON.stringify(`prism-${pack}-`);
12
+ return [
13
+ '(()=>{',
14
+ `let m=${JSON.stringify(defaultMode)};`,
15
+ 'try{',
16
+ `const s=localStorage.getItem(${JSON.stringify(PRISM_THEME_MODE_STORAGE_KEY)});`,
17
+ 'if(s==="light"||s==="dark")m=s;',
18
+ '}catch(e){}',
19
+ 'try{',
20
+ 'const el=document.documentElement;',
21
+ 'for(const c of Array.from(el.classList))if(c.indexOf("prism-")===0)el.classList.remove(c);',
22
+ `el.classList.add(${classPrefix}+m);`,
23
+ '}catch(e){}',
24
+ '})();',
25
+ ].join('');
26
+ }
27
+ //# sourceMappingURL=bootScript.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootScript.js","sourceRoot":"","sources":["../../src/theming/bootScript.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,+EAA+E;AAC/E,yEAAyE;AACzE,2EAA2E;AAC3E,uEAAuE;AACvE,kDAAkD;AAIlD,OAAO,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAC;AAS5D,MAAM,UAAU,oBAAoB,CAAC,EAAE,IAAI,EAAE,WAAW,GAAG,MAAM,EAA+B;IAC9F,0EAA0E;IAC1E,gEAAgE;IAChE,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,IAAI,GAAG,CAAC,CAAC;IACrD,OAAO;QACL,QAAQ;QACR,SAAS,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG;QACvC,MAAM;QACN,gCAAgC,IAAI,CAAC,SAAS,CAAC,4BAA4B,CAAC,IAAI;QAChF,iCAAiC;QACjC,aAAa;QACb,MAAM;QACN,oCAAoC;QACpC,4FAA4F;QAC5F,oBAAoB,WAAW,MAAM;QACrC,aAAa;QACb,OAAO;KACR,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACb,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { PRISM_THEME_MODE_STORAGE_KEY, parsePrismThemeMode } from './storage.js';
2
+ export { prismThemeBootScript, type PrismThemeBootScriptOptions } from './bootScript.js';
3
+ export { bakePrismThemeCss, bakePrismThemeRules, keepThemeVariableRules, type BakePrismThemeCssOptions, type BakePrismThemeRulesOptions, } from './bake.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/theming/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,4BAA4B,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACjF,OAAO,EAAE,oBAAoB,EAAE,KAAK,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AACzF,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,EACtB,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,GAChC,MAAM,WAAW,CAAC"}
@@ -0,0 +1,8 @@
1
+ // prism-ui theming module (ADR-0006 §4): the chrome's mode mechanics. This
2
+ // subpath is also the build-time surface — bake pulls the SSR extractor, so
3
+ // the root barrel deliberately re-exports only storage + bootScript directly,
4
+ // never this index.
5
+ export { PRISM_THEME_MODE_STORAGE_KEY, parsePrismThemeMode } from './storage.js';
6
+ export { prismThemeBootScript } from './bootScript.js';
7
+ export { bakePrismThemeCss, bakePrismThemeRules, keepThemeVariableRules, } from './bake.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/theming/index.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,4EAA4E;AAC5E,8EAA8E;AAC9E,oBAAoB;AAEpB,OAAO,EAAE,4BAA4B,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACjF,OAAO,EAAE,oBAAoB,EAAoC,MAAM,iBAAiB,CAAC;AACzF,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,GAGvB,MAAM,WAAW,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { PrismMode } from '@nanisoft/prism-tokens';
2
+ export declare const PRISM_THEME_MODE_STORAGE_KEY = "prism-theme-mode";
3
+ /** Parse a stored value; anything but the two exact mode strings is garbage. */
4
+ export declare function parsePrismThemeMode(value: string | null | undefined): PrismMode | undefined;
5
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/theming/storage.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAExD,eAAO,MAAM,4BAA4B,qBAAqB,CAAC;AAE/D,gFAAgF;AAChF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAE3F"}
@@ -0,0 +1,11 @@
1
+ // The chrome's one storage slot (ADR-0006 §4): the shared key the mode
2
+ // provider writes and the boot script reads, so the toggle and the boot can
3
+ // never disagree. The value is the mode only — the pack is fixed per site —
4
+ // which makes a visitor's light/beam-dark choice travel across all five
5
+ // NaniSoft sites.
6
+ export const PRISM_THEME_MODE_STORAGE_KEY = 'prism-theme-mode';
7
+ /** Parse a stored value; anything but the two exact mode strings is garbage. */
8
+ export function parsePrismThemeMode(value) {
9
+ return value === 'light' || value === 'dark' ? value : undefined;
10
+ }
11
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/theming/storage.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,4EAA4E;AAC5E,4EAA4E;AAC5E,wEAAwE;AACxE,kBAAkB;AAIlB,MAAM,CAAC,MAAM,4BAA4B,GAAG,kBAAkB,CAAC;AAE/D,gFAAgF;AAChF,MAAM,UAAU,mBAAmB,CAAC,KAAgC;IAClE,OAAO,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACnE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"wrapped-registry.d.ts","sourceRoot":"","sources":["../src/wrapped-registry.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,oBAAoB,GAAG,gBAAgB,GAAG,eAAe,GAAG,WAAW,GAAG,cAAc,CAAC;AAErG,MAAM,WAAW,gBAAgB;IAC/B,uEAAuE;IACvE,QAAQ,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,UAAU,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,EAAE,oBAAoB,CAAC;CACrC;AAED,mFAAmF;AACnF,eAAO,MAAM,iBAAiB;uBAEhB,kBAAkB;yBAChB,cAAc;;4BAEX,gBAAgB;EAEa,CAAC;AAEjD,eAAO,MAAM,YAAY,GAA2B,CAAC;AAErD,yFAAyF;AACzF,eAAO,MAAM,cAAc,YAAI,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,UAAU,CAAU,CAAC;AAErH,wFAAwF;AACxF,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC;AAEtE;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAmFvE,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE7D,oFAAoF;AACpF,MAAM,WAAW,eAAe;IAC9B,oFAAoF;IACpF,IAAI,EAAE,MAAM,CAAC;IACb,wDAAwD;IACxD,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,YAAY;IAC3B,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,YAAY,CAAC;IACpB,wIAAwI;IACxI,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,aAAa,CAAC;IACxB,sDAAsD;IACtD,OAAO,CAAC,EAAE,gBAAgB,CAAC;CAC5B;AAYD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,YAAY,EAAE,SAAS,eAAe,EAAE,GAAG,YAAY,EAAE,CA6BrF"}
1
+ {"version":3,"file":"wrapped-registry.d.ts","sourceRoot":"","sources":["../src/wrapped-registry.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,oBAAoB,GAAG,gBAAgB,GAAG,eAAe,GAAG,WAAW,GAAG,cAAc,CAAC;AAErG,MAAM,WAAW,gBAAgB;IAC/B,uEAAuE;IACvE,QAAQ,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,UAAU,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,EAAE,oBAAoB,CAAC;CACrC;AAED,mFAAmF;AACnF,eAAO,MAAM,iBAAiB;uBAEhB,kBAAkB;yBAChB,cAAc;;4BAEX,gBAAgB;EAEa,CAAC;AAEjD,eAAO,MAAM,YAAY,GAA2B,CAAC;AAErD,yFAAyF;AACzF,eAAO,MAAM,cAAc,YAAI,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,UAAU,CAAU,CAAC;AAErH,wFAAwF;AACxF,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC;AAEtE;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAqFvE,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE7D,oFAAoF;AACpF,MAAM,WAAW,eAAe;IAC9B,oFAAoF;IACpF,IAAI,EAAE,MAAM,CAAC;IACb,wDAAwD;IACxD,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,YAAY;IAC3B,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,YAAY,CAAC;IACpB,wIAAwI;IACxI,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,aAAa,CAAC;IACxB,sDAAsD;IACtD,OAAO,CAAC,EAAE,gBAAgB,CAAC;CAC5B;AAcD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,YAAY,EAAE,SAAS,eAAe,EAAE,GAAG,YAAY,EAAE,CA6BrF"}
@@ -103,12 +103,16 @@ export const componentCategories = {
103
103
  // Prism group — blocks and pages
104
104
  ComponentDemo: 'prism',
105
105
  PageHeader: 'prism',
106
+ SiteHeader: 'prism',
107
+ SiteFooter: 'prism',
106
108
  DocsShell: 'prism',
107
109
  BlogLayout: 'prism',
108
110
  };
109
111
  const BLOCKS = [
110
112
  { name: 'ComponentDemo', id: 'component-demo' },
111
113
  { name: 'PageHeader', id: 'page-header' },
114
+ { name: 'SiteHeader', id: 'site-header' },
115
+ { name: 'SiteFooter', id: 'site-footer' },
112
116
  ];
113
117
  const PAGES = [
114
118
  { name: 'DocsShell', id: 'docs-shell' },
@@ -1 +1 @@
1
- {"version":3,"file":"wrapped-registry.js","sourceRoot":"","sources":["../src/wrapped-registry.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,EAAE;AACF,8EAA8E;AAC9E,+EAA+E;AAC/E,6EAA6E;AAC7E,yEAAyE;AACzE,+EAA+E;AAC/E,+CAA+C;AAc/C,mFAAmF;AACnF,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B;QACE,QAAQ,EAAE,kBAAkB;QAC5B,UAAU,EAAE,cAAc;QAC1B,YAAY,EAAE,EAAE;QAChB,aAAa,EAAE,gBAAgB;KAChC;CAC6C,CAAC;AAEjD,MAAM,CAAC,MAAM,YAAY,GAAG,iBAAiB,CAAC,MAAM,CAAC;AAErD,yFAAyF;AACzF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,UAAU,CAAU,CAAC;AAKrH;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAA4C;IAC1E,UAAU;IACV,MAAM,EAAE,SAAS;IACjB,WAAW,EAAE,SAAS;IACtB,UAAU,EAAE,SAAS;IACrB,YAAY,EAAE,SAAS;IACvB,SAAS;IACT,GAAG,EAAE,QAAQ;IACb,OAAO,EAAE,QAAQ;IACjB,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,QAAQ;IACd,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,QAAQ;IACjB,GAAG,EAAE,QAAQ;IACb,KAAK,EAAE,QAAQ;IACf,QAAQ,EAAE,QAAQ;IAClB,aAAa;IACb,KAAK,EAAE,YAAY;IACnB,MAAM,EAAE,YAAY;IACpB,OAAO,EAAE,YAAY;IACrB,UAAU,EAAE,YAAY;IACxB,QAAQ,EAAE,YAAY;IACtB,IAAI,EAAE,YAAY;IAClB,UAAU,EAAE,YAAY;IACxB,KAAK,EAAE,YAAY;IACnB,IAAI,EAAE,YAAY;IAClB,aAAa;IACb,YAAY,EAAE,YAAY;IAC1B,QAAQ,EAAE,YAAY;IACtB,QAAQ,EAAE,YAAY;IACtB,WAAW,EAAE,YAAY;IACzB,UAAU,EAAE,YAAY;IACxB,IAAI,EAAE,YAAY;IAClB,KAAK,EAAE,YAAY;IACnB,WAAW,EAAE,YAAY;IACzB,QAAQ,EAAE,YAAY;IACtB,KAAK,EAAE,YAAY;IACnB,IAAI,EAAE,YAAY;IAClB,MAAM,EAAE,YAAY;IACpB,MAAM,EAAE,YAAY;IACpB,MAAM,EAAE,YAAY;IACpB,UAAU,EAAE,YAAY;IACxB,QAAQ,EAAE,YAAY;IACtB,UAAU,EAAE,YAAY;IACxB,MAAM,EAAE,YAAY;IACpB,eAAe;IACf,MAAM,EAAE,cAAc;IACtB,KAAK,EAAE,cAAc;IACrB,UAAU,EAAE,cAAc;IAC1B,QAAQ,EAAE,cAAc;IACxB,IAAI,EAAE,cAAc;IACpB,QAAQ,EAAE,cAAc;IACxB,QAAQ,EAAE,cAAc;IACxB,YAAY,EAAE,cAAc;IAC5B,KAAK,EAAE,cAAc;IACrB,KAAK,EAAE,cAAc;IACrB,IAAI,EAAE,cAAc;IACpB,KAAK,EAAE,cAAc;IACrB,OAAO,EAAE,cAAc;IACvB,MAAM,EAAE,cAAc;IACtB,SAAS,EAAE,cAAc;IACzB,SAAS,EAAE,cAAc;IACzB,KAAK,EAAE,cAAc;IACrB,GAAG,EAAE,cAAc;IACnB,QAAQ,EAAE,cAAc;IACxB,OAAO,EAAE,cAAc;IACvB,IAAI,EAAE,cAAc;IACpB,IAAI,EAAE,cAAc;IACpB,WAAW;IACX,KAAK,EAAE,UAAU;IACjB,MAAM,EAAE,UAAU;IAClB,KAAK,EAAE,UAAU;IACjB,UAAU,EAAE,UAAU;IACtB,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,UAAU;IAClB,QAAQ,EAAE,UAAU;IACpB,IAAI,EAAE,UAAU;IAChB,SAAS,EAAE,UAAU;IACrB,iCAAiC;IACjC,aAAa,EAAE,OAAO;IACtB,UAAU,EAAE,OAAO;IACnB,SAAS,EAAE,OAAO;IAClB,UAAU,EAAE,OAAO;CACpB,CAAC;AAyBF,MAAM,MAAM,GAAG;IACb,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,gBAAgB,EAAE;IAC/C,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,aAAa,EAAE;CACjC,CAAC;AAEX,MAAM,KAAK,GAAG;IACZ,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,YAAY,EAAE;IACvC,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,aAAa,EAAE;CACjC,CAAC;AAEX;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,YAAwC;IACnE,MAAM,OAAO,GAAmB,EAAE,CAAC;IAEnC,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,IAAI,CAAC,IAAI,yBAAyB,CAAC,CAAC;QACtG,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IACrG,CAAC;IAED,KAAK,MAAM,OAAO,IAAI,iBAAiB,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACzD,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,OAAO,CAAC,UAAU,yBAAyB,CAAC,CAAC;QAC1G,yEAAyE;QACzE,oDAAoD;QACpD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,UAAU,EAAE,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7H,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,KAAK,CAAC,IAAI,yBAAyB,CAAC,CAAC;QAChG,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;IACxD,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,CAAC,IAAI,yBAAyB,CAAC,CAAC;QAC9F,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,KAAK,CAAC,IAAY;IACzB,OAAO,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;AACnE,CAAC"}
1
+ {"version":3,"file":"wrapped-registry.js","sourceRoot":"","sources":["../src/wrapped-registry.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nanisoft/prism-ui",
3
- "version": "0.2.0",
3
+ "version": "0.4.0",
4
4
  "description": "Prism's React surface — components, blocks, and pages over Ant Design v6. Apps import from here, never from antd directly.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -41,6 +41,14 @@
41
41
  "types": "./dist/pages/*/index.d.ts",
42
42
  "import": "./dist/pages/*/index.js"
43
43
  },
44
+ "./products": {
45
+ "types": "./dist/products/index.d.ts",
46
+ "import": "./dist/products/index.js"
47
+ },
48
+ "./theming": {
49
+ "types": "./dist/theming/index.d.ts",
50
+ "import": "./dist/theming/index.js"
51
+ },
44
52
  "./icons": {
45
53
  "types": "./dist/generated/icons.d.ts",
46
54
  "import": "./dist/generated/icons.js"
@@ -81,8 +89,9 @@
81
89
  },
82
90
  "dependencies": {
83
91
  "@ant-design/icons": "^6.3.4",
92
+ "@ant-design/static-style-extract": "^2.1.0",
84
93
  "antd": "^6.6.4",
85
- "@nanisoft/prism-tokens": "0.2.0"
94
+ "@nanisoft/prism-tokens": "0.3.0"
86
95
  },
87
96
  "author": "NaniSoft",
88
97
  "homepage": "https://prism.nanisoft.com",