@nadicodeai/ui 12.1.30 → 12.1.31

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.
@@ -0,0 +1,21 @@
1
+ import type { ReactNode } from "react";
2
+ /**
3
+ * A failure page's picture with its label
4
+ * ([Failure surfaces](../../../design-system/DESIGN.md#failure-surfaces)): the
5
+ * way a museum labels a work, the title says what the picture is doing, which
6
+ * is the page's joke, and the second line gives its materials and year. From
7
+ * `lg` the label stands beside the picture's base, with an empty column of the
8
+ * same width on the other side so the picture stays on the page's centre line;
9
+ * below that it stands centred under the picture.
10
+ */
11
+ export declare function LabelledPicture({ children, label, className, }: {
12
+ children: ReactNode;
13
+ /** The `PictureLabel`, or a boundary that streams it in. */
14
+ label: ReactNode;
15
+ className?: string;
16
+ }): import("react").JSX.Element;
17
+ export declare function PictureLabel({ title, details }: {
18
+ title: string;
19
+ details: string;
20
+ }): import("react").JSX.Element;
21
+ //# sourceMappingURL=picture-label.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"picture-label.d.ts","sourceRoot":"","sources":["../../src/components/picture-label.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,EAC9B,QAAQ,EACR,KAAK,EACL,SAAS,GACV,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,4DAA4D;IAC5D,KAAK,EAAE,SAAS,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,+BAeA;AAED,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,+BAOlF"}
@@ -0,0 +1,17 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cn } from "../lib/utils.js";
3
+ /**
4
+ * A failure page's picture with its label
5
+ * ([Failure surfaces](../../../design-system/DESIGN.md#failure-surfaces)): the
6
+ * way a museum labels a work, the title says what the picture is doing, which
7
+ * is the page's joke, and the second line gives its materials and year. From
8
+ * `lg` the label stands beside the picture's base, with an empty column of the
9
+ * same width on the other side so the picture stays on the page's centre line;
10
+ * below that it stands centred under the picture.
11
+ */
12
+ export function LabelledPicture({ children, label, className, }) {
13
+ return (_jsxs("figure", { className: cn("m-0 grid w-full max-w-4xl justify-items-center gap-4 lg:grid-cols-[minmax(0,1fr)_auto_minmax(0,1fr)] lg:items-end lg:gap-8", className), "data-slot": "labelled-picture", children: [_jsx("div", { className: "lg:col-start-2 lg:row-start-1", children: children }), _jsx("figcaption", { className: "max-w-72 text-center lg:col-start-3 lg:row-start-1 lg:justify-self-start lg:pb-6 lg:text-start", children: label })] }));
14
+ }
15
+ export function PictureLabel({ title, details }) {
16
+ return (_jsxs("span", { className: "grid gap-1", children: [_jsx("span", { className: "nc-type-body-sm text-balance font-medium", children: title }), _jsx("span", { className: "nc-type-label-mono text-balance text-muted-foreground", children: details })] }));
17
+ }
package/dist/index.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- export * from "./components/absence-note.js";
2
1
  export * from "./components/accordion.js";
3
2
  export * from "./components/account-menu.js";
4
3
  export * from "./components/action-menu.js";
@@ -80,6 +79,7 @@ export * from "./components/navigation-menu.js";
80
79
  export * from "./components/notice-banner.js";
81
80
  export * from "./components/pagination.js";
82
81
  export * from "./components/pending-label.js";
82
+ export * from "./components/picture-label.js";
83
83
  export * from "./components/plugin-slot-boundary.js";
84
84
  export * from "./components/popover.js";
85
85
  export * from "./components/progress.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,4 +1,3 @@
1
- export * from "./components/absence-note.js";
2
1
  export * from "./components/accordion.js";
3
2
  export * from "./components/account-menu.js";
4
3
  export * from "./components/action-menu.js";
@@ -80,6 +79,7 @@ export * from "./components/navigation-menu.js";
80
79
  export * from "./components/notice-banner.js";
81
80
  export * from "./components/pagination.js";
82
81
  export * from "./components/pending-label.js";
82
+ export * from "./components/picture-label.js";
83
83
  export * from "./components/plugin-slot-boundary.js";
84
84
  export * from "./components/popover.js";
85
85
  export * from "./components/progress.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nadicodeai/ui",
3
- "version": "12.1.30",
3
+ "version": "12.1.31",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -36,10 +36,6 @@
36
36
  "types": "./dist/lib/theme-mode.d.ts",
37
37
  "import": "./dist/lib/theme-mode.js"
38
38
  },
39
- "./lib/absence-note": {
40
- "types": "./dist/lib/absence-note.d.ts",
41
- "import": "./dist/lib/absence-note.js"
42
- },
43
39
  "./lib/format-token-count": {
44
40
  "types": "./dist/lib/format-token-count.d.ts",
45
41
  "import": "./dist/lib/format-token-count.js"
@@ -76,7 +72,7 @@
76
72
  "@assistant-ui/react": "0.15.21",
77
73
  "@assistant-ui/react-markdown": "0.14.16",
78
74
  "@base-ui/react": "^1.8.0",
79
- "@nadicodeai/design-system": "12.1.30",
75
+ "@nadicodeai/design-system": "12.1.31",
80
76
  "class-variance-authority": "^0.7.1",
81
77
  "clsx": "^2.1.1",
82
78
  "cmdk": "^1.1.1",
@@ -1,23 +0,0 @@
1
- /**
2
- * What stands where a missing page or record would have been
3
- * ([Failure surfaces](../../../design-system/DESIGN.md#failure-surfaces)): a
4
- * short note signed by Nadia, one line at a time so the stanza breathes on the
5
- * spacing ladder rather than on a private leading.
6
- *
7
- * The note is written copy signed by Nadia, not a report of anything she did,
8
- * so the orb takes ambient motion and claims no activity. `orb` is false where
9
- * the surface's picture already gives Nadia a place to turn in, which is where
10
- * she belongs when there is one. `scale` is the register the surface reads in:
11
- * a product screen sets the note one step below a page title, the website one
12
- * step above it.
13
- */
14
- export declare function AbsenceNote({ note, byline, scale, align, orb, className, }: {
15
- /** The piece, one line per newline. */
16
- note: string;
17
- byline: string;
18
- scale?: "product" | "site";
19
- align?: "center" | "start";
20
- orb?: boolean;
21
- className?: string;
22
- }): import("react").JSX.Element;
23
- //# sourceMappingURL=absence-note.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"absence-note.d.ts","sourceRoot":"","sources":["../../src/components/absence-note.tsx"],"names":[],"mappings":"AAGA;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,MAAM,EACN,KAAiB,EACjB,KAAgB,EAChB,GAAU,EACV,SAAS,GACV,EAAE;IACD,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAC3B,KAAK,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC3B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,+BA4BA"}
@@ -1,19 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { AgentOrb } from "./agent-orb.js";
3
- import { cn } from "../lib/utils.js";
4
- /**
5
- * What stands where a missing page or record would have been
6
- * ([Failure surfaces](../../../design-system/DESIGN.md#failure-surfaces)): a
7
- * short note signed by Nadia, one line at a time so the stanza breathes on the
8
- * spacing ladder rather than on a private leading.
9
- *
10
- * The note is written copy signed by Nadia, not a report of anything she did,
11
- * so the orb takes ambient motion and claims no activity. `orb` is false where
12
- * the surface's picture already gives Nadia a place to turn in, which is where
13
- * she belongs when there is one. `scale` is the register the surface reads in:
14
- * a product screen sets the note one step below a page title, the website one
15
- * step above it.
16
- */
17
- export function AbsenceNote({ note, byline, scale = "product", align = "center", orb = true, className, }) {
18
- return (_jsxs("div", { className: cn("grid gap-6", align === "center" ? "justify-items-center text-center" : "justify-items-start text-start", className), children: [orb ? (_jsx(AgentOrb, { decorative: true, form: "nadia", motion: "ambient", size: scale === "site" ? 160 : 96 })) : null, _jsx("blockquote", { className: "grid gap-3", children: note.split("\n").map((line) => (_jsx("p", { className: cn("text-balance font-normal", scale === "site" ? "nc-type-heading-lg" : "nc-type-heading-md"), children: line }, line))) }), _jsx("p", { className: "nc-type-label-mono text-muted-foreground", children: byline })] }));
19
- }
@@ -1,11 +0,0 @@
1
- /**
2
- * Which of a surface's absence notes an address gets.
3
- *
4
- * The choice is a hash of the address, not a draw: the same address always
5
- * shows the same note, so a reader who reloads is not handed a different one,
6
- * two readers comparing the same broken link see the same thing, and a test can
7
- * name the note it expects. FNV-1a over the path, 32-bit, through `Math.imul`
8
- * so the multiply stays integer.
9
- */
10
- export declare function absenceNoteFor<Note>(path: string, notes: readonly [Note, ...Note[]]): Note;
11
- //# sourceMappingURL=absence-note.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"absence-note.d.ts","sourceRoot":"","sources":["../../src/lib/absence-note.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,CAM1F"}
@@ -1,16 +0,0 @@
1
- /**
2
- * Which of a surface's absence notes an address gets.
3
- *
4
- * The choice is a hash of the address, not a draw: the same address always
5
- * shows the same note, so a reader who reloads is not handed a different one,
6
- * two readers comparing the same broken link see the same thing, and a test can
7
- * name the note it expects. FNV-1a over the path, 32-bit, through `Math.imul`
8
- * so the multiply stays integer.
9
- */
10
- export function absenceNoteFor(path, notes) {
11
- let hash = 0x811c9dc5;
12
- for (let index = 0; index < path.length; index += 1) {
13
- hash = Math.imul(hash ^ path.charCodeAt(index), 0x01000193) >>> 0;
14
- }
15
- return notes[hash % notes.length];
16
- }