@nadicodeai/ui 10.0.0 → 10.0.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.
Files changed (95) hide show
  1. package/README.md +0 -25
  2. package/dist/index.d.ts +1 -30
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +1 -30
  5. package/package.json +2 -2
  6. package/dist/components/action-band.d.ts +0 -12
  7. package/dist/components/action-band.d.ts.map +0 -1
  8. package/dist/components/action-band.js +0 -48
  9. package/dist/components/card-marketing.d.ts +0 -30
  10. package/dist/components/card-marketing.d.ts.map +0 -1
  11. package/dist/components/card-marketing.js +0 -48
  12. package/dist/components/code-editor-mockup.d.ts +0 -25
  13. package/dist/components/code-editor-mockup.d.ts.map +0 -1
  14. package/dist/components/code-editor-mockup.js +0 -47
  15. package/dist/components/contact.d.ts +0 -32
  16. package/dist/components/contact.d.ts.map +0 -1
  17. package/dist/components/contact.js +0 -46
  18. package/dist/components/faq-item.d.ts +0 -25
  19. package/dist/components/faq-item.d.ts.map +0 -1
  20. package/dist/components/faq-item.js +0 -25
  21. package/dist/components/faq.d.ts +0 -20
  22. package/dist/components/faq.d.ts.map +0 -1
  23. package/dist/components/faq.js +0 -23
  24. package/dist/components/feature-grid.d.ts +0 -23
  25. package/dist/components/feature-grid.d.ts.map +0 -1
  26. package/dist/components/feature-grid.js +0 -33
  27. package/dist/components/feature-rows.d.ts +0 -23
  28. package/dist/components/feature-rows.d.ts.map +0 -1
  29. package/dist/components/feature-rows.js +0 -27
  30. package/dist/components/hero-split.d.ts +0 -23
  31. package/dist/components/hero-split.d.ts.map +0 -1
  32. package/dist/components/hero-split.js +0 -35
  33. package/dist/components/hero.d.ts +0 -28
  34. package/dist/components/hero.d.ts.map +0 -1
  35. package/dist/components/hero.js +0 -45
  36. package/dist/components/integration-flow.d.ts +0 -36
  37. package/dist/components/integration-flow.d.ts.map +0 -1
  38. package/dist/components/integration-flow.js +0 -36
  39. package/dist/components/live-demo.d.ts +0 -31
  40. package/dist/components/live-demo.d.ts.map +0 -1
  41. package/dist/components/live-demo.js +0 -30
  42. package/dist/components/logo-band.d.ts +0 -33
  43. package/dist/components/logo-band.d.ts.map +0 -1
  44. package/dist/components/logo-band.js +0 -49
  45. package/dist/components/logo-tile.d.ts +0 -21
  46. package/dist/components/logo-tile.d.ts.map +0 -1
  47. package/dist/components/logo-tile.js +0 -28
  48. package/dist/components/media-mount.d.ts +0 -13
  49. package/dist/components/media-mount.d.ts.map +0 -1
  50. package/dist/components/media-mount.js +0 -15
  51. package/dist/components/newsletter.d.ts +0 -24
  52. package/dist/components/newsletter.d.ts.map +0 -1
  53. package/dist/components/newsletter.js +0 -31
  54. package/dist/components/pricing-card.d.ts +0 -30
  55. package/dist/components/pricing-card.d.ts.map +0 -1
  56. package/dist/components/pricing-card.js +0 -44
  57. package/dist/components/pricing.d.ts +0 -25
  58. package/dist/components/pricing.d.ts.map +0 -1
  59. package/dist/components/pricing.js +0 -11
  60. package/dist/components/proof-slot.d.ts +0 -8
  61. package/dist/components/proof-slot.d.ts.map +0 -1
  62. package/dist/components/proof-slot.js +0 -8
  63. package/dist/components/quote-card.d.ts +0 -31
  64. package/dist/components/quote-card.d.ts.map +0 -1
  65. package/dist/components/quote-card.js +0 -48
  66. package/dist/components/seam-grid.d.ts +0 -30
  67. package/dist/components/seam-grid.d.ts.map +0 -1
  68. package/dist/components/seam-grid.js +0 -30
  69. package/dist/components/section-intro.d.ts +0 -18
  70. package/dist/components/section-intro.d.ts.map +0 -1
  71. package/dist/components/section-intro.js +0 -22
  72. package/dist/components/security-grid.d.ts +0 -25
  73. package/dist/components/security-grid.d.ts.map +0 -1
  74. package/dist/components/security-grid.js +0 -28
  75. package/dist/components/shift-band.d.ts +0 -14
  76. package/dist/components/shift-band.d.ts.map +0 -1
  77. package/dist/components/shift-band.js +0 -11
  78. package/dist/components/statement.d.ts +0 -32
  79. package/dist/components/statement.d.ts.map +0 -1
  80. package/dist/components/statement.js +0 -40
  81. package/dist/components/steps.d.ts +0 -34
  82. package/dist/components/steps.d.ts.map +0 -1
  83. package/dist/components/steps.js +0 -40
  84. package/dist/components/team-grid.d.ts +0 -27
  85. package/dist/components/team-grid.d.ts.map +0 -1
  86. package/dist/components/team-grid.js +0 -30
  87. package/dist/components/testimonials.d.ts +0 -48
  88. package/dist/components/testimonials.d.ts.map +0 -1
  89. package/dist/components/testimonials.js +0 -58
  90. package/dist/components/texture-strip.d.ts +0 -22
  91. package/dist/components/texture-strip.d.ts.map +0 -1
  92. package/dist/components/texture-strip.js +0 -32
  93. package/dist/lib/seam.d.ts +0 -29
  94. package/dist/lib/seam.d.ts.map +0 -1
  95. package/dist/lib/seam.js +0 -30
@@ -1,14 +0,0 @@
1
- import * as React from "react";
2
- type ShiftBandProof = {
3
- title: string;
4
- body: string;
5
- };
6
- declare function ShiftBand({ kicker, title, children, proofs, className, ...props }: React.ComponentProps<"div"> & {
7
- kicker: string;
8
- title: string;
9
- proofs: ShiftBandProof[];
10
- }): React.JSX.Element;
11
- declare function ShiftBandLead({ className, ...props }: React.ComponentProps<"p">): React.JSX.Element;
12
- export { ShiftBand, ShiftBandLead };
13
- export type { ShiftBandProof };
14
- //# sourceMappingURL=shift-band.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shift-band.d.ts","sourceRoot":"","sources":["../../src/components/shift-band.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAY/B,KAAK,cAAc,GAAG;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,iBAAS,SAAS,CAAC,EACjB,MAAM,EACN,KAAK,EACL,QAAQ,EACR,MAAM,EACN,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,cAAc,EAAE,CAAC;CAC1B,qBAoBA;AAED,iBAAS,aAAa,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,qBAExE;AAED,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC;AACpC,YAAY,EAAE,cAAc,EAAE,CAAC"}
@@ -1,11 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { cn } from "../lib/utils.js";
3
- import { SeamGrid } from "./seam-grid.js";
4
- import { SectionIntro, SectionIntroKicker, SectionIntroLead, SectionIntroTitle, } from "./section-intro.js";
5
- function ShiftBand({ kicker, title, children, proofs, className, ...props }) {
6
- return (_jsxs(SeamGrid, { "data-slot": "shift-band", className: className, ...props, children: [_jsxs(SectionIntro, { className: "justify-items-center text-center", children: [_jsx(SectionIntroKicker, { children: kicker }), _jsx(SectionIntroTitle, { className: "max-w-[18ch] text-balance text-center", children: title }), children] }), _jsx(SeamGrid, { className: "md:grid-cols-4", children: proofs.map((proof) => (_jsxs("div", { className: "nc-panel-cell bg-card", children: [_jsx("h3", { className: "nc-type-body-md font-medium text-foreground", children: proof.title }), _jsx("p", { className: "nc-type-body-sm text-[var(--nc-body)]", children: proof.body })] }, proof.title))) })] }));
7
- }
8
- function ShiftBandLead({ className, ...props }) {
9
- return _jsx(SectionIntroLead, { className: cn("text-balance text-center", className), ...props });
10
- }
11
- export { ShiftBand, ShiftBandLead };
@@ -1,32 +0,0 @@
1
- import * as React from "react";
2
- /**
3
- * statement — a single left-aligned editorial statement block (V5 B04).
4
- *
5
- * An indexed mono eyebrow, one large two-tone headline (a lead clause in the
6
- * foreground role and a continuation clause dropped to the muted role through the
7
- * `StatementTail` sub-slot), and a body paragraph. No word-split reveal in this
8
- * pass — the headline is static structure.
9
- *
10
- * Compound, slot-driven: the caller supplies every string, this owns measure,
11
- * alignment, and the two-tone role split. Token-only; no `dark:` styling.
12
- */
13
- declare function Statement({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
14
- /**
15
- * StatementEyebrow — mono eyebrow with an optional `[NN]` index chip in the
16
- * canonical link-deep role (deep verde on light / bright verde on dark). The chip
17
- * renders only when `index` is set.
18
- */
19
- declare function StatementEyebrow({ index, children, className, ...props }: React.ComponentProps<"p"> & {
20
- index?: React.ReactNode;
21
- }): React.JSX.Element;
22
- /**
23
- * StatementTitle — the large headline. Its lead clause reads in the foreground
24
- * role; wrap the continuation clause in `StatementTail` to drop it to muted.
25
- */
26
- declare function StatementTitle({ className, ...props }: React.ComponentProps<"h2">): React.JSX.Element;
27
- /** StatementTail — the muted continuation clause inside `StatementTitle` (V5 `.t2`). */
28
- declare function StatementTail({ className, ...props }: React.ComponentProps<"span">): React.JSX.Element;
29
- /** StatementBody — the supporting paragraph under the headline. */
30
- declare function StatementBody({ className, ...props }: React.ComponentProps<"p">): React.JSX.Element;
31
- export { Statement, StatementEyebrow, StatementTitle, StatementTail, StatementBody };
32
- //# sourceMappingURL=statement.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"statement.d.ts","sourceRoot":"","sources":["../../src/components/statement.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B;;;;;;;;;;GAUG;AAEH,iBAAS,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAQtE;AAED;;;;GAIG;AACH,iBAAS,gBAAgB,CAAC,EACxB,KAAK,EACL,QAAQ,EACR,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG;IAAE,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,qBAkBzD;AAED;;;GAGG;AACH,iBAAS,cAAc,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,qBAQ1E;AAED,wFAAwF;AACxF,iBAAS,aAAa,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,qBAQ3E;AAED,mEAAmE;AACnE,iBAAS,aAAa,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,qBAQxE;AAED,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,CAAC"}
@@ -1,40 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { cn } from "../lib/utils.js";
3
- /**
4
- * statement — a single left-aligned editorial statement block (V5 B04).
5
- *
6
- * An indexed mono eyebrow, one large two-tone headline (a lead clause in the
7
- * foreground role and a continuation clause dropped to the muted role through the
8
- * `StatementTail` sub-slot), and a body paragraph. No word-split reveal in this
9
- * pass — the headline is static structure.
10
- *
11
- * Compound, slot-driven: the caller supplies every string, this owns measure,
12
- * alignment, and the two-tone role split. Token-only; no `dark:` styling.
13
- */
14
- function Statement({ className, ...props }) {
15
- return (_jsx("div", { "data-slot": "statement", className: cn("grid justify-items-start gap-6 text-left", className), ...props }));
16
- }
17
- /**
18
- * StatementEyebrow — mono eyebrow with an optional `[NN]` index chip in the
19
- * canonical link-deep role (deep verde on light / bright verde on dark). The chip
20
- * renders only when `index` is set.
21
- */
22
- function StatementEyebrow({ index, children, className, ...props }) {
23
- return (_jsxs("p", { "data-slot": "statement-eyebrow", className: cn("nc-type-label-mono flex items-center gap-2 uppercase text-muted-foreground", className), ...props, children: [index != null ? (_jsxs("span", { "data-slot": "statement-eyebrow-index", className: "text-[var(--nc-link-deep)]", children: ["[", index, "]"] })) : null, children] }));
24
- }
25
- /**
26
- * StatementTitle — the large headline. Its lead clause reads in the foreground
27
- * role; wrap the continuation clause in `StatementTail` to drop it to muted.
28
- */
29
- function StatementTitle({ className, ...props }) {
30
- return (_jsx("h2", { "data-slot": "statement-title", className: cn("nc-type-display-md max-w-[24ch] text-foreground", className), ...props }));
31
- }
32
- /** StatementTail — the muted continuation clause inside `StatementTitle` (V5 `.t2`). */
33
- function StatementTail({ className, ...props }) {
34
- return (_jsx("span", { "data-slot": "statement-tail", className: cn("text-muted-foreground", className), ...props }));
35
- }
36
- /** StatementBody — the supporting paragraph under the headline. */
37
- function StatementBody({ className, ...props }) {
38
- return (_jsx("p", { "data-slot": "statement-body", className: cn("nc-type-body-md max-w-[52ch] text-muted-foreground", className), ...props }));
39
- }
40
- export { Statement, StatementEyebrow, StatementTitle, StatementTail, StatementBody };
@@ -1,34 +0,0 @@
1
- import * as React from "react";
2
- /**
3
- * steps — the "how it works" station rail (V5 B09).
4
- *
5
- * An eyebrow + statement head sits above a STATIC horizontal rail (a single
6
- * filled foreground rule — the walking-dot progress animation is intentionally
7
- * out of scope this pass) and a row of numbered stations. Each `Step` carries a
8
- * square brand marker, a mono index, a title, an optional mono price line, and a
9
- * body. `StepsBranch` is a dashed-left callout rendered below the station row.
10
- *
11
- * This is one of only two surfaces where prices may appear (the pricing section
12
- * is the other), so the `price` line is a first-class, opt-in slot rather than a
13
- * generic field. Copy is props-driven: absent parts render nothing.
14
- *
15
- * Light-surface composition; it inherits the page theme and sets no dark root.
16
- * Token-only; no `dark:` styling.
17
- */
18
- declare function Steps({ kicker, title, children, className, ...props }: React.ComponentProps<"section"> & {
19
- kicker?: string;
20
- title?: string;
21
- }): React.JSX.Element;
22
- declare function Step({ index, title, price, body, className, children, ...props }: React.ComponentProps<"div"> & {
23
- index?: string;
24
- title?: string;
25
- price?: string;
26
- body?: React.ReactNode;
27
- }): React.JSX.Element;
28
- declare function StepsBranch({ label, title, body, className, children, ...props }: React.ComponentProps<"aside"> & {
29
- label?: string;
30
- title?: string;
31
- body?: React.ReactNode;
32
- }): React.JSX.Element;
33
- export { Steps, Step, StepsBranch };
34
- //# sourceMappingURL=steps.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"steps.d.ts","sourceRoot":"","sources":["../../src/components/steps.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B;;;;;;;;;;;;;;;GAeG;AAEH,iBAAS,KAAK,CAAC,EACb,MAAM,EACN,KAAK,EACL,QAAQ,EACR,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,qBAsCA;AAED,iBAAS,IAAI,CAAC,EACZ,KAAK,EACL,KAAK,EACL,KAAK,EACL,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACxB,qBAqCA;AAED,iBAAS,WAAW,CAAC,EACnB,KAAK,EACL,KAAK,EACL,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACxB,qBA+BA;AAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC"}
@@ -1,40 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import * as React from "react";
3
- import { cn } from "../lib/utils.js";
4
- import { SectionIntro, SectionIntroKicker, SectionIntroTitle } from "./section-intro.js";
5
- /**
6
- * steps — the "how it works" station rail (V5 B09).
7
- *
8
- * An eyebrow + statement head sits above a STATIC horizontal rail (a single
9
- * filled foreground rule — the walking-dot progress animation is intentionally
10
- * out of scope this pass) and a row of numbered stations. Each `Step` carries a
11
- * square brand marker, a mono index, a title, an optional mono price line, and a
12
- * body. `StepsBranch` is a dashed-left callout rendered below the station row.
13
- *
14
- * This is one of only two surfaces where prices may appear (the pricing section
15
- * is the other), so the `price` line is a first-class, opt-in slot rather than a
16
- * generic field. Copy is props-driven: absent parts render nothing.
17
- *
18
- * Light-surface composition; it inherits the page theme and sets no dark root.
19
- * Token-only; no `dark:` styling.
20
- */
21
- function Steps({ kicker, title, children, className, ...props }) {
22
- const stations = [];
23
- const branches = [];
24
- React.Children.forEach(children, (child) => {
25
- if (React.isValidElement(child) && child.type === StepsBranch) {
26
- branches.push(child);
27
- }
28
- else {
29
- stations.push(child);
30
- }
31
- });
32
- return (_jsxs("section", { "data-slot": "steps", className: cn("grid gap-8", className), ...props, children: [kicker || title ? (_jsxs(SectionIntro, { align: "start", className: "min-h-0 bg-transparent p-0", children: [kicker ? _jsx(SectionIntroKicker, { children: kicker }) : null, title ? (_jsx(SectionIntroTitle, { className: "mx-0 max-w-[28ch] text-balance text-left", children: title })) : null] })) : null, _jsx("div", { "data-slot": "steps-rail", "aria-hidden": "true", className: "h-px w-full bg-foreground" }), _jsx("div", { "data-slot": "steps-stations", className: "grid grid-cols-1 gap-10 sm:grid-cols-2 md:grid-cols-4", children: stations }), branches.length > 0 ? branches : null] }));
33
- }
34
- function Step({ index, title, price, body, className, children, ...props }) {
35
- return (_jsxs("div", { "data-slot": "step", className: cn("flex flex-col gap-3", className), ...props, children: [_jsx("span", { "data-slot": "step-marker", "aria-hidden": "true", className: "size-2 rounded-[1px] bg-primary" }), index ? (_jsx("span", { "data-slot": "step-index", className: "font-mono text-[10px] tracking-[0.14em] text-muted-foreground uppercase", children: index })) : null, title ? (_jsx("h3", { "data-slot": "step-title", className: "nc-type-body-md font-medium text-foreground", children: title })) : null, price ? (_jsx("span", { "data-slot": "step-price", className: "font-mono text-xs font-semibold tracking-[0.04em] text-[var(--nc-link-deep)] uppercase", children: price })) : null, body ? (_jsx("p", { "data-slot": "step-body", className: "nc-type-body-sm max-w-[30ch] text-muted-foreground", children: body })) : null, children] }));
36
- }
37
- function StepsBranch({ label, title, body, className, children, ...props }) {
38
- return (_jsxs("aside", { "data-slot": "steps-branch", className: cn("flex flex-col gap-3 border-l border-dashed border-border pl-6", className), ...props, children: [label ? (_jsx("span", { "data-slot": "steps-branch-label", className: "font-mono text-[10px] tracking-[0.14em] text-[var(--nc-link-deep)] uppercase", children: label })) : null, title ? (_jsx("h3", { "data-slot": "steps-branch-title", className: "nc-type-body-md font-medium text-foreground", children: title })) : null, body ? (_jsx("p", { "data-slot": "steps-branch-body", className: "nc-type-body-sm max-w-[52ch] text-muted-foreground", children: body })) : null, children] }));
39
- }
40
- export { Steps, Step, StepsBranch };
@@ -1,27 +0,0 @@
1
- import * as React from "react";
2
- /**
3
- * team-grid — the "the people" roster (V5 B17).
4
- *
5
- * A three-column wall of `TeamMember` cells over the gap-as-seam grid (`SeamGrid`
6
- * owns every divider once; the cells are borderless fills). Each member reads
7
- * avatar → role → name → line, top-aligned.
8
- *
9
- * SINGLE-OWNER SEAM: the holding `SeamGrid` paints the brand line behind the cells
10
- * and leaves a 1px guide gap, so no cell draws a competing border.
11
- *
12
- * INVERTED CELL: the non-human team member renders as a dark surface cell inside an
13
- * otherwise light section. This is expressed with an ancestor `.dark` class ON THE
14
- * CELL ROOT (`variant="inverted"`) — an accepted ancestor-class remap, NOT a `dark:`
15
- * utility. Every colour must flip from that cell-local `.dark`: the cell composes
16
- * semantic roles (`bg-card`, `text-foreground`, `text-muted-foreground`) and the
17
- * canonical `--nc-link-deep` pair for the verde accent. Token-only.
18
- */
19
- declare function TeamGrid({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
20
- declare function TeamMember({ className, variant, avatar, role, name, children, ...props }: React.ComponentProps<"div"> & {
21
- variant?: "default" | "inverted";
22
- avatar?: React.ReactNode;
23
- role?: React.ReactNode;
24
- name?: React.ReactNode;
25
- }): React.JSX.Element;
26
- export { TeamGrid, TeamMember };
27
- //# sourceMappingURL=team-grid.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"team-grid.d.ts","sourceRoot":"","sources":["../../src/components/team-grid.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B;;;;;;;;;;;;;;;;GAgBG;AAEH,iBAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAQrE;AAED,iBAAS,UAAU,CAAC,EAClB,SAAS,EACT,OAAmB,EACnB,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAC/B,OAAO,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC;IACjC,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACxB,qBA2CA;AAED,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC"}
@@ -1,30 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { cn } from "../lib/utils.js";
3
- import { SeamGrid } from "./seam-grid.js";
4
- /**
5
- * team-grid — the "the people" roster (V5 B17).
6
- *
7
- * A three-column wall of `TeamMember` cells over the gap-as-seam grid (`SeamGrid`
8
- * owns every divider once; the cells are borderless fills). Each member reads
9
- * avatar → role → name → line, top-aligned.
10
- *
11
- * SINGLE-OWNER SEAM: the holding `SeamGrid` paints the brand line behind the cells
12
- * and leaves a 1px guide gap, so no cell draws a competing border.
13
- *
14
- * INVERTED CELL: the non-human team member renders as a dark surface cell inside an
15
- * otherwise light section. This is expressed with an ancestor `.dark` class ON THE
16
- * CELL ROOT (`variant="inverted"`) — an accepted ancestor-class remap, NOT a `dark:`
17
- * utility. Every colour must flip from that cell-local `.dark`: the cell composes
18
- * semantic roles (`bg-card`, `text-foreground`, `text-muted-foreground`) and the
19
- * canonical `--nc-link-deep` pair for the verde accent. Token-only.
20
- */
21
- function TeamGrid({ className, ...props }) {
22
- return (_jsx(SeamGrid, { "data-slot": "team-grid", className: cn("h-full grid-cols-1 sm:grid-cols-2 lg:grid-cols-3", className), ...props }));
23
- }
24
- function TeamMember({ className, variant = "default", avatar, role, name, children, ...props }) {
25
- return (_jsxs("div", { "data-slot": "team-member", "data-variant": variant, className: cn("grid min-h-[250px] min-w-0 content-start gap-3 p-[clamp(24px,3vw,40px)] bg-card text-foreground",
26
- // inverted: a dark cell inside a light section via a local `.dark` boundary
27
- // (ancestor-class remap, not a `dark:` utility). Same roles, dark values.
28
- variant === "inverted" && "dark", className), ...props, children: [avatar ? (_jsx("span", { "data-slot": "team-member-avatar", "aria-hidden": "true", className: "flex size-13 items-center justify-center rounded-full bg-success/15 text-lg font-semibold text-[var(--nc-link-deep)]", children: avatar })) : null, role ? (_jsx("span", { "data-slot": "team-member-role", className: "font-mono text-[10px] uppercase tracking-[0.13em] text-[var(--nc-link-deep)]", children: role })) : null, name ? (_jsx("h3", { "data-slot": "team-member-name", className: "text-[17px] font-semibold text-foreground", children: name })) : null, children ? (_jsx("p", { "data-slot": "team-member-line", className: "text-sm text-muted-foreground", children: children })) : null] }));
29
- }
30
- export { TeamGrid, TeamMember };
@@ -1,48 +0,0 @@
1
- import * as React from "react";
2
- /**
3
- * testimonials — credibility surface for customer quotes.
4
- *
5
- * Three modes, all seam-single-owner:
6
- * - single (no `columns`, no `aside`): one full-width `QuoteCard` centered with a
7
- * comfortable measure; the card is borderless so it adds NO seam.
8
- * - grid (`columns=2|3`): a wall of `QuoteCard`s in the gap-as-seam grid — the grid
9
- * owns every divider once (`gap-px bg-border`). `surface="ink"` flips only the
10
- * seam colour, never its weight.
11
- * - record (`aside`): the featured 7fr / 5fr split (V5 B13) — a big quote beside a
12
- * side record card (`TestimonialRecord`). This split uses a whitespace gap, not a
13
- * hairline, so it introduces NO structural seam; the frame/lane/row perimeter is
14
- * still owned by the kept geometry layer.
15
- *
16
- * The `TestimonialRecord` slot reuses the status-row idiom (a mono line with a tint
17
- * state pill) through `TestimonialRecordRow` children, so consumers do not import any
18
- * live-demo internals. No fake proof: absent rows/status render nothing.
19
- *
20
- * Token-only; no `dark:` styling.
21
- */
22
- declare function Testimonials({ className, columns, surface, aside, children, ...props }: React.ComponentProps<"div"> & {
23
- columns?: 2 | 3;
24
- surface?: "canvas" | "ink";
25
- /** the side record card; presence switches to the featured 7fr / 5fr split */
26
- aside?: React.ReactNode;
27
- }): React.JSX.Element;
28
- /**
29
- * TestimonialRecord — the side record card in the featured split. A soft, bordered
30
- * card (its own perimeter, not a structural seam) with an optional mono `tag` over a
31
- * stack of `TestimonialRecordRow` children.
32
- */
33
- declare function TestimonialRecord({ className, tag, children, ...props }: React.ComponentProps<"div"> & {
34
- tag?: React.ReactNode;
35
- }): React.JSX.Element;
36
- /**
37
- * TestimonialRecordRow — one status line in the record card: a mono label with an
38
- * optional trailing state pill (done = green soft/deep, waiting = amber soft/deep —
39
- * the AA-clearing soft/deep idiom, a deep-ink label on a soft same-hue ground). The
40
- * inter-row hairline is owned here (`border-t`, dropped on the first row). No fake
41
- * proof: an absent `status` renders no pill.
42
- */
43
- declare function TestimonialRecordRow({ className, state, status, children, ...props }: React.ComponentProps<"div"> & {
44
- state?: "done" | "waiting";
45
- status?: React.ReactNode;
46
- }): React.JSX.Element;
47
- export { Testimonials, TestimonialRecord, TestimonialRecordRow };
48
- //# sourceMappingURL=testimonials.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"testimonials.d.ts","sourceRoot":"","sources":["../../src/components/testimonials.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,iBAAS,YAAY,CAAC,EACpB,SAAS,EACT,OAAO,EACP,OAAkB,EAClB,KAAK,EACL,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAC/B,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAChB,OAAO,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAC;IAC3B,8EAA8E;IAC9E,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACzB,qBAiDA;AAED;;;;GAIG;AACH,iBAAS,iBAAiB,CAAC,EACzB,SAAS,EACT,GAAG,EACH,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAAE,GAAG,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,qBAkBzD;AAED;;;;;;GAMG;AACH,iBAAS,oBAAoB,CAAC,EAC5B,SAAS,EACT,KAAc,EACd,MAAM,EACN,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,qBA4BxF;AAED,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,CAAC"}
@@ -1,58 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { cn } from "../lib/utils.js";
3
- import { SeamGrid } from "./seam-grid.js";
4
- /**
5
- * testimonials — credibility surface for customer quotes.
6
- *
7
- * Three modes, all seam-single-owner:
8
- * - single (no `columns`, no `aside`): one full-width `QuoteCard` centered with a
9
- * comfortable measure; the card is borderless so it adds NO seam.
10
- * - grid (`columns=2|3`): a wall of `QuoteCard`s in the gap-as-seam grid — the grid
11
- * owns every divider once (`gap-px bg-border`). `surface="ink"` flips only the
12
- * seam colour, never its weight.
13
- * - record (`aside`): the featured 7fr / 5fr split (V5 B13) — a big quote beside a
14
- * side record card (`TestimonialRecord`). This split uses a whitespace gap, not a
15
- * hairline, so it introduces NO structural seam; the frame/lane/row perimeter is
16
- * still owned by the kept geometry layer.
17
- *
18
- * The `TestimonialRecord` slot reuses the status-row idiom (a mono line with a tint
19
- * state pill) through `TestimonialRecordRow` children, so consumers do not import any
20
- * live-demo internals. No fake proof: absent rows/status render nothing.
21
- *
22
- * Token-only; no `dark:` styling.
23
- */
24
- function Testimonials({ className, columns, surface = "canvas", aside, children, ...props }) {
25
- if (aside) {
26
- // featured record mode — big quote (7fr) beside the record card (5fr). The gap
27
- // is whitespace, never a hairline, so this owns no structural seam.
28
- return (_jsxs("div", { "data-slot": "testimonials", "data-layout": "record", "data-surface": surface, className: cn("grid grid-cols-1 items-center gap-x-[clamp(32px,5vw,72px)] gap-y-10 lg:grid-cols-[7fr_5fr]", className), ...props, children: [_jsx("div", { className: "min-w-0", children: children }), _jsx("div", { className: "min-w-0", children: aside })] }));
29
- }
30
- if (!columns) {
31
- // single featured mode — the lone card is centered; no grid, no seam.
32
- return (_jsx("div", { "data-slot": "testimonials", "data-surface": surface, className: cn("flex h-full items-center justify-center", className), ...props, children: _jsx("div", { className: "w-full max-w-[760px]", children: children }) }));
33
- }
34
- return (_jsx(SeamGrid, { "data-slot": "testimonials", surface: surface, className: cn("h-full", columns === 2 ? "grid-cols-1 sm:grid-cols-2" : "grid-cols-1 sm:grid-cols-2 lg:grid-cols-3", className), ...props, children: children }));
35
- }
36
- /**
37
- * TestimonialRecord — the side record card in the featured split. A soft, bordered
38
- * card (its own perimeter, not a structural seam) with an optional mono `tag` over a
39
- * stack of `TestimonialRecordRow` children.
40
- */
41
- function TestimonialRecord({ className, tag, children, ...props }) {
42
- return (_jsxs("div", { "data-slot": "testimonial-record", className: cn("grid content-start rounded-md border border-border bg-muted p-5", className), ...props, children: [tag ? (_jsx("span", { "data-slot": "testimonial-record-tag", className: "mb-2 font-mono text-[11px] uppercase tracking-[0.12em] text-muted-foreground", children: tag })) : null, children] }));
43
- }
44
- /**
45
- * TestimonialRecordRow — one status line in the record card: a mono label with an
46
- * optional trailing state pill (done = green soft/deep, waiting = amber soft/deep —
47
- * the AA-clearing soft/deep idiom, a deep-ink label on a soft same-hue ground). The
48
- * inter-row hairline is owned here (`border-t`, dropped on the first row). No fake
49
- * proof: an absent `status` renders no pill.
50
- */
51
- function TestimonialRecordRow({ className, state = "done", status, children, ...props }) {
52
- return (_jsxs("div", { "data-slot": "testimonial-record-row", "data-state": state, className: cn("flex items-center justify-between gap-3 border-t border-border py-2.5 font-mono text-[11.5px] first:border-t-0", className), ...props, children: [_jsx("span", { className: "min-w-0 text-muted-foreground", children: children }), status ? (_jsx("span", { className: cn("shrink-0 rounded-sm px-1.5 py-0.5 text-[10px] font-medium uppercase tracking-[0.04em]",
53
- // Soft-ground + deep-ink feedback pairs (the semantic tone idiom):
54
- // a solid hue on a same-hue 15% tint fails AA (≈2.5:1 / 1.4:1). success uses
55
- // the link family (there is no success-deep token), warning its own soft/deep.
56
- state === "done" && "bg-[var(--nc-link-bg-soft)] text-[var(--nc-link-deep)]", state === "waiting" && "bg-[var(--nc-warning-soft)] text-[var(--nc-warning-deep)]"), children: status })) : null] }));
57
- }
58
- export { Testimonials, TestimonialRecord, TestimonialRecordRow };
@@ -1,22 +0,0 @@
1
- import * as React from "react";
2
- /**
3
- * texture-strip — a 40px full-bleed separator band (V5 B05).
4
- *
5
- * A thin horizontal divider that carries a dotted radial texture and a hairline
6
- * on its top and bottom edges. The dots and their spacing are owned once by the
7
- * design-system `nc-dotted-field` primitive (`radial-gradient(var(--nc-line)…)`
8
- * over `var(--nc-canvas)`), so no raw gradient or colour lives in this component
9
- * — only the band geometry (height, flex centring) is inline. Token-only; no
10
- * `dark:` styling.
11
- *
12
- * Children remain an open composition slot. `TextureStripChip` remains as a
13
- * deprecated compatibility export for consumers of the 0.10 package surface.
14
- */
15
- declare function TextureStrip({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
16
- /**
17
- * @deprecated Pass any child to `TextureStrip` and style it for the owning
18
- * surface. This wrapper remains exported to preserve the public 0.10 API.
19
- */
20
- declare function TextureStripChip({ className, ...props }: React.ComponentProps<"span">): React.JSX.Element;
21
- export { TextureStrip, TextureStripChip };
22
- //# sourceMappingURL=texture-strip.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"texture-strip.d.ts","sourceRoot":"","sources":["../../src/components/texture-strip.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B;;;;;;;;;;;;GAYG;AAEH,iBAAS,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAazE;AAED;;;GAGG;AACH,iBAAS,gBAAgB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,qBAW9E;AAKD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,CAAC"}
@@ -1,32 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { cn } from "../lib/utils.js";
3
- /**
4
- * texture-strip — a 40px full-bleed separator band (V5 B05).
5
- *
6
- * A thin horizontal divider that carries a dotted radial texture and a hairline
7
- * on its top and bottom edges. The dots and their spacing are owned once by the
8
- * design-system `nc-dotted-field` primitive (`radial-gradient(var(--nc-line)…)`
9
- * over `var(--nc-canvas)`), so no raw gradient or colour lives in this component
10
- * — only the band geometry (height, flex centring) is inline. Token-only; no
11
- * `dark:` styling.
12
- *
13
- * Children remain an open composition slot. `TextureStripChip` remains as a
14
- * deprecated compatibility export for consumers of the 0.10 package surface.
15
- */
16
- function TextureStrip({ className, ...props }) {
17
- return (_jsx("div", { "data-slot": "texture-strip", className: cn(
18
- // Both the semantic background and the raw `--nc-*` tokens used by
19
- // `nc-dotted-field` remap under any `.dark` ancestor.
20
- "nc-dotted-field flex h-10 items-center justify-center border-y border-border bg-background", className), ...props }));
21
- }
22
- /**
23
- * @deprecated Pass any child to `TextureStrip` and style it for the owning
24
- * surface. This wrapper remains exported to preserve the public 0.10 API.
25
- */
26
- function TextureStripChip({ className, ...props }) {
27
- return (_jsx("span", { "data-slot": "texture-strip-chip", className: cn("nc-type-label-mono rounded-full border border-border bg-background px-3 py-1 text-muted-foreground uppercase", className), ...props }));
28
- }
29
- // The deprecated export is named here because this is where it is DEFINED —
30
- // re-exporting it is what keeps the 0.10 public API alive.
31
- // eslint-disable-next-line @typescript-eslint/no-deprecated -- the export of the deprecated symbol itself
32
- export { TextureStrip, TextureStripChip };
@@ -1,29 +0,0 @@
1
- /**
2
- * Internal seam helper for the "gap-as-seam" grid mechanics.
3
- *
4
- * This module is the ONE place the ink seam `color-mix(...)` string lives, so a
5
- * typo can no longer silently break one band's seam while the others stay
6
- * correct. `SeamGrid` (the public primitive) and the `logo-band` grid owner both
7
- * derive their seam colour from `seamSurfaceClass` here.
8
- *
9
- * SINGLE-OWNER SEAM: a `grid` with `gap-px` lets the panel paint one hairline at
10
- * every cell boundary while borderless, square-cornered cells fill on top, so no
11
- * coordinate ever carries two lines. The seam COLOUR is the only thing that flips
12
- * with `surface`: canvas paints the brand `line` via `bg-border`; ink mixes the
13
- * line toward the ink role so the seam stays a seam and never changes weight.
14
- * Token-only; no `dark:` styling.
15
- *
16
- * This is NOT part of the public package surface. It has no `exports` subpath, so
17
- * consumers couple to the `SeamGrid` component contract rather than to the exact
18
- * arbitrary Tailwind class string. Keep it that way.
19
- */
20
- type SeamSurface = "canvas" | "ink";
21
- /**
22
- * seamSurfaceClass is the single source for the seam colour class. Internal code
23
- * reaches for this (or `SeamGrid`, which wraps it) instead of hand-copying the ink
24
- * `color-mix(...)` string into another grid owner.
25
- */
26
- declare function seamSurfaceClass(surface: SeamSurface): string;
27
- export { seamSurfaceClass };
28
- export type { SeamSurface };
29
- //# sourceMappingURL=seam.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"seam.d.ts","sourceRoot":"","sources":["../../src/lib/seam.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,KAAK,WAAW,GAAG,QAAQ,GAAG,KAAK,CAAC;AAEpC;;;;GAIG;AACH,iBAAS,gBAAgB,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAItD;AAED,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAC5B,YAAY,EAAE,WAAW,EAAE,CAAC"}
package/dist/lib/seam.js DELETED
@@ -1,30 +0,0 @@
1
- /**
2
- * Internal seam helper for the "gap-as-seam" grid mechanics.
3
- *
4
- * This module is the ONE place the ink seam `color-mix(...)` string lives, so a
5
- * typo can no longer silently break one band's seam while the others stay
6
- * correct. `SeamGrid` (the public primitive) and the `logo-band` grid owner both
7
- * derive their seam colour from `seamSurfaceClass` here.
8
- *
9
- * SINGLE-OWNER SEAM: a `grid` with `gap-px` lets the panel paint one hairline at
10
- * every cell boundary while borderless, square-cornered cells fill on top, so no
11
- * coordinate ever carries two lines. The seam COLOUR is the only thing that flips
12
- * with `surface`: canvas paints the brand `line` via `bg-border`; ink mixes the
13
- * line toward the ink role so the seam stays a seam and never changes weight.
14
- * Token-only; no `dark:` styling.
15
- *
16
- * This is NOT part of the public package surface. It has no `exports` subpath, so
17
- * consumers couple to the `SeamGrid` component contract rather than to the exact
18
- * arbitrary Tailwind class string. Keep it that way.
19
- */
20
- /**
21
- * seamSurfaceClass is the single source for the seam colour class. Internal code
22
- * reaches for this (or `SeamGrid`, which wraps it) instead of hand-copying the ink
23
- * `color-mix(...)` string into another grid owner.
24
- */
25
- function seamSurfaceClass(surface) {
26
- return surface === "ink"
27
- ? "bg-[color-mix(in_srgb,var(--nc-line)_40%,var(--nc-ink))]"
28
- : "bg-border";
29
- }
30
- export { seamSurfaceClass };