@blueprint-chart/ui 0.1.8 → 0.1.12

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.
@@ -0,0 +1,222 @@
1
+ // packages/ui/src/styles/tokens.scss
2
+ // Canonical design tokens for Blueprint Chart.
3
+ //
4
+ // Two layers:
5
+ // 1. SCSS layer — primitives consumed at compile time (Bootstrap config,
6
+ // mixins, internal ui SCSS). All `!default` so consumers
7
+ // can override before importing.
8
+ // 2. CSS variables — primitives consumed at runtime (themes, dark mode).
9
+ //
10
+ // Consumed by:
11
+ // - @blueprint-chart/editor — `@use "@blueprint-chart/ui/styles/tokens.scss" as *;`
12
+ // - @blueprint-chart/docs — compiled `tokens.css` (only the :root blocks survive)
13
+ //
14
+ // Chart-canvas frame text (.bc-frame-*) is intentionally not defined here —
15
+ // those CSS rules live alongside the chart renderer in @blueprint-chart/lib.
16
+ // Syntax-highlight tokens (--bc-syn-*) and chart-rendering primitives
17
+ // (--bc-axis-color, --bc-grid-color, --bc-text-color) ARE included because
18
+ // they must respond to the editor theme.
19
+
20
+ // ─────────────────────────────────────────────────────────────────────────────
21
+ // 1. SCSS layer
22
+ // ─────────────────────────────────────────────────────────────────────────────
23
+
24
+ // Font stacks (Bootstrap picks these up before its own theme compiles)
25
+ $font-family-sans-serif: "Geist Sans", "Inter", system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", sans-serif !default;
26
+ $font-family-monospace: "Geist Mono", ui-monospace, "JetBrains Mono", "SFMono-Regular", Menlo, monospace !default;
27
+ $font-family-base: $font-family-sans-serif !default;
28
+ $font-family-code: $font-family-monospace !default;
29
+ $headings-font-family: $font-family-sans-serif !default;
30
+
31
+ // Brand scale — Prussian Blue
32
+ $prussian-900: #0A1E3D !default;
33
+ $prussian-700: #102E55 !default;
34
+ $prussian-600: #163A65 !default;
35
+ $prussian-500: #2563A0 !default; // primary
36
+ $prussian-300: #4B90CF !default;
37
+ $prussian-100: #A3C9E8 !default;
38
+ $prussian-50: #E1EEF7 !default;
39
+
40
+ // Theme color aliases (Bootstrap reads these)
41
+ $primary: $prussian-500 !default;
42
+ $success: #2D8659 !default;
43
+ $info: $prussian-300 !default;
44
+ $warning: #D4A63A !default;
45
+ $danger: #C94044 !default;
46
+
47
+ // Borders
48
+ $border-color: #dcdce0 !default;
49
+ $border-color-dark: #33323e !default;
50
+
51
+ // Surface hierarchy (void > tile > elevated)
52
+ $body-bg: #f3f3f4 !default;
53
+ $body-bg-dark: #0a0a0a !default;
54
+ $body-secondary-bg: #ffffff !default;
55
+ $body-secondary-bg-dark: #1c1c20 !default;
56
+ $body-tertiary-bg: #f8f8fa !default;
57
+ $body-tertiary-bg-dark: #1c1c20 !default;
58
+
59
+ // Links
60
+ $link-color: $primary !default;
61
+ $link-hover-color: $prussian-600 !default;
62
+ $link-color-dark: $prussian-300 !default;
63
+ $link-hover-color-dark: $prussian-100 !default;
64
+
65
+ // Focus ring
66
+ $focus-ring-color: rgba($primary, 0.25) !default;
67
+
68
+ // Code text
69
+ $code-color: $prussian-600 !default;
70
+
71
+ // Bootstrap SCSS font-size primitive (Bootstrap uses this name)
72
+ $font-size-xs: 0.6875rem !default;
73
+
74
+ // Icon size scale — consumed by AppIcon/AppIconLayers via _mixins.scss
75
+ $app-icon-size-scale-base: 20 !default;
76
+ $app-icon-size-scale-2xs: 12 !default;
77
+ $app-icon-size-scale-xs: 14 !default;
78
+ $app-icon-size-scale-sm: 16 !default;
79
+ $app-icon-size-scale-md: $app-icon-size-scale-base !default;
80
+ $app-icon-size-scale-lg: 24 !default;
81
+ $app-icon-size-scale-xl: 32 !default;
82
+ $app-icon-size-scale-2xl: 40 !default;
83
+
84
+ $app-icon-sizes: (
85
+ "2xs": $app-icon-size-scale-2xs,
86
+ "xs": $app-icon-size-scale-xs,
87
+ "sm": $app-icon-size-scale-sm,
88
+ "md": $app-icon-size-scale-md,
89
+ "lg": $app-icon-size-scale-lg,
90
+ "xl": $app-icon-size-scale-xl,
91
+ "2xl": $app-icon-size-scale-2xl,
92
+ ) !default;
93
+
94
+ // Spacers
95
+ $spacer-xs: 0.25rem !default;
96
+
97
+ // ─────────────────────────────────────────────────────────────────────────────
98
+ // 2. CSS custom properties — runtime
99
+ // ─────────────────────────────────────────────────────────────────────────────
100
+
101
+ :root,
102
+ [data-bs-theme="light"] {
103
+ --bs-font-size-xs: 0.75rem; // 12px — uppercase eyebrow labels, badge text
104
+ --bs-font-size-sm: 0.875rem; // 14px — sub-body, DSL code
105
+ --bs-font-size-md: 1rem; // 16px — body, UI, nav, breadcrumbs
106
+ --bs-font-size-lg: 1.25rem; // 20px — panel section titles
107
+ --bs-font-size-xl: 1.875rem; // 30px — page title (h1)
108
+ --bs-font-size-2xl: 2.375rem; // 38px — dashboard title
109
+ --bs-font-size-hero: 4rem; // 64px — landing hero h1 (unchanged)
110
+
111
+ --bc-syn-keyword: #2563A0;
112
+ --bc-syn-string: #2D8659;
113
+ --bc-syn-number: #8B5E00;
114
+ --bc-syn-identifier: #555;
115
+ --bc-syn-punct: #888;
116
+ --bc-syn-comment: #999;
117
+ --bc-axis-color: #333;
118
+ --bc-grid-color: #e0e0e0;
119
+ --bc-text-color: #555;
120
+ --bc-brand-1: #5b6abf;
121
+ --bc-brand-2: #3c8dbc;
122
+
123
+ --bc-canvas-bg: #244a7c;
124
+ --bc-canvas-grid-color: rgba(255, 255, 255, 0.06);
125
+ --bc-canvas-grid-color-major: rgba(255, 255, 255, 0.15);
126
+ --bc-canvas-grid-size: 20px;
127
+ --bc-canvas-dimension-color: rgba(255, 255, 255, 0.55);
128
+
129
+ --bc-chrome-bg: #ffffff;
130
+ --bc-content-bg: #fafafa;
131
+ --bc-tile-bg: #ffffff;
132
+ --bc-tile-bg-elevated: #f5f5f7;
133
+ --bc-canvas-glow: none;
134
+
135
+ --bc-wash-soft: rgba(0, 0, 0, 0.04);
136
+ --bc-wash-firm: rgba(0, 0, 0, 0.06);
137
+ --bc-wash-input: rgba(0, 0, 0, 0.03);
138
+ --bc-wash-input-hover: rgba(0, 0, 0, 0.05);
139
+
140
+ --bc-hairline: rgba(0, 0, 0, 0.08);
141
+ --bc-hairline-strong: rgba(0, 0, 0, 0.14);
142
+
143
+ --bc-radius-pill: 999px;
144
+ --bc-radius-xs: 4px;
145
+ --bc-radius-sm: 6px;
146
+ --bc-radius-md: 8px;
147
+ --bc-radius-lg: 12px;
148
+
149
+ --bs-card-bg: var(--bc-tile-bg);
150
+ --bs-card-box-shadow: none;
151
+ --bs-navbar-bg: transparent;
152
+
153
+ --bc-ease: cubic-bezier(0.4, 0, 0.2, 1);
154
+ --bc-duration-fast: 100ms;
155
+ --bc-duration-base: 150ms;
156
+ --bc-duration-slow: 250ms;
157
+
158
+ --bc-focus-ring: 0 0 0 2px rgba(37, 99, 160, 0.4);
159
+
160
+ --bc-shadow-overlay:
161
+ 0 8px 24px rgba(0, 0, 0, 0.08),
162
+ 0 1px 2px rgba(0, 0, 0, 0.04);
163
+ }
164
+
165
+ // When [data-bs-theme="light"] is applied to a nested element (e.g. the
166
+ // preview card when dark mode is disallowed), propagate the light color +
167
+ // background so inherited text/currentColor inside SVGs also switch to the
168
+ // light palette.
169
+ [data-bs-theme="dark"] [data-bs-theme="light"] {
170
+ color: var(--bs-body-color);
171
+ background-color: var(--bs-card-bg);
172
+ }
173
+
174
+ // `.dark` is the dark-mode flag VitePress (and Tailwind-style projects) toggle
175
+ // on <html>. Aliasing it to `[data-bs-theme="dark"]` lets the same shared token
176
+ // set serve both consumer conventions — the editor toggles `data-bs-theme`, the
177
+ // docs site toggles `.dark`. Keeping both selectors in one rule avoids
178
+ // duplicating the dark palette.
179
+ [data-bs-theme="dark"],
180
+ .dark {
181
+ --bc-syn-keyword: #6CA6D6;
182
+ --bc-syn-string: #6BBF8B;
183
+ --bc-syn-number: #D4A63A;
184
+ --bc-syn-identifier: #b0b0b0;
185
+ --bc-syn-punct: #777;
186
+ --bc-syn-comment: #666;
187
+
188
+ --bc-axis-color: #ccc;
189
+ --bc-grid-color: #444;
190
+ --bc-text-color: #aaa;
191
+
192
+ --bc-canvas-bg: #244a7c;
193
+ --bc-canvas-grid-color: rgba(255, 255, 255, 0.04);
194
+ --bc-canvas-grid-color-major: rgba(255, 255, 255, 0.10);
195
+ --bc-canvas-dimension-color: rgba(255, 255, 255, 0.4);
196
+
197
+ --bc-chrome-bg: #08090a;
198
+ --bc-content-bg: #101112;
199
+ --bc-tile-bg: #101112;
200
+ --bc-tile-bg-elevated: #16161b;
201
+ --bc-canvas-glow: radial-gradient(ellipse at top, rgba(37, 99, 160, 0.04), transparent 60%);
202
+
203
+ --bc-wash-soft: rgba(255, 255, 255, 0.03);
204
+ --bc-wash-firm: rgba(255, 255, 255, 0.07);
205
+ --bc-wash-input: rgba(255, 255, 255, 0.03);
206
+ --bc-wash-input-hover: rgba(255, 255, 255, 0.05);
207
+
208
+ --bc-hairline: rgba(255, 255, 255, 0.06);
209
+ --bc-hairline-strong: rgba(255, 255, 255, 0.12);
210
+
211
+ --bc-shadow-overlay:
212
+ 0 8px 24px rgba(0, 0, 0, 0.4),
213
+ 0 1px 2px rgba(0, 0, 0, 0.3);
214
+ }
215
+
216
+ @media (prefers-reduced-motion: reduce) {
217
+ :root, [data-bs-theme="light"], [data-bs-theme="dark"], .dark {
218
+ --bc-duration-fast: 0ms;
219
+ --bc-duration-base: 0ms;
220
+ --bc-duration-slow: 0ms;
221
+ }
222
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blueprint-chart/ui",
3
- "version": "0.1.8",
3
+ "version": "0.1.12",
4
4
  "description": "Vue 3 component library for Blueprint Chart editors and apps.",
5
5
  "keywords": [
6
6
  "vue",
@@ -30,7 +30,10 @@
30
30
  "types": "./dist/index.d.ts",
31
31
  "import": "./dist/index.js",
32
32
  "default": "./dist/index.js"
33
- }
33
+ },
34
+ "./styles/tokens.css": "./dist/styles/tokens.css",
35
+ "./styles/tokens.scss": "./dist/styles/tokens.scss",
36
+ "./style.css": "./dist/style.css"
34
37
  },
35
38
  "files": [
36
39
  "dist",
@@ -41,6 +44,13 @@
41
44
  "access": "public",
42
45
  "provenance": true
43
46
  },
47
+ "scripts": {
48
+ "build": "vite build",
49
+ "test": "vitest run",
50
+ "story:dev": "histoire dev",
51
+ "story:build": "histoire build",
52
+ "story:preview": "histoire preview"
53
+ },
44
54
  "peerDependencies": {
45
55
  "@vueuse/core": "^14.2.1",
46
56
  "bootstrap": "^5.3",
@@ -54,6 +64,7 @@
54
64
  "vue-color": "^3.3.3"
55
65
  },
56
66
  "devDependencies": {
67
+ "@blueprint-chart/lib": "workspace:*",
57
68
  "@histoire/plugin-vue": "^0.17",
58
69
  "@iconify-json/ph": "^1.2.2",
59
70
  "@types/d3-format": "^3.0.4",
@@ -65,6 +76,7 @@
65
76
  "bootstrap-vue-next": "^0.27",
66
77
  "histoire": "^0.17",
67
78
  "jsdom": "^26",
79
+ "sass": "^1.99.0",
68
80
  "typescript": "^5.7",
69
81
  "unplugin-auto-import": "^21.0.0",
70
82
  "unplugin-icons": "^22.5.0",
@@ -73,14 +85,6 @@
73
85
  "vite-plugin-dts": "^5.0.0",
74
86
  "vitest": "^3",
75
87
  "vue": "^3.5",
76
- "vue-router": "^4.6.4",
77
- "@blueprint-chart/lib": "0.1.8"
78
- },
79
- "scripts": {
80
- "build": "vite build",
81
- "test": "vitest run",
82
- "story:dev": "histoire dev",
83
- "story:build": "histoire build",
84
- "story:preview": "histoire preview"
88
+ "vue-router": "^4.6.4"
85
89
  }
86
- }
90
+ }