@gyramais/gyra-design 0.2.22 → 0.2.23
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.
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import "./index.css";
|
|
3
|
+
export type GaugeBandVariant = "neutral" | "success" | "warning" | "danger";
|
|
4
|
+
/** Formata o valor central: inteiro sem casas, fracionado com 1 casa, ausente "—". */
|
|
5
|
+
export declare const formatGaugeValue: (v?: number | null) => string;
|
|
6
|
+
export type GaugeProps = {
|
|
7
|
+
id?: string;
|
|
8
|
+
className?: string;
|
|
9
|
+
/** Valor atual (0..max). null/undefined => mostra "—" e anel vazio. */
|
|
10
|
+
value?: number | null;
|
|
11
|
+
/** Máximo da escala. Default 1000 (escala dos bureaus de crédito). */
|
|
12
|
+
max?: number;
|
|
13
|
+
/** Legenda curta acima do número (ex.: "GYRA+ Score"). */
|
|
14
|
+
label: string;
|
|
15
|
+
/** Pill de classificação abaixo do número (ex.: "Risco baixo"). Opcional. */
|
|
16
|
+
band?: string;
|
|
17
|
+
/** Cor do pill de banda; o anel permanece azul. Default "neutral". */
|
|
18
|
+
bandVariant?: GaugeBandVariant;
|
|
19
|
+
/** Diâmetro em px (escala número/legenda proporcionalmente). Default 240. */
|
|
20
|
+
size?: number;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Gauge circular de score (anel azul). Usado para o score da política de
|
|
24
|
+
* crédito, score setorial e afins. O número e a legenda escalam com `size`.
|
|
25
|
+
*/
|
|
26
|
+
declare const Gauge: ({ id, className, value, max, label, band, bandVariant, size, }: GaugeProps) => React.JSX.Element;
|
|
27
|
+
export { Gauge };
|
|
28
|
+
export default Gauge;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use client";import e from"react";function a(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var t,r={exports:{}};
|
|
2
|
+
/*!
|
|
3
|
+
Copyright (c) 2018 Jed Watson.
|
|
4
|
+
Licensed under the MIT License (MIT), see
|
|
5
|
+
http://jedwatson.github.io/classnames
|
|
6
|
+
*/t=r,function(){var e={}.hasOwnProperty;function a(){for(var e="",a=0;a<arguments.length;a++){var t=arguments[a];t&&(e=n(e,r(t)))}return e}function r(t){if("string"==typeof t||"number"==typeof t)return t;if("object"!=typeof t)return"";if(Array.isArray(t))return a.apply(null,t);if(t.toString!==Object.prototype.toString&&!t.toString.toString().includes("[native code]"))return t.toString();var r="";for(var i in t)e.call(t,i)&&t[i]&&(r=n(r,i));return r}function n(e,a){return a?e?e+" "+a:e+a:e}t.exports?(a.default=a,t.exports=a):window.classNames=a}();var n=a(r.exports);const i=e=>null==e?"—":Number.isInteger(e)?String(e):e.toFixed(1),s=2*Math.PI*42,c=({id:a,className:t,value:r,max:c=1e3,label:l,band:o,bandVariant:u="neutral",size:g=240})=>{const m=`${(Math.max(0,Math.min(1,(r??0)/(c||1)))*s).toFixed(1)} ${s.toFixed(1)}`;return e.createElement("div",{id:a,className:n("gyramais-gauge",t),style:{"--gauge-size":`${g}px`}},e.createElement("svg",{viewBox:"0 0 100 100","aria-hidden":"true"},e.createElement("circle",{cx:"50",cy:"50",r:42,fill:"none",className:"gyramais-gauge__track",strokeWidth:"9"}),e.createElement("circle",{cx:"50",cy:"50",r:42,fill:"none",className:"gyramais-gauge__arc",strokeWidth:"9",strokeDasharray:m,strokeLinecap:"round"})),e.createElement("div",{className:"gyramais-gauge__center"},e.createElement("div",{className:"gyramais-gauge__caption"},l),e.createElement("div",{className:"gyramais-gauge__num"},i(r)),e.createElement("div",{className:"gyramais-gauge__max"},"de ",c),o&&e.createElement("div",{className:n("gyramais-gauge__band",`gyramais-gauge__band--${u}`)},o)))};export{c as Gauge,c as default,i as formatGaugeValue};
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../node_modules/classnames/index.js","../../../src/components/Gauge/Gauge.tsx"],"sourcesContent":["/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue(arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(null, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","import React from \"react\";\nimport classNames from \"classnames\";\nimport \"./index.css\";\n\nexport type GaugeBandVariant = \"neutral\" | \"success\" | \"warning\" | \"danger\";\n\n/** Formata o valor central: inteiro sem casas, fracionado com 1 casa, ausente \"—\". */\nexport const formatGaugeValue = (v?: number | null): string => {\n if (v == null) return \"—\";\n return Number.isInteger(v) ? String(v) : v.toFixed(1);\n};\n\nexport type GaugeProps = {\n id?: string;\n className?: string;\n /** Valor atual (0..max). null/undefined => mostra \"—\" e anel vazio. */\n value?: number | null;\n /** Máximo da escala. Default 1000 (escala dos bureaus de crédito). */\n max?: number;\n /** Legenda curta acima do número (ex.: \"GYRA+ Score\"). */\n label: string;\n /** Pill de classificação abaixo do número (ex.: \"Risco baixo\"). Opcional. */\n band?: string;\n /** Cor do pill de banda; o anel permanece azul. Default \"neutral\". */\n bandVariant?: GaugeBandVariant;\n /** Diâmetro em px (escala número/legenda proporcionalmente). Default 240. */\n size?: number;\n};\n\nconst RADIUS = 42;\nconst CIRCUMFERENCE = 2 * Math.PI * RADIUS;\n\n/**\n * Gauge circular de score (anel azul). Usado para o score da política de\n * crédito, score setorial e afins. O número e a legenda escalam com `size`.\n */\nconst Gauge = ({\n id,\n className,\n value,\n max = 1000,\n label,\n band,\n bandVariant = \"neutral\",\n size = 240,\n}: GaugeProps) => {\n const pct = Math.max(0, Math.min(1, (value ?? 0) / (max || 1)));\n const dash = `${(pct * CIRCUMFERENCE).toFixed(1)} ${CIRCUMFERENCE.toFixed(1)}`;\n\n return (\n <div\n id={id}\n className={classNames(\"gyramais-gauge\", className)}\n style={{ [\"--gauge-size\" as string]: `${size}px` }}\n >\n <svg viewBox=\"0 0 100 100\" aria-hidden=\"true\">\n <circle\n cx=\"50\"\n cy=\"50\"\n r={RADIUS}\n fill=\"none\"\n className=\"gyramais-gauge__track\"\n strokeWidth=\"9\"\n />\n <circle\n cx=\"50\"\n cy=\"50\"\n r={RADIUS}\n fill=\"none\"\n className=\"gyramais-gauge__arc\"\n strokeWidth=\"9\"\n strokeDasharray={dash}\n strokeLinecap=\"round\"\n />\n </svg>\n <div className=\"gyramais-gauge__center\">\n <div className=\"gyramais-gauge__caption\">{label}</div>\n <div className=\"gyramais-gauge__num\">{formatGaugeValue(value)}</div>\n <div className=\"gyramais-gauge__max\">de {max}</div>\n {band && (\n <div\n className={classNames(\n \"gyramais-gauge__band\",\n `gyramais-gauge__band--${bandVariant}`,\n )}\n >\n {band}\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport { Gauge };\nexport default Gauge;\n"],"names":["hasOwn","hasOwnProperty","classNames","classes","i","arguments","length","arg","appendClass","parseValue","Array","isArray","apply","toString","Object","prototype","includes","key","call","value","newClass","module","exports","default","window","formatGaugeValue","v","Number","isInteger","String","toFixed","CIRCUMFERENCE","Math","PI","Gauge","id","className","max","label","band","bandVariant","size","dash","min","React","createElement","style","viewBox","cx","cy","r","fill","strokeWidth","strokeDasharray","strokeLinecap"],"mappings":";;;;;MAOC,WAGA,IAAIA,EAAS,CAAA,EAAGC,eAEhB,SAASC,IAGR,IAFA,IAAIC,EAAU,GAELC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAC1C,IAAIG,EAAMF,UAAUD,GAChBG,IACHJ,EAAUK,EAAYL,EAASM,EAAWF,IAE9C,CAEE,OAAOJ,CACT,CAEC,SAASM,EAAYF,GACpB,GAAmB,iBAARA,GAAmC,iBAARA,EACrC,OAAOA,EAGR,GAAmB,iBAARA,EACV,MAAO,GAGR,GAAIG,MAAMC,QAAQJ,GACjB,OAAOL,EAAWU,MAAM,KAAML,GAG/B,GAAIA,EAAIM,WAAaC,OAAOC,UAAUF,WAAaN,EAAIM,SAASA,WAAWG,SAAS,iBACnF,OAAOT,EAAIM,WAGZ,IAAIV,EAAU,GAEd,IAAK,IAAIc,KAAOV,EACXP,EAAOkB,KAAKX,EAAKU,IAAQV,EAAIU,KAChCd,EAAUK,EAAYL,EAASc,IAIjC,OAAOd,CACT,CAEC,SAASK,EAAaW,EAAOC,GAC5B,OAAKA,EAIDD,EACIA,EAAQ,IAAMC,EAGfD,EAAQC,EAPPD,CAQV,CAEsCE,EAAOC,SAC3CpB,EAAWqB,QAAUrB,EACrBmB,UAAiBnB,GAOjBsB,OAAOtB,WAAaA,CAEtB,CArEA,sBCAO,MAAMuB,EAAoBC,GACtB,MAALA,EAAkB,IACfC,OAAOC,UAAUF,GAAKG,OAAOH,GAAKA,EAAEI,QAAQ,GAqB/CC,EAAgB,EAAIC,KAAKC,GADhB,GAOTC,EAAQ,EACZC,KACAC,YACAjB,QACAkB,MAAM,IACNC,QACAC,OACAC,cAAc,UACdC,OAAO,QAEP,MACMC,EAAO,IADDV,KAAKK,IAAI,EAAGL,KAAKW,IAAI,GAAIxB,GAAS,IAAMkB,GAAO,KACpCN,GAAeD,QAAQ,MAAMC,EAAcD,QAAQ,KAE1E,OACEc,EAAAC,cAAA,MAAA,CACEV,GAAIA,EACJC,UAAWlC,EAAW,iBAAkBkC,GACxCU,MAAO,CAAE,eAA4B,GAAGL,QAExCG,EAAAC,cAAA,MAAA,CAAKE,QAAQ,cAAa,cAAa,QACrCH,EAAAC,cAAA,SAAA,CACEG,GAAG,KACHC,GAAG,KACHC,EA9BK,GA+BLC,KAAK,OACLf,UAAU,wBACVgB,YAAY,MAEdR,EAAAC,cAAA,SAAA,CACEG,GAAG,KACHC,GAAG,KACHC,EAtCK,GAuCLC,KAAK,OACLf,UAAU,sBACVgB,YAAY,IACZC,gBAAiBX,EACjBY,cAAc,WAGlBV,EAAAC,cAAA,MAAA,CAAKT,UAAU,0BACbQ,EAAAC,cAAA,MAAA,CAAKT,UAAU,2BAA2BE,GAC1CM,EAAAC,cAAA,MAAA,CAAKT,UAAU,uBAAuBX,EAAiBN,IACvDyB,EAAAC,cAAA,MAAA,CAAKT,UAAU,6BAA0BC,GACxCE,GACCK,EAAAC,cAAA,MAAA,CACET,UAAWlC,EACT,uBACA,yBAAyBsC,MAG1BD","x_google_ignoreList":[0]}
|
package/dist/index.css
CHANGED
|
@@ -10699,3 +10699,76 @@ h6 {
|
|
|
10699
10699
|
.gyramais-tourguide__btn-next:hover {
|
|
10700
10700
|
background: var(--gyra-blue-hover, #2f5dcb);
|
|
10701
10701
|
}
|
|
10702
|
+
|
|
10703
|
+
/* Gauge (CU-86ahzcm82) */
|
|
10704
|
+
/* Gauge circular de score. Diâmetro controlado por --gauge-size; número e
|
|
10705
|
+
legenda escalam proporcionalmente. Cores via design tokens (dark-mode safe). */
|
|
10706
|
+
.gyramais-gauge {
|
|
10707
|
+
position: relative;
|
|
10708
|
+
width: var(--gauge-size, 240px);
|
|
10709
|
+
height: var(--gauge-size, 240px);
|
|
10710
|
+
margin: 0 auto;
|
|
10711
|
+
}
|
|
10712
|
+
.gyramais-gauge svg {
|
|
10713
|
+
width: 100%;
|
|
10714
|
+
height: 100%;
|
|
10715
|
+
transform: rotate(-90deg);
|
|
10716
|
+
}
|
|
10717
|
+
.gyramais-gauge__track {
|
|
10718
|
+
stroke: var(--color-border-subtle, #f0f0f2);
|
|
10719
|
+
}
|
|
10720
|
+
.gyramais-gauge__arc {
|
|
10721
|
+
stroke: var(--gyra-blue, #1256ff);
|
|
10722
|
+
}
|
|
10723
|
+
.gyramais-gauge__center {
|
|
10724
|
+
position: absolute;
|
|
10725
|
+
inset: 0;
|
|
10726
|
+
display: flex;
|
|
10727
|
+
flex-direction: column;
|
|
10728
|
+
align-items: center;
|
|
10729
|
+
justify-content: center;
|
|
10730
|
+
gap: 2px;
|
|
10731
|
+
}
|
|
10732
|
+
.gyramais-gauge__caption {
|
|
10733
|
+
font-size: calc(var(--gauge-size, 240px) * 0.0458);
|
|
10734
|
+
color: var(--color-text-tertiary, #8e8e93);
|
|
10735
|
+
letter-spacing: 0.06em;
|
|
10736
|
+
text-transform: uppercase;
|
|
10737
|
+
font-weight: 600;
|
|
10738
|
+
}
|
|
10739
|
+
.gyramais-gauge__num {
|
|
10740
|
+
font-family: var(--font-display, "Lexend", "Inter", sans-serif);
|
|
10741
|
+
font-size: calc(var(--gauge-size, 240px) * 0.233);
|
|
10742
|
+
font-weight: 600;
|
|
10743
|
+
letter-spacing: -0.02em;
|
|
10744
|
+
color: var(--color-text-primary, #1d1d1f);
|
|
10745
|
+
line-height: 1;
|
|
10746
|
+
}
|
|
10747
|
+
.gyramais-gauge__max {
|
|
10748
|
+
font-size: calc(var(--gauge-size, 240px) * 0.05);
|
|
10749
|
+
color: var(--color-text-tertiary, #8e8e93);
|
|
10750
|
+
margin-top: 6px;
|
|
10751
|
+
}
|
|
10752
|
+
.gyramais-gauge__band {
|
|
10753
|
+
margin-top: 8px;
|
|
10754
|
+
font-size: calc(var(--gauge-size, 240px) * 0.0458);
|
|
10755
|
+
font-weight: 700;
|
|
10756
|
+
letter-spacing: 0.06em;
|
|
10757
|
+
text-transform: uppercase;
|
|
10758
|
+
padding: 4px 10px;
|
|
10759
|
+
border-radius: 9999px;
|
|
10760
|
+
background: var(--gyra-blue-light, #eef1fb);
|
|
10761
|
+
color: var(--gyra-blue, #1256ff);
|
|
10762
|
+
}
|
|
10763
|
+
.gyramais-gauge__band--success {
|
|
10764
|
+
background: var(--success-light, #e8f9ed);
|
|
10765
|
+
color: var(--status-success-text, #1a7d37);
|
|
10766
|
+
}
|
|
10767
|
+
.gyramais-gauge__band--warning {
|
|
10768
|
+
background: var(--warning-light, #fff4e0);
|
|
10769
|
+
color: var(--status-warning-text, #946200);
|
|
10770
|
+
}
|
|
10771
|
+
.gyramais-gauge__band--danger {
|
|
10772
|
+
background: var(--danger-light, #ffedec);
|
|
10773
|
+
color: var(--status-danger-text, #c93430);
|
|
10774
|
+
}
|