@neetru/sdk 3.4.1 → 3.4.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.
package/dist/react.d.cts CHANGED
@@ -4,6 +4,101 @@ import { CollectionReference, Query, DocumentReference } from './firestore-compa
4
4
  import 'drizzle-orm/node-postgres';
5
5
  import './errors.cjs';
6
6
 
7
+ /**
8
+ * Barra de conta / app-switcher padrão da Neetru — subpath `@neetru/sdk/react`.
9
+ *
10
+ * Um componente DROP-IN que TODO produto SaaS Neetru coloca no header:
11
+ * - **Avatar** (foto ou iniciais) → menu de conta: nome/e-mail + "Minha conta
12
+ * Neetru" (minhaconta.neetru.com) + "Configurações da conta" (deste produto)
13
+ * + "Sair".
14
+ * - **Waffle** (grid 9-pontos) → grid dos OUTROS produtos SaaS Neetru que o
15
+ * cliente tem acesso, pra pular de um pro outro. O produto atual é destacado.
16
+ *
17
+ * Fonte dos dados: `GET /api/sdk/v1/account/bar` no Neetru Core, autenticado
18
+ * com o **id_token** do end-user (o SDK já o guarda; `client.auth.getIdToken()`).
19
+ * O componente NÃO faz fetch cru cross-repo — a busca passa por
20
+ * `fetchNeetruAccountBar`, que é parte do próprio SDK (o conduíte canônico).
21
+ *
22
+ * Estilo: BMW (rounded-none, sem sombra/glassmorphism), inline (roda em
23
+ * qualquer app com ou sem Tailwind). Superfície de CLIENTE → sempre CLARO
24
+ * (não adere a dark mode; dark é staff-only). Acessível: teclado (setas, Tab
25
+ * trap, Esc), aria, foco devolvido ao gatilho. i18n PT-BR (override via `labels`).
26
+ *
27
+ * Autorado com `React.createElement` (sem JSX) igual ao resto de `react.ts` —
28
+ * mantém o build `.ts` sem depender de config JSX no consumidor.
29
+ */
30
+
31
+ interface AccountBarAccount {
32
+ displayName: string;
33
+ email: string;
34
+ photoUrl?: string | null;
35
+ }
36
+ interface AccountBarProductItem {
37
+ slug: string;
38
+ name: string;
39
+ iconUrl?: string;
40
+ url: string;
41
+ }
42
+ interface AccountBarData {
43
+ account: AccountBarAccount;
44
+ accountUrl: string;
45
+ products: AccountBarProductItem[];
46
+ }
47
+ /** Textos da UI — default PT-BR, override parcial via prop `labels`. */
48
+ interface AccountBarLabels {
49
+ /** aria-label do botão de conta. */
50
+ accountButton: string;
51
+ /** aria-label do botão waffle. */
52
+ appsButton: string;
53
+ /** Título da seção de produtos no popover waffle. */
54
+ appsTitle: string;
55
+ /** Item "Minha conta Neetru". */
56
+ myAccount: string;
57
+ /** Item "Configurações da conta". */
58
+ accountSettings: string;
59
+ /** Item "Sair". */
60
+ signOut: string;
61
+ /** Badge no produto atual. */
62
+ currentBadge: string;
63
+ /** Estado vazio (sem outros produtos). */
64
+ emptyProducts: string;
65
+ }
66
+ /**
67
+ * Busca os dados da barra de conta no Core usando o id_token do end-user.
68
+ *
69
+ * Retorna `null` quando não há usuário logado (sem id_token) ou a resposta não
70
+ * é OK — o componente trata como "não renderizar" / usar identidade local.
71
+ *
72
+ * Exportado à parte pra ser reusável fora de React (ex.: pré-carregar no BFF do
73
+ * produto) e testável isoladamente.
74
+ */
75
+ declare function fetchNeetruAccountBar(client: NeetruClient): Promise<AccountBarData | null>;
76
+ /** Iniciais (até 2) a partir do nome/e-mail pro fallback do avatar/monograma. */
77
+ declare function initialsFrom(nameOrEmail: string): string;
78
+ interface NeetruAccountBarProps {
79
+ /** Cliente SDK Neetru — fornece `config.baseUrl` + `auth.getIdToken()`. */
80
+ client: NeetruClient;
81
+ /** Slug do produto atual — destacado no grid waffle. */
82
+ currentProductSlug?: string;
83
+ /** Link "Configurações da conta" DESTE produto (rota interna do app). Omite o item se ausente. */
84
+ settingsUrl?: string;
85
+ /** Chamado após `signOut` concluir (ex.: redirecionar pro login). */
86
+ onSignOut?: () => void;
87
+ /** Override do fetcher — default `fetchNeetruAccountBar(client)`. Útil em teste/SSR. */
88
+ fetchBar?: (client: NeetruClient) => Promise<AccountBarData | null>;
89
+ /** Override parcial dos textos (default PT-BR). */
90
+ labels?: Partial<AccountBarLabels>;
91
+ /** Classe extra no container (o resto do estilo é inline). */
92
+ className?: string;
93
+ }
94
+ /**
95
+ * `<NeetruAccountBar client={client} currentProductSlug="pdv-agiliza" settingsUrl="/config" />`
96
+ *
97
+ * Renderiza waffle + avatar. Identidade aparece instantânea (do id_token via
98
+ * `client.auth.getUser()`); produtos chegam do Core em seguida.
99
+ */
100
+ declare function NeetruAccountBar({ client, currentProductSlug, settingsUrl, onSignOut, fetchBar, labels, className, }: NeetruAccountBarProps): React.ReactElement | null;
101
+
7
102
  /**
8
103
  * SDK React helpers (v1.1) — subpath import `@neetru/sdk/react`.
9
104
  *
@@ -286,4 +381,4 @@ declare function useUser(input: UseUserInput, options?: {
286
381
  timeoutMs?: number;
287
382
  }): UseUserResult;
288
383
 
289
- export { CheckoutLink, type CheckoutLinkProps, EntitlementGate, type EntitlementGateMode, type EntitlementGateProps, type FirestoreCompatCollectionResult, NeetruLoginButton, type NeetruLoginButtonProps, type UseCollectionResult, type UseDataOptions, type UseDocResult, type UseUserInput, type UseUserResult, useCollection, useDoc, useEntitlementContext, useUser };
384
+ export { type AccountBarAccount, type AccountBarData, type AccountBarLabels, type AccountBarProductItem, CheckoutLink, type CheckoutLinkProps, EntitlementGate, type EntitlementGateMode, type EntitlementGateProps, type FirestoreCompatCollectionResult, NeetruAccountBar, type NeetruAccountBarProps, NeetruLoginButton, type NeetruLoginButtonProps, type UseCollectionResult, type UseDataOptions, type UseDocResult, type UseUserInput, type UseUserResult, fetchNeetruAccountBar, initialsFrom, useCollection, useDoc, useEntitlementContext, useUser };
package/dist/react.d.ts CHANGED
@@ -4,6 +4,101 @@ import { CollectionReference, Query, DocumentReference } from './firestore-compa
4
4
  import 'drizzle-orm/node-postgres';
5
5
  import './errors.js';
6
6
 
7
+ /**
8
+ * Barra de conta / app-switcher padrão da Neetru — subpath `@neetru/sdk/react`.
9
+ *
10
+ * Um componente DROP-IN que TODO produto SaaS Neetru coloca no header:
11
+ * - **Avatar** (foto ou iniciais) → menu de conta: nome/e-mail + "Minha conta
12
+ * Neetru" (minhaconta.neetru.com) + "Configurações da conta" (deste produto)
13
+ * + "Sair".
14
+ * - **Waffle** (grid 9-pontos) → grid dos OUTROS produtos SaaS Neetru que o
15
+ * cliente tem acesso, pra pular de um pro outro. O produto atual é destacado.
16
+ *
17
+ * Fonte dos dados: `GET /api/sdk/v1/account/bar` no Neetru Core, autenticado
18
+ * com o **id_token** do end-user (o SDK já o guarda; `client.auth.getIdToken()`).
19
+ * O componente NÃO faz fetch cru cross-repo — a busca passa por
20
+ * `fetchNeetruAccountBar`, que é parte do próprio SDK (o conduíte canônico).
21
+ *
22
+ * Estilo: BMW (rounded-none, sem sombra/glassmorphism), inline (roda em
23
+ * qualquer app com ou sem Tailwind). Superfície de CLIENTE → sempre CLARO
24
+ * (não adere a dark mode; dark é staff-only). Acessível: teclado (setas, Tab
25
+ * trap, Esc), aria, foco devolvido ao gatilho. i18n PT-BR (override via `labels`).
26
+ *
27
+ * Autorado com `React.createElement` (sem JSX) igual ao resto de `react.ts` —
28
+ * mantém o build `.ts` sem depender de config JSX no consumidor.
29
+ */
30
+
31
+ interface AccountBarAccount {
32
+ displayName: string;
33
+ email: string;
34
+ photoUrl?: string | null;
35
+ }
36
+ interface AccountBarProductItem {
37
+ slug: string;
38
+ name: string;
39
+ iconUrl?: string;
40
+ url: string;
41
+ }
42
+ interface AccountBarData {
43
+ account: AccountBarAccount;
44
+ accountUrl: string;
45
+ products: AccountBarProductItem[];
46
+ }
47
+ /** Textos da UI — default PT-BR, override parcial via prop `labels`. */
48
+ interface AccountBarLabels {
49
+ /** aria-label do botão de conta. */
50
+ accountButton: string;
51
+ /** aria-label do botão waffle. */
52
+ appsButton: string;
53
+ /** Título da seção de produtos no popover waffle. */
54
+ appsTitle: string;
55
+ /** Item "Minha conta Neetru". */
56
+ myAccount: string;
57
+ /** Item "Configurações da conta". */
58
+ accountSettings: string;
59
+ /** Item "Sair". */
60
+ signOut: string;
61
+ /** Badge no produto atual. */
62
+ currentBadge: string;
63
+ /** Estado vazio (sem outros produtos). */
64
+ emptyProducts: string;
65
+ }
66
+ /**
67
+ * Busca os dados da barra de conta no Core usando o id_token do end-user.
68
+ *
69
+ * Retorna `null` quando não há usuário logado (sem id_token) ou a resposta não
70
+ * é OK — o componente trata como "não renderizar" / usar identidade local.
71
+ *
72
+ * Exportado à parte pra ser reusável fora de React (ex.: pré-carregar no BFF do
73
+ * produto) e testável isoladamente.
74
+ */
75
+ declare function fetchNeetruAccountBar(client: NeetruClient): Promise<AccountBarData | null>;
76
+ /** Iniciais (até 2) a partir do nome/e-mail pro fallback do avatar/monograma. */
77
+ declare function initialsFrom(nameOrEmail: string): string;
78
+ interface NeetruAccountBarProps {
79
+ /** Cliente SDK Neetru — fornece `config.baseUrl` + `auth.getIdToken()`. */
80
+ client: NeetruClient;
81
+ /** Slug do produto atual — destacado no grid waffle. */
82
+ currentProductSlug?: string;
83
+ /** Link "Configurações da conta" DESTE produto (rota interna do app). Omite o item se ausente. */
84
+ settingsUrl?: string;
85
+ /** Chamado após `signOut` concluir (ex.: redirecionar pro login). */
86
+ onSignOut?: () => void;
87
+ /** Override do fetcher — default `fetchNeetruAccountBar(client)`. Útil em teste/SSR. */
88
+ fetchBar?: (client: NeetruClient) => Promise<AccountBarData | null>;
89
+ /** Override parcial dos textos (default PT-BR). */
90
+ labels?: Partial<AccountBarLabels>;
91
+ /** Classe extra no container (o resto do estilo é inline). */
92
+ className?: string;
93
+ }
94
+ /**
95
+ * `<NeetruAccountBar client={client} currentProductSlug="pdv-agiliza" settingsUrl="/config" />`
96
+ *
97
+ * Renderiza waffle + avatar. Identidade aparece instantânea (do id_token via
98
+ * `client.auth.getUser()`); produtos chegam do Core em seguida.
99
+ */
100
+ declare function NeetruAccountBar({ client, currentProductSlug, settingsUrl, onSignOut, fetchBar, labels, className, }: NeetruAccountBarProps): React.ReactElement | null;
101
+
7
102
  /**
8
103
  * SDK React helpers (v1.1) — subpath import `@neetru/sdk/react`.
9
104
  *
@@ -286,4 +381,4 @@ declare function useUser(input: UseUserInput, options?: {
286
381
  timeoutMs?: number;
287
382
  }): UseUserResult;
288
383
 
289
- export { CheckoutLink, type CheckoutLinkProps, EntitlementGate, type EntitlementGateMode, type EntitlementGateProps, type FirestoreCompatCollectionResult, NeetruLoginButton, type NeetruLoginButtonProps, type UseCollectionResult, type UseDataOptions, type UseDocResult, type UseUserInput, type UseUserResult, useCollection, useDoc, useEntitlementContext, useUser };
384
+ export { type AccountBarAccount, type AccountBarData, type AccountBarLabels, type AccountBarProductItem, CheckoutLink, type CheckoutLinkProps, EntitlementGate, type EntitlementGateMode, type EntitlementGateProps, type FirestoreCompatCollectionResult, NeetruAccountBar, type NeetruAccountBarProps, NeetruLoginButton, type NeetruLoginButtonProps, type UseCollectionResult, type UseDataOptions, type UseDocResult, type UseUserInput, type UseUserResult, fetchNeetruAccountBar, initialsFrom, useCollection, useDoc, useEntitlementContext, useUser };