@luxalgo/vela 0.6.8 → 0.6.10

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.
Files changed (45) hide show
  1. package/dist/{DataProvider-BSLlBpB9.d.ts → DataProvider-CWmp31dA.d.ts} +49 -1
  2. package/dist/{DataProvider-BsQM2WNH.d.cts → DataProvider-l_eLMly_.d.cts} +49 -1
  3. package/dist/{chunk-L3I2CCYO.js → chunk-4KZVZ7QQ.js} +49 -2
  4. package/dist/{chunk-SQETIBFU.js → chunk-FFOP37FQ.js} +996 -377
  5. package/dist/{chunk-2R7BANEM.js → chunk-G77Y7LK2.js} +2 -2
  6. package/dist/{chunk-PN5KWFZ4.js → chunk-KG4YT3TI.js} +5 -3
  7. package/dist/{chunk-OICPLNU7.js → chunk-MHY7MVXH.js} +192 -2
  8. package/dist/{chunk-N7LGMKCE.js → chunk-NMTQXNT4.js} +637 -164
  9. package/dist/{contributions-DLLdV9jD.d.ts → contributions-BCz6Dr6a.d.ts} +99 -7
  10. package/dist/{contributions-Vw-Hm58R.d.cts → contributions-D9vTzm5p.d.cts} +99 -7
  11. package/dist/index.cjs +1210 -383
  12. package/dist/index.d.cts +37 -11
  13. package/dist/index.d.ts +37 -11
  14. package/dist/index.js +4 -4
  15. package/dist/{options-BaVTMXaO.d.ts → options-DSqHsQyN.d.cts} +84 -7
  16. package/dist/{options-BaVTMXaO.d.cts → options-DSqHsQyN.d.ts} +84 -7
  17. package/dist/{plugin-BnJgjLAy.d.cts → plugin-Bt8hLR8Z.d.cts} +3 -3
  18. package/dist/{plugin-CC7rBrOY.d.ts → plugin-CH7pfMrE.d.ts} +3 -3
  19. package/dist/plugin.cjs +21 -3
  20. package/dist/plugin.d.cts +4 -4
  21. package/dist/plugin.d.ts +4 -4
  22. package/dist/plugin.js +2 -2
  23. package/dist/providers/binance.d.cts +2 -2
  24. package/dist/providers/binance.d.ts +2 -2
  25. package/dist/providers/coinbase.d.cts +2 -2
  26. package/dist/providers/coinbase.d.ts +2 -2
  27. package/dist/providers/hyperliquid.d.cts +2 -2
  28. package/dist/providers/hyperliquid.d.ts +2 -2
  29. package/dist/{statusline-CGkB2EOo.d.ts → statusline-5K7y4Ya2.d.ts} +5 -3
  30. package/dist/{statusline-DqzBqy42.d.cts → statusline-TYLQmoeh.d.cts} +5 -3
  31. package/dist/ui.cjs +208 -5
  32. package/dist/ui.d.cts +91 -2
  33. package/dist/ui.d.ts +91 -2
  34. package/dist/ui.js +3 -3
  35. package/dist/vela.global.js +1210 -383
  36. package/dist/vela.global.min.js +99 -48
  37. package/dist/widget.cjs +1771 -449
  38. package/dist/widget.d.cts +17 -6
  39. package/dist/widget.d.ts +17 -6
  40. package/dist/widget.js +7 -7
  41. package/dist/workspace.cjs +1771 -449
  42. package/dist/workspace.d.cts +100 -6
  43. package/dist/workspace.d.ts +100 -6
  44. package/dist/workspace.js +6 -6
  45. package/package.json +1 -1
package/dist/ui.cjs CHANGED
@@ -219,6 +219,12 @@ function registerIcon(id, svg) {
219
219
  function iconMarkup(id) {
220
220
  return registry.get(id) ?? null;
221
221
  }
222
+ function icon(id) {
223
+ return registry.get(id) ?? "";
224
+ }
225
+ function iconAt(id, px) {
226
+ return icon(id).replace("<svg ", `<svg width="${px}" height="${px}" `);
227
+ }
222
228
  function svg16(body, extra = "") {
223
229
  return `<svg viewBox="0 0 16 16" width="1em" height="1em" ${extra ? extra + " " : ""}fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round">${body}</svg>`;
224
230
  }
@@ -273,11 +279,11 @@ registerIcon(
273
279
  );
274
280
  registerIcon(
275
281
  "market-pre",
276
- svg24('<path d="M12 2v8"/><path d="m4.93 10.93 1.41 1.41"/><path d="M2 18h2"/><path d="M20 18h2"/><path d="m19.07 10.93-1.41 1.41"/><path d="M22 22H2"/><path d="m16 6-4 4-4-4"/><path d="M16 18a4 4 0 0 0-8 0"/>')
282
+ svg24('<path d="M12 2v8"/><path d="m4.93 10.93 1.41 1.41"/><path d="M2 18h2"/><path d="M20 18h2"/><path d="m19.07 10.93-1.41 1.41"/><path d="M22 22H2"/><path d="m8 6 4-4 4 4"/><path d="M16 18a4 4 0 0 0-8 0"/>')
277
283
  );
278
284
  registerIcon(
279
285
  "market-post",
280
- svg24('<path d="M12 10V2"/><path d="m4.93 10.93 1.41 1.41"/><path d="M2 18h2"/><path d="M20 18h2"/><path d="m19.07 10.93-1.41 1.41"/><path d="M22 22H2"/><path d="m16 18-4-4-4 4"/><path d="M16 6a4 4 0 0 0-8 0"/>')
286
+ svg24('<path d="M12 10V2"/><path d="m4.93 10.93 1.41 1.41"/><path d="M2 18h2"/><path d="M20 18h2"/><path d="m19.07 10.93-1.41 1.41"/><path d="M22 22H2"/><path d="m16 14-4 4-4-4"/><path d="M16 6a4 4 0 0 0-8 0"/>')
281
287
  );
282
288
  registerIcon("market-closed", svg24('<path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"/>'));
283
289
  registerIcon(
@@ -310,6 +316,8 @@ registerIcon("folder-plus", S('<path d="M1.6 4.4a1 1 0 0 1 1-1h2.7l1.3 1.7h6.8a1
310
316
  registerIcon("folder-minus", S('<path d="M1.6 4.4a1 1 0 0 1 1-1h2.7l1.3 1.7h6.8a1 1 0 0 1 1 1v6.5a1 1 0 0 1-1 1h-10.8a1 1 0 0 1-1-1z"/><path d="M6.2 9.4h3.6"/>'));
311
317
  registerIcon("collapse", S('<path d="M3 8h10"/>'));
312
318
  registerIcon("expand", S('<rect x="2.2" y="2.2" width="11.6" height="11.6" rx="1.4"/><path d="M8 5.4v5.2M5.4 8h5.2"/>'));
319
+ registerIcon("plus", S('<path d="M8 2.8v10.4M2.8 8h10.4"/>'));
320
+ registerIcon("minus", S('<path d="M2.8 8h10.4"/>'));
313
321
  registerIcon("maximize", S('<path d="M2.5 6V3a.5.5 0 0 1 .5-.5h3M10 2.5h3a.5.5 0 0 1 .5.5v3M13.5 10v3a.5.5 0 0 1-.5.5h-3M6 13.5H3a.5.5 0 0 1-.5-.5v-3"/>'));
314
322
  registerIcon("restore", S('<path d="M6.2 2.5v3.7H2.5M9.8 13.5V9.8h3.7M13.5 6.2H9.8V2.5M2.5 9.8h3.7v3.7"/>'));
315
323
  registerIcon("star", S('<path d="M8 2.2l1.75 3.55 3.9.55-2.8 2.75.65 3.9L8 11.1l-3.5 1.85.65-3.9-2.8-2.75 3.9-.55z"/>'));
@@ -317,7 +325,7 @@ registerIcon("star-filled", S('<path d="M8 2.2l1.75 3.55 3.9.55-2.8 2.75.65 3.9L
317
325
  registerIcon("grip", S('<circle cx="6" cy="3.5" r="1"/><circle cx="10" cy="3.5" r="1"/><circle cx="6" cy="8" r="1"/><circle cx="10" cy="8" r="1"/><circle cx="6" cy="12.5" r="1"/><circle cx="10" cy="12.5" r="1"/>', 'fill="currentColor" stroke="none"'));
318
326
  registerIcon("kebab", S('<circle cx="8" cy="3.2" r="1.2"/><circle cx="8" cy="8" r="1.2"/><circle cx="8" cy="12.8" r="1.2"/>', 'fill="currentColor" stroke="none"'));
319
327
  registerIcon("burger", S('<path d="M2.5 4.5h11M2.5 8h11M2.5 11.5h11"/>'));
320
- registerIcon("reset", S('<rect x="6" y="6" width="4" height="4" rx="0.8"/><path d="M2.2 8a5.8 5.8 0 1 0 1.9-4.3L2.2 5.3"/><path d="M2.2 2.2v3.1h3.1"/>'));
328
+ registerIcon("reset", S('<path d="M2 8a6 6 0 1 0 6-6 6.5 6.5 0 0 0-4.5 1.83L2 5.33"/><path d="M2 2v3.33h3.33"/>'));
321
329
  registerIcon("pane-collapse", S('<path d="M2.6 9.4h4v4M13.4 6.6h-4v-4"/><path d="m9.4 6.6 4.2-4.2M2.4 13.6l4.2-4.2"/>'));
322
330
  registerIcon("pane-expand", S('<path d="M9.8 2.4h3.8v3.8M6.2 13.6H2.4V9.8"/><path d="m13.6 2.4-4.4 4.4M2.4 13.6l4.4-4.4"/>'));
323
331
  registerIcon("cursor", svg24('<path d="M5 3l6 16 2-6 6-2z"/>', 'fill="currentColor" stroke="none"'));
@@ -2358,12 +2366,12 @@ var NumberInput = class {
2358
2366
  buildSteppers(doc, applyDir) {
2359
2367
  const steps = doc.createElement("div");
2360
2368
  steps.className = "vela-num-step";
2361
- const mk = (dir, icon, label) => {
2369
+ const mk = (dir, icon2, label) => {
2362
2370
  const b = doc.createElement("button");
2363
2371
  b.type = "button";
2364
2372
  b.tabIndex = -1;
2365
2373
  b.setAttribute("aria-label", label);
2366
- b.appendChild(iconEl(icon, doc));
2374
+ b.appendChild(iconEl(icon2, doc));
2367
2375
  let timer = 0;
2368
2376
  const apply = () => applyDir(dir);
2369
2377
  const stop = () => {
@@ -3396,6 +3404,196 @@ function buildFieldControl(desc) {
3396
3404
  return { el };
3397
3405
  }
3398
3406
 
3407
+ // src/ui/components/callout-bubble/controller.ts
3408
+ function closesPanel(item) {
3409
+ return item.close !== false;
3410
+ }
3411
+ function calloutPanelRows(items) {
3412
+ const rows = [];
3413
+ for (const item of items) {
3414
+ if (item.type === "text") {
3415
+ rows.push({ type: "text", text: item.text });
3416
+ continue;
3417
+ }
3418
+ const last = rows[rows.length - 1];
3419
+ if (last && last.type === "buttons") last.buttons.push(item);
3420
+ else rows.push({ type: "buttons", buttons: [item] });
3421
+ }
3422
+ return rows;
3423
+ }
3424
+
3425
+ // src/ui/components/callout-bubble/styles.ts
3426
+ var CALLOUT_STYLE_ID = "vela-ui-callout-bubble";
3427
+ var CALLOUT_CSS = `
3428
+ .vela-callout {
3429
+ display: inline-grid;
3430
+ place-items: center;
3431
+ border-radius: 50%;
3432
+ flex: none;
3433
+ line-height: 0;
3434
+ box-sizing: border-box;
3435
+ cursor: default;
3436
+ user-select: none;
3437
+ -webkit-user-select: none;
3438
+ }
3439
+ .vela-callout[role='button'] { cursor: pointer; }
3440
+ .vela-callout svg { display: block; }
3441
+ /* The deployed panel \u2014 carries the kit's elevated-card look itself (the popover
3442
+ shell is bare positioning chrome). */
3443
+ .vela-callout-panel {
3444
+ display: flex;
3445
+ flex-direction: column;
3446
+ gap: 8px;
3447
+ padding: 10px 12px;
3448
+ max-width: 280px;
3449
+ box-sizing: border-box;
3450
+ background: var(--vela-surface-elev);
3451
+ border: 1px solid var(--vela-border-strong);
3452
+ border-radius: 6px;
3453
+ box-shadow: var(--vela-shadow);
3454
+ color: var(--vela-fg);
3455
+ font: var(--vela-font-size-md) var(--vela-font);
3456
+ }
3457
+ .vela-callout-title { font-weight: 600; color: var(--vela-fg-bright); }
3458
+ .vela-callout-text { color: var(--vela-fg-muted); line-height: 1.45; white-space: pre-line; }
3459
+ .vela-callout-actions { display: flex; flex-wrap: wrap; gap: 8px; }
3460
+ .vela-callout-btn {
3461
+ cursor: pointer;
3462
+ height: 26px;
3463
+ padding: 0 10px;
3464
+ border-radius: 5px;
3465
+ border: 1px solid var(--vela-border);
3466
+ background: transparent;
3467
+ color: var(--vela-fg);
3468
+ font-size: var(--vela-font-size-md);
3469
+ font-family: inherit;
3470
+ transition: background var(--vela-dur-fast) ease, color var(--vela-dur-fast) ease, opacity var(--vela-dur-fast) ease, border-color var(--vela-dur-fast) ease;
3471
+ }
3472
+ .vela-callout-btn:hover { background: var(--vela-hover); color: var(--vela-fg-bright); border-color: var(--vela-fg-muted); }
3473
+ .vela-callout-btn-primary { border-color: var(--vela-selected-bg); background: var(--vela-selected-bg); color: var(--vela-selected-fg); }
3474
+ .vela-callout-btn-primary:hover { background: var(--vela-selected-bg); color: var(--vela-selected-fg); opacity: 0.85; border-color: var(--vela-selected-bg); }
3475
+ `;
3476
+
3477
+ // src/ui/components/callout-bubble/view.ts
3478
+ var CalloutBubble = class {
3479
+ constructor(opts) {
3480
+ this.pop = null;
3481
+ this.spec = { icon: opts.icon, background: opts.background, label: opts.label };
3482
+ if (opts.color !== void 0) this.spec.color = opts.color;
3483
+ if (opts.panel !== void 0) this.spec.panel = opts.panel;
3484
+ this.size = opts.size ?? 16;
3485
+ this.host = opts.host;
3486
+ this.theme = opts.theme;
3487
+ this.boundary = opts.boundary;
3488
+ const doc = (opts.host ?? document.body).ownerDocument;
3489
+ injectStyles(CALLOUT_STYLE_ID, CALLOUT_CSS, doc);
3490
+ this.el = doc.createElement("span");
3491
+ this.el.className = "vela-callout";
3492
+ this.el.style.width = `${this.size}px`;
3493
+ this.el.style.height = `${this.size}px`;
3494
+ this.el.addEventListener("click", (e) => {
3495
+ if (!this.spec.panel) return;
3496
+ e.stopPropagation();
3497
+ this.toggle();
3498
+ });
3499
+ this.el.addEventListener("dblclick", (e) => {
3500
+ if (this.spec.panel) e.stopPropagation();
3501
+ });
3502
+ this.el.addEventListener("keydown", (e) => {
3503
+ if (!this.spec.panel || e.key !== "Enter" && e.key !== " ") return;
3504
+ e.preventDefault();
3505
+ this.toggle();
3506
+ });
3507
+ this.dress();
3508
+ }
3509
+ /** Re-dress the bubble (a status change: new icon, tint, label, panel). */
3510
+ set(spec) {
3511
+ this.spec = { ...this.spec, ...spec };
3512
+ if ("panel" in spec) this.pop?.hide();
3513
+ this.dress();
3514
+ }
3515
+ /** Whether the deployed panel is currently open. */
3516
+ get open() {
3517
+ return this.pop?.open ?? false;
3518
+ }
3519
+ /** Close the deployed panel, if any. The bubble itself stays. */
3520
+ hidePanel() {
3521
+ this.pop?.hide();
3522
+ }
3523
+ destroy() {
3524
+ this.pop?.destroy();
3525
+ this.pop = null;
3526
+ this.el.remove();
3527
+ }
3528
+ dress() {
3529
+ const clickable = this.spec.panel !== void 0;
3530
+ this.el.style.background = this.spec.background;
3531
+ this.el.style.color = this.spec.color ?? "";
3532
+ this.el.innerHTML = iconAt(this.spec.icon, this.size - 4);
3533
+ this.el.setAttribute("aria-label", this.spec.label);
3534
+ if (clickable) {
3535
+ this.el.setAttribute("role", "button");
3536
+ this.el.tabIndex = 0;
3537
+ } else {
3538
+ this.el.removeAttribute("role");
3539
+ this.el.removeAttribute("tabindex");
3540
+ }
3541
+ }
3542
+ toggle() {
3543
+ if (this.pop?.open) {
3544
+ this.pop.hide();
3545
+ return;
3546
+ }
3547
+ const panel = this.spec.panel;
3548
+ if (!panel) return;
3549
+ this.pop?.destroy();
3550
+ this.pop = new Popover({
3551
+ trigger: this.el,
3552
+ gap: 6,
3553
+ content: (body) => this.buildPanel(body, panel),
3554
+ ...this.host ? { host: this.host } : {},
3555
+ ...this.theme ? { theme: this.theme() } : {},
3556
+ ...this.boundary ? { boundary: this.boundary } : {}
3557
+ });
3558
+ this.pop.show();
3559
+ }
3560
+ buildPanel(body, panel) {
3561
+ const doc = body.ownerDocument;
3562
+ const root = doc.createElement("div");
3563
+ root.className = "vela-callout-panel";
3564
+ if (panel.title) {
3565
+ const title = doc.createElement("div");
3566
+ title.className = "vela-callout-title";
3567
+ title.textContent = panel.title;
3568
+ root.appendChild(title);
3569
+ }
3570
+ for (const row of calloutPanelRows(panel.items)) {
3571
+ if (row.type === "text") {
3572
+ const text = doc.createElement("div");
3573
+ text.className = "vela-callout-text";
3574
+ text.textContent = row.text;
3575
+ root.appendChild(text);
3576
+ continue;
3577
+ }
3578
+ const actions = doc.createElement("div");
3579
+ actions.className = "vela-callout-actions";
3580
+ for (const item of row.buttons) {
3581
+ const btn = doc.createElement("button");
3582
+ btn.type = "button";
3583
+ btn.className = "vela-callout-btn" + (item.primary ? " vela-callout-btn-primary" : "");
3584
+ btn.textContent = item.label;
3585
+ btn.addEventListener("click", () => {
3586
+ item.run();
3587
+ if (closesPanel(item)) this.pop?.hide();
3588
+ });
3589
+ actions.appendChild(btn);
3590
+ }
3591
+ root.appendChild(actions);
3592
+ }
3593
+ body.appendChild(root);
3594
+ }
3595
+ };
3596
+
3399
3597
  Object.defineProperty(exports, "normalizeProps", {
3400
3598
  enumerable: true,
3401
3599
  get: function () { return vanilla.normalizeProps; }
@@ -3404,6 +3602,9 @@ Object.defineProperty(exports, "spreadProps", {
3404
3602
  enumerable: true,
3405
3603
  get: function () { return vanilla.spreadProps; }
3406
3604
  });
3605
+ exports.CALLOUT_CSS = CALLOUT_CSS;
3606
+ exports.CALLOUT_STYLE_ID = CALLOUT_STYLE_ID;
3607
+ exports.CalloutBubble = CalloutBubble;
3407
3608
  exports.ColorField = ColorField;
3408
3609
  exports.Dialog = Dialog;
3409
3610
  exports.Drawer = Drawer;
@@ -3427,10 +3628,12 @@ exports.blendOver = blendOver;
3427
3628
  exports.buildColorPicker = buildColorPicker;
3428
3629
  exports.buildFieldControl = buildFieldControl;
3429
3630
  exports.buildPalette = buildPalette;
3631
+ exports.calloutPanelRows = calloutPanelRows;
3430
3632
  exports.clampNumber = clampNumber;
3431
3633
  exports.closeColorPopover = closeColorPopover;
3432
3634
  exports.closeOpenPopovers = closeOpenPopovers;
3433
3635
  exports.closeWidthPopover = closeWidthPopover;
3636
+ exports.closesPanel = closesPanel;
3434
3637
  exports.colorField = colorField;
3435
3638
  exports.colorPickerController = colorPickerController;
3436
3639
  exports.combineColor = combineColor;
package/dist/ui.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- import { c as VelaTheme } from './options-BaVTMXaO.cjs';
1
+ import { c as VelaTheme } from './options-DSqHsQyN.cjs';
2
2
  import { MachineSchema, Service, Machine } from '@zag-js/core';
3
3
  export { a as KeyBindingDescriptor, K as KeymapManager, b as KeymapOptions, R as ResolvedBinding } from './keymap-CGOz5F5f.cjs';
4
4
  import * as tooltip from '@zag-js/tooltip';
@@ -883,4 +883,93 @@ declare class GlyphSelect<T extends string | number = string | number> {
883
883
  declare function widthField(theme: VelaTheme, getVal: () => number, onVal: (v: number) => void): HTMLElement;
884
884
  declare function closeWidthPopover(): void;
885
885
 
886
- export { ColorField, type ColorFieldOpts, type ColorFieldShape, type ColorPickerController, type ColorPickerControllerOptions, Dialog, type DialogApi, type DialogControllerOptions, type DialogOptions, type DialogService, Drawer, type DrawerApi, type DrawerControllerOptions, type DrawerOptions, type DrawerService, FIELD_FOCUS_CSS, FIELD_FOCUS_RING, FIELD_GAP_PX, type FieldControlDesc, type FieldControlHandle, type FieldGridOptions, type FieldGridVariant, type FieldInlineItem, type FieldLabelSize, type FieldRowOptions, type FieldSectionOptions, type FieldToggleOpts, type GlyphOption, GlyphSelect, type GlyphSelectController, type GlyphSelectControllerOptions, type GlyphSelectOptions, type MachineHandle, Menu, type MenuApi, type MenuControllerOptions, type MenuItemDescriptor, type MenuOptions, type MenuService, type NumberCommit, NumberInput, type NumberInputController, type NumberInputControllerOptions, type NumberInputOptions, type NumberSize, type PlaceArgs, type PlaceResult, Popover, type PopoverAlign, type PopoverBoundary, type PopoverController, type PopoverControllerOptions, type PopoverOptions, type PopoverPosition, type Rect, Select, type SelectController, type SelectControllerOptions, type SelectListPopoverOpts, type SelectOption, type SelectOptions, type SelectSize, Switch, type SwitchController, type SwitchControllerOptions, type SwitchOptions, type SwitchSize, type SwitchTone, TextArea, type TextAreaController, type TextAreaControllerOptions, type TextAreaOptions, type TextAreaSize, TextField, type TextFieldController, type TextFieldControllerOptions, type TextFieldOptions, type TextFieldSize, Tooltip, type TooltipApi, type TooltipControllerOptions, type TooltipOptions, type TooltipService, WIDTH_FIELD_OPTIONS, applyPlotOverlayTokens, applyThemeTokens, blendOver, buildColorPicker, buildFieldControl, buildPalette, clampNumber, closeColorPopover, closeOpenPopovers, closeWidthPopover, colorField, colorPickerController, combineColor, decorateSelectScroll, dialogController, drawerController, ensureUIHost, eventDismissedPopover, fieldGrid, fieldGridColumns, fieldRow, fieldSection, fieldSeparator, fillSelectList, glyphSelectController, hslHex, iconEl, injectStyles, insetRect, intersectRects, isPopoverOpen, lineWidthGlyph, menuController, nextUid, numberInputController, openPopoverTrigger, openSelectList, overlayScrollbarCss, placePopover, popoverController, runMachine, selectController, snapToStep, splitColor, switchController, textAreaController, textFieldController, toggleSelectList, tooltipController, transparencyChecker, viewportRect, widthField, widthFieldOptions, withAlpha };
886
+ /** One block of a deployed callout panel plain text, or a button running a caller action. */
887
+ type CalloutPanelItem = {
888
+ type: 'text';
889
+ text: string;
890
+ } | {
891
+ type: 'button';
892
+ label: string;
893
+ /** Emphasized (selection-colored) button — the panel's main action. */
894
+ primary?: boolean;
895
+ /** Close the panel after `run` (default true — an action answers the panel). */
896
+ close?: boolean;
897
+ run(): void;
898
+ };
899
+ /** The deployed panel: an optional heading over ordered text/button blocks. */
900
+ interface CalloutPanel {
901
+ title?: string;
902
+ items: CalloutPanelItem[];
903
+ }
904
+ /** What dresses the bubble itself (the panel is what the click deploys). */
905
+ interface CalloutBubbleSpec {
906
+ /** Icon id in the icon registry (`registerIcon`), centered in the bubble. */
907
+ icon: string;
908
+ /** Bubble fill — any CSS color, token expressions included. */
909
+ background: string;
910
+ /** Icon ink (default: `currentColor` inherited from the slot). */
911
+ color?: string;
912
+ /** Accessible name. Callers typically show the same text in their own tooltip. */
913
+ label: string;
914
+ /** Deployed panel — presence makes the bubble clickable. */
915
+ panel?: CalloutPanel;
916
+ }
917
+ /** Whether activating a panel button also closes the panel (defaults to yes). */
918
+ declare function closesPanel(item: Extract<CalloutPanelItem, {
919
+ type: 'button';
920
+ }>): boolean;
921
+ /** A panel row as the view lays it out: one text block, or a run of adjacent buttons. */
922
+ type CalloutPanelRow = {
923
+ type: 'text';
924
+ text: string;
925
+ } | {
926
+ type: 'buttons';
927
+ buttons: Array<Extract<CalloutPanelItem, {
928
+ type: 'button';
929
+ }>>;
930
+ };
931
+ /**
932
+ * Group a panel's ordered items into layout rows: consecutive buttons share one row
933
+ * (the common "text above, actions below" shape falls out naturally), text blocks
934
+ * stand alone. Pure — unit-tested apart from the DOM.
935
+ */
936
+ declare function calloutPanelRows(items: CalloutPanelItem[]): CalloutPanelRow[];
937
+
938
+ interface CalloutBubbleOptions extends CalloutBubbleSpec {
939
+ /** Bubble diameter in px (default 16; the icon renders 4px smaller). */
940
+ size?: number;
941
+ /** Where the deployed panel portals (default: the document body). Pass the chart
942
+ * or widget root so the panel lives inside the host's DOM. */
943
+ host?: HTMLElement;
944
+ /** Live theme, for a panel deployed OUTSIDE a `.vela-ui` token host (renderer
945
+ * chrome on a bare chart passes its theme getter; widget chrome may omit it). */
946
+ theme?: () => VelaTheme;
947
+ /** Panel clamp — `'viewport'` (default) flips the panel above the bubble when the
948
+ * bottom screen edge is too close for it to deploy below. */
949
+ boundary?: PopoverBoundary;
950
+ }
951
+ declare class CalloutBubble {
952
+ readonly el: HTMLElement;
953
+ private spec;
954
+ private readonly size;
955
+ private readonly host;
956
+ private readonly theme;
957
+ private readonly boundary;
958
+ private pop;
959
+ constructor(opts: CalloutBubbleOptions);
960
+ /** Re-dress the bubble (a status change: new icon, tint, label, panel). */
961
+ set(spec: Partial<CalloutBubbleSpec>): void;
962
+ /** Whether the deployed panel is currently open. */
963
+ get open(): boolean;
964
+ /** Close the deployed panel, if any. The bubble itself stays. */
965
+ hidePanel(): void;
966
+ destroy(): void;
967
+ private dress;
968
+ private toggle;
969
+ private buildPanel;
970
+ }
971
+
972
+ declare const CALLOUT_STYLE_ID = "vela-ui-callout-bubble";
973
+ declare const CALLOUT_CSS = "\n.vela-callout {\n display: inline-grid;\n place-items: center;\n border-radius: 50%;\n flex: none;\n line-height: 0;\n box-sizing: border-box;\n cursor: default;\n user-select: none;\n -webkit-user-select: none;\n}\n.vela-callout[role='button'] { cursor: pointer; }\n.vela-callout svg { display: block; }\n/* The deployed panel \u2014 carries the kit's elevated-card look itself (the popover\n shell is bare positioning chrome). */\n.vela-callout-panel {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding: 10px 12px;\n max-width: 280px;\n box-sizing: border-box;\n background: var(--vela-surface-elev);\n border: 1px solid var(--vela-border-strong);\n border-radius: 6px;\n box-shadow: var(--vela-shadow);\n color: var(--vela-fg);\n font: var(--vela-font-size-md) var(--vela-font);\n}\n.vela-callout-title { font-weight: 600; color: var(--vela-fg-bright); }\n.vela-callout-text { color: var(--vela-fg-muted); line-height: 1.45; white-space: pre-line; }\n.vela-callout-actions { display: flex; flex-wrap: wrap; gap: 8px; }\n.vela-callout-btn {\n cursor: pointer;\n height: 26px;\n padding: 0 10px;\n border-radius: 5px;\n border: 1px solid var(--vela-border);\n background: transparent;\n color: var(--vela-fg);\n font-size: var(--vela-font-size-md);\n font-family: inherit;\n transition: background var(--vela-dur-fast) ease, color var(--vela-dur-fast) ease, opacity var(--vela-dur-fast) ease, border-color var(--vela-dur-fast) ease;\n}\n.vela-callout-btn:hover { background: var(--vela-hover); color: var(--vela-fg-bright); border-color: var(--vela-fg-muted); }\n.vela-callout-btn-primary { border-color: var(--vela-selected-bg); background: var(--vela-selected-bg); color: var(--vela-selected-fg); }\n.vela-callout-btn-primary:hover { background: var(--vela-selected-bg); color: var(--vela-selected-fg); opacity: 0.85; border-color: var(--vela-selected-bg); }\n";
974
+
975
+ export { CALLOUT_CSS, CALLOUT_STYLE_ID, CalloutBubble, type CalloutBubbleOptions, type CalloutBubbleSpec, type CalloutPanel, type CalloutPanelItem, type CalloutPanelRow, ColorField, type ColorFieldOpts, type ColorFieldShape, type ColorPickerController, type ColorPickerControllerOptions, Dialog, type DialogApi, type DialogControllerOptions, type DialogOptions, type DialogService, Drawer, type DrawerApi, type DrawerControllerOptions, type DrawerOptions, type DrawerService, FIELD_FOCUS_CSS, FIELD_FOCUS_RING, FIELD_GAP_PX, type FieldControlDesc, type FieldControlHandle, type FieldGridOptions, type FieldGridVariant, type FieldInlineItem, type FieldLabelSize, type FieldRowOptions, type FieldSectionOptions, type FieldToggleOpts, type GlyphOption, GlyphSelect, type GlyphSelectController, type GlyphSelectControllerOptions, type GlyphSelectOptions, type MachineHandle, Menu, type MenuApi, type MenuControllerOptions, type MenuItemDescriptor, type MenuOptions, type MenuService, type NumberCommit, NumberInput, type NumberInputController, type NumberInputControllerOptions, type NumberInputOptions, type NumberSize, type PlaceArgs, type PlaceResult, Popover, type PopoverAlign, type PopoverBoundary, type PopoverController, type PopoverControllerOptions, type PopoverOptions, type PopoverPosition, type Rect, Select, type SelectController, type SelectControllerOptions, type SelectListPopoverOpts, type SelectOption, type SelectOptions, type SelectSize, Switch, type SwitchController, type SwitchControllerOptions, type SwitchOptions, type SwitchSize, type SwitchTone, TextArea, type TextAreaController, type TextAreaControllerOptions, type TextAreaOptions, type TextAreaSize, TextField, type TextFieldController, type TextFieldControllerOptions, type TextFieldOptions, type TextFieldSize, Tooltip, type TooltipApi, type TooltipControllerOptions, type TooltipOptions, type TooltipService, WIDTH_FIELD_OPTIONS, applyPlotOverlayTokens, applyThemeTokens, blendOver, buildColorPicker, buildFieldControl, buildPalette, calloutPanelRows, clampNumber, closeColorPopover, closeOpenPopovers, closeWidthPopover, closesPanel, colorField, colorPickerController, combineColor, decorateSelectScroll, dialogController, drawerController, ensureUIHost, eventDismissedPopover, fieldGrid, fieldGridColumns, fieldRow, fieldSection, fieldSeparator, fillSelectList, glyphSelectController, hslHex, iconEl, injectStyles, insetRect, intersectRects, isPopoverOpen, lineWidthGlyph, menuController, nextUid, numberInputController, openPopoverTrigger, openSelectList, overlayScrollbarCss, placePopover, popoverController, runMachine, selectController, snapToStep, splitColor, switchController, textAreaController, textFieldController, toggleSelectList, tooltipController, transparencyChecker, viewportRect, widthField, widthFieldOptions, withAlpha };
package/dist/ui.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { c as VelaTheme } from './options-BaVTMXaO.js';
1
+ import { c as VelaTheme } from './options-DSqHsQyN.js';
2
2
  import { MachineSchema, Service, Machine } from '@zag-js/core';
3
3
  export { a as KeyBindingDescriptor, K as KeymapManager, b as KeymapOptions, R as ResolvedBinding } from './keymap-CGOz5F5f.js';
4
4
  import * as tooltip from '@zag-js/tooltip';
@@ -883,4 +883,93 @@ declare class GlyphSelect<T extends string | number = string | number> {
883
883
  declare function widthField(theme: VelaTheme, getVal: () => number, onVal: (v: number) => void): HTMLElement;
884
884
  declare function closeWidthPopover(): void;
885
885
 
886
- export { ColorField, type ColorFieldOpts, type ColorFieldShape, type ColorPickerController, type ColorPickerControllerOptions, Dialog, type DialogApi, type DialogControllerOptions, type DialogOptions, type DialogService, Drawer, type DrawerApi, type DrawerControllerOptions, type DrawerOptions, type DrawerService, FIELD_FOCUS_CSS, FIELD_FOCUS_RING, FIELD_GAP_PX, type FieldControlDesc, type FieldControlHandle, type FieldGridOptions, type FieldGridVariant, type FieldInlineItem, type FieldLabelSize, type FieldRowOptions, type FieldSectionOptions, type FieldToggleOpts, type GlyphOption, GlyphSelect, type GlyphSelectController, type GlyphSelectControllerOptions, type GlyphSelectOptions, type MachineHandle, Menu, type MenuApi, type MenuControllerOptions, type MenuItemDescriptor, type MenuOptions, type MenuService, type NumberCommit, NumberInput, type NumberInputController, type NumberInputControllerOptions, type NumberInputOptions, type NumberSize, type PlaceArgs, type PlaceResult, Popover, type PopoverAlign, type PopoverBoundary, type PopoverController, type PopoverControllerOptions, type PopoverOptions, type PopoverPosition, type Rect, Select, type SelectController, type SelectControllerOptions, type SelectListPopoverOpts, type SelectOption, type SelectOptions, type SelectSize, Switch, type SwitchController, type SwitchControllerOptions, type SwitchOptions, type SwitchSize, type SwitchTone, TextArea, type TextAreaController, type TextAreaControllerOptions, type TextAreaOptions, type TextAreaSize, TextField, type TextFieldController, type TextFieldControllerOptions, type TextFieldOptions, type TextFieldSize, Tooltip, type TooltipApi, type TooltipControllerOptions, type TooltipOptions, type TooltipService, WIDTH_FIELD_OPTIONS, applyPlotOverlayTokens, applyThemeTokens, blendOver, buildColorPicker, buildFieldControl, buildPalette, clampNumber, closeColorPopover, closeOpenPopovers, closeWidthPopover, colorField, colorPickerController, combineColor, decorateSelectScroll, dialogController, drawerController, ensureUIHost, eventDismissedPopover, fieldGrid, fieldGridColumns, fieldRow, fieldSection, fieldSeparator, fillSelectList, glyphSelectController, hslHex, iconEl, injectStyles, insetRect, intersectRects, isPopoverOpen, lineWidthGlyph, menuController, nextUid, numberInputController, openPopoverTrigger, openSelectList, overlayScrollbarCss, placePopover, popoverController, runMachine, selectController, snapToStep, splitColor, switchController, textAreaController, textFieldController, toggleSelectList, tooltipController, transparencyChecker, viewportRect, widthField, widthFieldOptions, withAlpha };
886
+ /** One block of a deployed callout panel plain text, or a button running a caller action. */
887
+ type CalloutPanelItem = {
888
+ type: 'text';
889
+ text: string;
890
+ } | {
891
+ type: 'button';
892
+ label: string;
893
+ /** Emphasized (selection-colored) button — the panel's main action. */
894
+ primary?: boolean;
895
+ /** Close the panel after `run` (default true — an action answers the panel). */
896
+ close?: boolean;
897
+ run(): void;
898
+ };
899
+ /** The deployed panel: an optional heading over ordered text/button blocks. */
900
+ interface CalloutPanel {
901
+ title?: string;
902
+ items: CalloutPanelItem[];
903
+ }
904
+ /** What dresses the bubble itself (the panel is what the click deploys). */
905
+ interface CalloutBubbleSpec {
906
+ /** Icon id in the icon registry (`registerIcon`), centered in the bubble. */
907
+ icon: string;
908
+ /** Bubble fill — any CSS color, token expressions included. */
909
+ background: string;
910
+ /** Icon ink (default: `currentColor` inherited from the slot). */
911
+ color?: string;
912
+ /** Accessible name. Callers typically show the same text in their own tooltip. */
913
+ label: string;
914
+ /** Deployed panel — presence makes the bubble clickable. */
915
+ panel?: CalloutPanel;
916
+ }
917
+ /** Whether activating a panel button also closes the panel (defaults to yes). */
918
+ declare function closesPanel(item: Extract<CalloutPanelItem, {
919
+ type: 'button';
920
+ }>): boolean;
921
+ /** A panel row as the view lays it out: one text block, or a run of adjacent buttons. */
922
+ type CalloutPanelRow = {
923
+ type: 'text';
924
+ text: string;
925
+ } | {
926
+ type: 'buttons';
927
+ buttons: Array<Extract<CalloutPanelItem, {
928
+ type: 'button';
929
+ }>>;
930
+ };
931
+ /**
932
+ * Group a panel's ordered items into layout rows: consecutive buttons share one row
933
+ * (the common "text above, actions below" shape falls out naturally), text blocks
934
+ * stand alone. Pure — unit-tested apart from the DOM.
935
+ */
936
+ declare function calloutPanelRows(items: CalloutPanelItem[]): CalloutPanelRow[];
937
+
938
+ interface CalloutBubbleOptions extends CalloutBubbleSpec {
939
+ /** Bubble diameter in px (default 16; the icon renders 4px smaller). */
940
+ size?: number;
941
+ /** Where the deployed panel portals (default: the document body). Pass the chart
942
+ * or widget root so the panel lives inside the host's DOM. */
943
+ host?: HTMLElement;
944
+ /** Live theme, for a panel deployed OUTSIDE a `.vela-ui` token host (renderer
945
+ * chrome on a bare chart passes its theme getter; widget chrome may omit it). */
946
+ theme?: () => VelaTheme;
947
+ /** Panel clamp — `'viewport'` (default) flips the panel above the bubble when the
948
+ * bottom screen edge is too close for it to deploy below. */
949
+ boundary?: PopoverBoundary;
950
+ }
951
+ declare class CalloutBubble {
952
+ readonly el: HTMLElement;
953
+ private spec;
954
+ private readonly size;
955
+ private readonly host;
956
+ private readonly theme;
957
+ private readonly boundary;
958
+ private pop;
959
+ constructor(opts: CalloutBubbleOptions);
960
+ /** Re-dress the bubble (a status change: new icon, tint, label, panel). */
961
+ set(spec: Partial<CalloutBubbleSpec>): void;
962
+ /** Whether the deployed panel is currently open. */
963
+ get open(): boolean;
964
+ /** Close the deployed panel, if any. The bubble itself stays. */
965
+ hidePanel(): void;
966
+ destroy(): void;
967
+ private dress;
968
+ private toggle;
969
+ private buildPanel;
970
+ }
971
+
972
+ declare const CALLOUT_STYLE_ID = "vela-ui-callout-bubble";
973
+ declare const CALLOUT_CSS = "\n.vela-callout {\n display: inline-grid;\n place-items: center;\n border-radius: 50%;\n flex: none;\n line-height: 0;\n box-sizing: border-box;\n cursor: default;\n user-select: none;\n -webkit-user-select: none;\n}\n.vela-callout[role='button'] { cursor: pointer; }\n.vela-callout svg { display: block; }\n/* The deployed panel \u2014 carries the kit's elevated-card look itself (the popover\n shell is bare positioning chrome). */\n.vela-callout-panel {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding: 10px 12px;\n max-width: 280px;\n box-sizing: border-box;\n background: var(--vela-surface-elev);\n border: 1px solid var(--vela-border-strong);\n border-radius: 6px;\n box-shadow: var(--vela-shadow);\n color: var(--vela-fg);\n font: var(--vela-font-size-md) var(--vela-font);\n}\n.vela-callout-title { font-weight: 600; color: var(--vela-fg-bright); }\n.vela-callout-text { color: var(--vela-fg-muted); line-height: 1.45; white-space: pre-line; }\n.vela-callout-actions { display: flex; flex-wrap: wrap; gap: 8px; }\n.vela-callout-btn {\n cursor: pointer;\n height: 26px;\n padding: 0 10px;\n border-radius: 5px;\n border: 1px solid var(--vela-border);\n background: transparent;\n color: var(--vela-fg);\n font-size: var(--vela-font-size-md);\n font-family: inherit;\n transition: background var(--vela-dur-fast) ease, color var(--vela-dur-fast) ease, opacity var(--vela-dur-fast) ease, border-color var(--vela-dur-fast) ease;\n}\n.vela-callout-btn:hover { background: var(--vela-hover); color: var(--vela-fg-bright); border-color: var(--vela-fg-muted); }\n.vela-callout-btn-primary { border-color: var(--vela-selected-bg); background: var(--vela-selected-bg); color: var(--vela-selected-fg); }\n.vela-callout-btn-primary:hover { background: var(--vela-selected-bg); color: var(--vela-selected-fg); opacity: 0.85; border-color: var(--vela-selected-bg); }\n";
974
+
975
+ export { CALLOUT_CSS, CALLOUT_STYLE_ID, CalloutBubble, type CalloutBubbleOptions, type CalloutBubbleSpec, type CalloutPanel, type CalloutPanelItem, type CalloutPanelRow, ColorField, type ColorFieldOpts, type ColorFieldShape, type ColorPickerController, type ColorPickerControllerOptions, Dialog, type DialogApi, type DialogControllerOptions, type DialogOptions, type DialogService, Drawer, type DrawerApi, type DrawerControllerOptions, type DrawerOptions, type DrawerService, FIELD_FOCUS_CSS, FIELD_FOCUS_RING, FIELD_GAP_PX, type FieldControlDesc, type FieldControlHandle, type FieldGridOptions, type FieldGridVariant, type FieldInlineItem, type FieldLabelSize, type FieldRowOptions, type FieldSectionOptions, type FieldToggleOpts, type GlyphOption, GlyphSelect, type GlyphSelectController, type GlyphSelectControllerOptions, type GlyphSelectOptions, type MachineHandle, Menu, type MenuApi, type MenuControllerOptions, type MenuItemDescriptor, type MenuOptions, type MenuService, type NumberCommit, NumberInput, type NumberInputController, type NumberInputControllerOptions, type NumberInputOptions, type NumberSize, type PlaceArgs, type PlaceResult, Popover, type PopoverAlign, type PopoverBoundary, type PopoverController, type PopoverControllerOptions, type PopoverOptions, type PopoverPosition, type Rect, Select, type SelectController, type SelectControllerOptions, type SelectListPopoverOpts, type SelectOption, type SelectOptions, type SelectSize, Switch, type SwitchController, type SwitchControllerOptions, type SwitchOptions, type SwitchSize, type SwitchTone, TextArea, type TextAreaController, type TextAreaControllerOptions, type TextAreaOptions, type TextAreaSize, TextField, type TextFieldController, type TextFieldControllerOptions, type TextFieldOptions, type TextFieldSize, Tooltip, type TooltipApi, type TooltipControllerOptions, type TooltipOptions, type TooltipService, WIDTH_FIELD_OPTIONS, applyPlotOverlayTokens, applyThemeTokens, blendOver, buildColorPicker, buildFieldControl, buildPalette, calloutPanelRows, clampNumber, closeColorPopover, closeOpenPopovers, closeWidthPopover, closesPanel, colorField, colorPickerController, combineColor, decorateSelectScroll, dialogController, drawerController, ensureUIHost, eventDismissedPopover, fieldGrid, fieldGridColumns, fieldRow, fieldSection, fieldSeparator, fillSelectList, glyphSelectController, hslHex, iconEl, injectStyles, insetRect, intersectRects, isPopoverOpen, lineWidthGlyph, menuController, nextUid, numberInputController, openPopoverTrigger, openSelectList, overlayScrollbarCss, placePopover, popoverController, runMachine, selectController, snapToStep, splitColor, switchController, textAreaController, textFieldController, toggleSelectList, tooltipController, transparencyChecker, viewportRect, widthField, widthFieldOptions, withAlpha };
package/dist/ui.js CHANGED
@@ -1,3 +1,3 @@
1
- export { Drawer, KeymapManager, Tooltip, drawerController, tooltipController } from './chunk-2R7BANEM.js';
2
- export { ColorField, Dialog, FIELD_GAP_PX, GlyphSelect, Menu, NumberInput, Popover, Select, Switch, TextArea, TextField, WIDTH_FIELD_OPTIONS, applyPlotOverlayTokens, applyThemeTokens, blendOver, buildColorPicker, buildFieldControl, buildPalette, clampNumber, closeColorPopover, closeOpenPopovers, closeWidthPopover, colorField, colorPickerController, combineColor, decorateSelectScroll, dialogController, ensureUIHost, eventDismissedPopover, fieldGrid, fieldGridColumns, fieldRow, fieldSection, fieldSeparator, fillSelectList, glyphSelectController, hslHex, insetRect, intersectRects, isPopoverOpen, lineWidthGlyph, menuController, nextUid, normalizeProps, numberInputController, openPopoverTrigger, openSelectList, placePopover, popoverController, runMachine, selectController, snapToStep, splitColor, spreadProps, switchController, textAreaController, textFieldController, toggleSelectList, transparencyChecker, viewportRect, widthField, widthFieldOptions } from './chunk-OICPLNU7.js';
3
- export { FIELD_FOCUS_CSS, FIELD_FOCUS_RING, iconEl, iconMarkup, injectStyles, overlayScrollbarCss, registerIcon, svg16, svg24, withAlpha } from './chunk-PN5KWFZ4.js';
1
+ export { Drawer, KeymapManager, Tooltip, drawerController, tooltipController } from './chunk-G77Y7LK2.js';
2
+ export { CALLOUT_CSS, CALLOUT_STYLE_ID, CalloutBubble, ColorField, Dialog, FIELD_GAP_PX, GlyphSelect, Menu, NumberInput, Popover, Select, Switch, TextArea, TextField, WIDTH_FIELD_OPTIONS, applyPlotOverlayTokens, applyThemeTokens, blendOver, buildColorPicker, buildFieldControl, buildPalette, calloutPanelRows, clampNumber, closeColorPopover, closeOpenPopovers, closeWidthPopover, closesPanel, colorField, colorPickerController, combineColor, decorateSelectScroll, dialogController, ensureUIHost, eventDismissedPopover, fieldGrid, fieldGridColumns, fieldRow, fieldSection, fieldSeparator, fillSelectList, glyphSelectController, hslHex, insetRect, intersectRects, isPopoverOpen, lineWidthGlyph, menuController, nextUid, normalizeProps, numberInputController, openPopoverTrigger, openSelectList, placePopover, popoverController, runMachine, selectController, snapToStep, splitColor, spreadProps, switchController, textAreaController, textFieldController, toggleSelectList, transparencyChecker, viewportRect, widthField, widthFieldOptions } from './chunk-MHY7MVXH.js';
3
+ export { FIELD_FOCUS_CSS, FIELD_FOCUS_RING, iconEl, iconMarkup, injectStyles, overlayScrollbarCss, registerIcon, svg16, svg24, withAlpha } from './chunk-KG4YT3TI.js';