@topjoao/top-design-system 0.1.0-beta.12 → 0.1.0-beta.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/TopToast-BOBZjpqq.cjs +2 -0
- package/dist/TopToast-BOBZjpqq.cjs.map +1 -0
- package/dist/{TopToast-B8ruKpjL.js → TopToast-C7cOTxTp.js} +304 -200
- package/dist/TopToast-C7cOTxTp.js.map +1 -0
- package/dist/components/TopFileUpload.vue.d.ts +3 -3
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/dist/plugin.cjs +1 -1
- package/dist/plugin.js +1 -1
- package/dist/style.css +1 -1
- package/package.json +3 -1
- package/dist/TopToast-B8ruKpjL.js.map +0 -1
- package/dist/TopToast-BN8slt5u.cjs +0 -2
- package/dist/TopToast-BN8slt5u.cjs.map +0 -1
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,s)=>(s=n==null?{}:e(i(n)),o(r||!n||!n.__esModule||!a.call(n,`default`)?t(s,`default`,{value:n,enumerable:!0}):s,n));let c=require("vue"),l=require("primevue/button");l=s(l,1);let u=require("primevue/tooltip");u=s(u,1);let d=require("tailwind-merge"),f=require("primevue/dialog");f=s(f,1);let p=require("primevue/datepicker");p=s(p,1);let m=require("primevue/fileupload");m=s(m,1);let h=require("primevue/inputtext");h=s(h,1);let g=require("primevue/autocomplete");g=s(g,1);let _=require("primevue/toast");_=s(_,1);var v={class:`top-button top-solutions-component h-fit w-fit rounded-[12px] bg-transparent`},y=(0,c.defineComponent)({__name:`TopButton`,props:{tooltip:{default:``},tooltipClass:{default:`text-xs`},label:{default:``},icon:{default:``},loading:{type:Boolean,default:!1},class:{default:``},outlined:{type:Boolean,default:!1},severity:{default:`primary`},secondary:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},unstyled:{type:Boolean,default:!1},type:{default:`button`}},emits:[`click`],setup(e,{emit:t}){let n=(0,c.useSlots)(),r=(0,c.computed)(()=>!!n.icon),i=e,a=t,o=(0,c.computed)(()=>i.secondary?`secondary`:i.severity),s=(0,c.computed)(()=>{let e=i.unstyled?``:o.value===`secondary`?`rounded-[10px] border px-3 py-2 font-bold dark:!border-zinc-500 dark:!bg-zinc-700 dark:!text-zinc-100 dark:hover:!bg-zinc-600`:i.outlined?o.value===`primary`?`shrink-0 rounded-[10px] border-primary-800 px-3 py-2 text-primary-800 hover:bg-primary-50 dark:border-primary-200 dark:bg-transparent dark:text-primary-100 dark:hover:bg-primary-900`:`shrink-0 rounded-[10px] border px-3 py-2 font-bold`:o.value===`primary`?`rounded-[10px] !border-primary-900 bg-primary-900 px-3 py-2 font-bold text-white hover:!border-primary-800 hover:bg-primary-800 dark:!text-white`:`rounded-[10px] border px-3 py-2 font-bold`;return(0,d.twMerge)(e,i.class)});return(t,n)=>((0,c.openBlock)(),(0,c.createElementBlock)(`span`,v,[(0,c.withDirectives)(((0,c.openBlock)(),(0,c.createBlock)((0,c.unref)(l.default),{type:e.type,label:e.label,disabled:e.disabled||e.loading,icon:r.value?void 0:e.icon||void 0,loading:e.loading,outlined:e.outlined||o.value===`secondary`,severity:o.value===`primary`?void 0:o.value,class:(0,c.normalizeClass)(s.value),pt:{root:{class:s.value}},onClick:n[0]||=e=>a(`click`)},(0,c.createSlots)({_:2},[r.value?{name:`icon`,fn:(0,c.withCtx)(()=>[(0,c.renderSlot)(t.$slots,`icon`)]),key:`0`}:void 0]),1032,[`type`,`label`,`disabled`,`icon`,`loading`,`outlined`,`severity`,`class`,`pt`])),[[(0,c.unref)(u.default),{value:e.tooltip,class:e.tooltipClass},void 0,{top:!0}]])]))}}),b={primary:{50:`#EEF9FF`,100:`#DFF4FF`,200:`#C5E6F8`,300:`#8EC4DF`,400:`#66ACD1`,500:`#2488BC`,600:`#036DA3`,700:`#1B5783`,800:`#02466B`,900:`#052F4A`,950:`#0C192D`},secondary:{50:`#FAFAFA`,100:`#F4F4F5`,200:`#E9E9E9`,300:`#D8D8D8`,400:`#B8B8B8`,500:`#8E8E8E`,600:`#676767`,700:`#4B4B4B`,800:`#343434`,900:`#1C1917`,950:`#0C0A09`},success:{50:`#FAFFFA`,100:`#F4FBF6`,200:`#DFF6DE`,300:`#CBE3CA`,400:`#A3CCA1`,500:`#6BA968`,600:`#358F30`,700:`#2C7B27`,800:`#1E631A`,900:`#10430D`,950:`#062804`},warn:{50:`#FFF7ED`,100:`#FDF3D8`,200:`#FDE9B2`,300:`#FDD566`,400:`#FFB900`,500:`#FFA515`,600:`#FD9024`,700:`#DD781F`,800:`#BC4E00`,900:`#A42D02`,950:`#792202`},danger:{50:`#F8E6E4`,100:`#FFDDD9`,200:`#EEC1BC`,300:`#E3938C`,400:`#E3675C`,500:`#DC3F32`,600:`#CF150E`,700:`#B10404`,800:`#820907`,900:`#5D0803`,950:`#450501`}},x=[`aria-label`,`disabled`],S={class:`flex flex-col items-center gap-2 pt-2`},C={class:`text-base font-bold text-secondary-900 dark:text-zinc-100`},w={class:`text-sm leading-5 text-secondary-700 dark:text-zinc-300`},T={class:`mt-2 flex w-full items-center justify-center gap-3`},E=(0,c.defineComponent)({__name:`TopConfirmDialog`,props:{modelValue:{type:Boolean,default:!1},title:{default:`Confirmar`},message:{default:``},confirmText:{default:`Confirmar`},cancelText:{default:`Cancelar`},loading:{type:Boolean,default:!1},loadingText:{default:`Processando...`},severity:{default:`danger`},icon:{default:`pi pi-exclamation-triangle`}},emits:[`update:modelValue`,`confirm`,`cancel`,`close`],setup(e,{emit:t}){let n=e,r=t,i=(0,c.computed)({get:()=>n.modelValue,set:e=>{!e&&n.loading||r(`update:modelValue`,e)}}),a=(0,c.computed)(()=>({"--top-confirm-dialog-accent":n.severity===`danger`?b.danger[600]:b.primary[800],"--top-confirm-dialog-accent-hover":n.severity===`danger`?b.danger[700]:b.primary[700]})),o=(0,c.computed)(()=>[`px-3 py-2 text-sm`,n.severity===`danger`?`!border-red-600 !bg-red-600 hover:!border-red-700 hover:!bg-red-700`:``].filter(Boolean).join(` `));function s(){n.loading||r(`confirm`)}function l(){n.loading||(r(`cancel`),i.value=!1)}function u(){n.loading||(i.value=!1)}return(t,n)=>((0,c.openBlock)(),(0,c.createBlock)((0,c.unref)(f.default),{visible:i.value,"onUpdate:visible":n[0]||=e=>i.value=e,modal:``,closable:!1,"close-on-escape":!e.loading,"dismissable-mask":!1,draggable:!1,"show-header":!1,style:{width:`500px`,maxWidth:`calc(100vw - 2rem)`},"aria-label":e.title,pt:{root:{class:`top-confirm-dialog top-solutions-component`},content:{class:`p-6`},footer:{class:`hidden`}},onHide:n[1]||=e=>r(`close`)},{default:(0,c.withCtx)(()=>[(0,c.createElementVNode)(`div`,{class:`relative flex flex-col items-center gap-4 text-center`,style:(0,c.normalizeStyle)(a.value)},[(0,c.createElementVNode)(`button`,{type:`button`,class:`absolute right-[-0.25rem] top-[-0.5rem] flex size-8 items-center justify-center rounded-full border-0 bg-transparent p-0 text-secondary-700 outline-none transition-colors hover:bg-secondary-200 focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 dark:text-zinc-200 dark:hover:bg-zinc-700`,"aria-label":e.cancelText,disabled:e.loading,onClick:u},[...n[2]||=[(0,c.createElementVNode)(`i`,{class:`pi pi-times text-lg`,"aria-hidden":`true`},null,-1)]],8,x),(0,c.createElementVNode)(`div`,S,[(0,c.createElementVNode)(`i`,{class:(0,c.normalizeClass)([e.icon,`top-confirm-dialog__icon text-[40px]`]),"aria-hidden":`true`},null,2),(0,c.createElementVNode)(`p`,C,(0,c.toDisplayString)(e.title),1)]),(0,c.createElementVNode)(`div`,w,[(0,c.renderSlot)(t.$slots,`message`,{},()=>[(0,c.renderSlot)(t.$slots,`default`,{},()=>[(0,c.createTextVNode)((0,c.toDisplayString)(e.message),1)])])]),(0,c.createElementVNode)(`div`,T,[(0,c.createVNode)(y,{label:e.cancelText,secondary:``,disabled:e.loading,class:`px-3 py-2 text-sm`,onClick:l},null,8,[`label`,`disabled`]),(0,c.createVNode)(y,{label:e.loading?e.loadingText:e.confirmText,loading:e.loading,class:(0,c.normalizeClass)(o.value),onClick:s},null,8,[`label`,`loading`,`class`])])],4)]),_:3},8,[`visible`,`close-on-escape`,`aria-label`]))}}),D={class:`top-date-picker top-solutions-component flex w-full flex-col gap-1`},O=[`for`],k={key:0,"aria-hidden":`true`,class:`text-red-600 dark:text-red-400`},A=[`id`],j=(0,c.defineComponent)({inheritAttrs:!1,__name:`TopDatePicker`,props:{modelValue:{default:null},label:{default:``},placeholder:{default:`dd/mm/aaaa`},required:{type:Boolean,default:!1},error:{default:``},invalid:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},readonly:{type:Boolean,default:!1},selectionMode:{default:`single`},dateFormat:{default:`dd/mm/yy`},minDate:{default:void 0},maxDate:{default:void 0},showIcon:{type:Boolean,default:!0},iconDisplay:{default:`input`},manualInput:{type:Boolean,default:!0},showButtonBar:{type:Boolean,default:!1},appendTo:{default:`body`}},emits:[`update:modelValue`,`input`,`change`,`date-select`,`show`,`hide`,`today-click`,`clear-click`,`month-change`,`year-change`,`focus`,`blur`,`keydown`],setup(e,{emit:t}){let n=e,r=t,i=(0,c.useAttrs)(),a=(0,c.useSlots)(),o=(0,c.useId)(),s=(0,c.computed)(()=>i.id===void 0||i.id===null||i.id===``?o:String(i.id)),l=(0,c.computed)(()=>`${s.value}-error`),u=(0,c.computed)(()=>n.invalid||!!n.error),d=(0,c.computed)(()=>n.manualInput&&!n.readonly&&!n.disabled&&n.selectionMode===`single`&&n.dateFormat===`dd/mm/yy`),f=(0,c.computed)(()=>{if(u.value)return!0;let e=i[`aria-invalid`];return typeof e==`boolean`||e===`true`||e===`false`||e===`grammar`||e===`spelling`?e:void 0}),m=(0,c.computed)(()=>{let e=i[`aria-describedby`],t=[typeof e==`string`?e:``,n.error?l.value:``].filter(Boolean);return t.length?t.join(` `):void 0}),h=(0,c.computed)(()=>{let{id:e,"aria-describedby":t,"aria-invalid":n,...r}=i;return r}),g=(0,c.computed)(()=>({pcInputText:{root:{"aria-describedby":m.value,"aria-invalid":f.value,onChange:e=>r(`change`,e),inputmode:d.value?`numeric`:void 0,maxlength:d.value?10:void 0}}}));function _(e){r(`update:modelValue`,e??null)}function v(e){let t=e.target;if(d.value&&t instanceof HTMLInputElement&&!e.isComposing){let e=t.value.replace(/\D/g,``).slice(0,8);t.value=[e.slice(0,2),e.slice(2,4),e.slice(4,8)].filter(Boolean).join(`/`)}r(`input`,e)}return(t,n)=>((0,c.openBlock)(),(0,c.createElementBlock)(`div`,D,[e.label?((0,c.openBlock)(),(0,c.createElementBlock)(`label`,{key:0,for:s.value,class:`top-field-label text-xs font-bold`},[(0,c.createTextVNode)((0,c.toDisplayString)(e.label)+` `,1),e.required?((0,c.openBlock)(),(0,c.createElementBlock)(`span`,k,`*`)):(0,c.createCommentVNode)(``,!0)],8,O)):(0,c.createCommentVNode)(``,!0),(0,c.createVNode)((0,c.unref)(p.default),(0,c.mergeProps)(h.value,{"model-value":e.modelValue,"input-id":s.value,placeholder:e.placeholder,required:e.required,invalid:u.value,disabled:e.disabled,readonly:e.readonly,"selection-mode":e.selectionMode,"date-format":e.dateFormat,"update-model-type":`date`,"min-date":e.minDate,"max-date":e.maxDate,"show-icon":e.showIcon,"icon-display":e.iconDisplay,"manual-input":e.manualInput,"show-button-bar":e.showButtonBar,"append-to":e.appendTo,pt:g.value,"input-class":`top-date-picker__input top-field-control h-[40px] w-full rounded-[10px] border px-3 py-2 text-xs read-only:cursor-default disabled:cursor-not-allowed`,"panel-class":`top-date-picker-panel top-solutions-component`,fluid:``,"onUpdate:modelValue":_,onInput:v,onDateSelect:n[0]||=e=>r(`date-select`,e),onShow:n[1]||=e=>r(`show`),onHide:n[2]||=e=>r(`hide`),onTodayClick:n[3]||=e=>r(`today-click`,e),onClearClick:n[4]||=e=>r(`clear-click`,e),onMonthChange:n[5]||=e=>r(`month-change`,e),onYearChange:n[6]||=e=>r(`year-change`,e),onFocus:n[7]||=e=>r(`focus`,e),onBlur:n[8]||=e=>r(`blur`,e),onKeydown:n[9]||=e=>r(`keydown`,e)}),(0,c.createSlots)({_:2},[(0,c.renderList)((0,c.unref)(a),(e,n)=>({name:n,fn:(0,c.withCtx)(e=>[(0,c.renderSlot)(t.$slots,n,(0,c.normalizeProps)((0,c.guardReactiveProps)(e??{})))])}))]),1040,[`model-value`,`input-id`,`placeholder`,`required`,`invalid`,`disabled`,`readonly`,`selection-mode`,`date-format`,`min-date`,`max-date`,`show-icon`,`icon-display`,`manual-input`,`show-button-bar`,`append-to`,`pt`]),e.error?((0,c.openBlock)(),(0,c.createElementBlock)(`span`,{key:1,id:l.value,class:`text-[11px] text-red-600 dark:text-red-400`,role:`alert`},(0,c.toDisplayString)(e.error),9,A)):(0,c.createCommentVNode)(``,!0)]))}}),ee=[[`path`,{d:`M17.4776 9.01106C17.485 9.01102 17.4925 9.01101 17.5 9.01101C19.9853 9.01101 22 11.0294 22 13.5193C22 15.8398 20.25 17.7508 18 18M17.4776 9.01106C17.4924 8.84606 17.5 8.67896 17.5 8.51009C17.5 5.46695 15.0376 3 12 3C9.12324 3 6.76233 5.21267 6.52042 8.03192M17.4776 9.01106C17.3753 10.1476 16.9286 11.1846 16.2428 12.0165M6.52042 8.03192C3.98398 8.27373 2 10.4139 2 13.0183C2 15.4417 3.71776 17.4632 6 17.9273M6.52042 8.03192C6.67826 8.01687 6.83823 8.00917 7 8.00917C8.12582 8.00917 9.16474 8.38194 10.0005 9.01101`,stroke:`currentColor`,strokeLinecap:`round`,strokeLinejoin:`round`,strokeWidth:`1.5`,key:`0`}],[`path`,{d:`M12 13L12 21M12 13C11.2998 13 9.99153 14.9943 9.5 15.5M12 13C12.7002 13 14.0085 14.9943 14.5 15.5`,stroke:`currentColor`,strokeLinecap:`round`,strokeLinejoin:`round`,strokeWidth:`1.5`,key:`1`}]],M=(0,c.defineComponent)({name:`HugeiconsIcon`,inheritAttrs:!1,props:{icon:{type:Array,required:!0},size:{type:[Number,String],default:24,validator(e){let t=typeof e==`string`?parseInt(e,10):e;return!isNaN(t)&&t>0}},strokeWidth:{type:Number,default:void 0},absoluteStrokeWidth:{type:Boolean,default:!1},altIcon:{type:Array,default:void 0},showAlt:{type:Boolean,default:!1},color:{type:String,default:`currentColor`}},setup(e){let t=(0,c.computed)(()=>{let t=typeof e.size==`string`?parseInt(e.size,10):e.size;return!isNaN(t)&&t>0?t:24});return{computedSize:t,calculatedStrokeWidth:(0,c.computed)(()=>{if(e.strokeWidth!==void 0)return e.absoluteStrokeWidth?e.strokeWidth*24/t.value:e.strokeWidth}),transformAttrs:(e,t)=>{let n={};for(let[t,r]of Object.entries(e)){let e=t.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).toLowerCase();n[e]=r}return t!==void 0&&(n[`stroke-width`]=t,n.stroke=`currentColor`),n},currentIcon:(0,c.computed)(()=>e.altIcon&&e.showAlt?e.altIcon:e.icon)}}}),N=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n},P=[`width`,`height`,`color`];function F(e,t,n,r,i,a){return(0,c.openBlock)(),(0,c.createElementBlock)(`svg`,(0,c.mergeProps)({width:e.computedSize,height:e.computedSize,viewBox:`0 0 24 24`,xmlns:`http://www.w3.org/2000/svg`,fill:`none`,color:e.color},e.$attrs),[((0,c.openBlock)(!0),(0,c.createElementBlock)(c.Fragment,null,(0,c.renderList)(e.currentIcon,(t,n)=>((0,c.openBlock)(),(0,c.createBlock)((0,c.resolveDynamicComponent)(t[0]),(0,c.mergeProps)({key:n,ref_for:!0},e.transformAttrs(t[1],e.calculatedStrokeWidth)),null,16))),128))],16,P)}var te=N(M,[[`render`,F],[`__file`,`/Users/mahmudulhasan/Desktop/Projects/Hugeicons/hugeicons-monorepo/packages/vue/src/components/HugeiconsIcon.vue`]]),I={class:`top-file-upload top-solutions-component flex w-full flex-col gap-1`},L=[`for`],R={key:0,"aria-hidden":`true`,class:`text-red-600 dark:text-red-400`},z={class:`flex min-h-[130px] w-full flex-col items-center justify-center gap-3`},B={class:`top-file-upload__empty-icon`,"aria-hidden":`true`},V={key:0,"aria-label":`Carregando...`,class:`pi pi-spin pi-spinner text-5xl`},H={class:`m-0 text-center text-xs text-secondary-600 dark:text-zinc-300`},U={key:1,class:`flex w-full flex-col gap-2`},W=[`src`,`alt`],G={key:1,class:`flex size-12 shrink-0 items-center justify-center rounded-lg bg-primary-50 text-primary-800 dark:bg-primary-950 dark:text-primary-200`},K={class:`min-w-0 flex-1`},q={class:`m-0 truncate text-xs font-bold text-secondary-900 dark:text-zinc-100`},J={class:`text-[11px] text-secondary-500 dark:text-zinc-400`},Y=[`aria-label`,`disabled`,`onClick`],X=[`id`],Z=(0,c.defineComponent)({inheritAttrs:!1,__name:`TopFileUpload`,props:{modelValue:{default:null},label:{default:``},placeholder:{default:`Arraste e solte o arquivo aqui`},required:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},accept:{default:``},multiple:{type:Boolean,default:!1},maxFileSize:{default:null},maxFiles:{default:null},error:{default:``},selectLabel:{default:`Selecionar arquivo`},removeLabel:{default:`Remover`},loading:{type:Boolean,default:!1}},emits:[`update:modelValue`,`select`,`change`,`remove`,`clear`,`error`],setup(e,{expose:t,emit:n}){let r=e,i=n,a=(0,c.useAttrs)(),o=(0,c.useId)(),s=(0,c.ref)(null),l=(0,c.ref)(b(r.modelValue)),u=(0,c.ref)([]),d=new Map,f=(0,c.computed)(()=>a.id===void 0||a.id===null||a.id===``?o:String(a.id)),p=(0,c.computed)(()=>`${f.value}-error`),h=(0,c.computed)(()=>r.error||u.value[0]?.message||``),g=(0,c.computed)(()=>r.disabled||r.loading),_=(0,c.computed)(()=>{let e=a[`aria-describedby`],t=[typeof e==`string`?e:``,h.value?p.value:``].filter(Boolean);return t.length?t.join(` `):void 0}),v=(0,c.computed)(()=>({...a,id:f.value,required:r.required,"aria-invalid":h.value?!0:a[`aria-invalid`],"aria-describedby":_.value,"aria-label":a[`aria-label`]||(r.label?void 0:r.selectLabel)}));function b(e){return e?Array.isArray(e)?r.multiple?[...e]:e.slice(0,1):[e]:[]}function x(e,t){return e.name===t.name&&e.type===t.type&&e.size===t.size}function S(e){return!r.accept.trim()||r.accept.split(`,`).some(t=>{let n=t.trim().toLowerCase(),r=e.type.toLowerCase();return n?n.startsWith(`.`)?e.name.toLowerCase().endsWith(n):n.endsWith(`/*`)?r.startsWith(n.slice(0,-1)):r===n:!1})}function C(e){return e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(1)} KB`:`${(e/1048576).toFixed(2)} MB`}function w(e){let t=[];return{errors:t,validFiles:e.filter(e=>S(e)?r.maxFileSize&&e.size>r.maxFileSize?(t.push({code:`file-size`,file:e,message:`O arquivo "${e.name}" excede o tamanho máximo de ${C(r.maxFileSize)}.`}),!1):!0:(t.push({code:`file-type`,file:e,message:`O arquivo "${e.name}" não possui um tipo aceito.`}),!1))}}function T(e){let t=e.originalEvent;return Array.from(t.dataTransfer?.files??t.target?.files??[])}function E(e){return r.multiple?[...e]:e[0]??null}function D(){s.value&&(s.value.files=[...l.value])}function O(e,t){l.value=e,u.value=[],F(),(0,c.nextTick)(D);let n=E(e);i(`update:modelValue`,n),i(`change`,n),t===`select`&&i(`select`,[...e]),t===`clear`&&i(`clear`)}function k(e){let{errors:t,validFiles:n}=w(T(e)),a=r.multiple?[...l.value,...n.filter(e=>!l.value.some(t=>x(t,e)))]:n.slice(-1);if(r.maxFiles&&a.length>r.maxFiles){let e=a.slice(r.maxFiles);t.push(...e.map(e=>({code:`file-limit`,file:e,message:`O limite máximo é de ${r.maxFiles} arquivo(s).`}))),a=a.slice(0,r.maxFiles)}if(t.length?(u.value=t,i(`error`,t)):u.value=[],D(),n.length&&!A(a,l.value)){l.value=a,F(),(0,c.nextTick)(D);let e=E(a);i(`update:modelValue`,e),i(`change`,e),i(`select`,[...a])}}function A(e,t){return e.length===t.length&&e.every((e,n)=>x(e,t[n]))}function j(){g.value||s.value?.choose()}function M(e,t){if(g.value)return;let n=l.value[t];if(!n)return;e(t);let r=l.value.filter((e,n)=>n!==t);O(r,`remove`),i(`remove`,n,t),r.length||i(`clear`)}function N(){g.value||!l.value.length||O([],`clear`)}function P(e){if(!e.type.startsWith(`image/`)||typeof URL.createObjectURL!=`function`)return``;let t=d.get(e);if(t)return t;let n=URL.createObjectURL(e);return d.set(e,n),n}function F(){for(let[e,t]of d)l.value.includes(e)||(URL.revokeObjectURL(t),d.delete(e))}return(0,c.watch)(()=>r.modelValue,e=>{let t=b(e);A(t,l.value)||(l.value=t,u.value=[],F(),(0,c.nextTick)(D))}),(0,c.watch)(()=>r.multiple,()=>{let e=b(r.modelValue);l.value=e,F(),(0,c.nextTick)(D)}),(0,c.onMounted)(D),(0,c.onBeforeUnmount)(()=>{for(let e of d.values())URL.revokeObjectURL(e);d.clear()}),t({choose:j,clear:N}),(t,n)=>((0,c.openBlock)(),(0,c.createElementBlock)(`div`,I,[e.label?((0,c.openBlock)(),(0,c.createElementBlock)(`label`,{key:0,for:f.value,class:`text-xs font-bold text-secondary-800 dark:text-zinc-200`},[(0,c.createTextVNode)((0,c.toDisplayString)(e.label)+` `,1),e.required?((0,c.openBlock)(),(0,c.createElementBlock)(`span`,R,`*`)):(0,c.createCommentVNode)(``,!0)],8,L)):(0,c.createCommentVNode)(``,!0),(0,c.createVNode)((0,c.unref)(m.default),{ref_key:`fileUploadRef`,ref:s,mode:`advanced`,accept:e.accept||void 0,multiple:e.multiple,disabled:g.value,"custom-upload":!0,"show-upload-button":!1,"show-cancel-button":!1,pt:{root:{class:`top-file-upload__root w-full`},header:{class:`hidden`},input:v.value,content:{class:[`top-file-upload__dropzone min-h-[224px] rounded-[10px] border p-4 transition-colors`,h.value?`border-red-600 bg-red-50 dark:border-red-400 dark:bg-red-950/20`:`border-secondary-300 bg-white hover:border-primary-600 hover:bg-primary-50 dark:border-zinc-600 dark:bg-zinc-800 dark:hover:border-primary-400 dark:hover:bg-zinc-700`,g.value?`cursor-not-allowed opacity-60`:``].join(` `)}},onSelect:k},{content:(0,c.withCtx)(({removeFileCallback:r})=>[(0,c.createElementVNode)(`div`,z,[l.value.length?((0,c.openBlock)(),(0,c.createElementBlock)(`div`,U,[((0,c.openBlock)(!0),(0,c.createElementBlock)(c.Fragment,null,(0,c.renderList)(l.value,(i,a)=>((0,c.openBlock)(),(0,c.createElementBlock)(`div`,{key:`${i.name}-${i.size}-${i.lastModified}`,class:`flex min-w-0 items-center gap-3 rounded-[10px] border border-secondary-300 bg-white p-3 dark:border-zinc-600 dark:bg-zinc-900`},[(0,c.renderSlot)(t.$slots,`preview`,{file:i,index:a,url:P(i)},()=>[P(i)?((0,c.openBlock)(),(0,c.createElementBlock)(`img`,{key:0,src:P(i),alt:`Pré-visualização de ${i.name}`,class:`size-12 shrink-0 rounded-lg object-cover`},null,8,W)):((0,c.openBlock)(),(0,c.createElementBlock)(`span`,G,[...n[0]||=[(0,c.createElementVNode)(`i`,{class:`pi pi-file text-2xl`,"aria-hidden":`true`},null,-1)]]))]),(0,c.createElementVNode)(`div`,K,[(0,c.createElementVNode)(`p`,q,(0,c.toDisplayString)(i.name),1),(0,c.createElementVNode)(`span`,J,(0,c.toDisplayString)(C(i.size)),1)]),(0,c.createElementVNode)(`button`,{type:`button`,class:`flex size-8 shrink-0 items-center justify-center rounded-full border-0 bg-transparent p-0 text-red-600 transition-colors hover:bg-red-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-red-500 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 dark:text-red-400 dark:hover:bg-red-950/40 dark:focus-visible:ring-offset-zinc-900`,"aria-label":`${e.removeLabel}: ${i.name}`,disabled:g.value,onClick:e=>M(r,a)},[...n[1]||=[(0,c.createElementVNode)(`i`,{class:`pi pi-times`,"aria-hidden":`true`},null,-1)]],8,Y)]))),128)),e.multiple&&(!e.maxFiles||l.value.length<e.maxFiles)?((0,c.openBlock)(),(0,c.createBlock)(y,{key:0,label:e.selectLabel,icon:`pi pi-plus-circle`,outlined:``,disabled:e.disabled,loading:e.loading,class:`mt-1 px-3 py-2 text-xs`,onClick:j},null,8,[`label`,`disabled`,`loading`])):(0,c.createCommentVNode)(``,!0)])):(0,c.renderSlot)(t.$slots,`empty`,{choose:j,disabled:g.value},()=>[(0,c.createElementVNode)(`span`,B,[e.loading?((0,c.openBlock)(),(0,c.createElementBlock)(`i`,V)):((0,c.openBlock)(),(0,c.createBlock)((0,c.unref)(te),{key:1,icon:(0,c.unref)(ee),size:72,"stroke-width":1.5,class:`text-primary-800 dark:text-primary-300`},null,8,[`icon`]))]),(0,c.createElementVNode)(`p`,H,(0,c.toDisplayString)(e.placeholder),1),(0,c.createVNode)(y,{label:e.selectLabel,icon:`pi pi-plus-circle`,disabled:e.disabled,loading:e.loading,class:`px-3 py-2 text-xs`,onClick:j},null,8,[`label`,`disabled`,`loading`])],void 0,0)])]),_:3},8,[`accept`,`multiple`,`disabled`,`pt`]),h.value?((0,c.openBlock)(),(0,c.createElementBlock)(`span`,{key:1,id:p.value,class:`text-[11px] text-red-600 dark:text-red-400`,role:`alert`},(0,c.toDisplayString)(h.value),9,X)):(0,c.createCommentVNode)(``,!0)]))}}),Q={class:`top-input-text top-solutions-component flex w-full flex-col gap-1`},ne=[`for`],re={key:0,"aria-hidden":`true`,class:`text-red-600 dark:text-red-400`},ie=[`id`],ae=(0,c.defineComponent)({inheritAttrs:!1,__name:`TopInputText`,props:{modelValue:{default:``},label:{default:``},placeholder:{default:``},required:{type:Boolean,default:!1},error:{default:``},disabled:{type:Boolean,default:!1},readonly:{type:Boolean,default:!1}},emits:[`update:modelValue`],setup(e,{emit:t}){let n=e,r=t,i=(0,c.useAttrs)(),a=(0,c.useId)(),o=(0,c.computed)(()=>i.id===void 0||i.id===null||i.id===``?a:String(i.id)),s=(0,c.computed)(()=>`${o.value}-error`),l=(0,c.computed)(()=>{if(n.error)return!0;let e=i[`aria-invalid`];return typeof e==`boolean`||e===`true`||e===`false`||e===`grammar`||e===`spelling`?e:void 0}),u=(0,c.computed)(()=>{let e=i[`aria-describedby`],t=[typeof e==`string`?e:``,n.error?s.value:``].filter(Boolean);return t.length?t.join(` `):void 0});function d(e){r(`update:modelValue`,e??``)}return(t,n)=>((0,c.openBlock)(),(0,c.createElementBlock)(`div`,Q,[e.label?((0,c.openBlock)(),(0,c.createElementBlock)(`label`,{key:0,for:o.value,class:`top-field-label text-xs font-bold`},[(0,c.createTextVNode)((0,c.toDisplayString)(e.label)+` `,1),e.required?((0,c.openBlock)(),(0,c.createElementBlock)(`span`,re,`*`)):(0,c.createCommentVNode)(``,!0)],8,ne)):(0,c.createCommentVNode)(``,!0),(0,c.createVNode)((0,c.unref)(h.default),(0,c.mergeProps)(t.$attrs,{id:o.value,"model-value":e.modelValue,type:`text`,placeholder:e.placeholder,required:e.required,disabled:e.disabled,readonly:e.readonly,invalid:!!e.error,"aria-invalid":l.value,"aria-describedby":u.value,fluid:``,class:`top-input-text__control top-field-control h-[40px] w-full rounded-[10px] border px-3 py-2 text-xs read-only:cursor-default disabled:cursor-not-allowed`,"onUpdate:modelValue":d}),null,16,[`id`,`model-value`,`placeholder`,`required`,`disabled`,`readonly`,`invalid`,`aria-invalid`,`aria-describedby`]),e.error?((0,c.openBlock)(),(0,c.createElementBlock)(`span`,{key:1,id:s.value,class:`text-[11px] text-red-600 dark:text-red-400`,role:`alert`},(0,c.toDisplayString)(e.error),9,ie)):(0,c.createCommentVNode)(``,!0)]))}}),oe={class:`top-field-icon pointer-events-none absolute left-3 top-1/2 z-10 -translate-y-1/2`},se={key:0,class:`pi pi-spin pi-spinner`},ce={key:1,class:`pi pi-search`},le={key:1,class:`flex items-center gap-1 !text-sm`},ue={class:`flex items-center gap-2 rounded-[9px] bg-primary-500 px-2 py-1 text-white`},de=[`onClick`],fe={class:`line-clamp-1 max-w-[300px] overflow-hidden text-ellipsis`},pe={key:1,class:`flex min-h-[100px] flex-col items-center justify-center gap-2 py-2`},me={key:0,class:`text-xs font-medium text-primary-600`},he={key:2,class:`text-xs text-secondary-500`},ge={key:1},_e={key:1,class:`flex items-center gap-2 font-semibold`},ve={key:1,class:`flex w-full min-w-0 items-start gap-2 overflow-hidden px-2 py-3 text-sm`,style:{"white-space":`normal`}},ye=[`title`],be={key:0,class:`top-select-option-prefix whitespace-nowrap font-bold text-primary-800 dark:text-primary-100`},$={key:0,class:`rounded-sm bg-primary-200 p-0 font-bold text-black dark:bg-cyan-700 dark:text-white`},xe={key:0,class:`rounded-sm bg-primary-200 p-0 font-bold text-black dark:bg-cyan-700 dark:text-white`},Se=(0,c.defineComponent)({__name:`TopSelect`,props:{modelValue:{default:null},options:{default:()=>[]},loading:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},placeholder:{default:`Pesquisar...`},optionLabel:{type:[String,Function],default:`label`},optionKey:{default:`id`},optionPrefix:{default:``},showOptionPrefix:{type:Boolean,default:!1},showSelectedPrefix:{type:Boolean,default:!1},panelWidth:{default:null},scrollHeight:{default:`250px`},invalid:{type:Boolean,default:!1},showTooltip:{type:Boolean,default:!0},optionGroupLabel:{default:null},optionGroupChildren:{default:null},minQueryLength:{default:1},emptyMessage:{default:`Nenhum resultado encontrado.`},loadingMessage:{default:`Carregando...`},showLoadingMessage:{type:Boolean,default:!0},multiple:{type:Boolean,default:!1},forceSelection:{type:Boolean,default:!0},closeOnSelect:{type:Boolean,default:!1}},emits:[`update:modelValue`,`search`,`loadMore`,`clear`,`select`,`change`],setup(e,{expose:t,emit:n}){let r=e,i=n,a=(0,c.useSlots)(),o=g.default,s=(0,c.ref)(``),l=(0,c.ref)(!1),d=(0,c.ref)(null),f=`top-select-${Math.random().toString(36).slice(2)}`,p=null,m=(0,c.computed)({get:()=>r.modelValue,set:e=>i(`update:modelValue`,e)});function h(e,t){return e==null?``:String(typeof e==`object`?e[t]??``:e)}function _(e){return e==null?``:typeof r.optionLabel==`function`?r.optionLabel(e):h(e,r.optionLabel)}function v(e){return r.optionPrefix?h(e,r.optionPrefix):``}function y(e,t=r.showSelectedPrefix){let n=_(e),i=v(e);return t&&i?`${i} - ${n}`:n}function b(e){let t=s.value;if(!t)return[{text:e,highlighted:!1}];let n=t.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`),r=RegExp(`(${n})`,`gi`);return e.split(r).filter(Boolean).map(e=>({text:e,highlighted:e.toLowerCase()===t.toLowerCase()}))}function x(){d.value?.hide?.()}function S(){typeof window>`u`||window.dispatchEvent(new CustomEvent(`top-select:close-others`,{detail:{instanceId:f}}))}function C(e){e.detail?.instanceId!==f&&x()}function w(){if(r.disabled||p){x();return}l.value=!0,S()}function T(){r.closeOnSelect&&(l.value=!1,x(),(0,c.nextTick)(x),p&&clearTimeout(p),p=setTimeout(()=>{x(),p=null},200))}return t({hideDropdown:x}),(0,c.onMounted)(()=>window.addEventListener(`top-select:close-others`,C)),(0,c.onBeforeUnmount)(()=>{window.removeEventListener(`top-select:close-others`,C),p&&clearTimeout(p)}),(0,c.watch)(()=>r.disabled,e=>{e&&(l.value=!1,x())}),(0,c.watch)(()=>r.options,()=>{l.value||x()}),(t,n)=>((0,c.openBlock)(),(0,c.createElementBlock)(`div`,{class:(0,c.normalizeClass)([`top-select top-solutions-component relative w-full`,{"pointer-events-none":e.disabled}]),onFocusin:w},[(0,c.createElementVNode)(`span`,oe,[(0,c.renderSlot)(t.$slots,`icon`,{loading:e.loading},()=>[e.loading?((0,c.openBlock)(),(0,c.createElementBlock)(`i`,se)):((0,c.openBlock)(),(0,c.createElementBlock)(`i`,ce))])]),(0,c.createVNode)((0,c.unref)(o),{ref_key:`autocompleteRef`,ref:d,modelValue:m.value,"onUpdate:modelValue":n[0]||=e=>m.value=e,"option-group-label":e.optionGroupLabel??void 0,"option-group-children":e.optionGroupChildren??void 0,suggestions:e.options,"data-key":e.optionKey,"option-label":e=>y(e),placeholder:e.placeholder,multiple:e.multiple,"min-length":e.minQueryLength,disabled:e.disabled,delay:500,"show-clear":!e.multiple&&!e.disabled,dropdown:``,"dropdown-mode":`current`,"complete-on-focus":!1,invalid:e.invalid,fluid:``,"force-selection":e.forceSelection,"input-class":`text-xs`,"virtual-scroller-options":{lazy:!0,onLazyLoad:e=>i(`loadMore`,e),itemSize:84,showLoader:!0,scrollHeight:e.scrollHeight},pt:{root:{class:[`w-full text-xs`,e.multiple?`h-auto`:`h-[40px]`].join(` `)},pcInputText:{root:{class:`top-field-control w-full h-auto text-xs border rounded-[10px] !pl-9 min-h-[36px]`}},input:{class:[`top-field-control w-full h-auto text-xs`,e.multiple?`border-0 py-1 !shadow-none outline-none ring-0`:`border rounded-[10px] !pl-9 min-h-[36px]`].join(` `)},inputMultiple:{class:`top-field-control rounded-[10px] pl-9 min-h-[40px]`},inputChip:{class:`py-0`},token:{class:`bg-primary-100 text-primary-900 rounded-md gap-2 px-2 my-1 dark:bg-primary-900 dark:text-primary-100`},removeTokenIcon:{class:`text-primary-900 w-3 h-3 cursor-pointer dark:text-primary-100`},panel:{class:`top-select-panel top-solutions-component max-w-[85vw] overflow-hidden h-fit shadow-xl`},listContainer:{class:`max-w-full overflow-x-hidden`,style:{overflowX:`hidden`,maxWidth:e.panelWidth??`85vw`,...e.panelWidth?{width:e.panelWidth}:{}}},list:{class:`max-w-full overflow-x-hidden`},option:{class:`max-w-full overflow-hidden min-h-[84px]`},placeholder:{class:`!text-xs`}},"search-message":` `,onClear:n[1]||=e=>{s.value=``,i(`clear`)},onItemSelect:n[2]||=e=>{s.value=``,i(`select`,e),T()},onComplete:n[3]||=t=>{if(e.disabled){x();return}s.value=t.query??``,S(),i(`search`,{...t,query:s.value})},onChange:n[4]||=e=>i(`change`,e)},(0,c.createSlots)({chip:(0,c.withCtx)(e=>[(0,c.unref)(a).chip?(0,c.renderSlot)(t.$slots,`chip`,(0,c.normalizeProps)((0,c.guardReactiveProps)(e)),void 0,void 0,0):((0,c.openBlock)(),(0,c.createElementBlock)(`div`,le,[(0,c.createElementVNode)(`div`,ue,[(0,c.createElementVNode)(`i`,{class:`pi pi-times-circle shrink-0 cursor-pointer rounded-full hover:bg-primary-800`,onClick:t=>e.removeCallback(t)},null,8,de),(0,c.withDirectives)(((0,c.openBlock)(),(0,c.createElementBlock)(`span`,fe,[(0,c.createTextVNode)((0,c.toDisplayString)(y(e.value)),1)])),[[(0,c.unref)(u.default),y(e.value),void 0,{top:!0}]])])]))]),empty:(0,c.withCtx)(()=>[(0,c.unref)(a).empty?(0,c.renderSlot)(t.$slots,`empty`,{},void 0,void 0,0):e.loading?((0,c.openBlock)(),(0,c.createElementBlock)(`div`,pe,[n[5]||=(0,c.createElementVNode)(`span`,{class:`pi pi-spin pi-spinner text-2xl text-primary-600`},null,-1),e.showLoadingMessage?((0,c.openBlock)(),(0,c.createElementBlock)(`span`,me,(0,c.toDisplayString)(e.loadingMessage),1)):(0,c.createCommentVNode)(``,!0)])):((0,c.openBlock)(),(0,c.createElementBlock)(`span`,he,(0,c.toDisplayString)(e.emptyMessage),1))]),"selected-item":(0,c.withCtx)(e=>[(0,c.unref)(a)[`selected-item`]?(0,c.renderSlot)(t.$slots,`selected-item`,(0,c.normalizeProps)((0,c.guardReactiveProps)(e)),void 0,void 0,0):e.item?((0,c.openBlock)(),(0,c.createElementBlock)(`span`,ge,(0,c.toDisplayString)(y(e.item)),1)):(0,c.createCommentVNode)(``,!0)]),optiongroup:(0,c.withCtx)(n=>[(0,c.unref)(a)[`option-group`]?(0,c.renderSlot)(t.$slots,`option-group`,(0,c.normalizeProps)((0,c.guardReactiveProps)(n)),void 0,void 0,0):((0,c.openBlock)(),(0,c.createElementBlock)(`div`,_e,[n.option.icon?((0,c.openBlock)(),(0,c.createElementBlock)(`i`,{key:0,class:(0,c.normalizeClass)(n.option.icon)},null,2)):(0,c.createCommentVNode)(``,!0),(0,c.createElementVNode)(`span`,null,(0,c.toDisplayString)(n.option[e.optionGroupLabel??`label`]),1)]))]),option:(0,c.withCtx)(r=>[(0,c.unref)(a).option?(0,c.renderSlot)(t.$slots,`option`,(0,c.mergeProps)(r,{label:_(r.option),prefix:v(r.option),query:s.value}),void 0,void 0,0):(0,c.withDirectives)(((0,c.openBlock)(),(0,c.createElementBlock)(`div`,ve,[(0,c.createElementVNode)(`span`,{class:`top-select-option-label line-clamp-2 min-w-0 flex-1 text-secondary-700 dark:text-zinc-200`,title:_(r.option)},[e.showOptionPrefix&&v(r.option)?((0,c.openBlock)(),(0,c.createElementBlock)(`span`,be,[((0,c.openBlock)(!0),(0,c.createElementBlock)(c.Fragment,null,(0,c.renderList)(b(v(r.option)),(e,t)=>((0,c.openBlock)(),(0,c.createElementBlock)(c.Fragment,{key:t},[e.highlighted?((0,c.openBlock)(),(0,c.createElementBlock)(`mark`,$,(0,c.toDisplayString)(e.text),1)):((0,c.openBlock)(),(0,c.createElementBlock)(c.Fragment,{key:1},[(0,c.createTextVNode)((0,c.toDisplayString)(e.text),1)],64))],64))),128)),n[6]||=(0,c.createElementVNode)(`span`,{class:`font-bold text-secondary-500 dark:text-zinc-400`},`\xA0-\xA0`,-1)])):(0,c.createCommentVNode)(``,!0),((0,c.openBlock)(!0),(0,c.createElementBlock)(c.Fragment,null,(0,c.renderList)(b(_(r.option)),(e,t)=>((0,c.openBlock)(),(0,c.createElementBlock)(c.Fragment,{key:t},[e.highlighted?((0,c.openBlock)(),(0,c.createElementBlock)(`mark`,xe,(0,c.toDisplayString)(e.text),1)):((0,c.openBlock)(),(0,c.createElementBlock)(c.Fragment,{key:1},[(0,c.createTextVNode)((0,c.toDisplayString)(e.text),1)],64))],64))),128))],8,ye)])),[[(0,c.unref)(u.default),e.showTooltip?_(r.option):null,void 0,{top:!0}]])]),_:2},[(0,c.unref)(a).footer?{name:`footer`,fn:(0,c.withCtx)(e=>[(0,c.renderSlot)(t.$slots,`footer`,(0,c.normalizeProps)((0,c.guardReactiveProps)(e)))]),key:`0`}:void 0]),1032,[`modelValue`,`option-group-label`,`option-group-children`,`suggestions`,`data-key`,`option-label`,`placeholder`,`multiple`,`min-length`,`disabled`,`show-clear`,`invalid`,`force-selection`,`virtual-scroller-options`,`pt`])],34))}}),Ce={class:`top-toast__content`},we={class:`top-toast__detail`},Te=[`onClick`],Ee={key:0,class:`top-toast__footer`},De=(0,c.defineComponent)({__name:`TopToast`,props:{baseZIndex:{default:3e4}},setup(e){function t(e){return e.data?.footer}function n(e){return e.data?.action}function r(e){n(e)?.onClick?.()}function i(e){return t(e)!==void 0}function a(e){return!!n(e)}function o(e,t){return`top-toast__${t}--${e.severity??`info`}`}return(s,l)=>((0,c.openBlock)(),(0,c.createBlock)((0,c.unref)(_.default),{position:`top-right`,"base-z-index":e.baseZIndex},{message:(0,c.withCtx)(e=>[(0,c.createElementVNode)(`div`,Ce,[(0,c.createElementVNode)(`div`,{class:(0,c.normalizeClass)([`top-toast__summary`,o(e.message,`summary`)])},(0,c.toDisplayString)(e.message.summary),3),(0,c.createElementVNode)(`div`,we,(0,c.toDisplayString)(e.message.detail),1),a(e.message)?(0,c.renderSlot)(s.$slots,`action`,{action:n(e.message),message:e.message,run:()=>r(e.message)},()=>[n(e.message)?((0,c.openBlock)(),(0,c.createElementBlock)(`button`,{key:0,class:(0,c.normalizeClass)([`top-toast__action`,o(e.message,`action`)]),type:`button`,onClick:t=>r(e.message)},[n(e.message)?.icon?((0,c.openBlock)(),(0,c.createElementBlock)(`i`,{key:0,class:(0,c.normalizeClass)(n(e.message)?.icon),"aria-hidden":`true`},null,2)):(0,c.createCommentVNode)(``,!0),(0,c.createTextVNode)(` `+(0,c.toDisplayString)(n(e.message)?.label),1)],10,Te)):(0,c.createCommentVNode)(``,!0)],void 0,0):(0,c.createCommentVNode)(``,!0),i(e.message)?(0,c.renderSlot)(s.$slots,`footer`,{message:e.message,footer:t(e.message)},()=>[t(e.message)===void 0?(0,c.createCommentVNode)(``,!0):((0,c.openBlock)(),(0,c.createElementBlock)(`div`,Ee,(0,c.toDisplayString)(t(e.message)),1))],void 0,1):(0,c.createCommentVNode)(``,!0)])]),_:3},8,[`base-z-index`]))}});Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return Z}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return Se}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return ae}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return De}});
|
|
2
|
+
//# sourceMappingURL=TopToast-BOBZjpqq.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TopToast-BOBZjpqq.cjs","names":["defineComponent","computed","_hoisted_1","openBlock","createElementBlock","mergeProps","Fragment","renderList","createBlock","resolveDynamicComponent","$attrs"],"sources":["../src/components/TopButton.vue","../src/components/TopButton.vue","../src/tokens/colors.ts","../src/components/TopConfirmDialog.vue","../src/components/TopConfirmDialog.vue","../src/components/TopDatePicker.vue","../src/components/TopDatePicker.vue","../node_modules/@hugeicons/core-free-icons/dist/esm/CloudUploadIcon.js","../node_modules/@hugeicons/vue/dist/esm/components/HugeiconsIcon.vue2.js","../node_modules/@hugeicons/vue/dist/esm/_virtual/_plugin-vue_export-helper.js","../node_modules/@hugeicons/vue/dist/esm/components/HugeiconsIcon.vue.js","../src/components/TopFileUpload.vue","../src/components/TopFileUpload.vue","../src/components/TopInputText.vue","../src/components/TopInputText.vue","../src/components/TopSelect.vue","../src/components/TopSelect.vue","../src/components/TopToast.vue","../src/components/TopToast.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed, useSlots } from 'vue'\r\nimport Button from 'primevue/button'\r\nimport vTooltip from 'primevue/tooltip'\nimport { twMerge } from 'tailwind-merge'\n\nexport type TopButtonSeverity = 'primary' | 'secondary' | 'success' | 'warn' | 'danger'\n\nconst slots = useSlots()\nconst outrosIcones = computed(() => Boolean(slots.icon))\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n tooltip?: string\r\n tooltipClass?: string\r\n label?: string\r\n icon?: string\r\n loading?: boolean\r\n class?: string\r\n outlined?: boolean\n severity?: TopButtonSeverity\n secondary?: boolean\n disabled?: boolean\r\n unstyled?: boolean\r\n type?: 'button' | 'submit' | 'reset'\r\n }>(),\r\n {\r\n tooltip: '',\r\n tooltipClass: 'text-xs',\r\n label: '',\r\n icon: '',\r\n loading: false,\r\n class: '',\r\n outlined: false,\n severity: 'primary',\n secondary: false,\n disabled: false,\r\n unstyled: false,\r\n type: 'button',\r\n },\r\n)\r\n\r\nconst emit = defineEmits<{\n click: []\n}>()\n\nconst resolvedSeverity = computed<TopButtonSeverity>(() =>\n props.secondary ? 'secondary' : props.severity,\n)\n\nconst buttonClasses = computed(() => {\n const baseClasses = !props.unstyled\n ? resolvedSeverity.value === 'secondary'\n ? 'rounded-[10px] border px-3 py-2 font-bold dark:!border-zinc-500 dark:!bg-zinc-700 dark:!text-zinc-100 dark:hover:!bg-zinc-600'\n : props.outlined\n ? resolvedSeverity.value === 'primary'\n ? 'shrink-0 rounded-[10px] border-primary-800 px-3 py-2 text-primary-800 hover:bg-primary-50 dark:border-primary-200 dark:bg-transparent dark:text-primary-100 dark:hover:bg-primary-900'\n : 'shrink-0 rounded-[10px] border px-3 py-2 font-bold'\n : resolvedSeverity.value === 'primary'\n ? 'rounded-[10px] !border-primary-900 bg-primary-900 px-3 py-2 font-bold text-white hover:!border-primary-800 hover:bg-primary-800 dark:!text-white'\n : 'rounded-[10px] border px-3 py-2 font-bold'\n : ''\r\n\r\n return twMerge(baseClasses, props.class)\r\n})\r\n</script>\r\n\r\n<template>\r\n <span class=\"top-button top-solutions-component h-fit w-fit rounded-[12px] bg-transparent\">\r\n <Button\r\n v-tooltip.top=\"{\r\n value: tooltip,\r\n class: tooltipClass,\r\n }\"\r\n :type=\"type\"\r\n :label=\"label\"\r\n :disabled=\"disabled || loading\"\r\n :icon=\"outrosIcones ? undefined : icon || undefined\"\r\n :loading=\"loading\"\r\n :outlined=\"outlined || resolvedSeverity === 'secondary'\"\n :severity=\"resolvedSeverity === 'primary' ? undefined : resolvedSeverity\"\n :class=\"buttonClasses\"\r\n :pt=\"{\r\n root: { class: buttonClasses },\r\n }\"\r\n @click=\"emit('click')\"\r\n >\r\n <template v-if=\"outrosIcones\" #icon>\r\n <slot name=\"icon\" />\r\n </template>\r\n </Button>\r\n </span>\r\n</template>\r\n\r\n<style>\r\n.top-button {\r\n width: fit-content;\r\n height: fit-content;\r\n border-radius: 12px;\r\n background-color: transparent;\r\n}\r\n</style>\r\n","<script setup lang=\"ts\">\r\nimport { computed, useSlots } from 'vue'\r\nimport Button from 'primevue/button'\r\nimport vTooltip from 'primevue/tooltip'\nimport { twMerge } from 'tailwind-merge'\n\nexport type TopButtonSeverity = 'primary' | 'secondary' | 'success' | 'warn' | 'danger'\n\nconst slots = useSlots()\nconst outrosIcones = computed(() => Boolean(slots.icon))\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n tooltip?: string\r\n tooltipClass?: string\r\n label?: string\r\n icon?: string\r\n loading?: boolean\r\n class?: string\r\n outlined?: boolean\n severity?: TopButtonSeverity\n secondary?: boolean\n disabled?: boolean\r\n unstyled?: boolean\r\n type?: 'button' | 'submit' | 'reset'\r\n }>(),\r\n {\r\n tooltip: '',\r\n tooltipClass: 'text-xs',\r\n label: '',\r\n icon: '',\r\n loading: false,\r\n class: '',\r\n outlined: false,\n severity: 'primary',\n secondary: false,\n disabled: false,\r\n unstyled: false,\r\n type: 'button',\r\n },\r\n)\r\n\r\nconst emit = defineEmits<{\n click: []\n}>()\n\nconst resolvedSeverity = computed<TopButtonSeverity>(() =>\n props.secondary ? 'secondary' : props.severity,\n)\n\nconst buttonClasses = computed(() => {\n const baseClasses = !props.unstyled\n ? resolvedSeverity.value === 'secondary'\n ? 'rounded-[10px] border px-3 py-2 font-bold dark:!border-zinc-500 dark:!bg-zinc-700 dark:!text-zinc-100 dark:hover:!bg-zinc-600'\n : props.outlined\n ? resolvedSeverity.value === 'primary'\n ? 'shrink-0 rounded-[10px] border-primary-800 px-3 py-2 text-primary-800 hover:bg-primary-50 dark:border-primary-200 dark:bg-transparent dark:text-primary-100 dark:hover:bg-primary-900'\n : 'shrink-0 rounded-[10px] border px-3 py-2 font-bold'\n : resolvedSeverity.value === 'primary'\n ? 'rounded-[10px] !border-primary-900 bg-primary-900 px-3 py-2 font-bold text-white hover:!border-primary-800 hover:bg-primary-800 dark:!text-white'\n : 'rounded-[10px] border px-3 py-2 font-bold'\n : ''\r\n\r\n return twMerge(baseClasses, props.class)\r\n})\r\n</script>\r\n\r\n<template>\r\n <span class=\"top-button top-solutions-component h-fit w-fit rounded-[12px] bg-transparent\">\r\n <Button\r\n v-tooltip.top=\"{\r\n value: tooltip,\r\n class: tooltipClass,\r\n }\"\r\n :type=\"type\"\r\n :label=\"label\"\r\n :disabled=\"disabled || loading\"\r\n :icon=\"outrosIcones ? undefined : icon || undefined\"\r\n :loading=\"loading\"\r\n :outlined=\"outlined || resolvedSeverity === 'secondary'\"\n :severity=\"resolvedSeverity === 'primary' ? undefined : resolvedSeverity\"\n :class=\"buttonClasses\"\r\n :pt=\"{\r\n root: { class: buttonClasses },\r\n }\"\r\n @click=\"emit('click')\"\r\n >\r\n <template v-if=\"outrosIcones\" #icon>\r\n <slot name=\"icon\" />\r\n </template>\r\n </Button>\r\n </span>\r\n</template>\r\n\r\n<style>\r\n.top-button {\r\n width: fit-content;\r\n height: fit-content;\r\n border-radius: 12px;\r\n background-color: transparent;\r\n}\r\n</style>\r\n","export const colors = {\n primary: {\n 50: '#EEF9FF',\n 100: '#DFF4FF',\n 200: '#C5E6F8',\n 300: '#8EC4DF',\n 400: '#66ACD1',\n 500: '#2488BC',\n 600: '#036DA3',\n 700: '#1B5783',\n 800: '#02466B',\n 900: '#052F4A',\n 950: '#0C192D',\n },\n secondary: {\n 50: '#FAFAFA',\n 100: '#F4F4F5',\n 200: '#E9E9E9',\n 300: '#D8D8D8',\n 400: '#B8B8B8',\n 500: '#8E8E8E',\n 600: '#676767',\n 700: '#4B4B4B',\n 800: '#343434',\n 900: '#1C1917',\n 950: '#0C0A09',\n },\n success: {\n 50: '#FAFFFA',\n 100: '#F4FBF6',\n 200: '#DFF6DE',\n 300: '#CBE3CA',\n 400: '#A3CCA1',\n 500: '#6BA968',\n 600: '#358F30',\n 700: '#2C7B27',\n 800: '#1E631A',\n 900: '#10430D',\n 950: '#062804',\n },\n warn: {\n 50: '#FFF7ED',\n 100: '#FDF3D8',\n 200: '#FDE9B2',\n 300: '#FDD566',\n 400: '#FFB900',\n 500: '#FFA515',\n 600: '#FD9024',\n 700: '#DD781F',\n 800: '#BC4E00',\n 900: '#A42D02',\n 950: '#792202',\n },\n danger: {\n 50: '#F8E6E4',\n 100: '#FFDDD9',\n 200: '#EEC1BC',\n 300: '#E3938C',\n 400: '#E3675C',\n 500: '#DC3F32',\n 600: '#CF150E',\n 700: '#B10404',\n 800: '#820907',\n 900: '#5D0803',\n 950: '#450501',\n },\n} as const\n","<script setup lang=\"ts\">\r\nimport { computed } from \"vue\";\r\nimport Dialog from \"primevue/dialog\";\r\nimport { colors } from \"../tokens/colors\";\r\nimport TopButton from \"./TopButton.vue\";\r\n\r\ntype ConfirmDialogSeverity = \"primary\" | \"danger\";\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n modelValue?: boolean;\r\n title?: string;\r\n message?: string;\r\n confirmText?: string;\r\n cancelText?: string;\r\n loading?: boolean;\r\n loadingText?: string;\r\n severity?: ConfirmDialogSeverity;\r\n icon?: string;\r\n }>(),\r\n {\r\n modelValue: false,\r\n title: \"Confirmar\",\r\n message: \"\",\r\n confirmText: \"Confirmar\",\r\n cancelText: \"Cancelar\",\r\n loading: false,\r\n loadingText: \"Processando...\",\r\n severity: \"danger\",\r\n icon: \"pi pi-exclamation-triangle\",\r\n }\r\n);\r\n\r\nconst emit = defineEmits<{\r\n \"update:modelValue\": [value: boolean];\r\n confirm: [];\r\n cancel: [];\r\n close: [];\r\n}>();\r\n\r\nconst visibleProxy = computed({\r\n get: () => props.modelValue,\r\n set: (value: boolean) => {\r\n if (!value && props.loading) return;\r\n emit(\"update:modelValue\", value);\r\n },\r\n});\r\n\r\nconst accentStyle = computed<Record<string, string>>(() => ({\r\n \"--top-confirm-dialog-accent\":\r\n props.severity === \"danger\" ? colors.danger[600] : colors.primary[800],\r\n \"--top-confirm-dialog-accent-hover\":\r\n props.severity === \"danger\" ? colors.danger[700] : colors.primary[700],\r\n}));\r\n\r\nconst confirmButtonClass = computed(() =>\r\n [\r\n \"px-3 py-2 text-sm\",\r\n props.severity === \"danger\" ? \"!border-red-600 !bg-red-600 hover:!border-red-700 hover:!bg-red-700\" : \"\",\r\n ]\r\n .filter(Boolean)\r\n .join(\" \")\r\n);\r\n\r\nfunction confirm() {\r\n if (props.loading) return;\r\n emit(\"confirm\");\r\n}\r\n\r\nfunction cancel() {\r\n if (props.loading) return;\r\n emit(\"cancel\");\r\n visibleProxy.value = false;\r\n}\r\n\r\nfunction close() {\r\n if (props.loading) return;\r\n visibleProxy.value = false;\r\n}\r\n</script>\r\n\r\n<template>\r\n <Dialog\r\n v-model:visible=\"visibleProxy\"\r\n modal\r\n :closable=\"false\"\r\n :close-on-escape=\"!loading\"\r\n :dismissable-mask=\"false\"\r\n :draggable=\"false\"\r\n :show-header=\"false\"\r\n :style=\"{ width: '500px', maxWidth: 'calc(100vw - 2rem)' }\"\r\n :aria-label=\"title\"\r\n :pt=\"{\r\n root: { class: 'top-confirm-dialog top-solutions-component' },\r\n content: { class: 'p-6' },\r\n footer: { class: 'hidden' },\r\n }\"\r\n @hide=\"emit('close')\"\r\n >\r\n <div\r\n class=\"relative flex flex-col items-center gap-4 text-center\"\r\n :style=\"accentStyle\"\r\n >\r\n <button\r\n type=\"button\"\r\n class=\"absolute right-[-0.25rem] top-[-0.5rem] flex size-8 items-center justify-center rounded-full border-0 bg-transparent p-0 text-secondary-700 outline-none transition-colors hover:bg-secondary-200 focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 dark:text-zinc-200 dark:hover:bg-zinc-700\"\r\n :aria-label=\"cancelText\"\r\n :disabled=\"loading\"\r\n @click=\"close\"\r\n >\r\n <i class=\"pi pi-times text-lg\" aria-hidden=\"true\" />\r\n </button>\r\n\r\n <div class=\"flex flex-col items-center gap-2 pt-2\">\r\n <i\r\n :class=\"[icon, 'top-confirm-dialog__icon text-[40px]']\"\r\n aria-hidden=\"true\"\r\n />\r\n <p class=\"text-base font-bold text-secondary-900 dark:text-zinc-100\">\r\n {{ title }}\r\n </p>\r\n </div>\r\n\r\n <div class=\"text-sm leading-5 text-secondary-700 dark:text-zinc-300\">\r\n <slot name=\"message\">\r\n <slot>{{ message }}</slot>\r\n </slot>\r\n </div>\r\n\r\n <div class=\"mt-2 flex w-full items-center justify-center gap-3\">\r\n <TopButton\r\n :label=\"cancelText\"\r\n secondary\r\n :disabled=\"loading\"\r\n class=\"px-3 py-2 text-sm\"\r\n @click=\"cancel\"\r\n />\r\n <TopButton\r\n :label=\"loading ? loadingText : confirmText\"\r\n :loading=\"loading\"\r\n :class=\"confirmButtonClass\"\r\n @click=\"confirm\"\r\n />\r\n </div>\r\n </div>\r\n </Dialog>\r\n</template>\r\n\r\n<style>\r\n.top-confirm-dialog {\r\n border-radius: 10px;\r\n box-shadow: 0 4px 4px rgb(0 0 0 / 25%);\r\n}\r\n\r\n.top-confirm-dialog__icon {\r\n color: var(--top-confirm-dialog-accent);\r\n}\r\n\r\n.top-confirm-dialog__confirm--danger {\r\n border-color: var(--top-confirm-dialog-accent) !important;\r\n background-color: var(--top-confirm-dialog-accent) !important;\r\n}\r\n\r\n.top-confirm-dialog__confirm--danger:hover {\r\n border-color: var(--top-confirm-dialog-accent-hover) !important;\r\n background-color: var(--top-confirm-dialog-accent-hover) !important;\r\n}\r\n\r\n.top-confirm-dialog__confirm--danger:focus {\r\n box-shadow: 0 0 0 0.2rem var(--top-confirm-dialog-accent) !important;\r\n}\r\n</style>\r\n","<script setup lang=\"ts\">\r\nimport { computed } from \"vue\";\r\nimport Dialog from \"primevue/dialog\";\r\nimport { colors } from \"../tokens/colors\";\r\nimport TopButton from \"./TopButton.vue\";\r\n\r\ntype ConfirmDialogSeverity = \"primary\" | \"danger\";\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n modelValue?: boolean;\r\n title?: string;\r\n message?: string;\r\n confirmText?: string;\r\n cancelText?: string;\r\n loading?: boolean;\r\n loadingText?: string;\r\n severity?: ConfirmDialogSeverity;\r\n icon?: string;\r\n }>(),\r\n {\r\n modelValue: false,\r\n title: \"Confirmar\",\r\n message: \"\",\r\n confirmText: \"Confirmar\",\r\n cancelText: \"Cancelar\",\r\n loading: false,\r\n loadingText: \"Processando...\",\r\n severity: \"danger\",\r\n icon: \"pi pi-exclamation-triangle\",\r\n }\r\n);\r\n\r\nconst emit = defineEmits<{\r\n \"update:modelValue\": [value: boolean];\r\n confirm: [];\r\n cancel: [];\r\n close: [];\r\n}>();\r\n\r\nconst visibleProxy = computed({\r\n get: () => props.modelValue,\r\n set: (value: boolean) => {\r\n if (!value && props.loading) return;\r\n emit(\"update:modelValue\", value);\r\n },\r\n});\r\n\r\nconst accentStyle = computed<Record<string, string>>(() => ({\r\n \"--top-confirm-dialog-accent\":\r\n props.severity === \"danger\" ? colors.danger[600] : colors.primary[800],\r\n \"--top-confirm-dialog-accent-hover\":\r\n props.severity === \"danger\" ? colors.danger[700] : colors.primary[700],\r\n}));\r\n\r\nconst confirmButtonClass = computed(() =>\r\n [\r\n \"px-3 py-2 text-sm\",\r\n props.severity === \"danger\" ? \"!border-red-600 !bg-red-600 hover:!border-red-700 hover:!bg-red-700\" : \"\",\r\n ]\r\n .filter(Boolean)\r\n .join(\" \")\r\n);\r\n\r\nfunction confirm() {\r\n if (props.loading) return;\r\n emit(\"confirm\");\r\n}\r\n\r\nfunction cancel() {\r\n if (props.loading) return;\r\n emit(\"cancel\");\r\n visibleProxy.value = false;\r\n}\r\n\r\nfunction close() {\r\n if (props.loading) return;\r\n visibleProxy.value = false;\r\n}\r\n</script>\r\n\r\n<template>\r\n <Dialog\r\n v-model:visible=\"visibleProxy\"\r\n modal\r\n :closable=\"false\"\r\n :close-on-escape=\"!loading\"\r\n :dismissable-mask=\"false\"\r\n :draggable=\"false\"\r\n :show-header=\"false\"\r\n :style=\"{ width: '500px', maxWidth: 'calc(100vw - 2rem)' }\"\r\n :aria-label=\"title\"\r\n :pt=\"{\r\n root: { class: 'top-confirm-dialog top-solutions-component' },\r\n content: { class: 'p-6' },\r\n footer: { class: 'hidden' },\r\n }\"\r\n @hide=\"emit('close')\"\r\n >\r\n <div\r\n class=\"relative flex flex-col items-center gap-4 text-center\"\r\n :style=\"accentStyle\"\r\n >\r\n <button\r\n type=\"button\"\r\n class=\"absolute right-[-0.25rem] top-[-0.5rem] flex size-8 items-center justify-center rounded-full border-0 bg-transparent p-0 text-secondary-700 outline-none transition-colors hover:bg-secondary-200 focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 dark:text-zinc-200 dark:hover:bg-zinc-700\"\r\n :aria-label=\"cancelText\"\r\n :disabled=\"loading\"\r\n @click=\"close\"\r\n >\r\n <i class=\"pi pi-times text-lg\" aria-hidden=\"true\" />\r\n </button>\r\n\r\n <div class=\"flex flex-col items-center gap-2 pt-2\">\r\n <i\r\n :class=\"[icon, 'top-confirm-dialog__icon text-[40px]']\"\r\n aria-hidden=\"true\"\r\n />\r\n <p class=\"text-base font-bold text-secondary-900 dark:text-zinc-100\">\r\n {{ title }}\r\n </p>\r\n </div>\r\n\r\n <div class=\"text-sm leading-5 text-secondary-700 dark:text-zinc-300\">\r\n <slot name=\"message\">\r\n <slot>{{ message }}</slot>\r\n </slot>\r\n </div>\r\n\r\n <div class=\"mt-2 flex w-full items-center justify-center gap-3\">\r\n <TopButton\r\n :label=\"cancelText\"\r\n secondary\r\n :disabled=\"loading\"\r\n class=\"px-3 py-2 text-sm\"\r\n @click=\"cancel\"\r\n />\r\n <TopButton\r\n :label=\"loading ? loadingText : confirmText\"\r\n :loading=\"loading\"\r\n :class=\"confirmButtonClass\"\r\n @click=\"confirm\"\r\n />\r\n </div>\r\n </div>\r\n </Dialog>\r\n</template>\r\n\r\n<style>\r\n.top-confirm-dialog {\r\n border-radius: 10px;\r\n box-shadow: 0 4px 4px rgb(0 0 0 / 25%);\r\n}\r\n\r\n.top-confirm-dialog__icon {\r\n color: var(--top-confirm-dialog-accent);\r\n}\r\n\r\n.top-confirm-dialog__confirm--danger {\r\n border-color: var(--top-confirm-dialog-accent) !important;\r\n background-color: var(--top-confirm-dialog-accent) !important;\r\n}\r\n\r\n.top-confirm-dialog__confirm--danger:hover {\r\n border-color: var(--top-confirm-dialog-accent-hover) !important;\r\n background-color: var(--top-confirm-dialog-accent-hover) !important;\r\n}\r\n\r\n.top-confirm-dialog__confirm--danger:focus {\r\n box-shadow: 0 0 0 0.2rem var(--top-confirm-dialog-accent) !important;\r\n}\r\n</style>\r\n","<script setup lang=\"ts\">\r\nimport { computed, useAttrs, useId, useSlots } from 'vue'\r\nimport DatePicker from 'primevue/datepicker'\r\nimport type {\r\n DatePickerBlurEvent,\r\n DatePickerMonthChangeEvent,\r\n DatePickerYearChangeEvent,\r\n} from 'primevue/datepicker'\r\n\r\nexport type TopDatePickerSelectionMode = 'single' | 'multiple' | 'range'\r\nexport type TopDatePickerValue = Date | Date[] | Array<Date | null> | null\r\n\r\ndefineOptions({ inheritAttrs: false })\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n modelValue?: TopDatePickerValue\r\n label?: string\r\n placeholder?: string\r\n required?: boolean\r\n error?: string\r\n invalid?: boolean\r\n disabled?: boolean\r\n readonly?: boolean\r\n selectionMode?: TopDatePickerSelectionMode\r\n dateFormat?: string\r\n minDate?: Date\r\n maxDate?: Date\r\n showIcon?: boolean\r\n iconDisplay?: 'button' | 'input'\r\n manualInput?: boolean\r\n showButtonBar?: boolean\r\n appendTo?: 'body' | 'self' | HTMLElement\r\n }>(),\r\n {\r\n modelValue: null,\r\n label: '',\r\n placeholder: 'dd/mm/aaaa',\r\n required: false,\r\n error: '',\r\n invalid: false,\r\n disabled: false,\r\n readonly: false,\r\n selectionMode: 'single',\r\n dateFormat: 'dd/mm/yy',\r\n minDate: undefined,\r\n maxDate: undefined,\r\n showIcon: true,\r\n iconDisplay: 'input',\r\n manualInput: true,\r\n showButtonBar: false,\r\n appendTo: 'body',\r\n },\r\n)\r\n\r\nconst emit = defineEmits<{\r\n 'update:modelValue': [value: TopDatePickerValue]\r\n input: [event: Event]\r\n change: [event: Event]\r\n 'date-select': [value: Date]\r\n show: []\r\n hide: []\r\n 'today-click': [date: Date]\r\n 'clear-click': [event: Event]\r\n 'month-change': [event: DatePickerMonthChangeEvent]\r\n 'year-change': [event: DatePickerYearChangeEvent]\r\n focus: [event: Event]\r\n blur: [event: DatePickerBlurEvent]\r\n keydown: [event: Event]\r\n}>()\r\n\r\nconst attrs = useAttrs()\r\nconst slots = useSlots()\r\nconst generatedId = useId()\r\n\r\nconst inputId = computed(() =>\r\n attrs.id === undefined || attrs.id === null || attrs.id === ''\r\n ? generatedId\r\n : String(attrs.id),\r\n)\r\nconst errorId = computed(() => `${inputId.value}-error`)\r\nconst isInvalid = computed(() => props.invalid || Boolean(props.error))\r\nconst usesBrazilianDateMask = computed(() =>\r\n props.manualInput &&\r\n !props.readonly &&\r\n !props.disabled &&\r\n props.selectionMode === 'single' &&\r\n props.dateFormat === 'dd/mm/yy',\r\n)\r\nconst ariaInvalid = computed<\r\n boolean | 'true' | 'false' | 'grammar' | 'spelling' | undefined\r\n>(() => {\r\n if (isInvalid.value) return true\r\n\r\n const value = attrs['aria-invalid']\r\n return typeof value === 'boolean' ||\r\n value === 'true' ||\r\n value === 'false' ||\r\n value === 'grammar' ||\r\n value === 'spelling'\r\n ? value\r\n : undefined\r\n})\r\nconst describedBy = computed(() => {\r\n const externalDescription = attrs['aria-describedby']\r\n const ids = [\r\n typeof externalDescription === 'string' ? externalDescription : '',\r\n props.error ? errorId.value : '',\r\n ].filter(Boolean)\r\n\r\n return ids.length ? ids.join(' ') : undefined\r\n})\r\nconst forwardedAttrs = computed(() => {\r\n const {\r\n id: _id,\r\n 'aria-describedby': _ariaDescribedby,\r\n 'aria-invalid': _ariaInvalid,\r\n ...rest\r\n } = attrs\r\n\r\n return rest\r\n})\r\nconst datePickerPt = computed(() => ({\r\n pcInputText: {\r\n root: {\r\n 'aria-describedby': describedBy.value,\r\n 'aria-invalid': ariaInvalid.value,\r\n onChange: (event: Event) => emit('change', event),\r\n inputmode: usesBrazilianDateMask.value ? 'numeric' : undefined,\r\n maxlength: usesBrazilianDateMask.value ? 10 : undefined,\r\n },\r\n },\r\n}))\r\n\r\nfunction updateModelValue(value: TopDatePickerValue | undefined) {\r\n emit('update:modelValue', value ?? null)\r\n}\r\n\r\nfunction handleInput(event: Event) {\r\n const input = event.target\r\n\r\n if (usesBrazilianDateMask.value && input instanceof HTMLInputElement && !(event as InputEvent).isComposing) {\r\n const digits = input.value.replace(/\\D/g, '').slice(0, 8)\r\n const formatted = [digits.slice(0, 2), digits.slice(2, 4), digits.slice(4, 8)]\r\n .filter(Boolean)\r\n .join('/')\r\n\r\n input.value = formatted\r\n }\r\n\r\n emit('input', event)\r\n}\r\n</script>\r\n\r\n<template>\r\n <div class=\"top-date-picker top-solutions-component flex w-full flex-col gap-1\">\r\n <label\r\n v-if=\"label\"\r\n :for=\"inputId\"\r\n class=\"top-field-label text-xs font-bold\"\r\n >\r\n {{ label }}\r\n <span v-if=\"required\" aria-hidden=\"true\" class=\"text-red-600 dark:text-red-400\">*</span>\r\n </label>\r\n\r\n <DatePicker\r\n v-bind=\"forwardedAttrs\"\r\n :model-value=\"modelValue\"\r\n :input-id=\"inputId\"\r\n :placeholder=\"placeholder\"\r\n :required=\"required\"\r\n :invalid=\"isInvalid\"\r\n :disabled=\"disabled\"\r\n :readonly=\"readonly\"\r\n :selection-mode=\"selectionMode\"\r\n :date-format=\"dateFormat\"\r\n update-model-type=\"date\"\r\n :min-date=\"minDate\"\r\n :max-date=\"maxDate\"\r\n :show-icon=\"showIcon\"\r\n :icon-display=\"iconDisplay\"\r\n :manual-input=\"manualInput\"\r\n :show-button-bar=\"showButtonBar\"\r\n :append-to=\"appendTo\"\r\n :pt=\"datePickerPt\"\r\n input-class=\"top-date-picker__input top-field-control h-[40px] w-full rounded-[10px] border px-3 py-2 text-xs read-only:cursor-default disabled:cursor-not-allowed\"\r\n panel-class=\"top-date-picker-panel top-solutions-component\"\r\n fluid\r\n @update:model-value=\"updateModelValue\"\r\n @input=\"handleInput\"\r\n @date-select=\"emit('date-select', $event)\"\r\n @show=\"emit('show')\"\r\n @hide=\"emit('hide')\"\r\n @today-click=\"emit('today-click', $event)\"\r\n @clear-click=\"emit('clear-click', $event)\"\r\n @month-change=\"emit('month-change', $event)\"\r\n @year-change=\"emit('year-change', $event)\"\r\n @focus=\"emit('focus', $event)\"\r\n @blur=\"emit('blur', $event)\"\r\n @keydown=\"emit('keydown', $event)\"\r\n >\r\n <template v-for=\"(_, name) in slots\" #[name]=\"slotProps\">\r\n <slot :name=\"name\" v-bind=\"slotProps ?? {}\" />\r\n </template>\r\n </DatePicker>\r\n\r\n <span\r\n v-if=\"error\"\r\n :id=\"errorId\"\r\n class=\"text-[11px] text-red-600 dark:text-red-400\"\r\n role=\"alert\"\r\n >\r\n {{ error }}\r\n </span>\r\n </div>\r\n</template>\r\n\r\n<style>\r\n.top-date-picker .p-datepicker {\r\n width: 100%;\r\n}\r\n\r\n.top-date-picker .p-datepicker-input-icon-container {\r\n color: var(--top-field-icon);\r\n}\r\n\r\n.top-date-picker-panel {\r\n border-radius: 10px;\r\n}\r\n</style>\r\n","<script setup lang=\"ts\">\r\nimport { computed, useAttrs, useId, useSlots } from 'vue'\r\nimport DatePicker from 'primevue/datepicker'\r\nimport type {\r\n DatePickerBlurEvent,\r\n DatePickerMonthChangeEvent,\r\n DatePickerYearChangeEvent,\r\n} from 'primevue/datepicker'\r\n\r\nexport type TopDatePickerSelectionMode = 'single' | 'multiple' | 'range'\r\nexport type TopDatePickerValue = Date | Date[] | Array<Date | null> | null\r\n\r\ndefineOptions({ inheritAttrs: false })\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n modelValue?: TopDatePickerValue\r\n label?: string\r\n placeholder?: string\r\n required?: boolean\r\n error?: string\r\n invalid?: boolean\r\n disabled?: boolean\r\n readonly?: boolean\r\n selectionMode?: TopDatePickerSelectionMode\r\n dateFormat?: string\r\n minDate?: Date\r\n maxDate?: Date\r\n showIcon?: boolean\r\n iconDisplay?: 'button' | 'input'\r\n manualInput?: boolean\r\n showButtonBar?: boolean\r\n appendTo?: 'body' | 'self' | HTMLElement\r\n }>(),\r\n {\r\n modelValue: null,\r\n label: '',\r\n placeholder: 'dd/mm/aaaa',\r\n required: false,\r\n error: '',\r\n invalid: false,\r\n disabled: false,\r\n readonly: false,\r\n selectionMode: 'single',\r\n dateFormat: 'dd/mm/yy',\r\n minDate: undefined,\r\n maxDate: undefined,\r\n showIcon: true,\r\n iconDisplay: 'input',\r\n manualInput: true,\r\n showButtonBar: false,\r\n appendTo: 'body',\r\n },\r\n)\r\n\r\nconst emit = defineEmits<{\r\n 'update:modelValue': [value: TopDatePickerValue]\r\n input: [event: Event]\r\n change: [event: Event]\r\n 'date-select': [value: Date]\r\n show: []\r\n hide: []\r\n 'today-click': [date: Date]\r\n 'clear-click': [event: Event]\r\n 'month-change': [event: DatePickerMonthChangeEvent]\r\n 'year-change': [event: DatePickerYearChangeEvent]\r\n focus: [event: Event]\r\n blur: [event: DatePickerBlurEvent]\r\n keydown: [event: Event]\r\n}>()\r\n\r\nconst attrs = useAttrs()\r\nconst slots = useSlots()\r\nconst generatedId = useId()\r\n\r\nconst inputId = computed(() =>\r\n attrs.id === undefined || attrs.id === null || attrs.id === ''\r\n ? generatedId\r\n : String(attrs.id),\r\n)\r\nconst errorId = computed(() => `${inputId.value}-error`)\r\nconst isInvalid = computed(() => props.invalid || Boolean(props.error))\r\nconst usesBrazilianDateMask = computed(() =>\r\n props.manualInput &&\r\n !props.readonly &&\r\n !props.disabled &&\r\n props.selectionMode === 'single' &&\r\n props.dateFormat === 'dd/mm/yy',\r\n)\r\nconst ariaInvalid = computed<\r\n boolean | 'true' | 'false' | 'grammar' | 'spelling' | undefined\r\n>(() => {\r\n if (isInvalid.value) return true\r\n\r\n const value = attrs['aria-invalid']\r\n return typeof value === 'boolean' ||\r\n value === 'true' ||\r\n value === 'false' ||\r\n value === 'grammar' ||\r\n value === 'spelling'\r\n ? value\r\n : undefined\r\n})\r\nconst describedBy = computed(() => {\r\n const externalDescription = attrs['aria-describedby']\r\n const ids = [\r\n typeof externalDescription === 'string' ? externalDescription : '',\r\n props.error ? errorId.value : '',\r\n ].filter(Boolean)\r\n\r\n return ids.length ? ids.join(' ') : undefined\r\n})\r\nconst forwardedAttrs = computed(() => {\r\n const {\r\n id: _id,\r\n 'aria-describedby': _ariaDescribedby,\r\n 'aria-invalid': _ariaInvalid,\r\n ...rest\r\n } = attrs\r\n\r\n return rest\r\n})\r\nconst datePickerPt = computed(() => ({\r\n pcInputText: {\r\n root: {\r\n 'aria-describedby': describedBy.value,\r\n 'aria-invalid': ariaInvalid.value,\r\n onChange: (event: Event) => emit('change', event),\r\n inputmode: usesBrazilianDateMask.value ? 'numeric' : undefined,\r\n maxlength: usesBrazilianDateMask.value ? 10 : undefined,\r\n },\r\n },\r\n}))\r\n\r\nfunction updateModelValue(value: TopDatePickerValue | undefined) {\r\n emit('update:modelValue', value ?? null)\r\n}\r\n\r\nfunction handleInput(event: Event) {\r\n const input = event.target\r\n\r\n if (usesBrazilianDateMask.value && input instanceof HTMLInputElement && !(event as InputEvent).isComposing) {\r\n const digits = input.value.replace(/\\D/g, '').slice(0, 8)\r\n const formatted = [digits.slice(0, 2), digits.slice(2, 4), digits.slice(4, 8)]\r\n .filter(Boolean)\r\n .join('/')\r\n\r\n input.value = formatted\r\n }\r\n\r\n emit('input', event)\r\n}\r\n</script>\r\n\r\n<template>\r\n <div class=\"top-date-picker top-solutions-component flex w-full flex-col gap-1\">\r\n <label\r\n v-if=\"label\"\r\n :for=\"inputId\"\r\n class=\"top-field-label text-xs font-bold\"\r\n >\r\n {{ label }}\r\n <span v-if=\"required\" aria-hidden=\"true\" class=\"text-red-600 dark:text-red-400\">*</span>\r\n </label>\r\n\r\n <DatePicker\r\n v-bind=\"forwardedAttrs\"\r\n :model-value=\"modelValue\"\r\n :input-id=\"inputId\"\r\n :placeholder=\"placeholder\"\r\n :required=\"required\"\r\n :invalid=\"isInvalid\"\r\n :disabled=\"disabled\"\r\n :readonly=\"readonly\"\r\n :selection-mode=\"selectionMode\"\r\n :date-format=\"dateFormat\"\r\n update-model-type=\"date\"\r\n :min-date=\"minDate\"\r\n :max-date=\"maxDate\"\r\n :show-icon=\"showIcon\"\r\n :icon-display=\"iconDisplay\"\r\n :manual-input=\"manualInput\"\r\n :show-button-bar=\"showButtonBar\"\r\n :append-to=\"appendTo\"\r\n :pt=\"datePickerPt\"\r\n input-class=\"top-date-picker__input top-field-control h-[40px] w-full rounded-[10px] border px-3 py-2 text-xs read-only:cursor-default disabled:cursor-not-allowed\"\r\n panel-class=\"top-date-picker-panel top-solutions-component\"\r\n fluid\r\n @update:model-value=\"updateModelValue\"\r\n @input=\"handleInput\"\r\n @date-select=\"emit('date-select', $event)\"\r\n @show=\"emit('show')\"\r\n @hide=\"emit('hide')\"\r\n @today-click=\"emit('today-click', $event)\"\r\n @clear-click=\"emit('clear-click', $event)\"\r\n @month-change=\"emit('month-change', $event)\"\r\n @year-change=\"emit('year-change', $event)\"\r\n @focus=\"emit('focus', $event)\"\r\n @blur=\"emit('blur', $event)\"\r\n @keydown=\"emit('keydown', $event)\"\r\n >\r\n <template v-for=\"(_, name) in slots\" #[name]=\"slotProps\">\r\n <slot :name=\"name\" v-bind=\"slotProps ?? {}\" />\r\n </template>\r\n </DatePicker>\r\n\r\n <span\r\n v-if=\"error\"\r\n :id=\"errorId\"\r\n class=\"text-[11px] text-red-600 dark:text-red-400\"\r\n role=\"alert\"\r\n >\r\n {{ error }}\r\n </span>\r\n </div>\r\n</template>\r\n\r\n<style>\r\n.top-date-picker .p-datepicker {\r\n width: 100%;\r\n}\r\n\r\n.top-date-picker .p-datepicker-input-icon-container {\r\n color: var(--top-field-icon);\r\n}\r\n\r\n.top-date-picker-panel {\r\n border-radius: 10px;\r\n}\r\n</style>\r\n","\nconst CloudUploadIcon = [\n [\"path\", { d: \"M17.4776 9.01106C17.485 9.01102 17.4925 9.01101 17.5 9.01101C19.9853 9.01101 22 11.0294 22 13.5193C22 15.8398 20.25 17.7508 18 18M17.4776 9.01106C17.4924 8.84606 17.5 8.67896 17.5 8.51009C17.5 5.46695 15.0376 3 12 3C9.12324 3 6.76233 5.21267 6.52042 8.03192M17.4776 9.01106C17.3753 10.1476 16.9286 11.1846 16.2428 12.0165M6.52042 8.03192C3.98398 8.27373 2 10.4139 2 13.0183C2 15.4417 3.71776 17.4632 6 17.9273M6.52042 8.03192C6.67826 8.01687 6.83823 8.00917 7 8.00917C8.12582 8.00917 9.16474 8.38194 10.0005 9.01101\", stroke: \"currentColor\", strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: \"1.5\", key: \"0\" }],\n [\"path\", { d: \"M12 13L12 21M12 13C11.2998 13 9.99153 14.9943 9.5 15.5M12 13C12.7002 13 14.0085 14.9943 14.5 15.5\", stroke: \"currentColor\", strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: \"1.5\", key: \"1\" }]\n];\n\nexport default CloudUploadIcon;\n","import { defineComponent, computed } from 'vue';\n\nvar _sfc_main = defineComponent({\n name: 'HugeiconsIcon',\n inheritAttrs: false,\n props: {\n icon: {\n type: Array ,\n required: true\n },\n size: {\n type: [Number, String],\n default: 24,\n validator(value) {\n const size = typeof value === 'string' ? parseInt(value, 10) : value;\n return !isNaN(size) && size > 0;\n }\n },\n strokeWidth: {\n type: Number,\n default: undefined\n },\n absoluteStrokeWidth: {\n type: Boolean,\n default: false\n },\n altIcon: {\n type: Array ,\n default: undefined\n },\n showAlt: {\n type: Boolean,\n default: false\n },\n color: {\n type: String,\n default: 'currentColor'\n }\n },\n setup(props) {\n const computedSize = computed(() => {\n const size = typeof props.size === 'string' ? parseInt(props.size, 10) : props.size;\n return !isNaN(size) && size > 0 ? size : 24;\n });\n\n const calculatedStrokeWidth = computed(() => {\n if (props.strokeWidth === undefined) return undefined;\n return props.absoluteStrokeWidth \n ? (props.strokeWidth * 24) / computedSize.value \n : props.strokeWidth;\n });\n\n const currentIcon = computed(() => {\n return props.altIcon && props.showAlt ? props.altIcon : props.icon;\n });\n\n const transformAttrs = (attrs, strokeWidth) => {\n const result = {};\n for (const [key, value] of Object.entries(attrs)) {\n const kebabKey = key.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n result[kebabKey] = value;\n }\n\n // Add stroke properties to child elements if strokeWidth is defined\n if (strokeWidth !== undefined) {\n result['stroke-width'] = strokeWidth;\n result['stroke'] = 'currentColor';\n }\n\n return result;\n };\n\n return {\n computedSize,\n calculatedStrokeWidth,\n transformAttrs,\n currentIcon\n };\n }\n});\n\nexport { _sfc_main as default };\n//# sourceMappingURL=HugeiconsIcon.vue2.js.map\n","var _export_sfc = (sfc, props) => {\n const target = sfc.__vccOpts || sfc;\n for (const [key, val] of props) {\n target[key] = val;\n }\n return target;\n};\n\nexport { _export_sfc as default };\n//# sourceMappingURL=_plugin-vue_export-helper.js.map\n","import _sfc_main from './HugeiconsIcon.vue2.js';\nimport { openBlock, createElementBlock, mergeProps, Fragment, renderList, createBlock, resolveDynamicComponent } from 'vue';\nimport _export_sfc from '../_virtual/_plugin-vue_export-helper.js';\n\nconst _hoisted_1 = [\"width\", \"height\", \"color\"];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", mergeProps({\n width: _ctx.computedSize,\n height: _ctx.computedSize,\n viewBox: `0 0 24 24`,\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n color: _ctx.color\n }, _ctx.$attrs), [\n (openBlock(true), createElementBlock(\n Fragment,\n null,\n renderList(_ctx.currentIcon, (element, index) => {\n return openBlock(), createBlock(\n resolveDynamicComponent(element[0]),\n mergeProps({\n key: index,\n ref_for: true\n }, _ctx.transformAttrs(element[1], _ctx.calculatedStrokeWidth)),\n null,\n 16\n /* FULL_PROPS */\n );\n }),\n 128\n /* KEYED_FRAGMENT */\n ))\n ], 16, _hoisted_1);\n}\nvar HugeiconsIcon = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__file\", \"/Users/mahmudulhasan/Desktop/Projects/Hugeicons/hugeicons-monorepo/packages/vue/src/components/HugeiconsIcon.vue\"]]);\n\nexport { HugeiconsIcon as default };\n//# sourceMappingURL=HugeiconsIcon.vue.js.map\n","<script setup lang=\"ts\">\r\nimport {\r\n computed,\r\n nextTick,\r\n onBeforeUnmount,\r\n onMounted,\r\n ref,\r\n useAttrs,\r\n useId,\r\n watch,\r\n} from \"vue\";\r\nimport FileUpload from \"primevue/fileupload\";\nimport type { FileUploadSelectEvent } from \"primevue/fileupload\";\nimport { CloudUploadIcon } from \"@hugeicons/core-free-icons\";\nimport { HugeiconsIcon } from \"@hugeicons/vue\";\nimport TopButton from \"./TopButton.vue\";\n\r\nexport type TopFileUploadValue = File | File[] | null;\r\n\r\nexport type TopFileUploadErrorCode = \"file-type\" | \"file-size\" | \"file-limit\";\r\n\r\nexport type TopFileUploadError = {\r\n code: TopFileUploadErrorCode;\r\n message: string;\r\n file?: File;\r\n};\r\n\r\ntype FileUploadInstance = {\r\n choose: () => void;\r\n files: File[];\r\n};\r\n\r\ndefineOptions({ inheritAttrs: false });\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n modelValue?: TopFileUploadValue;\r\n label?: string;\r\n placeholder?: string;\r\n required?: boolean;\r\n disabled?: boolean;\r\n accept?: string;\r\n multiple?: boolean;\r\n maxFileSize?: number | null;\r\n maxFiles?: number | null;\r\n error?: string;\r\n selectLabel?: string;\r\n removeLabel?: string;\r\n loading?: boolean;\r\n }>(),\r\n {\r\n modelValue: null,\r\n label: \"\",\r\n placeholder: \"Arraste e solte o arquivo aqui\",\r\n required: false,\r\n disabled: false,\r\n accept: \"\",\r\n multiple: false,\r\n maxFileSize: null,\r\n maxFiles: null,\r\n error: \"\",\r\n selectLabel: \"Selecionar arquivo\",\r\n removeLabel: \"Remover\",\r\n loading: false,\r\n }\r\n);\r\n\r\nconst emit = defineEmits<{\r\n \"update:modelValue\": [value: TopFileUploadValue];\r\n select: [files: File[]];\r\n change: [value: TopFileUploadValue];\r\n remove: [file: File, index: number];\r\n clear: [];\r\n error: [errors: TopFileUploadError[]];\r\n}>();\r\n\r\nconst attrs = useAttrs();\r\nconst generatedId = useId();\r\nconst fileUploadRef = ref<FileUploadInstance | null>(null);\r\nconst internalFiles = ref<File[]>(normalizeValue(props.modelValue));\r\nconst validationErrors = ref<TopFileUploadError[]>([]);\r\nconst previewUrls = new Map<File, string>();\r\n\r\nconst inputId = computed(() =>\r\n attrs.id === undefined || attrs.id === null || attrs.id === \"\"\r\n ? generatedId\r\n : String(attrs.id)\r\n);\r\nconst errorId = computed(() => `${inputId.value}-error`);\r\nconst effectiveError = computed(\r\n () => props.error || validationErrors.value[0]?.message || \"\"\r\n);\r\nconst isInteractionDisabled = computed(() => props.disabled || props.loading);\r\nconst describedBy = computed(() => {\r\n const externalDescription = attrs[\"aria-describedby\"];\r\n const ids = [\r\n typeof externalDescription === \"string\" ? externalDescription : \"\",\r\n effectiveError.value ? errorId.value : \"\",\r\n ].filter(Boolean);\r\n\r\n return ids.length ? ids.join(\" \") : undefined;\r\n});\r\nconst inputAttrs = computed(() => ({\r\n ...attrs,\r\n id: inputId.value,\r\n required: props.required,\r\n \"aria-invalid\": effectiveError.value ? true : attrs[\"aria-invalid\"],\r\n \"aria-describedby\": describedBy.value,\r\n \"aria-label\":\r\n attrs[\"aria-label\"] || (!props.label ? props.selectLabel : undefined),\r\n}));\r\n\r\nfunction normalizeValue(value: TopFileUploadValue | undefined) {\r\n if (!value) return [];\r\n if (Array.isArray(value))\r\n return props.multiple ? [...value] : value.slice(0, 1);\r\n return [value];\r\n}\r\n\r\nfunction sameFile(left: File, right: File) {\r\n return (\r\n left.name === right.name &&\r\n left.type === right.type &&\r\n left.size === right.size\r\n );\r\n}\r\n\r\nfunction fileTypeIsAccepted(file: File) {\r\n if (!props.accept.trim()) return true;\r\n\r\n return props.accept.split(\",\").some((acceptedType) => {\r\n const accepted = acceptedType.trim().toLowerCase();\r\n const fileType = file.type.toLowerCase();\r\n\r\n if (!accepted) return false;\r\n if (accepted.startsWith(\".\"))\r\n return file.name.toLowerCase().endsWith(accepted);\r\n if (accepted.endsWith(\"/*\"))\r\n return fileType.startsWith(accepted.slice(0, -1));\r\n return fileType === accepted;\r\n });\r\n}\r\n\r\nfunction formatFileSize(size: number) {\r\n if (size < 1024) return `${size} B`;\r\n if (size < 1024 * 1024) return `${(size / 1024).toFixed(1)} KB`;\r\n return `${(size / (1024 * 1024)).toFixed(2)} MB`;\r\n}\r\n\r\nfunction validateFiles(files: File[]) {\r\n const errors: TopFileUploadError[] = [];\r\n const validFiles = files.filter((file) => {\r\n if (!fileTypeIsAccepted(file)) {\r\n errors.push({\r\n code: \"file-type\",\r\n file,\r\n message: `O arquivo \"${file.name}\" não possui um tipo aceito.`,\r\n });\r\n return false;\r\n }\r\n\r\n if (props.maxFileSize && file.size > props.maxFileSize) {\r\n errors.push({\r\n code: \"file-size\",\r\n file,\r\n message: `O arquivo \"${\r\n file.name\r\n }\" excede o tamanho máximo de ${formatFileSize(props.maxFileSize)}.`,\r\n });\r\n return false;\r\n }\r\n\r\n return true;\r\n });\r\n\r\n return { errors, validFiles };\r\n}\r\n\r\nfunction selectedFilesFrom(event: FileUploadSelectEvent) {\r\n const originalEvent = event.originalEvent as Event & {\r\n dataTransfer?: DataTransfer;\r\n target: (EventTarget & { files?: FileList }) | null;\r\n };\r\n return Array.from(\r\n originalEvent.dataTransfer?.files ?? originalEvent.target?.files ?? []\r\n );\r\n}\r\n\r\nfunction valueFrom(files: File[]): TopFileUploadValue {\r\n return props.multiple ? [...files] : files[0] ?? null;\r\n}\r\n\r\nfunction syncPrimeVueFiles() {\r\n if (fileUploadRef.value) fileUploadRef.value.files = [...internalFiles.value];\r\n}\r\n\r\nfunction updateFiles(files: File[], eventName: \"select\" | \"remove\" | \"clear\") {\r\n internalFiles.value = files;\r\n validationErrors.value = [];\r\n cleanUnusedPreviewUrls();\r\n nextTick(syncPrimeVueFiles);\r\n\r\n const value = valueFrom(files);\r\n emit(\"update:modelValue\", value);\r\n emit(\"change\", value);\r\n\r\n if (eventName === \"select\") emit(\"select\", [...files]);\r\n if (eventName === \"clear\") emit(\"clear\");\r\n}\r\n\r\nfunction onSelect(event: FileUploadSelectEvent) {\r\n const selected = selectedFilesFrom(event);\r\n const { errors, validFiles } = validateFiles(selected);\r\n let nextFiles = props.multiple\r\n ? [\r\n ...internalFiles.value,\r\n ...validFiles.filter(\r\n (file) =>\r\n !internalFiles.value.some((current) => sameFile(current, file))\r\n ),\r\n ]\r\n : validFiles.slice(-1);\r\n\r\n if (props.maxFiles && nextFiles.length > props.maxFiles) {\r\n const rejectedFiles = nextFiles.slice(props.maxFiles);\r\n errors.push(\r\n ...rejectedFiles.map((file) => ({\r\n code: \"file-limit\" as const,\r\n file,\r\n message: `O limite máximo é de ${props.maxFiles} arquivo(s).`,\r\n }))\r\n );\r\n nextFiles = nextFiles.slice(0, props.maxFiles);\r\n }\r\n\r\n if (errors.length) {\r\n validationErrors.value = errors;\r\n emit(\"error\", errors);\r\n } else {\r\n validationErrors.value = [];\r\n }\r\n\r\n syncPrimeVueFiles();\r\n if (validFiles.length && !sameFileList(nextFiles, internalFiles.value)) {\r\n internalFiles.value = nextFiles;\r\n cleanUnusedPreviewUrls();\r\n nextTick(syncPrimeVueFiles);\r\n const value = valueFrom(nextFiles);\r\n emit(\"update:modelValue\", value);\r\n emit(\"change\", value);\r\n emit(\"select\", [...nextFiles]);\r\n }\r\n}\r\n\r\nfunction sameFileList(left: File[], right: File[]) {\r\n return (\r\n left.length === right.length &&\r\n left.every((file, index) => sameFile(file, right[index]))\r\n );\r\n}\r\n\r\nfunction choose() {\r\n if (!isInteractionDisabled.value) fileUploadRef.value?.choose();\r\n}\r\n\r\nfunction removeFile(\r\n removeFileCallback: (index: number) => void,\r\n index: number\r\n) {\r\n if (isInteractionDisabled.value) return;\r\n const removedFile = internalFiles.value[index];\r\n if (!removedFile) return;\r\n\r\n removeFileCallback(index);\r\n const nextFiles = internalFiles.value.filter(\r\n (_, fileIndex) => fileIndex !== index\r\n );\r\n updateFiles(nextFiles, \"remove\");\r\n emit(\"remove\", removedFile, index);\r\n if (!nextFiles.length) emit(\"clear\");\r\n}\r\n\r\nfunction clear() {\r\n if (isInteractionDisabled.value || !internalFiles.value.length) return;\r\n updateFiles([], \"clear\");\r\n}\r\n\r\nfunction previewUrl(file: File) {\r\n if (\r\n !file.type.startsWith(\"image/\") ||\r\n typeof URL.createObjectURL !== \"function\"\r\n )\r\n return \"\";\r\n const currentUrl = previewUrls.get(file);\r\n if (currentUrl) return currentUrl;\r\n\r\n const url = URL.createObjectURL(file);\r\n previewUrls.set(file, url);\r\n return url;\r\n}\r\n\r\nfunction cleanUnusedPreviewUrls() {\r\n for (const [file, url] of previewUrls) {\r\n if (!internalFiles.value.includes(file)) {\r\n URL.revokeObjectURL(url);\r\n previewUrls.delete(file);\r\n }\r\n }\r\n}\r\n\r\nwatch(\r\n () => props.modelValue,\r\n (value) => {\r\n const nextFiles = normalizeValue(value);\r\n if (sameFileList(nextFiles, internalFiles.value)) return;\r\n internalFiles.value = nextFiles;\r\n validationErrors.value = [];\r\n cleanUnusedPreviewUrls();\r\n nextTick(syncPrimeVueFiles);\r\n }\r\n);\r\n\r\nwatch(\r\n () => props.multiple,\r\n () => {\r\n const nextFiles = normalizeValue(props.modelValue);\r\n internalFiles.value = nextFiles;\r\n cleanUnusedPreviewUrls();\r\n nextTick(syncPrimeVueFiles);\r\n }\r\n);\r\n\r\nonMounted(syncPrimeVueFiles);\r\n\r\nonBeforeUnmount(() => {\r\n for (const url of previewUrls.values()) URL.revokeObjectURL(url);\r\n previewUrls.clear();\r\n});\r\n\r\ndefineExpose({ choose, clear });\r\n</script>\r\n\r\n<template>\r\n <div\r\n class=\"top-file-upload top-solutions-component flex w-full flex-col gap-1\"\r\n >\r\n <label\r\n v-if=\"label\"\r\n :for=\"inputId\"\r\n class=\"text-xs font-bold text-secondary-800 dark:text-zinc-200\"\r\n >\r\n {{ label }}\r\n <span\r\n v-if=\"required\"\r\n aria-hidden=\"true\"\r\n class=\"text-red-600 dark:text-red-400\"\r\n >*</span\r\n >\r\n </label>\r\n\r\n <FileUpload\r\n ref=\"fileUploadRef\"\r\n mode=\"advanced\"\r\n :accept=\"accept || undefined\"\r\n :multiple=\"multiple\"\r\n :disabled=\"isInteractionDisabled\"\r\n :custom-upload=\"true\"\r\n :show-upload-button=\"false\"\r\n :show-cancel-button=\"false\"\r\n :pt=\"{\r\n root: { class: 'top-file-upload__root w-full' },\r\n header: { class: 'hidden' },\r\n input: inputAttrs,\r\n content: {\r\n class: [\r\n 'top-file-upload__dropzone min-h-[224px] rounded-[10px] border p-4 transition-colors',\r\n effectiveError\r\n ? 'border-red-600 bg-red-50 dark:border-red-400 dark:bg-red-950/20'\r\n : 'border-secondary-300 bg-white hover:border-primary-600 hover:bg-primary-50 dark:border-zinc-600 dark:bg-zinc-800 dark:hover:border-primary-400 dark:hover:bg-zinc-700',\r\n isInteractionDisabled ? 'cursor-not-allowed opacity-60' : '',\r\n ].join(' '),\r\n },\r\n }\"\r\n @select=\"onSelect\"\r\n >\r\n <template #content=\"{ removeFileCallback }\">\r\n <div\r\n class=\"flex min-h-[130px] w-full flex-col items-center justify-center gap-3\"\r\n >\r\n <slot\r\n v-if=\"!internalFiles.length\"\r\n name=\"empty\"\r\n :choose=\"choose\"\r\n :disabled=\"isInteractionDisabled\"\r\n >\r\n <span class=\"top-file-upload__empty-icon\" aria-hidden=\"true\">\r\n <i\r\n v-if=\"loading\"\r\n :aria-label=\"`Carregando...`\"\r\n class=\"pi pi-spin pi-spinner text-5xl\"\r\n />\r\n <HugeiconsIcon\n v-else\n :icon=\"CloudUploadIcon\"\n :size=\"72\"\n :stroke-width=\"1.5\"\n class=\"text-primary-800 dark:text-primary-300\"\n />\n </span>\r\n <p\r\n class=\"m-0 text-center text-xs text-secondary-600 dark:text-zinc-300\"\r\n >\r\n {{ placeholder }}\r\n </p>\r\n <TopButton\r\n :label=\"selectLabel\"\r\n icon=\"pi pi-plus-circle\"\r\n :disabled=\"disabled\"\r\n :loading=\"loading\"\r\n class=\"px-3 py-2 text-xs\"\r\n @click=\"choose\"\r\n />\r\n </slot>\r\n\r\n <div v-else class=\"flex w-full flex-col gap-2\">\r\n <div\r\n v-for=\"(file, index) in internalFiles\"\r\n :key=\"`${file.name}-${file.size}-${file.lastModified}`\"\r\n class=\"flex min-w-0 items-center gap-3 rounded-[10px] border border-secondary-300 bg-white p-3 dark:border-zinc-600 dark:bg-zinc-900\"\r\n >\r\n <slot\r\n name=\"preview\"\r\n :file=\"file\"\r\n :index=\"index\"\r\n :url=\"previewUrl(file)\"\r\n >\r\n <img\r\n v-if=\"previewUrl(file)\"\r\n :src=\"previewUrl(file)\"\r\n :alt=\"`Pré-visualização de ${file.name}`\"\r\n class=\"size-12 shrink-0 rounded-lg object-cover\"\r\n />\r\n <span\r\n v-else\r\n class=\"flex size-12 shrink-0 items-center justify-center rounded-lg bg-primary-50 text-primary-800 dark:bg-primary-950 dark:text-primary-200\"\r\n >\r\n <i class=\"pi pi-file text-2xl\" aria-hidden=\"true\" />\r\n </span>\r\n </slot>\r\n\r\n <div class=\"min-w-0 flex-1\">\r\n <p\r\n class=\"m-0 truncate text-xs font-bold text-secondary-900 dark:text-zinc-100\"\r\n >\r\n {{ file.name }}\r\n </p>\r\n <span class=\"text-[11px] text-secondary-500 dark:text-zinc-400\">\r\n {{ formatFileSize(file.size) }}\r\n </span>\r\n </div>\r\n\r\n <button\r\n type=\"button\"\r\n class=\"flex size-8 shrink-0 items-center justify-center rounded-full border-0 bg-transparent p-0 text-red-600 transition-colors hover:bg-red-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-red-500 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 dark:text-red-400 dark:hover:bg-red-950/40 dark:focus-visible:ring-offset-zinc-900\"\r\n :aria-label=\"`${removeLabel}: ${file.name}`\"\r\n :disabled=\"isInteractionDisabled\"\r\n @click=\"removeFile(removeFileCallback, index)\"\r\n >\r\n <i class=\"pi pi-times\" aria-hidden=\"true\" />\r\n </button>\r\n </div>\r\n\r\n <TopButton\r\n v-if=\"multiple && (!maxFiles || internalFiles.length < maxFiles)\"\r\n :label=\"selectLabel\"\r\n icon=\"pi pi-plus-circle\"\r\n outlined\r\n :disabled=\"disabled\"\r\n :loading=\"loading\"\r\n class=\"mt-1 px-3 py-2 text-xs\"\r\n @click=\"choose\"\r\n />\r\n </div>\r\n </div>\r\n </template>\r\n </FileUpload>\r\n\r\n <span\r\n v-if=\"effectiveError\"\r\n :id=\"errorId\"\r\n class=\"text-[11px] text-red-600 dark:text-red-400\"\r\n role=\"alert\"\r\n >\r\n {{ effectiveError }}\r\n </span>\r\n </div>\r\n</template>\r\n\r\n<style>\r\n.top-file-upload__root,\r\n.top-file-upload__dropzone {\r\n width: 100%;\r\n}\r\n\r\n.top-file-upload__root {\r\n border: 0;\r\n background: transparent;\r\n}\r\n\r\n.top-file-upload__empty-icon {\r\n display: inline-flex;\r\n width: 6rem;\r\n height: 6rem;\r\n align-items: center;\r\n justify-content: center;\r\n border: 1px solid var(--top-secondary-300);\r\n border-radius: 9999px;\r\n color: var(--top-primary-800);\r\n}\r\n\r\n.dark .top-file-upload__empty-icon {\r\n border-color: var(--top-secondary-600);\r\n color: var(--top-primary-300);\r\n}\r\n\r\n.top-file-upload__dropzone[data-p-highlight=\"true\"] {\r\n border-color: var(--top-primary-600) !important;\r\n background: var(--top-primary-100) !important;\r\n}\r\n\r\n.dark .top-file-upload__dropzone[data-p-highlight=\"true\"] {\r\n border-color: var(--top-primary-400) !important;\r\n background: var(--top-primary-950) !important;\r\n}\r\n</style>\r\n","<script setup lang=\"ts\">\r\nimport {\r\n computed,\r\n nextTick,\r\n onBeforeUnmount,\r\n onMounted,\r\n ref,\r\n useAttrs,\r\n useId,\r\n watch,\r\n} from \"vue\";\r\nimport FileUpload from \"primevue/fileupload\";\nimport type { FileUploadSelectEvent } from \"primevue/fileupload\";\nimport { CloudUploadIcon } from \"@hugeicons/core-free-icons\";\nimport { HugeiconsIcon } from \"@hugeicons/vue\";\nimport TopButton from \"./TopButton.vue\";\n\r\nexport type TopFileUploadValue = File | File[] | null;\r\n\r\nexport type TopFileUploadErrorCode = \"file-type\" | \"file-size\" | \"file-limit\";\r\n\r\nexport type TopFileUploadError = {\r\n code: TopFileUploadErrorCode;\r\n message: string;\r\n file?: File;\r\n};\r\n\r\ntype FileUploadInstance = {\r\n choose: () => void;\r\n files: File[];\r\n};\r\n\r\ndefineOptions({ inheritAttrs: false });\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n modelValue?: TopFileUploadValue;\r\n label?: string;\r\n placeholder?: string;\r\n required?: boolean;\r\n disabled?: boolean;\r\n accept?: string;\r\n multiple?: boolean;\r\n maxFileSize?: number | null;\r\n maxFiles?: number | null;\r\n error?: string;\r\n selectLabel?: string;\r\n removeLabel?: string;\r\n loading?: boolean;\r\n }>(),\r\n {\r\n modelValue: null,\r\n label: \"\",\r\n placeholder: \"Arraste e solte o arquivo aqui\",\r\n required: false,\r\n disabled: false,\r\n accept: \"\",\r\n multiple: false,\r\n maxFileSize: null,\r\n maxFiles: null,\r\n error: \"\",\r\n selectLabel: \"Selecionar arquivo\",\r\n removeLabel: \"Remover\",\r\n loading: false,\r\n }\r\n);\r\n\r\nconst emit = defineEmits<{\r\n \"update:modelValue\": [value: TopFileUploadValue];\r\n select: [files: File[]];\r\n change: [value: TopFileUploadValue];\r\n remove: [file: File, index: number];\r\n clear: [];\r\n error: [errors: TopFileUploadError[]];\r\n}>();\r\n\r\nconst attrs = useAttrs();\r\nconst generatedId = useId();\r\nconst fileUploadRef = ref<FileUploadInstance | null>(null);\r\nconst internalFiles = ref<File[]>(normalizeValue(props.modelValue));\r\nconst validationErrors = ref<TopFileUploadError[]>([]);\r\nconst previewUrls = new Map<File, string>();\r\n\r\nconst inputId = computed(() =>\r\n attrs.id === undefined || attrs.id === null || attrs.id === \"\"\r\n ? generatedId\r\n : String(attrs.id)\r\n);\r\nconst errorId = computed(() => `${inputId.value}-error`);\r\nconst effectiveError = computed(\r\n () => props.error || validationErrors.value[0]?.message || \"\"\r\n);\r\nconst isInteractionDisabled = computed(() => props.disabled || props.loading);\r\nconst describedBy = computed(() => {\r\n const externalDescription = attrs[\"aria-describedby\"];\r\n const ids = [\r\n typeof externalDescription === \"string\" ? externalDescription : \"\",\r\n effectiveError.value ? errorId.value : \"\",\r\n ].filter(Boolean);\r\n\r\n return ids.length ? ids.join(\" \") : undefined;\r\n});\r\nconst inputAttrs = computed(() => ({\r\n ...attrs,\r\n id: inputId.value,\r\n required: props.required,\r\n \"aria-invalid\": effectiveError.value ? true : attrs[\"aria-invalid\"],\r\n \"aria-describedby\": describedBy.value,\r\n \"aria-label\":\r\n attrs[\"aria-label\"] || (!props.label ? props.selectLabel : undefined),\r\n}));\r\n\r\nfunction normalizeValue(value: TopFileUploadValue | undefined) {\r\n if (!value) return [];\r\n if (Array.isArray(value))\r\n return props.multiple ? [...value] : value.slice(0, 1);\r\n return [value];\r\n}\r\n\r\nfunction sameFile(left: File, right: File) {\r\n return (\r\n left.name === right.name &&\r\n left.type === right.type &&\r\n left.size === right.size\r\n );\r\n}\r\n\r\nfunction fileTypeIsAccepted(file: File) {\r\n if (!props.accept.trim()) return true;\r\n\r\n return props.accept.split(\",\").some((acceptedType) => {\r\n const accepted = acceptedType.trim().toLowerCase();\r\n const fileType = file.type.toLowerCase();\r\n\r\n if (!accepted) return false;\r\n if (accepted.startsWith(\".\"))\r\n return file.name.toLowerCase().endsWith(accepted);\r\n if (accepted.endsWith(\"/*\"))\r\n return fileType.startsWith(accepted.slice(0, -1));\r\n return fileType === accepted;\r\n });\r\n}\r\n\r\nfunction formatFileSize(size: number) {\r\n if (size < 1024) return `${size} B`;\r\n if (size < 1024 * 1024) return `${(size / 1024).toFixed(1)} KB`;\r\n return `${(size / (1024 * 1024)).toFixed(2)} MB`;\r\n}\r\n\r\nfunction validateFiles(files: File[]) {\r\n const errors: TopFileUploadError[] = [];\r\n const validFiles = files.filter((file) => {\r\n if (!fileTypeIsAccepted(file)) {\r\n errors.push({\r\n code: \"file-type\",\r\n file,\r\n message: `O arquivo \"${file.name}\" não possui um tipo aceito.`,\r\n });\r\n return false;\r\n }\r\n\r\n if (props.maxFileSize && file.size > props.maxFileSize) {\r\n errors.push({\r\n code: \"file-size\",\r\n file,\r\n message: `O arquivo \"${\r\n file.name\r\n }\" excede o tamanho máximo de ${formatFileSize(props.maxFileSize)}.`,\r\n });\r\n return false;\r\n }\r\n\r\n return true;\r\n });\r\n\r\n return { errors, validFiles };\r\n}\r\n\r\nfunction selectedFilesFrom(event: FileUploadSelectEvent) {\r\n const originalEvent = event.originalEvent as Event & {\r\n dataTransfer?: DataTransfer;\r\n target: (EventTarget & { files?: FileList }) | null;\r\n };\r\n return Array.from(\r\n originalEvent.dataTransfer?.files ?? originalEvent.target?.files ?? []\r\n );\r\n}\r\n\r\nfunction valueFrom(files: File[]): TopFileUploadValue {\r\n return props.multiple ? [...files] : files[0] ?? null;\r\n}\r\n\r\nfunction syncPrimeVueFiles() {\r\n if (fileUploadRef.value) fileUploadRef.value.files = [...internalFiles.value];\r\n}\r\n\r\nfunction updateFiles(files: File[], eventName: \"select\" | \"remove\" | \"clear\") {\r\n internalFiles.value = files;\r\n validationErrors.value = [];\r\n cleanUnusedPreviewUrls();\r\n nextTick(syncPrimeVueFiles);\r\n\r\n const value = valueFrom(files);\r\n emit(\"update:modelValue\", value);\r\n emit(\"change\", value);\r\n\r\n if (eventName === \"select\") emit(\"select\", [...files]);\r\n if (eventName === \"clear\") emit(\"clear\");\r\n}\r\n\r\nfunction onSelect(event: FileUploadSelectEvent) {\r\n const selected = selectedFilesFrom(event);\r\n const { errors, validFiles } = validateFiles(selected);\r\n let nextFiles = props.multiple\r\n ? [\r\n ...internalFiles.value,\r\n ...validFiles.filter(\r\n (file) =>\r\n !internalFiles.value.some((current) => sameFile(current, file))\r\n ),\r\n ]\r\n : validFiles.slice(-1);\r\n\r\n if (props.maxFiles && nextFiles.length > props.maxFiles) {\r\n const rejectedFiles = nextFiles.slice(props.maxFiles);\r\n errors.push(\r\n ...rejectedFiles.map((file) => ({\r\n code: \"file-limit\" as const,\r\n file,\r\n message: `O limite máximo é de ${props.maxFiles} arquivo(s).`,\r\n }))\r\n );\r\n nextFiles = nextFiles.slice(0, props.maxFiles);\r\n }\r\n\r\n if (errors.length) {\r\n validationErrors.value = errors;\r\n emit(\"error\", errors);\r\n } else {\r\n validationErrors.value = [];\r\n }\r\n\r\n syncPrimeVueFiles();\r\n if (validFiles.length && !sameFileList(nextFiles, internalFiles.value)) {\r\n internalFiles.value = nextFiles;\r\n cleanUnusedPreviewUrls();\r\n nextTick(syncPrimeVueFiles);\r\n const value = valueFrom(nextFiles);\r\n emit(\"update:modelValue\", value);\r\n emit(\"change\", value);\r\n emit(\"select\", [...nextFiles]);\r\n }\r\n}\r\n\r\nfunction sameFileList(left: File[], right: File[]) {\r\n return (\r\n left.length === right.length &&\r\n left.every((file, index) => sameFile(file, right[index]))\r\n );\r\n}\r\n\r\nfunction choose() {\r\n if (!isInteractionDisabled.value) fileUploadRef.value?.choose();\r\n}\r\n\r\nfunction removeFile(\r\n removeFileCallback: (index: number) => void,\r\n index: number\r\n) {\r\n if (isInteractionDisabled.value) return;\r\n const removedFile = internalFiles.value[index];\r\n if (!removedFile) return;\r\n\r\n removeFileCallback(index);\r\n const nextFiles = internalFiles.value.filter(\r\n (_, fileIndex) => fileIndex !== index\r\n );\r\n updateFiles(nextFiles, \"remove\");\r\n emit(\"remove\", removedFile, index);\r\n if (!nextFiles.length) emit(\"clear\");\r\n}\r\n\r\nfunction clear() {\r\n if (isInteractionDisabled.value || !internalFiles.value.length) return;\r\n updateFiles([], \"clear\");\r\n}\r\n\r\nfunction previewUrl(file: File) {\r\n if (\r\n !file.type.startsWith(\"image/\") ||\r\n typeof URL.createObjectURL !== \"function\"\r\n )\r\n return \"\";\r\n const currentUrl = previewUrls.get(file);\r\n if (currentUrl) return currentUrl;\r\n\r\n const url = URL.createObjectURL(file);\r\n previewUrls.set(file, url);\r\n return url;\r\n}\r\n\r\nfunction cleanUnusedPreviewUrls() {\r\n for (const [file, url] of previewUrls) {\r\n if (!internalFiles.value.includes(file)) {\r\n URL.revokeObjectURL(url);\r\n previewUrls.delete(file);\r\n }\r\n }\r\n}\r\n\r\nwatch(\r\n () => props.modelValue,\r\n (value) => {\r\n const nextFiles = normalizeValue(value);\r\n if (sameFileList(nextFiles, internalFiles.value)) return;\r\n internalFiles.value = nextFiles;\r\n validationErrors.value = [];\r\n cleanUnusedPreviewUrls();\r\n nextTick(syncPrimeVueFiles);\r\n }\r\n);\r\n\r\nwatch(\r\n () => props.multiple,\r\n () => {\r\n const nextFiles = normalizeValue(props.modelValue);\r\n internalFiles.value = nextFiles;\r\n cleanUnusedPreviewUrls();\r\n nextTick(syncPrimeVueFiles);\r\n }\r\n);\r\n\r\nonMounted(syncPrimeVueFiles);\r\n\r\nonBeforeUnmount(() => {\r\n for (const url of previewUrls.values()) URL.revokeObjectURL(url);\r\n previewUrls.clear();\r\n});\r\n\r\ndefineExpose({ choose, clear });\r\n</script>\r\n\r\n<template>\r\n <div\r\n class=\"top-file-upload top-solutions-component flex w-full flex-col gap-1\"\r\n >\r\n <label\r\n v-if=\"label\"\r\n :for=\"inputId\"\r\n class=\"text-xs font-bold text-secondary-800 dark:text-zinc-200\"\r\n >\r\n {{ label }}\r\n <span\r\n v-if=\"required\"\r\n aria-hidden=\"true\"\r\n class=\"text-red-600 dark:text-red-400\"\r\n >*</span\r\n >\r\n </label>\r\n\r\n <FileUpload\r\n ref=\"fileUploadRef\"\r\n mode=\"advanced\"\r\n :accept=\"accept || undefined\"\r\n :multiple=\"multiple\"\r\n :disabled=\"isInteractionDisabled\"\r\n :custom-upload=\"true\"\r\n :show-upload-button=\"false\"\r\n :show-cancel-button=\"false\"\r\n :pt=\"{\r\n root: { class: 'top-file-upload__root w-full' },\r\n header: { class: 'hidden' },\r\n input: inputAttrs,\r\n content: {\r\n class: [\r\n 'top-file-upload__dropzone min-h-[224px] rounded-[10px] border p-4 transition-colors',\r\n effectiveError\r\n ? 'border-red-600 bg-red-50 dark:border-red-400 dark:bg-red-950/20'\r\n : 'border-secondary-300 bg-white hover:border-primary-600 hover:bg-primary-50 dark:border-zinc-600 dark:bg-zinc-800 dark:hover:border-primary-400 dark:hover:bg-zinc-700',\r\n isInteractionDisabled ? 'cursor-not-allowed opacity-60' : '',\r\n ].join(' '),\r\n },\r\n }\"\r\n @select=\"onSelect\"\r\n >\r\n <template #content=\"{ removeFileCallback }\">\r\n <div\r\n class=\"flex min-h-[130px] w-full flex-col items-center justify-center gap-3\"\r\n >\r\n <slot\r\n v-if=\"!internalFiles.length\"\r\n name=\"empty\"\r\n :choose=\"choose\"\r\n :disabled=\"isInteractionDisabled\"\r\n >\r\n <span class=\"top-file-upload__empty-icon\" aria-hidden=\"true\">\r\n <i\r\n v-if=\"loading\"\r\n :aria-label=\"`Carregando...`\"\r\n class=\"pi pi-spin pi-spinner text-5xl\"\r\n />\r\n <HugeiconsIcon\n v-else\n :icon=\"CloudUploadIcon\"\n :size=\"72\"\n :stroke-width=\"1.5\"\n class=\"text-primary-800 dark:text-primary-300\"\n />\n </span>\r\n <p\r\n class=\"m-0 text-center text-xs text-secondary-600 dark:text-zinc-300\"\r\n >\r\n {{ placeholder }}\r\n </p>\r\n <TopButton\r\n :label=\"selectLabel\"\r\n icon=\"pi pi-plus-circle\"\r\n :disabled=\"disabled\"\r\n :loading=\"loading\"\r\n class=\"px-3 py-2 text-xs\"\r\n @click=\"choose\"\r\n />\r\n </slot>\r\n\r\n <div v-else class=\"flex w-full flex-col gap-2\">\r\n <div\r\n v-for=\"(file, index) in internalFiles\"\r\n :key=\"`${file.name}-${file.size}-${file.lastModified}`\"\r\n class=\"flex min-w-0 items-center gap-3 rounded-[10px] border border-secondary-300 bg-white p-3 dark:border-zinc-600 dark:bg-zinc-900\"\r\n >\r\n <slot\r\n name=\"preview\"\r\n :file=\"file\"\r\n :index=\"index\"\r\n :url=\"previewUrl(file)\"\r\n >\r\n <img\r\n v-if=\"previewUrl(file)\"\r\n :src=\"previewUrl(file)\"\r\n :alt=\"`Pré-visualização de ${file.name}`\"\r\n class=\"size-12 shrink-0 rounded-lg object-cover\"\r\n />\r\n <span\r\n v-else\r\n class=\"flex size-12 shrink-0 items-center justify-center rounded-lg bg-primary-50 text-primary-800 dark:bg-primary-950 dark:text-primary-200\"\r\n >\r\n <i class=\"pi pi-file text-2xl\" aria-hidden=\"true\" />\r\n </span>\r\n </slot>\r\n\r\n <div class=\"min-w-0 flex-1\">\r\n <p\r\n class=\"m-0 truncate text-xs font-bold text-secondary-900 dark:text-zinc-100\"\r\n >\r\n {{ file.name }}\r\n </p>\r\n <span class=\"text-[11px] text-secondary-500 dark:text-zinc-400\">\r\n {{ formatFileSize(file.size) }}\r\n </span>\r\n </div>\r\n\r\n <button\r\n type=\"button\"\r\n class=\"flex size-8 shrink-0 items-center justify-center rounded-full border-0 bg-transparent p-0 text-red-600 transition-colors hover:bg-red-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-red-500 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 dark:text-red-400 dark:hover:bg-red-950/40 dark:focus-visible:ring-offset-zinc-900\"\r\n :aria-label=\"`${removeLabel}: ${file.name}`\"\r\n :disabled=\"isInteractionDisabled\"\r\n @click=\"removeFile(removeFileCallback, index)\"\r\n >\r\n <i class=\"pi pi-times\" aria-hidden=\"true\" />\r\n </button>\r\n </div>\r\n\r\n <TopButton\r\n v-if=\"multiple && (!maxFiles || internalFiles.length < maxFiles)\"\r\n :label=\"selectLabel\"\r\n icon=\"pi pi-plus-circle\"\r\n outlined\r\n :disabled=\"disabled\"\r\n :loading=\"loading\"\r\n class=\"mt-1 px-3 py-2 text-xs\"\r\n @click=\"choose\"\r\n />\r\n </div>\r\n </div>\r\n </template>\r\n </FileUpload>\r\n\r\n <span\r\n v-if=\"effectiveError\"\r\n :id=\"errorId\"\r\n class=\"text-[11px] text-red-600 dark:text-red-400\"\r\n role=\"alert\"\r\n >\r\n {{ effectiveError }}\r\n </span>\r\n </div>\r\n</template>\r\n\r\n<style>\r\n.top-file-upload__root,\r\n.top-file-upload__dropzone {\r\n width: 100%;\r\n}\r\n\r\n.top-file-upload__root {\r\n border: 0;\r\n background: transparent;\r\n}\r\n\r\n.top-file-upload__empty-icon {\r\n display: inline-flex;\r\n width: 6rem;\r\n height: 6rem;\r\n align-items: center;\r\n justify-content: center;\r\n border: 1px solid var(--top-secondary-300);\r\n border-radius: 9999px;\r\n color: var(--top-primary-800);\r\n}\r\n\r\n.dark .top-file-upload__empty-icon {\r\n border-color: var(--top-secondary-600);\r\n color: var(--top-primary-300);\r\n}\r\n\r\n.top-file-upload__dropzone[data-p-highlight=\"true\"] {\r\n border-color: var(--top-primary-600) !important;\r\n background: var(--top-primary-100) !important;\r\n}\r\n\r\n.dark .top-file-upload__dropzone[data-p-highlight=\"true\"] {\r\n border-color: var(--top-primary-400) !important;\r\n background: var(--top-primary-950) !important;\r\n}\r\n</style>\r\n","<script setup lang=\"ts\">\r\nimport { computed, useAttrs, useId } from 'vue'\r\nimport InputText from 'primevue/inputtext'\r\n\r\ndefineOptions({ inheritAttrs: false })\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n modelValue?: string\r\n label?: string\r\n placeholder?: string\r\n required?: boolean\r\n error?: string\r\n disabled?: boolean\r\n readonly?: boolean\r\n }>(),\r\n {\r\n modelValue: '',\r\n label: '',\r\n placeholder: '',\r\n required: false,\r\n error: '',\r\n disabled: false,\r\n readonly: false,\r\n },\r\n)\r\n\r\nconst emit = defineEmits<{\r\n 'update:modelValue': [value: string]\r\n}>()\r\n\r\nconst attrs = useAttrs()\r\nconst generatedId = useId()\r\n\r\nconst inputId = computed(() =>\r\n attrs.id === undefined || attrs.id === null || attrs.id === ''\r\n ? generatedId\r\n : String(attrs.id),\r\n)\r\nconst errorId = computed(() => `${inputId.value}-error`)\r\nconst ariaInvalid = computed<\r\n boolean | 'true' | 'false' | 'grammar' | 'spelling' | undefined\r\n>(() => {\r\n if (props.error) return true\r\n\r\n const value = attrs['aria-invalid']\r\n return typeof value === 'boolean' ||\r\n value === 'true' ||\r\n value === 'false' ||\r\n value === 'grammar' ||\r\n value === 'spelling'\r\n ? value\r\n : undefined\r\n})\r\nconst describedBy = computed(() => {\r\n const externalDescription = attrs['aria-describedby']\r\n const ids = [\r\n typeof externalDescription === 'string' ? externalDescription : '',\r\n props.error ? errorId.value : '',\r\n ].filter(Boolean)\r\n\r\n return ids.length ? ids.join(' ') : undefined\r\n})\r\n\r\nfunction updateModelValue(value: string | undefined) {\r\n emit('update:modelValue', value ?? '')\r\n}\r\n</script>\r\n\r\n<template>\r\n <div class=\"top-input-text top-solutions-component flex w-full flex-col gap-1\">\r\n <label\r\n v-if=\"label\"\r\n :for=\"inputId\"\r\n class=\"top-field-label text-xs font-bold\"\r\n >\r\n {{ label }}\r\n <span v-if=\"required\" aria-hidden=\"true\" class=\"text-red-600 dark:text-red-400\">*</span>\r\n </label>\r\n\r\n <InputText\r\n v-bind=\"$attrs\"\r\n :id=\"inputId\"\r\n :model-value=\"modelValue\"\r\n type=\"text\"\r\n :placeholder=\"placeholder\"\r\n :required=\"required\"\r\n :disabled=\"disabled\"\r\n :readonly=\"readonly\"\r\n :invalid=\"Boolean(error)\"\r\n :aria-invalid=\"ariaInvalid\"\r\n :aria-describedby=\"describedBy\"\r\n fluid\r\n class=\"top-input-text__control top-field-control h-[40px] w-full rounded-[10px] border px-3 py-2 text-xs read-only:cursor-default disabled:cursor-not-allowed\"\r\n @update:model-value=\"updateModelValue\"\r\n />\r\n\r\n <span\r\n v-if=\"error\"\r\n :id=\"errorId\"\r\n class=\"text-[11px] text-red-600 dark:text-red-400\"\r\n role=\"alert\"\r\n >\r\n {{ error }}\r\n </span>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { computed, useAttrs, useId } from 'vue'\r\nimport InputText from 'primevue/inputtext'\r\n\r\ndefineOptions({ inheritAttrs: false })\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n modelValue?: string\r\n label?: string\r\n placeholder?: string\r\n required?: boolean\r\n error?: string\r\n disabled?: boolean\r\n readonly?: boolean\r\n }>(),\r\n {\r\n modelValue: '',\r\n label: '',\r\n placeholder: '',\r\n required: false,\r\n error: '',\r\n disabled: false,\r\n readonly: false,\r\n },\r\n)\r\n\r\nconst emit = defineEmits<{\r\n 'update:modelValue': [value: string]\r\n}>()\r\n\r\nconst attrs = useAttrs()\r\nconst generatedId = useId()\r\n\r\nconst inputId = computed(() =>\r\n attrs.id === undefined || attrs.id === null || attrs.id === ''\r\n ? generatedId\r\n : String(attrs.id),\r\n)\r\nconst errorId = computed(() => `${inputId.value}-error`)\r\nconst ariaInvalid = computed<\r\n boolean | 'true' | 'false' | 'grammar' | 'spelling' | undefined\r\n>(() => {\r\n if (props.error) return true\r\n\r\n const value = attrs['aria-invalid']\r\n return typeof value === 'boolean' ||\r\n value === 'true' ||\r\n value === 'false' ||\r\n value === 'grammar' ||\r\n value === 'spelling'\r\n ? value\r\n : undefined\r\n})\r\nconst describedBy = computed(() => {\r\n const externalDescription = attrs['aria-describedby']\r\n const ids = [\r\n typeof externalDescription === 'string' ? externalDescription : '',\r\n props.error ? errorId.value : '',\r\n ].filter(Boolean)\r\n\r\n return ids.length ? ids.join(' ') : undefined\r\n})\r\n\r\nfunction updateModelValue(value: string | undefined) {\r\n emit('update:modelValue', value ?? '')\r\n}\r\n</script>\r\n\r\n<template>\r\n <div class=\"top-input-text top-solutions-component flex w-full flex-col gap-1\">\r\n <label\r\n v-if=\"label\"\r\n :for=\"inputId\"\r\n class=\"top-field-label text-xs font-bold\"\r\n >\r\n {{ label }}\r\n <span v-if=\"required\" aria-hidden=\"true\" class=\"text-red-600 dark:text-red-400\">*</span>\r\n </label>\r\n\r\n <InputText\r\n v-bind=\"$attrs\"\r\n :id=\"inputId\"\r\n :model-value=\"modelValue\"\r\n type=\"text\"\r\n :placeholder=\"placeholder\"\r\n :required=\"required\"\r\n :disabled=\"disabled\"\r\n :readonly=\"readonly\"\r\n :invalid=\"Boolean(error)\"\r\n :aria-invalid=\"ariaInvalid\"\r\n :aria-describedby=\"describedBy\"\r\n fluid\r\n class=\"top-input-text__control top-field-control h-[40px] w-full rounded-[10px] border px-3 py-2 text-xs read-only:cursor-default disabled:cursor-not-allowed\"\r\n @update:model-value=\"updateModelValue\"\r\n />\r\n\r\n <span\r\n v-if=\"error\"\r\n :id=\"errorId\"\r\n class=\"text-[11px] text-red-600 dark:text-red-400\"\r\n role=\"alert\"\r\n >\r\n {{ error }}\r\n </span>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { computed, nextTick, onBeforeUnmount, onMounted, ref, useSlots, watch } from 'vue'\r\nimport AutoComplete from 'primevue/autocomplete'\r\nimport vTooltip from 'primevue/tooltip'\r\n\r\ntype SelectOption = Record<string, unknown> | string | number\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n modelValue?: SelectOption | SelectOption[] | null\r\n options?: SelectOption[]\r\n loading?: boolean\r\n disabled?: boolean\r\n placeholder?: string\r\n optionLabel?: string | ((option: SelectOption) => string)\r\n optionKey?: string\r\n optionPrefix?: string\r\n showOptionPrefix?: boolean\r\n showSelectedPrefix?: boolean\r\n panelWidth?: string | null\r\n scrollHeight?: string\r\n invalid?: boolean\r\n showTooltip?: boolean\r\n optionGroupLabel?: string | null\r\n optionGroupChildren?: string | null\r\n minQueryLength?: number\r\n emptyMessage?: string\r\n loadingMessage?: string\r\n showLoadingMessage?: boolean\r\n multiple?: boolean\r\n forceSelection?: boolean\r\n closeOnSelect?: boolean\r\n }>(),\r\n {\r\n modelValue: null,\r\n options: () => [],\r\n loading: false,\r\n disabled: false,\r\n placeholder: 'Pesquisar...',\r\n optionLabel: 'label',\r\n optionKey: 'id',\r\n optionPrefix: '',\r\n showOptionPrefix: false,\r\n showSelectedPrefix: false,\r\n panelWidth: null,\r\n scrollHeight: '250px',\r\n invalid: false,\r\n showTooltip: true,\r\n optionGroupLabel: null,\r\n optionGroupChildren: null,\r\n minQueryLength: 1,\r\n emptyMessage: 'Nenhum resultado encontrado.',\r\n loadingMessage: 'Carregando...',\r\n showLoadingMessage: true,\r\n multiple: false,\r\n forceSelection: true,\r\n closeOnSelect: false,\r\n },\r\n)\r\n\r\nconst emit = defineEmits<{\r\n 'update:modelValue': [value: SelectOption | SelectOption[] | null]\r\n search: [event: { originalEvent: Event; query: string }]\r\n loadMore: [event: unknown]\r\n clear: []\r\n select: [event: unknown]\r\n change: [event: unknown]\r\n}>()\r\n\r\nconst slots = useSlots()\r\n// PrimeVue's slot types omit selected-item even though the runtime component supports it.\r\nconst TopAutoComplete = AutoComplete as any\r\nconst query = ref('')\r\nconst focused = ref(false)\r\nconst autocompleteRef = ref<{ hide?: () => void } | null>(null)\r\nconst instanceId = `top-select-${Math.random().toString(36).slice(2)}`\r\nlet closeTimer: ReturnType<typeof setTimeout> | null = null\r\n\r\nconst valueProxy = computed({\r\n get: () => props.modelValue,\r\n set: (value) => emit('update:modelValue', value),\r\n})\r\n\r\nfunction readOptionValue(option: SelectOption | null | undefined, key: string) {\r\n if (option === null || option === undefined) return ''\r\n if (typeof option !== 'object') return String(option)\r\n return String(option[key] ?? '')\r\n}\r\n\r\nfunction getOptionLabel(option: SelectOption | null | undefined) {\r\n if (option === null || option === undefined) return ''\r\n if (typeof props.optionLabel === 'function') return props.optionLabel(option)\r\n return readOptionValue(option, props.optionLabel)\r\n}\r\n\r\nfunction getOptionPrefix(option: SelectOption | null | undefined) {\r\n return props.optionPrefix ? readOptionValue(option, props.optionPrefix) : ''\r\n}\r\n\r\nfunction formatOptionLabel(option: SelectOption | null | undefined, includePrefix = props.showSelectedPrefix) {\r\n const label = getOptionLabel(option)\r\n const prefix = getOptionPrefix(option)\r\n return includePrefix && prefix ? `${prefix} - ${label}` : label\r\n}\r\n\r\nfunction getHighlightedParts(value: string) {\r\n const searchTerm = query.value\r\n if (!searchTerm) return [{ text: value, highlighted: false }]\r\n\r\n const escapedQuery = searchTerm.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\r\n const regex = new RegExp(`(${escapedQuery})`, 'gi')\r\n return value.split(regex).filter(Boolean).map((part) => ({\r\n text: part,\r\n highlighted: part.toLowerCase() === searchTerm.toLowerCase(),\r\n }))\r\n}\r\n\r\nfunction hideDropdown() {\r\n autocompleteRef.value?.hide?.()\r\n}\r\n\r\nfunction closeOtherDropdowns() {\r\n if (typeof window === 'undefined') return\r\n window.dispatchEvent(new CustomEvent('top-select:close-others', { detail: { instanceId } }))\r\n}\r\n\r\nfunction handleOtherDropdownClosing(event: Event) {\r\n const customEvent = event as CustomEvent<{ instanceId?: string }>\r\n if (customEvent.detail?.instanceId !== instanceId) hideDropdown()\r\n}\r\n\r\nfunction handleFocusIn() {\r\n if (props.disabled || closeTimer) {\r\n hideDropdown()\r\n return\r\n }\r\n focused.value = true\r\n closeOtherDropdowns()\r\n}\r\n\r\nfunction closeAfterSelection() {\r\n if (!props.closeOnSelect) return\r\n focused.value = false\r\n hideDropdown()\r\n nextTick(hideDropdown)\r\n if (closeTimer) clearTimeout(closeTimer)\r\n closeTimer = setTimeout(() => {\r\n hideDropdown()\r\n closeTimer = null\r\n }, 200)\r\n}\r\n\r\ndefineExpose({ hideDropdown })\r\n\r\nonMounted(() => window.addEventListener('top-select:close-others', handleOtherDropdownClosing))\r\nonBeforeUnmount(() => {\r\n window.removeEventListener('top-select:close-others', handleOtherDropdownClosing)\r\n if (closeTimer) clearTimeout(closeTimer)\r\n})\r\n\r\nwatch(() => props.disabled, (disabled) => {\r\n if (disabled) {\r\n focused.value = false\r\n hideDropdown()\r\n }\r\n})\r\n\r\nwatch(() => props.options, () => {\r\n if (!focused.value) hideDropdown()\r\n})\r\n</script>\r\n\r\n<template>\r\n <div class=\"top-select top-solutions-component relative w-full\" :class=\"{ 'pointer-events-none': disabled }\" @focusin=\"handleFocusIn\">\r\n <span class=\"top-field-icon pointer-events-none absolute left-3 top-1/2 z-10 -translate-y-1/2\">\n <slot name=\"icon\" :loading=\"loading\">\r\n <i v-if=\"loading\" class=\"pi pi-spin pi-spinner\" />\r\n <i v-else class=\"pi pi-search\" />\r\n </slot>\r\n </span>\r\n\r\n <TopAutoComplete\r\n ref=\"autocompleteRef\"\r\n v-model=\"valueProxy\"\r\n :option-group-label=\"optionGroupLabel ?? undefined\"\r\n :option-group-children=\"optionGroupChildren ?? undefined\"\r\n :suggestions=\"options\"\r\n :data-key=\"optionKey\"\r\n :option-label=\"(option: SelectOption) => formatOptionLabel(option)\"\r\n :placeholder=\"placeholder\"\r\n :multiple=\"multiple\"\r\n :min-length=\"minQueryLength\"\r\n :disabled=\"disabled\"\r\n :delay=\"500\"\r\n :show-clear=\"!multiple && !disabled\"\r\n dropdown\r\n dropdown-mode=\"current\"\r\n :complete-on-focus=\"false\"\r\n :invalid=\"invalid\"\r\n fluid\r\n :force-selection=\"forceSelection\"\r\n input-class=\"text-xs\"\r\n :virtual-scroller-options=\"{\r\n lazy: true,\r\n onLazyLoad: (event: unknown) => emit('loadMore', event),\r\n itemSize: 84,\r\n showLoader: true,\r\n scrollHeight,\r\n }\"\r\n :pt=\"{\r\n root: { class: ['w-full text-xs', multiple ? 'h-auto' : 'h-[40px]'].join(' ') },\r\n pcInputText: {\r\n root: {\r\n class: 'top-field-control w-full h-auto text-xs border rounded-[10px] !pl-9 min-h-[36px]',\r\n },\r\n },\r\n input: { class: ['top-field-control w-full h-auto text-xs', multiple ? 'border-0 py-1 !shadow-none outline-none ring-0' : 'border rounded-[10px] !pl-9 min-h-[36px]'].join(' ') },\r\n inputMultiple: { class: 'top-field-control rounded-[10px] pl-9 min-h-[40px]' },\r\n inputChip: { class: 'py-0' },\r\n token: { class: 'bg-primary-100 text-primary-900 rounded-md gap-2 px-2 my-1 dark:bg-primary-900 dark:text-primary-100' },\r\n removeTokenIcon: { class: 'text-primary-900 w-3 h-3 cursor-pointer dark:text-primary-100' },\r\n panel: { class: 'top-select-panel top-solutions-component max-w-[85vw] overflow-hidden h-fit shadow-xl' },\r\n listContainer: { class: 'max-w-full overflow-x-hidden', style: { overflowX: 'hidden', maxWidth: panelWidth ?? '85vw', ...(panelWidth ? { width: panelWidth } : {}) } },\r\n list: { class: 'max-w-full overflow-x-hidden' }, option: { class: 'max-w-full overflow-hidden min-h-[84px]' }, placeholder: { class: '!text-xs' },\r\n }\"\r\n search-message=\" \"\r\n @clear=\"query = ''; emit('clear')\"\r\n @item-select=\"(event: unknown) => { query = ''; emit('select', event); closeAfterSelection() }\"\r\n @complete=\"(event: { originalEvent: Event; query?: string }) => { if (disabled) { hideDropdown(); return }; query = event.query ?? ''; closeOtherDropdowns(); emit('search', { ...event, query: query }) }\"\r\n @change=\"(event: unknown) => emit('change', event)\"\r\n >\r\n <template #chip=\"slotProps\">\r\n <slot v-if=\"slots.chip\" name=\"chip\" v-bind=\"slotProps\" />\r\n <div v-else class=\"flex items-center gap-1 !text-sm\">\r\n <div class=\"flex items-center gap-2 rounded-[9px] bg-primary-500 px-2 py-1 text-white\">\r\n <i class=\"pi pi-times-circle shrink-0 cursor-pointer rounded-full hover:bg-primary-800\" @click=\"slotProps.removeCallback($event)\" />\r\n <span v-tooltip.top=\"formatOptionLabel(slotProps.value)\" class=\"line-clamp-1 max-w-[300px] overflow-hidden text-ellipsis\">{{ formatOptionLabel(slotProps.value) }}</span>\r\n </div>\r\n </div>\r\n </template>\r\n\r\n <template #empty>\r\n <slot v-if=\"slots.empty\" name=\"empty\" />\r\n <div v-else-if=\"loading\" class=\"flex min-h-[100px] flex-col items-center justify-center gap-2 py-2\">\r\n <span class=\"pi pi-spin pi-spinner text-2xl text-primary-600\" />\r\n <span v-if=\"showLoadingMessage\" class=\"text-xs font-medium text-primary-600\">{{ loadingMessage }}</span>\r\n </div>\r\n <span v-else class=\"text-xs text-secondary-500\">{{ emptyMessage }}</span>\r\n </template>\r\n\r\n <template #selected-item=\"slotProps\">\r\n <slot v-if=\"slots['selected-item']\" name=\"selected-item\" v-bind=\"slotProps\" />\r\n <span v-else-if=\"slotProps.item\">{{ formatOptionLabel(slotProps.item) }}</span>\r\n </template>\r\n\r\n <template #optiongroup=\"slotProps\">\r\n <slot v-if=\"slots['option-group']\" name=\"option-group\" v-bind=\"slotProps\" />\r\n <div v-else class=\"flex items-center gap-2 font-semibold\">\r\n <i v-if=\"slotProps.option.icon\" :class=\"slotProps.option.icon\" />\r\n <span>{{ slotProps.option[optionGroupLabel ?? 'label'] }}</span>\r\n </div>\r\n </template>\r\n\r\n <template #option=\"slotProps\">\r\n <slot v-if=\"slots.option\" name=\"option\" v-bind=\"slotProps\" :label=\"getOptionLabel(slotProps.option)\" :prefix=\"getOptionPrefix(slotProps.option)\" :query=\"query\" />\r\n <div v-else v-tooltip.top=\"showTooltip ? getOptionLabel(slotProps.option) : null\" class=\"flex w-full min-w-0 items-start gap-2 overflow-hidden px-2 py-3 text-sm\" style=\"white-space: normal\">\r\n <span class=\"top-select-option-label line-clamp-2 min-w-0 flex-1 text-secondary-700 dark:text-zinc-200\" :title=\"getOptionLabel(slotProps.option)\">\r\n <span v-if=\"showOptionPrefix && getOptionPrefix(slotProps.option)\" class=\"top-select-option-prefix whitespace-nowrap font-bold text-primary-800 dark:text-primary-100\">\r\n <template v-for=\"(part, index) in getHighlightedParts(getOptionPrefix(slotProps.option))\" :key=\"index\"><mark v-if=\"part.highlighted\" class=\"rounded-sm bg-primary-200 p-0 font-bold text-black dark:bg-cyan-700 dark:text-white\">{{ part.text }}</mark><template v-else>{{ part.text }}</template></template><span class=\"font-bold text-secondary-500 dark:text-zinc-400\"> - </span>\r\n </span>\r\n <template v-for=\"(part, index) in getHighlightedParts(getOptionLabel(slotProps.option))\" :key=\"index\"><mark v-if=\"part.highlighted\" class=\"rounded-sm bg-primary-200 p-0 font-bold text-black dark:bg-cyan-700 dark:text-white\">{{ part.text }}</mark><template v-else>{{ part.text }}</template></template>\r\n </span>\r\n </div>\r\n </template>\r\n\r\n <template v-if=\"slots.footer\" #footer=\"slotProps\"><slot name=\"footer\" v-bind=\"slotProps\" /></template>\r\n </TopAutoComplete>\r\n </div>\r\n</template>\r\n\r\n<style>\r\n.top-select {\r\n position: relative;\r\n width: 100%;\r\n}\r\n\r\n.top-select .p-inputtext.p-component.p-inputtext-fluid.p-autocomplete-input {\r\n padding-left: 35px !important;\r\n border-radius: 10px 0 0 10px !important;\r\n}\r\n\r\n.top-select .p-autocomplete-dropdown {\r\n border-radius: 0 10px 10px 0 !important;\r\n}\r\n\r\n.top-select-option-prefix {\r\n color: var(--top-primary-800) !important;\r\n}\r\n\r\n.dark .top-select-option-prefix {\r\n color: var(--top-primary-100) !important;\r\n}\r\n\r\n.top-select-option-label {\r\n min-width: 0;\r\n flex: 1;\r\n display: -webkit-box;\r\n -webkit-box-orient: vertical;\r\n -webkit-line-clamp: 2;\r\n line-clamp: 2;\r\n overflow: hidden;\r\n overflow-wrap: anywhere;\r\n}\r\n\r\n.top-select-panel,\r\n.top-select-panel .p-virtualscroller,\r\n.top-select-panel .p-autocomplete-list-container,\r\n.top-select-panel .p-autocomplete-list { overflow-x: hidden !important; }\r\n.top-select-panel .p-autocomplete-option { max-width: 100%; }\r\n</style>\r\n","<script setup lang=\"ts\">\r\nimport { computed, nextTick, onBeforeUnmount, onMounted, ref, useSlots, watch } from 'vue'\r\nimport AutoComplete from 'primevue/autocomplete'\r\nimport vTooltip from 'primevue/tooltip'\r\n\r\ntype SelectOption = Record<string, unknown> | string | number\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n modelValue?: SelectOption | SelectOption[] | null\r\n options?: SelectOption[]\r\n loading?: boolean\r\n disabled?: boolean\r\n placeholder?: string\r\n optionLabel?: string | ((option: SelectOption) => string)\r\n optionKey?: string\r\n optionPrefix?: string\r\n showOptionPrefix?: boolean\r\n showSelectedPrefix?: boolean\r\n panelWidth?: string | null\r\n scrollHeight?: string\r\n invalid?: boolean\r\n showTooltip?: boolean\r\n optionGroupLabel?: string | null\r\n optionGroupChildren?: string | null\r\n minQueryLength?: number\r\n emptyMessage?: string\r\n loadingMessage?: string\r\n showLoadingMessage?: boolean\r\n multiple?: boolean\r\n forceSelection?: boolean\r\n closeOnSelect?: boolean\r\n }>(),\r\n {\r\n modelValue: null,\r\n options: () => [],\r\n loading: false,\r\n disabled: false,\r\n placeholder: 'Pesquisar...',\r\n optionLabel: 'label',\r\n optionKey: 'id',\r\n optionPrefix: '',\r\n showOptionPrefix: false,\r\n showSelectedPrefix: false,\r\n panelWidth: null,\r\n scrollHeight: '250px',\r\n invalid: false,\r\n showTooltip: true,\r\n optionGroupLabel: null,\r\n optionGroupChildren: null,\r\n minQueryLength: 1,\r\n emptyMessage: 'Nenhum resultado encontrado.',\r\n loadingMessage: 'Carregando...',\r\n showLoadingMessage: true,\r\n multiple: false,\r\n forceSelection: true,\r\n closeOnSelect: false,\r\n },\r\n)\r\n\r\nconst emit = defineEmits<{\r\n 'update:modelValue': [value: SelectOption | SelectOption[] | null]\r\n search: [event: { originalEvent: Event; query: string }]\r\n loadMore: [event: unknown]\r\n clear: []\r\n select: [event: unknown]\r\n change: [event: unknown]\r\n}>()\r\n\r\nconst slots = useSlots()\r\n// PrimeVue's slot types omit selected-item even though the runtime component supports it.\r\nconst TopAutoComplete = AutoComplete as any\r\nconst query = ref('')\r\nconst focused = ref(false)\r\nconst autocompleteRef = ref<{ hide?: () => void } | null>(null)\r\nconst instanceId = `top-select-${Math.random().toString(36).slice(2)}`\r\nlet closeTimer: ReturnType<typeof setTimeout> | null = null\r\n\r\nconst valueProxy = computed({\r\n get: () => props.modelValue,\r\n set: (value) => emit('update:modelValue', value),\r\n})\r\n\r\nfunction readOptionValue(option: SelectOption | null | undefined, key: string) {\r\n if (option === null || option === undefined) return ''\r\n if (typeof option !== 'object') return String(option)\r\n return String(option[key] ?? '')\r\n}\r\n\r\nfunction getOptionLabel(option: SelectOption | null | undefined) {\r\n if (option === null || option === undefined) return ''\r\n if (typeof props.optionLabel === 'function') return props.optionLabel(option)\r\n return readOptionValue(option, props.optionLabel)\r\n}\r\n\r\nfunction getOptionPrefix(option: SelectOption | null | undefined) {\r\n return props.optionPrefix ? readOptionValue(option, props.optionPrefix) : ''\r\n}\r\n\r\nfunction formatOptionLabel(option: SelectOption | null | undefined, includePrefix = props.showSelectedPrefix) {\r\n const label = getOptionLabel(option)\r\n const prefix = getOptionPrefix(option)\r\n return includePrefix && prefix ? `${prefix} - ${label}` : label\r\n}\r\n\r\nfunction getHighlightedParts(value: string) {\r\n const searchTerm = query.value\r\n if (!searchTerm) return [{ text: value, highlighted: false }]\r\n\r\n const escapedQuery = searchTerm.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\r\n const regex = new RegExp(`(${escapedQuery})`, 'gi')\r\n return value.split(regex).filter(Boolean).map((part) => ({\r\n text: part,\r\n highlighted: part.toLowerCase() === searchTerm.toLowerCase(),\r\n }))\r\n}\r\n\r\nfunction hideDropdown() {\r\n autocompleteRef.value?.hide?.()\r\n}\r\n\r\nfunction closeOtherDropdowns() {\r\n if (typeof window === 'undefined') return\r\n window.dispatchEvent(new CustomEvent('top-select:close-others', { detail: { instanceId } }))\r\n}\r\n\r\nfunction handleOtherDropdownClosing(event: Event) {\r\n const customEvent = event as CustomEvent<{ instanceId?: string }>\r\n if (customEvent.detail?.instanceId !== instanceId) hideDropdown()\r\n}\r\n\r\nfunction handleFocusIn() {\r\n if (props.disabled || closeTimer) {\r\n hideDropdown()\r\n return\r\n }\r\n focused.value = true\r\n closeOtherDropdowns()\r\n}\r\n\r\nfunction closeAfterSelection() {\r\n if (!props.closeOnSelect) return\r\n focused.value = false\r\n hideDropdown()\r\n nextTick(hideDropdown)\r\n if (closeTimer) clearTimeout(closeTimer)\r\n closeTimer = setTimeout(() => {\r\n hideDropdown()\r\n closeTimer = null\r\n }, 200)\r\n}\r\n\r\ndefineExpose({ hideDropdown })\r\n\r\nonMounted(() => window.addEventListener('top-select:close-others', handleOtherDropdownClosing))\r\nonBeforeUnmount(() => {\r\n window.removeEventListener('top-select:close-others', handleOtherDropdownClosing)\r\n if (closeTimer) clearTimeout(closeTimer)\r\n})\r\n\r\nwatch(() => props.disabled, (disabled) => {\r\n if (disabled) {\r\n focused.value = false\r\n hideDropdown()\r\n }\r\n})\r\n\r\nwatch(() => props.options, () => {\r\n if (!focused.value) hideDropdown()\r\n})\r\n</script>\r\n\r\n<template>\r\n <div class=\"top-select top-solutions-component relative w-full\" :class=\"{ 'pointer-events-none': disabled }\" @focusin=\"handleFocusIn\">\r\n <span class=\"top-field-icon pointer-events-none absolute left-3 top-1/2 z-10 -translate-y-1/2\">\n <slot name=\"icon\" :loading=\"loading\">\r\n <i v-if=\"loading\" class=\"pi pi-spin pi-spinner\" />\r\n <i v-else class=\"pi pi-search\" />\r\n </slot>\r\n </span>\r\n\r\n <TopAutoComplete\r\n ref=\"autocompleteRef\"\r\n v-model=\"valueProxy\"\r\n :option-group-label=\"optionGroupLabel ?? undefined\"\r\n :option-group-children=\"optionGroupChildren ?? undefined\"\r\n :suggestions=\"options\"\r\n :data-key=\"optionKey\"\r\n :option-label=\"(option: SelectOption) => formatOptionLabel(option)\"\r\n :placeholder=\"placeholder\"\r\n :multiple=\"multiple\"\r\n :min-length=\"minQueryLength\"\r\n :disabled=\"disabled\"\r\n :delay=\"500\"\r\n :show-clear=\"!multiple && !disabled\"\r\n dropdown\r\n dropdown-mode=\"current\"\r\n :complete-on-focus=\"false\"\r\n :invalid=\"invalid\"\r\n fluid\r\n :force-selection=\"forceSelection\"\r\n input-class=\"text-xs\"\r\n :virtual-scroller-options=\"{\r\n lazy: true,\r\n onLazyLoad: (event: unknown) => emit('loadMore', event),\r\n itemSize: 84,\r\n showLoader: true,\r\n scrollHeight,\r\n }\"\r\n :pt=\"{\r\n root: { class: ['w-full text-xs', multiple ? 'h-auto' : 'h-[40px]'].join(' ') },\r\n pcInputText: {\r\n root: {\r\n class: 'top-field-control w-full h-auto text-xs border rounded-[10px] !pl-9 min-h-[36px]',\r\n },\r\n },\r\n input: { class: ['top-field-control w-full h-auto text-xs', multiple ? 'border-0 py-1 !shadow-none outline-none ring-0' : 'border rounded-[10px] !pl-9 min-h-[36px]'].join(' ') },\r\n inputMultiple: { class: 'top-field-control rounded-[10px] pl-9 min-h-[40px]' },\r\n inputChip: { class: 'py-0' },\r\n token: { class: 'bg-primary-100 text-primary-900 rounded-md gap-2 px-2 my-1 dark:bg-primary-900 dark:text-primary-100' },\r\n removeTokenIcon: { class: 'text-primary-900 w-3 h-3 cursor-pointer dark:text-primary-100' },\r\n panel: { class: 'top-select-panel top-solutions-component max-w-[85vw] overflow-hidden h-fit shadow-xl' },\r\n listContainer: { class: 'max-w-full overflow-x-hidden', style: { overflowX: 'hidden', maxWidth: panelWidth ?? '85vw', ...(panelWidth ? { width: panelWidth } : {}) } },\r\n list: { class: 'max-w-full overflow-x-hidden' }, option: { class: 'max-w-full overflow-hidden min-h-[84px]' }, placeholder: { class: '!text-xs' },\r\n }\"\r\n search-message=\" \"\r\n @clear=\"query = ''; emit('clear')\"\r\n @item-select=\"(event: unknown) => { query = ''; emit('select', event); closeAfterSelection() }\"\r\n @complete=\"(event: { originalEvent: Event; query?: string }) => { if (disabled) { hideDropdown(); return }; query = event.query ?? ''; closeOtherDropdowns(); emit('search', { ...event, query: query }) }\"\r\n @change=\"(event: unknown) => emit('change', event)\"\r\n >\r\n <template #chip=\"slotProps\">\r\n <slot v-if=\"slots.chip\" name=\"chip\" v-bind=\"slotProps\" />\r\n <div v-else class=\"flex items-center gap-1 !text-sm\">\r\n <div class=\"flex items-center gap-2 rounded-[9px] bg-primary-500 px-2 py-1 text-white\">\r\n <i class=\"pi pi-times-circle shrink-0 cursor-pointer rounded-full hover:bg-primary-800\" @click=\"slotProps.removeCallback($event)\" />\r\n <span v-tooltip.top=\"formatOptionLabel(slotProps.value)\" class=\"line-clamp-1 max-w-[300px] overflow-hidden text-ellipsis\">{{ formatOptionLabel(slotProps.value) }}</span>\r\n </div>\r\n </div>\r\n </template>\r\n\r\n <template #empty>\r\n <slot v-if=\"slots.empty\" name=\"empty\" />\r\n <div v-else-if=\"loading\" class=\"flex min-h-[100px] flex-col items-center justify-center gap-2 py-2\">\r\n <span class=\"pi pi-spin pi-spinner text-2xl text-primary-600\" />\r\n <span v-if=\"showLoadingMessage\" class=\"text-xs font-medium text-primary-600\">{{ loadingMessage }}</span>\r\n </div>\r\n <span v-else class=\"text-xs text-secondary-500\">{{ emptyMessage }}</span>\r\n </template>\r\n\r\n <template #selected-item=\"slotProps\">\r\n <slot v-if=\"slots['selected-item']\" name=\"selected-item\" v-bind=\"slotProps\" />\r\n <span v-else-if=\"slotProps.item\">{{ formatOptionLabel(slotProps.item) }}</span>\r\n </template>\r\n\r\n <template #optiongroup=\"slotProps\">\r\n <slot v-if=\"slots['option-group']\" name=\"option-group\" v-bind=\"slotProps\" />\r\n <div v-else class=\"flex items-center gap-2 font-semibold\">\r\n <i v-if=\"slotProps.option.icon\" :class=\"slotProps.option.icon\" />\r\n <span>{{ slotProps.option[optionGroupLabel ?? 'label'] }}</span>\r\n </div>\r\n </template>\r\n\r\n <template #option=\"slotProps\">\r\n <slot v-if=\"slots.option\" name=\"option\" v-bind=\"slotProps\" :label=\"getOptionLabel(slotProps.option)\" :prefix=\"getOptionPrefix(slotProps.option)\" :query=\"query\" />\r\n <div v-else v-tooltip.top=\"showTooltip ? getOptionLabel(slotProps.option) : null\" class=\"flex w-full min-w-0 items-start gap-2 overflow-hidden px-2 py-3 text-sm\" style=\"white-space: normal\">\r\n <span class=\"top-select-option-label line-clamp-2 min-w-0 flex-1 text-secondary-700 dark:text-zinc-200\" :title=\"getOptionLabel(slotProps.option)\">\r\n <span v-if=\"showOptionPrefix && getOptionPrefix(slotProps.option)\" class=\"top-select-option-prefix whitespace-nowrap font-bold text-primary-800 dark:text-primary-100\">\r\n <template v-for=\"(part, index) in getHighlightedParts(getOptionPrefix(slotProps.option))\" :key=\"index\"><mark v-if=\"part.highlighted\" class=\"rounded-sm bg-primary-200 p-0 font-bold text-black dark:bg-cyan-700 dark:text-white\">{{ part.text }}</mark><template v-else>{{ part.text }}</template></template><span class=\"font-bold text-secondary-500 dark:text-zinc-400\"> - </span>\r\n </span>\r\n <template v-for=\"(part, index) in getHighlightedParts(getOptionLabel(slotProps.option))\" :key=\"index\"><mark v-if=\"part.highlighted\" class=\"rounded-sm bg-primary-200 p-0 font-bold text-black dark:bg-cyan-700 dark:text-white\">{{ part.text }}</mark><template v-else>{{ part.text }}</template></template>\r\n </span>\r\n </div>\r\n </template>\r\n\r\n <template v-if=\"slots.footer\" #footer=\"slotProps\"><slot name=\"footer\" v-bind=\"slotProps\" /></template>\r\n </TopAutoComplete>\r\n </div>\r\n</template>\r\n\r\n<style>\r\n.top-select {\r\n position: relative;\r\n width: 100%;\r\n}\r\n\r\n.top-select .p-inputtext.p-component.p-inputtext-fluid.p-autocomplete-input {\r\n padding-left: 35px !important;\r\n border-radius: 10px 0 0 10px !important;\r\n}\r\n\r\n.top-select .p-autocomplete-dropdown {\r\n border-radius: 0 10px 10px 0 !important;\r\n}\r\n\r\n.top-select-option-prefix {\r\n color: var(--top-primary-800) !important;\r\n}\r\n\r\n.dark .top-select-option-prefix {\r\n color: var(--top-primary-100) !important;\r\n}\r\n\r\n.top-select-option-label {\r\n min-width: 0;\r\n flex: 1;\r\n display: -webkit-box;\r\n -webkit-box-orient: vertical;\r\n -webkit-line-clamp: 2;\r\n line-clamp: 2;\r\n overflow: hidden;\r\n overflow-wrap: anywhere;\r\n}\r\n\r\n.top-select-panel,\r\n.top-select-panel .p-virtualscroller,\r\n.top-select-panel .p-autocomplete-list-container,\r\n.top-select-panel .p-autocomplete-list { overflow-x: hidden !important; }\r\n.top-select-panel .p-autocomplete-option { max-width: 100%; }\r\n</style>\r\n","<script setup lang=\"ts\">\r\nimport Toast from 'primevue/toast'\r\nimport type { ToastMessageOptions } from 'primevue/toast'\r\n\r\nexport type TopToastFooter = string | number\r\n\r\nexport type TopToastAction = {\r\n label: string\r\n icon?: string\r\n onClick?: () => void\r\n}\r\n\r\nexport type TopToastData = {\r\n footer?: TopToastFooter\r\n action?: TopToastAction\r\n}\r\n\r\ntype TopToastMessage = ToastMessageOptions & {\r\n data?: TopToastData\r\n}\r\n\r\nwithDefaults(\r\n defineProps<{\r\n baseZIndex?: number\r\n }>(),\r\n {\r\n baseZIndex: 30000,\r\n },\r\n)\r\n\r\nfunction footerOf(message: TopToastMessage): TopToastFooter | undefined {\r\n return message.data?.footer\r\n}\r\n\r\nfunction actionOf(message: TopToastMessage) {\r\n return message.data?.action\r\n}\r\n\r\nfunction runAction(message: TopToastMessage) {\r\n actionOf(message)?.onClick?.()\r\n}\r\n\r\nfunction hasFooter(message: TopToastMessage) {\r\n return footerOf(message) !== undefined\r\n}\r\n\r\nfunction hasAction(message: TopToastMessage) {\r\n return Boolean(actionOf(message))\r\n}\r\n\r\nfunction severityClass(message: TopToastMessage, element: 'summary' | 'detail' | 'action') {\r\n const severity = message.severity ?? 'info'\r\n return `top-toast__${element}--${severity}`\r\n}\r\n</script>\r\n\r\n<template>\r\n <Toast position=\"top-right\" :base-z-index=\"baseZIndex\">\r\n <template #message=\"slotProps\">\r\n <div class=\"top-toast__content\">\r\n <div :class=\"['top-toast__summary', severityClass(slotProps.message, 'summary')]\">{{ slotProps.message.summary }}</div>\r\n <div class=\"top-toast__detail\">{{ slotProps.message.detail }}</div>\r\n <slot\r\n v-if=\"hasAction(slotProps.message)\"\r\n name=\"action\"\r\n :action=\"actionOf(slotProps.message)\"\r\n :message=\"slotProps.message\"\r\n :run=\"() => runAction(slotProps.message)\"\r\n >\r\n <button\r\n v-if=\"actionOf(slotProps.message)\"\r\n :class=\"['top-toast__action', severityClass(slotProps.message, 'action')]\"\r\n type=\"button\"\r\n @click=\"runAction(slotProps.message)\"\r\n >\r\n <i v-if=\"actionOf(slotProps.message)?.icon\" :class=\"actionOf(slotProps.message)?.icon\" aria-hidden=\"true\" />\r\n {{ actionOf(slotProps.message)?.label }}\r\n </button>\r\n </slot>\r\n <slot\r\n v-if=\"hasFooter(slotProps.message)\"\r\n name=\"footer\"\r\n :message=\"slotProps.message\"\r\n :footer=\"footerOf(slotProps.message)\"\r\n >\r\n <div v-if=\"footerOf(slotProps.message) !== undefined\" class=\"top-toast__footer\">\r\n {{ footerOf(slotProps.message) }}\r\n </div>\r\n </slot>\r\n </div>\r\n </template>\r\n </Toast>\r\n\r\n</template>\r\n\r\n<style>\r\n.top-toast__content { display: flex; width: 100%; flex-direction: column; gap: .5rem; }\r\n.top-toast__summary { font-weight: 600; }\r\n.top-toast__detail { font-size: .875rem; }\r\n.top-toast__footer { margin-top: .25rem; border-top: 1px solid #9ca3af; padding-top: .5rem; color: #6b7280; font-size: .75rem; }\r\n.top-toast__action { display: inline-flex; align-items: center; align-self: flex-start; gap: .5rem; border: 0; border-radius: 10px; padding: .25rem .75rem; color: #fff; font-size: .875rem; cursor: pointer; }\r\n.top-toast__summary--success, .top-toast__detail--success { color: #047857; }\r\n.top-toast__summary--error, .top-toast__detail--error { color: #dc2626; }\r\n.top-toast__summary--warn, .top-toast__detail--warn { color: #b45309; }\r\n.top-toast__summary--info, .top-toast__detail--info { color: #036da3; }\r\n.top-toast__summary--secondary, .top-toast__detail--secondary { color: #52525b; }\r\n.top-toast__summary--contrast, .top-toast__detail--contrast { color: #18181b; }\r\n.top-toast__action--success { background: #059669; }\r\n.top-toast__action--success:hover { background: #047857; }\r\n.top-toast__action--error { background: #dc2626; }\r\n.top-toast__action--error:hover { background: #b91c1c; }\r\n.top-toast__action--warn { background: #d97706; }\r\n.top-toast__action--warn:hover { background: #b45309; }\r\n.top-toast__action--info { background: #036da3; }\r\n.top-toast__action--info:hover { background: #02466b; }\r\n.top-toast__action--secondary { background: #52525b; }\r\n.top-toast__action--secondary:hover { background: #3f3f46; }\r\n.top-toast__action--contrast { background: #18181b; }\r\n.top-toast__action--contrast:hover { background: #000; }\r\n</style>\r\n","<script setup lang=\"ts\">\r\nimport Toast from 'primevue/toast'\r\nimport type { ToastMessageOptions } from 'primevue/toast'\r\n\r\nexport type TopToastFooter = string | number\r\n\r\nexport type TopToastAction = {\r\n label: string\r\n icon?: string\r\n onClick?: () => void\r\n}\r\n\r\nexport type TopToastData = {\r\n footer?: TopToastFooter\r\n action?: TopToastAction\r\n}\r\n\r\ntype TopToastMessage = ToastMessageOptions & {\r\n data?: TopToastData\r\n}\r\n\r\nwithDefaults(\r\n defineProps<{\r\n baseZIndex?: number\r\n }>(),\r\n {\r\n baseZIndex: 30000,\r\n },\r\n)\r\n\r\nfunction footerOf(message: TopToastMessage): TopToastFooter | undefined {\r\n return message.data?.footer\r\n}\r\n\r\nfunction actionOf(message: TopToastMessage) {\r\n return message.data?.action\r\n}\r\n\r\nfunction runAction(message: TopToastMessage) {\r\n actionOf(message)?.onClick?.()\r\n}\r\n\r\nfunction hasFooter(message: TopToastMessage) {\r\n return footerOf(message) !== undefined\r\n}\r\n\r\nfunction hasAction(message: TopToastMessage) {\r\n return Boolean(actionOf(message))\r\n}\r\n\r\nfunction severityClass(message: TopToastMessage, element: 'summary' | 'detail' | 'action') {\r\n const severity = message.severity ?? 'info'\r\n return `top-toast__${element}--${severity}`\r\n}\r\n</script>\r\n\r\n<template>\r\n <Toast position=\"top-right\" :base-z-index=\"baseZIndex\">\r\n <template #message=\"slotProps\">\r\n <div class=\"top-toast__content\">\r\n <div :class=\"['top-toast__summary', severityClass(slotProps.message, 'summary')]\">{{ slotProps.message.summary }}</div>\r\n <div class=\"top-toast__detail\">{{ slotProps.message.detail }}</div>\r\n <slot\r\n v-if=\"hasAction(slotProps.message)\"\r\n name=\"action\"\r\n :action=\"actionOf(slotProps.message)\"\r\n :message=\"slotProps.message\"\r\n :run=\"() => runAction(slotProps.message)\"\r\n >\r\n <button\r\n v-if=\"actionOf(slotProps.message)\"\r\n :class=\"['top-toast__action', severityClass(slotProps.message, 'action')]\"\r\n type=\"button\"\r\n @click=\"runAction(slotProps.message)\"\r\n >\r\n <i v-if=\"actionOf(slotProps.message)?.icon\" :class=\"actionOf(slotProps.message)?.icon\" aria-hidden=\"true\" />\r\n {{ actionOf(slotProps.message)?.label }}\r\n </button>\r\n </slot>\r\n <slot\r\n v-if=\"hasFooter(slotProps.message)\"\r\n name=\"footer\"\r\n :message=\"slotProps.message\"\r\n :footer=\"footerOf(slotProps.message)\"\r\n >\r\n <div v-if=\"footerOf(slotProps.message) !== undefined\" class=\"top-toast__footer\">\r\n {{ footerOf(slotProps.message) }}\r\n </div>\r\n </slot>\r\n </div>\r\n </template>\r\n </Toast>\r\n\r\n</template>\r\n\r\n<style>\r\n.top-toast__content { display: flex; width: 100%; flex-direction: column; gap: .5rem; }\r\n.top-toast__summary { font-weight: 600; }\r\n.top-toast__detail { font-size: .875rem; }\r\n.top-toast__footer { margin-top: .25rem; border-top: 1px solid #9ca3af; padding-top: .5rem; color: #6b7280; font-size: .75rem; }\r\n.top-toast__action { display: inline-flex; align-items: center; align-self: flex-start; gap: .5rem; border: 0; border-radius: 10px; padding: .25rem .75rem; color: #fff; font-size: .875rem; cursor: pointer; }\r\n.top-toast__summary--success, .top-toast__detail--success { color: #047857; }\r\n.top-toast__summary--error, .top-toast__detail--error { color: #dc2626; }\r\n.top-toast__summary--warn, .top-toast__detail--warn { color: #b45309; }\r\n.top-toast__summary--info, .top-toast__detail--info { color: #036da3; }\r\n.top-toast__summary--secondary, .top-toast__detail--secondary { color: #52525b; }\r\n.top-toast__summary--contrast, .top-toast__detail--contrast { color: #18181b; }\r\n.top-toast__action--success { background: #059669; }\r\n.top-toast__action--success:hover { background: #047857; }\r\n.top-toast__action--error { background: #dc2626; }\r\n.top-toast__action--error:hover { background: #b91c1c; }\r\n.top-toast__action--warn { background: #d97706; }\r\n.top-toast__action--warn:hover { background: #b45309; }\r\n.top-toast__action--info { background: #036da3; }\r\n.top-toast__action--info:hover { background: #02466b; }\r\n.top-toast__action--secondary { background: #52525b; }\r\n.top-toast__action--secondary:hover { background: #3f3f46; }\r\n.top-toast__action--contrast { background: #18181b; }\r\n.top-toast__action--contrast:hover { background: #000; }\r\n</style>\r\n"],"x_google_ignoreList":[7,8,9,10],"mappings":"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"}
|