@fayz-ai/plugin-marketing 0.9.0 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/README.md +3 -3
  2. package/dist/{MarketingContext.d.ts → context.d.ts} +5 -3
  3. package/dist/context.d.ts.map +1 -0
  4. package/dist/data/mock.d.ts +1 -1
  5. package/dist/data/mock.d.ts.map +1 -1
  6. package/dist/{registries.d.ts → data/registries.d.ts} +1 -1
  7. package/dist/data/registries.d.ts.map +1 -0
  8. package/dist/index.d.ts +4 -4
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +17 -22
  11. package/dist/index.js.map +1 -1
  12. package/dist/lib/format.d.ts.map +1 -0
  13. package/dist/{presets.d.ts → lib/presets.d.ts} +1 -1
  14. package/dist/lib/presets.d.ts.map +1 -0
  15. package/dist/{MarketingPage.d.ts → views/MarketingPage.d.ts} +5 -5
  16. package/dist/views/MarketingPage.d.ts.map +1 -0
  17. package/dist/views/blog/BlogAdminView.d.ts.map +1 -1
  18. package/dist/views/content/ContentPlannerContext.d.ts +1 -1
  19. package/dist/views/content/ContentPlannerContext.d.ts.map +1 -1
  20. package/dist/views/dashboardWidgets.d.ts +1 -1
  21. package/dist/views/dashboardWidgets.d.ts.map +1 -1
  22. package/package.json +6 -9
  23. package/dist/MarketingContext.d.ts.map +0 -1
  24. package/dist/MarketingPage.d.ts.map +0 -1
  25. package/dist/format.d.ts.map +0 -1
  26. package/dist/presets.d.ts.map +0 -1
  27. package/dist/registries.d.ts.map +0 -1
  28. package/src/MarketingContext.tsx +0 -42
  29. package/src/MarketingPage.tsx +0 -139
  30. package/src/components/MarketingBits.tsx +0 -131
  31. package/src/components/icons.tsx +0 -36
  32. package/src/data/blogEntities.tsx +0 -91
  33. package/src/data/capability.test.ts +0 -92
  34. package/src/data/contentMedia.ts +0 -25
  35. package/src/data/contentMock.ts +0 -253
  36. package/src/data/contentSupabase.ts +0 -263
  37. package/src/data/contentTypes.ts +0 -138
  38. package/src/data/mock.ts +0 -308
  39. package/src/data/supabase.ts +0 -613
  40. package/src/data/tables.ts +0 -33
  41. package/src/data/types.ts +0 -97
  42. package/src/format.ts +0 -40
  43. package/src/index.ts +0 -457
  44. package/src/integrations/ranklayer/RANKLAYER.md +0 -40
  45. package/src/integrations/ranklayer/connectorDef.tsx +0 -102
  46. package/src/integrations/ranklayer/data/supabase.ts +0 -106
  47. package/src/integrations/ranklayer/types.ts +0 -16
  48. package/src/locales/en.ts +0 -192
  49. package/src/locales/index.ts +0 -7
  50. package/src/locales/pt-BR.ts +0 -192
  51. package/src/migrations/000_plg_rename.sql +0 -15
  52. package/src/migrations/001_content_planner.sql +0 -94
  53. package/src/migrations/002_multi_platform.sql +0 -25
  54. package/src/migrations/003_recording_ops.sql +0 -25
  55. package/src/migrations/004_ranklayer.sql +0 -50
  56. package/src/migrations/005_analytics_base.sql +0 -60
  57. package/src/migrations/006_analytics_views.sql +0 -68
  58. package/src/migrations/007_agent_rpcs.sql +0 -119
  59. package/src/migrations/008_landing_pages.sql +0 -112
  60. package/src/migrations/index.ts +0 -601
  61. package/src/presets.ts +0 -119
  62. package/src/registries.ts +0 -62
  63. package/src/schema/index.ts +0 -106
  64. package/src/store.ts +0 -102
  65. package/src/types.ts +0 -153
  66. package/src/views/CampaignComposer.tsx +0 -89
  67. package/src/views/CampaignsView.tsx +0 -59
  68. package/src/views/ChannelDetailView.tsx +0 -59
  69. package/src/views/ChannelsView.tsx +0 -46
  70. package/src/views/FunnelView.tsx +0 -56
  71. package/src/views/LandingPageComposer.tsx +0 -201
  72. package/src/views/LandingPagesView.tsx +0 -172
  73. package/src/views/OverviewView.tsx +0 -24
  74. package/src/views/SettingsView.tsx +0 -72
  75. package/src/views/blog/BlogAdminView.tsx +0 -99
  76. package/src/views/blog/BlogEntityForm.tsx +0 -101
  77. package/src/views/blog/useEntityCrud.ts +0 -50
  78. package/src/views/content/ContentPlannerContext.tsx +0 -13
  79. package/src/views/content/ContentView.tsx +0 -908
  80. package/src/views/content/PlanBriefView.tsx +0 -268
  81. package/src/views/content/PostPage.tsx +0 -370
  82. package/src/views/content/PostSocialPreview.tsx +0 -212
  83. package/src/views/content/RecordingChecklist.tsx +0 -145
  84. package/src/views/content/contentBits.tsx +0 -114
  85. package/src/views/content/contentStore.ts +0 -160
  86. package/src/views/content/templates.ts +0 -172
  87. package/src/views/dashboardWidgets.tsx +0 -173
  88. /package/dist/{format.d.ts → lib/format.d.ts} +0 -0
package/README.md CHANGED
@@ -25,11 +25,11 @@ It ships a vertical-flavored mock today so the surface is real from the first in
25
25
  ```bash
26
26
  npm install @fayz-ai/plugin-marketing
27
27
  ```
28
- Peer deps: `@fayz-ai/core`, `@fayz-ai/ui`, `@fayz-ai/saas`, plus `react` / `react-dom`.
28
+ Peer deps: `@fayz-ai/core`, `@fayz-ai/ui`, `@fayz-ai/admin`, plus `react` / `react-dom`.
29
29
 
30
30
  ## Usage
31
31
  ```tsx
32
- import { defineSaas } from '@fayz-ai/saas'
32
+ import { defineSaas } from '@fayz-ai/admin'
33
33
  import { createMarketingPlugin } from '@fayz-ai/plugin-marketing'
34
34
 
35
35
  export const app = defineSaas({
@@ -48,4 +48,4 @@ export const app = defineSaas({
48
48
  The acquisition half of growth. Pairs with `plugin-crm` (the leads and deals it converts into), `plugin-conversations` (broadcast replies land in the inbox), and `plugin-reputation` (social proof that lifts CVR).
49
49
 
50
50
  ## Roadmap & contributing
51
- Built and evolving in the open. See the [Fayz SDK roadmap](../../docs/ROADMAP.md#plugin-marketing) for current gaps, missing features, and good first issues.
51
+ Built and evolving in the open. See the [Fayz SDK roadmap](../../docs/platform/ROADMAP.md#plugin-marketing) for current gaps, missing features, and good first issues.
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import type { AcquisitionChannel, ConversionModel } from './types';
3
- import type { MarketingCurrency } from './format';
4
- import type { MarketingDomainModules } from './presets';
3
+ import type { MarketingCurrency } from './lib/format';
4
+ import type { MarketingDomainModules } from './lib/presets';
5
5
  import type { MarketingDataProvider } from './data/types';
6
6
  import type { MarketingUIState } from './store';
7
7
  export interface MarketingLabels {
@@ -23,6 +23,8 @@ export interface ResolvedMarketingConfig {
23
23
  modules: MarketingDomainModules;
24
24
  currency: MarketingCurrency;
25
25
  labels: MarketingLabels;
26
+ /** Ver MarketingPluginOptions.moduleNav. */
27
+ moduleNav?: 'rail' | 'tabs' | 'sidebar';
26
28
  }
27
29
  export declare const MarketingContextProvider: React.FC<{
28
30
  config: ResolvedMarketingConfig;
@@ -35,4 +37,4 @@ export declare const useMarketingProvider: () => MarketingDataProvider;
35
37
  export declare const useMarketingStore: <T>(selector: (state: MarketingUIState) => T) => T;
36
38
  /** Convenience: look up a channel definition by id. */
37
39
  export declare function useChannelLookup(): Map<string, AcquisitionChannel>;
38
- //# sourceMappingURL=MarketingContext.d.ts.map
40
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAC3D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAE/C,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,cAAc,EAAE,MAAM,CAAA;IACtB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,eAAe,CAAA;IAC3B,QAAQ,EAAE,kBAAkB,EAAE,CAAA;IAC9B,OAAO,EAAE,sBAAsB,CAAA;IAC/B,QAAQ,EAAE,iBAAiB,CAAA;IAC3B,MAAM,EAAE,eAAe,CAAA;IACvB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;CACxC;AAID,eAAO,MAAM,wBAAwB;;;;;EAAsB,CAAA;AAC3D,eAAO,MAAM,kBAAkB,+BAAgB,CAAA;AAC/C,eAAO,MAAM,oBAAoB,6BAAkB,CAAA;AACnD,eAAO,MAAM,iBAAiB,oDAAe,CAAA;AAE7C,uDAAuD;AACvD,wBAAgB,gBAAgB,IAAI,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAGlE"}
@@ -1,6 +1,6 @@
1
1
  import type { MarketingDataProvider } from './types';
2
2
  import type { AcquisitionChannel, ConversionModel } from '../types';
3
- import { type MarketingDomain } from '../presets';
3
+ import { type MarketingDomain } from '../lib/presets';
4
4
  export interface MockMarketingConfig {
5
5
  channels: AcquisitionChannel[];
6
6
  conversion: ConversionModel;
@@ -1 +1 @@
1
- {"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../../src/data/mock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAA2C,MAAM,SAAS,CAAA;AAC7F,OAAO,KAAK,EACV,kBAAkB,EAIlB,eAAe,EAQhB,MAAM,UAAU,CAAA;AACjB,OAAO,EAAuB,KAAK,eAAe,EAAE,MAAM,YAAY,CAAA;AA6BtE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,kBAAkB,EAAE,CAAA;IAC9B,UAAU,EAAE,eAAe,CAAA;IAC3B,MAAM,EAAE,eAAe,CAAA;CACxB;AAyGD,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,mBAAmB,GAAG,qBAAqB,CA0J3F"}
1
+ {"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../../src/data/mock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAA2C,MAAM,SAAS,CAAA;AAC7F,OAAO,KAAK,EACV,kBAAkB,EAIlB,eAAe,EAQhB,MAAM,UAAU,CAAA;AACjB,OAAO,EAAuB,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAA;AA6B1E,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,kBAAkB,EAAE,CAAA;IAC9B,UAAU,EAAE,eAAe,CAAA;IAC3B,MAAM,EAAE,eAAe,CAAA;CACxB;AAyGD,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,mBAAmB,GAAG,qBAAqB,CA0J3F"}
@@ -1,5 +1,5 @@
1
1
  import type { PluginRegistryDef } from '@fayz-ai/core';
2
- import type { AcquisitionChannel } from './types';
2
+ import type { AcquisitionChannel } from '../types';
3
3
  /** Build the marketing settings registries. Channels are tenant-editable rows
4
4
  * in plg_marketing_channels; the Supabase provider lazily seeds them from the
5
5
  * resolved domain preset (seedData doubles as walkable mock data). Sites are
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registries.d.ts","sourceRoot":"","sources":["../../src/data/registries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAa,MAAM,eAAe,CAAA;AACjE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAwClD;;;;0EAI0E;AAC1E,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,kBAAkB,EAAE,GAAG,iBAAiB,EAAE,CAe5F"}
package/dist/index.d.ts CHANGED
@@ -1,9 +1,9 @@
1
1
  import type { PluginManifest, PluginRegistryDef, PluginScope, VerticalId } from '@fayz-ai/core';
2
- import { type MarketingLabels } from './MarketingContext';
2
+ import { type MarketingLabels } from './context';
3
3
  import type { AttributionBridge, MarketingDataProvider, SitesPerformanceBridge } from './data/types';
4
4
  import type { ContentPlannerProvider } from './data/contentTypes';
5
- import { type MarketingCurrency } from './format';
6
- import { type MarketingDomain, type MarketingDomainModules } from './presets';
5
+ import { type MarketingCurrency } from './lib/format';
6
+ import { type MarketingDomain, type MarketingDomainModules } from './lib/presets';
7
7
  import type { AcquisitionChannel, ConversionModel } from './types';
8
8
  export interface MarketingPluginOptions {
9
9
  /** Vertical preset for conversion model + channels + module defaults. */
@@ -42,7 +42,7 @@ export interface MarketingPluginOptions {
42
42
  export declare function createMarketingPlugin(options?: MarketingPluginOptions): PluginManifest;
43
43
  export type { MarketingDataProvider, AttributionBridge, SitesPerformanceBridge, } from './data/types';
44
44
  export type { AcquisitionChannel, ConversionModel, Campaign, ChannelPerformance, LandingPagePerf, } from './types';
45
- export { MARKETING_PRESETS, type MarketingDomain } from './presets';
45
+ export { MARKETING_PRESETS, type MarketingDomain } from './lib/presets';
46
46
  export { createMockMarketingProvider } from './data/mock';
47
47
  export { createSupabaseMarketingProvider } from './data/supabase';
48
48
  export type { ContentPlannerProvider, ContentPlan, ContentPost, SocialAccount, PostFormat, PostStatus, SaveContentPlanInput, SaveContentPostInput, SaveSocialAccountInput, } from './data/contentTypes';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAO/F,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,KAAK,EACV,iBAAiB,EACjB,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,cAAc,CAAA;AAIrB,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AAOjE,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,6EAA6E;IAC7E,cAAc,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,sBAAsB,CAAA;KAAE,CAAA;IAC1D,iFAAiF;IACjF,kBAAkB,CAAC,EAAE,iBAAiB,EAAE,CAAA;IACxC,4DAA4D;IAC5D,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;IACrC,oEAAoE;IACpE,WAAW,CAAC,EAAE,sBAAsB,CAAA;IACpC;6DACyD;IACzD,QAAQ,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CACxE;AA8CD,wBAAgB,qBAAqB,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,cAAc,CAsTtF;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;AACzD,OAAO,EAAE,+BAA+B,EAAE,MAAM,iBAAiB,CAAA;AACjE,YAAY,EACV,sBAAsB,EACtB,WAAW,EACX,WAAW,EACX,aAAa,EACb,UAAU,EACV,UAAU,EACV,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,gCAAgC,EAAE,MAAM,oBAAoB,CAAA;AACrE,OAAO,EAAE,oCAAoC,EAAE,MAAM,wBAAwB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAO/F,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,WAAW,CAAA;AAClB,OAAO,KAAK,EACV,iBAAiB,EACjB,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,cAAc,CAAA;AAIrB,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AAOjE,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAA;AACvE,OAAO,EAAqB,KAAK,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,eAAe,CAAA;AACpG,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,6EAA6E;IAC7E,cAAc,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,sBAAsB,CAAA;KAAE,CAAA;IAC1D,iFAAiF;IACjF,kBAAkB,CAAC,EAAE,iBAAiB,EAAE,CAAA;IACxC,4DAA4D;IAC5D,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;IACrC,oEAAoE;IACpE,WAAW,CAAC,EAAE,sBAAsB,CAAA;IACpC;6DACyD;IACzD,QAAQ,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CACxE;AA8CD,wBAAgB,qBAAqB,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,cAAc,CAsTtF;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,eAAe,CAAA;AACvE,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAA;AACzD,OAAO,EAAE,+BAA+B,EAAE,MAAM,iBAAiB,CAAA;AACjE,YAAY,EACV,sBAAsB,EACtB,WAAW,EACX,WAAW,EACX,aAAa,EACb,UAAU,EACV,UAAU,EACV,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,gCAAgC,EAAE,MAAM,oBAAoB,CAAA;AACrE,OAAO,EAAE,oCAAoC,EAAE,MAAM,wBAAwB,CAAA"}
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import React9, { useState, useEffect, useMemo, useCallback } from 'react';
2
2
  import { getActiveTenantId, registerTranslations, createSafeDataProvider, getSupabaseClientOptional, useTranslation, useDataChanged, resolveDataProvider } from '@fayz-ai/core';
3
- import { createPluginContext, PluginSettingsPanel, useModuleNavigation, createViewRouter, ModuleActionBar, SettingsGroup, SelectRow, ToggleRow, PermissionGate, useLimitGuard, useOrganizationStore, CrudFormPage, invalidateLimit, CrudListView } from '@fayz-ai/saas';
4
- import { defineKpiWidget, defineCustomWidget, defineTableWidget, ModulePage, DataTable, SubpageHeader, Button, Skeleton, ConfirmDialog, ContentSplit, ContentSplitTrigger, Input, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, MarkdownEditor, SegmentedControl, DashboardCanvas, cn, Modal, ModalContent, ModalHeader, ModalTitle, ModalBody, ModalFooter, Badge, SelectSeparator, Sheet, SheetContent, SheetHeader, SheetTitle, SheetDescription, SheetBody, SheetFooter, Checkbox, toast, KpiCard as KpiCard$1, Card, CardHeader, CardTitle, CardContent, TableWidget } from '@fayz-ai/ui';
3
+ import { createPluginContext, PluginSettingsPanel, useModuleNavigation, createViewRouter, ModuleActionBar, SettingsGroup, SelectRow, ToggleRow, PermissionGate, useLimitGuard, useOrganizationStore, CrudFormPage, invalidateLimit, CrudListView } from '@fayz-ai/admin';
4
+ import { defineKpiWidget, defineCustomWidget, defineTableWidget, ModulePage, DataTable, SubpageHeader, Button, Skeleton, ConfirmDialog, ContentSplit, ContentSplitTrigger, Input, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, MarkdownEditor, DashboardCanvas, SegmentedControl, cn, Modal, ModalContent, ModalHeader, ModalTitle, ModalBody, ModalFooter, Badge, SelectSeparator, Sheet, SheetContent, SheetHeader, SheetTitle, SheetDescription, SheetBody, SheetFooter, Checkbox, toast, KpiCard as KpiCard$1, Card, CardHeader, CardTitle, CardContent, TableWidget } from '@fayz-ai/ui';
5
5
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
6
6
  import { Sparkles, History, CheckCircle2, AlertCircle, ChevronRight, Users, Target, Percent, DollarSign, Trash2, Plus, ExternalLink, Pencil, Layers, MousePointerClick, NotebookPen, ArrowUpRight, ArrowDownRight, Settings2, Columns3, CalendarDays, List, ChevronLeft, Loader2, ImagePlus, X, Bike, Utensils, DoorOpen, MessageCircle, Instagram, Mail, Globe, Megaphone, Search, Link2, AtSign, Pin, Twitter, Linkedin, Facebook, Youtube, Music2, Repeat2, Heart, BarChart2, Share2, ThumbsUp, Send, MoreHorizontal, Bookmark, GripVertical, Image, Trophy } from 'lucide-react';
7
7
  import { createStore } from 'zustand/vanilla';
@@ -31,7 +31,7 @@ function OverviewView() {
31
31
  );
32
32
  }
33
33
 
34
- // src/format.ts
34
+ // src/lib/format.ts
35
35
  var DEFAULT_CURRENCY = { code: "USD", locale: "en-US", symbol: "$" };
36
36
  function formatCurrency(value, currency) {
37
37
  try {
@@ -2543,7 +2543,7 @@ function useEntityCrud(entity) {
2543
2543
  const remove = useCallback((id) => provider2.remove(id), [provider2]);
2544
2544
  return { items, total, fetch, getById, create, update, remove };
2545
2545
  }
2546
- function PostsList({ navigate }) {
2546
+ function PostsList({ navigate, navTabs }) {
2547
2547
  const entity = useMemo(() => buildBlogPostEntity(), []);
2548
2548
  const { items, total, fetch } = useEntityCrud(entity);
2549
2549
  const [search, setSearch] = useState("");
@@ -2577,13 +2577,15 @@ function PostsList({ navigate }) {
2577
2577
  facets,
2578
2578
  activeFilters: { status: statusFilter },
2579
2579
  onFacetChange: (_field, value) => setStatusFilter(value),
2580
+ navTabs,
2581
+ activeNavTab: "posts",
2580
2582
  onNew: () => navigate("blog-new"),
2581
2583
  addLabel: "New post",
2582
2584
  onRowClick: (row) => navigate(`blog-post:${row.id}`)
2583
2585
  }
2584
2586
  );
2585
2587
  }
2586
- function CategoriesList({ navigate }) {
2588
+ function CategoriesList({ navigate, navTabs }) {
2587
2589
  const entity = useMemo(() => buildBlogCategoryEntity(), []);
2588
2590
  const { items, total, fetch } = useEntityCrud(entity);
2589
2591
  const [search, setSearch] = useState("");
@@ -2606,6 +2608,8 @@ function CategoriesList({ navigate }) {
2606
2608
  search,
2607
2609
  onSearchChange: setSearch,
2608
2610
  searchPlaceholder: "Search categories\u2026",
2611
+ navTabs,
2612
+ activeNavTab: "categories",
2609
2613
  onNew: () => navigate("blog-cat-new"),
2610
2614
  addLabel: "New category",
2611
2615
  onRowClick: (row) => navigate(`blog-cat:${row.id}`)
@@ -2615,21 +2619,11 @@ function CategoriesList({ navigate }) {
2615
2619
  function BlogAdminView({ navigate }) {
2616
2620
  const { labels } = useMarketingConfig();
2617
2621
  const [lens, setLens] = useState("posts");
2618
- return /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
2619
- /* @__PURE__ */ jsx(
2620
- SegmentedControl,
2621
- {
2622
- "aria-label": "Blog section",
2623
- options: [
2624
- { value: "posts", label: labels.blog },
2625
- { value: "categories", label: labels.blogCategories }
2626
- ],
2627
- value: lens,
2628
- onChange: (v) => setLens(v)
2629
- }
2630
- ),
2631
- lens === "posts" ? /* @__PURE__ */ jsx(PostsList, { navigate }) : /* @__PURE__ */ jsx(CategoriesList, { navigate })
2632
- ] });
2622
+ const navTabs = useMemo(() => [
2623
+ { id: "posts", label: labels.blog, onSelect: () => setLens("posts") },
2624
+ { id: "categories", label: labels.blogCategories, onSelect: () => setLens("categories") }
2625
+ ], [labels.blog, labels.blogCategories]);
2626
+ return lens === "posts" ? /* @__PURE__ */ jsx(PostsList, { navigate, navTabs }) : /* @__PURE__ */ jsx(CategoriesList, { navigate, navTabs });
2633
2627
  }
2634
2628
  function BlogEntityForm({
2635
2629
  entity,
@@ -2799,6 +2793,7 @@ function MarketingPage({ config, provider: provider2, store, contentProvider, co
2799
2793
  title: config.labels.pageTitle,
2800
2794
  subtitle: config.labels.pageSubtitle,
2801
2795
  nav,
2796
+ navVariant: config.moduleNav,
2802
2797
  showHeader: isOverview,
2803
2798
  viewKey: view,
2804
2799
  direction,
@@ -2908,7 +2903,7 @@ var V = {
2908
2903
  leadTagEvents: "v_marketing_lead_tag_events"
2909
2904
  };
2910
2905
 
2911
- // src/registries.ts
2906
+ // src/data/registries.ts
2912
2907
  var KIND_OPTIONS = [
2913
2908
  { value: "paid", label: "Paid" },
2914
2909
  { value: "organic", label: "Organic" },
@@ -3090,7 +3085,7 @@ function createMarketingDashboardWidgets(ctx3) {
3090
3085
  ];
3091
3086
  }
3092
3087
 
3093
- // src/presets.ts
3088
+ // src/lib/presets.ts
3094
3089
  var AGENCY = {
3095
3090
  conversion: {
3096
3091
  id: "won-deal",