@lotics/ui 46.0.2 → 46.1.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/docs/templates.md +14 -0
- package/package.json +1 -1
- package/src/brand_mark.tsx +31 -1
package/docs/templates.md
CHANGED
|
@@ -87,6 +87,20 @@ intended behaviour when the job calls for one — the line between a choice and
|
|
|
87
87
|
[composition.md](./composition.md) §"The form comes before the treatment", and it is drawn there
|
|
88
88
|
for this too.
|
|
89
89
|
|
|
90
|
+
**A surface that is a FILTERED VIEW of another surface is not a separate subject.** The same test
|
|
91
|
+
that separates a tab from a lens decides whether a screen should exist at all, one altitude up: if
|
|
92
|
+
its rows are another screen's rows with a condition applied, it is a lens on that screen and belongs
|
|
93
|
+
in its toolbar. The tell is a screen that reads as disconnected while every part of it looks
|
|
94
|
+
correct — a costs screen whose rows are the bank ledger filtered to outflows, an "overdue" screen
|
|
95
|
+
whose rows are the register filtered by a date. Each one duplicates a subject and then drifts from
|
|
96
|
+
it, because two surfaces over one set of rows grow two ways of writing to them.
|
|
97
|
+
|
|
98
|
+
**And nothing should answer a question another surface already owns.** A register that starts
|
|
99
|
+
computing the P&L is building a second answer to a question the dashboard is for — the two will
|
|
100
|
+
disagree the first time either changes, and the reader has no way to know which is right. Where a
|
|
101
|
+
screen genuinely needs a figure that lives elsewhere, it states the figure and points; it does not
|
|
102
|
+
re-derive it.
|
|
103
|
+
|
|
90
104
|
### App-screen shapes
|
|
91
105
|
|
|
92
106
|
**What earns a tab.** A band is a TAB when it changes what the screen IS — its columns, the act on
|
package/package.json
CHANGED
package/src/brand_mark.tsx
CHANGED
|
@@ -6,8 +6,19 @@ import { Svg, Path } from "react-native-svg";
|
|
|
6
6
|
* takes a generic `Icon` — a phone call, an in-person event, a website, an
|
|
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
|
+
*
|
|
10
|
+
* A CHANNEL earns a mark; a PRODUCT does not. The line is whether a business
|
|
11
|
+
* reaches people through it — a post, a message, a campaign — or merely uses it
|
|
12
|
+
* to work. So the ad platforms belong here beside the social surfaces, while a
|
|
13
|
+
* mailbox or a drive does not, and the two are easy to confuse because the same
|
|
14
|
+
* company often sells both.
|
|
15
|
+
*
|
|
16
|
+
* Every mark is a single-path CC0 silhouette taken from simple-icons, with that
|
|
17
|
+
* project's own hex. Never hand-write one: a recalled path renders something
|
|
18
|
+
* plausible and slightly wrong, which is the one defect a reader spots instantly
|
|
19
|
+
* and a test suite never does.
|
|
9
20
|
*/
|
|
10
|
-
export const BRAND_NAMES = ["facebook", "zalo", "linkedin", "x", "google-meet"] as const;
|
|
21
|
+
export const BRAND_NAMES = ["facebook", "meta", "tiktok", "google-ads", "zalo", "linkedin", "x", "google-meet"] as const;
|
|
11
22
|
|
|
12
23
|
export type BrandName = (typeof BRAND_NAMES)[number];
|
|
13
24
|
|
|
@@ -39,6 +50,25 @@ interface Mark {
|
|
|
39
50
|
* in (`SwitchButton`'s `leading` slot).
|
|
40
51
|
*/
|
|
41
52
|
const MARKS: Record<BrandName, Mark> = {
|
|
53
|
+
/** The company and its ad platform. `facebook` is the consumer surface a post goes
|
|
54
|
+
* on; `meta` is what bills the ad spend, and a row about money names the
|
|
55
|
+
* platform that took it. */
|
|
56
|
+
"meta": {
|
|
57
|
+
color: "#0467DF",
|
|
58
|
+
path: "M6.915 4.03c-1.968 0-3.683 1.28-4.871 3.113C.704 9.208 0 11.883 0 14.449c0 .706.07 1.369.21 1.973a6.624 6.624 0 0 0 .265.86 5.297 5.297 0 0 0 .371.761c.696 1.159 1.818 1.927 3.593 1.927 1.497 0 2.633-.671 3.965-2.444.76-1.012 1.144-1.626 2.663-4.32l.756-1.339.186-.325c.061.1.121.196.183.3l2.152 3.595c.724 1.21 1.665 2.556 2.47 3.314 1.046.987 1.992 1.22 3.06 1.22 1.075 0 1.876-.355 2.455-.843a3.743 3.743 0 0 0 .81-.973c.542-.939.861-2.127.861-3.745 0-2.72-.681-5.357-2.084-7.45-1.282-1.912-2.957-2.93-4.716-2.93-1.047 0-2.088.467-3.053 1.308-.652.57-1.257 1.29-1.82 2.05-.69-.875-1.335-1.547-1.958-2.056-1.182-.966-2.315-1.303-3.454-1.303zm10.16 2.053c1.147 0 2.188.758 2.992 1.999 1.132 1.748 1.647 4.195 1.647 6.4 0 1.548-.368 2.9-1.839 2.9-.58 0-1.027-.23-1.664-1.004-.496-.601-1.343-1.878-2.832-4.358l-.617-1.028a44.908 44.908 0 0 0-1.255-1.98c.07-.109.141-.224.211-.327 1.12-1.667 2.118-2.602 3.358-2.602zm-10.201.553c1.265 0 2.058.791 2.675 1.446.307.327.737.871 1.234 1.579l-1.02 1.566c-.757 1.163-1.882 3.017-2.837 4.338-1.191 1.649-1.81 1.817-2.486 1.817-.524 0-1.038-.237-1.383-.794-.263-.426-.464-1.13-.464-2.046 0-2.221.63-4.535 1.66-6.088.454-.687.964-1.226 1.533-1.533a2.264 2.264 0 0 1 1.088-.285z",
|
|
59
|
+
},
|
|
60
|
+
/** Short video, and for a Vietnamese seller increasingly the channel that outsells
|
|
61
|
+
* the one they budget for. */
|
|
62
|
+
"tiktok": {
|
|
63
|
+
color: "#000000",
|
|
64
|
+
path: "M12.525.02c1.31-.02 2.61-.01 3.91-.02.08 1.53.63 3.09 1.75 4.17 1.12 1.11 2.7 1.62 4.24 1.79v4.03c-1.44-.05-2.89-.35-4.2-.97-.57-.26-1.1-.59-1.62-.93-.01 2.92.01 5.84-.02 8.75-.08 1.4-.54 2.79-1.35 3.94-1.31 1.92-3.58 3.17-5.91 3.21-1.43.08-2.86-.31-4.08-1.03-2.02-1.19-3.44-3.37-3.65-5.71-.02-.5-.03-1-.01-1.49.18-1.9 1.12-3.72 2.58-4.96 1.66-1.44 3.98-2.13 6.15-1.72.02 1.48-.04 2.96-.04 4.44-.99-.32-2.15-.23-3.02.37-.63.41-1.11 1.04-1.36 1.75-.21.51-.15 1.07-.14 1.61.24 1.64 1.82 3.02 3.5 2.87 1.12-.01 2.19-.66 2.77-1.61.19-.33.4-.67.41-1.06.1-1.79.06-3.57.07-5.36.01-4.03-.01-8.05.02-12.07z",
|
|
65
|
+
},
|
|
66
|
+
/** Search and shopping ads. Distinct from `google-meet`, which is a meeting rather
|
|
67
|
+
* than a spend. */
|
|
68
|
+
"google-ads": {
|
|
69
|
+
color: "#4285F4",
|
|
70
|
+
path: "M3.9998 22.9291C1.7908 22.9291 0 21.1383 0 18.9293s1.7908-3.9998 3.9998-3.9998 3.9998 1.7908 3.9998 3.9998-1.7908 3.9998-3.9998 3.9998zm19.4643-6.0004L15.4632 3.072C14.3586 1.1587 11.9121.5028 9.9988 1.6074S7.4295 5.1585 8.5341 7.0718l8.0009 13.8567c1.1046 1.9133 3.5511 2.5679 5.4644 1.4646 1.9134-1.1046 2.568-3.5511 1.4647-5.4644zM7.5137 4.8438L1.5645 15.1484A4.5 4.5 0 0 1 4 14.4297c2.5597-.0075 4.6248 2.1585 4.4941 4.7148l3.2168-5.5723-3.6094-6.25c-.4499-.7793-.6322-1.6394-.5878-2.4784z",
|
|
71
|
+
},
|
|
42
72
|
facebook: {
|
|
43
73
|
color: "#0866FF",
|
|
44
74
|
path: "M9.101 23.691v-7.98H6.627v-3.667h2.474v-1.58c0-4.085 1.848-5.978 5.858-5.978.401 0 .955.042 1.468.103a8.68 8.68 0 0 1 1.141.195v3.325a8.623 8.623 0 0 0-.653-.036 26.805 26.805 0 0 0-.733-.009c-.707 0-1.259.096-1.675.309a1.686 1.686 0 0 0-.679.622c-.258.42-.374.995-.374 1.752v1.297h3.919l-.386 2.103-.287 1.564h-3.246v8.245C19.396 23.238 24 18.179 24 12.044c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.628 3.874 10.35 9.101 11.647Z",
|