@prolibu-suite/cobalt-core 0.11.9 → 0.11.11
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/custom-elements.json +79 -31
- package/dist/cjs/co-color-picker.cjs.entry.js +1 -1
- package/dist/cjs/co-file-field.cjs.entry.js +30 -8
- package/dist/cjs/co-popover.cjs.entry.js +1 -1
- package/dist/cjs/co-select.cjs.entry.js +1 -1
- package/dist/cjs/cobalt.cjs.js +1 -1
- package/dist/cjs/{fileI18n-6sdbKvo6.js → fileI18n-Bz8zbHlB.js} +3 -0
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cobalt/cobalt.esm.js +1 -1
- package/dist/cobalt/{p-cd43d372.entry.js → p-15d995b4.entry.js} +1 -1
- package/dist/cobalt/p-6b88a52c.entry.js +1 -0
- package/dist/cobalt/{p-2832ab99.entry.js → p-9125252a.entry.js} +1 -1
- package/dist/cobalt/p-b6463d35.entry.js +1 -0
- package/dist/cobalt/p-z0tbse7d.js +1 -0
- package/dist/collection/components/co-autocomplete/co-autocomplete.js +1 -1
- package/dist/collection/components/co-avatar-group/co-avatar-group.js +1 -1
- package/dist/collection/components/co-checkbox-group/co-checkbox-group.js +1 -1
- package/dist/collection/components/co-color-area/co-color-area.js +2 -2
- package/dist/collection/components/co-color-slider/co-color-slider.js +1 -1
- package/dist/collection/components/co-combobox/co-combobox.js +1 -1
- package/dist/collection/components/co-command-search/co-command-search.js +1 -1
- package/dist/collection/components/co-data-table/co-data-table.js +1 -1
- package/dist/collection/components/co-date-range-picker/co-date-range-picker.js +2 -2
- package/dist/collection/components/co-document-editor/co-document-editor.js +5 -5
- package/dist/collection/components/co-file-field/co-file-field.js +50 -8
- package/dist/collection/components/co-file-field/co-file-field.utils.js +14 -0
- package/dist/collection/components/co-popover/co-popover.css +4 -0
- package/dist/collection/components/co-popover/co-popover.js +1 -1
- package/dist/collection/components/co-radio-group/co-radio-group.js +1 -1
- package/dist/collection/components/co-ref-field/co-ref-field.js +4 -4
- package/dist/collection/components/co-segmented-bar/co-segmented-bar.js +1 -1
- package/dist/collection/components/co-select/co-select.css +10 -0
- package/dist/collection/components/co-select/co-select.js +1 -1
- package/dist/collection/components/co-sidebar-nav/co-sidebar-nav.js +1 -1
- package/dist/collection/components/co-toast/co-toast.js +2 -2
- package/dist/collection/components/co-transfer-list/co-transfer-list.js +1 -1
- package/dist/collection/components/co-tree-item/co-tree-item.js +2 -2
- package/dist/collection/utils/fileI18n.js +3 -0
- package/dist/components/co-color-picker.js +1 -1
- package/dist/components/co-combobox.js +1 -1
- package/dist/components/co-date-picker.js +1 -1
- package/dist/components/co-date-range-picker.js +1 -1
- package/dist/components/co-date-range.js +1 -1
- package/dist/components/co-date-time-picker.js +1 -1
- package/dist/components/co-file-field.js +1 -1
- package/dist/components/co-menu-item.js +1 -1
- package/dist/components/co-menu.js +1 -1
- package/dist/components/co-popover.js +1 -1
- package/dist/components/co-ref-field.js +1 -1
- package/dist/components/co-select.js +1 -1
- package/dist/components/{p-xA7AfoIW.js → p-BxDO3-bY.js} +1 -1
- package/dist/components/{p-BkyYV32T.js → p-DXl_Q4WY.js} +1 -1
- package/dist/components/p-z0tbse7d.js +1 -0
- package/dist/esm/co-color-picker.entry.js +1 -1
- package/dist/esm/co-file-field.entry.js +30 -8
- package/dist/esm/co-popover.entry.js +1 -1
- package/dist/esm/co-select.entry.js +1 -1
- package/dist/esm/cobalt.js +1 -1
- package/dist/esm/{fileI18n-gKnOhsd2.js → fileI18n-z0tbse7d.js} +3 -0
- package/dist/esm/loader.js +1 -1
- package/dist/types/components/co-file-field/co-file-field.d.ts +13 -0
- package/dist/types/components/co-file-field/co-file-field.utils.d.ts +6 -0
- package/dist/types/components.d.ts +16 -0
- package/dist/types/utils/fileI18n.d.ts +1 -0
- package/package.json +4 -4
- package/dist/cobalt/p-454dd8ab.entry.js +0 -1
- package/dist/cobalt/p-c31b9b51.entry.js +0 -1
- package/dist/cobalt/p-gKnOhsd2.js +0 -1
- package/dist/components/p-gKnOhsd2.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e,c as i,h as o,a as t}from"./p-DJkaRtbb.js";import{R as r}from"./p-CYN5B3IQ.js";import{g as a,f as s}from"./p-z0tbse7d.js";function n(e){if(null==e||isNaN(e))return"";if(e<1024)return`${e} B`;const i=e=>e.toFixed(2).replace(/\.?0+$/,"");return e<1048576?`${i(e/1024)} KB`:`${i(e/1048576)} MB`}const c=new Set(["png","jpg","jpeg","gif","webp","svg","avif","bmp"]),l=new Set(["mp4","mov","webm","m4v","ogv"]);function d(e){const i=(e||"").split("?")[0],o=i.lastIndexOf(".");return o>=0?i.slice(o+1).toLowerCase():""}function f(e){return d(e.name)||d(e.url)}function h(e){return c.has(f(e))}function p(e){return l.has(f(e))}function u(e){return"done"===e.status&&!!e.url&&p(e)}const v=new Set(["png","jpg","jpeg","webp"]);function _(e){return p(e)||h(e)?e.url||e.thumbnail:e.thumbnail||e.url}const b={image:c,video:l},g=class{constructor(o){e(this,o),this.coFilesSelected=i(this,"coFilesSelected",3),this.coRemove=i(this,"coRemove",3),this.coClear=i(this,"coClear",3),this.coReorder=i(this,"coReorder",3),this.coCopy=i(this,"coCopy",3),this.coAnnotate=i(this,"coAnnotate",3),this.coPreviewOpen=i(this,"coPreviewOpen",3),this.disabled=!1,this.readonly=!1,this.required=!1,this.multiple=!1,this.maxFiles=100,this.status="default",this.layout="vertical",this.reorderable=!0,this.annotatable=!1,this.files="[]",this.dragOver=!1,this.localError="",this.copiedKey="",this.armedKey="",this.dragKey="",this.overKey="",this.failedPreviews=new Set,this.tempSeq=0,this.lastFilesStr="",this.lastParsed=[],this.handleDragOver=e=>{this.disabled||this.readonly||this.dragKey||(e.preventDefault(),this.dragOver=!0)},this.handleDragLeave=e=>{const i=e.relatedTarget;i&&e.currentTarget instanceof Node&&e.currentTarget.contains(i)||(this.dragOver=!1)},this.handleDrop=e=>{var i;e.preventDefault(),this.dragOver=!1,this.dragKey||(null===(i=e.dataTransfer)||void 0===i?void 0:i.files)&&this.handleFiles(e.dataTransfer.files)},this.handleBrowse=e=>{var i;this.disabled||this.readonly||e&&this.fromActionsSlot(e)||null===(i=this.inputEl)||void 0===i||i.click()},this.handleInputChange=e=>{const i=e.target;i.files&&this.handleFiles(i.files),i.value=""},this.disarmDrag=()=>{this.armedKey&&!this.dragKey&&(this.armedKey="")},this.handleRowDragEnd=()=>{this.resetDragState()}}componentWillLoad(){this.failedPreviews||(this.failedPreviews=new Set)}connectedCallback(){window.addEventListener("mouseup",this.disarmDrag)}disconnectedCallback(){window.removeEventListener("mouseup",this.disarmDrag),clearTimeout(this.copiedTimer),this.closeLightbox()}get parsedFiles(){const e=this.files;if("string"!=typeof e||!e.trim())return[];if(e===this.lastFilesStr)return this.lastParsed;let i=[];try{const o=JSON.parse(e);Array.isArray(o)&&(i=o)}catch(e){}return this.lastFilesStr=e,this.lastParsed=i,i}get strings(){return a(this.locale)}get acceptList(){const e=this.accept;if(!e)return[];let i=[];try{const o=JSON.parse(e);Array.isArray(o)&&(i=o.map(String))}catch(o){i=e.split(",")}return i.map((e=>e.trim().toLowerCase().replace(/^\./,""))).filter((e=>e&&"*"!==e))}get isInvalid(){return"error"===this.status||!!this.localError}get inputAccept(){const e=this.acceptList;if(e.length)return e.map((e=>e.includes("/")?e:`.${e}`)).join(",")}extOf(e){const i=e.lastIndexOf(".");return i>=0?e.slice(i+1).toLowerCase():""}validate(e){return function(e,i){if(!e.length)return!0;const o=d(i.name),t=(i.type||"").toLowerCase();return e.some((e=>{var i;if(!e.includes("/"))return e===o;if(!e.endsWith("/*"))return t===e;const r=e.slice(0,-2);return t?t.startsWith(`${r}/`):!!(null===(i=b[r])||void 0===i?void 0:i.has(o))}))}(this.acceptList,e)?this.maxBytes&&e.size>this.maxBytes?s(this.strings.errTooLarge,{x:n(e.size)}):null:s(this.strings.errInvalidFormat,{x:this.extOf(e.name)})}onDownloadClick(e,i){if(0!==e.button||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey||!i.url)return;e.preventDefault();const o=i.url;(async function(e,i,o={}){const{fetchImpl:t=globalThis.fetch,doc:r=globalThis.document,urlApi:a=URL}=o;try{const o=await t(e);if(!o.ok)return!1;const s=a.createObjectURL(await o.blob()),n=r.createElement("a");return n.href=s,n.download=i||"download",n.rel="noopener noreferrer",r.body.appendChild(n),n.click(),setTimeout((()=>{n.remove(),a.revokeObjectURL(s)}),2e3),!0}catch(e){return!1}})(o,i.name).then((e=>{e||window.open(o,"_blank","noopener,noreferrer")}))}handleFiles(e){if(this.disabled||this.readonly)return;this.localError="";const i=Array.from(e);if(!i.length)return;const o=this.multiple?i:i.slice(0,1);if(this.multiple){const e=this.maxFiles-this.parsedFiles.length;if(e<=0)return void(this.localError=s(this.strings.errMaxFiles,{n:this.maxFiles}));o.length>e&&(o.length=e)}const t=[],r=[];for(const e of o){const i=this.validate(e);i?this.localError=i:(t.push(e),r.push(`tmp-${Date.now()}-${this.tempSeq++}`))}t.length&&this.coFilesSelected.emit({files:t,tempIds:r})}fromActionsSlot(e){return e.composedPath().some((e=>{var i,o;return"actions"===(null===(o=(i=e).getAttribute)||void 0===o?void 0:o.call(i,"slot"))}))}keyFor(e){var i;return e.id||e.tempId||`${e.name}:${null!==(i=e.size)&&void 0!==i?i:""}`}handleCopy(e){var i;const o=e.url||"";if(!o)return;const t=this.keyFor(e);this.coCopy.emit({id:t,url:o}),(null===(i=navigator.clipboard)||void 0===i?void 0:i.writeText)&&navigator.clipboard.writeText(o).then((()=>{this.copiedKey=t,clearTimeout(this.copiedTimer),this.copiedTimer=setTimeout((()=>this.copiedKey=""),1500)})).catch((()=>{}))}previewItems(){return this.parsedFiles.filter((e=>{return(function(e){return"done"===e.status&&!u(e)&&!(!e.thumbnail&&!e.url)&&(!!e.thumbnail||h(e))}(i=e)||u(i))&&(u(e)||!this.failedPreviews.has(this.keyFor(e)));var i}))}handlePreviewOpen(e){const i=e.url||e.thumbnail;if(!i)return;this.coPreviewOpen.emit({id:this.keyFor(e),url:i});const o=this.previewItems(),t=o.map((e=>u(e)?{src:_(e),thumbnail:e.thumbnail,alt:e.name,kind:"video",poster:e.thumbnail}:{src:_(e),thumbnail:e.thumbnail,alt:e.name,original:e.url})),r=Math.max(0,o.findIndex((i=>this.keyFor(i)===this.keyFor(e))));this.closeLightbox();const a=document.createElement("co-lightbox");a.images=JSON.stringify(t),a.startIndex=r,this.locale&&(a.locale=this.locale),a.addEventListener("coClose",(()=>this.closeLightbox())),document.body.appendChild(a),this.lightboxEl=a,requestAnimationFrame((()=>{a.open=!0}))}closeLightbox(){const e=this.lightboxEl;this.lightboxEl=void 0,e&&(e.open=!1,setTimeout((()=>e.remove()),220))}handlePreviewError(e){this.failedPreviews=new Set([...this.failedPreviews,this.keyFor(e)])}handleRowDragStart(e,i){this.armedKey===i?(this.dragKey=i,e.dataTransfer&&(e.dataTransfer.effectAllowed="move",e.dataTransfer.setData("text/plain",i))):e.preventDefault()}handleRowDragOver(e,i){this.dragKey&&this.dragKey!==i&&(e.preventDefault(),e.dataTransfer&&(e.dataTransfer.dropEffect="move"),this.overKey=i)}handleRowDrop(e,i){e.preventDefault(),e.stopPropagation();const o=this.parsedFiles.map((e=>this.keyFor(e))),t=o.indexOf(this.dragKey),r=o.indexOf(i);this.resetDragState(),t<0||r<0||t===r||(o.splice(r,0,...o.splice(t,1)),this.coReorder.emit(o))}resetDragState(){this.armedKey="",this.dragKey="",this.overKey=""}capacityHint(e){const i=this.maxBytes?n(this.maxBytes):"";return this.multiple&&this.maxBytes?s(e.helperBoth,{n:this.maxFiles,x:i}):this.multiple?s(e.helperFiles,{n:this.maxFiles}):this.maxBytes?s(e.helperBytes,{x:i}):""}render(){const e=this.strings,i=this.parsedFiles,t=this.localError||this.helperText,a=!(this.readonly||(this.multiple?this.multiple&&i.length>=this.maxFiles:0!==i.length)),s="default"!==this.status?`co-file-field--${this.status}`:"",c=this.previewItems(),l=this.reorderable&&this.multiple&&!this.disabled&&!this.readonly&&i.length>1,d=this.capacityHint(e);return o("div",{key:"ce032373afbb21b082696b4d532655c3d599800c",class:{"co-file-field":!0,"co-file-field--disabled":this.disabled,"co-file-field--invalid":this.isInvalid,[s]:!!s},part:"wrapper"},this.label&&o("div",{key:"7650af04090b50b39e9dde6879156b51fd0a1b11",class:"co-file-field__labels"},o("label",{key:"5f305d56f5dcbe3b8d267e22471f4c6536792510",class:"co-file-field__label",part:"label"},this.label,o(r,{key:"46896eae83028b9117c32b2ab9ac21443a58c608",required:this.required}))),a&&o("div",{key:"c2767c1c6f8e0e928f328db2e985f747f34b13af",class:{"co-file-field__dropzone":!0,"co-file-field__dropzone--drag":this.dragOver},part:"dropzone",role:"button",tabIndex:this.disabled?-1:0,onClick:this.handleBrowse,onKeyDown:e=>{"Enter"!==e.key&&" "!==e.key||this.fromActionsSlot(e)||(e.preventDefault(),this.handleBrowse())},onDragOver:this.handleDragOver,onDragLeave:this.handleDragLeave,onDrop:this.handleDrop},o("button",{key:"f9b2ef43730b009a6ca322ea6cae833f86a52ff0",class:"co-file-field__upload-btn",part:"upload-button",type:"button",tabIndex:-1},o("co-icon",{key:"ffa7d7fdb830fc789ffd4ada624c450c70109701",name:"file-arrow-up",size:18}),o("span",{key:"c9c54dd9432f8c74894a0054ecdf0c59aede974a"},this.uploadButtonText||e.uploadButton)),o("span",{key:"74f8884d62b79960e0080794404f24e45d229284",class:"co-file-field__dropzone-text"},this.dropText||e.dropHint),d&&o("span",{key:"4c6bdd2de90754b50135e9212510884d1495b8d4",class:"co-file-field__dropzone-hint"},d),o("div",{key:"42bd92119fed5b9be39e7db5c351990faafc7135",class:"co-file-field__actions",part:"actions"},o("slot",{key:"fa2a649c222125ba63fa74028dba417c50f7b3f6",name:"actions"})),o("input",{key:"982021a63eb6bec0b19ca917382a6efd37938ab3",ref:e=>this.inputEl=e,class:"co-file-field__input",type:"file",multiple:this.multiple,accept:this.inputAccept,disabled:this.disabled,onChange:this.handleInputChange,"aria-hidden":"true",tabIndex:-1})),i.length>0&&o("div",{key:"95bd1f51b0a361dec2ca0b272212ef64d438db0a",class:"co-file-field__uploaded"},this.multiple&&o("div",{key:"479851cd44dbdc9ad99e9b26764f558845966c53",class:"co-file-field__uploaded-title",part:"uploaded-title"},`${this.uploadedTitle||e.uploadedTitle} (${i.length})`),c.length>0&&o("div",{key:"8be03edd2b1b8b7628d6e34fa82751045589b416",class:"co-file-field__previews",part:"previews"},c.map((i=>{const t=this.keyFor(i),r=u(i),a=this.failedPreviews.has(t)?"":i.thumbnail;return o("button",{class:{"co-file-field__preview":!0,"co-file-field__preview--video":r},part:"preview",type:"button",key:`prev-${t}`,title:i.name,"aria-label":`${r?e.playVideo:e.openPreview}: ${i.name}`,onClick:()=>this.handlePreviewOpen(i)},(!r||!!a)&&o("img",{src:r?a:i.thumbnail||i.url,alt:i.name,loading:"lazy",onError:()=>this.handlePreviewError(i)}),r&&o("span",{class:"co-file-field__preview-play","aria-hidden":"true"},o("span",{class:"co-file-field__preview-play-badge"},o("co-icon",{name:"play",size:20,weight:"fill"})),!a&&o("span",{class:"co-file-field__preview-ext"},f(i).toUpperCase())))}))),o("ul",{key:"1fa661f14a8644a2703204d1faac79e5599c5e77",class:"co-file-field__list",part:"list"},i.map((i=>{const t=this.keyFor(i),r=l&&"done"===i.status;return o("li",{class:{"co-file-field__row":!0,[`co-file-field__row--${i.status}`]:!0,"co-file-field__row--dragging":this.dragKey===t,"co-file-field__row--drop-target":this.overKey===t},part:"row",key:t,draggable:this.armedKey===t,onDragStart:e=>this.handleRowDragStart(e,t),onDragOver:e=>this.handleRowDragOver(e,t),onDrop:e=>this.handleRowDrop(e,t),onDragEnd:this.handleRowDragEnd},r?o("co-tooltip",{content:e.dragToReorder},o("span",{class:"co-file-field__drag-handle",part:"drag-handle",onMouseDown:()=>this.armedKey=t},o("co-icon",{name:"list",size:18}))):o("co-icon",{name:"error"===i.status?"warning-circle":"uploading"===i.status?"spinner-gap":"file",size:18,class:{"co-file-field__row-icon":!0,"co-file-field__row-icon--spin":"uploading"===i.status}}),o("div",{class:"co-file-field__row-body"},o("span",{class:"co-file-field__row-name",title:i.name},function(e,i=35){return!e||e.length<=i?e:`...${e.slice(-i)}`}(i.name)),"uploading"===i.status&&o("div",{class:"co-file-field__progress"},o("div",{class:"co-file-field__progress-bar",style:"number"==typeof i.progress?{width:`${i.progress}%`}:void 0})),"error"===i.status&&i.error&&o("span",{class:"co-file-field__row-error"},i.error)),null!=i.size&&o("span",{class:"co-file-field__row-size"},n(i.size)),this.annotatable&&!this.disabled&&!this.readonly&&function(e){return!("done"!==e.status||!e.url)&&v.has(f(e))}(i)&&o("co-tooltip",{content:e.annotateImage},o("button",{class:"co-file-field__action",type:"button",tabIndex:-1,"aria-label":`${e.annotateImage}: ${i.name}`,onClick:()=>this.coAnnotate.emit({id:t,url:i.url,name:i.name})},o("co-icon",{name:"pencil-simple-line",size:18}))),"done"===i.status&&!!i.url&&o("co-tooltip",{content:e.downloadFile},o("a",{class:"co-file-field__action",href:i.url,target:"_blank",rel:"noopener noreferrer",download:i.name,tabIndex:-1,"aria-label":e.downloadFile,onClick:e=>this.onDownloadClick(e,i)},o("co-icon",{name:"download",size:18}))),"done"===i.status&&!!i.url&&o("co-tooltip",{content:this.copiedKey===t?e.copied:e.copyUrl},o("button",{class:{"co-file-field__action":!0,"co-file-field__action--copied":this.copiedKey===t},type:"button",tabIndex:-1,"aria-label":e.copyUrl,onClick:()=>this.handleCopy(i)},o("co-icon",{name:this.copiedKey===t?"check":"copy",size:18}))),!this.disabled&&!this.readonly&&o("co-tooltip",{content:e.removeFile},o("button",{class:"co-file-field__action",type:"button",tabIndex:-1,"aria-label":e.removeFile,onClick:()=>this.coRemove.emit(t)},o("co-icon",{name:"trash",size:18}))))})))),t&&o("div",{key:"7562fdf435667ae305e677830cae06a3374ef67b",class:{"co-file-field__helper":!0,"co-file-field__helper--error":this.isInvalid},part:"helper"},this.isInvalid&&o("co-icon",{key:"ac43b079725a8b015f2ba1a8b8f22783f60e556e",name:"warning-circle",size:14,class:"co-file-field__helper-icon"}),o("span",{key:"cd256498ce501e5b59ae1a5850f8f8ddccb98580",class:"co-file-field__helper-text"},t)))}get el(){return t(this)}};g.style=":host{display:block;font-family:var(--co-font-family-primary);font-size:var(--co-font-size-14);letter-spacing:var(--co-font-letter-spacing-body);line-height:1}.co-file-field{display:flex;flex-direction:column;gap:var(--co-spacing-sm2)}.co-file-field__labels{display:flex;align-items:center;justify-content:space-between;padding:0 var(--co-spacing-xs)}.co-file-field__label{color:var(--co-semantic-text-secondary);font-size:var(--co-font-size-14);font-weight:400;line-height:1;white-space:nowrap;cursor:default}.co-field-required{margin-left:2px;color:var(--co-semantic-text-error, var(--co-color-status-error))}.co-field-required__caption{margin-left:4px;color:var(--co-semantic-text-muted);font-size:var(--co-font-size-12);font-weight:400}.co-field-required__caption::before{content:var(--co-field-required-text, ' (required)')}.co-file-field__dropzone{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--co-spacing-md);padding:var(--co-spacing-4xl) var(--co-spacing-2xl);background:color-mix(in srgb, var(--co-semantic-surface-hover) 55%, transparent);border:1px dashed var(--co-semantic-border-field);border-radius:var(--co-border-radius-sm);cursor:pointer;text-align:center;transition:border-color var(--co-motion-duration-fast) var(--co-motion-ease-out), background var(--co-motion-duration-fast) var(--co-motion-ease-out)}.co-file-field__dropzone:hover{border-color:var(--co-semantic-border-focus)}.co-file-field__dropzone--drag{border-color:var(--co-semantic-border-focus);background:var(--co-semantic-surface-hover)}.co-file-field__upload-btn{display:inline-flex;align-items:center;gap:var(--co-spacing-sm2);padding:var(--co-spacing-md) var(--co-spacing-xl);margin-bottom:var(--co-spacing-xs);background:var(--co-semantic-surface-secondary);color:var(--co-semantic-text-default);border:none;border-radius:var(--co-border-radius-full);box-shadow:var(--co-shadow-lg);font-family:inherit;font-size:var(--co-font-size-16);font-weight:400;letter-spacing:var(--co-font-letter-spacing-body);line-height:1;cursor:pointer;transition:box-shadow var(--co-motion-duration-fast) var(--co-motion-ease-out), transform var(--co-motion-duration-fast) var(--co-motion-ease-out)}.co-file-field__upload-btn:hover{box-shadow:var(--co-shadow-xl, var(--co-shadow-lg));transform:translateY(-1px)}.co-file-field__upload-btn co-icon{display:inline-flex;flex-shrink:0}.co-file-field__dropzone-text{color:var(--co-semantic-text-default);font-size:var(--co-font-size-18);line-height:1.25}.co-file-field__dropzone-hint{color:var(--co-semantic-text-secondary);font-size:var(--co-font-size-14);line-height:1.25}.co-file-field__actions{display:contents}.co-file-field__input{display:none}.co-file-field__uploaded{display:flex;flex-direction:column;gap:var(--co-spacing-lg);margin-top:var(--co-spacing-sm2)}.co-file-field__uploaded-title{color:var(--co-semantic-text-default);font-size:var(--co-font-size-22);font-weight:500;letter-spacing:-0.03em;line-height:1.25}.co-file-field__previews{display:grid;grid-template-columns:repeat(auto-fill, minmax(150px, 180px));gap:var(--co-spacing-md)}.co-file-field__preview{padding:0;border:none;border-radius:var(--co-border-radius-sm);overflow:hidden;aspect-ratio:3 / 2;background:var(--co-semantic-surface-hover);cursor:pointer}.co-file-field__preview img{display:block;width:100%;height:100%;object-fit:cover;transition:transform var(--co-motion-duration-base) var(--co-motion-ease-out)}.co-file-field__preview:hover img{transform:scale(1.02)}.co-file-field__preview--video{position:relative;background:var(--co-color-base-negro)}.co-file-field__preview-play{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--co-spacing-sm2);color:var(--co-color-base-blanco);pointer-events:none}.co-file-field__preview-play-badge{display:flex;width:40px;height:40px;align-items:center;justify-content:center;border-radius:var(--co-border-radius-full);background:var(--co-color-opacity-negro-80);box-shadow:inset 0 0 0 1px var(--co-color-opacity-blanco-25);transition:transform var(--co-motion-duration-base) var(--co-motion-ease-out)}.co-file-field__preview--video:hover .co-file-field__preview-play-badge{transform:scale(1.08)}.co-file-field__preview-play-badge co-icon{transform:translateX(1px)}.co-file-field__preview-ext{font-family:var(--co-font-family-primary);font-size:var(--co-font-size-12);font-weight:var(--co-font-weight-medium);letter-spacing:var(--co-font-letter-spacing-overline);color:var(--co-color-opacity-blanco-80)}.co-file-field__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--co-spacing-sm2)}.co-file-field__row{display:flex;align-items:center;gap:var(--co-spacing-lg);padding:var(--co-spacing-xl);background:var(--co-semantic-surface-hover);border:1px solid transparent;border-radius:var(--co-border-radius-sm)}.co-file-field__row--error{border-color:var(--co-semantic-border-error, var(--co-semantic-status-error))}.co-file-field__row--dragging{opacity:0.5}.co-file-field__row--drop-target{border-color:var(--co-semantic-border-focus);background:var(--co-semantic-surface-hover)}.co-file-field__drag-handle{flex-shrink:0;display:flex;align-items:center;color:var(--co-semantic-text-secondary);cursor:grab}.co-file-field__drag-handle:active{cursor:grabbing}.co-file-field__row-icon{flex-shrink:0;color:var(--co-semantic-text-secondary);display:flex;align-items:center}.co-file-field__row--error .co-file-field__row-icon{color:var(--co-semantic-text-error, var(--co-semantic-status-error))}.co-file-field__row-icon--spin{animation:co-file-spin 0.8s linear infinite}@keyframes co-file-spin{to{transform:rotate(360deg)}}.co-file-field__row-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:var(--co-spacing-xs)}.co-file-field__row-name{color:var(--co-semantic-text-default);font-size:var(--co-font-size-14);line-height:1.25;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.co-file-field__row-error{color:var(--co-semantic-text-error, var(--co-semantic-status-error));font-size:var(--co-font-size-12)}.co-file-field__row-size{flex-shrink:0;color:var(--co-semantic-text-default);font-size:var(--co-font-size-14);line-height:1;white-space:nowrap}.co-file-field__progress{position:relative;height:4px;border-radius:var(--co-border-radius-full);background:var(--co-semantic-surface-hover);overflow:hidden}.co-file-field__progress-bar{position:absolute;inset:0;width:40%;border-radius:var(--co-border-radius-full);background:var(--co-semantic-status-info);transition:width var(--co-motion-duration-base) var(--co-motion-ease-out)}.co-file-field__progress-bar:not([style]){animation:co-file-indeterminate 1.2s ease-in-out infinite}@keyframes co-file-indeterminate{0%{left:-40%}100%{left:100%}}.co-file-field__action{flex-shrink:0;display:flex;align-items:center;justify-content:center;padding:0;border:none;background:transparent;cursor:pointer;text-decoration:none;color:var(--co-semantic-text-secondary);transition:color var(--co-motion-duration-fast) var(--co-motion-ease-out)}.co-file-field__action:hover{color:var(--co-semantic-text-default)}.co-file-field__action--copied,.co-file-field__action--copied:hover{color:var(--co-color-primary-verde)}.co-file-field__helper{display:flex;align-items:center;gap:var(--co-spacing-xs);padding:0 var(--co-spacing-xs)}.co-file-field__helper-icon{flex-shrink:0;color:var(--co-semantic-text-muted);display:flex;align-items:center}.co-file-field__helper-text{color:var(--co-semantic-text-muted);font-size:var(--co-font-size-14);line-height:1}.co-file-field--disabled{opacity:0.6;pointer-events:none}.co-file-field--invalid .co-file-field__dropzone,.co-file-field--error .co-file-field__dropzone{border-color:var(--co-semantic-border-error, var(--co-semantic-status-error))}.co-file-field__helper--error .co-file-field__helper-icon,.co-file-field__helper--error .co-file-field__helper-text{color:var(--co-semantic-text-error, var(--co-semantic-status-error))}:host([layout='horizontal']) .co-file-field{display:grid;grid-template-columns:var(--co-field-label-width, max-content) 1fr;align-items:start;column-gap:var(--co-spacing-md);row-gap:var(--co-spacing-sm2)}:host([layout='horizontal']) .co-file-field__labels{grid-column:1;grid-row:1;padding-top:var(--co-spacing-sm2);min-width:0}:host([layout='horizontal']) .co-file-field__label{white-space:normal}:host([layout='horizontal']) .co-file-field>:not(.co-file-field__labels){grid-column:2;min-width:0}@supports not (background: color-mix(in srgb, red, transparent)){.co-file-field__dropzone{background:var(--co-semantic-surface-hover)}}";export{g as co_file_field}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e={es:{uploadButton:"Cargar archivo",dropHint:"Arrastra y suelta archivos aquí",helperBoth:"Puedes subir hasta {n} archivos, cada uno hasta {x}",helperFiles:"Puedes subir hasta {n} archivos",helperBytes:"Cada archivo hasta {x}",uploadedTitle:"Archivos subidos",removeFile:"Eliminar archivo",copyUrl:"Copiar enlace",downloadFile:"Descargar",annotateImage:"Anotar imagen",copied:"Copiado",dragToReorder:"Arrastra para reordenar",openPreview:"Abrir vista previa",playVideo:"Reproducir video",errInvalidFormat:"Formato no permitido: .{x}",errTooLarge:"Archivo demasiado grande: {x}",errMaxFiles:"Puedes subir hasta {n} archivos"},en:{uploadButton:"Upload file",dropHint:"Drag and drop files here",helperBoth:"You can upload up to {n} files, each up to {x}",helperFiles:"You can upload up to {n} files",helperBytes:"Each file up to {x}",uploadedTitle:"Uploaded files",removeFile:"Remove file",copyUrl:"Copy link",downloadFile:"Download",annotateImage:"Annotate image",copied:"Copied",dragToReorder:"Drag to reorder",openPreview:"Open preview",playVideo:"Play video",errInvalidFormat:"Invalid format: .{x}",errTooLarge:"File too large: {x}",errMaxFiles:"You can upload up to {n} files"},pt:{uploadButton:"Carregar arquivo",dropHint:"Arraste e solte arquivos aqui",helperBoth:"Você pode enviar até {n} arquivos, cada um até {x}",helperFiles:"Você pode enviar até {n} arquivos",helperBytes:"Cada arquivo até {x}",uploadedTitle:"Arquivos enviados",removeFile:"Remover arquivo",copyUrl:"Copiar link",downloadFile:"Baixar",annotateImage:"Anotar imagem",copied:"Copiado",dragToReorder:"Arraste para reordenar",openPreview:"Abrir pré-visualização",playVideo:"Reproduzir vídeo",errInvalidFormat:"Formato inválido: .{x}",errTooLarge:"Arquivo muito grande: {x}",errMaxFiles:"Você pode enviar até {n} arquivos"}};function a(e){const a=(e||"").toLowerCase();return a.startsWith("es")?"es":a.startsWith("pt")?"pt":"en"}function r(r){return e[a(r)]}function o(e,a){var r,o;return e.replace("{n}",String(null!==(r=a.n)&&void 0!==r?r:"")).replace("{x}",null!==(o=a.x)&&void 0!==o?o:"")}export{o as f,r as g,a as l}
|
|
@@ -431,7 +431,7 @@ export class CoAutocomplete {
|
|
|
431
431
|
"references": {
|
|
432
432
|
"AutocompleteOption": {
|
|
433
433
|
"location": "local",
|
|
434
|
-
"path": "/Users/agox/
|
|
434
|
+
"path": "/Users/agox/Documents/Prolibu/prolibu-cobalt/packages/core/src/components/co-autocomplete/co-autocomplete.tsx",
|
|
435
435
|
"id": "src/components/co-autocomplete/co-autocomplete.tsx::AutocompleteOption"
|
|
436
436
|
}
|
|
437
437
|
}
|
|
@@ -92,7 +92,7 @@ export class CoAvatarGroup {
|
|
|
92
92
|
"references": {
|
|
93
93
|
"CoAvatarGroupItem": {
|
|
94
94
|
"location": "local",
|
|
95
|
-
"path": "/Users/agox/
|
|
95
|
+
"path": "/Users/agox/Documents/Prolibu/prolibu-cobalt/packages/core/src/components/co-avatar-group/co-avatar-group.tsx",
|
|
96
96
|
"id": "src/components/co-avatar-group/co-avatar-group.tsx::CoAvatarGroupItem"
|
|
97
97
|
}
|
|
98
98
|
}
|
|
@@ -236,7 +236,7 @@ export class CoCheckboxGroup {
|
|
|
236
236
|
"references": {
|
|
237
237
|
"CheckboxOption": {
|
|
238
238
|
"location": "local",
|
|
239
|
-
"path": "/Users/agox/
|
|
239
|
+
"path": "/Users/agox/Documents/Prolibu/prolibu-cobalt/packages/core/src/components/co-checkbox-group/co-checkbox-group.tsx",
|
|
240
240
|
"id": "src/components/co-checkbox-group/co-checkbox-group.tsx::CheckboxOption"
|
|
241
241
|
}
|
|
242
242
|
}
|
|
@@ -310,7 +310,7 @@ export class CoColorArea {
|
|
|
310
310
|
"references": {
|
|
311
311
|
"ColorAreaDetail": {
|
|
312
312
|
"location": "local",
|
|
313
|
-
"path": "/Users/agox/
|
|
313
|
+
"path": "/Users/agox/Documents/Prolibu/prolibu-cobalt/packages/core/src/components/co-color-area/co-color-area.tsx",
|
|
314
314
|
"id": "src/components/co-color-area/co-color-area.tsx::ColorAreaDetail"
|
|
315
315
|
}
|
|
316
316
|
}
|
|
@@ -331,7 +331,7 @@ export class CoColorArea {
|
|
|
331
331
|
"references": {
|
|
332
332
|
"ColorAreaDetail": {
|
|
333
333
|
"location": "local",
|
|
334
|
-
"path": "/Users/agox/
|
|
334
|
+
"path": "/Users/agox/Documents/Prolibu/prolibu-cobalt/packages/core/src/components/co-color-area/co-color-area.tsx",
|
|
335
335
|
"id": "src/components/co-color-area/co-color-area.tsx::ColorAreaDetail"
|
|
336
336
|
}
|
|
337
337
|
}
|
|
@@ -215,7 +215,7 @@ export class CoColorSlider {
|
|
|
215
215
|
"references": {
|
|
216
216
|
"ColorSliderChannel": {
|
|
217
217
|
"location": "local",
|
|
218
|
-
"path": "/Users/agox/
|
|
218
|
+
"path": "/Users/agox/Documents/Prolibu/prolibu-cobalt/packages/core/src/components/co-color-slider/co-color-slider.tsx",
|
|
219
219
|
"id": "src/components/co-color-slider/co-color-slider.tsx::ColorSliderChannel"
|
|
220
220
|
}
|
|
221
221
|
}
|
|
@@ -547,7 +547,7 @@ export class CoCombobox {
|
|
|
547
547
|
"references": {
|
|
548
548
|
"ComboboxOption": {
|
|
549
549
|
"location": "local",
|
|
550
|
-
"path": "/Users/agox/
|
|
550
|
+
"path": "/Users/agox/Documents/Prolibu/prolibu-cobalt/packages/core/src/components/co-combobox/co-combobox.tsx",
|
|
551
551
|
"id": "src/components/co-combobox/co-combobox.tsx::ComboboxOption"
|
|
552
552
|
}
|
|
553
553
|
}
|
|
@@ -257,7 +257,7 @@ export class CoCommandSearch {
|
|
|
257
257
|
"references": {
|
|
258
258
|
"CommandItem": {
|
|
259
259
|
"location": "local",
|
|
260
|
-
"path": "/Users/agox/
|
|
260
|
+
"path": "/Users/agox/Documents/Prolibu/prolibu-cobalt/packages/core/src/components/co-command-search/co-command-search.tsx",
|
|
261
261
|
"id": "src/components/co-command-search/co-command-search.tsx::CommandItem"
|
|
262
262
|
}
|
|
263
263
|
}
|
|
@@ -509,7 +509,7 @@ export class CoDataTable {
|
|
|
509
509
|
"references": {
|
|
510
510
|
"CoDataTableColumn": {
|
|
511
511
|
"location": "local",
|
|
512
|
-
"path": "/Users/agox/
|
|
512
|
+
"path": "/Users/agox/Documents/Prolibu/prolibu-cobalt/packages/core/src/components/co-data-table/co-data-table.tsx",
|
|
513
513
|
"id": "src/components/co-data-table/co-data-table.tsx::CoDataTableColumn"
|
|
514
514
|
}
|
|
515
515
|
}
|
|
@@ -1055,7 +1055,7 @@ export class CoDateRangePicker {
|
|
|
1055
1055
|
"references": {
|
|
1056
1056
|
"DateRangeValue": {
|
|
1057
1057
|
"location": "local",
|
|
1058
|
-
"path": "/Users/agox/
|
|
1058
|
+
"path": "/Users/agox/Documents/Prolibu/prolibu-cobalt/packages/core/src/components/co-date-range-picker/co-date-range-picker.tsx",
|
|
1059
1059
|
"id": "src/components/co-date-range-picker/co-date-range-picker.tsx::DateRangeValue"
|
|
1060
1060
|
}
|
|
1061
1061
|
}
|
|
@@ -1076,7 +1076,7 @@ export class CoDateRangePicker {
|
|
|
1076
1076
|
"references": {
|
|
1077
1077
|
"DateRangeValue": {
|
|
1078
1078
|
"location": "local",
|
|
1079
|
-
"path": "/Users/agox/
|
|
1079
|
+
"path": "/Users/agox/Documents/Prolibu/prolibu-cobalt/packages/core/src/components/co-date-range-picker/co-date-range-picker.tsx",
|
|
1080
1080
|
"id": "src/components/co-date-range-picker/co-date-range-picker.tsx::DateRangeValue"
|
|
1081
1081
|
}
|
|
1082
1082
|
}
|
|
@@ -1016,7 +1016,7 @@ export class CoDocumentEditor {
|
|
|
1016
1016
|
"references": {
|
|
1017
1017
|
"DocumentPageSize": {
|
|
1018
1018
|
"location": "local",
|
|
1019
|
-
"path": "/Users/agox/
|
|
1019
|
+
"path": "/Users/agox/Documents/Prolibu/prolibu-cobalt/packages/core/src/components/co-document-editor/co-document-editor.tsx",
|
|
1020
1020
|
"id": "src/components/co-document-editor/co-document-editor.tsx::DocumentPageSize"
|
|
1021
1021
|
}
|
|
1022
1022
|
}
|
|
@@ -1042,7 +1042,7 @@ export class CoDocumentEditor {
|
|
|
1042
1042
|
"references": {
|
|
1043
1043
|
"DocumentMargins": {
|
|
1044
1044
|
"location": "local",
|
|
1045
|
-
"path": "/Users/agox/
|
|
1045
|
+
"path": "/Users/agox/Documents/Prolibu/prolibu-cobalt/packages/core/src/components/co-document-editor/co-document-editor.tsx",
|
|
1046
1046
|
"id": "src/components/co-document-editor/co-document-editor.tsx::DocumentMargins"
|
|
1047
1047
|
}
|
|
1048
1048
|
}
|
|
@@ -1107,7 +1107,7 @@ export class CoDocumentEditor {
|
|
|
1107
1107
|
"references": {
|
|
1108
1108
|
"DocumentFeatures": {
|
|
1109
1109
|
"location": "local",
|
|
1110
|
-
"path": "/Users/agox/
|
|
1110
|
+
"path": "/Users/agox/Documents/Prolibu/prolibu-cobalt/packages/core/src/components/co-document-editor/co-document-editor.tsx",
|
|
1111
1111
|
"id": "src/components/co-document-editor/co-document-editor.tsx::DocumentFeatures"
|
|
1112
1112
|
}
|
|
1113
1113
|
}
|
|
@@ -1301,7 +1301,7 @@ export class CoDocumentEditor {
|
|
|
1301
1301
|
"references": {
|
|
1302
1302
|
"DocumentHeaderDetail": {
|
|
1303
1303
|
"location": "local",
|
|
1304
|
-
"path": "/Users/agox/
|
|
1304
|
+
"path": "/Users/agox/Documents/Prolibu/prolibu-cobalt/packages/core/src/components/co-document-editor/co-document-editor.tsx",
|
|
1305
1305
|
"id": "src/components/co-document-editor/co-document-editor.tsx::DocumentHeaderDetail"
|
|
1306
1306
|
}
|
|
1307
1307
|
}
|
|
@@ -1337,7 +1337,7 @@ export class CoDocumentEditor {
|
|
|
1337
1337
|
"references": {
|
|
1338
1338
|
"DocumentActionDetail": {
|
|
1339
1339
|
"location": "local",
|
|
1340
|
-
"path": "/Users/agox/
|
|
1340
|
+
"path": "/Users/agox/Documents/Prolibu/prolibu-cobalt/packages/core/src/components/co-document-editor/co-document-editor.tsx",
|
|
1341
1341
|
"id": "src/components/co-document-editor/co-document-editor.tsx::DocumentActionDetail"
|
|
1342
1342
|
}
|
|
1343
1343
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { h } from "@stencil/core";
|
|
2
2
|
import { RequiredMark } from "../../utils/requiredMark";
|
|
3
3
|
import { fillTemplate, getFileStrings } from "../../utils/fileI18n";
|
|
4
|
-
import { acceptsFile, downloadViaBlob, fileExtension, formatBytes, isPreviewable, isVideo, previewSrc, truncateLeft, } from "./co-file-field.utils";
|
|
4
|
+
import { acceptsFile, downloadViaBlob, fileExtension, formatBytes, isAnnotatable, isPreviewable, isVideo, previewSrc, truncateLeft, } from "./co-file-field.utils";
|
|
5
5
|
/**
|
|
6
6
|
* Host-driven file selector — renders a drop-zone + previews + a file list with
|
|
7
7
|
* upload progress, but performs NO upload itself. When the user picks/drops
|
|
@@ -45,6 +45,13 @@ export class CoFileField {
|
|
|
45
45
|
this.layout = 'vertical';
|
|
46
46
|
/** Allow drag-reordering of the uploaded list (multiple mode). */
|
|
47
47
|
this.reorderable = true;
|
|
48
|
+
/**
|
|
49
|
+
* Offer an "annotate" action on stored raster images (png/jpg/webp). The
|
|
50
|
+
* field draws nothing itself: it emits `coAnnotate` and the host opens its
|
|
51
|
+
* editor, uploads the result and removes the original — same contract as
|
|
52
|
+
* uploads (the WC emits intent, the host does the I/O).
|
|
53
|
+
*/
|
|
54
|
+
this.annotatable = false;
|
|
48
55
|
/** Controlled file list, JSON array of {@link FileItem} (owned by the host). */
|
|
49
56
|
this.files = '[]';
|
|
50
57
|
this.dragOver = false;
|
|
@@ -377,12 +384,12 @@ export class CoFileField {
|
|
|
377
384
|
const previews = this.previewItems();
|
|
378
385
|
const canReorder = this.reorderable && this.multiple && !this.disabled && !this.readonly && items.length > 1;
|
|
379
386
|
const capacity = this.capacityHint(s);
|
|
380
|
-
return (h("div", { key: '
|
|
387
|
+
return (h("div", { key: 'ce032373afbb21b082696b4d532655c3d599800c', class: {
|
|
381
388
|
'co-file-field': true,
|
|
382
389
|
'co-file-field--disabled': this.disabled,
|
|
383
390
|
'co-file-field--invalid': this.isInvalid,
|
|
384
391
|
[statusClass]: !!statusClass,
|
|
385
|
-
}, part: "wrapper" }, this.label && (h("div", { key: '
|
|
392
|
+
}, part: "wrapper" }, this.label && (h("div", { key: '7650af04090b50b39e9dde6879156b51fd0a1b11', class: "co-file-field__labels" }, h("label", { key: '5f305d56f5dcbe3b8d267e22471f4c6536792510', class: "co-file-field__label", part: "label" }, this.label, h(RequiredMark, { key: '46896eae83028b9117c32b2ab9ac21443a58c608', required: this.required })))), showDropzone && (h("div", { key: 'c2767c1c6f8e0e928f328db2e985f747f34b13af', class: {
|
|
386
393
|
'co-file-field__dropzone': true,
|
|
387
394
|
'co-file-field__dropzone--drag': this.dragOver,
|
|
388
395
|
}, part: "dropzone", role: "button", tabIndex: this.disabled ? -1 : 0, onClick: this.handleBrowse, onKeyDown: (e) => {
|
|
@@ -390,7 +397,7 @@ export class CoFileField {
|
|
|
390
397
|
e.preventDefault();
|
|
391
398
|
this.handleBrowse();
|
|
392
399
|
}
|
|
393
|
-
}, onDragOver: this.handleDragOver, onDragLeave: this.handleDragLeave, onDrop: this.handleDrop }, h("button", { key: '
|
|
400
|
+
}, onDragOver: this.handleDragOver, onDragLeave: this.handleDragLeave, onDrop: this.handleDrop }, h("button", { key: 'f9b2ef43730b009a6ca322ea6cae833f86a52ff0', class: "co-file-field__upload-btn", part: "upload-button", type: "button", tabIndex: -1 }, h("co-icon", { key: 'ffa7d7fdb830fc789ffd4ada624c450c70109701', name: "file-arrow-up", size: 18 }), h("span", { key: 'c9c54dd9432f8c74894a0054ecdf0c59aede974a' }, this.uploadButtonText || s.uploadButton)), h("span", { key: '74f8884d62b79960e0080794404f24e45d229284', class: "co-file-field__dropzone-text" }, this.dropText || s.dropHint), capacity && h("span", { key: '4c6bdd2de90754b50135e9212510884d1495b8d4', class: "co-file-field__dropzone-hint" }, capacity), h("div", { key: '42bd92119fed5b9be39e7db5c351990faafc7135', class: "co-file-field__actions", part: "actions" }, h("slot", { key: 'fa2a649c222125ba63fa74028dba417c50f7b3f6', name: "actions" })), h("input", { key: '982021a63eb6bec0b19ca917382a6efd37938ab3', ref: (el) => (this.inputEl = el), class: "co-file-field__input", type: "file", multiple: this.multiple, accept: this.inputAccept, disabled: this.disabled, onChange: this.handleInputChange, "aria-hidden": "true", tabIndex: -1 }))), items.length > 0 && (h("div", { key: '95bd1f51b0a361dec2ca0b272212ef64d438db0a', class: "co-file-field__uploaded" }, this.multiple && (h("div", { key: '479851cd44dbdc9ad99e9b26764f558845966c53', class: "co-file-field__uploaded-title", part: "uploaded-title" }, `${this.uploadedTitle || s.uploadedTitle} (${items.length})`)), previews.length > 0 && (h("div", { key: '8be03edd2b1b8b7628d6e34fa82751045589b416', class: "co-file-field__previews", part: "previews" }, previews.map((item) => {
|
|
394
401
|
const key = this.keyFor(item);
|
|
395
402
|
const video = isVideo(item);
|
|
396
403
|
// A video without a usable poster still gets a card — the
|
|
@@ -401,7 +408,7 @@ export class CoFileField {
|
|
|
401
408
|
'co-file-field__preview': true,
|
|
402
409
|
'co-file-field__preview--video': video,
|
|
403
410
|
}, part: "preview", type: "button", key: `prev-${key}`, title: item.name, "aria-label": `${video ? s.playVideo : s.openPreview}: ${item.name}`, onClick: () => this.handlePreviewOpen(item) }, showImg && (h("img", { src: video ? poster : item.thumbnail || item.url, alt: item.name, loading: "lazy", onError: () => this.handlePreviewError(item) })), video && (h("span", { class: "co-file-field__preview-play", "aria-hidden": "true" }, h("span", { class: "co-file-field__preview-play-badge" }, h("co-icon", { name: "play", size: 20, weight: "fill" })), !poster && (h("span", { class: "co-file-field__preview-ext" }, fileExtension(item).toUpperCase()))))));
|
|
404
|
-
}))), h("ul", { key: '
|
|
411
|
+
}))), h("ul", { key: '1fa661f14a8644a2703204d1faac79e5599c5e77', class: "co-file-field__list", part: "list" }, items.map((item) => {
|
|
405
412
|
const key = this.keyFor(item);
|
|
406
413
|
const draggable = canReorder && item.status === 'done';
|
|
407
414
|
return (h("li", { class: {
|
|
@@ -421,14 +428,14 @@ export class CoFileField {
|
|
|
421
428
|
'co-file-field__row-icon--spin': item.status === 'uploading',
|
|
422
429
|
} })), h("div", { class: "co-file-field__row-body" }, h("span", { class: "co-file-field__row-name", title: item.name }, truncateLeft(item.name)), item.status === 'uploading' && (h("div", { class: "co-file-field__progress" }, h("div", { class: "co-file-field__progress-bar", style: typeof item.progress === 'number'
|
|
423
430
|
? { width: `${item.progress}%` }
|
|
424
|
-
: undefined }))), item.status === 'error' && item.error && (h("span", { class: "co-file-field__row-error" }, item.error))), item.size != null && (h("span", { class: "co-file-field__row-size" }, formatBytes(item.size))), item.status === 'done' && !!item.url && (h("co-tooltip", { content: s.downloadFile }, h("a", { class: "co-file-field__action", href: item.url, target: "_blank", rel: "noopener noreferrer", download: item.name, tabIndex: -1, "aria-label": s.downloadFile, onClick: (e) => this.onDownloadClick(e, item) }, h("co-icon", { name: "download", size: 18 })))), item.status === 'done' && !!item.url && (h("co-tooltip", { content: this.copiedKey === key ? s.copied : s.copyUrl }, h("button", { class: {
|
|
431
|
+
: undefined }))), item.status === 'error' && item.error && (h("span", { class: "co-file-field__row-error" }, item.error))), item.size != null && (h("span", { class: "co-file-field__row-size" }, formatBytes(item.size))), this.annotatable && !this.disabled && !this.readonly && isAnnotatable(item) && (h("co-tooltip", { content: s.annotateImage }, h("button", { class: "co-file-field__action", type: "button", tabIndex: -1, "aria-label": `${s.annotateImage}: ${item.name}`, onClick: () => this.coAnnotate.emit({ id: key, url: item.url, name: item.name }) }, h("co-icon", { name: "pencil-simple-line", size: 18 })))), item.status === 'done' && !!item.url && (h("co-tooltip", { content: s.downloadFile }, h("a", { class: "co-file-field__action", href: item.url, target: "_blank", rel: "noopener noreferrer", download: item.name, tabIndex: -1, "aria-label": s.downloadFile, onClick: (e) => this.onDownloadClick(e, item) }, h("co-icon", { name: "download", size: 18 })))), item.status === 'done' && !!item.url && (h("co-tooltip", { content: this.copiedKey === key ? s.copied : s.copyUrl }, h("button", { class: {
|
|
425
432
|
'co-file-field__action': true,
|
|
426
433
|
'co-file-field__action--copied': this.copiedKey === key,
|
|
427
434
|
}, type: "button", tabIndex: -1, "aria-label": s.copyUrl, onClick: () => this.handleCopy(item) }, h("co-icon", { name: this.copiedKey === key ? 'check' : 'copy', size: 18 })))), !this.disabled && !this.readonly && (h("co-tooltip", { content: s.removeFile }, h("button", { class: "co-file-field__action", type: "button", tabIndex: -1, "aria-label": s.removeFile, onClick: () => this.coRemove.emit(key) }, h("co-icon", { name: "trash", size: 18 }))))));
|
|
428
|
-
})))), helper && (h("div", { key: '
|
|
435
|
+
})))), helper && (h("div", { key: '7562fdf435667ae305e677830cae06a3374ef67b', class: {
|
|
429
436
|
'co-file-field__helper': true,
|
|
430
437
|
'co-file-field__helper--error': this.isInvalid,
|
|
431
|
-
}, part: "helper" }, this.isInvalid && (h("co-icon", { key: '
|
|
438
|
+
}, part: "helper" }, this.isInvalid && (h("co-icon", { key: 'ac43b079725a8b015f2ba1a8b8f22783f60e556e', name: "warning-circle", size: 14, class: "co-file-field__helper-icon" })), h("span", { key: 'cd256498ce501e5b59ae1a5850f8f8ddccb98580', class: "co-file-field__helper-text" }, helper)))));
|
|
432
439
|
}
|
|
433
440
|
static get is() { return "co-file-field"; }
|
|
434
441
|
static get encapsulation() { return "shadow"; }
|
|
@@ -756,6 +763,26 @@ export class CoFileField {
|
|
|
756
763
|
"attribute": "reorderable",
|
|
757
764
|
"defaultValue": "true"
|
|
758
765
|
},
|
|
766
|
+
"annotatable": {
|
|
767
|
+
"type": "boolean",
|
|
768
|
+
"mutable": false,
|
|
769
|
+
"complexType": {
|
|
770
|
+
"original": "boolean",
|
|
771
|
+
"resolved": "boolean",
|
|
772
|
+
"references": {}
|
|
773
|
+
},
|
|
774
|
+
"required": false,
|
|
775
|
+
"optional": false,
|
|
776
|
+
"docs": {
|
|
777
|
+
"tags": [],
|
|
778
|
+
"text": "Offer an \"annotate\" action on stored raster images (png/jpg/webp). The\nfield draws nothing itself: it emits `coAnnotate` and the host opens its\neditor, uploads the result and removes the original \u2014 same contract as\nuploads (the WC emits intent, the host does the I/O)."
|
|
779
|
+
},
|
|
780
|
+
"getter": false,
|
|
781
|
+
"setter": false,
|
|
782
|
+
"reflect": false,
|
|
783
|
+
"attribute": "annotatable",
|
|
784
|
+
"defaultValue": "false"
|
|
785
|
+
},
|
|
759
786
|
"files": {
|
|
760
787
|
"type": "string",
|
|
761
788
|
"mutable": false,
|
|
@@ -870,6 +897,21 @@ export class CoFileField {
|
|
|
870
897
|
"resolved": "{ id: string; url: string; }",
|
|
871
898
|
"references": {}
|
|
872
899
|
}
|
|
900
|
+
}, {
|
|
901
|
+
"method": "coAnnotate",
|
|
902
|
+
"name": "coAnnotate",
|
|
903
|
+
"bubbles": false,
|
|
904
|
+
"cancelable": true,
|
|
905
|
+
"composed": true,
|
|
906
|
+
"docs": {
|
|
907
|
+
"tags": [],
|
|
908
|
+
"text": "Emitted when the user asks to annotate a stored image (see `annotatable`)."
|
|
909
|
+
},
|
|
910
|
+
"complexType": {
|
|
911
|
+
"original": "{ id: string; url: string; name: string }",
|
|
912
|
+
"resolved": "{ id: string; url: string; name: string; }",
|
|
913
|
+
"references": {}
|
|
914
|
+
}
|
|
873
915
|
}, {
|
|
874
916
|
"method": "coPreviewOpen",
|
|
875
917
|
"name": "coPreviewOpen",
|
|
@@ -77,6 +77,20 @@ export function isImage(item) {
|
|
|
77
77
|
return true;
|
|
78
78
|
return hasImageExtension(item);
|
|
79
79
|
}
|
|
80
|
+
/** Raster formats a host can redraw on a canvas and export again without loss of
|
|
81
|
+
* meaning. GIF (animation), SVG (vector) and the rest stay out: flattening them
|
|
82
|
+
* to a bitmap would silently change the file. */
|
|
83
|
+
const ANNOTATABLE_EXTS = new Set(['png', 'jpg', 'jpeg', 'webp']);
|
|
84
|
+
/**
|
|
85
|
+
* A stored raster image the host can annotate (draw on and re-upload). Needs the
|
|
86
|
+
* ORIGINAL `url` — a thumbnail is a downscaled copy, and a PDF that entered the
|
|
87
|
+
* grid through its thumbnail is not an image at all.
|
|
88
|
+
*/
|
|
89
|
+
export function isAnnotatable(item) {
|
|
90
|
+
if (item.status !== 'done' || !item.url)
|
|
91
|
+
return false;
|
|
92
|
+
return ANNOTATABLE_EXTS.has(fileExtension(item));
|
|
93
|
+
}
|
|
80
94
|
/** Items that earn a card in the previews grid: images and videos alike. */
|
|
81
95
|
export function isPreviewable(item) {
|
|
82
96
|
return isImage(item) || isVideo(item);
|
|
@@ -3,6 +3,9 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* @prop --co-popover-border-color: Color del borde del panel (default border-subtle).
|
|
5
5
|
* @prop --co-popover-shadow: Sombra del panel (default `0 4px 16px` suave).
|
|
6
|
+
* @prop --co-popover-min-width: Ancho mínimo del panel (default 0). Con `match-width`
|
|
7
|
+
* el panel mide lo que el trigger; este piso lo deja crecer cuando el trigger es
|
|
8
|
+
* angosto y sus opciones no entran (min-width gana sobre el `width` inline).
|
|
6
9
|
*/
|
|
7
10
|
|
|
8
11
|
:host {
|
|
@@ -38,6 +41,7 @@
|
|
|
38
41
|
margin: 0;
|
|
39
42
|
padding: 0;
|
|
40
43
|
width: auto;
|
|
44
|
+
min-width: var(--co-popover-min-width, 0);
|
|
41
45
|
height: auto;
|
|
42
46
|
max-width: none;
|
|
43
47
|
max-height: none;
|
|
@@ -476,7 +476,7 @@ export class CoPopover {
|
|
|
476
476
|
"references": {
|
|
477
477
|
"PopoverPlacement": {
|
|
478
478
|
"location": "local",
|
|
479
|
-
"path": "/Users/agox/
|
|
479
|
+
"path": "/Users/agox/Documents/Prolibu/prolibu-cobalt/packages/core/src/components/co-popover/co-popover.tsx",
|
|
480
480
|
"id": "src/components/co-popover/co-popover.tsx::PopoverPlacement"
|
|
481
481
|
}
|
|
482
482
|
}
|
|
@@ -224,7 +224,7 @@ export class CoRadioGroup {
|
|
|
224
224
|
"references": {
|
|
225
225
|
"RadioOption": {
|
|
226
226
|
"location": "local",
|
|
227
|
-
"path": "/Users/agox/
|
|
227
|
+
"path": "/Users/agox/Documents/Prolibu/prolibu-cobalt/packages/core/src/components/co-radio-group/co-radio-group.tsx",
|
|
228
228
|
"id": "src/components/co-radio-group/co-radio-group.tsx::RadioOption"
|
|
229
229
|
}
|
|
230
230
|
}
|
|
@@ -1356,7 +1356,7 @@ export class CoRefField {
|
|
|
1356
1356
|
"references": {
|
|
1357
1357
|
"RefFieldOption": {
|
|
1358
1358
|
"location": "local",
|
|
1359
|
-
"path": "/Users/agox/
|
|
1359
|
+
"path": "/Users/agox/Documents/Prolibu/prolibu-cobalt/packages/core/src/components/co-ref-field/co-ref-field.tsx",
|
|
1360
1360
|
"id": "src/components/co-ref-field/co-ref-field.tsx::RefFieldOption"
|
|
1361
1361
|
}
|
|
1362
1362
|
}
|
|
@@ -1497,7 +1497,7 @@ export class CoRefField {
|
|
|
1497
1497
|
"references": {
|
|
1498
1498
|
"RefFieldOption": {
|
|
1499
1499
|
"location": "local",
|
|
1500
|
-
"path": "/Users/agox/
|
|
1500
|
+
"path": "/Users/agox/Documents/Prolibu/prolibu-cobalt/packages/core/src/components/co-ref-field/co-ref-field.tsx",
|
|
1501
1501
|
"id": "src/components/co-ref-field/co-ref-field.tsx::RefFieldOption"
|
|
1502
1502
|
}
|
|
1503
1503
|
}
|
|
@@ -1518,7 +1518,7 @@ export class CoRefField {
|
|
|
1518
1518
|
"references": {
|
|
1519
1519
|
"RefFieldOption": {
|
|
1520
1520
|
"location": "local",
|
|
1521
|
-
"path": "/Users/agox/
|
|
1521
|
+
"path": "/Users/agox/Documents/Prolibu/prolibu-cobalt/packages/core/src/components/co-ref-field/co-ref-field.tsx",
|
|
1522
1522
|
"id": "src/components/co-ref-field/co-ref-field.tsx::RefFieldOption"
|
|
1523
1523
|
}
|
|
1524
1524
|
}
|
|
@@ -1557,7 +1557,7 @@ export class CoRefField {
|
|
|
1557
1557
|
},
|
|
1558
1558
|
"RefFieldOption": {
|
|
1559
1559
|
"location": "local",
|
|
1560
|
-
"path": "/Users/agox/
|
|
1560
|
+
"path": "/Users/agox/Documents/Prolibu/prolibu-cobalt/packages/core/src/components/co-ref-field/co-ref-field.tsx",
|
|
1561
1561
|
"id": "src/components/co-ref-field/co-ref-field.tsx::RefFieldOption"
|
|
1562
1562
|
}
|
|
1563
1563
|
},
|
|
@@ -160,7 +160,7 @@ export class CoSegmentedBar {
|
|
|
160
160
|
"references": {
|
|
161
161
|
"CoSegment": {
|
|
162
162
|
"location": "local",
|
|
163
|
-
"path": "/Users/agox/
|
|
163
|
+
"path": "/Users/agox/Documents/Prolibu/prolibu-cobalt/packages/core/src/components/co-segmented-bar/co-segmented-bar.tsx",
|
|
164
164
|
"id": "src/components/co-segmented-bar/co-segmented-bar.tsx::CoSegment"
|
|
165
165
|
}
|
|
166
166
|
}
|
|
@@ -1021,6 +1021,16 @@ html[data-overlayscrollbars-viewport~=scrollbarHidden] > body::-webkit-scrollbar
|
|
|
1021
1021
|
overflow-y: auto;
|
|
1022
1022
|
}
|
|
1023
1023
|
|
|
1024
|
+
/* Canaleta del scrollbar: el asa de OverlayScrollbars flota SOBRE las filas
|
|
1025
|
+
(sin gutter reservado) y tapaba el check y el final del texto. Solo cuando
|
|
1026
|
+
el panel scrollea de verdad (`overflowYScroll`, también si el alto lo acota
|
|
1027
|
+
el viewport y no el tope de 8 filas). Va en la ventana y no en el spacer:
|
|
1028
|
+
la ventana es absoluta con `right: 0` inline y se ubica contra el borde de
|
|
1029
|
+
padding del spacer. 12px = asa de 10 (`--os-size`) con aire. */
|
|
1030
|
+
.co-select__options [data-overlayscrollbars-viewport~='overflowYScroll'] .co-select__virtual-window {
|
|
1031
|
+
padding-inline-end: var(--co-spacing-md);
|
|
1032
|
+
}
|
|
1033
|
+
|
|
1024
1034
|
/* Ventana del virtualizador (las filas renderizadas). Columna flex solo para
|
|
1025
1035
|
poner el hueco ENTRE filas: con hueco 0 apila igual que el bloque de antes
|
|
1026
1036
|
(filas de ancho completo, sin márgenes). */
|
|
@@ -848,7 +848,7 @@ export class CoSelect {
|
|
|
848
848
|
"references": {
|
|
849
849
|
"SelectOption": {
|
|
850
850
|
"location": "local",
|
|
851
|
-
"path": "/Users/agox/
|
|
851
|
+
"path": "/Users/agox/Documents/Prolibu/prolibu-cobalt/packages/core/src/components/co-select/co-select.tsx",
|
|
852
852
|
"id": "src/components/co-select/co-select.tsx::SelectOption"
|
|
853
853
|
}
|
|
854
854
|
}
|
|
@@ -536,7 +536,7 @@ export class CoSidebarNav {
|
|
|
536
536
|
"references": {
|
|
537
537
|
"NavigateDetail": {
|
|
538
538
|
"location": "local",
|
|
539
|
-
"path": "/Users/agox/
|
|
539
|
+
"path": "/Users/agox/Documents/Prolibu/prolibu-cobalt/packages/core/src/components/co-sidebar-nav/co-sidebar-nav.tsx",
|
|
540
540
|
"id": "src/components/co-sidebar-nav/co-sidebar-nav.tsx::NavigateDetail"
|
|
541
541
|
}
|
|
542
542
|
}
|
|
@@ -189,7 +189,7 @@ export class CoToast {
|
|
|
189
189
|
"references": {
|
|
190
190
|
"CoToastActionsLayout": {
|
|
191
191
|
"location": "local",
|
|
192
|
-
"path": "/Users/agox/
|
|
192
|
+
"path": "/Users/agox/Documents/Prolibu/prolibu-cobalt/packages/core/src/components/co-toast/co-toast.tsx",
|
|
193
193
|
"id": "src/components/co-toast/co-toast.tsx::CoToastActionsLayout"
|
|
194
194
|
}
|
|
195
195
|
}
|
|
@@ -215,7 +215,7 @@ export class CoToast {
|
|
|
215
215
|
"references": {
|
|
216
216
|
"CoToastVariant": {
|
|
217
217
|
"location": "local",
|
|
218
|
-
"path": "/Users/agox/
|
|
218
|
+
"path": "/Users/agox/Documents/Prolibu/prolibu-cobalt/packages/core/src/components/co-toast/co-toast.tsx",
|
|
219
219
|
"id": "src/components/co-toast/co-toast.tsx::CoToastVariant"
|
|
220
220
|
}
|
|
221
221
|
}
|
|
@@ -214,7 +214,7 @@ export class CoTransferList {
|
|
|
214
214
|
"references": {
|
|
215
215
|
"TransferOption": {
|
|
216
216
|
"location": "local",
|
|
217
|
-
"path": "/Users/agox/
|
|
217
|
+
"path": "/Users/agox/Documents/Prolibu/prolibu-cobalt/packages/core/src/components/co-transfer-list/co-transfer-list.tsx",
|
|
218
218
|
"id": "src/components/co-transfer-list/co-transfer-list.tsx::TransferOption"
|
|
219
219
|
}
|
|
220
220
|
}
|
|
@@ -243,7 +243,7 @@ export class CoTreeItem {
|
|
|
243
243
|
"references": {
|
|
244
244
|
"TreeItemSelection": {
|
|
245
245
|
"location": "local",
|
|
246
|
-
"path": "/Users/agox/
|
|
246
|
+
"path": "/Users/agox/Documents/Prolibu/prolibu-cobalt/packages/core/src/components/co-tree-item/co-tree-item.tsx",
|
|
247
247
|
"id": "src/components/co-tree-item/co-tree-item.tsx::TreeItemSelection"
|
|
248
248
|
}
|
|
249
249
|
}
|
|
@@ -269,7 +269,7 @@ export class CoTreeItem {
|
|
|
269
269
|
"references": {
|
|
270
270
|
"TreeItemSize": {
|
|
271
271
|
"location": "local",
|
|
272
|
-
"path": "/Users/agox/
|
|
272
|
+
"path": "/Users/agox/Documents/Prolibu/prolibu-cobalt/packages/core/src/components/co-tree-item/co-tree-item.tsx",
|
|
273
273
|
"id": "src/components/co-tree-item/co-tree-item.tsx::TreeItemSize"
|
|
274
274
|
}
|
|
275
275
|
}
|
|
@@ -17,6 +17,7 @@ const DICT = {
|
|
|
17
17
|
removeFile: 'Eliminar archivo',
|
|
18
18
|
copyUrl: 'Copiar enlace',
|
|
19
19
|
downloadFile: 'Descargar',
|
|
20
|
+
annotateImage: 'Anotar imagen',
|
|
20
21
|
copied: 'Copiado',
|
|
21
22
|
dragToReorder: 'Arrastra para reordenar',
|
|
22
23
|
openPreview: 'Abrir vista previa',
|
|
@@ -35,6 +36,7 @@ const DICT = {
|
|
|
35
36
|
removeFile: 'Remove file',
|
|
36
37
|
copyUrl: 'Copy link',
|
|
37
38
|
downloadFile: 'Download',
|
|
39
|
+
annotateImage: 'Annotate image',
|
|
38
40
|
copied: 'Copied',
|
|
39
41
|
dragToReorder: 'Drag to reorder',
|
|
40
42
|
openPreview: 'Open preview',
|
|
@@ -53,6 +55,7 @@ const DICT = {
|
|
|
53
55
|
removeFile: 'Remover arquivo',
|
|
54
56
|
copyUrl: 'Copiar link',
|
|
55
57
|
downloadFile: 'Baixar',
|
|
58
|
+
annotateImage: 'Anotar imagem',
|
|
56
59
|
copied: 'Copiado',
|
|
57
60
|
dragToReorder: 'Arraste para reordenar',
|
|
58
61
|
openPreview: 'Abrir pré-visualização',
|