xertica-ui 2.1.7 → 2.1.9

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 (129) hide show
  1. package/CHANGELOG.md +19 -61
  2. package/README.md +1 -1
  3. package/bin/cli.ts +1 -1
  4. package/components/assistant/xertica-assistant/use-assistant.ts +582 -294
  5. package/components/assistant/xertica-assistant/xertica-assistant.tsx +13 -5
  6. package/components/hooks/index.ts +0 -12
  7. package/components/layout/sidebar/sidebar.tsx +13 -26
  8. package/components/media/audio-player/use-audio-player.ts +10 -13
  9. package/components/pages/home-content/HomeContent.tsx +7 -7
  10. package/components/ui/chart/chart.test.tsx +83 -254
  11. package/components/ui/chart/chart.tsx +2365 -79
  12. package/components/ui/file-upload/file-upload.test.tsx +2 -6
  13. package/components/ui/file-upload/file-upload.tsx +5 -17
  14. package/components/ui/file-upload/use-file-upload.ts +25 -76
  15. package/components/ui/index.ts +1 -1
  16. package/components/ui/pagination/pagination.tsx +1 -7
  17. package/components/ui/pagination/use-pagination.ts +10 -50
  18. package/components/ui/rich-text-editor/rich-text-editor.tsx +4 -7
  19. package/components/ui/rich-text-editor/use-rich-text-editor.ts +14 -38
  20. package/components/ui/stepper/stepper.tsx +11 -12
  21. package/components/ui/stepper/use-stepper.ts +1 -4
  22. package/components/ui/tree-view/tree-view.tsx +5 -23
  23. package/components/ui/tree-view/use-tree-view.ts +23 -34
  24. package/dist/AssistantChart-Bdd44uBn.cjs +3635 -0
  25. package/dist/AssistantChart-CFhDdGyU.js +3609 -0
  26. package/dist/AudioPlayer-CFeV8t-5.cjs +936 -0
  27. package/dist/AudioPlayer-CySJIyvL.js +937 -0
  28. package/dist/VerifyEmailPage-CFLMls1p.cjs +2827 -0
  29. package/dist/VerifyEmailPage-COiyNl1y.js +2825 -0
  30. package/dist/VerifyEmailPage-DjQKRlUS.cjs +2824 -0
  31. package/dist/VerifyEmailPage-MTD7AG1Z.js +2828 -0
  32. package/dist/assistant.cjs.js +1 -1
  33. package/dist/assistant.es.js +1 -1
  34. package/dist/blocks.cjs.js +1 -1
  35. package/dist/blocks.es.js +1 -1
  36. package/dist/cli.js +1 -1
  37. package/dist/components/assistant/xertica-assistant/use-assistant.d.ts +2 -1
  38. package/dist/components/assistant/xertica-assistant/xertica-assistant.d.ts +13 -5
  39. package/dist/components/hooks/index.d.ts +0 -10
  40. package/dist/components/ui/button/button.d.ts +1 -1
  41. package/dist/components/ui/chart/chart.d.ts +324 -9
  42. package/dist/components/ui/file-upload/use-file-upload.d.ts +15 -9
  43. package/dist/components/ui/index.d.ts +1 -1
  44. package/dist/components/ui/pagination/pagination.d.ts +1 -2
  45. package/dist/components/ui/tree-view/tree-view.d.ts +2 -2
  46. package/dist/hooks.cjs.js +1 -8
  47. package/dist/hooks.es.js +2 -9
  48. package/dist/index.cjs.js +37 -51
  49. package/dist/index.es.js +244 -258
  50. package/dist/layout.cjs.js +1 -1
  51. package/dist/layout.es.js +1 -1
  52. package/dist/media.cjs.js +1 -1
  53. package/dist/media.es.js +1 -1
  54. package/dist/pages.cjs.js +1 -1
  55. package/dist/pages.es.js +1 -1
  56. package/dist/rich-text-editor-Bp3zQqMC.js +2954 -0
  57. package/dist/rich-text-editor-CeucBdIv.cjs +2971 -0
  58. package/dist/sidebar-DQj1z3jG.cjs +758 -0
  59. package/dist/sidebar-Djn5syhi.cjs +786 -0
  60. package/dist/sidebar-LluMXfam.js +759 -0
  61. package/dist/sidebar-_rT7rBMk.js +787 -0
  62. package/dist/ui.cjs.js +32 -46
  63. package/dist/ui.es.js +223 -237
  64. package/dist/use-audio-player-BkmEmj8Q.js +185 -0
  65. package/dist/use-audio-player-CLFTWFW1.cjs +184 -0
  66. package/dist/xertica-assistant-V_IdW4WF.cjs +2099 -0
  67. package/dist/xertica-assistant-ciJaWqm1.js +2100 -0
  68. package/dist/xertica-ui.css +1 -1
  69. package/docs/components/assistant.md +4 -1
  70. package/docs/components/audio-player.md +29 -0
  71. package/docs/components/chart.md +3 -11
  72. package/docs/components/file-upload.md +9 -15
  73. package/docs/components/hooks.md +0 -479
  74. package/docs/components/pagination.md +18 -18
  75. package/docs/components/rich-text-editor.md +19 -3
  76. package/docs/components/sidebar.md +27 -43
  77. package/docs/components/stepper.md +7 -2
  78. package/docs/components/tree-view.md +15 -4
  79. package/llms-compact.txt +327 -376
  80. package/llms-full.txt +3 -8
  81. package/package.json +203 -203
  82. package/templates/CLAUDE.md +182 -231
  83. package/templates/guidelines/Guidelines.md +325 -560
  84. package/templates/package.json +2 -5
  85. package/templates/src/app/App.tsx +1 -6
  86. package/templates/src/app/components/AppLayout.tsx +5 -7
  87. package/templates/src/app/components/AuthGuard.tsx +30 -53
  88. package/templates/src/features/auth/ui/ForgotPasswordContent.tsx +70 -68
  89. package/templates/src/features/auth/ui/LoginContent.tsx +90 -91
  90. package/templates/src/features/auth/ui/ResetPasswordContent.tsx +151 -152
  91. package/templates/src/features/auth/ui/VerifyEmailContent.tsx +82 -80
  92. package/templates/src/features/home/ui/HomeContent.tsx +100 -119
  93. package/templates/src/features/template/ui/CrudTemplate.tsx +106 -268
  94. package/templates/src/features/template/ui/DashboardTemplate.tsx +101 -201
  95. package/templates/src/features/template/ui/FormTemplate.tsx +120 -227
  96. package/templates/src/features/template/ui/LoginTemplate.tsx +6 -4
  97. package/templates/src/features/template/ui/TemplateContent.tsx +196 -10
  98. package/templates/src/pages/AssistantPage.tsx +7 -13
  99. package/templates/src/pages/HomePage.tsx +57 -47
  100. package/templates/src/pages/TemplatePage.tsx +30 -48
  101. package/templates/src/shared/config/navigation.ts +20 -21
  102. package/templates/src/shared/lib/auth.ts +20 -31
  103. package/templates/src/shared/types/auth.ts +3 -9
  104. package/templates/src/styles/index.css +2 -2
  105. package/components/assistant/xertica-assistant/hooks/index.ts +0 -8
  106. package/components/assistant/xertica-assistant/hooks/use-assistant-conversations.ts +0 -119
  107. package/components/assistant/xertica-assistant/hooks/use-assistant-messages.ts +0 -323
  108. package/components/assistant/xertica-assistant/hooks/use-assistant-suggestions.ts +0 -64
  109. package/components/blocks/card-patterns/card-patterns.test.tsx +0 -448
  110. package/components/ui/chart/parts/chart-dashboard.tsx +0 -1025
  111. package/components/ui/chart/parts/chart-metric.tsx +0 -622
  112. package/components/ui/chart/parts/chart-primitives.tsx +0 -432
  113. package/components/ui/chart/parts/chart-shared.tsx +0 -201
  114. package/components/ui/chart/parts/chart-utils.ts +0 -145
  115. package/components/ui/chart/parts/index.ts +0 -5
  116. package/components/ui/file-upload/use-file-upload.test.ts +0 -173
  117. package/components/ui/pagination/use-pagination.test.ts +0 -104
  118. package/components/ui/rich-text-editor/use-rich-text-editor.test.ts +0 -110
  119. package/components/ui/stepper/use-stepper.test.ts +0 -109
  120. package/components/ui/tree-view/use-tree-view.test.ts +0 -91
  121. package/templates/README.md +0 -152
  122. package/templates/src/features/settings/index.ts +0 -1
  123. package/templates/src/features/settings/ui/SettingsContent.tsx +0 -210
  124. package/templates/src/pages/NotFoundPage.tsx +0 -29
  125. package/templates/src/pages/SettingsPage.tsx +0 -21
  126. package/templates/src/shared/config/assistant.ts +0 -20
  127. package/templates/src/shared/lib/api.ts +0 -79
  128. package/templates/src/shared/ui/PageContent.tsx +0 -35
  129. package/templates/src/vite-env.d.ts +0 -12
package/CHANGELOG.md CHANGED
@@ -7,73 +7,31 @@ Versioning follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
8
  ---
9
9
 
10
- ## [2.1.7] — 2026-05-19
10
+ ## [2.1.9] — 2026-05-20
11
11
 
12
12
  ### Fixed
13
13
 
14
- - **`templates/TemplateContent.tsx` — wrapper raiz não era SPA-router-aware** o `paddingLeft` manual foi substituído por `<PageContent>` (wrapper compartilhado de `shared/ui/PageContent.tsx`) eliminando código duplicado e garantindo que a lógica de offset do sidebar fique em um único lugar.
15
- - **`templates/TemplateContent.tsx` — `renderLink` tipado como `any`**corrigido para `Record<string, unknown>` prevenindo erros silenciosos de tipos no spread `{...props}`.
16
- - **`templates/TemplateContent.tsx` — imports mortos removidos** — `Menu`, `ChevronRight`, `Trash2`, `Archive`, `ArrowRightLeft`, `History`, `FileEdit`, `Filter`, `Map` estavam no import mas não eram usados (ou eram usados mas faltavam). Sincronizado imports com uso real.
17
- - **`templates/TemplateContent.tsx` — `<h2>` raw na página**substituído por `<PageHeader title=... subtitle=... />` para consistência com as regras do projeto.
18
- - **`templates/TemplatePage.tsx` — `user` tipado como `{ email: string }` em vez de `User`** tipo corrigido para `User | null`; `onEvaluation` migrado de `console.log` para `toast.success/info`; componente agora usa `generateDemoResponse`, `richSuggestions`, `feedbackOptions` e `userName` dinâmico.
19
- - **`templates/HomePage.tsx` + `templates/AssistantPage.tsx` — `user` tipado como `{ email: string }`** tipo corrigido para `User | null` em ambas as páginas.
20
- - **`templates/AssistantPage.tsx` — `userName="Ariel Santos"` hardcoded** — substituído por `user?.name ?? 'Usuário'` para usar o dado real do usuário autenticado.
21
-
22
- ---
23
-
24
- ## [2.1.6] — 2026-05-19
25
-
26
- ### Fixed
27
-
28
- - **`templates/HomeContent.tsx` — JSX malformado causava crash da página** — tags `</div>`, `</ScrollArea>` e `</main>` estavam faltando após refatoração para `<PageContent>`, fazendo a página Home quebrar completamente ao renderizar.
29
- - **`templates/DashboardTemplate.tsx` — `StatsCard.trend` com tipo errado** — `trend` recebia um `number` primitivo (`trend={20.1}`) mas o prop exige um objeto `{ value: number; label?: string }`. Corrigido para `trend={{ value: 20.1, label: 'vs mês anterior' }}` em todos os 4 cards.
30
- - **`templates/DashboardTemplate.tsx` — `DonutBreakdownChart` com chaves acentuadas** — o `channelConfig` usava chaves como `Orgânico` que falhavam no lookup interno do chart. Renomeadas para ASCII (`organico`, `pago`, `social`, `direto`) com labels legíveis mantidas via `label:`.
31
- - **`templates/DashboardTemplate.tsx` — cast de `Badge.variant` sem type safety** — `event.status as 'default' | ...` foi substituído por um mapa `EVENT_BADGE_VARIANT` com tipagem `EventStatus` explícita.
32
- - **`templates/SettingsContent.tsx` — imports duplicados de `xertica-ui/hooks`** — `useTheme` e `useLayout` eram importados em duas linhas separadas do mesmo módulo. Unificados em um único import.
33
- - **`templates/SettingsContent.tsx` — `Separator`, `Badge` e `useNavigate` importados mas nunca usados** — removidos para evitar erros de lint/build.
34
- - **`templates/SettingsContent.tsx` — `Switch.onCheckedChange` com tipo incompatível** — `toggleTheme` é `() => void` mas `onCheckedChange` exige `(checked: boolean) => void`. Corrigido com wrapper arrow `() => toggleTheme()`.
35
-
36
- ---
37
-
38
- ## [2.1.5] — 2026-05-19
39
-
40
- ### Fixed
41
-
42
- - **`use-rich-text-editor` — `wordCount`/`characterCount` não reativos** — os contadores eram lidos via `editorRef.current` no corpo do render (sem estado reativo), ficando stale após cada keystroke. Convertidos para `useState` e atualizados dentro de `handleInput`. Um segundo `useEffect([value])` foi adicionado para atualizar os contadores quando o valor externo é sincronizado ao editor.
43
- - **`use-assistant-messages` — `setTimeout` da resposta AI nunca cancelado** — o timer da resposta simulada (1–2 s) não era cancelado ao desmontar o componente, causando chamadas de `setMensagens` em componente desmontado. Adicionado `responseTimerRef` + `useEffect` cleanup com `clearTimeout`.
44
- - **`use-assistant-messages` — `initialMessages` resetava a conversa a cada re-render** — o `useEffect` que sincronizava `initialMessages` disparava toda vez que a referência do array mudava, sobrescrevendo mensagens digitadas pelo usuário. Corrigido com `hydratedRef` (hydration one-shot).
45
- - **`use-assistant-messages` — auto-scroll forçado ignorava scroll do usuário** — `scrollIntoView` era chamado incondicionalmente em todo novo `mensagens`. Agora só rola se o usuário já está a menos de 120 px do final do container.
46
- - **`use-assistant-conversations` — `conversas` não sincronizado quando `savedConversations` muda** — o estado era inicializado uma vez no mount; atualizações externas da prop eram ignoradas. Adicionado `useEffect([savedConversations])` para re-sincronizar.
47
- - **`use-assistant-conversations` — `setTimeout` do comando não limpo no unmount** — `commandTimerRef` + cleanup `useEffect` adicionados para cancelar o timer ao desmontar.
48
- - **`use-audio-player` — `eslint-disable` mascarando deps stale no modo-switch effect** — o efeito de restauração de estado ao trocar `isFloating`/`variant` lia `currentTime` e `isPlaying` de uma closure stale. Corrigido com `currentTimeRef` e `isPlayingRef` (padrão "latest ref"), eliminando o `eslint-disable`.
49
- - **`use-rich-text-editor` — `eslint-disable` no `useEffect` de seleção** — o listener de `selectionchange` chamava `updateActiveFormats` via closure stale. Separado em dois effects: init (mount-only) e listener (via `updateActiveFormatsRef` para evitar re-registro a cada render).
50
- - **`use-assistant-conversations` — `conversasFiltradas` não memoizado** — recalculado em todo re-render do componente pai. Substituído por `useMemo([conversas, abaSelecionada])`.
51
- - **`use-assistant-messages` — `handleEnviarMensagem` tipado como `string | any`** — tipo colapsado para `any`. Corrigido para `(arg?: string) => Promise<void>`.
52
- - **`FileUpload` / `useFileUpload` — drop-zone inacessível por teclado** — adicionados `role="button"`, `tabIndex`, `onKeyDown` (Enter/Space abre o file picker) e `focus-visible:ring` à drop-zone.
53
- - **`useFileUpload` — `accept` não validado em drag-and-drop** — o browser só aplica `accept` nativamente no picker; arquivos de tipo diferente podiam ser soltos livremente. Adicionado helper `matchesAccept` que filtra por MIME type e extensão antes da validação de tamanho/contagem.
54
- - **`FileUpload` — tamanho de arquivo sempre em KB** — arquivos grandes exibiam `102400.00 KB`. Corrigido para exibição adaptativa KB/MB.
55
- - **`useStepper` — `initialStep` não clampado no mount** — valores fora de `[1, totalSteps]` vazavam diretamente para o estado. Corrigido com lazy initializer `Math.min(Math.max(1, initialStep), totalSteps)`.
56
- - **`use-pagination` — páginas duplicadas quando `siblingCount` grande** — o algoritmo de construção do `items` array podia inserir a mesma página duas vezes quando o sibling range coincidia com os push explícitos de `page 2` / `page totalPages-1`. Reescrito com `Set` deduplicado; ellipsis inferido do gap entre páginas consecutivas.
57
- - **`use-tree-view` — Space key disparava `handleSelect` em nós pai** — segundo a spec WAI-ARIA tree, Space em branch deve apenas expandir/colapsar; Select fica reservado para Enter e nós folha. Corrigido no `handleKeyDown`.
58
- - **`chart-metric.tsx` — `stateClassName` passado duas vezes para `getChartState`** — em todas as 3 instâncias de `RadarMetricChart`, `PieMetricChart` e `RadialBarMetricChart`, `stateClassName` aparecia dentro do props object e novamente como 3º argumento separado. 3º argumento removido.
59
- - **`use-assistant-conversations` — magic string `'5'` como command ID hardcoded** — comentário de TODO mantido; o timer cleanup foi aplicado independentemente.
60
-
61
- ### Added
62
-
63
- - **`useFileUpload` — `clearFiles()`** — nova função na API pública do hook que remove todos os arquivos aceitos e limpa o `errorMessage` em uma única chamada.
64
- - **`useFileUpload` — prop `accept`** — o hook agora aceita e aplica o filtro `accept` tanto no drag-and-drop quanto no click-to-browse (anteriormente, `accept` era apenas passado ao `<input>` sem enforçar em drops).
14
+ - **`useRichTextEditor` — `wordCount`/`characterCount` agora são `useState`**as IIFEs que calculavam os contadores a cada render foram substituídas por estado React (`useState(0)`). `handleInput` atualiza os contadores imediatamente após cada digitação; um `useEffect([value])` os sincroniza quando o valor é alterado externamente.
15
+ - **`useRichTextEditor` — `eslint-disable` removido do effect de seleção** o effect único de mount com `// eslint-disable-next-line` foi dividido em dois: um `useRef` que mantém `updateActiveFormats` sempre atualizado e um effect de mount-only que registra o listener `selectionchange` via ref, eliminando re-registros e o disable de lint.
16
+ - **`useAssistant` — timers vazados corrigidos** — `responseTimerRef` e `commandTimerRef` substituem os `setTimeout` bare em `handleEnviarMensagem` e `handleExecuteSearchCommand`; um effect de cleanup no unmount cancela ambos com `clearTimeout`.
17
+ - **`useAssistant` — hydration one-shot de `initialMessages`**`hydratedRef` garante que `setMensagens(initialMessages)` ocorra apenas uma vez, evitando reset do histórico em re-renders.
18
+ - **`useAssistant` — scroll condicional 120px** o auto-scroll aciona `scrollIntoView` quando o usuário está a menos de 120 px do fundo, preservando a posição durante leitura de histórico.
19
+ - **`useAudioPlayer` `eslint-disable` removido do effect de modo-switch** — `currentTimeRef` e `isPlayingRef` (latest-ref pattern) substituem referências diretas ao estado dentro do effect `[isFloating, variant]`, eliminando a necessidade do disable de lint.
20
+ - **`useStepper` — `initialStep` inválido** — lazy initializer com `Math.min(Math.max(1, initialStep), totalSteps)` garante que o estado inicial nunca fique fora do intervalo `[1, totalSteps]`.
21
+ - **`useTreeView` — `Space` e `Enter` separados** — `Space` expande/colapsa nós-pai e seleciona folhas; `Enter` expande/colapsa e sempre seleciona, alinhando com WAI-ARIA Tree Pattern 1.2.
65
22
 
66
23
  ### Changed
67
24
 
68
- - **`Stepper` — ARIA** — adicionados `role="list"` + `aria-label="Progresso: etapa X de Y"` no `<Stepper>` e `role="listitem"` + `aria-current="step"` + `aria-label` descritivo em cada `<Step>`, tornando o componente acessível a screen readers.
69
- - **`PaginationLink` — `disabled` prop + `href` fallback** — `PaginationLink` agora aceita `disabled` (aplica `aria-disabled`, `tabIndex=-1` e `pointer-events-none`) e faz fallback para `href="#"` quando `href` não é passado, garantindo que o link permaneça focusável via Tab em SPAs. `PaginationPrevious` e `PaginationNext` receberam o `disabled` pass-through.
70
- - **`TreeView` — ARIA e roving tabindex** — adicionado `aria-label` (padrão `"Navegação em árvore"`) no `role="tree"` (WCAG 4.1.2); implementado roving tabindex correto: `focusableId = selectedId ?? firstRootId` garante que sempre haja um focusável por Tab mesmo sem seleção ativa.
71
- - **`RichTextEditor` — ARIA no `contentEditable`** — adicionados `role="textbox"`, `aria-multiline="true"`, `aria-label`, `aria-readonly` e `aria-disabled` ao div editável.
72
- - **`RichTextEditor` — removido "Auto-save ativo"** — texto no rodapé que indicava auto-save não implementado. Removido para não enganar o usuário.
73
- - **`RichTextEditor` — sync de `value` externo** adicionado `useEffect([value])` que sincroniza o HTML do editor quando o valor muda externamente e o editor não está em foco (ex.: carregar dados da API após o mount).
74
- - **`Sidebar` — `<nav>` landmark + `aria-expanded` + `useMemo`** — o root `<div>` foi substituído por `<nav aria-label="Navegação principal" id="sidebar-nav">`; o botão de toggle recebeu `aria-expanded` e `aria-controls`; `navigationItems` foi envolvido em `useMemo([routes, pathname])` e a dependency do effect de overflow foi atualizada de `navigationItems.length` para `navigationItems`.
75
- - **`DashboardBarChart` — `topOfStack` com `useMemo`** — computação que determinava qual bar recebe radius no topo do stack foi extraída da IIFE inline para `React.useMemo([stacked, chartSeries])`, evitando recalcular a cada render.
76
- - **Documentação**corrigidas e atualizadas as docs de `file-upload.md`, `stepper.md`, `pagination.md`, `tree-view.md`, `rich-text-editor.md`, `sidebar.md`, `chart.md` e `hooks.md` para refletir todas as mudanças desta versão.
25
+ - **`RichTextEditor` — ARIA no `contentEditable`** — adicionados `role="textbox"`, `aria-multiline`, `aria-label`, `aria-readonly` e `aria-disabled` no div editável. Removido o texto "Auto-save ativo" do rodapé (informação sem valor de UX).
26
+ - **`Stepper` — ARIA de lista** — o wrapper dos steps recebe `role="list"` + `aria-label="Progresso: etapa N de M"`. Cada `<Step>` recebe `role="listitem"`, `aria-current="step"` (quando ativo) e `aria-label` composto com status (atual/concluída).
27
+ - **`Pagination` — prop `disabled` em `PaginationLink`** `PaginationLink` aceita `disabled?: boolean`; quando ativo aplica `pointer-events-none opacity-50`, `aria-disabled`, `tabIndex={-1}` e remove `href`. `PaginationPrevious` e `PaginationNext` repassam `disabled` ao link.
28
+ - **`usePagination` — algoritmo deduplicado com `Set`** — o cálculo de `items` foi reescrito usando `Set<number>` para garantir que cada página apareça exatamente uma vez, eliminando edge cases do algoritmo anterior com `leftSibling === 2` / `rightSibling === totalPages - 1`.
29
+ - **`TreeView` — prop `ariaLabel` + roving tabindex** — `<TreeView>` aceita `ariaLabel?: string` (padrão `"Navegação em árvore"`) aplicado ao `role="tree"`. O `tabIndex` de cada item usa roving tabindex: `focusableId = effectiveSelectedId ?? data[0]?.id` em vez de `isSelected ? 0 : -1`.
30
+ - **`DashboardBarChart` — `topOfStack` com `useMemo`**a IIFE que calculava o conjunto de barras do topo do stack no JSX foi extraída para `React.useMemo([stacked, chartSeries])` antes do `return`, separando lógica de render.
31
+ - **`useAssistant` — `conversasFiltradas` com `useMemo`** — substituída computação inline por `useMemo([conversas, abaSelecionada])`.
32
+ - **`useAssistant` — sincronização de `conversas` com `savedConversations`** — adicionado `useEffect([savedConversations])` que mantém `conversas` em sync com a prop `savedConversations`.
33
+ - **`useAssistant`tipos fortalecidos** `handleEnviarMensagem` tipado como `(arg?: string | ActionType) => Promise<void>` na interface e na implementação, substituindo `string | any`.
34
+ - **`sidebar.tsx` — ARIA e `useMemo`** — botão de toggle recebe `aria-expanded` e `aria-controls="sidebar-nav"`; o `<nav>` recebe `id="sidebar-nav"` e `aria-label="Navegação principal"`. `labelTranslations` e `navigationItems` memoizados com `useMemo`; dependência do effect de overflow atualizada de `navigationItems.length` para `navigationItems`.
77
35
 
78
36
  ---
79
37
 
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  > **Enterprise-grade React design system** built on Tailwind CSS v4, Radix UI, and Lucide Icons — with a robust AI-first documentation layer for precise LLM-driven composition and autonomous agent interaction.
4
4
 
5
- [![npm version](https://img.shields.io/badge/npm-2.1.7-blue)](https://www.npmjs.com/package/xertica-ui)
5
+ [![npm version](https://img.shields.io/badge/npm-2.1.4-blue)](https://www.npmjs.com/package/xertica-ui)
6
6
  [![license](https://img.shields.io/badge/license-proprietary-red)](./LICENSE)
7
7
 
8
8
  ---
package/bin/cli.ts CHANGED
@@ -18,7 +18,7 @@ const program = new Command();
18
18
  program
19
19
  .name('xertica-ui')
20
20
  .description('CLI to initialize Xertica UI projects')
21
- .version('2.1.7');
21
+ .version('2.1.9');
22
22
 
23
23
  program
24
24
  .command('init')