@iann29/rastro 0.9.0 → 0.10.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.
Files changed (257) hide show
  1. package/README.md +9 -1
  2. package/agent/integration.md +23 -1
  3. package/agent/manifest.json +4 -4
  4. package/dist/client/federation.d.ts +114 -9
  5. package/dist/client/federation.d.ts.map +1 -1
  6. package/dist/client/federation.js +54 -2
  7. package/dist/client/federation.js.map +1 -1
  8. package/dist/client/index.d.ts +637 -8
  9. package/dist/client/index.d.ts.map +1 -1
  10. package/dist/client/index.js +385 -9
  11. package/dist/client/index.js.map +1 -1
  12. package/dist/component/_generated/api.d.ts +14 -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 +277 -1
  16. package/dist/component/_generated/component.d.ts.map +1 -1
  17. package/dist/component/_generated/server.d.ts +4 -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 +5 -0
  21. package/dist/component/constants.d.ts.map +1 -1
  22. package/dist/component/constants.js +10 -0
  23. package/dist/component/constants.js.map +1 -1
  24. package/dist/component/convex.config.d.ts +4 -0
  25. package/dist/component/convex.config.js +9 -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/leads.d.ts +69 -3
  31. package/dist/component/leads.d.ts.map +1 -1
  32. package/dist/component/leads.js +419 -16
  33. package/dist/component/leads.js.map +1 -1
  34. package/dist/component/meta.d.ts +352 -0
  35. package/dist/component/meta.d.ts.map +1 -0
  36. package/dist/component/meta.js +1239 -0
  37. package/dist/component/meta.js.map +1 -0
  38. package/dist/component/metaCapi.d.ts +162 -0
  39. package/dist/component/metaCapi.d.ts.map +1 -0
  40. package/dist/component/metaCapi.js +754 -0
  41. package/dist/component/metaCapi.js.map +1 -0
  42. package/dist/component/metaFake.d.ts +5 -0
  43. package/dist/component/metaFake.d.ts.map +1 -0
  44. package/dist/component/metaFake.js +225 -0
  45. package/dist/component/metaFake.js.map +1 -0
  46. package/dist/component/metaGraph.d.ts +165 -0
  47. package/dist/component/metaGraph.d.ts.map +1 -0
  48. package/dist/component/metaGraph.js +507 -0
  49. package/dist/component/metaGraph.js.map +1 -0
  50. package/dist/component/metaSync.d.ts +186 -0
  51. package/dist/component/metaSync.d.ts.map +1 -0
  52. package/dist/component/metaSync.js +961 -0
  53. package/dist/component/metaSync.js.map +1 -0
  54. package/dist/component/pipeline.d.ts +98 -0
  55. package/dist/component/pipeline.d.ts.map +1 -0
  56. package/dist/component/pipeline.js +324 -0
  57. package/dist/component/pipeline.js.map +1 -0
  58. package/dist/component/schema.d.ts +404 -2
  59. package/dist/component/schema.d.ts.map +1 -1
  60. package/dist/component/schema.js +168 -2
  61. package/dist/component/schema.js.map +1 -1
  62. package/dist/component/secrets.d.ts +15 -0
  63. package/dist/component/secrets.d.ts.map +1 -0
  64. package/dist/component/secrets.js +67 -0
  65. package/dist/component/secrets.js.map +1 -0
  66. package/dist/component/validators.d.ts +1052 -15
  67. package/dist/component/validators.d.ts.map +1 -1
  68. package/dist/component/validators.js +307 -3
  69. package/dist/component/validators.js.map +1 -1
  70. package/dist/tracker/generated.d.ts +1 -1
  71. package/dist/tracker/generated.d.ts.map +1 -1
  72. package/dist/tracker/generated.js +1 -1
  73. package/dist/tracker/generated.js.map +1 -1
  74. package/dist/ui/campaigns/CampaignsView.d.ts +48 -0
  75. package/dist/ui/campaigns/CampaignsView.d.ts.map +1 -0
  76. package/dist/ui/campaigns/CampaignsView.js +47 -0
  77. package/dist/ui/campaigns/CampaignsView.js.map +1 -0
  78. package/dist/ui/campaigns/Conversions.d.ts +16 -0
  79. package/dist/ui/campaigns/Conversions.d.ts.map +1 -0
  80. package/dist/ui/campaigns/Conversions.js +40 -0
  81. package/dist/ui/campaigns/Conversions.js.map +1 -0
  82. package/dist/ui/campaigns/Drawer.d.ts +24 -0
  83. package/dist/ui/campaigns/Drawer.d.ts.map +1 -0
  84. package/dist/ui/campaigns/Drawer.js +120 -0
  85. package/dist/ui/campaigns/Drawer.js.map +1 -0
  86. package/dist/ui/campaigns/Icons.d.ts +35 -0
  87. package/dist/ui/campaigns/Icons.d.ts.map +1 -0
  88. package/dist/ui/campaigns/Icons.js +41 -0
  89. package/dist/ui/campaigns/Icons.js.map +1 -0
  90. package/dist/ui/campaigns/Summary.d.ts +21 -0
  91. package/dist/ui/campaigns/Summary.d.ts.map +1 -0
  92. package/dist/ui/campaigns/Summary.js +56 -0
  93. package/dist/ui/campaigns/Summary.js.map +1 -0
  94. package/dist/ui/campaigns/Thumbnail.d.ts +11 -0
  95. package/dist/ui/campaigns/Thumbnail.d.ts.map +1 -0
  96. package/dist/ui/campaigns/Thumbnail.js +23 -0
  97. package/dist/ui/campaigns/Thumbnail.js.map +1 -0
  98. package/dist/ui/campaigns/Tree.d.ts +12 -0
  99. package/dist/ui/campaigns/Tree.d.ts.map +1 -0
  100. package/dist/ui/campaigns/Tree.js +105 -0
  101. package/dist/ui/campaigns/Tree.js.map +1 -0
  102. package/dist/ui/campaigns/glyphs.d.ts +20 -0
  103. package/dist/ui/campaigns/glyphs.d.ts.map +1 -0
  104. package/dist/ui/campaigns/glyphs.js +19 -0
  105. package/dist/ui/campaigns/glyphs.js.map +1 -0
  106. package/dist/ui/campaigns/index.d.ts +4 -0
  107. package/dist/ui/campaigns/index.d.ts.map +1 -0
  108. package/dist/ui/campaigns/index.js +3 -0
  109. package/dist/ui/campaigns/index.js.map +1 -0
  110. package/dist/ui/campaigns/labels.d.ts +53 -0
  111. package/dist/ui/campaigns/labels.d.ts.map +1 -0
  112. package/dist/ui/campaigns/labels.js +169 -0
  113. package/dist/ui/campaigns/labels.js.map +1 -0
  114. package/dist/ui/campaigns/model.d.ts +99 -0
  115. package/dist/ui/campaigns/model.d.ts.map +1 -0
  116. package/dist/ui/campaigns/model.js +230 -0
  117. package/dist/ui/campaigns/model.js.map +1 -0
  118. package/dist/ui/campaigns/modes.d.ts +18 -0
  119. package/dist/ui/campaigns/modes.d.ts.map +1 -0
  120. package/dist/ui/campaigns/modes.js +7 -0
  121. package/dist/ui/campaigns/modes.js.map +1 -0
  122. package/dist/ui/index.d.ts +21 -0
  123. package/dist/ui/index.d.ts.map +1 -0
  124. package/dist/ui/index.js +19 -0
  125. package/dist/ui/index.js.map +1 -0
  126. package/dist/ui/integrations/AccountPicker.d.ts +26 -0
  127. package/dist/ui/integrations/AccountPicker.d.ts.map +1 -0
  128. package/dist/ui/integrations/AccountPicker.js +97 -0
  129. package/dist/ui/integrations/AccountPicker.js.map +1 -0
  130. package/dist/ui/integrations/ClientCards.d.ts +17 -0
  131. package/dist/ui/integrations/ClientCards.d.ts.map +1 -0
  132. package/dist/ui/integrations/ClientCards.js +38 -0
  133. package/dist/ui/integrations/ClientCards.js.map +1 -0
  134. package/dist/ui/integrations/ClientsTable.d.ts +36 -0
  135. package/dist/ui/integrations/ClientsTable.d.ts.map +1 -0
  136. package/dist/ui/integrations/ClientsTable.js +127 -0
  137. package/dist/ui/integrations/ClientsTable.js.map +1 -0
  138. package/dist/ui/integrations/Connect.d.ts +29 -0
  139. package/dist/ui/integrations/Connect.d.ts.map +1 -0
  140. package/dist/ui/integrations/Connect.js +49 -0
  141. package/dist/ui/integrations/Connect.js.map +1 -0
  142. package/dist/ui/integrations/Connection.d.ts +37 -0
  143. package/dist/ui/integrations/Connection.d.ts.map +1 -0
  144. package/dist/ui/integrations/Connection.js +94 -0
  145. package/dist/ui/integrations/Connection.js.map +1 -0
  146. package/dist/ui/integrations/Dialogs.d.ts +18 -0
  147. package/dist/ui/integrations/Dialogs.d.ts.map +1 -0
  148. package/dist/ui/integrations/Dialogs.js +25 -0
  149. package/dist/ui/integrations/Dialogs.js.map +1 -0
  150. package/dist/ui/integrations/EventsFeed.d.ts +15 -0
  151. package/dist/ui/integrations/EventsFeed.d.ts.map +1 -0
  152. package/dist/ui/integrations/EventsFeed.js +57 -0
  153. package/dist/ui/integrations/EventsFeed.js.map +1 -0
  154. package/dist/ui/integrations/EventsSheet.d.ts +28 -0
  155. package/dist/ui/integrations/EventsSheet.d.ts.map +1 -0
  156. package/dist/ui/integrations/EventsSheet.js +121 -0
  157. package/dist/ui/integrations/EventsSheet.js.map +1 -0
  158. package/dist/ui/integrations/Icons.d.ts +36 -0
  159. package/dist/ui/integrations/Icons.d.ts.map +1 -0
  160. package/dist/ui/integrations/Icons.js +38 -0
  161. package/dist/ui/integrations/Icons.js.map +1 -0
  162. package/dist/ui/integrations/IntegrationsView.d.ts +14 -0
  163. package/dist/ui/integrations/IntegrationsView.d.ts.map +1 -0
  164. package/dist/ui/integrations/IntegrationsView.js +113 -0
  165. package/dist/ui/integrations/IntegrationsView.js.map +1 -0
  166. package/dist/ui/integrations/Overlay.d.ts +18 -0
  167. package/dist/ui/integrations/Overlay.d.ts.map +1 -0
  168. package/dist/ui/integrations/Overlay.js +36 -0
  169. package/dist/ui/integrations/Overlay.js.map +1 -0
  170. package/dist/ui/integrations/RowMenu.d.ts +15 -0
  171. package/dist/ui/integrations/RowMenu.d.ts.map +1 -0
  172. package/dist/ui/integrations/RowMenu.js +47 -0
  173. package/dist/ui/integrations/RowMenu.js.map +1 -0
  174. package/dist/ui/integrations/UnlinkDialog.d.ts +18 -0
  175. package/dist/ui/integrations/UnlinkDialog.d.ts.map +1 -0
  176. package/dist/ui/integrations/UnlinkDialog.js +29 -0
  177. package/dist/ui/integrations/UnlinkDialog.js.map +1 -0
  178. package/dist/ui/integrations/format.d.ts +28 -0
  179. package/dist/ui/integrations/format.d.ts.map +1 -0
  180. package/dist/ui/integrations/format.js +101 -0
  181. package/dist/ui/integrations/format.js.map +1 -0
  182. package/dist/ui/integrations/index.d.ts +5 -0
  183. package/dist/ui/integrations/index.d.ts.map +1 -0
  184. package/dist/ui/integrations/index.js +3 -0
  185. package/dist/ui/integrations/index.js.map +1 -0
  186. package/dist/ui/integrations/model.d.ts +84 -0
  187. package/dist/ui/integrations/model.d.ts.map +1 -0
  188. package/dist/ui/integrations/model.js +131 -0
  189. package/dist/ui/integrations/model.js.map +1 -0
  190. package/dist/ui/integrations/overlay.d.ts +10 -0
  191. package/dist/ui/integrations/overlay.d.ts.map +1 -0
  192. package/dist/ui/integrations/overlay.js +77 -0
  193. package/dist/ui/integrations/overlay.js.map +1 -0
  194. package/dist/ui/integrations/parts.d.ts +36 -0
  195. package/dist/ui/integrations/parts.d.ts.map +1 -0
  196. package/dist/ui/integrations/parts.js +85 -0
  197. package/dist/ui/integrations/parts.js.map +1 -0
  198. package/dist/ui/integrations/types.d.ts +96 -0
  199. package/dist/ui/integrations/types.d.ts.map +1 -0
  200. package/dist/ui/integrations/types.js +2 -0
  201. package/dist/ui/integrations/types.js.map +1 -0
  202. package/dist/ui/metrics.d.ts +106 -0
  203. package/dist/ui/metrics.d.ts.map +1 -0
  204. package/dist/ui/metrics.js +166 -0
  205. package/dist/ui/metrics.js.map +1 -0
  206. package/dist/ui/portfolio/PortfolioView.d.ts +26 -0
  207. package/dist/ui/portfolio/PortfolioView.d.ts.map +1 -0
  208. package/dist/ui/portfolio/PortfolioView.js +216 -0
  209. package/dist/ui/portfolio/PortfolioView.js.map +1 -0
  210. package/dist/ui/portfolio/SpendChart.d.ts +10 -0
  211. package/dist/ui/portfolio/SpendChart.d.ts.map +1 -0
  212. package/dist/ui/portfolio/SpendChart.js +196 -0
  213. package/dist/ui/portfolio/SpendChart.js.map +1 -0
  214. package/dist/ui/portfolio/alerts.d.ts +74 -0
  215. package/dist/ui/portfolio/alerts.d.ts.map +1 -0
  216. package/dist/ui/portfolio/alerts.js +291 -0
  217. package/dist/ui/portfolio/alerts.js.map +1 -0
  218. package/dist/ui/portfolio/figures.d.ts +79 -0
  219. package/dist/ui/portfolio/figures.d.ts.map +1 -0
  220. package/dist/ui/portfolio/figures.js +103 -0
  221. package/dist/ui/portfolio/figures.js.map +1 -0
  222. package/dist/ui/portfolio/format.d.ts +8 -0
  223. package/dist/ui/portfolio/format.d.ts.map +1 -0
  224. package/dist/ui/portfolio/format.js +28 -0
  225. package/dist/ui/portfolio/format.js.map +1 -0
  226. package/dist/ui/sample.d.ts +474 -0
  227. package/dist/ui/sample.d.ts.map +1 -0
  228. package/dist/ui/sample.js +553 -0
  229. package/dist/ui/sample.js.map +1 -0
  230. package/dist/ui/seed.d.ts +188 -0
  231. package/dist/ui/seed.d.ts.map +1 -0
  232. package/dist/ui/seed.js +563 -0
  233. package/dist/ui/seed.js.map +1 -0
  234. package/dist/ui/ui.css +3356 -0
  235. package/docs/federation.md +46 -1
  236. package/docs/meta-ads.md +746 -0
  237. package/docs/upgrading.md +95 -0
  238. package/llms.txt +3 -0
  239. package/package.json +15 -3
  240. package/src/component/_generated/api.ts +14 -0
  241. package/src/component/_generated/component.ts +323 -1
  242. package/src/component/_generated/server.ts +4 -0
  243. package/src/component/constants.ts +10 -0
  244. package/src/component/convex.config.ts +9 -0
  245. package/src/component/errors.ts +5 -1
  246. package/src/component/leads.ts +517 -17
  247. package/src/component/meta.ts +1461 -0
  248. package/src/component/metaCapi.ts +921 -0
  249. package/src/component/metaFake.ts +277 -0
  250. package/src/component/metaGraph.ts +722 -0
  251. package/src/component/metaSync.ts +1164 -0
  252. package/src/component/pipeline.ts +392 -0
  253. package/src/component/schema.ts +197 -1
  254. package/src/component/secrets.ts +98 -0
  255. package/src/component/validators.ts +376 -3
  256. package/src/tracker/generated.ts +1 -1
  257. package/src/ui/seed.ts +755 -0
@@ -0,0 +1,28 @@
1
+ import type { ClientRow } from "./model.js";
2
+ import type { EventMap, IntegrationConversion, SetEventMapInput } from "./types.js";
3
+ /**
4
+ * B5/M2: which board columns send what to the client's pixel. A sale always
5
+ * goes as Compra with its value (fixed first row); each column may send Lead,
6
+ * Lead qualificado or Agendamento, once per lead.
7
+ */
8
+ export declare function EventsSheet({ row, slot, eventMap, conversions, pages, onLoadOlder, currency, boardLabel, permitted, busy, onSave, onPlanB, onClose, now, }: {
9
+ row: ClientRow;
10
+ slot: number;
11
+ eventMap: EventMap | undefined;
12
+ conversions: readonly IntegrationConversion[];
13
+ /** Whether the host has older events, and whether a page is loading. */
14
+ pages?: {
15
+ hasMore: boolean;
16
+ loading: boolean;
17
+ } | undefined;
18
+ onLoadOlder?: (() => void) | undefined;
19
+ currency: string;
20
+ boardLabel: string;
21
+ permitted: boolean;
22
+ busy: boolean;
23
+ onSave: (map: Omit<SetEventMapInput, "siteId">) => void;
24
+ onPlanB: () => void;
25
+ onClose: () => void;
26
+ now: number;
27
+ }): import("react").JSX.Element;
28
+ //# sourceMappingURL=EventsSheet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventsSheet.d.ts","sourceRoot":"","sources":["../../../src/ui/integrations/EventsSheet.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C,OAAO,KAAK,EACV,QAAQ,EAER,qBAAqB,EAGrB,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAgHpB;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,EAC1B,GAAG,EACH,IAAI,EACJ,QAAQ,EACR,WAAW,EACX,KAAK,EACL,WAAW,EACX,QAAQ,EACR,UAAU,EACV,SAAS,EACT,IAAI,EACJ,MAAM,EACN,OAAO,EACP,OAAO,EACP,GAAG,GACJ,EAAE;IACD,GAAG,EAAE,SAAS,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC/B,WAAW,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAC9C,wEAAwE;IACxE,KAAK,CAAC,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,GAAG,SAAS,CAAC;IAC3D,WAAW,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,KAAK,IAAI,CAAC;IACxD,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;CACb,+BAoXA"}
@@ -0,0 +1,121 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useId, useRef, useState } from "react";
3
+ import { formatMoney } from "../metrics.js";
4
+ import { EVENT_LABELS } from "./EventsFeed.js";
5
+ import { pixelDigits, pixelShort, plural, sentAgo } from "./format.js";
6
+ import { Icon, MetaMark } from "./Icons.js";
7
+ import { Overlay } from "./Overlay.js";
8
+ import { Avatar, Pill, TestModeNote } from "./parts.js";
9
+ const COLUMN_EVENTS = ["Lead", "QualifiedLead", "Schedule"];
10
+ const FEED_ROWS = 3;
11
+ const MORE_ROWS = 10;
12
+ /** Columns in board order, gathered under their block when they have one. */
13
+ function groupsOf(columns) {
14
+ const groups = [];
15
+ for (const column of columns) {
16
+ const name = column.group ?? null;
17
+ const last = groups.at(-1);
18
+ if (last && last.name === name)
19
+ last.columns.push(column);
20
+ else
21
+ groups.push({ name, columns: [column] });
22
+ }
23
+ return groups;
24
+ }
25
+ function EventSelect({ id, label, value, disabled, onChange, }) {
26
+ return (_jsxs("span", { className: "rastro-integrations__select", "data-tone": value ? "on" : "none", children: [_jsxs("select", { id: id, "aria-label": label, value: value ?? "", disabled: disabled, onChange: (event) => onChange((event.target.value || null)), children: [_jsx("option", { value: "", children: "N\u00E3o enviar \u00E0 Meta" }), COLUMN_EVENTS.map((name) => (_jsx("option", { value: name, children: EVENT_LABELS[name] }, name)))] }), _jsx(Icon, { name: "chevronDown", size: 14 })] }));
27
+ }
28
+ function Check({ checked, disabled, label, onChange, }) {
29
+ return (_jsxs("span", { className: "rastro-integrations__check", children: [_jsx("input", { type: "checkbox", checked: checked, disabled: disabled, "aria-label": label, onChange: (event) => onChange?.(event.target.checked) }), _jsx(Icon, { name: "check", size: 12 })] }));
30
+ }
31
+ /** "Últimos 30 dias: 41 Compras e 118 Leads qualificados enviados · 0 falhas". */
32
+ function sentLine(sent, { short = false } = {}) {
33
+ if (!sent)
34
+ return null;
35
+ const parts = [
36
+ sent.Purchase ? plural(sent.Purchase, "Compra", "Compras") : null,
37
+ sent.QualifiedLead
38
+ ? plural(sent.QualifiedLead, short ? "qualificado" : "Lead qualificado", short ? "qualificados" : "Leads qualificados")
39
+ : null,
40
+ sent.Schedule ? plural(sent.Schedule, "Agendamento", "Agendamentos") : null,
41
+ sent.Lead ? plural(sent.Lead, "Lead", "Leads") : null,
42
+ ].filter(Boolean);
43
+ // A host that counts what Meta accepted may not count failures: then the
44
+ // line says nothing about them instead of a made-up zero.
45
+ const failed = sent.failed === undefined
46
+ ? ""
47
+ : ` · ${plural(sent.failed, "falha", "falhas")}`;
48
+ if (parts.length === 0)
49
+ return `${short ? "30 dias" : "Últimos 30 dias"}: nada enviado${failed}`;
50
+ const list = parts.length === 1
51
+ ? parts[0]
52
+ : `${parts.slice(0, -1).join(", ")} e ${parts.at(-1)}`;
53
+ return `${short ? "30 dias" : "Últimos 30 dias"}: ${list}${short ? "" : " enviados"}${failed}`;
54
+ }
55
+ /**
56
+ * B5/M2: which board columns send what to the client's pixel. A sale always
57
+ * goes as Compra with its value (fixed first row); each column may send Lead,
58
+ * Lead qualificado or Agendamento, once per lead.
59
+ */
60
+ export function EventsSheet({ row, slot, eventMap, conversions, pages, onLoadOlder, currency, boardLabel, permitted, busy, onSave, onPlanB, onClose, now, }) {
61
+ const id = useId();
62
+ const close = useRef(null);
63
+ const [choices, setChoices] = useState(() => Object.fromEntries((eventMap?.columns ?? []).map((column) => [column.key, column.event])));
64
+ const [sendLead, setSendLead] = useState(eventMap?.sendLeadEvent ?? false);
65
+ // The latest three, then "Ver mais" ten at a time: from what is loaded,
66
+ // and past it the host's next page (keyset by `createdAt` + `eventId`).
67
+ const [shown, setShown] = useState(FEED_ROWS);
68
+ const hiddenLoaded = Math.max(0, conversions.length - shown);
69
+ const canLoadOlder = Boolean(onLoadOlder && pages?.hasMore);
70
+ const showMore = () => {
71
+ const next = shown + MORE_ROWS;
72
+ setShown(next);
73
+ if (next > conversions.length && canLoadOlder && !pages?.loading) {
74
+ onLoadOlder?.();
75
+ }
76
+ };
77
+ const choose = (key, value) => setChoices((current) => ({ ...current, [key]: value }));
78
+ const editable = permitted && Boolean(row.pixel) && Boolean(eventMap);
79
+ const columns = eventMap?.columns ?? [];
80
+ const sourceOf = (event) => event.eventName === "Purchase"
81
+ ? "Venda registrada"
82
+ : (columns.find((column) => choices[column.key] === event.eventName)
83
+ ?.name ?? null);
84
+ const latest = conversions
85
+ .filter((event) => event.status === "sent")
86
+ .sort((a, b) => (b.sentAt ?? 0) - (a.sentAt ?? 0))[0];
87
+ const name = row.site.name;
88
+ const summary = sentLine(row.sent30d);
89
+ return (_jsx(Overlay, { side: true, labelledBy: `${id}-title`, initialFocus: close, onClose: onClose, children: _jsxs("div", { className: "rastro-integrations__sheet", children: [_jsxs("header", { className: "rastro-integrations__sheet-bar", children: [_jsx("button", { type: "button", className: "rastro-integrations__icon-btn", "aria-label": "Voltar", onClick: onClose, children: _jsx(Icon, { name: "chevronRight", size: 20 }) }), _jsxs("strong", { children: ["Eventos \u00B7 ", name] })] }), _jsxs("div", { className: "rastro-integrations__sheet-body", children: [_jsxs("header", { className: "rastro-integrations__sheet-head", children: [_jsx(Avatar, { name: name, slot: slot, size: "lg" }), _jsxs("div", { className: "rastro-integrations__grow", children: [_jsxs("h3", { id: `${id}-title`, className: "rastro-integrations__title", "data-size": "lg", children: ["Eventos devolvidos \u00E0 Meta \u00B7 ", name] }), _jsxs("p", { className: "rastro-integrations__desc", children: ["Quando um lead muda de coluna no ", boardLabel, ", o Rastro avisa o pixel. A Meta aprende quem compra e procura mais gente assim."] })] }), _jsx("button", { ref: close, type: "button", className: "rastro-integrations__icon-btn", "aria-label": "Fechar", onClick: onClose, children: _jsx(Icon, { name: "x" }) })] }), row.pixel ? (_jsxs("div", { className: "rastro-integrations__pixelbar", children: [_jsx(MetaMark, { size: 16 }), _jsxs("span", { className: "rastro-integrations__grow", children: ["Pixel", " ", _jsx("b", { className: "rastro-integrations__mono", "data-wide": "", children: pixelDigits(row.pixel.pixelId) }), _jsx("b", { className: "rastro-integrations__mono", "data-narrow": "", children: pixelShort(row.pixel.pixelId) }), row.pixel.name && (_jsxs("span", { "data-wide": "", children: [" \u00B7 ", row.pixel.name] }))] }), latest?.sentAt && (_jsxs(Pill, { tone: "ok", icon: "dot", children: [_jsx("span", { "data-wide": "", children: "Recebendo \u00B7 \u00FAltimo evento " }), sentAgo(latest.sentAt, now)] }))] })) : null, row.pixel && row.testMode && _jsx(TestModeNote, { variant: "callout" }), row.pixel ? null : (_jsxs("div", { className: "rastro-integrations__callout", "data-tone": "warn", children: [_jsx(Icon, { name: "info", size: 14 }), _jsxs("p", { children: [name, " ainda n\u00E3o tem pixel: nada \u00E9 enviado \u00E0 Meta. Ligue um pixel da conex\u00E3o na lista de clientes ou use o token pr\u00F3prio do cliente."] }), _jsx("button", { type: "button", className: "rastro-integrations__btn", "data-variant": "outline", "data-size": "sm", disabled: !permitted, onClick: onPlanB, children: "Pixel com token" })] })), _jsxs("div", { className: "rastro-integrations__map", role: "group", "aria-labelledby": `${id}-map`, children: [_jsxs("p", { id: `${id}-map`, className: "rastro-integrations__sec", children: ["Coluna do ", boardLabel, " \u2192 evento da Meta"] }), _jsxs("div", { className: "rastro-integrations__maprow", "data-fixed": "", children: [_jsx(Check, { checked: true, disabled: true, label: "Venda registrada (com valor) sempre envia Compra" }), _jsxs("span", { className: "rastro-integrations__stage", children: [_jsx("span", { className: "rastro-integrations__swatch", "data-fixed": "" }), "Venda registrada"] }), _jsx("span", { className: "rastro-integrations__arrow", children: _jsx(Icon, { name: "arrowRight", size: 14 }) }), _jsx("span", { className: "rastro-integrations__select", "data-tone": "on", "data-static": "", children: _jsx("span", { className: "rastro-integrations__evt", children: "Compra" }) }), _jsxs("span", { className: "rastro-integrations__meta rastro-integrations__map-note", children: [_jsx(Icon, { name: "dollar", size: 12 }), _jsx("span", { "data-wide": "", children: "com o valor da venda" }), _jsx("span", { "data-narrow": "", children: "com valor" })] })] }), !eventMap && (_jsx("div", { className: "rastro-skeleton rastro-integrations__map-skeleton" })), groupsOf(columns).map((group, index) => (_jsxs("div", { className: "rastro-integrations__map-group", children: [group.name && (_jsx("p", { className: "rastro-integrations__group", children: group.name })), group.columns.map((column) => {
90
+ const value = choices[column.key] ?? null;
91
+ return (_jsxs("div", { className: "rastro-integrations__maprow", children: [_jsx(Check, { checked: value !== null, disabled: !editable, label: `Enviar ${column.name} à Meta`, onChange: (checked) => choose(column.key, checked ? "Lead" : null) }), _jsxs("span", { className: "rastro-integrations__stage", children: [_jsx("span", { className: "rastro-integrations__swatch", style: column.color
92
+ ? { background: column.color }
93
+ : undefined }), _jsx("span", { className: "rastro-integrations__stage-name", children: column.name }), column.monthCount !== null && (_jsx("span", { className: "rastro-integrations__meta rastro-num", "data-wide": "", children: column.monthCount.toLocaleString("pt-BR") }))] }), _jsx("span", { className: "rastro-integrations__arrow", children: _jsx(Icon, { name: "arrowRight", size: 14 }) }), _jsx(EventSelect, { id: `${id}-${column.key}`, label: `Evento da Meta para ${column.name}`, value: value, disabled: !editable, onChange: (next) => choose(column.key, next) }), _jsx("span", { className: "rastro-integrations__meta rastro-integrations__map-note", "data-wide": "", children: value ? "sem valor" : "" })] }, column.key));
94
+ })] }, `${group.name ?? "none"}:${index}`))), eventMap && columns.length === 0 && (_jsxs("p", { className: "rastro-integrations__desc", children: ["O host ainda n\u00E3o declarou as colunas do ", boardLabel, ": s\u00F3 a venda registrada vai como Compra."] }))] }), _jsxs("div", { className: "rastro-integrations__callout", "data-tone": "info", "data-wide": "", children: [_jsx(Icon, { name: "info", size: 14 }), _jsxs("p", { children: [_jsx("b", { children: "Compra" }), " vai com o valor do neg\u00F3cio em R$;", " ", _jsx("b", { children: "Lead qualificado" }), " vai sem valor. Cada lead conta uma vez por evento, mesmo se voltar e avan\u00E7ar de novo de coluna. Eventos com mais de 7 dias n\u00E3o s\u00E3o enviados."] })] }), _jsxs("label", { className: "rastro-integrations__toggle", "data-wide": "", children: [_jsx(Check, { checked: sendLead, disabled: !editable, label: "Enviar tamb\u00E9m cada contato novo como Lead", onChange: setSendLead }), _jsxs("span", { className: "rastro-integrations__grow", children: [_jsxs("span", { className: "rastro-integrations__toggle-title", children: ["Enviar tamb\u00E9m cada contato novo como", " ", _jsxs("span", { className: "rastro-integrations__evt", children: ["Lead ", _jsx("i", { children: "Lead" })] })] }), _jsx("span", { className: "rastro-integrations__meta", children: sendLead
95
+ ? "Ligado: cada contato novo vai como Lead, além da conversa que o anúncio já conta"
96
+ : "Desligado: a Meta já conta a conversa iniciada pelo anúncio" })] })] }), conversions.length > 0 && (_jsxs("div", { className: "rastro-integrations__received", "data-wide": "", children: [_jsxs("p", { className: "rastro-integrations__sec", children: ["O que a Meta recebeu da ", name] }), _jsx("ul", { children: [...conversions]
97
+ .sort((a, b) => b.createdAt - a.createdAt)
98
+ .slice(0, shown)
99
+ .map((event) => {
100
+ const source = sourceOf(event);
101
+ return (_jsxs("li", { "data-status": event.status, children: [_jsx(Icon, { name: event.status === "failed"
102
+ ? "alert"
103
+ : event.status === "pending"
104
+ ? "clock"
105
+ : "check", size: 14 }), _jsxs("span", { children: [event.leadLabel ?? "Lead", source && (_jsxs("span", { className: "rastro-integrations__meta", children: [" ", "\u00B7 ", source] }))] }), _jsx("span", { children: EVENT_LABELS[event.eventName] }), _jsx("b", { className: "rastro-num", children: event.valueCents !== null
106
+ ? formatMoney(event.valueCents, currency)
107
+ : "" }), _jsx("span", { className: "rastro-integrations__meta", children: event.status === "sent"
108
+ ? sentAgo(event.sentAt ?? event.createdAt, now)
109
+ : event.status === "pending"
110
+ ? "na fila"
111
+ : "falhou" })] }, event.eventId));
112
+ }) }), (hiddenLoaded > 0 || canLoadOlder) && (_jsx("button", { type: "button", className: "rastro-integrations__link rastro-integrations__meta", disabled: pages?.loading, onClick: showMore, children: pages?.loading
113
+ ? "Carregando…"
114
+ : hiddenLoaded > 0
115
+ ? `Ver mais ${Math.min(hiddenLoaded, MORE_ROWS).toLocaleString("pt-BR")}`
116
+ : "Ver mais antigos" }))] })), summary && (_jsxs("p", { className: "rastro-integrations__meta", "data-narrow": "", children: [_jsx(Icon, { name: "info", size: 12 }), " ", sentLine(row.sent30d, { short: true })] }))] }), _jsxs("footer", { className: "rastro-integrations__sheet-foot", children: [summary && (_jsx("span", { className: "rastro-integrations__meta", "data-wide": "", children: summary })), _jsxs("span", { className: "rastro-integrations__foot-actions", children: [_jsx("button", { type: "button", className: "rastro-integrations__btn", "data-variant": "outline", onClick: onClose, children: "Cancelar" }), _jsx("button", { type: "button", className: "rastro-integrations__btn", disabled: !editable || busy, onClick: () => {
117
+ onSave({ columns: choices, sendLeadEvent: sendLead });
118
+ onClose();
119
+ }, children: busy ? "Salvando…" : "Salvar eventos" })] })] })] }) }));
120
+ }
121
+ //# sourceMappingURL=EventsSheet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventsSheet.js","sourceRoot":"","sources":["../../../src/ui/integrations/EventsSheet.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ declare const LINES: {
2
+ readonly check: import("react").JSX.Element;
3
+ readonly chevronDown: import("react").JSX.Element;
4
+ readonly chevronRight: import("react").JSX.Element;
5
+ readonly arrowRight: import("react").JSX.Element;
6
+ readonly x: import("react").JSX.Element;
7
+ readonly clock: import("react").JSX.Element;
8
+ readonly info: import("react").JSX.Element;
9
+ readonly alert: import("react").JSX.Element;
10
+ readonly refresh: import("react").JSX.Element;
11
+ readonly lock: import("react").JSX.Element;
12
+ readonly key: import("react").JSX.Element;
13
+ readonly trash: import("react").JSX.Element;
14
+ readonly unlink: import("react").JSX.Element;
15
+ readonly send: import("react").JSX.Element;
16
+ readonly dots: import("react").JSX.Element;
17
+ readonly plus: import("react").JSX.Element;
18
+ readonly dollar: import("react").JSX.Element;
19
+ readonly settings: import("react").JSX.Element;
20
+ };
21
+ export type IconName = keyof typeof LINES;
22
+ /** A 16px stroke icon; `size` 12/14/20 for the artboards' xs/sm/lg. */
23
+ export declare function Icon({ name, size }: {
24
+ name: IconName;
25
+ size?: number;
26
+ }): import("react").JSX.Element;
27
+ /** The Meta infinity mark, in Meta blue. */
28
+ export declare function MetaMark({ size }: {
29
+ size?: number;
30
+ }): import("react").JSX.Element;
31
+ /** The Facebook "f", white on the Meta-blue button. */
32
+ export declare function FacebookMark({ size }: {
33
+ size?: number;
34
+ }): import("react").JSX.Element;
35
+ export {};
36
+ //# sourceMappingURL=Icons.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Icons.d.ts","sourceRoot":"","sources":["../../../src/ui/integrations/Icons.tsx"],"names":[],"mappings":"AAGA,QAAA,MAAM,KAAK;aACT,KAAK;aACL,WAAW;aACX,YAAY;aACZ,UAAU;aACV,CAAC;aACD,KAAK;aAML,IAAI;aAMJ,KAAK;aAML,OAAO;aAQP,IAAI;aAMJ,GAAG;aAMH,KAAK;aAGL,MAAM;aAGN,IAAI;aAMJ,IAAI;aAOJ,IAAI;aACJ,MAAM;aAMN,QAAQ;CAMA,CAAC;AAEX,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,KAAK,CAAC;AAE1C,uEAAuE;AACvE,wBAAgB,IAAI,CAAC,EAAE,IAAI,EAAE,IAAS,EAAE,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,+BAiB1E;AAOD,4CAA4C;AAC5C,wBAAgB,QAAQ,CAAC,EAAE,IAAS,EAAE,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,+BAYxD;AAED,uDAAuD;AACvD,wBAAgB,YAAY,CAAC,EAAE,IAAS,EAAE,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,+BAY5D"}
@@ -0,0 +1,38 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // Line icons in the dashboard's family (lucide strokes) and the two Meta
3
+ // marks, inlined so the package needs no icon library.
4
+ const LINES = {
5
+ check: _jsx("path", { d: "M20 6 9 17l-5-5" }),
6
+ chevronDown: _jsx("path", { d: "m6 9 6 6 6-6" }),
7
+ chevronRight: _jsx("path", { d: "m9 18 6-6-6-6" }),
8
+ arrowRight: _jsx("path", { d: "M5 12h14M12 5l7 7-7 7" }),
9
+ x: _jsx("path", { d: "M18 6 6 18M6 6l12 12" }),
10
+ clock: (_jsxs(_Fragment, { children: [_jsx("circle", { cx: "12", cy: "12", r: "10" }), _jsx("path", { d: "M12 6v6l4 2" })] })),
11
+ info: (_jsxs(_Fragment, { children: [_jsx("circle", { cx: "12", cy: "12", r: "10" }), _jsx("path", { d: "M12 16v-4M12 8h.01" })] })),
12
+ alert: (_jsxs(_Fragment, { children: [_jsx("path", { d: "m21.7 18-8-14a2 2 0 0 0-3.4 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.7-3Z" }), _jsx("path", { d: "M12 9v4M12 17h.01" })] })),
13
+ refresh: (_jsxs(_Fragment, { children: [_jsx("path", { d: "M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8" }), _jsx("path", { d: "M21 3v5h-5" }), _jsx("path", { d: "M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16" }), _jsx("path", { d: "M8 16H3v5" })] })),
14
+ lock: (_jsxs(_Fragment, { children: [_jsx("rect", { x: "3", y: "11", width: "18", height: "11", rx: "2" }), _jsx("path", { d: "M7 11V7a5 5 0 0 1 10 0v4" })] })),
15
+ key: (_jsxs(_Fragment, { children: [_jsx("path", { d: "m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4M21 2l-9.6 9.6" }), _jsx("circle", { cx: "7.5", cy: "15.5", r: "5.5" })] })),
16
+ trash: (_jsx("path", { d: "M3 6h18M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" })),
17
+ unlink: (_jsx("path", { d: "m18.84 12.25 1.72-1.71a5 5 0 0 0-7.07-7.07l-1.72 1.71M5.17 11.75l-1.71 1.71a5 5 0 0 0 7.07 7.07l1.71-1.71M8 2v3M2 8h3M16 22v-3M22 16h-3" })),
18
+ send: (_jsxs(_Fragment, { children: [_jsx("path", { d: "M14.5 21.7a.5.5 0 0 0 .9 0L22 2.6a.5.5 0 0 0-.6-.6L2.3 8.6a.5.5 0 0 0 0 .9l8 3.2a2 2 0 0 1 1.1 1.1Z" }), _jsx("path", { d: "m21.9 2.1-10.9 10.9" })] })),
19
+ dots: (_jsxs(_Fragment, { children: [_jsx("circle", { cx: "12", cy: "12", r: "1" }), _jsx("circle", { cx: "19", cy: "12", r: "1" }), _jsx("circle", { cx: "5", cy: "12", r: "1" })] })),
20
+ plus: _jsx("path", { d: "M5 12h14M12 5v14" }),
21
+ dollar: (_jsxs(_Fragment, { children: [_jsx("circle", { cx: "12", cy: "12", r: "10" }), _jsx("path", { d: "M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8M12 18V6" })] })),
22
+ settings: (_jsxs(_Fragment, { children: [_jsx("path", { d: "M12.2 2h-.4a2 2 0 0 0-2 2v.2a2 2 0 0 1-1 1.7l-.4.3a2 2 0 0 1-2 0l-.2-.1a2 2 0 0 0-2.7.7l-.2.4a2 2 0 0 0 .7 2.7l.2.1a2 2 0 0 1 1 1.7v.5a2 2 0 0 1-1 1.7l-.2.1a2 2 0 0 0-.7 2.7l.2.4a2 2 0 0 0 2.7.7l.2-.1a2 2 0 0 1 2 0l.4.3a2 2 0 0 1 1 1.7v.2a2 2 0 0 0 2 2h.4a2 2 0 0 0 2-2v-.2a2 2 0 0 1 1-1.7l.4-.3a2 2 0 0 1 2 0l.2.1a2 2 0 0 0 2.7-.7l.2-.4a2 2 0 0 0-.7-2.7l-.2-.1a2 2 0 0 1-1-1.7v-.5a2 2 0 0 1 1-1.7l.2-.1a2 2 0 0 0 .7-2.7l-.2-.4a2 2 0 0 0-2.7-.7l-.2.1a2 2 0 0 1-2 0l-.4-.3a2 2 0 0 1-1-1.7V4a2 2 0 0 0-2-2z" }), _jsx("circle", { cx: "12", cy: "12", r: "3" })] })),
23
+ };
24
+ /** A 16px stroke icon; `size` 12/14/20 for the artboards' xs/sm/lg. */
25
+ export function Icon({ name, size = 16 }) {
26
+ return (_jsx("svg", { className: "rastro-integrations__icon", viewBox: "0 0 24 24", width: size, height: size, fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: LINES[name] }));
27
+ }
28
+ const META_PATH = "M6.915 4.03c-1.968 0-3.683 1.28-4.871 3.113C.704 9.208 0 11.883 0 14.449c0 .706.07 1.369.21 1.973a6.624 6.624 0 0 0 .265.86 5.297 5.297 0 0 0 .371.761c.696 1.159 1.818 1.927 3.593 1.927 1.497 0 2.633-.671 3.965-2.444.76-1.012 1.144-1.626 2.663-4.32l.756-1.339.186-.325c.061.1.121.196.183.3l2.152 3.595c.724 1.21 1.665 2.556 2.47 3.314 1.046.987 1.992 1.22 3.06 1.22 1.075 0 1.876-.355 2.455-.843a3.743 3.743 0 0 0 .81-.973c.542-.939.861-2.127.861-3.745 0-2.72-.681-5.357-2.084-7.45-1.282-1.912-2.957-2.93-4.716-2.93-1.047 0-2.088.467-3.053 1.308-.652.57-1.257 1.29-1.82 2.05-.69-.875-1.335-1.547-1.958-2.056-1.182-.966-2.315-1.303-3.454-1.303zm10.16 2.053c1.147 0 2.188.758 2.992 1.999 1.132 1.748 1.647 4.195 1.647 6.4 0 1.548-.368 2.9-1.839 2.9-.58 0-1.027-.23-1.664-1.004-.496-.601-1.343-1.878-2.832-4.358l-.617-1.028a44.908 44.908 0 0 0-1.255-1.98c.07-.109.141-.224.211-.327 1.12-1.667 2.118-2.602 3.358-2.602zm-10.201.553c1.265 0 2.058.791 2.675 1.446.307.327.737.871 1.234 1.579l-1.02 1.566c-.757 1.163-1.882 3.017-2.837 4.338-1.191 1.649-1.81 1.817-2.486 1.817-.524 0-1.038-.237-1.383-.794-.263-.426-.464-1.13-.464-2.046 0-2.221.63-4.535 1.66-6.088.454-.687.964-1.226 1.533-1.533a2.264 2.264 0 0 1 1.088-.285z";
29
+ const FACEBOOK_PATH = "M9.101 23.691v-7.98H6.627v-3.667h2.474v-1.58c0-4.085 1.848-5.978 5.858-5.978.401 0 .955.042 1.468.103a8.68 8.68 0 0 1 1.141.195v3.325a8.623 8.623 0 0 0-.653-.036 26.805 26.805 0 0 0-.733-.009c-.707 0-1.259.096-1.675.309a1.686 1.686 0 0 0-.679.622c-.258.42-.374.995-.374 1.752v1.297h3.919l-.386 2.103-.287 1.564h-3.246v8.245C19.396 23.238 24 18.179 24 12.044c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.628 3.874 10.35 9.101 11.647Z";
30
+ /** The Meta infinity mark, in Meta blue. */
31
+ export function MetaMark({ size = 16 }) {
32
+ return (_jsx("svg", { className: "rastro-integrations__brand", viewBox: "0 0 24 24", width: size, height: size, "aria-hidden": "true", children: _jsx("path", { fill: "#0866ff", d: META_PATH }) }));
33
+ }
34
+ /** The Facebook "f", white on the Meta-blue button. */
35
+ export function FacebookMark({ size = 16 }) {
36
+ return (_jsx("svg", { className: "rastro-integrations__brand", viewBox: "0 0 24 24", width: size, height: size, "aria-hidden": "true", children: _jsx("path", { fill: "currentColor", d: FACEBOOK_PATH }) }));
37
+ }
38
+ //# sourceMappingURL=Icons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Icons.js","sourceRoot":"","sources":["../../../src/ui/integrations/Icons.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { IntegrationsViewProps } from "./types.js";
2
+ /**
3
+ * Integrações: one Meta login for the agency, each client tied to its ad
4
+ * account and pixel, and which board columns go back to Meta as events. Pure
5
+ * like the other views: data in through props, every write out through a
6
+ * callback the host turns into its own call.
7
+ */
8
+ export declare function IntegrationsView(props: IntegrationsViewProps & {
9
+ /** How the host calls its board ("Kanban do uze"); "Kanban" by default. */
10
+ boardLabel?: string;
11
+ }): import("react").JSX.Element;
12
+ /** The header chip: "3 de 4 clientes ligados", or how many stopped. */
13
+ export declare function IntegrationsBadge({ connection, sites, status, }: Pick<IntegrationsViewProps, "connection" | "sites" | "status">): import("react").JSX.Element | null;
14
+ //# sourceMappingURL=IntegrationsView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IntegrationsView.d.ts","sourceRoot":"","sources":["../../../src/ui/integrations/IntegrationsView.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAwFxD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,qBAAqB,GAAG;IAC7B,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,+BAqVF;AAED,uEAAuE;AACvE,wBAAgB,iBAAiB,CAAC,EAChC,UAAU,EACV,KAAK,EACL,MAAM,GACP,EAAE,IAAI,CAAC,qBAAqB,EAAE,YAAY,GAAG,OAAO,GAAG,QAAQ,CAAC,sCAwBhE"}
@@ -0,0 +1,113 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useRef, useState } from "react";
3
+ import { ClientCards } from "./ClientCards.js";
4
+ import { ClientsTable, } from "./ClientsTable.js";
5
+ import { ConnectCard, FacebookButton, PlanBForm } from "./Connect.js";
6
+ import { ConnectionCard, ConnectionLine, ExpiryWarning, ReconnectPlan, RefusedBanner, } from "./Connection.js";
7
+ import { DisconnectDialog, PlanBDialog } from "./Dialogs.js";
8
+ import { EventsFeed } from "./EventsFeed.js";
9
+ import { EventsSheet } from "./EventsSheet.js";
10
+ import { Icon, MetaMark } from "./Icons.js";
11
+ import { clientRows, integrationsHeadline, suggestedAccount } from "./model.js";
12
+ import { UnlinkDialog } from "./UnlinkDialog.js";
13
+ function Loading() {
14
+ return (_jsxs("div", { className: "rastro-ui rastro-integrations", role: "status", "aria-busy": "true", "aria-label": "Carregando integra\u00E7\u00F5es", children: [_jsx("div", { className: "rastro-skeleton rastro-integrations__skeleton", "data-size": "sm" }), _jsx("div", { className: "rastro-skeleton rastro-integrations__skeleton" })] }));
15
+ }
16
+ /** The grant hint for a reader: same screen, read only, and why. */
17
+ function ReadOnlyNote() {
18
+ return (_jsxs("p", { className: "rastro-integrations__callout", "data-tone": "info", role: "note", children: [_jsx(Icon, { name: "lock", size: 14 }), _jsxs("span", { children: ["Esta conex\u00E3o \u00E9 somente leitura: d\u00E1 para ver tudo, mas conectar a Meta, ligar contas e mudar eventos pede ", _jsx("code", { children: "analytics:configure" }), " no grant do host."] })] }));
19
+ }
20
+ /** "Esperando a janela da Meta…": the only part of B2 that is Rastro's. */
21
+ /**
22
+ * A manual popover sits in the top layer: `position: fixed` there means the
23
+ * viewport, whatever the host's ancestors transform or contain.
24
+ */
25
+ function useTopLayer() {
26
+ const ref = useRef(null);
27
+ useEffect(() => {
28
+ const element = ref.current;
29
+ if (element && typeof element.showPopover === "function")
30
+ element.showPopover();
31
+ }, []);
32
+ return ref;
33
+ }
34
+ /** M1/M3: the phone's action, fixed at the foot of the screen. */
35
+ function PhoneFoot({ children }) {
36
+ const ref = useTopLayer();
37
+ return (_jsx("div", { ref: ref, popover: "manual", className: "rastro-integrations__phone-foot", "data-narrow": "", children: children }));
38
+ }
39
+ function WaitingChip() {
40
+ const ref = useTopLayer();
41
+ return (_jsxs("div", { ref: ref, popover: "manual", className: "rastro-integrations__waiting", role: "status", children: [_jsx("i", { className: "rastro-integrations__spin", "aria-hidden": "true" }), "Esperando a janela da Meta\u2026 o Rastro valida o token e lista as contas ao voltar"] }));
42
+ }
43
+ /**
44
+ * Integrações: one Meta login for the agency, each client tied to its ad
45
+ * account and pixel, and which board columns go back to Meta as events. Pure
46
+ * like the other views: data in through props, every write out through a
47
+ * callback the host turns into its own call.
48
+ */
49
+ export function IntegrationsView(props) {
50
+ const { connection, sites, status, conversions, adNames, eventMaps, sentBySite, unlinkPreviews, onRequestUnlinkPreview, permitted, busy = null, error, notice, now, loading, boardLabel = "Kanban", } = props;
51
+ const [overlay, setOverlay] = useState(null);
52
+ const [filter, setFilter] = useState(null);
53
+ const [staged, setStaged] = useState({});
54
+ if (loading || connection === undefined || status === undefined)
55
+ return _jsx(Loading, {});
56
+ if (sites.length === 0)
57
+ return (_jsx("div", { className: "rastro-ui rastro-integrations", children: _jsxs("div", { className: "rastro-card rastro-empty", children: [_jsx("strong", { children: "Nenhum cliente nesta conex\u00E3o" }), _jsx("span", { children: "Quando a conex\u00E3o autorizar um site, ele aparece aqui para ganhar a sua conta de an\u00FAncio." })] }) }));
58
+ const rows = clientRows({
59
+ sites,
60
+ connection,
61
+ status,
62
+ eventMaps,
63
+ sentBySite,
64
+ otherOwnerLabel: props.otherOwnerLabel,
65
+ });
66
+ const refused = connection?.status === "invalid";
67
+ const activeFilter = filter ?? "all";
68
+ const currency = rows.find((row) => row.account)?.account?.currency ?? "BRL";
69
+ const stagedFor = (siteId) => {
70
+ if (siteId in staged)
71
+ return staged[siteId] ?? null;
72
+ const site = sites.find((entry) => entry.siteId === siteId);
73
+ return site && connection
74
+ ? suggestedAccount(site, connection.adAccounts)
75
+ : null;
76
+ };
77
+ const actions = {
78
+ permitted,
79
+ onPick: props.onLinkAccount,
80
+ onOpenEvents: (siteId) => setOverlay({ kind: "events", siteId }),
81
+ onUnlink: (siteId) => setOverlay({ kind: "unlink", siteId }),
82
+ onPlanB: (siteId) => setOverlay({ kind: "planB", siteId }),
83
+ onSetPixel: (siteId, pixelId) => props.onSetPixel(siteId, { pixelId }),
84
+ onChooseAssets: props.onChooseAssets,
85
+ };
86
+ const pickingRow = connection && !refused
87
+ ? rows.find((row) => row.state === "unlinked" && stagedFor(row.site.siteId))
88
+ : undefined;
89
+ const pickingChoice = pickingRow ? stagedFor(pickingRow.site.siteId) : null;
90
+ const syncing = rows.filter((row) => row.state === "syncing" && row.account?.syncState === "backfill");
91
+ const planB = rows.filter((row) => row.state === "planB");
92
+ const overlayRow = overlay && "siteId" in overlay
93
+ ? rows.find((row) => row.site.siteId === overlay.siteId)
94
+ : undefined;
95
+ const slotOf = (siteId) => Math.max(0, rows.findIndex((row) => row.site.siteId === siteId));
96
+ return (_jsxs("div", { className: "rastro-ui rastro-integrations", "data-state": !connection ? "offline" : refused ? "refused" : "connected", "data-foot": refused || pickingRow ? "" : undefined, children: [!permitted && _jsx(ReadOnlyNote, {}), error && (_jsxs("p", { className: "rastro-integrations__callout", "data-tone": "bad", role: "alert", children: [_jsx(Icon, { name: "alert", size: 14 }), _jsx("span", { children: error })] })), notice && (_jsxs("p", { className: "rastro-integrations__callout", "data-tone": "ok", role: "status", children: [_jsx(Icon, { name: "check", size: 14 }), _jsx("span", { children: notice })] })), connection && refused && (_jsxs(_Fragment, { children: [_jsx("div", { "data-wide": "", children: _jsx(RefusedBanner, { connection: connection, rows: rows }) }), _jsx("div", { "data-narrow": "", children: _jsx(RefusedBanner, { connection: connection, rows: rows, phone: true }) })] })), !connection ? (_jsxs("div", { className: "rastro-integrations__start", children: [_jsx(ConnectCard, { permitted: permitted, busy: busy === "connect", onConnect: props.onConnect }), _jsx(PlanBForm, { sites: sites, permitted: permitted, busy: busy === "pixel", onSubmit: props.onSetPixel })] })) : (_jsxs(_Fragment, { children: [_jsx("div", { "data-wide": "", children: _jsx(ConnectionCard, { connection: connection, permitted: permitted, busy: busy === "connect" || busy === "disconnect", onChooseAssets: props.onChooseAssets, onDisconnect: () => setOverlay({ kind: "disconnect" }), onReconnect: props.onReconnect }) }), _jsx(ExpiryWarning, { connection: connection, permitted: permitted, busy: busy === "connect", now: now, onReconnect: props.onReconnect }), !refused && (_jsx("div", { "data-narrow": "", children: _jsx(ConnectionLine, { connection: connection, permitted: permitted, onChooseAssets: props.onChooseAssets }) }))] })), _jsx("div", { "data-wide": "", children: _jsx(ClientsTable, { rows: rows, connection: connection, filter: activeFilter, onFilter: setFilter, actions: actions, now: now }) }), _jsx("div", { "data-narrow": "", children: _jsx(ClientCards, { rows: rows, connection: connection, staged: Object.fromEntries(rows.map((row) => [row.site.siteId, stagedFor(row.site.siteId)])), onStage: (siteId, adAccountId) => setStaged((current) => ({ ...current, [siteId]: adAccountId })), actions: actions, now: now }) }), !refused && syncing.length > 0 && (_jsxs("p", { className: "rastro-integrations__callout", "data-tone": "info", "data-wide": "", children: [_jsx(Icon, { name: "info", size: 14 }), _jsxs("span", { children: [syncing.map((row) => row.site.name).join(", "), " ", syncing.length === 1 ? "está" : "estão", " lendo os primeiros", " ", _jsx("b", { children: "90 dias" }), " da conta, um bloco de 30 dias por vez. At\u00E9 terminar, o gasto aparece como ", _jsx("b", { children: "\u201Csincronizando\u201D" }), ", nunca como zero, e fica fora do retorno da carteira."] })] })), refused && planB.length > 0 && (_jsxs("p", { className: "rastro-integrations__callout", "data-tone": "info", "data-wide": "", children: [_jsx(Icon, { name: "info", size: 14 }), _jsxs("span", { children: [planB.map((row) => row.site.name).join(", "), " ", planB.length === 1 ? "segue" : "seguem", " funcionando porque", " ", planB.length === 1 ? "usa" : "usam", " o ", _jsx("b", { children: "plano B" }), " (pixel + token da API de Convers\u00F5es pr\u00F3prio do cliente), que n\u00E3o depende do login da ag\u00EAncia."] })] })), connection && refused && (_jsx("div", { "data-wide": "", children: _jsx(ReconnectPlan, { connection: connection, rows: rows }) })), connection && !refused && conversions && (_jsx("div", { "data-wide": "", children: _jsx(EventsFeed, { sites: sites, conversions: conversions, adNames: adNames, sentBySite: sentBySite, currency: currency, now: now }) })), (refused || pickingRow) && (_jsx(PhoneFoot, { children: refused ? (_jsx(FacebookButton, { label: "Reconectar com Facebook", disabled: !permitted || busy === "connect", onClick: props.onReconnect })) : (pickingRow &&
97
+ pickingChoice && (_jsxs("button", { type: "button", className: "rastro-integrations__btn", disabled: !permitted || busy === "link", onClick: () => props.onLinkAccount(pickingRow.site.siteId, pickingChoice), children: ["Ligar ", pickingRow.site.name] }))) })), busy === "connect" && _jsx(WaitingChip, {}), overlay?.kind === "events" && overlayRow && (_jsx(EventsSheet, { row: overlayRow, slot: slotOf(overlayRow.site.siteId), eventMap: overlayRow.eventMap, conversions: conversions?.[overlayRow.site.siteId] ?? [], pages: props.conversionPages?.[overlayRow.site.siteId], onLoadOlder: props.onLoadOlderConversions
98
+ ? () => props.onLoadOlderConversions?.(overlayRow.site.siteId)
99
+ : undefined, currency: currency, boardLabel: boardLabel, permitted: permitted, busy: busy === "events", onSave: (map) => props.onSaveEventMap(overlayRow.site.siteId, map), onPlanB: () => setOverlay({ kind: "planB", siteId: overlayRow.site.siteId }), onClose: () => setOverlay(null), now: now }, `${overlayRow.site.siteId}:${overlayRow.eventMap ? 1 : 0}`)), overlay?.kind === "unlink" && overlayRow?.account && (_jsx(UnlinkDialog, { row: overlayRow, accounts: connection?.adAccounts ?? [], preview: unlinkPreviews?.[`${overlayRow.site.siteId}:${overlayRow.account.adAccountId}`], permitted: permitted, busy: busy === "unlink", onRequestPreview: () => onRequestUnlinkPreview?.(overlayRow.site.siteId, overlayRow.account.adAccountId), onConfirm: (replaceWith) => {
100
+ props.onUnlinkAccount(overlayRow.site.siteId, overlayRow.account.adAccountId, replaceWith);
101
+ setOverlay(null);
102
+ }, onClose: () => setOverlay(null) })), overlay?.kind === "planB" && (_jsx(PlanBDialog, { sites: sites, siteId: overlay.siteId, permitted: permitted, busy: busy === "pixel", onSubmit: props.onSetPixel, onClose: () => setOverlay(null) })), overlay?.kind === "disconnect" && (_jsx(DisconnectDialog, { linked: rows.filter((row) => row.account).length, busy: busy === "disconnect", onConfirm: props.onDisconnect, onClose: () => setOverlay(null) }))] }));
103
+ }
104
+ /** The header chip: "3 de 4 clientes ligados", or how many stopped. */
105
+ export function IntegrationsBadge({ connection, sites, status, }) {
106
+ if (!connection || !status)
107
+ return null;
108
+ const headline = integrationsHeadline(clientRows({ sites, connection, status, eventMaps: undefined }), connection);
109
+ if (!headline)
110
+ return null;
111
+ return (_jsxs("span", { className: "rastro-ui rastro-integrations__badge", "data-tone": headline.tone, role: "status", children: [headline.tone === "bad" ? (_jsx(Icon, { name: "alert", size: 14 })) : (_jsxs(_Fragment, { children: [_jsx("i", { className: "rastro-integrations__dot", "aria-hidden": "true" }), _jsx(MetaMark, { size: 14 })] })), headline.text] }));
112
+ }
113
+ //# sourceMappingURL=IntegrationsView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IntegrationsView.js","sourceRoot":"","sources":["../../../src/ui/integrations/IntegrationsView.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { type ReactNode, type RefObject } from "react";
2
+ /**
3
+ * A modal layer on a native `<dialog>`: `showModal()` puts it in the top
4
+ * layer, above a host whose ancestors transform or contain (where `position:
5
+ * fixed` would be trapped), and makes the page behind it inert. It stays in
6
+ * the DOM where it is rendered, so it inherits the host's `--rastro-*` theme.
7
+ */
8
+ export declare function Overlay({ role, labelledBy, describedBy, side, initialFocus, onClose, children, }: {
9
+ role?: "dialog" | "alertdialog";
10
+ labelledBy: string;
11
+ describedBy?: string;
12
+ /** A sheet on the right instead of a centered dialog. */
13
+ side?: boolean;
14
+ initialFocus?: RefObject<HTMLElement | null>;
15
+ onClose: () => void;
16
+ children: ReactNode;
17
+ }): import("react").JSX.Element;
18
+ //# sourceMappingURL=Overlay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Overlay.d.ts","sourceRoot":"","sources":["../../../src/ui/integrations/Overlay.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAG1E;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,EACtB,IAAe,EACf,UAAU,EACV,WAAW,EACX,IAAY,EACZ,YAAY,EACZ,OAAO,EACP,QAAQ,GACT,EAAE;IACD,IAAI,CAAC,EAAE,QAAQ,GAAG,aAAa,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAC7C,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,SAAS,CAAC;CACrB,+BAiCA"}
@@ -0,0 +1,36 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useEffect, useRef } from "react";
3
+ import { useModal } from "./overlay.js";
4
+ /**
5
+ * A modal layer on a native `<dialog>`: `showModal()` puts it in the top
6
+ * layer, above a host whose ancestors transform or contain (where `position:
7
+ * fixed` would be trapped), and makes the page behind it inert. It stays in
8
+ * the DOM where it is rendered, so it inherits the host's `--rastro-*` theme.
9
+ */
10
+ export function Overlay({ role = "dialog", labelledBy, describedBy, side = false, initialFocus, onClose, children, }) {
11
+ const ref = useRef(null);
12
+ useEffect(() => {
13
+ const dialog = ref.current;
14
+ if (!dialog || dialog.open)
15
+ return;
16
+ // jsdom and old engines lack showModal: an open dialog still renders.
17
+ if (typeof dialog.showModal === "function")
18
+ dialog.showModal();
19
+ else
20
+ dialog.setAttribute("open", "");
21
+ // Closing first lifts the page's inertness, so the opener can take focus
22
+ // back (useModal's cleanup runs right after this one).
23
+ return () => {
24
+ if (typeof dialog.close === "function")
25
+ dialog.close();
26
+ };
27
+ }, []);
28
+ useModal(ref, onClose, initialFocus);
29
+ return (_jsx("dialog", { ref: ref, className: "rastro-integrations__scrim", "data-side": side ? "" : undefined, role: role === "alertdialog" ? "alertdialog" : undefined, "aria-modal": "true", "aria-labelledby": labelledBy, "aria-describedby": describedBy,
30
+ // Esc is handled by useModal so React state stays the source of truth.
31
+ onCancel: (event) => event.preventDefault(), onClick: (event) => {
32
+ if (event.target === event.currentTarget)
33
+ onClose();
34
+ }, children: children }));
35
+ }
36
+ //# sourceMappingURL=Overlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Overlay.js","sourceRoot":"","sources":["../../../src/ui/integrations/Overlay.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAkC,MAAM,OAAO,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC;;;;;GAKG;AACH,MAAM,UAAU,OAAO,CAAC,EACtB,IAAI,GAAG,QAAQ,EACf,UAAU,EACV,WAAW,EACX,IAAI,GAAG,KAAK,EACZ,YAAY,EACZ,OAAO,EACP,QAAQ,GAUT;IACC,MAAM,GAAG,GAAG,MAAM,CAAoB,IAAI,CAAC,CAAC;IAC5C,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC;QAC3B,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI;YAAE,OAAO;QACnC,sEAAsE;QACtE,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,UAAU;YAAE,MAAM,CAAC,SAAS,EAAE,CAAC;;YAC1D,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACrC,yEAAyE;QACzE,uDAAuD;QACvD,OAAO,GAAG,EAAE;YACV,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,UAAU;gBAAE,MAAM,CAAC,KAAK,EAAE,CAAC;QACzD,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IACP,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;IACrC,OAAO,CACL,iBACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAC,4BAA4B,eAC3B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,EAChC,IAAI,EAAE,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,gBAC7C,MAAM,qBACA,UAAU,sBACT,WAAW;QAC7B,uEAAuE;QACvE,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAC3C,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACjB,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,aAAa;gBAAE,OAAO,EAAE,CAAC;QACtD,CAAC,YAEA,QAAQ,GACF,CACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { type ReactNode } from "react";
2
+ export interface MenuItem {
3
+ label: string;
4
+ onSelect: () => void;
5
+ tone?: "danger";
6
+ disabled?: boolean;
7
+ }
8
+ /** The row's "⋯": the client's other actions, reachable by keyboard. */
9
+ export declare function RowMenu({ label, items, trigger: triggerContent, }: {
10
+ label: string;
11
+ items: readonly MenuItem[];
12
+ /** A visible trigger ("+ Ligar pixel"); the "⋯" icon without it. */
13
+ trigger?: ReactNode;
14
+ }): import("react").JSX.Element | null;
15
+ //# sourceMappingURL=RowMenu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RowMenu.d.ts","sourceRoot":"","sources":["../../../src/ui/integrations/RowMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAIf,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wEAAwE;AACxE,wBAAgB,OAAO,CAAC,EACtB,KAAK,EACL,KAAK,EACL,OAAO,EAAE,cAAc,GACxB,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,QAAQ,EAAE,CAAC;IAC3B,oEAAoE;IACpE,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB,sCA+EA"}
@@ -0,0 +1,47 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useId, useRef, useState, } from "react";
3
+ import { Icon } from "./Icons.js";
4
+ import { useDismiss } from "./overlay.js";
5
+ /** The row's "⋯": the client's other actions, reachable by keyboard. */
6
+ export function RowMenu({ label, items, trigger: triggerContent, }) {
7
+ const id = useId();
8
+ const [open, setOpen] = useState(false);
9
+ const trigger = useRef(null);
10
+ const menu = useRef(null);
11
+ useDismiss(open, [trigger, menu], () => setOpen(false));
12
+ useEffect(() => {
13
+ if (open)
14
+ menu.current
15
+ ?.querySelector("button:not([disabled])")
16
+ ?.focus();
17
+ }, [open]);
18
+ const onKeyDown = (event) => {
19
+ const buttons = [
20
+ ...(menu.current?.querySelectorAll("button:not([disabled])") ?? []),
21
+ ];
22
+ const at = buttons.indexOf(document.activeElement);
23
+ if (event.key === "ArrowDown" || event.key === "ArrowUp") {
24
+ event.preventDefault();
25
+ const step = event.key === "ArrowDown" ? 1 : -1;
26
+ buttons[(at + step + buttons.length) % buttons.length]?.focus();
27
+ }
28
+ else if (event.key === "Escape") {
29
+ setOpen(false);
30
+ trigger.current?.focus();
31
+ }
32
+ else if (event.key === "Tab") {
33
+ setOpen(false);
34
+ }
35
+ };
36
+ if (items.length === 0)
37
+ return null;
38
+ return (_jsxs("div", { className: "rastro-integrations__menu-wrap", children: [_jsx("button", { ref: trigger, type: "button", className: triggerContent
39
+ ? "rastro-integrations__link rastro-integrations__meta"
40
+ : "rastro-integrations__icon-btn", "aria-label": triggerContent ? undefined : label, "aria-haspopup": "menu", "aria-expanded": open, "aria-controls": open ? id : undefined, onClick: () => setOpen((value) => !value), children: triggerContent ?? _jsx(Icon, { name: "dots" }) }), open && (_jsx("div", { ref: menu, id: id, role: "menu", "aria-label": label, className: "rastro-integrations__card rastro-integrations__menu", onKeyDown: onKeyDown, children: items.map((item) => (_jsx("button", { type: "button", role: "menuitem", "data-tone": item.tone, disabled: item.disabled, onClick: () => {
41
+ setOpen(false);
42
+ // A dialog the item opens returns focus here when it closes.
43
+ trigger.current?.focus();
44
+ item.onSelect();
45
+ }, children: item.label }, item.label))) }))] }));
46
+ }
47
+ //# sourceMappingURL=RowMenu.js.map