@fayz-ai/plugin-marketing 0.1.1 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAK5E,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,KAAK,EACV,iBAAiB,EACjB,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,cAAc,CAAA;AAGrB,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,UAAU,CAAA;AACnE,OAAO,EAAqB,KAAK,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,WAAW,CAAA;AAChG,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAclE,MAAM,WAAW,sBAAsB;IACrC,yEAAyE;IACzE,MAAM,CAAC,EAAE,eAAe,CAAA;IACxB,yEAAyE;IACzE,UAAU,CAAC,EAAE,eAAe,CAAA;IAC5B,uEAAuE;IACvE,QAAQ,CAAC,EAAE,kBAAkB,EAAE,CAAA;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,CAAA;IACzC,QAAQ,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAA;IACrC,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAA;IACjC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,CAAA;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,YAAY,CAAC,EAAE,qBAAqB,CAAA;IACpC,4DAA4D;IAC5D,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;IACrC,yEAAyE;IACzE,WAAW,CAAC,EAAE,sBAAsB,CAAA;CACrC;AAgCD,wBAAgB,qBAAqB,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,cAAc,CA2HtF;AAED,YAAY,EACV,qBAAqB,EACrB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,cAAc,CAAA;AACrB,YAAY,EACV,kBAAkB,EAClB,eAAe,EACf,QAAQ,EACR,kBAAkB,EAClB,eAAe,GAChB,MAAM,SAAS,CAAA;AAChB,OAAO,EAAE,iBAAiB,EAAE,KAAK,eAAe,EAAE,MAAM,WAAW,CAAA;AACnE,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAO5E,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,KAAK,EACV,iBAAiB,EACjB,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,cAAc,CAAA;AAGrB,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,UAAU,CAAA;AACnE,OAAO,EAAqB,KAAK,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,WAAW,CAAA;AAChG,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAclE,MAAM,WAAW,sBAAsB;IACrC,yEAAyE;IACzE,MAAM,CAAC,EAAE,eAAe,CAAA;IACxB,yEAAyE;IACzE,UAAU,CAAC,EAAE,eAAe,CAAA;IAC5B,uEAAuE;IACvE,QAAQ,CAAC,EAAE,kBAAkB,EAAE,CAAA;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,CAAA;IACzC,QAAQ,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAA;IACrC,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAA;IACjC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,CAAA;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,YAAY,CAAC,EAAE,qBAAqB,CAAA;IACpC,4DAA4D;IAC5D,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;IACrC,yEAAyE;IACzE,WAAW,CAAC,EAAE,sBAAsB,CAAA;CACrC;AAgCD,wBAAgB,qBAAqB,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,cAAc,CAqItF;AAED,YAAY,EACV,qBAAqB,EACrB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,cAAc,CAAA;AACrB,YAAY,EACV,kBAAkB,EAClB,eAAe,EACf,QAAQ,EACR,kBAAkB,EAClB,eAAe,GAChB,MAAM,SAAS,CAAA;AAChB,OAAO,EAAE,iBAAiB,EAAE,KAAK,eAAe,EAAE,MAAM,WAAW,CAAA;AACnE,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAA"}
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import React4, { useEffect } from 'react';
2
2
  import { registerTranslations, getSupabaseClientOptional, useTranslation } from '@fayz-ai/core';
3
+ import { createPluginContext, PluginSettingsPanel, useModuleNavigation, createViewRouter, ModuleActionBar, SettingsGroup, SelectRow, ToggleRow } from '@fayz-ai/saas';
3
4
  import { defineKpiWidget, defineCustomWidget, defineTableWidget, ModulePage, DataTable, SubpageHeader, Button, DashboardCanvas, SegmentedControl, cn, Modal, ModalContent, ModalHeader, ModalTitle, ModalBody, Input, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, ModalFooter, KpiCard as KpiCard$1, Card, CardHeader, CardTitle, CardContent, TableWidget } from '@fayz-ai/ui';
4
- import { createPluginContext, useModuleNavigation, createViewRouter, ModuleActionBar, SettingsGroup, SelectRow, ToggleRow } from '@fayz-ai/saas';
5
5
  import { jsx, jsxs } from 'react/jsx-runtime';
6
6
  import { ChevronRight, Users, Target, Percent, DollarSign, Trash2, Plus, MousePointerClick, Layers, ArrowUpRight, ArrowDownRight, Bike, Utensils, DoorOpen, MessageCircle, Instagram, Mail, Globe, Megaphone, Search, Link2, Trophy } from 'lucide-react';
7
7
  import { createStore } from 'zustand/vanilla';
@@ -577,6 +577,42 @@ function SettingsView() {
577
577
  ] })
578
578
  ] });
579
579
  }
580
+
581
+ // src/registries.ts
582
+ var KIND_OPTIONS = [
583
+ { value: "paid", label: "Paid" },
584
+ { value: "organic", label: "Organic" },
585
+ { value: "social", label: "Social" },
586
+ { value: "referral", label: "Referral" },
587
+ { value: "direct", label: "Direct" },
588
+ { value: "outbound", label: "Outbound" }
589
+ ];
590
+ var channelEntity = {
591
+ name: "Channel",
592
+ namePlural: "Channels",
593
+ icon: "Radio",
594
+ displayField: "label",
595
+ defaultSort: "label",
596
+ fields: [
597
+ { key: "label", label: "Channel", type: "text", required: true, showInTable: true, searchable: true },
598
+ { key: "kind", label: "Type", type: "select", options: KIND_OPTIONS, showInTable: true },
599
+ { key: "icon", label: "Icon", type: "text", showInTable: true }
600
+ ],
601
+ facets: [{ field: "kind" }]
602
+ };
603
+ function buildMarketingRegistries(channels) {
604
+ return [
605
+ {
606
+ id: "channels",
607
+ entity: channelEntity,
608
+ icon: "Radio",
609
+ description: "Acquisition channels tracked for this workspace",
610
+ display: "table",
611
+ readOnly: true,
612
+ seedData: channels.map((c) => ({ id: c.id, label: c.label, kind: c.kind, icon: c.icon }))
613
+ }
614
+ ];
615
+ }
580
616
  function useEnsureMarketingData() {
581
617
  const overview = useMarketingStore((s) => s.overview);
582
618
  const loading = useMarketingStore((s) => s.loading);
@@ -1228,10 +1264,17 @@ function createMarketingPlugin(options) {
1228
1264
  React4.createElement(MarketingPage, { config, provider, store })
1229
1265
  );
1230
1266
  PageComponent.displayName = "MarketingPage";
1267
+ const marketingRegistries = buildMarketingRegistries(config.channels);
1231
1268
  const SettingsComponent = () => React4.createElement(
1232
1269
  MarketingContextProvider,
1233
1270
  { config, provider, store },
1234
- React4.createElement(SettingsView)
1271
+ React4.createElement(PluginSettingsPanel, {
1272
+ title: config.labels.settings ?? config.labels.pageTitle,
1273
+ subtitle: config.labels.pageSubtitle,
1274
+ generalSettings: React4.createElement(SettingsView),
1275
+ registries: marketingRegistries,
1276
+ routeBase: "/settings/marketing"
1277
+ })
1235
1278
  );
1236
1279
  SettingsComponent.displayName = "MarketingSettings";
1237
1280
  return {
@@ -1327,6 +1370,7 @@ function createMarketingPlugin(options) {
1327
1370
  permission: { feature: "marketing", action: "create" }
1328
1371
  }
1329
1372
  ],
1373
+ registries: marketingRegistries,
1330
1374
  settings: [
1331
1375
  {
1332
1376
  id: "marketing",