@nadicodeai/ui 12.1.51 → 12.1.53

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 (60) hide show
  1. package/LICENSES/VGPU-MIT.txt +21 -0
  2. package/NOTICE +12 -0
  3. package/dist/assets/brand/google.svg +2 -0
  4. package/dist/assets/brand/index.json +8 -0
  5. package/dist/components/agent-card.d.ts.map +1 -1
  6. package/dist/components/agent-card.js +1 -1
  7. package/dist/components/agent-list-row.d.ts +28 -0
  8. package/dist/components/agent-list-row.d.ts.map +1 -0
  9. package/dist/components/agent-list-row.js +17 -0
  10. package/dist/components/approval-row.d.ts +21 -0
  11. package/dist/components/approval-row.d.ts.map +1 -0
  12. package/dist/components/approval-row.js +14 -0
  13. package/dist/components/brand-icons/google.d.ts +18 -0
  14. package/dist/components/brand-icons/google.d.ts.map +1 -0
  15. package/dist/components/brand-icons/google.js +22 -0
  16. package/dist/components/brand-icons.d.ts +1 -0
  17. package/dist/components/brand-icons.d.ts.map +1 -1
  18. package/dist/components/brand-icons.js +1 -0
  19. package/dist/components/channel-view.d.ts +89 -0
  20. package/dist/components/channel-view.d.ts.map +1 -0
  21. package/dist/components/channel-view.js +75 -0
  22. package/dist/components/company-card/approach.d.ts +22 -0
  23. package/dist/components/company-card/approach.d.ts.map +1 -0
  24. package/dist/components/company-card/approach.js +17 -0
  25. package/dist/components/company-card/engraving.d.ts +8 -0
  26. package/dist/components/company-card/engraving.d.ts.map +1 -0
  27. package/dist/components/company-card/engraving.js +56 -0
  28. package/dist/components/company-card/foil-colors.d.ts +4 -0
  29. package/dist/components/company-card/foil-colors.d.ts.map +1 -0
  30. package/dist/components/company-card/foil-colors.js +29 -0
  31. package/dist/components/company-card/renderer.d.ts +13 -0
  32. package/dist/components/company-card/renderer.d.ts.map +1 -0
  33. package/dist/components/company-card/renderer.js +138 -0
  34. package/dist/components/company-card/scene.d.ts +10 -0
  35. package/dist/components/company-card/scene.d.ts.map +1 -0
  36. package/dist/components/company-card/scene.js +25 -0
  37. package/dist/components/company-card/shader.d.ts +10 -0
  38. package/dist/components/company-card/shader.d.ts.map +1 -0
  39. package/dist/components/company-card/shader.js +165 -0
  40. package/dist/components/company-card/snapshot.d.ts +7 -0
  41. package/dist/components/company-card/snapshot.d.ts.map +1 -0
  42. package/dist/components/company-card/snapshot.js +37 -0
  43. package/dist/components/company-card.d.ts +31 -0
  44. package/dist/components/company-card.d.ts.map +1 -0
  45. package/dist/components/company-card.js +200 -0
  46. package/dist/components/desktop-shell.js +1 -1
  47. package/dist/components/entry-scene.d.ts +90 -0
  48. package/dist/components/entry-scene.d.ts.map +1 -0
  49. package/dist/components/entry-scene.js +41 -0
  50. package/dist/components/nadia-presence.d.ts +22 -0
  51. package/dist/components/nadia-presence.d.ts.map +1 -0
  52. package/dist/components/nadia-presence.js +45 -0
  53. package/dist/components/portal-sidebar-frame.d.ts +40 -0
  54. package/dist/components/portal-sidebar-frame.d.ts.map +1 -0
  55. package/dist/components/portal-sidebar-frame.js +14 -0
  56. package/dist/index.d.ts +10 -3
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +10 -3
  59. package/dist/styles/components.css +567 -0
  60. package/package.json +3 -2
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Vercel, Inc.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/NOTICE CHANGED
@@ -35,3 +35,15 @@ Copyright (c) 2026 ChingRu <hello@chingru.com>
35
35
  Licensed under the MIT License; the full text ships as
36
36
  LICENSES/SHADCN-HEATMAP-MIT.txt. The source is adapted to distinguish missing
37
37
  coverage from a measured zero and is composed by the shared ActivityCalendar.
38
+
39
+ @nadicodeai/ui draws the company card's foil with vgpu's holographic card, from
40
+ vgpu 0.5.0.
41
+
42
+ vgpu
43
+ Copyright (c) 2025 Vercel, Inc.
44
+
45
+ Licensed under the MIT License; the full text ships as LICENSES/VGPU-MIT.txt.
46
+ src/components/company-card/renderer.ts keeps the example's WebGPU set-up, frame
47
+ loop and cleanup, and src/components/company-card/shader.ts its light model; the
48
+ surface is the card itself, the example's own marks give way to the card's
49
+ engraving, and every colour is a design-system token.
@@ -0,0 +1,2 @@
1
+ <!-- Google. Generated by packages/ui/scripts/build-icon-assets.mjs from @iconify-json/logos (CC0-1.0). -->
2
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 256 262" data-brand="google"><path fill="#4285f4" d="M255.88 133.45c0-10.73-.87-18.57-2.76-26.69H130.55v48.45h71.95c-1.45 12.04-9.29 30.17-26.7 42.36l-.24 1.62 38.76 30.02 2.68.27c24.66-22.78 38.88-56.28 38.88-96.03"></path><path fill="#34a853" d="M130.55 261.1c35.25 0 64.84-11.6 86.45-31.62l-41.2-31.91c-11.02 7.68-25.81 13.05-45.25 13.05-34.52 0-63.82-22.77-74.27-54.25l-1.53.13-40.3 31.19-.52 1.46c21.46 42.65 65.56 71.95 116.62 71.95"></path><path fill="#fbbc05" d="M56.28 156.37a80 80 0 0 1-4.35-25.82c0-9 1.6-17.7 4.2-25.82l-.07-1.73-40.8-31.69-1.34.64C5.08 89.65 0 109.52 0 130.55s5.08 40.9 13.93 58.6z"></path><path fill="#eb4335" d="M130.55 50.48c24.51 0 41.05 10.59 50.48 19.44l36.84-35.98C195.25 12.91 165.8 0 130.55 0 79.49 0 35.39 29.3 13.92 71.95l42.22 32.78c10.59-31.48 39.89-54.25 74.41-54.25"></path></svg>
@@ -187,6 +187,14 @@
187
187
  "googlegmail"
188
188
  ]
189
189
  },
190
+ {
191
+ "slug": "google",
192
+ "name": "Google",
193
+ "set": "app",
194
+ "mono": false,
195
+ "file": "google.svg",
196
+ "aliases": []
197
+ },
190
198
  {
191
199
  "slug": "google-calendar",
192
200
  "name": "Google Calendar",
@@ -1 +1 @@
1
- {"version":3,"file":"agent-card.d.ts","sourceRoot":"","sources":["../../src/components/agent-card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAAE,IAAI,EAA0C,MAAM,mBAAmB,CAAC;AAGjF,KAAK,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,IAAI,CAAC,EAAE,UAAU,CAAC,GAAG;IAC1E,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,GAAG,EAAE,SAAS,CAAC;IACf,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,6FAA6F;IAC7F,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB,CAAC;AAMF,iBAAS,SAAS,CAAC,EACjB,MAAM,EACN,SAAS,EACT,GAAG,EACH,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,MAAM,EACN,GAAG,KAAK,EACT,EAAE,cAAc,+BAsDhB;AAED,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"agent-card.d.ts","sourceRoot":"","sources":["../../src/components/agent-card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAAE,IAAI,EAA0C,MAAM,mBAAmB,CAAC;AAGjF,KAAK,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,IAAI,CAAC,EAAE,UAAU,CAAC,GAAG;IAC1E,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,GAAG,EAAE,SAAS,CAAC;IACf,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,6FAA6F;IAC7F,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB,CAAC;AAMF,iBAAS,SAAS,CAAC,EACjB,MAAM,EACN,SAAS,EACT,GAAG,EACH,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,MAAM,EACN,GAAG,KAAK,EACT,EAAE,cAAc,+BAwDhB;AAED,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,CAAC"}
@@ -9,6 +9,6 @@ function AgentCard({ action, className, job, meta, name, status, visual, ...prop
9
9
  const hasMeta = hasSlotContent(meta);
10
10
  const hasAction = hasSlotContent(action);
11
11
  const hasVisual = hasSlotContent(visual);
12
- return (_jsxs(Card, { className: cn("h-full", className), ...props, children: [_jsxs("div", { className: cn("grid items-start gap-(--card-spacing) px-(--card-spacing)", hasVisual && "grid-cols-[auto_minmax(0,1fr)]"), children: [hasVisual ? (_jsx("div", { className: "grid size-24 place-items-center overflow-hidden", "data-slot": "agent-card-visual", children: visual })) : null, _jsxs("div", { className: "grid min-w-0 content-start gap-nadicode-xs", children: [_jsx(CardTitle, { className: "leading-tight font-semibold", children: name }), _jsx(CardDescription, { className: "leading-snug", children: job }), hasStatus ? (_jsx("div", { className: "flex flex-wrap items-center gap-nadicode-xxs pt-nadicode-xxs", "data-slot": "agent-card-status", children: status })) : null] })] }), hasMeta || hasAction ? (_jsxs(CardFooter, { className: "mt-auto gap-nadicode-sm border-t py-nadicode-sm", children: [hasMeta ? (_jsx("div", { className: "min-w-0 flex-1 text-xs text-muted-foreground", "data-slot": "agent-card-meta", children: meta })) : null, hasAction ? (_jsx("div", { className: "ml-auto shrink-0", "data-slot": "agent-card-action", children: action })) : null] })) : null] }));
12
+ return (_jsxs(Card, { className: cn("h-full", className), ...props, children: [_jsxs("div", { className: cn("grid items-start gap-(--card-spacing) px-(--card-spacing)", hasVisual && "grid-cols-[auto_minmax(0,1fr)]"), children: [hasVisual ? (_jsx("div", { className: "grid size-24 place-items-center overflow-hidden", "data-slot": "agent-card-visual", children: visual })) : null, _jsxs("div", { className: "grid min-w-0 content-start gap-nadicode-xs", children: [_jsx(CardTitle, { className: "leading-tight font-semibold break-words", children: name }), _jsx(CardDescription, { className: "leading-snug", children: job }), hasStatus ? (_jsx("div", { className: "flex flex-wrap items-center gap-nadicode-xxs pt-nadicode-xxs", "data-slot": "agent-card-status", children: status })) : null] })] }), hasMeta || hasAction ? (_jsxs(CardFooter, { className: "mt-auto gap-nadicode-sm border-t py-nadicode-sm", children: [hasMeta ? (_jsx("div", { className: "min-w-0 flex-1 text-xs text-muted-foreground", "data-slot": "agent-card-meta", children: meta })) : null, hasAction ? (_jsx("div", { className: "ml-auto shrink-0", "data-slot": "agent-card-action", children: action })) : null] })) : null] }));
13
13
  }
14
14
  export { AgentCard };
@@ -0,0 +1,28 @@
1
+ import type { CSSProperties } from "react";
2
+ import { type AgentOrbFigure, type AgentOrbState } from "./agent-orb.js";
3
+ /**
4
+ * One Agent in a list of them: the orb, the name, and the line that says what
5
+ * the Agent is doing now ("Answering on WhatsApp", "Working") or what it is
6
+ * for. It is the row's presentation alone, so the consumer owns the control
7
+ * around it: Nadia's Agents list puts it in the button that opens the Agent,
8
+ * and a website scene puts it in a list item that opens nothing.
9
+ *
10
+ * Narrow, the orb stands alone and the words stay for a screen reader, which is
11
+ * how Nadia's window draws the list when there is no room for the names.
12
+ */
13
+ export declare function AgentListRow({ className, color, current, form, motionKey, name, narrow, size, state, stateLine, ...props }: Omit<React.ComponentProps<"span">, "color"> & {
14
+ /** The pigment of the Agent's chosen form; Nadia's striped ribbon keeps her own. */
15
+ color?: CSSProperties["color"];
16
+ /** The row the list is on now. */
17
+ current?: boolean;
18
+ form: AgentOrbFigure;
19
+ motionKey?: number;
20
+ name: string;
21
+ /** No room for the words: the orb alone, the rest for a screen reader. */
22
+ narrow?: boolean;
23
+ size?: 24 | 32 | 40;
24
+ state?: AgentOrbState;
25
+ /** What the Agent is doing, or what it is for. Absent, the name stands alone. */
26
+ stateLine?: string;
27
+ }): import("react").JSX.Element;
28
+ //# sourceMappingURL=agent-list-row.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-list-row.d.ts","sourceRoot":"","sources":["../../src/components/agent-list-row.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C,OAAO,EAAY,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAG3F;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,EAC3B,SAAS,EACT,KAAK,EACL,OAAe,EACf,IAAI,EACJ,SAAS,EACT,IAAI,EACJ,MAAc,EACd,IAAS,EACT,KAAc,EACd,SAAS,EACT,GAAG,KAAK,EACT,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,GAAG;IAC/C,oFAAoF;IACpF,KAAK,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IAC/B,kCAAkC;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,cAAc,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,0EAA0E;IAC1E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,iFAAiF;IACjF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,+BA4BA"}
@@ -0,0 +1,17 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { AgentOrb } from "./agent-orb.js";
4
+ import { cn } from "../lib/utils.js";
5
+ /**
6
+ * One Agent in a list of them: the orb, the name, and the line that says what
7
+ * the Agent is doing now ("Answering on WhatsApp", "Working") or what it is
8
+ * for. It is the row's presentation alone, so the consumer owns the control
9
+ * around it: Nadia's Agents list puts it in the button that opens the Agent,
10
+ * and a website scene puts it in a list item that opens nothing.
11
+ *
12
+ * Narrow, the orb stands alone and the words stay for a screen reader, which is
13
+ * how Nadia's window draws the list when there is no room for the names.
14
+ */
15
+ export function AgentListRow({ className, color, current = false, form, motionKey, name, narrow = false, size = 40, state = "idle", stateLine, ...props }) {
16
+ return (_jsxs("span", { className: cn("flex w-full min-w-0 items-center gap-3 text-left text-sm", narrow && "justify-center", className), "data-slot": "agent-list-row", "data-current": current || undefined, ...props, children: [_jsx(AgentOrb, { color: color, decorative: true, form: form, motionKey: motionKey, size: size, state: state }), _jsxs("span", { className: cn("grid min-w-0", narrow && "sr-only"), children: [_jsx("span", { className: cn("truncate text-foreground", current && "font-medium"), children: name }), stateLine ? (_jsx("span", { className: "truncate text-xs text-muted-foreground", children: stateLine })) : null] })] }));
17
+ }
@@ -0,0 +1,21 @@
1
+ import type { ComponentProps, ReactNode } from "react";
2
+ import { Item } from "./item.js";
3
+ /**
4
+ * One thing waiting for a person's yes: a mark for what is asking, the request
5
+ * in one sentence, what happened underneath it, and the single action that
6
+ * clears it. It is a row and not a card, because an approval is one of a list
7
+ * and the list is read top to bottom; put several in an `ItemGroup`.
8
+ *
9
+ * The row says what waits and offers the yes. Who may say it, what it changes
10
+ * and what happens after belong to the product that mounts it.
11
+ */
12
+ export declare function ApprovalRow({ action, description, failed, media, title, ...props }: Omit<ComponentProps<typeof Item>, "children" | "variant" | "size" | "title"> & {
13
+ /** The mark of what is asking: a channel's mark, a person's avatar, an Agent's orb. */
14
+ media?: ReactNode;
15
+ title: ReactNode;
16
+ description?: ReactNode;
17
+ /** The description reports a failed attempt, so it is announced. */
18
+ failed?: boolean;
19
+ action?: ReactNode;
20
+ }): import("react").JSX.Element;
21
+ //# sourceMappingURL=approval-row.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approval-row.d.ts","sourceRoot":"","sources":["../../src/components/approval-row.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvD,OAAO,EACL,IAAI,EAML,MAAM,mBAAmB,CAAC;AAE3B;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,WAAW,EACX,MAAM,EACN,KAAK,EACL,KAAK,EACL,GAAG,KAAK,EACT,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,IAAI,CAAC,EAAE,UAAU,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG;IAChF,uFAAuF;IACvF,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,oEAAoE;IACpE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB,+BAaA"}
@@ -0,0 +1,14 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Item, ItemActions, ItemContent, ItemDescription, ItemMedia, ItemTitle, } from "./item.js";
3
+ /**
4
+ * One thing waiting for a person's yes: a mark for what is asking, the request
5
+ * in one sentence, what happened underneath it, and the single action that
6
+ * clears it. It is a row and not a card, because an approval is one of a list
7
+ * and the list is read top to bottom; put several in an `ItemGroup`.
8
+ *
9
+ * The row says what waits and offers the yes. Who may say it, what it changes
10
+ * and what happens after belong to the product that mounts it.
11
+ */
12
+ export function ApprovalRow({ action, description, failed, media, title, ...props }) {
13
+ return (_jsxs(Item, { role: "listitem", size: "sm", variant: "outline", ...props, children: [media ? _jsx(ItemMedia, { children: media }) : null, _jsxs(ItemContent, { className: "min-w-0", children: [_jsx(ItemTitle, { children: title }), description ? (_jsx(ItemDescription, { ...(failed ? { role: "alert" } : {}), children: description })) : null] }), action ? _jsx(ItemActions, { children: action }) : null] }));
14
+ }
@@ -0,0 +1,18 @@
1
+ import { type BrandIconProps } from "./brand-icon.js";
2
+ /**
3
+ * The google-icon mark from the Iconify `logos` set.
4
+ *
5
+ * Painted in the brand's official colors. Those colors are the identity
6
+ * being shown, so they do not follow the semantic theme.
7
+ *
8
+ * Under forced-colors mode the mark flattens to the user's system colors. That
9
+ * loss of brand color is the correct outcome of a contrast choice the user made,
10
+ * so `forced-color-adjust` stays at its `auto` default and nothing here
11
+ * preserves the paint.
12
+ *
13
+ * Hidden from assistive technology by default because a brand mark sits beside
14
+ * the text label that names it. Pass `role="img"` with an `aria-label` when
15
+ * the mark stands alone.
16
+ */
17
+ export declare function GoogleIcon({ size, ...props }: BrandIconProps): import("react").JSX.Element;
18
+ //# sourceMappingURL=google.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"google.d.ts","sourceRoot":"","sources":["../../../src/components/brand-icons/google.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAuC,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAExF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,UAAU,CAAC,EAAE,IAAsB,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,+BA8B9E"}
@@ -0,0 +1,22 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // Generated by scripts/build-brand-icons.mjs from @iconify-json/logos (CC0-1.0).
3
+ // Edit the allow-list in that script and regenerate; hand edits to brand-icons/google.tsx are lost.
4
+ import { BRAND_ICON_SIZE, brandIconLabelling } from "./brand-icon.js";
5
+ /**
6
+ * The google-icon mark from the Iconify `logos` set.
7
+ *
8
+ * Painted in the brand's official colors. Those colors are the identity
9
+ * being shown, so they do not follow the semantic theme.
10
+ *
11
+ * Under forced-colors mode the mark flattens to the user's system colors. That
12
+ * loss of brand color is the correct outcome of a contrast choice the user made,
13
+ * so `forced-color-adjust` stays at its `auto` default and nothing here
14
+ * preserves the paint.
15
+ *
16
+ * Hidden from assistive technology by default because a brand mark sits beside
17
+ * the text label that names it. Pass `role="img"` with an `aria-label` when
18
+ * the mark stands alone.
19
+ */
20
+ export function GoogleIcon({ size = BRAND_ICON_SIZE, ...props }) {
21
+ return (_jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", width: size, height: size, viewBox: "0 0 256 262", "data-slot": "brand-icon", "data-brand": "google", ...props, ...brandIconLabelling(props), children: [_jsx("path", { fill: "#4285f4", d: "M255.88 133.45c0-10.73-.87-18.57-2.76-26.69H130.55v48.45h71.95c-1.45 12.04-9.29 30.17-26.7 42.36l-.24 1.62 38.76 30.02 2.68.27c24.66-22.78 38.88-56.28 38.88-96.03" }), _jsx("path", { fill: "#34a853", d: "M130.55 261.1c35.25 0 64.84-11.6 86.45-31.62l-41.2-31.91c-11.02 7.68-25.81 13.05-45.25 13.05-34.52 0-63.82-22.77-74.27-54.25l-1.53.13-40.3 31.19-.52 1.46c21.46 42.65 65.56 71.95 116.62 71.95" }), _jsx("path", { fill: "#fbbc05", d: "M56.28 156.37a80 80 0 0 1-4.35-25.82c0-9 1.6-17.7 4.2-25.82l-.07-1.73-40.8-31.69-1.34.64C5.08 89.65 0 109.52 0 130.55s5.08 40.9 13.93 58.6z" }), _jsx("path", { fill: "#eb4335", d: "M130.55 50.48c24.51 0 41.05 10.59 50.48 19.44l36.84-35.98C195.25 12.91 165.8 0 130.55 0 79.49 0 35.39 29.3 13.92 71.95l42.22 32.78c10.59-31.48 39.89-54.25 74.41-54.25" })] }));
22
+ }
@@ -11,6 +11,7 @@ export { FigmaIcon } from "./brand-icons/figma.js";
11
11
  export { GithubIcon } from "./brand-icons/github.js";
12
12
  export { GitlabIcon } from "./brand-icons/gitlab.js";
13
13
  export { GmailIcon } from "./brand-icons/gmail.js";
14
+ export { GoogleIcon } from "./brand-icons/google.js";
14
15
  export { GoogleCalendarIcon } from "./brand-icons/google-calendar.js";
15
16
  export { GoogleDriveIcon } from "./brand-icons/google-drive.js";
16
17
  export { IntercomIcon } from "./brand-icons/intercom.js";
@@ -1 +1 @@
1
- {"version":3,"file":"brand-icons.d.ts","sourceRoot":"","sources":["../../src/components/brand-icons.tsx"],"names":[],"mappings":"AAOA,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,KAAK,cAAc,GACpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"brand-icons.d.ts","sourceRoot":"","sources":["../../src/components/brand-icons.tsx"],"names":[],"mappings":"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"}
@@ -17,6 +17,7 @@ export { FigmaIcon } from "./brand-icons/figma.js";
17
17
  export { GithubIcon } from "./brand-icons/github.js";
18
18
  export { GitlabIcon } from "./brand-icons/gitlab.js";
19
19
  export { GmailIcon } from "./brand-icons/gmail.js";
20
+ export { GoogleIcon } from "./brand-icons/google.js";
20
21
  export { GoogleCalendarIcon } from "./brand-icons/google-calendar.js";
21
22
  export { GoogleDriveIcon } from "./brand-icons/google-drive.js";
22
23
  export { IntercomIcon } from "./brand-icons/intercom.js";
@@ -0,0 +1,89 @@
1
+ import type { ReactNode } from "react";
2
+ export declare function ChannelView({ children, className, header, }: {
3
+ children: ReactNode;
4
+ className?: string;
5
+ header: ReactNode;
6
+ }): import("react").JSX.Element;
7
+ export declare function ChannelHeader({ actions, className, glyph, memberCount, members, membersLabel, name, }: {
8
+ actions?: ReactNode;
9
+ className?: string;
10
+ /** What kind of channel this is; a plain channel is `#`. */
11
+ glyph?: ReactNode;
12
+ memberCount: number;
13
+ /** The channel's members as pictures, when the header shows them. */
14
+ members?: ReactNode;
15
+ /** The members control's own name, which says who is counted. */
16
+ membersLabel: string;
17
+ name: string;
18
+ }): import("react").JSX.Element;
19
+ /** The channel's members overlapped, the last one whole, as a stack of pictures. */
20
+ export declare function ChannelMemberStack({ children, className, overflow, }: {
21
+ children: ReactNode;
22
+ className?: string;
23
+ /** How many more members there are than the stack shows, as "+N". */
24
+ overflow?: string;
25
+ }): import("react").JSX.Element;
26
+ /** A person in a channel: their initials on the muted fill, never a colour from the name. */
27
+ export declare function ChannelPerson({ className, initials, name, }: {
28
+ className?: string;
29
+ initials: string;
30
+ name: string;
31
+ }): import("react").JSX.Element;
32
+ /** The day a run of messages belongs to: its name on the line that separates it. */
33
+ export declare function ChannelDay({ className, label }: {
34
+ className?: string;
35
+ label: string;
36
+ }): import("react").JSX.Element;
37
+ export declare function ChannelMessage({ author, children, className, member, time, }: {
38
+ author: string;
39
+ children: ReactNode;
40
+ className?: string;
41
+ /** The author's picture: a person's `ChannelPerson`, a colleague's `AgentOrb`. */
42
+ member: ReactNode;
43
+ time: string;
44
+ }): import("react").JSX.Element;
45
+ /** A colleague addressed by name inside a message, the way a person types it. */
46
+ export declare function ChannelMention({ children }: {
47
+ children: ReactNode;
48
+ }): import("react").JSX.Element;
49
+ /** The reactions left on a message. */
50
+ export declare function ChannelReactions({ children }: {
51
+ children: ReactNode;
52
+ }): import("react").JSX.Element;
53
+ export declare function ChannelReaction({ count, glyph, label, mine, }: {
54
+ count: number;
55
+ glyph: string;
56
+ /** Who reacted, for a reader who cannot see the pill. */
57
+ label: string;
58
+ mine?: boolean;
59
+ }): import("react").JSX.Element;
60
+ /**
61
+ * The replies to a message, gathered under it: the pill that says how many there
62
+ * are and who wrote them, and the replies themselves, indented to the message's
63
+ * own text column.
64
+ */
65
+ export declare function ChannelThread({ children, summary }: {
66
+ children?: ReactNode;
67
+ summary: ReactNode;
68
+ }): import("react").JSX.Element;
69
+ export declare function ChannelThreadSummary({ lastActivity, members, replies, }: {
70
+ lastActivity: string;
71
+ /** The people and colleagues who wrote in the thread, as pictures. */
72
+ members: ReactNode;
73
+ replies: string;
74
+ }): import("react").JSX.Element;
75
+ /** A file left in the conversation. */
76
+ export declare function ChannelFile({ meta, name }: {
77
+ meta: string;
78
+ name: string;
79
+ }): import("react").JSX.Element;
80
+ /**
81
+ * What a voice call leaves in the conversation once it ends: that it happened,
82
+ * how many people were in it, and the way back to what was said.
83
+ */
84
+ export declare function ChannelCall({ action, participants, title, }: {
85
+ action?: ReactNode;
86
+ participants: string;
87
+ title: string;
88
+ }): import("react").JSX.Element;
89
+ //# sourceMappingURL=channel-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel-view.d.ts","sourceRoot":"","sources":["../../src/components/channel-view.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Download, FileText, Hash, Headphones, Users } from "lucide-react";
3
+ import { Avatar, AvatarFallback } from "./avatar.js";
4
+ import { cn } from "../lib/utils.js";
5
+ /**
6
+ * A work-chat channel, as presentation only: the channel's header, the day it
7
+ * opens on, the messages in it, the replies gathered under a message, a file
8
+ * left in the conversation, and the card a voice call leaves behind.
9
+ *
10
+ * It carries no data, no state and no store, so a product mounts it with its own
11
+ * members and messages. Every member's picture arrives as a slot: a person is
12
+ * the package `Avatar`, a digital colleague is its `AgentOrb`, which is the one
13
+ * Agent picture in every product (`DESIGN.md`, "Agent orbs").
14
+ *
15
+ * The geometry is Alveare's channel geometry: a 36 px member column, a 10 px gap
16
+ * to the text, the author and the time on one baseline, replies gathered in a
17
+ * pill under their message, and cards at the resting fill inside the line.
18
+ */
19
+ const MEMBER_COLUMN = "flex w-9 shrink-0 justify-center";
20
+ export function ChannelView({ children, className, header, }) {
21
+ return (_jsxs("div", { className: cn("grid min-h-0 min-w-0 grid-cols-[minmax(0,1fr)] grid-rows-[auto_minmax(0,1fr)] bg-background", className), children: [header, _jsx("div", { className: "flex min-h-0 min-w-0 flex-col justify-end overflow-hidden px-2 pb-4", children: children })] }));
22
+ }
23
+ export function ChannelHeader({ actions, className, glyph, memberCount, members, membersLabel, name, }) {
24
+ return (_jsx("header", { className: cn("min-w-0 shrink-0 select-none px-3 py-2 sm:px-5", className), children: _jsxs("div", { className: "flex h-9 min-w-0 items-center gap-2.5", children: [_jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-1", children: [_jsx("span", { "aria-hidden": "true", className: "flex shrink-0 items-center text-muted-foreground", children: glyph ?? _jsx(Hash, { className: "size-4" }) }), _jsx("h2", { className: "nc-type-body-md m-0 min-w-0 truncate font-medium text-foreground", children: name })] }), _jsxs("div", { className: "flex shrink-0 items-center gap-1.5", children: [members, _jsxs("span", { "aria-label": membersLabel, className: "inline-flex h-8 items-center gap-1.5 rounded-md border border-border px-2.5", role: "img", children: [_jsx(Users, { "aria-hidden": "true", className: "size-4 text-muted-foreground" }), _jsx("span", { className: "nc-type-body-sm font-medium tabular-nums text-foreground", children: memberCount })] }), actions] })] }) }));
25
+ }
26
+ /** The channel's members overlapped, the last one whole, as a stack of pictures. */
27
+ export function ChannelMemberStack({ children, className, overflow, }) {
28
+ return (_jsxs("div", { className: cn("hidden shrink-0 items-center *:not-last:-me-2 *:ring-2 *:ring-background sm:flex", className), children: [children, overflow ? (_jsx("span", { className: "nc-type-caption flex size-8 items-center justify-center rounded-full bg-muted font-medium text-muted-foreground", children: overflow })) : null] }));
29
+ }
30
+ /** A person in a channel: their initials on the muted fill, never a colour from the name. */
31
+ export function ChannelPerson({ className, initials, name, }) {
32
+ return (_jsx(Avatar, { "aria-label": name, className: cn("size-8", className), role: "img", size: "lg", children: _jsx(AvatarFallback, { children: initials }) }));
33
+ }
34
+ /** The day a run of messages belongs to: its name on the line that separates it. */
35
+ export function ChannelDay({ className, label }) {
36
+ return (_jsx("div", { className: cn("relative flex justify-center py-2 before:absolute before:inset-x-0 before:top-1/2 before:h-px before:-translate-y-1/2 before:bg-border before:content-['']", className), children: _jsx("p", { className: "nc-type-caption relative m-0 shrink-0 rounded-full border border-border bg-background px-2.5 py-1 font-medium text-muted-foreground", children: label }) }));
37
+ }
38
+ export function ChannelMessage({ author, children, className, member, time, }) {
39
+ return (_jsxs("article", { className: cn("mx-1 flex items-start gap-2.5 rounded-md px-2 py-1", className), children: [_jsx("div", { className: MEMBER_COLUMN, children: member }), _jsxs("div", { className: "flex min-w-0 flex-1 flex-col", children: [_jsxs("div", { className: "flex min-w-0 flex-wrap items-baseline gap-x-1.5", children: [_jsx("span", { className: "nc-type-body-md min-w-0 truncate font-medium text-foreground", children: author }), _jsx("span", { "aria-hidden": "true", className: "nc-type-caption text-muted-foreground", children: "\u00B7" }), _jsx("span", { className: "nc-type-caption shrink-0 whitespace-nowrap tabular-nums text-muted-foreground", children: time })] }), _jsx("div", { className: "nc-type-body-md mt-0.5 min-w-0 text-foreground", children: children })] })] }));
40
+ }
41
+ /** A colleague addressed by name inside a message, the way a person types it. */
42
+ export function ChannelMention({ children }) {
43
+ return _jsx("span", { className: "rounded-sm bg-primary/15 px-1 font-medium text-primary", children: children });
44
+ }
45
+ /** The reactions left on a message. */
46
+ export function ChannelReactions({ children }) {
47
+ return _jsx("div", { className: "mt-1.5 flex flex-wrap items-center gap-1.5", children: children });
48
+ }
49
+ export function ChannelReaction({ count, glyph, label, mine, }) {
50
+ return (_jsxs("span", { "aria-label": label, className: cn("nc-type-caption inline-flex h-7 min-w-12 items-center justify-center gap-1.5 rounded-full border font-medium", mine
51
+ ? "border-primary bg-primary/10 text-primary"
52
+ : "border-border bg-muted text-foreground"), role: "img", children: [_jsx("span", { "aria-hidden": "true", children: glyph }), _jsx("span", { className: "tabular-nums text-muted-foreground", children: count })] }));
53
+ }
54
+ /**
55
+ * The replies to a message, gathered under it: the pill that says how many there
56
+ * are and who wrote them, and the replies themselves, indented to the message's
57
+ * own text column.
58
+ */
59
+ export function ChannelThread({ children, summary }) {
60
+ return (_jsxs("div", { className: "grid min-w-0 grid-cols-[minmax(0,1fr)] pl-6 sm:pl-[2.625rem]", children: [_jsx("div", { className: "pl-2", children: summary }), children] }));
61
+ }
62
+ export function ChannelThreadSummary({ lastActivity, members, replies, }) {
63
+ return (_jsx("div", { className: "py-0.5", children: _jsxs("span", { className: "nc-type-caption inline-flex h-[1.875rem] w-fit max-w-full items-center gap-1.5 rounded-full pr-3 font-medium text-muted-foreground", children: [_jsx("span", { className: "flex shrink-0 items-center *:not-last:-me-1 *:ring-2 *:ring-background", children: members }), _jsxs("span", { className: "min-w-0 truncate", children: [_jsx("span", { className: "font-medium", children: replies }), _jsx("span", { "aria-hidden": "true", className: "mx-1 font-normal", children: "\u00B7" }), _jsx("span", { className: "font-normal", children: lastActivity })] })] }) }));
64
+ }
65
+ /** A file left in the conversation. */
66
+ export function ChannelFile({ meta, name }) {
67
+ return (_jsxs("div", { className: "mt-2 flex w-fit max-w-full items-center gap-3 rounded-md border border-border bg-muted px-3 py-2 text-left sm:max-w-sm", children: [_jsx("span", { className: "flex size-9 shrink-0 items-center justify-center rounded-md bg-background text-muted-foreground", children: _jsx(FileText, { "aria-hidden": "true", className: "size-4" }) }), _jsxs("span", { className: "min-w-0 flex-1", children: [_jsx("span", { className: "nc-type-body-sm block truncate font-medium text-foreground", children: name }), _jsx("span", { className: "nc-type-caption block text-muted-foreground", children: meta })] }), _jsx(Download, { "aria-hidden": "true", className: "size-4 shrink-0 text-muted-foreground" })] }));
68
+ }
69
+ /**
70
+ * What a voice call leaves in the conversation once it ends: that it happened,
71
+ * how many people were in it, and the way back to what was said.
72
+ */
73
+ export function ChannelCall({ action, participants, title, }) {
74
+ return (_jsxs("div", { className: "mt-2 flex w-96 max-w-full items-center gap-3 rounded-md border border-border bg-muted px-3 py-2.5", children: [_jsx("span", { className: "flex size-9 shrink-0 items-center justify-center rounded-md bg-background text-muted-foreground", children: _jsx(Headphones, { "aria-hidden": "true", className: "size-4" }) }), _jsxs("span", { className: "min-w-0 flex-1", children: [_jsx("span", { className: "nc-type-body-sm block font-medium text-foreground", children: title }), _jsx("span", { className: "nc-type-caption block truncate text-muted-foreground", children: participants })] }), action ? _jsx("span", { className: "flex shrink-0 items-center gap-1", children: action }) : null] }));
75
+ }
@@ -0,0 +1,22 @@
1
+ /** How long the card turns in the light when it appears, and when it is issued. */
2
+ export declare const SWEEP_MS = 2200;
3
+ /** How far the card turns during that sweep, in radians, each way: within its 9° turn. */
4
+ export declare const SWEEP_TURN = 0.15;
5
+ type Box = {
6
+ left: number;
7
+ top: number;
8
+ width: number;
9
+ height: number;
10
+ };
11
+ /**
12
+ * Where a pointer is on the card, in the card's own coordinates (-1 to 1
13
+ * across each edge), and how awake the foil is for it: 1 on the card, easing
14
+ * to 0 one card width beyond its edges, and 0 anywhere farther away.
15
+ */
16
+ export declare function approach(box: Box, clientX: number, clientY: number): {
17
+ x: number;
18
+ y: number;
19
+ hover: number;
20
+ };
21
+ export {};
22
+ //# sourceMappingURL=approach.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approach.d.ts","sourceRoot":"","sources":["../../../src/components/company-card/approach.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,eAAO,MAAM,QAAQ,OAAO,CAAC;AAC7B,0FAA0F;AAC1F,eAAO,MAAM,UAAU,OAAO,CAAC;AAE/B,KAAK,GAAG,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAExE;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;;;;EAOlE"}
@@ -0,0 +1,17 @@
1
+ /** How long the card turns in the light when it appears, and when it is issued. */
2
+ export const SWEEP_MS = 2200;
3
+ /** How far the card turns during that sweep, in radians, each way: within its 9° turn. */
4
+ export const SWEEP_TURN = 0.15;
5
+ /**
6
+ * Where a pointer is on the card, in the card's own coordinates (-1 to 1
7
+ * across each edge), and how awake the foil is for it: 1 on the card, easing
8
+ * to 0 one card width beyond its edges, and 0 anywhere farther away.
9
+ */
10
+ export function approach(box, clientX, clientY) {
11
+ const x = (clientX - box.left - box.width / 2) / Math.max(1, box.width / 2);
12
+ const y = (clientY - box.top - box.height / 2) / Math.max(1, box.height / 2);
13
+ const distanceX = (Math.max(0, Math.abs(x) - 1) * box.width) / 2;
14
+ const distanceY = (Math.max(0, Math.abs(y) - 1) * box.height) / 2;
15
+ const near = Math.max(0, 1 - Math.hypot(distanceX, distanceY) / Math.max(1, box.width));
16
+ return { x, y, hover: near * near * (3 - 2 * near) };
17
+ }
@@ -0,0 +1,8 @@
1
+ /** The card's own units: a card is 85.6 × 54 mm, so 856 × 540. */
2
+ export declare const CARD_WIDTH = 856;
3
+ export declare const CARD_HEIGHT = 540;
4
+ export declare const ENGRAVING: {
5
+ rosette: string;
6
+ waves: string;
7
+ };
8
+ //# sourceMappingURL=engraving.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engraving.d.ts","sourceRoot":"","sources":["../../../src/components/company-card/engraving.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,eAAO,MAAM,UAAU,MAAM,CAAC;AAC9B,eAAO,MAAM,WAAW,MAAM,CAAC;AA0D/B,eAAO,MAAM,SAAS;;;CAAiD,CAAC"}
@@ -0,0 +1,56 @@
1
+ /** The card's own units: a card is 85.6 × 54 mm, so 856 × 540. */
2
+ export const CARD_WIDTH = 856;
3
+ export const CARD_HEIGHT = 540;
4
+ const ROSETTE = {
5
+ x: 652,
6
+ y: 262,
7
+ radius: 196,
8
+ curves: 24,
9
+ samples: 168,
10
+ base: 0.66,
11
+ lobes: 7,
12
+ lobeDepth: 0.18,
13
+ ripples: 21,
14
+ rippleDepth: 0.07,
15
+ };
16
+ const WAVES = { lines: 21, top: 36, gap: 23, amplitude: 8, period: 190, samples: 48 };
17
+ function polyline(points, closed) {
18
+ const [first, ...rest] = points;
19
+ if (!first)
20
+ return "";
21
+ const line = rest.map(([x, y]) => `L${Math.round(x)} ${Math.round(y)}`).join("");
22
+ return `M${Math.round(first[0])} ${Math.round(first[1])}${line}${closed ? "Z" : ""}`;
23
+ }
24
+ function rosettePath() {
25
+ const { x, y, radius, curves, samples, base, lobes, lobeDepth, ripples, rippleDepth } = ROSETTE;
26
+ const paths = [];
27
+ for (let curve = 0; curve < curves; curve++) {
28
+ const phase = (curve / curves) * Math.PI * 2;
29
+ const points = [];
30
+ for (let step = 0; step < samples; step++) {
31
+ const angle = (step / samples) * Math.PI * 2;
32
+ const swell = base +
33
+ lobeDepth * Math.sin(lobes * angle + phase) +
34
+ rippleDepth * Math.sin(ripples * angle - 3 * phase);
35
+ points.push([x + Math.cos(angle) * radius * swell, y + Math.sin(angle) * radius * swell]);
36
+ }
37
+ paths.push(polyline(points, true));
38
+ }
39
+ return paths.join("");
40
+ }
41
+ function wavesPath() {
42
+ const { lines, top, gap, amplitude, period, samples } = WAVES;
43
+ const paths = [];
44
+ for (let line = 0; line < lines; line++) {
45
+ const baseline = top + line * gap;
46
+ const phase = line * 0.55;
47
+ const points = [];
48
+ for (let step = 0; step <= samples; step++) {
49
+ const x = (step / samples) * CARD_WIDTH;
50
+ points.push([x, baseline + Math.sin((x / period) * Math.PI * 2 + phase) * amplitude]);
51
+ }
52
+ paths.push(polyline(points, false));
53
+ }
54
+ return paths.join("");
55
+ }
56
+ export const ENGRAVING = { rosette: rosettePath(), waves: wavesPath() };
@@ -0,0 +1,4 @@
1
+ import type { CompanyCardEdition } from "../company-card.js";
2
+ import type { FoilColors } from "./scene.js";
3
+ export declare function foilColors(element: HTMLElement, edition: CompanyCardEdition): FoilColors;
4
+ //# sourceMappingURL=foil-colors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"foil-colors.d.ts","sourceRoot":"","sources":["../../../src/components/company-card/foil-colors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAyB1C,wBAAgB,UAAU,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,kBAAkB,GAAG,UAAU,CAMxF"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * The GPU foil's six bands in spectral order, from the same identity tokens: a
3
+ * company's card takes the cool half and a Partner's the warm half, each hue
4
+ * two bands wide.
5
+ */
6
+ const GPU_FOIL = {
7
+ company: ["cobalto", "cobalto", "azzurro", "azzurro", "verde", "verde"],
8
+ partner: ["giallo", "giallo", "arancio", "arancio", "rosso", "rosso"],
9
+ };
10
+ /** A token's resolved colour, as sRGB channels from 0 to 1, whatever colour space it is written in. */
11
+ function tokenColor(element, token) {
12
+ const probe = document.createElement("canvas").getContext("2d", { willReadFrequently: true });
13
+ const value = getComputedStyle(element).getPropertyValue(`--nc-${token}`).trim();
14
+ // A token the page has not defined leaves the band at nothing: the foil never
15
+ // stands a colour in that the design system does not have.
16
+ if (!probe || !value)
17
+ return [0, 0, 0];
18
+ probe.fillStyle = value;
19
+ probe.fillRect(0, 0, 1, 1);
20
+ const [r = 0, g = 0, b = 0] = probe.getImageData(0, 0, 1, 1).data;
21
+ return [r / 255, g / 255, b / 255];
22
+ }
23
+ export function foilColors(element, edition) {
24
+ return {
25
+ graphite: tokenColor(element, "dark-material-floating"),
26
+ ink: tokenColor(element, "identity-white"),
27
+ hues: GPU_FOIL[edition].map((hue) => tokenColor(element, `identity-${hue}`)),
28
+ };
29
+ }
@@ -0,0 +1,13 @@
1
+ import { type FoilColors } from "./scene.js";
2
+ type RendererOptions = {
3
+ colors: FoilColors;
4
+ /** The card's current turn in radians, for the page to turn the card itself. */
5
+ onTilt: (tiltX: number, tiltY: number) => void;
6
+ };
7
+ export declare function createRenderer(canvas: HTMLCanvasElement, options: RendererOptions): {
8
+ ready: Promise<void>;
9
+ dispose: () => void;
10
+ sweep: () => void;
11
+ };
12
+ export {};
13
+ //# sourceMappingURL=renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../../src/components/company-card/renderer.ts"],"names":[],"mappings":"AAQA,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AAEvD,KAAK,eAAe,GAAG;IACrB,MAAM,EAAE,UAAU,CAAC;IACnB,gFAAgF;IAChF,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAChD,CAAC;AAEF,wBAAgB,cAAc,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,eAAe;;;;EA+HjF"}