sprae 10.4.0 → 10.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/directive/default.js +2 -9
- package/dist/sprae.js +1 -9
- package/dist/sprae.min.js +1 -1
- package/package.json +1 -1
- package/readme.md +13 -7
package/directive/default.js
CHANGED
|
@@ -88,11 +88,8 @@ const mods = {
|
|
|
88
88
|
shift: (_, ...param) => (e) => keys.shift(e) && param.every((p) => (keys[p] ? keys[p](e) : e.key === p)),
|
|
89
89
|
alt: (_, ...param) => (e) => keys.alt(e) && param.every((p) => (keys[p] ? keys[p](e) : e.key === p)),
|
|
90
90
|
meta: (_, ...param) => (e) => keys.meta(e) && param.every((p) => (keys[p] ? keys[p](e) : e.key === p)),
|
|
91
|
+
// NOTE: we don't expose up/left/right/down as too verbose: can and better be handled/differentiated at once
|
|
91
92
|
arrow: () => keys.arrow,
|
|
92
|
-
up: () => keys.up,
|
|
93
|
-
left: () => keys.left,
|
|
94
|
-
right: () => keys.right,
|
|
95
|
-
down: () => keys.down,
|
|
96
93
|
enter: () => keys.enter,
|
|
97
94
|
esc: () => keys.esc,
|
|
98
95
|
tab: () => keys.tab,
|
|
@@ -110,17 +107,13 @@ const keys = {
|
|
|
110
107
|
alt: (e) => e.altKey || e.key === "Alt",
|
|
111
108
|
meta: (e) => e.metaKey || e.key === "Meta" || e.key === "Command",
|
|
112
109
|
arrow: (e) => e.key.startsWith("Arrow"),
|
|
113
|
-
up: (e) => e.key === "ArrowUp",
|
|
114
|
-
left: (e) => e.key === "ArrowLeft",
|
|
115
|
-
right: (e) => e.key === "ArrowRight",
|
|
116
|
-
down: (e) => e.key === "ArrowDown",
|
|
117
110
|
enter: (e) => e.key === "Enter",
|
|
118
111
|
esc: (e) => e.key.startsWith("Esc"),
|
|
119
112
|
tab: (e) => e.key === "Tab",
|
|
120
113
|
space: (e) => e.key === " " || e.key === "Space" || e.key === " ",
|
|
121
114
|
delete: (e) => e.key === "Delete" || e.key === "Backspace",
|
|
122
115
|
digit: (e) => /^\d$/.test(e.key),
|
|
123
|
-
letter: (e) =>
|
|
116
|
+
letter: (e) => /^\p{L}$/gu.test(e.key),
|
|
124
117
|
char: (e) => /^\S$/.test(e.key),
|
|
125
118
|
};
|
|
126
119
|
|
package/dist/sprae.js
CHANGED
|
@@ -443,10 +443,6 @@ var mods = {
|
|
|
443
443
|
alt: (_, ...param) => (e) => keys.alt(e) && param.every((p) => keys[p] ? keys[p](e) : e.key === p),
|
|
444
444
|
meta: (_, ...param) => (e) => keys.meta(e) && param.every((p) => keys[p] ? keys[p](e) : e.key === p),
|
|
445
445
|
arrow: () => keys.arrow,
|
|
446
|
-
up: () => keys.up,
|
|
447
|
-
left: () => keys.left,
|
|
448
|
-
right: () => keys.right,
|
|
449
|
-
down: () => keys.down,
|
|
450
446
|
enter: () => keys.enter,
|
|
451
447
|
esc: () => keys.esc,
|
|
452
448
|
tab: () => keys.tab,
|
|
@@ -462,17 +458,13 @@ var keys = {
|
|
|
462
458
|
alt: (e) => e.altKey || e.key === "Alt",
|
|
463
459
|
meta: (e) => e.metaKey || e.key === "Meta" || e.key === "Command",
|
|
464
460
|
arrow: (e) => e.key.startsWith("Arrow"),
|
|
465
|
-
up: (e) => e.key === "ArrowUp",
|
|
466
|
-
left: (e) => e.key === "ArrowLeft",
|
|
467
|
-
right: (e) => e.key === "ArrowRight",
|
|
468
|
-
down: (e) => e.key === "ArrowDown",
|
|
469
461
|
enter: (e) => e.key === "Enter",
|
|
470
462
|
esc: (e) => e.key.startsWith("Esc"),
|
|
471
463
|
tab: (e) => e.key === "Tab",
|
|
472
464
|
space: (e) => e.key === "\xA0" || e.key === "Space" || e.key === " ",
|
|
473
465
|
delete: (e) => e.key === "Delete" || e.key === "Backspace",
|
|
474
466
|
digit: (e) => /^\d$/.test(e.key),
|
|
475
|
-
letter: (e) =>
|
|
467
|
+
letter: (e) => /^\p{L}$/gu.test(e.key),
|
|
476
468
|
char: (e) => /^\S$/.test(e.key)
|
|
477
469
|
};
|
|
478
470
|
var attr = (el, name, v) => {
|
package/dist/sprae.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var e,t,r,l,n,
|
|
1
|
+
var e,t,r,l,n,s=Object.defineProperty,o=Symbol("signals"),a=Symbol("length");function i(t,r){if(!t)return t;if(t[o])return t;if(Array.isArray(t))return function(t){let r;if(t[o])return t;let l=e(t.length),n=Array(t.length).fill(null);const s=new Proxy(n,{get:(s,c)=>"symbol"==typeof c?c===a?l:c===o?n:n[c]:"length"===c?u[r]?l.peek():l.value:(r=c,n[c]?n[c].valueOf():c<n.length?(n[c]=e(i(t[c]))).value:void 0),set(e,t,r){if("length"===t){for(let e=r,t=n.length;e<t;e++)delete s[e];return l.value=n.length=r,!0}return c(n,t,r),t>=l.peek()&&(l.value=n.length=Number(t)+1),!0},deleteProperty:(e,t)=>(n[t]&&f(n,t),1)});return s}(t);if(t.constructor!==Object)return t;let l={...r?.[o]},s=e(Object.values(t).length);const p=new Proxy(l,{get:(e,t)=>t===a?s:t===o?l:l[t]?.valueOf(),set:(e,t,r,n)=>(n=l[t],c(l,t,r),n||++s.value),deleteProperty:(e,t)=>(l[t]&&(f(l,t),s.value--),1),ownKeys:()=>(s.value,Reflect.ownKeys(l))});for(let e in t){const r=Object.getOwnPropertyDescriptor(t,e);r?.get?(l[e]=n(r.get.bind(p)))._set=r.set?.bind(p):(l[e]=null,c(l,e,t[e]))}return p}var u={push:1,pop:1,shift:1,unshift:1,splice:1};function c(t,n,s){let o=t[n];if(o)if(s===o.peek());else if(o._set)o._set(s);else if(Array.isArray(s)&&Array.isArray(o.peek())){const e=o.peek();e[a]?r((()=>{l((()=>{let t=0,r=s.length;for(;t<r;t++)e[t]=s[t];e.length=r}))})):o.value=s}else o.value=i(s);else t[n]=o=s?.peek?s:e(i(s))}function f(e,t){const r=e[t],l=r[Symbol.dispose];l&&delete r[Symbol.dispose],delete e[t],l?.()}var p=Symbol.dispose||=Symbol("dispose"),d={},y=new WeakMap;function h(e,t){if(!e?.children)return;if(y.has(e))return Object.assign(y.get(e),t);const r=i(t||{}),l=[];return function e(t,n=t.parentNode){if(t.attributes)for(let e=0;e<t.attributes.length;){let s=t.attributes[e];if(":"===s.name[0]){t.removeAttribute(s.name);let e=s.name.slice(1).split(":");for(let n of e){let e=d[n]||d.default,o=e(t,(e.parse||g)(s.value,g),r,n);o&&l.push(o)}if(y.has(t))return l.push(t[p]);if(t.parentNode!==n)return}else e++}for(let r of[...t.children])e(r,t)}(e),y.has(e)||y.set(e,r),e[p]=()=>{for(;l.length;)l.pop()();y.delete(e)},r}var m,v={},g=(e,t,r)=>{if(r=v[e=e.trim()])return r;try{r=m(e)}catch(r){b(r,t,e)}return v[e]=r},b=(e,t,r="")=>{throw Object.assign(e,{message:`∴ ${e.message}\n\n${t}${r?`="${r}"\n\n`:""}`,expr:r})};h.use=s=>{s.signal&&function(s){e=s.signal,t=s.effect,n=s.computed,l=s.batch||(e=>e()),r=s.untracked||l}(s),s.compile&&(m=s.compile)};var k,A,S={};((e,t)=>{for(var r in t)s(e,r,{get:t[r],enumerable:!0})})(S,{batch:()=>x,computed:()=>N,effect:()=>O,signal:()=>w,untracked:()=>$});var w=(e,t,r=new Set)=>((t={get value(){return k?.deps.push(r.add(k)),e},set value(t){if(t!==e){e=t;for(let e of r)A?A.add(e):e()}},peek:()=>e}).toJSON=t.then=t.toString=t.valueOf=()=>t.value,t),O=(e,t,r,l)=>(l=(r=l=>{t?.call?.(),l=k,k=r;try{t=e()}finally{k=l}}).deps=[],r(),e=>{for(t?.call?.();e=l.pop();)e.delete(r)}),N=(e,t=w(),r,l)=>((r={get value(){return l||=O((()=>t.value=e())),t.value},peek:t.peek}).toJSON=r.then=r.toString=r.valueOf=()=>r.value,r),x=e=>{let t=A;t||(A=new Set);try{e()}finally{if(!t){t=A,A=null;for(const e of t)e()}}},$=(e,t,r)=>(t=k,k=null,r=e(),k=t,r),j=Symbol(":each");d.each=(e,[l,s,u],c)=>{const f=e[j]=document.createTextNode("");e.replaceWith(f);let p,d,y=0;const m=n((()=>{d=null;let e=u(c);return"number"==typeof e&&(e=Array.from({length:e},((e,t)=>t+1))),e?.constructor===Object&&(d=Object.keys(e),e=Object.values(e)),e||[]})),v=()=>{r((()=>{let t=0,r=m.value,n=r.length;if(p&&!p[a]){for(let e of p[o]||[])e[Symbol.dispose]();p=null,y=0}if(n<y)p.length=n;else{if(p)for(;t<y;t++)p[t]=r[t];else p=r;for(;t<n;t++){p[t]=r[t];let n=t,a=i({[l]:p[o]?.[n]||p[n],[s]:d?d[n]:n},c),u=(e.content||e).cloneNode(!0),y=e.content?{children:[...u.children],remove(){this.children.map((e=>e.remove()))}}:u;f.before(u),h(y,a),((p[o]||=[])[t]||={})[Symbol.dispose]=()=>{y[Symbol.dispose](),y.remove()}}}y=n}))};let g=0;return t((()=>{m.value[a]?.value,g?g++:(v(),queueMicrotask((()=>(g&&v(),g=0))))}))},d.each.parse=(e,t)=>{let[r,l]=e.split(/\s+in\s+/),[n,s="$"]=r.split(/\s*,\s*/);return[n,s,t(l)]};var E=Symbol("if");d.if=(e,r,l)=>{let n,s,o,a=e.parentNode,i=e.nextElementSibling,u=document.createTextNode(""),c=[];return e.after(u),e.content?(n=c,e.remove(),s=[...e.content.childNodes]):s=n=[e],i?.hasAttribute(":else")?(i.removeAttribute(":else"),i.hasAttribute(":if")?o=c:(i.remove(),o=i.content?[...i.content.childNodes]:[i])):o=c,t((()=>{const t=r(l)?s:e[E]?c:o;if(i&&(i[E]=t===s),n!=t){n[0]?.[j]&&(n=[n[0][j]]);for(let e of n)e.remove();n=t;for(let e of n)a.insertBefore(e,u),h(e,l)}}))},d.default=(e,r,l,n)=>{if(!n.startsWith("on"))return t((()=>{let t=r(l);if(n)W(e,n,K(t,l));else for(let r in t)W(e,D(r),K(t[r],l))}));const s=n.split("..").map((t=>{let r={evt:"",target:e,test:()=>!0};return r.evt=(t.startsWith("on")?t.slice(2):t).replace(/\.(\w+)?-?([-\w]+)?/g,((e,t,l="")=>(r.test=P[t]?.(r,...l.split("-"))||r.test,""))),r}));if(1==s.length)return t((()=>f(r(l),s[0])));let o,a,i,u=0;const c=e=>{i=f((t=>(i(),a=e?.(t),(u=++u%s.length)?c(a):o&&c(o))),s[u])};return t((()=>(o=r(l),!i&&c(o),()=>o=null)));function f(e,{evt:t,target:r,test:l,defer:n,stop:s,prevent:o,immediate:a,...i}){n&&(e=n(e));const u=r=>{try{l(r)&&(s&&(a?r.stopImmediatePropagation():r.stopPropagation()),o&&r.preventDefault(),e?.(r))}catch(r){b(r,`:on${t}`,e)}};return r.addEventListener(t,u,i),()=>r.removeEventListener(t,u,i)}};var P={prevent(e){e.prevent=!0},stop(e){e.stop=!0},immediate(e){e.immediate=!0},once(e){e.once=!0},passive(e){e.passive=!0},capture(e){e.capture=!0},window(e){e.target=window},document(e){e.target=document},throttle(e,t){e.defer=e=>C(e,t?Number(t)||0:108)},debounce(e,t){e.defer=e=>_(e,t?Number(t)||0:108)},outside:e=>t=>{let r=e.target;return!(r.contains(t.target)||!1===t.target.isConnected||r.offsetWidth<1&&r.offsetHeight<1)},self:e=>t=>t.target===e.target,ctrl:(e,...t)=>e=>T.ctrl(e)&&t.every((t=>T[t]?T[t](e):e.key===t)),shift:(e,...t)=>e=>T.shift(e)&&t.every((t=>T[t]?T[t](e):e.key===t)),alt:(e,...t)=>e=>T.alt(e)&&t.every((t=>T[t]?T[t](e):e.key===t)),meta:(e,...t)=>e=>T.meta(e)&&t.every((t=>T[t]?T[t](e):e.key===t)),arrow:()=>T.arrow,enter:()=>T.enter,esc:()=>T.esc,tab:()=>T.tab,space:()=>T.space,delete:()=>T.delete,digit:()=>T.digit,letter:()=>T.letter,char:()=>T.char},T={ctrl:e=>e.ctrlKey||"Control"===e.key||"Ctrl"===e.key,shift:e=>e.shiftKey||"Shift"===e.key,alt:e=>e.altKey||"Alt"===e.key,meta:e=>e.metaKey||"Meta"===e.key||"Command"===e.key,arrow:e=>e.key.startsWith("Arrow"),enter:e=>"Enter"===e.key,esc:e=>e.key.startsWith("Esc"),tab:e=>"Tab"===e.key,space:e=>" "===e.key||"Space"===e.key||" "===e.key,delete:e=>"Delete"===e.key||"Backspace"===e.key,digit:e=>/^\d$/.test(e.key),letter:e=>/^\p{L}$/gu.test(e.key),char:e=>/^\S$/.test(e.key)},W=(e,t,r)=>{null==r||!1===r?e.removeAttribute(t):e.setAttribute(t,!0===r?"":"number"==typeof r||"string"==typeof r?r:"")},C=(e,t)=>{let r,l,n=s=>{r=!0,setTimeout((()=>{if(r=!1,l)return l=!1,n(s),e(s)}),t)};return t=>r?l=!0:(n(t),e(t))},_=(e,t)=>{let r;return l=>{clearTimeout(r),r=setTimeout((()=>{r=null,e(l)}),t)}},D=e=>e.replace(/[A-Z\u00C0-\u00D6\u00D8-\u00DE]/g,(e=>"-"+e.toLowerCase())),K=(e,t)=>e?.replace?e.replace(/\$<([^>]+)>/g,((e,r)=>t[r]??"")):e;d.ref=(e,t,r)=>{r[K(t,r)]=e},d.ref.parse=e=>e,d.with=(e,r,l)=>{let n;return t((()=>{let t=r(l);h(e,n?t:n=i(t,l))}))},d.html=(e,t,r)=>{let l=t(r);if(!l)return;let n=(l.content||l).cloneNode(!0);e.replaceChildren(n),h(e,r)},d.text=(e,r,l)=>(e.content&&e.replaceWith(e=document.createTextNode("")),t((()=>{let t=r(l);e.textContent=null==t?"":t}))),d.class=(e,r,l)=>{let n=new Set;return t((()=>{let t=r(l),s=new Set;t&&("string"==typeof t?K(t,l).split(" ").map((e=>s.add(e))):Array.isArray(t)?t.map((e=>(e=K(e,l))&&s.add(e))):Object.entries(t).map((([e,t])=>t&&s.add(e))));for(let t of n)s.has(t)?s.delete(t):e.classList.remove(t);for(let t of n=s)e.classList.add(t)}))},d.style=(e,r,l)=>{let n=e.getAttribute("style")||"";return n.endsWith(";")||(n+="; "),t((()=>{let t=r(l);if("string"==typeof t)e.setAttribute("style",n+K(t,l));else{e.setAttribute("style",n);for(let r in t)e.style.setProperty(r,K(t[r],l))}}))},d.value=(e,r,l)=>{let n,s,o="text"===e.type||""===e.type?t=>e.setAttribute("value",e.value=null==t?"":t):"TEXTAREA"===e.tagName||"text"===e.type||""===e.type?t=>(n=e.selectionStart,s=e.selectionEnd,e.setAttribute("value",e.value=null==t?"":t),n&&e.setSelectionRange(n,s)):"checkbox"===e.type?t=>(e.checked=t,W(e,"checked",t)):"select-one"===e.type?t=>{for(let t in e.options)t.removeAttribute("selected");e.value=t,e.selectedOptions[0]?.setAttribute("selected","")}:t=>e.value=t;return t((()=>o(r(l))))},d.fx=(e,r,l)=>t((()=>r(l))),h.use(S),h.use({compile:e=>h.constructor("__scope",`with (__scope) { return ${e} };`)});var L=h;export{L as default};
|
package/package.json
CHANGED
package/readme.md
CHANGED
|
@@ -125,7 +125,7 @@ Set value of an input, textarea or select.
|
|
|
125
125
|
<input type="checkbox" :value="checked" />
|
|
126
126
|
```
|
|
127
127
|
|
|
128
|
-
####
|
|
128
|
+
#### `:<prop>="value"`, `:="values"`
|
|
129
129
|
|
|
130
130
|
Set any attribute(s).
|
|
131
131
|
|
|
@@ -173,7 +173,7 @@ Run effect, not changing any attribute.
|
|
|
173
173
|
<div :fx="id = setInterval(tick, interval), () => clearInterval(tick)" />
|
|
174
174
|
```
|
|
175
175
|
|
|
176
|
-
#### `:on
|
|
176
|
+
#### `:on<event>="handler"`, `:on<in>..on<out>="handler"`
|
|
177
177
|
|
|
178
178
|
Attach event(s) listener with optional modifiers.
|
|
179
179
|
|
|
@@ -183,7 +183,7 @@ Attach event(s) listener with optional modifiers.
|
|
|
183
183
|
<!-- multiple events -->
|
|
184
184
|
<input :value="text" :oninput:onchange="e => text = e.target.value">
|
|
185
185
|
|
|
186
|
-
<!-- sequence -->
|
|
186
|
+
<!-- sequence of events -->
|
|
187
187
|
<button :onfocus..onblur="e => ( handleFocus(), e => handleBlur())">
|
|
188
188
|
|
|
189
189
|
<!-- modifiers -->
|
|
@@ -193,11 +193,17 @@ Attach event(s) listener with optional modifiers.
|
|
|
193
193
|
##### Modifiers:
|
|
194
194
|
|
|
195
195
|
* `.once`, `.passive`, `.capture` – listener [options](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#options).
|
|
196
|
-
* `.prevent`, `.stop`
|
|
196
|
+
* `.prevent`, `.stop` (`.immediate`) – prevent default or stop (immediate) propagation.
|
|
197
197
|
* `.window`, `.document`, `.outside`, `.self` – specify event target.
|
|
198
198
|
* `.throttle-<ms>`, `.debounce-<ms>` – defer function call with one of the methods.
|
|
199
|
-
*
|
|
200
|
-
* `.ctrl
|
|
199
|
+
* `.<key>` – filtered by [`event.key`](https://developer.mozilla.org/en-US/docs/Web/API/UI_Events/Keyboard_event_key_values):
|
|
200
|
+
* `.ctrl`, `.shift`, `.alt`, `.meta`, `.enter`, `.esc`, `.tab`, `.space` – direct key
|
|
201
|
+
* `.delete` – delete or backspace
|
|
202
|
+
* `.arrow` – up, right, down or left arrow
|
|
203
|
+
* `.digit` – 0-9
|
|
204
|
+
* `.letter` – A-Z, a-z or any [unicode letter](https://unicode.org/reports/tr18/#General_Category_Property)
|
|
205
|
+
* `.char` – any non-space character
|
|
206
|
+
* `.ctrl-<key>, .alt-<key>, .meta-<key>, .shift-<key>` – key combinations, eg. `.ctrl-alt-delete` or `.meta-x`.
|
|
201
207
|
* `.*` – any other modifier has no effect, but allows binding multiple handlers to same event (like jQuery event classes).
|
|
202
208
|
|
|
203
209
|
#### `:html="element"` 🔌
|
|
@@ -294,7 +300,7 @@ Provider | Size | Feature
|
|
|
294
300
|
[`@webreflection/signal`](https://ghib.io/@webreflection/signal) | 531b | Class-based, better performance, good for small-medium states.
|
|
295
301
|
[`usignal`](https://ghib.io/usignal) | 850b | Class-based with optimizations, good for medium states.
|
|
296
302
|
[`@preact/signals-core`](https://ghub.io/@preact/signals-core) | 1.47kb | Best performance, good for any states, industry standard.
|
|
297
|
-
[`signal-polyfill`](https://github.com/
|
|
303
|
+
[`signal-polyfill`](https://github.com/proposal-signals/signal-polyfill) | 2.5kb | Proposal signals. Use via [adapter](https://gist.github.com/dy/bbac687464ccf5322ab0e2fd0680dc4d).
|
|
298
304
|
|
|
299
305
|
|
|
300
306
|
## Evaluator
|