@lotics/ui 45.3.0 → 45.4.0

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/AGENTS.md CHANGED
@@ -100,7 +100,7 @@ CURRENT major only — upgrading an app across majors is `MIGRATION.md`.
100
100
  `error={overdue ? … }` is the tell: it makes a date due tomorrow read like one due in three
101
101
  months. → [catalog.md §Dates & times](./docs/catalog.md).
102
102
  - **A third-party channel takes `BrandMark`, our own glyphs take `Icon`.** `@lotics/ui/brand_mark`
103
- draws Facebook / Zalo / LinkedIn / Google Meet as solid single-colour silhouettes — a reader
103
+ draws Facebook / Zalo / LinkedIn / X / Google Meet as solid single-colour silhouettes — a reader
104
104
  scanning a feed recognises the logo before the word. The names are an allowlist, so a channel
105
105
  with no mark (a phone call, an event, a website) fails to typecheck and falls back to `Icon`
106
106
  instead of borrowing another company's logo. → [catalog.md §Text & formatting](./docs/catalog.md).
package/docs/catalog.md CHANGED
@@ -476,12 +476,13 @@ source (`src/<module>.tsx`/`.ts`) is the API reference.
476
476
  `SubsectionHeading` instead. Pick between this and `Eyebrow` by what is LABELLED — a block or a
477
477
  value; composition.md § Eyebrow vs group lead has the table.
478
478
  - **`brand_mark`** — `BrandMark`: an OUTSIDE brand's mark, naming the channel a touchpoint
479
- happened on — `facebook`, `zalo`, `linkedin`, `google-meet`. Solid single-colour silhouettes in
479
+ happened on — `facebook`, `zalo`, `linkedin`, `x`, `google-meet`. Solid single-colour silhouettes in
480
480
  each brand's own hex, not the full-colour logos: a byline draws these at 14–20px and a
481
481
  five-colour logo turns to mud there. `size` (default 16) and `muted` (draw in the text colour).
482
482
  The name list is an ALLOWLIST — a channel with no mark will not typecheck, so the call site
483
483
  falls back to a generic `Icon` rather than rendering the wrong company's logo. Not for the app's
484
- own glyphs; that is `icon`.
484
+ own glyphs; that is `icon`. `x` is the one mark whose brand colour is BLACK, so it is the one
485
+ that needs `muted` on a dark ground; the rest carry their own hue either way.
485
486
  - **`markdown`** — `Markdown`: the single canonical markdown renderer for chat, apps, and
486
487
  `AgentRun`; rich GFM markdown on web with copyable tables, plain-text on
487
488
  native; takes a markdown `children` string. **`variant`** decides whose type
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lotics/ui",
3
- "version": "45.3.0",
3
+ "version": "45.4.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "./vite": {
@@ -7,7 +7,7 @@ import { Svg, Path } from "react-native-svg";
7
7
  * email that is not tied to one provider. Inventing a mark for those is how a
8
8
  * byline ends up claiming a channel the record does not carry.
9
9
  */
10
- export type BrandName = "facebook" | "zalo" | "linkedin" | "google-meet";
10
+ export type BrandName = "facebook" | "zalo" | "linkedin" | "x" | "google-meet";
11
11
 
12
12
  interface Mark {
13
13
  /** The brand's own colour. A mark drawn in anything else is not the mark. */
@@ -40,6 +40,14 @@ const MARKS: Record<BrandName, Mark> = {
40
40
  color: "#0A66C2",
41
41
  path: "M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z",
42
42
  },
43
+ x: {
44
+ // X's mark is black, and that is the mark — a brand drawn in a colour it
45
+ // does not use is not the brand. It is the one entry here that depends on
46
+ // its ground: on a dark surface pass `muted`, which draws it in the text
47
+ // colour like every other mark and keeps it visible.
48
+ color: "#000000",
49
+ path: "M18.901 1.153h3.68l-8.04 9.19L24 22.846h-7.406l-5.8-7.584-6.638 7.584H.474l8.6-9.83L0 1.154h7.594l5.243 6.932ZM17.61 20.644h2.039L6.486 3.24H4.298Z",
50
+ },
43
51
  "google-meet": {
44
52
  color: "#00897B",
45
53
  path: "M5.53 2.13 0 7.75h5.53zm.398 0v5.62h7.608v3.65l5.47-4.45c-.014-1.22.031-2.25-.025-3.46-.148-1.09-1.287-1.47-2.236-1.36zM23.1 4.32c-.802.295-1.358.995-2.047 1.49-2.506 2.05-4.982 4.12-7.468 6.19 3.025 2.59 6.04 5.18 9.065 7.76 1.218.671 1.428-.814 1.328-1.64v-13a.828.828 0 0 0-.877-.825zM.038 8.15v7.7h5.53v-7.7zm13.577 8.1H6.008v5.62c3.864-.006 7.737.011 11.58-.009 1.02-.07 1.618-1.12 1.468-2.07v-2.51l-5.47-4.68v3.65zm-13.577 0c.02 1.44-.041 2.88.033 4.31.162.948 1.158 1.43 2.047 1.31h3.464v-5.62z",