@12-apps/mcp 3.5.1 → 3.7.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/ADOPTING.md +69 -1
- package/dist/chunk-FBUSSQSK.js +22 -0
- package/dist/chunk-FBUSSQSK.js.map +1 -0
- package/dist/{chunk-FYEVBTDU.js → chunk-HRAQKMDC.js} +12 -20
- package/dist/chunk-HRAQKMDC.js.map +1 -0
- package/dist/{guide-DV5MQbCg.d.ts → guide-KQNcXlMG.d.ts} +32 -17
- package/dist/index.d.ts +2 -1
- package/dist/index.js +11 -7
- package/dist/index.js.map +1 -1
- package/dist/oauth/index.d.ts +1 -1
- package/dist/oauth/index.js +1 -1
- package/dist/pt-BR-e1RnV2v8.d.ts +25 -0
- package/dist/react/index.d.ts +208 -30
- package/dist/react/index.js +341 -151
- package/dist/react/index.js.map +1 -1
- package/package.json +4 -4
- package/src/guide.ts +33 -165
- package/src/index.ts +8 -3
- package/src/pt-BR.ts +195 -0
- package/src/react/ai-capabilities.tsx +10 -6
- package/src/react/ai-connection-utils.ts +18 -13
- package/src/react/ai-flow-steps.tsx +63 -43
- package/src/react/ai-landing.tsx +47 -21
- package/src/react/ai-onboarding.tsx +31 -25
- package/src/react/ai-status-board.tsx +31 -16
- package/src/react/ai-steps.tsx +60 -23
- package/src/react/copy.ts +165 -0
- package/src/react/host-connect-guide.tsx +24 -8
- package/src/react/host-select-step.tsx +4 -1
- package/src/react/index.ts +21 -3
- package/src/react/pt-BR.ts +114 -0
- package/dist/chunk-FYEVBTDU.js.map +0 -1
package/dist/react/index.js
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
PT_BR_AI_CAPABILITIES,
|
|
3
|
+
PT_BR_AI_CONNECT_PROMPT,
|
|
4
|
+
PT_BR_AI_HOST_GUIDES,
|
|
5
|
+
PT_BR_AI_PERMISSION_MODEL
|
|
6
|
+
} from "../chunk-HRAQKMDC.js";
|
|
7
|
+
import {
|
|
4
8
|
aiConnectPrompt,
|
|
5
|
-
aiHostGuides,
|
|
6
9
|
providerForHostId
|
|
7
|
-
} from "../chunk-
|
|
10
|
+
} from "../chunk-FBUSSQSK.js";
|
|
8
11
|
import {
|
|
9
12
|
__name
|
|
10
13
|
} from "../chunk-7QVYU63E.js";
|
|
@@ -143,12 +146,13 @@ function CapabilityCard({ capability }) {
|
|
|
143
146
|
}
|
|
144
147
|
__name(CapabilityCard, "CapabilityCard");
|
|
145
148
|
function AiCapabilities({
|
|
146
|
-
capabilities
|
|
149
|
+
capabilities,
|
|
150
|
+
copy
|
|
147
151
|
}) {
|
|
148
152
|
return /* @__PURE__ */ jsxs(Box2, { "data-testid": "ai-capability-examples", sx: { width: "100%" }, children: [
|
|
149
153
|
/* @__PURE__ */ jsxs(Box2, { sx: { mb: 3 }, children: [
|
|
150
|
-
/* @__PURE__ */ jsx2(Text, { variant: "heading", size: "sm", as: "h2", children:
|
|
151
|
-
/* @__PURE__ */ jsx2(Box2, { sx: { mt: 0.5 }, children: /* @__PURE__ */ jsx2(Text, { variant: "body", size: "sm", as: "p", color: "secondary", children:
|
|
154
|
+
/* @__PURE__ */ jsx2(Text, { variant: "heading", size: "sm", as: "h2", children: copy.heading }),
|
|
155
|
+
/* @__PURE__ */ jsx2(Box2, { sx: { mt: 0.5 }, children: /* @__PURE__ */ jsx2(Text, { variant: "body", size: "sm", as: "p", color: "secondary", children: copy.subheading }) })
|
|
152
156
|
] }),
|
|
153
157
|
/* @__PURE__ */ jsx2(
|
|
154
158
|
Box2,
|
|
@@ -201,13 +205,24 @@ __name(FeatureBadge, "FeatureBadge");
|
|
|
201
205
|
|
|
202
206
|
// src/react/ai-landing.tsx
|
|
203
207
|
import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
204
|
-
var
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
function
|
|
208
|
+
var TRUST_ICONS = {
|
|
209
|
+
login: /* @__PURE__ */ jsx4(LockOpenOutlinedIcon, {}),
|
|
210
|
+
install: /* @__PURE__ */ jsx4(BoltOutlinedIcon, {}),
|
|
211
|
+
permissions: /* @__PURE__ */ jsx4(VerifiedUserOutlinedIcon, {}),
|
|
212
|
+
surface: /* @__PURE__ */ jsx4(LanguageOutlinedIcon, {})
|
|
213
|
+
};
|
|
214
|
+
function trustBadges(trust) {
|
|
215
|
+
return trust.map((point) => ({
|
|
216
|
+
icon: TRUST_ICONS[point.id],
|
|
217
|
+
label: point.label,
|
|
218
|
+
caption: point.caption
|
|
219
|
+
}));
|
|
220
|
+
}
|
|
221
|
+
__name(trustBadges, "trustBadges");
|
|
222
|
+
function Hero({
|
|
223
|
+
onStart,
|
|
224
|
+
copy
|
|
225
|
+
}) {
|
|
211
226
|
return /* @__PURE__ */ jsxs3(Stack2, { spacing: 2.5, sx: { maxWidth: 680 }, children: [
|
|
212
227
|
/* @__PURE__ */ jsx4(
|
|
213
228
|
Box4,
|
|
@@ -219,7 +234,7 @@ function Hero({ onStart }) {
|
|
|
219
234
|
letterSpacing: 1.2,
|
|
220
235
|
textTransform: "uppercase"
|
|
221
236
|
},
|
|
222
|
-
children:
|
|
237
|
+
children: copy.eyebrow
|
|
223
238
|
}
|
|
224
239
|
),
|
|
225
240
|
/* @__PURE__ */ jsxs3(Text3, { variant: "heading", size: "xl", weight: "bold", as: "h1", children: [
|
|
@@ -227,20 +242,22 @@ function Hero({ onStart }) {
|
|
|
227
242
|
" ",
|
|
228
243
|
/* @__PURE__ */ jsx4(Box4, { component: "span", sx: { color: "primary.main" }, children: "assistentes de IA" }),
|
|
229
244
|
" ",
|
|
230
|
-
|
|
245
|
+
copy.titleTail
|
|
231
246
|
] }),
|
|
232
|
-
/* @__PURE__ */ jsx4(Text3, { variant: "body", color: "secondary", as: "p", children:
|
|
247
|
+
/* @__PURE__ */ jsx4(Text3, { variant: "body", color: "secondary", as: "p", children: copy.lede }),
|
|
233
248
|
/* @__PURE__ */ jsx4(Box4, { sx: { pt: 1 }, children: /* @__PURE__ */ jsx4(Button, { onClick: onStart, "data-testid": "ai-landing-start", children: "Ver como conectar" }) })
|
|
234
249
|
] });
|
|
235
250
|
}
|
|
236
251
|
__name(Hero, "Hero");
|
|
237
252
|
function AiLanding({
|
|
238
253
|
onStart,
|
|
239
|
-
permissionModel
|
|
240
|
-
capabilities
|
|
254
|
+
permissionModel,
|
|
255
|
+
capabilities,
|
|
256
|
+
copy,
|
|
257
|
+
capabilitiesCopy
|
|
241
258
|
}) {
|
|
242
259
|
return /* @__PURE__ */ jsxs3(Stack2, { spacing: 6, "data-testid": "ai-landing", children: [
|
|
243
|
-
/* @__PURE__ */ jsx4(Hero, { onStart }),
|
|
260
|
+
/* @__PURE__ */ jsx4(Hero, { onStart, copy }),
|
|
244
261
|
/* @__PURE__ */ jsxs3(
|
|
245
262
|
Stack2,
|
|
246
263
|
{
|
|
@@ -279,12 +296,12 @@ function AiLanding({
|
|
|
279
296
|
gap: 3,
|
|
280
297
|
gridTemplateColumns: { xs: "1fr", sm: "1fr 1fr", md: "repeat(4, 1fr)" }
|
|
281
298
|
},
|
|
282
|
-
children:
|
|
299
|
+
children: trustBadges(copy.trust).map((f) => /* @__PURE__ */ jsx4(FeatureBadge, { icon: f.icon, label: f.label, caption: f.caption }, f.label))
|
|
283
300
|
}
|
|
284
301
|
)
|
|
285
302
|
}
|
|
286
303
|
),
|
|
287
|
-
/* @__PURE__ */ jsx4(Box4, { children: /* @__PURE__ */ jsx4(AiCapabilities, { capabilities }) })
|
|
304
|
+
/* @__PURE__ */ jsx4(Box4, { children: /* @__PURE__ */ jsx4(AiCapabilities, { capabilities, copy: capabilitiesCopy }) })
|
|
288
305
|
] });
|
|
289
306
|
}
|
|
290
307
|
__name(AiLanding, "AiLanding");
|
|
@@ -311,13 +328,13 @@ function connectionForHost(connections, hostId) {
|
|
|
311
328
|
return connections.find((c) => c.host === provider) ?? connections.find((c) => c.host === null) ?? null;
|
|
312
329
|
}
|
|
313
330
|
__name(connectionForHost, "connectionForHost");
|
|
314
|
-
function activeAgo(date) {
|
|
331
|
+
function activeAgo(date, copy) {
|
|
315
332
|
const minutes = Math.max(0, Math.floor((Date.now() - date.getTime()) / 6e4));
|
|
316
|
-
if (minutes < 1) return
|
|
317
|
-
if (minutes < 60) return
|
|
333
|
+
if (minutes < 1) return copy.activeNow;
|
|
334
|
+
if (minutes < 60) return copy.activeMinutes(minutes);
|
|
318
335
|
const hours = Math.floor(minutes / 60);
|
|
319
|
-
if (hours < 24) return
|
|
320
|
-
return
|
|
336
|
+
if (hours < 24) return copy.activeHours(hours);
|
|
337
|
+
return copy.activeDays(Math.floor(hours / 24));
|
|
321
338
|
}
|
|
322
339
|
__name(activeAgo, "activeAgo");
|
|
323
340
|
function mostRecent(connections) {
|
|
@@ -327,20 +344,20 @@ function mostRecent(connections) {
|
|
|
327
344
|
);
|
|
328
345
|
}
|
|
329
346
|
__name(mostRecent, "mostRecent");
|
|
330
|
-
function connectedTitle(connections, hosts, connectedHostId) {
|
|
347
|
+
function connectedTitle(connections, hosts, connectedHostId, copy) {
|
|
331
348
|
const providers = [...new Set(connections.map((c) => c.host).filter((h) => h !== null))];
|
|
332
|
-
if (providers.length === 1) return `${PROVIDER_LABEL[providers[0]]}
|
|
349
|
+
if (providers.length === 1) return `${PROVIDER_LABEL[providers[0]]} ${copy.connectedSuffix}`;
|
|
333
350
|
if (providers.length > 1) {
|
|
334
|
-
return
|
|
351
|
+
return copy.connectedSeveral(providers.map((p) => PROVIDER_LABEL[p]).join(", "));
|
|
335
352
|
}
|
|
336
|
-
if (connections.length > 0) return `${hostLabel(hosts, connectedHostId)}
|
|
337
|
-
return
|
|
353
|
+
if (connections.length > 0) return `${hostLabel(hosts, connectedHostId)} ${copy.connectedSuffix}`;
|
|
354
|
+
return copy.connectedGeneric;
|
|
338
355
|
}
|
|
339
356
|
__name(connectedTitle, "connectedTitle");
|
|
340
|
-
function connectedSummary(connections) {
|
|
357
|
+
function connectedSummary(connections, copy) {
|
|
341
358
|
const recent = mostRecent(connections);
|
|
342
|
-
if (!recent) return
|
|
343
|
-
return activeAgo(recent.lastActiveAt);
|
|
359
|
+
if (!recent) return copy.configured;
|
|
360
|
+
return activeAgo(recent.lastActiveAt, copy);
|
|
344
361
|
}
|
|
345
362
|
__name(connectedSummary, "connectedSummary");
|
|
346
363
|
|
|
@@ -380,7 +397,9 @@ import { jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
|
380
397
|
function EndpointCopyBlock({
|
|
381
398
|
endpointUrl,
|
|
382
399
|
copied,
|
|
383
|
-
onCopy
|
|
400
|
+
onCopy,
|
|
401
|
+
flowCopy,
|
|
402
|
+
copy
|
|
384
403
|
}) {
|
|
385
404
|
const handleClick = /* @__PURE__ */ __name(() => {
|
|
386
405
|
if (typeof navigator !== "undefined" && navigator.clipboard) {
|
|
@@ -399,12 +418,12 @@ function EndpointCopyBlock({
|
|
|
399
418
|
bgcolor: "action.hover"
|
|
400
419
|
},
|
|
401
420
|
children: [
|
|
402
|
-
/* @__PURE__ */ jsx6(Text4, { variant: "caption", as: "p", weight: "bold", children:
|
|
403
|
-
/* @__PURE__ */ jsx6(Text4, { variant: "caption", as: "p", color: "secondary", children:
|
|
421
|
+
/* @__PURE__ */ jsx6(Text4, { variant: "caption", as: "p", weight: "bold", children: copy.urlLabel }),
|
|
422
|
+
/* @__PURE__ */ jsx6(Text4, { variant: "caption", as: "p", color: "secondary", children: copy.urlHint }),
|
|
404
423
|
/* @__PURE__ */ jsx6(Box5, { sx: { mt: 1 }, children: /* @__PURE__ */ jsx6(McpEndpointUrl, { url: endpointUrl, copyable: false }) }),
|
|
405
424
|
/* @__PURE__ */ jsx6(Box5, { sx: { mt: 1.5 }, children: /* @__PURE__ */ jsxs4(Button2, { onClick: handleClick, "data-testid": "ai-copy-endpoint", children: [
|
|
406
425
|
copied ? /* @__PURE__ */ jsx6(CheckIcon, { sx: { fontSize: 18, mr: 0.5 } }) : /* @__PURE__ */ jsx6(ContentCopyOutlinedIcon, { sx: { fontSize: 18, mr: 0.5 } }),
|
|
407
|
-
copied ?
|
|
426
|
+
copied ? flowCopy.copied : flowCopy.copyUrl
|
|
408
427
|
] }) })
|
|
409
428
|
]
|
|
410
429
|
}
|
|
@@ -414,7 +433,8 @@ __name(EndpointCopyBlock, "EndpointCopyBlock");
|
|
|
414
433
|
function PromptCopyBlock({
|
|
415
434
|
title,
|
|
416
435
|
caption,
|
|
417
|
-
message
|
|
436
|
+
message,
|
|
437
|
+
flowCopy
|
|
418
438
|
}) {
|
|
419
439
|
const [copied, setCopied] = useState(false);
|
|
420
440
|
const handleClick = /* @__PURE__ */ __name(() => {
|
|
@@ -453,20 +473,20 @@ function PromptCopyBlock({
|
|
|
453
473
|
),
|
|
454
474
|
/* @__PURE__ */ jsx6(Box5, { sx: { mt: 1.5 }, children: /* @__PURE__ */ jsxs4(Button2, { onClick: handleClick, "data-testid": "ai-copy-prompt", children: [
|
|
455
475
|
copied ? /* @__PURE__ */ jsx6(CheckIcon, { sx: { fontSize: 18, mr: 0.5 } }) : /* @__PURE__ */ jsx6(ContentCopyOutlinedIcon, { sx: { fontSize: 18, mr: 0.5 } }),
|
|
456
|
-
copied ?
|
|
476
|
+
copied ? flowCopy.copied : flowCopy.copyMessage
|
|
457
477
|
] }) })
|
|
458
478
|
]
|
|
459
479
|
}
|
|
460
480
|
);
|
|
461
481
|
}
|
|
462
482
|
__name(PromptCopyBlock, "PromptCopyBlock");
|
|
463
|
-
function HostConnectHeader({
|
|
483
|
+
function HostConnectHeader({
|
|
484
|
+
host,
|
|
485
|
+
copy
|
|
486
|
+
}) {
|
|
464
487
|
return /* @__PURE__ */ jsxs4(Stack3, { direction: "row", spacing: 1.5, alignItems: "center", children: [
|
|
465
488
|
/* @__PURE__ */ jsx6(HostBrandAvatar, { brand: host.brand, size: 36 }),
|
|
466
|
-
/* @__PURE__ */
|
|
467
|
-
"Conectar no ",
|
|
468
|
-
host.label
|
|
469
|
-
] })
|
|
489
|
+
/* @__PURE__ */ jsx6(Text4, { variant: "heading", size: "sm", as: "h3", children: copy.connectOn(host.label) })
|
|
470
490
|
] });
|
|
471
491
|
}
|
|
472
492
|
__name(HostConnectHeader, "HostConnectHeader");
|
|
@@ -491,10 +511,13 @@ function HostOpenButton({
|
|
|
491
511
|
) });
|
|
492
512
|
}
|
|
493
513
|
__name(HostOpenButton, "HostOpenButton");
|
|
494
|
-
function HostDocsLink({
|
|
514
|
+
function HostDocsLink({
|
|
515
|
+
host,
|
|
516
|
+
copy
|
|
517
|
+
}) {
|
|
495
518
|
if (!host.docs) return null;
|
|
496
519
|
return /* @__PURE__ */ jsxs4(Text4, { variant: "caption", as: "p", color: "secondary", children: [
|
|
497
|
-
|
|
520
|
+
copy.moreInfo,
|
|
498
521
|
" ",
|
|
499
522
|
/* @__PURE__ */ jsx6(
|
|
500
523
|
Box5,
|
|
@@ -527,46 +550,56 @@ var POLL_INTERVAL_MS = 3e3;
|
|
|
527
550
|
function StepNav({
|
|
528
551
|
nav,
|
|
529
552
|
onNext,
|
|
530
|
-
nextLabel
|
|
553
|
+
nextLabel,
|
|
531
554
|
nextDisabled = false,
|
|
532
|
-
nextTestId
|
|
555
|
+
nextTestId,
|
|
556
|
+
copy
|
|
533
557
|
}) {
|
|
534
558
|
return /* @__PURE__ */ jsxs5(Stack4, { direction: "row", spacing: 1, alignItems: "center", justifyContent: "space-between", children: [
|
|
535
|
-
/* @__PURE__ */ jsx7(Button3, { variant: "ghost", onClick: () => nav.back(), "data-testid": "ai-step-back", children:
|
|
559
|
+
/* @__PURE__ */ jsx7(Button3, { variant: "ghost", onClick: () => nav.back(), "data-testid": "ai-step-back", children: copy.flow.back }),
|
|
536
560
|
/* @__PURE__ */ jsx7(Button3, { onClick: onNext, disabled: nextDisabled, "data-testid": nextTestId, children: nextLabel })
|
|
537
561
|
] });
|
|
538
562
|
}
|
|
539
563
|
__name(StepNav, "StepNav");
|
|
540
|
-
function CopyUrlStep({
|
|
564
|
+
function CopyUrlStep({
|
|
565
|
+
nav,
|
|
566
|
+
endpointUrl,
|
|
567
|
+
copy
|
|
568
|
+
}) {
|
|
541
569
|
return /* @__PURE__ */ jsxs5(Stack4, { spacing: 3, "data-testid": "ai-copy-step", children: [
|
|
542
570
|
/* @__PURE__ */ jsxs5(Box6, { children: [
|
|
543
|
-
/* @__PURE__ */ jsx7(Text5, { variant: "heading", size: "sm", as: "h2", children:
|
|
544
|
-
/* @__PURE__ */ jsx7(Text5, { variant: "caption", as: "p", color: "secondary", children:
|
|
571
|
+
/* @__PURE__ */ jsx7(Text5, { variant: "heading", size: "sm", as: "h2", children: copy.flow.copyUrlTitle }),
|
|
572
|
+
/* @__PURE__ */ jsx7(Text5, { variant: "caption", as: "p", color: "secondary", children: copy.flow.urlCaption })
|
|
545
573
|
] }),
|
|
546
|
-
/* @__PURE__ */ jsx7(EndpointCopyBlock, { endpointUrl, copied: false, onCopy: () => nav.next() }),
|
|
547
|
-
/* @__PURE__ */ jsx7(Box6, { children: /* @__PURE__ */ jsx7(Button3, { variant: "ghost", onClick: () => nav.back(), "data-testid": "ai-step-back", children:
|
|
574
|
+
/* @__PURE__ */ jsx7(EndpointCopyBlock, { copy: copy.connectGuide, flowCopy: copy.flow, endpointUrl, copied: false, onCopy: () => nav.next() }),
|
|
575
|
+
/* @__PURE__ */ jsx7(Box6, { children: /* @__PURE__ */ jsx7(Button3, { variant: "ghost", onClick: () => nav.back(), "data-testid": "ai-step-back", children: copy.flow.back }) })
|
|
548
576
|
] });
|
|
549
577
|
}
|
|
550
578
|
__name(CopyUrlStep, "CopyUrlStep");
|
|
551
|
-
function ConfigureStep({
|
|
579
|
+
function ConfigureStep({
|
|
580
|
+
nav,
|
|
581
|
+
host,
|
|
582
|
+
copy
|
|
583
|
+
}) {
|
|
552
584
|
const [opened, setOpened] = useState2(!host.link);
|
|
553
585
|
return /* @__PURE__ */ jsxs5(Stack4, { spacing: 2.5, "data-testid": "ai-configure-step", children: [
|
|
554
|
-
/* @__PURE__ */ jsx7(HostConnectHeader, { host }),
|
|
586
|
+
/* @__PURE__ */ jsx7(HostConnectHeader, { copy: copy.connectGuide, host }),
|
|
555
587
|
/* @__PURE__ */ jsx7(HostOpenButton, { host, onOpen: () => setOpened(true) }),
|
|
556
588
|
/* @__PURE__ */ jsx7(HostStepList, { steps: host.steps.slice(0, CONFIGURE_STEP_COUNT), start: 1 }),
|
|
557
|
-
/* @__PURE__ */ jsx7(HostDocsLink, { host }),
|
|
558
|
-
/* @__PURE__ */ jsx7(StepNav, { nav, onNext: () => nav.next(), nextDisabled: !opened, nextTestId: "ai-configure-next" })
|
|
589
|
+
/* @__PURE__ */ jsx7(HostDocsLink, { copy: copy.connectGuide, host }),
|
|
590
|
+
/* @__PURE__ */ jsx7(StepNav, { copy, nav, onNext: () => nav.next(), nextDisabled: !opened, nextTestId: "ai-configure-next" })
|
|
559
591
|
] });
|
|
560
592
|
}
|
|
561
593
|
__name(ConfigureStep, "ConfigureStep");
|
|
562
594
|
function ConfigureStageStep({
|
|
563
595
|
nav,
|
|
564
596
|
host,
|
|
565
|
-
stage
|
|
597
|
+
stage,
|
|
598
|
+
copy
|
|
566
599
|
}) {
|
|
567
600
|
const [opened, setOpened] = useState2(!stage.link);
|
|
568
601
|
return /* @__PURE__ */ jsxs5(Stack4, { spacing: 2.5, "data-testid": `ai-stage-${stage.id}`, children: [
|
|
569
|
-
/* @__PURE__ */ jsx7(HostConnectHeader, { host }),
|
|
602
|
+
/* @__PURE__ */ jsx7(HostConnectHeader, { copy: copy.connectGuide, host }),
|
|
570
603
|
stage.link && /* @__PURE__ */ jsx7(Box6, { children: /* @__PURE__ */ jsxs5(
|
|
571
604
|
Button3,
|
|
572
605
|
{
|
|
@@ -582,10 +615,11 @@ function ConfigureStageStep({
|
|
|
582
615
|
}
|
|
583
616
|
) }),
|
|
584
617
|
/* @__PURE__ */ jsx7(HostStepList, { steps: stage.steps, start: 1 }),
|
|
585
|
-
/* @__PURE__ */ jsx7(HostDocsLink, { host }),
|
|
618
|
+
/* @__PURE__ */ jsx7(HostDocsLink, { copy: copy.connectGuide, host }),
|
|
586
619
|
/* @__PURE__ */ jsx7(
|
|
587
620
|
StepNav,
|
|
588
621
|
{
|
|
622
|
+
copy,
|
|
589
623
|
nav,
|
|
590
624
|
onNext: () => nav.next(),
|
|
591
625
|
nextDisabled: !opened,
|
|
@@ -598,33 +632,36 @@ __name(ConfigureStageStep, "ConfigureStageStep");
|
|
|
598
632
|
function ConnectStep({
|
|
599
633
|
nav,
|
|
600
634
|
host,
|
|
601
|
-
connectPrompt
|
|
635
|
+
connectPrompt,
|
|
636
|
+
copy
|
|
602
637
|
}) {
|
|
603
638
|
return /* @__PURE__ */ jsxs5(Stack4, { spacing: 2.5, "data-testid": "ai-connect-step", children: [
|
|
604
|
-
/* @__PURE__ */ jsx7(HostConnectHeader, { host }),
|
|
639
|
+
/* @__PURE__ */ jsx7(HostConnectHeader, { copy: copy.connectGuide, host }),
|
|
605
640
|
/* @__PURE__ */ jsx7(HostStepList, { steps: host.steps.slice(CONFIGURE_STEP_COUNT), start: CONFIGURE_STEP_COUNT + 1 }),
|
|
606
641
|
/* @__PURE__ */ jsx7(
|
|
607
642
|
PromptCopyBlock,
|
|
608
643
|
{
|
|
609
|
-
|
|
610
|
-
|
|
644
|
+
flowCopy: copy.flow,
|
|
645
|
+
title: copy.flow.pasteTitle,
|
|
646
|
+
caption: copy.flow.promptCaption,
|
|
611
647
|
message: connectPrompt
|
|
612
648
|
}
|
|
613
649
|
),
|
|
614
|
-
/* @__PURE__ */ jsx7(HostDocsLink, { host }),
|
|
615
|
-
/* @__PURE__ */ jsx7(StepNav, { nav, onNext: () => nav.next(), nextLabel:
|
|
650
|
+
/* @__PURE__ */ jsx7(HostDocsLink, { copy: copy.connectGuide, host }),
|
|
651
|
+
/* @__PURE__ */ jsx7(StepNav, { copy, nav, onNext: () => nav.next(), nextLabel: copy.flow.advance, nextTestId: "ai-connect-done" })
|
|
616
652
|
] });
|
|
617
653
|
}
|
|
618
654
|
__name(ConnectStep, "ConnectStep");
|
|
619
655
|
function InstallStep({
|
|
620
656
|
nav,
|
|
621
657
|
host,
|
|
622
|
-
connectPrompt
|
|
658
|
+
connectPrompt,
|
|
659
|
+
copy
|
|
623
660
|
}) {
|
|
624
661
|
const [opened, setOpened] = useState2(false);
|
|
625
662
|
return /* @__PURE__ */ jsxs5(Stack4, { spacing: 2.5, "data-testid": "ai-install-step", children: [
|
|
626
|
-
/* @__PURE__ */ jsx7(HostConnectHeader, { host }),
|
|
627
|
-
/* @__PURE__ */ jsx7(Text5, { variant: "body", as: "p", color: "secondary", children:
|
|
663
|
+
/* @__PURE__ */ jsx7(HostConnectHeader, { copy: copy.connectGuide, host }),
|
|
664
|
+
/* @__PURE__ */ jsx7(Text5, { variant: "body", as: "p", color: "secondary", children: copy.flow.installBody }),
|
|
628
665
|
host.pluginUrl && /* @__PURE__ */ jsx7(Box6, { children: /* @__PURE__ */ jsxs5(
|
|
629
666
|
Button3,
|
|
630
667
|
{
|
|
@@ -634,7 +671,7 @@ function InstallStep({
|
|
|
634
671
|
},
|
|
635
672
|
"data-testid": "ai-install-open",
|
|
636
673
|
children: [
|
|
637
|
-
|
|
674
|
+
copy.flow.installAction,
|
|
638
675
|
/* @__PURE__ */ jsx7(OpenInNewIcon2, { sx: { fontSize: 16, ml: 0.5 } })
|
|
639
676
|
]
|
|
640
677
|
}
|
|
@@ -642,18 +679,20 @@ function InstallStep({
|
|
|
642
679
|
/* @__PURE__ */ jsx7(
|
|
643
680
|
PromptCopyBlock,
|
|
644
681
|
{
|
|
645
|
-
|
|
646
|
-
|
|
682
|
+
flowCopy: copy.flow,
|
|
683
|
+
title: copy.flow.askTitle,
|
|
684
|
+
caption: copy.flow.pasteInstallCaption,
|
|
647
685
|
message: connectPrompt
|
|
648
686
|
}
|
|
649
687
|
),
|
|
650
|
-
/* @__PURE__ */ jsx7(HostDocsLink, { host }),
|
|
688
|
+
/* @__PURE__ */ jsx7(HostDocsLink, { copy: copy.connectGuide, host }),
|
|
651
689
|
/* @__PURE__ */ jsx7(
|
|
652
690
|
StepNav,
|
|
653
691
|
{
|
|
692
|
+
copy,
|
|
654
693
|
nav,
|
|
655
694
|
onNext: () => nav.next(),
|
|
656
|
-
nextLabel:
|
|
695
|
+
nextLabel: copy.flow.advance,
|
|
657
696
|
nextDisabled: !opened,
|
|
658
697
|
nextTestId: "ai-install-done"
|
|
659
698
|
}
|
|
@@ -665,7 +704,8 @@ function ConfirmStep({
|
|
|
665
704
|
nav,
|
|
666
705
|
connections,
|
|
667
706
|
hosts,
|
|
668
|
-
onRetest
|
|
707
|
+
onRetest,
|
|
708
|
+
copy
|
|
669
709
|
}) {
|
|
670
710
|
const selectedHostId = nav.data.selectedHost;
|
|
671
711
|
const connection = connectionForHost(connections, selectedHostId);
|
|
@@ -680,42 +720,36 @@ function ConfirmStep({
|
|
|
680
720
|
/* @__PURE__ */ jsxs5(Stack4, { direction: "row", spacing: 1.5, alignItems: "center", children: [
|
|
681
721
|
/* @__PURE__ */ jsx7(CheckCircleIcon, { sx: { color: "success.main" } }),
|
|
682
722
|
/* @__PURE__ */ jsxs5(Box6, { children: [
|
|
683
|
-
/* @__PURE__ */
|
|
684
|
-
|
|
685
|
-
" est\xE1 conectado \xE0 sua loja."
|
|
686
|
-
] }),
|
|
687
|
-
/* @__PURE__ */ jsx7(Text5, { variant: "caption", as: "p", color: "secondary", children: activeAgo(connection.lastActiveAt) })
|
|
723
|
+
/* @__PURE__ */ jsx7(Text5, { variant: "body", weight: "bold", as: "p", children: copy.flow.connectedTo(label) }),
|
|
724
|
+
/* @__PURE__ */ jsx7(Text5, { variant: "caption", as: "p", color: "secondary", children: activeAgo(connection.lastActiveAt, copy.summary) })
|
|
688
725
|
] })
|
|
689
726
|
] }),
|
|
690
|
-
/* @__PURE__ */ jsx7(Box6, { children: /* @__PURE__ */ jsx7(Button3, { onClick: () => nav.complete({ connectedHost: selectedHostId }), children:
|
|
727
|
+
/* @__PURE__ */ jsx7(Box6, { children: /* @__PURE__ */ jsx7(Button3, { onClick: () => nav.complete({ connectedHost: selectedHostId }), children: copy.flow.finish }) })
|
|
691
728
|
] });
|
|
692
729
|
}
|
|
693
730
|
return /* @__PURE__ */ jsxs5(Stack4, { spacing: 2.5, "data-testid": "ai-confirm-waiting", children: [
|
|
694
731
|
/* @__PURE__ */ jsxs5(Stack4, { direction: "row", spacing: 1.5, alignItems: "center", children: [
|
|
695
732
|
/* @__PURE__ */ jsx7(Progress, { variant: "circular", circularSize: 22, thickness: 4, dataTestId: "ai-confirm-spinner" }),
|
|
696
733
|
/* @__PURE__ */ jsxs5(Box6, { children: [
|
|
697
|
-
/* @__PURE__ */ jsx7(Text5, { variant: "body", weight: "bold", as: "p", children:
|
|
698
|
-
/* @__PURE__ */
|
|
699
|
-
"Assim que voc\xEA autorizar o acesso no ",
|
|
700
|
-
label,
|
|
701
|
-
", ela aparece aqui automaticamente."
|
|
702
|
-
] })
|
|
734
|
+
/* @__PURE__ */ jsx7(Text5, { variant: "body", weight: "bold", as: "p", children: copy.flow.waitingTitle }),
|
|
735
|
+
/* @__PURE__ */ jsx7(Text5, { variant: "caption", as: "p", color: "secondary", children: copy.flow.waitingBody(label) })
|
|
703
736
|
] })
|
|
704
737
|
] }),
|
|
705
738
|
/* @__PURE__ */ jsxs5(Stack4, { direction: "row", spacing: 1, children: [
|
|
706
|
-
/* @__PURE__ */ jsx7(Button3, { variant: "ghost", size: "sm", onClick: onRetest, "data-testid": "ai-confirm-retest", children:
|
|
707
|
-
/* @__PURE__ */ jsx7(Button3, { variant: "ghost", size: "sm", onClick: () => nav.back(), children:
|
|
739
|
+
/* @__PURE__ */ jsx7(Button3, { variant: "ghost", size: "sm", onClick: onRetest, "data-testid": "ai-confirm-retest", children: copy.flow.testNow }),
|
|
740
|
+
/* @__PURE__ */ jsx7(Button3, { variant: "ghost", size: "sm", onClick: () => nav.back(), children: copy.flow.back })
|
|
708
741
|
] })
|
|
709
742
|
] });
|
|
710
743
|
}
|
|
711
744
|
__name(ConfirmStep, "ConfirmStep");
|
|
712
745
|
|
|
713
746
|
// src/react/ai-status-board.tsx
|
|
747
|
+
import { useMemo } from "react";
|
|
714
748
|
import AddLinkOutlinedIcon from "@mui/icons-material/AddLinkOutlined";
|
|
715
749
|
import CheckCircleIcon2 from "@mui/icons-material/CheckCircle";
|
|
716
750
|
import LinkOffOutlinedIcon from "@mui/icons-material/LinkOffOutlined";
|
|
717
751
|
import MenuBookOutlinedIcon from "@mui/icons-material/MenuBookOutlined";
|
|
718
|
-
import {
|
|
752
|
+
import { createConfirmButton } from "@12-apps/ui/feedback/ConfirmAction";
|
|
719
753
|
import { Button as Button4 } from "@12-apps/ui/form/Button";
|
|
720
754
|
import { Box as Box7 } from "@12-apps/ui/mui/Box";
|
|
721
755
|
import { Stack as Stack5 } from "@12-apps/ui/mui/Stack";
|
|
@@ -724,8 +758,13 @@ import { jsx as jsx8, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
|
724
758
|
function ConnectedControls({
|
|
725
759
|
host,
|
|
726
760
|
onConnect,
|
|
727
|
-
onDisconnect
|
|
761
|
+
onDisconnect,
|
|
762
|
+
copy
|
|
728
763
|
}) {
|
|
764
|
+
const DisconnectButton = useMemo(
|
|
765
|
+
() => createConfirmButton(copy.confirmAction, copy.disconnectError),
|
|
766
|
+
[copy.confirmAction, copy.disconnectError]
|
|
767
|
+
);
|
|
729
768
|
return /* @__PURE__ */ jsxs6(
|
|
730
769
|
Stack5,
|
|
731
770
|
{
|
|
@@ -745,7 +784,7 @@ function ConnectedControls({
|
|
|
745
784
|
bgcolor: "success.main",
|
|
746
785
|
color: "success.contrastText"
|
|
747
786
|
},
|
|
748
|
-
children: /* @__PURE__ */ jsx8(Text6, { variant: "caption", weight: "bold", as: "span", children:
|
|
787
|
+
children: /* @__PURE__ */ jsx8(Text6, { variant: "caption", weight: "bold", as: "span", children: copy.connected })
|
|
749
788
|
}
|
|
750
789
|
),
|
|
751
790
|
/* @__PURE__ */ jsxs6(
|
|
@@ -757,28 +796,28 @@ function ConnectedControls({
|
|
|
757
796
|
"data-testid": `ai-status-instructions-${host.id}`,
|
|
758
797
|
children: [
|
|
759
798
|
/* @__PURE__ */ jsx8(MenuBookOutlinedIcon, { sx: { fontSize: 16, mr: 0.5 } }),
|
|
760
|
-
|
|
799
|
+
copy.instructions
|
|
761
800
|
]
|
|
762
801
|
}
|
|
763
802
|
),
|
|
764
803
|
onDisconnect ? /* @__PURE__ */ jsxs6(
|
|
765
|
-
|
|
804
|
+
DisconnectButton,
|
|
766
805
|
{
|
|
767
806
|
variant: "outline",
|
|
768
807
|
color: "danger",
|
|
769
808
|
size: "sm",
|
|
770
809
|
onClick: () => onDisconnect(host.id),
|
|
771
810
|
confirm: {
|
|
772
|
-
title:
|
|
811
|
+
title: copy.disconnectTitle,
|
|
773
812
|
entityName: host.label,
|
|
774
|
-
description:
|
|
775
|
-
confirmText:
|
|
813
|
+
description: copy.disconnectBody,
|
|
814
|
+
confirmText: copy.disconnectConfirm,
|
|
776
815
|
dataTestId: `ai-status-disconnect-confirm-${host.id}`
|
|
777
816
|
},
|
|
778
817
|
"data-testid": `ai-status-disconnect-${host.id}`,
|
|
779
818
|
children: [
|
|
780
819
|
/* @__PURE__ */ jsx8(LinkOffOutlinedIcon, { sx: { fontSize: 16, mr: 0.5 } }),
|
|
781
|
-
|
|
820
|
+
copy.disconnect
|
|
782
821
|
]
|
|
783
822
|
}
|
|
784
823
|
) : null
|
|
@@ -790,7 +829,8 @@ __name(ConnectedControls, "ConnectedControls");
|
|
|
790
829
|
function StatusBox({
|
|
791
830
|
status,
|
|
792
831
|
onConnect,
|
|
793
|
-
onDisconnect
|
|
832
|
+
onDisconnect,
|
|
833
|
+
copy
|
|
794
834
|
}) {
|
|
795
835
|
const { host, connected, detail } = status;
|
|
796
836
|
return /* @__PURE__ */ jsxs6(
|
|
@@ -815,9 +855,9 @@ function StatusBox({
|
|
|
815
855
|
/* @__PURE__ */ jsx8(Text6, { variant: "body", weight: "bold", as: "span", children: host.label }),
|
|
816
856
|
connected ? /* @__PURE__ */ jsx8(CheckCircleIcon2, { sx: { fontSize: 18, color: "success.main" } }) : null
|
|
817
857
|
] }),
|
|
818
|
-
/* @__PURE__ */ jsx8(Text6, { variant: "caption", as: "p", color: "secondary", children: connected ? detail ??
|
|
858
|
+
/* @__PURE__ */ jsx8(Text6, { variant: "caption", as: "p", color: "secondary", children: connected ? detail ?? copy.connected : copy.notConnected })
|
|
819
859
|
] }),
|
|
820
|
-
connected ? /* @__PURE__ */ jsx8(ConnectedControls, { host, onConnect, onDisconnect }) : /* @__PURE__ */ jsxs6(
|
|
860
|
+
connected ? /* @__PURE__ */ jsx8(ConnectedControls, { copy, host, onConnect, onDisconnect }) : /* @__PURE__ */ jsxs6(
|
|
821
861
|
Button4,
|
|
822
862
|
{
|
|
823
863
|
variant: "outline",
|
|
@@ -838,12 +878,13 @@ __name(StatusBox, "StatusBox");
|
|
|
838
878
|
function AiStatusBoard({
|
|
839
879
|
statuses,
|
|
840
880
|
onConnect,
|
|
841
|
-
onDisconnect
|
|
881
|
+
onDisconnect,
|
|
882
|
+
copy
|
|
842
883
|
}) {
|
|
843
884
|
return /* @__PURE__ */ jsxs6(Stack5, { spacing: 2, "data-testid": "ai-status-board", children: [
|
|
844
885
|
/* @__PURE__ */ jsxs6(Box7, { children: [
|
|
845
|
-
/* @__PURE__ */ jsx8(Text6, { variant: "heading", size: "sm", as: "h2", children:
|
|
846
|
-
/* @__PURE__ */ jsx8(Text6, { variant: "caption", as: "p", color: "secondary", children:
|
|
886
|
+
/* @__PURE__ */ jsx8(Text6, { variant: "heading", size: "sm", as: "h2", children: copy.boardTitle }),
|
|
887
|
+
/* @__PURE__ */ jsx8(Text6, { variant: "caption", as: "p", color: "secondary", children: copy.boardCaption })
|
|
847
888
|
] }),
|
|
848
889
|
/* @__PURE__ */ jsx8(
|
|
849
890
|
Box7,
|
|
@@ -856,6 +897,7 @@ function AiStatusBoard({
|
|
|
856
897
|
children: statuses.map((status) => /* @__PURE__ */ jsx8(
|
|
857
898
|
StatusBox,
|
|
858
899
|
{
|
|
900
|
+
copy,
|
|
859
901
|
status,
|
|
860
902
|
onConnect,
|
|
861
903
|
onDisconnect
|
|
@@ -923,12 +965,13 @@ __name(HostCard, "HostCard");
|
|
|
923
965
|
function HostSelectStep({
|
|
924
966
|
hosts,
|
|
925
967
|
selectedId,
|
|
926
|
-
onSelect
|
|
968
|
+
onSelect,
|
|
969
|
+
copy
|
|
927
970
|
}) {
|
|
928
971
|
return /* @__PURE__ */ jsxs7(Stack6, { spacing: 3, "data-testid": "ai-host-select", children: [
|
|
929
972
|
/* @__PURE__ */ jsxs7(Box8, { children: [
|
|
930
973
|
/* @__PURE__ */ jsx9(Text7, { variant: "heading", size: "sm", as: "h2", children: "Escolha o seu assistente" }),
|
|
931
|
-
/* @__PURE__ */ jsx9(Text7, { variant: "caption", as: "p", color: "secondary", children:
|
|
974
|
+
/* @__PURE__ */ jsx9(Text7, { variant: "caption", as: "p", color: "secondary", children: copy.caption })
|
|
932
975
|
] }),
|
|
933
976
|
/* @__PURE__ */ jsx9(
|
|
934
977
|
Box8,
|
|
@@ -959,7 +1002,8 @@ function StatusBoard({
|
|
|
959
1002
|
nav,
|
|
960
1003
|
connections,
|
|
961
1004
|
hosts,
|
|
962
|
-
onDisconnect
|
|
1005
|
+
onDisconnect,
|
|
1006
|
+
copy
|
|
963
1007
|
}) {
|
|
964
1008
|
const legacyHostId = nav.data.connectedHost ?? nav.data.selectedHost;
|
|
965
1009
|
const statuses = hosts.map((host) => {
|
|
@@ -968,7 +1012,7 @@ function StatusBoard({
|
|
|
968
1012
|
return {
|
|
969
1013
|
host,
|
|
970
1014
|
connected: connection !== null,
|
|
971
|
-
detail: connection ? activeAgo(connection.lastActiveAt) : void 0
|
|
1015
|
+
detail: connection ? activeAgo(connection.lastActiveAt, copy.summary) : void 0
|
|
972
1016
|
};
|
|
973
1017
|
});
|
|
974
1018
|
const goToConnect = /* @__PURE__ */ __name((hostId) => {
|
|
@@ -984,18 +1028,19 @@ function StatusBoard({
|
|
|
984
1028
|
);
|
|
985
1029
|
if (!othersLive) goToConnect(hostId);
|
|
986
1030
|
} : void 0;
|
|
987
|
-
return /* @__PURE__ */ jsx10(AiStatusBoard, { statuses, onConnect: goToConnect, onDisconnect: disconnect });
|
|
1031
|
+
return /* @__PURE__ */ jsx10(AiStatusBoard, { copy: copy.statusBoard, statuses, onConnect: goToConnect, onDisconnect: disconnect });
|
|
988
1032
|
}
|
|
989
1033
|
__name(StatusBoard, "StatusBoard");
|
|
990
|
-
function selectStep(hosts) {
|
|
1034
|
+
function selectStep(hosts, copy) {
|
|
991
1035
|
return {
|
|
992
1036
|
id: "select",
|
|
993
|
-
label:
|
|
1037
|
+
label: copy.flow.steps.select,
|
|
994
1038
|
render: /* @__PURE__ */ __name((nav) => /* @__PURE__ */ jsx10(
|
|
995
1039
|
HostSelectStep,
|
|
996
1040
|
{
|
|
997
1041
|
hosts,
|
|
998
1042
|
selectedId: nav.data.selectedHost ?? null,
|
|
1043
|
+
copy: copy.hostSelect,
|
|
999
1044
|
onSelect: (hostId) => nav.goTo(hosts.find((h) => h.id === hostId)?.pluginUrl ? "install" : "copy", {
|
|
1000
1045
|
selectedHost: hostId
|
|
1001
1046
|
})
|
|
@@ -1004,59 +1049,99 @@ function selectStep(hosts) {
|
|
|
1004
1049
|
};
|
|
1005
1050
|
}
|
|
1006
1051
|
__name(selectStep, "selectStep");
|
|
1007
|
-
function copyStep(endpointUrl) {
|
|
1052
|
+
function copyStep(endpointUrl, copy) {
|
|
1008
1053
|
return {
|
|
1009
1054
|
id: "copy",
|
|
1010
|
-
label:
|
|
1011
|
-
render: /* @__PURE__ */ __name((nav) => /* @__PURE__ */ jsx10(CopyUrlStep, { nav, endpointUrl }), "render")
|
|
1055
|
+
label: copy.flow.steps.copyUrl,
|
|
1056
|
+
render: /* @__PURE__ */ __name((nav) => /* @__PURE__ */ jsx10(CopyUrlStep, { copy, nav, endpointUrl }), "render")
|
|
1012
1057
|
};
|
|
1013
1058
|
}
|
|
1014
1059
|
__name(copyStep, "copyStep");
|
|
1015
|
-
function manualMiddle(host, hosts, endpointUrl, connectPrompt) {
|
|
1060
|
+
function manualMiddle(host, hosts, endpointUrl, connectPrompt, copy) {
|
|
1016
1061
|
if (host.configureStages && host.configureStages.length > 0) {
|
|
1017
1062
|
return [
|
|
1018
|
-
copyStep(endpointUrl),
|
|
1063
|
+
copyStep(endpointUrl, copy),
|
|
1019
1064
|
...host.configureStages.map((stage) => ({
|
|
1020
1065
|
id: stage.id,
|
|
1021
1066
|
label: stage.label,
|
|
1022
|
-
render: /* @__PURE__ */ __name((nav) => /* @__PURE__ */ jsx10(
|
|
1067
|
+
render: /* @__PURE__ */ __name((nav) => /* @__PURE__ */ jsx10(
|
|
1068
|
+
ConfigureStageStep,
|
|
1069
|
+
{
|
|
1070
|
+
nav,
|
|
1071
|
+
host: resolveHost(hosts, nav.data.selectedHost),
|
|
1072
|
+
stage,
|
|
1073
|
+
copy
|
|
1074
|
+
}
|
|
1075
|
+
), "render")
|
|
1023
1076
|
}))
|
|
1024
1077
|
];
|
|
1025
1078
|
}
|
|
1026
1079
|
return [
|
|
1027
|
-
copyStep(endpointUrl),
|
|
1080
|
+
copyStep(endpointUrl, copy),
|
|
1028
1081
|
{
|
|
1029
1082
|
id: "configure",
|
|
1030
|
-
label:
|
|
1031
|
-
render: /* @__PURE__ */ __name((nav) => /* @__PURE__ */ jsx10(
|
|
1083
|
+
label: copy.flow.steps.configure,
|
|
1084
|
+
render: /* @__PURE__ */ __name((nav) => /* @__PURE__ */ jsx10(
|
|
1085
|
+
ConfigureStep,
|
|
1086
|
+
{
|
|
1087
|
+
nav,
|
|
1088
|
+
host: resolveHost(hosts, nav.data.selectedHost),
|
|
1089
|
+
copy
|
|
1090
|
+
}
|
|
1091
|
+
), "render")
|
|
1032
1092
|
},
|
|
1033
1093
|
{
|
|
1034
1094
|
id: "connect",
|
|
1035
|
-
label:
|
|
1036
|
-
render: /* @__PURE__ */ __name((nav) => /* @__PURE__ */ jsx10(
|
|
1095
|
+
label: copy.flow.steps.connect,
|
|
1096
|
+
render: /* @__PURE__ */ __name((nav) => /* @__PURE__ */ jsx10(
|
|
1097
|
+
ConnectStep,
|
|
1098
|
+
{
|
|
1099
|
+
nav,
|
|
1100
|
+
host: resolveHost(hosts, nav.data.selectedHost),
|
|
1101
|
+
connectPrompt,
|
|
1102
|
+
copy
|
|
1103
|
+
}
|
|
1104
|
+
), "render")
|
|
1037
1105
|
}
|
|
1038
1106
|
];
|
|
1039
1107
|
}
|
|
1040
1108
|
__name(manualMiddle, "manualMiddle");
|
|
1041
|
-
function simpleMiddle(hosts, connectPrompt) {
|
|
1109
|
+
function simpleMiddle(hosts, connectPrompt, copy) {
|
|
1042
1110
|
return [
|
|
1043
1111
|
{
|
|
1044
1112
|
id: "install",
|
|
1045
|
-
label:
|
|
1046
|
-
render: /* @__PURE__ */ __name((nav) => /* @__PURE__ */ jsx10(
|
|
1113
|
+
label: copy.flow.steps.install,
|
|
1114
|
+
render: /* @__PURE__ */ __name((nav) => /* @__PURE__ */ jsx10(
|
|
1115
|
+
InstallStep,
|
|
1116
|
+
{
|
|
1117
|
+
nav,
|
|
1118
|
+
host: resolveHost(hosts, nav.data.selectedHost),
|
|
1119
|
+
connectPrompt,
|
|
1120
|
+
copy
|
|
1121
|
+
}
|
|
1122
|
+
), "render")
|
|
1047
1123
|
}
|
|
1048
1124
|
];
|
|
1049
1125
|
}
|
|
1050
1126
|
__name(simpleMiddle, "simpleMiddle");
|
|
1051
1127
|
function buildFlowSteps(opts) {
|
|
1052
|
-
const { host, hosts, endpointUrl, connectPrompt, connections, onRetest } = opts;
|
|
1053
|
-
const middle = host.pluginUrl ? simpleMiddle(hosts, connectPrompt) : manualMiddle(host, hosts, endpointUrl, connectPrompt);
|
|
1128
|
+
const { host, hosts, endpointUrl, connectPrompt, connections, onRetest, copy } = opts;
|
|
1129
|
+
const middle = host.pluginUrl ? simpleMiddle(hosts, connectPrompt, copy) : manualMiddle(host, hosts, endpointUrl, connectPrompt, copy);
|
|
1054
1130
|
const confirm = {
|
|
1055
1131
|
id: "confirm",
|
|
1056
|
-
label:
|
|
1057
|
-
render: /* @__PURE__ */ __name((nav) => /* @__PURE__ */ jsx10(
|
|
1132
|
+
label: copy.flow.steps.confirm,
|
|
1133
|
+
render: /* @__PURE__ */ __name((nav) => /* @__PURE__ */ jsx10(
|
|
1134
|
+
ConfirmStep,
|
|
1135
|
+
{
|
|
1136
|
+
nav,
|
|
1137
|
+
connections,
|
|
1138
|
+
hosts,
|
|
1139
|
+
onRetest,
|
|
1140
|
+
copy
|
|
1141
|
+
}
|
|
1142
|
+
), "render")
|
|
1058
1143
|
};
|
|
1059
|
-
return [selectStep(hosts), ...middle, confirm];
|
|
1144
|
+
return [selectStep(hosts, copy), ...middle, confirm];
|
|
1060
1145
|
}
|
|
1061
1146
|
__name(buildFlowSteps, "buildFlowSteps");
|
|
1062
1147
|
|
|
@@ -1073,7 +1158,8 @@ function AiOnboardingFlow(props) {
|
|
|
1073
1158
|
connectPrompt,
|
|
1074
1159
|
onRetest,
|
|
1075
1160
|
onDisconnect,
|
|
1076
|
-
devReset
|
|
1161
|
+
devReset,
|
|
1162
|
+
copy
|
|
1077
1163
|
} = props;
|
|
1078
1164
|
const { state } = useOnboarding();
|
|
1079
1165
|
const selectedHost = hosts.find((h) => h.id === state.data.selectedHost) ?? hosts[0];
|
|
@@ -1083,33 +1169,38 @@ function AiOnboardingFlow(props) {
|
|
|
1083
1169
|
endpointUrl,
|
|
1084
1170
|
connectPrompt,
|
|
1085
1171
|
connections,
|
|
1086
|
-
onRetest
|
|
1172
|
+
onRetest,
|
|
1173
|
+
copy
|
|
1087
1174
|
});
|
|
1088
1175
|
const connectedHostId = state.data.connectedHost ?? state.data.selectedHost;
|
|
1089
1176
|
return /* @__PURE__ */ jsx11(
|
|
1090
1177
|
GuidedSection,
|
|
1091
1178
|
{
|
|
1092
1179
|
steps,
|
|
1093
|
-
title:
|
|
1094
|
-
startLabel:
|
|
1180
|
+
title: copy.onboarding.title,
|
|
1181
|
+
startLabel: copy.landing.start,
|
|
1095
1182
|
renderLanding: (start) => /* @__PURE__ */ jsx11(
|
|
1096
1183
|
AiLanding,
|
|
1097
1184
|
{
|
|
1098
1185
|
onStart: start,
|
|
1099
1186
|
permissionModel,
|
|
1100
|
-
capabilities
|
|
1187
|
+
capabilities,
|
|
1188
|
+
copy: copy.landing,
|
|
1189
|
+
capabilitiesCopy: copy.capabilities
|
|
1101
1190
|
}
|
|
1102
1191
|
),
|
|
1103
|
-
configuredTitle: connectedTitle(connections, hosts, connectedHostId),
|
|
1104
|
-
configuredSummary: connectedSummary(connections),
|
|
1105
|
-
editLabel:
|
|
1192
|
+
configuredTitle: connectedTitle(connections, hosts, connectedHostId, copy.summary),
|
|
1193
|
+
configuredSummary: connectedSummary(connections, copy.summary),
|
|
1194
|
+
editLabel: copy.onboarding.editLabel,
|
|
1195
|
+
collapseLabel: copy.onboarding.collapseLabel,
|
|
1106
1196
|
completedContent: (nav) => /* @__PURE__ */ jsx11(
|
|
1107
1197
|
StatusBoard,
|
|
1108
1198
|
{
|
|
1109
1199
|
nav,
|
|
1110
1200
|
connections,
|
|
1111
1201
|
hosts,
|
|
1112
|
-
onDisconnect
|
|
1202
|
+
onDisconnect,
|
|
1203
|
+
copy
|
|
1113
1204
|
}
|
|
1114
1205
|
),
|
|
1115
1206
|
devReset,
|
|
@@ -1125,15 +1216,15 @@ function AiIntegrationOnboarding({
|
|
|
1125
1216
|
connections,
|
|
1126
1217
|
featureKey = DEFAULT_FEATURE_KEY,
|
|
1127
1218
|
devReset = false,
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
permissionModel = AI_PERMISSION_MODEL,
|
|
1219
|
+
hosts,
|
|
1220
|
+
capabilities,
|
|
1221
|
+
permissionModel,
|
|
1132
1222
|
connectPrompt,
|
|
1133
1223
|
onRetest = /* @__PURE__ */ __name(() => {
|
|
1134
1224
|
if (typeof window !== "undefined") window.location.reload();
|
|
1135
1225
|
}, "onRetest"),
|
|
1136
|
-
onDisconnect
|
|
1226
|
+
onDisconnect,
|
|
1227
|
+
copy
|
|
1137
1228
|
}) {
|
|
1138
1229
|
return /* @__PURE__ */ jsx11(
|
|
1139
1230
|
OnboardingProvider,
|
|
@@ -1152,16 +1243,111 @@ function AiIntegrationOnboarding({
|
|
|
1152
1243
|
connectPrompt,
|
|
1153
1244
|
onRetest,
|
|
1154
1245
|
onDisconnect,
|
|
1155
|
-
devReset
|
|
1246
|
+
devReset,
|
|
1247
|
+
copy
|
|
1156
1248
|
}
|
|
1157
1249
|
)
|
|
1158
1250
|
}
|
|
1159
1251
|
);
|
|
1160
1252
|
}
|
|
1161
1253
|
__name(AiIntegrationOnboarding, "AiIntegrationOnboarding");
|
|
1254
|
+
|
|
1255
|
+
// src/react/pt-BR.ts
|
|
1256
|
+
import { PT_BR_CONFIRM_ACTION_COPY } from "@12-apps/ui/pt-BR";
|
|
1257
|
+
var PT_BR_MCP_AI_COPY = {
|
|
1258
|
+
capabilities: {
|
|
1259
|
+
heading: "O que o assistente faz por voc\xEA",
|
|
1260
|
+
subheading: "Sem planilhas, sem cliques \u2014 \xE9 s\xF3 perguntar na conversa."
|
|
1261
|
+
},
|
|
1262
|
+
landing: {
|
|
1263
|
+
eyebrow: "Integra\xE7\xE3o com IA",
|
|
1264
|
+
titleTail: "\xE0 sua loja",
|
|
1265
|
+
lede: "Deixe o Claude, o ChatGPT e outros assistentes responderem sobre o seu card\xE1pio, estoque e pedidos \u2014 e executarem a\xE7\xF5es por voc\xEA, direto na conversa. Com seguran\xE7a e sem instalar nada.",
|
|
1266
|
+
trust: [
|
|
1267
|
+
{
|
|
1268
|
+
id: "login",
|
|
1269
|
+
label: "Usa o seu pr\xF3prio login",
|
|
1270
|
+
caption: "Sem chaves ou credenciais extras"
|
|
1271
|
+
},
|
|
1272
|
+
{ id: "install", label: "Sem instalar nada", caption: "Conecta em poucos minutos" },
|
|
1273
|
+
{
|
|
1274
|
+
id: "permissions",
|
|
1275
|
+
label: "S\xF3 o que voc\xEA pode",
|
|
1276
|
+
caption: "As suas permiss\xF5es, nada al\xE9m"
|
|
1277
|
+
},
|
|
1278
|
+
{ id: "surface", label: "Navegador ou app", caption: "Claude, ChatGPT, Codex" }
|
|
1279
|
+
],
|
|
1280
|
+
start: "Come\xE7ar"
|
|
1281
|
+
},
|
|
1282
|
+
flow: {
|
|
1283
|
+
steps: {
|
|
1284
|
+
select: "Escolher",
|
|
1285
|
+
copyUrl: "Copiar URL",
|
|
1286
|
+
configure: "Configurar",
|
|
1287
|
+
connect: "Conectar",
|
|
1288
|
+
install: "Instalar",
|
|
1289
|
+
confirm: "Confirmar"
|
|
1290
|
+
},
|
|
1291
|
+
back: "Voltar",
|
|
1292
|
+
next: "Pr\xF3ximo",
|
|
1293
|
+
advance: "Continuar",
|
|
1294
|
+
finish: "Concluir",
|
|
1295
|
+
copyUrl: "Copiar URL",
|
|
1296
|
+
copied: "Copiado",
|
|
1297
|
+
copyMessage: "Copiar mensagem",
|
|
1298
|
+
copyUrlTitle: "Copie a URL da sua loja",
|
|
1299
|
+
urlCaption: "\xC9 o \xFAnico dado que voc\xEA cola no assistente \u2014 ao copiar, seguimos para o pr\xF3ximo passo.",
|
|
1300
|
+
promptCaption: "Assim ele se conecta, se identifica (Claude, ChatGPT\u2026) e registramos a conex\xE3o.",
|
|
1301
|
+
askTitle: "Pe\xE7a ao assistente para conectar",
|
|
1302
|
+
installBody: "Abra o plugin da sua loja, clique em Instalar e autorize o acesso \u2014 sem copiar URL nem gerar credenciais.",
|
|
1303
|
+
installAction: "Instalar o plugin da loja",
|
|
1304
|
+
pasteTitle: "Cole esta mensagem no assistente",
|
|
1305
|
+
pasteInstallCaption: "Cole no assistente para ele se conectar, se identificar e confirmar o acesso.",
|
|
1306
|
+
connectedTo: /* @__PURE__ */ __name((hostLabel2) => `${hostLabel2} est\xE1 conectado \xE0 sua loja.`, "connectedTo"),
|
|
1307
|
+
waitingTitle: "Esperando conex\xE3o",
|
|
1308
|
+
waitingBody: /* @__PURE__ */ __name((hostLabel2) => `Assim que voc\xEA autorizar o acesso no ${hostLabel2}, ela aparece aqui automaticamente.`, "waitingBody"),
|
|
1309
|
+
testNow: "Testar agora"
|
|
1310
|
+
},
|
|
1311
|
+
statusBoard: {
|
|
1312
|
+
instructions: "Instru\xE7\xF5es",
|
|
1313
|
+
connected: "Conectado",
|
|
1314
|
+
notConnected: "Ainda n\xE3o conectado",
|
|
1315
|
+
connect: "Conectar",
|
|
1316
|
+
disconnect: "Desconectar",
|
|
1317
|
+
disconnectTitle: "Desconectar o assistente?",
|
|
1318
|
+
disconnectBody: "Ele perde o acesso \xE0 sua loja na hora. Para voltar a usar, ser\xE1 preciso conectar de novo.",
|
|
1319
|
+
disconnectConfirm: "Desconectar",
|
|
1320
|
+
disconnectError: "N\xE3o foi poss\xEDvel desconectar. Tente de novo.",
|
|
1321
|
+
boardTitle: "Assistentes conectados",
|
|
1322
|
+
boardCaption: "Em verde os que j\xE1 operam a sua loja; em vermelho os que faltam conectar.",
|
|
1323
|
+
confirmAction: PT_BR_CONFIRM_ACTION_COPY
|
|
1324
|
+
},
|
|
1325
|
+
summary: {
|
|
1326
|
+
activeNow: "ativo agora",
|
|
1327
|
+
activeMinutes: /* @__PURE__ */ __name((minutes) => `ativo h\xE1 ${minutes} min`, "activeMinutes"),
|
|
1328
|
+
activeHours: /* @__PURE__ */ __name((hours) => `ativo h\xE1 ${hours} h`, "activeHours"),
|
|
1329
|
+
activeDays: /* @__PURE__ */ __name((days) => `ativo h\xE1 ${days} dias`, "activeDays"),
|
|
1330
|
+
configured: "Integra\xE7\xE3o configurada",
|
|
1331
|
+
connectedSuffix: "Conectado",
|
|
1332
|
+
connectedSeveral: /* @__PURE__ */ __name((names) => `${names} conectados`, "connectedSeveral"),
|
|
1333
|
+
connectedGeneric: "IA conectada"
|
|
1334
|
+
},
|
|
1335
|
+
hostSelect: {
|
|
1336
|
+
caption: "Selecione onde voc\xEA usa a IA \u2014 o passo a passo \xE9 feito sob medida para ele."
|
|
1337
|
+
},
|
|
1338
|
+
connectGuide: {
|
|
1339
|
+
urlLabel: "URL do servidor da sua loja",
|
|
1340
|
+
urlHint: "Copie esta URL e cole no seu assistente para conect\xE1-lo \xE0 loja.",
|
|
1341
|
+
moreInfo: "Para mais informa\xE7\xF5es, consulte a",
|
|
1342
|
+
connectOn: /* @__PURE__ */ __name((hostLabel2) => `Conectar no ${hostLabel2}`, "connectOn")
|
|
1343
|
+
},
|
|
1344
|
+
onboarding: {
|
|
1345
|
+
title: "Conecte assistentes de IA \xE0 sua loja",
|
|
1346
|
+
editLabel: "Conectar IA",
|
|
1347
|
+
collapseLabel: "Ocultar"
|
|
1348
|
+
}
|
|
1349
|
+
};
|
|
1162
1350
|
export {
|
|
1163
|
-
AI_CAPABILITIES,
|
|
1164
|
-
AI_PERMISSION_MODEL,
|
|
1165
1351
|
AiCapabilities,
|
|
1166
1352
|
AiIntegrationOnboarding,
|
|
1167
1353
|
AiLanding,
|
|
@@ -1175,9 +1361,13 @@ export {
|
|
|
1175
1361
|
HostSelectStep,
|
|
1176
1362
|
HostStepList,
|
|
1177
1363
|
McpEndpointUrl,
|
|
1364
|
+
PT_BR_AI_CAPABILITIES,
|
|
1365
|
+
PT_BR_AI_CONNECT_PROMPT,
|
|
1366
|
+
PT_BR_AI_HOST_GUIDES,
|
|
1367
|
+
PT_BR_AI_PERMISSION_MODEL,
|
|
1368
|
+
PT_BR_MCP_AI_COPY,
|
|
1178
1369
|
PromptCopyBlock,
|
|
1179
1370
|
aiConnectPrompt,
|
|
1180
|
-
aiHostGuides,
|
|
1181
1371
|
providerForHostId
|
|
1182
1372
|
};
|
|
1183
1373
|
//# sourceMappingURL=index.js.map
|