@tangle-network/sandbox-ui 0.133.6 → 0.133.8

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.
@@ -1,4 +1,4 @@
1
- import { A as triggerNodeIndex, B as fmtTokens, C as COMPACT_NODE_SIZE, D as buildWorkflowGraph, I as shortModel, L as clampPreview, M as worstSeverity, O as isStructuralKind, R as fmtCost, S as statusBorder, _ as emptySlotLabel, a as NodeMark, b as problemSurface, c as RESTING_BORDER, d as STATUS_LABEL, g as edgeColor, h as StatusPill, j as wfEdgeId, l as RESTING_SHADOW, m as StatusFooter, n as classifyOutput, o as ProblemMarker, s as ProblemMessages, t as NodeOutputBody, u as STATUS_COLOR, v as kindAccent, x as problemTitle, y as problemBorder, z as fmtDuration } from "./node-output-BC5ZQ8R6.js";
1
+ import { A as triggerNodeIndex, B as fmtTokens, C as COMPACT_NODE_SIZE, D as buildWorkflowGraph, I as shortModel, L as clampPreview, M as worstSeverity, O as isStructuralKind, R as fmtCost, S as statusBorder, _ as emptySlotLabel, a as NodeMark, b as problemSurface, c as RESTING_BORDER, d as STATUS_LABEL, g as edgeColor, h as StatusPill, j as wfEdgeId, l as RESTING_SHADOW, m as StatusFooter, n as classifyOutput, o as ProblemMarker, s as ProblemMessages, t as NodeOutputBody, u as STATUS_COLOR, v as kindAccent, x as problemTitle, y as problemBorder, z as fmtDuration } from "./node-output-jpe1KLea.js";
2
2
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
3
  import { createContext, useCallback, useContext, useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
4
4
  import { Maximize2, Minimize2, Plus, X } from "lucide-react";
@@ -331,15 +331,6 @@ interface ConnectInput {
331
331
  export declare function useIntegrations({ apiBaseUrl, fetchImpl, autoLoad, refreshOnReturn }: UseIntegrationsOptions): UseIntegrationsResult;
332
332
  //#endregion
333
333
  //#region src/integrations/provider-logo.d.ts
334
- /**
335
- * Ordered candidate logo URLs for a provider slug, most specific first. The
336
- * renderer walks the chain on each `onError` until one loads, then falls back to
337
- * the monogram tile.
338
- *
339
- * Order: explicit `iconUrl` → full-color vector mark for brands Simple Icons
340
- * delisted (svgl.app) → a pinned override → the ActivePieces CDN by id (covers
341
- * most of the hub catalog) → derived simpleicons slugs → monogram.
342
- */
343
334
  export declare function providerLogoCandidates(opts: {
344
335
  id: string;
345
336
  iconUrl?: string | null;
@@ -1,4 +1,4 @@
1
- import { n as normalizeProviderId, r as providerLogoCandidates, t as ProviderIcon } from "./provider-logo-X9PkbMIX.js";
1
+ import { n as normalizeProviderId, r as providerLogoCandidates, t as ProviderIcon } from "./provider-logo-BGCziCbM.js";
2
2
  import { Alert, Button, Card, Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, EmptyState, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, StatusPill } from "@tangle-network/ui/primitives";
3
3
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
4
4
  import * as React$1 from "react";
@@ -1,5 +1,5 @@
1
1
  import { r as modelBrandFor, t as ModelBrandStack } from "./model-brand-hMyDTUqB.js";
2
- import { t as ProviderIcon } from "./provider-logo-X9PkbMIX.js";
2
+ import { t as ProviderIcon } from "./provider-logo-BGCziCbM.js";
3
3
  import { StatusPill } from "@tangle-network/ui/primitives";
4
4
  import { jsx, jsxs } from "react/jsx-runtime";
5
5
  import { AlertTriangle, Bell, Box, Cable, Camera, Check, Circle, Clock, Code, GitBranch, Repeat, ScanSearch, Sparkles, UserCheck, Webhook, Zap } from "lucide-react";
package/dist/pages.js CHANGED
@@ -7,7 +7,7 @@ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
7
7
  import * as React$1 from "react";
8
8
  import { useState } from "react";
9
9
  import { AlertCircle, CheckCircle, ChevronDown, ChevronUp, Clock, Cpu, Eye, EyeOff, GripVertical, Key, Layers, Lock, MemoryStick, Pencil, Plus, Power, PowerOff, Terminal, Trash2, Upload } from "lucide-react";
10
- import { focusField } from "@tangle-network/ui/utils";
10
+ import { cn, focusField, focusRing, ixControl, ixControlSoft, ixField } from "@tangle-network/ui/utils";
11
11
  //#region src/pages/auth-page.tsx
12
12
  const C = {
13
13
  pageBg: "hsl(var(--background, 240 5% 97%))",
@@ -15,8 +15,6 @@ const C = {
15
15
  border: "hsl(var(--border, 214 32% 91%))",
16
16
  text: "hsl(var(--card-foreground, 222 47% 11%))",
17
17
  muted: "hsl(var(--muted-foreground, 240 4% 46%))",
18
- inputBg: "var(--well-card, var(--bg-input, #f5f5f4))",
19
- inputBorder: "var(--field-border, hsl(var(--border, 214 32% 91%)))",
20
18
  hover: "hsl(var(--muted, 240 5% 96%))",
21
19
  danger: "hsl(var(--destructive, 0 72% 42%))",
22
20
  ink: "hsl(var(--foreground, 222 47% 11%))",
@@ -66,6 +64,9 @@ function GoogleIcon() {
66
64
  ]
67
65
  });
68
66
  }
67
+ const OUTLINE_CONTROL = cn("border border-border", focusRing, ixControl);
68
+ const FIELD = cn("border", focusField, ixField);
69
+ const FILLED_CONTROL = cn("border border-transparent", focusRing, ixControl);
69
70
  const SOCIAL_LABEL = {
70
71
  github: "GitHub",
71
72
  google: "Google"
@@ -109,19 +110,16 @@ function AuthPage({ product, tagline, mode = "signin", tangleAuthUrl = "/auth/ta
109
110
  width: "100%",
110
111
  padding: "0 16px",
111
112
  ...CONTROL,
112
- border: `1px solid ${C.border}`,
113
113
  background: "transparent",
114
114
  color: C.text,
115
115
  fontWeight: 500,
116
116
  cursor: "pointer",
117
- transition: "background 120ms"
117
+ transition: "background 120ms, border-color 120ms, box-shadow 120ms"
118
118
  };
119
119
  const inputStyle = {
120
120
  width: "100%",
121
121
  padding: "0 16px",
122
122
  ...CONTROL,
123
- border: `1px solid ${C.inputBorder}`,
124
- background: C.inputBg,
125
123
  color: C.text
126
124
  };
127
125
  return /* @__PURE__ */ jsx("div", {
@@ -134,6 +132,7 @@ function AuthPage({ product, tagline, mode = "signin", tangleAuthUrl = "/auth/ta
134
132
  background: C.pageBg
135
133
  },
136
134
  children: /* @__PURE__ */ jsxs("div", {
135
+ "data-slot": "card",
137
136
  className,
138
137
  style: {
139
138
  width: "100%",
@@ -164,6 +163,7 @@ function AuthPage({ product, tagline, mode = "signin", tangleAuthUrl = "/auth/ta
164
163
  }),
165
164
  /* @__PURE__ */ jsxs("a", {
166
165
  href: tangleAuthUrl,
166
+ className: FILLED_CONTROL,
167
167
  style: {
168
168
  display: "flex",
169
169
  alignItems: "center",
@@ -173,11 +173,10 @@ function AuthPage({ product, tagline, mode = "signin", tangleAuthUrl = "/auth/ta
173
173
  padding: "0 16px",
174
174
  ...CONTROL,
175
175
  background: buttonBg,
176
- border: "1px solid transparent",
177
176
  color: buttonFg,
178
177
  fontWeight: 600,
179
178
  textDecoration: "none",
180
- transition: "background 120ms"
179
+ transition: "background 120ms, border-color 120ms, box-shadow 120ms"
181
180
  },
182
181
  onMouseEnter: (e) => e.currentTarget.style.background = buttonHoverBg,
183
182
  onMouseLeave: (e) => e.currentTarget.style.background = buttonBg,
@@ -192,6 +191,7 @@ function AuthPage({ product, tagline, mode = "signin", tangleAuthUrl = "/auth/ta
192
191
  },
193
192
  children: providers.map((p) => /* @__PURE__ */ jsxs("button", {
194
193
  type: "button",
194
+ className: OUTLINE_CONTROL,
195
195
  style: outlineBtn,
196
196
  onClick: () => {
197
197
  window.location.href = socialHref(p);
@@ -247,6 +247,7 @@ function AuthPage({ product, tagline, mode = "signin", tangleAuthUrl = "/auth/ta
247
247
  autoComplete: "name",
248
248
  value: name,
249
249
  onChange: (e) => setName(e.target.value),
250
+ className: FIELD,
250
251
  style: inputStyle
251
252
  }),
252
253
  /* @__PURE__ */ jsx("input", {
@@ -256,6 +257,7 @@ function AuthPage({ product, tagline, mode = "signin", tangleAuthUrl = "/auth/ta
256
257
  placeholder: "Email",
257
258
  value: email,
258
259
  onChange: (e) => setEmail(e.target.value),
260
+ className: FIELD,
259
261
  style: inputStyle
260
262
  }),
261
263
  /* @__PURE__ */ jsx("input", {
@@ -265,6 +267,7 @@ function AuthPage({ product, tagline, mode = "signin", tangleAuthUrl = "/auth/ta
265
267
  placeholder: "Password",
266
268
  value: password,
267
269
  onChange: (e) => setPassword(e.target.value),
270
+ className: FIELD,
268
271
  style: inputStyle
269
272
  }),
270
273
  error && /* @__PURE__ */ jsx("p", {
@@ -278,6 +281,7 @@ function AuthPage({ product, tagline, mode = "signin", tangleAuthUrl = "/auth/ta
278
281
  /* @__PURE__ */ jsx("button", {
279
282
  type: "submit",
280
283
  disabled: loading,
284
+ className: OUTLINE_CONTROL,
281
285
  style: {
282
286
  ...outlineBtn,
283
287
  opacity: loading ? .5 : 1
@@ -296,6 +300,7 @@ function AuthPage({ product, tagline, mode = "signin", tangleAuthUrl = "/auth/ta
296
300
  },
297
301
  children: [isSignup ? "Already have an account? " : `New to Tangle${product ? ` ${product}` : ""}? `, /* @__PURE__ */ jsx("a", {
298
302
  href: altHref,
303
+ className: cn("rounded-sm", focusRing, ixControlSoft),
299
304
  style: {
300
305
  fontWeight: 500,
301
306
  color: C.text
@@ -131,6 +131,7 @@ const ACTIVEPIECES_CDN = "https://cdn.activepieces.com/pieces";
131
131
  * to emit `iconUrl` per provider, after which this map can be retired.
132
132
  */
133
133
  const PROVIDER_LOGO_URLS = {
134
+ adobesign: "https://www.google.com/s2/favicons?sz=64&domain_url=https://www.adobe.com/sign.html",
134
135
  "cal-com": `${ACTIVEPIECES_CDN}/cal.com.png`,
135
136
  "customer-io": `${ACTIVEPIECES_CDN}/customerio.png`,
136
137
  anthropic: `${ACTIVEPIECES_CDN}/claude.png`,
@@ -228,11 +229,25 @@ const PROVIDER_VECTOR_LOGOS = {
228
229
  * delisted (svgl.app) → a pinned override → the ActivePieces CDN by id (covers
229
230
  * most of the hub catalog) → derived simpleicons slugs → monogram.
230
231
  */
232
+ /**
233
+ * Protocol connectors with no brand of their own. Every remote source 404s for
234
+ * them (production Connections logged two misses per load for `email`), so they
235
+ * go straight to the monogram unless the provider supplies an `iconUrl`.
236
+ */
237
+ const GENERIC_PROVIDER_IDS = /* @__PURE__ */ new Set([
238
+ "email",
239
+ "smtp",
240
+ "imap",
241
+ "webhook",
242
+ "webhooks",
243
+ "http"
244
+ ]);
231
245
  function providerLogoCandidates(opts) {
232
246
  const out = [];
233
247
  if (opts.iconUrl) out.push(opts.iconUrl);
234
248
  const raw = opts.id.toLowerCase();
235
249
  const norm = normalizeProviderId(raw);
250
+ if (GENERIC_PROVIDER_IDS.has(raw) || GENERIC_PROVIDER_IDS.has(norm)) return out;
236
251
  const curated = PROVIDER_LOGO_SLUGS[raw] ?? PROVIDER_LOGO_SLUGS[norm];
237
252
  const vectorName = PROVIDER_VECTOR_LOGOS[raw] ?? PROVIDER_VECTOR_LOGOS[norm] ?? (curated ? PROVIDER_VECTOR_LOGOS[curated] : void 0);
238
253
  if (vectorName) out.push(`https://svgl.app/library/${vectorName}.svg`);
package/dist/workflows.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { r as modelBrandFor, t as ModelBrandStack } from "./model-brand-hMyDTUqB.js";
2
- import { A as triggerNodeIndex, D as buildWorkflowGraph, E as branchNodeId, F as parseActionPath, I as shortModel, N as actionPathLabel, P as humanizeIdentifier, T as actionNodeId, a as NodeMark, d as STATUS_LABEL, f as STATUS_PILL, h as StatusPill, i as KIND_ICON, k as triggerNodeId, n as classifyOutput, p as STATUS_TONE, r as condenseText, t as NodeOutputBody, u as STATUS_COLOR, w as TRIGGER_NODE_ID } from "./node-output-BC5ZQ8R6.js";
2
+ import { A as triggerNodeIndex, D as buildWorkflowGraph, E as branchNodeId, F as parseActionPath, I as shortModel, N as actionPathLabel, P as humanizeIdentifier, T as actionNodeId, a as NodeMark, d as STATUS_LABEL, f as STATUS_PILL, h as StatusPill, i as KIND_ICON, k as triggerNodeId, n as classifyOutput, p as STATUS_TONE, r as condenseText, t as NodeOutputBody, u as STATUS_COLOR, w as TRIGGER_NODE_ID } from "./node-output-jpe1KLea.js";
3
3
  import { jsx, jsxs } from "react/jsx-runtime";
4
4
  import { Component, Suspense, lazy, useMemo, useState } from "react";
5
5
  //#region src/workflows/WorkflowGraphLazy.tsx
@@ -30,7 +30,7 @@ function retryImport(factory, retries = 2, delayMs = 350) {
30
30
  });
31
31
  }
32
32
  function lazyWorkflowGraph() {
33
- return lazy(() => retryImport(() => import("./WorkflowGraph-m2uy9TDl.js").then((m) => ({ default: m.WorkflowGraph }))));
33
+ return lazy(() => retryImport(() => import("./WorkflowGraph-CBVgTWX-.js").then((m) => ({ default: m.WorkflowGraph }))));
34
34
  }
35
35
  var GraphErrorBoundary = class extends Component {
36
36
  state = { hasError: false };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tangle-network/sandbox-ui",
3
- "version": "0.133.6",
3
+ "version": "0.133.8",
4
4
  "license": "MIT",
5
5
  "description": "Unified UI component library for Tangle Sandbox — primitives, chat, dashboard, terminal, editor, and workspace components",
6
6
  "repository": {