@iann29/rastro 0.10.9 → 0.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (180) hide show
  1. package/README.md +8 -0
  2. package/agent/integration.md +45 -0
  3. package/agent/manifest.json +4 -4
  4. package/dist/client/federation.d.ts +82 -9
  5. package/dist/client/federation.d.ts.map +1 -1
  6. package/dist/client/federation.js +40 -2
  7. package/dist/client/federation.js.map +1 -1
  8. package/dist/client/index.d.ts +465 -8
  9. package/dist/client/index.d.ts.map +1 -1
  10. package/dist/client/index.js +259 -7
  11. package/dist/client/index.js.map +1 -1
  12. package/dist/component/_generated/api.d.ts +10 -0
  13. package/dist/component/_generated/api.d.ts.map +1 -1
  14. package/dist/component/_generated/api.js.map +1 -1
  15. package/dist/component/_generated/component.d.ts +274 -21
  16. package/dist/component/_generated/component.d.ts.map +1 -1
  17. package/dist/component/_generated/server.d.ts +2 -0
  18. package/dist/component/_generated/server.d.ts.map +1 -1
  19. package/dist/component/_generated/server.js.map +1 -1
  20. package/dist/component/constants.d.ts +31 -0
  21. package/dist/component/constants.d.ts.map +1 -1
  22. package/dist/component/constants.js +31 -0
  23. package/dist/component/constants.js.map +1 -1
  24. package/dist/component/convex.config.d.ts +2 -0
  25. package/dist/component/convex.config.js +7 -0
  26. package/dist/component/convex.config.js.map +1 -1
  27. package/dist/component/errors.d.ts +1 -1
  28. package/dist/component/errors.d.ts.map +1 -1
  29. package/dist/component/errors.js.map +1 -1
  30. package/dist/component/http.d.ts.map +1 -1
  31. package/dist/component/http.js +64 -0
  32. package/dist/component/http.js.map +1 -1
  33. package/dist/component/leadAdsValidators.d.ts +1106 -0
  34. package/dist/component/leadAdsValidators.d.ts.map +1 -0
  35. package/dist/component/leadAdsValidators.js +311 -0
  36. package/dist/component/leadAdsValidators.js.map +1 -0
  37. package/dist/component/leadFormRules.d.ts +60 -0
  38. package/dist/component/leadFormRules.d.ts.map +1 -0
  39. package/dist/component/leadFormRules.js +140 -0
  40. package/dist/component/leadFormRules.js.map +1 -0
  41. package/dist/component/leadFormStore.d.ts +16 -0
  42. package/dist/component/leadFormStore.d.ts.map +1 -0
  43. package/dist/component/leadFormStore.js +92 -0
  44. package/dist/component/leadFormStore.js.map +1 -0
  45. package/dist/component/leadgenToken.d.ts +56 -0
  46. package/dist/component/leadgenToken.d.ts.map +1 -0
  47. package/dist/component/leadgenToken.js +262 -0
  48. package/dist/component/leadgenToken.js.map +1 -0
  49. package/dist/component/leads.d.ts +76 -7
  50. package/dist/component/leads.d.ts.map +1 -1
  51. package/dist/component/leads.js +112 -78
  52. package/dist/component/leads.js.map +1 -1
  53. package/dist/component/meta.d.ts.map +1 -1
  54. package/dist/component/meta.js +21 -1
  55. package/dist/component/meta.js.map +1 -1
  56. package/dist/component/metaFake.d.ts +44 -0
  57. package/dist/component/metaFake.d.ts.map +1 -1
  58. package/dist/component/metaFake.js +400 -1
  59. package/dist/component/metaFake.js.map +1 -1
  60. package/dist/component/metaGraph.d.ts +91 -0
  61. package/dist/component/metaGraph.d.ts.map +1 -1
  62. package/dist/component/metaGraph.js +217 -0
  63. package/dist/component/metaGraph.js.map +1 -1
  64. package/dist/component/metaLeads.d.ts +683 -0
  65. package/dist/component/metaLeads.d.ts.map +1 -0
  66. package/dist/component/metaLeads.js +2639 -0
  67. package/dist/component/metaLeads.js.map +1 -0
  68. package/dist/component/schema.d.ts +420 -5
  69. package/dist/component/schema.d.ts.map +1 -1
  70. package/dist/component/schema.js +176 -1
  71. package/dist/component/schema.js.map +1 -1
  72. package/dist/component/validators.d.ts +235 -11
  73. package/dist/component/validators.d.ts.map +1 -1
  74. package/dist/component/validators.js +14 -1
  75. package/dist/component/validators.js.map +1 -1
  76. package/dist/tracker/generated.d.ts +5 -5
  77. package/dist/tracker/generated.d.ts.map +1 -1
  78. package/dist/tracker/generated.js +5 -5
  79. package/dist/tracker/generated.js.map +1 -1
  80. package/dist/ui/campaigns/CampaignsView.d.ts +5 -1
  81. package/dist/ui/campaigns/CampaignsView.d.ts.map +1 -1
  82. package/dist/ui/campaigns/CampaignsView.js.map +1 -1
  83. package/dist/ui/campaigns/Drawer.d.ts.map +1 -1
  84. package/dist/ui/campaigns/Drawer.js +8 -26
  85. package/dist/ui/campaigns/Drawer.js.map +1 -1
  86. package/dist/ui/campaigns/labels.d.ts +29 -1
  87. package/dist/ui/campaigns/labels.d.ts.map +1 -1
  88. package/dist/ui/campaigns/labels.js +77 -2
  89. package/dist/ui/campaigns/labels.js.map +1 -1
  90. package/dist/ui/campaigns/model.js +2 -2
  91. package/dist/ui/campaigns/model.js.map +1 -1
  92. package/dist/ui/forms/FirstContact.d.ts +19 -0
  93. package/dist/ui/forms/FirstContact.d.ts.map +1 -0
  94. package/dist/ui/forms/FirstContact.js +81 -0
  95. package/dist/ui/forms/FirstContact.js.map +1 -0
  96. package/dist/ui/forms/FormLead.d.ts +28 -0
  97. package/dist/ui/forms/FormLead.d.ts.map +1 -0
  98. package/dist/ui/forms/FormLead.js +199 -0
  99. package/dist/ui/forms/FormLead.js.map +1 -0
  100. package/dist/ui/forms/FormRulesDrawer.d.ts +49 -0
  101. package/dist/ui/forms/FormRulesDrawer.d.ts.map +1 -0
  102. package/dist/ui/forms/FormRulesDrawer.js +149 -0
  103. package/dist/ui/forms/FormRulesDrawer.js.map +1 -0
  104. package/dist/ui/forms/FormsView.d.ts +10 -0
  105. package/dist/ui/forms/FormsView.d.ts.map +1 -0
  106. package/dist/ui/forms/FormsView.js +227 -0
  107. package/dist/ui/forms/FormsView.js.map +1 -0
  108. package/dist/ui/forms/Icons.d.ts +46 -0
  109. package/dist/ui/forms/Icons.d.ts.map +1 -0
  110. package/dist/ui/forms/Icons.js +45 -0
  111. package/dist/ui/forms/Icons.js.map +1 -0
  112. package/dist/ui/forms/RuleRow.d.ts +37 -0
  113. package/dist/ui/forms/RuleRow.d.ts.map +1 -0
  114. package/dist/ui/forms/RuleRow.js +80 -0
  115. package/dist/ui/forms/RuleRow.js.map +1 -0
  116. package/dist/ui/forms/WhatsAppButtonGuide.d.ts +33 -0
  117. package/dist/ui/forms/WhatsAppButtonGuide.d.ts.map +1 -0
  118. package/dist/ui/forms/WhatsAppButtonGuide.js +90 -0
  119. package/dist/ui/forms/WhatsAppButtonGuide.js.map +1 -0
  120. package/dist/ui/forms/index.d.ts +11 -0
  121. package/dist/ui/forms/index.d.ts.map +1 -0
  122. package/dist/ui/forms/index.js +7 -0
  123. package/dist/ui/forms/index.js.map +1 -0
  124. package/dist/ui/forms/journey.d.ts +19 -0
  125. package/dist/ui/forms/journey.d.ts.map +1 -0
  126. package/dist/ui/forms/journey.js +54 -0
  127. package/dist/ui/forms/journey.js.map +1 -0
  128. package/dist/ui/forms/model.d.ts +243 -0
  129. package/dist/ui/forms/model.d.ts.map +1 -0
  130. package/dist/ui/forms/model.js +564 -0
  131. package/dist/ui/forms/model.js.map +1 -0
  132. package/dist/ui/forms/sample.d.ts +36 -0
  133. package/dist/ui/forms/sample.d.ts.map +1 -0
  134. package/dist/ui/forms/sample.js +448 -0
  135. package/dist/ui/forms/sample.js.map +1 -0
  136. package/dist/ui/forms/types.d.ts +472 -0
  137. package/dist/ui/forms/types.d.ts.map +1 -0
  138. package/dist/ui/forms/types.js +2 -0
  139. package/dist/ui/forms/types.js.map +1 -0
  140. package/dist/ui/index.d.ts +2 -0
  141. package/dist/ui/index.d.ts.map +1 -1
  142. package/dist/ui/index.js +4 -0
  143. package/dist/ui/index.js.map +1 -1
  144. package/dist/ui/integrations/Overlay.d.ts +3 -1
  145. package/dist/ui/integrations/Overlay.d.ts.map +1 -1
  146. package/dist/ui/integrations/Overlay.js +2 -2
  147. package/dist/ui/integrations/Overlay.js.map +1 -1
  148. package/dist/ui/portfolio/PortfolioView.d.ts +4 -1
  149. package/dist/ui/portfolio/PortfolioView.d.ts.map +1 -1
  150. package/dist/ui/portfolio/PortfolioView.js.map +1 -1
  151. package/dist/ui/sample.d.ts +3 -1
  152. package/dist/ui/sample.d.ts.map +1 -1
  153. package/dist/ui/sample.js +2 -0
  154. package/dist/ui/sample.js.map +1 -1
  155. package/dist/ui/seed.d.ts +1 -1
  156. package/dist/ui/ui.css +2305 -0
  157. package/docs/federation.md +19 -0
  158. package/docs/meta-ads.md +723 -7
  159. package/docs/upgrading.md +70 -0
  160. package/llms.txt +1 -0
  161. package/package.json +1 -1
  162. package/src/component/_generated/api.ts +10 -0
  163. package/src/component/_generated/component.ts +290 -20
  164. package/src/component/_generated/server.ts +2 -0
  165. package/src/component/constants.ts +33 -0
  166. package/src/component/convex.config.ts +7 -0
  167. package/src/component/errors.ts +3 -1
  168. package/src/component/http.ts +75 -0
  169. package/src/component/leadAdsValidators.ts +376 -0
  170. package/src/component/leadFormRules.ts +202 -0
  171. package/src/component/leadFormStore.ts +129 -0
  172. package/src/component/leadgenToken.ts +348 -0
  173. package/src/component/leads.ts +136 -84
  174. package/src/component/meta.ts +21 -1
  175. package/src/component/metaFake.ts +485 -1
  176. package/src/component/metaGraph.ts +327 -0
  177. package/src/component/metaLeads.ts +3111 -0
  178. package/src/component/schema.ts +197 -1
  179. package/src/component/validators.ts +17 -1
  180. package/src/tracker/generated.ts +5 -5
@@ -0,0 +1,19 @@
1
+ import { type ButtonState } from "./model.js";
2
+ import type { FirstContact as FirstContactValue } from "./types.js";
3
+ /**
4
+ * "Como o primeiro contato acontece": the lead writes first (recommended),
5
+ * one click by a person (always on), or the automatic send behind its risk
6
+ * checkbox and brakes. Off by default; nothing here sends a message itself.
7
+ */
8
+ export declare function FirstContactSection({ value, button, editable, senderLabel, businessHoursLabel, onChange, onConfirmButton, onOpenGuide, }: {
9
+ value: FirstContactValue;
10
+ button: ButtonState;
11
+ editable: boolean;
12
+ senderLabel?: string;
13
+ businessHoursLabel?: string;
14
+ onChange: (value: FirstContactValue) => void;
15
+ /** "Já liguei" when Meta does not say whether the button is there. */
16
+ onConfirmButton: (confirmed: boolean) => void;
17
+ onOpenGuide?: () => void;
18
+ }): import("react").JSX.Element;
19
+ //# sourceMappingURL=FirstContact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FirstContact.d.ts","sourceRoot":"","sources":["../../../src/ui/forms/FirstContact.tsx"],"names":[],"mappings":"AAEA,OAAO,EAQL,KAAK,WAAW,EACjB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,YAAY,IAAI,iBAAiB,EAAE,MAAM,YAAY,CAAC;AA8DpE;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,KAAK,EACL,MAAM,EACN,QAAQ,EACR,WAAW,EACX,kBAAkB,EAClB,QAAQ,EACR,eAAe,EACf,WAAW,GACZ,EAAE;IACD,KAAK,EAAE,iBAAiB,CAAC;IACzB,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC7C,sEAAsE;IACtE,eAAe,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9C,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;CAC1B,+BAsXA"}
@@ -0,0 +1,81 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useId, useRef, useState } from "react";
3
+ import { Glyph, Icon } from "./Icons.js";
4
+ import { DEFAULT_BRAKES, FIRST_NAME_VARIABLE, MAX_FIRST_CONTACT_TEXT, PER_HOUR_CHOICES, RANDOM_INTERVAL_LABEL, templateParts, WAIT_CHOICES, } from "./model.js";
5
+ /** "Recepção · (11) 94567-1200" → "o número da Recepção". */
6
+ function numberPhrase(senderLabel) {
7
+ const name = senderLabel?.split(" · ")[0]?.trim();
8
+ return name ? `o número da ${name}` : "o número da empresa";
9
+ }
10
+ /** The suggested text with the first name drawn as a chip. */
11
+ function TemplatePreview({ text }) {
12
+ return (_jsx(_Fragment, { children: templateParts(text).map((part, index) => part.kind === "first_name" ? (_jsx("span", { className: "rastro-forms__var", children: part.text }, index)) : (_jsx("span", { children: part.text }, index))) }));
13
+ }
14
+ function ButtonPill({ state, editable, onConfirm, }) {
15
+ if (state === "on")
16
+ return (_jsxs("span", { className: "rastro-forms__pill", "data-tone": "ok", children: [_jsx(Icon, { name: "check", size: 12, stroke: 2.4 }), "Ligado"] }));
17
+ if (state === "off")
18
+ return (_jsxs("span", { className: "rastro-forms__pill", "data-tone": "warn", children: [_jsx("span", { "data-wide": "", children: "Falta ligar na Meta" }), _jsx("span", { "data-narrow": "", children: "Falta ligar" })] }));
19
+ // Meta does not say: the company says it (contract §12.2, "Já liguei").
20
+ return (_jsxs("label", { className: "rastro-forms__confirm", children: [_jsx("input", { type: "checkbox", checked: state === "confirmed", disabled: !editable, onChange: (event) => onConfirm(event.target.checked) }), "J\u00E1 liguei"] }));
21
+ }
22
+ /**
23
+ * "Como o primeiro contato acontece": the lead writes first (recommended),
24
+ * one click by a person (always on), or the automatic send behind its risk
25
+ * checkbox and brakes. Off by default; nothing here sends a message itself.
26
+ */
27
+ export function FirstContactSection({ value, button, editable, senderLabel, businessHoursLabel, onChange, onConfirmButton, onOpenGuide, }) {
28
+ const id = useId();
29
+ const automatic = value.mode === "automatic";
30
+ const [open, setOpen] = useState(automatic);
31
+ const [acknowledged, setAcknowledged] = useState(automatic);
32
+ const [editing, setEditing] = useState(false);
33
+ // With the automatic send open, the one-click card folds (D7).
34
+ const [oneClickOpen, setOneClickOpen] = useState(!automatic);
35
+ const textarea = useRef(null);
36
+ const text = value.text ?? "";
37
+ const brakes = { ...DEFAULT_BRAKES, ...value.brakes };
38
+ const buttonOn = button === "on" || button === "confirmed";
39
+ const fallbackMode = buttonOn ? "lead_starts" : "one_click";
40
+ const setBrakes = (next) => onChange({ ...value, brakes: { ...brakes, ...next } });
41
+ const insertVariable = () => {
42
+ const element = textarea.current;
43
+ const at = element?.selectionStart ?? text.length;
44
+ const end = element?.selectionEnd ?? at;
45
+ const next = `${text.slice(0, at)}${FIRST_NAME_VARIABLE}${text.slice(end)}`;
46
+ onChange({ ...value, text: next.slice(0, MAX_FIRST_CONTACT_TEXT) });
47
+ requestAnimationFrame(() => {
48
+ element?.focus();
49
+ const caret = at + FIRST_NAME_VARIABLE.length;
50
+ element?.setSelectionRange(caret, caret);
51
+ });
52
+ };
53
+ const collapseOneClick = open;
54
+ const phrase = numberPhrase(senderLabel);
55
+ return (_jsxs("div", { className: "rastro-forms__contact", children: [_jsxs("div", { className: "rastro-forms__fc", "data-tone": "rec", children: [_jsxs("div", { className: "rastro-forms__fc-h", children: [_jsx("span", { className: "rastro-forms__fc-ico", "aria-hidden": "true", children: _jsx(Icon, { name: "hand", size: 17 }) }), _jsxs("div", { className: "rastro-forms__grow", children: [_jsxs("p", { className: "rastro-forms__fc-title", children: [_jsx("span", { "data-wide": "", children: "O lead come\u00E7a a conversa" }), _jsx("span", { "data-narrow": "", children: "O lead come\u00E7a" }), _jsx("span", { className: "rastro-forms__badge", "data-tone": "rec", children: "Recomendado" })] }), _jsx("p", { className: "rastro-forms__fc-desc", "data-wide": "", children: "Bot\u00E3o \u201CFalar no WhatsApp\u201D na tela final do formul\u00E1rio. Sem risco." })] }), _jsx(ButtonPill, { state: button, editable: editable, onConfirm: onConfirmButton })] }), button !== "on" && (_jsxs("div", { className: "rastro-forms__fc-f", "data-wide": "", children: [onOpenGuide && (_jsxs("button", { type: "button", className: "rastro-forms__lnk", onClick: onOpenGuide, children: ["Ver como ligar ", _jsx(Icon, { name: "arrow", size: 13 })] })), _jsx("span", { children: "A conversa que chega se liga ao card pelo telefone." })] }))] }), _jsxs("div", { className: "rastro-forms__fc", "data-collapsed": collapseOneClick && !oneClickOpen ? "" : undefined, children: [_jsxs("div", { className: "rastro-forms__fc-h", children: [_jsx("span", { className: "rastro-forms__fc-ico", "aria-hidden": "true", children: _jsx(Glyph, { brand: "whatsapp", size: 16, color: "currentColor" }) }), _jsxs("div", { className: "rastro-forms__grow", children: [_jsxs("p", { className: "rastro-forms__fc-title", children: [_jsx("span", { "data-wide": "", children: "Chamar no WhatsApp com um clique" }), _jsx("span", { "data-narrow": "", children: "Chamar com um clique" }), _jsx("span", { className: "rastro-forms__badge", "data-tone": "on", children: "Sempre ativo" })] }), !(collapseOneClick && !oneClickOpen) && (_jsx("p", { className: "rastro-forms__fc-desc", "data-wide": "", children: "No card do lead. Uma pessoa envia, um lead por vez." }))] }), collapseOneClick && (_jsx("button", { type: "button", className: "rastro-forms__icon-btn", "aria-expanded": oneClickOpen, "aria-label": oneClickOpen
56
+ ? "Recolher o texto sugerido"
57
+ : "Ver o texto sugerido", onClick: () => setOneClickOpen((current) => !current), children: _jsx(Icon, { name: oneClickOpen ? "chevU" : "chevD", size: 16 }) }))] }), !(collapseOneClick && !oneClickOpen) && (_jsx("div", { className: "rastro-forms__fc-text", "data-wide": "", children: editing ? (_jsxs(_Fragment, { children: [_jsx("textarea", { ref: textarea, id: `${id}-text`, className: "rastro-forms__ta", "aria-label": "Texto sugerido para o primeiro contato", value: text, rows: 3, maxLength: MAX_FIRST_CONTACT_TEXT, onChange: (event) => onChange({ ...value, text: event.target.value }) }), _jsxs("div", { className: "rastro-forms__ta-bar", children: [_jsxs("button", { type: "button", className: "rastro-forms__lnk", onClick: insertVariable, children: [_jsx(Icon, { name: "plus", size: 13 }), " primeiro nome"] }), _jsxs("span", { className: "rastro-forms__tip rastro-num", children: [text.length, "/", MAX_FIRST_CONTACT_TEXT] }), _jsx("button", { type: "button", className: "rastro-forms__btn", "data-variant": "outline", "data-size": "xs", onClick: () => setEditing(false), children: "Pronto" })] })] })) : (_jsx("button", { type: "button", className: "rastro-forms__ta", "data-preview": "", disabled: !editable, "aria-label": `Texto sugerido: ${text}. Editar`, onClick: () => setEditing(true), children: _jsx(TemplatePreview, { text: text }) })) }))] }), _jsxs("div", { className: "rastro-forms__fc", "data-tone": open ? "risk" : "off", "data-on": automatic ? "" : undefined, children: [_jsxs("div", { className: "rastro-forms__fc-h", children: [_jsx("span", { className: "rastro-forms__fc-ico", "aria-hidden": "true", children: _jsx(Icon, { name: "bolt", size: 16 }) }), _jsxs("div", { className: "rastro-forms__grow", children: [_jsxs("p", { className: "rastro-forms__fc-title", children: ["Envio autom\u00E1tico", _jsx("span", { className: "rastro-forms__badge", "data-tone": "adv", children: "Avan\u00E7ado" }), open && (_jsx("span", { className: "rastro-forms__badge", "data-tone": "risk", children: "Risco" }))] }), open ? (_jsx("p", { className: "rastro-forms__fc-desc", children: "Manda o texto sozinho para o lead que n\u00E3o escreveu." })) : (_jsxs("p", { className: "rastro-forms__fc-desc", "data-wide": "", children: ["Arrisca restringir o n\u00FAmero.", " ", _jsxs("button", { type: "button", className: "rastro-forms__lnk", "data-tone": "muted", "aria-expanded": false, onClick: () => {
58
+ setOpen(true);
59
+ setOneClickOpen(false);
60
+ }, children: ["Ver freios e riscos ", _jsx(Icon, { name: "chevD", size: 13 })] })] }))] }), _jsx("button", { type: "button", role: "switch", className: "rastro-forms__switch", "aria-checked": automatic, "aria-label": "Envio autom\u00E1tico", disabled: !editable, onClick: () => {
61
+ if (automatic) {
62
+ onChange({ ...value, mode: fallbackMode });
63
+ setAcknowledged(false);
64
+ }
65
+ else {
66
+ setOpen(true);
67
+ setOneClickOpen(false);
68
+ }
69
+ } })] }), open && (_jsxs("div", { className: "rastro-forms__auto", children: [_jsxs("div", { className: "rastro-forms__risk", role: "note", children: [_jsx(Icon, { name: "alert", size: 18 }), _jsxs("p", { children: [_jsx("b", { children: "O n\u00FAmero da empresa pode ser restringido ou banido." }), " O WhatsApp pune mensagem em s\u00E9rie para quem nunca escreveu, ainda mais fora da API oficial."] })] }), _jsx("p", { className: "rastro-forms__brakes-title", children: "Freios" }), _jsxs("div", { className: "rastro-forms__brakes", children: [_jsxs("label", { className: "rastro-forms__field", children: [_jsx("span", { className: "rastro-forms__lab", children: "Esperar o lead escrever" }), _jsxs("span", { className: "rastro-forms__field-box", children: [_jsx(Icon, { name: "clock", size: 14 }), _jsx("select", { value: brakes.waitMinutes, disabled: !editable, onChange: (event) => setBrakes({ waitMinutes: Number(event.target.value) }), children: WAIT_CHOICES.map((minutes) => (_jsx("option", { value: minutes, children: minutes < 60
70
+ ? `${minutes} min antes de enviar`
71
+ : `${minutes / 60} h antes de enviar` }, minutes))) })] })] }), _jsxs("label", { className: "rastro-forms__field", children: [_jsx("span", { className: "rastro-forms__lab", children: "M\u00E1ximo por hora" }), _jsxs("span", { className: "rastro-forms__field-box", children: [_jsx(Icon, { name: "gauge", size: 14 }), _jsx("select", { value: brakes.maxPerHour, disabled: !editable, onChange: (event) => setBrakes({ maxPerHour: Number(event.target.value) }), children: PER_HOUR_CHOICES.map((count) => (_jsxs("option", { value: count, children: [count, " mensagens"] }, count))) })] })] }), _jsxs("label", { className: "rastro-forms__field", children: [_jsx("span", { className: "rastro-forms__lab", children: "S\u00F3 em hor\u00E1rio comercial" }), _jsxs("span", { className: "rastro-forms__field-box", children: [_jsx(Icon, { name: "cal", size: 14 }), _jsxs("select", { value: brakes.businessHoursOnly ? "yes" : "no", disabled: !editable, onChange: (event) => setBrakes({
72
+ businessHoursOnly: event.target.value === "yes",
73
+ }), children: [_jsx("option", { value: "yes", children: businessHoursLabel ?? "Horário comercial da empresa" }), _jsx("option", { value: "no", children: "Qualquer hor\u00E1rio" })] })] })] }), _jsxs("div", { className: "rastro-forms__field", children: [_jsx("span", { className: "rastro-forms__lab", children: "Intervalo aleat\u00F3rio" }), _jsxs("span", { className: "rastro-forms__field-box", "data-static": "", children: [_jsx(Icon, { name: "shuffle", size: 14 }), RANDOM_INTERVAL_LABEL] })] })] }), _jsxs("p", { className: "rastro-forms__tip", children: [_jsx(Icon, { name: "info", size: 13 }), "Descartados nunca recebem. Passou do limite, o lead espera o pr\u00F3ximo hor\u00E1rio."] }), !automatic && (_jsxs("label", { className: "rastro-forms__ack", children: [_jsx("input", { type: "checkbox", checked: acknowledged, disabled: !editable, onChange: (event) => setAcknowledged(event.target.checked) }), _jsxs("span", { children: ["Entendo que ", phrase, " pode ser restringido e quero ligar mesmo assim."] })] })), _jsx("div", { className: "rastro-forms__auto-actions", children: automatic ? (_jsx("button", { type: "button", className: "rastro-forms__btn", "data-variant": "outline", "data-size": "sm", disabled: !editable, onClick: () => {
74
+ onChange({ ...value, mode: fallbackMode });
75
+ setAcknowledged(false);
76
+ }, children: "Desligar envio autom\u00E1tico" })) : (_jsxs(_Fragment, { children: [_jsx("button", { type: "button", className: "rastro-forms__btn", "data-size": "sm", disabled: !editable || !acknowledged, onClick: () => onChange({ ...value, mode: "automatic", brakes }), children: "Ligar envio autom\u00E1tico" }), _jsx("button", { type: "button", className: "rastro-forms__btn", "data-variant": "outline", "data-size": "sm", onClick: () => {
77
+ setOpen(false);
78
+ setAcknowledged(false);
79
+ }, children: "Manter desligado" })] })) })] }))] })] }));
80
+ }
81
+ //# sourceMappingURL=FirstContact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FirstContact.js","sourceRoot":"","sources":["../../../src/ui/forms/FirstContact.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { FormLead, FormLeadStep } from "./types.js";
2
+ /**
3
+ * The origin chip on a host's card: "Formulário · Avaliação gratuita" in Meta
4
+ * blue, or, with `variant="wrote"`, "veio do formulário" on the conversation
5
+ * the lead opened through the end screen's button.
6
+ */
7
+ export declare function FormLeadBadge({ formName, variant, size, }: {
8
+ formName?: string;
9
+ variant?: "form" | "wrote";
10
+ size?: "sm" | "md";
11
+ }): import("react").JSX.Element;
12
+ /** The path a lead followed, from what the lead holds, when the host gave none. */
13
+ export declare function defaultFormLeadPath(lead: FormLead): FormLeadStep[];
14
+ /**
15
+ * A form lead's answers, origin and path, for the host's card and contact
16
+ * panel (D5, D6, D9):
17
+ * - `card` (default): "Respostas do formulário" with the origin under the
18
+ * answers, then "Caminho que o lead seguiu";
19
+ * - `panel`: one highlighted box whose subtitle carries the origin and whose
20
+ * foot names the rule that decided, then the path (the Chat's side panel);
21
+ * - `compact`: the phone's "Respostas" and "Caminho", short words.
22
+ */
23
+ export declare function FormLeadAnswers({ lead, now, layout, }: {
24
+ lead: FormLead;
25
+ now: number;
26
+ layout?: "card" | "panel" | "compact";
27
+ }): import("react").JSX.Element;
28
+ //# sourceMappingURL=FormLead.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormLead.d.ts","sourceRoot":"","sources":["../../../src/ui/forms/FormLead.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,QAAQ,EAGR,YAAY,EACb,MAAM,YAAY,CAAC;AA0CpB;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,OAAgB,EAChB,IAAW,GACZ,EAAE;IACD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACpB,+BAwBA;AAED,mFAAmF;AACnF,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,QAAQ,GAAG,YAAY,EAAE,CAyClE;AAiND;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,EAC9B,IAAI,EACJ,GAAG,EACH,MAAe,GAChB,EAAE;IACD,IAAI,EAAE,QAAQ,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;CACvC,+BA4DA"}
@@ -0,0 +1,199 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { MetaMark } from "../integrations/Icons.js";
3
+ import { Glyph, Icon } from "./Icons.js";
4
+ import { clockLabel, dayLabel, waitLabel } from "./model.js";
5
+ /**
6
+ * Meta's leadgen `platform` comes short (`fb`, `ig`, `msg`, `an`); hosts may
7
+ * also hand the long names. Both read the same.
8
+ */
9
+ const PLATFORM_KEYS = {
10
+ ig: "instagram",
11
+ fb: "facebook",
12
+ msg: "messenger",
13
+ an: "audience_network",
14
+ };
15
+ const PLATFORMS = {
16
+ instagram: "Instagram",
17
+ facebook: "Facebook",
18
+ messenger: "Messenger",
19
+ audience_network: "Audience Network",
20
+ };
21
+ /** `ig` → `instagram`; unknown keys stay as they came, lowercased. */
22
+ const platformKey = (platform) => {
23
+ if (!platform)
24
+ return null;
25
+ const key = platform.trim().toLowerCase();
26
+ return PLATFORM_KEYS[key] ?? key;
27
+ };
28
+ const platformName = (platform) => {
29
+ const key = platformKey(platform);
30
+ return key ? (PLATFORMS[key] ?? platform ?? null) : null;
31
+ };
32
+ function PlatformGlyph({ platform }) {
33
+ const key = platformKey(platform);
34
+ if (key === "instagram" || key === "facebook")
35
+ return _jsx(Glyph, { brand: key, size: 12 });
36
+ return null;
37
+ }
38
+ const ruleText = (rule) => `${rule.question} = ${rule.answers.join(" ou ")}`;
39
+ /**
40
+ * The origin chip on a host's card: "Formulário · Avaliação gratuita" in Meta
41
+ * blue, or, with `variant="wrote"`, "veio do formulário" on the conversation
42
+ * the lead opened through the end screen's button.
43
+ */
44
+ export function FormLeadBadge({ formName, variant = "form", size = "sm", }) {
45
+ if (variant === "wrote")
46
+ return (_jsxs("span", { className: "rastro-ui rastro-forms__seal", "data-variant": "wrote", "data-size": size, children: [_jsx(Icon, { name: "chatin", size: size === "md" ? 13 : 12 }), _jsx("span", { className: "rastro-forms__seal-text", children: "veio do formul\u00E1rio" })] }));
47
+ return (_jsxs("span", { className: "rastro-ui rastro-forms__seal", "data-size": size, title: formName ? `Formulário · ${formName}` : "Formulário", children: [_jsx(MetaMark, { size: size === "md" ? 13 : 11 }), _jsxs("span", { className: "rastro-forms__seal-text", children: ["Formul\u00E1rio", formName ? ` · ${formName}` : ""] })] }));
48
+ }
49
+ /** The path a lead followed, from what the lead holds, when the host gave none. */
50
+ export function defaultFormLeadPath(lead) {
51
+ const steps = [];
52
+ if (lead.origin?.adName)
53
+ steps.push({
54
+ kind: "ad",
55
+ at: null,
56
+ adName: lead.origin.adName,
57
+ platform: lead.origin.platform ?? null,
58
+ });
59
+ steps.push({
60
+ kind: "form",
61
+ at: lead.receivedAt,
62
+ formName: lead.formName,
63
+ platform: lead.origin?.platform ?? null,
64
+ });
65
+ const decision = lead.decision;
66
+ if (decision?.kind === "discard")
67
+ steps.push({
68
+ kind: "discard",
69
+ at: lead.receivedAt,
70
+ reason: decision.reason,
71
+ rule: decision.rule ?? null,
72
+ });
73
+ else if (decision?.kind === "column" && decision.rule)
74
+ steps.push({
75
+ kind: "rule",
76
+ at: lead.receivedAt,
77
+ rule: decision.rule,
78
+ column: decision.column,
79
+ });
80
+ else if (decision?.kind === "column")
81
+ // A rule decided, but the lead does not say which (the journey keeps
82
+ // its index, not the rule): never "no rule matched".
83
+ steps.push({
84
+ kind: "note",
85
+ at: lead.receivedAt,
86
+ text: `Uma regra levou para ${decision.column}`,
87
+ });
88
+ else if (decision)
89
+ steps.push({ kind: "entry", at: lead.receivedAt, column: decision.column });
90
+ return steps;
91
+ }
92
+ function stepTone(step) {
93
+ switch (step.kind) {
94
+ case "ad":
95
+ case "form":
96
+ return "meta";
97
+ case "rule":
98
+ return "rule";
99
+ case "discard":
100
+ return "discard";
101
+ case "button":
102
+ return step.wrote ? "wrote" : undefined;
103
+ case "waiting":
104
+ return "waiting";
105
+ default:
106
+ return undefined;
107
+ }
108
+ }
109
+ function StepText({ step, now, compact, }) {
110
+ switch (step.kind) {
111
+ case "ad": {
112
+ const app = platformName(step.platform);
113
+ return (_jsxs(_Fragment, { children: ["Viu o an\u00FAncio ", step.adName ? _jsx("b", { children: step.adName }) : null, app ? ` no ${app}` : ""] }));
114
+ }
115
+ case "form": {
116
+ if (compact) {
117
+ const app = platformName(step.platform);
118
+ return _jsxs(_Fragment, { children: ["Enviou o formul\u00E1rio", app ? ` pelo ${app}` : ""] });
119
+ }
120
+ return (_jsxs(_Fragment, { children: ["Enviou o formul\u00E1rio ", _jsx("b", { children: step.formName })] }));
121
+ }
122
+ case "rule":
123
+ return (_jsxs(_Fragment, { children: ["Regra ", _jsx("b", { children: ruleText(step.rule) }), " \u2192 ", step.column] }));
124
+ case "entry":
125
+ return compact ? (_jsxs(_Fragment, { children: ["Nenhuma regra: ", _jsx("b", { children: step.column })] })) : (_jsxs(_Fragment, { children: ["Nenhuma regra bateu: entrou em ", _jsx("b", { children: step.column })] }));
126
+ case "discard":
127
+ return (_jsxs(_Fragment, { children: [step.rule ? (_jsxs(_Fragment, { children: ["Regra ", _jsx("b", { children: ruleText(step.rule) }), " \u2192 descartado:", " "] })) : ("Descartado: "), step.reason] }));
128
+ case "button":
129
+ return step.wrote ? (_jsxs(_Fragment, { children: ["Tocou em ", _jsx("b", { children: "Falar no WhatsApp" }), " e escreveu primeiro"] })) : (_jsx(_Fragment, { children: "N\u00E3o tocou em Falar no WhatsApp" }));
130
+ case "waiting":
131
+ return (_jsxs("b", { children: [compact ? "Esperando" : "Esperando o primeiro contato", " ", waitLabel(step.since, now)] }));
132
+ case "note":
133
+ return _jsx(_Fragment, { children: step.text });
134
+ }
135
+ }
136
+ function stepTime(step) {
137
+ if (step.kind === "waiting")
138
+ return "agora";
139
+ return step.at === null ? "" : clockLabel(step.at);
140
+ }
141
+ /** "Caminho que o lead seguiu": the timeline, oldest first. */
142
+ function LeadPath({ steps, now, compact, }) {
143
+ return (_jsx("ol", { className: "rastro-forms__path", children: steps.map((step, index) => (_jsxs("li", { "data-tone": stepTone(step), children: [_jsx("i", { "aria-hidden": "true" }), _jsx("span", { className: "rastro-forms__path-time rastro-num", children: stepTime(step) }), _jsx(StepText, { step: step, now: now, compact: compact })] }, index))) }));
144
+ }
145
+ function DecisionLine({ decision }) {
146
+ if (decision.kind === "discard")
147
+ return (_jsxs("p", { className: "rastro-forms__ruleline", "data-tone": "discard", children: [_jsx(Icon, { name: "filter", size: 13 }), _jsxs("span", { children: [decision.rule ? `Regra: ${ruleText(decision.rule)} → ` : "", "Descartado \u00B7 ", _jsx("b", { children: decision.reason })] })] }));
148
+ return (_jsxs("p", { className: "rastro-forms__ruleline", children: [_jsx(Icon, { name: "filter", size: 13 }), _jsx("span", { children: decision.rule
149
+ ? `Regra: ${ruleText(decision.rule)} →`
150
+ : decision.kind === "column"
151
+ ? "Uma regra levou →"
152
+ : "Nenhuma regra bateu →" }), _jsx("i", { className: "rastro-forms__dot", style: decision.color ? { background: decision.color } : undefined, "aria-hidden": "true" }), _jsx("b", { children: decision.column })] }));
153
+ }
154
+ function Answers({ lead }) {
155
+ if (lead.answers.length === 0)
156
+ return (_jsx("p", { className: "rastro-forms__sub", children: "Sem respostas de escolha neste lead." }));
157
+ return (_jsx("ul", { className: "rastro-forms__qa", children: lead.answers.map((entry, index) => (_jsxs("li", { children: [_jsx("span", { children: entry.question }), _jsx("b", { children: entry.answer })] }, `${entry.question}:${index}`))) }));
158
+ }
159
+ function OriginList({ lead }) {
160
+ const origin = lead.origin;
161
+ if (!origin)
162
+ return null;
163
+ const app = platformName(origin.platform);
164
+ const rows = [];
165
+ if (app)
166
+ rows.push([
167
+ "Veio de",
168
+ _jsxs("span", { className: "rastro-forms__inline", children: [_jsx(PlatformGlyph, { platform: origin.platform }), [app, origin.placement].filter(Boolean).join(" · ")] }, "app"),
169
+ ]);
170
+ if (origin.campaignName)
171
+ rows.push(["Campanha", origin.campaignName]);
172
+ if (origin.adsetName)
173
+ rows.push(["Conjunto", origin.adsetName]);
174
+ if (origin.adName)
175
+ rows.push(["Anúncio", origin.adName]);
176
+ if (rows.length === 0)
177
+ return null;
178
+ return (_jsxs(_Fragment, { children: [_jsx("hr", { className: "rastro-forms__divider" }), _jsx("dl", { className: "rastro-forms__kv", children: rows.map(([label, value]) => (_jsxs("div", { children: [_jsx("dt", { children: label }), _jsx("dd", { children: value })] }, label))) })] }));
179
+ }
180
+ /**
181
+ * A form lead's answers, origin and path, for the host's card and contact
182
+ * panel (D5, D6, D9):
183
+ * - `card` (default): "Respostas do formulário" with the origin under the
184
+ * answers, then "Caminho que o lead seguiu";
185
+ * - `panel`: one highlighted box whose subtitle carries the origin and whose
186
+ * foot names the rule that decided, then the path (the Chat's side panel);
187
+ * - `compact`: the phone's "Respostas" and "Caminho", short words.
188
+ */
189
+ export function FormLeadAnswers({ lead, now, layout = "card", }) {
190
+ const steps = lead.path ?? defaultFormLeadPath(lead);
191
+ const compact = layout === "compact";
192
+ const app = platformName(lead.origin?.platform);
193
+ return (_jsxs("div", { className: "rastro-ui rastro-forms rastro-forms__lead", "data-layout": layout, children: [_jsxs("section", { className: "rastro-forms__box", "data-highlight": layout === "panel" ? "" : undefined, "aria-label": compact ? "Respostas" : "Respostas do formulário", children: [_jsxs("h3", { className: "rastro-forms__box-title", children: [_jsx(MetaMark, { size: compact ? 14 : 15 }), compact
194
+ ? "Respostas"
195
+ : layout === "panel"
196
+ ? `Formulário · ${lead.formName}`
197
+ : "Respostas do formulário"] }), layout === "card" && (_jsxs("p", { className: "rastro-forms__sub", children: [lead.formName, " \u00B7 ", dayLabel(lead.receivedAt, now)] })), layout === "panel" && (_jsxs("p", { className: "rastro-forms__sub rastro-forms__inline", children: [dayLabel(lead.receivedAt, now), app && (_jsxs(_Fragment, { children: [" · ", _jsx(PlatformGlyph, { platform: lead.origin?.platform }), app] })), lead.origin?.campaignName ? ` · ${lead.origin.campaignName}` : ""] })), _jsx(Answers, { lead: lead }), layout === "card" && _jsx(OriginList, { lead: lead }), layout === "panel" && lead.decision && (_jsx(DecisionLine, { decision: lead.decision }))] }), steps.length > 0 && (_jsxs("section", { className: "rastro-forms__box", "aria-label": compact ? "Caminho" : "Caminho que o lead seguiu", children: [_jsxs("h3", { className: "rastro-forms__box-title", children: [_jsx(Icon, { name: "route", size: compact ? 14 : 15 }), compact ? "Caminho" : "Caminho que o lead seguiu"] }), _jsx(LeadPath, { steps: steps, now: now, compact: compact })] }))] }));
198
+ }
199
+ //# sourceMappingURL=FormLead.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormLead.js","sourceRoot":"","sources":["../../../src/ui/forms/FormLead.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import type { FormBoard, FormReportRow, FormRules, FormRulesChoice, FormRulesDraft, FormRulesSimulation, IntegrationSite, MetaForm, MetaPage } from "./types.js";
2
+ export interface FormRulesDrawerProps {
3
+ site: IntegrationSite;
4
+ /** The Page the form is on: its name heads the drawer. */
5
+ page?: MetaPage | null;
6
+ form: MetaForm;
7
+ /**
8
+ * `formRules`: undefined while loading; null when the host could not
9
+ * answer, and then nothing can be saved (an empty draft would overwrite
10
+ * the stored rules).
11
+ */
12
+ rules: FormRules | null | undefined;
13
+ board?: FormBoard | undefined;
14
+ /** The form's 30 days (`formsReport`), for "64 leads em 30 dias". */
15
+ report?: FormReportRow | null;
16
+ /** The draft simulated (`simulateFormRules`); undefined while it runs. */
17
+ simulation?: FormRulesSimulation | null | undefined;
18
+ /** Asks for the draft's simulation; without it the section shows none. */
19
+ onSimulate?: (draft: FormRulesDraft) => void;
20
+ /** False for a reader without configure: read only. */
21
+ permitted: boolean;
22
+ busy?: boolean;
23
+ /** The last write's refusal, in pt-BR: a refused save keeps the draft. */
24
+ error?: string | null;
25
+ /** Who set these rules, when another owner did ("uze.ai"): a lock. */
26
+ lockedBy?: string | null;
27
+ /** The reader edits as the company's partner (D10's note). */
28
+ editsAsPartner?: boolean;
29
+ senderLabel?: string;
30
+ businessHoursLabel?: string;
31
+ /** "Abrir na Meta"; the Page's forms library by default. */
32
+ formUrl?: string;
33
+ /**
34
+ * Saves the draft. The drawer closes when this resolves to anything but
35
+ * false; on false (or a rejection) the draft stays open beside the error.
36
+ */
37
+ onSave: (rules: FormRulesChoice) => Promise<boolean | void> | boolean | void;
38
+ /** "Ver como ligar": the WhatsApp button guide. */
39
+ onOpenGuide?: () => void;
40
+ onClose: () => void;
41
+ }
42
+ /**
43
+ * D2/D8: one form's rules. Where the lead enters when no rule matches, the
44
+ * rules in order (first match wins) with the leads each decided this month,
45
+ * the last 30 days simulated under the draft, and how the first contact
46
+ * happens. Saving affects only the next leads.
47
+ */
48
+ export declare function FormRulesDrawer(props: FormRulesDrawerProps): import("react").JSX.Element;
49
+ //# sourceMappingURL=FormRulesDrawer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormRulesDrawer.d.ts","sourceRoot":"","sources":["../../../src/ui/forms/FormRulesDrawer.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EACV,SAAS,EACT,aAAa,EAEb,SAAS,EACT,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,eAAe,EACf,QAAQ,EACR,QAAQ,EACT,MAAM,YAAY,CAAC;AAMpB,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,eAAe,CAAC;IACtB,0DAA0D;IAC1D,IAAI,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IACvB,IAAI,EAAE,QAAQ,CAAC;IACf;;;;OAIG;IACH,KAAK,EAAE,SAAS,GAAG,IAAI,GAAG,SAAS,CAAC;IACpC,KAAK,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC9B,qEAAqE;IACrE,MAAM,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IAC9B,0EAA0E;IAC1E,UAAU,CAAC,EAAE,mBAAmB,GAAG,IAAI,GAAG,SAAS,CAAC;IACpD,0EAA0E;IAC1E,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IAC7C,uDAAuD;IACvD,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,0EAA0E;IAC1E,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,8DAA8D;IAC9D,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,4DAA4D;IAC5D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,MAAM,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,OAAO,GAAG,IAAI,CAAC;IAC7E,mDAAmD;IACnD,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AA0ED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,+BA+G1D"}