@tangle-network/sandbox-ui 0.99.1 → 0.100.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.
package/dist/index.js CHANGED
@@ -88,7 +88,7 @@ import {
88
88
  modelProvider,
89
89
  snapHarnessToModel,
90
90
  validateComposerFiles
91
- } from "./chunk-G7CFCZQ7.js";
91
+ } from "./chunk-IWTLWBPZ.js";
92
92
  import {
93
93
  TOOL_CATEGORY_ICONS,
94
94
  cn,
@@ -134,7 +134,7 @@ import {
134
134
  dispatchSessionCreated,
135
135
  shellShouldRevalidate,
136
136
  useOptimisticSessionItems
137
- } from "./chunk-XKKV3B24.js";
137
+ } from "./chunk-OI7HEWLZ.js";
138
138
  import {
139
139
  BRAND_PRISM_THEME,
140
140
  CodeSurface,
@@ -149,7 +149,7 @@ import {
149
149
  buildUnifiedPatch,
150
150
  computeDiffStats,
151
151
  resolveLanguage
152
- } from "./chunk-JIZCCGD2.js";
152
+ } from "./chunk-WCUIUBG5.js";
153
153
  import {
154
154
  FileArtifactPane,
155
155
  FilePreview,
@@ -220,7 +220,7 @@ import {
220
220
  chatCapableHarnesses,
221
221
  parseInsufficientBalance,
222
222
  useSidebar
223
- } from "./chunk-Y4OTBMZS.js";
223
+ } from "./chunk-3W343PY5.js";
224
224
  import {
225
225
  BillingDashboard,
226
226
  InfoPanel,
@@ -325,6 +325,7 @@ import {
325
325
  canonicalModelId,
326
326
  modelBrandFor
327
327
  } from "./chunk-RQZRXKMR.js";
328
+ import "./chunk-BGVEHENC.js";
328
329
  import "./chunk-EI44GEQ5.js";
329
330
  import {
330
331
  OpenUIArtifactRenderer
@@ -151,4 +151,47 @@ interface ConnectInput {
151
151
  }
152
152
  declare function useIntegrations({ apiBaseUrl, fetchImpl, autoLoad, }: UseIntegrationsOptions): UseIntegrationsResult;
153
153
 
154
- export { type ConnectInput, type IntegrationConnection, type IntegrationConnector, type IntegrationHealth, type IntegrationProvider, type IntegrationSort, IntegrationsPanel, type IntegrationsPanelProps, type UseIntegrationsOptions, type UseIntegrationsResult, useIntegrations };
154
+ /**
155
+ * Provider branding: resolve a connector/provider slug to a logo and render it
156
+ * with graceful fallbacks. Shared by the integrations catalog tiles and the
157
+ * assistant's proposal card (its integration-requirement rows), so both surfaces
158
+ * show the same brand mark for a given provider from one source of truth.
159
+ *
160
+ * Dependency-light on purpose — only React — so it can be pulled into the
161
+ * always-loaded assistant entry without dragging the integrations panel's tree
162
+ * along with it.
163
+ */
164
+
165
+ /**
166
+ * Ordered candidate logo URLs for a provider slug, most specific first. The
167
+ * renderer walks the chain on each `onError` until one loads, then falls back to
168
+ * the monogram tile.
169
+ *
170
+ * Order: explicit `iconUrl` → full-color vector mark for brands Simple Icons
171
+ * delisted (svgl.app) → a pinned override → the ActivePieces CDN by id (covers
172
+ * most of the hub catalog) → derived simpleicons slugs → monogram.
173
+ */
174
+ declare function providerLogoCandidates(opts: {
175
+ id: string;
176
+ iconUrl?: string | null;
177
+ }): string[];
178
+ interface ProviderIconProps {
179
+ /** Provider/connector slug, e.g. "github". */
180
+ id: string;
181
+ /** Explicit icon URL, tried before the derived simpleicons slugs. */
182
+ iconUrl?: string | null;
183
+ /** Name for the monogram fallback initial; defaults to the id. */
184
+ displayName?: string;
185
+ /** Square edge length in px. Default 24. */
186
+ size?: number;
187
+ className?: string;
188
+ }
189
+ /**
190
+ * A provider's brand mark: the resolved logo, walking a candidate chain on load
191
+ * error, and a deterministic monogram tile when no logo resolves. Rounding is
192
+ * left to the caller's `className` so the same component fits a large catalog
193
+ * tile and a small inline requirement row.
194
+ */
195
+ declare function ProviderIcon({ id, iconUrl, displayName, size, className, }: ProviderIconProps): React.JSX.Element;
196
+
197
+ export { type ConnectInput, type IntegrationConnection, type IntegrationConnector, type IntegrationHealth, type IntegrationProvider, type IntegrationSort, IntegrationsPanel, type IntegrationsPanelProps, ProviderIcon, type ProviderIconProps, type UseIntegrationsOptions, type UseIntegrationsResult, providerLogoCandidates, useIntegrations };
@@ -1,7 +1,8 @@
1
1
  import {
2
2
  ProviderIcon,
3
- normalizeProviderId
4
- } from "./chunk-GTJ5PSK5.js";
3
+ normalizeProviderId,
4
+ providerLogoCandidates
5
+ } from "./chunk-3LIXVEEE.js";
5
6
  import "./chunk-CZ7CSFO4.js";
6
7
 
7
8
  // src/integrations/integrations-panel.tsx
@@ -682,5 +683,7 @@ function useIntegrations({
682
683
  }
683
684
  export {
684
685
  IntegrationsPanel,
686
+ ProviderIcon,
687
+ providerLogoCandidates,
685
688
  useIntegrations
686
689
  };
@@ -72,7 +72,7 @@ var MentionList = React.forwardRef(
72
72
  ),
73
73
  children: [
74
74
  loading && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 px-2.5 py-2 text-muted-foreground text-sm", children: [
75
- /* @__PURE__ */ jsx(Loader2, { className: "size-3.5 animate-spin" }),
75
+ /* @__PURE__ */ jsx(Loader2, { className: "size-3.5 animate-spin", "data-motion": "essential" }),
76
76
  "Searching\u2026"
77
77
  ] }),
78
78
  !loading && error && /* @__PURE__ */ jsx("div", { className: "px-2.5 py-2 text-[var(--status-error,#ff4d6d)] text-sm", children: "Couldn\u2019t load matches" }),
package/dist/pages.js CHANGED
@@ -637,7 +637,7 @@ function AddSshKeyDialog({
637
637
  disabled: isSaving,
638
638
  className: "inline-flex items-center gap-2 rounded-md bg-primary px-4 py-2 text-sm font-bold text-primary-foreground hover:bg-primary/90 transition-colors disabled:opacity-50 active:scale-[0.97]",
639
639
  children: [
640
- isSaving && /* @__PURE__ */ jsx3(Loader2, { className: "h-4 w-4 animate-spin" }),
640
+ isSaving && /* @__PURE__ */ jsx3(Loader2, { className: "h-4 w-4 animate-spin", "data-motion": "essential" }),
641
641
  isSaving ? "Saving..." : "Add key"
642
642
  ]
643
643
  }
@@ -1677,7 +1677,7 @@ function ProvisioningWizard({
1677
1677
  disabled: isDeploying || !selectedEnv,
1678
1678
  className: "w-full",
1679
1679
  children: isDeploying ? /* @__PURE__ */ jsxs4("span", { className: "flex items-center justify-center gap-2", children: [
1680
- /* @__PURE__ */ jsx4(Loader22, { className: "h-4 w-4 animate-spin" }),
1680
+ /* @__PURE__ */ jsx4(Loader22, { className: "h-4 w-4 animate-spin", "data-motion": "essential" }),
1681
1681
  "Spinning up environment..."
1682
1682
  ] }) : "Deploy Workspace"
1683
1683
  }
@@ -1958,7 +1958,7 @@ function ProfilesPage({
1958
1958
  /* @__PURE__ */ jsx6("span", { children: error }),
1959
1959
  /* @__PURE__ */ jsx6(Button2, { variant: "ghost", size: "sm", onClick: loadProfiles, children: "Retry" })
1960
1960
  ] }),
1961
- loading && /* @__PURE__ */ jsx6("div", { className: "flex items-center justify-center py-12", children: /* @__PURE__ */ jsx6(Loader23, { className: "h-8 w-8 animate-spin text-muted-foreground" }) }),
1961
+ loading && /* @__PURE__ */ jsx6("div", { className: "flex items-center justify-center py-12", children: /* @__PURE__ */ jsx6(Loader23, { className: "h-8 w-8 animate-spin text-muted-foreground", "data-motion": "essential" }) }),
1962
1962
  !loading && /* @__PURE__ */ jsxs6("div", { className: "space-y-8", children: [
1963
1963
  /* @__PURE__ */ jsxs6("section", { children: [
1964
1964
  /* @__PURE__ */ jsx6("div", { className: "mb-3 flex items-center justify-between", children: /* @__PURE__ */ jsxs6("h2", { className: "font-medium text-lg", children: [
@@ -2317,7 +2317,7 @@ function ProfileFormDialog({
2317
2317
  /* @__PURE__ */ jsxs6(DialogFooter2, { children: [
2318
2318
  /* @__PURE__ */ jsx6(Button2, { type: "button", variant: "outline", onClick: onClose, children: "Cancel" }),
2319
2319
  /* @__PURE__ */ jsxs6(Button2, { type: "submit", disabled: saving || !formData.name, children: [
2320
- saving && /* @__PURE__ */ jsx6(Loader23, { className: "mr-2 h-4 w-4 animate-spin" }),
2320
+ saving && /* @__PURE__ */ jsx6(Loader23, { className: "mr-2 h-4 w-4 animate-spin", "data-motion": "essential" }),
2321
2321
  isEditing ? "Save Changes" : "Create Profile"
2322
2322
  ] })
2323
2323
  ] })
@@ -2372,7 +2372,7 @@ function DeleteProfileDialog({
2372
2372
  onClick: handleDelete,
2373
2373
  disabled: deleting,
2374
2374
  children: [
2375
- deleting && /* @__PURE__ */ jsx6(Loader23, { className: "mr-2 h-4 w-4 animate-spin" }),
2375
+ deleting && /* @__PURE__ */ jsx6(Loader23, { className: "mr-2 h-4 w-4 animate-spin", "data-motion": "essential" }),
2376
2376
  "Delete Profile"
2377
2377
  ]
2378
2378
  }
@@ -3135,7 +3135,7 @@ function SecretsPage({ apiClient, className, teamSecretsHint }) {
3135
3135
  secrets.length !== 1 ? "s" : ""
3136
3136
  ] })
3137
3137
  ] }),
3138
- loading ? /* @__PURE__ */ jsx7("div", { className: "flex items-center justify-center py-16", children: /* @__PURE__ */ jsx7("div", { className: "h-6 w-6 animate-spin rounded-full border-2 border-muted-foreground border-t-transparent" }) }) : secrets.length === 0 ? /* @__PURE__ */ jsxs7("div", { className: "flex flex-col items-center justify-center py-16 text-center", children: [
3138
+ loading ? /* @__PURE__ */ jsx7("div", { className: "flex items-center justify-center py-16", children: /* @__PURE__ */ jsx7("div", { className: "h-6 w-6 animate-spin rounded-full border-2 border-muted-foreground border-t-transparent", "data-motion": "essential" }) }) : secrets.length === 0 ? /* @__PURE__ */ jsxs7("div", { className: "flex flex-col items-center justify-center py-16 text-center", children: [
3139
3139
  /* @__PURE__ */ jsx7(Lock, { className: "h-10 w-10 text-muted-foreground mb-4" }),
3140
3140
  /* @__PURE__ */ jsx7("h3", { className: "text-lg font-semibold text-foreground", children: "No secrets yet" }),
3141
3141
  /* @__PURE__ */ jsx7("p", { className: "mt-1 text-sm text-muted-foreground max-w-sm", children: "Create a secret to inject into your sandboxes." }),
@@ -4046,7 +4046,7 @@ function StartupScriptsPage({ apiClient, className }) {
4046
4046
  scripts.length !== 1 ? "s" : ""
4047
4047
  ] })
4048
4048
  ] }),
4049
- loading ? /* @__PURE__ */ jsx9("div", { className: "flex items-center justify-center py-16", children: /* @__PURE__ */ jsx9("div", { className: "h-6 w-6 animate-spin rounded-full border-2 border-primary border-t-transparent" }) }) : scripts.length === 0 ? /* @__PURE__ */ jsxs9("div", { className: "flex flex-col items-center justify-center py-16 text-center", children: [
4049
+ loading ? /* @__PURE__ */ jsx9("div", { className: "flex items-center justify-center py-16", children: /* @__PURE__ */ jsx9("div", { className: "h-6 w-6 animate-spin rounded-full border-2 border-primary border-t-transparent", "data-motion": "essential" }) }) : scripts.length === 0 ? /* @__PURE__ */ jsxs9("div", { className: "flex flex-col items-center justify-center py-16 text-center", children: [
4050
4050
  /* @__PURE__ */ jsx9(Terminal, { className: "h-10 w-10 text-muted-foreground mb-4" }),
4051
4051
  /* @__PURE__ */ jsx9("h3", { className: "text-lg font-semibold text-foreground", children: "No startup scripts yet" }),
4052
4052
  /* @__PURE__ */ jsx9("p", { className: "mt-1 text-sm text-muted-foreground max-w-sm", children: "Create a script to run automatically when your sandboxes start." }),