@nadicodeai/ui 12.1.170 → 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.
@@ -16,7 +16,7 @@ type Installer = {
16
16
  * @family Compositions
17
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
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. 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
+ * @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
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
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
22
  */
@@ -1 +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;AAG7E,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"}
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"}
@@ -6,6 +6,8 @@ import { Card, CardContent } from "./card.js";
6
6
  import { Item, ItemActions, ItemContent, ItemDescription, ItemGroup, ItemMedia, ItemTitle, } from "./item.js";
7
7
  import { PlatformMark } from "./platform-mark.js";
8
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;
9
11
  /**
10
12
  * A link that opens an app: the app's mark, the invite's words, the action that opens it, the
11
13
  * installers for a computer without the app, and the code that opens the same link on a phone.
@@ -13,11 +15,11 @@ import { QrCode } from "./qr-code.js";
13
15
  * @family Compositions
14
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.
15
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.
16
- * @behaviour The mark, the title and the one line are centred; the open action fills the card's width under them. 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.
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.
17
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*.
18
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.
19
21
  */
20
22
  function InviteCard({ mark, title, description, open, install, phone, }) {
21
- 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, 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, phone ? (_jsxs("div", { className: "hidden items-center gap-4 rounded-md border border-border p-4 lg:flex", children: [_jsx(QrCode, { label: phone.label, size: 88, 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] }) }));
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] }) }));
22
24
  }
23
25
  export { InviteCard };
@@ -142,7 +142,7 @@ export const USAGE = [
142
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
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
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. 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.",
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
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
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
148
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nadicodeai/ui",
3
- "version": "12.1.170",
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.170",
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",