@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 +1 -1
- package/docs/catalog.md +3 -2
- package/package.json +1 -1
- package/src/brand_mark.tsx +9 -1
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
package/src/brand_mark.tsx
CHANGED
|
@@ -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",
|