@fayz-ai/plugin-conversations 0.8.0 → 0.8.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.
Files changed (60) hide show
  1. package/dist/ConversationsContext.d.ts +18 -1
  2. package/dist/ConversationsContext.d.ts.map +1 -1
  3. package/dist/ConversationsPage.d.ts +3 -1
  4. package/dist/ConversationsPage.d.ts.map +1 -1
  5. package/dist/data/accents.d.ts +3 -0
  6. package/dist/data/accents.d.ts.map +1 -0
  7. package/dist/data/mock.d.ts +7 -1
  8. package/dist/data/mock.d.ts.map +1 -1
  9. package/dist/data/mock.test.d.ts +2 -0
  10. package/dist/data/mock.test.d.ts.map +1 -0
  11. package/dist/data/supabase.d.ts.map +1 -1
  12. package/dist/data/tables.d.ts +5 -0
  13. package/dist/data/tables.d.ts.map +1 -0
  14. package/dist/data/types.d.ts +2 -1
  15. package/dist/data/types.d.ts.map +1 -1
  16. package/dist/index.cjs +664 -70
  17. package/dist/index.cjs.map +1 -1
  18. package/dist/index.d.ts +16 -2
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +667 -73
  21. package/dist/index.js.map +1 -1
  22. package/dist/locales/en.d.ts.map +1 -1
  23. package/dist/locales/index.d.ts.map +1 -1
  24. package/dist/locales/pt-BR.d.ts +2 -0
  25. package/dist/locales/pt-BR.d.ts.map +1 -0
  26. package/dist/migrations/index.d.ts +7 -0
  27. package/dist/migrations/index.d.ts.map +1 -0
  28. package/dist/store.d.ts +2 -1
  29. package/dist/store.d.ts.map +1 -1
  30. package/dist/types.d.ts +18 -0
  31. package/dist/types.d.ts.map +1 -1
  32. package/dist/views/ContactPanel.d.ts.map +1 -1
  33. package/dist/views/ConversationList.d.ts.map +1 -1
  34. package/dist/views/InboxView.d.ts.map +1 -1
  35. package/dist/views/MessageThread.d.ts.map +1 -1
  36. package/dist/views/NewConversationModal.d.ts +6 -0
  37. package/dist/views/NewConversationModal.d.ts.map +1 -0
  38. package/package.json +7 -5
  39. package/src/ConversationsContext.tsx +31 -1
  40. package/src/ConversationsPage.tsx +6 -3
  41. package/src/data/accents.ts +12 -0
  42. package/src/data/mock.test.ts +90 -0
  43. package/src/data/mock.ts +131 -12
  44. package/src/data/supabase.ts +69 -7
  45. package/src/data/tables.ts +7 -0
  46. package/src/data/types.ts +2 -0
  47. package/src/index.ts +69 -11
  48. package/src/locales/en.ts +64 -0
  49. package/src/locales/index.ts +2 -0
  50. package/src/locales/pt-BR.ts +68 -0
  51. package/src/migrations/001_conversations.sql +74 -0
  52. package/src/migrations/002_contact_person.sql +22 -0
  53. package/src/migrations/index.ts +108 -0
  54. package/src/store.ts +44 -1
  55. package/src/types.ts +19 -0
  56. package/src/views/ContactPanel.tsx +14 -12
  57. package/src/views/ConversationList.tsx +48 -21
  58. package/src/views/InboxView.tsx +3 -1
  59. package/src/views/MessageThread.tsx +14 -16
  60. package/src/views/NewConversationModal.tsx +204 -0
@@ -1,9 +1,26 @@
1
1
  import React from 'react';
2
2
  import { type StoreApi } from 'zustand';
3
+ import type { EntityLookup } from '@fayz-ai/saas';
3
4
  import type { ConversationsUIState } from './store';
4
- export declare function ConversationsContextProvider({ store, children, }: {
5
+ /**
6
+ * App-tunable knobs the inbox UI reads. Kept tiny on purpose: everything here
7
+ * describes the APP's data shape (which people are "contacts" in this vertical),
8
+ * never product policy.
9
+ */
10
+ export interface ResolvedConversationsConfig {
11
+ /** `people.kind` used when the compose modal creates a contact. */
12
+ contactKind: string;
13
+ /** Per-vertical extension table linked by `person_id` (skipped when absent). */
14
+ contactExtensionTable?: string;
15
+ /** Search source for the contact picker. Defaults to the person archetype. */
16
+ contactLookup?: EntityLookup;
17
+ }
18
+ export declare const DEFAULT_CONVERSATIONS_CONFIG: ResolvedConversationsConfig;
19
+ export declare function ConversationsContextProvider({ store, config, children, }: {
5
20
  store: StoreApi<ConversationsUIState>;
21
+ config?: ResolvedConversationsConfig;
6
22
  children?: React.ReactNode;
7
23
  }): React.JSX.Element;
8
24
  export declare function useConversationsStore<T>(selector: (state: ConversationsUIState) => T): T;
25
+ export declare function useConversationsConfig(): ResolvedConversationsConfig;
9
26
  //# sourceMappingURL=ConversationsContext.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ConversationsContext.d.ts","sourceRoot":"","sources":["../src/ConversationsContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAY,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAA;AACjD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAInD,wBAAgB,4BAA4B,CAAC,EAC3C,KAAK,EACL,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,QAAQ,CAAC,oBAAoB,CAAC,CAAA;IACrC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC3B,qBAEA;AAED,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,CAAC,GAAG,CAAC,CAIxF"}
1
+ {"version":3,"file":"ConversationsContext.d.ts","sourceRoot":"","sources":["../src/ConversationsContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAY,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAA;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AACjD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAEnD;;;;GAIG;AACH,MAAM,WAAW,2BAA2B;IAC1C,mEAAmE;IACnE,WAAW,EAAE,MAAM,CAAA;IACnB,gFAAgF;IAChF,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,8EAA8E;IAC9E,aAAa,CAAC,EAAE,YAAY,CAAA;CAC7B;AAED,eAAO,MAAM,4BAA4B,EAAE,2BAE1C,CAAA;AAKD,wBAAgB,4BAA4B,CAAC,EAC3C,KAAK,EACL,MAAqC,EACrC,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,QAAQ,CAAC,oBAAoB,CAAC,CAAA;IACrC,MAAM,CAAC,EAAE,2BAA2B,CAAA;IACpC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC3B,qBAMA;AAED,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,CAAC,GAAG,CAAC,CAIxF;AAED,wBAAgB,sBAAsB,IAAI,2BAA2B,CAEpE"}
@@ -1,7 +1,9 @@
1
1
  import React from 'react';
2
2
  import type { StoreApi } from 'zustand/vanilla';
3
+ import { type ResolvedConversationsConfig } from './ConversationsContext';
3
4
  import type { ConversationsUIState } from './store';
4
- export declare function ConversationsPage({ store }: {
5
+ export declare function ConversationsPage({ store, config }: {
5
6
  store: StoreApi<ConversationsUIState>;
7
+ config?: ResolvedConversationsConfig;
6
8
  }): React.JSX.Element;
7
9
  //# sourceMappingURL=ConversationsPage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ConversationsPage.d.ts","sourceRoot":"","sources":["../src/ConversationsPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAE/C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAGnD,wBAAgB,iBAAiB,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,QAAQ,CAAC,oBAAoB,CAAC,CAAA;CAAE,qBAWrF"}
1
+ {"version":3,"file":"ConversationsPage.d.ts","sourceRoot":"","sources":["../src/ConversationsPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAgC,KAAK,2BAA2B,EAAE,MAAM,wBAAwB,CAAA;AACvG,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAGnD,wBAAgB,iBAAiB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;IACnD,KAAK,EAAE,QAAQ,CAAC,oBAAoB,CAAC,CAAA;IACrC,MAAM,CAAC,EAAE,2BAA2B,CAAA;CACrC,qBAWA"}
@@ -0,0 +1,3 @@
1
+ import type { Channel } from '../types';
2
+ export declare const CHANNEL_ACCENT_HEX: Record<Channel, string>;
3
+ //# sourceMappingURL=accents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accents.d.ts","sourceRoot":"","sources":["../../src/data/accents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAKvC,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAMtD,CAAA"}
@@ -1,3 +1,9 @@
1
1
  import type { ConversationsProvider } from './types';
2
- export declare function createMockConversationsProvider(): ConversationsProvider;
2
+ export interface MockConversationsConfig {
3
+ /** Tenant id (value or getter) used to namespace the localStorage snapshot. */
4
+ tenantId?: string | (() => string | undefined);
5
+ /** Display name stamped as the author of outbound messages. */
6
+ selfAuthor?: string;
7
+ }
8
+ export declare function createMockConversationsProvider(config?: MockConversationsConfig): ConversationsProvider;
3
9
  //# sourceMappingURL=mock.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../../src/data/mock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAoFpD,wBAAgB,+BAA+B,IAAI,qBAAqB,CAyDvE"}
1
+ {"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../../src/data/mock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAsFpD,MAAM,WAAW,uBAAuB;IACtC,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,SAAS,CAAC,CAAA;IAC9C,+DAA+D;IAC/D,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAaD,wBAAgB,+BAA+B,CAC7C,MAAM,CAAC,EAAE,uBAAuB,GAC/B,qBAAqB,CA0JvB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=mock.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock.test.d.ts","sourceRoot":"","sources":["../../src/data/mock.test.ts"],"names":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"supabase.d.ts","sourceRoot":"","sources":["../../src/data/supabase.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAoBpD,MAAM,WAAW,2BAA2B;IAC1C,+EAA+E;IAC/E,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,SAAS,CAAC,CAAA;IAC9C,+DAA+D;IAC/D,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAkCD,wBAAgB,mCAAmC,CACjD,MAAM,CAAC,EAAE,2BAA2B,GACnC,qBAAqB,CAyIvB"}
1
+ {"version":3,"file":"supabase.d.ts","sourceRoot":"","sources":["../../src/data/supabase.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAuBpD,MAAM,WAAW,2BAA2B;IAC1C,+EAA+E;IAC/E,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,SAAS,CAAC,CAAA;IAC9C,+DAA+D;IAC/D,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAmCD,wBAAgB,mCAAmC,CACjD,MAAM,CAAC,EAAE,2BAA2B,GACnC,qBAAqB,CAmMvB"}
@@ -0,0 +1,5 @@
1
+ export declare const T: {
2
+ readonly conversations: "plg_conversations";
3
+ readonly messages: "plg_conversation_messages";
4
+ };
5
+ //# sourceMappingURL=tables.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tables.d.ts","sourceRoot":"","sources":["../../src/data/tables.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,CAAC;;;CAGJ,CAAA"}
@@ -1,7 +1,8 @@
1
- import type { Conversation, Message, ListConversationsQuery, SendMessageInput, ConversationStatus } from '../types';
1
+ import type { Conversation, Message, ListConversationsQuery, SendMessageInput, CreateConversationInput, ConversationStatus } from '../types';
2
2
  export interface ConversationsProvider {
3
3
  listConversations(query?: ListConversationsQuery): Promise<Conversation[]>;
4
4
  getMessages(conversationId: string): Promise<Message[]>;
5
+ createConversation(input: CreateConversationInput): Promise<Conversation>;
5
6
  sendMessage(input: SendMessageInput): Promise<Message>;
6
7
  markRead(conversationId: string): Promise<void>;
7
8
  setStatus(conversationId: string, status: ConversationStatus): Promise<Conversation>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/data/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,OAAO,EACP,sBAAsB,EACtB,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,UAAU,CAAA;AAEjB,MAAM,WAAW,qBAAqB;IACpC,iBAAiB,CAAC,KAAK,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;IAC1E,WAAW,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;IACvD,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACtD,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/C,SAAS,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;CACrF"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/data/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,OAAO,EACP,sBAAsB,EACtB,gBAAgB,EAChB,uBAAuB,EACvB,kBAAkB,EACnB,MAAM,UAAU,CAAA;AAEjB,MAAM,WAAW,qBAAqB;IACpC,iBAAiB,CAAC,KAAK,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;IAC1E,WAAW,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;IACvD,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IACzE,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACtD,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/C,SAAS,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;CACrF"}