brainzlab-ui 0.1.1 → 0.2.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +14 -0
- data/README.md +21 -3
- data/app/assets/stylesheets/brainzlab_ui/components.css +52 -0
- data/app/assets/stylesheets/brainzlab_ui/tokens.css +58 -7
- data/lib/brainzlab/components/maturity_badge.rb +32 -0
- data/lib/brainzlab/ui/version.rb +1 -1
- data/lib/brainzlab/ui.rb +1 -0
- metadata +2 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 273e92114173d155dbb570ceba73de87bd968282e5e0c942baf463ad2f225543
|
|
4
|
+
data.tar.gz: add3d18ca6a9ade3cb84728c49bea134bdbda89b5e776dacd9076f042341d065
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e7fdfdaea5814ccb02cd9b055f998fa221bfdc1b75c4a3ce69a5276433671c0e29fb736fa67793665a922119cb1909bed9f62125fb4771a5b7b429eefdc85d4c
|
|
7
|
+
data.tar.gz: 77dbb32022fd4ac9f4973c91c99719a095d29fa7f73147db797174f37e7b97453e04346f4aed717111d8309bedb189c57aea2c87ed83e909287c62ae0aa2d90c
|
data/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,20 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## [0.2.0] - 2026-06-07
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
- **Service brand tokens** for all 16 platform services (Synapse, Nexus, Platform,
|
|
9
|
+
Signal, Beacon, Vision, Sentinel, Cortex, Dendrite, Nerve, Axon, Recall, Reflex,
|
|
10
|
+
Pulse, Flux, Vault) plus the Plexus engine, grouped by platform layer.
|
|
11
|
+
- **Layer accent tokens** (`--color-layer-ai|hub|obs|data|foundation`) so service
|
|
12
|
+
pages stay layer-coded while reading as one family.
|
|
13
|
+
- **Data-viz categorical palette** (`--color-viz-1..8`) for charts and dashboards
|
|
14
|
+
across every sub-app.
|
|
15
|
+
- **MaturityBadge** Phlex component + `.badge-maturity` / `.badge-disponible` /
|
|
16
|
+
`.badge-beta` / `.badge-proximamente` CSS (light + dark) for the app launcher
|
|
17
|
+
and service landing pages.
|
|
18
|
+
|
|
5
19
|
## [0.1.0] - 2024-12-27
|
|
6
20
|
|
|
7
21
|
### Added
|
data/README.md
CHANGED
|
@@ -52,9 +52,26 @@ The design system follows Anthropic/Claude-inspired aesthetics with warm earth t
|
|
|
52
52
|
|
|
53
53
|
| Token | Value | Usage |
|
|
54
54
|
|-------|-------|-------|
|
|
55
|
-
| `--color-primary-500` | #
|
|
56
|
-
| `--color-cream-50` | #
|
|
57
|
-
| `--color-ink-900` | #
|
|
55
|
+
| `--color-primary-500` | #C77B58 | Brand terracotta |
|
|
56
|
+
| `--color-cream-50` | #FAF9F7 | Background |
|
|
57
|
+
| `--color-ink-900` | #3D3833 | Text |
|
|
58
|
+
|
|
59
|
+
#### Service & layer tokens
|
|
60
|
+
|
|
61
|
+
Each of the 16 platform services has a brand accent (`--color-<service>`, e.g.
|
|
62
|
+
`--color-signal`, `--color-vault`), grouped by platform layer. Service landing
|
|
63
|
+
pages and dashboards tint with the **layer accent** so the family stays coherent
|
|
64
|
+
while staying layer-coded:
|
|
65
|
+
|
|
66
|
+
| Layer | Token | Services |
|
|
67
|
+
|-------|-------|----------|
|
|
68
|
+
| L5 — AI | `--color-layer-ai` | Synapse, Nexus |
|
|
69
|
+
| L4 — Hub | `--color-layer-hub` | Platform |
|
|
70
|
+
| L3 — Observability | `--color-layer-obs` | Signal, Beacon, Vision, Sentinel, Cortex, Dendrite, Nerve, Axon |
|
|
71
|
+
| L2 — Data | `--color-layer-data` | Recall, Reflex, Pulse, Flux |
|
|
72
|
+
| L1 — Foundation | `--color-layer-foundation` | Vault |
|
|
73
|
+
|
|
74
|
+
Charts and dashboards use the categorical data-viz palette `--color-viz-1` … `--color-viz-8`.
|
|
58
75
|
|
|
59
76
|
#### Typography
|
|
60
77
|
|
|
@@ -92,6 +109,7 @@ The design system follows Anthropic/Claude-inspired aesthetics with warm earth t
|
|
|
92
109
|
| **Button** | primary, secondary, ghost, danger |
|
|
93
110
|
| **Card** | default, bordered, elevated |
|
|
94
111
|
| **Badge** | default, success, warning, error, info |
|
|
112
|
+
| **MaturityBadge** | disponible, beta, proximamente |
|
|
95
113
|
| **Alert** | info, success, warning, error |
|
|
96
114
|
| **Input** | text, email, password, number |
|
|
97
115
|
| **Select** | default, multi |
|
|
@@ -280,6 +280,43 @@
|
|
|
280
280
|
color: var(--color-ink-600);
|
|
281
281
|
}
|
|
282
282
|
|
|
283
|
+
/* ----------------------------------------
|
|
284
|
+
MATURITY BADGES
|
|
285
|
+
----------------------------------------
|
|
286
|
+
Service maturity signal used on landing pages and the
|
|
287
|
+
app launcher. Honesty rule: never imply a scaffold is
|
|
288
|
+
production-ready — "proximamente" must read as not-yet.
|
|
289
|
+
*/
|
|
290
|
+
.badge-maturity {
|
|
291
|
+
text-transform: uppercase;
|
|
292
|
+
letter-spacing: 0.04em;
|
|
293
|
+
font-size: 0.6875rem;
|
|
294
|
+
font-weight: 600;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
.badge-maturity::before {
|
|
298
|
+
content: '';
|
|
299
|
+
width: 0.4375rem;
|
|
300
|
+
height: 0.4375rem;
|
|
301
|
+
border-radius: 9999px;
|
|
302
|
+
background: currentColor;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
.badge-disponible {
|
|
306
|
+
background: rgba(34, 197, 94, 0.1);
|
|
307
|
+
color: var(--color-success-600);
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
.badge-beta {
|
|
311
|
+
background: rgba(59, 130, 246, 0.1);
|
|
312
|
+
color: var(--color-info-600);
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
.badge-proximamente {
|
|
316
|
+
background: var(--color-cream-200);
|
|
317
|
+
color: var(--color-ink-500);
|
|
318
|
+
}
|
|
319
|
+
|
|
283
320
|
/* ----------------------------------------
|
|
284
321
|
NAVIGATION
|
|
285
322
|
---------------------------------------- */
|
|
@@ -828,6 +865,21 @@ input[type="radio"]:focus-visible {
|
|
|
828
865
|
color: var(--color-dark-text-muted);
|
|
829
866
|
}
|
|
830
867
|
|
|
868
|
+
.dark .badge-disponible {
|
|
869
|
+
background: rgba(34, 197, 94, 0.2);
|
|
870
|
+
color: var(--color-success-400);
|
|
871
|
+
}
|
|
872
|
+
|
|
873
|
+
.dark .badge-beta {
|
|
874
|
+
background: rgba(59, 130, 246, 0.2);
|
|
875
|
+
color: var(--color-info-400);
|
|
876
|
+
}
|
|
877
|
+
|
|
878
|
+
.dark .badge-proximamente {
|
|
879
|
+
background: var(--color-dark-surface-light);
|
|
880
|
+
color: var(--color-dark-text-muted);
|
|
881
|
+
}
|
|
882
|
+
|
|
831
883
|
/* ----------------------------------------
|
|
832
884
|
DARK MODE - NAVIGATION
|
|
833
885
|
---------------------------------------- */
|
|
@@ -65,13 +65,64 @@
|
|
|
65
65
|
--color-ink-900: #3D3833;
|
|
66
66
|
--color-ink-950: #1a1a1a;
|
|
67
67
|
|
|
68
|
-
/*
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
68
|
+
/* ============================================
|
|
69
|
+
Service Brand Colors (the 16-service platform)
|
|
70
|
+
============================================
|
|
71
|
+
One accent per service, grouped by platform layer.
|
|
72
|
+
Used for service landing pages, the app launcher,
|
|
73
|
+
and per-service dashboard theming.
|
|
74
|
+
*/
|
|
75
|
+
/* L5 — AI */
|
|
76
|
+
--color-synapse: #E07B39; /* orchestration engine */
|
|
77
|
+
--color-nexus: #14B8A6; /* AI seller */
|
|
78
|
+
/* L4 — Hub */
|
|
79
|
+
--color-platform: #64748B; /* identity + billing hub */
|
|
80
|
+
/* L3 — Observability */
|
|
81
|
+
--color-signal: #F59E0B; /* alerting */
|
|
82
|
+
--color-beacon: #06B6D4; /* uptime */
|
|
83
|
+
--color-vision: #EC4899; /* visual regression + browser AI */
|
|
84
|
+
--color-sentinel: #84CC16; /* host/container monitor */
|
|
85
|
+
--color-cortex: #10B981; /* feature flags */
|
|
86
|
+
--color-dendrite: #6366F1; /* living wikis */
|
|
87
|
+
--color-nerve: #F97316; /* background-job monitor */
|
|
88
|
+
--color-axon: #A855F7; /* workflow engine */
|
|
89
|
+
/* L2 — Data */
|
|
90
|
+
--color-recall: #D97757; /* logs */
|
|
91
|
+
--color-reflex: #E45B3A; /* errors */
|
|
92
|
+
--color-pulse: #3B82F6; /* traces / APM */
|
|
93
|
+
--color-flux: #8B5CF6; /* events / metrics */
|
|
94
|
+
/* L1 — Foundation */
|
|
95
|
+
--color-vault: #475569; /* secrets substrate */
|
|
96
|
+
/* Engine (internal substrate, not a public SKU) */
|
|
97
|
+
--color-plexus: #0EA5E9; /* AI-execution engine */
|
|
98
|
+
|
|
99
|
+
/* ============================================
|
|
100
|
+
Layer Accent Tokens
|
|
101
|
+
============================================
|
|
102
|
+
The accent a service page is tinted with, by layer,
|
|
103
|
+
so the 16 services read as one family while staying
|
|
104
|
+
layer-coded.
|
|
105
|
+
*/
|
|
106
|
+
--color-layer-ai: #7C3AED; /* L5 */
|
|
107
|
+
--color-layer-hub: #64748B; /* L4 */
|
|
108
|
+
--color-layer-obs: #F59E0B; /* L3 */
|
|
109
|
+
--color-layer-data: #3B82F6; /* L2 */
|
|
110
|
+
--color-layer-foundation: #475569; /* L1 */
|
|
111
|
+
|
|
112
|
+
/* ============================================
|
|
113
|
+
Data-Viz Categorical Palette
|
|
114
|
+
============================================
|
|
115
|
+
Ordered, distinguishable series colors for charts,
|
|
116
|
+
dashboards, and metrics across every sub-app.
|
|
117
|
+
*/
|
|
118
|
+
--color-viz-1: #C77B58; /* brand terracotta */
|
|
119
|
+
--color-viz-2: #3B82F6;
|
|
120
|
+
--color-viz-3: #10B981;
|
|
121
|
+
--color-viz-4: #8B5CF6;
|
|
122
|
+
--color-viz-5: #F59E0B;
|
|
123
|
+
--color-viz-6: #EC4899;
|
|
124
|
+
--color-viz-7: #06B6D4;
|
|
125
|
+
--color-viz-8: #84CC16;
|
|
75
126
|
|
|
76
127
|
/* Semantic - Success */
|
|
77
128
|
--color-success-50: #F0FDF4;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Brainzlab
|
|
4
|
+
module Components
|
|
5
|
+
# Signals how production-ready a platform service is.
|
|
6
|
+
# Honesty rule: a scaffold/early service must render as
|
|
7
|
+
# :proximamente (not yet), never as :disponible.
|
|
8
|
+
class MaturityBadge < Base
|
|
9
|
+
LEVELS = {
|
|
10
|
+
disponible: { class: 'badge-disponible', label: 'Disponible' },
|
|
11
|
+
beta: { class: 'badge-beta', label: 'Beta' },
|
|
12
|
+
proximamente: { class: 'badge-proximamente', label: 'Próximamente' }
|
|
13
|
+
}.freeze
|
|
14
|
+
|
|
15
|
+
def initialize(level: :beta, label: nil, **attrs)
|
|
16
|
+
@level = LEVELS.key?(level) ? level : :beta
|
|
17
|
+
@label = label
|
|
18
|
+
@attrs = attrs
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def view_template
|
|
22
|
+
span(class: badge_classes, **@attrs.except(:class)) { @label || LEVELS[@level][:label] }
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
private
|
|
26
|
+
|
|
27
|
+
def badge_classes
|
|
28
|
+
classes('badge', 'badge-maturity', LEVELS[@level][:class], @attrs[:class])
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
data/lib/brainzlab/ui/version.rb
CHANGED
data/lib/brainzlab/ui.rb
CHANGED
|
@@ -19,6 +19,7 @@ module Brainzlab
|
|
|
19
19
|
autoload :Button, 'brainzlab/components/button'
|
|
20
20
|
autoload :Card, 'brainzlab/components/card'
|
|
21
21
|
autoload :Badge, 'brainzlab/components/badge'
|
|
22
|
+
autoload :MaturityBadge, 'brainzlab/components/maturity_badge'
|
|
22
23
|
autoload :Input, 'brainzlab/components/input'
|
|
23
24
|
autoload :Alert, 'brainzlab/components/alert'
|
|
24
25
|
autoload :Avatar, 'brainzlab/components/avatar'
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: brainzlab-ui
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Brainz Lab
|
|
@@ -105,6 +105,7 @@ files:
|
|
|
105
105
|
- lib/brainzlab/components/card.rb
|
|
106
106
|
- lib/brainzlab/components/empty_state.rb
|
|
107
107
|
- lib/brainzlab/components/input.rb
|
|
108
|
+
- lib/brainzlab/components/maturity_badge.rb
|
|
108
109
|
- lib/brainzlab/components/modal.rb
|
|
109
110
|
- lib/brainzlab/components/nav_item.rb
|
|
110
111
|
- lib/brainzlab/components/stat_card.rb
|