@orangecheck/app-design 0.6.1 → 1.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/README.md +23 -6
- package/dist/brand.js.map +1 -1
- package/dist/brand.mjs.map +1 -1
- package/dist/chrome.d.mts +78 -55
- package/dist/chrome.d.ts +78 -55
- package/dist/chrome.js +1100 -59
- package/dist/chrome.js.map +1 -1
- package/dist/chrome.mjs +1091 -61
- package/dist/chrome.mjs.map +1 -1
- package/dist/code.d.mts +52 -0
- package/dist/code.d.ts +52 -0
- package/dist/code.js +534 -0
- package/dist/code.js.map +1 -0
- package/dist/code.mjs +522 -0
- package/dist/code.mjs.map +1 -0
- package/dist/components.d.mts +216 -42
- package/dist/components.d.ts +216 -42
- package/dist/components.js +3350 -100
- package/dist/components.js.map +1 -1
- package/dist/components.mjs +3293 -103
- package/dist/components.mjs.map +1 -1
- package/dist/docs-DhnstueM.d.ts +219 -0
- package/dist/docs-DiR6s43s.d.mts +219 -0
- package/dist/family.d.mts +2 -0
- package/dist/family.d.ts +2 -0
- package/dist/family.js +167 -0
- package/dist/family.js.map +1 -0
- package/dist/family.mjs +154 -0
- package/dist/family.mjs.map +1 -0
- package/dist/format.d.mts +12 -0
- package/dist/format.d.ts +12 -0
- package/dist/format.js +65 -0
- package/dist/format.js.map +1 -0
- package/dist/format.mjs +58 -0
- package/dist/format.mjs.map +1 -0
- package/dist/hero-Dn37il-9.d.mts +31 -0
- package/dist/hero-Dn37il-9.d.ts +31 -0
- package/dist/index-C6hDqOOS.d.mts +58 -0
- package/dist/index-C6hDqOOS.d.ts +58 -0
- package/dist/index.d.mts +12 -3
- package/dist/index.d.ts +12 -3
- package/dist/index.js +4319 -295
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +4219 -298
- package/dist/index.mjs.map +1 -1
- package/dist/mdx.d.mts +58 -0
- package/dist/mdx.d.ts +58 -0
- package/dist/mdx.js +1712 -0
- package/dist/mdx.js.map +1 -0
- package/dist/mdx.mjs +1685 -0
- package/dist/mdx.mjs.map +1 -0
- package/dist/primitives.d.mts +73 -5
- package/dist/primitives.d.ts +73 -5
- package/dist/primitives.js +331 -8
- package/dist/primitives.js.map +1 -1
- package/dist/primitives.mjs +320 -11
- package/dist/primitives.mjs.map +1 -1
- package/dist/session.d.mts +18 -0
- package/dist/session.d.ts +18 -0
- package/dist/session.js +432 -0
- package/dist/session.js.map +1 -0
- package/dist/session.mjs +401 -0
- package/dist/session.mjs.map +1 -0
- package/dist/status-badge-BEOxeY9j.d.ts +13 -0
- package/dist/status-badge-DRwGhB0h.d.mts +13 -0
- package/dist/styles/code.css +97 -0
- package/dist/styles/fonts.css +1 -1
- package/dist/styles/theme.css +2 -0
- package/dist/styles/tokens.css +44 -2
- package/dist/styles.css +1 -0
- package/dist/tokens.d.mts +3 -1
- package/dist/tokens.d.ts +3 -1
- package/dist/tokens.js +5 -3
- package/dist/tokens.js.map +1 -1
- package/dist/tokens.mjs +5 -3
- package/dist/tokens.mjs.map +1 -1
- package/dist/tool-shell-B1C7ahKE.d.ts +81 -0
- package/dist/tool-shell-BDx_N5ai.d.mts +81 -0
- package/dist/tools-BggNN5DV.d.ts +131 -0
- package/dist/tools-DFIxIj5p.d.mts +131 -0
- package/package.json +38 -2
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @orangecheck/app-design — code.css
|
|
3
|
+
*
|
|
4
|
+
* Highlighted code: the token colours and the marked lines. Every rule sits
|
|
5
|
+
* inside .oca-code (a CodeBlock's dark well), because the syntax colours are
|
|
6
|
+
* measured against the well and would fail on a light surface.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
[data-oc-app='ochk'] .oca-code .oca-k,
|
|
10
|
+
[data-oc-app='ochk'] .oca-code .oca-g {
|
|
11
|
+
color: var(--oca-code-keyword);
|
|
12
|
+
}
|
|
13
|
+
[data-oc-app='ochk'] .oca-code .oca-s {
|
|
14
|
+
color: var(--oca-code-string);
|
|
15
|
+
}
|
|
16
|
+
[data-oc-app='ochk'] .oca-code .oca-n {
|
|
17
|
+
color: var(--oca-code-number);
|
|
18
|
+
}
|
|
19
|
+
[data-oc-app='ochk'] .oca-code .oca-f,
|
|
20
|
+
[data-oc-app='ochk'] .oca-code .oca-u {
|
|
21
|
+
color: var(--oca-code-function);
|
|
22
|
+
}
|
|
23
|
+
[data-oc-app='ochk'] .oca-code .oca-y {
|
|
24
|
+
color: var(--oca-code-type);
|
|
25
|
+
}
|
|
26
|
+
[data-oc-app='ochk'] .oca-code .oca-p {
|
|
27
|
+
color: var(--oca-code-property);
|
|
28
|
+
}
|
|
29
|
+
[data-oc-app='ochk'] .oca-code .oca-c {
|
|
30
|
+
color: var(--oca-code-comment);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/* One line per span, as wide as the widest line, so a mark runs edge to edge. */
|
|
34
|
+
[data-oc-app='ochk'] .oca-code [data-line] {
|
|
35
|
+
position: relative;
|
|
36
|
+
display: inline-block;
|
|
37
|
+
min-width: 100%;
|
|
38
|
+
padding-inline: 1.25rem;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
[data-oc-app='ochk'] .oca-code [data-mark] {
|
|
42
|
+
background: var(--oca-code-mark);
|
|
43
|
+
box-shadow: inset 2px 0 0 var(--oca-orange);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/* A diff: every line leaves room for its sign, so context stays aligned. */
|
|
47
|
+
[data-oc-app='ochk'] .oca-code[data-diff] [data-line] {
|
|
48
|
+
padding-left: 2.25rem;
|
|
49
|
+
}
|
|
50
|
+
[data-oc-app='ochk'] .oca-code [data-diff='add'] {
|
|
51
|
+
background: var(--oca-code-added-line);
|
|
52
|
+
}
|
|
53
|
+
[data-oc-app='ochk'] .oca-code [data-diff='remove'] {
|
|
54
|
+
background: var(--oca-code-removed-line);
|
|
55
|
+
}
|
|
56
|
+
[data-oc-app='ochk'] .oca-code [data-diff]::after {
|
|
57
|
+
position: absolute;
|
|
58
|
+
left: 1rem;
|
|
59
|
+
user-select: none;
|
|
60
|
+
}
|
|
61
|
+
/* The sign is drawn, not written, so copying a line never picks it up.
|
|
62
|
+
Screen readers hear what it means. */
|
|
63
|
+
[data-oc-app='ochk'] .oca-code [data-diff='add']::after {
|
|
64
|
+
content: '+';
|
|
65
|
+
content: '+' / 'Added: ';
|
|
66
|
+
color: var(--oca-code-added);
|
|
67
|
+
}
|
|
68
|
+
[data-oc-app='ochk'] .oca-code [data-diff='remove']::after {
|
|
69
|
+
content: '−';
|
|
70
|
+
content: '−' / 'Removed: ';
|
|
71
|
+
color: var(--oca-code-removed);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/* Line numbers: counted, drawn, never copied or read out. */
|
|
75
|
+
[data-oc-app='ochk'] .oca-code[data-line-numbers] code {
|
|
76
|
+
counter-reset: oca-line;
|
|
77
|
+
}
|
|
78
|
+
[data-oc-app='ochk'] .oca-code[data-line-numbers] [data-line] {
|
|
79
|
+
padding-left: 3.25rem;
|
|
80
|
+
}
|
|
81
|
+
[data-oc-app='ochk'] .oca-code[data-line-numbers][data-diff] [data-line] {
|
|
82
|
+
padding-left: 4.5rem;
|
|
83
|
+
}
|
|
84
|
+
[data-oc-app='ochk'] .oca-code[data-line-numbers][data-diff] [data-diff]::after {
|
|
85
|
+
left: 3.25rem;
|
|
86
|
+
}
|
|
87
|
+
[data-oc-app='ochk'] .oca-code[data-line-numbers] [data-line]::before {
|
|
88
|
+
counter-increment: oca-line;
|
|
89
|
+
content: counter(oca-line);
|
|
90
|
+
content: counter(oca-line) / '';
|
|
91
|
+
position: absolute;
|
|
92
|
+
left: 0;
|
|
93
|
+
width: 2.25rem;
|
|
94
|
+
text-align: right;
|
|
95
|
+
color: var(--oca-code-comment);
|
|
96
|
+
user-select: none;
|
|
97
|
+
}
|
package/dist/styles/fonts.css
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Inter (variable: weight + optical size) and JetBrains Mono, self-hosted from
|
|
5
5
|
* @fontsource-variable 5.3.0, both SIL OFL 1.1. Optical size is what gives large
|
|
6
|
-
* headlines the tight display cut
|
|
6
|
+
* headlines the tight display cut of the ochk.app design (iteration 2) without a second family. The
|
|
7
7
|
* family names are app-specific so a site's own next/font Inter cannot shadow them.
|
|
8
8
|
*/
|
|
9
9
|
|
package/dist/styles/theme.css
CHANGED
|
@@ -177,6 +177,8 @@
|
|
|
177
177
|
@layer base {
|
|
178
178
|
[data-oc-app='ochk'] {
|
|
179
179
|
font-family: var(--oc-font-sans);
|
|
180
|
+
/* Inter's contextual alternates turn "5x7" into "5×7", which rewrites addresses in prose. */
|
|
181
|
+
font-variant-ligatures: no-contextual;
|
|
180
182
|
font-optical-sizing: auto;
|
|
181
183
|
-webkit-font-smoothing: antialiased;
|
|
182
184
|
-moz-osx-font-smoothing: grayscale;
|
package/dist/styles/tokens.css
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* @orangecheck/app-design — tokens.css
|
|
3
3
|
*
|
|
4
|
-
* Token values for ochk.app, measured from
|
|
4
|
+
* Token values for ochk.app, measured from the ochk.app design (iteration 2, 2026-10-15) and
|
|
5
5
|
* corrected where the deck fails contrast. Everything is scoped to
|
|
6
6
|
* [data-oc-app='ochk'], so a family site that never sets the attribute never
|
|
7
7
|
* sees a value from here. The :root form outranks a family skin's bare :root.
|
|
@@ -43,7 +43,9 @@
|
|
|
43
43
|
--border: #ececec;
|
|
44
44
|
/* A field's edge is how you find it: 3:1 against the card it sits on. */
|
|
45
45
|
--input: #8f8f8f;
|
|
46
|
-
|
|
46
|
+
/* A focus ring is a graphic that must stand out 3:1 (WCAG 1.4.11): #F66D36
|
|
47
|
+
is 2.81:1 on the canvas, so light mode rings in the deep orange. */
|
|
48
|
+
--ring: #ea580b;
|
|
47
49
|
|
|
48
50
|
/* Status */
|
|
49
51
|
--destructive: #c2262e;
|
|
@@ -85,6 +87,23 @@
|
|
|
85
87
|
/* Code is a dark well in both modes, darker than any card in dark. */
|
|
86
88
|
--oca-code-surface: #161616;
|
|
87
89
|
--oca-code-line: #2a2a2a;
|
|
90
|
+
/* Syntax, from the deck's code card: rose keywords and tags, salmon
|
|
91
|
+
strings, peach numbers and constants, blue functions and keys, teal
|
|
92
|
+
types. Every one clears 4.5:1 on the well and on every marked line. */
|
|
93
|
+
--oca-code-keyword: #e3a8c2;
|
|
94
|
+
--oca-code-string: #e99a8f;
|
|
95
|
+
--oca-code-number: #fcb781;
|
|
96
|
+
--oca-code-function: #9db4ec;
|
|
97
|
+
--oca-code-type: #8fd0c2;
|
|
98
|
+
--oca-code-property: #9db4ec;
|
|
99
|
+
--oca-code-comment: #909397;
|
|
100
|
+
--oca-code-punctuation: #d5d8dc;
|
|
101
|
+
--oca-code-added: #86d39b;
|
|
102
|
+
--oca-code-removed: #f19a9a;
|
|
103
|
+
/* Marked lines: a highlighted line, an added one, a removed one. */
|
|
104
|
+
--oca-code-mark: #232323;
|
|
105
|
+
--oca-code-added-line: #1a2c20;
|
|
106
|
+
--oca-code-removed-line: #2f1c1c;
|
|
88
107
|
/* The hairline between bands; only dark needs one. */
|
|
89
108
|
--oca-band-line: transparent;
|
|
90
109
|
--oca-skeleton: #e8e8e8;
|
|
@@ -107,6 +126,26 @@
|
|
|
107
126
|
/* Sentence-case labels carry no trailing arrow (auth-client ≥ 2.29). */
|
|
108
127
|
--oc-signin-arrow: none;
|
|
109
128
|
|
|
129
|
+
/* The wallet picker and sign button (@orangecheck/wallet-adapter's
|
|
130
|
+
OcWalletPicker and OcWalletButton) in this design, read the same way:
|
|
131
|
+
each variable's fallback there is today's family look. */
|
|
132
|
+
--oc-wallet-font: var(--oc-font-sans);
|
|
133
|
+
--oc-wallet-case: none;
|
|
134
|
+
--oc-wallet-tracking: 0;
|
|
135
|
+
--oc-wallet-scale: 1.25;
|
|
136
|
+
--oc-wallet-strong: 500;
|
|
137
|
+
--oc-wallet-radius: 0.875rem;
|
|
138
|
+
--oc-wallet-button-radius: 9999px;
|
|
139
|
+
--oc-wallet-min-height: 2.25rem;
|
|
140
|
+
--oc-wallet-surface: var(--card);
|
|
141
|
+
--oc-wallet-ready: var(--success);
|
|
142
|
+
/* A pasted signature's field: 16px, or iOS zooms into it (an inline size
|
|
143
|
+
outranks the package's phone rule). */
|
|
144
|
+
--oc-wallet-field-size: 1rem;
|
|
145
|
+
/* The glyphs the family look writes as decoration: "§ " before a heading,
|
|
146
|
+
"// " before a note, "← " before Back. */
|
|
147
|
+
--oc-wallet-mark: none;
|
|
148
|
+
|
|
110
149
|
/* The deck has no shadows. Overlays get one, so a dialog still separates. */
|
|
111
150
|
--oc-shadow-2xs: none;
|
|
112
151
|
--oc-shadow-xs: none;
|
|
@@ -166,6 +205,9 @@
|
|
|
166
205
|
--oca-icon-ring: #333333;
|
|
167
206
|
--oca-code-surface: #0e0e0e;
|
|
168
207
|
--oca-code-line: #2a2a2a;
|
|
208
|
+
--oca-code-mark: #1b1b1b;
|
|
209
|
+
--oca-code-added-line: #132519;
|
|
210
|
+
--oca-code-removed-line: #271414;
|
|
169
211
|
--oca-band-line: #262626;
|
|
170
212
|
--oca-skeleton: #222222;
|
|
171
213
|
|
package/dist/styles.css
CHANGED
package/dist/tokens.d.mts
CHANGED
|
@@ -12,6 +12,7 @@ declare const appColors: {
|
|
|
12
12
|
readonly hairlineStrong: "#DADADA";
|
|
13
13
|
readonly accentDisplay: "#F55819";
|
|
14
14
|
readonly accentInk: "#C73F09";
|
|
15
|
+
readonly ring: "#EA580B";
|
|
15
16
|
};
|
|
16
17
|
readonly dark: {
|
|
17
18
|
readonly background: "#0A0A0A";
|
|
@@ -20,10 +21,11 @@ declare const appColors: {
|
|
|
20
21
|
readonly muted: "#1E1E1E";
|
|
21
22
|
readonly mutedForeground: "#A3A6AA";
|
|
22
23
|
readonly subtleForeground: "#8B8E93";
|
|
23
|
-
readonly border: "#
|
|
24
|
+
readonly border: "#2A2A2A";
|
|
24
25
|
readonly hairlineStrong: "#333333";
|
|
25
26
|
readonly accentDisplay: "#F66D36";
|
|
26
27
|
readonly accentInk: "#F0835A";
|
|
28
|
+
readonly ring: "#F66D36";
|
|
27
29
|
};
|
|
28
30
|
readonly brand: {
|
|
29
31
|
readonly orange: "#F66D36";
|
package/dist/tokens.d.ts
CHANGED
|
@@ -12,6 +12,7 @@ declare const appColors: {
|
|
|
12
12
|
readonly hairlineStrong: "#DADADA";
|
|
13
13
|
readonly accentDisplay: "#F55819";
|
|
14
14
|
readonly accentInk: "#C73F09";
|
|
15
|
+
readonly ring: "#EA580B";
|
|
15
16
|
};
|
|
16
17
|
readonly dark: {
|
|
17
18
|
readonly background: "#0A0A0A";
|
|
@@ -20,10 +21,11 @@ declare const appColors: {
|
|
|
20
21
|
readonly muted: "#1E1E1E";
|
|
21
22
|
readonly mutedForeground: "#A3A6AA";
|
|
22
23
|
readonly subtleForeground: "#8B8E93";
|
|
23
|
-
readonly border: "#
|
|
24
|
+
readonly border: "#2A2A2A";
|
|
24
25
|
readonly hairlineStrong: "#333333";
|
|
25
26
|
readonly accentDisplay: "#F66D36";
|
|
26
27
|
readonly accentInk: "#F0835A";
|
|
28
|
+
readonly ring: "#F66D36";
|
|
27
29
|
};
|
|
28
30
|
readonly brand: {
|
|
29
31
|
readonly orange: "#F66D36";
|
package/dist/tokens.js
CHANGED
|
@@ -14,7 +14,8 @@ var appColors = {
|
|
|
14
14
|
border: "#ECECEC",
|
|
15
15
|
hairlineStrong: "#DADADA",
|
|
16
16
|
accentDisplay: "#F55819",
|
|
17
|
-
accentInk: "#C73F09"
|
|
17
|
+
accentInk: "#C73F09",
|
|
18
|
+
ring: "#EA580B"
|
|
18
19
|
},
|
|
19
20
|
dark: {
|
|
20
21
|
background: "#0A0A0A",
|
|
@@ -23,10 +24,11 @@ var appColors = {
|
|
|
23
24
|
muted: "#1E1E1E",
|
|
24
25
|
mutedForeground: "#A3A6AA",
|
|
25
26
|
subtleForeground: "#8B8E93",
|
|
26
|
-
border: "#
|
|
27
|
+
border: "#2A2A2A",
|
|
27
28
|
hairlineStrong: "#333333",
|
|
28
29
|
accentDisplay: "#F66D36",
|
|
29
|
-
accentInk: "#F0835A"
|
|
30
|
+
accentInk: "#F0835A",
|
|
31
|
+
ring: "#F66D36"
|
|
30
32
|
},
|
|
31
33
|
brand: {
|
|
32
34
|
orange: "#F66D36",
|
package/dist/tokens.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tokens/index.ts"],"names":[],"mappings":";;;AAKO,IAAM,aAAA,GAAgB;AACtB,IAAM,MAAA,GAAS;AAEf,IAAM,SAAA,GAAY;AAAA,EACrB,KAAA,EAAO;AAAA,IACH,UAAA,EAAY,SAAA;AAAA,IACZ,UAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,eAAA,EAAiB,SAAA;AAAA,IACjB,gBAAA,EAAkB,SAAA;AAAA,IAClB,MAAA,EAAQ,SAAA;AAAA,IACR,cAAA,EAAgB,SAAA;AAAA,IAChB,aAAA,EAAe,SAAA;AAAA,IACf,SAAA,EAAW;AAAA,
|
|
1
|
+
{"version":3,"sources":["../src/tokens/index.ts"],"names":[],"mappings":";;;AAKO,IAAM,aAAA,GAAgB;AACtB,IAAM,MAAA,GAAS;AAEf,IAAM,SAAA,GAAY;AAAA,EACrB,KAAA,EAAO;AAAA,IACH,UAAA,EAAY,SAAA;AAAA,IACZ,UAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,eAAA,EAAiB,SAAA;AAAA,IACjB,gBAAA,EAAkB,SAAA;AAAA,IAClB,MAAA,EAAQ,SAAA;AAAA,IACR,cAAA,EAAgB,SAAA;AAAA,IAChB,aAAA,EAAe,SAAA;AAAA,IACf,SAAA,EAAW,SAAA;AAAA,IACX,IAAA,EAAM;AAAA,GACV;AAAA,EACA,IAAA,EAAM;AAAA,IACF,UAAA,EAAY,SAAA;AAAA,IACZ,UAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,eAAA,EAAiB,SAAA;AAAA,IACjB,gBAAA,EAAkB,SAAA;AAAA,IAClB,MAAA,EAAQ,SAAA;AAAA,IACR,cAAA,EAAgB,SAAA;AAAA,IAChB,aAAA,EAAe,SAAA;AAAA,IACf,SAAA,EAAW,SAAA;AAAA,IACX,IAAA,EAAM;AAAA,GACV;AAAA,EACA,KAAA,EAAO;AAAA,IACH,MAAA,EAAQ,SAAA;AAAA,IACR,WAAA,EAAa,SAAA;AAAA,IACb,UAAA,EAAY,SAAA;AAAA,IACZ,KAAA,EAAO,SAAA;AAAA,IACP,GAAA,EAAK,SAAA;AAAA,IACL,OAAA,EAAS;AAAA;AAEjB;AAEO,IAAM,QAAA,GAAW;AAAA,EACpB,IAAA,EAAM,yEAAA;AAAA,EACN,IAAA,EAAM;AACV","file":"tokens.js","sourcesContent":["/*\n * The palette as data, for places CSS variables cannot reach: OG images,\n * canvas, charts, email. Every value must equal its variable in\n * styles/tokens.css; scripts/check-mirror.mjs fails the build when one drifts.\n */\nexport const APP_ATTRIBUTE = 'data-oc-app';\nexport const APP_ID = 'ochk';\n\nexport const appColors = {\n light: {\n background: '#FAFAFA',\n foreground: '#0A0A0A',\n card: '#FFFFFF',\n muted: '#F2F2F2',\n mutedForeground: '#54585E',\n subtleForeground: '#686C72',\n border: '#ECECEC',\n hairlineStrong: '#DADADA',\n accentDisplay: '#F55819',\n accentInk: '#C73F09',\n ring: '#EA580B',\n },\n dark: {\n background: '#0A0A0A',\n foreground: '#FAFAFA',\n card: '#161616',\n muted: '#1E1E1E',\n mutedForeground: '#A3A6AA',\n subtleForeground: '#8B8E93',\n border: '#2A2A2A',\n hairlineStrong: '#333333',\n accentDisplay: '#F66D36',\n accentInk: '#F0835A',\n ring: '#F66D36',\n },\n brand: {\n orange: '#F66D36',\n orangeLight: '#FB933C',\n orangeDeep: '#EA580B',\n peach: '#FED8AB',\n ink: '#0A0A0A',\n inkCard: '#1E1E1E',\n },\n} as const;\n\nexport const appFonts = {\n sans: \"'OCA Inter', 'OCA Inter Fallback', ui-sans-serif, system-ui, sans-serif\",\n mono: \"'OCA JetBrains Mono', 'OCA JetBrains Mono Fallback', ui-monospace, monospace\",\n} as const;\n"]}
|
package/dist/tokens.mjs
CHANGED
|
@@ -12,7 +12,8 @@ var appColors = {
|
|
|
12
12
|
border: "#ECECEC",
|
|
13
13
|
hairlineStrong: "#DADADA",
|
|
14
14
|
accentDisplay: "#F55819",
|
|
15
|
-
accentInk: "#C73F09"
|
|
15
|
+
accentInk: "#C73F09",
|
|
16
|
+
ring: "#EA580B"
|
|
16
17
|
},
|
|
17
18
|
dark: {
|
|
18
19
|
background: "#0A0A0A",
|
|
@@ -21,10 +22,11 @@ var appColors = {
|
|
|
21
22
|
muted: "#1E1E1E",
|
|
22
23
|
mutedForeground: "#A3A6AA",
|
|
23
24
|
subtleForeground: "#8B8E93",
|
|
24
|
-
border: "#
|
|
25
|
+
border: "#2A2A2A",
|
|
25
26
|
hairlineStrong: "#333333",
|
|
26
27
|
accentDisplay: "#F66D36",
|
|
27
|
-
accentInk: "#F0835A"
|
|
28
|
+
accentInk: "#F0835A",
|
|
29
|
+
ring: "#F66D36"
|
|
28
30
|
},
|
|
29
31
|
brand: {
|
|
30
32
|
orange: "#F66D36",
|
package/dist/tokens.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tokens/index.ts"],"names":[],"mappings":";AAKO,IAAM,aAAA,GAAgB;AACtB,IAAM,MAAA,GAAS;AAEf,IAAM,SAAA,GAAY;AAAA,EACrB,KAAA,EAAO;AAAA,IACH,UAAA,EAAY,SAAA;AAAA,IACZ,UAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,eAAA,EAAiB,SAAA;AAAA,IACjB,gBAAA,EAAkB,SAAA;AAAA,IAClB,MAAA,EAAQ,SAAA;AAAA,IACR,cAAA,EAAgB,SAAA;AAAA,IAChB,aAAA,EAAe,SAAA;AAAA,IACf,SAAA,EAAW;AAAA,
|
|
1
|
+
{"version":3,"sources":["../src/tokens/index.ts"],"names":[],"mappings":";AAKO,IAAM,aAAA,GAAgB;AACtB,IAAM,MAAA,GAAS;AAEf,IAAM,SAAA,GAAY;AAAA,EACrB,KAAA,EAAO;AAAA,IACH,UAAA,EAAY,SAAA;AAAA,IACZ,UAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,eAAA,EAAiB,SAAA;AAAA,IACjB,gBAAA,EAAkB,SAAA;AAAA,IAClB,MAAA,EAAQ,SAAA;AAAA,IACR,cAAA,EAAgB,SAAA;AAAA,IAChB,aAAA,EAAe,SAAA;AAAA,IACf,SAAA,EAAW,SAAA;AAAA,IACX,IAAA,EAAM;AAAA,GACV;AAAA,EACA,IAAA,EAAM;AAAA,IACF,UAAA,EAAY,SAAA;AAAA,IACZ,UAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,eAAA,EAAiB,SAAA;AAAA,IACjB,gBAAA,EAAkB,SAAA;AAAA,IAClB,MAAA,EAAQ,SAAA;AAAA,IACR,cAAA,EAAgB,SAAA;AAAA,IAChB,aAAA,EAAe,SAAA;AAAA,IACf,SAAA,EAAW,SAAA;AAAA,IACX,IAAA,EAAM;AAAA,GACV;AAAA,EACA,KAAA,EAAO;AAAA,IACH,MAAA,EAAQ,SAAA;AAAA,IACR,WAAA,EAAa,SAAA;AAAA,IACb,UAAA,EAAY,SAAA;AAAA,IACZ,KAAA,EAAO,SAAA;AAAA,IACP,GAAA,EAAK,SAAA;AAAA,IACL,OAAA,EAAS;AAAA;AAEjB;AAEO,IAAM,QAAA,GAAW;AAAA,EACpB,IAAA,EAAM,yEAAA;AAAA,EACN,IAAA,EAAM;AACV","file":"tokens.mjs","sourcesContent":["/*\n * The palette as data, for places CSS variables cannot reach: OG images,\n * canvas, charts, email. Every value must equal its variable in\n * styles/tokens.css; scripts/check-mirror.mjs fails the build when one drifts.\n */\nexport const APP_ATTRIBUTE = 'data-oc-app';\nexport const APP_ID = 'ochk';\n\nexport const appColors = {\n light: {\n background: '#FAFAFA',\n foreground: '#0A0A0A',\n card: '#FFFFFF',\n muted: '#F2F2F2',\n mutedForeground: '#54585E',\n subtleForeground: '#686C72',\n border: '#ECECEC',\n hairlineStrong: '#DADADA',\n accentDisplay: '#F55819',\n accentInk: '#C73F09',\n ring: '#EA580B',\n },\n dark: {\n background: '#0A0A0A',\n foreground: '#FAFAFA',\n card: '#161616',\n muted: '#1E1E1E',\n mutedForeground: '#A3A6AA',\n subtleForeground: '#8B8E93',\n border: '#2A2A2A',\n hairlineStrong: '#333333',\n accentDisplay: '#F66D36',\n accentInk: '#F0835A',\n ring: '#F66D36',\n },\n brand: {\n orange: '#F66D36',\n orangeLight: '#FB933C',\n orangeDeep: '#EA580B',\n peach: '#FED8AB',\n ink: '#0A0A0A',\n inkCard: '#1E1E1E',\n },\n} as const;\n\nexport const appFonts = {\n sans: \"'OCA Inter', 'OCA Inter Fallback', ui-sans-serif, system-ui, sans-serif\",\n mono: \"'OCA JetBrains Mono', 'OCA JetBrains Mono Fallback', ui-monospace, monospace\",\n} as const;\n"]}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
import { i as ToolItem } from './tools-BggNN5DV.js';
|
|
4
|
+
import { j as ProtocolSlug } from './index-C6hDqOOS.js';
|
|
5
|
+
|
|
6
|
+
interface ShellNavItem {
|
|
7
|
+
href: string;
|
|
8
|
+
label: string;
|
|
9
|
+
icon?: ReactNode;
|
|
10
|
+
active?: boolean;
|
|
11
|
+
badge?: ReactNode;
|
|
12
|
+
}
|
|
13
|
+
interface ShellNavGroup {
|
|
14
|
+
label?: string;
|
|
15
|
+
items: ShellNavItem[];
|
|
16
|
+
}
|
|
17
|
+
interface ShellSection {
|
|
18
|
+
id: string;
|
|
19
|
+
label: string;
|
|
20
|
+
title?: string;
|
|
21
|
+
href: string;
|
|
22
|
+
groups: ShellNavGroup[];
|
|
23
|
+
}
|
|
24
|
+
declare function AppShell({ nav, sections, activeSection, page: pageOverride, persistent, home, account, banner, footer, children, className, }: {
|
|
25
|
+
nav?: ShellNavGroup[];
|
|
26
|
+
sections?: ShellSection[];
|
|
27
|
+
activeSection?: string;
|
|
28
|
+
page?: string;
|
|
29
|
+
persistent?: ShellNavGroup[];
|
|
30
|
+
home?: string;
|
|
31
|
+
account?: ReactNode;
|
|
32
|
+
banner?: ReactNode;
|
|
33
|
+
footer?: ReactNode;
|
|
34
|
+
children: ReactNode;
|
|
35
|
+
className?: string;
|
|
36
|
+
}): react.JSX.Element;
|
|
37
|
+
interface AccountMenuItem {
|
|
38
|
+
label: string;
|
|
39
|
+
href?: string;
|
|
40
|
+
onSelect?: () => void;
|
|
41
|
+
icon?: ReactNode;
|
|
42
|
+
destructive?: boolean;
|
|
43
|
+
}
|
|
44
|
+
declare function AccountMenu({ name, detail, items, nameFrom, }: {
|
|
45
|
+
name: string;
|
|
46
|
+
detail?: string;
|
|
47
|
+
items: (AccountMenuItem | 'separator')[];
|
|
48
|
+
nameFrom?: 'sm' | 'lg';
|
|
49
|
+
}): react.JSX.Element;
|
|
50
|
+
declare function ThemeToggle({ className }: {
|
|
51
|
+
className?: string;
|
|
52
|
+
}): react.JSX.Element;
|
|
53
|
+
|
|
54
|
+
type SessionState = 'checking' | 'in' | 'out' | 'unknown';
|
|
55
|
+
declare const OCHK_APP_ACCOUNT = "https://ochk.app/me/account";
|
|
56
|
+
declare function SessionAccountView({ state, name, detail, items, signInHref, signInLabel, accountHref, onSignOut, nameFrom, }: {
|
|
57
|
+
state: SessionState;
|
|
58
|
+
name?: string;
|
|
59
|
+
detail?: string;
|
|
60
|
+
items?: (AccountMenuItem | 'separator')[];
|
|
61
|
+
signInHref: string;
|
|
62
|
+
signInLabel?: string;
|
|
63
|
+
accountHref?: string;
|
|
64
|
+
onSignOut?: () => void;
|
|
65
|
+
nameFrom?: 'sm' | 'lg';
|
|
66
|
+
}): react.JSX.Element;
|
|
67
|
+
interface ToolShellProps {
|
|
68
|
+
protocol: ProtocolSlug;
|
|
69
|
+
tools: readonly ToolItem[];
|
|
70
|
+
home?: string;
|
|
71
|
+
account?: ReactNode;
|
|
72
|
+
rail?: boolean;
|
|
73
|
+
railFooter?: ReactNode;
|
|
74
|
+
variant?: 'tool' | 'app';
|
|
75
|
+
banner?: ReactNode;
|
|
76
|
+
footer?: ReactNode | false;
|
|
77
|
+
children: ReactNode;
|
|
78
|
+
}
|
|
79
|
+
declare function ToolShell({ protocol, tools, home, account, rail, railFooter, variant, banner, footer, children, }: ToolShellProps): react.JSX.Element;
|
|
80
|
+
|
|
81
|
+
export { AccountMenu as A, OCHK_APP_ACCOUNT as O, SessionAccountView as S, ThemeToggle as T, type AccountMenuItem as a, AppShell as b, type SessionState as c, type ShellNavGroup as d, type ShellNavItem as e, type ShellSection as f, ToolShell as g, type ToolShellProps as h };
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
import { i as ToolItem } from './tools-DFIxIj5p.mjs';
|
|
4
|
+
import { j as ProtocolSlug } from './index-C6hDqOOS.mjs';
|
|
5
|
+
|
|
6
|
+
interface ShellNavItem {
|
|
7
|
+
href: string;
|
|
8
|
+
label: string;
|
|
9
|
+
icon?: ReactNode;
|
|
10
|
+
active?: boolean;
|
|
11
|
+
badge?: ReactNode;
|
|
12
|
+
}
|
|
13
|
+
interface ShellNavGroup {
|
|
14
|
+
label?: string;
|
|
15
|
+
items: ShellNavItem[];
|
|
16
|
+
}
|
|
17
|
+
interface ShellSection {
|
|
18
|
+
id: string;
|
|
19
|
+
label: string;
|
|
20
|
+
title?: string;
|
|
21
|
+
href: string;
|
|
22
|
+
groups: ShellNavGroup[];
|
|
23
|
+
}
|
|
24
|
+
declare function AppShell({ nav, sections, activeSection, page: pageOverride, persistent, home, account, banner, footer, children, className, }: {
|
|
25
|
+
nav?: ShellNavGroup[];
|
|
26
|
+
sections?: ShellSection[];
|
|
27
|
+
activeSection?: string;
|
|
28
|
+
page?: string;
|
|
29
|
+
persistent?: ShellNavGroup[];
|
|
30
|
+
home?: string;
|
|
31
|
+
account?: ReactNode;
|
|
32
|
+
banner?: ReactNode;
|
|
33
|
+
footer?: ReactNode;
|
|
34
|
+
children: ReactNode;
|
|
35
|
+
className?: string;
|
|
36
|
+
}): react.JSX.Element;
|
|
37
|
+
interface AccountMenuItem {
|
|
38
|
+
label: string;
|
|
39
|
+
href?: string;
|
|
40
|
+
onSelect?: () => void;
|
|
41
|
+
icon?: ReactNode;
|
|
42
|
+
destructive?: boolean;
|
|
43
|
+
}
|
|
44
|
+
declare function AccountMenu({ name, detail, items, nameFrom, }: {
|
|
45
|
+
name: string;
|
|
46
|
+
detail?: string;
|
|
47
|
+
items: (AccountMenuItem | 'separator')[];
|
|
48
|
+
nameFrom?: 'sm' | 'lg';
|
|
49
|
+
}): react.JSX.Element;
|
|
50
|
+
declare function ThemeToggle({ className }: {
|
|
51
|
+
className?: string;
|
|
52
|
+
}): react.JSX.Element;
|
|
53
|
+
|
|
54
|
+
type SessionState = 'checking' | 'in' | 'out' | 'unknown';
|
|
55
|
+
declare const OCHK_APP_ACCOUNT = "https://ochk.app/me/account";
|
|
56
|
+
declare function SessionAccountView({ state, name, detail, items, signInHref, signInLabel, accountHref, onSignOut, nameFrom, }: {
|
|
57
|
+
state: SessionState;
|
|
58
|
+
name?: string;
|
|
59
|
+
detail?: string;
|
|
60
|
+
items?: (AccountMenuItem | 'separator')[];
|
|
61
|
+
signInHref: string;
|
|
62
|
+
signInLabel?: string;
|
|
63
|
+
accountHref?: string;
|
|
64
|
+
onSignOut?: () => void;
|
|
65
|
+
nameFrom?: 'sm' | 'lg';
|
|
66
|
+
}): react.JSX.Element;
|
|
67
|
+
interface ToolShellProps {
|
|
68
|
+
protocol: ProtocolSlug;
|
|
69
|
+
tools: readonly ToolItem[];
|
|
70
|
+
home?: string;
|
|
71
|
+
account?: ReactNode;
|
|
72
|
+
rail?: boolean;
|
|
73
|
+
railFooter?: ReactNode;
|
|
74
|
+
variant?: 'tool' | 'app';
|
|
75
|
+
banner?: ReactNode;
|
|
76
|
+
footer?: ReactNode | false;
|
|
77
|
+
children: ReactNode;
|
|
78
|
+
}
|
|
79
|
+
declare function ToolShell({ protocol, tools, home, account, rail, railFooter, variant, banner, footer, children, }: ToolShellProps): react.JSX.Element;
|
|
80
|
+
|
|
81
|
+
export { AccountMenu as A, OCHK_APP_ACCOUNT as O, SessionAccountView as S, ThemeToggle as T, type AccountMenuItem as a, AppShell as b, type SessionState as c, type ShellNavGroup as d, type ShellNavItem as e, type ShellSection as f, ToolShell as g, type ToolShellProps as h };
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
import { Network } from './format.js';
|
|
4
|
+
|
|
5
|
+
declare function ArtifactView({ content, title, filename, mime, defaultView, maxLines, className, }: {
|
|
6
|
+
content: string;
|
|
7
|
+
title?: ReactNode;
|
|
8
|
+
filename?: string;
|
|
9
|
+
mime?: string;
|
|
10
|
+
defaultView?: 'formatted' | 'raw';
|
|
11
|
+
maxLines?: number;
|
|
12
|
+
className?: string;
|
|
13
|
+
}): react.JSX.Element;
|
|
14
|
+
interface ChosenFile {
|
|
15
|
+
name: string;
|
|
16
|
+
size: number;
|
|
17
|
+
type?: string;
|
|
18
|
+
}
|
|
19
|
+
declare function DropZone({ onFile, onText, accept, title, hint, privacy, file, progress, progressLabel, onClear, error, disabled, className, }: {
|
|
20
|
+
onFile: (file: File) => void;
|
|
21
|
+
onText?: (text: string) => void;
|
|
22
|
+
accept?: string;
|
|
23
|
+
title?: ReactNode;
|
|
24
|
+
hint?: ReactNode;
|
|
25
|
+
privacy?: ReactNode;
|
|
26
|
+
file?: ChosenFile | null;
|
|
27
|
+
progress?: number | null;
|
|
28
|
+
progressLabel?: ReactNode;
|
|
29
|
+
onClear?: () => void;
|
|
30
|
+
error?: ReactNode;
|
|
31
|
+
disabled?: boolean;
|
|
32
|
+
className?: string;
|
|
33
|
+
}): react.JSX.Element;
|
|
34
|
+
type SectionStatus = 'done' | 'current' | 'upcoming' | 'blocked';
|
|
35
|
+
declare function FormSection({ n, title, hint, status, action, as: Heading, id, children, className, }: {
|
|
36
|
+
n?: number;
|
|
37
|
+
title: ReactNode;
|
|
38
|
+
hint?: ReactNode;
|
|
39
|
+
status?: SectionStatus;
|
|
40
|
+
action?: ReactNode;
|
|
41
|
+
as?: 'h2' | 'h3';
|
|
42
|
+
id?: string;
|
|
43
|
+
children?: ReactNode;
|
|
44
|
+
className?: string;
|
|
45
|
+
}): react.JSX.Element;
|
|
46
|
+
type StateTone = 'good' | 'attention' | 'bad' | 'neutral' | 'quiet';
|
|
47
|
+
declare function StateBadge({ tone, children, title, className, }: {
|
|
48
|
+
tone?: StateTone;
|
|
49
|
+
children: ReactNode;
|
|
50
|
+
title?: string;
|
|
51
|
+
className?: string;
|
|
52
|
+
}): react.JSX.Element;
|
|
53
|
+
interface StateDef {
|
|
54
|
+
label: string;
|
|
55
|
+
tone: StateTone;
|
|
56
|
+
hint?: string;
|
|
57
|
+
}
|
|
58
|
+
declare function createStateBadge<S extends string>(states: Record<S, StateDef>): ({ state, className }: {
|
|
59
|
+
state: S;
|
|
60
|
+
className?: string;
|
|
61
|
+
}) => react.JSX.Element;
|
|
62
|
+
declare function BlockHeight({ height, label, link, network, className, }: {
|
|
63
|
+
height: number;
|
|
64
|
+
label?: boolean;
|
|
65
|
+
link?: boolean;
|
|
66
|
+
network?: Network;
|
|
67
|
+
className?: string;
|
|
68
|
+
}): react.JSX.Element;
|
|
69
|
+
type AnchorState = 'anchored' | 'pending' | 'unverified' | 'none' | 'fail';
|
|
70
|
+
declare function AnchorStatus({ state, blockHeight, blockTime, submittedAt, calendar, message, network, variant, className, }: {
|
|
71
|
+
state: AnchorState;
|
|
72
|
+
blockHeight?: number;
|
|
73
|
+
blockTime?: number | Date | string;
|
|
74
|
+
submittedAt?: number | Date | string;
|
|
75
|
+
calendar?: string;
|
|
76
|
+
message?: ReactNode;
|
|
77
|
+
network?: Network;
|
|
78
|
+
variant?: 'detail' | 'badge';
|
|
79
|
+
className?: string;
|
|
80
|
+
}): react.JSX.Element;
|
|
81
|
+
declare function BlockCountdown({ target, tip, from, reached, minutesPerBlock, network, className, }: {
|
|
82
|
+
target: number;
|
|
83
|
+
tip?: number | null;
|
|
84
|
+
from?: number;
|
|
85
|
+
reached?: string;
|
|
86
|
+
minutesPerBlock?: number;
|
|
87
|
+
network?: Network;
|
|
88
|
+
className?: string;
|
|
89
|
+
}): react.JSX.Element;
|
|
90
|
+
declare function Meter({ value, max, ghost, label, figure, tone, size, className, }: {
|
|
91
|
+
value: number;
|
|
92
|
+
max: number;
|
|
93
|
+
ghost?: number;
|
|
94
|
+
label: ReactNode;
|
|
95
|
+
figure?: ReactNode;
|
|
96
|
+
tone?: 'ink' | 'brand';
|
|
97
|
+
size?: 'md' | 'sm';
|
|
98
|
+
className?: string;
|
|
99
|
+
}): react.JSX.Element;
|
|
100
|
+
interface FilterOption<T extends string> {
|
|
101
|
+
value: T;
|
|
102
|
+
label: ReactNode;
|
|
103
|
+
count?: number;
|
|
104
|
+
}
|
|
105
|
+
declare function FilterChips<T extends string>({ options, value, onChange, label, className, }: {
|
|
106
|
+
options: FilterOption<T>[];
|
|
107
|
+
label: string;
|
|
108
|
+
className?: string;
|
|
109
|
+
} & ({
|
|
110
|
+
multiple?: false;
|
|
111
|
+
value: NoInfer<T>;
|
|
112
|
+
onChange: (v: NoInfer<T>) => void;
|
|
113
|
+
} | {
|
|
114
|
+
multiple: true;
|
|
115
|
+
value: NoInfer<T>[];
|
|
116
|
+
onChange: (v: NoInfer<T>[]) => void;
|
|
117
|
+
})): react.JSX.Element;
|
|
118
|
+
interface ToolItem {
|
|
119
|
+
href: string;
|
|
120
|
+
label: string;
|
|
121
|
+
icon?: ReactNode;
|
|
122
|
+
description?: ReactNode;
|
|
123
|
+
active?: boolean;
|
|
124
|
+
}
|
|
125
|
+
declare function ToolGrid({ tools, as: Heading, className, }: {
|
|
126
|
+
tools: readonly ToolItem[];
|
|
127
|
+
as?: 'h2' | 'h3';
|
|
128
|
+
className?: string;
|
|
129
|
+
}): react.JSX.Element;
|
|
130
|
+
|
|
131
|
+
export { type AnchorState as A, BlockCountdown as B, type ChosenFile as C, DropZone as D, FilterChips as F, Meter as M, type SectionStatus as S, ToolGrid as T, AnchorStatus as a, ArtifactView as b, BlockHeight as c, type FilterOption as d, FormSection as e, StateBadge as f, type StateDef as g, type StateTone as h, type ToolItem as i, createStateBadge as j };
|