@thibezer/ui-components-kit 1.0.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/LICENSE +21 -0
- package/README.md +624 -0
- package/dist/botao.cjs +1 -0
- package/dist/botao.d.ts +8 -0
- package/dist/botao.js +6 -0
- package/dist/camadas.cjs +296 -0
- package/dist/camadas.d.ts +14 -0
- package/dist/camadas.js +1857 -0
- package/dist/campo-texto.cjs +1 -0
- package/dist/campo-texto.d.ts +8 -0
- package/dist/campo-texto.js +11 -0
- package/dist/canvas.cjs +254 -0
- package/dist/canvas.d.ts +8 -0
- package/dist/canvas.js +3082 -0
- package/dist/card.cjs +1 -0
- package/dist/card.d.ts +7 -0
- package/dist/card.js +5 -0
- package/dist/components/ui-alerta/index.d.ts +2 -0
- package/dist/components/ui-alerta/ui-alerta-base.d.ts +23 -0
- package/dist/components/ui-alerta/ui-alerta.d.ts +2 -0
- package/dist/components/ui-alerta/ui-toast.d.ts +34 -0
- package/dist/components/ui-avatar/index.d.ts +1 -0
- package/dist/components/ui-avatar/ui-avatar.d.ts +12 -0
- package/dist/components/ui-badge/index.d.ts +1 -0
- package/dist/components/ui-badge/ui-badge.d.ts +20 -0
- package/dist/components/ui-barra-ferramentas/ferramentas-comum.d.ts +22 -0
- package/dist/components/ui-barra-ferramentas/ferramentas-icones.d.ts +24 -0
- package/dist/components/ui-barra-ferramentas/index.d.ts +4 -0
- package/dist/components/ui-barra-ferramentas/tipos.d.ts +55 -0
- package/dist/components/ui-barra-ferramentas/ui-paleta-ferramentas.d.ts +54 -0
- package/dist/components/ui-barra-ferramentas/ui-ribbon.d.ts +52 -0
- package/dist/components/ui-botao/index.d.ts +1 -0
- package/dist/components/ui-botao/ui-botao.d.ts +26 -0
- package/dist/components/ui-camadas/camadas-arvore-renderer.d.ts +18 -0
- package/dist/components/ui-camadas/camadas-drag-drop.d.ts +18 -0
- package/dist/components/ui-camadas/camadas-eventos-arvore.d.ts +2 -0
- package/dist/components/ui-camadas/camadas-eventos-camadas.d.ts +2 -0
- package/dist/components/ui-camadas/camadas-eventos-rodape.d.ts +2 -0
- package/dist/components/ui-camadas/camadas-host.d.ts +23 -0
- package/dist/components/ui-camadas/camadas-icones.d.ts +23 -0
- package/dist/components/ui-camadas/camadas-mapas-base.d.ts +3 -0
- package/dist/components/ui-camadas/camadas-metricas.d.ts +17 -0
- package/dist/components/ui-camadas/camadas-persistencia.d.ts +65 -0
- package/dist/components/ui-camadas/camadas-resizer.d.ts +16 -0
- package/dist/components/ui-camadas/camadas-rodape.d.ts +2 -0
- package/dist/components/ui-camadas/camadas-selecao.d.ts +24 -0
- package/dist/components/ui-camadas/camadas-sincronizacao-dom.d.ts +3 -0
- package/dist/components/ui-camadas/camadas-teclado.d.ts +3 -0
- package/dist/components/ui-camadas/camadas-utils.d.ts +26 -0
- package/dist/components/ui-camadas/index.d.ts +11 -0
- package/dist/components/ui-camadas/tipos.d.ts +116 -0
- package/dist/components/ui-camadas/ui-camadas.d.ts +112 -0
- package/dist/components/ui-campo-texto/campo-texto-estados.d.ts +12 -0
- package/dist/components/ui-campo-texto/campo-texto-template.d.ts +2 -0
- package/dist/components/ui-campo-texto/index.d.ts +1 -0
- package/dist/components/ui-campo-texto/ui-campo-texto.d.ts +57 -0
- package/dist/components/ui-canvas-cad/cad-atributos-sync.d.ts +13 -0
- package/dist/components/ui-canvas-cad/cad-broadcast.d.ts +19 -0
- package/dist/components/ui-canvas-cad/cad-colecoes-dados.d.ts +46 -0
- package/dist/components/ui-canvas-cad/cad-eventos-canvas.d.ts +26 -0
- package/dist/components/ui-canvas-cad/cad-inicializador.d.ts +19 -0
- package/dist/components/ui-canvas-cad/cad-painel-camadas.d.ts +9 -0
- package/dist/components/ui-canvas-cad/cad-tamanho-observer.d.ts +7 -0
- package/dist/components/ui-canvas-cad/cad-template.d.ts +1 -0
- package/dist/components/ui-canvas-cad/cad-toolbar-painel.d.ts +29 -0
- package/dist/components/ui-canvas-cad/index.d.ts +8 -0
- package/dist/components/ui-canvas-cad/ui-canvas-cad.d.ts +91 -0
- package/dist/components/ui-card/index.d.ts +1 -0
- package/dist/components/ui-card/ui-card.d.ts +18 -0
- package/dist/components/ui-checkbox/index.d.ts +1 -0
- package/dist/components/ui-checkbox/ui-checkbox.d.ts +36 -0
- package/dist/components/ui-drawer/drawer-acessibilidade.d.ts +16 -0
- package/dist/components/ui-drawer/index.d.ts +1 -0
- package/dist/components/ui-drawer/ui-drawer.d.ts +37 -0
- package/dist/components/ui-icone/index.d.ts +1 -0
- package/dist/components/ui-icone/ui-icone.d.ts +15 -0
- package/dist/components/ui-lista-flutuante/index.d.ts +1 -0
- package/dist/components/ui-lista-flutuante/lista-flutuante-posicionamento.d.ts +15 -0
- package/dist/components/ui-lista-flutuante/lista-flutuante-render.d.ts +9 -0
- package/dist/components/ui-lista-flutuante/lista-flutuante-teclado.d.ts +13 -0
- package/dist/components/ui-lista-flutuante/lista-flutuante-template.d.ts +2 -0
- package/dist/components/ui-lista-flutuante/tipos.d.ts +4 -0
- package/dist/components/ui-lista-flutuante/ui-lista-flutuante.d.ts +63 -0
- package/dist/components/ui-mapa/index.d.ts +3 -0
- package/dist/components/ui-mapa/ui-mapa-linha.d.ts +12 -0
- package/dist/components/ui-mapa/ui-mapa-marcador.d.ts +15 -0
- package/dist/components/ui-mapa/ui-mapa.d.ts +16 -0
- package/dist/components/ui-modal/index.d.ts +2 -0
- package/dist/components/ui-modal/modal-acessibilidade.d.ts +12 -0
- package/dist/components/ui-modal/ui-modal.d.ts +30 -0
- package/dist/components/ui-radio/index.d.ts +1 -0
- package/dist/components/ui-radio/radio-grupo-registry.d.ts +10 -0
- package/dist/components/ui-radio/ui-radio.d.ts +29 -0
- package/dist/components/ui-segmented/index.d.ts +1 -0
- package/dist/components/ui-segmented/segmented-indicador.d.ts +13 -0
- package/dist/components/ui-segmented/segmented-teclado.d.ts +4 -0
- package/dist/components/ui-segmented/segmented-template.d.ts +4 -0
- package/dist/components/ui-segmented/ui-segmented.d.ts +48 -0
- package/dist/components/ui-seletor-mapa-base/index.d.ts +2 -0
- package/dist/components/ui-seletor-mapa-base/tipos.d.ts +22 -0
- package/dist/components/ui-seletor-mapa-base/ui-seletor-mapa-base.d.ts +43 -0
- package/dist/components/ui-skeleton/index.d.ts +1 -0
- package/dist/components/ui-skeleton/ui-skeleton.d.ts +19 -0
- package/dist/components/ui-stat/index.d.ts +1 -0
- package/dist/components/ui-stat/ui-stat.d.ts +30 -0
- package/dist/components/ui-switch/index.d.ts +1 -0
- package/dist/components/ui-switch/ui-switch.d.ts +36 -0
- package/dist/components/ui-tabela/index.d.ts +7 -0
- package/dist/components/ui-tabela/tabela-atributos-sync.d.ts +14 -0
- package/dist/components/ui-tabela/tabela-corpo.d.ts +18 -0
- package/dist/components/ui-tabela/tabela-dom.d.ts +15 -0
- package/dist/components/ui-tabela/tabela-header.d.ts +18 -0
- package/dist/components/ui-tabela/tabela-interacao.d.ts +9 -0
- package/dist/components/ui-tabela/tabela-localizador.d.ts +4 -0
- package/dist/components/ui-tabela/tabela-ordenacao.d.ts +12 -0
- package/dist/components/ui-tabela/tabela-orquestrador-dados.d.ts +18 -0
- package/dist/components/ui-tabela/tabela-redimensionamento.d.ts +28 -0
- package/dist/components/ui-tabela/tabela-remota.d.ts +15 -0
- package/dist/components/ui-tabela/tabela-renderizador.d.ts +29 -0
- package/dist/components/ui-tabela/tabela-selecao.d.ts +24 -0
- package/dist/components/ui-tabela/tipos.d.ts +27 -0
- package/dist/components/ui-tabela/ui-tabela.d.ts +83 -0
- package/dist/components/ui-tabela-propriedades/avaliador-expressao.d.ts +6 -0
- package/dist/components/ui-tabela-propriedades/editores-basicos.d.ts +7 -0
- package/dist/components/ui-tabela-propriedades/editores-cad.d.ts +17 -0
- package/dist/components/ui-tabela-propriedades/index.d.ts +6 -0
- package/dist/components/ui-tabela-propriedades/propriedades-densidade.d.ts +5 -0
- package/dist/components/ui-tabela-propriedades/propriedades-dom-utils.d.ts +6 -0
- package/dist/components/ui-tabela-propriedades/propriedades-editores.d.ts +5 -0
- package/dist/components/ui-tabela-propriedades/propriedades-flutuante.d.ts +7 -0
- package/dist/components/ui-tabela-propriedades/propriedades-gerenciador-valores.d.ts +26 -0
- package/dist/components/ui-tabela-propriedades/propriedades-painel-controles.d.ts +15 -0
- package/dist/components/ui-tabela-propriedades/propriedades-render-arvore.d.ts +24 -0
- package/dist/components/ui-tabela-propriedades/propriedades-seletor-tipo.d.ts +13 -0
- package/dist/components/ui-tabela-propriedades/propriedades-splitter.d.ts +13 -0
- package/dist/components/ui-tabela-propriedades/propriedades-template.d.ts +1 -0
- package/dist/components/ui-tabela-propriedades/tipos.d.ts +48 -0
- package/dist/components/ui-tabela-propriedades/ui-tabela-propriedades.d.ts +66 -0
- package/dist/components/ui-texto/index.d.ts +1 -0
- package/dist/components/ui-texto/ui-texto.d.ts +15 -0
- package/dist/components/ui-tooltip/index.d.ts +1 -0
- package/dist/components/ui-tooltip/ui-tooltip.d.ts +25 -0
- package/dist/core/acessibilidade.d.ts +21 -0
- package/dist/core/form-associated-element.d.ts +33 -0
- package/dist/core/form-validacao.d.ts +34 -0
- package/dist/core/index.d.ts +7 -0
- package/dist/core/leaflet-loader.d.ts +7 -0
- package/dist/core/leaflet-style.d.ts +7 -0
- package/dist/core/listener-bag.d.ts +21 -0
- package/dist/core/ssr-safe.d.ts +20 -0
- package/dist/core/ui-bus.d.ts +85 -0
- package/dist/core/zero-js-triggers.d.ts +1 -0
- package/dist/core.cjs +1 -0
- package/dist/core.js +22 -0
- package/dist/data.cjs +1 -0
- package/dist/data.d.ts +22 -0
- package/dist/data.js +63 -0
- package/dist/feedback.cjs +1 -0
- package/dist/feedback.d.ts +26 -0
- package/dist/feedback.js +25 -0
- package/dist/form-validacao-BIOXxt-1.js +140 -0
- package/dist/form-validacao-ytRYSF3E.cjs +1 -0
- package/dist/forms.cjs +1 -0
- package/dist/forms.d.ts +22 -0
- package/dist/forms.js +25 -0
- package/dist/gerencigeo-canvas/canvas_destaque.d.ts +13 -0
- package/dist/gerencigeo-canvas/canvas_destaque_marcadores.d.ts +8 -0
- package/dist/gerencigeo-canvas/canvas_interacao.d.ts +56 -0
- package/dist/gerencigeo-canvas/canvas_selecao_box.d.ts +23 -0
- package/dist/gerencigeo-canvas/controller_dados_ops.d.ts +15 -0
- package/dist/gerencigeo-canvas/index.d.ts +17 -0
- package/dist/gerencigeo-canvas/layer_defaults.d.ts +3 -0
- package/dist/gerencigeo-canvas/layer_instance_ops.d.ts +6 -0
- package/dist/gerencigeo-canvas/layer_manager.d.ts +37 -0
- package/dist/gerencigeo-canvas/layer_pane_ops.d.ts +8 -0
- package/dist/gerencigeo-canvas/layer_renderer_factory.d.ts +14 -0
- package/dist/gerencigeo-canvas/layer_state_ops.d.ts +6 -0
- package/dist/gerencigeo-canvas/mapa_config.d.ts +11 -0
- package/dist/gerencigeo-canvas/mapa_controller.d.ts +53 -0
- package/dist/gerencigeo-canvas/mapa_core.d.ts +30 -0
- package/dist/gerencigeo-canvas/mapa_linhas.d.ts +14 -0
- package/dist/gerencigeo-canvas/mapa_marcadores.d.ts +18 -0
- package/dist/gerencigeo-canvas/mapa_pontos_shapes.d.ts +8 -0
- package/dist/gerencigeo-canvas/renderers/grid_renderer.d.ts +9 -0
- package/dist/gerencigeo-canvas/renderers/tile_renderer.d.ts +8 -0
- package/dist/gerencigeo-canvas/renderers/vector_lines_builder.d.ts +4 -0
- package/dist/gerencigeo-canvas/renderers/vector_lines_renderer.d.ts +9 -0
- package/dist/gerencigeo-canvas/renderers/vector_points_renderer.d.ts +11 -0
- package/dist/gerencigeo-canvas/renderers/vector_polygons_renderer.d.ts +9 -0
- package/dist/gerencigeo-canvas/renderers/wms_renderer.d.ts +8 -0
- package/dist/gerencigeo-canvas/sigef_consultor.d.ts +9 -0
- package/dist/gerencigeo-canvas/tile_preloader.d.ts +2 -0
- package/dist/gerencigeo-canvas/types.d.ts +169 -0
- package/dist/gerencigeo-canvas/utils.d.ts +46 -0
- package/dist/index.cjs +1 -0
- package/dist/index.d.ts +116 -0
- package/dist/index.js +186 -0
- package/dist/leaflet-Cw6tqYFh.cjs +1 -0
- package/dist/leaflet-DkaFZYc5.js +69 -0
- package/dist/leaflet-loader-94z5VsdY.cjs +2 -0
- package/dist/leaflet-loader-Cjcdgj5R.js +21 -0
- package/dist/listener-bag-D5omxZ9h.cjs +1 -0
- package/dist/listener-bag-DQgv7OON.js +34 -0
- package/dist/mapa.cjs +19 -0
- package/dist/mapa.d.ts +11 -0
- package/dist/mapa.js +264 -0
- package/dist/modal.cjs +1 -0
- package/dist/modal.d.ts +8 -0
- package/dist/modal.js +8 -0
- package/dist/register.cjs +1 -0
- package/dist/register.d.ts +7 -0
- package/dist/register.js +21 -0
- package/dist/seletor-mapa-base.cjs +53 -0
- package/dist/seletor-mapa-base.d.ts +8 -0
- package/dist/seletor-mapa-base.js +275 -0
- package/dist/ssr-safe-5cWfJP-s.js +10 -0
- package/dist/ssr-safe-CiHD1adl.cjs +1 -0
- package/dist/tabela.cjs +1 -0
- package/dist/tabela.d.ts +12 -0
- package/dist/tabela.js +56 -0
- package/dist/tools.cjs +1 -0
- package/dist/tools.d.ts +8 -0
- package/dist/tools.js +30 -0
- package/dist/ui-badge-92yelKls.js +183 -0
- package/dist/ui-badge-B95jSECC.cjs +28 -0
- package/dist/ui-botao-BShEouvi.js +124 -0
- package/dist/ui-botao-DF1yuUUD.cjs +12 -0
- package/dist/ui-campo-texto-BCh5HyCM.cjs +16 -0
- package/dist/ui-campo-texto-B_JF6POq.js +361 -0
- package/dist/ui-card-BJ8SmvVf.js +111 -0
- package/dist/ui-card-Bhm6k91e.cjs +20 -0
- package/dist/ui-kit.css +1 -0
- package/dist/ui-modal-Bi4isGYh.cjs +18 -0
- package/dist/ui-modal-DV-pw2x1.js +194 -0
- package/dist/ui-paleta-ferramentas-B6dJ0O6K.cjs +18 -0
- package/dist/ui-paleta-ferramentas-Bpp4XBVg.js +633 -0
- package/dist/ui-segmented-C8wuycjJ.js +411 -0
- package/dist/ui-segmented-NC5cBXLh.cjs +19 -0
- package/dist/ui-skeleton-B3xQyn0Z.js +396 -0
- package/dist/ui-skeleton-D42oQufF.cjs +33 -0
- package/dist/ui-switch-C6o4yZUF.cjs +53 -0
- package/dist/ui-switch-CO9MoS8x.js +826 -0
- package/dist/ui-tabela-propriedades-7yJ9g7ti.cjs +145 -0
- package/dist/ui-tabela-propriedades-D-XKNVwK.js +2078 -0
- package/dist/ui-toast-CQBqvUm3.cjs +20 -0
- package/dist/ui-toast-CwUmiqyG.js +156 -0
- package/dist/zero-js-triggers-DdESy0tk.js +205 -0
- package/dist/zero-js-triggers-QGD7FOTv.cjs +1 -0
- package/package.json +149 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 thibezer
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,624 @@
|
|
|
1
|
+
# 🎨 UI Components Kit - Web Components Nativos & Universais
|
|
2
|
+
|
|
3
|
+
Biblioteca de **Web Components Nativos Universais e Agnósticos**, construída no padrão oficial **W3C Custom Elements + Shadow DOM**, com TypeScript, Design Tokens em CSS modular e Vite.
|
|
4
|
+
|
|
5
|
+
Projetada para funcionar em **qualquer linguagem, framework ou sistema web** (HTML puro, React, Next.js, Vue, Angular, Svelte, PHP, Django, WordPress, Blazor, etc.) com **zero dependências externas**.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 📑 Índice
|
|
10
|
+
|
|
11
|
+
1. [Por que Web Components?](#-por-que-web-components)
|
|
12
|
+
2. [Como Importar na sua Aplicação](#-como-importar-na-sua-aplicação)
|
|
13
|
+
- [Opção 1: CDN / Script Tag (HTML puro, PHP, Django)](#opção-1-cdn--script-tag-html-puro-php-django)
|
|
14
|
+
- [Opção 2: NPM / Módulos ES (React, Vue, Next.js, Vite)](#opção-2-npm--módulos-es-react-vue-nextjs-vite)
|
|
15
|
+
3. [Como Controlar os Componentes (5 Pilares)](#-como-controlar-os-componentes-5-pilares)
|
|
16
|
+
4. [⚡ Recursos Inteligentes de Alta Produtividade](#-recursos-inteligentes-de-alta-produtividade)
|
|
17
|
+
- [Ações Declarativas "Zero-JS" (Triggers Nativos)](#1-ações-declarativas-zero-js-triggers-nativos)
|
|
18
|
+
- [Formulários Automáticos com FormData Nativo (W3C FACE)](#2-formulários-automáticos-com-formdata-nativo-w3c-face)
|
|
19
|
+
- [Barramento Global de Orquestração (UIBus)](#3-barramento-global-de-orquestração-uibus)
|
|
20
|
+
- [Tabelas Autônomas com Auto-Fetch Remoto](#4-tabelas-autônomas-com-auto-fetch-remoto)
|
|
21
|
+
5. [💻 Exemplos de Uso por Tecnologia](#-exemplos-de-uso-por-tecnologia)
|
|
22
|
+
- [HTML Puro + JavaScript](#html-puro--javascript)
|
|
23
|
+
- [React / Next.js](#react--nextjs)
|
|
24
|
+
- [Vue.js](#vuejs)
|
|
25
|
+
- [Iframes / Microfrontends](#iframes--microfrontends)
|
|
26
|
+
6. [🧩 Catálogo de Componentes & Referência](#-catálogo-de-componentes--referência)
|
|
27
|
+
7. [🛠️ Como Executar e Compilar Localmente](#️-como-executar-e-compilar-localmente)
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## 🎯 Por que Web Components?
|
|
32
|
+
|
|
33
|
+
* 🌐 **100% Universal e Agnóstico**: Funciona em qualquer stack sem necessidade de bibliotecas intermediárias.
|
|
34
|
+
* 🛡️ **Encapsulamento Total (Shadow DOM)**: O CSS da sua aplicação nunca quebra o componente, e o CSS do componente nunca vaza para o seu site.
|
|
35
|
+
* 📐 **Design Tokens Centralizados**: Variáveis CSS personalizáveis para cores, tipografia, raios e densidade.
|
|
36
|
+
* 🚀 **Suporte a Altíssima Densidade**: Otimizado para interfaces densas e técnicas (GIS, CAD, Topografia de 15px a 20px de altura) até interfaces fluidas modernas.
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## 📦 Como Importar na sua Aplicação
|
|
41
|
+
|
|
42
|
+
### Opção 1: CDN / Script Tag (HTML puro, PHP, Django)
|
|
43
|
+
|
|
44
|
+
Adicione as tags no `<head>` ou antes do fechamento do `</body>`:
|
|
45
|
+
|
|
46
|
+
```html
|
|
47
|
+
<!-- 1. Design Tokens e Estilos Globais -->
|
|
48
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@thibezer/ui-components-kit@1/dist/ui-kit.css">
|
|
49
|
+
|
|
50
|
+
<!-- 2. Biblioteca dos Componentes (Módulo ES) -->
|
|
51
|
+
<script type="module" src="https://cdn.jsdelivr.net/npm/@thibezer/ui-components-kit@1/dist/index.js"></script>
|
|
52
|
+
|
|
53
|
+
<!-- 3. Uso imediato no HTML -->
|
|
54
|
+
<ui-botao-primario variante="primary">Clique Aqui</ui-botao-primario>
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Opção 2: NPM / Módulos ES (React, Vue, Next.js, Vite)
|
|
58
|
+
|
|
59
|
+
Instale pelo npm:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
npm install @thibezer/ui-components-kit
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
> O pacote é publicado já compilado (`dist/`) e **não executa build na instalação**, então funciona em CI/CD e em servidores com `npm ci --omit=dev`. A antiga instalação por URL Git (`git+https://github.com/...`) não é mais suportada: o repositório não versiona `dist/`.
|
|
66
|
+
|
|
67
|
+
No ponto de entrada da sua aplicação (`main.ts`, `index.js` ou `App.tsx`):
|
|
68
|
+
|
|
69
|
+
```typescript
|
|
70
|
+
// 1. Estilos globais obrigatórios (tokens CSS)
|
|
71
|
+
import '@thibezer/ui-components-kit/style.css';
|
|
72
|
+
|
|
73
|
+
// 2. Biblioteca completa (ou escolha os submódulos abaixo)
|
|
74
|
+
import '@thibezer/ui-components-kit';
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
#### 🚀 Importação Modular e Otimizada (Sub-paths)
|
|
78
|
+
|
|
79
|
+
Pague apenas pelo que utilizar. Importe por domínio de funcionalidade ou por componente específico:
|
|
80
|
+
|
|
81
|
+
O export map expõe explicitamente os pontos de entrada canônicos (ESM em `.js`, CommonJS em `.cjs` e tipos `.d.ts`):
|
|
82
|
+
|
|
83
|
+
| Subpath | Arquivo (ESM) |
|
|
84
|
+
|---|---|
|
|
85
|
+
| `@thibezer/ui-components-kit` | `dist/index.js` |
|
|
86
|
+
| `@thibezer/ui-components-kit/camadas` | `dist/camadas.js` |
|
|
87
|
+
| `@thibezer/ui-components-kit/forms` | `dist/forms.js` |
|
|
88
|
+
| `@thibezer/ui-components-kit/feedback` | `dist/feedback.js` |
|
|
89
|
+
| `@thibezer/ui-components-kit/tabela` | `dist/tabela.js` |
|
|
90
|
+
| `@thibezer/ui-components-kit/style.css` | `dist/ui-kit.css` (100% autocontido, sem `@import`) |
|
|
91
|
+
|
|
92
|
+
##### 1. Por Domínio / Categoria:
|
|
93
|
+
```typescript
|
|
94
|
+
import '@thibezer/ui-components-kit/forms'; // Campos, Select, Checkbox, Radio, Switch (~8 kB gzip)
|
|
95
|
+
import '@thibezer/ui-components-kit/feedback'; // Modais, Drawers, Alertas, Toasts, Tooltips, Skeletons (~6 kB gzip)
|
|
96
|
+
import '@thibezer/ui-components-kit/data'; // Tabela, Tabela-Propriedades, Stat KPI, Badge (~4 kB gzip)
|
|
97
|
+
import '@thibezer/ui-components-kit/tools'; // Ribbon CAD/Office e Paleta de Ferramentas (~10 kB gzip)
|
|
98
|
+
import '@thibezer/ui-components-kit/core'; // Apenas UIBus, Zero-JS e ListenerBag (< 1 kB gzip)
|
|
99
|
+
import '@thibezer/ui-components-kit/canvas'; // Mesa CAD vetorial e motor GIS (~33 kB gzip)
|
|
100
|
+
import '@thibezer/ui-components-kit/camadas'; // Painel de Camadas GIS/CAD redimensionável (~21 kB gzip)
|
|
101
|
+
import '@thibezer/ui-components-kit/mapa'; // Mapa Geográfico Leaflet (~3 kB gzip)
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
##### 2. Granular por Componente (Ultra Leve):
|
|
105
|
+
```typescript
|
|
106
|
+
import '@thibezer/ui-components-kit/botao'; // Apenas <ui-botao> e <ui-botao-primario> (~3.4 kB gzip)
|
|
107
|
+
import '@thibezer/ui-components-kit/campo-texto'; // Apenas <ui-campo-texto> com FACE e anti-zoom (~3.9 kB gzip)
|
|
108
|
+
import '@thibezer/ui-components-kit/modal'; // Apenas <ui-modal> com bottom-sheet mobile (~3.3 kB gzip)
|
|
109
|
+
import '@thibezer/ui-components-kit/card'; // Apenas <ui-card> com elevação (~2.3 kB gzip)
|
|
110
|
+
import '@thibezer/ui-components-kit/tabela'; // Apenas <ui-tabela> virtualizada
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
> **Zero Overhead**: Uma tela que utilize apenas `<ui-botao>` e `<ui-campo-texto>` importa menos de **8 kB gzip**, sem carregar nada de Leaflet, CAD, GIS ou virtualização.
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## 🎛️ Como Controlar os Componentes (5 Pilares)
|
|
118
|
+
|
|
119
|
+
```text
|
|
120
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
121
|
+
│ SISTEMA EXTERNO │
|
|
122
|
+
└──────┬───────────────▲─────────────────┬─────────────────▲──┘
|
|
123
|
+
│ │ │ │
|
|
124
|
+
1. Atributos 4. Eventos Custom 2. Propriedades 3. Métodos
|
|
125
|
+
(HTML) (ui-*) (Objetos/Listas) (Imperativo)
|
|
126
|
+
│ │ │ │
|
|
127
|
+
┌──────▼───────────────┴─────────────────▼─────────────────┴──┐
|
|
128
|
+
│ WEB COMPONENT (<ui-*>) │
|
|
129
|
+
└─────────────────────────────────────────────────────────────┘
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### 1. Atributos HTML (Controle Declarativo)
|
|
133
|
+
Configurações simples passadas diretamente nas tags:
|
|
134
|
+
```html
|
|
135
|
+
<ui-campo-texto label="CPF" placeholder="000.000.000-00" obrigatorio></ui-campo-texto>
|
|
136
|
+
<ui-modal id="meu-modal" titulo="Confirmar Exclusão"></ui-modal>
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
### 📏 Ajuste de Altura e Dimensionamento Inteligente (Zero Atrito)
|
|
142
|
+
|
|
143
|
+
Os campos de texto (`<ui-campo-texto>`), listas flutuantes/selects (`<ui-lista-flutuante>`, `<ui-select>`) e botões (`<ui-botao-primario>`) possuem 4 formas flexíveis de ajuste de altura:
|
|
144
|
+
|
|
145
|
+
#### 1. Via Atributo de Tamanho Predefinido (`tamanho` ou `densidade`):
|
|
146
|
+
```html
|
|
147
|
+
<!-- Compacto (26px) - Ideal para Toolbars CAD/GIS, tabelas e alta densidade -->
|
|
148
|
+
<ui-campo-texto tamanho="sm" placeholder="26px Compacto"></ui-campo-texto>
|
|
149
|
+
<ui-lista-flutuante tamanho="sm" placeholder="Selecione..."></ui-lista-flutuante>
|
|
150
|
+
|
|
151
|
+
<!-- Padrão (34px) - Padrão moderno e equilibrado para formulários e modais -->
|
|
152
|
+
<ui-campo-texto tamanho="md" placeholder="34px Padrão"></ui-campo-texto>
|
|
153
|
+
<ui-lista-flutuante tamanho="md" placeholder="Selecione..."></ui-lista-flutuante>
|
|
154
|
+
|
|
155
|
+
<!-- Conforto / Touch (42px) - Otimizado para dispositivos móveis e telas sensíveis ao toque -->
|
|
156
|
+
<ui-campo-texto tamanho="lg" placeholder="42px Conforto"></ui-campo-texto>
|
|
157
|
+
<ui-lista-flutuante tamanho="lg" placeholder="Selecione..."></ui-lista-flutuante>
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
#### 2. Via Atributo de Altura Explícita (`altura` ou `height`):
|
|
161
|
+
```html
|
|
162
|
+
<!-- Define a altura exata em pixels diretamente no elemento -->
|
|
163
|
+
<ui-campo-texto altura="38" placeholder="Altura de 38px"></ui-campo-texto>
|
|
164
|
+
<ui-lista-flutuante altura="44px" placeholder="Altura de 44px"></ui-lista-flutuante>
|
|
165
|
+
<ui-botao-primario altura="40">Salvar</ui-botao-primario>
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
#### 3. Via Variável CSS Customizável (`--ui-campo-altura`):
|
|
169
|
+
```css
|
|
170
|
+
/* No seu CSS global ou no container pai */
|
|
171
|
+
.meu-formulario {
|
|
172
|
+
--ui-campo-altura: 36px; /* Aplica instantaneamente em todos os inputs, selects e botões filhos */
|
|
173
|
+
}
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
#### 4. Via Barramento Global de Densidade (`UIBus`):
|
|
177
|
+
```javascript
|
|
178
|
+
import { UIBus } from '@thibezer/ui-components-kit';
|
|
179
|
+
|
|
180
|
+
// Altera a densidade de toda a aplicação em tempo real:
|
|
181
|
+
UIBus.definirDensidade('compacta'); // 26px
|
|
182
|
+
UIBus.definirDensidade('padrao'); // 34px
|
|
183
|
+
UIBus.definirDensidade('relaxada'); // 42px
|
|
184
|
+
UIBus.definirDensidade(38); // Valor numérico em px customizado
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
### 2. Propriedades JavaScript (Dados Complexos)
|
|
190
|
+
Para enviar arrays e objetos complexos:
|
|
191
|
+
```javascript
|
|
192
|
+
const tabela = document.querySelector('ui-tabela');
|
|
193
|
+
tabela.colunas = [
|
|
194
|
+
{ id: 'ponto', rotulo: 'Ponto', ordenavel: true },
|
|
195
|
+
{ id: 'altitude', rotulo: 'Altitude (m)' }
|
|
196
|
+
];
|
|
197
|
+
tabela.dados = [
|
|
198
|
+
{ ponto: 'P-01', altitude: '542,15' },
|
|
199
|
+
{ ponto: 'P-02', altitude: '545,30' }
|
|
200
|
+
];
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
### 3. Métodos Imperativos (Ações Diretas)
|
|
204
|
+
Comandos diretos chamados na instância do elemento:
|
|
205
|
+
```javascript
|
|
206
|
+
const modal = document.getElementById('meu-modal');
|
|
207
|
+
modal.abrir();
|
|
208
|
+
modal.fechar();
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### 4. Eventos Customizados Nativos (`ui-*`)
|
|
212
|
+
Escuta de eventos disparados pelas interações do usuário:
|
|
213
|
+
```javascript
|
|
214
|
+
const campo = document.querySelector('ui-campo-texto');
|
|
215
|
+
campo.addEventListener('ui-input', (e) => {
|
|
216
|
+
console.log('Texto digitado:', e.detail.value);
|
|
217
|
+
});
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
> **Mutação de usuário vs. programática (`<ui-camadas>`)**: eventos saem do componente **somente** em resposta a interações físicas (clique, drag-and-drop, teclado). Atribuir `painel.layers = [...]`, alterar atributos (`camada-ativa`, `colapsado`, `mapa-base-ativo`...) ou chamar métodos públicos (`definirCamadaAtiva`, `selecionarFeicao`, `limparSelecao`, `colapsar`, `definirAltura`...) apenas atualiza o DOM interno — sem redisparar eventos. Isso elimina loops de sincronização em apps reativos (React, Vue, Svelte). Para forçar a emissão numa chamada programática, passe `emitirEvento = true` (ex.: `painel.definirCamadaAtiva('lotes', true)`).
|
|
221
|
+
|
|
222
|
+
### 5. Serviços Globais e Helpers
|
|
223
|
+
Utilitários prontos para uso sem necessidade de instanciar elementos:
|
|
224
|
+
```javascript
|
|
225
|
+
import { UIToast, UIBus } from '@thibezer/ui-components-kit';
|
|
226
|
+
|
|
227
|
+
UIToast.notificar({
|
|
228
|
+
tipo: 'sucesso',
|
|
229
|
+
titulo: 'Registro Salvo!',
|
|
230
|
+
mensagem: 'Os dados foram sincronizados.',
|
|
231
|
+
duracao: 4000
|
|
232
|
+
});
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
### 6. Escala de Elevação (z-index)
|
|
236
|
+
Todos os componentes flutuantes consomem tokens de elevação previsíveis (com fallback), definidos em `ui-kit.css`. Sobrescreva-os no `:root` da aplicação para encaixar a pilha do kit entre os HUDs e modais do seu app:
|
|
237
|
+
```css
|
|
238
|
+
:root {
|
|
239
|
+
--ui-z-workspace-hud: 500; /* <ui-camadas flutuante>, <ui-seletor-mapa-base>, toolbars do canvas */
|
|
240
|
+
--ui-z-docked-bar: 600; /* <ui-ribbon> recolhido, <ui-tabela-propriedades flutuante> */
|
|
241
|
+
--ui-z-drawer: 700; /* <ui-drawer> e backdrop */
|
|
242
|
+
--ui-z-modal: 1000; /* <ui-modal> e backdrop */
|
|
243
|
+
--ui-z-popover: 1050; /* menus suspensos/contexto, <ui-select> (acima do modal, funciona dentro dele) */
|
|
244
|
+
--ui-z-toast: 1100; /* UIToast */
|
|
245
|
+
--ui-z-tooltip: 1200; /* <ui-tooltip> */
|
|
246
|
+
}
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
### 7. Acessibilidade Nativa de Rótulos
|
|
250
|
+
`<ui-input>` (alias de `<ui-campo-texto>`), `<ui-select>` e `<ui-switch>` geram IDs únicos internamente e associam o rótulo visível ao controle nativo do Shadow DOM — o projeto consumidor não precisa gerenciar IDs:
|
|
251
|
+
```html
|
|
252
|
+
<ui-input label="Nome"></ui-input> <!-- <label for> ↔ <input> interno -->
|
|
253
|
+
<ui-select label="Cidade">...</ui-select> <!-- aria-labelledby = rótulo + valor atual -->
|
|
254
|
+
<ui-switch label="Modo escuro"></ui-switch> <!-- role="switch" aria-labelledby -->
|
|
255
|
+
|
|
256
|
+
<!-- Sem o atributo label, o nome acessível vem de fora do Shadow DOM: -->
|
|
257
|
+
<label>Telefone <ui-input></ui-input></label>
|
|
258
|
+
<ui-switch aria-label="Camada visível"></ui-switch>
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
## ⚡ Recursos Inteligentes de Alta Produtividade
|
|
264
|
+
|
|
265
|
+
### 1. Ações Declarativas "Zero-JS" (Triggers Nativos)
|
|
266
|
+
Você pode acionar modais, fechar janelas, disparar notificações toast ou copiar textos **sem escrever nenhuma linha de JavaScript**, apenas adicionando atributos nas tags HTML:
|
|
267
|
+
|
|
268
|
+
```html
|
|
269
|
+
<!-- Abrir Modal sem JS -->
|
|
270
|
+
<ui-botao-primario target-modal="modal-exclusao" variante="destrutivo">
|
|
271
|
+
Excluir Registro
|
|
272
|
+
</ui-botao-primario>
|
|
273
|
+
|
|
274
|
+
<!-- Modal com Fechamento e Toast automáticos -->
|
|
275
|
+
<ui-modal id="modal-exclusao" titulo="Confirmação">
|
|
276
|
+
Tem certeza que deseja excluir?
|
|
277
|
+
<div slot="rodape">
|
|
278
|
+
<ui-botao-primario dismiss-modal variante="secundario">Cancelar</ui-botao-primario>
|
|
279
|
+
<ui-botao-primario dismiss-modal toast-sucesso="Excluído com sucesso!" variante="destrutivo">
|
|
280
|
+
Confirmar
|
|
281
|
+
</ui-botao-primario>
|
|
282
|
+
</div>
|
|
283
|
+
</ui-modal>
|
|
284
|
+
|
|
285
|
+
<!-- Copiar Texto em 1 Clique -->
|
|
286
|
+
<ui-campo-texto id="input-token" value="SIGEF-2026-X88"></ui-campo-texto>
|
|
287
|
+
<ui-botao-primario copiar-texto="#input-token" copiar-mensagem="Token copiado!">
|
|
288
|
+
Copiar Chave
|
|
289
|
+
</ui-botao-primario>
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
#### Tabela de Atributos Zero-JS Disponíveis:
|
|
293
|
+
| Atributo | Descrição | Exemplo de Uso |
|
|
294
|
+
| :--- | :--- | :--- |
|
|
295
|
+
| `target-modal="id"` | Abre o modal com o ID especificado ao clicar. | `target-modal="modal-login"` |
|
|
296
|
+
| `dismiss-modal` | Fecha o modal atual (ou o especificado por ID). | `dismiss-modal` |
|
|
297
|
+
| `toast-sucesso="msg"` | Dispara uma notificação flutuante de sucesso. | `toast-sucesso="Salvo com sucesso!"` |
|
|
298
|
+
| `toast-erro="msg"` | Dispara uma notificação flutuante de erro. | `toast-erro="Falha na conexão."` |
|
|
299
|
+
| `toast-alerta="msg"` | Dispara uma notificação flutuante de aviso. | `toast-alerta="Preencha os campos obrigatórios."` |
|
|
300
|
+
| `copiar-texto="texto\|#id"` | Copia o texto ou o valor do elemento referenciado. | `copiar-texto="#campo-pix"` |
|
|
301
|
+
| `limpar-form="id"` | Reseta todos os campos do formulário indicado. | `limpar-form="form-cadastro"` |
|
|
302
|
+
| `alternar-tema` | Alterna entre tema claro e escuro globalmente. | `alternar-tema` |
|
|
303
|
+
|
|
304
|
+
---
|
|
305
|
+
|
|
306
|
+
### 2. Formulários Automáticos com `FormData` Nativo (W3C FACE)
|
|
307
|
+
Todos os campos (`<ui-campo-texto>`, `<ui-lista-flutuante>`, `<ui-checkbox>`, `<ui-radio>`, `<ui-switch>`) implementam a especificação oficial de **Form-Associated Custom Elements**.
|
|
308
|
+
|
|
309
|
+
Isso significa que você extrai os dados de todos os campos de uma única vez, sem ler um por um:
|
|
310
|
+
|
|
311
|
+
```html
|
|
312
|
+
<form id="form-imovel">
|
|
313
|
+
<ui-campo-texto name="denominacao" label="Nome da Fazenda" value="Boa Vista"></ui-campo-texto>
|
|
314
|
+
<ui-campo-texto name="municipio" label="Município" value="Uberlândia"></ui-campo-texto>
|
|
315
|
+
<ui-checkbox name="georreferenciado" label="Georreferenciado" marcado value="sim"></ui-checkbox>
|
|
316
|
+
|
|
317
|
+
<ui-botao-primario type="submit">Salvar Imóvel</ui-botao-primario>
|
|
318
|
+
</form>
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
```javascript
|
|
322
|
+
const form = document.getElementById('form-imovel');
|
|
323
|
+
|
|
324
|
+
form.addEventListener('submit', (e) => {
|
|
325
|
+
e.preventDefault();
|
|
326
|
+
|
|
327
|
+
// Extrai TODOS os campos em 1 única linha nativa:
|
|
328
|
+
const dados = Object.fromEntries(new FormData(form));
|
|
329
|
+
console.log(dados);
|
|
330
|
+
// Resultado: { denominacao: "Boa Vista", municipio: "Uberlândia", georreferenciado: "sim" }
|
|
331
|
+
});
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
---
|
|
335
|
+
|
|
336
|
+
### 3. Barramento Global de Orquestração (`UIBus`)
|
|
337
|
+
O `UIBus` é uma central reativa que permite comandar qualquer componente do sistema ou ouvir eventos sem precisar de `querySelector`:
|
|
338
|
+
|
|
339
|
+
```javascript
|
|
340
|
+
import { UIBus } from '@thibezer/ui-components-kit';
|
|
341
|
+
|
|
342
|
+
// 1. Executar Ações Diretas:
|
|
343
|
+
UIBus.abrirModal('modal-confirmacao');
|
|
344
|
+
UIBus.fecharModal('modal-confirmacao');
|
|
345
|
+
UIBus.notificar({ tipo: 'sucesso', mensagem: 'Operação concluída!' });
|
|
346
|
+
UIBus.copiar('Texto para a área de transferência', 'Copiado!');
|
|
347
|
+
UIBus.definirDensidade('compacta'); // 'compacta' | 'normal' | 'relaxada'
|
|
348
|
+
UIBus.definirTema('escuro'); // 'claro' | 'escuro'
|
|
349
|
+
|
|
350
|
+
// 2. Comunicação Desacoplada (Pub/Sub):
|
|
351
|
+
UIBus.on('vertice:selecionado', (dadosVertice) => {
|
|
352
|
+
console.log('Vértice selecionado em qualquer tela:', dadosVertice);
|
|
353
|
+
});
|
|
354
|
+
|
|
355
|
+
UIBus.emit('vertice:selecionado', { id: 101, nome: 'M-01', altitude: 432.10 });
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
---
|
|
359
|
+
|
|
360
|
+
### 4. Tabelas Autônomas com Auto-Fetch Remoto
|
|
361
|
+
A `<ui-tabela>` pode buscar dados de uma API remota de forma totalmente autônoma, exibindo indicador de loading, tratando erros e permitindo filtragem instantânea:
|
|
362
|
+
|
|
363
|
+
```html
|
|
364
|
+
<ui-tabela
|
|
365
|
+
id="tabela-vertices"
|
|
366
|
+
src="/api/v1/geodesia/vertices"
|
|
367
|
+
max-height="400px"
|
|
368
|
+
densidade="compacta">
|
|
369
|
+
</ui-tabela>
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
```javascript
|
|
373
|
+
const tabela = document.getElementById('tabela-vertices');
|
|
374
|
+
|
|
375
|
+
// Definir colunas da tabela:
|
|
376
|
+
tabela.colunas = [
|
|
377
|
+
{ id: 'nome_vertice', rotulo: 'Vértice', ordenavel: true },
|
|
378
|
+
{ id: 'este', rotulo: 'Este (m)', ordenavel: true, alinhamento: 'direita' },
|
|
379
|
+
{ id: 'norte', rotulo: 'Norte (m)', ordenavel: true, alinhamento: 'direita' }
|
|
380
|
+
];
|
|
381
|
+
|
|
382
|
+
// Métodos inteligentes disponíveis na tabela:
|
|
383
|
+
tabela.filtrar('M-01'); // Filtra instantaneamente em todas as colunas
|
|
384
|
+
tabela.recarregar(); // Recarrega os dados da API remota
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
---
|
|
388
|
+
|
|
389
|
+
## 💻 Exemplos de Uso por Tecnologia
|
|
390
|
+
|
|
391
|
+
### HTML Puro + JavaScript
|
|
392
|
+
```html
|
|
393
|
+
<!DOCTYPE html>
|
|
394
|
+
<html lang="pt-BR">
|
|
395
|
+
<head>
|
|
396
|
+
<link rel="stylesheet" href="dist/ui-kit.css">
|
|
397
|
+
<script type="module" src="dist/index.js"></script>
|
|
398
|
+
</head>
|
|
399
|
+
<body>
|
|
400
|
+
<ui-campo-texto id="meu-campo" label="Nome do Projeto"></ui-campo-texto>
|
|
401
|
+
<ui-botao-primario target-modal="meu-modal">Abrir Detalhes</ui-botao-primario>
|
|
402
|
+
|
|
403
|
+
<ui-modal id="meu-modal" titulo="Detalhes">
|
|
404
|
+
<p>Conteúdo do modal...</p>
|
|
405
|
+
<div slot="rodape">
|
|
406
|
+
<ui-botao-primario dismiss-modal>Fechar</ui-botao-primario>
|
|
407
|
+
</div>
|
|
408
|
+
</ui-modal>
|
|
409
|
+
|
|
410
|
+
<script>
|
|
411
|
+
document.getElementById('meu-campo').addEventListener('ui-input', (e) => {
|
|
412
|
+
console.log('Digitado:', e.detail.value);
|
|
413
|
+
});
|
|
414
|
+
</script>
|
|
415
|
+
</body>
|
|
416
|
+
</html>
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
---
|
|
420
|
+
|
|
421
|
+
### React / Next.js (SSR & Client Components)
|
|
422
|
+
|
|
423
|
+
A biblioteca é **100% SSR-safe**: todas as classes herdam de `SafeHTMLElement` e o registro de tags utiliza verificações de segurança para ambientes sem DOM (Node.js). Isso garante que você pode importar tipos, classes e constantes tanto no servidor quanto no cliente sem encontrar `ReferenceError: HTMLElement is not defined` ou `customElements is not defined`.
|
|
424
|
+
|
|
425
|
+
#### No Next.js (App Router):
|
|
426
|
+
|
|
427
|
+
Crie um componente cliente provedor ou registre no topo do seu layout/página cliente:
|
|
428
|
+
|
|
429
|
+
```tsx
|
|
430
|
+
// components/UIProvider.tsx
|
|
431
|
+
'use client';
|
|
432
|
+
|
|
433
|
+
import { useEffect } from 'react';
|
|
434
|
+
import '@thibezer/ui-components-kit/style.css';
|
|
435
|
+
import '@thibezer/ui-components-kit/register'; // Registra todos os Custom Elements com segurança no cliente
|
|
436
|
+
|
|
437
|
+
export function UIProvider({ children }: { children: React.ReactNode }) {
|
|
438
|
+
return <>{children}</>;
|
|
439
|
+
}
|
|
440
|
+
```
|
|
441
|
+
|
|
442
|
+
Ou registre de forma modular apenas o que a tela precisa:
|
|
443
|
+
|
|
444
|
+
```tsx
|
|
445
|
+
// app/dashboard/page.tsx
|
|
446
|
+
'use client';
|
|
447
|
+
|
|
448
|
+
import React, { useEffect, useRef, useState } from 'react';
|
|
449
|
+
import '@thibezer/ui-components-kit/style.css';
|
|
450
|
+
import '@thibezer/ui-components-kit/forms';
|
|
451
|
+
import '@thibezer/ui-components-kit/botao';
|
|
452
|
+
import '@thibezer/ui-components-kit/tabela';
|
|
453
|
+
import { UIBus } from '@thibezer/ui-components-kit/core';
|
|
454
|
+
|
|
455
|
+
export default function DashboardPropriedades() {
|
|
456
|
+
const tabelaRef = useRef<any>(null);
|
|
457
|
+
const [nome, setNome] = useState('');
|
|
458
|
+
|
|
459
|
+
useEffect(() => {
|
|
460
|
+
if (tabelaRef.current) {
|
|
461
|
+
tabelaRef.current.colunas = [
|
|
462
|
+
{ id: 'id', rotulo: 'Código' },
|
|
463
|
+
{ id: 'nome', rotulo: 'Propriedade' }
|
|
464
|
+
];
|
|
465
|
+
tabelaRef.current.dados = [
|
|
466
|
+
{ id: 1, nome: 'Fazenda Santa Luzia' }
|
|
467
|
+
];
|
|
468
|
+
}
|
|
469
|
+
}, []);
|
|
470
|
+
|
|
471
|
+
return (
|
|
472
|
+
<div style={{ padding: 24 }}>
|
|
473
|
+
<ui-campo-texto
|
|
474
|
+
label="Pesquisar Imóvel"
|
|
475
|
+
value={nome}
|
|
476
|
+
onInput={(e: any) => {
|
|
477
|
+
setNome(e.detail?.value || '');
|
|
478
|
+
tabelaRef.current?.filtrar(e.detail?.value || '');
|
|
479
|
+
}}
|
|
480
|
+
></ui-campo-texto>
|
|
481
|
+
|
|
482
|
+
<ui-tabela ref={tabelaRef} max-height="300px" densidade="compacta"></ui-tabela>
|
|
483
|
+
|
|
484
|
+
<ui-botao-primario
|
|
485
|
+
variante="primary"
|
|
486
|
+
onClick={() => UIBus.notificar({ tipo: 'sucesso', mensagem: 'Dados sincronizados!' })}>
|
|
487
|
+
Sincronizar
|
|
488
|
+
</ui-botao-primario>
|
|
489
|
+
</div>
|
|
490
|
+
);
|
|
491
|
+
}
|
|
492
|
+
```
|
|
493
|
+
|
|
494
|
+
---
|
|
495
|
+
|
|
496
|
+
### Vue.js
|
|
497
|
+
```vue
|
|
498
|
+
<template>
|
|
499
|
+
<div class="container">
|
|
500
|
+
<ui-campo-texto
|
|
501
|
+
:value="termoBusca"
|
|
502
|
+
label="Buscar Vértice"
|
|
503
|
+
@ui-input="aoDigitar"
|
|
504
|
+
/>
|
|
505
|
+
|
|
506
|
+
<ui-lista-flutuante
|
|
507
|
+
.itens="opcoes"
|
|
508
|
+
@ui-selecionar="aoSelecionar"
|
|
509
|
+
/>
|
|
510
|
+
|
|
511
|
+
<ui-botao-primario target-modal="modal-confirmacao">
|
|
512
|
+
Confirmar Operação
|
|
513
|
+
</ui-botao-primario>
|
|
514
|
+
</div>
|
|
515
|
+
</template>
|
|
516
|
+
|
|
517
|
+
<script setup>
|
|
518
|
+
import { ref } from 'vue';
|
|
519
|
+
import '@thibezer/ui-components-kit/style.css';
|
|
520
|
+
import '@thibezer/ui-components-kit';
|
|
521
|
+
|
|
522
|
+
const termoBusca = ref('');
|
|
523
|
+
const opcoes = ref([
|
|
524
|
+
{ id: '1', label: 'Marco Geodésico M' },
|
|
525
|
+
{ id: '2', label: 'Ponto Topográfico P' }
|
|
526
|
+
]);
|
|
527
|
+
|
|
528
|
+
function aoDigitar(e) {
|
|
529
|
+
termoBusca.value = e.detail.value;
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
function aoSelecionar(e) {
|
|
533
|
+
console.log('Opção selecionada:', e.detail);
|
|
534
|
+
}
|
|
535
|
+
</script>
|
|
536
|
+
```
|
|
537
|
+
|
|
538
|
+
---
|
|
539
|
+
|
|
540
|
+
### Iframes / Microfrontends
|
|
541
|
+
Comunicação segura entre iframes e sistemas pais via eventos do `UIBus`:
|
|
542
|
+
|
|
543
|
+
```javascript
|
|
544
|
+
// Dentro do Iframe (Filho):
|
|
545
|
+
import { UIBus } from '@thibezer/ui-components-kit';
|
|
546
|
+
|
|
547
|
+
UIBus.on('vertice:salvo', (dados) => {
|
|
548
|
+
window.parent.postMessage({ tipo: 'VERTICE_SALVO', payload: dados }, '*');
|
|
549
|
+
});
|
|
550
|
+
|
|
551
|
+
// No Sistema Principal (Pai):
|
|
552
|
+
window.addEventListener('message', (event) => {
|
|
553
|
+
if (event.data?.tipo === 'VERTICE_SALVO') {
|
|
554
|
+
console.log('Recebido do Iframe:', event.data.payload);
|
|
555
|
+
}
|
|
556
|
+
});
|
|
557
|
+
```
|
|
558
|
+
|
|
559
|
+
---
|
|
560
|
+
|
|
561
|
+
## 🧩 Catálogo de Componentes & Referência
|
|
562
|
+
|
|
563
|
+
### 🟢 Camada 1: Fundamentos
|
|
564
|
+
| Tag | Descrição | Principais Atributos / Props | Eventos Emitidos |
|
|
565
|
+
| :--- | :--- | :--- | :--- |
|
|
566
|
+
| `<ui-botao-primario>` | Botão com estados de loading, ícone e variantes. | `variante`, `carregando`, `disabled`, `target-modal` | `ui-click` |
|
|
567
|
+
| `<ui-campo-texto>` | Input de texto com Floating Label, validação e senha. | `label`, `value`, `tipo`, `obrigatorio`, `name` | `ui-input`, `ui-change` |
|
|
568
|
+
| `<ui-lista-flutuante>` | Select/Dropdown com Bottom Sheet no mobile. | `itens`, `value`, `placeholder`, `name` | `ui-selecionar` |
|
|
569
|
+
| `<ui-texto>` | Tipografia semântica (H1-H6, corpo, caption, código). | `variante`, `cor`, `peso` | - |
|
|
570
|
+
| `<ui-icone>` | Wrapper para ícones vetoriais padronizados. | `nome`, `tamanho`, `cor` | - |
|
|
571
|
+
|
|
572
|
+
### 🔵 Camada 2: Controles & Seleção
|
|
573
|
+
| Tag | Descrição | Principais Atributos / Props | Eventos Emitidos |
|
|
574
|
+
| :--- | :--- | :--- | :--- |
|
|
575
|
+
| `<ui-checkbox>` | Caixa de seleção múltipla com estado indeterminado. | `marcado`, `indeterminado`, `name`, `value` | `ui-change` |
|
|
576
|
+
| `<ui-radio>` | Opção única com agrupamento automático por nome. | `marcado`, `name`, `value` | `ui-change` |
|
|
577
|
+
| `<ui-switch>` | Chave de alternância liga/desliga física instantânea. | `ativo`, `name`, `value` | `ui-change` |
|
|
578
|
+
| `<ui-segmented>` | Controle segmentado de opções (Pills/Tabs deslizantes). | `opcoes`, `value`, `name`, `tamanho` | `ui-change`, `ui-selecionar` |
|
|
579
|
+
| `<ui-badge>` / `<ui-chip>` | Tags de status e chips com botão de remoção. | `variante`, `removivel`, `value` | `ui-remove` |
|
|
580
|
+
| `<ui-avatar>` | Avatar com fotos, iniciais e status online. | `nome`, `foto`, `status`, `tamanho` | - |
|
|
581
|
+
|
|
582
|
+
### 🟣 Camada 3: Contêineres, Overlays, Dados & GIS
|
|
583
|
+
| Tag | Descrição | Principais Atributos / Props | Eventos Emitidos |
|
|
584
|
+
| :--- | :--- | :--- | :--- |
|
|
585
|
+
| `<ui-card>` | Cartão de conteúdo com slots nomeados e elevação. | `elevacao`, `clicavel` | `ui-click` |
|
|
586
|
+
| `<ui-modal>` | Modal centralizado no PC e Bottom Sheet no Mobile. | `aberto`, `titulo`, `bottom-sheet` | `ui-abrir`, `ui-fechar` |
|
|
587
|
+
| `<ui-drawer>` | Painel lateral deslizante (Sheet/Gaveta direita/esquerda). | `aberto`, `lado`, `titulo`, `largura` | `ui-abrir`, `ui-fechar` |
|
|
588
|
+
| `<ui-alerta>` | Banner de notificação contextual fixo. | `variante`, `titulo`, `fechavel` | `ui-fechar` |
|
|
589
|
+
| `<ui-toast>` | Notificações flutuantes inteligentes com pilha flex. | `UIToast.notificar({ tipo, mensagem })` | - |
|
|
590
|
+
| `<ui-tooltip>` | Dica contextual inteligente (Hover PC / Toque Mobile). | `texto`, `posicao`, `gatilho` | - |
|
|
591
|
+
| `<ui-skeleton>` | Placeholder de carregamento animado com pulsos. | `tipo`, `largura`, `altura`, `animado` | - |
|
|
592
|
+
| `<ui-stat>` | Cartão KPI de estatísticas, métricas e tendências. | `rotulo`, `valor`, `variacao`, `tipo-variacao` | - |
|
|
593
|
+
| `<ui-tabela>` | Tabela orientada a dados, virtualizada tipo Excel. | `colunas`, `dados`, `src`, `densidade` | `ui-sort`, `ui-column-resize` |
|
|
594
|
+
| `<ui-tabela-propriedades>` | Inspetor de propriedades técnicas padrão AutoCAD & Revit com cálculos matemáticos inline (+, -, *, /, ^, %), arraste de valor contínuo (scrubbing), splitter redimensionável e editores CAD. | `categorias`, `tipo-objeto`, `splitter-pos`, `modo-aplicar`, `filtro` | `ui-propriedade-alterada`, `ui-aplicar`, `ui-desfazer`, `ui-editar-tipo`, `ui-acao-clique`, `ui-quick-select`, `ui-calculadora` |
|
|
595
|
+
| `<ui-ribbon>` | Barra de ferramentas em abas e grupos (estilo AutoCAD / Word / Excel): botões grandes e pequenos em colunas de 3, toggles, menus suspensos, abas contextuais, modo recolhido (duplo clique na aba) e navegação por teclado (roving tabindex). | `abas`, `aba-ativa`, `recolhido`, `compacto` | `ui-ferramenta`, `ui-aba-change` |
|
|
596
|
+
| `<ui-paleta-ferramentas>` | Paleta de ferramentas (estilo Illustrator / Photoshop): seleção exclusiva, grupos com flyout (clique longo, botão direito ou seta), 1 ou 2 colunas, vertical/horizontal e atalhos de teclado que percorrem o grupo. | `ferramentas`, `valor`, `orientacao`, `colunas`, `tamanho`, `atalhos` | `ui-change`, `ui-selecionar`, `ui-ferramenta` |
|
|
597
|
+
| `<ui-mapa>` | Mapa geográfico interativo com camadas OpenStreetMap. | `lat`, `lng`, `zoom`, `camadas` | - |
|
|
598
|
+
| `<ui-camadas>` | Painel de camadas vetoriais CAD/GIS com hierarquia em árvore, barra de arraste vertical (`redimensionavel`), estabilidade de altura sem colapso, drag-and-drop, métricas geodésicas e persistência no LocalStorage. | `redimensionavel`, `altura`, `min-altura`, `max-altura`, `flutuante`, `colapsado`, `camada-ativa`, `persistir` | `ui-redimensionar-altura`, `ui-camada-selecionada`, `ui-camada-visibilidade`, `ui-camadas-reordenadas`, `ui-acao-massa` |
|
|
599
|
+
| `<ui-canvas-cad>` | Mesa CAD/GIS para poligonais e vértices geodésicos. | `pontos`, `segmentos`, `fitBounds()` | `ui-ponto-selecionado` |
|
|
600
|
+
|
|
601
|
+
---
|
|
602
|
+
|
|
603
|
+
## 🛠️ Como Executar e Compilar Localmente
|
|
604
|
+
|
|
605
|
+
1. **Instalar Dependências**:
|
|
606
|
+
```bash
|
|
607
|
+
npm install
|
|
608
|
+
```
|
|
609
|
+
|
|
610
|
+
2. **Executar o Playground Sandbox em Desenvolvimento**:
|
|
611
|
+
```bash
|
|
612
|
+
npm run dev
|
|
613
|
+
```
|
|
614
|
+
Acesse: `http://localhost:5173/`
|
|
615
|
+
|
|
616
|
+
3. **Compilar Pacote de Produção (Library Mode)**:
|
|
617
|
+
```bash
|
|
618
|
+
npm run build
|
|
619
|
+
```
|
|
620
|
+
Gera na pasta `dist/`:
|
|
621
|
+
* `dist/index.js` e `dist/<modulo>.js` (Módulos ES para Vite, Webpack, Rollup)
|
|
622
|
+
* `dist/index.cjs` e `dist/<modulo>.cjs` (CommonJS para `require`)
|
|
623
|
+
* `dist/*.d.ts` (Tipagens TypeScript)
|
|
624
|
+
* `dist/ui-kit.css` (Design Tokens compilados, 100% autocontido — o build falha se restar qualquer `@import`)
|
package/dist/botao.cjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});;/* empty css */const o=require("./ui-botao-DF1yuUUD.cjs");exports.UIBotao=o.UIBotao;exports.UIBotaoPrimario=o.UIBotaoPrimario;
|
package/dist/botao.d.ts
ADDED