@topjoao/top-design-system 0.1.0 → 0.1.1-beta.0

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/README.md CHANGED
@@ -21,6 +21,7 @@ TopSolutions.
21
21
  | `TopDatePicker` | Campo de data, múltiplas datas ou intervalo. | `Date`/array de `Date` |
22
22
  | `TopFileUpload` | Escolha, validação e prévia de arquivos; não faz upload. | `File`/`File[]`/`null` |
23
23
  | `TopInputText` | Campo textual com label, erro e acessibilidade. | `string` |
24
+ | `TopInputNumber` | Campo numérico localizado, com moeda, limites e incrementos. | `number \| null` |
24
25
  | `TopNavBar` | Navegação responsiva, breadcrumbs, favoritos e Drawer. | `searchValue` e `mobileOpen` opcionais |
25
26
  | `TopSelect` | Autocomplete pesquisável com paginação virtual. | opção/opções |
26
27
  | `TopTabs` | Abas com painéis nomeados. | `string \| number` |
@@ -258,7 +259,7 @@ sendo explorado recebem destaque.
258
259
  | `aiaActive` | `boolean` / `false` | Estado visual do botão Aia. |
259
260
  | `aiaLabel`, `supportLabel` | `string` | Textos acessíveis e rótulos do Drawer. |
260
261
  | `actions` | `TopNavAction[]` / `[]` | Ações genéricas, como integrações, emitidas por `action`. |
261
- | `client` | `TopNavClient` | Organização, cliente ou escopo ativo exibido no cabeçalho; não cria ação nem seletor. |
262
+ | `client` | `TopNavClient` | Organização, cliente ou escopo ativo exibido no cabeçalho e como contexto do usuário no rodapé do Drawer; não cria ação nem seletor. |
262
263
  | `user` | `TopNavUser` | Dados exclusivamente visuais do usuário. |
263
264
  | `userMenuItems` | `TopNavUserMenuItem[]` | Opções emitidas por `user-action`; suporta separadores. |
264
265
  | `favoriteItems` | `TopNavItem[]` / `[]` | Favoritos fornecidos pelo pai para dropdown e Drawer. |
@@ -304,7 +305,7 @@ atalho abre primeiro o Drawer e foca a busca móvel. `Escape` fecha os painéis.
304
305
  | `drawer-actions` | Ações; recebe `{ actions, select, close }`. |
305
306
  | `drawer-before-menu`, `drawer-after-menu` | Conteúdo antes/depois do trilho rolável. |
306
307
  | `drawer-menu` | Substitui a árvore; recebe `{ sections, select, close }`. |
307
- | `drawer-user` | Rodapé de usuário; recebe `{ user, open, toggle }`. |
308
+ | `drawer-user` | Rodapé de usuário; recebe `{ user, client, open, toggle }`. |
308
309
  | `drawer-footer` | Conteúdo final adicional; recebe `{ close }`. |
309
310
 
310
311
  ### Faixa de favoritos
@@ -382,7 +383,9 @@ quiser controlar exatamente o que permanece visível.
382
383
 
383
384
  Abaixo de `1024px`, a navegação desktop desaparece e o Drawer do PrimeVue assume.
384
385
  Ele mantém cabeçalho, busca, ações, trilho translúcido rolável, árvore recursiva,
385
- favoritos e usuário. A transição `menu-expand` existe somente dentro do Drawer;
386
+ favoritos e usuário. No rodapé, a foto e o nome do usuário formam a primeira
387
+ linha; o cliente atual aparece abaixo e o subtítulo do cliente recebe uma
388
+ etiqueta quando houver. A transição `menu-expand` existe somente dentro do Drawer;
386
389
  os dropdowns desktop abrem sem animação e suas áreas de hover incluem o espaço
387
390
  entre gatilho e painel. Nessa largura, os breadcrumbs deixam de rolar
388
391
  horizontalmente: eles quebram em linhas e o bloco da página atual ocupa sua
@@ -614,7 +617,95 @@ MIME (`image/*`), separados por vírgula. `maxFileSize` é contado em bytes. Em
614
617
  modo simples, a última seleção válida substitui a anterior; com `multiple`,
615
618
  arquivos válidos são acumulados sem duplicar nome, tipo e tamanho.
616
619
 
617
- ## TopInputText
620
+ ## TopInputNumber
621
+
622
+ Campo numérico baseado no `InputNumber` do PrimeVue, com a mesma estrutura de
623
+ label, erro e acessibilidade dos demais campos. Por padrão usa `pt-BR`. No modo
624
+ `decimal`, o usuário informa explicitamente o separador decimal; no modo
625
+ `currency`, a máscara de centavos vem habilitada e transforma `12345` em
626
+ `R$ 123,45`. O `v-model` permanece sempre numérico (`number`) ou `null` quando
627
+ vazio.
628
+
629
+ ```vue
630
+ <script setup lang="ts">
631
+ import { ref } from 'vue'
632
+ import { TopInputNumber } from '@topjoao/top-design-system'
633
+
634
+ const quantidade = ref<number | null>(null)
635
+ const valorUnitario = ref<number | null>(null)
636
+ </script>
637
+
638
+ <template>
639
+ <TopInputNumber
640
+ v-model="quantidade"
641
+ label="Quantidade"
642
+ :min="1"
643
+ :min-fraction-digits="2"
644
+ :max-fraction-digits="4"
645
+ required
646
+ />
647
+
648
+ <TopInputNumber
649
+ v-model="valorUnitario"
650
+ label="Valor unitário"
651
+ mode="currency"
652
+ currency="BRL"
653
+ :min-fraction-digits="2"
654
+ :max-fraction-digits="2"
655
+ />
656
+ </template>
657
+ ```
658
+
659
+ | Prop | Tipo | Padrão | Finalidade |
660
+ |---|---|---|---|
661
+ | `modelValue` | `number \| null` | `null` | Valor numérico controlado. |
662
+ | `label` / `placeholder` | `string` | `''` / `''` | Rótulo e texto auxiliar do campo. |
663
+ | `required` | `boolean` | `false` | Asterisco visual e atributo nativo obrigatório. |
664
+ | `error` | `string` | `''` | Mensagem e estado inválido. |
665
+ | `invalid` | `boolean` | `false` | Força estado inválido sem mostrar mensagem. |
666
+ | `disabled` / `readonly` | `boolean` | `false` / `false` | Remove interação / preserva leitura sem desabilitar. |
667
+ | `locale` | `string` | `'pt-BR'` | Locale para separadores e moeda. |
668
+ | `mode` | `'decimal' \| 'currency'` | `'decimal'` | Formatação decimal ou monetária. |
669
+ | `currency` / `currencyDisplay` | `string` / `'symbol' \| 'code' \| 'name'` | `undefined` / `'symbol'` | Código ISO 4217 e modo de exibição da moeda. |
670
+ | `currencyInputMode` | `'decimal' \| 'cents'` | `'cents'` | Controla a entrada monetária; `decimal` desliga a máscara mesmo quando `cents` é `true`. Não afeta `mode="decimal"`. |
671
+ | `cents` | `boolean` | `true` | Habilita a máscara automática somente em `mode="currency"`; `false` usa o `InputNumber` padrão. |
672
+ | `centsFractionDigits` | `number` | `undefined` (efetivo: `2`) | Primeira opção para definir as casas da máscara monetária. |
673
+ | `currencyFractionDigits` | `number` | `undefined` | Fallback de casas da máscara, usado depois de `centsFractionDigits`. |
674
+ | `useGrouping` / `format` | `boolean` | `true` / `true` | Separadores de milhar e formatação do valor. |
675
+ | `minFractionDigits` / `maxFractionDigits` | `number` | `undefined` | Precisão do PrimeVue. Sem `maxFractionDigits`, o modo decimal aceita até 20 casas; a máscara monetária usa esse valor como último fallback antes de `2`. |
676
+ | `min` / `max` / `step` | `number` | `undefined` / `undefined` / `1` | Limites e passo dos botões/teclado. |
677
+ | `showButtons` / `buttonLayout` | `boolean` / `'stacked' \| 'horizontal' \| 'vertical'` | `false` / `'stacked'` | Exibe e organiza os controles de incremento. |
678
+ | `allowEmpty` / `showClear` / `highlightOnFocus` | `boolean` | `true` / `false` / `false` | Permite limpar, mostra ícone de limpeza e seleciona valor ao focar. |
679
+
680
+ Eventos: `update:modelValue` (`number | null`), `input`, `focus` e `blur`. No
681
+ fluxo padrão do `InputNumber`, o componente também repassa `value-change`.
682
+ Atributos adicionais, como `name`, `autocomplete`, `aria-*` e `data-*`, são
683
+ repassados ao controle interno.
684
+
685
+ Quando a máscara de centavos não está ativa, os slots do `InputNumber` também
686
+ são repassados: `incrementbutton` e
687
+ `decrementbutton` recebem `{ listeners }`; `incrementicon` e `decrementicon`
688
+ substituem os ícones; `clearicon` recebe `{ clearCallback }`.
689
+
690
+ Para reproduzir a digitação monetária do TopLicita, a máscara de centavos já
691
+ vem ativa em `mode="currency"`. O usuário digita somente dígitos: `12345`
692
+ resulta em `R$ 123,45` e o `v-model` recebe `123.45`. Para exigir a vírgula
693
+ decimal digitada pelo usuário, passe `:cents="false"` ou
694
+ `currency-input-mode="decimal"`.
695
+ Como a máscara controla o texto enquanto o usuário digita, nesse modo os
696
+ botões incrementais, o ícone de limpeza e seus slots do `InputNumber` não são
697
+ renderizados.
698
+
699
+ ```vue
700
+ <TopInputNumber
701
+ v-model="valorUnitario"
702
+ label="Valor unitário"
703
+ mode="currency"
704
+ currency="BRL"
705
+ />
706
+ ```
707
+
708
+ ## TopInputText
618
709
 
619
710
  Campo textual baseado no `InputText` do PrimeVue. O `v-model` é sempre
620
711
  `string`, inclusive para códigos, documentos e identificadores compostos
@@ -863,6 +954,10 @@ import {
863
954
  type TopDatePickerValue,
864
955
  type TopFileUploadError,
865
956
  type TopFileUploadValue,
957
+ type TopInputNumberValue,
958
+ type TopInputNumberMode,
959
+ type TopInputNumberButtonLayout,
960
+ type TopInputNumberCurrencyInputMode,
866
961
  type TopNavItem,
867
962
  type TopNavSection,
868
963
  type TopTabItem,
@@ -878,7 +973,11 @@ obrigatório. `TopNavAction`, `TopNavUser`, `TopNavClient` e
878
973
  `TopNavBarColors`, `TopNavBarSurfaces`, `TopNavBarBorders`, `TopNavBarShape` e
879
974
  `TopNavBarFocus`.
880
975
 
881
- `colors` expõe as escalas imutáveis `primary`, `secondary`, `success`, `warn` e
976
+ `TopInputNumberValue`, `TopInputNumberMode`, `TopInputNumberButtonLayout` e
977
+ `TopInputNumberCurrencyInputMode`
978
+ tipam, respectivamente, o valor, o modo de formatação, o layout dos botões e o
979
+ modo de entrada monetária do campo numérico. `colors` expõe as escalas
980
+ imutáveis `primary`, `secondary`, `success`, `warn` e
882
981
  `danger`, cada uma com tons de `50` a `950`.
883
982
 
884
983
  ## Desenvolvimento da biblioteca
@@ -907,7 +1006,7 @@ npm run storybook
907
1006
  ```
908
1007
 
909
1008
  Abra `http://localhost:6006` para acessar as histórias de `TopButton`,
910
- `TopConfirmDialog`, `TopDatePicker`, `TopInputText`, `TopSelect` e `TopTabs`. Use o botão de
1009
+ `TopConfirmDialog`, `TopDatePicker`, `TopInputText`, `TopInputNumber`, `TopSelect` e `TopTabs`. Use o botão de
911
1010
  contraste na barra superior para alternar o preview entre tema claro e escuro.
912
1011
  Para gerar a versão estática da documentação, execute:
913
1012