@odla-ai/ui 0.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 +88 -0
- package/css/components/buttons.css +118 -0
- package/css/components/cards.css +66 -0
- package/css/components/chart.css +24 -0
- package/css/components/chat.css +167 -0
- package/css/components/feedback.css +77 -0
- package/css/components/forms.css +132 -0
- package/css/components/nav.css +96 -0
- package/css/components/table.css +34 -0
- package/css/tokens.css +138 -0
- package/dist/index.d.ts +50 -0
- package/dist/index.js +72 -0
- package/dist/index.js.map +1 -0
- package/fonts/editorial.css +46 -0
- package/fonts/fira-code.css +2 -0
- package/fonts/lora.css +2 -0
- package/fonts/plex.css +4 -0
- package/fonts/satoshi.css +2 -0
- package/fonts/system.css +3 -0
- package/index.css +14 -0
- package/js/canvas.js +113 -0
- package/js/index.js +24 -0
- package/js/palette.js +37 -0
- package/js/theme.js +51 -0
- package/js/tokens.js +104 -0
- package/llms.txt +201 -0
- package/odla-ui.css +863 -0
- package/package.json +73 -0
- package/themes/chalk/styles.css +720 -0
- package/themes/chalk/theme.json +6 -0
- package/themes/chalk/ui.css +51 -0
- package/themes/clay/styles.css +726 -0
- package/themes/clay/theme.json +6 -0
- package/themes/clay/ui.css +40 -0
- package/themes/juniper/styles.css +660 -0
- package/themes/juniper/theme.json +6 -0
- package/themes/juniper/ui.css +50 -0
- package/themes/paper/styles.css +129 -0
- package/themes/paper/theme.json +6 -0
- package/themes/paper/ui.css +30 -0
- package/themes/salt/styles.css +728 -0
- package/themes/salt/theme.json +6 -0
- package/themes/salt/ui.css +48 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/* juniper/ui.css — maps juniper onto the @odla-ai/ui token contract.
|
|
2
|
+
Load alongside styles.css. Pure var() aliases track dark mode for free;
|
|
3
|
+
any LITERAL value must be overridden identically in BOTH dark blocks. */
|
|
4
|
+
:root {
|
|
5
|
+
--ui-bg: var(--bg);
|
|
6
|
+
--ui-surface: var(--surface);
|
|
7
|
+
--ui-surface-2: var(--code-bg);
|
|
8
|
+
--ui-text: var(--text);
|
|
9
|
+
--ui-text-muted: var(--text-secondary);
|
|
10
|
+
--ui-text-faint: #8c8c8c;
|
|
11
|
+
--ui-border: var(--border);
|
|
12
|
+
--ui-border-strong: color-mix(in srgb, var(--text) 25%, var(--bg));
|
|
13
|
+
--ui-accent: var(--accent);
|
|
14
|
+
--ui-accent-strong: #3b1a75;
|
|
15
|
+
--ui-accent-soft: color-mix(in srgb, var(--accent) 10%, transparent);
|
|
16
|
+
--ui-on-accent: #ffffff;
|
|
17
|
+
--ui-good: #1a7f4b;
|
|
18
|
+
--ui-good-soft: color-mix(in srgb, var(--ui-good) 12%, transparent);
|
|
19
|
+
--ui-warn: #92400e;
|
|
20
|
+
--ui-warn-soft: color-mix(in srgb, var(--ui-warn) 12%, transparent);
|
|
21
|
+
--ui-danger: #b91c1c;
|
|
22
|
+
--ui-danger-soft: color-mix(in srgb, var(--ui-danger) 10%, transparent);
|
|
23
|
+
--ui-code-bg: var(--code-bg);
|
|
24
|
+
--ui-code-text: var(--code-text);
|
|
25
|
+
--ui-shadow: none;
|
|
26
|
+
--ui-font-sans: var(--font-sans);
|
|
27
|
+
--ui-font-serif: var(--font-body);
|
|
28
|
+
--ui-font-mono: var(--font-mono);
|
|
29
|
+
--ui-font-display: var(--font-titles);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
[data-theme="dark"] {
|
|
33
|
+
--ui-text-faint: #737373;
|
|
34
|
+
--ui-accent-strong: #e4dcfd;
|
|
35
|
+
--ui-on-accent: #1a1032;
|
|
36
|
+
--ui-good: #7bc98a;
|
|
37
|
+
--ui-warn: #d8b48a;
|
|
38
|
+
--ui-danger: #ef8783;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
@media (prefers-color-scheme: dark) {
|
|
42
|
+
:root:not([data-theme="light"]) {
|
|
43
|
+
--ui-text-faint: #737373;
|
|
44
|
+
--ui-accent-strong: #e4dcfd;
|
|
45
|
+
--ui-on-accent: #1a1032;
|
|
46
|
+
--ui-good: #7bc98a;
|
|
47
|
+
--ui-warn: #d8b48a;
|
|
48
|
+
--ui-danger: #ef8783;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/* ══════════════════════════════════════════════════════════════
|
|
2
|
+
PAPER — warm paper dashboard shell
|
|
3
|
+
IBM Plex Sans UI · IBM Plex Mono data · terracotta accent
|
|
4
|
+
Light: white panels on parchment, clay accent (Atlas scheme).
|
|
5
|
+
Dark: warm charcoal, embered terracotta — never pure black.
|
|
6
|
+
Fonts load separately via @odla-ai/ui/fonts/plex.css.
|
|
7
|
+
Unlike the blog themes, paper is tokens + base only: components
|
|
8
|
+
come from the ui class sheets, layout from the app.
|
|
9
|
+
══════════════════════════════════════════════════════════════ */
|
|
10
|
+
|
|
11
|
+
/* ─── Tokens ─── */
|
|
12
|
+
:root {
|
|
13
|
+
--bg: #f6f1e9;
|
|
14
|
+
--panel: #ffffff;
|
|
15
|
+
--panel-2: #f1ebe0;
|
|
16
|
+
--border: #e4dac9;
|
|
17
|
+
--text: #2c2722;
|
|
18
|
+
--muted: #6f655a;
|
|
19
|
+
--faint: #a99d8c;
|
|
20
|
+
--accent: #a8572e;
|
|
21
|
+
--accent-deep: #8c4623;
|
|
22
|
+
--accent-dim: rgba(168, 87, 46, 0.1);
|
|
23
|
+
--good: #5f7d52;
|
|
24
|
+
--good-dim: rgba(95, 125, 82, 0.12);
|
|
25
|
+
--warn: #b08433;
|
|
26
|
+
--danger: #b3402e;
|
|
27
|
+
--mono: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
|
|
28
|
+
--sans: "IBM Plex Sans", system-ui, -apple-system, Segoe UI, Roboto, sans-serif;
|
|
29
|
+
--shadow: 0 1px 2px rgba(44, 39, 34, 0.04), 0 8px 24px rgba(44, 39, 34, 0.06);
|
|
30
|
+
|
|
31
|
+
--code-bg: #f1ebe0;
|
|
32
|
+
--code-text: #3a332b;
|
|
33
|
+
--hl-keyword: #a8572e;
|
|
34
|
+
--hl-string: #5f7d52;
|
|
35
|
+
--hl-comment: #a99d8c;
|
|
36
|
+
--hl-number: #b08433;
|
|
37
|
+
--hl-title: #2c2722;
|
|
38
|
+
--hl-attr: #5f7da8;
|
|
39
|
+
--hl-type: #7d5fa8;
|
|
40
|
+
--hl-meta: #8a6d9e;
|
|
41
|
+
--hl-addition: #5f7d52;
|
|
42
|
+
--hl-deletion: #a8402e;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
[data-theme="dark"] {
|
|
46
|
+
--bg: #211d19;
|
|
47
|
+
--panel: #2a251f;
|
|
48
|
+
--panel-2: #332d26;
|
|
49
|
+
--border: #3e362c;
|
|
50
|
+
--text: #ece5da;
|
|
51
|
+
--muted: #b3a794;
|
|
52
|
+
--faint: #857a6a;
|
|
53
|
+
--accent: #d07a4d;
|
|
54
|
+
--accent-deep: #de8f66;
|
|
55
|
+
--accent-dim: rgba(208, 122, 77, 0.14);
|
|
56
|
+
--good: #8aa87c;
|
|
57
|
+
--good-dim: rgba(138, 168, 124, 0.16);
|
|
58
|
+
--warn: #c9a25a;
|
|
59
|
+
--danger: #d0684d;
|
|
60
|
+
--shadow: 0 1px 2px rgba(0, 0, 0, 0.25), 0 8px 24px rgba(0, 0, 0, 0.3);
|
|
61
|
+
|
|
62
|
+
--code-bg: #2a251f;
|
|
63
|
+
--code-text: #ddd5c8;
|
|
64
|
+
--hl-keyword: #d07a4d;
|
|
65
|
+
--hl-string: #8aa87c;
|
|
66
|
+
--hl-comment: #857a6a;
|
|
67
|
+
--hl-number: #c9a25a;
|
|
68
|
+
--hl-title: #ece5da;
|
|
69
|
+
--hl-attr: #8ba3c7;
|
|
70
|
+
--hl-type: #a78bc9;
|
|
71
|
+
--hl-meta: #ab8fbd;
|
|
72
|
+
--hl-addition: #8aa87c;
|
|
73
|
+
--hl-deletion: #d0684d;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
@media (prefers-color-scheme: dark) {
|
|
77
|
+
:root:not([data-theme="light"]) {
|
|
78
|
+
--bg: #211d19;
|
|
79
|
+
--panel: #2a251f;
|
|
80
|
+
--panel-2: #332d26;
|
|
81
|
+
--border: #3e362c;
|
|
82
|
+
--text: #ece5da;
|
|
83
|
+
--muted: #b3a794;
|
|
84
|
+
--faint: #857a6a;
|
|
85
|
+
--accent: #d07a4d;
|
|
86
|
+
--accent-deep: #de8f66;
|
|
87
|
+
--accent-dim: rgba(208, 122, 77, 0.14);
|
|
88
|
+
--good: #8aa87c;
|
|
89
|
+
--good-dim: rgba(138, 168, 124, 0.16);
|
|
90
|
+
--warn: #c9a25a;
|
|
91
|
+
--danger: #d0684d;
|
|
92
|
+
--shadow: 0 1px 2px rgba(0, 0, 0, 0.25), 0 8px 24px rgba(0, 0, 0, 0.3);
|
|
93
|
+
|
|
94
|
+
--code-bg: #2a251f;
|
|
95
|
+
--code-text: #ddd5c8;
|
|
96
|
+
--hl-keyword: #d07a4d;
|
|
97
|
+
--hl-string: #8aa87c;
|
|
98
|
+
--hl-comment: #857a6a;
|
|
99
|
+
--hl-number: #c9a25a;
|
|
100
|
+
--hl-title: #ece5da;
|
|
101
|
+
--hl-attr: #8ba3c7;
|
|
102
|
+
--hl-type: #a78bc9;
|
|
103
|
+
--hl-meta: #ab8fbd;
|
|
104
|
+
--hl-addition: #8aa87c;
|
|
105
|
+
--hl-deletion: #d0684d;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/* ─── Base ─── */
|
|
110
|
+
* {
|
|
111
|
+
box-sizing: border-box;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
body {
|
|
115
|
+
margin: 0;
|
|
116
|
+
font-family: var(--sans);
|
|
117
|
+
background: var(--bg);
|
|
118
|
+
color: var(--text);
|
|
119
|
+
-webkit-font-smoothing: antialiased;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
a {
|
|
123
|
+
color: var(--accent);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
code,
|
|
127
|
+
pre {
|
|
128
|
+
font-family: var(--mono);
|
|
129
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "paper",
|
|
3
|
+
"label": "Paper",
|
|
4
|
+
"description": "Warm paper dashboard palette — white panels on parchment, terracotta accent, olive/amber status colors. Drawn from the odla Studio (Atlas color scheme). Tokens-first: pair it with the ui component classes; it does not style blog template selectors.",
|
|
5
|
+
"fonts": "IBM Plex Sans + IBM Plex Mono (Google Fonts) — load via @odla-ai/ui/fonts/plex.css"
|
|
6
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/* paper/ui.css — maps paper onto the @odla-ai/ui token contract.
|
|
2
|
+
Load alongside styles.css. Every alias is var()-based (or constant),
|
|
3
|
+
so dark mode tracks automatically — no dark blocks needed here. */
|
|
4
|
+
:root {
|
|
5
|
+
--ui-bg: var(--bg);
|
|
6
|
+
--ui-surface: var(--panel);
|
|
7
|
+
--ui-surface-2: var(--panel-2);
|
|
8
|
+
--ui-text: var(--text);
|
|
9
|
+
--ui-text-muted: var(--muted);
|
|
10
|
+
--ui-text-faint: var(--faint);
|
|
11
|
+
--ui-border: var(--border);
|
|
12
|
+
--ui-border-strong: color-mix(in srgb, var(--text) 24%, var(--bg));
|
|
13
|
+
--ui-accent: var(--accent);
|
|
14
|
+
--ui-accent-strong: var(--accent-deep);
|
|
15
|
+
--ui-accent-soft: var(--accent-dim);
|
|
16
|
+
--ui-on-accent: #ffffff;
|
|
17
|
+
--ui-good: var(--good);
|
|
18
|
+
--ui-good-soft: var(--good-dim);
|
|
19
|
+
--ui-warn: var(--warn);
|
|
20
|
+
--ui-warn-soft: color-mix(in srgb, var(--warn) 13%, transparent);
|
|
21
|
+
--ui-danger: var(--danger);
|
|
22
|
+
--ui-danger-soft: color-mix(in srgb, var(--danger) 11%, transparent);
|
|
23
|
+
--ui-code-bg: var(--code-bg);
|
|
24
|
+
--ui-code-text: var(--code-text);
|
|
25
|
+
--ui-shadow: var(--shadow);
|
|
26
|
+
--ui-font-sans: var(--sans);
|
|
27
|
+
--ui-font-serif: var(--sans);
|
|
28
|
+
--ui-font-mono: var(--mono);
|
|
29
|
+
--ui-font-display: var(--sans);
|
|
30
|
+
}
|