@zeroman.yang/react-auto-components 0.1.2 → 0.1.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 (106) hide show
  1. package/README.md +17 -3
  2. package/dist/adapters/xlsx.d.ts +7 -1
  3. package/dist/components/AutoChat/types.d.ts +7 -0
  4. package/dist/components/AutoDialog/index.d.ts +15 -0
  5. package/dist/components/AutoForm/types.d.ts +28 -0
  6. package/dist/components/AutoMenu/index.d.ts +7 -0
  7. package/dist/components/AutoSearch/index.d.ts +40 -0
  8. package/dist/components/AutoTable/registry.d.ts +8 -0
  9. package/dist/components/AutoTable/types.d.ts +69 -3
  10. package/dist/components/AutoTabs/index.d.ts +21 -2
  11. package/dist/components/AutoTabs/useAutoTabsWorkspace.d.ts +65 -0
  12. package/dist/core/AutoConfigProvider.d.ts +27 -0
  13. package/dist/core/config.d.ts +6 -1
  14. package/dist/core/dev.d.ts +27 -0
  15. package/dist/core/errors.d.ts +20 -0
  16. package/dist/core/query.d.ts +9 -0
  17. package/dist/core/registry.d.ts +33 -0
  18. package/dist/core/testid.d.ts +5 -0
  19. package/dist/core/types.d.ts +320 -17
  20. package/dist/errors-BT5WUIOV.js +28 -0
  21. package/dist/index.d.ts +4 -1
  22. package/dist/index.js +1889 -1465
  23. package/dist/style.css +1 -1
  24. package/dist/xlsx.js +13 -6
  25. package/docs/auto-dialog.md +64 -0
  26. package/docs/auto-form.md +64 -0
  27. package/docs/auto-menu.md +47 -0
  28. package/docs/auto-search.md +60 -0
  29. package/docs/auto-table.md +144 -0
  30. package/docs/auto-tabs.md +99 -0
  31. package/docs/errors.md +118 -0
  32. package/docs/i18n/de/README.md +8 -2
  33. package/docs/i18n/de/auto-dialog.md +23 -0
  34. package/docs/i18n/de/auto-form.md +35 -0
  35. package/docs/i18n/de/auto-menu.md +23 -0
  36. package/docs/i18n/de/auto-search.md +32 -0
  37. package/docs/i18n/de/auto-table.md +31 -0
  38. package/docs/i18n/de/auto-tabs.md +25 -0
  39. package/docs/i18n/de/errors.md +110 -0
  40. package/docs/i18n/es/README.md +8 -2
  41. package/docs/i18n/es/auto-dialog.md +23 -0
  42. package/docs/i18n/es/auto-form.md +35 -0
  43. package/docs/i18n/es/auto-menu.md +23 -0
  44. package/docs/i18n/es/auto-search.md +32 -0
  45. package/docs/i18n/es/auto-table.md +31 -0
  46. package/docs/i18n/es/auto-tabs.md +25 -0
  47. package/docs/i18n/es/errors.md +110 -0
  48. package/docs/i18n/fr/README.md +8 -2
  49. package/docs/i18n/fr/auto-dialog.md +23 -0
  50. package/docs/i18n/fr/auto-form.md +35 -0
  51. package/docs/i18n/fr/auto-menu.md +23 -0
  52. package/docs/i18n/fr/auto-search.md +32 -0
  53. package/docs/i18n/fr/auto-table.md +31 -0
  54. package/docs/i18n/fr/auto-tabs.md +25 -0
  55. package/docs/i18n/fr/errors.md +110 -0
  56. package/docs/i18n/ja/README.md +8 -2
  57. package/docs/i18n/ja/auto-dialog.md +23 -0
  58. package/docs/i18n/ja/auto-form.md +36 -0
  59. package/docs/i18n/ja/auto-menu.md +23 -0
  60. package/docs/i18n/ja/auto-search.md +34 -0
  61. package/docs/i18n/ja/auto-table.md +31 -0
  62. package/docs/i18n/ja/auto-tabs.md +25 -0
  63. package/docs/i18n/ja/errors.md +110 -0
  64. package/docs/i18n/ko/README.md +8 -2
  65. package/docs/i18n/ko/auto-dialog.md +23 -0
  66. package/docs/i18n/ko/auto-form.md +35 -0
  67. package/docs/i18n/ko/auto-menu.md +23 -0
  68. package/docs/i18n/ko/auto-search.md +32 -0
  69. package/docs/i18n/ko/auto-table.md +31 -0
  70. package/docs/i18n/ko/auto-tabs.md +25 -0
  71. package/docs/i18n/ko/errors.md +110 -0
  72. package/docs/i18n/pt-BR/README.md +8 -2
  73. package/docs/i18n/pt-BR/auto-dialog.md +23 -0
  74. package/docs/i18n/pt-BR/auto-form.md +35 -0
  75. package/docs/i18n/pt-BR/auto-menu.md +23 -0
  76. package/docs/i18n/pt-BR/auto-search.md +32 -0
  77. package/docs/i18n/pt-BR/auto-table.md +31 -0
  78. package/docs/i18n/pt-BR/auto-tabs.md +25 -0
  79. package/docs/i18n/pt-BR/errors.md +110 -0
  80. package/docs/i18n/ru/README.md +8 -2
  81. package/docs/i18n/ru/auto-dialog.md +23 -0
  82. package/docs/i18n/ru/auto-form.md +35 -0
  83. package/docs/i18n/ru/auto-menu.md +23 -0
  84. package/docs/i18n/ru/auto-search.md +32 -0
  85. package/docs/i18n/ru/auto-table.md +31 -0
  86. package/docs/i18n/ru/auto-tabs.md +25 -0
  87. package/docs/i18n/ru/errors.md +110 -0
  88. package/docs/i18n/zh-CN/README.md +8 -2
  89. package/docs/i18n/zh-CN/auto-dialog.md +64 -0
  90. package/docs/i18n/zh-CN/auto-form.md +62 -0
  91. package/docs/i18n/zh-CN/auto-menu.md +47 -0
  92. package/docs/i18n/zh-CN/auto-search.md +55 -0
  93. package/docs/i18n/zh-CN/auto-table.md +62 -0
  94. package/docs/i18n/zh-CN/auto-tabs.md +99 -0
  95. package/docs/i18n/zh-CN/errors.md +112 -0
  96. package/docs/i18n/zh-TW/README.md +8 -2
  97. package/docs/i18n/zh-TW/auto-dialog.md +64 -0
  98. package/docs/i18n/zh-TW/auto-form.md +62 -0
  99. package/docs/i18n/zh-TW/auto-menu.md +47 -0
  100. package/docs/i18n/zh-TW/auto-search.md +55 -0
  101. package/docs/i18n/zh-TW/auto-table.md +62 -0
  102. package/docs/i18n/zh-TW/auto-tabs.md +44 -0
  103. package/docs/i18n/zh-TW/errors.md +112 -0
  104. package/llms.txt +69 -0
  105. package/package.json +18 -2
  106. package/dist/components/AutoSearchPanel/index.d.ts +0 -21
@@ -0,0 +1,23 @@
1
+ # AutoDialog
2
+
3
+ [English](../../auto-dialog.md) | [简体中文](../zh-CN/auto-dialog.md) | [繁體中文](../zh-TW/auto-dialog.md) | [日本語](../ja/auto-dialog.md) | [한국어](../ko/auto-dialog.md) | [Español](../es/auto-dialog.md) | [Français](../fr/auto-dialog.md) | [Deutsch](../de/auto-dialog.md) | **Português (Brasil)** | [Русский](../ru/auto-dialog.md)
4
+
5
+ Diálogo modal, declarativo (`<AutoDialog open>`) ou imperativo (`useAutoDialog().open()`). `fields` desenha um [AutoForm](auto-form.md).
6
+
7
+ `useAutoDialog()` fora do provedor lança `RAC-DIALOG-PROVIDER`. `<AutoDialog open>` não precisa do provedor.
8
+
9
+ ## Comportamento e props
10
+
11
+ | Prop | Comportamento |
12
+ | --- | --- |
13
+ | `onSubmit(values)` | Depois da validação. **Rejeitar ou lançar: o diálogo continua aberto, mostra `error.message` e os valores ficam.** Depois do resolve, `beforeClose` ainda corre. |
14
+ | `beforeClose(reason)` | `"submit"`, `"cancel"` ou `"close"`. **`false` deixa aberto. Lançar também deixa aberto e mostra a mensagem.** |
15
+ | `onClose` | Só depois de fechar de verdade. |
16
+ | `draftKey` | Guarda o rascunho em `${namespace}:draft:${draftKey}` até um envio bem-sucedido. Omitido, nada é gravado. |
17
+ | `width` | Padrão `560`. `draggable` é ignorado em tela cheia. |
18
+
19
+ `close()` de `open()` resolve `false` se `beforeClose` bloquear. Diálogos imperativos empilham.
20
+
21
+ ## Pré-condições
22
+
23
+ Importe `style.css` uma vez. `AutoConfigProvider` é opcional e não substitui `AutoDialogProvider`. `namespace` entra na chave do rascunho.
@@ -0,0 +1,35 @@
1
+ # AutoForm
2
+
3
+ [English](../../auto-form.md) | [简体中文](../zh-CN/auto-form.md) | [繁體中文](../zh-TW/auto-form.md) | [日本語](../ja/auto-form.md) | [한국어](../ko/auto-form.md) | [Español](../es/auto-form.md) | [Français](../fr/auto-form.md) | [Deutsch](../de/auto-form.md) | **Português (Brasil)** | [Русский](../ru/auto-form.md)
4
+
5
+ Formulário por esquema. `AutoSearch` e `AutoDialog` desenham um `AutoForm`, então estas regras de callback valem para eles.
6
+
7
+ `Field<T>` é uma união discriminada por `type`. `select` sem `options`, um escalar em `daterange` e `match: "between"` num escalar são erros de TypeScript. `AnyField` e `unsafeField()` são a saída; o modo de desenvolvimento ainda avisa. Códigos em [errors.md](errors.md).
8
+
9
+ ## Comportamento e props
10
+
11
+ | Prop | Comportamento |
12
+ | --- | --- |
13
+ | `fields` | `readonly Field<T>[]`. Sem `type` é um texto. `name` duplicado lança `RAC-FIELD-DUPLICATE` na montagem. |
14
+ | `value` | Valor controlado. Se diferir do estado interno, o formulário copia e limpa erros. Se o pai ignorar `onChange`, o input volta. |
15
+ | `onSubmit(value)` | Só depois da validação. **Rejeitar ou lançar: os valores ficam, `error.message` aparece e não há reset.** |
16
+ | `columns` | Padrão `2`. `actions` padrão `true`. |
17
+ | Rótulos | `labelPosition` padrão `"top"`. `labelWidth` padrão `"auto"` (medido, teto de 45% do campo). |
18
+
19
+ ## Se um callback lançar
20
+
21
+ | Callback | Resultado |
22
+ | --- | --- |
23
+ | `onSubmit` | Capturado. O rascunho fica. A mensagem aparece. Sem reset. |
24
+ | `rules` do campo | A mensagem lançada vira o erro daquele campo. As regras seguintes não rodam. |
25
+ | `onChange` do campo | Não capturado. O valor anterior fica. |
26
+ | `upload` | A rejeição aparece sob o input e nada é gravado. `reset()` aborta o sinal e descarta um resultado tardio. |
27
+ | Envio com upload em andamento | `validate()` devolve `false` e não chama `onSubmit`. |
28
+ | `hidden`, `disabled` ou sem acesso | Esse campo não é validado, mesmo se `required`. |
29
+ | `required` vazio | `undefined`, `null`, `""` ou um array vazio bloqueiam o envio. |
30
+
31
+ `handle.validate()` resolve `true` ou `false`. Não lança.
32
+
33
+ ## Pré-condições
34
+
35
+ Importe `style.css` uma vez. Em desenvolvimento, a falta de `--auto-text` avisa `RAC-CSS-MISSING`. `AutoConfigProvider` é opcional e não monta diálogos.
@@ -0,0 +1,23 @@
1
+ # AutoMenu
2
+
3
+ [English](../../auto-menu.md) | [简体中文](../zh-CN/auto-menu.md) | [繁體中文](../zh-TW/auto-menu.md) | [日本語](../ja/auto-menu.md) | [한국어](../ko/auto-menu.md) | [Español](../es/auto-menu.md) | [Français](../fr/auto-menu.md) | [Deutsch](../de/auto-menu.md) | **Português (Brasil)** | [Русский](../ru/auto-menu.md)
4
+
5
+ Barra lateral. Para painéis, [AutoTabs](auto-tabs.md).
6
+
7
+ ## Comportamento e props
8
+
9
+ | Prop | Comportamento |
10
+ | --- | --- |
11
+ | `items` | `id` único na árvore. `hidden` e um `canAccess` que falha descartam o item. Um `children` que aponta para um ancestral é descartado por inteiro para um esquema ruim não recursar. |
12
+ | `value` | Id da folha selecionada. Omitido, a seleção fica interna. |
13
+ | `onChange(id, item, path)` | **Não é capturado.** `path` é a cadeia de ids da raiz até a folha. Um pai com filhos só alterna a expansão e não é selecionado. |
14
+ | `collapsible` | Padrão `false`. Se `collapsed` for controlado, atualize-o em `onCollapsedChange` ou o trilho não se move. **`onCollapsedChange` não é capturado.** |
15
+ | `disabled` | Desabilita o item e os descendentes. A seleção os pula. |
16
+
17
+ Escolher uma folha não navega sozinho. O único sinal é `onChange`.
18
+
19
+ ## Pré-condições
20
+
21
+ Importe `style.css` uma vez. `AutoConfigProvider` é opcional. Permissões usam `config.canAccess`.
22
+
23
+ Importe uma vez na entrada do aplicativo `import "@zeroman.yang/react-auto-components/style.css"`. Sem a folha de estilos, o modo de desenvolvimento avisa com `RAC-CSS-MISSING`.
@@ -0,0 +1,32 @@
1
+ # AutoSearch
2
+
3
+ [English](../../auto-search.md) | [简体中文](../zh-CN/auto-search.md) | [繁體中文](../zh-TW/auto-search.md) | [日本語](../ja/auto-search.md) | [한국어](../ko/auto-search.md) | [Español](../es/auto-search.md) | [Français](../fr/auto-search.md) | [Deutsch](../de/auto-search.md) | **Português (Brasil)** | [Русский](../ru/auto-search.md)
4
+
5
+ Formulário de busca. Desenha um `AutoForm` e emite um `QueryNode` e os valores. Se um callback de campo lançar, valem as regras de [AutoForm](auto-form.md).
6
+
7
+ `AutoSearchPanel` e `AutoSearchPanelProps` são aliases obsoletos de `AutoSearch` e `AutoSearchProps`.
8
+
9
+ ## Comportamento e props
10
+
11
+ | Prop | Comportamento |
12
+ | --- | --- |
13
+ | `onSearch(query, values)` | Obrigatório. **Lançar ou rejeitar: o formulário interno captura, os valores ficam e `error.message` aparece. Sem reset.** |
14
+ | `mode` | Padrão `"manual"` (botão). `"instant"` busca também a cada mudança. |
15
+ | `columns` | Padrão `3`. |
16
+ | `more: true` | Esconde o campo até abrir "Mais". Campos ocultos não entram na consulta. |
17
+
18
+ | `match` | Valor |
19
+ | --- | --- |
20
+ | omitido | `"eq"`, ou `"in"` se o valor for um array. |
21
+ | `"contains"` | Substring. `ignoreCase: true` ignora maiúsculas. |
22
+ | `"between"` | `[from, to]`. Um escalar avisa `RAC-FIELD-BETWEEN` e não casa com linhas. |
23
+ | `"isNull"` | Casa com null ou undefined. O valor digitado é ignorado. |
24
+ | vazio | `undefined`, `null`, `""` e arrays vazios são omitidos, salvo `"isNull"`. |
25
+
26
+ O reset restaura `defaultValue` e então busca. `serializeRsql` lança `RAC-QUERY-FIELD` se o nome não cumprir `/^[\w.]+$/`.
27
+
28
+ ## Pré-condições
29
+
30
+ Importe `style.css` uma vez. `AutoConfigProvider` é opcional.
31
+
32
+ Importe uma vez na entrada do aplicativo `import "@zeroman.yang/react-auto-components/style.css"`. Sem a folha de estilos, o modo de desenvolvimento avisa com `RAC-CSS-MISSING`.
@@ -0,0 +1,31 @@
1
+ # AutoTable
2
+
3
+ [English](../../auto-table.md) | [简体中文](../zh-CN/auto-table.md) | [繁體中文](../zh-TW/auto-table.md) | [日本語](../ja/auto-table.md) | [한국어](../ko/auto-table.md) | [Español](../es/auto-table.md) | [Français](../fr/auto-table.md) | [Deutsch](../de/auto-table.md) | **Português (Brasil)** | [Русский](../ru/auto-table.md)
4
+
5
+ Tabela local ou remota. Passe exatamente um de `data`, `dataSource` ou `source`; combinar vários é um erro de tipo. A busca segue [AutoSearch](auto-search.md). Inclusão e edição seguem [AutoDialog](auto-dialog.md) e [AutoForm](auto-form.md).
6
+
7
+ `exportXlsx` vem de `@zeroman.yang/react-auto-components/xlsx`. `exceljs` é opcional (`RAC-XLSX-DEP` se faltar).
8
+
9
+ ## Comportamento e props
10
+
11
+ | Prop | Comportamento |
12
+ | --- | --- |
13
+ | `id` | Obrigatório. A chave é `${namespace}:table:${id}`. Vazio avisa `RAC-TABLE-ID`. |
14
+ | `rowKey` | Único nas linhas carregadas. Ausente ou duplicado: `RAC-TABLE-ROWID`. Seleção, expansão e `scrollToRow` usam isso. |
15
+ | `dataSource` | **Rejeitar: mostra a mensagem e um botão de tentar de novo. O abort é ignorado.** `total` é a contagem filtrada inteira, não o tamanho da página. |
16
+ | `pageSize` | Padrão `10`. `pagination` padrão `true`. `height` padrão `440`. `"auto"` preenche um pai que já tem altura. |
17
+ | `onAdd`, `onEdit`, `onDelete` | **Rejeitar ou lançar: o diálogo continua aberto e mostra `error.message`.** As linhas só mudam se o seu handler já as tiver mudado. |
18
+ | `rowActions` | A rejeição de `onClick` é capturada e exibida na linha de status por cerca de 2,5 segundos. A linha permanece. Se uma ação de linha não tiver `onClick` e seu `action` não for uma chave conhecida de `config.rowActions`, ao selecioná-la a linha de status mostra `RAC-ROW-ACTION`. Forneça `onClick` ou registre a chave de `action`. Se ambos existirem, `onClick` tem prioridade. |
19
+ | `component` | Se o `component` de uma coluna não estiver registrado em `config.columns` do `AutoConfigProvider`, o modo de desenvolvimento avisa com `RAC-COLUMN-COMPONENT` e a célula mantém o formato padrão. Registre a chave ou defina `render`, `format` ou `sort` na coluna. As funções da coluna têm prioridade. |
20
+ | `source` | `source` é uma chave de `config.sources` no `AutoConfigProvider`. Uma chave desconhecida mostra `RAC-TABLE-SOURCE` com um botão para tentar novamente. Registre a chave ou use `data` / `dataSource`. Forneça exatamente uma das três opções. |
21
+ | `exportXlsx` | Só é necessário para xlsx. Se faltar, `RAC-TABLE-XLSX`. CSV e JSON são internos. |
22
+
23
+ `handle.export` resolve mesmo se o status mostrar um erro; não relança. `"filtered"` remoto percorre todas as páginas. Uma página vazia antes da última lança `RAC-TABLE-EXPORT-PAGE` e não baixa um arquivo parcial.
24
+
25
+ JSON de filtro inválido mostra o texto traduzido, avisa `RAC-TABLE-FILTER` e mantém o filtro anterior. `between` tem comprimento 2. `in` é um array.
26
+
27
+ `handle.reset()` limpa ordenação, filtro e seleção e devolve o layout às colunas. `scrollToRow` não faz nada se o id não estiver carregado.
28
+
29
+ ## Pré-condições
30
+
31
+ Importe `style.css` uma vez. Separe `namespace` se vários apps na mesma origem persistem tabelas; o padrão é `"auto"`. Os diálogos internos de inclusão e edição não precisam de `AutoDialogProvider`. Só `useAutoDialog()` precisa.
@@ -0,0 +1,25 @@
1
+ # AutoTabs
2
+
3
+ [English](../../auto-tabs.md) | [简体中文](../zh-CN/auto-tabs.md) | [繁體中文](../zh-TW/auto-tabs.md) | [日本語](../ja/auto-tabs.md) | [한국어](../ko/auto-tabs.md) | [Español](../es/auto-tabs.md) | [Français](../fr/auto-tabs.md) | [Deutsch](../de/auto-tabs.md) | **Português (Brasil)** | [Русский](../ru/auto-tabs.md)
4
+
5
+ Abas. As aninhadas são outro `AutoTabs` alimentado por `children`. Para uma barra lateral, [AutoMenu](auto-menu.md).
6
+
7
+ ## Comportamento e props
8
+
9
+ | Prop | Comportamento |
10
+ | --- | --- |
11
+ | `items` | Cada aba precisa de um `id` estável. `hidden` e um `canAccess` que falha removem a aba. |
12
+ | `value` | Caminho controlado de ids a partir da raiz. O aninhado é `["parent", "child"]`. |
13
+ | `onChange(path, item)` | **Não é capturado.** Se lançar, o React reporta o erro. No modo controlado, o caminho ainda não confirmado fica no anterior. |
14
+ | `mode` | Padrão `"horizontal"`. `"vertical"` empilha a lista. |
15
+ | `keepMounted` | Padrão `true`: painéis inativos continuam montados. `false` desmonta. |
16
+ | `onRefresh` | Se existir, há um botão de atualizar. **Não é capturado.** |
17
+ | `disabled` | Continua visível e não pode ser escolhida. A seleção padrão pula abas desabilitadas. |
18
+
19
+ ## Pré-condições
20
+
21
+ Importe `style.css` uma vez (`RAC-CSS-MISSING` em desenvolvimento). `AutoConfigProvider` é opcional.
22
+
23
+ ## Abas dinâmicas
24
+
25
+ `useAutoTabsWorkspace` abre e fecha páginas sem um router. Passe `tabsProps` para `AutoTabs`. Chamar `open` de novo com o mesmo id só seleciona essa aba e mantém o rascunho. Uma aba fixada não fecha. Espere `ready` antes de `open`. A seleção, `params` e `state` voltam do `sessionStorage` após a montagem. Se `beforeClose` retornar `false` ou lançar, o fechamento é cancelado. O exemplo está em [DynamicTabsDemo.tsx](../../../test-project/src/examples/DynamicTabsDemo.tsx).
@@ -0,0 +1,110 @@
1
+ # Códigos de erro
2
+
3
+ [English](../../errors.md) | [简体中文](../zh-CN/errors.md) | [繁體中文](../zh-TW/errors.md) | [日本語](../ja/errors.md) | [한국어](../ko/errors.md) | [Español](../es/errors.md) | [Français](../fr/errors.md) | [Deutsch](../de/errors.md) | **Português (Brasil)** | [Русский](../ru/errors.md)
4
+
5
+ Falhas de desenvolvimento lançam `RacError` ou chamam `console.warn` em desenvolvimento. O texto é sempre inglês.
6
+
7
+ ```text
8
+ [Component] what is wrong.
9
+ Fix: what to change.
10
+ Code: RAC-…
11
+ Docs: https://github.com/Zeroman/react-auto-components/blob/main/docs/errors.md#rac-…
12
+ ```
13
+
14
+ O texto da interface continua em `config.t`. `userKey` é a frase-fonte em inglês que o hospedeiro traduz. O console e a exceção ficam em inglês.
15
+
16
+ ## RAC-FIELD-OPTIONS
17
+
18
+ `type` é `select`, `select-v2`, `radio`, `checkbox` ou `cascader`, e `options` falta ou está vazio.
19
+
20
+ Correção: Passe `options` como array ou `(values) => Option[]`. `autocomplete` pode omitir.
21
+
22
+ ## RAC-FIELD-RANGE
23
+
24
+ `daterange` ou `datetimerange` não tem um valor de dois itens.
25
+
26
+ Correção: Tipifique o campo como `[start, end]`. `dateValue` padrão é `"string"`. `"timestamp"` guarda milissegundos locais. `null` deixa a ponta aberta. Um escalar é erro de TypeScript. Um array no modelo compila; em desenvolvimento há aviso se o comprimento real não for 2.
27
+
28
+ ## RAC-FIELD-BETWEEN
29
+
30
+ `match: "between"` não é `[from, to]`.
31
+
32
+ Correção: Guarde um par. Um escalar não casa com nenhuma linha. Em `Field<T>` também é erro de tipo.
33
+
34
+ ## RAC-FIELD-CUSTOM
35
+
36
+ `type: "custom"` não tem `render` nem `component`.
37
+
38
+ Correção: Passe `render(context)` ou uma chave `component` de `config.fields`.
39
+
40
+ ## RAC-FIELD-DUPLICATE
41
+
42
+ Dois campos compartilham `name`. `defaults` lança na montagem.
43
+
44
+ Correção: Nomes únicos. `title`, `tip`, `append` e `button` não têm nome.
45
+
46
+ ## RAC-CSS-MISSING
47
+
48
+ Em desenvolvimento `--auto-text` não está em `:root`. Sem a folha de estilo a página quebra e o DOM não explica.
49
+
50
+ Correção: Uma vez: `import "@zeroman.yang/react-auto-components/style.css"`.
51
+
52
+ ## RAC-TABLE-XLSX
53
+
54
+ `export("xlsx")` sem `exportXlsx`.
55
+
56
+ Correção: Importe `{ exportXlsx }` de `@zeroman.yang/react-auto-components/xlsx`. A UI mostra a frase traduzida.
57
+
58
+ ## RAC-XLSX-DEP
59
+
60
+ `exceljs` não carregou. É uma `optionalDependency`.
61
+
62
+ Correção: `pnpm add exceljs`. CSV e JSON não precisam.
63
+
64
+ ## RAC-TABLE-EXPORT-PAGE
65
+
66
+ Uma página remota veio vazia antes da última. Nenhum arquivo parcial é salvo.
67
+
68
+ Correção: Devolva um `total` estável e as linhas daquele `pageIndex`.
69
+
70
+ ## RAC-TABLE-ROWID
71
+
72
+ `rowKey` falta ou se repete nas linhas carregadas.
73
+
74
+ Correção: Cada linha precisa de uma string estável e única.
75
+
76
+ ## RAC-TABLE-ID
77
+
78
+ `id` está vazio. A chave seria `${namespace}:table:`.
79
+
80
+ Correção: Passe um id estável por tabela.
81
+
82
+ ## RAC-COLUMN-COMPONENT
83
+
84
+ Se o `component` de uma coluna não estiver registrado em `config.columns` do `AutoConfigProvider`, o modo de desenvolvimento avisa com `RAC-COLUMN-COMPONENT` e a célula mantém o formato padrão. Registre a chave ou defina `render`, `format` ou `sort` na coluna. As funções da coluna têm prioridade.
85
+
86
+ ## RAC-ROW-ACTION
87
+
88
+ Se uma ação de linha não tiver `onClick` e seu `action` não for uma chave conhecida de `config.rowActions`, ao selecioná-la a linha de status mostra `RAC-ROW-ACTION`. Forneça `onClick` ou registre a chave de `action`. Se ambos existirem, `onClick` tem prioridade.
89
+
90
+ ## RAC-TABLE-SOURCE
91
+
92
+ `source` é uma chave de `config.sources` no `AutoConfigProvider`. Uma chave desconhecida mostra `RAC-TABLE-SOURCE` com um botão para tentar novamente. Registre a chave ou use `data` / `dataSource`. Forneça exatamente uma das três opções.
93
+
94
+ ## RAC-TABLE-FILTER
95
+
96
+ O JSON do filtro não é uma consulta. O texto traduzido aparece e o filtro anterior fica.
97
+
98
+ Correção: Grupo `{ kind: "group", operator, children }`. Condição `{ kind: "condition", field, operator, value }`. `between` é `[from, to]`.
99
+
100
+ ## RAC-QUERY-FIELD
101
+
102
+ `serializeRsql` recusou um nome fora de `/^[\\w.]+$/`.
103
+
104
+ Correção: Só letras, dígitos, sublinhado e pontos.
105
+
106
+ ## RAC-DIALOG-PROVIDER
107
+
108
+ `useAutoDialog()` fora de `AutoDialogProvider`.
109
+
110
+ Correção: Envolva a árvore com `<AutoDialogProvider>`. `AutoConfigProvider` não fornece diálogos e é opcional. `<AutoDialog open>` não usa este hook.
@@ -12,10 +12,14 @@
12
12
 
13
13
  ## Состояние проекта
14
14
 
15
- Текущая версия — 0.1.2, и API могут ещё измениться. Требуется React 19. Пакет предоставляет ESM и декларации TypeScript. Встроенный текст интерфейса по умолчанию на китайском языке и может быть переведён через AutoConfigProvider.config.t.
15
+ Текущая версия — 0.1.3, и API могут ещё измениться. Требуется React 19. Пакет предоставляет ESM и декларации TypeScript. Встроенный текст интерфейса по умолчанию на английском языке и может быть переведён через AutoConfigProvider.config.t.
16
16
 
17
17
  Установите пакет командой `pnpm add @zeroman.yang/react-auto-components` (npm и yarn подходят так же). Peer dependencies: React 19 и react-dom 19. Один раз импортируйте таблицу стилей: `import "@zeroman.yang/react-auto-components/style.css"`.
18
18
 
19
+ Один раз импортируйте в точке входа приложения `import "@zeroman.yang/react-auto-components/style.css"`. Без таблицы стилей в режиме разработки появляется предупреждение `RAC-CSS-MISSING`.
20
+
21
+ При экспорте XLSX код `RAC-TABLE-XLSX` означает отсутствие адаптера `exportXlsx`, а `RAC-XLSX-DEP` — невозможность загрузить необязательную зависимость `exceljs`. Импортируйте и передайте адаптер из `@zeroman.yang/react-auto-components/xlsx`; при необходимости выполните `pnpm add exceljs`. Для CSV и JSON он не нужен.
22
+
19
23
  - [Онлайн-демо (GitHub Pages)](https://zeroman.github.io/react-auto-components/)
20
24
  - [Участие в разработке](https://github.com/Zeroman/react-auto-components/blob/main/docs/i18n/ru/CONTRIBUTING.md)
21
25
  - [История изменений](https://github.com/Zeroman/react-auto-components/blob/main/docs/i18n/ru/CHANGELOG.md)
@@ -85,7 +89,7 @@ export function App() {
85
89
  | Компонент | Возможности |
86
90
  | --- | --- |
87
91
  | AutoForm | Нативные типы полей, виртуализация вариантов выбора, каскадный выбор, адаптеры загрузки файлов, пользовательский рендеринг, зависимые поля, условная видимость, асинхронная валидация, управляемое состояние, сохранение ввода после ошибок |
88
- | AutoSearchPanel | Простые/расширенные условия, ручной/мгновенный поиск, сброс, метки сортировки, общее AST запросов и сериализация RSQL |
92
+ | AutoSearch | Простые/расширенные условия, ручной/мгновенный поиск, сброс, метки сортировки, общее AST запросов и сериализация RSQL |
89
93
  | AutoTable | Локальные/удалённые данные, сортировка по нескольким столбцам, фильтры столбцов, пагинация, стабильное выделение, виртуализация, раскрытие дерева/подробностей, итоги, объединённые ячейки, CRUD, контекстные меню и копирование |
90
94
  | AutoDialog | Декларативный/императивный API, изолированные провайдеры, черновики, проверки перед закрытием, управление фокусом, перетаскивание, полноэкранный режим и асинхронная отправка |
91
95
  | AutoTabs | Горизонтальная/вертикальная компоновка, вложенность, разрешения, отключённые вкладки, сохранение состояния панелей и обновление |
@@ -201,3 +205,5 @@ pnpm test:e2e
201
205
  AutoChat предоставляет лёгкую компоновку диалога с отслеживанием потокового вывода, загрузкой истории и полем ввода. Для отображения сообщений передайте содержимое React или renderMessage; дополнительные runtime-зависимости не требуются.
202
206
 
203
207
  [AutoChat API](auto-chat.md)
208
+
209
+ Что делает компонент, если колбэк бросает исключение: [AutoForm](auto-form.md), [AutoSearch](auto-search.md), [AutoTable](auto-table.md), [AutoDialog](auto-dialog.md), [AutoTabs](auto-tabs.md), [AutoMenu](auto-menu.md). Коды ошибок для разработчиков: [errors.md](errors.md).
@@ -0,0 +1,23 @@
1
+ # AutoDialog
2
+
3
+ [English](../../auto-dialog.md) | [简体中文](../zh-CN/auto-dialog.md) | [繁體中文](../zh-TW/auto-dialog.md) | [日本語](../ja/auto-dialog.md) | [한국어](../ko/auto-dialog.md) | [Español](../es/auto-dialog.md) | [Français](../fr/auto-dialog.md) | [Deutsch](../de/auto-dialog.md) | [Português (Brasil)](../pt-BR/auto-dialog.md) | **Русский**
4
+
5
+ Модальный диалог, декларативный (`<AutoDialog open>`) или императивный (`useAutoDialog().open()`). `fields` рисует [AutoForm](auto-form.md).
6
+
7
+ `useAutoDialog()` вне провайдера бросает `RAC-DIALOG-PROVIDER`. `<AutoDialog open>` провайдер не нужен.
8
+
9
+ ## Поведение и свойства
10
+
11
+ | Свойство | Поведение |
12
+ | --- | --- |
13
+ | `onSubmit(values)` | После проверки. **Reject или throw: диалог остается открытым, показывает `error.message`, значения остаются.** После resolve все еще выполняется `beforeClose`. |
14
+ | `beforeClose(reason)` | `"submit"`, `"cancel"` или `"close"`. **`false` оставляет открытым. Throw тоже оставляет открытым и показывает сообщение.** |
15
+ | `onClose` | Только после настоящего закрытия. |
16
+ | `draftKey` | Хранит черновик в `${namespace}:draft:${draftKey}` до успешной отправки. Если опустить, ничего не сохраняется. |
17
+ | `width` | По умолчанию `560`. `draggable` в полноэкранном режиме игнорируется. |
18
+
19
+ `close()` у `open()` резолвится в `false`, если `beforeClose` блокирует закрытие. Императивные диалоги складываются в стопку.
20
+
21
+ ## Предусловия
22
+
23
+ Импортируйте `style.css` один раз. `AutoConfigProvider` необязателен и не заменяет `AutoDialogProvider`. `namespace` входит в ключ черновика.
@@ -0,0 +1,35 @@
1
+ # AutoForm
2
+
3
+ [English](../../auto-form.md) | [简体中文](../zh-CN/auto-form.md) | [繁體中文](../zh-TW/auto-form.md) | [日本語](../ja/auto-form.md) | [한국어](../ko/auto-form.md) | [Español](../es/auto-form.md) | [Français](../fr/auto-form.md) | [Deutsch](../de/auto-form.md) | [Português (Brasil)](../pt-BR/auto-form.md) | **Русский**
4
+
5
+ Форма по схеме. `AutoSearch` и `AutoDialog` рисуют `AutoForm`, поэтому эти правила колбэков относятся и к ним.
6
+
7
+ `Field<T>` — размеченное объединение по `type`. `select` без `options`, скаляр у `daterange` и `match: "between"` на скаляре — ошибки TypeScript. `AnyField` и `unsafeField()` — запасной выход; режим разработки все равно предупреждает. Коды в [errors.md](errors.md).
8
+
9
+ ## Поведение и свойства
10
+
11
+ | Свойство | Поведение |
12
+ | --- | --- |
13
+ | `fields` | `readonly Field<T>[]`. Без `type` это текстовое поле. Повторяющийся `name` бросает `RAC-FIELD-DUPLICATE` при монтировании. |
14
+ | `value` | Управляемое значение. Если оно отличается от внутреннего состояния, форма копирует его и очищает ошибки. Если родитель игнорирует `onChange`, ввод откатывается. |
15
+ | `onSubmit(value)` | Только после проверки. **Отклонение или throw: значения остаются, показывается `error.message`, сброса нет.** |
16
+ | `columns` | По умолчанию `2`. `actions` по умолчанию `true`. |
17
+ | Подписи | `labelPosition` по умолчанию `"top"`. `labelWidth` по умолчанию `"auto"` (измеряется, не больше 45% ширины поля). |
18
+
19
+ ## Если колбэк бросает
20
+
21
+ | Колбэк | Результат |
22
+ | --- | --- |
23
+ | `onSubmit` | Перехватывается. Черновик остается. Сообщение показывается. Сброса нет. |
24
+ | `rules` поля | Брошенный текст становится ошибкой этого поля. Следующие правила не выполняются. |
25
+ | `onChange` поля | Не перехватывается. Остается прежнее значение. |
26
+ | `upload` | Отказ виден под полем, значение не сохраняется. `reset()` прерывает сигнал и отбрасывает поздний результат. |
27
+ | Отправка во время загрузки | `validate()` возвращает `false` и не вызывает `onSubmit`. |
28
+ | `hidden`, `disabled` или нет доступа | Поле не проверяется, даже если оно `required`. |
29
+ | Пустой `required` | `undefined`, `null`, `""` или пустой массив блокируют отправку. |
30
+
31
+ `handle.validate()` резолвится в `true` или `false`. Не бросает.
32
+
33
+ ## Предусловия
34
+
35
+ Импортируйте `style.css` один раз. В разработке отсутствие `--auto-text` предупреждает `RAC-CSS-MISSING`. `AutoConfigProvider` необязателен и не монтирует диалоги.
@@ -0,0 +1,23 @@
1
+ # AutoMenu
2
+
3
+ [English](../../auto-menu.md) | [简体中文](../zh-CN/auto-menu.md) | [繁體中文](../zh-TW/auto-menu.md) | [日本語](../ja/auto-menu.md) | [한국어](../ko/auto-menu.md) | [Español](../es/auto-menu.md) | [Français](../fr/auto-menu.md) | [Deutsch](../de/auto-menu.md) | [Português (Brasil)](../pt-BR/auto-menu.md) | **Русский**
4
+
5
+ Боковая панель. Для панелей с содержимым используйте [AutoTabs](auto-tabs.md).
6
+
7
+ ## Поведение и свойства
8
+
9
+ | Свойство | Поведение |
10
+ | --- | --- |
11
+ | `items` | `id` уникален в дереве. `hidden` и неудачный `canAccess` отбрасывают пункт. `children`, который указывает на предка, отбрасывается целиком, чтобы плохая схема не ушла в рекурсию. |
12
+ | `value` | Id выбранного листа. Если опустить, выбор хранится внутри. |
13
+ | `onChange(id, item, path)` | **Не перехватывается.** `path` — цепочка id от корня до листа. Родитель с детьми только переключает раскрытие и не выбирается. |
14
+ | `collapsible` | По умолчанию `false`. Если `collapsed` управляемый, обновите его в `onCollapsedChange`, иначе рельс не сдвинется. **`onCollapsedChange` не перехватывается.** |
15
+ | `disabled` | Отключает пункт и потомков. Выбор их пропускает. |
16
+
17
+ Выбор листа сам по себе не переходит по маршруту. Единственный сигнал — `onChange`.
18
+
19
+ ## Предусловия
20
+
21
+ Импортируйте `style.css` один раз. `AutoConfigProvider` необязателен. Права идут через `config.canAccess`.
22
+
23
+ Один раз импортируйте в точке входа приложения `import "@zeroman.yang/react-auto-components/style.css"`. Без таблицы стилей в режиме разработки появляется предупреждение `RAC-CSS-MISSING`.
@@ -0,0 +1,32 @@
1
+ # AutoSearch
2
+
3
+ [English](../../auto-search.md) | [简体中文](../zh-CN/auto-search.md) | [繁體中文](../zh-TW/auto-search.md) | [日本語](../ja/auto-search.md) | [한국어](../ko/auto-search.md) | [Español](../es/auto-search.md) | [Français](../fr/auto-search.md) | [Deutsch](../de/auto-search.md) | [Português (Brasil)](../pt-BR/auto-search.md) | **Русский**
4
+
5
+ Форма поиска. Рисует `AutoForm` и отдает `QueryNode` вместе со значениями. Если колбэк поля бросает, действуют правила [AutoForm](auto-form.md).
6
+
7
+ `AutoSearchPanel` и `AutoSearchPanelProps` — устаревшие псевдонимы `AutoSearch` и `AutoSearchProps`.
8
+
9
+ ## Поведение и свойства
10
+
11
+ | Свойство | Поведение |
12
+ | --- | --- |
13
+ | `onSearch(query, values)` | Обязателен. **Throw или reject: внутренняя форма перехватывает, значения остаются, показывается `error.message`. Сброса нет.** |
14
+ | `mode` | По умолчанию `"manual"` (кнопка). `"instant"` ищет еще и при каждом изменении. |
15
+ | `columns` | По умолчанию `3`. |
16
+ | `more: true` | Прячет поле, пока не открыто «Еще». Скрытые поля не попадают в запрос. |
17
+
18
+ | `match` | Значение |
19
+ | --- | --- |
20
+ | не задан | `"eq"`, или `"in"`, если значение — массив. |
21
+ | `"contains"` | Подстрока. `ignoreCase: true` не различает регистр. |
22
+ | `"between"` | `[from, to]`. Скаляр предупреждает `RAC-FIELD-BETWEEN` и не совпадает со строками. |
23
+ | `"isNull"` | Совпадает с null или undefined. Введенное значение игнорируется. |
24
+ | пусто | `undefined`, `null`, `""` и пустые массивы опускаются, кроме `"isNull"`. |
25
+
26
+ Сброс возвращает `defaultValue` и затем ищет. `serializeRsql` бросает `RAC-QUERY-FIELD`, если имя не подходит под `/^[\w.]+$/`.
27
+
28
+ ## Предусловия
29
+
30
+ Импортируйте `style.css` один раз. `AutoConfigProvider` необязателен.
31
+
32
+ Один раз импортируйте в точке входа приложения `import "@zeroman.yang/react-auto-components/style.css"`. Без таблицы стилей в режиме разработки появляется предупреждение `RAC-CSS-MISSING`.
@@ -0,0 +1,31 @@
1
+ # AutoTable
2
+
3
+ [English](../../auto-table.md) | [简体中文](../zh-CN/auto-table.md) | [繁體中文](../zh-TW/auto-table.md) | [日本語](../ja/auto-table.md) | [한국어](../ko/auto-table.md) | [Español](../es/auto-table.md) | [Français](../fr/auto-table.md) | [Deutsch](../de/auto-table.md) | [Português (Brasil)](../pt-BR/auto-table.md) | **Русский**
4
+
5
+ Локальная или удаленная таблица. Передайте ровно один из `data`, `dataSource` или `source`; несколько одновременно — ошибка типа. Поиск следует [AutoSearch](auto-search.md). Добавление и правка следуют [AutoDialog](auto-dialog.md) и [AutoForm](auto-form.md).
6
+
7
+ `exportXlsx` импортируется из `@zeroman.yang/react-auto-components/xlsx`. `exceljs` необязателен (`RAC-XLSX-DEP`, если его нет).
8
+
9
+ ## Поведение и свойства
10
+
11
+ | Свойство | Поведение |
12
+ | --- | --- |
13
+ | `id` | Обязателен. Ключ — `${namespace}:table:${id}`. Пустой id предупреждает `RAC-TABLE-ID`. |
14
+ | `rowKey` | Уникален среди загруженных строк. Отсутствие или повтор: `RAC-TABLE-ROWID`. Выбор, раскрытие и `scrollToRow` используют его. |
15
+ | `dataSource` | **Reject: сообщение и кнопка повтора. Abort игнорируется.** `total` — полное число после фильтра, не длина страницы. |
16
+ | `pageSize` | По умолчанию `10`. `pagination` по умолчанию `true`. `height` по умолчанию `440`. `"auto"` заполняет родителя, у которого уже есть высота. |
17
+ | `onAdd`, `onEdit`, `onDelete` | **Reject или throw: диалог остается открытым и показывает `error.message`.** Строки не меняются, если обработчик сам их еще не изменил. |
18
+ | `rowActions` | Отклонение `onClick` перехватывается и показывается в строке состояния примерно 2,5 секунды. Строка остаётся. Если у действия строки нет `onClick`, а `action` не является известным ключом `config.rowActions`, при выборе действия в строке состояния появляется `RAC-ROW-ACTION`. Передайте `onClick` или зарегистрируйте ключ `action`. Если указаны оба, приоритет у `onClick`. |
19
+ | `component` | Если `component` столбца не зарегистрирован в `config.columns` у `AutoConfigProvider`, в режиме разработки появляется предупреждение `RAC-COLUMN-COMPONENT`, а ячейка использует стандартный формат. Зарегистрируйте ключ или задайте `render`, `format` либо `sort` в столбце. Функции столбца имеют приоритет. |
20
+ | `source` | `source` — ключ в `config.sources` у `AutoConfigProvider`. Неизвестный ключ вызывает `RAC-TABLE-SOURCE` с кнопкой повтора. Зарегистрируйте ключ или используйте `data` / `dataSource`. Укажите ровно один из трёх вариантов. |
21
+ | `exportXlsx` | Нужен только для xlsx. Если его нет, `RAC-TABLE-XLSX`. CSV и JSON встроены. |
22
+
23
+ `handle.export` резолвится, даже если в статусе ошибка; повторно не бросает. Удаленный `"filtered"` обходит все страницы. Пустая страница до последней бросает `RAC-TABLE-EXPORT-PAGE` и не скачивает частичный файл.
24
+
25
+ Неверный JSON фильтра показывает перевод, предупреждает `RAC-TABLE-FILTER` и сохраняет прежний фильтр. `between` имеет длину 2. `in` — массив.
26
+
27
+ `handle.reset()` очищает сортировку, фильтр и выбор и возвращает раскладку к колонкам. `scrollToRow` ничего не делает, если этот id не загружен.
28
+
29
+ ## Предусловия
30
+
31
+ Импортируйте `style.css` один раз. Разделяйте `namespace`, если несколько приложений на одном origin хранят таблицы; по умолчанию `"auto"`. Встроенным диалогам добавления и правки `AutoDialogProvider` не нужен. Он нужен только `useAutoDialog()`.
@@ -0,0 +1,25 @@
1
+ # AutoTabs
2
+
3
+ [English](../../auto-tabs.md) | [简体中文](../zh-CN/auto-tabs.md) | [繁體中文](../zh-TW/auto-tabs.md) | [日本語](../ja/auto-tabs.md) | [한국어](../ko/auto-tabs.md) | [Español](../es/auto-tabs.md) | [Français](../fr/auto-tabs.md) | [Deutsch](../de/auto-tabs.md) | [Português (Brasil)](../pt-BR/auto-tabs.md) | **Русский**
4
+
5
+ Вкладки. Вложенные — это еще один `AutoTabs` из `children`. Для боковой панели используйте [AutoMenu](auto-menu.md).
6
+
7
+ ## Поведение и свойства
8
+
9
+ | Свойство | Поведение |
10
+ | --- | --- |
11
+ | `items` | У каждой вкладки стабильный `id`. `hidden` и неудачный `canAccess` убирают вкладку. |
12
+ | `value` | Управляемый путь id от корня. Вложенный путь — `["parent", "child"]`. |
13
+ | `onChange(path, item)` | **Не перехватывается.** Если бросает, React сообщает об ошибке. В управляемом режиме еще не зафиксированный путь остается прежним. |
14
+ | `mode` | По умолчанию `"horizontal"`. `"vertical"` ставит список вертикально. |
15
+ | `keepMounted` | По умолчанию `true`: неактивные панели остаются смонтированными. `false` размонтирует их. |
16
+ | `onRefresh` | Если задан, у вкладки есть кнопка обновления. **Не перехватывается.** |
17
+ | `disabled` | Остается видимой и не выбирается. Выбор по умолчанию пропускает отключенные вкладки. |
18
+
19
+ ## Предусловия
20
+
21
+ Импортируйте `style.css` один раз (`RAC-CSS-MISSING` в разработке). `AutoConfigProvider` необязателен.
22
+
23
+ ## Динамические вкладки
24
+
25
+ `useAutoTabsWorkspace` открывает и закрывает страницы без роутера. Передайте `tabsProps` в `AutoTabs`. Повторный `open` с тем же id только выбирает вкладку и сохраняет черновик. Закреплённую вкладку закрыть нельзя. Дождитесь `ready`, прежде чем вызывать `open`. Выбор, `params` и `state` восстанавливаются из `sessionStorage` после монтирования. Если `beforeClose` вернёт `false` или бросит ошибку, закрытие отменяется. Пример: [DynamicTabsDemo.tsx](../../../test-project/src/examples/DynamicTabsDemo.tsx).
@@ -0,0 +1,110 @@
1
+ # Коды ошибок
2
+
3
+ [English](../../errors.md) | [简体中文](../zh-CN/errors.md) | [繁體中文](../zh-TW/errors.md) | [日本語](../ja/errors.md) | [한국어](../ko/errors.md) | [Español](../es/errors.md) | [Français](../fr/errors.md) | [Deutsch](../de/errors.md) | [Português (Brasil)](../pt-BR/errors.md) | **Русский**
4
+
5
+ Сбои для разработчика бросают `RacError` или вызывают `console.warn` в режиме разработки. Текст всегда на английском.
6
+
7
+ ```text
8
+ [Component] what is wrong.
9
+ Fix: what to change.
10
+ Code: RAC-…
11
+ Docs: https://github.com/Zeroman/react-auto-components/blob/main/docs/errors.md#rac-…
12
+ ```
13
+
14
+ Текст интерфейса остается в `config.t`. `userKey` — исходная английская фраза, которую хост переводит. Консоль и исключение остаются на английском.
15
+
16
+ ## RAC-FIELD-OPTIONS
17
+
18
+ `type` равен `select`, `select-v2`, `radio`, `checkbox` или `cascader`, а `options` нет или массив пуст.
19
+
20
+ Исправление: Передайте `options` массивом или `(values) => Option[]`. `autocomplete` может обойтись без них.
21
+
22
+ ## RAC-FIELD-RANGE
23
+
24
+ `daterange` или `datetimerange` не имеет значения из двух элементов.
25
+
26
+ Исправление: Типизируйте поле как `[start, end]`. `dateValue` по умолчанию `"string"`. `"timestamp"` хранит локальные миллисекунды. `null` оставляет конец открытым. Скаляр — ошибка TypeScript. Массив в модели компилируется; в разработке будет предупреждение, если реальная длина не 2.
27
+
28
+ ## RAC-FIELD-BETWEEN
29
+
30
+ `match: "between"` — это не `[from, to]`.
31
+
32
+ Исправление: Храните пару. Скаляр не совпадает ни с одной строкой. На `Field<T>` это тоже ошибка типа.
33
+
34
+ ## RAC-FIELD-CUSTOM
35
+
36
+ `type: "custom"` без `render` и без `component`.
37
+
38
+ Исправление: Передайте `render(context)` или ключ `component` из `config.fields`.
39
+
40
+ ## RAC-FIELD-DUPLICATE
41
+
42
+ Два поля с одним `name`. `defaults` бросает это при монтировании.
43
+
44
+ Исправление: Имена уникальны. У `title`, `tip`, `append` и `button` имени нет.
45
+
46
+ ## RAC-CSS-MISSING
47
+
48
+ В разработке на `:root` нет `--auto-text`. Без таблицы стилей страница разъезжается, и DOM не объясняет почему.
49
+
50
+ Исправление: Один раз: `import "@zeroman.yang/react-auto-components/style.css"`.
51
+
52
+ ## RAC-TABLE-XLSX
53
+
54
+ `export("xlsx")` без `exportXlsx`.
55
+
56
+ Исправление: Импортируйте `{ exportXlsx }` из `@zeroman.yang/react-auto-components/xlsx`. Интерфейс покажет переведенную фразу.
57
+
58
+ ## RAC-XLSX-DEP
59
+
60
+ `exceljs` не загрузился. Это `optionalDependency`.
61
+
62
+ Исправление: `pnpm add exceljs`. CSV и JSON его не требуют.
63
+
64
+ ## RAC-TABLE-EXPORT-PAGE
65
+
66
+ Удаленная страница пуста до последней. Частичный файл не сохраняется.
67
+
68
+ Исправление: Верните стабильный `total` и строки этого `pageIndex`.
69
+
70
+ ## RAC-TABLE-ROWID
71
+
72
+ `rowKey` отсутствует или повторяется в загруженных строках.
73
+
74
+ Исправление: У каждой строки должна быть стабильная уникальная строка.
75
+
76
+ ## RAC-TABLE-ID
77
+
78
+ `id` пуст. Ключ был бы `${namespace}:table:`.
79
+
80
+ Исправление: Передайте стабильный id каждой таблице.
81
+
82
+ ## RAC-COLUMN-COMPONENT
83
+
84
+ Если `component` столбца не зарегистрирован в `config.columns` у `AutoConfigProvider`, в режиме разработки появляется предупреждение `RAC-COLUMN-COMPONENT`, а ячейка использует стандартный формат. Зарегистрируйте ключ или задайте `render`, `format` либо `sort` в столбце. Функции столбца имеют приоритет.
85
+
86
+ ## RAC-ROW-ACTION
87
+
88
+ Если у действия строки нет `onClick`, а `action` не является известным ключом `config.rowActions`, при выборе действия в строке состояния появляется `RAC-ROW-ACTION`. Передайте `onClick` или зарегистрируйте ключ `action`. Если указаны оба, приоритет у `onClick`.
89
+
90
+ ## RAC-TABLE-SOURCE
91
+
92
+ `source` — ключ в `config.sources` у `AutoConfigProvider`. Неизвестный ключ вызывает `RAC-TABLE-SOURCE` с кнопкой повтора. Зарегистрируйте ключ или используйте `data` / `dataSource`. Укажите ровно один из трёх вариантов.
93
+
94
+ ## RAC-TABLE-FILTER
95
+
96
+ JSON фильтра — не запрос. Показывается перевод, прежний фильтр остается.
97
+
98
+ Исправление: Группа `{ kind: "group", operator, children }`. Условие `{ kind: "condition", field, operator, value }`. `between` — это `[from, to]`.
99
+
100
+ ## RAC-QUERY-FIELD
101
+
102
+ `serializeRsql` отклонил имя вне `/^[\\w.]+$/`.
103
+
104
+ Исправление: Только буквы, цифры, подчеркивание и точки.
105
+
106
+ ## RAC-DIALOG-PROVIDER
107
+
108
+ `useAutoDialog()` вне `AutoDialogProvider`.
109
+
110
+ Исправление: Оберните дерево в `<AutoDialogProvider>`. `AutoConfigProvider` диалогов не дает и необязателен. `<AutoDialog open>` этот хук не использует.