@nadicodeai/design-system 12.1.161 → 12.1.163

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.
package/DESIGN.md CHANGED
@@ -1208,7 +1208,7 @@ The company is **nadicode**, lowercase. Its logo is the n, and the name drawn in
1208
1208
 
1209
1209
  1. **Mark.** The n, the logo itself, as tall as it is wide, with nothing added. It stands for the company wherever the company is recognised by its sign: app headers and compact navigation, the corner of a slide, a sticker, a stamp.
1210
1210
  2. **Wordmark.** nadicode in one geometric line with one dot over the i. The dot is the only colour in the logo, where an Agent sits. Use it wherever the company is named: the website's header, documents, proposals, invoices, email signatures, a first slide.
1211
- 3. **Icon.** The mark on a tile with rounded corners, in one of three fields. The brand tile, the white n on `{colors.identity-cobalto}`, is for favicons, avatars and the website's app icon, and is the one place the brand colour fills a logo's field. The light tile, the `{colors.ink}` n on white, is a desktop app's icon, which keeps it in the system's dark appearance. The dark tile, the white n on `{colors.identity-ink}`, is the icon wherever else it sits on a dark ground: a dark slide, a dark profile, an app's own dark screen.
1211
+ 3. **Icon.** The mark on a tile with rounded corners, in one of three fields. The brand tile, the white n on `{colors.identity-cobalto}`, is for favicons, avatars and the website's app icon, and is the one place the brand colour fills a logo's field. Where the platform crops the picture itself, a profile picture cut to a circle or a square and a phone's home screen, the tile has square corners and the platform draws its shape: the avatar is the brand tile, or the light or dark tile where a profile wants white or black, with the n across 46% of the side, so a circle cut keeps it whole with its clear space. The mark is never a profile picture: it has no field, and its n runs to the edges a crop cuts. The light tile, the `{colors.ink}` n on white, is a desktop app's icon, which keeps it in the system's dark appearance. The dark tile, the white n on `{colors.identity-ink}`, is the icon wherever else it sits on a dark ground: a dark slide, an app's own dark screen.
1212
1212
  4. **Signature form.** The light tile with its construction guides in `{colors.logo-guide}`: a dotted circle around the arch whose radius is the golden section of the n's width, the two centre axes, and the n's width and height, each measured 1.000. It is drawn from 128 px up, on light grounds: Nadia's desktop icon, a cover or closing slide, a poster, print; on a dark ground the dark tile stands in for it. Below 128 px a guide is a fraction of a pixel, so the icon drops them; drawn on a screen as a logo, such as at the top of an entry scene, it drops them at any size. Alveare draws its own mark's desktop icon the same way.
1213
1213
 
1214
1214
  The mark and the wordmark never stand side by side: the wordmark already begins with the n, so together they read "n nadicode". Each place takes one of them.
package/README.md CHANGED
@@ -26,8 +26,8 @@ Individual font files are also exposed under `@nadicodeai/design-system/assets/f
26
26
 
27
27
  [Brand media authority](DESIGN.md#brand-media-authority) says what each form
28
28
  is and where it goes, and [`examples/logo.html`](./examples/logo.html) shows
29
- them all. This table is the file behind each, with transparent PNG fallbacks
30
- for software that cannot place SVG.
29
+ them all. This table is the file behind each, with PNG fallbacks for software
30
+ that cannot place SVG.
31
31
 
32
32
  | Form | On white or a soft neutral | On black or another dark ground |
33
33
  | --- | --- | --- |
@@ -37,14 +37,18 @@ for software that cannot place SVG.
37
37
  | Icon, brand tile | `assets/app-icon` | `assets/app-icon` |
38
38
  | Icon, light and dark tiles | `assets/app-icon-light` | `assets/app-icon-dark` |
39
39
  | Signature form, from 128 px | `assets/app-icon-signature` | `assets/app-icon-dark` |
40
+ | Avatar, brand tile | `assets/avatar` | `assets/avatar` |
41
+ | Avatar, light and dark tiles | `assets/avatar-light` | `assets/avatar-dark` |
40
42
 
41
43
  The one-ink files exist for embossing, stamps and one-colour print, where a
42
44
  second colour cannot be laid down. The brand tile carries its own field, so
43
- one file serves both grounds.
45
+ one file serves both grounds. The avatars are the three tiles with square
46
+ corners, for any place that crops the picture to a circle or a square, and
47
+ their PNGs are opaque.
44
48
 
45
49
  Prefix each route with `@nadicodeai/design-system/`. Append `.png` for the
46
- transparent PNG fallback, for example
47
- `@nadicodeai/design-system/assets/wordmark-white.png`.
50
+ PNG fallback, for example `@nadicodeai/design-system/assets/wordmark-white.png`.
51
+ Every PNG but the avatars is transparent outside its drawing.
48
52
 
49
53
  ```ts
50
54
  import wordmarkUrl from "@nadicodeai/design-system/assets/wordmark";
Binary file
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="1024" height="1024" role="img" aria-label="nadicode"><rect width="1024" height="1024" rx="0" fill="#000000"/><path d="M9 150V100A41 41 0 0 1 91 100V150" transform="translate(276.48 40.96) scale(4.71)" fill="none" stroke="#ffffff" stroke-width="18"/></svg>
Binary file
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="1024" height="1024" role="img" aria-label="nadicode"><rect width="1024" height="1024" rx="0" fill="#ffffff"/><path d="M9 150V100A41 41 0 0 1 91 100V150" transform="translate(276.48 40.96) scale(4.71)" fill="none" stroke="#111111" stroke-width="18"/></svg>
Binary file
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="1024" height="1024" role="img" aria-label="nadicode"><rect width="1024" height="1024" rx="0" fill="#1e3cff"/><path d="M9 150V100A41 41 0 0 1 91 100V150" transform="translate(276.48 40.96) scale(4.71)" fill="none" stroke="#ffffff" stroke-width="18"/></svg>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nadicodeai/design-system",
3
- "version": "12.1.161",
3
+ "version": "12.1.163",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -97,6 +97,30 @@
97
97
  "types": "./src/assets/logo-asset.d.ts",
98
98
  "default": "./dist/assets/app-icon-signature.png"
99
99
  },
100
+ "./assets/avatar": {
101
+ "types": "./src/assets/logo-asset.d.ts",
102
+ "default": "./dist/assets/avatar.svg"
103
+ },
104
+ "./assets/avatar.png": {
105
+ "types": "./src/assets/logo-asset.d.ts",
106
+ "default": "./dist/assets/avatar.png"
107
+ },
108
+ "./assets/avatar-light": {
109
+ "types": "./src/assets/logo-asset.d.ts",
110
+ "default": "./dist/assets/avatar-light.svg"
111
+ },
112
+ "./assets/avatar-light.png": {
113
+ "types": "./src/assets/logo-asset.d.ts",
114
+ "default": "./dist/assets/avatar-light.png"
115
+ },
116
+ "./assets/avatar-dark": {
117
+ "types": "./src/assets/logo-asset.d.ts",
118
+ "default": "./dist/assets/avatar-dark.svg"
119
+ },
120
+ "./assets/avatar-dark.png": {
121
+ "types": "./src/assets/logo-asset.d.ts",
122
+ "default": "./dist/assets/avatar-dark.png"
123
+ },
100
124
  "./assets/empty/agents": {
101
125
  "types": "./src/assets/logo-asset.d.ts",
102
126
  "default": "./src/assets/empty/agents.webp"
@@ -25,6 +25,7 @@ export declare const logoWordmarkGeometry: LogoGeometry;
25
25
  export declare const APP_ICON_MARK_RATIO: number;
26
26
  export declare const FAVICON_MARK_RATIO: number;
27
27
  export declare function logoIconGeometry(size: number, markRatio: number): LogoGeometry;
28
+ export declare function logoSquareIconGeometry(size: number): LogoGeometry;
28
29
  export declare function logoSignatureGeometry(size: number): LogoGeometry;
29
30
  export declare function resolveLogoGeometry(
30
31
  geometry: LogoGeometry,
@@ -119,12 +119,12 @@ const markTransform = (size, markRatio) => {
119
119
  return `translate(${round2(inset)} ${round2(inset - N_TOP * scale)}) scale(${round2(scale)})`;
120
120
  };
121
121
 
122
- const tileNode = (size) => ({
122
+ const tileNode = (size, radiusRatio = TILE_RADIUS_RATIO) => ({
123
123
  element: "rect",
124
124
  attributes: {
125
125
  width: String(size),
126
126
  height: String(size),
127
- rx: String(Math.round(size * TILE_RADIUS_RATIO)),
127
+ rx: String(Math.round(size * radiusRatio)),
128
128
  fill: "{paint:tile}",
129
129
  },
130
130
  });
@@ -151,6 +151,20 @@ export const logoIconGeometry = (size, markRatio) =>
151
151
  nodes: [tileNode(size), placedMarkNode(markTransform(size, markRatio))],
152
152
  });
153
153
 
154
+ /**
155
+ * The icon with square corners, for a place that crops or masks the picture
156
+ * itself: a profile picture, which WhatsApp, Telegram and Google cut to a
157
+ * circle and Slack and LinkedIn to a square, and the iOS and Android home
158
+ * screens. A rounded tile there would show its transparent corners inside the
159
+ * crop. The n stays the app icon's, so a circle cut inside the square keeps
160
+ * the letter whole.
161
+ */
162
+ export const logoSquareIconGeometry = (size) =>
163
+ freezeGeometry({
164
+ viewBox: `0 0 ${size} ${size}`,
165
+ nodes: [tileNode(size, 0), placedMarkNode(markTransform(size, APP_ICON_MARK_RATIO))],
166
+ });
167
+
154
168
  const ONE_POINT_ZERO_OUTLINE =
155
169
  "M0.86 0L0.86 -3.04L0 -3.04L0 -3.47L0.35 -3.47Q0.57 -3.47 0.71 -3.53Q0.85 -3.59 0.91 -3.73Q0.96 -3.87 0.96 -4.11L1.36 -4.11L1.36 0ZM2.25 0L2.25 -0.66L2.9 -0.66L2.9 0ZM5.07 0.09Q4.58 0.09 4.21 -0.17Q3.85 -0.43 3.65 -0.91Q3.45 -1.39 3.45 -2.05Q3.45 -2.71 3.65 -3.19Q3.85 -3.68 4.21 -3.94Q4.58 -4.2 5.07 -4.2Q5.58 -4.2 5.94 -3.94Q6.31 -3.68 6.51 -3.19Q6.71 -2.72 6.71 -2.05Q6.71 -1.39 6.51 -0.91Q6.31 -0.43 5.94 -0.17Q5.58 0.09 5.07 0.09ZM5.07 -0.39Q5.61 -0.39 5.9 -0.82Q6.19 -1.26 6.19 -2.05Q6.19 -2.58 6.06 -2.96Q5.92 -3.33 5.68 -3.52Q5.43 -3.72 5.07 -3.72Q4.72 -3.72 4.47 -3.52Q4.23 -3.33 4.1 -2.96Q3.97 -2.58 3.97 -2.05Q3.97 -1.26 4.26 -0.82Q4.55 -0.39 5.07 -0.39ZM8.97 0.09Q8.47 0.09 8.11 -0.17Q7.74 -0.43 7.54 -0.91Q7.34 -1.39 7.34 -2.05Q7.34 -2.71 7.54 -3.19Q7.74 -3.68 8.11 -3.94Q8.47 -4.2 8.97 -4.2Q9.47 -4.2 9.84 -3.94Q10.2 -3.68 10.4 -3.19Q10.6 -2.72 10.6 -2.05Q10.6 -1.39 10.4 -0.91Q10.2 -0.43 9.84 -0.17Q9.47 0.09 8.97 0.09ZM8.97 -0.39Q9.5 -0.39 9.79 -0.82Q10.08 -1.26 10.08 -2.05Q10.08 -2.58 9.95 -2.96Q9.82 -3.33 9.57 -3.52Q9.33 -3.72 8.97 -3.72Q8.62 -3.72 8.37 -3.52Q8.12 -3.33 8 -2.96Q7.86 -2.58 7.86 -2.05Q7.86 -1.26 8.15 -0.82Q8.44 -0.39 8.97 -0.39ZM12.87 0.09Q12.37 0.09 12 -0.17Q11.64 -0.43 11.44 -0.91Q11.24 -1.39 11.24 -2.05Q11.24 -2.71 11.44 -3.19Q11.64 -3.68 12 -3.94Q12.37 -4.2 12.87 -4.2Q13.37 -4.2 13.74 -3.94Q14.1 -3.68 14.3 -3.19Q14.5 -2.72 14.5 -2.05Q14.5 -1.39 14.3 -0.91Q14.1 -0.43 13.74 -0.17Q13.37 0.09 12.87 0.09ZM12.87 -0.39Q13.4 -0.39 13.69 -0.82Q13.98 -1.26 13.98 -2.05Q13.98 -2.58 13.85 -2.96Q13.72 -3.33 13.47 -3.52Q13.22 -3.72 12.87 -3.72Q12.51 -3.72 12.27 -3.52Q12.02 -3.33 11.89 -2.96Q11.76 -2.58 11.76 -2.05Q11.76 -1.26 12.05 -0.82Q12.34 -0.39 12.87 -0.39Z";
156
170