@datametria/vue-components 1.1.1

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 (44) hide show
  1. package/ACCESSIBILITY.md +78 -0
  2. package/DESIGN-SYSTEM.md +70 -0
  3. package/LICENSE +21 -0
  4. package/PROGRESS.md +327 -0
  5. package/README.md +473 -0
  6. package/dist/index.es.js +1405 -0
  7. package/dist/index.umd.js +1 -0
  8. package/dist/vue-components.css +1 -0
  9. package/package.json +98 -0
  10. package/src/components/DatametriaAlert.vue +123 -0
  11. package/src/components/DatametriaAutocomplete.vue +292 -0
  12. package/src/components/DatametriaAvatar.vue +99 -0
  13. package/src/components/DatametriaBadge.vue +90 -0
  14. package/src/components/DatametriaBreadcrumb.vue +144 -0
  15. package/src/components/DatametriaButton.vue +157 -0
  16. package/src/components/DatametriaCard.vue +72 -0
  17. package/src/components/DatametriaCheckbox.vue +82 -0
  18. package/src/components/DatametriaChip.vue +149 -0
  19. package/src/components/DatametriaContainer.vue +57 -0
  20. package/src/components/DatametriaDatePicker.vue +140 -0
  21. package/src/components/DatametriaDivider.vue +100 -0
  22. package/src/components/DatametriaFileUpload.vue +268 -0
  23. package/src/components/DatametriaGrid.vue +44 -0
  24. package/src/components/DatametriaInput.vue +102 -0
  25. package/src/components/DatametriaModal.vue +135 -0
  26. package/src/components/DatametriaNavbar.vue +227 -0
  27. package/src/components/DatametriaProgress.vue +113 -0
  28. package/src/components/DatametriaRadio.vue +138 -0
  29. package/src/components/DatametriaSelect.vue +112 -0
  30. package/src/components/DatametriaSpinner.vue +112 -0
  31. package/src/components/DatametriaSwitch.vue +137 -0
  32. package/src/components/DatametriaTable.vue +105 -0
  33. package/src/components/DatametriaTabs.vue +180 -0
  34. package/src/components/DatametriaTextarea.vue +159 -0
  35. package/src/components/DatametriaToast.vue +163 -0
  36. package/src/composables/useAPI.ts +78 -0
  37. package/src/composables/useClipboard.ts +42 -0
  38. package/src/composables/useDebounce.ts +16 -0
  39. package/src/composables/useLocalStorage.ts +26 -0
  40. package/src/composables/useTheme.ts +66 -0
  41. package/src/composables/useValidation.ts +39 -0
  42. package/src/index.ts +52 -0
  43. package/src/styles/design-tokens.css +31 -0
  44. package/src/types/index.ts +34 -0
@@ -0,0 +1 @@
1
+ (function(c,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue")):typeof define=="function"&&define.amd?define(["exports","vue"],e):(c=typeof globalThis<"u"?globalThis:c||self,e(c.DatametriaVueComponents={},c.Vue))})(this,(function(c,e){"use strict";var C=(a=>(a.PRIMARY="primary",a.SECONDARY="secondary",a.OUTLINE="outline",a.GHOST="ghost",a))(C||{}),D=(a=>(a.SM="sm",a.MD="md",a.LG="lg",a))(D||{});const z=["disabled","type","aria-busy","aria-disabled"],q={key:0,class:"spinner",role:"status","aria-label":"Carregando"},A=e.defineComponent({__name:"DatametriaButton",props:{variant:{default:C.PRIMARY},size:{default:D.MD},disabled:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},fullWidth:{type:Boolean,default:!1},type:{default:"button"}},emits:["click"],setup(a){const t=a,l=e.computed(()=>["datametria-button",`datametria-button--${t.variant}`,`datametria-button--${t.size}`,{"datametria-button--full-width":t.fullWidth,"datametria-button--loading":t.loading,"datametria-button--disabled":t.disabled}]);return(r,o)=>(e.openBlock(),e.createElementBlock("button",{class:e.normalizeClass(l.value),disabled:a.disabled||a.loading,type:a.type,"aria-busy":a.loading,"aria-disabled":a.disabled,onClick:o[0]||(o[0]=n=>r.$emit("click",n))},[a.loading?(e.openBlock(),e.createElementBlock("span",q)):e.createCommentVNode("",!0),e.renderSlot(r.$slots,"default",{},void 0,!0)],10,z))}}),k=(a,t)=>{const l=a.__vccOpts||a;for(const[r,o]of t)l[r]=o;return l},F=k(A,[["__scopeId","data-v-e9850b65"]]),O={class:"datametria-input"},x=["for"],R={key:0,class:"datametria-input__required"},U=["id","value","placeholder","disabled","required"],P={key:1,class:"datametria-input__error"},j=k(e.defineComponent({__name:"DatametriaInput",props:{modelValue:{default:""},label:{},placeholder:{},errorMessage:{},disabled:{type:Boolean,default:!1},required:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(a){const t=a,l=e.computed(()=>`input-${Math.random().toString(36).substr(2,9)}`),r=e.computed(()=>["datametria-input__field",{"datametria-input__field--error":t.errorMessage,"datametria-input__field--disabled":t.disabled}]);return(o,n)=>(e.openBlock(),e.createElementBlock("div",O,[a.label?(e.openBlock(),e.createElementBlock("label",{key:0,for:l.value,class:"datametria-input__label"},[e.createTextVNode(e.toDisplayString(a.label)+" ",1),a.required?(e.openBlock(),e.createElementBlock("span",R,"*")):e.createCommentVNode("",!0)],8,x)):e.createCommentVNode("",!0),e.createElementVNode("input",{id:l.value,value:a.modelValue,placeholder:a.placeholder,disabled:a.disabled,required:a.required,class:e.normalizeClass(r.value),onInput:n[0]||(n[0]=s=>o.$emit("update:modelValue",s.target.value))},null,42,U),a.errorMessage?(e.openBlock(),e.createElementBlock("p",P,e.toDisplayString(a.errorMessage),1)):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-cae54108"]]),K={class:"datametria-select"},G=["for"],H={key:0,class:"datametria-select__required"},J=["id","value","disabled","required"],W={key:0,value:"",disabled:""},Y=["value"],Q={key:1,class:"datametria-select__error"},X=k(e.defineComponent({__name:"DatametriaSelect",props:{modelValue:{default:""},options:{},label:{},placeholder:{},errorMessage:{},disabled:{type:Boolean,default:!1},required:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(a){const t=a,l=e.computed(()=>`select-${Math.random().toString(36).substr(2,9)}`),r=e.computed(()=>["datametria-select__field",{"datametria-select__field--error":t.errorMessage,"datametria-select__field--disabled":t.disabled}]);return(o,n)=>(e.openBlock(),e.createElementBlock("div",K,[a.label?(e.openBlock(),e.createElementBlock("label",{key:0,for:l.value,class:"datametria-select__label"},[e.createTextVNode(e.toDisplayString(a.label)+" ",1),a.required?(e.openBlock(),e.createElementBlock("span",H,"*")):e.createCommentVNode("",!0)],8,G)):e.createCommentVNode("",!0),e.createElementVNode("select",{id:l.value,value:a.modelValue,disabled:a.disabled,required:a.required,class:e.normalizeClass(r.value),onChange:n[0]||(n[0]=s=>o.$emit("update:modelValue",s.target.value))},[a.placeholder?(e.openBlock(),e.createElementBlock("option",W,e.toDisplayString(a.placeholder),1)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.options,s=>(e.openBlock(),e.createElementBlock("option",{key:s.value,value:s.value},e.toDisplayString(s.label),9,Y))),128))],42,J),a.errorMessage?(e.openBlock(),e.createElementBlock("p",Q,e.toDisplayString(a.errorMessage),1)):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-96f4e8ce"]]),Z={class:"datametria-checkbox"},v=["checked","disabled"],ee={key:0,class:"datametria-checkbox__label"},ae=k(e.defineComponent({__name:"DatametriaCheckbox",props:{modelValue:{type:Boolean,default:!1},label:{},disabled:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(a){return(t,l)=>(e.openBlock(),e.createElementBlock("label",Z,[e.createElementVNode("input",{type:"checkbox",checked:a.modelValue,disabled:a.disabled,class:"datametria-checkbox__input",onChange:l[0]||(l[0]=r=>t.$emit("update:modelValue",r.target.checked))},null,40,v),l[1]||(l[1]=e.createElementVNode("span",{class:"datametria-checkbox__checkmark"},null,-1)),a.label?(e.openBlock(),e.createElementBlock("span",ee,e.toDisplayString(a.label),1)):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-3226ffd6"]]),te={class:"dm-radio"},le={class:"dm-radio__label"},oe=["value","checked","disabled","name","aria-label","aria-describedby"],ne={key:0,class:"dm-radio__text"},re=["id"],se=k(e.defineComponent({__name:"DatametriaRadio",props:{modelValue:{type:[String,Number,Boolean]},value:{type:[String,Number,Boolean]},label:{},name:{},disabled:{type:Boolean,default:!1},error:{},ariaLabel:{}},emits:["update:modelValue"],setup(a,{emit:t}){const l=a,r=t,o=()=>{l.disabled||r("update:modelValue",l.value)};return(n,s)=>(e.openBlock(),e.createElementBlock("div",te,[e.createElementVNode("label",le,[e.createElementVNode("input",{type:"radio",class:"dm-radio__input",value:a.value,checked:a.modelValue===a.value,disabled:a.disabled,name:a.name,"aria-label":a.ariaLabel,"aria-describedby":a.error?`${a.name}-error`:void 0,onChange:o},null,40,oe),s[0]||(s[0]=e.createElementVNode("span",{class:"dm-radio__checkmark"},null,-1)),a.label?(e.openBlock(),e.createElementBlock("span",ne,e.toDisplayString(a.label),1)):e.createCommentVNode("",!0)]),a.error?(e.openBlock(),e.createElementBlock("p",{key:0,id:`${a.name}-error`,class:"dm-radio__error"},e.toDisplayString(a.error),9,re)):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-4fb0fa6f"]]),de={class:"dm-switch"},ce={class:"dm-switch__label"},ie=["checked","disabled","aria-label","aria-checked"],me={key:0,class:"dm-switch__text"},fe={key:0,class:"dm-switch__error"},ke=k(e.defineComponent({__name:"DatametriaSwitch",props:{modelValue:{type:Boolean,default:!1},label:{},disabled:{type:Boolean,default:!1},error:{},ariaLabel:{}},emits:["update:modelValue"],setup(a,{emit:t}){const l=a,r=t,o=n=>{l.disabled||r("update:modelValue",n.target.checked)};return(n,s)=>(e.openBlock(),e.createElementBlock("div",de,[e.createElementVNode("label",ce,[e.createElementVNode("input",{type:"checkbox",class:"dm-switch__input",checked:a.modelValue,disabled:a.disabled,"aria-label":a.ariaLabel,"aria-checked":a.modelValue,role:"switch",onChange:o},null,40,ie),s[0]||(s[0]=e.createElementVNode("span",{class:"dm-switch__track"},[e.createElementVNode("span",{class:"dm-switch__thumb"})],-1)),a.label?(e.openBlock(),e.createElementBlock("span",me,e.toDisplayString(a.label),1)):e.createCommentVNode("",!0)]),a.error?(e.openBlock(),e.createElementBlock("p",fe,e.toDisplayString(a.error),1)):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-f57b4d9a"]]),be={class:"dm-textarea"},he={key:0,class:"dm-textarea__required"},pe=["placeholder","disabled","required","rows","maxlength","aria-label","aria-describedby","aria-invalid"],_e={key:1,class:"dm-textarea__footer"},ue=["id"],Be={key:1,class:"dm-textarea__counter"},ye=k(e.defineComponent({__name:"DatametriaTextarea",props:{modelValue:{default:""},label:{},placeholder:{},disabled:{type:Boolean,default:!1},required:{type:Boolean,default:!1},error:{},rows:{default:4},maxLength:{},ariaLabel:{}},emits:["update:modelValue"],setup(a,{emit:t}){const l=a,r=t,o=`dm-textarea-${Math.random().toString(36).substr(2,9)}`,n=e.ref(l.modelValue);e.watch(()=>l.modelValue,d=>{n.value=d});const s=()=>{r("update:modelValue",n.value||"")};return(d,i)=>{var f;return e.openBlock(),e.createElementBlock("div",be,[a.label?(e.openBlock(),e.createElementBlock("label",{key:0,for:o,class:"dm-textarea__label"},[e.createTextVNode(e.toDisplayString(a.label)+" ",1),a.required?(e.openBlock(),e.createElementBlock("span",he,"*")):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.withDirectives(e.createElementVNode("textarea",{id:o,"onUpdate:modelValue":i[0]||(i[0]=m=>n.value=m),class:e.normalizeClass(["dm-textarea__input",{"dm-textarea__input--error":a.error}]),placeholder:a.placeholder,disabled:a.disabled,required:a.required,rows:a.rows,maxlength:a.maxLength,"aria-label":a.ariaLabel,"aria-describedby":a.error?`${o}-error`:void 0,"aria-invalid":!!a.error,onInput:s},null,42,pe),[[e.vModelText,n.value]]),a.maxLength||a.error?(e.openBlock(),e.createElementBlock("div",_e,[a.error?(e.openBlock(),e.createElementBlock("p",{key:0,id:`${o}-error`,class:"dm-textarea__error"},e.toDisplayString(a.error),9,ue)):e.createCommentVNode("",!0),a.maxLength?(e.openBlock(),e.createElementBlock("span",Be,e.toDisplayString(((f=n.value)==null?void 0:f.length)||0)+"/"+e.toDisplayString(a.maxLength),1)):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)])}}}),[["__scopeId","data-v-e9253798"]]),$e={class:"dm-datepicker"},ge={key:0,class:"dm-datepicker__required"},Ve={class:"dm-datepicker__wrapper"},Ee=["disabled","required","min","max","aria-label","aria-describedby","aria-invalid"],Ce=["id"],De=k(e.defineComponent({__name:"DatametriaDatePicker",props:{modelValue:{default:""},label:{},disabled:{type:Boolean,default:!1},required:{type:Boolean,default:!1},error:{},min:{},max:{},ariaLabel:{}},emits:["update:modelValue"],setup(a,{emit:t}){const l=a,r=t,o=`dm-datepicker-${Math.random().toString(36).substr(2,9)}`,n=e.ref(l.modelValue);e.watch(()=>l.modelValue,d=>{n.value=d});const s=()=>{r("update:modelValue",n.value)};return(d,i)=>(e.openBlock(),e.createElementBlock("div",$e,[a.label?(e.openBlock(),e.createElementBlock("label",{key:0,for:o,class:"dm-datepicker__label"},[e.createTextVNode(e.toDisplayString(a.label)+" ",1),a.required?(e.openBlock(),e.createElementBlock("span",ge,"*")):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",Ve,[e.withDirectives(e.createElementVNode("input",{id:o,type:"date","onUpdate:modelValue":i[0]||(i[0]=f=>n.value=f),class:e.normalizeClass(["dm-datepicker__input",{"dm-datepicker__input--error":a.error}]),disabled:a.disabled,required:a.required,min:a.min,max:a.max,"aria-label":a.ariaLabel,"aria-describedby":a.error?`${o}-error`:void 0,"aria-invalid":!!a.error,onChange:s},null,42,Ee),[[e.vModelText,n.value]])]),a.error?(e.openBlock(),e.createElementBlock("p",{key:1,id:`${o}-error`,class:"dm-datepicker__error"},e.toDisplayString(a.error),9,Ce)):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-8bf1e9ec"]]),Ne={class:"dm-file-upload"},Se={key:0,class:"dm-file-upload__label"},we={key:0,class:"dm-file-upload__required"},Te=["accept","multiple","disabled","required"],Ie={class:"dm-file-upload__content"},Le={key:0,class:"dm-file-upload__hint"},Me={key:1,class:"dm-file-upload__files"},ze={class:"dm-file-upload__filename"},qe={class:"dm-file-upload__filesize"},Ae=["onClick"],Fe={key:2,class:"dm-file-upload__error"},Oe=k(e.defineComponent({__name:"DatametriaFileUpload",props:{modelValue:{default:()=>[]},label:{},accept:{},multiple:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},required:{type:Boolean,default:!1},error:{}},emits:["update:modelValue"],setup(a,{emit:t}){const l=a,r=t,o=e.ref(),n=e.ref(l.modelValue),s=e.ref(!1),d=()=>{var h;l.disabled||(h=o.value)==null||h.click()},i=h=>{const _=Array.from(h.target.files||[]);u(_)},f=()=>{l.disabled||(s.value=!0)},m=()=>{s.value=!1},p=h=>{var _;if(s.value=!1,!l.disabled){const b=Array.from(((_=h.dataTransfer)==null?void 0:_.files)||[]);u(b)}},u=h=>{n.value=l.multiple?[...n.value,...h]:h,r("update:modelValue",n.value)},$=h=>{n.value.splice(h,1),r("update:modelValue",n.value)},E=h=>{if(h===0)return"0 B";const _=1024,b=["B","KB","MB","GB"],y=Math.floor(Math.log(h)/Math.log(_));return`${(h/Math.pow(_,y)).toFixed(1)} ${b[y]}`};return(h,_)=>(e.openBlock(),e.createElementBlock("div",Ne,[a.label?(e.openBlock(),e.createElementBlock("label",Se,[e.createTextVNode(e.toDisplayString(a.label)+" ",1),a.required?(e.openBlock(),e.createElementBlock("span",we,"*")):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",{class:e.normalizeClass(["dm-file-upload__dropzone",{"dm-file-upload--dragging":s.value,"dm-file-upload__dropzone--dragover":s.value,"dm-file-upload__dropzone--error":a.error}]),onDragover:e.withModifiers(f,["prevent"]),onDragleave:e.withModifiers(m,["prevent"]),onDrop:e.withModifiers(p,["prevent"]),onClick:d},[e.createElementVNode("input",{ref_key:"fileInput",ref:o,type:"file",class:"dm-file-upload__input",accept:a.accept,multiple:a.multiple,disabled:a.disabled,required:a.required,onChange:i},null,40,Te),e.createElementVNode("div",Ie,[_[0]||(_[0]=e.createElementVNode("svg",{class:"dm-file-upload__icon",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor"},[e.createElementVNode("path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4M17 8l-5-5-5 5M12 3v12","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})],-1)),_[1]||(_[1]=e.createElementVNode("p",{class:"dm-file-upload__text"},[e.createElementVNode("span",{class:"dm-file-upload__text--primary"},"Clique para selecionar"),e.createTextVNode(" ou arraste arquivos aqui ")],-1)),a.accept?(e.openBlock(),e.createElementBlock("p",Le,e.toDisplayString(a.accept),1)):e.createCommentVNode("",!0)])],34),n.value.length?(e.openBlock(),e.createElementBlock("div",Me,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(n.value,(b,y)=>(e.openBlock(),e.createElementBlock("div",{key:y,class:"dm-file-upload__file"},[e.createElementVNode("span",ze,e.toDisplayString(b.name),1),e.createElementVNode("span",qe,e.toDisplayString(E(b.size)),1),e.createElementVNode("button",{type:"button",class:"dm-file-upload__remove",onClick:g=>$(y),"aria-label":"Remover arquivo"},"×",8,Ae)]))),128))])):e.createCommentVNode("",!0),a.error?(e.openBlock(),e.createElementBlock("p",Fe,e.toDisplayString(a.error),1)):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-da137679"]]),xe={key:0,class:"dm-autocomplete__required"},Re={class:"dm-autocomplete__wrapper"},Ue=["placeholder","disabled","required","aria-label","aria-expanded","aria-controls","aria-activedescendant"],Pe=["id"],je=["id","aria-selected","onClick","onMouseenter"],Ke={key:1,class:"dm-autocomplete__no-results"},Ge={key:1,class:"dm-autocomplete__error"},He=k(e.defineComponent({__name:"DatametriaAutocomplete",props:{modelValue:{default:""},options:{default:()=>[]},label:{},placeholder:{},disabled:{type:Boolean,default:!1},required:{type:Boolean,default:!1},error:{},ariaLabel:{}},emits:["update:modelValue"],setup(a,{emit:t}){const l=a,r=t,o=`dm-autocomplete-${Math.random().toString(36).substr(2,9)}`,n=e.ref(),s=e.ref(l.modelValue),d=e.ref(!1),i=e.ref(-1),f=e.computed(()=>s.value?l.options.filter(b=>b.toLowerCase().includes(s.value.toLowerCase())):l.options),m=e.computed(()=>i.value>=0?`${o}-option-${i.value}`:void 0);e.watch(()=>l.modelValue,b=>{s.value=b});const p=()=>{d.value=!0,i.value=-1,r("update:modelValue",s.value)},u=()=>{l.disabled||(d.value=!0)},$=()=>{setTimeout(()=>{d.value=!1},200)},E=b=>{s.value=b,r("update:modelValue",b),d.value=!1,i.value=-1},h=b=>{if(!d.value&&b.key!=="Escape"){d.value=!0;return}switch(b.key){case"ArrowDown":b.preventDefault(),i.value=Math.min(i.value+1,f.value.length-1);break;case"ArrowUp":b.preventDefault(),i.value=Math.max(i.value-1,0);break;case"Enter":b.preventDefault(),i.value>=0&&E(f.value[i.value]);break;case"Escape":d.value=!1,i.value=-1;break}},_=b=>{n.value&&!n.value.contains(b.target)&&(d.value=!1)};return e.onMounted(()=>{document.addEventListener("click",_)}),e.onUnmounted(()=>{document.removeEventListener("click",_)}),(b,y)=>(e.openBlock(),e.createElementBlock("div",{class:"dm-autocomplete",ref_key:"autocompleteRef",ref:n},[a.label?(e.openBlock(),e.createElementBlock("label",{key:0,for:o,class:"dm-autocomplete__label"},[e.createTextVNode(e.toDisplayString(a.label)+" ",1),a.required?(e.openBlock(),e.createElementBlock("span",xe,"*")):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",Re,[e.withDirectives(e.createElementVNode("input",{id:o,"onUpdate:modelValue":y[0]||(y[0]=g=>s.value=g),type:"text",class:e.normalizeClass(["dm-autocomplete__input",{"dm-autocomplete__input--error":a.error}]),placeholder:a.placeholder,disabled:a.disabled,required:a.required,"aria-label":a.ariaLabel,"aria-expanded":d.value,"aria-controls":`${o}-listbox`,"aria-activedescendant":m.value,role:"combobox",autocomplete:"off",onInput:p,onFocus:u,onBlur:$,onKeydown:h},null,42,Ue),[[e.vModelText,s.value]]),d.value&&f.value.length?(e.openBlock(),e.createElementBlock("ul",{key:0,id:`${o}-listbox`,class:"dm-autocomplete__dropdown",role:"listbox"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(f.value,(g,V)=>(e.openBlock(),e.createElementBlock("li",{key:V,id:`${o}-option-${V}`,class:e.normalizeClass(["dm-autocomplete__option",{"dm-autocomplete__option--active":V===i.value}]),role:"option","aria-selected":V===i.value,onClick:_t=>E(g),onMouseenter:_t=>i.value=V},e.toDisplayString(g),43,je))),128))],8,Pe)):d.value&&!f.value.length?(e.openBlock(),e.createElementBlock("div",Ke," No results ")):e.createCommentVNode("",!0)]),a.error?(e.openBlock(),e.createElementBlock("p",Ge,e.toDisplayString(a.error),1)):e.createCommentVNode("",!0)],512))}}),[["__scopeId","data-v-782dacde"]]),Je={key:0,class:"datametria-card__header"},We={class:"datametria-card__title"},Ye={class:"datametria-card__content"},Qe={key:1,class:"datametria-card__footer"},Xe=k(e.defineComponent({__name:"DatametriaCard",props:{title:{},padding:{type:Boolean,default:!0}},setup(a){const t=a,l=e.computed(()=>["datametria-card",{"datametria-card--no-padding":!t.padding}]);return(r,o)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(l.value)},[a.title||r.$slots.header?(e.openBlock(),e.createElementBlock("div",Je,[e.renderSlot(r.$slots,"header",{},()=>[e.createElementVNode("h3",We,e.toDisplayString(a.title),1)],!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",Ye,[e.renderSlot(r.$slots,"default",{},void 0,!0)]),r.$slots.footer?(e.openBlock(),e.createElementBlock("div",Qe,[e.renderSlot(r.$slots,"footer",{},void 0,!0)])):e.createCommentVNode("",!0)],2))}}),[["__scopeId","data-v-539a1b0c"]]),Ze={key:0,class:"datametria-modal__header"},ve={class:"datametria-modal__title"},ea={class:"datametria-modal__body"},aa={key:1,class:"datametria-modal__footer"},ta=k(e.defineComponent({__name:"DatametriaModal",props:{modelValue:{type:Boolean},title:{},size:{default:"32rem"},closable:{type:Boolean,default:!0}},emits:["update:modelValue","close"],setup(a,{emit:t}){const l=a,r=t,o=()=>{l.closable&&(r("update:modelValue",!1),r("close"))};return(n,s)=>(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[e.createVNode(e.Transition,{name:"modal"},{default:e.withCtx(()=>[a.modelValue?(e.openBlock(),e.createElementBlock("div",{key:0,class:"datametria-modal",onClick:e.withModifiers(o,["self"])},[e.createElementVNode("div",{class:"datametria-modal__content",style:e.normalizeStyle({maxWidth:a.size})},[a.title||n.$slots.header?(e.openBlock(),e.createElementBlock("div",Ze,[e.renderSlot(n.$slots,"header",{},()=>[e.createElementVNode("h3",ve,e.toDisplayString(a.title),1)],!0),a.closable?(e.openBlock(),e.createElementBlock("button",{key:0,class:"datametria-modal__close",onClick:o}," × ")):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",ea,[e.renderSlot(n.$slots,"default",{},void 0,!0)]),n.$slots.footer?(e.openBlock(),e.createElementBlock("div",aa,[e.renderSlot(n.$slots,"footer",{},void 0,!0)])):e.createCommentVNode("",!0)],4)])):e.createCommentVNode("",!0)]),_:3})]))}}),[["__scopeId","data-v-8aa80965"]]),la=k(e.defineComponent({__name:"DatametriaContainer",props:{size:{default:"lg"},fluid:{type:Boolean,default:!1}},setup(a){return(t,l)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["dm-container",[`dm-container--${a.size}`,{"dm-container--fluid":a.fluid}]])},[e.renderSlot(t.$slots,"default",{},void 0,!0)],2))}}),[["__scopeId","data-v-4cc8678e"]]),oa=k(e.defineComponent({__name:"DatametriaGrid",props:{cols:{default:12},gap:{default:"var(--dm-space-4)"}},setup(a){return(t,l)=>(e.openBlock(),e.createElementBlock("div",{class:"dm-grid",style:e.normalizeStyle({"--dm-grid-cols":a.cols,"--dm-grid-gap":a.gap})},[e.renderSlot(t.$slots,"default",{},void 0,!0)],4))}}),[["__scopeId","data-v-9e2c1279"]]),na=["role","aria-orientation"],ra={key:0,class:"dm-divider__label"},sa=k(e.defineComponent({__name:"DatametriaDivider",props:{orientation:{default:"horizontal"},dashed:{type:Boolean,default:!1},label:{}},setup(a){return(t,l)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["dm-divider",[`dm-divider--${a.orientation}`,{"dm-divider--dashed":a.dashed}]]),role:a.orientation==="horizontal"?"separator":void 0,"aria-orientation":a.orientation},[t.$slots.default||a.label?(e.openBlock(),e.createElementBlock("span",ra,[e.renderSlot(t.$slots,"default",{},()=>[e.createTextVNode(e.toDisplayString(a.label),1)],!0)])):e.createCommentVNode("",!0)],10,na))}}),[["__scopeId","data-v-b0655e4c"]]),da={class:"datametria-alert__icon"},ca={key:0},ia={key:1},ma={key:2},fa={key:3},ka={class:"datametria-alert__content"},ba={key:0,class:"datametria-alert__title"},ha={class:"datametria-alert__message"},pa=k(e.defineComponent({__name:"DatametriaAlert",props:{modelValue:{type:Boolean,default:!0},variant:{default:"info"},title:{},message:{},closable:{type:Boolean,default:!0}},emits:["update:modelValue"],setup(a){const t=a,l=e.computed(()=>["datametria-alert",`datametria-alert--${t.variant}`]);return(r,o)=>a.modelValue?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(l.value)},[e.createElementVNode("div",da,[a.variant==="success"?(e.openBlock(),e.createElementBlock("span",ca,"✓")):a.variant==="error"?(e.openBlock(),e.createElementBlock("span",ia,"✕")):a.variant==="warning"?(e.openBlock(),e.createElementBlock("span",ma,"⚠")):(e.openBlock(),e.createElementBlock("span",fa,"ℹ"))]),e.createElementVNode("div",ka,[a.title?(e.openBlock(),e.createElementBlock("h4",ba,e.toDisplayString(a.title),1)):e.createCommentVNode("",!0),e.createElementVNode("p",ha,[e.renderSlot(r.$slots,"default",{},()=>[e.createTextVNode(e.toDisplayString(a.message),1)],!0)])]),a.closable?(e.openBlock(),e.createElementBlock("button",{key:0,class:"datametria-alert__close",onClick:o[0]||(o[0]=n=>r.$emit("update:modelValue",!1))}," × ")):e.createCommentVNode("",!0)],2)):e.createCommentVNode("",!0)}}),[["__scopeId","data-v-a27dad03"]]),_a=["aria-live"],ua={class:"dm-toast__content"},Ba={class:"dm-toast__message"},ya=k(e.defineComponent({__name:"DatametriaToast",props:{message:{},variant:{default:"info"},duration:{default:3e3},closable:{type:Boolean,default:!0},modelValue:{type:Boolean,default:!1}},emits:["update:modelValue","close"],setup(a,{emit:t}){const l=a,r=t,o=e.ref(l.modelValue);let n=null;e.watch(()=>l.modelValue,i=>{o.value=i,i&&l.duration>0&&s()});const s=()=>{n&&clearTimeout(n),n=setTimeout(()=>{d()},l.duration)},d=()=>{o.value=!1,r("update:modelValue",!1),r("close"),n&&clearTimeout(n)};return e.onMounted(()=>{o.value&&l.duration>0&&s()}),(i,f)=>(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[e.createVNode(e.Transition,{name:"dm-toast"},{default:e.withCtx(()=>[o.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["dm-toast",`dm-toast--${a.variant}`]),role:"alert","aria-live":a.variant==="error"?"assertive":"polite"},[e.createElementVNode("div",ua,[e.createElementVNode("span",Ba,e.toDisplayString(a.message),1),a.closable?(e.openBlock(),e.createElementBlock("button",{key:0,class:"dm-toast__close",onClick:d,"aria-label":"Fechar"},"×")):e.createCommentVNode("",!0)])],10,_a)):e.createCommentVNode("",!0)]),_:1})]))}}),[["__scopeId","data-v-f6096907"]]),$a={class:"dm-progress"},ga={key:0,class:"dm-progress__header"},Va={class:"dm-progress__label"},Ea={key:0,class:"dm-progress__value"},Ca=["aria-valuenow","aria-label"],Da=k(e.defineComponent({__name:"DatametriaProgress",props:{value:{},label:{},variant:{default:"primary"},showValue:{type:Boolean,default:!0},ariaLabel:{}},setup(a){const t=a,l=e.computed(()=>Math.min(Math.max(t.value,0),100));return(r,o)=>(e.openBlock(),e.createElementBlock("div",$a,[a.label?(e.openBlock(),e.createElementBlock("div",ga,[e.createElementVNode("span",Va,e.toDisplayString(a.label),1),a.showValue?(e.openBlock(),e.createElementBlock("span",Ea,e.toDisplayString(a.value)+"%",1)):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",{class:"dm-progress__track",role:"progressbar","aria-valuenow":a.value,"aria-valuemin":0,"aria-valuemax":100,"aria-label":a.ariaLabel||a.label},[e.createElementVNode("div",{class:e.normalizeClass(["dm-progress__bar",`dm-progress__bar--${a.variant}`]),style:e.normalizeStyle({width:`${l.value}%`})},null,6)],8,Ca)]))}}),[["__scopeId","data-v-6c9ef263"]]),Na=["aria-label"],Sa={key:0,class:"dm-spinner__label"},wa=k(e.defineComponent({__name:"DatametriaSpinner",props:{size:{default:"md"},variant:{default:"primary"},label:{},ariaLabel:{default:"Carregando"}},setup(a){return(t,l)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["dm-spinner",[`dm-spinner--${a.size}`,`dm-spinner--${a.variant}`]]),role:"status","aria-label":a.ariaLabel},[l[0]||(l[0]=e.createElementVNode("svg",{class:"dm-spinner__svg",viewBox:"0 0 50 50"},[e.createElementVNode("circle",{class:"dm-spinner__circle",cx:"25",cy:"25",r:"20",fill:"none","stroke-width":"4"})],-1)),a.label?(e.openBlock(),e.createElementBlock("span",Sa,e.toDisplayString(a.label),1)):e.createCommentVNode("",!0)],10,Na))}}),[["__scopeId","data-v-013214f1"]]),Ta={class:"datametria-table"},Ia={class:"datametria-table__table"},La={class:"datametria-table__thead"},Ma={class:"datametria-table__tbody"},za={key:0,class:"datametria-table__empty"},qa=k(e.defineComponent({__name:"DatametriaTable",props:{columns:{},data:{}},setup(a){return(t,l)=>(e.openBlock(),e.createElementBlock("div",Ta,[e.createElementVNode("table",Ia,[e.createElementVNode("thead",La,[e.createElementVNode("tr",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.columns,r=>(e.openBlock(),e.createElementBlock("th",{key:r.key,class:"datametria-table__th",style:e.normalizeStyle({width:r.width})},e.toDisplayString(r.label),5))),128))])]),e.createElementVNode("tbody",Ma,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.data,(r,o)=>(e.openBlock(),e.createElementBlock("tr",{key:o,class:"datametria-table__tr"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.columns,n=>(e.openBlock(),e.createElementBlock("td",{key:n.key,class:"datametria-table__td"},[e.renderSlot(t.$slots,`cell-${n.key}`,{row:r,value:r[n.key]},()=>[e.createTextVNode(e.toDisplayString(r[n.key]),1)],!0)]))),128))]))),128))])]),a.data.length===0?(e.openBlock(),e.createElementBlock("div",za,[e.renderSlot(t.$slots,"empty",{},()=>[l[0]||(l[0]=e.createTextVNode("Nenhum dado disponível",-1))],!0)])):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-7700c903"]]),Aa=["aria-label"],Fa=["src","alt"],Oa={key:1,class:"dm-avatar__initials"},xa=k(e.defineComponent({__name:"DatametriaAvatar",props:{src:{},name:{},alt:{},size:{default:"md"},rounded:{type:Boolean,default:!1},ariaLabel:{}},setup(a){const t=a,l=e.ref(!1),r=e.computed(()=>{if(!t.name)return"?";const n=t.name.trim().split(" ");return n.length===1?n[0].charAt(0).toUpperCase():(n[0].charAt(0)+n[n.length-1].charAt(0)).toUpperCase()}),o=()=>{l.value=!0};return(n,s)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["dm-avatar",[`dm-avatar--${a.size}`,{"dm-avatar--rounded":a.rounded}]]),"aria-label":a.ariaLabel||a.name},[a.src?(e.openBlock(),e.createElementBlock("img",{key:0,src:a.src,alt:a.alt||a.name,class:"dm-avatar__image",onError:o},null,40,Fa)):(e.openBlock(),e.createElementBlock("span",Oa,e.toDisplayString(r.value),1))],10,Aa))}}),[["__scopeId","data-v-898cb5d7"]]),Ra=["aria-label"],Ua=k(e.defineComponent({__name:"DatametriaBadge",props:{label:{},variant:{default:"primary"},size:{default:"md"},ariaLabel:{}},setup(a){return(t,l)=>(e.openBlock(),e.createElementBlock("span",{class:e.normalizeClass(["dm-badge",[`dm-badge--${a.variant}`,`dm-badge--${a.size}`]]),"aria-label":a.ariaLabel},[e.renderSlot(t.$slots,"default",{},()=>[e.createTextVNode(e.toDisplayString(a.label),1)],!0)],10,Ra))}}),[["__scopeId","data-v-843741c5"]]),Pa=["role","tabindex","onKeydown"],ja={key:0,class:"dm-chip__icon"},Ka={class:"dm-chip__label"},Ga=k(e.defineComponent({__name:"DatametriaChip",props:{label:{},variant:{default:"default"},closable:{type:Boolean,default:!1},clickable:{type:Boolean,default:!1}},emits:["click","close"],setup(a,{emit:t}){const l=t,r=()=>{l("click")},o=()=>{l("close")};return(n,s)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["dm-chip",[`dm-chip--${a.variant}`,{"dm-chip--clickable":a.clickable}]]),role:a.clickable?"button":void 0,tabindex:a.clickable?0:void 0,onClick:r,onKeydown:[e.withKeys(r,["enter"]),e.withKeys(e.withModifiers(r,["prevent"]),["space"])]},[n.$slots.icon?(e.openBlock(),e.createElementBlock("span",ja,[e.renderSlot(n.$slots,"icon",{},void 0,!0)])):e.createCommentVNode("",!0),e.createElementVNode("span",Ka,[e.renderSlot(n.$slots,"default",{},()=>[e.createTextVNode(e.toDisplayString(a.label),1)],!0)]),a.closable?(e.openBlock(),e.createElementBlock("button",{key:1,class:"dm-chip__close",onClick:e.withModifiers(o,["stop"]),"aria-label":"Remover",type:"button"},"×")):e.createCommentVNode("",!0)],42,Pa))}}),[["__scopeId","data-v-0d7ae680"]]),Ha=["aria-label"],Ja={class:"dm-navbar__container"},Wa={class:"dm-navbar__brand"},Ya={href:"/",class:"dm-navbar__logo"},Qa=["aria-expanded"],Xa={key:1,class:"dm-navbar__actions"},Za=k(e.defineComponent({__name:"DatametriaNavbar",props:{brand:{default:""},variant:{default:"light"},sticky:{type:Boolean,default:!1},transparent:{type:Boolean,default:!1},bordered:{type:Boolean,default:!1},ariaLabel:{default:"Main navigation"}},setup(a){const t=a,l=e.ref(!1),r=()=>{l.value=!l.value};return(o,n)=>(e.openBlock(),e.createElementBlock("nav",{class:e.normalizeClass(["dm-navbar",[`dm-navbar--${t.variant}`,{"dm-navbar--sticky":t.sticky},{"dm-navbar--transparent":t.transparent},{"dm-navbar--bordered":t.bordered}]]),role:"navigation","aria-label":t.ariaLabel},[e.createElementVNode("div",Ja,[e.createElementVNode("div",Wa,[e.renderSlot(o.$slots,"brand",{},()=>[e.createElementVNode("a",Ya,e.toDisplayString(a.brand),1)],!0)]),o.$slots.menu?(e.openBlock(),e.createElementBlock("button",{key:0,class:"dm-navbar__toggle","aria-expanded":l.value,"aria-controls":"navbar-menu",onClick:r},[...n[0]||(n[0]=[e.createElementVNode("span",{class:"dm-navbar__toggle-icon"},null,-1)])],8,Qa)):e.createCommentVNode("",!0),e.createElementVNode("div",{id:"navbar-menu",class:e.normalizeClass(["dm-navbar__menu",{"dm-navbar__menu--open":l.value}])},[e.renderSlot(o.$slots,"menu",{},void 0,!0)],2),o.$slots.actions?(e.openBlock(),e.createElementBlock("div",Xa,[e.renderSlot(o.$slots,"actions",{},void 0,!0)])):e.createCommentVNode("",!0)])],10,Ha))}}),[["__scopeId","data-v-adcb6d0c"]]),va={class:"dm-breadcrumb","aria-label":"Breadcrumb"},et={class:"dm-breadcrumb__list"},at=["href","onClick"],tt=["aria-current"],lt={key:2,class:"dm-breadcrumb__separator","aria-hidden":"true"},ot=k(e.defineComponent({__name:"DatametriaBreadcrumb",props:{items:{},separator:{default:"/"}},emits:["click"],setup(a,{emit:t}){const l=t,r=(o,n,s)=>{l("click",n,s)};return(o,n)=>(e.openBlock(),e.createElementBlock("nav",va,[e.createElementVNode("ol",et,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.items,(s,d)=>(e.openBlock(),e.createElementBlock("li",{key:d,class:"dm-breadcrumb__item"},[s.href&&d<a.items.length-1?(e.openBlock(),e.createElementBlock("a",{key:0,href:s.href,class:"dm-breadcrumb__link",onClick:i=>r(i,s,d)},e.toDisplayString(s.label),9,at)):(e.openBlock(),e.createElementBlock("span",{key:1,class:"dm-breadcrumb__current","aria-current":d===a.items.length-1?"page":void 0},e.toDisplayString(s.label),9,tt)),d<a.items.length-1?(e.openBlock(),e.createElementBlock("span",lt,e.toDisplayString(a.separator),1)):e.createCommentVNode("",!0)]))),128))])]))}}),[["__scopeId","data-v-17c32ee3"]]),nt={class:"dm-tabs"},rt=["aria-label"],st=["id","aria-selected","aria-controls","tabindex","onClick","onKeydown"],dt={class:"dm-tabs__panels"},ct=["id","aria-labelledby","hidden"],it=k(e.defineComponent({__name:"DatametriaTabs",props:{tabs:{},modelValue:{default:0},ariaLabel:{default:"Tabs"}},emits:["update:modelValue"],setup(a,{emit:t}){const l=a,r=t,o=e.ref(l.modelValue);e.watch(()=>l.modelValue,d=>{o.value=d});const n=d=>{o.value=d,r("update:modelValue",d)},s=(d,i)=>{var m;let f=i;switch(d.key){case"ArrowLeft":d.preventDefault(),f=i>0?i-1:l.tabs.length-1;break;case"ArrowRight":d.preventDefault(),f=i<l.tabs.length-1?i+1:0;break;case"Home":d.preventDefault(),f=0;break;case"End":d.preventDefault(),f=l.tabs.length-1;break;default:return}n(f),(m=document.getElementById(`tab-${f}`))==null||m.focus()};return(d,i)=>(e.openBlock(),e.createElementBlock("div",nt,[e.createElementVNode("div",{class:"dm-tabs__header",role:"tablist","aria-label":a.ariaLabel},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.tabs,(f,m)=>(e.openBlock(),e.createElementBlock("button",{key:m,id:`tab-${m}`,class:e.normalizeClass(["dm-tabs__tab",{"dm-tabs__tab--active":o.value===m}]),role:"tab","aria-selected":o.value===m,"aria-controls":`panel-${m}`,tabindex:o.value===m?0:-1,onClick:p=>n(m),onKeydown:p=>s(p,m)},e.toDisplayString(f),43,st))),128)),e.createElementVNode("div",{class:"dm-tabs__indicator",style:e.normalizeStyle({transform:`translateX(${o.value*100}%)`})},null,4)],8,rt),e.createElementVNode("div",dt,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.tabs,(f,m)=>(e.openBlock(),e.createElementBlock("div",{key:m,id:`panel-${m}`,class:e.normalizeClass(["dm-tabs__panel",{"dm-tabs__panel--active":o.value===m}]),role:"tabpanel","aria-labelledby":`tab-${m}`,hidden:o.value!==m},[e.renderSlot(d.$slots,`panel-${m}`,{},void 0,!0)],10,ct))),128))])]))}}),[["__scopeId","data-v-6d59d320"]]);let B=e.ref(!1),N=!1;function mt(){const a=()=>{B.value=!B.value,document.documentElement.classList.toggle("dark",B.value),localStorage.setItem("theme",B.value?"dark":"light")},t=s=>{B.value=s==="dark",document.documentElement.classList.toggle("dark",B.value),localStorage.setItem("theme",s)},l=()=>{N=!0;const s=localStorage.getItem("theme");if(s)t(s);else if(typeof window<"u"&&window.matchMedia){const d=window.matchMedia("(prefers-color-scheme: dark)").matches;t(d?"dark":"light")}typeof window<"u"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",d=>{localStorage.getItem("theme")||t(d.matches?"dark":"light")})};N||l();const r=e.computed(()=>B.value?"dark":"light");return{isDark:B,currentTheme:r,toggle:a,setTheme:t,setDark:()=>t("dark"),setLight:()=>t("light"),initTheme:l}}const S=a=>!!a,w=a=>a?/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(a):!0,T=a=>t=>t?t.length>=a:!0,I=a=>t=>t?t.length<=a:!0,L=a=>t=>t?a.test(t):!0,M=a=>t=>a(t);function ft(){return{required:S,email:w,minLength:T,maxLength:I,pattern:L,custom:M}}function kt(a={}){const t=e.ref(!1),l=e.ref(null),r=e.ref(null),o=async(f,m={})=>{t.value=!0,l.value=null;try{const p=a.baseURL?`${a.baseURL}${f}`:f,u=await fetch(p,{...m,headers:{"Content-Type":"application/json",...a.headers,...m.headers}});if(!u.ok)throw new Error(`HTTP ${u.status}: ${u.statusText}`);const $=await u.json();return r.value=$,$}catch(p){throw l.value=p.message||"Request failed",p}finally{t.value=!1}};return{loading:t,error:l,data:r,get:(f,m)=>o(f,{...m,method:"GET"}),post:(f,m,p)=>o(f,{...p,method:"POST",body:JSON.stringify(m)}),put:(f,m,p)=>o(f,{...p,method:"PUT",body:JSON.stringify(m)}),delete:(f,m)=>o(f,{...m,method:"DELETE"})}}function bt(a,t){const l=localStorage.getItem(a);let r=t;if(l)try{r=JSON.parse(l)}catch{r=t}const o=e.ref(r);return e.watch(o,n=>{localStorage.setItem(a,JSON.stringify(n))},{deep:!0}),o}function ht(a,t=300){const l=e.ref(a.value);let r=null;return e.watch(a,o=>{r&&clearTimeout(r),r=setTimeout(()=>{l.value=o},t)}),l}function pt(){const a=e.ref(!1),t=e.ref(null);return{copied:a,error:t,copy:async o=>{try{return await navigator.clipboard.writeText(o),a.value=!0,t.value=null,setTimeout(()=>{a.value=!1},2e3),!0}catch(n){return t.value=n.message||"Copy failed",a.value=!1,!1}},read:async()=>{try{const o=await navigator.clipboard.readText();return t.value=null,o}catch(o){return t.value=o.message||"Read failed",""}}}}c.DatametriaAlert=pa,c.DatametriaAutocomplete=He,c.DatametriaAvatar=xa,c.DatametriaBadge=Ua,c.DatametriaBreadcrumb=ot,c.DatametriaButton=F,c.DatametriaCard=Xe,c.DatametriaCheckbox=ae,c.DatametriaChip=Ga,c.DatametriaContainer=la,c.DatametriaDatePicker=De,c.DatametriaDivider=sa,c.DatametriaFileUpload=Oe,c.DatametriaGrid=oa,c.DatametriaInput=j,c.DatametriaModal=ta,c.DatametriaNavbar=Za,c.DatametriaProgress=Da,c.DatametriaRadio=se,c.DatametriaSelect=X,c.DatametriaSpinner=wa,c.DatametriaSwitch=ke,c.DatametriaTable=qa,c.DatametriaTabs=it,c.DatametriaTextarea=ye,c.DatametriaToast=ya,c.custom=M,c.email=w,c.maxLength=I,c.minLength=T,c.pattern=L,c.required=S,c.useAPI=kt,c.useClipboard=pt,c.useDebounce=ht,c.useLocalStorage=bt,c.useTheme=mt,c.useValidation=ft,Object.defineProperty(c,Symbol.toStringTag,{value:"Module"})}));
@@ -0,0 +1 @@
1
+ .datametria-button[data-v-e9850b65]{display:inline-flex;align-items:center;justify-content:center;font-weight:500;border-radius:var(--dm-radius);transition:var(--dm-transition);cursor:pointer;border:1px solid transparent;font-family:var(--dm-font-sans, -apple-system, sans-serif);touch-action:manipulation;-webkit-tap-highlight-color:transparent}.datametria-button--primary[data-v-e9850b65]{background:var(--dm-primary);color:#fff}.datametria-button--primary[data-v-e9850b65]:hover:not(:disabled){background:#005ba3}.datametria-button--primary[data-v-e9850b65]:focus-visible{outline:none;box-shadow:var(--dm-focus-ring)}.datametria-button--secondary[data-v-e9850b65]{background:var(--dm-secondary);color:#fff}.datametria-button--secondary[data-v-e9850b65]:focus-visible{outline:none;box-shadow:0 0 0 3px #4b00781a}.datametria-button--outline[data-v-e9850b65]{background:transparent;border-color:var(--dm-primary);color:var(--dm-primary)}.datametria-button--outline[data-v-e9850b65]:focus-visible{outline:none;box-shadow:var(--dm-focus-ring)}.datametria-button--ghost[data-v-e9850b65]{background:transparent;color:#0072ce}.datametria-button--sm[data-v-e9850b65]{padding:var(--dm-space-2) var(--dm-space-4);font-size:var(--dm-text-sm);min-height:2rem}.datametria-button--md[data-v-e9850b65]{padding:var(--dm-space-3) calc(var(--dm-space-4) * 1.5);font-size:var(--dm-text-base);min-height:2.5rem}.datametria-button--lg[data-v-e9850b65]{padding:var(--dm-space-4) calc(var(--dm-space-4) * 2);font-size:var(--dm-text-lg);min-height:3rem}@media(max-width:640px){.datametria-button--sm[data-v-e9850b65]{min-height:2.25rem}.datametria-button--md[data-v-e9850b65]{min-height:2.75rem}.datametria-button--lg[data-v-e9850b65]{min-height:3.25rem}}.datametria-button--full-width[data-v-e9850b65]{width:100%}.datametria-button--disabled[data-v-e9850b65],.datametria-button[data-v-e9850b65]:disabled{opacity:.5;cursor:not-allowed}.spinner[data-v-e9850b65]{width:1rem;height:1rem;border:2px solid currentColor;border-top-color:transparent;border-radius:50%;animation:spin-e9850b65 .6s linear infinite;margin-right:.5rem}@keyframes spin-e9850b65{to{transform:rotate(360deg)}}.datametria-input[data-v-cae54108]{display:flex;flex-direction:column;gap:.5rem}.datametria-input__label[data-v-cae54108]{font-size:.875rem;font-weight:500;color:#374151}.datametria-input__required[data-v-cae54108]{color:#ef4444}.datametria-input__field[data-v-cae54108]{padding:.75rem;border:1px solid #d1d5db;border-radius:.375rem;font-size:1rem;transition:all .2s}.datametria-input__field[data-v-cae54108]:focus{outline:none;border-color:#0072ce;box-shadow:0 0 0 3px #0072ce1a}.datametria-input__field--error[data-v-cae54108]{border-color:#ef4444}.datametria-input__field--disabled[data-v-cae54108]{background:#f3f4f6;cursor:not-allowed}.datametria-input__error[data-v-cae54108]{font-size:.875rem;color:#ef4444;margin:0}.datametria-select[data-v-96f4e8ce]{display:flex;flex-direction:column;gap:.5rem}.datametria-select__label[data-v-96f4e8ce]{font-size:.875rem;font-weight:500;color:#374151}.datametria-select__required[data-v-96f4e8ce]{color:#ef4444}.datametria-select__field[data-v-96f4e8ce]{padding:.75rem;border:1px solid #d1d5db;border-radius:.375rem;font-size:1rem;background:#fff;cursor:pointer;transition:all .2s}.datametria-select__field[data-v-96f4e8ce]:focus{outline:none;border-color:#0072ce;box-shadow:0 0 0 3px #0072ce1a}.datametria-select__field--error[data-v-96f4e8ce]{border-color:#ef4444}.datametria-select__field--disabled[data-v-96f4e8ce]{background:#f3f4f6;cursor:not-allowed}.datametria-select__error[data-v-96f4e8ce]{font-size:.875rem;color:#ef4444;margin:0}.datametria-checkbox[data-v-3226ffd6]{display:inline-flex;align-items:center;gap:.5rem;cursor:pointer;-webkit-user-select:none;user-select:none}.datametria-checkbox__input[data-v-3226ffd6]{position:absolute;opacity:0;cursor:pointer}.datametria-checkbox__checkmark[data-v-3226ffd6]{position:relative;width:1.25rem;height:1.25rem;border:2px solid #d1d5db;border-radius:.25rem;transition:all .2s}.datametria-checkbox__input:checked~.datametria-checkbox__checkmark[data-v-3226ffd6]{background:#0072ce;border-color:#0072ce}.datametria-checkbox__input:checked~.datametria-checkbox__checkmark[data-v-3226ffd6]:after{content:"";position:absolute;left:.375rem;top:.125rem;width:.375rem;height:.625rem;border:solid white;border-width:0 2px 2px 0;transform:rotate(45deg)}.datametria-checkbox__input:disabled~.datametria-checkbox__checkmark[data-v-3226ffd6]{background:#f3f4f6;cursor:not-allowed}.datametria-checkbox__label[data-v-3226ffd6]{font-size:.875rem;color:#374151}.dm-radio[data-v-4fb0fa6f]{display:flex;flex-direction:column;gap:var(--dm-space-1)}.dm-radio__label[data-v-4fb0fa6f]{display:inline-flex;align-items:center;gap:var(--dm-space-2);cursor:pointer;min-height:44px;padding:var(--dm-space-2);-webkit-user-select:none;user-select:none}.dm-radio__label[data-v-4fb0fa6f]:has(.dm-radio__input:disabled){cursor:not-allowed;opacity:.5}.dm-radio__input[data-v-4fb0fa6f]{position:absolute;opacity:0;width:0;height:0}.dm-radio__checkmark[data-v-4fb0fa6f]{position:relative;width:20px;height:20px;border:2px solid var(--dm-gray-400);border-radius:50%;background:var(--dm-white);transition:var(--dm-transition);flex-shrink:0}.dm-radio__input:checked+.dm-radio__checkmark[data-v-4fb0fa6f]{border-color:var(--dm-primary);background:var(--dm-primary)}.dm-radio__input:checked+.dm-radio__checkmark[data-v-4fb0fa6f]:after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:8px;height:8px;border-radius:50%;background:var(--dm-white)}.dm-radio__input:focus-visible+.dm-radio__checkmark[data-v-4fb0fa6f]{outline:var(--dm-focus-ring);outline-offset:2px}.dm-radio__input:disabled+.dm-radio__checkmark[data-v-4fb0fa6f]{background:var(--dm-gray-100);border-color:var(--dm-gray-300)}.dm-radio__text[data-v-4fb0fa6f]{color:var(--dm-text-primary);font-size:var(--dm-text-base);line-height:1.5}.dm-radio__error[data-v-4fb0fa6f]{color:var(--dm-error);font-size:var(--dm-text-sm);margin:0}@media(prefers-color-scheme:dark){.dm-radio__checkmark[data-v-4fb0fa6f]{background:var(--dm-gray-800);border-color:var(--dm-gray-600)}.dm-radio__input:disabled+.dm-radio__checkmark[data-v-4fb0fa6f]{background:var(--dm-gray-900);border-color:var(--dm-gray-700)}}.dm-switch[data-v-f57b4d9a]{display:flex;flex-direction:column;gap:var(--dm-space-1)}.dm-switch__label[data-v-f57b4d9a]{display:inline-flex;align-items:center;gap:var(--dm-space-3);cursor:pointer;min-height:44px;padding:var(--dm-space-2);-webkit-user-select:none;user-select:none}.dm-switch__label[data-v-f57b4d9a]:has(.dm-switch__input:disabled){cursor:not-allowed;opacity:.5}.dm-switch__input[data-v-f57b4d9a]{position:absolute;opacity:0;width:0;height:0}.dm-switch__track[data-v-f57b4d9a]{position:relative;width:44px;height:24px;background:var(--dm-gray-300);border-radius:12px;transition:var(--dm-transition);flex-shrink:0}.dm-switch__thumb[data-v-f57b4d9a]{position:absolute;top:2px;left:2px;width:20px;height:20px;background:var(--dm-white);border-radius:50%;transition:var(--dm-transition);box-shadow:0 2px 4px #0003}.dm-switch__input:checked+.dm-switch__track[data-v-f57b4d9a]{background:var(--dm-primary)}.dm-switch__input:checked+.dm-switch__track .dm-switch__thumb[data-v-f57b4d9a]{transform:translate(20px)}.dm-switch__input:focus-visible+.dm-switch__track[data-v-f57b4d9a]{outline:var(--dm-focus-ring);outline-offset:2px}.dm-switch__input:disabled+.dm-switch__track[data-v-f57b4d9a]{background:var(--dm-gray-200)}.dm-switch__text[data-v-f57b4d9a]{color:var(--dm-text-primary);font-size:var(--dm-text-base);line-height:1.5}.dm-switch__error[data-v-f57b4d9a]{color:var(--dm-error);font-size:var(--dm-text-sm);margin:0}@media(prefers-color-scheme:dark){.dm-switch__track[data-v-f57b4d9a]{background:var(--dm-gray-700)}.dm-switch__input:disabled+.dm-switch__track[data-v-f57b4d9a]{background:var(--dm-gray-800)}}.dm-textarea[data-v-e9253798]{display:flex;flex-direction:column;gap:var(--dm-space-2)}.dm-textarea__label[data-v-e9253798]{color:var(--dm-text-primary);font-size:var(--dm-text-sm);font-weight:500}.dm-textarea__required[data-v-e9253798]{color:var(--dm-error)}.dm-textarea__input[data-v-e9253798]{width:100%;padding:var(--dm-space-3);border:1px solid var(--dm-gray-300);border-radius:var(--dm-radius);font-size:var(--dm-text-base);color:var(--dm-text-primary);background:var(--dm-white);transition:var(--dm-transition);resize:vertical;font-family:inherit;line-height:1.5}.dm-textarea__input[data-v-e9253798]::placeholder{color:var(--dm-gray-400)}.dm-textarea__input[data-v-e9253798]:hover:not(:disabled){border-color:var(--dm-gray-400)}.dm-textarea__input[data-v-e9253798]:focus{outline:var(--dm-focus-ring);outline-offset:0;border-color:var(--dm-primary)}.dm-textarea__input[data-v-e9253798]:disabled{background:var(--dm-gray-100);cursor:not-allowed;opacity:.6}.dm-textarea__input--error[data-v-e9253798]{border-color:var(--dm-error)}.dm-textarea__input--error[data-v-e9253798]:focus{outline-color:var(--dm-error)}.dm-textarea__footer[data-v-e9253798]{display:flex;justify-content:space-between;align-items:center;gap:var(--dm-space-2)}.dm-textarea__error[data-v-e9253798]{color:var(--dm-error);font-size:var(--dm-text-sm);margin:0;flex:1}.dm-textarea__counter[data-v-e9253798]{color:var(--dm-gray-500);font-size:var(--dm-text-sm);white-space:nowrap}@media(prefers-color-scheme:dark){.dm-textarea__input[data-v-e9253798]{background:var(--dm-gray-800);border-color:var(--dm-gray-600);color:var(--dm-white)}.dm-textarea__input[data-v-e9253798]:disabled{background:var(--dm-gray-900)}}.dm-datepicker[data-v-8bf1e9ec]{display:flex;flex-direction:column;gap:var(--dm-space-2)}.dm-datepicker__label[data-v-8bf1e9ec]{color:var(--dm-text-primary);font-size:var(--dm-text-sm);font-weight:500}.dm-datepicker__required[data-v-8bf1e9ec]{color:var(--dm-error)}.dm-datepicker__wrapper[data-v-8bf1e9ec]{position:relative}.dm-datepicker__input[data-v-8bf1e9ec]{width:100%;min-height:44px;padding:var(--dm-space-3);border:1px solid var(--dm-gray-300);border-radius:var(--dm-radius);font-size:var(--dm-text-base);color:var(--dm-text-primary);background:var(--dm-white);transition:var(--dm-transition);font-family:inherit}.dm-datepicker__input[data-v-8bf1e9ec]:hover:not(:disabled){border-color:var(--dm-gray-400)}.dm-datepicker__input[data-v-8bf1e9ec]:focus{outline:var(--dm-focus-ring);outline-offset:0;border-color:var(--dm-primary)}.dm-datepicker__input[data-v-8bf1e9ec]:disabled{background:var(--dm-gray-100);cursor:not-allowed;opacity:.6}.dm-datepicker__input--error[data-v-8bf1e9ec]{border-color:var(--dm-error)}.dm-datepicker__input--error[data-v-8bf1e9ec]:focus{outline-color:var(--dm-error)}.dm-datepicker__error[data-v-8bf1e9ec]{color:var(--dm-error);font-size:var(--dm-text-sm);margin:0}@media(prefers-color-scheme:dark){.dm-datepicker__input[data-v-8bf1e9ec]{background:var(--dm-gray-800);border-color:var(--dm-gray-600);color:var(--dm-white);color-scheme:dark}.dm-datepicker__input[data-v-8bf1e9ec]:disabled{background:var(--dm-gray-900)}}.dm-file-upload[data-v-da137679]{display:flex;flex-direction:column;gap:var(--dm-space-2)}.dm-file-upload__label[data-v-da137679]{color:var(--dm-text-primary);font-size:var(--dm-text-sm);font-weight:500}.dm-file-upload__required[data-v-da137679]{color:var(--dm-error)}.dm-file-upload__dropzone[data-v-da137679]{border:2px dashed var(--dm-gray-300);border-radius:var(--dm-radius);padding:var(--dm-space-6);text-align:center;cursor:pointer;transition:var(--dm-transition);background:var(--dm-white)}.dm-file-upload__dropzone[data-v-da137679]:hover{border-color:var(--dm-primary);background:var(--dm-gray-50)}.dm-file-upload__dropzone--dragover[data-v-da137679]{border-color:var(--dm-primary);background:var(--dm-primary-light, rgba(0, 114, 206, .1))}.dm-file-upload__dropzone--error[data-v-da137679]{border-color:var(--dm-error)}.dm-file-upload__input[data-v-da137679]{display:none}.dm-file-upload__content[data-v-da137679]{display:flex;flex-direction:column;align-items:center;gap:var(--dm-space-2)}.dm-file-upload__icon[data-v-da137679]{width:48px;height:48px;color:var(--dm-gray-400)}.dm-file-upload__text[data-v-da137679]{color:var(--dm-text-secondary);font-size:var(--dm-text-sm);margin:0}.dm-file-upload__text--primary[data-v-da137679]{color:var(--dm-primary);font-weight:500}.dm-file-upload__hint[data-v-da137679]{color:var(--dm-gray-500);font-size:var(--dm-text-xs);margin:0}.dm-file-upload__files[data-v-da137679]{display:flex;flex-direction:column;gap:var(--dm-space-2)}.dm-file-upload__file[data-v-da137679]{display:flex;align-items:center;gap:var(--dm-space-2);padding:var(--dm-space-2) var(--dm-space-3);background:var(--dm-gray-50);border-radius:var(--dm-radius)}.dm-file-upload__filename[data-v-da137679]{flex:1;font-size:var(--dm-text-sm);color:var(--dm-text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dm-file-upload__filesize[data-v-da137679]{font-size:var(--dm-text-xs);color:var(--dm-gray-500)}.dm-file-upload__remove[data-v-da137679]{width:24px;height:24px;border:none;background:transparent;color:var(--dm-gray-500);font-size:24px;line-height:1;cursor:pointer;transition:var(--dm-transition)}.dm-file-upload__remove[data-v-da137679]:hover{color:var(--dm-error)}.dm-file-upload__error[data-v-da137679]{color:var(--dm-error);font-size:var(--dm-text-sm);margin:0}@media(prefers-color-scheme:dark){.dm-file-upload__dropzone[data-v-da137679]{background:var(--dm-gray-800);border-color:var(--dm-gray-600)}.dm-file-upload__dropzone[data-v-da137679]:hover,.dm-file-upload__file[data-v-da137679]{background:var(--dm-gray-700)}}.dm-autocomplete[data-v-782dacde]{display:flex;flex-direction:column;gap:var(--dm-space-2);position:relative}.dm-autocomplete__label[data-v-782dacde]{color:var(--dm-text-primary);font-size:var(--dm-text-sm);font-weight:500}.dm-autocomplete__required[data-v-782dacde]{color:var(--dm-error)}.dm-autocomplete__wrapper[data-v-782dacde]{position:relative}.dm-autocomplete__input[data-v-782dacde]{width:100%;min-height:44px;padding:var(--dm-space-3);border:1px solid var(--dm-gray-300);border-radius:var(--dm-radius);font-size:var(--dm-text-base);color:var(--dm-text-primary);background:var(--dm-white);transition:var(--dm-transition)}.dm-autocomplete__input[data-v-782dacde]::placeholder{color:var(--dm-gray-400)}.dm-autocomplete__input[data-v-782dacde]:hover:not(:disabled){border-color:var(--dm-gray-400)}.dm-autocomplete__input[data-v-782dacde]:focus{outline:var(--dm-focus-ring);outline-offset:0;border-color:var(--dm-primary)}.dm-autocomplete__input[data-v-782dacde]:disabled{background:var(--dm-gray-100);cursor:not-allowed;opacity:.6}.dm-autocomplete__input--error[data-v-782dacde]{border-color:var(--dm-error)}.dm-autocomplete__dropdown[data-v-782dacde]{position:absolute;top:calc(100% + 4px);left:0;right:0;max-height:240px;overflow-y:auto;background:var(--dm-white);border:1px solid var(--dm-gray-300);border-radius:var(--dm-radius);box-shadow:0 4px 6px #0000001a;list-style:none;margin:0;padding:var(--dm-space-1);z-index:1000}.dm-autocomplete__option[data-v-782dacde]{padding:var(--dm-space-2) var(--dm-space-3);cursor:pointer;border-radius:var(--dm-radius);transition:var(--dm-transition);color:var(--dm-text-primary)}.dm-autocomplete__option[data-v-782dacde]:hover,.dm-autocomplete__option--active[data-v-782dacde]{background:var(--dm-gray-100)}.dm-autocomplete__no-results[data-v-782dacde]{padding:var(--dm-space-3);text-align:center;color:var(--dm-gray-500);font-size:var(--dm-text-sm)}.dm-autocomplete__error[data-v-782dacde]{color:var(--dm-error);font-size:var(--dm-text-sm);margin:0}@media(prefers-color-scheme:dark){.dm-autocomplete__input[data-v-782dacde]{background:var(--dm-gray-800);border-color:var(--dm-gray-600);color:var(--dm-white)}.dm-autocomplete__input[data-v-782dacde]:disabled{background:var(--dm-gray-900)}.dm-autocomplete__dropdown[data-v-782dacde]{background:var(--dm-gray-800);border-color:var(--dm-gray-600)}.dm-autocomplete__option[data-v-782dacde]:hover,.dm-autocomplete__option--active[data-v-782dacde]{background:var(--dm-gray-700)}}.datametria-card[data-v-539a1b0c]{background:#fff;border-radius:.5rem;box-shadow:0 1px 3px #0000001a;overflow:hidden}.datametria-card__header[data-v-539a1b0c]{padding:1.5rem;border-bottom:1px solid #e5e7eb}.datametria-card__title[data-v-539a1b0c]{margin:0;font-size:1.25rem;font-weight:600;color:#111827}.datametria-card__content[data-v-539a1b0c]{padding:1.5rem}.datametria-card--no-padding .datametria-card__content[data-v-539a1b0c]{padding:0}.datametria-card__footer[data-v-539a1b0c]{padding:1.5rem;border-top:1px solid #e5e7eb;background:#f9fafb}.datametria-modal[data-v-8aa80965]{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:1000;padding:1rem}.datametria-modal__content[data-v-8aa80965]{background:#fff;border-radius:.5rem;box-shadow:0 20px 25px -5px #0000001a;width:100%;max-height:90vh;overflow:auto}.datametria-modal__header[data-v-8aa80965]{display:flex;align-items:center;justify-content:space-between;padding:1.5rem;border-bottom:1px solid #e5e7eb}.datametria-modal__title[data-v-8aa80965]{margin:0;font-size:1.25rem;font-weight:600;color:#111827}.datametria-modal__close[data-v-8aa80965]{background:none;border:none;font-size:2rem;line-height:1;cursor:pointer;color:#6b7280;padding:0;width:2rem;height:2rem;display:flex;align-items:center;justify-content:center;border-radius:.25rem;transition:all .2s}.datametria-modal__close[data-v-8aa80965]:hover{background:#f3f4f6;color:#111827}.datametria-modal__body[data-v-8aa80965]{padding:1.5rem}.datametria-modal__footer[data-v-8aa80965]{padding:1.5rem;border-top:1px solid #e5e7eb;background:#f9fafb}.modal-enter-active[data-v-8aa80965],.modal-leave-active[data-v-8aa80965]{transition:opacity .3s}.modal-enter-from[data-v-8aa80965],.modal-leave-to[data-v-8aa80965]{opacity:0}.dm-container[data-v-4cc8678e]{width:100%;margin-left:auto;margin-right:auto;padding-left:var(--dm-space-4);padding-right:var(--dm-space-4)}.dm-container--sm[data-v-4cc8678e]{max-width:640px}.dm-container--md[data-v-4cc8678e]{max-width:768px}.dm-container--lg[data-v-4cc8678e]{max-width:1024px}.dm-container--xl[data-v-4cc8678e]{max-width:1280px}.dm-container--fluid[data-v-4cc8678e]{max-width:100%}@media(max-width:640px){.dm-container[data-v-4cc8678e]{padding-left:var(--dm-space-3);padding-right:var(--dm-space-3)}}.dm-grid[data-v-9e2c1279]{display:grid;grid-template-columns:repeat(var(--dm-grid-cols, 12),1fr);gap:var(--dm-grid-gap, var(--dm-space-4))}@media(max-width:1024px){.dm-grid[data-v-9e2c1279]{grid-template-columns:repeat(auto-fit,minmax(250px,1fr))}}@media(max-width:640px){.dm-grid[data-v-9e2c1279]{grid-template-columns:1fr;gap:var(--dm-space-3)}}.dm-divider[data-v-b0655e4c]{display:flex;align-items:center;color:var(--dm-text-secondary);font-size:var(--dm-text-sm)}.dm-divider--horizontal[data-v-b0655e4c]{width:100%;margin:var(--dm-space-4) 0}.dm-divider--horizontal[data-v-b0655e4c]:before,.dm-divider--horizontal[data-v-b0655e4c]:after{content:"";flex:1;height:1px;background:var(--dm-gray-300)}.dm-divider--horizontal .dm-divider__label[data-v-b0655e4c]{padding:0 var(--dm-space-3)}.dm-divider--vertical[data-v-b0655e4c]{height:100%;flex-direction:column;margin:0 var(--dm-space-4)}.dm-divider--vertical[data-v-b0655e4c]:before,.dm-divider--vertical[data-v-b0655e4c]:after{content:"";flex:1;width:1px;background:var(--dm-gray-300)}.dm-divider--vertical .dm-divider__label[data-v-b0655e4c]{padding:var(--dm-space-3) 0}.dm-divider--dashed[data-v-b0655e4c]:before,.dm-divider--dashed[data-v-b0655e4c]:after{background:none;border-top:1px dashed var(--dm-gray-300)}.dm-divider--vertical.dm-divider--dashed[data-v-b0655e4c]:before,.dm-divider--vertical.dm-divider--dashed[data-v-b0655e4c]:after{border-top:none;border-left:1px dashed var(--dm-gray-300)}@media(prefers-color-scheme:dark){.dm-divider--horizontal[data-v-b0655e4c]:before,.dm-divider--horizontal[data-v-b0655e4c]:after,.dm-divider--vertical[data-v-b0655e4c]:before,.dm-divider--vertical[data-v-b0655e4c]:after{background:var(--dm-gray-700)}.dm-divider--dashed[data-v-b0655e4c]:before,.dm-divider--dashed[data-v-b0655e4c]:after{border-color:var(--dm-gray-700)}.dm-divider--vertical.dm-divider--dashed[data-v-b0655e4c]:before,.dm-divider--vertical.dm-divider--dashed[data-v-b0655e4c]:after{border-color:var(--dm-gray-700)}}.datametria-alert[data-v-a27dad03]{display:flex;gap:.75rem;padding:1rem;border-radius:.5rem;border-left:4px solid}.datametria-alert--success[data-v-a27dad03]{background:#f0fdf4;border-color:#10b981;color:#065f46}.datametria-alert--error[data-v-a27dad03]{background:#fef2f2;border-color:#ef4444;color:#991b1b}.datametria-alert--warning[data-v-a27dad03]{background:#fffbeb;border-color:#f59e0b;color:#92400e}.datametria-alert--info[data-v-a27dad03]{background:#eff6ff;border-color:#0072ce;color:#1e3a8a}.datametria-alert__icon[data-v-a27dad03]{font-size:1.25rem;font-weight:700}.datametria-alert__content[data-v-a27dad03]{flex:1}.datametria-alert__title[data-v-a27dad03]{margin:0 0 .25rem;font-size:.875rem;font-weight:600}.datametria-alert__message[data-v-a27dad03]{margin:0;font-size:.875rem}.datametria-alert__close[data-v-a27dad03]{background:none;border:none;font-size:1.5rem;line-height:1;cursor:pointer;padding:0;opacity:.5;transition:opacity .2s}.datametria-alert__close[data-v-a27dad03]:hover{opacity:1}.dm-toast[data-v-f6096907]{position:fixed;top:var(--dm-space-4);right:var(--dm-space-4);min-width:300px;max-width:500px;padding:var(--dm-space-4);border-radius:var(--dm-radius);box-shadow:0 4px 12px #00000026;z-index:9999}.dm-toast--success[data-v-f6096907]{background:var(--dm-success);color:var(--dm-white)}.dm-toast--error[data-v-f6096907]{background:var(--dm-error);color:var(--dm-white)}.dm-toast--warning[data-v-f6096907]{background:var(--dm-warning);color:var(--dm-gray-900)}.dm-toast--info[data-v-f6096907]{background:var(--dm-primary);color:var(--dm-white)}.dm-toast__content[data-v-f6096907]{display:flex;align-items:center;gap:var(--dm-space-3)}.dm-toast__message[data-v-f6096907]{flex:1;font-size:var(--dm-text-sm);line-height:1.5}.dm-toast__close[data-v-f6096907]{width:24px;height:24px;border:none;background:transparent;color:inherit;font-size:24px;line-height:1;cursor:pointer;opacity:.8;transition:var(--dm-transition)}.dm-toast__close[data-v-f6096907]:hover{opacity:1}.dm-toast-enter-active[data-v-f6096907],.dm-toast-leave-active[data-v-f6096907]{transition:all .3s ease}.dm-toast-enter-from[data-v-f6096907]{opacity:0;transform:translate(100%)}.dm-toast-leave-to[data-v-f6096907]{opacity:0;transform:translateY(-20px)}@media(max-width:640px){.dm-toast[data-v-f6096907]{left:var(--dm-space-4);right:var(--dm-space-4);min-width:auto}}.dm-progress[data-v-6c9ef263]{display:flex;flex-direction:column;gap:var(--dm-space-2)}.dm-progress__header[data-v-6c9ef263]{display:flex;justify-content:space-between;align-items:center}.dm-progress__label[data-v-6c9ef263]{font-size:var(--dm-text-sm);font-weight:500;color:var(--dm-text-primary)}.dm-progress__value[data-v-6c9ef263]{font-size:var(--dm-text-sm);font-weight:600;color:var(--dm-text-secondary)}.dm-progress__track[data-v-6c9ef263]{width:100%;height:8px;background:var(--dm-gray-200);border-radius:4px;overflow:hidden}.dm-progress__bar[data-v-6c9ef263]{height:100%;border-radius:4px;transition:width .3s ease}.dm-progress__bar--primary[data-v-6c9ef263]{background:var(--dm-primary)}.dm-progress__bar--success[data-v-6c9ef263]{background:var(--dm-success)}.dm-progress__bar--warning[data-v-6c9ef263]{background:var(--dm-warning)}.dm-progress__bar--error[data-v-6c9ef263]{background:var(--dm-error)}@media(prefers-color-scheme:dark){.dm-progress__track[data-v-6c9ef263]{background:var(--dm-gray-700)}.dm-progress__label[data-v-6c9ef263]{color:var(--dm-white)}.dm-progress__value[data-v-6c9ef263]{color:var(--dm-gray-400)}}.dm-spinner[data-v-013214f1]{display:inline-flex;flex-direction:column;align-items:center;gap:var(--dm-space-2)}.dm-spinner__svg[data-v-013214f1]{animation:dm-spinner-rotate-013214f1 2s linear infinite}.dm-spinner--sm .dm-spinner__svg[data-v-013214f1]{width:20px;height:20px}.dm-spinner--md .dm-spinner__svg[data-v-013214f1]{width:40px;height:40px}.dm-spinner--lg .dm-spinner__svg[data-v-013214f1]{width:60px;height:60px}.dm-spinner__circle[data-v-013214f1]{stroke-linecap:round;animation:dm-spinner-dash-013214f1 1.5s ease-in-out infinite}.dm-spinner--primary .dm-spinner__circle[data-v-013214f1]{stroke:var(--dm-primary)}.dm-spinner--secondary .dm-spinner__circle[data-v-013214f1]{stroke:var(--dm-secondary)}.dm-spinner--white .dm-spinner__circle[data-v-013214f1]{stroke:var(--dm-white)}.dm-spinner__label[data-v-013214f1]{font-size:var(--dm-text-sm);color:var(--dm-text-secondary)}@keyframes dm-spinner-rotate-013214f1{to{transform:rotate(360deg)}}@keyframes dm-spinner-dash-013214f1{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}to{stroke-dasharray:90,150;stroke-dashoffset:-124}}@media(prefers-color-scheme:dark){.dm-spinner__label[data-v-013214f1]{color:var(--dm-gray-400)}}.datametria-table[data-v-7700c903]{width:100%;overflow-x:auto}.datametria-table__table[data-v-7700c903]{width:100%;border-collapse:collapse}.datametria-table__thead[data-v-7700c903]{background:#f9fafb;border-bottom:2px solid #e5e7eb}.datametria-table__th[data-v-7700c903]{padding:.75rem 1rem;text-align:left;font-size:.875rem;font-weight:600;color:#374151}.datametria-table__tbody[data-v-7700c903]{background:#fff}.datametria-table__tr[data-v-7700c903]{border-bottom:1px solid #e5e7eb;transition:background .2s}.datametria-table__tr[data-v-7700c903]:hover{background:#f9fafb}.datametria-table__td[data-v-7700c903]{padding:.75rem 1rem;font-size:.875rem;color:#111827}.datametria-table__empty[data-v-7700c903]{padding:3rem;text-align:center;color:#6b7280;font-size:.875rem}.dm-avatar[data-v-898cb5d7]{display:inline-flex;align-items:center;justify-content:center;background:var(--dm-primary);color:var(--dm-white);font-weight:600;overflow:hidden;flex-shrink:0;border-radius:50%}.dm-avatar--sm[data-v-898cb5d7]{width:32px;height:32px;font-size:var(--dm-text-xs)}.dm-avatar--md[data-v-898cb5d7]{width:40px;height:40px;font-size:var(--dm-text-sm)}.dm-avatar--lg[data-v-898cb5d7]{width:56px;height:56px;font-size:var(--dm-text-base)}.dm-avatar--xl[data-v-898cb5d7]{width:80px;height:80px;font-size:var(--dm-text-lg)}.dm-avatar--rounded[data-v-898cb5d7]{border-radius:var(--dm-radius)}.dm-avatar__image[data-v-898cb5d7]{width:100%;height:100%;object-fit:cover}.dm-avatar__initials[data-v-898cb5d7]{-webkit-user-select:none;user-select:none}.dm-badge[data-v-843741c5]{display:inline-flex;align-items:center;justify-content:center;font-weight:600;border-radius:12px;white-space:nowrap;-webkit-user-select:none;user-select:none}.dm-badge--sm[data-v-843741c5]{padding:2px 8px;font-size:var(--dm-text-xs);min-height:20px}.dm-badge--md[data-v-843741c5]{padding:4px 12px;font-size:var(--dm-text-sm);min-height:24px}.dm-badge--lg[data-v-843741c5]{padding:6px 16px;font-size:var(--dm-text-base);min-height:32px}.dm-badge--primary[data-v-843741c5]{background:var(--dm-primary);color:var(--dm-white)}.dm-badge--secondary[data-v-843741c5]{background:var(--dm-secondary);color:var(--dm-white)}.dm-badge--success[data-v-843741c5]{background:var(--dm-success);color:var(--dm-white)}.dm-badge--warning[data-v-843741c5]{background:var(--dm-warning);color:var(--dm-gray-900)}.dm-badge--error[data-v-843741c5]{background:var(--dm-error);color:var(--dm-white)}.dm-badge--info[data-v-843741c5]{background:var(--dm-gray-200);color:var(--dm-gray-900)}@media(prefers-color-scheme:dark){.dm-badge--info[data-v-843741c5]{background:var(--dm-gray-700);color:var(--dm-white)}}.dm-chip[data-v-0d7ae680]{display:inline-flex;align-items:center;gap:var(--dm-space-2);padding:var(--dm-space-2) var(--dm-space-3);border-radius:16px;font-size:var(--dm-text-sm);font-weight:500;-webkit-user-select:none;user-select:none;transition:var(--dm-transition)}.dm-chip--clickable[data-v-0d7ae680]{cursor:pointer}.dm-chip--clickable[data-v-0d7ae680]:hover{opacity:.8}.dm-chip--clickable[data-v-0d7ae680]:focus-visible{outline:var(--dm-focus-ring);outline-offset:2px}.dm-chip--default[data-v-0d7ae680]{background:var(--dm-gray-200);color:var(--dm-gray-900)}.dm-chip--primary[data-v-0d7ae680]{background:var(--dm-primary-light, rgba(0, 114, 206, .1));color:var(--dm-primary)}.dm-chip--secondary[data-v-0d7ae680]{background:var(--dm-secondary-light, rgba(75, 0, 120, .1));color:var(--dm-secondary)}.dm-chip--success[data-v-0d7ae680]{background:var(--dm-success-light, rgba(34, 197, 94, .1));color:var(--dm-success)}.dm-chip--warning[data-v-0d7ae680]{background:var(--dm-warning-light, rgba(251, 191, 36, .2));color:var(--dm-warning-dark, #92400e)}.dm-chip--error[data-v-0d7ae680]{background:var(--dm-error-light, rgba(239, 68, 68, .1));color:var(--dm-error)}.dm-chip__icon[data-v-0d7ae680]{display:flex;align-items:center;font-size:16px}.dm-chip__label[data-v-0d7ae680]{line-height:1.5}.dm-chip__close[data-v-0d7ae680]{display:flex;align-items:center;justify-content:center;width:20px;height:20px;border:none;background:transparent;color:inherit;font-size:20px;line-height:1;cursor:pointer;opacity:.6;transition:var(--dm-transition);padding:0;margin:0}.dm-chip__close[data-v-0d7ae680]:hover{opacity:1}@media(prefers-color-scheme:dark){.dm-chip--default[data-v-0d7ae680]{background:var(--dm-gray-700);color:var(--dm-white)}}.dm-navbar[data-v-adcb6d0c]{width:100%;background:var(--dm-white);border-bottom:1px solid var(--dm-gray-200);position:sticky;top:0;z-index:100}.dm-navbar--dark[data-v-adcb6d0c]{background:var(--dm-gray-900);border-bottom-color:var(--dm-gray-800)}.dm-navbar--transparent[data-v-adcb6d0c]{background:transparent;border-bottom:none}.dm-navbar__container[data-v-adcb6d0c]{max-width:1280px;margin:0 auto;padding:var(--dm-space-4);display:flex;align-items:center;gap:var(--dm-space-4)}.dm-navbar__brand[data-v-adcb6d0c]{flex-shrink:0}.dm-navbar__logo[data-v-adcb6d0c]{font-size:var(--dm-text-lg);font-weight:600;color:var(--dm-text-primary);text-decoration:none}.dm-navbar--dark .dm-navbar__logo[data-v-adcb6d0c]{color:var(--dm-white)}.dm-navbar__toggle[data-v-adcb6d0c]{display:none;width:44px;height:44px;padding:var(--dm-space-2);border:none;background:transparent;cursor:pointer;margin-left:auto}.dm-navbar__toggle-icon[data-v-adcb6d0c]{display:block;width:24px;height:2px;background:var(--dm-text-primary);position:relative;transition:var(--dm-transition)}.dm-navbar__toggle-icon[data-v-adcb6d0c]:before,.dm-navbar__toggle-icon[data-v-adcb6d0c]:after{content:"";position:absolute;width:24px;height:2px;background:var(--dm-text-primary);transition:var(--dm-transition)}.dm-navbar__toggle-icon[data-v-adcb6d0c]:before{top:-8px}.dm-navbar__toggle-icon[data-v-adcb6d0c]:after{bottom:-8px}.dm-navbar__menu[data-v-adcb6d0c]{display:flex;align-items:center;gap:var(--dm-space-4);flex:1}.dm-navbar__actions[data-v-adcb6d0c]{display:flex;align-items:center;gap:var(--dm-space-2);margin-left:auto}@media(max-width:768px){.dm-navbar__toggle[data-v-adcb6d0c]{display:flex;align-items:center;justify-content:center}.dm-navbar__menu[data-v-adcb6d0c]{position:absolute;top:100%;left:0;right:0;background:var(--dm-white);border-bottom:1px solid var(--dm-gray-200);flex-direction:column;align-items:stretch;padding:var(--dm-space-4);display:none}.dm-navbar--dark .dm-navbar__menu[data-v-adcb6d0c]{background:var(--dm-gray-900);border-bottom-color:var(--dm-gray-800)}.dm-navbar__menu--open[data-v-adcb6d0c]{display:flex}.dm-navbar__actions[data-v-adcb6d0c]{margin-left:0;margin-top:var(--dm-space-4)}}@media(prefers-color-scheme:dark){.dm-navbar[data-v-adcb6d0c]{background:var(--dm-gray-900);border-bottom-color:var(--dm-gray-800)}.dm-navbar__logo[data-v-adcb6d0c]{color:var(--dm-white)}.dm-navbar__toggle-icon[data-v-adcb6d0c],.dm-navbar__toggle-icon[data-v-adcb6d0c]:before,.dm-navbar__toggle-icon[data-v-adcb6d0c]:after{background:var(--dm-white)}@media(max-width:768px){.dm-navbar__menu[data-v-adcb6d0c]{background:var(--dm-gray-900);border-bottom-color:var(--dm-gray-800)}}}.dm-breadcrumb[data-v-17c32ee3]{display:block}.dm-breadcrumb__list[data-v-17c32ee3]{display:flex;flex-wrap:wrap;align-items:center;gap:var(--dm-space-2);list-style:none;margin:0;padding:0}.dm-breadcrumb__item[data-v-17c32ee3]{display:flex;align-items:center;gap:var(--dm-space-2)}.dm-breadcrumb__link[data-v-17c32ee3]{color:var(--dm-primary);text-decoration:none;font-size:var(--dm-text-sm);transition:var(--dm-transition);padding:var(--dm-space-1) var(--dm-space-2);border-radius:var(--dm-radius);min-height:32px;display:inline-flex;align-items:center}.dm-breadcrumb__link[data-v-17c32ee3]:hover{text-decoration:underline;background:var(--dm-gray-100)}.dm-breadcrumb__link[data-v-17c32ee3]:focus-visible{outline:var(--dm-focus-ring);outline-offset:2px}.dm-breadcrumb__current[data-v-17c32ee3]{color:var(--dm-text-primary);font-size:var(--dm-text-sm);font-weight:500;padding:var(--dm-space-1) var(--dm-space-2)}.dm-breadcrumb__separator[data-v-17c32ee3]{color:var(--dm-gray-400);font-size:var(--dm-text-sm);-webkit-user-select:none;user-select:none}@media(max-width:640px){.dm-breadcrumb__list[data-v-17c32ee3],.dm-breadcrumb__item[data-v-17c32ee3]{gap:var(--dm-space-1)}.dm-breadcrumb__link[data-v-17c32ee3],.dm-breadcrumb__current[data-v-17c32ee3]{font-size:var(--dm-text-xs)}}@media(prefers-color-scheme:dark){.dm-breadcrumb__link[data-v-17c32ee3]:hover{background:var(--dm-gray-800)}.dm-breadcrumb__current[data-v-17c32ee3]{color:var(--dm-white)}.dm-breadcrumb__separator[data-v-17c32ee3]{color:var(--dm-gray-600)}}.dm-tabs[data-v-6d59d320]{display:flex;flex-direction:column}.dm-tabs__header[data-v-6d59d320]{display:flex;position:relative;border-bottom:2px solid var(--dm-gray-200);overflow-x:auto;scrollbar-width:none}.dm-tabs__header[data-v-6d59d320]::-webkit-scrollbar{display:none}.dm-tabs__tab[data-v-6d59d320]{flex:1;min-width:max-content;padding:var(--dm-space-3) var(--dm-space-4);border:none;background:transparent;color:var(--dm-text-secondary);font-size:var(--dm-text-base);font-weight:500;cursor:pointer;transition:var(--dm-transition);position:relative;white-space:nowrap}.dm-tabs__tab[data-v-6d59d320]:hover{color:var(--dm-text-primary)}.dm-tabs__tab[data-v-6d59d320]:focus-visible{outline:var(--dm-focus-ring);outline-offset:-2px}.dm-tabs__tab--active[data-v-6d59d320]{color:var(--dm-primary)}.dm-tabs__indicator[data-v-6d59d320]{position:absolute;bottom:-2px;left:0;width:calc(100% / var(--tab-count, 1));height:2px;background:var(--dm-primary);transition:transform .3s ease}.dm-tabs__panels[data-v-6d59d320]{padding:var(--dm-space-4)}.dm-tabs__panel[data-v-6d59d320]{display:none}.dm-tabs__panel--active[data-v-6d59d320]{display:block}@media(prefers-color-scheme:dark){.dm-tabs__header[data-v-6d59d320]{border-bottom-color:var(--dm-gray-700)}.dm-tabs__tab[data-v-6d59d320]{color:var(--dm-gray-400)}.dm-tabs__tab[data-v-6d59d320]:hover{color:var(--dm-white)}}
package/package.json ADDED
@@ -0,0 +1,98 @@
1
+ {
2
+ "name": "@datametria/vue-components",
3
+ "version": "1.1.1",
4
+ "description": "DATAMETRIA Vue.js 3 Component Library with Design System - 56 components enterprise-ready",
5
+ "type": "module",
6
+ "main": "./dist/index.umd.js",
7
+ "module": "./dist/index.es.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "import": "./dist/index.es.js",
12
+ "require": "./dist/index.umd.js",
13
+ "types": "./dist/index.d.ts"
14
+ },
15
+ "./style.css": "./dist/style.css"
16
+ },
17
+ "files": [
18
+ "dist",
19
+ "src",
20
+ "README.md",
21
+ "ACCESSIBILITY.md",
22
+ "DESIGN-SYSTEM.md",
23
+ "PROGRESS.md"
24
+ ],
25
+ "sideEffects": [
26
+ "*.css",
27
+ "*.vue"
28
+ ],
29
+ "scripts": {
30
+ "dev": "vite",
31
+ "build": "vue-tsc && vite build",
32
+ "preview": "vite preview",
33
+ "test": "vitest",
34
+ "test:ui": "vitest --ui",
35
+ "test:coverage": "vitest --coverage",
36
+ "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix",
37
+ "type-check": "vue-tsc --noEmit",
38
+ "prepublishOnly": "npm run build"
39
+ },
40
+ "dependencies": {
41
+ "axios": "^1.12.2",
42
+ "vue": "^3.4.0"
43
+ },
44
+ "devDependencies": {
45
+ "@eslint/config-array": "^0.19.0",
46
+ "@eslint/object-schema": "^2.1.4",
47
+ "@testing-library/jest-dom": "^6.1.5",
48
+ "@testing-library/vue": "^8.0.1",
49
+ "@types/node": "^22.0.0",
50
+ "@vitejs/plugin-vue": "^5.0.0",
51
+ "@vitest/coverage-v8": "^2.1.0",
52
+ "@vue/eslint-config-prettier": "^10.0.0",
53
+ "@vue/eslint-config-typescript": "^14.0.0",
54
+ "@vue/test-utils": "^2.4.0",
55
+ "@vue/tsconfig": "^0.5.0",
56
+ "eslint": "^9.17.0",
57
+ "eslint-plugin-vue": "^9.31.0",
58
+ "jsdom": "^25.0.0",
59
+ "prettier": "^3.4.0",
60
+ "typescript": "~5.7.0",
61
+ "vite": "^6.0.0",
62
+ "vitest": "^2.1.0",
63
+ "vue-tsc": "^2.2.0"
64
+ },
65
+ "peerDependencies": {
66
+ "vue": "^3.4.0"
67
+ },
68
+ "keywords": [
69
+ "vue",
70
+ "vue3",
71
+ "vuejs",
72
+ "components",
73
+ "design-system",
74
+ "datametria",
75
+ "typescript",
76
+ "enterprise",
77
+ "ui-library",
78
+ "component-library",
79
+ "composition-api",
80
+ "wcag",
81
+ "accessibility",
82
+ "a11y",
83
+ "responsive",
84
+ "mobile-first",
85
+ "dark-mode"
86
+ ],
87
+ "author": "DATAMETRIA Team <dev@datametria.io>",
88
+ "license": "MIT",
89
+ "repository": {
90
+ "type": "git",
91
+ "url": "https://github.com/datametria/DATAMETRIA-common-libraries",
92
+ "directory": "packages/vue-components"
93
+ },
94
+ "bugs": {
95
+ "url": "https://github.com/datametria/DATAMETRIA-common-libraries/issues"
96
+ },
97
+ "homepage": "https://github.com/datametria/DATAMETRIA-common-libraries#readme"
98
+ }
@@ -0,0 +1,123 @@
1
+ <template>
2
+ <div v-if="modelValue" :class="alertClasses">
3
+ <div class="datametria-alert__icon">
4
+ <span v-if="variant === 'success'">✓</span>
5
+ <span v-else-if="variant === 'error'">✕</span>
6
+ <span v-else-if="variant === 'warning'">⚠</span>
7
+ <span v-else>ℹ</span>
8
+ </div>
9
+
10
+ <div class="datametria-alert__content">
11
+ <h4 v-if="title" class="datametria-alert__title">{{ title }}</h4>
12
+ <p class="datametria-alert__message">
13
+ <slot>{{ message }}</slot>
14
+ </p>
15
+ </div>
16
+
17
+ <button
18
+ v-if="closable"
19
+ class="datametria-alert__close"
20
+ @click="$emit('update:modelValue', false)"
21
+ >
22
+ ×
23
+ </button>
24
+ </div>
25
+ </template>
26
+
27
+ <script setup lang="ts">
28
+ import { computed } from 'vue'
29
+
30
+ type AlertVariant = 'success' | 'error' | 'warning' | 'info'
31
+
32
+ interface Props {
33
+ modelValue?: boolean
34
+ variant?: AlertVariant
35
+ title?: string
36
+ message?: string
37
+ closable?: boolean
38
+ }
39
+
40
+ const props = withDefaults(defineProps<Props>(), {
41
+ modelValue: true,
42
+ variant: 'info',
43
+ closable: true
44
+ })
45
+
46
+ defineEmits<{
47
+ 'update:modelValue': [value: boolean]
48
+ }>()
49
+
50
+ const alertClasses = computed(() => [
51
+ 'datametria-alert',
52
+ `datametria-alert--${props.variant}`
53
+ ])
54
+ </script>
55
+
56
+ <style scoped>
57
+ .datametria-alert {
58
+ display: flex;
59
+ gap: 0.75rem;
60
+ padding: 1rem;
61
+ border-radius: 0.5rem;
62
+ border-left: 4px solid;
63
+ }
64
+
65
+ .datametria-alert--success {
66
+ background: #f0fdf4;
67
+ border-color: #10b981;
68
+ color: #065f46;
69
+ }
70
+
71
+ .datametria-alert--error {
72
+ background: #fef2f2;
73
+ border-color: #ef4444;
74
+ color: #991b1b;
75
+ }
76
+
77
+ .datametria-alert--warning {
78
+ background: #fffbeb;
79
+ border-color: #f59e0b;
80
+ color: #92400e;
81
+ }
82
+
83
+ .datametria-alert--info {
84
+ background: #eff6ff;
85
+ border-color: #0072CE;
86
+ color: #1e3a8a;
87
+ }
88
+
89
+ .datametria-alert__icon {
90
+ font-size: 1.25rem;
91
+ font-weight: bold;
92
+ }
93
+
94
+ .datametria-alert__content {
95
+ flex: 1;
96
+ }
97
+
98
+ .datametria-alert__title {
99
+ margin: 0 0 0.25rem 0;
100
+ font-size: 0.875rem;
101
+ font-weight: 600;
102
+ }
103
+
104
+ .datametria-alert__message {
105
+ margin: 0;
106
+ font-size: 0.875rem;
107
+ }
108
+
109
+ .datametria-alert__close {
110
+ background: none;
111
+ border: none;
112
+ font-size: 1.5rem;
113
+ line-height: 1;
114
+ cursor: pointer;
115
+ padding: 0;
116
+ opacity: 0.5;
117
+ transition: opacity 0.2s;
118
+ }
119
+
120
+ .datametria-alert__close:hover {
121
+ opacity: 1;
122
+ }
123
+ </style>