@blueprint-chart/ui 2.2.3 → 2.4.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.
@@ -37,10 +37,21 @@ $prussian-300: #4B90CF !default;
37
37
  $prussian-100: #A3C9E8 !default;
38
38
  $prussian-50: #E1EEF7 !default;
39
39
 
40
+ // Neutral gray ramp (Bootstrap's own is blue-tinted). Feeds $secondary, $light, $dark.
41
+ $gray-100: #fafafa !default;
42
+ $gray-200: #f2f2f2 !default;
43
+ $gray-300: #eaeaea !default;
44
+ $gray-400: #c9c9c9 !default;
45
+ $gray-500: #a8a8a8 !default;
46
+ $gray-600: #666666 !default;
47
+ $gray-700: #454545 !default;
48
+ $gray-800: #383838 !default;
49
+ $gray-900: #171717 !default;
50
+
40
51
  // Theme color aliases (Bootstrap reads these)
41
- $primary: $prussian-500 !default;
52
+ $primary: #171717 !default;
42
53
  $success: #2D8659 !default;
43
- $info: $prussian-300 !default;
54
+ $info: #6900ff !default;
44
55
  $warning: #D4A63A !default;
45
56
  $danger: #C94044 !default;
46
57
 
@@ -50,31 +61,62 @@ $chartreuse-400: #DDF247 !default;
50
61
  $accent: $chartreuse-400 !default;
51
62
 
52
63
  // Borders
53
- $border-color: #dcdce0 !default;
64
+ $border-color: #eaeaea !default;
54
65
  $border-color-dark: #2e2e2e !default;
55
66
 
56
67
  // Surface hierarchy (void > tile > elevated)
57
- $body-bg: #f3f3f4 !default;
68
+ $body-bg: #ffffff !default;
58
69
  $body-bg-dark: #000000 !default;
59
70
  $body-secondary-bg: #ffffff !default;
60
- $body-secondary-bg-dark: #0e0e0e !default;
61
- $body-tertiary-bg: #f8f8fa !default;
62
- $body-tertiary-bg-dark: #161616 !default;
71
+ $body-secondary-bg-dark: #0a0a0a !default;
72
+ $body-tertiary-bg: #f2f2f2 !default;
73
+ $body-tertiary-bg-dark: #1f1f1f !default;
74
+
75
+ // Text
76
+ $body-color: #171717 !default;
77
+ $body-color-dark: #ededed !default;
78
+ $body-secondary-color: #666666 !default;
79
+ $body-secondary-color-dark: #a1a1a1 !default;
80
+ $body-tertiary-color: #6b6b6b !default;
81
+ $body-tertiary-color-dark: #8f8f8f !default;
82
+
83
+ // Neutral buttons
84
+ $btn-primary-bg: $body-tertiary-bg !default;
85
+ $btn-primary-border: #dedede !default;
86
+ $btn-primary-hover-bg: #eaeaea !default;
87
+ $btn-primary-bg-dark: $body-tertiary-bg-dark !default;
88
+ $btn-primary-border-dark: #454545 !default;
89
+ $btn-primary-hover-bg-dark: #2e2e2e !default;
90
+ $btn-strong-hover-bg: #383838 !default;
91
+ $btn-strong-hover-bg-dark: #cccccc !default;
92
+
93
+ $primary-text-emphasis-dark: $body-color-dark !default;
94
+ $primary-bg-subtle-dark: $body-tertiary-bg-dark !default;
95
+ $primary-border-subtle-dark: $btn-primary-border-dark !default;
96
+ $secondary-bg-subtle-dark: $body-tertiary-bg-dark !default;
97
+ $secondary-border-subtle-dark: $border-color-dark !default;
98
+
99
+ // Radius
100
+ $border-radius-sm: 0.25rem !default;
101
+ $border-radius: 0.5rem !default;
102
+ $border-radius-lg: 0.75rem !default;
63
103
 
64
104
  // Links
65
- $link-color: $primary !default;
66
- $link-hover-color: $prussian-600 !default;
67
- $link-color-dark: $prussian-300 !default;
68
- $link-hover-color-dark: $prussian-100 !default;
105
+ $link-color: $body-color !default;
106
+ $link-hover-color: $body-color !default;
107
+ $link-color-dark: $body-color-dark !default;
108
+ $link-hover-color-dark: $body-color-dark !default;
109
+ $link-decoration: underline rgba(var(--bs-body-color-rgb), 0.15) !default;
69
110
 
70
111
  // Focus ring
112
+ $focus-ring-opacity: 1 !default;
71
113
  $focus-ring-color: rgba($primary, 0.25) !default;
72
114
 
73
115
  // Code text
74
- $code-color: $prussian-600 !default;
116
+ $code-color: $body-color !default;
75
117
 
76
118
  // Bootstrap SCSS font-size primitive (Bootstrap uses this name)
77
- $font-size-xs: 0.6875rem !default;
119
+ $font-size-xs: 0.75rem !default;
78
120
 
79
121
  // Icon size scale — consumed by AppIcon/AppIconLayers via _mixins.scss
80
122
  $app-icon-size-scale-base: 20 !default;
@@ -113,28 +155,28 @@ $spacer-xs: 0.25rem !default;
113
155
  --bs-font-size-2xl: 2.375rem; // 38px — dashboard title
114
156
  --bs-font-size-hero: 4rem; // 64px — landing hero h1 (unchanged)
115
157
 
116
- --bc-syn-keyword: #2563A0;
117
- --bc-syn-string: #2D8659;
158
+ --bc-syn-keyword: #7928ca;
159
+ --bc-syn-string: #067647;
118
160
  --bc-syn-number: #8B5E00;
119
- --bc-syn-identifier: #555;
120
- --bc-syn-punct: #888;
121
- --bc-syn-comment: #999;
161
+ --bc-syn-identifier: #444444;
162
+ --bc-syn-punct: #666666;
163
+ --bc-syn-comment: #6b6b6b;
122
164
  --bc-axis-color: #333;
123
165
  --bc-grid-color: #e0e0e0;
124
166
  --bc-text-color: #555;
125
167
  --bc-brand-1: #5b6abf;
126
168
  --bc-brand-2: #3c8dbc;
127
169
 
128
- --bc-canvas-bg: #244a7c;
129
- --bc-canvas-grid-color: rgba(255, 255, 255, 0.06);
130
- --bc-canvas-grid-color-major: rgba(255, 255, 255, 0.15);
170
+ --bc-canvas-bg: #f5f5f5;
171
+ --bc-canvas-grid-color: rgba(0, 0, 0, 0.06);
172
+ --bc-canvas-grid-color-major: rgba(0, 0, 0, 0.15);
131
173
  --bc-canvas-grid-size: 20px;
132
- --bc-canvas-dimension-color: rgba(255, 255, 255, 0.55);
174
+ --bc-canvas-dimension-color: rgba(0, 0, 0, 0.55);
133
175
 
134
176
  --bc-chrome-bg: #ffffff;
135
- --bc-content-bg: #E9EBEF;
177
+ --bc-content-bg: #ffffff;
136
178
  --bc-tile-bg: #ffffff;
137
- --bc-tile-bg-elevated: #f5f5f7;
179
+ --bc-tile-bg-elevated: #f2f2f2;
138
180
  --bc-canvas-glow: none;
139
181
 
140
182
  --bc-wash-soft: rgba(0, 0, 0, 0.04);
@@ -142,8 +184,8 @@ $spacer-xs: 0.25rem !default;
142
184
  --bc-wash-input: rgba(0, 0, 0, 0.03);
143
185
  --bc-wash-input-hover: rgba(0, 0, 0, 0.05);
144
186
 
145
- --bc-hairline: rgba(0, 0, 0, 0.08);
146
- --bc-hairline-strong: rgba(0, 0, 0, 0.14);
187
+ --bc-hairline: #{$border-color};
188
+ --bc-hairline-strong: #{$btn-primary-border};
147
189
 
148
190
  // The marker. Interactive emphasis (CTA/hover/selection/focus expression) and
149
191
  // editorial emphasis. Always rides a non-color signal (fill/shape/pool). ~4%.
@@ -152,7 +194,7 @@ $spacer-xs: 0.25rem !default;
152
194
 
153
195
  // Grid pool (see _effects.scss). Ink reads on any surface, not just canvas.
154
196
  --bc-pool-r: 100px;
155
- --bc-pool-ink: #{rgba($prussian-300, 0.33)}; // drafting-blue grid on light
197
+ --bc-pool-ink: rgba(0, 0, 0, 0.2);
156
198
 
157
199
  // Light ink for forced-dark marketing islands (hero, closing band). These are
158
200
  // island constants: the same value in both themes, so they are not overridden
@@ -166,10 +208,8 @@ $spacer-xs: 0.25rem !default;
166
208
  // on the dark marketing islands (see .btn-bc-primary:focus-visible below).
167
209
  --bc-focus-ring-marketing: 0 0 0 3px #{rgba($prussian-300, 0.9)};
168
210
 
169
- // Editorial mark ink: chartreuse can't be a thin figure on white, so small
170
- // marks (eyebrow #/dot) fall back to Prussian on light, chartreuse on dark.
171
- --bc-mark: #{$prussian-500};
172
- --bc-mark-quiet: #{rgba($prussian-500, 0.14)};
211
+ --bc-mark: #666666;
212
+ --bc-mark-quiet: rgba(0, 0, 0, 0.08);
173
213
 
174
214
  // Primary button fill/ink pair. Flips per theme so .btn-bc-primary always
175
215
  // resolves at the nearest theme (see _effects.scss), instead of a
@@ -178,25 +218,15 @@ $spacer-xs: 0.25rem !default;
178
218
  --bc-btn-primary-bg: #{$prussian-600};
179
219
  --bc-btn-primary-fg: #{$accent};
180
220
 
181
- // Highlighter swipe (FIG.03). Defined once here so .bc-highlight and the
182
- // landing emphasis rules share one gradient (DRY). Ground on light.
183
- --bc-swipe: linear-gradient(
184
- 180deg,
185
- transparent 45%,
186
- var(--bc-accent) 45%,
187
- var(--bc-accent) 92%,
188
- transparent 92%
189
- );
190
-
191
221
  // Framed-canvas system (flat: hairline border, no shadow).
192
222
  --bc-frame-border: var(--bc-hairline);
193
223
  --bc-frame-radius: var(--bc-radius-lg);
194
224
 
195
225
  --bc-radius-pill: 999px;
196
- --bc-radius-xs: 4px;
197
- --bc-radius-sm: 6px;
198
- --bc-radius-md: 8px;
199
- --bc-radius-lg: 12px;
226
+ --bc-radius-xs: 0.25rem;
227
+ --bc-radius-sm: 0.25rem;
228
+ --bc-radius-md: 0.5rem;
229
+ --bc-radius-lg: 0.75rem;
200
230
 
201
231
  --bc-drawer-height: 70vh;
202
232
 
@@ -209,7 +239,15 @@ $spacer-xs: 0.25rem !default;
209
239
  --bc-duration-base: 150ms;
210
240
  --bc-duration-slow: 250ms;
211
241
 
212
- --bc-focus-ring: 0 0 0 2px rgba(37, 99, 160, 0.4);
242
+ // Declared in both theme blocks so the body-bg/emphasis vars re-resolve at
243
+ // the nearest theme: a :root-only value would paint a light ring in a dark island.
244
+ --bc-focus-ring: 0 0 0 2px var(--bs-body-bg), 0 0 0 4px var(--bs-emphasis-color);
245
+ --bc-selected-ring: 0 0 0 2px var(--bs-emphasis-color);
246
+
247
+ --bc-btn-strong-hover-bg: #383838;
248
+ --bc-text-primary: #{$body-color};
249
+ --bc-text-secondary: #{$body-secondary-color};
250
+ --bc-text-tertiary: #{$body-tertiary-color};
213
251
 
214
252
  --bc-shadow-overlay:
215
253
  0 8px 24px rgba(0, 0, 0, 0.08),
@@ -232,27 +270,26 @@ $spacer-xs: 0.25rem !default;
232
270
  // duplicating the dark palette.
233
271
  [data-bs-theme="dark"],
234
272
  .dark {
235
- --bc-syn-keyword: #6CA6D6;
273
+ --bc-syn-keyword: #c4a1ff;
236
274
  --bc-syn-string: #6BBF8B;
237
275
  --bc-syn-number: #D4A63A;
238
- --bc-syn-identifier: #b0b0b0;
239
- --bc-syn-punct: #777;
240
- --bc-syn-comment: #666;
276
+ --bc-syn-identifier: #d4d4d4;
277
+ --bc-syn-punct: #a1a1a1;
278
+ --bc-syn-comment: #8f8f8f;
241
279
 
242
280
  --bc-axis-color: #ccc;
243
281
  --bc-grid-color: #444;
244
282
  --bc-text-color: #aaa;
245
283
 
246
- // Dark canvas is true black; the white grid lines carry the blueprint.
247
- --bc-canvas-bg: #000000;
284
+ --bc-canvas-bg: #0d0d0d;
248
285
  --bc-canvas-grid-color: rgba(255, 255, 255, 0.05);
249
286
  --bc-canvas-grid-color-major: rgba(255, 255, 255, 0.12);
250
287
  --bc-canvas-dimension-color: rgba(255, 255, 255, 0.45);
251
288
 
252
289
  --bc-chrome-bg: #000000;
253
290
  --bc-content-bg: #000000;
254
- --bc-tile-bg: #0e0e0e;
255
- --bc-tile-bg-elevated: #161616;
291
+ --bc-tile-bg: #000000;
292
+ --bc-tile-bg-elevated: #1f1f1f;
256
293
  --bc-canvas-glow: none;
257
294
 
258
295
  --bc-wash-soft: rgba(255, 255, 255, 0.03);
@@ -260,41 +297,39 @@ $spacer-xs: 0.25rem !default;
260
297
  --bc-wash-input: rgba(255, 255, 255, 0.03);
261
298
  --bc-wash-input-hover: rgba(255, 255, 255, 0.05);
262
299
 
263
- --bc-hairline: rgba(255, 255, 255, 0.09);
264
- --bc-hairline-strong: rgba(255, 255, 255, 0.15);
300
+ --bc-hairline: #{$border-color-dark};
301
+ --bc-hairline-strong: #{$btn-primary-border-dark};
265
302
 
266
303
  --bc-accent: #{$accent}; // same hex; gesture differs, not value
267
304
  --bc-accent-ink: #{$prussian-600}; // navy on chartreuse in both themes
268
- --bc-pool-ink: #{rgba($prussian-100, 0.32)}; // paper-blue grid on true black
269
- --bc-mark: #{$accent}; // chartreuse is ink on dark
270
- --bc-mark-quiet: #{rgba($accent, 0.18)};
271
-
272
- // On dark, chartreuse is ink (text) so the swipe stays a translucent ground
273
- // behind normal text rather than a bold block. Alpha 0.4 makes the band
274
- // clearly read on true black while keeping white/near-white text over it
275
- // above the 4.5:1 floor (~5.9:1 on #EAF2FA, ~5.1:1 on --bs-body-color).
276
- --bc-swipe: linear-gradient(
277
- 180deg,
278
- transparent 45%,
279
- #{rgba($chartreuse-400, 0.4)} 45%,
280
- #{rgba($chartreuse-400, 0.4)} 92%,
281
- transparent 92%
282
- );
305
+ --bc-pool-ink: rgba(255, 255, 255, 0.28);
306
+ --bc-mark: #a1a1a1;
307
+ --bc-mark-quiet: rgba(255, 255, 255, 0.12);
283
308
 
284
309
  // Primary button fill/ink pair, flipped: chartreuse fill on the field,
285
310
  // navy ink. See the light block above for the pairing rationale.
286
311
  --bc-btn-primary-bg: #{$accent};
287
312
  --bc-btn-primary-fg: #{$prussian-600};
288
313
 
289
- // Brighter Prussian so the focus ring clears the 3:1 floor on the #000 field
290
- // (mirrors what --bc-focus-ring-marketing already does for primary buttons).
291
- --bc-focus-ring: 0 0 0 2px #{rgba($prussian-300, 0.6)};
314
+ --bc-focus-ring: 0 0 0 2px var(--bs-body-bg), 0 0 0 4px var(--bs-emphasis-color);
315
+ --bc-selected-ring: 0 0 0 2px var(--bs-emphasis-color);
316
+
317
+ --bc-btn-strong-hover-bg: #cccccc;
318
+ --bc-text-primary: #{$body-color-dark};
319
+ --bc-text-secondary: #{$body-secondary-color-dark};
320
+ --bc-text-tertiary: #{$body-tertiary-color-dark};
292
321
 
293
322
  --bc-shadow-overlay:
294
323
  0 8px 24px rgba(0, 0, 0, 0.6),
295
324
  0 1px 2px rgba(0, 0, 0, 0.4);
296
325
  }
297
326
 
327
+ @supports (height: 1dvh) {
328
+ :root, [data-bs-theme="light"], [data-bs-theme="dark"], .dark {
329
+ --bc-drawer-height: 70dvh;
330
+ }
331
+ }
332
+
298
333
  @media (prefers-reduced-motion: reduce) {
299
334
  :root, [data-bs-theme="light"], [data-bs-theme="dark"], .dark {
300
335
  --bc-duration-fast: 0ms;
@@ -0,0 +1 @@
1
+ export declare const isHexColor: (value: string) => boolean;
@@ -0,0 +1 @@
1
+ export declare function withoutTransitions(apply: () => void): void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blueprint-chart/ui",
3
- "version": "2.2.3",
3
+ "version": "2.4.0",
4
4
  "description": "Vue 3 component library for Blueprint Chart editors and apps.",
5
5
  "keywords": [
6
6
  "vue",
@@ -61,7 +61,7 @@
61
61
  "vue-color": "^3.3.3"
62
62
  },
63
63
  "devDependencies": {
64
- "@blueprint-chart/lib": "2.2.3",
64
+ "@blueprint-chart/lib": "2.4.0",
65
65
  "@histoire/plugin-vue": "^0.17.17",
66
66
  "@iconify-json/ph": "^1.2.2",
67
67
  "@types/d3-format": "^3.0.4",