@nadicodeai/ui 12.1.169 → 12.1.171

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,20 @@
1
+ /**
2
+ * The art-directed cut-out an entry page stands beside its centred column.
3
+ *
4
+ * @family Compositions
5
+ * @when A whole-page moment with a picture, at the window's left edge: a sign-in handed to Nadia, an invitation, an invite to a company's Alveare.
6
+ * @instead A failure page centres its picture above the words ("Failure surfaces"). A first use's picture is `EmptyState`'s. Nadia's desktop entry screens are `EntryScene` and Alveare's are `HiveScene`.
7
+ * @behaviour One whole cut-out fixed to the window's floor at the left edge, so a page taller than the window never cuts its feet. It keeps its own shape and is never wider than half its pixels, the width it stays sharp at on a DPR 2 screen, nor than the room left of the centred `column`, nor taller than 85 % of the window. It shows only from `lg`: below, the task keeps the screen and the browser does not fetch it. A page draws it only in the state the picture is about, so a page that cannot go on never shows one welcoming the person.
8
+ * @words None: the picture carries no caption.
9
+ * @access Decorative and inert: hidden from assistive technology, never focused or clicked.
10
+ */
11
+ declare function EntryPicture({ src, width, height, column, }: {
12
+ src: string;
13
+ /** The file's width and height in pixels. */
14
+ width: number;
15
+ height: number;
16
+ /** The width of the column the page centres beside it. */
17
+ column?: string;
18
+ }): import("react").JSX.Element;
19
+ export { EntryPicture };
20
+ //# sourceMappingURL=entry-picture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entry-picture.d.ts","sourceRoot":"","sources":["../../src/components/entry-picture.tsx"],"names":[],"mappings":"AAKA;;;;;;;;;GASG;AACH,iBAAS,YAAY,CAAC,EACpB,GAAG,EACH,KAAK,EACL,MAAM,EACN,MAAgB,GACjB,EAAE;IACD,GAAG,EAAE,MAAM,CAAC;IACZ,6CAA6C;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,+BA0BA;AAED,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /** How far the picture stands from the window's left edge. */
3
+ const INSET = "clamp(0.5rem, 4vw, 6rem)";
4
+ /**
5
+ * The art-directed cut-out an entry page stands beside its centred column.
6
+ *
7
+ * @family Compositions
8
+ * @when A whole-page moment with a picture, at the window's left edge: a sign-in handed to Nadia, an invitation, an invite to a company's Alveare.
9
+ * @instead A failure page centres its picture above the words ("Failure surfaces"). A first use's picture is `EmptyState`'s. Nadia's desktop entry screens are `EntryScene` and Alveare's are `HiveScene`.
10
+ * @behaviour One whole cut-out fixed to the window's floor at the left edge, so a page taller than the window never cuts its feet. It keeps its own shape and is never wider than half its pixels, the width it stays sharp at on a DPR 2 screen, nor than the room left of the centred `column`, nor taller than 85 % of the window. It shows only from `lg`: below, the task keeps the screen and the browser does not fetch it. A page draws it only in the state the picture is about, so a page that cannot go on never shows one welcoming the person.
11
+ * @words None: the picture carries no caption.
12
+ * @access Decorative and inert: hidden from assistive technology, never focused or clicked.
13
+ */
14
+ function EntryPicture({ src, width, height, column = "28rem", }) {
15
+ const box = {
16
+ left: INSET,
17
+ aspectRatio: `${width} / ${height}`,
18
+ width: `min(${width / 2}px, calc(85svh * ${width / height}), calc(50vw - ${column} / 2 - 1.5rem - ${INSET}))`,
19
+ };
20
+ return (_jsx("div", { "aria-hidden": "true", className: "pointer-events-none fixed bottom-0 z-0 hidden lg:block", "data-slot": "entry-picture", inert: true, style: box, children: _jsx("img", { alt: "", className: "size-full object-contain object-bottom", decoding: "async", fetchPriority: "high", height: height, loading: "lazy", src: src, width: width }) }));
21
+ }
22
+ export { EntryPicture };
@@ -0,0 +1,46 @@
1
+ import { type PlatformName } from "./platform-mark.js";
2
+ type Installer = {
3
+ platform: PlatformName;
4
+ /** The computer's name: *macOS*. */
5
+ name: string;
6
+ href: string;
7
+ /** The download's size, written: *119 MB*. */
8
+ size?: string;
9
+ /** The computer the page believes the reader is on. */
10
+ suggested?: boolean;
11
+ };
12
+ /**
13
+ * A link that opens an app: the app's mark, the invite's words, the action that opens it, the
14
+ * installers for a computer without the app, and the code that opens the same link on a phone.
15
+ *
16
+ * @family Compositions
17
+ * @when The page an invite link opens: Alveare's invite to a company. It stands centred on an entry page, with `EntryPicture` at the window's left edge.
18
+ * @instead An invitation to a role the person accepts in the Portal is the Portal's invitation card. Downloads with formats and steps is the Portal's Downloads page. A code the phone takes to sign in is `QrCode` in Nadia's pairing drawer.
19
+ * @behaviour The mark, the title and the one line are centred; the open action fills the card's width under them, and the phone's code, as large as a phone scans from across a desk, comes next as the other way to open the same link. The installers are one row per computer, each with its mark, its name, its size and its download, so every row lines up whatever its words; the computer the reader is on carries the `suggested` badge. The installers show from `md` and the phone's code from `lg`, because a phone neither installs a computer's app nor scans its own screen. A link that holds no invite passes the title and the line alone.
20
+ * @words The title says what the person joins: *Join your company on Alveare*. The line says what happens and what to do if it does not. Each download is *Download*, named for its computer to assistive technology; the phone's line says what the code opens and how: *Open this invite on your phone*, *Point your phone's camera at the code*.
21
+ * @access The title is the page's level-1 heading and the installers a list under its own heading. The mark is decorative; the code is an image named by what it opens.
22
+ */
23
+ declare function InviteCard({ mark, title, description, open, install, phone, }: {
24
+ /** The app's mark, as an image address. */
25
+ mark: string;
26
+ title: string;
27
+ description: string;
28
+ open?: {
29
+ label: string;
30
+ href: string;
31
+ };
32
+ install?: {
33
+ label: string;
34
+ download: string;
35
+ suggested: string;
36
+ installers: readonly Installer[];
37
+ };
38
+ /** The same link, for a phone's camera. */
39
+ phone?: {
40
+ link: string;
41
+ label: string;
42
+ how: string;
43
+ };
44
+ }): import("react").JSX.Element;
45
+ export { InviteCard };
46
+ //# sourceMappingURL=invite-card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invite-card.d.ts","sourceRoot":"","sources":["../../src/components/invite-card.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAM7E,KAAK,SAAS,GAAG;IACf,QAAQ,EAAE,YAAY,CAAC;IACvB,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,8CAA8C;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF;;;;;;;;;;GAUG;AACH,iBAAS,UAAU,CAAC,EAClB,IAAI,EACJ,KAAK,EACL,WAAW,EACX,IAAI,EACJ,OAAO,EACP,KAAK,GACN,EAAE;IACD,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACvC,OAAO,CAAC,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,SAAS,SAAS,EAAE,CAAC;KAClC,CAAC;IACF,2CAA2C;IAC3C,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CACtD,+BAgEA;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Download } from "lucide-react";
3
+ import { Badge } from "./badge.js";
4
+ import { ButtonLink } from "./button.js";
5
+ import { Card, CardContent } from "./card.js";
6
+ import { Item, ItemActions, ItemContent, ItemDescription, ItemGroup, ItemMedia, ItemTitle, } from "./item.js";
7
+ import { PlatformMark } from "./platform-mark.js";
8
+ import { QrCode } from "./qr-code.js";
9
+ /** The phone's code, large enough to scan from across a desk. */
10
+ const QR_PX = 160;
11
+ /**
12
+ * A link that opens an app: the app's mark, the invite's words, the action that opens it, the
13
+ * installers for a computer without the app, and the code that opens the same link on a phone.
14
+ *
15
+ * @family Compositions
16
+ * @when The page an invite link opens: Alveare's invite to a company. It stands centred on an entry page, with `EntryPicture` at the window's left edge.
17
+ * @instead An invitation to a role the person accepts in the Portal is the Portal's invitation card. Downloads with formats and steps is the Portal's Downloads page. A code the phone takes to sign in is `QrCode` in Nadia's pairing drawer.
18
+ * @behaviour The mark, the title and the one line are centred; the open action fills the card's width under them, and the phone's code, as large as a phone scans from across a desk, comes next as the other way to open the same link. The installers are one row per computer, each with its mark, its name, its size and its download, so every row lines up whatever its words; the computer the reader is on carries the `suggested` badge. The installers show from `md` and the phone's code from `lg`, because a phone neither installs a computer's app nor scans its own screen. A link that holds no invite passes the title and the line alone.
19
+ * @words The title says what the person joins: *Join your company on Alveare*. The line says what happens and what to do if it does not. Each download is *Download*, named for its computer to assistive technology; the phone's line says what the code opens and how: *Open this invite on your phone*, *Point your phone's camera at the code*.
20
+ * @access The title is the page's level-1 heading and the installers a list under its own heading. The mark is decorative; the code is an image named by what it opens.
21
+ */
22
+ function InviteCard({ mark, title, description, open, install, phone, }) {
23
+ return (_jsx(Card, { "data-slot": "invite-card", children: _jsxs(CardContent, { className: "flex flex-col gap-6", children: [_jsxs("div", { className: "flex flex-col items-center gap-3 text-center", children: [_jsx("img", { alt: "", "aria-hidden": "true", className: "h-10 w-auto", src: mark }), _jsx("h1", { className: "nc-type-heading-sm m-0", children: title }), _jsx("p", { className: "nc-type-body-md m-0 text-muted-foreground", children: description })] }), open ? (_jsx(ButtonLink, { className: "w-full", href: open.href, size: "lg", children: open.label })) : null, phone ? (_jsxs("div", { className: "hidden items-center gap-5 rounded-md border border-border p-4 lg:flex", children: [_jsx(QrCode, { className: "shrink-0", label: phone.label, size: QR_PX, value: phone.link }), _jsxs("div", { className: "flex min-w-0 flex-col gap-1", children: [_jsx("span", { className: "nc-type-body-md font-medium", children: phone.label }), _jsx("span", { className: "nc-type-body-sm text-muted-foreground", children: phone.how })] })] })) : null, install && install.installers.length > 0 ? (_jsxs("section", { "aria-labelledby": "invite-card-install", className: "hidden flex-col gap-2 md:flex", children: [_jsx("h2", { className: "nc-type-body-sm m-0 text-muted-foreground", id: "invite-card-install", children: install.label }), _jsx(ItemGroup, { className: "rounded-md border border-border", divided: true, render: _jsx("ul", {}), children: install.installers.map((installer) => (_jsxs(Item, { render: _jsx("li", {}), children: [_jsx(ItemMedia, { variant: "icon", children: _jsx(PlatformMark, { platform: installer.platform, size: 20 }) }), _jsxs(ItemContent, { children: [_jsxs(ItemTitle, { children: [installer.name, installer.suggested ? (_jsx(Badge, { size: "sm", variant: "outline", children: install.suggested })) : null] }), installer.size ? _jsx(ItemDescription, { children: installer.size }) : null] }), _jsx(ItemActions, { children: _jsxs(ButtonLink, { "aria-label": `${install.download} ${installer.name}`, href: installer.href, size: "sm", variant: "secondary", children: [_jsx(Download, { "aria-hidden": "true" }), install.download] }) })] }, installer.platform))) })] })) : null] }) }));
24
+ }
25
+ export { InviteCard };
@@ -6,6 +6,8 @@ declare function CollectionPageSpecimen(): import("react").JSX.Element;
6
6
  declare function CollectionToolbarSpecimen(): import("react").JSX.Element;
7
7
  declare function ConfirmDialogSpecimen(): import("react").JSX.Element;
8
8
  declare function EntrySceneSpecimen(): import("react").JSX.Element;
9
+ declare function EntryPictureSpecimen(): import("react").JSX.Element;
10
+ declare function InviteCardSpecimen(): import("react").JSX.Element;
9
11
  declare function FormDialogSpecimen(): import("react").JSX.Element;
10
12
  declare function FormDrawerSpecimen(): import("react").JSX.Element;
11
13
  declare function LibraryShelfSpecimen(): import("react").JSX.Element;
@@ -21,7 +23,9 @@ export declare const COMPOSITIONS: {
21
23
  CollectionPage: typeof CollectionPageSpecimen;
22
24
  CollectionToolbar: typeof CollectionToolbarSpecimen;
23
25
  ConfirmDialog: typeof ConfirmDialogSpecimen;
26
+ EntryPicture: typeof EntryPictureSpecimen;
24
27
  EntryScene: typeof EntrySceneSpecimen;
28
+ InviteCard: typeof InviteCardSpecimen;
25
29
  FormDialog: typeof FormDialogSpecimen;
26
30
  FormDrawer: typeof FormDrawerSpecimen;
27
31
  LibraryShelf: typeof LibraryShelfSpecimen;
@@ -1 +1 @@
1
- {"version":3,"file":"compositions.d.ts","sourceRoot":"","sources":["../../../src/showcase/specimens/compositions.tsx"],"names":[],"mappings":"AAoIA,iBAAS,oBAAoB,gCA+B5B;AAMD,iBAAS,wBAAwB,gCAahC;AAED,iBAAS,qBAAqB,gCA0B7B;AAED,iBAAS,yBAAyB,gCAGjC;AAED,iBAAS,sBAAsB,gCAyD9B;AAED,iBAAS,yBAAyB,gCAUjC;AAED,iBAAS,qBAAqB,gCAwC7B;AAED,iBAAS,kBAAkB,gCAiB1B;AAED,iBAAS,kBAAkB,gCAuE1B;AAED,iBAAS,kBAAkB,gCAwB1B;AAED,iBAAS,oBAAoB,gCAkD5B;AAED,iBAAS,oBAAoB,gCAqC5B;AAED,iBAAS,mBAAmB,gCA2B3B;AAED,iBAAS,mBAAmB,gCAoB3B;AAwBD,iBAAS,uBAAuB,gCAkD/B;AA+BD,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;CA2FE,CAAC"}
1
+ {"version":3,"file":"compositions.d.ts","sourceRoot":"","sources":["../../../src/showcase/specimens/compositions.tsx"],"names":[],"mappings":"AAsIA,iBAAS,oBAAoB,gCA+B5B;AAMD,iBAAS,wBAAwB,gCAahC;AAED,iBAAS,qBAAqB,gCA0B7B;AAED,iBAAS,yBAAyB,gCAGjC;AAED,iBAAS,sBAAsB,gCAyD9B;AAED,iBAAS,yBAAyB,gCAUjC;AAED,iBAAS,qBAAqB,gCAwC7B;AAED,iBAAS,kBAAkB,gCAiB1B;AAED,iBAAS,oBAAoB,gCAS5B;AAED,iBAAS,kBAAkB,gCA0B1B;AAED,iBAAS,kBAAkB,gCAuE1B;AAED,iBAAS,kBAAkB,gCAwB1B;AAED,iBAAS,oBAAoB,gCAkD5B;AAED,iBAAS,oBAAoB,gCAqC5B;AAED,iBAAS,mBAAmB,gCA2B3B;AAED,iBAAS,mBAAmB,gCAoB3B;AAwBD,iBAAS,uBAAuB,gCAkD/B;AA+BD,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;CA6FE,CAAC"}
@@ -14,10 +14,12 @@ import { CollectionPage } from "../../components/collection-page.js";
14
14
  import { CollectionSearch } from "../../components/collection-search.js";
15
15
  import { CollectionToolbar } from "../../components/collection-toolbar.js";
16
16
  import { ConfirmDialog } from "../../components/confirm-dialog.js";
17
+ import { EntryPicture } from "../../components/entry-picture.js";
17
18
  import { EntryAction, EntryActions, EntryMessage, EntryScene } from "../../components/entry-scene.js";
18
19
  import { FormDialog, FormDialogForm } from "../../components/form-dialog.js";
19
20
  import { FormDrawer, FormDrawerBody, FormDrawerFooter } from "../../components/form-drawer.js";
20
21
  import { Input } from "../../components/input.js";
22
+ import { InviteCard } from "../../components/invite-card.js";
21
23
  import { LibraryShelf } from "../../components/library-shelf.js";
22
24
  import { NadiaPresence } from "../../components/nadia-presence.js";
23
25
  import { ObjectPage } from "../../components/object-page.js";
@@ -212,6 +214,28 @@ function EntrySceneSpecimen() {
212
214
  const art = useEmptyArt();
213
215
  return (_jsx("div", { className: "max-w-3xl overflow-hidden rounded-md", children: _jsxs(EntryScene, { picture: _jsx("img", { alt: "", className: "size-full object-cover", src: art.agents }), presence: _jsx(NadiaPresence, { label: "Nadia is ready", reveal: 1, state: "ready" }), title: "Nadia is ready", wordmark: _jsx(BrandWordmark, {}), children: [_jsx(EntryMessage, { children: "Sign in to bring your Agents to this computer." }), _jsx(EntryActions, { children: _jsx(EntryAction, { children: "Sign in" }) })] }) }));
214
216
  }
217
+ function EntryPictureSpecimen() {
218
+ const art = useEmptyArt();
219
+ // A transform makes the box the picture's containing block, so it stands at this box's floor
220
+ // rather than the showcase window's.
221
+ return (_jsx("div", { className: "relative h-80 w-full overflow-hidden rounded-md border border-border [transform:translateZ(0)]", children: _jsx(EntryPicture, { column: "0rem", height: 1024, src: art.agents, width: 1024 }) }));
222
+ }
223
+ function InviteCardSpecimen() {
224
+ return (_jsx("div", { className: "max-w-130", children: _jsx(InviteCard, { description: "Alveare opens by itself with your invite. If it doesn't open, install it, then open the invite link again.", install: {
225
+ label: "Install Alveare",
226
+ download: "Download",
227
+ suggested: "Suggested",
228
+ installers: [
229
+ { platform: "apple", name: "macOS", href: "#", size: "119 MB", suggested: true },
230
+ { platform: "windows", name: "Windows", href: "#", size: "44 MB" },
231
+ { platform: "linux", name: "Linux", href: "#", size: "133 MB" },
232
+ ],
233
+ }, mark: "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'%3E%3Ccircle cx='20' cy='20' r='18' fill='%231e3cff'/%3E%3C/svg%3E", open: { label: "Open Alveare", href: "#" }, phone: {
234
+ link: "https://nadicode.ai/en/join",
235
+ label: "Open this invite on your phone",
236
+ how: "Point your phone's camera at the code.",
237
+ }, title: "Join your company on Alveare" }) }));
238
+ }
215
239
  function FormDialogSpecimen() {
216
240
  const [open, setOpen] = useState(null);
217
241
  const [discardOpen, setDiscardOpen] = useState(false);
@@ -358,7 +382,9 @@ export const COMPOSITIONS = {
358
382
  CollectionPage: CollectionPageSpecimen,
359
383
  CollectionToolbar: CollectionToolbarSpecimen,
360
384
  ConfirmDialog: ConfirmDialogSpecimen,
385
+ EntryPicture: EntryPictureSpecimen,
361
386
  EntryScene: EntrySceneSpecimen,
387
+ InviteCard: InviteCardSpecimen,
362
388
  FormDialog: FormDialogSpecimen,
363
389
  FormDrawer: FormDrawerSpecimen,
364
390
  LibraryShelf: LibraryShelfSpecimen,
@@ -155,7 +155,9 @@ export declare const SPECIMENS: {
155
155
  CollectionPage: () => import("react").JSX.Element;
156
156
  CollectionToolbar: () => import("react").JSX.Element;
157
157
  ConfirmDialog: () => import("react").JSX.Element;
158
+ EntryPicture: () => import("react").JSX.Element;
158
159
  EntryScene: () => import("react").JSX.Element;
160
+ InviteCard: () => import("react").JSX.Element;
159
161
  FormDialog: () => import("react").JSX.Element;
160
162
  FormDrawer: () => import("react").JSX.Element;
161
163
  LibraryShelf: () => import("react").JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/showcase/specimens/index.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAYiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/showcase/specimens/index.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAYiB,CAAC"}
@@ -1,4 +1,4 @@
1
- export type UsageName = "ActivityFeed" | "AgentProfileCard" | "CatalogDrawer" | "CollectionFilters" | "CollectionPage" | "CollectionToolbar" | "ConfirmDialog" | "EntryScene" | "FormDialog" | "FormDrawer" | "LibraryShelf" | "ObjectPage" | "ObjectSection" | "OverviewPage" | "PageHeader" | "RecordList" | "RecordSheet" | "RowEditForm" | "SettingsPage" | "SettingsSection" | "Button" | "ButtonGroup" | "ButtonLink" | "CopyButton" | "LoadMoreButton" | "PageActions" | "Calendar" | "ClearableInput" | "CollectionSearch" | "Field" | "Form" | "Input" | "InputGroup" | "InputOTP" | "Label" | "NativeSelect" | "SettingsField" | "SettingsRows" | "Slider" | "Textarea" | "Checkbox" | "ChoiceboxGroup" | "CollectionSort" | "Combobox" | "ModelSelect" | "MultiSelect" | "RadioGroup" | "SegmentedChoice" | "SegmentedControl" | "Select" | "Switch" | "ThemeModeSegments" | "ThemeModeSwitcher" | "Toggle" | "ToggleGroup" | "ActionStatus" | "AgentOrb" | "AppMark" | "ArchIcon" | "Avatar" | "Badge" | "BrandWordmark" | "CheckCounts" | "FileTypeIcon" | "IdentityMark" | "ModelIdentity" | "ModelMark" | "ObjectFactValue" | "PlatformMark" | "ProgressChecklist" | "RecordIdentity" | "StatusBadge" | "Tag" | "AgentListRow" | "Breadcrumb" | "CommandDialog" | "Footer" | "PortalSidebarFrame" | "ScopeSwitcher" | "Sidebar" | "SidebarBrand" | "SidebarFind" | "SidebarFrame" | "SidebarMenuChevron" | "SidebarSections" | "Tabs" | "TabsNav" | "textLinkVariants" | "AgentCard" | "Card" | "CardRow" | "CodeBlock" | "DataTable" | "DiffCount" | "DisclosureRow" | "FileDiff" | "Gauge" | "Item" | "Kbd" | "MiddleTruncate" | "ObjectFacts" | "PairingCode" | "Progress" | "QrCode" | "RecordTime" | "RunTimeline" | "SettingsFactsSection" | "Snippet" | "Table" | "TableCard" | "TableValue" | "TextWithCopyButton" | "UsageMeter" | "Alert" | "EmptyState" | "EntryProgress" | "EntryStageList" | "HoverCard" | "MessageNotice" | "NoticeBanner" | "PendingLabel" | "Skeleton" | "SkeletonRegion" | "Toaster" | "Tooltip" | "UpdateCard" | "WaitingLine" | "AccountMenu" | "ActionContextMenu" | "ActionMenu" | "AlertDialog" | "ContextMenu" | "Dialog" | "Drawer" | "DropdownMenu" | "GlassControl" | "MenuChoiceRow" | "Popover" | "Sheet" | "SiteMenu" | "ThemeModeMenu" | "ActivityCalendar" | "ChartAreaStacked" | "ChartBarHorizontal" | "ChartBarMultiple" | "ChartBarStacked" | "ChartCard" | "ChartContainer" | "ChartRanking" | "ChartSparkline" | "DateRangeControl" | "KpiCard" | "TrendBadge" | "createEntityColorMap" | "Accordion" | "AspectRatio" | "BrandField" | "Collapsible" | "CompanyCard" | "Disclosure" | "HiveScene" | "NadiaPresence" | "NumberedSteps" | "Prose" | "ReadingColumn" | "ResizablePanelGroup" | "ScrollArea" | "Separator" | "ToolIcon";
1
+ export type UsageName = "ActivityFeed" | "AgentProfileCard" | "CatalogDrawer" | "CollectionFilters" | "CollectionPage" | "CollectionToolbar" | "ConfirmDialog" | "EntryPicture" | "EntryScene" | "FormDialog" | "FormDrawer" | "InviteCard" | "LibraryShelf" | "ObjectPage" | "ObjectSection" | "OverviewPage" | "PageHeader" | "RecordList" | "RecordSheet" | "RowEditForm" | "SettingsPage" | "SettingsSection" | "Button" | "ButtonGroup" | "ButtonLink" | "CopyButton" | "LoadMoreButton" | "PageActions" | "Calendar" | "ClearableInput" | "CollectionSearch" | "Field" | "Form" | "Input" | "InputGroup" | "InputOTP" | "Label" | "NativeSelect" | "SettingsField" | "SettingsRows" | "Slider" | "Textarea" | "Checkbox" | "ChoiceboxGroup" | "CollectionSort" | "Combobox" | "ModelSelect" | "MultiSelect" | "RadioGroup" | "SegmentedChoice" | "SegmentedControl" | "Select" | "Switch" | "ThemeModeSegments" | "ThemeModeSwitcher" | "Toggle" | "ToggleGroup" | "ActionStatus" | "AgentOrb" | "AppMark" | "ArchIcon" | "Avatar" | "Badge" | "BrandWordmark" | "CheckCounts" | "FileTypeIcon" | "IdentityMark" | "ModelIdentity" | "ModelMark" | "ObjectFactValue" | "PlatformMark" | "ProgressChecklist" | "RecordIdentity" | "StatusBadge" | "Tag" | "AgentListRow" | "Breadcrumb" | "CommandDialog" | "Footer" | "PortalSidebarFrame" | "ScopeSwitcher" | "Sidebar" | "SidebarBrand" | "SidebarFind" | "SidebarFrame" | "SidebarMenuChevron" | "SidebarSections" | "Tabs" | "TabsNav" | "textLinkVariants" | "AgentCard" | "Card" | "CardRow" | "CodeBlock" | "DataTable" | "DiffCount" | "DisclosureRow" | "FileDiff" | "Gauge" | "Item" | "Kbd" | "MiddleTruncate" | "ObjectFacts" | "PairingCode" | "Progress" | "QrCode" | "RecordTime" | "RunTimeline" | "SettingsFactsSection" | "Snippet" | "Table" | "TableCard" | "TableValue" | "TextWithCopyButton" | "UsageMeter" | "Alert" | "EmptyState" | "EntryProgress" | "EntryStageList" | "HoverCard" | "MessageNotice" | "NoticeBanner" | "PendingLabel" | "Skeleton" | "SkeletonRegion" | "Toaster" | "Tooltip" | "UpdateCard" | "WaitingLine" | "AccountMenu" | "ActionContextMenu" | "ActionMenu" | "AlertDialog" | "ContextMenu" | "Dialog" | "Drawer" | "DropdownMenu" | "GlassControl" | "MenuChoiceRow" | "Popover" | "Sheet" | "SiteMenu" | "ThemeModeMenu" | "ActivityCalendar" | "ChartAreaStacked" | "ChartBarHorizontal" | "ChartBarMultiple" | "ChartBarStacked" | "ChartCard" | "ChartContainer" | "ChartRanking" | "ChartSparkline" | "DateRangeControl" | "KpiCard" | "TrendBadge" | "createEntityColorMap" | "Accordion" | "AspectRatio" | "BrandField" | "Collapsible" | "CompanyCard" | "Disclosure" | "HiveScene" | "NadiaPresence" | "NumberedSteps" | "Prose" | "ReadingColumn" | "ResizablePanelGroup" | "ScrollArea" | "Separator" | "ToolIcon";
2
2
  export type UsageFamily = "Compositions" | "Actions" | "Inputs" | "Choices" | "Status" | "Navigation" | "Data" | "Feedback" | "Menus" | "Charts" | "Other";
3
3
  export type ComponentUsage = {
4
4
  name: UsageName;
@@ -1 +1 @@
1
- {"version":3,"file":"usage.generated.d.ts","sourceRoot":"","sources":["../../src/showcase/usage.generated.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"usage.generated.d.ts","sourceRoot":"","sources":["../../src/showcase/usage.generated.ts"],"names":[],"mappings":"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"}
@@ -91,6 +91,17 @@ export const USAGE = [
91
91
  words: '"`title` is Title Case, `Verb + Noun`, a statement — never a question. `Delete Project`, not `Delete this project?`." (https://vercel.com/geist/destructive-action-modal) "`description` is sentence case, names the consequence, and interpolates the specific resource when relevant. `<b>my-project</b> and all its deployments will be permanently deleted.` reads stronger than `This project and all its deployments will be deleted.`." (https://vercel.com/geist/destructive-action-modal) "`confirmLabel` matches the title 1:1. Never generic (`Confirm`, `OK`, `Continue`), never a bare verb (`Delete`)." (https://vercel.com/geist/destructive-action-modal) "`cancelLabel` defaults to `Cancel`. Override when Cancel is ambiguous, such as `Keep Turn Running` when the primary action is itself a cancellation." (https://vercel.com/geist/destructive-action-modal) "`verificationPhrase`: for entity deletes, type the **resource name itself** (`my-project`) and pair with `verificationLabel="project name"` so the prompt reads `To confirm, type the project name "my-project"`. That\'s the canonical signal that the user knows which thing they\'re acting on. Fall back to a lowercase verb phrase (`disable vercel authentication`) only when there\'s no entity to name." (https://vercel.com/geist/destructive-action-modal) "`irreversibleDescription` names the specific action and resource and ends with `cannot be undone.` — `Deleting my-project cannot be undone.` rather than the generic `This cannot be undone.`. Omit the prop entirely for reversible actions; the prop\'s absence is the signal, not a falsy value." (https://vercel.com/geist/destructive-action-modal) "`error` surfaces the API failure verbatim in Vercel voice: `Couldn\'t save settings. Try again.`. Never dump a raw error object." (https://vercel.com/geist/destructive-action-modal) "Pair the post-confirm success toast verb 1:1 with the primary button: `Delete Project` button, `Project deleted` toast. Never `Project removed`." (https://vercel.com/geist/destructive-action-modal) "Close irreversible bodies with `This cannot be undone.`; close cascade-only bodies with `Some effects cannot be undone.`. Don’t claim full irreversibility for a partial cascade." (https://vercel.com/geist/modal) Ours: the title is sentence case and names the record, "Remove pec@acme.it", and the confirm repeats the verb and the noun, "Remove mailbox", so the two share a verb and not every word; its success toast uses the same verb ("Mailbox removed"). The description names the record in medium weight.',
92
92
  access: '"The verification input is associated with its prompt via `aria-labelledby` + `htmlFor`. Screen readers announce the full prompt (`To confirm, type "delete my-project"`) on focus." (https://vercel.com/geist/destructive-action-modal) "The Warning icon in the irreversibility band is `aria-hidden`; the sentence carries the meaning so nothing is announced twice." (https://vercel.com/geist/destructive-action-modal) "Focus stays inside the modal across an `error` transition so the user can retry without losing context. After success, return focus to the trigger." (https://vercel.com/geist/destructive-action-modal) "Set `aria-labelledby` to the `Modal.Title` id so screen readers announce the title on open." (https://vercel.com/geist/modal) "Keep the Cancel button literally `Cancel` so screen-reader users hear a stable dismissal label across destructive flows." (https://vercel.com/geist/modal) Ours: `role="alertdialog"` named by its title and described by its consequence; the note is `role="note"` with its icon hidden. Focus starts on Cancel, or in the field with `verify`.',
93
93
  },
94
+ {
95
+ name: "EntryPicture",
96
+ module: "entry-picture",
97
+ family: "Compositions",
98
+ summary: "The art-directed cut-out an entry page stands beside its centred column.",
99
+ when: "A whole-page moment with a picture, at the window's left edge: a sign-in handed to Nadia, an invitation, an invite to a company's Alveare.",
100
+ instead: "A failure page centres its picture above the words (\"Failure surfaces\"). A first use's picture is `EmptyState`'s. Nadia's desktop entry screens are `EntryScene` and Alveare's are `HiveScene`.",
101
+ behaviour: "One whole cut-out fixed to the window's floor at the left edge, so a page taller than the window never cuts its feet. It keeps its own shape and is never wider than half its pixels, the width it stays sharp at on a DPR 2 screen, nor than the room left of the centred `column`, nor taller than 85 % of the window. It shows only from `lg`: below, the task keeps the screen and the browser does not fetch it. A page draws it only in the state the picture is about, so a page that cannot go on never shows one welcoming the person.",
102
+ words: "None: the picture carries no caption.",
103
+ access: "Decorative and inert: hidden from assistive technology, never focused or clicked.",
104
+ },
94
105
  {
95
106
  name: "EntryScene",
96
107
  module: "entry-scene",
@@ -124,6 +135,17 @@ export const USAGE = [
124
135
  words: '"Title is Title Case and names the entity (`Deployment Details`, `Member Profile`), not the page action." (https://vercel.com/geist/sheet) "Body is read-mostly: sentence case prose with Title Case sub-headings. Action buttons are optional; when present, follow `Verb + Noun`." (https://vercel.com/geist/sheet) Ours: the title is sentence case and names the job and its object: "Connect Telegram", "Add a skill". The step reads "Step N of M". The primary says what it does: "Connect", "Continue", never "OK".',
125
136
  access: '"Trap focus inside the sheet while it’s open and return focus to the trigger row on close so keyboard users keep their place in the list." (https://vercel.com/geist/sheet) "Provide a visible close button labeled `Close` (or an icon button with `aria-label="Close"`) since clicking outside doesn’t dismiss." (https://vercel.com/geist/sheet) "Announce the sheet with `aria-labelledby` pointing at the title; pair it with `aria-describedby` only when the body is short and load-bearing." (https://vercel.com/geist/sheet) Ours: a modal dialog named by its title; focus returns to the opener on close, or to `finalFocus` when the opener is gone. The step is read before the title.',
126
137
  },
138
+ {
139
+ name: "InviteCard",
140
+ module: "invite-card",
141
+ family: "Compositions",
142
+ summary: "A link that opens an app: the app's mark, the invite's words, the action that opens it, the installers for a computer without the app, and the code that opens the same link on a phone.",
143
+ when: "The page an invite link opens: Alveare's invite to a company. It stands centred on an entry page, with `EntryPicture` at the window's left edge.",
144
+ instead: "An invitation to a role the person accepts in the Portal is the Portal's invitation card. Downloads with formats and steps is the Portal's Downloads page. A code the phone takes to sign in is `QrCode` in Nadia's pairing drawer.",
145
+ behaviour: "The mark, the title and the one line are centred; the open action fills the card's width under them, and the phone's code, as large as a phone scans from across a desk, comes next as the other way to open the same link. The installers are one row per computer, each with its mark, its name, its size and its download, so every row lines up whatever its words; the computer the reader is on carries the `suggested` badge. The installers show from `md` and the phone's code from `lg`, because a phone neither installs a computer's app nor scans its own screen. A link that holds no invite passes the title and the line alone.",
146
+ words: "The title says what the person joins: *Join your company on Alveare*. The line says what happens and what to do if it does not. Each download is *Download*, named for its computer to assistive technology; the phone's line says what the code opens and how: *Open this invite on your phone*, *Point your phone's camera at the code*.",
147
+ access: "The title is the page's level-1 heading and the installers a list under its own heading. The mark is decorative; the code is an image named by what it opens.",
148
+ },
127
149
  {
128
150
  name: "LibraryShelf",
129
151
  module: "library-shelf",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nadicodeai/ui",
3
- "version": "12.1.169",
3
+ "version": "12.1.171",
4
4
  "type": "module",
5
5
  "imports": {
6
6
  "#jsx": "./src/jsx/index.ts",
@@ -72,7 +72,7 @@
72
72
  "@base-ui/react": "^1.9.0",
73
73
  "@iconify-icons/logos": "^2.0.3",
74
74
  "@iconify/react": "^6.0.2",
75
- "@nadicodeai/design-system": "12.1.169",
75
+ "@nadicodeai/design-system": "12.1.171",
76
76
  "@tanstack/react-table": "^9.3.1",
77
77
  "@vgpu/wgsl": "0.6.0",
78
78
  "class-variance-authority": "^0.7.1",