@beehexa/vueflow-tokens 2611.3.4 → 2611.5.2

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 CHANGED
@@ -36,16 +36,53 @@ host/dimension changes. The factory uses VueFlow 1's real `fitViewOnInit` option
36
36
  - `getNodeColor(type)`, `getEdgeColorPalette(category)`, `styleTargetEdge(edge, nodes)`:
37
37
  source-backed directed edge identity; target stroke and marker remain paired.
38
38
  - `FLOW_EDGE`, `FLOW_ICON`: numeric source values at VueFlow/icon API boundaries.
39
+ - `getFlowCategoryStyles(type, part?)`: custom semantic content role binding;
40
+ `foreground` (default) sets category text, `border` sets border colour and
41
+ `background` sets the category surface.
42
+ - `getFlowIconStyles(type, { size?, color?, disabled? })`: category-border glyphs
43
+ or separate `status-success|warning|error|info|loading` / `control-expand|collapse|help`
44
+ icon roles. Edge icon keys use `edge-dependency|edge-transformation`.
45
+ Sizes accept `small|medium|large` or a numeric API size; explicit colours must
46
+ already be source-resolved semantic roles.
47
+ - `getFlowEdgeStyles(category, suppliedStyle?)`: SVG width, non-scaling stroke,
48
+ no-fill and static relation dashes. The supplied directed target stroke wins
49
+ over category fallback, preserving stroke/arrow identity.
39
50
  - Public option, category, dimension, node-state, style and theme interfaces are emitted
40
51
  in `dist/index.d.ts`; CSS has a typed `./css` export.
41
52
 
42
- Use semantic typography/spacing directly in custom content. Keep category labels and
43
- icons, selected outline, separate keyboard focus and readable error messages. Do not
44
- append hexadecimal alpha suffixes to CSS variables. Do not animate idle graph nodes,
45
- rotate category icons, add glass/gradients, or override core controls in each consumer.
53
+ Use public source typography/content markers and graph presentation factories in
54
+ custom semantic content. Keep category labels and icons, selected outline, separate
55
+ keyboard focus and readable error messages. Do not append hexadecimal alpha suffixes
56
+ to CSS variables. Do not animate idle graph nodes, rotate category icons, add
57
+ glass/gradients, or override core controls in each consumer.
46
58
  Preserve graph IDs, stored coordinates and relationship direction on theme changes.
47
59
  Exports must capture the current graph surface/font rather than force white/system fonts.
48
60
 
61
+ Ordinary nodes, MiniMap cards and Controls use `radius.100` (8 px). Controls
62
+ round exposed corners without clipping focus, and MiniMap fills clip.
63
+ Connector logos retain nested `radius.075` (6 px). Decision/loop nodes and graph
64
+ handles keep their circular geometry; `FLOW_EDGE.radius` remains edge-path geometry.
65
+ Consumer-owned inspector cards and controls/toolbars use `--bh-radius-100`; dialogs/drawers use `radius.150` (12 px).
66
+
67
+ Bind `data-bh-high-contrast="true"` on the actual `bh-vue-flow` host when the user's
68
+ high-contrast setting is enabled. Native node/edge/path, graph buttons and custom
69
+ `role="button"` focus rings then use `border.width.accent` (4px), retaining the
70
+ source focus colour and offset. The default is `border.width.focused` (2px).
71
+ Bind `data-bh-large-text="true"` and `data-bh-increased-spacing="true"` on that
72
+ same host for the existing user accessibility settings (1.125em node text;
73
+ 1.6 line-height / 0.02em letter-spacing). These are opt-in adaptations, not new
74
+ default typography. `bh-flow-icon[data-bh-loading="true"]` animates only an
75
+ actual loading glyph and respects reduced motion.
76
+ `bh-flow-category-mark[data-bh-category="<FlowCategory>"]` is a labelled 6px
77
+ circular relationship marker in the category's border role, never a status dot.
78
+
79
+ For a native category Tag, bind the cached immutable result of
80
+ `getFlowCategoryBadgeStyles(type)` to its public `style` prop and omit its
81
+ `color` prop. This pairs category foreground, background and border; a frame/edge
82
+ stroke from `getNodeColor(type)` is not a filled badge background. Both themes'
83
+ small-text pairs are checked at WCAG AA 4.5:1 and demonstrated with real native
84
+ Tags in the Ant Design Vue family. Category labels are not execution status.
85
+
49
86
  Resting handles use the neutral icon role, not keyboard-focus color. TaskFlow-style
50
87
  graph fullscreen uses an isolated local stacking context at `z-index.modal` (400), allowing
51
88
  global inspectors above it. Child chrome may use private z10/z15 within that context,
@@ -53,7 +90,7 @@ not global1001/1002. This is not an editor takeover at `z-index.fullscreen` (450
53
90
 
54
91
  ## Build and validation
55
92
 
56
- The shared `build-adapters.mjs` compiles strict NodeNext source and checks generated
93
+ The shared `build-runtime-packages.mjs` compiles strict NodeNext source and checks generated
57
94
  output. Actual packed-consumer checks exercise exports/CSS with strict TypeScript and
58
95
  `skipLibCheck` at the upstream vendor-declaration boundary. Source version `0.0.0`
59
96
  stays private; only the authorized runner stamps real package/internal dependency versions.
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { CSSProperties } from 'vue';
2
- import { type FlowProps, type Node, type Edge } from '@vue-flow/core';
2
+ import { type FlowProps, type Node, type Edge, type Styles } from '@vue-flow/core';
3
3
  export interface VueFlowThemeOptions {
4
4
  dark?: boolean;
5
5
  locale?: 'en' | 'vi';
@@ -72,6 +72,20 @@ export declare function getNodeColorPalette(category: FlowCategory): FlowNodePal
72
72
  export declare function getEdgeColorPalette(category: FlowEdgeCategory): FlowNodePalette;
73
73
  /** Unknown/custom node types retain the task category, matching VueFlow's default node. */
74
74
  export declare function getNodeColor(type: string): string;
75
+ export type FlowCategoryPart = 'foreground' | 'border' | 'background';
76
+ /** Apply a category role to custom semantic content without a consumer-owned recipe. */
77
+ export declare function getFlowCategoryStyles(type: string, part?: FlowCategoryPart): CSSProperties;
78
+ /** Paired native Tag paint; a category stroke is not an on-bold background. */
79
+ export declare function getFlowCategoryBadgeStyles(type: string): Readonly<CSSProperties>;
80
+ export interface FlowIconOptions {
81
+ size?: keyof typeof FLOW_ICON | number;
82
+ color?: string;
83
+ disabled?: boolean;
84
+ }
85
+ /** Category glyphs and operational/status glyphs retain distinct source roles. */
86
+ export declare function getFlowIconStyles(type: string, options?: FlowIconOptions): CSSProperties;
87
+ /** Directed target stroke wins over category fallback; dashes communicate relation kind. */
88
+ export declare function getFlowEdgeStyles(category: FlowEdgeCategory, suppliedStyle?: CSSProperties): Styles;
75
89
  export declare const FLOW_VIEWPORT: {
76
90
  minZoom: number;
77
91
  maxZoom: number;
@@ -103,7 +117,7 @@ export interface FlowNodeState {
103
117
  selfDependency?: boolean;
104
118
  }
105
119
  export interface FlowNodeStyles {
106
- container: CSSProperties;
120
+ container: Styles;
107
121
  content: CSSProperties;
108
122
  icon: CSSProperties;
109
123
  label: CSSProperties;
@@ -115,3 +129,5 @@ export interface FlowNodeStyles {
115
129
  }
116
130
  /** Custom content and layout share fixed source geometry, not viewport-dependent sizing. */
117
131
  export declare function getFlowNodeStyles(type: NodeType, state?: FlowNodeState): FlowNodeStyles;
132
+ /** Minimal detail removes costly decoration, never semantic contrast or graph data. */
133
+ export declare function getFlowDetailStyles(level: 'minimal' | 'basic' | 'detailed', suppliedStyle: Styles): Styles;
package/dist/index.js CHANGED
@@ -50,7 +50,7 @@ export const FLOW_ICON = {
50
50
  large: numberToken('size.icon.large')
51
51
  };
52
52
  const nodeCategories = {
53
- task: 'task', task_data: 'task', profile: 'task', task_dependency: 'dependency',
53
+ task: 'task', task_data: 'task', profile: 'task', dependency: 'dependency', task_dependency: 'dependency',
54
54
  task_transformation: 'transformation', transformation: 'transformation',
55
55
  transformationGroup: 'transformation', validation: 'validation',
56
56
  validationGroup: 'validation', push_step: 'pushStep', pushStep: 'pushStep',
@@ -79,6 +79,54 @@ export function getEdgeColorPalette(category) {
79
79
  export function getNodeColor(type) {
80
80
  return palettes[nodeCategories[type] ?? 'task'].border;
81
81
  }
82
+ /** Apply a category role to custom semantic content without a consumer-owned recipe. */
83
+ export function getFlowCategoryStyles(type, part = 'foreground') {
84
+ const palette = palettes[nodeCategories[type] ?? 'task'];
85
+ if (part === 'border')
86
+ return { borderColor: palette.border };
87
+ if (part === 'background')
88
+ return { backgroundColor: palette.background };
89
+ return { color: palette.text };
90
+ }
91
+ const categoryBadgeStyles = {};
92
+ /** Paired native Tag paint; a category stroke is not an on-bold background. */
93
+ export function getFlowCategoryBadgeStyles(type) {
94
+ const category = nodeCategories[type] ?? 'task';
95
+ const palette = palettes[category];
96
+ return categoryBadgeStyles[category] ??= Object.freeze({
97
+ color: palette.text,
98
+ backgroundColor: palette.background,
99
+ borderColor: palette.border
100
+ });
101
+ }
102
+ const iconRoles = {
103
+ 'status-success': 'color.icon.success', 'status-warning': 'color.icon.warning',
104
+ 'status-error': 'color.icon.danger', 'status-info': 'color.icon.info',
105
+ 'status-loading': 'color.icon.info', 'control-expand': 'color.icon',
106
+ 'control-collapse': 'color.icon', 'control-help': 'color.icon'
107
+ };
108
+ /** Category glyphs and operational/status glyphs retain distinct source roles. */
109
+ export function getFlowIconStyles(type, options = {}) {
110
+ const size = options.size ?? 'medium';
111
+ const category = type.startsWith('edge-') ? type.slice(5) : type;
112
+ return {
113
+ fontSize: `${typeof size === 'number' ? size : FLOW_ICON[size]}px`,
114
+ color: options.disabled ? variable('color.icon.disabled') :
115
+ options.color ?? (iconRoles[type] ? variable(iconRoles[type]) : getNodeColor(category)),
116
+ display: 'inline-flex', alignItems: 'center', justifyContent: 'center'
117
+ };
118
+ }
119
+ const edgeDashes = {
120
+ dependency: undefined, transformation: '5,5', conditional: '2,2', dataFlow: '8,3,2,3'
121
+ };
122
+ /** Directed target stroke wins over category fallback; dashes communicate relation kind. */
123
+ export function getFlowEdgeStyles(category, suppliedStyle) {
124
+ return {
125
+ stroke: suppliedStyle?.stroke ?? getEdgeColorPalette(category).primary,
126
+ strokeWidth: FLOW_EDGE.width, strokeDasharray: edgeDashes[category],
127
+ fill: 'none', vectorEffect: 'non-scaling-stroke'
128
+ };
129
+ }
82
130
  export const FLOW_VIEWPORT = {
83
131
  minZoom: 0.2, maxZoom: 4, snapToGrid: true,
84
132
  snapGrid: [20, 20], fitViewOnInit: true
@@ -110,12 +158,14 @@ export function createVueFlowTheme(options = {}) {
110
158
  /** Preserve target identity for both the visible stroke and arrow marker. */
111
159
  export function styleTargetEdge(edge, nodes) {
112
160
  const target = nodes.find(node => node.id === edge.target);
113
- const stroke = getNodeColor(target?.type ?? 'task');
161
+ const stroke = getNodeColor(target?.type || target?.data?.nodeType || 'task');
114
162
  return {
115
163
  ...edge, animated: false,
116
164
  style: { ...(typeof edge.style === 'object' ? edge.style : {}), stroke },
117
165
  markerEnd: {
118
- ...(typeof edge.markerEnd === 'object' ? edge.markerEnd : { type: MarkerType.ArrowClosed }),
166
+ ...(typeof edge.markerEnd === 'object' ? edge.markerEnd : {
167
+ type: edge.markerEnd === MarkerType.Arrow ? MarkerType.Arrow : MarkerType.ArrowClosed
168
+ }),
119
169
  color: stroke, width: FLOW_EDGE.marker, height: FLOW_EDGE.marker
120
170
  }
121
171
  };
@@ -157,3 +207,7 @@ export function getFlowNodeStyles(type, state = {}) {
157
207
  connectorArrow: { color: palette.primary, font: variable('font.label.default') }
158
208
  };
159
209
  }
210
+ /** Minimal detail removes costly decoration, never semantic contrast or graph data. */
211
+ export function getFlowDetailStyles(level, suppliedStyle) {
212
+ return level === 'minimal' ? { ...suppliedStyle, boxShadow: 'none' } : suppliedStyle;
213
+ }
package/dist/styles.css CHANGED
@@ -18,7 +18,7 @@
18
18
  .bh-vue-flow .vue-flow__node-output {
19
19
  background: var(--bh-color-surface);
20
20
  border: var(--bh-border-width-default) solid var(--bh-color-border-bold);
21
- border-radius: var(--bh-radius-075);
21
+ border-radius: var(--bh-radius-100);
22
22
  padding: var(--bh-space-150);
23
23
  }
24
24
  .bh-vue-flow .vue-flow__node-default.selectable:hover,
@@ -33,10 +33,16 @@
33
33
  }
34
34
  .bh-vue-flow .vue-flow__node:focus-visible,
35
35
  .bh-vue-flow .vue-flow__node :focus-visible,
36
- .bh-vue-flow .vue-flow__controls-button:focus-visible {
36
+ .bh-vue-flow .vue-flow__edge:focus-visible,
37
+ .bh-vue-flow .vue-flow__edge-path:focus-visible,
38
+ .bh-vue-flow :is(button, [role='button']):focus-visible {
37
39
  outline: var(--bh-border-width-focused) solid var(--bh-flow-focus, var(--bh-color-border-focus));
38
40
  outline-offset: var(--bh-state-focus-offset);
39
41
  }
42
+ .bh-vue-flow[data-bh-high-contrast='true'] :is(.vue-flow__node, .vue-flow__edge, .vue-flow__edge-path, button, [role='button']):focus-visible,
43
+ .bh-vue-flow[data-bh-high-contrast='true'] .vue-flow__node :focus-visible {
44
+ outline-width: var(--bh-border-width-accent);
45
+ }
40
46
  .bh-vue-flow .vue-flow__node[data-error='true'] {
41
47
  border-color: var(--bh-flow-error, var(--bh-color-border-danger));
42
48
  border-style: dashed;
@@ -69,9 +75,14 @@
69
75
  border: var(--bh-border-width-selected) dashed var(--bh-color-border-focus);
70
76
  }
71
77
  .bh-vue-flow .vue-flow__controls {
78
+ box-sizing: border-box;
79
+ display: flex;
80
+ flex-direction: column;
81
+ gap: var(--bh-space-050);
82
+ padding: var(--bh-space-050);
72
83
  background: var(--bh-color-surface);
73
84
  border: var(--bh-border-width-default) solid var(--bh-color-border);
74
- border-radius: var(--bh-radius-075);
85
+ border-radius: var(--bh-radius-100);
75
86
  box-shadow: var(--bh-elevation-shadow-raised);
76
87
  }
77
88
  .bh-vue-flow .vue-flow__controls-button {
@@ -82,7 +93,10 @@
82
93
  background: var(--bh-color-surface);
83
94
  color: var(--bh-color-icon);
84
95
  fill: currentColor;
85
- border-bottom: var(--bh-border-width-default) solid var(--bh-color-border);
96
+ border: 0;
97
+ }
98
+ .bh-vue-flow .vue-flow__controls-button {
99
+ border-radius: var(--bh-radius-050);
86
100
  }
87
101
  .bh-vue-flow .vue-flow__controls-button:hover {
88
102
  background: var(--bh-color-background-neutral-subtle-hover);
@@ -98,8 +112,9 @@
98
112
  .bh-vue-flow .vue-flow__minimap {
99
113
  background: var(--bh-color-surface);
100
114
  border: var(--bh-border-width-default) solid var(--bh-color-border-bold);
101
- border-radius: var(--bh-radius-075);
115
+ border-radius: var(--bh-radius-100);
102
116
  box-shadow: var(--bh-elevation-shadow-raised);
117
+ overflow: hidden;
103
118
  }
104
119
  .bh-vue-flow .vue-flow__minimap-mask { fill: var(--bh-color-surface-scrim); }
105
120
  .bh-vue-flow .vue-flow__minimap-node { stroke: var(--bh-color-border-bold); }
@@ -114,3 +129,173 @@
114
129
  height: var(--bh-size-target-touch);
115
130
  }
116
131
  }
132
+ @media (width < 768px) {
133
+ .bh-vue-flow .vue-flow__controls-button {
134
+ width: var(--bh-size-target-touch);
135
+ height: var(--bh-size-target-touch);
136
+ }
137
+ }
138
+
139
+ /* User-selected accessibility adaptations belong to the actual graph host. */
140
+ .bh-vue-flow[data-bh-large-text='true'] .vue-flow__node {
141
+ font-size: 1.125em;
142
+ }
143
+ .bh-vue-flow[data-bh-increased-spacing='true'] .vue-flow__node {
144
+ line-height: 1.6;
145
+ letter-spacing: 0.02em;
146
+ }
147
+
148
+ .bh-flow-icon[data-bh-loading='true'] {
149
+ animation: bh-flow-loading 1s linear infinite;
150
+ }
151
+ @keyframes bh-flow-loading {
152
+ to { transform: rotate(360deg); }
153
+ }
154
+ @media (prefers-reduced-motion: reduce) {
155
+ .bh-flow-icon[data-bh-loading='true'] { animation: none; }
156
+ }
157
+
158
+ /* Labelled relationship markers identify categories, never operational status. */
159
+ .bh-flow-category-mark {
160
+ display: inline-block;
161
+ flex: none;
162
+ width: var(--bh-space-075);
163
+ height: var(--bh-space-075);
164
+ border-radius: 50%;
165
+ background: var(--bh-flow-category-task-border);
166
+ }
167
+ .bh-flow-category-mark[data-bh-category='dependency'] { background: var(--bh-flow-category-dependency-border); }
168
+ .bh-flow-category-mark[data-bh-category='transformation'] { background: var(--bh-flow-category-transformation-border); }
169
+ .bh-flow-category-mark[data-bh-category='validation'] { background: var(--bh-flow-category-validation-border); }
170
+ .bh-flow-category-mark[data-bh-category='pushStep'] { background: var(--bh-flow-category-pushStep-border); }
171
+ .bh-flow-category-mark[data-bh-category='decision'] { background: var(--bh-flow-category-decision-border); }
172
+ .bh-flow-category-mark[data-bh-category='loop'] { background: var(--bh-flow-category-loop-border); }
173
+ .bh-flow-category-mark[data-bh-category='grouped'] { background: var(--bh-flow-category-grouped-border); }
174
+
175
+ /* Native workflow-canvas theme variables are its public styling API. Scope the host
176
+ protocol here; never change application-wide primary/text variables. */
177
+ .bh-workflow-canvas {
178
+ --background: var(--bh-color-surface-page);
179
+ --foreground: var(--bh-color-text);
180
+ --card: var(--bh-color-surface);
181
+ --popover: var(--bh-color-surface-overlay);
182
+ --muted: var(--bh-color-background-neutral);
183
+ --muted-foreground: var(--bh-color-text-subtle);
184
+ --primary: var(--bh-color-border-focus);
185
+ --destructive: var(--bh-color-border-danger);
186
+ --border: var(--bh-color-border);
187
+ --radius: var(--bh-radius-050);
188
+ --wf-font-mono: var(--bh-font-family-mono);
189
+ --wf-control-height: var(--bh-size-control-default);
190
+ --wf-dock-radius: var(--bh-radius-100);
191
+ --wf-focus-outline: var(--bh-border-width-focused) solid var(--bh-color-border-focus);
192
+ --wf-focus-outline-offset: var(--bh-state-focus-offset);
193
+ --wf-chrome-shadow: var(--bh-elevation-shadow-overlay);
194
+ color: var(--bh-color-text);
195
+ font: var(--bh-font-body-default);
196
+ }
197
+ .bh-workflow-canvas .wf-canvas {
198
+ --wf-bg: var(--bh-diagram-canvas);
199
+ --wf-grid: var(--bh-diagram-grid);
200
+ --wf-edge: var(--bh-diagram-edge);
201
+ --wf-edge-active: var(--bh-diagram-selection-ring);
202
+ --wf-edge-failure: var(--bh-diagram-fail-stroke);
203
+ --wf-label-bg: var(--bh-diagram-edge-label-bg);
204
+ --wf-label-fg: var(--bh-diagram-edge-label-text);
205
+ --wf-label-border: var(--bh-color-border);
206
+ --wf-chrome-bg: var(--bh-color-surface);
207
+ --wf-chrome-fg: var(--bh-color-text);
208
+ --wf-chrome-hover: var(--bh-color-background-neutral-subtle-hover);
209
+ --wf-chrome-border: var(--bh-color-border-bold);
210
+ --wf-dock-height: calc(var(--bh-size-control-default) + var(--bh-space-100) + 2 * var(--bh-border-width-default));
211
+ --wf-chrome-radius: var(--bh-radius-050);
212
+ --wf-node-width: var(--bh-diagram-card-width);
213
+ --wf-node-bg: var(--bh-diagram-node-fill);
214
+ --wf-node-fg: var(--bh-diagram-node-title);
215
+ --wf-node-muted: var(--bh-diagram-node-desc);
216
+ --wf-node-border: var(--bh-diagram-node-border);
217
+ --wf-node-radius: var(--bh-radius-100);
218
+ --wf-node-selected-border: var(--bh-diagram-node-border);
219
+ --wf-node-ring: var(--bh-diagram-selection-ring);
220
+ --wf-node-shape-shadow: none;
221
+ --wf-node-shape-selected: none;
222
+ --wf-node-padding-block: var(--bh-diagram-padding);
223
+ --wf-node-column-gap: var(--bh-space-150);
224
+ --wf-node-row-gap: var(--bh-space-050);
225
+ --wf-node-status-size: var(--bh-size-icon-default);
226
+ --wf-node-logo-size: var(--bh-content-partner-logo-image-size);
227
+ --wf-tone-bg: var(--bh-diagram-tile-bg);
228
+ --wf-tone-fg: var(--bh-diagram-tile-glyph);
229
+ --wf-node-kind-bg: var(--bh-diagram-node-fill);
230
+ --wf-node-kind-fg: var(--bh-diagram-node-desc);
231
+ }
232
+ .bh-workflow-canvas .wf-node__badge {
233
+ width: var(--bh-diagram-tile-size);
234
+ height: var(--bh-diagram-tile-size);
235
+ }
236
+ .bh-workflow-canvas .wf-node__badge > svg {
237
+ width: auto;
238
+ height: var(--bh-diagram-glyph-size);
239
+ }
240
+ .bh-workflow-canvas .wf-node__content > .wf-node__kind {
241
+ padding: 0;
242
+ background: transparent;
243
+ }
244
+ .bh-workflow-canvas .wf-node__title {
245
+ white-space: normal;
246
+ overflow-wrap: anywhere;
247
+ }
248
+ .bh-workflow-canvas .wf-node__head { height: auto; }
249
+ .bh-workflow-canvas .wf-node__logos { padding-block-start: var(--bh-space-050); }
250
+ /* Native node image geometry has no independent aspect-ratio input. */
251
+ .bh-workflow-canvas .wf-node__logos > img {
252
+ width: auto;
253
+ flex: none;
254
+ }
255
+ .bh-workflow-canvas .wf-node__execution > svg,
256
+ .bh-workflow-canvas .wf-node__indicators svg {
257
+ width: auto;
258
+ }
259
+
260
+ /* Native dock geometry has fixed-pixel gaps/type and opacity-only disabled paint,
261
+ without corresponding variables. Keep its actual controls, but scale this
262
+ shared compact family through the same Source roles as native AntD docks. */
263
+ .bh-workflow-canvas .wf-dock__bar {
264
+ gap: var(--bh-space-025);
265
+ padding: var(--bh-space-050);
266
+ border-width: var(--bh-border-width-default);
267
+ }
268
+ .bh-workflow-canvas .wf-dock__group {
269
+ gap: var(--bh-space-025);
270
+ }
271
+ .bh-workflow-canvas .wf-dock__group + .wf-dock__group {
272
+ margin-left: var(--bh-space-025);
273
+ padding-left: var(--bh-space-050);
274
+ border-left-width: var(--bh-border-width-default);
275
+ }
276
+ .bh-workflow-canvas .wf-dock__btn {
277
+ gap: var(--bh-space-050);
278
+ padding-inline: var(--bh-space-075);
279
+ font: var(--bh-font-label-small);
280
+ }
281
+ .bh-workflow-canvas .wf-dock__btn:not(:disabled):active {
282
+ background: var(--bh-color-background-neutral-subtle-pressed);
283
+ }
284
+ .bh-workflow-canvas .wf-dock__btn:disabled {
285
+ opacity: 1;
286
+ color: var(--bh-color-text-disabled);
287
+ background: transparent;
288
+ cursor: not-allowed;
289
+ }
290
+ .bh-workflow-canvas .wf-dock__icon {
291
+ width: auto;
292
+ height: var(--bh-size-icon-default);
293
+ }
294
+ @media (pointer: coarse), (width < 768px) {
295
+ .bh-workflow-canvas {
296
+ --wf-control-height: var(--bh-size-target-touch);
297
+ }
298
+ .bh-workflow-canvas .wf-canvas {
299
+ --wf-dock-height: calc(var(--bh-size-target-touch) + var(--bh-space-100) + 2 * var(--bh-border-width-default));
300
+ }
301
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@beehexa/vueflow-tokens",
3
- "version": "2611.3.4",
3
+ "version": "2611.5.2",
4
4
  "description": "Source-backed Beehexa theme, semantic categories and geometry for VueFlow 1",
5
5
  "repository": {
6
6
  "type": "git",
@@ -29,7 +29,7 @@
29
29
  "./package.json": "./package.json"
30
30
  },
31
31
  "dependencies": {
32
- "@beehexa/design-tokens": "2611.3.4"
32
+ "@beehexa/design-tokens": "2611.5.2"
33
33
  },
34
34
  "peerDependencies": {
35
35
  "@vue-flow/core": "^1.0.0",
@@ -41,8 +41,8 @@
41
41
  "access": "public"
42
42
  },
43
43
  "scripts": {
44
- "build": "node ../../scripts/build-adapters.mjs vueflow-tokens",
45
- "check": "node ../../scripts/build-adapters.mjs vueflow-tokens --check",
44
+ "build": "node ../../scripts/build-runtime-packages.mjs vueflow-tokens",
45
+ "check": "node ../../scripts/build-runtime-packages.mjs vueflow-tokens --check",
46
46
  "prepack": "npm run build"
47
47
  },
48
48
  "engines": {