@birdapi/velinstyle 0.9.0 → 1.0.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/README.de.md +7 -7
- package/README.md +7 -7
- package/cli/cli-manifest.json +1 -1
- package/core/a11y/component-contracts.json +1 -1
- package/core/search/worker-client.js +2 -3
- package/dist/chunks/attributes-ADOKLKA7.js +391 -0
- package/dist/chunks/chunk-IEHKRARD.js +109 -0
- package/dist/chunks/runtime-entry.js +1 -1
- package/dist/chunks/velin-search-FDHEMCSO.js +557 -0
- package/dist/chunks/worker-client-MPT7PNQ4.js +47 -0
- package/dist/llms.txt +1 -1
- package/dist/search-index.json +2 -2
- package/dist/velin-agent.json +2 -2
- package/dist/velinstyle-components.iife.js +3 -3
- package/dist/velinstyle-components.js +2 -1
- package/dist/velinstyle-components.min.js +1 -1
- package/dist/velinstyle.css +12 -19
- package/dist/velinstyle.min.css +1 -1
- package/package.json +1 -1
- package/dist/llms.test.txt +0 -40
- package/dist/search-index.test.json +0 -1773
- package/dist/velin-agent.test.json +0 -684
|
@@ -1171,7 +1171,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho
|
|
|
1171
1171
|
}`,Mi=class extends HTMLElement{static get observedAttributes(){return["status","pulse"]}constructor(){super(),this.attachShadow({mode:"open"})}connectedCallback(){this._render()}attributeChangedCallback(){this.shadowRoot&&this._render()}_render(){let e=this.getAttribute("status")||"live",t=aa[e]||aa.live,r=this.getAttribute("aria-label")||Rr(e);this.setAttribute("role","status"),this.setAttribute("aria-label",r),this.style.setProperty("--velin-live-color",t),this.shadowRoot.innerHTML=`
|
|
1172
1172
|
<style>${wd}${Ed}</style>
|
|
1173
1173
|
<span class="dot" aria-hidden="true"></span><slot></slot>
|
|
1174
|
-
`}};typeof customElements<"u"&&!customElements.get("velin-live-dot")&&customElements.define("velin-live-dot",Mi);la=Mi});function Oi(i){if(!i||typeof i!="object")return null;let e=i,t=String(e.id||e.url||e.title||"").trim(),r=String(e.title||"").trim(),n=String(e.url||"").trim();if(!t||!r)return null;let o=Array.isArray(e.keywords)?e.keywords.map(d=>String(d)):typeof e.keywords=="string"?e.keywords.split(/\s+/).filter(Boolean):[],a=bt.includes(e.category)?e.category:"docs";!e.category&&typeof e.url=="string"&&(e.url.includes("/components/")?a="components":e.url.includes("/cli/")||e.url.includes("/api/")?a="api":(e.url.includes("samples/")||e.url.includes("examples/"))&&(a="examples"));let c=n?wo(n):`#${t}`;return{id:t,title:r,excerpt:String(e.excerpt||e.section||"").slice(0,200),url:c,category:a,keywords:o,weight:typeof e.weight=="number"?e.weight:1}}var bt,ln,cn=u(()=>{k();bt=["docs","components","api","examples"],ln={components:1.25,api:1.15,docs:1,examples:.9}});function kd(i,e,t){let r=i.title.toLowerCase(),n=(i.excerpt||"").toLowerCase(),o=(i.keywords||[]).join(" ").toLowerCase(),a=(ln[i.category]||1)*(i.weight||1),c=0;if(r===e)c=100;else if(r.startsWith(e))c=70;else if(r.includes(e))c=50;else if(o.includes(e))c=35;else if(n.includes(e))c=25;else if(t>0&&Di(r,e,t))c=40;else if(t>0&&Di(o,e,t))c=28;else if(t>0&&Di(n,e,t))c=18;else if(da(r,e))c=22;else if(t>0){for(let d of r.split(/[^a-z0-9]+/))if(d.length>=3&&Di(d,e,t)){c=32;break}}return c>0?c*a:0}function da(i,e){let t=0;for(let r=0;r<i.length&&t<e.length;r++)i[r]===e[t]&&t++;return t===e.length}function Di(i,e,t){if(!i||!e)return!1;if(i.includes(e)||da(i,e))return!0;let r=Math.max(1,Math.floor(e.length*t*2));return Sd(i.slice(0,Math.min(i.length,e.length+8)),e)<=r}function Sd(i,e){let t=i.length,r=e.length;if(t===0)return r;if(r===0)return t;let n=new Uint16Array((r+1)*(t+1));for(let o=0;o<=r;o++)n[o]=o;for(let o=1;o<=t;o++){n[o*(r+1)]=o;for(let a=1;a<=r;a++){let c=i[o-1]===e[a-1]?0:1;n[o*(r+1)+a]=Math.min(n[(o-1)*(r+1)+a]+1,n[o*(r+1)+(a-1)]+1,n[(o-1)*(r+1)+(a-1)]+c)}}return n[t*(r+1)+r]}var gt,ua=u(()=>{cn();gt=class{constructor(){this._entries=[]}setEntries(e){this._entries=e.map(t=>Oi(t)).filter(Boolean)}addEntries(e){let t=e.map(n=>Oi(n)).filter(Boolean),r=new Set(this._entries.map(n=>n.id));for(let n of t)r.has(n.id)||(this._entries.push(n),r.add(n.id))}query(e,t={}){let r=String(e||"").trim().toLowerCase(),n=t.minChars??2,o=t.limit??12,a=t.fuzzy??.2,c=t.categories;if(r.length<n)return{results:[],groups:{}};let d=[];for(let _ of this._entries){if(c&&c.length&&!c.includes(_.category))continue;let g=kd(_,r,a);g>0&&d.push({entry:_,score:g})}d.sort((_,g)=>g.score-_.score);let m=d.slice(0,o).map(_=>({..._.entry,_score:_.score})),b={};for(let _ of m)b[_.category]||(b[_.category]=[]),b[_.category].push(_);return{results:m,groups:b}}}});function pa(i,e){if(!i||typeof e!="function")throw new Error("registerSearchProvider(id, fn) requires a non-empty id and function");ha.set(i,e)}async function dn(){let i=[];for(let e of ha.values()){let t=await e();Array.isArray(t)&&i.push(...t)}return i}var ha,un=u(()=>{ha=new Map});function Ni(i,e){let t=String(i||""),r=String(e||"").trim();if(!r||r.length<2)return yt(t);let n=t.toLowerCase(),o=r.toLowerCase(),a=n.indexOf(o),c=r.length;if(a===-1){if(a=Td(n,o),a===-1)return yt(t);c=Math.min(r.length,t.length-a)}return yt(t.slice(0,a))+'<mark class="velin-search-hit">'+yt(t.slice(a,a+c))+"</mark>"+yt(t.slice(a+c))}function yt(i){return i.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function Td(i,e){let t=0,r=-1;for(let n=0;n<i.length&&t<e.length;n++)i[n]===e[t]&&(t===0&&(r=n),t++);return t===e.length?r:-1}var ma=u(()=>{});function va(){if(typeof document>"u")return"https://example.invalid/docs/";let i=document.querySelector('script[src*="doc-search"]');if(i?.src){let r=new URL(i.src),n=r.pathname.indexOf(Ve);if(n!==-1)return r.origin+r.pathname.slice(0,n+Ve.length)}let e=window.location.pathname.replace(/\\/g,"/"),t=e.indexOf(Ve);return t>=0?new URL(e.slice(0,t+Ve.length),window.location.origin).href:new URL("./",window.location.href).href}function Ld(i){let e=i.indexOf("#");return e===-1?{path:i,hash:""}:{path:i.slice(0,e),hash:i.slice(e)}}function ba(i){let e=i.indexOf(Ve);if(e<0)return null;let t=i.slice(e+Ve.length),r=t.split("/").filter(Boolean);return r.length>=2&&fa.has(r[0])&&fa.has(r[1])&&r[0]!==r[1]?r.slice(1).join("/"):t}function Hi(i){if(!i||i==="#")return"";if(typeof window>"u")return i;let{path:e,hash:t}=Ld(i);if(!e)return t||"";let r=e;if(/^https?:\/\//i.test(e))try{r=ba(new URL(e).pathname)??e}catch{return""}try{let n=new URL(r||"",va());return n.href+(t&&!n.href.includes("#")?t:"")}catch{return""}}var Ve,fa,ga=u(()=>{Ve="/docs/",fa=new Set(["getting-started","extend","guides","utilities","components","forms","layout","content","customize","animations","about","helpers","generated","migration"])});var ya={};v(ya,{createSearchWorker:()=>Rd});function Rd(i){if(typeof Worker>"u")return null;let e=i
|
|
1174
|
+
`}};typeof customElements<"u"&&!customElements.get("velin-live-dot")&&customElements.define("velin-live-dot",Mi);la=Mi});function Oi(i){if(!i||typeof i!="object")return null;let e=i,t=String(e.id||e.url||e.title||"").trim(),r=String(e.title||"").trim(),n=String(e.url||"").trim();if(!t||!r)return null;let o=Array.isArray(e.keywords)?e.keywords.map(d=>String(d)):typeof e.keywords=="string"?e.keywords.split(/\s+/).filter(Boolean):[],a=bt.includes(e.category)?e.category:"docs";!e.category&&typeof e.url=="string"&&(e.url.includes("/components/")?a="components":e.url.includes("/cli/")||e.url.includes("/api/")?a="api":(e.url.includes("samples/")||e.url.includes("examples/"))&&(a="examples"));let c=n?wo(n):`#${t}`;return{id:t,title:r,excerpt:String(e.excerpt||e.section||"").slice(0,200),url:c,category:a,keywords:o,weight:typeof e.weight=="number"?e.weight:1}}var bt,ln,cn=u(()=>{k();bt=["docs","components","api","examples"],ln={components:1.25,api:1.15,docs:1,examples:.9}});function kd(i,e,t){let r=i.title.toLowerCase(),n=(i.excerpt||"").toLowerCase(),o=(i.keywords||[]).join(" ").toLowerCase(),a=(ln[i.category]||1)*(i.weight||1),c=0;if(r===e)c=100;else if(r.startsWith(e))c=70;else if(r.includes(e))c=50;else if(o.includes(e))c=35;else if(n.includes(e))c=25;else if(t>0&&Di(r,e,t))c=40;else if(t>0&&Di(o,e,t))c=28;else if(t>0&&Di(n,e,t))c=18;else if(da(r,e))c=22;else if(t>0){for(let d of r.split(/[^a-z0-9]+/))if(d.length>=3&&Di(d,e,t)){c=32;break}}return c>0?c*a:0}function da(i,e){let t=0;for(let r=0;r<i.length&&t<e.length;r++)i[r]===e[t]&&t++;return t===e.length}function Di(i,e,t){if(!i||!e)return!1;if(i.includes(e)||da(i,e))return!0;let r=Math.max(1,Math.floor(e.length*t*2));return Sd(i.slice(0,Math.min(i.length,e.length+8)),e)<=r}function Sd(i,e){let t=i.length,r=e.length;if(t===0)return r;if(r===0)return t;let n=new Uint16Array((r+1)*(t+1));for(let o=0;o<=r;o++)n[o]=o;for(let o=1;o<=t;o++){n[o*(r+1)]=o;for(let a=1;a<=r;a++){let c=i[o-1]===e[a-1]?0:1;n[o*(r+1)+a]=Math.min(n[(o-1)*(r+1)+a]+1,n[o*(r+1)+(a-1)]+1,n[(o-1)*(r+1)+(a-1)]+c)}}return n[t*(r+1)+r]}var gt,ua=u(()=>{cn();gt=class{constructor(){this._entries=[]}setEntries(e){this._entries=e.map(t=>Oi(t)).filter(Boolean)}addEntries(e){let t=e.map(n=>Oi(n)).filter(Boolean),r=new Set(this._entries.map(n=>n.id));for(let n of t)r.has(n.id)||(this._entries.push(n),r.add(n.id))}query(e,t={}){let r=String(e||"").trim().toLowerCase(),n=t.minChars??2,o=t.limit??12,a=t.fuzzy??.2,c=t.categories;if(r.length<n)return{results:[],groups:{}};let d=[];for(let _ of this._entries){if(c&&c.length&&!c.includes(_.category))continue;let g=kd(_,r,a);g>0&&d.push({entry:_,score:g})}d.sort((_,g)=>g.score-_.score);let m=d.slice(0,o).map(_=>({..._.entry,_score:_.score})),b={};for(let _ of m)b[_.category]||(b[_.category]=[]),b[_.category].push(_);return{results:m,groups:b}}}});function pa(i,e){if(!i||typeof e!="function")throw new Error("registerSearchProvider(id, fn) requires a non-empty id and function");ha.set(i,e)}async function dn(){let i=[];for(let e of ha.values()){let t=await e();Array.isArray(t)&&i.push(...t)}return i}var ha,un=u(()=>{ha=new Map});function Ni(i,e){let t=String(i||""),r=String(e||"").trim();if(!r||r.length<2)return yt(t);let n=t.toLowerCase(),o=r.toLowerCase(),a=n.indexOf(o),c=r.length;if(a===-1){if(a=Td(n,o),a===-1)return yt(t);c=Math.min(r.length,t.length-a)}return yt(t.slice(0,a))+'<mark class="velin-search-hit">'+yt(t.slice(a,a+c))+"</mark>"+yt(t.slice(a+c))}function yt(i){return i.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function Td(i,e){let t=0,r=-1;for(let n=0;n<i.length&&t<e.length;n++)i[n]===e[t]&&(t===0&&(r=n),t++);return t===e.length?r:-1}var ma=u(()=>{});function va(){if(typeof document>"u")return"https://example.invalid/docs/";let i=document.querySelector('script[src*="doc-search"]');if(i?.src){let r=new URL(i.src),n=r.pathname.indexOf(Ve);if(n!==-1)return r.origin+r.pathname.slice(0,n+Ve.length)}let e=window.location.pathname.replace(/\\/g,"/"),t=e.indexOf(Ve);return t>=0?new URL(e.slice(0,t+Ve.length),window.location.origin).href:new URL("./",window.location.href).href}function Ld(i){let e=i.indexOf("#");return e===-1?{path:i,hash:""}:{path:i.slice(0,e),hash:i.slice(e)}}function ba(i){let e=i.indexOf(Ve);if(e<0)return null;let t=i.slice(e+Ve.length),r=t.split("/").filter(Boolean);return r.length>=2&&fa.has(r[0])&&fa.has(r[1])&&r[0]!==r[1]?r.slice(1).join("/"):t}function Hi(i){if(!i||i==="#")return"";if(typeof window>"u")return i;let{path:e,hash:t}=Ld(i);if(!e)return t||"";let r=e;if(/^https?:\/\//i.test(e))try{r=ba(new URL(e).pathname)??e}catch{return""}try{let n=new URL(r||"",va());return n.href+(t&&!n.href.includes("#")?t:"")}catch{return""}}var Ve,fa,ga=u(()=>{Ve="/docs/",fa=new Set(["getting-started","extend","guides","utilities","components","forms","layout","content","customize","animations","about","helpers","generated","migration"])});var ya={};v(ya,{createSearchWorker:()=>Rd});function Rd(i){if(typeof Worker>"u"||!i)return null;let e=i,t;try{t=new Worker(e,{type:"module"})}catch{return null}let r=new Map;t.onmessage=o=>{let{id:a,ok:c,result:d,error:m}=o.data||{},b=r.get(a);b&&(r.delete(a),c?b.resolve(d):b.reject(new Error(m||"Worker error")))},t.onerror=()=>{for(let o of r.values())o.reject(new Error("Worker failed"));r.clear()};function n(o,a){let c=++Cd;return new Promise((d,m)=>{r.set(c,{resolve:d,reject:m}),t.postMessage({id:c,type:o,payload:a})})}return{setEntries(o){return n("setEntries",{entries:o})},query(o,a){return n("query",{query:o,options:a})},terminate(){t.terminate()}}}var Cd,_a=u(()=>{Cd=0});function xa(i){return Array.isArray(i)?i:i&&Array.isArray(i.entries)?i.entries:[]}function pn(i={}){let e=new gt,t=i.worker===!0,r=null;async function n(){if(!t||r)return r;if(typeof Worker>"u")return null;let{createSearchWorker:o}=await Promise.resolve().then(()=>(_a(),ya));return r=o(i.workerUrl),r}return{engine:e,async loadIndex(o){let a=[];if(typeof o=="string"){let d=await fetch(o);a=xa(await d.json())}else Array.isArray(o)&&(a=o);e.setEntries(a);let c=await n();return c&&await c.setEntries(e._entries),a.length},async query(o,a){let c=await n();return c?c.query(o,a):e.query(o,a)},addEntries(o){e.addEntries(o),n().then(a=>a?.setEntries(e._entries))}}}var Ae,hn,Md,mn=u(()=>{ua();un();ma();un();cn();ga();Ae=new gt,hn=!1;Md={engine:Ae,async loadIndex(i){let e=[];if(typeof i=="string"){let r=await fetch(i);if(!r.ok)throw new Error(`Failed to load search index: ${r.status}`);e=xa(await r.json())}else Array.isArray(i)&&(e=i);Ae.setEntries(e);let t=await dn();return t.length&&Ae.addEntries(t),hn=!0,e.length},addEntries(i){Ae.addEntries(i)},async refreshProviders(){let i=await dn();return i.length&&Ae.addEntries(i),i.length},async query(i,e={}){return!hn&&Ae._entries.length===0&&await this.refreshProviders(),Ae.query(i,e)},isReady(){return hn||Ae._entries.length>0}}});var fn={};v(fn,{bindDeclarativeSearch:()=>wa,default:()=>Aa});function wa(i=document){i.querySelectorAll("[velin-search-input]").forEach(e=>{if(e.dataset.velinSearchBound)return;e.dataset.velinSearchBound="1";let t=e.closest("velin-search");if(!t){t=document.createElement("velin-search"),t.setAttribute("index",e.getAttribute("data-search-index")||"/search-index.json");let r=e.parentElement?.querySelector("[velin-search-results]");e.before(t),t.appendChild(e),r&&t.appendChild(r)}})}var Id,$i,Aa,_t=u(()=>{mn();k();Id={docs:"Documentation",components:"Components",api:"API",examples:"Examples"},$i=class extends HTMLElement{static get observedAttributes(){return["index","categories","min-chars","fuzzy","placeholder","debounce"]}constructor(){super(),this._search=pn(),this._debounceTimer=null,this._activeIndex=-1,this._flatResults=[],this._indexLoaded=!1,this._listId=`velin-search-listbox-${Math.random().toString(36).slice(2,9)}`,this._mounted=!1}connectedCallback(){this._mounted||(this._mounted=!0,this._ensureMarkup(),this._loadIndex(),this._bindEvents())}disconnectedCallback(){this._teardown?.(),this._mounted=!1}get indexUrl(){return this.getAttribute("index")||"/search-index.json"}get minChars(){return parseInt(this.getAttribute("min-chars")||"2",10)}get fuzzy(){let e=this.getAttribute("fuzzy");return e===null?.2:parseFloat(e)||0}get categories(){let e=this.getAttribute("categories");return e?e.split(",").map(t=>t.trim()).filter(t=>bt.includes(t)):null}get debounceMs(){return parseInt(this.getAttribute("debounce")||"120",10)}_ensureMarkup(){if(this.querySelector("[data-velin-search-input]"))return;let e=me(this.getAttribute("placeholder")||"Search\u2026"),t=me(this.getAttribute("aria-label")||"Search");this.innerHTML=`
|
|
1175
1175
|
<div class="velin-search">
|
|
1176
1176
|
<div class="velin-search__field">
|
|
1177
1177
|
<input type="search" class="velin-search__input" data-velin-search-input
|
package/dist/velinstyle.css
CHANGED
|
@@ -3052,8 +3052,7 @@
|
|
|
3052
3052
|
}
|
|
3053
3053
|
|
|
3054
3054
|
.velin-tooltip--bottom .velin-tooltip__content {
|
|
3055
|
-
inset-block
|
|
3056
|
-
inset-block-end: auto;
|
|
3055
|
+
inset-block: calc(100% + var(--velin-space-2)) auto;
|
|
3057
3056
|
}
|
|
3058
3057
|
|
|
3059
3058
|
.velin-tooltip--bottom .velin-tooltip__content:after {
|
|
@@ -4059,12 +4058,11 @@
|
|
|
4059
4058
|
|
|
4060
4059
|
.velin-timeline:before {
|
|
4061
4060
|
content: "";
|
|
4061
|
+
inset-inline-start: .5rem;
|
|
4062
|
+
inset-block: var(--velin-space-2) var(--velin-space-2);
|
|
4062
4063
|
background: var(--velin-color-border);
|
|
4063
4064
|
inline-size: 2px;
|
|
4064
4065
|
position: absolute;
|
|
4065
|
-
inset-block-start: var(--velin-space-2);
|
|
4066
|
-
inset-block-end: var(--velin-space-2);
|
|
4067
|
-
inset-inline-start: .5rem;
|
|
4068
4066
|
}
|
|
4069
4067
|
|
|
4070
4068
|
.velin-timeline__item {
|
|
@@ -4422,8 +4420,7 @@
|
|
|
4422
4420
|
}
|
|
4423
4421
|
|
|
4424
4422
|
.velin-float-label > .velin-input, .velin-float-label > .velin-select, .velin-float-label > .velin-textarea {
|
|
4425
|
-
padding-block
|
|
4426
|
-
padding-block-end: var(--velin-space-1);
|
|
4423
|
+
padding-block: var(--velin-space-5) var(--velin-space-1);
|
|
4427
4424
|
}
|
|
4428
4425
|
|
|
4429
4426
|
.velin-float-label > .velin-label {
|
|
@@ -5562,6 +5559,10 @@
|
|
|
5562
5559
|
font-variant-numeric: tabular-nums;
|
|
5563
5560
|
}
|
|
5564
5561
|
|
|
5562
|
+
.velin-text-pretty {
|
|
5563
|
+
text-wrap: pretty;
|
|
5564
|
+
}
|
|
5565
|
+
|
|
5565
5566
|
.velin-text-start {
|
|
5566
5567
|
text-align: start;
|
|
5567
5568
|
}
|
|
@@ -5686,10 +5687,6 @@
|
|
|
5686
5687
|
text-wrap: balance;
|
|
5687
5688
|
}
|
|
5688
5689
|
|
|
5689
|
-
.velin-text-pretty {
|
|
5690
|
-
text-wrap: pretty;
|
|
5691
|
-
}
|
|
5692
|
-
|
|
5693
5690
|
.velin-text-nowrap {
|
|
5694
5691
|
text-wrap: nowrap;
|
|
5695
5692
|
}
|
|
@@ -6726,7 +6723,7 @@
|
|
|
6726
6723
|
}
|
|
6727
6724
|
|
|
6728
6725
|
@keyframes velin-flip {
|
|
6729
|
-
|
|
6726
|
+
0% {
|
|
6730
6727
|
opacity: 0;
|
|
6731
6728
|
transform: perspective(400px) rotateY(90deg);
|
|
6732
6729
|
}
|
|
@@ -6739,7 +6736,7 @@
|
|
|
6739
6736
|
transform: perspective(400px) rotateY(15deg);
|
|
6740
6737
|
}
|
|
6741
6738
|
|
|
6742
|
-
|
|
6739
|
+
100% {
|
|
6743
6740
|
opacity: 1;
|
|
6744
6741
|
transform: perspective(400px) rotateY(0);
|
|
6745
6742
|
}
|
|
@@ -8454,15 +8451,11 @@
|
|
|
8454
8451
|
}
|
|
8455
8452
|
|
|
8456
8453
|
.velin-divide-y-2 > * + * {
|
|
8457
|
-
border-block-start
|
|
8458
|
-
border-block-start-width: 2px;
|
|
8459
|
-
border-block-start-color: var(--velin-color-border);
|
|
8454
|
+
border-block-start: 2px solid var(--velin-color-border);
|
|
8460
8455
|
}
|
|
8461
8456
|
|
|
8462
8457
|
.velin-divide-x-2 > * + * {
|
|
8463
|
-
border-inline-start
|
|
8464
|
-
border-inline-start-width: 2px;
|
|
8465
|
-
border-inline-start-color: var(--velin-color-border);
|
|
8458
|
+
border-inline-start: 2px solid var(--velin-color-border);
|
|
8466
8459
|
}
|
|
8467
8460
|
|
|
8468
8461
|
.velin-divide-primary > * + * {
|