From 56ef1edcfe596932403d5752c66dfbeb523a1f25 Mon Sep 17 00:00:00 2001 From: HerrHase Date: Thu, 17 Jul 2025 17:57:06 +0200 Subject: [PATCH] init --- .gitignore | 1 + README.md | 88 +++++++++++++++++++++++++ bun.lockb | Bin 0 -> 89435 bytes bunfig.toml | 2 + example/css/styles.css | 1 + example/index.html | 73 +++++++++++++++++++++ example/js/index.js | 1 + example/js/spritemap.js | 1 + example/symbol-defs.svg | 1 + package.json | 24 +++++++ src/example.js | 6 ++ src/example.scss | 3 + src/fieldUpload.riot | 140 ++++++++++++++++++++++++++++++++++++++++ src/fieldUpload.scss | 32 +++++++++ webpack.config.js | 24 +++++++ 15 files changed, 397 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100755 bun.lockb create mode 100644 bunfig.toml create mode 100644 example/css/styles.css create mode 100644 example/index.html create mode 100644 example/js/index.js create mode 100644 example/js/spritemap.js create mode 100644 example/symbol-defs.svg create mode 100644 package.json create mode 100644 src/example.js create mode 100644 src/example.scss create mode 100644 src/fieldUpload.riot create mode 100644 src/fieldUpload.scss create mode 100644 webpack.config.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3c3629e --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules diff --git a/README.md b/README.md new file mode 100644 index 0000000..59d24cc --- /dev/null +++ b/README.md @@ -0,0 +1,88 @@ +# Tiny Components - Validator + +Created with [Riot.js](https://riot.js.org) + +Validate Form or a Single Form-Field, Error Messages can be show just in time +or after Submit entire Form. + +For Validation this Component uses [Validate.js](https://validatejs.org/) + +## Install + +```bash +npm install @tiny-components/validator --save +``` + +## You can use it like this + +```javascript +
( state.validator.submit(event) ) }>> +
+ + +
+
+ + +
+ +
+ + +``` \ No newline at end of file diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..fbf95c8707c13824808b86a59a98e0405f3b1bda GIT binary patch literal 89435 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:last-child{margin:0}.m-bottom-last-child-0>*:last-child{margin-bottom:0}.m-1{margin:1px}.m-top-4{margin-top:1.125rem}.m-top-5{margin-top:2rem}.m-bottom-0{margin-bottom:0}.m-bottom-4{margin-bottom:1.125rem}.m-bottom-5{margin-bottom:2rem}.m-left-3{margin-left:.5rem}@media only screen and (min-width: 768px){.m-left-sm-3{margin-left:.5rem}}.p-0{padding:0}.p-1{padding:1px}.p-0{padding:.125rem}.p-1{padding:0rem}.p-3{padding:.5rem}.color-text-contrast{color:var(--text-contrast)}.fill-text{fill:var(--text)}.fill-text svg{fill:var(--text)}.fill-text-contrast{fill:var(--text-contrast)}.fill-text-contrast svg{fill:var(--text-contrast)}.fill-danger{fill:var(--danger)}.fill-danger svg{fill:var(--danger)}.fill-success{fill:var(--success)}.fill-success svg{fill:var(--success)}.fill-text-hover:hover{fill:var(--text)}.fill-text-hover:hover svg{fill:var(--text)}.border-color-danger{border-color:var(--danger)}.border-color-info{border-color:var(--info)}.background-color-primary{background-color:var(--primary)}.left{text-align:left}.right{text-align:right}.center{text-align:center}.justify{text-align:justify}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.crossed{text-decoration:line-through}.underline{text-decoration:underline}.capitalize{text-transform:capitalize}.italic{font-style:italic}.light{font-weight:lighter}.normal{font-weight:normal}.medium{font-weight:medium}.bold{font-weight:bolder}.size-big{font-size:2.7rem}.tiny-field-upload input[type=file]{display:none}.tiny-field-upload__files{display:flex;flex-wrap:wrap;margin:0 -0.5em 0}.tiny-field-upload__files-item{width:calc(25% - 1em);margin:0 .5em 1em}.tiny-field-upload__files-item img.tiny-field-upload__files-media{width:100%}.tiny-field-upload__files-item .panel__body,.tiny-field-upload__files-item .sidebar__body{line-height:0} diff --git a/example/index.html b/example/index.html new file mode 100644 index 0000000..3e05043 --- /dev/null +++ b/example/index.html @@ -0,0 +1,73 @@ + + + + + + Tiny Components | Field Upload + + + + + + +
+
+
+

+ @tiny-components/upload +

+
+ +
+
+ +
+
+
+ +

+ Upload +

+ +
+
+ + +
+ +
+ +
+ +
+ +

+ Upload / Max +

+ +
+
+ + +
+ +
+ +
+
+
+ + + + diff --git a/example/js/index.js b/example/js/index.js new file mode 100644 index 0000000..0b54d38 --- /dev/null +++ b/example/js/index.js @@ -0,0 +1 @@ +(()=>{"use strict";const t=new Map,e=Symbol("riot-component"),n=new Set,s="is",i="mount",r="update",o="unmount",a="shouldUpdate",u="onBeforeMount",l="onMounted",c="onBeforeUpdate",d="onUpdated",h="onBeforeUnmount",p="onUnmounted",m="props",f="state",b="slots",v="root",y=Symbol("pure"),x=Symbol("is_updating"),g=Symbol("parent"),N=Symbol("attributes"),T=Symbol("template"),E=0,A=1,O=2,M=3,j=4,w={ATTRIBUTE:0,EVENT:A,TEXT:2,VALUE:3,REF:j};function S(t){return t.replace(/-(\w)/g,(t,e)=>e.toUpperCase())}function _(t,e){throw new Error(t,{cause:e})}function C(t){const e=new Map,n=n=>(e.has(n)||e.set(n,t.call(this,n)))&&e.get(n);return n.cache=e,n}function D(t){return t.reduce((t,e)=>{const{value:n,type:s}=e;switch(!0){case e.type===j:break;case!e.name&&0===s:return{...t,...n};case 3===s:t.value=e.value;break;default:t[S(e.name)]=e.value}return t},{})}function k(t,e){return typeof t===e}function I(t){const e=t.ownerSVGElement;return!!e||null===e}function B(t){return"template"===t.tagName.toLowerCase()}function U(t){return k(t,"function")}function L(t){return!$(t)&&t.constructor===Object}function $(t){return null==t}function R(){return this}function F(t){return U(t)?t.prototype&&t.prototype.constructor?new t:t():t}function P(t){return Array.from(t.attributes).reduce((t,e)=>(t[S(e.name)]=e.value,t),{})}function z(t){for(;t.firstChild;)t.removeChild(t.firstChild)}const V=t=>t.remove(),H=(t,e)=>e&&e.parentNode&&e.parentNode.insertBefore(t,e),K=(t,e)=>e&&e.parentNode&&e.parentNode.replaceChild(t,e),X={[i](t){this.el=t},[r]:R,[o](t,e,n=!1){n?V(this.el):n||z(this.el)},clone(){return{...this}},createDOM:R},q=0,G=1,W=2,Y=3,Z=4,J={EACH:0,IF:1,SIMPLE:2,TAG:3,SLOT:4};function Q(t,e,n,s={}){return Object.defineProperty(t,e,{value:n,enumerable:!1,writable:!1,configurable:!0,...s}),t}function tt(t,e,n){return Object.entries(e).forEach(([e,s])=>{Q(t,e,s,n)}),t}function et(t,e){return Object.entries(e).forEach(([e,n])=>{t[e]||(t[e]=n)}),t}const nt=Symbol(),st=Symbol();function it(t){const e=t.dom.cloneNode(!0),{head:n,tail:s}=function(){const t=document.createTextNode(""),e=document.createTextNode("");return t[nt]=!0,e[st]=!0,{head:t,tail:e}}();return{avoidDOMInjection:!0,fragment:e,head:n,tail:s,children:[n,...Array.from(e.childNodes),s]}}const rt=Symbol("unmount"),ot={nodes:[],mount(t,e){return this.update(t,e)},update(t,e){const{placeholder:n,nodes:s,childrenMap:i}=this,r=t===rt?null:this.evaluate(t),o=r?Array.from(r):[],{newChildrenMap:a,batches:u,futureNodes:l}=function(t,e,n,s){const{condition:i,template:r,childrenMap:o,itemName:a,getKey:u,indexName:l,root:c,isTemplateTag:d}=s,h=new Map,p=[],m=[];return t.forEach((t,s)=>{const f=function(t,{itemName:e,indexName:n,index:s,item:i}){Q(t,e,i),n&&Q(t,n,s);return t}(Object.create(e),{itemName:a,indexName:l,index:s,item:t}),b=u?u(f):s,v=o.get(b),y=[];if(function(t,e){return!!t&&!t(e)}(i,f))return;const x=!v,g=v?v.template:r.clone(),N=g.el||c.cloneNode(),T=d&&x?it(g):g.meta;x?p.push(()=>g.mount(N,f,n,T)):p.push(()=>g.update(f,n)),d?y.push(...T.children):y.push(N),o.delete(b),m.push(...y),h.set(b,{nodes:y,template:g,context:f,index:s})}),{newChildrenMap:h,batches:p,futureNodes:m}}(o,t,e,this);return((t,e,n,s)=>{const i=e.length;let r=t.length,o=i,a=0,u=0,l=null;for(;as-u){const i=n(t[a],0);for(;u{if(s<0){const n=t[t.length-1];if(n){const{template:s,nodes:i,context:r}=n;i.pop(),i.length||(t.pop(),s.unmount(r,e,null))}}return n}}(Array.from(i.values()),e),n),u.forEach(t=>t()),this.childrenMap=a,this.nodes=l,this},unmount(t,e){return this.update(rt,e),this}};const at={mount(t,e){return this.update(t,e)},update(t,e){const n=!!this.evaluate(t),s=!this.value&&n,i=this.value&&!n,r=()=>{const n=this.node.cloneNode();H(n,this.placeholder),this.template=this.template.clone(),this.template.mount(n,t,e)};switch(!0){case s:r();break;case i:this.unmount(t);break;default:n&&this.template.update(t,e)}return this.value=n,this},unmount(t,e){return this.template.unmount(t,e,!0),this}};const ut="undefined"==typeof Element?{}:Element.prototype,lt=C(t=>ut.hasOwnProperty(t));function ct({node:t,name:e,isBoolean:n,value:s},i){if(!e)return s&&function(t,e,n){const s=e?Object.keys(e):[];Object.keys(n).filter(t=>!s.includes(t)).forEach(e=>t.removeAttribute(e))}(t,i,s),void(i&&function(t,e){Object.keys(e).forEach(n=>ct({node:t,name:n},e[n]))}(t,i));!lt(e)&&(function(t){return k(t,"boolean")}(i)||L(i)||U(i))&&(t[e]=i),!function(t,e){return e?!t&&0!==t:null==t}(i,n)?function(t){return["string","number","boolean"].includes(typeof t)}(i)&&t.setAttribute(e,function(t,e,n){return!0===e&&n?t:e}(e,i,n)):t.removeAttribute(e)}const dt=/^on/,ht={handleEvent(t){this[t.type](t)}},pt=new WeakMap;function mt(t){return $(t)?"":t}const ft=(t,e)=>t.childNodes[e];const bt={[E]:ct,[A]:function({node:t,name:e},n){const s=e.replace(dt,""),i=pt.get(t)||(t=>{const e=Object.create(ht);return pt.set(t,e),e})(t),[r,o]=(t=>Array.isArray(t)?t:[t,!1])(n),a=i[s],u=r&&!a;a&&!r&&t.removeEventListener(s,i),u&&t.addEventListener(s,i,o),i[s]=r},[O]:function({node:t},e){t.data=mt(e)},[M]:function({node:t},e){t.value=mt(e)},[j]:function({node:t,value:e},n){n?n(t):e(null)}},vt={mount(t){return this.value=this.evaluate(t),bt[this.type](this,this.value),this},update(t){const e=this.evaluate(t);return this.value!==e&&(bt[this.type](this,e),this.value=e),this},unmount(){return[A,j].includes(this.type)&&bt[this.type](this,null),this}};function yt(t,e){return{...vt,...e,node:2===e.type?ft(t,e.childNodeIndex):t}}const xt=(t,e)=>e?.find(e=>e.id===t),gt=(t,e)=>t[g]||e,Nt={attributes:[],getTemplateScope(t,e){return((t,e,n)=>{if(!t||!t.length)return n;const s=t.map(t=>({...t,value:t.evaluate(e)}));return Object.assign(Object.create(n||null),D(s))})(this.attributes,t,e)},mount(t,e){const n=!!t.slots&&xt(this.name,t.slots),{parentNode:s}=this.node,i=n?gt(t,e):t;return this.templateData=n?.html?n:xt(this.name,i.slots),this.template=this.templateData&&St(this.templateData.html,this.templateData.bindings).createDOM(s)||this.template?.clone(),this.template&&(z(this.node),this.template.mount(this.node,this.getTemplateScope(t,i),i),this.template.children=Array.from(this.node.childNodes)),Tt(this.node),V(this.node),this},update(t,e){if(this.template){const n=this.templateData?gt(t,e):t;this.template.update(this.getTemplateScope(t,n),n)}return this},unmount(t,e,n){return this.template&&this.template.unmount(this.getTemplateScope(t,e),null,n),this}};function Tt(t){const e=t&&t.firstChild;e&&(H(e,t),Tt(t))}function Et(t){return t.reduce((t,{bindings:e})=>t.concat(e),[])}const At={mount(t){return this.update(t)},update(t,e){const n=this.evaluate(t);return n&&n===this.name?this.tag.update(t):(this.unmount(t,e,!0),this.name=n,this.tag=function(t,e=[],n=[]){return t?t({slots:e,attributes:n}):St(function(t){return t.reduce((t,e)=>t+e.html,"")}(e),[...Et(e),{expressions:n.map(t=>({type:0,...t}))}])}(this.getComponent(n),this.slots,this.attributes),this.tag.mount(this.node,t)),this},unmount(t,e,n){return this.tag&&this.tag.unmount(n),this}};const Ot={[G]:function(t,{evaluate:e,template:n}){const s=document.createTextNode("");return H(s,t),V(t),{...at,node:t,evaluate:e,placeholder:s,template:n.createDOM(t)}},[W]:function(t,{expressions:e}){return n=e.map(e=>yt(t,e)),["mount","update","unmount"].reduce((t,e)=>({...t,[e]:t=>n.map(n=>n[e](t))&&s}),{});var n,s},[q]:function(t,{evaluate:e,condition:n,itemName:s,indexName:i,getKey:r,template:o}){const a=document.createTextNode(""),u=t.cloneNode();return H(a,t),V(t),{...ot,childrenMap:new Map,node:t,root:u,condition:n,evaluate:e,isTemplateTag:B(u),template:o.createDOM(t),getKey:r,indexName:i,itemName:s,placeholder:a}},[Y]:function(t,{evaluate:e,getComponent:n,slots:s,attributes:i}){return{...At,node:t,evaluate:e,slots:s,attributes:i,getComponent:n}},[Z]:function(t,{name:e,attributes:n,template:s}){return{...Nt,attributes:n,template:s,node:t,name:e}}};function Mt(t,e){return t.map(t=>2===t.type?{...t,childNodeIndex:t.childNodeIndex+e}:t)}function jt(t,e){return I(t)?function(t,e){return e.ownerDocument.importNode((new window.DOMParser).parseFromString(`${t}`,"application/xml").documentElement,!0)}(e,t):function(t,e){const n=B(e)?e:document.createElement("template");return n.innerHTML=t,n.content}(e,t)}const wt={createDOM(t){return this.dom=this.dom||function(t,e){return e&&("string"==typeof e?jt(t,e):e)}(t,this.html)||document.createDocumentFragment(),this},mount(t,e,n,s={}){t||_("Please provide DOM node to mount properly your template"),this.el&&this.unmount(e);const{fragment:i,children:r,avoidDOMInjection:o}=s,{parentNode:a}=r?r[0]:t,u=B(t),l=u?function(t,e,n){const s=Array.from(t.childNodes);return Math.max(s.indexOf(e),s.indexOf(n.head)+1,0)}(a,t,s):null;this.createDOM(t);const c=i||this.dom.cloneNode(!0);return this.el=u?a:t,this.children=u?r||Array.from(c.childNodes):null,!o&&c&&function(t,e){switch(!0){case I(t):!function(t,e){for(;t.firstChild;)e.appendChild(t.firstChild)}(e,t);break;case B(t):t.parentNode.replaceChild(e,t);break;default:t.appendChild(e)}}(t,c),this.bindings=this.bindingsData.map(t=>function(t,e,n){const{selector:s,type:i,redundantAttribute:r,expressions:o}=e,a=s?t.querySelector(s):t;r&&a.removeAttribute(r);const u=o||[];return(Ot[i]||Ot[2])(a,{...e,expressions:n&&!s?Mt(u,n):u})}(this.el,t,l)),this.bindings.forEach(t=>t.mount(e,n)),this.meta=s,this},update(t,e){return this.bindings.forEach(n=>n.update(t,e)),this},unmount(t,e,n=!1){const s=this.el;if(!s)return this;switch(this.bindings.forEach(s=>s.unmount(t,e,n)),!0){case s[y]||null===n:break;case Array.isArray(this.children):!function(t){for(let e=0;et[e]=n;function Dt(t){return[i,r,o].reduce((e,n)=>(e[n]=t(n),e),{})}function kt(t){return Array.isArray(t)?t:/^\[object (HTMLCollection|NodeList|Object)\]$/.test(Object.prototype.toString.call(t))&&"number"==typeof t.length?Array.from(t):[t]}function It(t,e){return kt("string"==typeof t?(e||document).querySelectorAll(t):t)}const Bt=Object.freeze({$(t){return It(t,this.root)[0]},$$(t){return It(t,this.root)}}),Ut=Object.freeze({[a]:R,[u]:R,[l]:R,[c]:R,[d]:R,[h]:R,[p]:R}),Lt=t=>1===t.length?t[0]:t;function $t(t,e,n){const s="object"==typeof e?e:{[e]:n},i=Object.keys(s);return kt(t).forEach(t=>{i.forEach(e=>t.setAttribute(e,s[e]))}),t}function Rt(t,e){return function(t,e,n){const s="string"==typeof e?[e]:e;return Lt(kt(t).map(t=>Lt(s.map(e=>t[n](e)))))}(t,e,"getAttribute")}const Ft=new Map,Pt=()=>zt||($t(zt=It("style[riot]")[0]||document.createElement("style"),"type","text/css"),zt.parentNode||document.head.appendChild(zt),zt);var zt;const Vt={CSS_BY_NAME:Ft,add(t,e){return Ft.has(t)||(Ft.set(t,e),this.inject()),this},inject(){return Pt().innerHTML=[...Ft.values()].join("\n"),this},remove(t){return Ft.has(t)&&(Ft.delete(t),this.inject()),this}};function Ht(t,...e){return(...n)=>(n=[...e,...n]).length{const e=t?.bindingsData?.[0];return e?.selector?[]:e?.expressions?.reduce((t,{name:e,type:n})=>n===w.ATTRIBUTE?t.concat([e]):t,[])??[]});function Wt(t,{slots:e,attributes:i,props:r}){return o=function(t){return[...n].reduce((t,e)=>e(t)||t,t)}(tt(L(t)?Object.create(t):t,{mount(n,o={},a){return Q(n,y,!1),this[g]=a,this[N]=function(t,e=[]){const n=e.map(e=>yt(t,e)),s={};return Object.assign(s,{expressions:n,...Dt(t=>e=>(n.forEach(n=>n[t](e)),s))})}(n,i).mount(a),Q(this,m,Object.freeze({...qt(n,r),...D(this[N].expressions)})),this[f]=Xt(this[f],o),this[T]=this.template.createDOM(n).clone(),Ct(n,this),t.name&&function(t,e){Kt(t)!==e&&$t(t,s,e)}(n,t.name),Q(this,v,n),Q(this,b,e),this[u](this[m],this[f]),this[T].mount(n,this,a),this[l](this[m],this[f]),this},update(t={},e){e&&(this[g]=e,this[N].update(e));const n=Gt(this[T]),i=P({attributes:Array.from(this[v].attributes).filter(({name:t})=>!n.includes(t))}),{[s]:r,...o}={...i,...D(this[N].expressions)};var u,l;if(!1!==this[a](o,this[m]))return Q(this,m,Object.freeze({...e?(u=this[m],l=n,L(u)?Object.fromEntries(l.map(t=>[t,u[t]])):u):this[m],...o})),this[f]=Xt(this[f],t),this[c](this[m],this[f]),this[x]||(this[x]=!0,this[T].update(this,this[g])),this[d](this[m],this[f]),this[x]=!1,this},unmount(t){return this[h](this[m],this[f]),this[N].unmount(),this[T].unmount(this,this[g],null===t?null:!t),this[p](this[m],this[f]),this}})),Object.keys(t).filter(e=>U(t[e])).forEach(t=>{o[t]=o[t].bind(o)}),o;var o}function Yt({css:t,template:e,componentAPI:n,name:s}){return t&&s&&Vt.add(s,t),Ht(Wt)(tt(et(n,{...Ut,[m]:{},[f]:{}}),{[b]:null,[v]:null,...Bt,name:s,css:t,template:e}))}const Zt=e=>{const n=function(t={}){return Object.entries(F(t)).reduce((t,[e,n])=>{var s;return t[(s=e,s.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase())]=Qt(n),t},{})}(e.exports?e.exports.components:{});return s=>s===e.name?Jt(e):n[s]||t.get(s)},Jt=C(Qt);function Qt(t){const{css:e,template:n,exports:s,name:r}=t,o=n?function(t,e,n){return t(St,w,J,n)}(n,0,Zt(t)):X;return({slots:t,attributes:a,props:u})=>{if(s&&s[y])return function(t,{slots:e,attributes:n,props:s,css:r,template:o}){o&&_("Pure components can not have html"),r&&_("Pure components do not have css");const a=et(t({slots:e,attributes:n,props:s}),_t);return Dt(t=>(...e)=>{if(t===i){const[t]=e;Q(t,y,!0),Ct(t,a)}return a[t](...e),a})}(s,{slots:t,attributes:a,props:u,css:e,template:n});const l=F(s)||{},c=Yt({css:e,template:o,componentAPI:l,name:r})({slots:t,attributes:a,props:u});return{mount:(t,e,n)=>c.mount(t,n,e),update:(t,e)=>c.update(e,t),unmount:t=>c.unmount(t)}}}const te={css:null,exports:{state:{files:[],field:void 0,disabled:!1},onMounted(){this.field=this.$(".tiny-field-upload__field")},onUpdated(t,e){const n=this.$$(".tiny-field-upload__item input");let s=0;if(n.length>0)for(const t of n){const n=new DataTransfer;n.items.add(e.files[s++]),t.files=n.files}},addSrc:t=>URL.createObjectURL(t),handleOpenFileManager(t){this.field.click()},handleRemoveFile(t,e){const n=this.state.files.indexOf(e);this.state.files.splice(n,1),this.validateMax(),this.update()},handleSelectFile(t){let e=0;for(const n of t.target.files)(!this.props.max||this.props.max&&1+e++<=this.props.max)&&this.state.files.push(n);this.validateMax(),this.update()},validateMax(){this.state.disabled=!1,this.props.max&&this.state.files.length>=this.props.max&&(this.state.disabled=!0)}},template:(t,e,n,s)=>t('
',[{redundantAttribute:"expr0",selector:"[expr0]",expressions:[{type:e.ATTRIBUTE,isBoolean:!0,name:"multiple",evaluate:t=>void 0!==t.props.multiple},{type:e.EVENT,name:"onchange",evaluate:t=>e=>{t.handleSelectFile(e)}}]},{redundantAttribute:"expr1",selector:"[expr1]",expressions:[{type:e.TEXT,childNodeIndex:1,evaluate:t=>[t.props.label].join("")},{type:e.EVENT,name:"onclick",evaluate:t=>e=>{t.handleOpenFileManager(e)}},{type:e.ATTRIBUTE,isBoolean:!0,name:"disabled",evaluate:t=>t.state.disabled}]},{type:n.EACH,getKey:null,condition:null,template:t('
',[{redundantAttribute:"expr3",selector:"[expr3]",expressions:[{type:e.TEXT,childNodeIndex:0,evaluate:t=>t.file.name}]},{redundantAttribute:"expr4",selector:"[expr4]",expressions:[{type:e.EVENT,name:"onclick",evaluate:t=>e=>{t.handleRemoveFile(e,t.file)}}]},{redundantAttribute:"expr5",selector:"[expr5]",expressions:[{type:e.ATTRIBUTE,isBoolean:!1,name:"name",evaluate:t=>[t.props.name,"[]"].join("")}]},{redundantAttribute:"expr6",selector:"[expr6]",expressions:[{type:e.ATTRIBUTE,isBoolean:!1,name:"src",evaluate:t=>t.addSrc(t.file)}]}]),redundantAttribute:"expr2",selector:"[expr2]",itemName:"file",indexName:null,evaluate:t=>t.state.files}]),name:"tiny-field-upload"};var ee,ne;!function(e,{css:n,template:s,exports:i}){t.has(e)&&_(`The component "${e}" was already registered`),t.set(e,Qt({name:e,css:n,template:s,exports:i}))}("tiny-field-upload",te),It("tiny-field-upload").map(e=>function(e,n,s,i){const r=s||Kt(e);return t.has(r)||_(`The component named "${r}" was never registered`),t.get(r)({props:n,slots:i}).mount(e)}(e,ee,ne))})(); \ No newline at end of file diff --git a/example/js/spritemap.js b/example/js/spritemap.js new file mode 100644 index 0000000..cf16298 --- /dev/null +++ b/example/js/spritemap.js @@ -0,0 +1 @@ +(self.webpackChunk_tiny_components_upload=self.webpackChunk_tiny_components_upload||[]).push([[654],{874:()=>{}}]); \ No newline at end of file diff --git a/example/symbol-defs.svg b/example/symbol-defs.svg new file mode 100644 index 0000000..250cd5e --- /dev/null +++ b/example/symbol-defs.svg @@ -0,0 +1 @@ +addarchivearrow-downarrow-left-downarrow-left-uparrow-leftarrow-right-downarrow-right-uparrow-rightarrow-upattachmentbackspacebanbar-chart-altbar-chartboardboldbookbookmarkcalendarcallcameracaret-downcaret-leftcaret-rightcaret-upcheckcheckbox-checkedcheckboxchevron-double-downchevron-double-leftchevron-double-rightchevron-double-upchevron-downchevron-leftchevron-rightchevron-upcircle-addcircle-arrow-downcircle-arrow-leftcircle-arrow-rightcircle-arrow-upcircle-checkcircle-errorcircle-helpcircle-informationcircle-removecircle-warningcircleclipboard-checkclipboard-listclipboardclockclosecloud-downloadcloud-uploadcloudcloudycommentcompasscomputercopycredit-carddatabasedelete-altdeletedocument-adddocument-checkdocument-downloaddocument-emptydocument-removedocumentdownloaddragdropedit-alteditemailenterexpandexportexternal-linkeye-offeyefavoritefilter-1filter-altfilterflagfogfolder-addfolder-checkfolder-downloadfolder-removefoldergridhearthomeimageinboxitaliclaptoplayerslayoutlink-altlinklistlocationlocklog-inlog-outmapmegaphonemenumessage-altmessageminimizemobilemoonnextnotification-offnotificationoptions-horizontaloptions-verticalpausepenpercentagepinplaypreviousprintrainrefreshremovereorder-altreorderrepeatsavesearchselectsendsettingsshareshopping-cart-addshopping-cartshufflesnowsnowflakesortspeakersstopstormstrikethroughsunsunrise-altsunrisesunsetswitchtabletablettagtemperaturetextthree-rowstwo-columnstwo-rowsunderlineundounlockuser-adduser-checkuser-removeuserusersvolume-offvolume-upwarningwebcamwindwindowzoom-inzoom-out \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..a08ae47 --- /dev/null +++ b/package.json @@ -0,0 +1,24 @@ +{ + "name": "@tiny-components/upload", + "version": "0.1.0", + "description": "Upload Field for Riotjs", + "repository": { + "type": "git", + "url": "git@github.com:node001-net/tiny-components/upload.git" + }, + "author": "Björn Hase", + "license": "MIT", + "dependencies": { + "@tiny-components/plain-ui": "^0.6.0", + "riot": "^9.4.10" + }, + "devDependencies": { + "@riotjs/compiler": "^9.0.7", + "@riotjs/webpack-loader": "^9.0.1", + "@tiny-components/webpack": "^0.2.0" + }, + "scripts": { + "build": "webpack --mode production --config webpack.config.js", + "build-dev": "webpack --mode development --config webpack.config.js" + } +} diff --git a/src/example.js b/src/example.js new file mode 100644 index 0000000..2cbb7ac --- /dev/null +++ b/src/example.js @@ -0,0 +1,6 @@ +import * as riot from 'riot' + +import FieldUpload from './fieldUpload.riot' + +riot.register('tiny-field-upload', FieldUpload) +riot.mount('tiny-field-upload') diff --git a/src/example.scss b/src/example.scss new file mode 100644 index 0000000..e3af616 --- /dev/null +++ b/src/example.scss @@ -0,0 +1,3 @@ +@import + '../node_modules/@tiny-components/plain-ui/src/scss/plain-ui', + 'fieldUpload.scss'; diff --git a/src/fieldUpload.riot b/src/fieldUpload.riot new file mode 100644 index 0000000..776ae5f --- /dev/null +++ b/src/fieldUpload.riot @@ -0,0 +1,140 @@ + +
+ { handleSelectFile(event) } } /> + +
+
+
+
+
+
{ file.name }
+
+ +
+
+
+ + +
+
+
+
+
+ + +
diff --git a/src/fieldUpload.scss b/src/fieldUpload.scss new file mode 100644 index 0000000..6549d8c --- /dev/null +++ b/src/fieldUpload.scss @@ -0,0 +1,32 @@ +/** + * + * + */ + +.tiny-field-upload { + + // hide all file inputs + input[type="file"] { + display: none; + } + + &__files { + display: flex; + flex-wrap: wrap; + margin: 0 -0.5em 0; + } + + &__files-item { + width: calc(25% - 1em); + margin: 0 0.5em 1em; + + img.tiny-field-upload__files-media { + width: 100%; + } + + .panel__body { + line-height: 0; + } + } + +} diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 0000000..f0a841a --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,24 @@ +const tinyComponentsWebpack = require('@tiny-components/webpack') +const riotRules = require('@tiny-components/webpack/rules/riot') +const path = require('path') + +module.exports = tinyComponentsWebpack({ + index: [ + './src/example.js' + ], + styles: [ + './src/example.scss' + ], + }, { + publicPath: '/example/', + destination: path.resolve(process.cwd(), 'example'), + rules: [ riotRules ], + svg: { + src: [ + 'node_modules/@tiny-components/plain-ui/src/icons/mono-icons/svg/*.svg' + ] + }, + purge: { + src: path.join(__dirname, './**') + } + })