@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.
@@ -1,10 +1,13 @@
1
1
  import {
2
- AI_CAPABILITIES,
3
- AI_PERMISSION_MODEL,
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-FYEVBTDU.js";
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 = AI_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: "O que o assistente faz por voc\xEA" }),
151
- /* @__PURE__ */ jsx2(Box2, { sx: { mt: 0.5 }, children: /* @__PURE__ */ jsx2(Text, { variant: "body", size: "sm", as: "p", color: "secondary", children: "Sem planilhas, sem cliques \u2014 \xE9 s\xF3 perguntar na conversa." }) })
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 FEATURES = [
205
- { icon: /* @__PURE__ */ jsx4(LockOpenOutlinedIcon, {}), label: "Usa o seu pr\xF3prio login", caption: "Sem chaves ou credenciais extras" },
206
- { icon: /* @__PURE__ */ jsx4(BoltOutlinedIcon, {}), label: "Sem instalar nada", caption: "Conecta em poucos minutos" },
207
- { icon: /* @__PURE__ */ jsx4(VerifiedUserOutlinedIcon, {}), label: "S\xF3 o que voc\xEA pode", caption: "As suas permiss\xF5es, nada al\xE9m" },
208
- { icon: /* @__PURE__ */ jsx4(LanguageOutlinedIcon, {}), label: "Navegador ou app", caption: "Claude, ChatGPT, Codex" }
209
- ];
210
- function Hero({ onStart }) {
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: "Integra\xE7\xE3o com IA"
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
- "\xE0 sua loja"
245
+ copy.titleTail
231
246
  ] }),
232
- /* @__PURE__ */ jsx4(Text3, { variant: "body", color: "secondary", as: "p", children: "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." }),
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 = AI_PERMISSION_MODEL,
240
- capabilities = AI_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: FEATURES.map((f) => /* @__PURE__ */ jsx4(FeatureBadge, { icon: f.icon, label: f.label, caption: f.caption }, f.label))
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 "ativo agora";
317
- if (minutes < 60) return `ativo h\xE1 ${minutes} min`;
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 `ativo h\xE1 ${hours} h`;
320
- return `ativo h\xE1 ${Math.floor(hours / 24)} dias`;
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]]} Conectado`;
349
+ if (providers.length === 1) return `${PROVIDER_LABEL[providers[0]]} ${copy.connectedSuffix}`;
333
350
  if (providers.length > 1) {
334
- return `${providers.map((p) => PROVIDER_LABEL[p]).join(", ")} conectados`;
351
+ return copy.connectedSeveral(providers.map((p) => PROVIDER_LABEL[p]).join(", "));
335
352
  }
336
- if (connections.length > 0) return `${hostLabel(hosts, connectedHostId)} Conectado`;
337
- return "IA conectada";
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 "Integra\xE7\xE3o configurada";
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: "URL do servidor da sua loja" }),
403
- /* @__PURE__ */ jsx6(Text4, { variant: "caption", as: "p", color: "secondary", children: "Copie esta URL e cole no seu assistente para conect\xE1-lo \xE0 loja." }),
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 ? "Copiado" : "Copiar URL"
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 ? "Copiado" : "Copiar mensagem"
476
+ copied ? flowCopy.copied : flowCopy.copyMessage
457
477
  ] }) })
458
478
  ]
459
479
  }
460
480
  );
461
481
  }
462
482
  __name(PromptCopyBlock, "PromptCopyBlock");
463
- function HostConnectHeader({ host }) {
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__ */ jsxs4(Text4, { variant: "heading", size: "sm", as: "h3", children: [
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({ host }) {
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
- "Para mais informa\xE7\xF5es, consulte a",
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 = "Pr\xF3ximo",
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: "Voltar" }),
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({ nav, endpointUrl }) {
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: "Copie a URL da sua loja" }),
544
- /* @__PURE__ */ jsx7(Text5, { variant: "caption", as: "p", color: "secondary", children: "\xC9 o \xFAnico dado que voc\xEA cola no assistente \u2014 ao copiar, seguimos para o pr\xF3ximo passo." })
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: "Voltar" }) })
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({ nav, host }) {
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
- title: "Cole esta mensagem no assistente",
610
- caption: "Assim ele se conecta, se identifica (Claude, ChatGPT\u2026) e registramos a conex\xE3o.",
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: "Continuar", nextTestId: "ai-connect-done" })
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: "Abra o plugin da sua loja, clique em Instalar e autorize o acesso \u2014 sem copiar URL nem gerar credenciais." }),
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
- "Instalar o plugin da loja",
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
- title: "Pe\xE7a ao assistente para conectar",
646
- caption: "Cole no assistente para ele se conectar, se identificar e confirmar o acesso.",
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: "Continuar",
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__ */ jsxs5(Text5, { variant: "body", weight: "bold", as: "p", children: [
684
- label,
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: "Concluir" }) })
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: "Esperando conex\xE3o" }),
698
- /* @__PURE__ */ jsxs5(Text5, { variant: "caption", as: "p", color: "secondary", children: [
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: "Testar agora" }),
707
- /* @__PURE__ */ jsx7(Button3, { variant: "ghost", size: "sm", onClick: () => nav.back(), children: "Voltar" })
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 { ConfirmButton } from "@12-apps/ui/feedback/ConfirmAction";
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: "Conectado" })
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
- "Instru\xE7\xF5es"
799
+ copy.instructions
761
800
  ]
762
801
  }
763
802
  ),
764
803
  onDisconnect ? /* @__PURE__ */ jsxs6(
765
- ConfirmButton,
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: "Desconectar o assistente?",
811
+ title: copy.disconnectTitle,
773
812
  entityName: host.label,
774
- description: "Ele perde o acesso \xE0 sua loja na hora. Para voltar a usar, ser\xE1 preciso conectar de novo.",
775
- confirmText: "Desconectar",
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
- "Desconectar"
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 ?? "Conectado" : "Ainda n\xE3o conectado" })
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: "Assistentes conectados" }),
846
- /* @__PURE__ */ jsx8(Text6, { variant: "caption", as: "p", color: "secondary", children: "Em verde os que j\xE1 operam a sua loja; em vermelho os que faltam conectar." })
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: "Selecione onde voc\xEA usa a IA \u2014 o passo a passo \xE9 feito sob medida para ele." })
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: "Escolher",
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: "Copiar URL",
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(ConfigureStageStep, { nav, host: resolveHost(hosts, nav.data.selectedHost), stage }), "render")
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: "Configurar",
1031
- render: /* @__PURE__ */ __name((nav) => /* @__PURE__ */ jsx10(ConfigureStep, { nav, host: resolveHost(hosts, nav.data.selectedHost) }), "render")
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: "Conectar",
1036
- render: /* @__PURE__ */ __name((nav) => /* @__PURE__ */ jsx10(ConnectStep, { nav, host: resolveHost(hosts, nav.data.selectedHost), connectPrompt }), "render")
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: "Instalar",
1046
- render: /* @__PURE__ */ __name((nav) => /* @__PURE__ */ jsx10(InstallStep, { nav, host: resolveHost(hosts, nav.data.selectedHost), connectPrompt }), "render")
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: "Confirmar",
1057
- render: /* @__PURE__ */ __name((nav) => /* @__PURE__ */ jsx10(ConfirmStep, { nav, connections, hosts, onRetest }), "render")
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: "Conecte assistentes de IA \xE0 sua loja",
1094
- startLabel: "Ver como conectar",
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: "Conectar IA",
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
- platformName,
1129
- hosts = aiHostGuides(platformName),
1130
- capabilities = AI_CAPABILITIES,
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