vex-ui-kit 1.0.0 → 1.1.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.
Files changed (63) hide show
  1. package/README.md +106 -23
  2. package/dist/adapters/react.cjs.js +13 -8
  3. package/dist/adapters/react.cjs.js.map +1 -1
  4. package/dist/adapters/react.esm.js +13 -8
  5. package/dist/adapters/react.esm.js.map +1 -1
  6. package/dist/adapters/react.umd.js +24 -19
  7. package/dist/adapters/react.umd.js.map +1 -1
  8. package/dist/adapters/svelte.cjs.js +8 -3
  9. package/dist/adapters/svelte.cjs.js.map +1 -1
  10. package/dist/adapters/svelte.esm.js +13 -8
  11. package/dist/adapters/svelte.esm.js.map +1 -1
  12. package/dist/adapters/svelte.umd.js +24 -19
  13. package/dist/adapters/svelte.umd.js.map +1 -1
  14. package/dist/adapters/vue.cjs.js +13 -8
  15. package/dist/adapters/vue.cjs.js.map +1 -1
  16. package/dist/adapters/vue.esm.js +13 -8
  17. package/dist/adapters/vue.esm.js.map +1 -1
  18. package/dist/adapters/vue.umd.js +55 -50
  19. package/dist/adapters/vue.umd.js.map +1 -1
  20. package/dist/themes/tokens.css +86 -0
  21. package/dist/vex-ui-kit.cjs.js +22 -0
  22. package/dist/vex-ui-kit.cjs.js.map +1 -0
  23. package/dist/vex-ui-kit.css +86 -0
  24. package/dist/vex-ui-kit.esm.js +22 -0
  25. package/dist/vex-ui-kit.esm.js.map +1 -0
  26. package/dist/vex-ui-kit.umd.js +22 -0
  27. package/dist/vex-ui-kit.umd.js.map +1 -0
  28. package/package.json +20 -15
  29. package/types/index.d.ts +1 -0
  30. package/types/src/adapters/react.d.ts +53 -0
  31. package/types/src/adapters/svelte.d.ts +37 -0
  32. package/types/src/adapters/vue.d.ts +51 -0
  33. package/types/src/core/a11y.d.ts +12 -0
  34. package/types/src/core/alert.d.ts +60 -0
  35. package/types/src/core/drawer.d.ts +19 -0
  36. package/types/src/core/field.d.ts +28 -0
  37. package/types/src/core/flow.d.ts +10 -0
  38. package/types/src/core/form.d.ts +34 -0
  39. package/types/src/core/history.d.ts +23 -0
  40. package/types/src/core/modal.d.ts +55 -0
  41. package/types/src/core/queue.d.ts +18 -0
  42. package/types/src/core/theme.d.ts +21 -0
  43. package/types/src/index.d.ts +66 -0
  44. package/types/tests/unit/alert.test.d.ts +1 -0
  45. package/types/tests/unit/modal.test.d.ts +1 -0
  46. package/types/tests/unit/queue.test.d.ts +1 -0
  47. package/types/tsup.config.d.ts +2 -0
  48. package/dist/adapters/react.d.mts +0 -37
  49. package/dist/adapters/react.d.ts +0 -37
  50. package/dist/adapters/svelte.d.mts +0 -21
  51. package/dist/adapters/svelte.d.ts +0 -21
  52. package/dist/adapters/vue.d.mts +0 -35
  53. package/dist/adapters/vue.d.ts +0 -35
  54. package/dist/index-CpFq7Lxe.d.mts +0 -213
  55. package/dist/index-CpFq7Lxe.d.ts +0 -213
  56. package/dist/vexui.cjs.js +0 -17
  57. package/dist/vexui.cjs.js.map +0 -1
  58. package/dist/vexui.d.mts +0 -1
  59. package/dist/vexui.d.ts +0 -1
  60. package/dist/vexui.esm.js +0 -17
  61. package/dist/vexui.esm.js.map +0 -1
  62. package/dist/vexui.umd.js +0 -17
  63. package/dist/vexui.umd.js.map +0 -1
package/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  Alerts · Modals · Drawers · Step Flows · Inline Prompts
8
8
 
9
- [![npm version](https://img.shields.io/badge/npm-v1.0.0-4F46E5?style=flat-square)](https://npmjs.com/package/vexui)
9
+ [![npm version](https://img.shields.io/badge/npm-v1.0.0-4F46E5?style=flat-square)](https://npmjs.com/package/vex-ui-kit)
10
10
  [![license](https://img.shields.io/badge/license-MIT-22c55e?style=flat-square)](./LICENSE)
11
11
  [![zero deps](https://img.shields.io/badge/deps-zero-06B6D4?style=flat-square)](#)
12
12
  [![gzip](https://img.shields.io/badge/gzip-~8kb-f59e0b?style=flat-square)](#)
@@ -44,7 +44,7 @@ VexUI é uma biblioteca JavaScript de **feedback visual** que substitui completa
44
44
  Os componentes se comportam como **banners visuais ricos** — inspirados nos Alerts do Bootstrap, mas com glassmorphism, animações polidas, suporte a ações, filas de prioridade e muito mais.
45
45
 
46
46
  ```js
47
- import vex from 'vexui'
47
+ import vex from 'vex-ui-kit'
48
48
 
49
49
  // Simples assim
50
50
  vex.alert.success('Arquivo salvo com sucesso!')
@@ -106,7 +106,7 @@ if (ok) await deleteProject(id)
106
106
 
107
107
  | Adapter | Tecnologia |
108
108
  |---|---|
109
- | `vexui/react` | React 18+ (hook) |
109
+ | `vex-ui-kit/react` | React 18+ (hook) |
110
110
  | `vex-ui-kit/vue` | Vue 3 (plugin + composable) |
111
111
  | `vex-ui-kit/svelte` | Svelte (store) |
112
112
 
@@ -118,20 +118,20 @@ if (ok) await deleteProject(id)
118
118
 
119
119
  ```bash
120
120
  # npm
121
- npm install vexui
121
+ npm install vex-ui-kit
122
122
 
123
123
  # yarn
124
- yarn add vexui
124
+ yarn add vvex-ui-kit
125
125
 
126
126
  # pnpm
127
- pnpm add vexui
127
+ pnpm add vex-ui-kit
128
128
  ```
129
129
 
130
130
  ### Via CDN (sem instalação)
131
131
 
132
132
  ```html
133
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/vexui/dist/vexui.css">
134
- <script src="https://cdn.jsdelivr.net/npm/vexui/dist/vexui.umd.js"></script>
133
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/vex-ui-kit/dist/vex-ui-kit.css">
134
+ <script src="https://cdn.jsdelivr.net/npm/vex-ui-kit/dist/vex-ui-kit.umd.js"></script>
135
135
 
136
136
  <script>
137
137
  VexUI.alert.success('Funciona em qualquer projeto!')
@@ -142,11 +142,11 @@ pnpm add vexui
142
142
 
143
143
  ```js
144
144
  // ES Modules (recomendado)
145
- import vex from 'vexui'
146
- import 'vexui/dist/vexui.css'
145
+ import vex from 'vex-ui-kit'
146
+ import 'vex-ui-kit/dist/vex-ui-kit.css'
147
147
 
148
148
  // CommonJS
149
- const vex = require('vexui')
149
+ const vex = require('vex-ui-kit')
150
150
  ```
151
151
 
152
152
  ---
@@ -465,6 +465,89 @@ const { close } = vex.modal.custom({
465
465
 
466
466
  ---
467
467
 
468
+ ## Formulários
469
+
470
+ O VexUI inclui um sistema completo para inputs e formulários (`vex.field` e `vex.form`), com validação, estilos e feedback visual.
471
+
472
+ ### Input Skin (`vex.field`)
473
+
474
+ Manipule o estado visual de inputs individuais. O VexUI injeta automaticamente ícones, mensagens e estilos.
475
+
476
+ ```js
477
+ // Estados visuais
478
+ vex.field.error('#email', 'E-mail inválido')
479
+ vex.field.success('#username', 'Disponível!')
480
+ vex.field.warning('#senha', 'Senha fraca')
481
+ vex.field.loading('#cep', 'Buscando endereço...')
482
+
483
+ // Limpar estado
484
+ vex.field.clear('#email')
485
+
486
+ // Funcionalidades extras
487
+ vex.field.password('#senha') // Barra de força de senha (0-5)
488
+ vex.field.counter('#bio', { max: 140 }) // Contador de caracteres com limites
489
+ ```
490
+
491
+ ### Form Engine (`vex.form`)
492
+
493
+ Gerencie validação de formulários inteiros com regras síncronas e assíncronas.
494
+
495
+ ```js
496
+ vex.form.register('#cadastro', {
497
+ validateOn: 'blur', // ou 'submit'
498
+ fields: {
499
+ email: {
500
+ rules: [
501
+ { type: 'required', message: 'Obrigatório' },
502
+ { type: 'email', message: 'Inválido' },
503
+ { type: 'async', validate: checkEmailAvailability }
504
+ ]
505
+ },
506
+ senha: {
507
+ password: true, // ativa barra de força
508
+ rules: [
509
+ { type: 'minLength', value: 8, message: 'Mínimo 8 caracteres' }
510
+ ]
511
+ }
512
+ },
513
+ onSubmit: (data, isValid) => {
514
+ if (isValid) console.log(data)
515
+ }
516
+ })
517
+ ```
518
+
519
+ ### Modo Declarativo (HTML)
520
+
521
+ Configure tudo via atributos `data-vex-*` sem escrever JavaScript.
522
+
523
+ ```html
524
+ <form data-vex-form>
525
+ <input
526
+ name="email"
527
+ data-vex-field
528
+ data-vex-required="Obrigatório"
529
+ data-vex-email="E-mail inválido"
530
+ data-vex-async="checkEmailFn|Verificando..."
531
+ >
532
+
533
+ <input
534
+ name="senha"
535
+ type="password"
536
+ data-vex-field
537
+ data-vex-password
538
+ data-vex-min-length="8|Mínimo 8 caracteres"
539
+ >
540
+
541
+ <textarea
542
+ name="bio"
543
+ data-vex-field
544
+ data-vex-counter="280|85" <!-- max|warn% -->
545
+ ></textarea>
546
+ </form>
547
+ ```
548
+
549
+ ---
550
+
468
551
  ## Funcionalidades Exclusivas
469
552
 
470
553
  ### Step Flow — Wizard multi-etapa *(exclusivo)*
@@ -643,12 +726,12 @@ vex.configure({
643
726
 
644
727
  ```js
645
728
  // Importar no seu CSS/JS
646
- import 'vexui/themes/glass' // Glassmorphism (padrão)
647
- import 'vexui/themes/flat' // Flat design, sem blur
648
- import 'vexui/themes/outline' // Apenas bordas
649
- import 'vexui/themes/minimal' // Ultra-discreto
650
- import 'vexui/themes/neon' // Neon / cyberpunk
651
- import 'vexui/themes/pastel' // Tons suaves
729
+ import 'vex-ui-kit/themes/glass' // Glassmorphism (padrão)
730
+ import 'vex-ui-kit/themes/flat' // Flat design, sem blur
731
+ import 'vex-ui-kit/themes/outline' // Apenas bordas
732
+ import 'vex-ui-kit/themes/minimal' // Ultra-discreto
733
+ import 'vex-ui-kit/themes/neon' // Neon / cyberpunk
734
+ import 'vex-ui-kit/themes/pastel' // Tons suaves
652
735
  ```
653
736
 
654
737
  ### Alternar Dark / Light
@@ -698,8 +781,8 @@ Todos os componentes são construídos seguindo **WCAG 2.1 AA** e **WAI-ARIA 1.2
698
781
  ### Vanilla JavaScript
699
782
 
700
783
  ```js
701
- import vex from 'vexui'
702
- import 'vexui/dist/vexui.css'
784
+ import vex from 'vex-ui-kit'
785
+ import 'vex-ui-kit/dist/vex-ui-kit.css'
703
786
 
704
787
  vex.alert.success('Pronto!')
705
788
  ```
@@ -707,7 +790,7 @@ vex.alert.success('Pronto!')
707
790
  ### React
708
791
 
709
792
  ```jsx
710
- import { useVex } from 'vexui/react'
793
+ import { useVex } from 'vex-ui-kit/react'
711
794
 
712
795
  function MeuComponente() {
713
796
  const vex = useVex()
@@ -728,13 +811,13 @@ function MeuComponente() {
728
811
 
729
812
  ```js
730
813
  // main.js
731
- import VexUI from 'vexui/vue'
814
+ import VexUI from 'vexie
732
815
  app.use(VexUI)
733
816
  ```
734
817
 
735
818
  ```vue
736
819
  <script setup>
737
- import { useVex } from 'vexui/vue'
820
+ import { useVex } from 'vex-ui-kit/vue'
738
821
  const vex = useVex()
739
822
 
740
823
  const confirmar = async () => {
@@ -825,6 +908,6 @@ MIT © VexUI
825
908
 
826
909
  <div align="center">
827
910
 
828
- Feito com ❤️ — **[npm](https://npmjs.com/package/vexui)** · **[Documentação](https://vexui.dev)** · **[Changelog](./CHANGELOG.md)**
911
+ Feito com ❤️ — **[npm](https://npmjs.com/package/vex-ui-kit)** · **[Documentação](https://vexui.dev)** · **[Changelog](./CHANGELOG.md)**
829
912
 
830
913
  </div>
@@ -1,10 +1,10 @@
1
- "use strict";var I=Object.defineProperty;var z=Object.getOwnPropertyDescriptor;var K=Object.getOwnPropertyNames;var W=Object.prototype.hasOwnProperty;var _=(r,e)=>{for(var t in e)I(r,t,{get:e[t],enumerable:!0})},U=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of K(e))!W.call(r,n)&&n!==t&&I(r,n,{get:()=>e[n],enumerable:!(i=z(e,n))||i.enumerable});return r};var X=r=>U(I({},"__esModule",{value:!0}),r);var le={};_(le,{VexProvider:()=>se,useVex:()=>oe});module.exports=X(le);var A=require("react");var H=class{constructor(){this.active=[];this.pending=[];this.maxStack=5}setMaxStack(e){this.maxStack=e}add(e){if(this.active.length<this.maxStack){this.active.push(e),e.show();return}if(e.priority==="critical"){let t=this.active.findIndex(i=>this.getPriorityValue(i.priority)<this.getPriorityValue("critical"));t!==-1?(this.active[t].close(),this.active.splice(t,1),this.pending.unshift(e)):this.pending.unshift(e)}else e.priority==="high"?this.pending.unshift(e):this.pending.push(e);this.sortPending(),this.process()}remove(e){let t=this.active.findIndex(i=>i.id===e);t!==-1&&(this.active.splice(t,1),this.process())}process(){if(this.active.length<this.maxStack&&this.pending.length>0){let e=this.pending.shift();e&&(this.active.push(e),e.show())}}sortPending(){this.pending.sort((e,t)=>this.getPriorityValue(t.priority)-this.getPriorityValue(e.priority))}getPriorityValue(e){switch(e){case"critical":return 4;case"high":return 3;case"normal":return 2;case"low":return 1;default:return 2}}};var $=class{constructor(){this.entries=[];this.limit=100;this.storageKey="vex_history";this.load()}add(e){let t={...e,timestamp:new Date,read:!1};this.entries.unshift(t),this.entries.length>this.limit&&(this.entries=this.entries.slice(0,this.limit)),this.save()}get(){return this.entries}clear(){this.entries=[],this.save()}markAllRead(){this.entries.forEach(e=>e.read=!0),this.save()}markRead(e){let t=this.entries.find(i=>i.id===e);t&&(t.read=!0,this.save())}open(e){if(typeof document>"u")return;let t=document.querySelector(e);if(!t){console.warn(`VexUI: History anchor ${e} not found`);return}let i=document.getElementById("vex-history-dropdown");i&&i.remove();let n=document.createElement("div");n.id="vex-history-dropdown",n.className="vex-history-dropdown";let a=t.getBoundingClientRect();n.style.position="absolute",n.style.top=`${a.bottom+8+window.scrollY}px`,n.style.left=`${a.left+window.scrollX}px`,n.style.zIndex="9999";let c=this.entries.map(s=>`
2
- <div class="vex-hist-item ${s.read?"read":"unread"}" data-id="${s.id}">
3
- <div class="vex-hist-icon ${s.type}"></div>
1
+ "use strict";var B=Object.defineProperty;var ae=Object.getOwnPropertyDescriptor;var oe=Object.getOwnPropertyNames;var le=Object.prototype.hasOwnProperty;var ce=(r,e)=>{for(var t in e)B(r,t,{get:e[t],enumerable:!0})},de=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of oe(e))!le.call(r,n)&&n!==t&&B(r,n,{get:()=>e[n],enumerable:!(i=ae(e,n))||i.enumerable});return r};var me=r=>de(B({},"__esModule",{value:!0}),r);var Se={};ce(Se,{VexProvider:()=>Ae,useVex:()=>He});module.exports=me(Se);var N=require("react");var O=class{constructor(){this.active=[];this.pending=[];this.maxStack=5}setMaxStack(e){this.maxStack=e}add(e){if(this.active.length<this.maxStack){this.active.push(e),e.show();return}if(e.priority==="critical"){let t=this.active.findIndex(i=>this.getPriorityValue(i.priority)<this.getPriorityValue("critical"));t!==-1?(this.active[t].close(),this.active.splice(t,1),this.pending.unshift(e)):this.pending.unshift(e)}else e.priority==="high"?this.pending.unshift(e):this.pending.push(e);this.sortPending(),this.process()}remove(e){let t=this.active.findIndex(i=>i.id===e);t!==-1&&(this.active.splice(t,1),this.process())}process(){if(this.active.length<this.maxStack&&this.pending.length>0){let e=this.pending.shift();e&&(this.active.push(e),e.show())}}sortPending(){this.pending.sort((e,t)=>this.getPriorityValue(t.priority)-this.getPriorityValue(e.priority))}getPriorityValue(e){switch(e){case"critical":return 4;case"high":return 3;case"normal":return 2;case"low":return 1;default:return 2}}};var _=class{constructor(){this.entries=[];this.limit=100;this.storageKey="vex_history";this.load()}add(e){let t={...e,timestamp:new Date,read:!1};this.entries.unshift(t),this.entries.length>this.limit&&(this.entries=this.entries.slice(0,this.limit)),this.save()}get(){return this.entries}clear(){this.entries=[],this.save()}markAllRead(){this.entries.forEach(e=>e.read=!0),this.save()}markRead(e){let t=this.entries.find(i=>i.id===e);t&&(t.read=!0,this.save())}open(e){if(typeof document>"u")return;let t=document.querySelector(e);if(!t){console.warn(`VexUI: History anchor ${e} not found`);return}let i=document.getElementById("vex-history-dropdown");i&&i.remove();let n=document.createElement("div");n.id="vex-history-dropdown",n.className="vex-history-dropdown";let s=t.getBoundingClientRect();n.style.position="absolute",n.style.top=`${s.bottom+8+window.scrollY}px`,n.style.left=`${s.left+window.scrollX}px`,n.style.zIndex="9999";let l=this.entries.map(o=>`
2
+ <div class="vex-hist-item ${o.read?"read":"unread"}" data-id="${o.id}">
3
+ <div class="vex-hist-icon ${o.type}"></div>
4
4
  <div class="vex-hist-content">
5
- <div class="vex-hist-title">${s.title||s.type}</div>
6
- <div class="vex-hist-msg">${s.message}</div>
7
- <div class="vex-hist-time">${s.timestamp.toLocaleTimeString()}</div>
5
+ <div class="vex-hist-title">${o.title||o.type}</div>
6
+ <div class="vex-hist-msg">${o.message}</div>
7
+ <div class="vex-hist-time">${o.timestamp.toLocaleTimeString()}</div>
8
8
  </div>
9
9
  </div>
10
10
  `).join("")||'<div class="vex-hist-empty">No notifications</div>';n.innerHTML=`
@@ -12,6 +12,11 @@
12
12
  <span>Notifications</span>
13
13
  <button id="vex-hist-clear">Clear</button>
14
14
  </div>
15
- <div class="vex-hist-list">${c}</div>
16
- `,document.body.appendChild(n);let o=s=>{!n.contains(s.target)&&s.target!==t&&(n.remove(),document.removeEventListener("click",o))};setTimeout(()=>document.addEventListener("click",o),0),n.querySelector("#vex-hist-clear")?.addEventListener("click",()=>{this.clear(),n.remove()})}save(){if(typeof localStorage<"u")try{localStorage.setItem(this.storageKey,JSON.stringify(this.entries))}catch{}}load(){if(typeof localStorage<"u"){let e=localStorage.getItem(this.storageKey);if(e)try{this.entries=JSON.parse(e,(t,i)=>t==="timestamp"?new Date(i):i)}catch(t){console.error("Failed to load VexUI history",t)}}}},O=new $;function Y(r){return Array.from(r.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])')).filter(t=>!t.hasAttribute("disabled")&&!t.getAttribute("aria-hidden"))}function V(r,e){let t=Y(r);if(t.length===0)return;let i=t[0],n=t[t.length-1];e.shiftKey?document.activeElement===i&&(n.focus(),e.preventDefault()):document.activeElement===n&&(i.focus(),e.preventDefault())}var M=null;function k(){typeof document<"u"&&document.activeElement&&(M=document.activeElement)}function S(){M&&typeof document<"u"&&document.body.contains(M)&&(M.focus(),M=null)}function D(r,e){r.setAttribute("role","alert");let t=e==="critical"||e==="high"?"assertive":"polite";r.setAttribute("aria-live",t),r.setAttribute("aria-atomic","true")}function B(r,e,t){r.setAttribute("role","dialog"),r.setAttribute("aria-modal","true"),r.setAttribute("aria-labelledby",e),t&&r.setAttribute("aria-describedby",t)}var P=class{constructor(){this.queue=new H;this.activeAlerts=new Map}success(e,t){return this.create({...t,type:"success",message:e})}error(e,t){return this.create({...t,type:"error",message:e})}warning(e,t){return this.create({...t,type:"warning",message:e})}info(e,t){return this.create({...t,type:"info",message:e})}neutral(e,t){return this.create({...t,type:"neutral",message:e})}loading(e,t){return this.create({...t,type:"loading",message:e,duration:0})}upload(e,t){return this.create({...t,type:"loading",message:e,duration:0,icon:"upload"})}inline(e,t){return this.create({...t,renderer:"inline",selector:e})}fixed(e){return this.create({...e,renderer:"fixed"})}attach(e,t){return this.create({...t,renderer:"attach",selector:e})}show(e){return this.create(e)}create(e){let t=this.generateId(),i=this.processOptions(e);return this.queue.add({id:t,priority:i.priority||"normal",show:()=>this.render(t,i),close:()=>this.dismiss(t)}),O.add({id:t,type:i.type||"info",title:i.title,message:i.message}),t}processOptions(e){return{type:"info",duration:6e3,dismissible:!0,position:"top",align:"center",animate:"slide",priority:"normal",maxStack:5,progress:!0,...e}}render(e,t){if(typeof document>"u")return;let i=document.createElement("div");i.setAttribute("data-id",e),i.className=`vex-alert vex-${t.type}`,D(i,t.priority||"normal");let n=document.createElement("div");n.className="vx-icon",t.type==="loading"?n.innerHTML='<div class="vx-spinner"></div>':n.innerHTML=this.getIcon(t.type||"info",t.icon),i.appendChild(n);let a=document.createElement("div");if(a.className="vx-body",t.title){let o=document.createElement("div");o.className="vx-title",o.textContent=t.title,a.appendChild(o)}let c=document.createElement("div");if(c.className="vx-msg",c.textContent=t.message,a.appendChild(c),t.actions&&t.actions.length>0){let o=document.createElement("div");o.className="vx-actions",t.actions.forEach(s=>{let d=document.createElement("button");d.className=`vx-act-btn vx-${s.variant||"default"}`,d.textContent=s.label,d.onclick=m=>{m.stopPropagation(),s.onClick?s.onClick(()=>this.dismiss(e)):this.dismiss(e)},o.appendChild(d)}),a.appendChild(o)}if(i.appendChild(a),t.dismissible){let o=document.createElement("button");o.className="vx-close",o.ariaLabel="Fechar",o.innerHTML="\u2715",o.onclick=s=>{s.stopPropagation(),this.dismiss(e)},i.appendChild(o)}if(t.progress&&t.duration&&t.duration>0){let o=document.createElement("div");o.className="vx-progress",o.style.animationDuration=`${t.duration}ms`,i.appendChild(o)}if(t.type==="loading"&&t.icon==="upload"){let o=document.createElement("div");o.className="vx-upload-bar",i.appendChild(o)}t.theme&&Object.entries(t.theme).forEach(([o,s])=>{s&&i.style.setProperty(o,s)}),this.mount(i,t),this.activeAlerts.set(e,{element:i,options:t}),t.duration&&t.duration>0&&setTimeout(()=>this.dismiss(e),t.duration)}mount(e,t){if(t.renderer==="inline"&&t.selector){let i=typeof t.selector=="string"?document.querySelector(t.selector):t.selector;if(i instanceof HTMLElement){let n=i.querySelector(".vex-alert");n&&n.remove(),i.appendChild(e)}}else if(t.renderer==="attach"&&t.selector){let i=typeof t.selector=="string"?document.querySelector(t.selector):t.selector;i instanceof HTMLElement&&(document.body.appendChild(e),this.positionAttached(e,i,t.placement||"top"))}else{let i=t.position||"top",n=document.getElementById(`vex-fixed-${i}`);n||(n=document.createElement("div"),n.id=`vex-fixed-${i}`,n.className="vex-fixed-container",n.style.position="fixed",n.style.zIndex="9000",n.style.display="flex",n.style.flexDirection="column",n.style.gap="10px",n.style.pointerEvents="none",n.style.width="100%",n.style.maxWidth="420px",n.style.left="50%",n.style.transform="translateX(-50%)",i==="top"?n.style.top="20px":n.style.bottom="20px",document.body.appendChild(n)),e.style.pointerEvents="all",n.appendChild(e)}}positionAttached(e,t,i){let n=t.getBoundingClientRect(),a=e.getBoundingClientRect();e.style.position="absolute",e.style.zIndex="9000",e.style.width="max-content",e.style.maxWidth="300px";let c=window.scrollX,o=window.scrollY,s=0,d=0;switch(i){case"top":s=n.top+o-e.offsetHeight-8,d=n.left+c+(n.width-e.offsetWidth)/2;break;case"bottom":s=n.bottom+o+8,d=n.left+c+(n.width-e.offsetWidth)/2;break;default:s=n.top+o-50,d=n.left+c}e.style.top=`${s}px`,e.style.left=`${d}px`}dismiss(e){let t=this.activeAlerts.get(e);if(t){let{element:i,options:n}=t;i.classList.add("removing");let a=()=>{i.parentNode&&i.parentNode.removeChild(i),this.activeAlerts.delete(e),this.queue.remove(e),n.onClose&&n.onClose()};i.addEventListener("animationend",a),setTimeout(()=>{this.activeAlerts.has(e)&&a()},400)}}dismissAll(e){let t=[];this.activeAlerts.forEach((i,n)=>{e&&(e.type&&i.options.type!==e.type||e.position&&i.options.position!==e.position)||t.push(n)}),t.forEach(i=>this.dismiss(i))}update(e,t){let i=this.activeAlerts.get(e);if(!i)return;let{element:n,options:a}=i,c={...a,...t};if(t.type&&t.type!==a.type){n.classList.remove(`vex-${a.type}`),n.classList.add(`vex-${t.type}`);let o=n.querySelector(".vx-icon");o&&(t.type==="loading"?o.innerHTML='<div class="vx-spinner"></div>':o.innerHTML=this.getIcon(t.type,t.icon))}if(t.message){let o=n.querySelector(".vx-msg");o&&(o.textContent=t.message)}if(t.title){let o=n.querySelector(".vx-title");o||(o=document.createElement("div"),o.className="vx-title",n.querySelector(".vx-body")?.prepend(o)),o&&(o.textContent=t.title)}this.activeAlerts.set(e,{element:n,options:c})}progress(e,t){let i=this.activeAlerts.get(e);if(!i)return;let n=0;typeof t=="number"?n=t:t.total>0&&(n=t.loaded/t.total*100);let a=i.element.querySelector(".vx-upload-prog");if(!a){let c=document.createElement("div");c.className="vx-upload-bar",c.style.height="4px",c.style.width="100%",c.style.backgroundColor="rgba(255,255,255,0.1)",c.style.borderRadius="2px",c.style.marginTop="8px",c.style.overflow="hidden",a=document.createElement("div"),a.className="vx-upload-prog",a.style.height="100%",a.style.backgroundColor="var(--vex-info-accent, #6366f1)",a.style.transition="width 0.2s linear",c.appendChild(a);let o=i.element.querySelector(".vx-body");o?o.appendChild(c):i.element.appendChild(c)}a.style.width=`${n}%`}generateId(){return typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():Math.random().toString(36).slice(2,9)}getIcon(e,t){if(t)return t;switch(e){case"success":return"\u2713";case"error":return"\u2715";case"warning":return"\u26A0";case"info":return"\u2139";case"neutral":return"\xB7";default:return""}}};var T=class{constructor(){this.activeModals=[]}confirm(e){return new Promise(t=>{this.create({type:"warning",...e,confirmLabel:e.confirmLabel||"Confirmar",cancelLabel:e.cancelLabel||"Cancelar"},()=>t(!0),()=>t(!1))})}alert(e){return new Promise(t=>{this.create({type:"info",...e,confirmLabel:e.confirmLabel||"OK",cancelLabel:void 0},()=>t(),()=>t())})}async form(e){return new Promise(t=>{let i={},n=document.createElement("div");n.className="modal-form",e.fields.forEach(a=>{let c=document.createElement("div");c.className="form-grp";let o=document.createElement("label");o.className="form-lbl",o.textContent=a.label,c.appendChild(o);let s;a.type==="select"?(s=document.createElement("select"),s.className="form-sel",a.options&&a.options.forEach(m=>{let l=document.createElement("option");l.value=m,l.textContent=m,s.appendChild(l)}),a.defaultValue&&(s.value=a.defaultValue)):a.type==="textarea"?(s=document.createElement("textarea"),s.className="form-tex",a.placeholder&&(s.placeholder=a.placeholder),a.defaultValue&&(s.value=a.defaultValue)):a.type==="radio"?(s=document.createElement("div"),s.className="form-radio-grp",a.options&&a.options.forEach(m=>{let l=document.createElement("label");l.style.display="flex",l.style.gap="6px",l.style.alignItems="center";let u=document.createElement("input");u.type="radio",u.name=a.name,u.value=m,a.defaultValue===m&&(u.checked=!0),l.appendChild(u),l.appendChild(document.createTextNode(m)),s.appendChild(l)})):(s=document.createElement("input"),s.className="form-inp",s.type=a.type,a.placeholder&&(s.placeholder=a.placeholder),a.defaultValue&&(s.value=a.defaultValue)),i[a.name]=s,c.appendChild(s);let d=document.createElement("div");d.className="form-err",d.style.color="var(--vex-error-text, #f87171)",d.style.fontSize="11px",d.style.display="none",d.style.marginTop="4px",c.appendChild(d),n.appendChild(c)}),this.create({...e,content:n,confirmLabel:e.submitLabel||"Enviar",cancelLabel:e.cancelLabel||"Cancelar"},()=>{let a=!0,c={};if(e.fields.forEach(o=>{let s=i[o.name],d;if(o.type==="radio"){let u=s.querySelector("input:checked");d=u?u.value:null}else d=s.value;c[o.name]=d;let m=s.parentElement?.querySelector(".form-err");m&&(m.style.display="none");let l=null;o.required&&!d?l="Campo obrigat\xF3rio":o.validate&&(l=o.validate(d)),l&&(a=!1,m&&(m.textContent=l,m.style.display="block"))}),a&&e.validate){let o=e.validate(c);o&&(a=!1,Object.entries(o).forEach(([s,d])=>{let l=i[s]?.parentElement?.querySelector(".form-err");l&&(l.textContent=d,l.style.display="block")}))}return a?(t(c),!0):!1},()=>t(null))})}async prompt(e){let{validate:t,...i}=e,n=await this.form({...i,fields:[{name:"value",label:"",type:"text",defaultValue:e.defaultValue,placeholder:e.placeholder,validate:t,required:!0}],submitLabel:e.confirmLabel||"OK"});return n?n.value:null}preview(e){let t=document.createElement("div");t.className="vx-preview-body",t.style.textAlign="center";let i=document.createElement("img");if(i.src=e.src,i.style.maxWidth="100%",i.style.maxHeight="70vh",i.style.borderRadius="8px",i.style.boxShadow="0 8px 30px rgba(0,0,0,0.5)",t.appendChild(i),e.meta){let n=document.createElement("div");n.className="vx-meta",n.textContent=e.meta.join(" \xB7 "),n.style.marginTop="16px",n.style.color="var(--vex-text-muted, rgba(255,255,255,0.6))",n.style.fontSize="13px",t.appendChild(n)}if(e.gallery){let n=document.createElement("div");n.className="vx-gallery",n.style.display="flex",n.style.gap="8px",n.style.justifyContent="center",n.style.marginTop="16px",e.gallery.forEach(a=>{let c=document.createElement("img");c.src=a,c.style.width="48px",c.style.height="48px",c.style.objectFit="cover",c.style.borderRadius="6px",c.style.cursor="pointer",c.style.opacity=a===e.src?"1":"0.5",c.style.border=a===e.src?"2px solid var(--vex-primary, #6366f1)":"2px solid transparent",c.onclick=()=>{i.src=a,Array.from(n.children).forEach(o=>{o.style.opacity="0.5",o.style.border="2px solid transparent"}),c.style.opacity="1",c.style.border="2px solid var(--vex-primary, #6366f1)"},n.appendChild(c)}),t.appendChild(n)}this.create({...e,content:t,width:e.width||800,footer:!1})}custom(e){return this.create(e)}create(e,t,i){if(typeof document>"u")return{close:()=>{}};k();let n=document.createElement("div");n.className="vex-backdrop";let a=`vex-modal-title-${Math.random().toString(36).slice(2)}`,c=`vex-modal-desc-${Math.random().toString(36).slice(2)}`;B(n,a,c);let o=document.createElement("div");o.className="vex-modal",e.width&&(o.style.maxWidth=`${e.width}px`),e.animate&&o.classList.add(`vex-anim-${e.animate}`);let s=document.createElement("div");if(s.className="modal-hdr",s.appendChild(document.createElement("div")),e.showClose!==!1){let l=document.createElement("button");l.className="modal-x",l.ariaLabel="Fechar",l.innerHTML="\u2715",l.onclick=()=>{i&&i(),this.close(n)},s.appendChild(l)}o.appendChild(s);let d=document.createElement("div");if(d.className="modal-bdy",e.type){let l=document.createElement("div");l.className=`modal-icon ${e.type}`,l.innerHTML=this.getIcon(e.type),d.appendChild(l)}if(e.title){let l=document.createElement("div");l.id=a,l.className="modal-title",l.textContent=e.title,d.appendChild(l)}if(e.message){let l=document.createElement("div");l.id=c,l.className="modal-desc",l.textContent=e.message,d.appendChild(l)}if(e.content){let l=document.createElement("div");l.className="modal-custom",typeof e.content=="string"?l.innerHTML=e.content:l.appendChild(e.content),d.appendChild(l)}if(o.appendChild(d),e.footer!==!1&&(e.confirmLabel||e.cancelLabel)){let l=document.createElement("div");if(l.className="modal-ftr",e.cancelLabel){let u=document.createElement("button");u.className="modal-btn cancel",u.textContent=e.cancelLabel,u.onclick=()=>{i&&i(),this.close(n)},l.appendChild(u)}if(e.confirmLabel){let u=document.createElement("button");if(u.className=`modal-btn ${e.type||"primary"}`,u.textContent=e.confirmLabel,e.confirmDelay&&e.confirmDelay>0){u.disabled=!0;let x=Math.ceil(e.confirmDelay/1e3),C=e.confirmLabel;u.textContent=`${C} (${x})`;let b=setInterval(()=>{x--,x<=0?(clearInterval(b),u.disabled=!1,u.textContent=C):u.textContent=`${C} (${x})`},1e3);n._interval=b}u.onclick=async()=>{t?await t()!==!1&&this.close(n):this.close(n)},l.appendChild(u)}o.appendChild(l)}n.appendChild(o),document.body.appendChild(n),this.activeModals.push(n),e.closeOnBackdrop!==!1&&(n.onclick=l=>{l.target===n&&(i&&i(),this.close(n))});let m=l=>{l.key==="Escape"&&e.closeOnEscape!==!1&&this.activeModals[this.activeModals.length-1]===n&&(i&&i(),this.close(n)),l.key==="Tab"&&V(n,l)};return document.addEventListener("keydown",m),n._cleanup=()=>{document.removeEventListener("keydown",m),n._interval&&clearInterval(n._interval)},e.onOpen&&e.onOpen(),{close:()=>this.close(n,i)}}close(e,t){if(e.classList.contains("closing"))return;e.classList.add("closing");let i=e.querySelector(".vex-modal");i&&i.classList.add("closing");let n=()=>{e._cleanup&&e._cleanup(),e.parentNode&&e.parentNode.removeChild(e),this.activeModals=this.activeModals.filter(a=>a!==e),S()};e.addEventListener("animationend",n),setTimeout(()=>{document.body.contains(e)&&n()},300)}getIcon(e){switch(e){case"danger":return"\u2715";case"warning":return"!";case"success":return"\u2713";case"info":return"i";default:return""}}};function Q(r){if(typeof document>"u")return{close:()=>{}};k();let e=document.createElement("div");e.className=`vex-drawer vex-drawer-${r.position}`,r.className&&e.classList.add(r.className),r.width&&(r.position==="left"||r.position==="right")&&(e.style.width=`${r.width}px`),r.height&&(r.position==="top"||r.position==="bottom")&&(e.style.height=`${r.height}px`);let t=document.createElement("div");if(t.className="drawer-hdr",r.title){let m=document.createElement("div");m.className="drawer-title",m.textContent=r.title,t.appendChild(m)}let i=document.createElement("button");i.className="drawer-close",i.innerHTML="\u2715",i.onclick=()=>s(),t.appendChild(i),e.appendChild(t);let n=document.createElement("div");n.className="drawer-body";let a=null,c=null,o=null;if(typeof r.content=="string")if(r.content.startsWith("#")||r.content.startsWith(".")){let m=document.querySelector(r.content);m?(o=m,a=m.parentNode,c=m.nextSibling,n.appendChild(m),m.style.display="block"):n.innerHTML=r.content}else n.innerHTML=r.content;else o=r.content,a=r.content.parentNode,c=r.content.nextSibling,n.appendChild(r.content),r.content.style.display="block";if(e.appendChild(n),r.footer&&r.footer.length>0){let m=document.createElement("div");m.className="drawer-ftr",r.footer.forEach(l=>{let u=document.createElement("button");u.className=`drawer-btn ${l.variant||"default"}`,u.textContent=l.label,u.onclick=()=>{l.onClick?l.onClick(()=>s()):s()},m.appendChild(u)}),e.appendChild(m)}document.body.appendChild(e),requestAnimationFrame(()=>{e.classList.add("open")});let s=()=>{e.classList.remove("open"),e.addEventListener("transitionend",()=>{o&&a&&(o.style.display="",a.insertBefore(o,c)),e.parentNode&&e.parentNode.removeChild(e),S(),r.onClose&&r.onClose()},{once:!0}),document.removeEventListener("click",d)},d=m=>{r.persistent||e.classList.contains("open")&&!e.contains(m.target)&&s()};return setTimeout(()=>{document.addEventListener("click",d)},100),{close:s}}async function j(r){let e=new T;return new Promise(t=>{let i=0,n={},a=null,c=null,o=l=>{let u=l;for(;u<r.length;){let x=r[u];if(!x.condition||x.condition(n))return u;u++}return-1};if(i=o(0),i===-1){t(n);return}let s=document.createElement("div");s.className="vex-flow-container";let d=()=>{s.innerHTML="";let l=r[i];if(c){let p=c.querySelector(".modal-title");p&&(p.textContent=l.title);let h=c.querySelector(".modal-icon");if(h&&l.type){h.className=`modal-icon ${l.type}`;let y={danger:"\u2715",warning:"!",success:"\u2713",info:"i"};h.innerHTML=y[l.type]||"i"}}let u=document.createElement("div");u.className="modal-steps",r.forEach((p,h)=>{let y=document.createElement("div");y.className="step-dot",h<i&&y.classList.add("done"),h===i&&y.classList.add("active");let f=document.createElement("div");f.className="step-circle",f.textContent=(h+1).toString(),h<i&&(f.textContent="\u2713");let g=document.createElement("div");g.className="step-name",g.textContent=p.title,y.appendChild(f),y.appendChild(g),u.appendChild(y)}),s.appendChild(u);let x=document.createElement("div");if(x.className="flow-content",l.description){let p=document.createElement("div");p.className="modal-desc",p.textContent=l.description,p.style.marginBottom="16px",x.appendChild(p)}let C={};l.fields&&l.fields.forEach(p=>{let h=document.createElement("div");h.className="form-grp";let y=document.createElement("label");y.className="form-lbl",y.textContent=p.label,h.appendChild(y);let f;p.type==="select"?(f=document.createElement("select"),f.className="form-sel",p.options&&p.options.forEach(L=>{let w=document.createElement("option");w.value=L,w.textContent=L,f.appendChild(w)}),n[p.name]&&(f.value=n[p.name])):(f=document.createElement("input"),f.className="form-inp",f.type=p.type,n[p.name]&&(f.value=n[p.name])),C[p.name]=f,h.appendChild(f);let g=document.createElement("div");g.className="form-err",g.style.color="var(--vex-error-text, #f87171)",g.style.fontSize="11px",g.style.display="none",h.appendChild(g),x.appendChild(h)}),s.appendChild(x);let b=document.createElement("div");if(b.className="flow-btns",b.style.marginTop="24px",b.style.display="flex",b.style.justifyContent="flex-end",b.style.gap="10px",i>0){let p=document.createElement("button");p.className="modal-btn cancel",p.textContent="\u2190 Voltar",p.onclick=()=>{let h=i-1;for(;h>=0;){let y=r[h];if(!y.condition||y.condition(n))break;h--}h>=0&&(i=h,d())},b.appendChild(p)}let E=document.createElement("button");E.className="modal-btn primary";let q=o(i+1)===-1;E.textContent=q?"Concluir":"Pr\xF3ximo \u2192",E.onclick=async()=>{let p={},h=!0;if(l.fields&&l.fields.forEach(f=>{let g=C[f.name].value;p[f.name]=g,n[f.name]=g,f.required&&!g&&(h=!1)}),!h)return;if(l.beforeNext){E.disabled=!0,E.textContent="Aguarde...";let f=await l.beforeNext(p);if(E.disabled=!1,E.textContent=q?"Concluir":"Pr\xF3ximo \u2192",f){Object.keys(f).forEach(g=>{let L=C[g];if(L&&L.nextElementSibling){let w=L.nextElementSibling;w.textContent=f[g],w.style.display="block"}});return}}let y=o(i+1);y!==-1?(i=y,d()):(a&&a.close(),t(n))},b.appendChild(E),s.appendChild(b)},m=r[i];a=e.custom({title:m.title,type:m.type||"info",content:s,footer:!1,width:600,onClose:()=>{t(null)}}),setTimeout(()=>{c=document.querySelector(".vex-modal:last-child"),d()},0)})}var F=class{constructor(){this.currentTheme="auto";this.mediaQuery=null;typeof window<"u"&&(this.mediaQuery=window.matchMedia("(prefers-color-scheme: dark)"),this.init())}init(){this.mediaQuery?.addEventListener("change",()=>{this.currentTheme==="auto"&&this.applyTheme()})}setTheme(e){this.currentTheme=e,this.applyTheme()}getTheme(){return this.currentTheme}applyTheme(){if(typeof document>"u")return;let e=document.documentElement,t=this.currentTheme==="dark"||this.currentTheme==="auto"&&this.mediaQuery?.matches;t?(e.classList.add("vex-dark"),e.classList.remove("vex-light")):(e.classList.add("vex-light"),e.classList.remove("vex-dark")),e.setAttribute("data-vex-theme",t?"dark":"light")}setTokens(e){if(typeof document>"u")return;let t=document.documentElement;Object.entries(e).forEach(([i,n])=>{t.style.setProperty(i,n)})}isReducedMotion(){return typeof window>"u"?!1:window.matchMedia("(prefers-reduced-motion: reduce)").matches}},R=new F;var N=new P,J=new T,G=O;function Z(r){r.theme&&R.setTheme(r.theme)}function ee(r){R.setTheme(r)}function te(r){N.dismiss(r)}function ne(r){N.dismissAll(r)}function ie(r,e){N.update(r,e)}function re(r,e){N.progress(r,e)}var ae={alert:N,modal:J,drawer:Q,flow:j,history:G,configure:Z,setTheme:ee,dismiss:te,dismissAll:ne,update:ie,progress:re,prompt:{inline:async(r,e)=>{let t=typeof r=="string"?document.querySelector(r):r;if(!t)return null;let i=t.textContent,n=t.style.display,a=document.createElement("input");return a.type="text",a.value=i||"",a.placeholder=e.placeholder||"",a.className="vex-inline-prompt",a.style.fontSize=getComputedStyle(t).fontSize,a.style.fontFamily=getComputedStyle(t).fontFamily,a.style.border="1px solid var(--vex-primary, #6366f1)",a.style.borderRadius="4px",a.style.padding="2px 4px",a.style.background="var(--vex-bg, #000)",a.style.color="var(--vex-text, #fff)",t.style.display="none",t.parentNode?.insertBefore(a,t),a.focus(),new Promise(c=>{let o=s=>{if(s!==null&&e.validate&&e.validate(s)){a.style.borderColor="red";return}a.remove(),t.style.display=n,s!==null&&(t.textContent=s),c(s)};a.onblur=()=>o(a.value),a.onkeydown=s=>{s.key==="Enter"&&o(a.value),s.key==="Escape"&&o(null)}})}}},v=ae;function oe(){let r=(0,A.useRef)([]),e={...v.alert,success:(t,i)=>{let n=v.alert.success(t,i);return r.current.push(n),n},error:(t,i)=>{let n=v.alert.error(t,i);return r.current.push(n),n},warning:(t,i)=>{let n=v.alert.warning(t,i);return r.current.push(n),n},info:(t,i)=>{let n=v.alert.info(t,i);return r.current.push(n),n},neutral:(t,i)=>{let n=v.alert.neutral(t,i);return r.current.push(n),n},loading:(t,i)=>{let n=v.alert.loading(t,i);return r.current.push(n),n},upload:(t,i)=>{let n=v.alert.upload(t,i);return r.current.push(n),n},inline:(t,i)=>{let n=v.alert.inline(t,i);return r.current.push(n),n},fixed:t=>{let i=v.alert.fixed(t);return r.current.push(i),i},attach:(t,i)=>{let n=v.alert.attach(t,i);return r.current.push(n),n},show:t=>{let i=v.alert.show(t);return r.current.push(i),i}};return(0,A.useEffect)(()=>()=>{r.current.forEach(t=>v.dismiss(t))},[]),{...v,alert:e}}var se=({children:r,config:e})=>((0,A.useEffect)(()=>{e&&v.configure(e)},[e]),r);0&&(module.exports={VexProvider,useVex});
15
+ <div class="vex-hist-list">${l}</div>
16
+ `,document.body.appendChild(n);let a=o=>{!n.contains(o.target)&&o.target!==t&&(n.remove(),document.removeEventListener("click",a))};setTimeout(()=>document.addEventListener("click",a),0),n.querySelector("#vex-hist-clear")?.addEventListener("click",()=>{this.clear(),n.remove()})}save(){if(typeof localStorage<"u")try{localStorage.setItem(this.storageKey,JSON.stringify(this.entries))}catch{}}load(){if(typeof localStorage<"u"){let e=localStorage.getItem(this.storageKey);if(e)try{this.entries=JSON.parse(e,(t,i)=>t==="timestamp"?new Date(i):i)}catch(t){console.error("Failed to load VexUI history",t)}}}},F=new _;function ue(r){return Array.from(r.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])')).filter(t=>!t.hasAttribute("disabled")&&!t.getAttribute("aria-hidden"))}function K(r,e){let t=ue(r);if(t.length===0)return;let i=t[0],n=t[t.length-1];e.shiftKey?document.activeElement===i&&(n.focus(),e.preventDefault()):document.activeElement===n&&(i.focus(),e.preventDefault())}var A=null;function q(){typeof document<"u"&&document.activeElement&&(A=document.activeElement)}function I(){A&&typeof document<"u"&&document.body.contains(A)&&(A.focus(),A=null)}function U(r,e){r.setAttribute("role","alert");let t=e==="critical"||e==="high"?"assertive":"polite";r.setAttribute("aria-live",t),r.setAttribute("aria-atomic","true")}function X(r,e,t){r.setAttribute("role","dialog"),r.setAttribute("aria-modal","true"),r.setAttribute("aria-labelledby",e),t&&r.setAttribute("aria-describedby",t)}var P=class{constructor(){this.queue=new O;this.activeAlerts=new Map}success(e,t){return this.create({...t,type:"success",message:e})}error(e,t){return this.create({...t,type:"error",message:e})}warning(e,t){return this.create({...t,type:"warning",message:e})}info(e,t){return this.create({...t,type:"info",message:e})}neutral(e,t){return this.create({...t,type:"neutral",message:e})}loading(e,t){return this.create({...t,type:"loading",message:e,duration:0})}upload(e,t){return this.create({...t,type:"loading",message:e,duration:0,icon:"upload"})}inline(e,t){return this.create({...t,renderer:"inline",selector:e})}fixed(e){return this.create({...e,renderer:"fixed"})}attach(e,t){return this.create({...t,renderer:"attach",selector:e})}show(e){return this.create(e)}create(e){let t=this.generateId(),i=this.processOptions(e);return this.queue.add({id:t,priority:i.priority||"normal",show:()=>this.render(t,i),close:()=>this.dismiss(t)}),F.add({id:t,type:i.type||"info",title:i.title,message:i.message}),t}processOptions(e){return{type:"info",duration:6e3,dismissible:!0,position:"top",align:"center",animate:"slide",priority:"normal",maxStack:5,progress:!0,...e}}render(e,t){if(typeof document>"u")return;let i=document.createElement("div");i.setAttribute("data-id",e),i.className=`vex-alert vex-${t.type}`,U(i,t.priority||"normal");let n=document.createElement("div");n.className="vx-icon",t.type==="loading"?n.innerHTML='<div class="vx-spinner"></div>':n.innerHTML=this.getIcon(t.type||"info",t.icon),i.appendChild(n);let s=document.createElement("div");if(s.className="vx-body",t.title){let a=document.createElement("div");a.className="vx-title",a.textContent=t.title,s.appendChild(a)}let l=document.createElement("div");if(l.className="vx-msg",l.textContent=t.message,s.appendChild(l),t.actions&&t.actions.length>0){let a=document.createElement("div");a.className="vx-actions",t.actions.forEach(o=>{let d=document.createElement("button");d.className=`vx-act-btn vx-${o.variant||"default"}`,d.textContent=o.label,d.onclick=m=>{m.stopPropagation(),o.onClick?o.onClick(()=>this.dismiss(e)):this.dismiss(e)},a.appendChild(d)}),s.appendChild(a)}if(i.appendChild(s),t.dismissible){let a=document.createElement("button");a.className="vx-close",a.ariaLabel="Fechar",a.innerHTML="\u2715",a.onclick=o=>{o.stopPropagation(),this.dismiss(e)},i.appendChild(a)}if(t.progress&&t.duration&&t.duration>0){let a=document.createElement("div");a.className="vx-progress",a.style.animationDuration=`${t.duration}ms`,i.appendChild(a)}if(t.type==="loading"&&t.icon==="upload"){let a=document.createElement("div");a.className="vx-upload-bar",i.appendChild(a)}t.theme&&Object.entries(t.theme).forEach(([a,o])=>{o&&i.style.setProperty(a,o)}),this.mount(i,t),this.activeAlerts.set(e,{element:i,options:t}),t.duration&&t.duration>0&&setTimeout(()=>this.dismiss(e),t.duration)}mount(e,t){if(t.renderer==="inline"&&t.selector){let i=typeof t.selector=="string"?document.querySelector(t.selector):t.selector;if(i instanceof HTMLElement){let n=i.querySelector(".vex-alert");n&&n.remove(),i.appendChild(e)}}else if(t.renderer==="attach"&&t.selector){let i=typeof t.selector=="string"?document.querySelector(t.selector):t.selector;i instanceof HTMLElement&&(document.body.appendChild(e),this.positionAttached(e,i,t.placement||"top"))}else{let i=t.position||"top",n=document.getElementById(`vex-fixed-${i}`);n||(n=document.createElement("div"),n.id=`vex-fixed-${i}`,n.className="vex-fixed-container",n.style.position="fixed",n.style.zIndex="9000",n.style.display="flex",n.style.flexDirection="column",n.style.gap="10px",n.style.pointerEvents="none",n.style.width="100%",n.style.maxWidth="420px",n.style.left="50%",n.style.transform="translateX(-50%)",i==="top"?n.style.top="20px":n.style.bottom="20px",document.body.appendChild(n)),e.style.pointerEvents="all",n.appendChild(e)}}positionAttached(e,t,i){let n=t.getBoundingClientRect(),s=e.getBoundingClientRect();e.style.position="absolute",e.style.zIndex="9000",e.style.width="max-content",e.style.maxWidth="300px";let l=window.scrollX,a=window.scrollY,o=0,d=0;switch(i){case"top":o=n.top+a-e.offsetHeight-8,d=n.left+l+(n.width-e.offsetWidth)/2;break;case"bottom":o=n.bottom+a+8,d=n.left+l+(n.width-e.offsetWidth)/2;break;default:o=n.top+a-50,d=n.left+l}e.style.top=`${o}px`,e.style.left=`${d}px`}dismiss(e){let t=this.activeAlerts.get(e);if(t){let{element:i,options:n}=t;i.classList.add("removing");let s=()=>{i.parentNode&&i.parentNode.removeChild(i),this.activeAlerts.delete(e),this.queue.remove(e),n.onClose&&n.onClose()};i.addEventListener("animationend",s),setTimeout(()=>{this.activeAlerts.has(e)&&s()},400)}}dismissAll(e){let t=[];this.activeAlerts.forEach((i,n)=>{e&&(e.type&&i.options.type!==e.type||e.position&&i.options.position!==e.position)||t.push(n)}),t.forEach(i=>this.dismiss(i))}update(e,t){let i=this.activeAlerts.get(e);if(!i)return;let{element:n,options:s}=i,l={...s,...t};if(t.type&&t.type!==s.type){n.classList.remove(`vex-${s.type}`),n.classList.add(`vex-${t.type}`);let a=n.querySelector(".vx-icon");a&&(t.type==="loading"?a.innerHTML='<div class="vx-spinner"></div>':a.innerHTML=this.getIcon(t.type,t.icon))}if(t.message){let a=n.querySelector(".vx-msg");a&&(a.textContent=t.message)}if(t.title){let a=n.querySelector(".vx-title");a||(a=document.createElement("div"),a.className="vx-title",n.querySelector(".vx-body")?.prepend(a)),a&&(a.textContent=t.title)}this.activeAlerts.set(e,{element:n,options:l})}progress(e,t){let i=this.activeAlerts.get(e);if(!i)return;let n=0;typeof t=="number"?n=t:t.total>0&&(n=t.loaded/t.total*100);let s=i.element.querySelector(".vx-upload-prog");if(!s){let l=document.createElement("div");l.className="vx-upload-bar",l.style.height="4px",l.style.width="100%",l.style.backgroundColor="rgba(255,255,255,0.1)",l.style.borderRadius="2px",l.style.marginTop="8px",l.style.overflow="hidden",s=document.createElement("div"),s.className="vx-upload-prog",s.style.height="100%",s.style.backgroundColor="var(--vex-info-accent, #6366f1)",s.style.transition="width 0.2s linear",l.appendChild(s);let a=i.element.querySelector(".vx-body");a?a.appendChild(l):i.element.appendChild(l)}s.style.width=`${n}%`}generateId(){return typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():Math.random().toString(36).slice(2,9)}getIcon(e,t){if(t)return t;switch(e){case"success":return"\u2713";case"error":return"\u2715";case"warning":return"\u26A0";case"info":return"\u2139";case"neutral":return"\xB7";default:return""}}};var C=class{constructor(){this.activeModals=[]}confirm(e){return new Promise(t=>{this.create({type:"warning",...e,confirmLabel:e.confirmLabel||"Confirmar",cancelLabel:e.cancelLabel||"Cancelar"},()=>t(!0),()=>t(!1))})}alert(e){return new Promise(t=>{this.create({type:"info",...e,confirmLabel:e.confirmLabel||"OK",cancelLabel:void 0},()=>t(),()=>t())})}async form(e){return new Promise(t=>{let i={},n=document.createElement("div");n.className="modal-form",e.fields.forEach(s=>{let l=document.createElement("div");l.className="form-grp";let a=document.createElement("label");a.className="form-lbl",a.textContent=s.label,l.appendChild(a);let o;s.type==="select"?(o=document.createElement("select"),o.className="form-sel",s.options&&s.options.forEach(m=>{let c=document.createElement("option");c.value=m,c.textContent=m,o.appendChild(c)}),s.defaultValue&&(o.value=s.defaultValue)):s.type==="textarea"?(o=document.createElement("textarea"),o.className="form-tex",s.placeholder&&(o.placeholder=s.placeholder),s.defaultValue&&(o.value=s.defaultValue)):s.type==="radio"?(o=document.createElement("div"),o.className="form-radio-grp",s.options&&s.options.forEach(m=>{let c=document.createElement("label");c.style.display="flex",c.style.gap="6px",c.style.alignItems="center";let u=document.createElement("input");u.type="radio",u.name=s.name,u.value=m,s.defaultValue===m&&(u.checked=!0),c.appendChild(u),c.appendChild(document.createTextNode(m)),o.appendChild(c)})):(o=document.createElement("input"),o.className="form-inp",o.type=s.type,s.placeholder&&(o.placeholder=s.placeholder),s.defaultValue&&(o.value=s.defaultValue)),i[s.name]=o,l.appendChild(o);let d=document.createElement("div");d.className="form-err",d.style.color="var(--vex-error-text, #f87171)",d.style.fontSize="11px",d.style.display="none",d.style.marginTop="4px",l.appendChild(d),n.appendChild(l)}),this.create({...e,content:n,confirmLabel:e.submitLabel||"Enviar",cancelLabel:e.cancelLabel||"Cancelar"},()=>{let s=!0,l={};if(e.fields.forEach(a=>{let o=i[a.name],d;if(a.type==="radio"){let u=o.querySelector("input:checked");d=u?u.value:null}else d=o.value;l[a.name]=d;let m=o.parentElement?.querySelector(".form-err");m&&(m.style.display="none");let c=null;a.required&&!d?c="Campo obrigat\xF3rio":a.validate&&(c=a.validate(d)),c&&(s=!1,m&&(m.textContent=c,m.style.display="block"))}),s&&e.validate){let a=e.validate(l);a&&(s=!1,Object.entries(a).forEach(([o,d])=>{let c=i[o]?.parentElement?.querySelector(".form-err");c&&(c.textContent=d,c.style.display="block")}))}return s?(t(l),!0):!1},()=>t(null))})}async prompt(e){let{validate:t,...i}=e,n=await this.form({...i,fields:[{name:"value",label:"",type:"text",defaultValue:e.defaultValue,placeholder:e.placeholder,validate:t,required:!0}],submitLabel:e.confirmLabel||"OK"});return n?n.value:null}preview(e){let t=document.createElement("div");t.className="vx-preview-body",t.style.textAlign="center";let i=document.createElement("img");if(i.src=e.src,i.style.maxWidth="100%",i.style.maxHeight="70vh",i.style.borderRadius="8px",i.style.boxShadow="0 8px 30px rgba(0,0,0,0.5)",t.appendChild(i),e.meta){let n=document.createElement("div");n.className="vx-meta",n.textContent=e.meta.join(" \xB7 "),n.style.marginTop="16px",n.style.color="var(--vex-text-muted, rgba(255,255,255,0.6))",n.style.fontSize="13px",t.appendChild(n)}if(e.gallery){let n=document.createElement("div");n.className="vx-gallery",n.style.display="flex",n.style.gap="8px",n.style.justifyContent="center",n.style.marginTop="16px",e.gallery.forEach(s=>{let l=document.createElement("img");l.src=s,l.style.width="48px",l.style.height="48px",l.style.objectFit="cover",l.style.borderRadius="6px",l.style.cursor="pointer",l.style.opacity=s===e.src?"1":"0.5",l.style.border=s===e.src?"2px solid var(--vex-primary, #6366f1)":"2px solid transparent",l.onclick=()=>{i.src=s,Array.from(n.children).forEach(a=>{a.style.opacity="0.5",a.style.border="2px solid transparent"}),l.style.opacity="1",l.style.border="2px solid var(--vex-primary, #6366f1)"},n.appendChild(l)}),t.appendChild(n)}this.create({...e,content:t,width:e.width||800,footer:!1})}custom(e){return this.create(e)}create(e,t,i){if(typeof document>"u")return{close:()=>{}};q();let n=document.createElement("div");n.className="vex-backdrop";let s=`vex-modal-title-${Math.random().toString(36).slice(2)}`,l=`vex-modal-desc-${Math.random().toString(36).slice(2)}`;X(n,s,l);let a=document.createElement("div");a.className="vex-modal",e.width&&(a.style.maxWidth=`${e.width}px`),e.animate&&a.classList.add(`vex-anim-${e.animate}`);let o=document.createElement("div");if(o.className="modal-hdr",o.appendChild(document.createElement("div")),e.showClose!==!1){let c=document.createElement("button");c.className="modal-x",c.ariaLabel="Fechar",c.innerHTML="\u2715",c.onclick=()=>{i&&i(),this.close(n)},o.appendChild(c)}a.appendChild(o);let d=document.createElement("div");if(d.className="modal-bdy",e.type){let c=document.createElement("div");c.className=`modal-icon ${e.type}`,c.innerHTML=this.getIcon(e.type),d.appendChild(c)}if(e.title){let c=document.createElement("div");c.id=s,c.className="modal-title",c.textContent=e.title,d.appendChild(c)}if(e.message){let c=document.createElement("div");c.id=l,c.className="modal-desc",c.textContent=e.message,d.appendChild(c)}if(e.content){let c=document.createElement("div");c.className="modal-custom",typeof e.content=="string"?c.innerHTML=e.content:c.appendChild(e.content),d.appendChild(c)}if(a.appendChild(d),e.footer!==!1&&(e.confirmLabel||e.cancelLabel)){let c=document.createElement("div");if(c.className="modal-ftr",e.cancelLabel){let u=document.createElement("button");u.className="modal-btn cancel",u.textContent=e.cancelLabel,u.onclick=()=>{i&&i(),this.close(n)},c.appendChild(u)}if(e.confirmLabel){let u=document.createElement("button");if(u.className=`modal-btn ${e.type||"primary"}`,u.textContent=e.confirmLabel,e.confirmDelay&&e.confirmDelay>0){u.disabled=!0;let x=Math.ceil(e.confirmDelay/1e3),w=e.confirmLabel;u.textContent=`${w} (${x})`;let E=setInterval(()=>{x--,x<=0?(clearInterval(E),u.disabled=!1,u.textContent=w):u.textContent=`${w} (${x})`},1e3);n._interval=E}u.onclick=async()=>{t?await t()!==!1&&this.close(n):this.close(n)},c.appendChild(u)}a.appendChild(c)}n.appendChild(a),document.body.appendChild(n),this.activeModals.push(n),e.closeOnBackdrop!==!1&&(n.onclick=c=>{c.target===n&&(i&&i(),this.close(n))});let m=c=>{c.key==="Escape"&&e.closeOnEscape!==!1&&this.activeModals[this.activeModals.length-1]===n&&(i&&i(),this.close(n)),c.key==="Tab"&&K(n,c)};return document.addEventListener("keydown",m),n._cleanup=()=>{document.removeEventListener("keydown",m),n._interval&&clearInterval(n._interval)},e.onOpen&&e.onOpen(),{close:()=>this.close(n,i)}}close(e,t){if(e.classList.contains("closing"))return;e.classList.add("closing");let i=e.querySelector(".vex-modal");i&&i.classList.add("closing");let n=()=>{e._cleanup&&e._cleanup(),e.parentNode&&e.parentNode.removeChild(e),this.activeModals=this.activeModals.filter(s=>s!==e),I()};e.addEventListener("animationend",n),setTimeout(()=>{document.body.contains(e)&&n()},300)}getIcon(e){switch(e){case"danger":return"\u2715";case"warning":return"!";case"success":return"\u2713";case"info":return"i";default:return""}}};function Y(r){if(typeof document>"u")return{close:()=>{}};q();let e=document.createElement("div");e.className=`vex-drawer vex-drawer-${r.position}`,r.className&&e.classList.add(r.className),r.width&&(r.position==="left"||r.position==="right")&&(e.style.width=`${r.width}px`),r.height&&(r.position==="top"||r.position==="bottom")&&(e.style.height=`${r.height}px`);let t=document.createElement("div");if(t.className="drawer-hdr",r.title){let m=document.createElement("div");m.className="drawer-title",m.textContent=r.title,t.appendChild(m)}let i=document.createElement("button");i.className="drawer-close",i.innerHTML="\u2715",i.onclick=()=>o(),t.appendChild(i),e.appendChild(t);let n=document.createElement("div");n.className="drawer-body";let s=null,l=null,a=null;if(typeof r.content=="string")if(r.content.startsWith("#")||r.content.startsWith(".")){let m=document.querySelector(r.content);m?(a=m,s=m.parentNode,l=m.nextSibling,n.appendChild(m),m.style.display="block"):n.innerHTML=r.content}else n.innerHTML=r.content;else a=r.content,s=r.content.parentNode,l=r.content.nextSibling,n.appendChild(r.content),r.content.style.display="block";if(e.appendChild(n),r.footer&&r.footer.length>0){let m=document.createElement("div");m.className="drawer-ftr",r.footer.forEach(c=>{let u=document.createElement("button");u.className=`drawer-btn ${c.variant||"default"}`,u.textContent=c.label,u.onclick=()=>{c.onClick?c.onClick(()=>o()):o()},m.appendChild(u)}),e.appendChild(m)}document.body.appendChild(e),requestAnimationFrame(()=>{e.classList.add("open")});let o=()=>{e.classList.remove("open"),e.addEventListener("transitionend",()=>{a&&s&&(a.style.display="",s.insertBefore(a,l)),e.parentNode&&e.parentNode.removeChild(e),I(),r.onClose&&r.onClose()},{once:!0}),document.removeEventListener("click",d)},d=m=>{r.persistent||e.classList.contains("open")&&!e.contains(m.target)&&o()};return setTimeout(()=>{document.addEventListener("click",d)},100),{close:o}}async function J(r){let e=new C;return new Promise(t=>{let i=0,n={},s=null,l=null,a=c=>{let u=c;for(;u<r.length;){let x=r[u];if(!x.condition||x.condition(n))return u;u++}return-1};if(i=a(0),i===-1){t(n);return}let o=document.createElement("div");o.className="vex-flow-container";let d=()=>{o.innerHTML="";let c=r[i];if(l){let p=l.querySelector(".modal-title");p&&(p.textContent=c.title);let h=l.querySelector(".modal-icon");if(h&&c.type){h.className=`modal-icon ${c.type}`;let v={danger:"\u2715",warning:"!",success:"\u2713",info:"i"};h.innerHTML=v[c.type]||"i"}}let u=document.createElement("div");u.className="modal-steps",r.forEach((p,h)=>{let v=document.createElement("div");v.className="step-dot",h<i&&v.classList.add("done"),h===i&&v.classList.add("active");let f=document.createElement("div");f.className="step-circle",f.textContent=(h+1).toString(),h<i&&(f.textContent="\u2713");let y=document.createElement("div");y.className="step-name",y.textContent=p.title,v.appendChild(f),v.appendChild(y),u.appendChild(v)}),o.appendChild(u);let x=document.createElement("div");if(x.className="flow-content",c.description){let p=document.createElement("div");p.className="modal-desc",p.textContent=c.description,p.style.marginBottom="16px",x.appendChild(p)}let w={};c.fields&&c.fields.forEach(p=>{let h=document.createElement("div");h.className="form-grp";let v=document.createElement("label");v.className="form-lbl",v.textContent=p.label,h.appendChild(v);let f;p.type==="select"?(f=document.createElement("select"),f.className="form-sel",p.options&&p.options.forEach(T=>{let M=document.createElement("option");M.value=T,M.textContent=T,f.appendChild(M)}),n[p.name]&&(f.value=n[p.name])):(f=document.createElement("input"),f.className="form-inp",f.type=p.type,n[p.name]&&(f.value=n[p.name])),w[p.name]=f,h.appendChild(f);let y=document.createElement("div");y.className="form-err",y.style.color="var(--vex-error-text, #f87171)",y.style.fontSize="11px",y.style.display="none",h.appendChild(y),x.appendChild(h)}),o.appendChild(x);let E=document.createElement("div");if(E.className="flow-btns",E.style.marginTop="24px",E.style.display="flex",E.style.justifyContent="flex-end",E.style.gap="10px",i>0){let p=document.createElement("button");p.className="modal-btn cancel",p.textContent="\u2190 Voltar",p.onclick=()=>{let h=i-1;for(;h>=0;){let v=r[h];if(!v.condition||v.condition(n))break;h--}h>=0&&(i=h,d())},E.appendChild(p)}let L=document.createElement("button");L.className="modal-btn primary";let W=a(i+1)===-1;L.textContent=W?"Concluir":"Pr\xF3ximo \u2192",L.onclick=async()=>{let p={},h=!0;if(c.fields&&c.fields.forEach(f=>{let y=w[f.name].value;p[f.name]=y,n[f.name]=y,f.required&&!y&&(h=!1)}),!h)return;if(c.beforeNext){L.disabled=!0,L.textContent="Aguarde...";let f=await c.beforeNext(p);if(L.disabled=!1,L.textContent=W?"Concluir":"Pr\xF3ximo \u2192",f){Object.keys(f).forEach(y=>{let T=w[y];if(T&&T.nextElementSibling){let M=T.nextElementSibling;M.textContent=f[y],M.style.display="block"}});return}}let v=a(i+1);v!==-1?(i=v,d()):(s&&s.close(),t(n))},E.appendChild(L),o.appendChild(E)},m=r[i];s=e.custom({title:m.title,type:m.type||"info",content:o,footer:!1,width:600,onClose:()=>{t(null)}}),setTimeout(()=>{l=document.querySelector(".vex-modal:last-child"),d()},0)})}var j=class{constructor(){this.currentTheme="auto";this.mediaQuery=null;typeof window<"u"&&(this.mediaQuery=window.matchMedia("(prefers-color-scheme: dark)"),this.init())}init(){this.mediaQuery?.addEventListener("change",()=>{this.currentTheme==="auto"&&this.applyTheme()})}setTheme(e){this.currentTheme=e,this.applyTheme()}getTheme(){return this.currentTheme}applyTheme(){if(typeof document>"u")return;let e=document.documentElement,t=this.currentTheme==="dark"||this.currentTheme==="auto"&&this.mediaQuery?.matches;t?(e.classList.add("vex-dark"),e.classList.remove("vex-light")):(e.classList.add("vex-light"),e.classList.remove("vex-dark")),e.setAttribute("data-vex-theme",t?"dark":"light")}setTokens(e){if(typeof document>"u")return;let t=document.documentElement;Object.entries(e).forEach(([i,n])=>{t.style.setProperty(i,n)})}isReducedMotion(){return typeof window>"u"?!1:window.matchMedia("(prefers-reduced-motion: reduce)").matches}},z=new j;var pe={success:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg>',error:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg>',warning:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path><line x1="12" y1="9" x2="12" y2="13"></line><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>',info:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="16" x2="12" y2="12"></line><line x1="12" y1="8" x2="12.01" y2="8"></line></svg>',loading:'<div class="vx-spinner"></div>'};function S(r){return typeof r=="string"?document.querySelector(r):r}function $(r){let e=r.parentElement;if(!e||!e.classList.contains("vex-field-wrapper")){e=document.createElement("div"),e.className="vex-field-wrapper",r.parentNode?.insertBefore(e,r),e.appendChild(r);let t=document.createElement("div");t.className="vex-field-icon",e.appendChild(t);let i=document.createElement("div");i.className="vex-field-msg",e.appendChild(i)}return e}function H(r,e,t,i){let n=S(r);if(!n)return;let s=$(n),l=s.querySelector(".vex-field-icon"),a=s.querySelector(".vex-field-msg");s.classList.remove("vex-success","vex-error","vex-warning","vex-info","vex-loading","vex-validating"),e!=="neutral"&&(s.classList.add(`vex-${e}`),e==="loading"&&s.classList.add("vex-validating")),l&&(l.innerHTML=pe[e]||""),a&&t!==void 0&&(a.textContent=t),i?.scroll&&(s.scrollIntoView({behavior:"smooth",block:"center"}),n instanceof HTMLElement&&setTimeout(()=>n.focus(),400))}function Q(r){let e=S(r);if(!e)return;let t=e.closest(".vex-field-wrapper");if(t){t.classList.remove("vex-success","vex-error","vex-warning","vex-info","vex-loading","vex-validating");let i=t.querySelector(".vex-field-msg");i&&(i.textContent="");let n=t.querySelector(".vex-field-icon");n&&(n.innerHTML="")}}function fe(){document.querySelectorAll(".vex-field-wrapper").forEach(r=>{r.classList.remove("vex-success","vex-error","vex-warning","vex-info","vex-loading","vex-validating");let e=r.querySelector(".vex-field-msg");e&&(e.textContent="");let t=r.querySelector(".vex-field-icon");t&&(t.innerHTML="")})}function he(r){let e=0;return r.length>=8&&e++,r.length>=12&&e++,/[a-z]/.test(r)&&e++,/[A-Z]/.test(r)&&e++,/[0-9]/.test(r)&&e++,/[^a-zA-Z0-9]/.test(r)&&e++,e<=1?"very-weak":e===2?"weak":e===3?"medium":e===4?"strong":"very-strong"}function Z(r){let e=S(r);if(!e)return;let t=$(e),i=t.querySelector(".vex-fbar");i||(i=document.createElement("div"),i.className="vex-fbar",i.innerHTML=`
17
+ <div class="vex-fbar-track">
18
+ <div class="vex-fbar-fill" data-level="very-weak" style="width: 0%"></div>
19
+ </div>
20
+ <span class="vex-fbar-label"></span>
21
+ `,t.appendChild(i));let n=i.querySelector(".vex-fbar-fill"),s=i.querySelector(".vex-fbar-label"),l=()=>{let a=e.value;if(!a){n.style.width="0%",s.textContent="";return}let o=he(a);n.setAttribute("data-level",o);let d={"very-weak":"Muito fraca",weak:"Fraca",medium:"M\xE9dia",strong:"Forte","very-strong":"Muito forte"};s.textContent=d[o]};e.addEventListener("input",l),l()}function G(r,e){let t=S(r);if(!t)return;let i=$(t),n=i.querySelector(".vex-fcnt");n||(n=document.createElement("div"),n.className="vex-fcnt",n.innerHTML=`<span class="vex-fcnt-cur">0</span>/<span class="vex-fcnt-max">${e.max}</span>`,i.appendChild(n));let s=n.querySelector(".vex-fcnt-cur"),l=e.warn||.85,a=()=>{let o=t.value.length;s.textContent=o.toString(),n.style.color="var(--vex-neutral-accent)",o>e.max?(n.style.color="var(--vex-error-accent)",H(t,"error","Limite excedido")):(o>=e.max*l&&(n.style.color="var(--vex-warning-accent)"),t.closest(".vex-error")&&t.closest(".vex-field-wrapper")?.querySelector(".vex-field-msg")?.textContent==="Limite excedido"&&Q(t))};t.addEventListener("input",a),a()}function ee(){if(window.__VEX_AUTO_INIT__===!1)return;let r=document.querySelectorAll("form[data-vex-form]");document.querySelectorAll("[data-vex-field]").forEach(e=>{let t=e;$(t),t.hasAttribute("data-vex-password")&&Z(t);let i=t.getAttribute("data-vex-counter");if(i){let[n,s]=i.split("|");G(t,{max:parseInt(n,10),warn:s?parseFloat(s):void 0})}})}typeof window<"u"&&document.addEventListener("DOMContentLoaded",ee);var b={error:(r,e,t)=>H(r,"error",e,t),success:(r,e,t)=>H(r,"success",e,t),warning:(r,e,t)=>H(r,"warning",e,t),info:(r,e,t)=>H(r,"info",e,t),loading:(r,e,t)=>H(r,"loading",e,t),clear:Q,clearAll:fe,password:Z,counter:G,scroll:r=>{let e=S(r);e&&(e.scrollIntoView({behavior:"smooth",block:"center"}),setTimeout(()=>e.focus(),400))},init:ee};var V=new Map;function D(r){return typeof r=="string"?document.querySelector(r):r}var R={required:r=>!!r&&r.trim().length>0,email:r=>/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(r),minLength:(r,e)=>r.length>=e,match:(r,e,t)=>{let i=t.querySelector(`[name="${e}"]`);return i?r===i.value:!1}};async function te(r,e,t){let i=e.rules||[],n=!0,s;b.clear(r);for(let l of i){if(!n)break;let a=r.value;if(l.type==="async"){let o=t.querySelector('[type="submit"]');o&&(o.disabled=!0,o.style.opacity="0.5"),b.loading(r,l.message||"Validando...");try{let d=l.validate?await l.validate(a):null;d&&(n=!1,s=d)}catch{n=!1,s="Erro na valida\xE7\xE3o"}finally{parseInt(t.dataset.vexAsyncPending||"0",10)<=0&&o&&(o.disabled=!1,o.style.opacity="")}}else{let o=!0;if(l.type==="required")o=R.required(a);else if(l.type==="email")o=R.email(a);else if(l.type==="minLength")o=R.minLength(a,l.value);else if(l.type==="match")o=R.match(a,l.value,t);else if(l.type==="custom"&&l.validate){let d=await l.validate(a);d&&(o=!1,s=d)}o||(n=!1,s=l.message||"Inv\xE1lido")}}return n?r.value&&!e.rules?.some(l=>l.type==="async")&&b.clear(r):b.error(r,s),n}function ne(r,e){let t=D(r);t&&(V.set(t,e),Object.keys(e.fields).forEach(i=>{let n=t.querySelector(`[name="${i}"]`);if(!n)return;let s=e.fields[i];s.password&&b.password(n),s.counter&&b.counter(n,s.counter);let l=e.validateOn==="submit"?"change":"blur";n.addEventListener(l,()=>{te(n,s,t)}),n.addEventListener("input",()=>{n.closest(".vex-error")&&b.clear(n)})}),t.addEventListener("submit",async i=>{i.preventDefault();let n=await ie(t),s=new FormData(t),l=Object.fromEntries(s.entries());e.onSubmit&&e.onSubmit(l,n)}))}async function ie(r){let e=D(r);if(!e)return!1;let t=V.get(e);if(!t)return!0;let i=!0,n=Object.keys(t.fields);if(i=(await Promise.all(n.map(async l=>{let a=e.querySelector(`[name="${l}"]`);return a?te(a,t.fields[l],e):!0}))).every(l=>l),!i&&t.scrollToFirst){let l=e.querySelector(".vex-error input");l&&b.scroll(l)}return i}function ve(r){let e=D(r);e&&V.delete(e)}function ye(r){let e=D(r);e&&(e.querySelectorAll(".vex-field-wrapper").forEach(t=>{let i=t.querySelector("input, textarea, select");i&&b.clear(i)}),e.reset())}function re(){window.__VEX_AUTO_INIT__!==!1&&document.querySelectorAll("form[data-vex-form]").forEach(r=>{let e=r;if(V.has(e))return;let t={};e.querySelectorAll("[data-vex-field]").forEach(i=>{let n=i,s=n.name;if(!s)return;let l=[];if(n.hasAttribute("data-vex-required")&&l.push({type:"required",message:n.getAttribute("data-vex-required")||void 0}),n.hasAttribute("data-vex-email")&&l.push({type:"email",message:n.getAttribute("data-vex-email")||void 0}),n.hasAttribute("data-vex-min-length")){let[a,o]=(n.getAttribute("data-vex-min-length")||"").split("|");l.push({type:"minLength",value:parseInt(a,10),message:o})}if(n.hasAttribute("data-vex-match")){let[a,o]=(n.getAttribute("data-vex-match")||"").split("|");l.push({type:"match",value:a,message:o})}if(n.hasAttribute("data-vex-async")){let[a,o]=(n.getAttribute("data-vex-async")||"").split("|");window[a]&&l.push({type:"async",message:o,validate:window[a]})}t[s]={rules:l,password:n.hasAttribute("data-vex-password"),counter:n.hasAttribute("data-vex-counter")?{max:parseInt(n.getAttribute("data-vex-counter"),10)}:void 0}}),ne(e,{fields:t,validateOn:e.getAttribute("data-vex-validate-on")||"blur",scrollToFirst:e.hasAttribute("data-vex-scroll-to-first")})})}typeof window<"u"&&document.addEventListener("DOMContentLoaded",re);var se={register:ne,validate:ie,clear:ye,destroy:ve,init:re};var k=new P,ge=new C,xe=F;function be(r){r.theme&&z.setTheme(r.theme)}function Ee(r){z.setTheme(r)}function Le(r){k.dismiss(r)}function we(r){k.dismissAll(r)}function Te(r,e){k.update(r,e)}function Me(r,e){k.progress(r,e)}var Ce={alert:k,modal:ge,drawer:Y,flow:J,history:xe,field:b,form:se,configure:be,setTheme:Ee,dismiss:Le,dismissAll:we,update:Te,progress:Me,prompt:{inline:async(r,e)=>{let t=typeof r=="string"?document.querySelector(r):r;if(!t)return null;let i=t.textContent,n=t.style.display,s=document.createElement("input");return s.type="text",s.value=i||"",s.placeholder=e.placeholder||"",s.className="vex-inline-prompt",s.style.fontSize=getComputedStyle(t).fontSize,s.style.fontFamily=getComputedStyle(t).fontFamily,s.style.border="1px solid var(--vex-primary, #6366f1)",s.style.borderRadius="4px",s.style.padding="2px 4px",s.style.background="var(--vex-bg, #000)",s.style.color="var(--vex-text, #fff)",t.style.display="none",t.parentNode?.insertBefore(s,t),s.focus(),new Promise(l=>{let a=o=>{if(o!==null&&e.validate&&e.validate(o)){s.style.borderColor="red";return}s.remove(),t.style.display=n,o!==null&&(t.textContent=o),l(o)};s.onblur=()=>a(s.value),s.onkeydown=o=>{o.key==="Enter"&&a(s.value),o.key==="Escape"&&a(null)}})}}},g=Ce;function He(){let r=(0,N.useRef)([]),e={...g.alert,success:(t,i)=>{let n=g.alert.success(t,i);return r.current.push(n),n},error:(t,i)=>{let n=g.alert.error(t,i);return r.current.push(n),n},warning:(t,i)=>{let n=g.alert.warning(t,i);return r.current.push(n),n},info:(t,i)=>{let n=g.alert.info(t,i);return r.current.push(n),n},neutral:(t,i)=>{let n=g.alert.neutral(t,i);return r.current.push(n),n},loading:(t,i)=>{let n=g.alert.loading(t,i);return r.current.push(n),n},upload:(t,i)=>{let n=g.alert.upload(t,i);return r.current.push(n),n},inline:(t,i)=>{let n=g.alert.inline(t,i);return r.current.push(n),n},fixed:t=>{let i=g.alert.fixed(t);return r.current.push(i),i},attach:(t,i)=>{let n=g.alert.attach(t,i);return r.current.push(n),n},show:t=>{let i=g.alert.show(t);return r.current.push(i),i}};return(0,N.useEffect)(()=>()=>{r.current.forEach(t=>g.dismiss(t))},[]),{...g,alert:e}}var Ae=({children:r,config:e})=>((0,N.useEffect)(()=>{e&&g.configure(e)},[e]),r);0&&(module.exports={VexProvider,useVex});
17
22
  //# sourceMappingURL=react.cjs.js.map