KPI cards: Bloomberg stock ticker style

- Redesign KPI cards to look like stock tickers
- Add ticker ID (e.g. ВЫРУЧК:KPI, AOV:KPI)
- Arrow up/down SVG indicators for change direction
- Mini trend-line (50px) inside each card
- Change color: green (#16a34a) for up, red (#e21d1d) for down
- Remove sparkline background area, keep only line
- Fix duplicate arrowUp variable naming (bArrowUp/bArrowDown/bArrowNeutral)
This commit is contained in:
neo committed 2026-06-21 18:14:08 +05:00
1 parent 0b49915420
commit 932ec3ac8f
75 files changed
+3032 -56

No files matched your search

@@ -0,0 +1 @@
!function(){"use strict";!function(){const e={VERSION:"1.2.1",SERVICE_URL:"https://www.bloomberg.com/artemis/"};try{if(process)return process.env=Object.assign({},process.env),void Object.assign(process.env,e)}catch(e){}globalThis.process={env:e}}();const e=/\/+/g,t=/\/$/;const r="::";class s extends Error{}class i{abort(){var e;null==(e=this.abortController)||e.abort()}get signal(){return this.abortController=!this.abortController||this.abortController.signal.aborted?new AbortController:this.abortController,this.abortController.signal}onTokenExpire(){return e=this,t=null,r=function*(){var e,t;try{this.accessToken=yield null==(e=this.tokenExpireHandler)?void 0:e.call(this),this.authDisabled=!0===this.accessToken}catch(e){this.accessToken=void 0,this.authDisabled=!1,null==(t=this.errorHandler)||t.call(this,e)}},new Promise(((s,i)=>{var n=e=>{try{a(r.next(e))}catch(e){i(e)}},o=e=>{try{a(r.throw(e))}catch(e){i(e)}},a=e=>e.done?s(e.value):Promise.resolve(e.value).then(n,o);a((r=r.apply(e,t)).next())}));var e,t,r}get headers(){return!0===this.accessToken?{}:{"x-access-token":this.accessToken||""}}setup(e,t){var r;this.errorHandler=e.onError,this.messageHandler=e.onMessage,this.tokenExpireHandler=e.onTokenExpire,this.retryOnError=null==(r=e.retryOnError)||r,this.options=t}}function n(e){let t,r,s,i=!1;return function(n){void 0===t?(t=n,r=0,s=-1):t=function(e,t){const r=new Uint8Array(e.length+t.length);return r.set(e),r.set(t,e.length),r}(t,n);const o=t.length;let a=0;for(;r<o;){i&&(10===t[r]&&(a=++r),i=!1);let n=-1;for(;r<o&&-1===n;++r)switch(t[r]){case 58:-1===s&&(s=r-a);break;case 13:i=!0;case 10:n=r}if(-1===n)break;e(t.subarray(a,n),s),a=r,s=-1}a===o?t=void 0:0!==a&&(t=t.subarray(a),r-=a)}}var o=window&&window.__rest||function(e,t){var r={};for(var s in e)Object.prototype.hasOwnProperty.call(e,s)&&t.indexOf(s)<0&&(r[s]=e[s]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var i=0;for(s=Object.getOwnPropertySymbols(e);i<s.length;i++)t.indexOf(s[i])<0&&Object.prototype.propertyIsEnumerable.call(e,s[i])&&(r[s[i]]=e[s[i]])}return r};const a="text/event-stream",l="last-event-id";function c(e,t){var{signal:r,headers:s,onopen:i,onmessage:c,onclose:d,onerror:u,openWhenHidden:p,fetch:v}=t,g=o(t,["signal","headers","onopen","onmessage","onclose","onerror","openWhenHidden","fetch"]);return new Promise(((t,o)=>{const m=Object.assign({},s);let b;function w(){b.abort(),document.hidden||O()}m.accept||(m.accept=a),p||document.addEventListener("visibilitychange",w);let f=1e3,y=0;function _(){document.removeEventListener("visibilitychange",w),window.clearTimeout(y),b.abort()}null==r||r.addEventListener("abort",(()=>{_(),t()}));const E=null!=v?v:window.fetch,T=null!=i?i:h;async function O(){var r;b=new AbortController;try{const r=await E(e,Object.assign(Object.assign({},g),{headers:m,signal:b.signal}));await T(r),await async function(e,t){const r=e.getReader();let s;for(;!(s=await r.read()).done;)t(s.value)}(r.body,n(function(e,t,r){let s={data:"",event:"",id:"",retry:void 0};const i=new TextDecoder;return function(n,o){if(0===n.length)null==r||r(s),s={data:"",event:"",id:"",retry:void 0};else if(o>0){const r=i.decode(n.subarray(0,o)),a=o+(32===n[o+1]?2:1),l=i.decode(n.subarray(a));switch(r){case"data":s.data=s.data?s.data+"\n"+l:l;break;case"event":s.event=l;break;case"id":e(s.id=l);break;case"retry":const r=parseInt(l,10);isNaN(r)||t(s.retry=r)}}}}((e=>{e?m[l]=e:delete m[l]}),(e=>{f=e}),c))),null==d||d(),_(),t()}catch(e){if(!b.signal.aborted)try{const t=null!==(r=null==u?void 0:u(e))&&void 0!==r?r:f;window.clearTimeout(y),y=window.setTimeout(O,t)}catch(e){_(),o(e)}}}O()}))}function h(e){const t=e.headers.get("content-type");if(!(null==t?void 0:t.startsWith(a)))throw new Error(`Expected content-type to be ${a}, Actual: ${t}`)}const d=class e extends EventTarget{constructor(e){super(),this._shouldAlert=!0,this._duration=e,document.addEventListener("visibilitychange",(()=>{document.hidden?this.stop():this.monitor()}))}monitor(){void 0===this._watchdogTimer&&this._duration&&(this._watchdogTimer=setInterval((()=>{this._shouldAlert&&this.dispatchEvent(new CustomEvent(e.events.ON_WATCHDOG_ALERT)),this._shouldAlert=!0}),this._duration))}stop(){this._watchdogTimer&&(clearInterval(this._watchdogTimer),this._watchdogTimer=void 0)}reset(){this._shouldAlert=!1}};d.events={ON_WATCHDOG_ALERT:"onWatchdogAlert"};let u=d;var p=Object.defineProperty,v=Object.defineProperties,g=Object.getOwnPropertyDescriptors,m=Object.getOwnPropertySymbols,b=Object.prototype.hasOwnProperty,w=Object.prototype.propertyIsEnumerable,f=(e,t,r)=>t in e?p(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,y=(e,t)=>{for(var r in t||(t={}))b.call(t,r)&&f(e,r,t[r]);if(m)for(var r of m(t))w.call(t,r)&&f(e,r,t[r]);return e},_=(e,t,r)=>new Promise(((s,i)=>{var n=e=>{try{a(r.next(e))}catch(e){i(e)}},o=e=>{try{a(r.throw(e))}catch(e){i(e)}},a=e=>e.done?s(e.value):Promise.resolve(e.value).then(n,o);a((r=r.apply(e,t)).next())}));class E extends Error{}Line truncated