@fayz-ai/core 0.9.0 → 0.11.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 (218) hide show
  1. package/README.md +2 -2
  2. package/dist/access/index.js.map +1 -1
  3. package/dist/chunk-BEGXYHS4.js +566 -0
  4. package/dist/chunk-BEGXYHS4.js.map +1 -0
  5. package/dist/chunk-ED6NBH6U.js +348 -0
  6. package/dist/chunk-ED6NBH6U.js.map +1 -0
  7. package/dist/chunk-EWKX4VUM.js +429 -0
  8. package/dist/chunk-EWKX4VUM.js.map +1 -0
  9. package/dist/chunk-LARZWDHA.js +319 -0
  10. package/dist/chunk-LARZWDHA.js.map +1 -0
  11. package/dist/chunk-OXQGRJZT.js +125 -0
  12. package/dist/chunk-OXQGRJZT.js.map +1 -0
  13. package/dist/chunk-RRYFXUQX.js +1247 -0
  14. package/dist/chunk-RRYFXUQX.js.map +1 -0
  15. package/dist/{chunk-5RJVUC6J.js → chunk-TDI6F6PT.js} +373 -25
  16. package/dist/chunk-TDI6F6PT.js.map +1 -0
  17. package/dist/{chunk-V2MSAUHO.js → chunk-UVKH6RDX.js} +211 -335
  18. package/dist/chunk-UVKH6RDX.js.map +1 -0
  19. package/dist/chunk-V53GR4UT.js +289 -0
  20. package/dist/chunk-V53GR4UT.js.map +1 -0
  21. package/dist/connector-runtime/index.d.ts +15 -0
  22. package/dist/connector-runtime/index.d.ts.map +1 -0
  23. package/dist/connector-runtime/index.js +3 -0
  24. package/dist/connector-runtime/index.js.map +1 -0
  25. package/dist/data/archetype.d.ts.map +1 -1
  26. package/dist/data/backend-env.d.ts +38 -0
  27. package/dist/data/backend-env.d.ts.map +1 -0
  28. package/dist/data/bulk.d.ts +24 -0
  29. package/dist/data/bulk.d.ts.map +1 -1
  30. package/dist/data/cached.d.ts.map +1 -1
  31. package/dist/data/custom-fields.d.ts +5 -0
  32. package/dist/data/custom-fields.d.ts.map +1 -0
  33. package/dist/data/index.d.ts +2 -1
  34. package/dist/data/index.d.ts.map +1 -1
  35. package/dist/data/index.js +3 -1
  36. package/dist/data/mock.d.ts.map +1 -1
  37. package/dist/data/platform-api.d.ts.map +1 -1
  38. package/dist/data/resolve.d.ts.map +1 -1
  39. package/dist/data/supabase.d.ts.map +1 -1
  40. package/dist/data/types.d.ts +8 -0
  41. package/dist/data/types.d.ts.map +1 -1
  42. package/dist/entity/events.d.ts +14 -0
  43. package/dist/entity/events.d.ts.map +1 -0
  44. package/dist/events/envelope.d.ts +31 -0
  45. package/dist/events/envelope.d.ts.map +1 -0
  46. package/dist/events/index.d.ts +4 -0
  47. package/dist/events/index.d.ts.map +1 -1
  48. package/dist/events/log.d.ts +44 -0
  49. package/dist/events/log.d.ts.map +1 -0
  50. package/dist/events/types.d.ts +40 -0
  51. package/dist/events/types.d.ts.map +1 -0
  52. package/dist/fields/store.d.ts +45 -0
  53. package/dist/fields/store.d.ts.map +1 -0
  54. package/dist/i18n/index.d.ts +10 -0
  55. package/dist/i18n/index.d.ts.map +1 -1
  56. package/dist/i18n/index.js +1 -1
  57. package/dist/i18n/shell-translations.en.d.ts.map +1 -1
  58. package/dist/i18n/shell-translations.pt-br.d.ts.map +1 -1
  59. package/dist/index.d.ts +45 -21
  60. package/dist/index.d.ts.map +1 -1
  61. package/dist/index.js +543 -56
  62. package/dist/index.js.map +1 -1
  63. package/dist/integrations/events.d.ts +7 -0
  64. package/dist/integrations/events.d.ts.map +1 -0
  65. package/dist/integrations/index.d.ts +533 -29
  66. package/dist/integrations/index.d.ts.map +1 -1
  67. package/dist/integrations/index.js +3 -1
  68. package/dist/integrations/permissions.d.ts +132 -0
  69. package/dist/integrations/permissions.d.ts.map +1 -0
  70. package/dist/integrations/request.d.ts +170 -0
  71. package/dist/integrations/request.d.ts.map +1 -0
  72. package/dist/integrations/runtime-token.d.ts +33 -0
  73. package/dist/integrations/runtime-token.d.ts.map +1 -0
  74. package/dist/integrations/runtime.d.ts +398 -0
  75. package/dist/integrations/runtime.d.ts.map +1 -0
  76. package/dist/integrations/settings.d.ts +102 -0
  77. package/dist/integrations/settings.d.ts.map +1 -0
  78. package/dist/integrations/store.d.ts +145 -0
  79. package/dist/integrations/store.d.ts.map +1 -0
  80. package/dist/{address/index.d.ts → lib/address.d.ts} +1 -1
  81. package/dist/{address/index.d.ts.map → lib/address.d.ts.map} +1 -1
  82. package/dist/{phone/index.d.ts → lib/phone.d.ts} +1 -1
  83. package/dist/lib/phone.d.ts.map +1 -0
  84. package/dist/{seo/index.d.ts → lib/seo.d.ts} +18 -1
  85. package/dist/lib/seo.d.ts.map +1 -0
  86. package/dist/{tenant/index.d.ts → lib/tenant.d.ts} +1 -1
  87. package/dist/lib/tenant.d.ts.map +1 -0
  88. package/dist/manifest/index.d.ts +1 -1
  89. package/dist/manifest/index.d.ts.map +1 -1
  90. package/dist/messaging/index.d.ts +3 -0
  91. package/dist/messaging/index.d.ts.map +1 -0
  92. package/dist/messaging/registry.d.ts +35 -0
  93. package/dist/messaging/registry.d.ts.map +1 -0
  94. package/dist/messaging/types.d.ts +67 -0
  95. package/dist/messaging/types.d.ts.map +1 -0
  96. package/dist/plugin/index.js +3 -1
  97. package/dist/plugin/runtime.d.ts +17 -0
  98. package/dist/plugin/runtime.d.ts.map +1 -1
  99. package/dist/registry/block-catalog.d.ts +78 -0
  100. package/dist/registry/block-catalog.d.ts.map +1 -0
  101. package/dist/registry/block-constraints.d.ts +64 -0
  102. package/dist/registry/block-constraints.d.ts.map +1 -0
  103. package/dist/registry/block-schema.d.ts +69 -0
  104. package/dist/registry/block-schema.d.ts.map +1 -0
  105. package/dist/registry/blocks.d.ts +84 -0
  106. package/dist/registry/blocks.d.ts.map +1 -0
  107. package/dist/registry/entities.d.ts +179 -0
  108. package/dist/registry/entities.d.ts.map +1 -0
  109. package/dist/registry/extension-points.d.ts +117 -0
  110. package/dist/registry/extension-points.d.ts.map +1 -0
  111. package/dist/registry/handles.d.ts +41 -0
  112. package/dist/registry/handles.d.ts.map +1 -0
  113. package/dist/registry/index.d.ts +41 -41
  114. package/dist/registry/index.d.ts.map +1 -1
  115. package/dist/registry/loaders.d.ts +55 -0
  116. package/dist/registry/loaders.d.ts.map +1 -0
  117. package/dist/registry/registry-class.d.ts +157 -0
  118. package/dist/registry/registry-class.d.ts.map +1 -0
  119. package/dist/registry/schema-check.d.ts +14 -0
  120. package/dist/registry/schema-check.d.ts.map +1 -0
  121. package/dist/router/index.d.ts +78 -1
  122. package/dist/router/index.d.ts.map +1 -1
  123. package/dist/router/index.js +1 -1
  124. package/dist/{shell-translations.pt-br-2GWRQRRP.js → shell-translations.pt-br-BM5ZFSKJ.js} +72 -3
  125. package/dist/shell-translations.pt-br-BM5ZFSKJ.js.map +1 -0
  126. package/dist/telemetry/errors.d.ts +87 -0
  127. package/dist/telemetry/errors.d.ts.map +1 -0
  128. package/dist/testing/index.js +4 -1
  129. package/dist/{testing/index.d.ts → testing.d.ts} +5 -3
  130. package/dist/testing.d.ts.map +1 -0
  131. package/dist/types/analytics.d.ts +213 -0
  132. package/dist/types/analytics.d.ts.map +1 -0
  133. package/dist/types/crud.d.ts +37 -3
  134. package/dist/types/crud.d.ts.map +1 -1
  135. package/dist/types/plugins.d.ts +138 -1
  136. package/dist/types/plugins.d.ts.map +1 -1
  137. package/package.json +9 -17
  138. package/dist/blocks/index.d.ts +0 -25
  139. package/dist/blocks/index.d.ts.map +0 -1
  140. package/dist/chunk-5RJVUC6J.js.map +0 -1
  141. package/dist/chunk-L4TLMYGC.js +0 -42
  142. package/dist/chunk-L4TLMYGC.js.map +0 -1
  143. package/dist/chunk-V2MSAUHO.js.map +0 -1
  144. package/dist/chunk-X5THHG6T.js +0 -77
  145. package/dist/chunk-X5THHG6T.js.map +0 -1
  146. package/dist/chunk-Y2C2FBQP.js +0 -35
  147. package/dist/chunk-Y2C2FBQP.js.map +0 -1
  148. package/dist/chunk-YH25Y4FW.js +0 -311
  149. package/dist/chunk-YH25Y4FW.js.map +0 -1
  150. package/dist/phone/index.d.ts.map +0 -1
  151. package/dist/seo/index.d.ts.map +0 -1
  152. package/dist/shell-translations.pt-br-2GWRQRRP.js.map +0 -1
  153. package/dist/tenant/index.d.ts.map +0 -1
  154. package/dist/testing/index.d.ts.map +0 -1
  155. package/src/access/denial.ts +0 -33
  156. package/src/access/engine.test.ts +0 -48
  157. package/src/access/engine.ts +0 -136
  158. package/src/access/index.ts +0 -14
  159. package/src/access/limits.ts +0 -18
  160. package/src/address/index.ts +0 -188
  161. package/src/app/render.tsx +0 -69
  162. package/src/blocks/index.tsx +0 -68
  163. package/src/data/archetype.ts +0 -255
  164. package/src/data/bulk.ts +0 -35
  165. package/src/data/cached.ts +0 -55
  166. package/src/data/count.test.ts +0 -152
  167. package/src/data/count.ts +0 -131
  168. package/src/data/filters.test.ts +0 -70
  169. package/src/data/filters.ts +0 -90
  170. package/src/data/index.ts +0 -11
  171. package/src/data/mock.ts +0 -90
  172. package/src/data/platform-api.ts +0 -209
  173. package/src/data/refresh.ts +0 -115
  174. package/src/data/resolve.ts +0 -126
  175. package/src/data/supabase.ts +0 -230
  176. package/src/data/types.ts +0 -50
  177. package/src/entity/index.ts +0 -2
  178. package/src/entity/registry.ts +0 -49
  179. package/src/events/index.tsx +0 -82
  180. package/src/i18n/index.ts +0 -476
  181. package/src/i18n/shell-translations.en.ts +0 -875
  182. package/src/i18n/shell-translations.pt-br.ts +0 -873
  183. package/src/index.ts +0 -217
  184. package/src/integrations/index.ts +0 -237
  185. package/src/lib/cache.ts +0 -118
  186. package/src/lib/csv.ts +0 -54
  187. package/src/lib/format.ts +0 -58
  188. package/src/manifest/app-manifest.schema.json +0 -676
  189. package/src/manifest/index.ts +0 -518
  190. package/src/manifest/serialize.ts +0 -52
  191. package/src/phone/index.ts +0 -85
  192. package/src/plugin/createSafeDataProvider.ts +0 -30
  193. package/src/plugin/index.ts +0 -1
  194. package/src/plugin/runtime.ts +0 -331
  195. package/src/registry/index.ts +0 -163
  196. package/src/router/history.ts +0 -86
  197. package/src/router/index.ts +0 -29
  198. package/src/runtime/index.ts +0 -15
  199. package/src/runtime/oauth.ts +0 -219
  200. package/src/search/engine.ts +0 -559
  201. package/src/search/index.ts +0 -25
  202. package/src/search/text.ts +0 -206
  203. package/src/search/types.ts +0 -75
  204. package/src/seo/index.ts +0 -128
  205. package/src/tenant/index.ts +0 -38
  206. package/src/testing/index.ts +0 -116
  207. package/src/types/auth.ts +0 -41
  208. package/src/types/billing.ts +0 -39
  209. package/src/types/crud.ts +0 -184
  210. package/src/types/entities.ts +0 -142
  211. package/src/types/entitlements.ts +0 -45
  212. package/src/types/i18n.ts +0 -7
  213. package/src/types/index.ts +0 -11
  214. package/src/types/org.ts +0 -137
  215. package/src/types/payment.ts +0 -44
  216. package/src/types/permissions.ts +0 -32
  217. package/src/types/plugins.ts +0 -480
  218. package/src/types/theme.ts +0 -8
@@ -94,8 +94,38 @@ var shellTranslationsEn = {
94
94
  "crud.list.searchPlaceholder": "Search {{entities}}...",
95
95
  "crud.list.allFacet": "All",
96
96
  "crud.list.addButton": "+ Add {{entity}}",
97
+ "crud.list.rangeCount": "{{from}}\u2013{{to}} of {{total}} {{entities}}",
98
+ "crud.list.pageOf": "{{page}} / {{pages}}",
99
+ "crud.list.prevPage": "Previous page",
100
+ "crud.list.nextPage": "Next page",
101
+ "crud.list.emptyFiltered": "No {{entities}} match this search",
102
+ "crud.list.emptyHint": "Your {{entities}} will show up here once you add them.",
103
+ "crud.list.loadFailed": "Could not load the {{entities}}",
104
+ "crud.list.refresh": "Refresh",
105
+ "crud.list.sort": "Sort",
106
+ "crud.list.sortBy": "Sort by",
107
+ "crud.list.sortAsc": "Ascending",
108
+ "crud.list.sortDesc": "Descending",
109
+ "crud.list.sortCreatedAt": "Created at",
110
+ "crud.list.sortUpdatedAt": "Last updated",
111
+ "crud.list.selectRow": "Select row",
112
+ "crud.list.selectAllRows": "Select all rows",
113
+ "crud.list.selectedOne": "1 selected",
114
+ "crud.list.selectedMany": "{{count}} selected",
115
+ "crud.list.selectAllCount": "Select all {{total}}",
116
+ "crud.list.deselectAll": "Deselect all",
117
+ "crud.list.bulkActions": "Actions for the selection",
118
+ "crud.list.moreActions": "More actions",
119
+ "crud.list.bulkDelete": "Delete",
120
+ "crud.list.bulkDeleteTitle": "Delete {{count}} {{entities}}?",
121
+ "crud.list.bulkDeleteConfirm": "The {{count}} selected records will be deleted. This action cannot be undone.",
122
+ "crud.list.bulkDeleteDone": "{{count}} deleted",
123
+ "crud.list.bulkDeleteFailed": "{{count}} could not be deleted",
97
124
  "crud.detail.notFound": "{{entity}} not found.",
98
125
  "crud.detail.backTo": "Back to {{entities}}",
126
+ "crud.detail.createdAt": "Created {{date}}",
127
+ "crud.detail.createdBy": "by {{user}}",
128
+ "crud.detail.updatedAt": "Last edited {{date}}",
99
129
  "crud.form.addTitle": "Add {{entity}}",
100
130
  "crud.form.editTitle": "Edit {{entity}}",
101
131
  "crud.form.createSubtitle": "Create a new {{entity}}.",
@@ -104,6 +134,8 @@ var shellTranslationsEn = {
104
134
  "crud.form.selectPlaceholder": "Select {{label}}...",
105
135
  "crud.form.saveError": "Failed to save {{entity}}",
106
136
  "crud.form.saving": "Saving...",
137
+ "crud.form.changeImage": "Change image",
138
+ "crud.form.imageAfterSave": "Photo after saving",
107
139
  "crud.form.requiredIndicator": "*",
108
140
  "crud.import.action": "Import",
109
141
  "crud.import.title": "Import {{entity}}",
@@ -378,6 +410,12 @@ var shellTranslationsEn = {
378
410
  "app.accessDenied.message": "You don't have permission to view this page.",
379
411
  "shell.accessDenied.title": "Access restricted",
380
412
  "shell.accessDenied.message": "You don't have permission to view this page.",
413
+ "shell.error.title": "This page could not be loaded",
414
+ "shell.error.message": "Something went wrong on our side. The rest of the system keeps working \u2014 you can go back and try again.",
415
+ "shell.error.retry": "Try again",
416
+ "shell.error.copy": "Copy error details",
417
+ "shell.error.copied": "Copied",
418
+ "shell.error.reference": "Mention this code when contacting support",
381
419
  "organization.workspaces": "Workspaces",
382
420
  "organization.onlyWorkspace": "This is your only workspace.",
383
421
  "auth.login.enterCredentials": "Enter your credentials to access your account",
@@ -417,6 +455,9 @@ var shellTranslationsEn = {
417
455
  "billing.paywall.upgradeRequired": "Upgrade Required",
418
456
  "billing.paywall.viewPlans": "View Plans",
419
457
  "chat.defaultTitle": "Assistant",
458
+ "assistant.invite.placeholder": "Ask about your business...",
459
+ "assistant.invite.dismiss": "Not now",
460
+ "assistant.invite.suggested": "Suggested",
420
461
  "chat.tryAsking": "Try asking",
421
462
  "chat.fab.tryIt": "Try it",
422
463
  "chat.fab.dismiss": "Don't show suggestions here",
@@ -873,7 +914,38 @@ var shellTranslationsEn = {
873
914
  "org.connectionError.title": "Connection failed",
874
915
  "org.connectionError.description": "Unable to connect to the server. Please check your internet connection and try again.",
875
916
  "org.connectionError.retry": "Try again",
876
- "app.mockMode.banner": "You are in offline mode. Data shown may not be up to date."
917
+ "app.mockMode.banner": "You are in offline mode. Data shown may not be up to date.",
918
+ // Analytics control bar — the range/compare/filter row every analytics
919
+ // surface shares. Lives in the shell dictionary and not in a plugin's,
920
+ // because the bar itself ships in @fayz-ai/ui and is mounted by whichever
921
+ // surface needs it.
922
+ "analytics.range.today": "Today",
923
+ "analytics.range.yesterday": "Yesterday",
924
+ "analytics.range.last_7_days": "Last 7 days",
925
+ "analytics.range.last_30_days": "Last 30 days",
926
+ "analytics.range.last_90_days": "Last 90 days",
927
+ "analytics.range.this_month": "This month",
928
+ "analytics.range.last_month": "Last month",
929
+ "analytics.range.this_quarter": "This quarter",
930
+ "analytics.range.this_year": "This year",
931
+ "analytics.range.custom": "Custom range",
932
+ "analytics.range.label": "Period",
933
+ "analytics.range.from": "From",
934
+ "analytics.range.to": "To",
935
+ "analytics.compare.previous_period": "Previous period",
936
+ "analytics.compare.previous_year": "Previous year",
937
+ "analytics.compare.none": "No comparison",
938
+ "analytics.compare.label": "Compare",
939
+ "analytics.filters": "Filters",
940
+ "analytics.filters.search": "Search filters",
941
+ "analytics.filters.none": "No filters match",
942
+ "analytics.filters.noOptions": "No options available",
943
+ "analytics.filters.apply": "Apply",
944
+ "analytics.filters.clear": "Clear",
945
+ "analytics.filters.general": "General",
946
+ "analytics.filters.selected": "{{count}} selected",
947
+ "analytics.filters.remove": "Remove filter",
948
+ "analytics.refresh": "Refresh"
877
949
  };
878
950
 
879
951
  // src/i18n/index.ts
@@ -896,7 +968,8 @@ function useTranslation() {
896
968
  const fallback = config.translations[config.defaultLocale] ?? {};
897
969
  const gLocale = _globalTranslations[locale] ?? {};
898
970
  const gFallback = _globalTranslations[config.defaultLocale] ?? {};
899
- let raw = localizedTranslations[key] ?? gLocale[key] ?? fallback[key] ?? gFallback[key] ?? key;
971
+ const gEnglish = _globalTranslations.en ?? {};
972
+ let raw = localizedTranslations[key] ?? gLocale[key] ?? fallback[key] ?? gFallback[key] ?? gEnglish[key] ?? key;
900
973
  if (params) {
901
974
  for (const [k, v] of Object.entries(params)) {
902
975
  raw = raw.replace(new RegExp(`\\{\\{${k}\\}\\}`, "g"), String(v));
@@ -938,10 +1011,19 @@ function useLocaleStore() {
938
1011
  function getCurrentLocale() {
939
1012
  return _localeStore.locale;
940
1013
  }
1014
+ var LOCALE_STORAGE_KEY = "saas-core:locale";
1015
+ function tl(en, ptBR) {
1016
+ try {
1017
+ const locale = globalThis.localStorage?.getItem(LOCALE_STORAGE_KEY) ?? "pt-BR";
1018
+ return locale.startsWith("pt") ? ptBR : en;
1019
+ } catch {
1020
+ return ptBR;
1021
+ }
1022
+ }
941
1023
  function setCurrentLocale(locale) {
1024
+ void preloadLocale(locale);
942
1025
  if (_localeStore.locale === locale) return;
943
1026
  _localeStore.setLocale(locale);
944
- void preloadLocale(locale);
945
1027
  _localeListeners.forEach((listener) => listener());
946
1028
  }
947
1029
  var coreTranslations = {
@@ -957,7 +1039,7 @@ var coreTranslations = {
957
1039
  "common.discard": "Discard",
958
1040
  "common.back": "Back",
959
1041
  "common.formIncomplete": "Fill in the required fields before saving.",
960
- "connectors.title": "Integrations",
1042
+ "connectors.title": "Connectors",
961
1043
  "connectors.subtitle": "Connect external providers to this module.",
962
1044
  "connectors.connected": "Connected",
963
1045
  "connectors.notConnected": "Not connected",
@@ -971,12 +1053,37 @@ var coreTranslations = {
971
1053
  "connectors.configure": "Configure",
972
1054
  "connectors.hubSubtitle": "Apps, assistants and providers connected to this organization.",
973
1055
  "connectors.add": "Add connector",
974
- "connectors.addSubtitle": "Integrations available on Fayz for this organization.",
1056
+ "connectors.addSubtitle": "What this app can connect today \u2014 and what would come with another module.",
1057
+ "connectors.addSubtitleScoped": "What this app can connect for this section.",
1058
+ "connectors.addEmptyTitle": "Nothing to connect here yet",
1059
+ // No "install the module": the person reading this cannot. Modules are
1060
+ // chosen when the app is built, so the honest next step is the assistant.
1061
+ "connectors.addEmptyBody": "Integrations arrive with the modules this app was built with. Tell the assistant which provider you need.",
1062
+ "connectors.sectionInstalled": "Installed",
1063
+ "connectors.sectionOtherModule": "Available with another module",
1064
+ "connectors.otherModuleBody": "Fayz has these, but this app was not built with the module that hosts them. Modules arrive with a new version of the app.",
1065
+ "connectors.requiresModule": "Needs the {{module}} module",
1066
+ "connectors.sectionSoon": "Coming soon",
1067
+ // The module is here; the integration is not. Saying which is missing is
1068
+ // the whole reason this is a section and not a chip on the list below.
1069
+ "connectors.soonBody": "Part of the modules this app already has. Not ready to connect yet \u2014 you will see it here when it is.",
1070
+ "connectors.soonNote": "Being built",
1071
+ "connectors.soonChip": "coming soon",
1072
+ // The assistant's card. "Connect" is the same verb the journey uses, so the
1073
+ // button promises the screen it opens — never that anything was connected.
1074
+ "connectors.cardConnect": "Connect",
1075
+ "connectors.cardConfigure": "Finish setting up",
1076
+ "connectors.cardOpen": "See connection",
1077
+ "connectors.askMore": "Didn\u2019t find what you need?",
1078
+ "connectors.askMoreCta": "Ask the assistant",
1079
+ "connectors.askMoreDraft": "I need to integrate this app with ",
975
1080
  "connectors.search": "Search integration\u2026",
1081
+ "connectors.noneFoundTitle": "Nothing found",
976
1082
  "connectors.noneFound": "No integration found for \u201C{{query}}\u201D.",
977
1083
  "connectors.viewAll": "See every connector",
1084
+ "connectors.viewCategory": "See other {{category}} connectors",
1085
+ "connectors.viewSimilar": "See other connectors like these",
978
1086
  "connectors.groupMine": "In this organization",
979
- "connectors.groupOffered": "Offered by Fayz",
980
1087
  "connectors.docs": "Provider documentation",
981
1088
  "connectors.builtIn": "native",
982
1089
  "connectors.partOfApp": "part of the app",
@@ -984,32 +1091,132 @@ var coreTranslations = {
984
1091
  "connectors.plane.agentic.desc": "The assistant uses the provider\u2019s own tools on demand. Nothing is copied.",
985
1092
  "connectors.plane.sync": "Sync",
986
1093
  "connectors.plane.sync.desc": "A pipeline keeps a copy of the data inside the app.",
1094
+ "connectors.plane.request": "On demand",
1095
+ "connectors.plane.request.desc": "The provider is asked at the moment of use. The answer is not stored.",
987
1096
  "connectors.plane.recommended": "recommended",
988
1097
  "connectors.plane.undecided": "How this one is resolved is decided by Fayz when the integration ships.",
989
1098
  "connectors.plane.switched": "Mode changed",
990
1099
  "connectors.plane.lockedHint": "This connection cannot change mode after the fact \u2014 disconnect and connect again.",
991
1100
  "connectors.direction.inbound": "inbound",
992
1101
  "connectors.direction.outbound": "outbound",
993
- "connectors.state.connected": "connected",
994
- "connectors.state.ready": "ready to connect",
995
- "connectors.state.catalog": "available on Fayz",
996
- "connectors.state.soon": "coming soon",
1102
+ // Badge labels: short enough to sit beside a name, and identical in the
1103
+ // list and on the connection's own header.
1104
+ "connectors.state.connected": "Connected",
1105
+ "connectors.state.needs_setup": "Needs setup",
1106
+ "connectors.state.ready": "Not connected",
1107
+ "connectors.needsSetup": "Connected \u2014 still needs setting up",
1108
+ "connectors.trigger.on-write": "on save",
1109
+ "connectors.trigger.scheduled": "scheduled",
1110
+ "connectors.trigger.manual": "manual",
1111
+ "connectors.trigger.webhook": "provider notice",
1112
+ "connectors.authorize.oauthOnly": "Nothing to fill in: you authorize on the provider\u2019s own screen and come back.",
1113
+ "connectors.authorize.nothingToFill": "Nothing to fill in: this provider\u2019s key is registered in Fayz. How it behaves is set up right after connecting.",
1114
+ // Not every partner hands a code back on a redirect. AppMax issues the keys
1115
+ // when you INSTALL the app inside its own panel, so the honest instruction
1116
+ // is the two-step gesture, not a Connect button that could never finish.
1117
+ // Deliberately provider-agnostic: not every provider has a "Fayz app" to
1118
+ // install. AbacatePay's merchant CREATES their own key, and the old wording
1119
+ // sent them hunting for an app that does not exist.
1120
+ "connectors.authorize.installFirst": "Get the key from your {{name}} panel and paste it here.",
1121
+ "connectors.authorize.installAt": "Open the {{name}} panel",
1122
+ "connectors.settings.title": "How it works",
1123
+ "connectors.settings.subtitle": "Change any of this whenever you like \u2014 it does not touch the connection.",
1124
+ "connectors.settings.save": "Save settings",
1125
+ "connectors.settings.saved": "Settings saved",
1126
+ "connectors.settings.required": "Needed for this integration to work.",
1127
+ "connectors.settings.missingHint": "Fill this in for the integration to start working.",
1128
+ "connectors.moments.title": "When it acts",
1129
+ "connectors.moments.calls": "Calls",
1130
+ "connectors.moments.callsHint": "The app calls the connector at this moment.",
1131
+ "connectors.moments.eventsHint": "Each of these is delivered by the integration itself today \u2014 there is no general dispatch yet.",
1132
+ "connectors.moments.touches": "Reaches",
1133
+ "connectors.permissions.title": "Permissions",
1134
+ "connectors.permissions.data": "Records",
1135
+ "connectors.permissions.events": "Events",
1136
+ "connectors.permissions.action.read": "read",
1137
+ "connectors.permissions.action.write": "change",
1138
+ "connectors.permissions.action.listen": "listen",
1139
+ "connectors.permissions.action.emit": "publish",
1140
+ "connectors.permissions.sensitive": "sensitive",
1141
+ "connectors.permissions.noteLabel": "How to read this",
1142
+ // The sentence the whole screen stands on. Nothing enforces a permission
1143
+ // today (FAY-1348 §D7 is unbuilt), so this states what the list IS and
1144
+ // refuses to imply the platform polices it. See ConnectorPermissions.tsx.
1145
+ "connectors.permissions.notEnforced": "Declared by the connector and shown before you authorize. Fayz does not yet use it to block access.",
1146
+ "connectors.permissions.undeclared": "This connector has not stated what it needs access to yet.",
997
1147
  "connectors.journey.what": "What it does",
998
1148
  "connectors.journey.how": "How it gets resolved",
999
1149
  "connectors.journey.authorize": "Authorize",
1150
+ "connectors.journey.connectAccount": "Connect the account",
1000
1151
  "connectors.journey.access": "Access",
1001
1152
  "connectors.journey.after": "Once connected",
1153
+ "connectors.missingNamed": "Still to choose: {{list}}",
1154
+ "connectors.tab.overview": "Overview",
1155
+ "connectors.tab.runs": "Syncs",
1156
+ "connectors.tab.settings": "Settings",
1157
+ // An empty history is the state a healthy new connection is IN, and it stays
1158
+ // meaningful once the scheduler lands (FAY-1405): it will then mean the
1159
+ // clock has not come round yet, never that something broke.
1160
+ "connectors.runs.empty": "Nothing has run yet. Empty is not a failure \u2014 no sync has been executed since you connected. The first one happens the next time one of this connector\u2019s moments occurs.",
1161
+ "connectors.runs.emptyFirstLoad": "The first run brings a sample of {{count}} records in seconds; the rest arrives in the background.",
1162
+ "connectors.runs.backfilling": "A full load is running in the background \u2014 large catalogues can take a few minutes.",
1163
+ "connectors.runs.status.success": "Done",
1164
+ "connectors.runs.status.partial": "Partly done",
1165
+ "connectors.runs.status.error": "Failed",
1166
+ "connectors.runs.status.running": "Running",
1167
+ "connectors.runs.from": "from {{name}}",
1168
+ "connectors.runs.to": "to {{name}}",
1169
+ "connectors.runs.counts": "{{written}} saved of {{fetched}} read",
1170
+ "connectors.runs.nothingToDo": "Nothing to bring across",
1171
+ // The "should I do something?" answer, said once and only under the newest
1172
+ // failure. Cursors survive a failed run, so this is a fact, not comfort.
1173
+ "connectors.runs.failedHint": "Nothing was lost: the next run picks up where this one stopped.",
1174
+ "connectors.when.now": "just now",
1175
+ "connectors.when.minutes": "{{count}} min ago",
1176
+ "connectors.when.hours": "{{count}} h ago",
1177
+ "connectors.when.days": "{{count}} d ago",
1178
+ "connectors.overview.resolves": "How it resolves",
1179
+ "connectors.overview.whenItSyncs": "When it syncs",
1180
+ "connectors.overview.reaches": "Data it reaches",
1181
+ "connectors.overview.provider": "From {{name}}",
1182
+ "connectors.entity.booking": "Appointments",
1183
+ "connectors.entity.order": "Orders",
1184
+ "connectors.entity.payment": "Payments",
1185
+ "connectors.entity.shipment": "Shipments",
1186
+ "connectors.entity.shop_customer": "Store customers",
1187
+ "connectors.entity.shop_order": "Store orders",
1188
+ "connectors.entity.shop_product": "Products",
1189
+ "connectors.authorize.elsewhere": "This connection is authorized outside the app.",
1002
1190
  "connectors.after.agentic": "These tools are available to the assistant right now.",
1003
1191
  "connectors.after.willAgentic": "The assistant gains this provider\u2019s tools; no copy of the data is made.",
1004
1192
  "connectors.after.willSync": "A pipeline starts keeping this data in agreement, with mapping and history.",
1193
+ "connectors.after.settingsLater": "How it behaves is set up afterwards, on the connection\u2019s Settings tab.",
1194
+ "connectors.oauth.returned": "Account connected",
1195
+ "connectors.oauth.failed": "The provider did not complete the authorization.",
1196
+ // A consent flow that failed comes back naming a slug from a closed set, not
1197
+ // prose. The slug is a word for engineers — `token_exchange_failed` on a
1198
+ // shop owner's screen is noise — so each one is given a sentence that says
1199
+ // what happened and whether they can do anything about it. An unrecognised
1200
+ // slug falls back to `connectors.oauth.failed` and is never rendered raw.
1201
+ "connectors.oauth.error.config_missing": "This integration is not set up in Fayz yet, so the authorization could not start. There is nothing to fix on your side \u2014 talk to support.",
1202
+ "connectors.oauth.error.invalid_state": "This connection link does not check out. Go back and press Connect again.",
1203
+ "connectors.oauth.error.expired_state": "The connection link expired while you were away. Press Connect again.",
1204
+ "connectors.oauth.error.not_a_member": "Your account does not belong to this organization, so the connection was not saved.",
1205
+ "connectors.oauth.error.provider_denied": "Access was refused on the provider\u2019s screen. To connect, the access has to be allowed.",
1206
+ "connectors.oauth.error.missing_code": "The provider sent you back without the authorization. Try connecting again.",
1207
+ "connectors.oauth.error.token_exchange_failed": "The provider refused the authorization at the last step. Check that you used the right account and try again.",
1208
+ "connectors.oauth.error.token_incomplete": "The provider authorized, but did not return everything needed to keep the connection alive. Try connecting again.",
1209
+ "connectors.oauth.error.store_failed": "The authorization worked, but the connection could not be saved. Try again in a moment.",
1210
+ "connectors.oauth.error.unexpected": "Something went wrong finishing the connection. Try again in a moment.",
1211
+ "connectors.oauth.noStarter": "This app is not linked to a Fayz project that can authorize connections, so there is nowhere to send you. Link the app to Fayz to finish.",
1005
1212
  "connectors.tools": "Assistant tools",
1006
1213
  "connectors.entitiesCount": "reaches {{count}} record types",
1007
1214
  "connectors.entitiesList": "Records: {{list}}",
1008
1215
  "connectors.capabilitiesUnknown": "This connector has not published what it reaches yet.",
1009
1216
  "connectors.readOnly": "read only",
1010
1217
  "connectors.readWrite": "read and write",
1011
- "connectors.needsPlugin": "Fayz has this integration built, but this app does not have the plugin that hosts it.",
1012
- "connectors.soonBody": "Fayz lists this provider, but the integration is not wired yet.",
1218
+ "connectors.listensTo": "Listens to",
1219
+ "connectors.listensToHint": "While it is connected, these facts are handed to the integration. Disconnecting stops all of them.",
1013
1220
  "connectors.connectedOn": "Connected on {{date}}",
1014
1221
  "connectors.lastUsed": "used {{when}}",
1015
1222
  "connectors.neverUsed": "not used yet",
@@ -1025,6 +1232,26 @@ var coreTranslations = {
1025
1232
  "connectors.noProjectBody": "This app is not linked to a Fayz project.",
1026
1233
  "connectors.noOrg": "No organization",
1027
1234
  "connectors.noOrgBody": "Pick an organization to see its connections.",
1235
+ "connectors.credentials.held": "The key goes to Fayz, encrypted. It is never stored in this app\u2019s database.",
1236
+ "connectors.credentials.noSink": "This app is not connected to a Fayz project that can hold credentials, so there is nowhere safe to keep this key. Connect the app to Fayz to finish.",
1237
+ // A module named to someone who does not have it. The plugin id is not a
1238
+ // label anywhere else because an installed module carries its own (usually
1239
+ // built from the app's config); a module the app lacks has nothing to ask.
1240
+ // Every id in connector-map.generated.ts must appear here — asserted in
1241
+ // packages/admin/test/connect/available.test.ts.
1242
+ // Every module a connector row can name. The id is the manifest's, so it is
1243
+ // `custom_forms` and not `forms` — the admin suite asserts each one has a
1244
+ // label here, because a missing one prints the raw id to a business owner.
1245
+ "modules.agenda": "Scheduling",
1246
+ "modules.blog": "Blog",
1247
+ "modules.courses": "Courses",
1248
+ "modules.crm": "CRM",
1249
+ "modules.custom_forms": "Forms",
1250
+ "modules.financial": "Financial",
1251
+ "modules.marketing": "Marketing",
1252
+ "modules.reports": "Analytics",
1253
+ "modules.reputation": "Reputation",
1254
+ "modules.shop": "Shop",
1028
1255
  "saveBar.unsaved": "Unsaved changes",
1029
1256
  "common.add": "Add",
1030
1257
  "common.loading": "Loading...",
@@ -1110,7 +1337,7 @@ var coreTranslations = {
1110
1337
  "common.discard": "Descartar",
1111
1338
  "common.back": "Voltar",
1112
1339
  "common.formIncomplete": "Preencha os campos obrigat\xF3rios antes de salvar.",
1113
- "connectors.title": "Integra\xE7\xF5es",
1340
+ "connectors.title": "Conectores",
1114
1341
  "connectors.subtitle": "Conecte provedores externos a este m\xF3dulo.",
1115
1342
  "connectors.connected": "Conectado",
1116
1343
  "connectors.notConnected": "N\xE3o conectado",
@@ -1124,12 +1351,31 @@ var coreTranslations = {
1124
1351
  "connectors.configure": "Configurar",
1125
1352
  "connectors.hubSubtitle": "Aplicativos, assistentes e provedores ligados a esta organiza\xE7\xE3o.",
1126
1353
  "connectors.add": "Adicionar conector",
1127
- "connectors.addSubtitle": "Integra\xE7\xF5es dispon\xEDveis no Fayz para esta organiza\xE7\xE3o.",
1354
+ "connectors.addSubtitle": "O que este app j\xE1 pode conectar \u2014 e o que viria com outro m\xF3dulo.",
1355
+ "connectors.addSubtitleScoped": "O que este app pode conectar para esta se\xE7\xE3o.",
1356
+ "connectors.addEmptyTitle": "Ainda n\xE3o h\xE1 o que conectar aqui",
1357
+ "connectors.addEmptyBody": "As integra\xE7\xF5es v\xEAm com os m\xF3dulos com que este app foi montado. Diga ao assistente de qual provedor voc\xEA precisa.",
1358
+ "connectors.sectionInstalled": "Instalados",
1359
+ "connectors.sectionOtherModule": "Dispon\xEDveis com outro m\xF3dulo",
1360
+ "connectors.otherModuleBody": "O Fayz tem estes, mas este app n\xE3o foi montado com o m\xF3dulo que os hospeda. M\xF3dulos entram numa nova vers\xE3o do app.",
1361
+ "connectors.requiresModule": "Requer o m\xF3dulo {{module}}",
1362
+ "connectors.sectionSoon": "Em breve",
1363
+ "connectors.soonBody": "Fazem parte dos m\xF3dulos que este app j\xE1 tem. Ainda n\xE3o d\xE1 para conectar \u2014 quando der, aparece aqui.",
1364
+ "connectors.soonNote": "Em constru\xE7\xE3o",
1365
+ "connectors.soonChip": "em breve",
1366
+ "connectors.cardConnect": "Conectar",
1367
+ "connectors.cardConfigure": "Terminar de configurar",
1368
+ "connectors.cardOpen": "Ver conex\xE3o",
1369
+ "connectors.askMore": "N\xE3o encontrou o que precisa?",
1370
+ "connectors.askMoreCta": "Pe\xE7a ao assistente",
1371
+ "connectors.askMoreDraft": "Preciso integrar este app com ",
1128
1372
  "connectors.search": "Buscar integra\xE7\xE3o\u2026",
1373
+ "connectors.noneFoundTitle": "Nada encontrado",
1129
1374
  "connectors.noneFound": "Nenhuma integra\xE7\xE3o encontrada para \u201C{{query}}\u201D.",
1130
1375
  "connectors.viewAll": "Ver todos os conectores",
1376
+ "connectors.viewCategory": "Ver outros conectores de {{category}}",
1377
+ "connectors.viewSimilar": "Ver outros conectores parecidos",
1131
1378
  "connectors.groupMine": "Nesta organiza\xE7\xE3o",
1132
- "connectors.groupOffered": "Oferecidos pelo Fayz",
1133
1379
  "connectors.docs": "Documenta\xE7\xE3o do provedor",
1134
1380
  "connectors.builtIn": "nativo",
1135
1381
  "connectors.partOfApp": "faz parte do app",
@@ -1137,32 +1383,122 @@ var coreTranslations = {
1137
1383
  "connectors.plane.agentic.desc": "O assistente usa as ferramentas do provedor na hora. Nada \xE9 copiado.",
1138
1384
  "connectors.plane.sync": "Sincroniza\xE7\xE3o",
1139
1385
  "connectors.plane.sync.desc": "Uma esteira mant\xE9m uma c\xF3pia dos dados dentro do app.",
1386
+ "connectors.plane.request": "Sob demanda",
1387
+ "connectors.plane.request.desc": "O provedor \xE9 consultado na hora do uso. A resposta n\xE3o \xE9 guardada.",
1140
1388
  "connectors.plane.recommended": "recomendado",
1141
1389
  "connectors.plane.undecided": "O modo desta integra\xE7\xE3o \xE9 definido pelo Fayz quando ela for ligada.",
1142
1390
  "connectors.plane.switched": "Modo alterado",
1143
1391
  "connectors.plane.lockedHint": "Esta conex\xE3o n\xE3o troca de modo depois de feita \u2014 desconecte e conecte de novo.",
1144
1392
  "connectors.direction.inbound": "entrada",
1145
1393
  "connectors.direction.outbound": "sa\xEDda",
1146
- "connectors.state.connected": "conectado",
1147
- "connectors.state.ready": "pronto para conectar",
1148
- "connectors.state.catalog": "dispon\xEDvel no Fayz",
1149
- "connectors.state.soon": "em breve",
1394
+ "connectors.state.connected": "Conectado",
1395
+ "connectors.state.needs_setup": "Falta configurar",
1396
+ "connectors.state.ready": "N\xE3o conectado",
1397
+ "connectors.needsSetup": "Conectado \u2014 falta configurar",
1398
+ "connectors.trigger.on-write": "ao salvar",
1399
+ "connectors.trigger.scheduled": "agendado",
1400
+ "connectors.trigger.manual": "manual",
1401
+ "connectors.trigger.webhook": "aviso do provedor",
1402
+ "connectors.authorize.oauthOnly": "Nada para preencher: voc\xEA autoriza na tela do pr\xF3prio provedor e volta para c\xE1.",
1403
+ "connectors.authorize.nothingToFill": "Nada para preencher: a chave deste provedor fica registrada no Fayz. Como ele funciona voc\xEA ajusta logo depois de conectar.",
1404
+ // Genérica de propósito: nem todo provedor tem "app da Fayz para instalar".
1405
+ // Na AbacatePay o lojista CRIA a própria chave no painel dele, e a frase
1406
+ // antiga mandava procurar um app que não existe.
1407
+ "connectors.authorize.installFirst": "Pegue a chave no seu painel {{name}} e cole aqui.",
1408
+ "connectors.authorize.installAt": "Abrir o painel da {{name}}",
1409
+ "connectors.settings.title": "Como funciona",
1410
+ "connectors.settings.subtitle": "Voc\xEA pode mudar isso quando quiser \u2014 n\xE3o mexe na conex\xE3o.",
1411
+ "connectors.settings.save": "Salvar configura\xE7\xF5es",
1412
+ "connectors.settings.saved": "Configura\xE7\xF5es salvas",
1413
+ "connectors.settings.required": "Necess\xE1rio para essa integra\xE7\xE3o funcionar.",
1414
+ "connectors.settings.missingHint": "Preencha para a integra\xE7\xE3o come\xE7ar a funcionar.",
1415
+ "connectors.moments.title": "Quando ele age",
1416
+ "connectors.moments.calls": "Chamadas",
1417
+ "connectors.moments.callsHint": "O app aciona o conector nesse momento.",
1418
+ "connectors.moments.eventsHint": "Hoje cada um \xE9 entregue pela pr\xF3pria integra\xE7\xE3o \u2014 ainda n\xE3o existe uma entrega geral.",
1419
+ "connectors.moments.touches": "Alcan\xE7a",
1420
+ "connectors.permissions.title": "Permiss\xF5es",
1421
+ "connectors.permissions.data": "Registros",
1422
+ "connectors.permissions.events": "Eventos",
1423
+ "connectors.permissions.action.read": "ler",
1424
+ "connectors.permissions.action.write": "alterar",
1425
+ "connectors.permissions.action.listen": "ouvir",
1426
+ "connectors.permissions.action.emit": "publicar",
1427
+ "connectors.permissions.sensitive": "sens\xEDvel",
1428
+ "connectors.permissions.noteLabel": "Como ler isto",
1429
+ // A frase em que a tela inteira se apoia. Hoje nada barra uma permissão (o
1430
+ // D7 da FAY-1348 não existe), então isto diz o que a lista É e se recusa a
1431
+ // sugerir que a plataforma fiscaliza. Ver ConnectorPermissions.tsx.
1432
+ "connectors.permissions.notEnforced": "Declarado pelo pr\xF3prio conector e mostrado antes de voc\xEA autorizar. O Fayz ainda n\xE3o usa isso para barrar acesso.",
1433
+ "connectors.permissions.undeclared": "Este conector ainda n\xE3o declarou o que precisa acessar.",
1150
1434
  "connectors.journey.what": "O que ele faz",
1151
1435
  "connectors.journey.how": "Como ele resolve",
1152
1436
  "connectors.journey.authorize": "Autorizar",
1437
+ "connectors.journey.connectAccount": "Conectar a conta",
1153
1438
  "connectors.journey.access": "Acesso",
1154
1439
  "connectors.journey.after": "Depois de conectado",
1440
+ "connectors.missingNamed": "Falta escolher: {{list}}",
1441
+ "connectors.tab.overview": "Vis\xE3o geral",
1442
+ "connectors.tab.runs": "Sincroniza\xE7\xF5es",
1443
+ "connectors.tab.settings": "Configura\xE7\xF5es",
1444
+ // Vazio é o estado de uma conexão nova e saudável, e continua significando
1445
+ // isso quando o agendador chegar (FAY-1405): que a hora ainda não passou, e
1446
+ // nunca que alguma coisa quebrou.
1447
+ "connectors.runs.empty": "Nada rodou ainda. Vazio n\xE3o \xE9 falha \u2014 nenhuma sincroniza\xE7\xE3o foi executada desde que voc\xEA conectou. A primeira acontece no pr\xF3ximo dos momentos deste conector.",
1448
+ "connectors.runs.emptyFirstLoad": "A primeira traz uma amostra de {{count}} registros em segundos; o resto entra em segundo plano.",
1449
+ "connectors.runs.backfilling": "Uma carga completa est\xE1 rodando em segundo plano \u2014 em cat\xE1logos grandes leva alguns minutos.",
1450
+ "connectors.runs.status.success": "Conclu\xEDda",
1451
+ "connectors.runs.status.partial": "Parcial",
1452
+ "connectors.runs.status.error": "Falhou",
1453
+ "connectors.runs.status.running": "Em andamento",
1454
+ "connectors.runs.from": "de {{name}}",
1455
+ "connectors.runs.to": "para {{name}}",
1456
+ "connectors.runs.counts": "{{written}} gravados de {{fetched}} lidos",
1457
+ "connectors.runs.nothingToDo": "Nada para trazer",
1458
+ // A resposta ao "preciso fazer alguma coisa?", dita uma vez e só embaixo da
1459
+ // falha mais recente. O cursor sobrevive à falha — isto é fato, não consolo.
1460
+ "connectors.runs.failedHint": "Nada foi perdido: a pr\xF3xima sincroniza\xE7\xE3o continua de onde esta parou.",
1461
+ "connectors.when.now": "agora",
1462
+ "connectors.when.minutes": "h\xE1 {{count}} min",
1463
+ "connectors.when.hours": "h\xE1 {{count}} h",
1464
+ "connectors.when.days": "h\xE1 {{count}} d",
1465
+ "connectors.overview.resolves": "Como ele resolve",
1466
+ "connectors.overview.whenItSyncs": "Quando ele sincroniza",
1467
+ "connectors.overview.reaches": "Dados que ele alcan\xE7a",
1468
+ "connectors.overview.provider": "Da {{name}}",
1469
+ "connectors.entity.booking": "Agendamentos",
1470
+ "connectors.entity.order": "Pedidos",
1471
+ "connectors.entity.payment": "Pagamentos",
1472
+ "connectors.entity.shipment": "Envios",
1473
+ "connectors.entity.shop_customer": "Clientes da loja",
1474
+ "connectors.entity.shop_order": "Pedidos da loja",
1475
+ "connectors.entity.shop_product": "Produtos",
1476
+ "connectors.authorize.elsewhere": "Esta conex\xE3o \xE9 autorizada fora do app.",
1155
1477
  "connectors.after.agentic": "Essas ferramentas j\xE1 est\xE3o \xE0 m\xE3o do assistente.",
1156
1478
  "connectors.after.willAgentic": "O assistente ganha as ferramentas do provedor; nenhuma c\xF3pia dos dados \xE9 feita.",
1157
1479
  "connectors.after.willSync": "Uma esteira passa a manter esses dados em acordo, com de-para e hist\xF3rico.",
1480
+ "connectors.after.settingsLater": "O jeito de trabalhar \xE9 ajustado depois, na aba Configura\xE7\xF5es da conex\xE3o.",
1481
+ "connectors.oauth.returned": "Conta conectada",
1482
+ "connectors.oauth.failed": "O provedor n\xE3o concluiu a autoriza\xE7\xE3o.",
1483
+ "connectors.oauth.error.config_missing": "Esta integra\xE7\xE3o ainda n\xE3o est\xE1 configurada no Fayz, ent\xE3o a autoriza\xE7\xE3o n\xE3o p\xF4de come\xE7ar. N\xE3o \xE9 nada que voc\xEA resolva por a\xED \u2014 fale com o suporte.",
1484
+ "connectors.oauth.error.invalid_state": "Este link de conex\xE3o n\xE3o confere. Volte e clique em Conectar de novo.",
1485
+ "connectors.oauth.error.expired_state": "O link de conex\xE3o expirou enquanto voc\xEA estava fora. Clique em Conectar de novo.",
1486
+ "connectors.oauth.error.not_a_member": "Sua conta n\xE3o faz parte desta organiza\xE7\xE3o, ent\xE3o a conex\xE3o n\xE3o foi salva.",
1487
+ "connectors.oauth.error.provider_denied": "O acesso foi recusado na tela do provedor. Para conectar, \xE9 preciso permitir o acesso.",
1488
+ "connectors.oauth.error.missing_code": "O provedor devolveu voc\xEA sem a autoriza\xE7\xE3o. Tente conectar de novo.",
1489
+ "connectors.oauth.error.token_exchange_failed": "O provedor recusou a autoriza\xE7\xE3o na \xFAltima etapa. Confira se a conta usada \xE9 a certa e tente de novo.",
1490
+ "connectors.oauth.error.token_incomplete": "O provedor autorizou, mas n\xE3o devolveu tudo que \xE9 preciso para manter a conex\xE3o viva. Tente conectar de novo.",
1491
+ "connectors.oauth.error.store_failed": "A autoriza\xE7\xE3o deu certo, mas n\xE3o foi poss\xEDvel guardar a conex\xE3o. Tente de novo em instantes.",
1492
+ "connectors.oauth.error.unexpected": "Algo deu errado ao concluir a conex\xE3o. Tente de novo em instantes.",
1493
+ "connectors.oauth.noStarter": "Este app n\xE3o est\xE1 ligado a um projeto Fayz que possa autorizar conex\xF5es, ent\xE3o n\xE3o h\xE1 para onde te mandar. Ligue o app ao Fayz para concluir.",
1158
1494
  "connectors.tools": "Ferramentas do assistente",
1159
1495
  "connectors.entitiesCount": "alcan\xE7a {{count}} tipos de registro",
1160
1496
  "connectors.entitiesList": "Registros: {{list}}",
1161
1497
  "connectors.capabilitiesUnknown": "Este conector ainda n\xE3o publicou o que ele alcan\xE7a.",
1162
1498
  "connectors.readOnly": "somente leitura",
1163
1499
  "connectors.readWrite": "leitura e escrita",
1164
- "connectors.needsPlugin": "O Fayz tem essa integra\xE7\xE3o pronta, mas este app n\xE3o tem o plugin que hospeda ela.",
1165
- "connectors.soonBody": "O Fayz lista este provedor, mas a integra\xE7\xE3o ainda n\xE3o foi ligada.",
1500
+ "connectors.listensTo": "Ouve",
1501
+ "connectors.listensToHint": "Enquanto estiver conectada, esses fatos s\xE3o entregues \xE0 integra\xE7\xE3o. Desconectar interrompe todos.",
1166
1502
  "connectors.connectedOn": "Conectado em {{date}}",
1167
1503
  "connectors.lastUsed": "usado {{when}}",
1168
1504
  "connectors.neverUsed": "ainda n\xE3o usado",
@@ -1178,6 +1514,18 @@ var coreTranslations = {
1178
1514
  "connectors.noProjectBody": "Este app n\xE3o est\xE1 ligado a um projeto Fayz.",
1179
1515
  "connectors.noOrg": "Sem organiza\xE7\xE3o",
1180
1516
  "connectors.noOrgBody": "Escolha uma organiza\xE7\xE3o para ver as conex\xF5es dela.",
1517
+ "connectors.credentials.held": "A chave vai criptografada para o Fayz. Ela nunca fica no banco de dados deste app.",
1518
+ "connectors.credentials.noSink": "Este app n\xE3o est\xE1 ligado a um projeto Fayz que possa guardar credenciais, ent\xE3o n\xE3o h\xE1 onde essa chave fique em seguran\xE7a. Ligue o app ao Fayz para concluir.",
1519
+ "modules.agenda": "Agenda",
1520
+ "modules.blog": "Blog",
1521
+ "modules.courses": "Cursos",
1522
+ "modules.crm": "CRM",
1523
+ "modules.custom_forms": "Formul\xE1rios",
1524
+ "modules.financial": "Financeiro",
1525
+ "modules.marketing": "Marketing",
1526
+ "modules.reports": "Relat\xF3rios",
1527
+ "modules.reputation": "Reputa\xE7\xE3o",
1528
+ "modules.shop": "Loja",
1181
1529
  "saveBar.unsaved": "Altera\xE7\xF5es n\xE3o salvas",
1182
1530
  "common.add": "Adicionar",
1183
1531
  "common.loading": "Carregando...",
@@ -1270,7 +1618,7 @@ function mergeTranslations(base, ...overrides) {
1270
1618
  registerTranslations(coreTranslations);
1271
1619
  registerTranslations({ en: shellTranslationsEn });
1272
1620
  var _lazyShellLocales = {
1273
- "pt-BR": () => import('./shell-translations.pt-br-2GWRQRRP.js').then((m) => m.shellTranslationsPtBr)
1621
+ "pt-BR": () => import('./shell-translations.pt-br-BM5ZFSKJ.js').then((m) => m.shellTranslationsPtBr)
1274
1622
  };
1275
1623
  var _loadedShellLocales = /* @__PURE__ */ new Set(["en"]);
1276
1624
  var _pendingShellLocales = /* @__PURE__ */ new Map();
@@ -1292,6 +1640,6 @@ function preloadLocale(locale) {
1292
1640
  return pending;
1293
1641
  }
1294
1642
 
1295
- export { I18nProvider, coreTranslations, getCurrentLocale, mergeTranslations, preloadLocale, registerTranslations, setCurrentLocale, setLocaleStore, useI18nConfig, useTranslation };
1296
- //# sourceMappingURL=chunk-5RJVUC6J.js.map
1297
- //# sourceMappingURL=chunk-5RJVUC6J.js.map
1643
+ export { I18nProvider, coreTranslations, getCurrentLocale, mergeTranslations, preloadLocale, registerTranslations, setCurrentLocale, setLocaleStore, tl, useI18nConfig, useTranslation };
1644
+ //# sourceMappingURL=chunk-TDI6F6PT.js.map
1645
+ //# sourceMappingURL=chunk-TDI6F6PT.js.map