@gyramais/gyra-design 0.2.2 → 0.2.21
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/dist/components/Filter/index.js +6 -6
- package/dist/components/Filter/index.js.map +1 -1
- package/dist/components/Input/index.js +1 -1
- package/dist/components/Input/index.js.map +1 -1
- package/dist/components/MultiSelectPicker/MultiSelectPicker.d.ts +0 -3
- package/dist/components/MultiSelectPicker/index.js +1 -1
- package/dist/components/MultiSelectPicker/index.js.map +1 -1
- package/dist/components/RichInput/index.js +3 -3
- package/dist/components/RichInput/index.js.map +1 -1
- package/dist/components/SelectTree/index.js +1 -1
- package/dist/components/SelectTree/index.js.map +1 -1
- package/dist/components/TourGuide/TourGuide.d.ts +39 -0
- package/dist/components/TourGuide/index.d.ts +1 -0
- package/dist/components/TourGuide/index.js +7 -0
- package/dist/components/TourGuide/index.js.map +1 -0
- package/dist/index.css +164 -220
- package/package.json +1 -1
- package/dist/components/AiParecer/AiParecer.d.ts +0 -75
- package/dist/components/AiParecer/index.d.ts +0 -1
- package/dist/components/AiParecer/index.js +0 -7
- package/dist/components/AiParecer/index.js.map +0 -1
- package/dist/components/Email/Email.d.ts +0 -25
- package/dist/components/Email/index.d.ts +0 -2
- package/dist/components/Email/index.js +0 -2
- package/dist/components/Email/index.js.map +0 -1
- package/dist/components/EmailBalanceSheetFinalized/EmailBalanceSheetFinalized.d.ts +0 -18
- package/dist/components/EmailBalanceSheetFinalized/index.d.ts +0 -2
- package/dist/components/EmailBalanceSheetFinalized/index.js +0 -2
- package/dist/components/EmailBalanceSheetFinalized/index.js.map +0 -1
- package/dist/emails/balance-sheet-finalized/index.d.ts +0 -33
- package/dist/emails/balance-sheet-finalized/index.esm.js +0 -2
- package/dist/emails/balance-sheet-finalized/index.esm.js.map +0 -1
- package/dist/emails/balance-sheet-finalized/index.js +0 -2
- package/dist/emails/balance-sheet-finalized/index.js.map +0 -1
- package/dist/emails/email/index.d.ts +0 -94
- package/dist/emails/email/index.esm.js +0 -2
- package/dist/emails/email/index.esm.js.map +0 -1
- package/dist/emails/email/index.js +0 -2
- package/dist/emails/email/index.js.map +0 -1
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import './index.css';
|
|
3
|
+
export type TourStep = {
|
|
4
|
+
title: string;
|
|
5
|
+
body: string;
|
|
6
|
+
targetSelector: string;
|
|
7
|
+
navSection?: string;
|
|
8
|
+
padding?: number;
|
|
9
|
+
/**
|
|
10
|
+
* Como alinhar o alvo ao rolar. 'center' (padrão para alvos pequenos) é
|
|
11
|
+
* imune à altura de toolbars fixas. 'start' é melhor para seções altas.
|
|
12
|
+
* 'nearest' rola o mínimo possível (bom para elementos flutuantes/portais
|
|
13
|
+
* que já estão visíveis, como dropdowns). Se omitido, decidimos pela altura.
|
|
14
|
+
*/
|
|
15
|
+
scrollBlock?: 'start' | 'center' | 'nearest';
|
|
16
|
+
/**
|
|
17
|
+
* Efeito colateral ao ENTRAR no passo, disparado depois da navegação e do
|
|
18
|
+
* mount da seção (ex.: abrir um dropdown para destacá-lo). Use junto com
|
|
19
|
+
* targetSelector apontando para o conteúdo revelado.
|
|
20
|
+
*/
|
|
21
|
+
onEnter?: () => void;
|
|
22
|
+
/** Limpeza ao SAIR do passo (ex.: fechar o dropdown aberto no onEnter). */
|
|
23
|
+
onLeave?: () => void;
|
|
24
|
+
};
|
|
25
|
+
export type TourGuideProps = {
|
|
26
|
+
steps: TourStep[];
|
|
27
|
+
visible: boolean;
|
|
28
|
+
onClose: () => void;
|
|
29
|
+
onNavigate?: (navSection: string) => void;
|
|
30
|
+
/**
|
|
31
|
+
* Espaço (px) reservado no topo ao rolar alvos altos (block:'start') para que
|
|
32
|
+
* não fiquem atrás de toolbars fixas. Aceita número ou função (recalculada a
|
|
33
|
+
* cada passo) — use a função quando a altura da toolbar varia (wrap/mobile).
|
|
34
|
+
* Alvos pequenos usam block:'center' e ignoram esse valor. Padrão: 0.
|
|
35
|
+
*/
|
|
36
|
+
scrollOffsetTop?: number | (() => number);
|
|
37
|
+
className?: string;
|
|
38
|
+
};
|
|
39
|
+
export declare function TourGuide({ steps, visible, onClose, onNavigate, scrollOffsetTop, className, }: TourGuideProps): React.JSX.Element | null;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './TourGuide';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use client";import e,{useState as t,useCallback as r,useEffect as n}from"react";function i(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var a,o={exports:{}};
|
|
2
|
+
/*!
|
|
3
|
+
Copyright (c) 2018 Jed Watson.
|
|
4
|
+
Licensed under the MIT License (MIT), see
|
|
5
|
+
http://jedwatson.github.io/classnames
|
|
6
|
+
*/a=o,function(){var e={}.hasOwnProperty;function t(){for(var e="",t=0;t<arguments.length;t++){var i=arguments[t];i&&(e=n(e,r(i)))}return e}function r(r){if("string"==typeof r||"number"==typeof r)return r;if("object"!=typeof r)return"";if(Array.isArray(r))return t.apply(null,r);if(r.toString!==Object.prototype.toString&&!r.toString.toString().includes("[native code]"))return r.toString();var i="";for(var a in r)e.call(r,a)&&r[a]&&(i=n(i,a));return i}function n(e,t){return t?e?e+" "+t:e+t:e}a.exports?(t.default=t,a.exports=t):window.classNames=t}();var l=i(o.exports);const s=14;function c({steps:i,visible:a,onClose:o,onNavigate:c,scrollOffsetTop:u=0,className:d}){const[m,g]=t(0),[h,w]=t(null),[f,p]=t({w:1440,h:900}),y=i[m],v=r(()=>{if(!y?.targetSelector)return void w(null);const e=document.querySelector(y.targetSelector);if(!e)return void w(null);const t=e.getBoundingClientRect();if(0===t.width&&0===t.height)return void w(null);const r=y.padding??8;w({top:t.top-r,left:t.left-r,width:t.width+2*r,height:t.height+2*r})},[y]);n(()=>{const e=()=>p({w:window.innerWidth,h:window.innerHeight});return e(),window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[]),n(()=>{if(!a)return;const e=()=>v();return window.addEventListener("resize",e),window.addEventListener("scroll",e,!0),()=>{window.removeEventListener("resize",e),window.removeEventListener("scroll",e,!0)}},[a,v]),n(()=>{if(!a||!y)return;w(null),y.navSection&&c?.(y.navSection);const e=setTimeout(()=>y.onEnter?.(),180),t=setTimeout(()=>{const e=document.querySelector(y.targetSelector);if(!e)return;const t=e.getBoundingClientRect().height,r=y.scrollBlock??(t>.55*window.innerHeight?"start":"center");if("start"===r){const t="function"==typeof u?u():u;e.style.scrollMarginTop=`${t}px`}e.scrollIntoView({behavior:"smooth",block:r})},300),r=[550,800,1100].map(e=>setTimeout(v,e));return()=>{clearTimeout(e),clearTimeout(t),r.forEach(clearTimeout),y.onLeave?.()}},[m,a]),n(()=>{if(!a)return;const e=e=>{"Escape"!==e.key?("ArrowRight"===e.key&&g(e=>e>=i.length-1?(o(),e):e+1),"ArrowLeft"===e.key&&g(e=>Math.max(0,e-1))):o()};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[a,i.length,o]),n(()=>{a&&g(0)},[a]);if(!a||!y)return null;const E=Math.min(380,f.w-28),_=f.h-28,b=(()=>{if(!h)return Math.max(s,f.h/2-140);const e=h.top+h.height+s;let t=e+240<=f.h?e:h.top-240-s;return t=Math.max(s,Math.min(t,f.h-160-s)),t})(),k=(()=>{if(!h)return Math.max(s,(f.w-E)/2);let e=h.left;return e+E>f.w-s&&(e=f.w-E-s),e<s&&(e=s),e})();return e.createElement("div",{className:l("gyramais-tourguide",d)},e.createElement("svg",{className:"gyramais-tourguide__overlay",viewBox:`0 0 ${f.w} ${f.h}`,preserveAspectRatio:"none","aria-hidden":"true",onClick:o},e.createElement("defs",null,e.createElement("mask",{id:"gyramais-tg-mask"},e.createElement("rect",{width:f.w,height:f.h,fill:"white"}),h&&e.createElement("rect",{x:h.left,y:h.top,width:h.width,height:h.height,rx:"10",fill:"black"}))),e.createElement("rect",{width:f.w,height:f.h,fill:"rgba(0,0,0,0.52)",mask:"url(#gyramais-tg-mask)"}),h&&e.createElement("rect",{x:h.left,y:h.top,width:h.width,height:h.height,rx:"10",fill:"none",stroke:"#1256ff",strokeWidth:"2",className:"gyramais-tourguide__spotlight-border"})),e.createElement("div",{className:"gyramais-tourguide__popover",style:{top:b,left:k,width:E,maxHeight:_},role:"dialog","aria-modal":"false","aria-label":y.title},e.createElement("div",{className:"gyramais-tourguide__step-badge"},"Passo ",m+1," de ",i.length),e.createElement("h3",{className:"gyramais-tourguide__title"},y.title),e.createElement("p",{className:"gyramais-tourguide__body"},y.body),e.createElement("div",{className:"gyramais-tourguide__footer"},e.createElement("div",{className:"gyramais-tourguide__dots"},i.map((t,r)=>e.createElement("button",{key:r,type:"button",className:l("gyramais-tourguide__dot",{"gyramais-tourguide__dot--active":r===m}),onClick:()=>g(r),"aria-label":`Ir para passo ${r+1}`}))),e.createElement("div",{className:"gyramais-tourguide__actions"},e.createElement("button",{type:"button",className:"gyramais-tourguide__btn-skip",onClick:o},"Sair"),m>0&&e.createElement("button",{type:"button",className:"gyramais-tourguide__btn-prev",onClick:()=>g(e=>Math.max(0,e-1))},"← Anterior"),e.createElement("button",{type:"button",className:"gyramais-tourguide__btn-next",onClick:()=>{m>=i.length-1?o():g(e=>e+1)}},m===i.length-1?"Concluir ✓":"Próximo →")))))}export{c as TourGuide};
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../node_modules/classnames/index.js","../../../src/components/TourGuide/TourGuide.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","'use client';\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\nimport classNames from 'classnames';\nimport './index.css';\n\nexport type TourStep = {\n title: string;\n body: string;\n targetSelector: string;\n navSection?: string;\n padding?: number;\n /**\n * Como alinhar o alvo ao rolar. 'center' (padrão para alvos pequenos) é\n * imune à altura de toolbars fixas. 'start' é melhor para seções altas.\n * 'nearest' rola o mínimo possível (bom para elementos flutuantes/portais\n * que já estão visíveis, como dropdowns). Se omitido, decidimos pela altura.\n */\n scrollBlock?: 'start' | 'center' | 'nearest';\n /**\n * Efeito colateral ao ENTRAR no passo, disparado depois da navegação e do\n * mount da seção (ex.: abrir um dropdown para destacá-lo). Use junto com\n * targetSelector apontando para o conteúdo revelado.\n */\n onEnter?: () => void;\n /** Limpeza ao SAIR do passo (ex.: fechar o dropdown aberto no onEnter). */\n onLeave?: () => void;\n};\n\ntype Rect = { top: number; left: number; width: number; height: number };\n\nexport type TourGuideProps = {\n steps: TourStep[];\n visible: boolean;\n onClose: () => void;\n onNavigate?: (navSection: string) => void;\n /**\n * Espaço (px) reservado no topo ao rolar alvos altos (block:'start') para que\n * não fiquem atrás de toolbars fixas. Aceita número ou função (recalculada a\n * cada passo) — use a função quando a altura da toolbar varia (wrap/mobile).\n * Alvos pequenos usam block:'center' e ignoram esse valor. Padrão: 0.\n */\n scrollOffsetTop?: number | (() => number);\n className?: string;\n};\n\nconst POPOVER_W = 380;\nconst DEFAULT_PAD = 8;\nconst GAP = 14;\n// Alvos mais altos que esta fração da viewport rolam por 'start' (topo), os\n// menores por 'center' (meio) — center é imune a toolbars fixas de qualquer\n// altura, resolvendo o spotlight caindo \"atrás\" do header em telas estreitas.\nconst TALL_RATIO = 0.55;\n\nexport function TourGuide({\n steps,\n visible,\n onClose,\n onNavigate,\n scrollOffsetTop = 0,\n className,\n}: TourGuideProps) {\n const [stepIdx, setStepIdx] = useState(0);\n const [rect, setRect] = useState<Rect | null>(null);\n const [vp, setVp] = useState({ w: 1440, h: 900 });\n\n const step = steps[stepIdx];\n\n const measureTarget = useCallback(() => {\n if (!step?.targetSelector) { setRect(null); return; }\n const el = document.querySelector<HTMLElement>(step.targetSelector);\n if (!el) { setRect(null); return; }\n const r = el.getBoundingClientRect();\n if (r.width === 0 && r.height === 0) { setRect(null); return; }\n const pad = step.padding ?? DEFAULT_PAD;\n setRect({\n top: r.top - pad,\n left: r.left - pad,\n width: r.width + pad * 2,\n height: r.height + pad * 2,\n });\n }, [step]);\n\n // Acompanha o tamanho da viewport.\n useEffect(() => {\n const update = () => setVp({ w: window.innerWidth, h: window.innerHeight });\n update();\n window.addEventListener('resize', update);\n return () => window.removeEventListener('resize', update);\n }, []);\n\n // Re-mede o alvo em resize/scroll (o spotlight precisa acompanhar).\n useEffect(() => {\n if (!visible) return;\n const remeasure = () => measureTarget();\n window.addEventListener('resize', remeasure);\n window.addEventListener('scroll', remeasure, true);\n return () => {\n window.removeEventListener('resize', remeasure);\n window.removeEventListener('scroll', remeasure, true);\n };\n }, [visible, measureTarget]);\n\n // Ciclo de cada passo: navega -> (onEnter) -> rola -> mede (várias vezes).\n useEffect(() => {\n if (!visible || !step) return;\n setRect(null);\n if (step.navSection) onNavigate?.(step.navSection);\n\n const tEnter = setTimeout(() => step.onEnter?.(), 180);\n const tScroll = setTimeout(() => {\n const el = document.querySelector<HTMLElement>(step.targetSelector);\n if (!el) return;\n const elH = el.getBoundingClientRect().height;\n const block =\n step.scrollBlock ?? (elH > window.innerHeight * TALL_RATIO ? 'start' : 'center');\n if (block === 'start') {\n const off =\n typeof scrollOffsetTop === 'function' ? scrollOffsetTop() : scrollOffsetTop;\n el.style.scrollMarginTop = `${off}px`;\n }\n el.scrollIntoView({ behavior: 'smooth', block });\n }, 300);\n // Mede em vários instantes: a seção pode revelar conteúdo após a navegação\n // (toggle/dropdown) e o smooth-scroll leva tempo.\n const measures = [550, 800, 1100].map((d) => setTimeout(measureTarget, d));\n\n return () => {\n clearTimeout(tEnter);\n clearTimeout(tScroll);\n measures.forEach(clearTimeout);\n step.onLeave?.();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [stepIdx, visible]);\n\n // Navegação por teclado.\n useEffect(() => {\n if (!visible) return;\n const handler = (e: KeyboardEvent) => {\n if (e.key === 'Escape') { onClose(); return; }\n if (e.key === 'ArrowRight') {\n setStepIdx((s) => {\n if (s >= steps.length - 1) { onClose(); return s; }\n return s + 1;\n });\n }\n if (e.key === 'ArrowLeft') {\n setStepIdx((s) => Math.max(0, s - 1));\n }\n };\n window.addEventListener('keydown', handler);\n return () => window.removeEventListener('keydown', handler);\n }, [visible, steps.length, onClose]);\n\n useEffect(() => {\n if (visible) setStepIdx(0);\n }, [visible]);\n\n const goNext = () => {\n if (stepIdx >= steps.length - 1) { onClose(); return; }\n setStepIdx((s) => s + 1);\n };\n const goPrev = () => setStepIdx((s) => Math.max(0, s - 1));\n\n if (!visible || !step) return null;\n\n // Popover responsivo: nunca mais largo que a viewport (mobile).\n const popW = Math.min(POPOVER_W, vp.w - GAP * 2);\n const popMaxH = vp.h - GAP * 2;\n\n const popTop = (() => {\n if (!rect) return Math.max(GAP, vp.h / 2 - 140);\n const below = rect.top + rect.height + GAP;\n // Cabe abaixo do alvo?\n let t = below + 240 <= vp.h ? below : rect.top - 240 - GAP;\n // Mantém dentro da viewport.\n t = Math.max(GAP, Math.min(t, vp.h - 160 - GAP));\n return t;\n })();\n const popLeft = (() => {\n if (!rect) return Math.max(GAP, (vp.w - popW) / 2);\n let l = rect.left;\n if (l + popW > vp.w - GAP) l = vp.w - popW - GAP;\n if (l < GAP) l = GAP;\n return l;\n })();\n\n return (\n <div className={classNames('gyramais-tourguide', className)}>\n <svg\n className=\"gyramais-tourguide__overlay\"\n viewBox={`0 0 ${vp.w} ${vp.h}`}\n preserveAspectRatio=\"none\"\n aria-hidden=\"true\"\n onClick={onClose}\n >\n <defs>\n <mask id=\"gyramais-tg-mask\">\n <rect width={vp.w} height={vp.h} fill=\"white\" />\n {rect && (\n <rect\n x={rect.left} y={rect.top}\n width={rect.width} height={rect.height}\n rx=\"10\" fill=\"black\"\n />\n )}\n </mask>\n </defs>\n <rect\n width={vp.w} height={vp.h}\n fill=\"rgba(0,0,0,0.52)\"\n mask=\"url(#gyramais-tg-mask)\"\n />\n {rect && (\n <rect\n x={rect.left} y={rect.top}\n width={rect.width} height={rect.height}\n rx=\"10\" fill=\"none\"\n stroke=\"#1256ff\" strokeWidth=\"2\"\n className=\"gyramais-tourguide__spotlight-border\"\n />\n )}\n </svg>\n\n <div\n className=\"gyramais-tourguide__popover\"\n style={{ top: popTop, left: popLeft, width: popW, maxHeight: popMaxH }}\n role=\"dialog\"\n aria-modal=\"false\"\n aria-label={step.title}\n >\n <div className=\"gyramais-tourguide__step-badge\">\n Passo {stepIdx + 1} de {steps.length}\n </div>\n <h3 className=\"gyramais-tourguide__title\">{step.title}</h3>\n <p className=\"gyramais-tourguide__body\">{step.body}</p>\n <div className=\"gyramais-tourguide__footer\">\n <div className=\"gyramais-tourguide__dots\">\n {steps.map((_, i) => (\n <button\n key={i}\n type=\"button\"\n className={classNames('gyramais-tourguide__dot', {\n 'gyramais-tourguide__dot--active': i === stepIdx,\n })}\n onClick={() => setStepIdx(i)}\n aria-label={`Ir para passo ${i + 1}`}\n />\n ))}\n </div>\n <div className=\"gyramais-tourguide__actions\">\n <button type=\"button\" className=\"gyramais-tourguide__btn-skip\" onClick={onClose}>\n Sair\n </button>\n {stepIdx > 0 && (\n <button type=\"button\" className=\"gyramais-tourguide__btn-prev\" onClick={goPrev}>\n ← Anterior\n </button>\n )}\n <button type=\"button\" className=\"gyramais-tourguide__btn-next\" onClick={goNext}>\n {stepIdx === steps.length - 1 ? 'Concluir ✓' : 'Próximo →'}\n </button>\n </div>\n </div>\n </div>\n </div>\n );\n}\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","GAP","TourGuide","steps","visible","onClose","onNavigate","scrollOffsetTop","className","stepIdx","setStepIdx","useState","rect","setRect","vp","setVp","w","h","step","measureTarget","useCallback","targetSelector","el","document","querySelector","r","getBoundingClientRect","width","height","pad","padding","top","left","useEffect","update","innerWidth","innerHeight","addEventListener","removeEventListener","remeasure","navSection","tEnter","setTimeout","onEnter","tScroll","elH","block","scrollBlock","off","style","scrollMarginTop","scrollIntoView","behavior","measures","map","d","clearTimeout","forEach","onLeave","handler","e","s","Math","max","popW","min","popMaxH","popTop","below","t","popLeft","l","React","createElement","viewBox","preserveAspectRatio","onClick","id","fill","x","y","rx","mask","stroke","strokeWidth","maxHeight","role","title","body","_","type"],"mappings":"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","x_google_ignoreList":[0]}
|
package/dist/index.css
CHANGED
|
@@ -746,6 +746,9 @@ video {
|
|
|
746
746
|
-moz-user-select: none;
|
|
747
747
|
user-select: none;
|
|
748
748
|
}
|
|
749
|
+
.resize {
|
|
750
|
+
resize: both;
|
|
751
|
+
}
|
|
749
752
|
.flex-col {
|
|
750
753
|
flex-direction: column;
|
|
751
754
|
}
|
|
@@ -904,9 +907,6 @@ video {
|
|
|
904
907
|
.font-semibold {
|
|
905
908
|
font-weight: 600;
|
|
906
909
|
}
|
|
907
|
-
.uppercase {
|
|
908
|
-
text-transform: uppercase;
|
|
909
|
-
}
|
|
910
910
|
.italic {
|
|
911
911
|
font-style: italic;
|
|
912
912
|
}
|
|
@@ -953,9 +953,6 @@ video {
|
|
|
953
953
|
outline: 2px solid transparent;
|
|
954
954
|
outline-offset: 2px;
|
|
955
955
|
}
|
|
956
|
-
.outline {
|
|
957
|
-
outline-style: solid;
|
|
958
|
-
}
|
|
959
956
|
.blur {
|
|
960
957
|
--tw-blur: blur(8px);
|
|
961
958
|
filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
|
|
@@ -3884,204 +3881,6 @@ h6 {
|
|
|
3884
3881
|
stroke: transparent;
|
|
3885
3882
|
}
|
|
3886
3883
|
|
|
3887
|
-
.gyramais-ai-parecer {
|
|
3888
|
-
background: linear-gradient(
|
|
3889
|
-
180deg,
|
|
3890
|
-
rgba(124, 78, 255, 0.045) 0%,
|
|
3891
|
-
rgba(18, 86, 255, 0.035) 100%
|
|
3892
|
-
);
|
|
3893
|
-
border: 1px solid rgba(124, 78, 255, 0.18);
|
|
3894
|
-
border-radius: 12px;
|
|
3895
|
-
padding: 14px 16px;
|
|
3896
|
-
}
|
|
3897
|
-
|
|
3898
|
-
.gyramais-ai-parecer__header {
|
|
3899
|
-
display: flex;
|
|
3900
|
-
align-items: center;
|
|
3901
|
-
justify-content: space-between;
|
|
3902
|
-
gap: 8px;
|
|
3903
|
-
}
|
|
3904
|
-
|
|
3905
|
-
.gyramais-ai-parecer__badge {
|
|
3906
|
-
display: inline-flex;
|
|
3907
|
-
align-items: center;
|
|
3908
|
-
gap: 8px;
|
|
3909
|
-
}
|
|
3910
|
-
|
|
3911
|
-
.gyramais-ai-parecer__badge-icon {
|
|
3912
|
-
width: 22px;
|
|
3913
|
-
height: 22px;
|
|
3914
|
-
border-radius: 50%;
|
|
3915
|
-
background: linear-gradient(135deg, #7c4eff, #1256ff);
|
|
3916
|
-
color: #fff;
|
|
3917
|
-
display: inline-flex;
|
|
3918
|
-
align-items: center;
|
|
3919
|
-
justify-content: center;
|
|
3920
|
-
font-size: 13px;
|
|
3921
|
-
line-height: 1;
|
|
3922
|
-
}
|
|
3923
|
-
|
|
3924
|
-
.gyramais-ai-parecer__badge-label {
|
|
3925
|
-
font-size: 11px;
|
|
3926
|
-
font-weight: 700;
|
|
3927
|
-
letter-spacing: 0.06em;
|
|
3928
|
-
text-transform: uppercase;
|
|
3929
|
-
color: #6635e0;
|
|
3930
|
-
}
|
|
3931
|
-
|
|
3932
|
-
.gyramais-ai-parecer__meta {
|
|
3933
|
-
display: inline-flex;
|
|
3934
|
-
align-items: center;
|
|
3935
|
-
gap: 8px;
|
|
3936
|
-
flex-wrap: wrap;
|
|
3937
|
-
justify-content: flex-end;
|
|
3938
|
-
}
|
|
3939
|
-
|
|
3940
|
-
.gyramais-ai-parecer__score {
|
|
3941
|
-
display: inline-flex;
|
|
3942
|
-
align-items: center;
|
|
3943
|
-
gap: 4px;
|
|
3944
|
-
font-size: 11px;
|
|
3945
|
-
font-weight: 600;
|
|
3946
|
-
padding: 4px 10px;
|
|
3947
|
-
border-radius: 999px;
|
|
3948
|
-
white-space: nowrap;
|
|
3949
|
-
background: rgba(18, 86, 255, 0.1);
|
|
3950
|
-
color: #1256ff;
|
|
3951
|
-
}
|
|
3952
|
-
|
|
3953
|
-
.gyramais-ai-parecer__score strong {
|
|
3954
|
-
font-weight: 700;
|
|
3955
|
-
}
|
|
3956
|
-
|
|
3957
|
-
.gyramais-ai-parecer__verdict {
|
|
3958
|
-
font-size: 11px;
|
|
3959
|
-
font-weight: 700;
|
|
3960
|
-
letter-spacing: 0.04em;
|
|
3961
|
-
text-transform: uppercase;
|
|
3962
|
-
padding: 4px 10px;
|
|
3963
|
-
border-radius: 999px;
|
|
3964
|
-
white-space: nowrap;
|
|
3965
|
-
}
|
|
3966
|
-
|
|
3967
|
-
.gyramais-ai-parecer__verdict--info {
|
|
3968
|
-
background: rgba(124, 78, 255, 0.12);
|
|
3969
|
-
color: #6635e0;
|
|
3970
|
-
}
|
|
3971
|
-
|
|
3972
|
-
.gyramais-ai-parecer__verdict--success {
|
|
3973
|
-
background: rgba(52, 199, 89, 0.18);
|
|
3974
|
-
color: #1a7d37;
|
|
3975
|
-
}
|
|
3976
|
-
|
|
3977
|
-
.gyramais-ai-parecer__verdict--warning {
|
|
3978
|
-
background: rgba(255, 159, 10, 0.2);
|
|
3979
|
-
color: #946200;
|
|
3980
|
-
}
|
|
3981
|
-
|
|
3982
|
-
.gyramais-ai-parecer__verdict--danger {
|
|
3983
|
-
background: rgba(255, 59, 48, 0.18);
|
|
3984
|
-
color: #c93430;
|
|
3985
|
-
}
|
|
3986
|
-
|
|
3987
|
-
.gyramais-ai-parecer__body {
|
|
3988
|
-
margin-top: 12px;
|
|
3989
|
-
display: flex;
|
|
3990
|
-
flex-direction: column;
|
|
3991
|
-
gap: 14px;
|
|
3992
|
-
}
|
|
3993
|
-
|
|
3994
|
-
.gyramais-ai-parecer__topic {
|
|
3995
|
-
display: flex;
|
|
3996
|
-
gap: 12px;
|
|
3997
|
-
align-items: flex-start;
|
|
3998
|
-
}
|
|
3999
|
-
|
|
4000
|
-
.gyramais-ai-parecer__topic-icon {
|
|
4001
|
-
flex-shrink: 0;
|
|
4002
|
-
}
|
|
4003
|
-
|
|
4004
|
-
.gyramais-ai-parecer__topic-body {
|
|
4005
|
-
width: 100%;
|
|
4006
|
-
}
|
|
4007
|
-
|
|
4008
|
-
.gyramais-ai-parecer__topic-label {
|
|
4009
|
-
display: block;
|
|
4010
|
-
font-weight: 600;
|
|
4011
|
-
font-size: 14px;
|
|
4012
|
-
color: var(--dark-text-color, #1f2430);
|
|
4013
|
-
}
|
|
4014
|
-
|
|
4015
|
-
.gyramais-ai-parecer__topic-content {
|
|
4016
|
-
color: #626976;
|
|
4017
|
-
font-size: 14px;
|
|
4018
|
-
line-height: 1.55;
|
|
4019
|
-
white-space: pre-line;
|
|
4020
|
-
margin-top: 2px;
|
|
4021
|
-
}
|
|
4022
|
-
|
|
4023
|
-
.gyramais-ai-parecer__foot {
|
|
4024
|
-
margin-top: 12px;
|
|
4025
|
-
padding-top: 10px;
|
|
4026
|
-
border-top: 1px dashed rgba(124, 78, 255, 0.18);
|
|
4027
|
-
display: flex;
|
|
4028
|
-
align-items: center;
|
|
4029
|
-
gap: 12px;
|
|
4030
|
-
flex-wrap: wrap;
|
|
4031
|
-
font-size: 11px;
|
|
4032
|
-
color: #8a8f9c;
|
|
4033
|
-
}
|
|
4034
|
-
|
|
4035
|
-
.gyramais-ai-parecer__src {
|
|
4036
|
-
display: inline-flex;
|
|
4037
|
-
align-items: center;
|
|
4038
|
-
gap: 4px;
|
|
4039
|
-
}
|
|
4040
|
-
|
|
4041
|
-
.gyramais-ai-parecer__src-icon {
|
|
4042
|
-
flex-shrink: 0;
|
|
4043
|
-
}
|
|
4044
|
-
|
|
4045
|
-
.gyramais-ai-parecer__actions {
|
|
4046
|
-
margin-left: auto;
|
|
4047
|
-
display: inline-flex;
|
|
4048
|
-
align-items: center;
|
|
4049
|
-
gap: 4px;
|
|
4050
|
-
}
|
|
4051
|
-
|
|
4052
|
-
.gyramais-ai-parecer__btn {
|
|
4053
|
-
width: 22px;
|
|
4054
|
-
height: 22px;
|
|
4055
|
-
border: none;
|
|
4056
|
-
background: transparent;
|
|
4057
|
-
cursor: pointer;
|
|
4058
|
-
border-radius: 6px;
|
|
4059
|
-
color: #8a8f9c;
|
|
4060
|
-
display: inline-flex;
|
|
4061
|
-
align-items: center;
|
|
4062
|
-
justify-content: center;
|
|
4063
|
-
transition:
|
|
4064
|
-
background 0.2s cubic-bezier(0.25, 0.1, 0.25, 1),
|
|
4065
|
-
color 0.2s cubic-bezier(0.25, 0.1, 0.25, 1);
|
|
4066
|
-
}
|
|
4067
|
-
|
|
4068
|
-
.gyramais-ai-parecer__btn:hover {
|
|
4069
|
-
background: rgba(124, 78, 255, 0.1);
|
|
4070
|
-
color: #6635e0;
|
|
4071
|
-
}
|
|
4072
|
-
|
|
4073
|
-
.gyramais-ai-parecer__btn--active {
|
|
4074
|
-
background: rgba(124, 78, 255, 0.14);
|
|
4075
|
-
color: #6635e0;
|
|
4076
|
-
}
|
|
4077
|
-
|
|
4078
|
-
.gyramais-ai-parecer__btn svg,
|
|
4079
|
-
.gyramais-ai-parecer__btn .material-symbols-outlined {
|
|
4080
|
-
font-size: 14px;
|
|
4081
|
-
width: 14px;
|
|
4082
|
-
height: 14px;
|
|
4083
|
-
}
|
|
4084
|
-
|
|
4085
3884
|
.gyramais-avatar {
|
|
4086
3885
|
display: flex;
|
|
4087
3886
|
align-items: center;
|
|
@@ -9226,22 +9025,6 @@ h6 {
|
|
|
9226
9025
|
color: var(--color-text-tertiary);
|
|
9227
9026
|
}
|
|
9228
9027
|
|
|
9229
|
-
/* ── Group (categorias: Cargos, Pessoas, ...) ─────────────────────── */
|
|
9230
|
-
.gyramais-multi-select-picker-group + .gyramais-multi-select-picker-group {
|
|
9231
|
-
margin-top: 2px;
|
|
9232
|
-
}
|
|
9233
|
-
.gyramais-multi-select-picker-group-head {
|
|
9234
|
-
padding-left: 14px;
|
|
9235
|
-
padding-right: 14px;
|
|
9236
|
-
padding-top: 10px;
|
|
9237
|
-
padding-bottom: 4px;
|
|
9238
|
-
font-size: 10.5px;
|
|
9239
|
-
font-weight: 700;
|
|
9240
|
-
text-transform: uppercase;
|
|
9241
|
-
letter-spacing: 0.07em;
|
|
9242
|
-
color: var(--color-text-tertiary);
|
|
9243
|
-
}
|
|
9244
|
-
|
|
9245
9028
|
/* ── Footer overrides ─────────────────────────────────────────────── */
|
|
9246
9029
|
.gyramais-multi-select-picker-count {
|
|
9247
9030
|
font-family: var(--font-mono);
|
|
@@ -10539,3 +10322,164 @@ h6 {
|
|
|
10539
10322
|
.gyramais-step-sub-title {
|
|
10540
10323
|
font-size: 0.875rem;
|
|
10541
10324
|
line-height: 1.25rem}}
|
|
10325
|
+
|
|
10326
|
+
/* TourGuide — spotlight overlay + popover flutuante.
|
|
10327
|
+
z-index 9998/9999 pra ficar acima de drawers, modais, tooltips etc. */
|
|
10328
|
+
|
|
10329
|
+
.gyramais-tourguide {
|
|
10330
|
+
position: fixed;
|
|
10331
|
+
inset: 0;
|
|
10332
|
+
z-index: 9998;
|
|
10333
|
+
pointer-events: none;
|
|
10334
|
+
}
|
|
10335
|
+
|
|
10336
|
+
.gyramais-tourguide__overlay {
|
|
10337
|
+
position: fixed;
|
|
10338
|
+
inset: 0;
|
|
10339
|
+
width: 100vw;
|
|
10340
|
+
height: 100vh;
|
|
10341
|
+
pointer-events: auto;
|
|
10342
|
+
cursor: pointer;
|
|
10343
|
+
}
|
|
10344
|
+
|
|
10345
|
+
.gyramais-tourguide__spotlight-border {
|
|
10346
|
+
animation: gyramais-tg-pulse 2.4s ease-in-out infinite;
|
|
10347
|
+
}
|
|
10348
|
+
|
|
10349
|
+
@keyframes gyramais-tg-pulse {
|
|
10350
|
+
0%, 100% { opacity: 1; }
|
|
10351
|
+
50% { opacity: 0.4; }
|
|
10352
|
+
}
|
|
10353
|
+
|
|
10354
|
+
/* ── Popover ── */
|
|
10355
|
+
.gyramais-tourguide__popover {
|
|
10356
|
+
position: fixed;
|
|
10357
|
+
background: #fff;
|
|
10358
|
+
border: 1px solid var(--color-border-secondary, #e8e8ed);
|
|
10359
|
+
border-radius: var(--radius-lg, 12px);
|
|
10360
|
+
padding: 18px 20px 16px;
|
|
10361
|
+
box-shadow:
|
|
10362
|
+
0 8px 32px -4px rgba(0, 0, 0, 0.12),
|
|
10363
|
+
0 2px 8px -2px rgba(0, 0, 0, 0.06);
|
|
10364
|
+
z-index: 9999;
|
|
10365
|
+
pointer-events: auto;
|
|
10366
|
+
animation: gyramais-tg-in 180ms ease-out both;
|
|
10367
|
+
/* Em telas baixas (mobile) o conteúdo rola dentro do card em vez de
|
|
10368
|
+
vazar pra fora da viewport. maxHeight é setado inline pelo componente. */
|
|
10369
|
+
overflow-y: auto;
|
|
10370
|
+
box-sizing: border-box;
|
|
10371
|
+
}
|
|
10372
|
+
|
|
10373
|
+
@keyframes gyramais-tg-in {
|
|
10374
|
+
from { opacity: 0; transform: translateY(6px) scale(0.97); }
|
|
10375
|
+
to { opacity: 1; transform: translateY(0) scale(1); }
|
|
10376
|
+
}
|
|
10377
|
+
|
|
10378
|
+
.gyramais-tourguide__step-badge {
|
|
10379
|
+
font-size: 10.5px;
|
|
10380
|
+
font-weight: 700;
|
|
10381
|
+
letter-spacing: 0.08em;
|
|
10382
|
+
text-transform: uppercase;
|
|
10383
|
+
color: var(--gyra-blue, #1256ff);
|
|
10384
|
+
margin-bottom: 7px;
|
|
10385
|
+
}
|
|
10386
|
+
|
|
10387
|
+
.gyramais-tourguide__title {
|
|
10388
|
+
font-size: 15px;
|
|
10389
|
+
font-weight: 700;
|
|
10390
|
+
color: var(--color-text-primary, #1d1d1f);
|
|
10391
|
+
margin: 0 0 8px;
|
|
10392
|
+
line-height: 1.3;
|
|
10393
|
+
}
|
|
10394
|
+
|
|
10395
|
+
.gyramais-tourguide__body {
|
|
10396
|
+
font-size: 13px;
|
|
10397
|
+
color: var(--color-text-secondary, #636366);
|
|
10398
|
+
line-height: 1.55;
|
|
10399
|
+
margin: 0 0 16px;
|
|
10400
|
+
}
|
|
10401
|
+
|
|
10402
|
+
/* ── Footer ── */
|
|
10403
|
+
.gyramais-tourguide__footer {
|
|
10404
|
+
display: flex;
|
|
10405
|
+
align-items: center;
|
|
10406
|
+
justify-content: space-between;
|
|
10407
|
+
gap: 12px;
|
|
10408
|
+
}
|
|
10409
|
+
|
|
10410
|
+
.gyramais-tourguide__dots {
|
|
10411
|
+
display: flex;
|
|
10412
|
+
gap: 5px;
|
|
10413
|
+
align-items: center;
|
|
10414
|
+
}
|
|
10415
|
+
|
|
10416
|
+
.gyramais-tourguide__dot {
|
|
10417
|
+
width: 6px;
|
|
10418
|
+
height: 6px;
|
|
10419
|
+
border-radius: 999px;
|
|
10420
|
+
border: none;
|
|
10421
|
+
background: var(--color-border-primary, #d2d2d7);
|
|
10422
|
+
cursor: pointer;
|
|
10423
|
+
padding: 0;
|
|
10424
|
+
transition: all 200ms ease;
|
|
10425
|
+
flex-shrink: 0;
|
|
10426
|
+
}
|
|
10427
|
+
|
|
10428
|
+
.gyramais-tourguide__dot--active {
|
|
10429
|
+
background: var(--gyra-blue, #1256ff);
|
|
10430
|
+
width: 18px;
|
|
10431
|
+
}
|
|
10432
|
+
|
|
10433
|
+
.gyramais-tourguide__actions {
|
|
10434
|
+
display: flex;
|
|
10435
|
+
gap: 6px;
|
|
10436
|
+
align-items: center;
|
|
10437
|
+
}
|
|
10438
|
+
|
|
10439
|
+
.gyramais-tourguide__btn-skip {
|
|
10440
|
+
padding: 6px 10px;
|
|
10441
|
+
border: none;
|
|
10442
|
+
background: none;
|
|
10443
|
+
color: var(--color-text-tertiary, #8e8e93);
|
|
10444
|
+
font-size: 12.5px;
|
|
10445
|
+
cursor: pointer;
|
|
10446
|
+
border-radius: var(--radius-sm, 6px);
|
|
10447
|
+
transition: color 150ms ease;
|
|
10448
|
+
font-family: inherit;
|
|
10449
|
+
}
|
|
10450
|
+
.gyramais-tourguide__btn-skip:hover {
|
|
10451
|
+
color: var(--color-text-secondary, #636366);
|
|
10452
|
+
}
|
|
10453
|
+
|
|
10454
|
+
.gyramais-tourguide__btn-prev {
|
|
10455
|
+
padding: 6px 12px;
|
|
10456
|
+
border: 1.5px solid var(--color-border-secondary, #e8e8ed);
|
|
10457
|
+
background: #fff;
|
|
10458
|
+
color: var(--color-text-primary, #1d1d1f);
|
|
10459
|
+
font-size: 12.5px;
|
|
10460
|
+
font-weight: 600;
|
|
10461
|
+
cursor: pointer;
|
|
10462
|
+
border-radius: var(--radius-sm, 6px);
|
|
10463
|
+
transition: background 150ms ease, border-color 150ms ease;
|
|
10464
|
+
font-family: inherit;
|
|
10465
|
+
}
|
|
10466
|
+
.gyramais-tourguide__btn-prev:hover {
|
|
10467
|
+
background: var(--color-surface-secondary, #fafafa);
|
|
10468
|
+
border-color: var(--color-border-primary, #d2d2d7);
|
|
10469
|
+
}
|
|
10470
|
+
|
|
10471
|
+
.gyramais-tourguide__btn-next {
|
|
10472
|
+
padding: 6px 14px;
|
|
10473
|
+
border: none;
|
|
10474
|
+
background: var(--gyra-blue, #1256ff);
|
|
10475
|
+
color: #fff;
|
|
10476
|
+
font-size: 12.5px;
|
|
10477
|
+
font-weight: 700;
|
|
10478
|
+
cursor: pointer;
|
|
10479
|
+
border-radius: var(--radius-sm, 6px);
|
|
10480
|
+
transition: background 150ms ease;
|
|
10481
|
+
font-family: inherit;
|
|
10482
|
+
}
|
|
10483
|
+
.gyramais-tourguide__btn-next:hover {
|
|
10484
|
+
background: var(--gyra-blue-hover, #2f5dcb);
|
|
10485
|
+
}
|
package/package.json
CHANGED
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import "./index.css";
|
|
3
|
-
export type AiParecerVerdictTone = "success" | "warning" | "danger" | "info";
|
|
4
|
-
type AiParecerProps = {
|
|
5
|
-
id?: string;
|
|
6
|
-
className?: string;
|
|
7
|
-
/**
|
|
8
|
-
* Chip de veredito exibido a direita do badge (ex: "Risco médio").
|
|
9
|
-
* Opcional.
|
|
10
|
-
*/
|
|
11
|
-
verdict?: React.ReactNode;
|
|
12
|
-
verdictTone?: AiParecerVerdictTone;
|
|
13
|
-
/**
|
|
14
|
-
* Score (ex: nota GYRA+ IA) exibido como pill a esquerda do chip de
|
|
15
|
-
* veredito. Aceita number ou node. Opcional.
|
|
16
|
-
*/
|
|
17
|
-
score?: React.ReactNode;
|
|
18
|
-
/** Rotulo do score. Default: "Score GYRA+ IA". */
|
|
19
|
-
scoreLabel?: string;
|
|
20
|
-
/**
|
|
21
|
-
* Conteudo do parecer: tipicamente um ou mais `<AiParecer.Topic>`
|
|
22
|
-
* (Resumo Executivo, Pontos de Atenção e Risco, etc).
|
|
23
|
-
*/
|
|
24
|
-
children?: React.ReactNode;
|
|
25
|
-
/**
|
|
26
|
-
* Fontes consultadas, exibidas no rodape com um icone de base de dados
|
|
27
|
-
* (ex: "Receita Federal · Quod · Serasa"). Opcional.
|
|
28
|
-
*/
|
|
29
|
-
sources?: React.ReactNode;
|
|
30
|
-
/**
|
|
31
|
-
* Grau de confianca do parecer, exibido no rodape (ex: "96%" vira
|
|
32
|
-
* "Confiança 96%"). Aceita number ou node. Opcional.
|
|
33
|
-
*/
|
|
34
|
-
confidence?: React.ReactNode;
|
|
35
|
-
/**
|
|
36
|
-
* Callbacks de feedback. Quando algum e' passado, o rodape mostra os
|
|
37
|
-
* botoes padrao (👍 / 👎 / regenerar) com icones SVG proprios — sem
|
|
38
|
-
* depender de nenhuma fonte de icone externa. O estado de "util/nao-util"
|
|
39
|
-
* fica destacado automaticamente.
|
|
40
|
-
*/
|
|
41
|
-
onFeedbackUp?: () => void;
|
|
42
|
-
onFeedbackDown?: () => void;
|
|
43
|
-
onRegenerate?: () => void;
|
|
44
|
-
/**
|
|
45
|
-
* Acoes customizadas do rodape. Quando presente, SUBSTITUI os botoes de
|
|
46
|
-
* feedback padrao. Use a classe `gyramais-ai-parecer__btn` pro estilo.
|
|
47
|
-
*/
|
|
48
|
-
actions?: React.ReactNode;
|
|
49
|
-
/**
|
|
50
|
-
* Rodape totalmente customizado. Quando presente, substitui o rodape
|
|
51
|
-
* padrao montado a partir de `sources` / `confidence` / acoes.
|
|
52
|
-
*/
|
|
53
|
-
footer?: React.ReactNode;
|
|
54
|
-
};
|
|
55
|
-
type AiParecerTopicProps = {
|
|
56
|
-
className?: string;
|
|
57
|
-
label: React.ReactNode;
|
|
58
|
-
/** Icone a esquerda do topico (ex: <DescriptionOutlinedIcon />). */
|
|
59
|
-
icon?: React.ReactNode;
|
|
60
|
-
/** `warning` destaca o topico (fundo + icone em tom de alerta). */
|
|
61
|
-
tone?: "default" | "warning";
|
|
62
|
-
children?: React.ReactNode;
|
|
63
|
-
};
|
|
64
|
-
declare const AiParecerTopic: ({ className, label, icon, tone, children, }: AiParecerTopicProps) => React.JSX.Element;
|
|
65
|
-
/**
|
|
66
|
-
* Faixa padrao "Parecer GYRA+ IA" usada em todas as seções de parecer
|
|
67
|
-
* gerado por IA (analise financeira etc). Badge roxo com gradiente, label
|
|
68
|
-
* em uppercase e chip de veredito opcional. O conteudo (topicos) vem como
|
|
69
|
-
* children. Use `AiParecer.Topic` para padronizar cada bloco.
|
|
70
|
-
*/
|
|
71
|
-
declare const AiParecer: {
|
|
72
|
-
({ id, className, verdict, verdictTone, score, scoreLabel, children, sources, confidence, onFeedbackUp, onFeedbackDown, onRegenerate, actions, footer, }: AiParecerProps): React.JSX.Element;
|
|
73
|
-
Topic: ({ className, label, icon, tone, children, }: AiParecerTopicProps) => React.JSX.Element;
|
|
74
|
-
};
|
|
75
|
-
export { AiParecer, AiParecerTopic };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from "./AiParecer";
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
"use client";import e,{useState as a}from"react";function r(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var t,c={exports:{}};
|
|
2
|
-
/*!
|
|
3
|
-
Copyright (c) 2018 Jed Watson.
|
|
4
|
-
Licensed under the MIT License (MIT), see
|
|
5
|
-
http://jedwatson.github.io/classnames
|
|
6
|
-
*/t=c,function(){var e={}.hasOwnProperty;function a(){for(var e="",a=0;a<arguments.length;a++){var t=arguments[a];t&&(e=c(e,r(t)))}return e}function r(r){if("string"==typeof r||"number"==typeof r)return r;if("object"!=typeof r)return"";if(Array.isArray(r))return a.apply(null,r);if(r.toString!==Object.prototype.toString&&!r.toString.toString().includes("[native code]"))return r.toString();var t="";for(var n in r)e.call(r,n)&&r[n]&&(t=c(t,n));return t}function c(e,a){return a?e?e+" "+a:e+a:e}t.exports?(a.default=a,t.exports=a):window.classNames=a}();var n=r(c.exports);const i=({className:a,label:r,icon:t,tone:c="default",children:i})=>e.createElement("div",{className:n("gyramais-ai-parecer__topic",`gyramais-ai-parecer__topic--${c}`,a)},t&&e.createElement("div",{className:"gyramais-ai-parecer__topic-icon"},t),e.createElement("div",{className:"gyramais-ai-parecer__topic-body"},e.createElement("span",{className:"gyramais-ai-parecer__topic-label"},r),e.createElement("div",{className:"gyramais-ai-parecer__topic-content"},i??"-"))),l={width:14,height:14,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0},s=()=>e.createElement("svg",{className:"gyramais-ai-parecer__src-icon",...l,width:12,height:12},e.createElement("ellipse",{cx:"12",cy:"5",rx:"9",ry:"3"}),e.createElement("path",{d:"M3 5v14c0 1.66 4 3 9 3s9-1.34 9-3V5"}),e.createElement("path",{d:"M3 12c0 1.66 4 3 9 3s9-1.34 9-3"})),m=()=>e.createElement("svg",{...l},e.createElement("path",{d:"M7 10v12"}),e.createElement("path",{d:"M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z"})),o=()=>e.createElement("svg",{...l},e.createElement("path",{d:"M17 14V2"}),e.createElement("path",{d:"M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88Z"})),p=()=>e.createElement("svg",{...l},e.createElement("path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8"}),e.createElement("path",{d:"M21 3v5h-5"}),e.createElement("path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16"}),e.createElement("path",{d:"M8 16H3v5"})),d=({id:r,className:t,verdict:c,verdictTone:i="info",score:l,scoreLabel:d="Score GYRA+ IA",children:_,sources:g,confidence:u,onFeedbackUp:y,onFeedbackDown:E,onRegenerate:v,actions:b,footer:h})=>{const[N,f]=a(null),w=null!=l&&""!==l,M=null!=c&&""!==c,k=null!=g&&""!==g,x=null!=u&&""!==u,A=null!=b&&""!==b,L=!(A||!y&&!E&&!v),S=k||x||A||L,C=L&&e.createElement(e.Fragment,null,y&&e.createElement("button",{type:"button",title:"Útil","aria-label":"Útil","aria-pressed":"up"===N,className:n("gyramais-ai-parecer__btn",{"gyramais-ai-parecer__btn--active":"up"===N}),onClick:()=>{f("up"),y()}},e.createElement(m,null)),E&&e.createElement("button",{type:"button",title:"Não útil","aria-label":"Não útil","aria-pressed":"down"===N,className:n("gyramais-ai-parecer__btn",{"gyramais-ai-parecer__btn--active":"down"===N}),onClick:()=>{f("down"),E()}},e.createElement(o,null)),v&&e.createElement("button",{type:"button",title:"Regenerar","aria-label":"Regenerar",className:"gyramais-ai-parecer__btn",onClick:v},e.createElement(p,null)));return e.createElement("div",{id:r,className:n("gyramais-ai-parecer",t)},e.createElement("div",{className:"gyramais-ai-parecer__header"},e.createElement("div",{className:"gyramais-ai-parecer__badge"},e.createElement("span",{className:"gyramais-ai-parecer__badge-icon"},"✦"),e.createElement("span",{className:"gyramais-ai-parecer__badge-label"},"Parecer GYRA+ IA")),(w||M)&&e.createElement("div",{className:"gyramais-ai-parecer__meta"},w&&e.createElement("span",{className:"gyramais-ai-parecer__score"},d,": ",e.createElement("strong",null,l)),M&&e.createElement("span",{className:n("gyramais-ai-parecer__verdict",`gyramais-ai-parecer__verdict--${i}`)},c))),e.createElement("div",{className:"gyramais-ai-parecer__body"},_),h?e.createElement("div",{className:"gyramais-ai-parecer__foot"},h):S&&e.createElement("div",{className:"gyramais-ai-parecer__foot"},k&&e.createElement("span",{className:"gyramais-ai-parecer__src"},e.createElement(s,null),g),x&&e.createElement("span",{className:"gyramais-ai-parecer__confidence"},"Confiança ",u),(A||L)&&e.createElement("div",{className:"gyramais-ai-parecer__actions"},A?b:C)))};d.Topic=i;export{d as AiParecer,i as AiParecerTopic};
|
|
7
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../node_modules/classnames/index.js","../../../src/components/AiParecer/AiParecer.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, { useState } from \"react\";\nimport classNames from \"classnames\";\nimport \"./index.css\";\n\nexport type AiParecerVerdictTone = \"success\" | \"warning\" | \"danger\" | \"info\";\n\ntype AiParecerProps = {\n id?: string;\n className?: string;\n /**\n * Chip de veredito exibido a direita do badge (ex: \"Risco médio\").\n * Opcional.\n */\n verdict?: React.ReactNode;\n verdictTone?: AiParecerVerdictTone;\n /**\n * Score (ex: nota GYRA+ IA) exibido como pill a esquerda do chip de\n * veredito. Aceita number ou node. Opcional.\n */\n score?: React.ReactNode;\n /** Rotulo do score. Default: \"Score GYRA+ IA\". */\n scoreLabel?: string;\n /**\n * Conteudo do parecer: tipicamente um ou mais `<AiParecer.Topic>`\n * (Resumo Executivo, Pontos de Atenção e Risco, etc).\n */\n children?: React.ReactNode;\n /**\n * Fontes consultadas, exibidas no rodape com um icone de base de dados\n * (ex: \"Receita Federal · Quod · Serasa\"). Opcional.\n */\n sources?: React.ReactNode;\n /**\n * Grau de confianca do parecer, exibido no rodape (ex: \"96%\" vira\n * \"Confiança 96%\"). Aceita number ou node. Opcional.\n */\n confidence?: React.ReactNode;\n /**\n * Callbacks de feedback. Quando algum e' passado, o rodape mostra os\n * botoes padrao (👍 / 👎 / regenerar) com icones SVG proprios — sem\n * depender de nenhuma fonte de icone externa. O estado de \"util/nao-util\"\n * fica destacado automaticamente.\n */\n onFeedbackUp?: () => void;\n onFeedbackDown?: () => void;\n onRegenerate?: () => void;\n /**\n * Acoes customizadas do rodape. Quando presente, SUBSTITUI os botoes de\n * feedback padrao. Use a classe `gyramais-ai-parecer__btn` pro estilo.\n */\n actions?: React.ReactNode;\n /**\n * Rodape totalmente customizado. Quando presente, substitui o rodape\n * padrao montado a partir de `sources` / `confidence` / acoes.\n */\n footer?: React.ReactNode;\n};\n\ntype AiParecerTopicProps = {\n className?: string;\n label: React.ReactNode;\n /** Icone a esquerda do topico (ex: <DescriptionOutlinedIcon />). */\n icon?: React.ReactNode;\n /** `warning` destaca o topico (fundo + icone em tom de alerta). */\n tone?: \"default\" | \"warning\";\n children?: React.ReactNode;\n};\n\nconst AiParecerTopic = ({\n className,\n label,\n icon,\n tone = \"default\",\n children,\n}: AiParecerTopicProps) => (\n <div\n className={classNames(\n \"gyramais-ai-parecer__topic\",\n `gyramais-ai-parecer__topic--${tone}`,\n className,\n )}\n >\n {icon && <div className=\"gyramais-ai-parecer__topic-icon\">{icon}</div>}\n <div className=\"gyramais-ai-parecer__topic-body\">\n <span className=\"gyramais-ai-parecer__topic-label\">{label}</span>\n <div className=\"gyramais-ai-parecer__topic-content\">\n {children ?? \"-\"}\n </div>\n </div>\n </div>\n);\n\n/** Icones SVG inline (lucide-style) — autocontidos, sem fonte externa. */\nconst iconProps = {\n width: 14,\n height: 14,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\" as const,\n strokeLinejoin: \"round\" as const,\n \"aria-hidden\": true,\n};\n\nconst DatabaseIcon = () => (\n <svg className=\"gyramais-ai-parecer__src-icon\" {...iconProps} width={12} height={12}>\n <ellipse cx=\"12\" cy=\"5\" rx=\"9\" ry=\"3\" />\n <path d=\"M3 5v14c0 1.66 4 3 9 3s9-1.34 9-3V5\" />\n <path d=\"M3 12c0 1.66 4 3 9 3s9-1.34 9-3\" />\n </svg>\n);\n\nconst ThumbsUpIcon = () => (\n <svg {...iconProps}>\n <path d=\"M7 10v12\" />\n <path d=\"M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z\" />\n </svg>\n);\n\nconst ThumbsDownIcon = () => (\n <svg {...iconProps}>\n <path d=\"M17 14V2\" />\n <path d=\"M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88Z\" />\n </svg>\n);\n\nconst RefreshIcon = () => (\n <svg {...iconProps}>\n <path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\" />\n <path d=\"M21 3v5h-5\" />\n <path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\" />\n <path d=\"M8 16H3v5\" />\n </svg>\n);\n\n/**\n * Faixa padrao \"Parecer GYRA+ IA\" usada em todas as seções de parecer\n * gerado por IA (analise financeira etc). Badge roxo com gradiente, label\n * em uppercase e chip de veredito opcional. O conteudo (topicos) vem como\n * children. Use `AiParecer.Topic` para padronizar cada bloco.\n */\nconst AiParecer = ({\n id,\n className,\n verdict,\n verdictTone = \"info\",\n score,\n scoreLabel = \"Score GYRA+ IA\",\n children,\n sources,\n confidence,\n onFeedbackUp,\n onFeedbackDown,\n onRegenerate,\n actions,\n footer,\n}: AiParecerProps) => {\n const [feedback, setFeedback] = useState<\"up\" | \"down\" | null>(null);\n\n const hasScore = score != null && score !== \"\";\n const hasVerdict = verdict != null && verdict !== \"\";\n const hasSources = sources != null && sources !== \"\";\n const hasConfidence = confidence != null && confidence !== \"\";\n const hasCustomActions = actions != null && actions !== \"\";\n const hasFeedback =\n !hasCustomActions &&\n (!!onFeedbackUp || !!onFeedbackDown || !!onRegenerate);\n const hasFooterContent =\n hasSources || hasConfidence || hasCustomActions || hasFeedback;\n\n const defaultActions = hasFeedback && (\n <>\n {onFeedbackUp && (\n <button\n type=\"button\"\n title=\"Útil\"\n aria-label=\"Útil\"\n aria-pressed={feedback === \"up\"}\n className={classNames(\"gyramais-ai-parecer__btn\", {\n \"gyramais-ai-parecer__btn--active\": feedback === \"up\",\n })}\n onClick={() => {\n setFeedback(\"up\");\n onFeedbackUp();\n }}\n >\n <ThumbsUpIcon />\n </button>\n )}\n {onFeedbackDown && (\n <button\n type=\"button\"\n title=\"Não útil\"\n aria-label=\"Não útil\"\n aria-pressed={feedback === \"down\"}\n className={classNames(\"gyramais-ai-parecer__btn\", {\n \"gyramais-ai-parecer__btn--active\": feedback === \"down\",\n })}\n onClick={() => {\n setFeedback(\"down\");\n onFeedbackDown();\n }}\n >\n <ThumbsDownIcon />\n </button>\n )}\n {onRegenerate && (\n <button\n type=\"button\"\n title=\"Regenerar\"\n aria-label=\"Regenerar\"\n className=\"gyramais-ai-parecer__btn\"\n onClick={onRegenerate}\n >\n <RefreshIcon />\n </button>\n )}\n </>\n );\n\n return (\n <div id={id} className={classNames(\"gyramais-ai-parecer\", className)}>\n <div className=\"gyramais-ai-parecer__header\">\n <div className=\"gyramais-ai-parecer__badge\">\n <span className=\"gyramais-ai-parecer__badge-icon\">✦</span>\n <span className=\"gyramais-ai-parecer__badge-label\">\n Parecer GYRA+ IA\n </span>\n </div>\n {(hasScore || hasVerdict) && (\n <div className=\"gyramais-ai-parecer__meta\">\n {hasScore && (\n <span className=\"gyramais-ai-parecer__score\">\n {scoreLabel}: <strong>{score}</strong>\n </span>\n )}\n {hasVerdict && (\n <span\n className={classNames(\n \"gyramais-ai-parecer__verdict\",\n `gyramais-ai-parecer__verdict--${verdictTone}`,\n )}\n >\n {verdict}\n </span>\n )}\n </div>\n )}\n </div>\n <div className=\"gyramais-ai-parecer__body\">{children}</div>\n {footer ? (\n <div className=\"gyramais-ai-parecer__foot\">{footer}</div>\n ) : (\n hasFooterContent && (\n <div className=\"gyramais-ai-parecer__foot\">\n {hasSources && (\n <span className=\"gyramais-ai-parecer__src\">\n <DatabaseIcon />\n {sources}\n </span>\n )}\n {hasConfidence && (\n <span className=\"gyramais-ai-parecer__confidence\">\n Confiança {confidence}\n </span>\n )}\n {(hasCustomActions || hasFeedback) && (\n <div className=\"gyramais-ai-parecer__actions\">\n {hasCustomActions ? actions : defaultActions}\n </div>\n )}\n </div>\n )\n )}\n </div>\n );\n};\n\nAiParecer.Topic = AiParecerTopic;\n\nexport { AiParecer, AiParecerTopic };\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","AiParecerTopic","className","label","icon","tone","children","React","createElement","iconProps","width","height","viewBox","fill","stroke","strokeWidth","strokeLinecap","strokeLinejoin","DatabaseIcon","cx","cy","rx","ry","d","ThumbsUpIcon","ThumbsDownIcon","RefreshIcon","AiParecer","id","verdict","verdictTone","score","scoreLabel","sources","confidence","onFeedbackUp","onFeedbackDown","onRegenerate","actions","footer","feedback","setFeedback","useState","hasScore","hasVerdict","hasSources","hasConfidence","hasCustomActions","hasFeedback","hasFooterContent","defaultActions","Fragment","type","title","onClick","Topic"],"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,sBC6DA,MAAMuB,EAAiB,EACrBC,YACAC,QACAC,OACAC,OAAO,UACPC,cAEAC,EAAAC,cAAA,MAAA,CACEN,UAAWxB,EACT,6BACA,+BAA+B2B,IAC/BH,IAGDE,GAAQG,EAAAC,cAAA,MAAA,CAAKN,UAAU,mCAAmCE,GAC3DG,EAAAC,cAAA,MAAA,CAAKN,UAAU,mCACbK,EAAAC,cAAA,OAAA,CAAMN,UAAU,oCAAoCC,GACpDI,EAAAC,cAAA,MAAA,CAAKN,UAAU,sCACZI,GAAY,OAOfG,EAAY,CAChBC,MAAO,GACPC,OAAQ,GACRC,QAAS,YACTC,KAAM,OACNC,OAAQ,eACRC,YAAa,EACbC,cAAe,QACfC,eAAgB,QAChB,eAAe,GAGXC,EAAe,IACnBX,uBAAKL,UAAU,mCAAoCO,EAAWC,MAAO,GAAIC,OAAQ,IAC/EJ,EAAAC,cAAA,UAAA,CAASW,GAAG,KAAKC,GAAG,IAAIC,GAAG,IAAIC,GAAG,MAClCf,EAAAC,cAAA,OAAA,CAAMe,EAAE,wCACRhB,EAAAC,cAAA,OAAA,CAAMe,EAAE,qCAINC,EAAe,IACnBjB,0BAASE,GACPF,EAAAC,cAAA,OAAA,CAAMe,EAAE,aACRhB,EAAAC,cAAA,OAAA,CAAMe,EAAE,8JAINE,EAAiB,IACrBlB,0BAASE,GACPF,EAAAC,cAAA,OAAA,CAAMe,EAAE,aACRhB,EAAAC,cAAA,OAAA,CAAMe,EAAE,6JAING,EAAc,IAClBnB,0BAASE,GACPF,EAAAC,cAAA,OAAA,CAAMe,EAAE,uDACRhB,EAAAC,cAAA,OAAA,CAAMe,EAAE,eACRhB,EAAAC,cAAA,OAAA,CAAMe,EAAE,wDACRhB,EAAAC,cAAA,OAAA,CAAMe,EAAE,eAUNI,EAAY,EAChBC,KACA1B,YACA2B,UACAC,cAAc,OACdC,QACAC,aAAa,iBACb1B,WACA2B,UACAC,aACAC,eACAC,iBACAC,eACAC,UACAC,aAEA,MAAOC,EAAUC,GAAeC,EAA+B,MAEzDC,EAAoB,MAATZ,GAA2B,KAAVA,EAC5Ba,EAAwB,MAAXf,GAA+B,KAAZA,EAChCgB,EAAwB,MAAXZ,GAA+B,KAAZA,EAChCa,EAA8B,MAAdZ,GAAqC,KAAfA,EACtCa,EAA8B,MAAXT,GAA+B,KAAZA,EACtCU,IACHD,IACEZ,IAAkBC,IAAoBC,GACrCY,EACJJ,GAAcC,GAAiBC,GAAoBC,EAE/CE,EAAiBF,GACrBzC,EAAAC,cAAAD,EAAA4C,SAAA,KACGhB,GACC5B,EAAAC,cAAA,SAAA,CACE4C,KAAK,SACLC,MAAM,OAAM,aACD,OAAM,eACU,OAAbb,EACdtC,UAAWxB,EAAW,2BAA4B,CAChD,mCAAiD,OAAb8D,IAEtCc,QAAS,KACPb,EAAY,MACZN,MAGF5B,EAAAC,cAACgB,EAAY,OAGhBY,GACC7B,EAAAC,cAAA,SAAA,CACE4C,KAAK,SACLC,MAAM,WAAU,aACL,WAAU,eACM,SAAbb,EACdtC,UAAWxB,EAAW,2BAA4B,CAChD,mCAAiD,SAAb8D,IAEtCc,QAAS,KACPb,EAAY,QACZL,MAGF7B,EAAAC,cAACiB,EAAc,OAGlBY,GACC9B,EAAAC,cAAA,SAAA,CACE4C,KAAK,SACLC,MAAM,YAAW,aACN,YACXnD,UAAU,2BACVoD,QAASjB,GAET9B,EAAAC,cAACkB,EAAW,QAMpB,OACEnB,EAAAC,cAAA,MAAA,CAAKoB,GAAIA,EAAI1B,UAAWxB,EAAW,sBAAuBwB,IACxDK,EAAAC,cAAA,MAAA,CAAKN,UAAU,+BACbK,EAAAC,cAAA,MAAA,CAAKN,UAAU,8BACbK,EAAAC,cAAA,OAAA,CAAMN,UAAU,mCAAiC,KACjDK,EAAAC,cAAA,OAAA,CAAMN,UAAU,oCAAkC,sBAIlDyC,GAAYC,IACZrC,EAAAC,cAAA,MAAA,CAAKN,UAAU,6BACZyC,GACCpC,EAAAC,cAAA,OAAA,CAAMN,UAAU,8BACb8B,OAAazB,EAAAC,cAAA,SAAA,KAASuB,IAG1Ba,GACCrC,EAAAC,cAAA,OAAA,CACEN,UAAWxB,EACT,+BACA,iCAAiCoD,MAGlCD,KAMXtB,EAAAC,cAAA,MAAA,CAAKN,UAAU,6BAA6BI,GAC3CiC,EACChC,uBAAKL,UAAU,6BAA6BqC,GAE5CU,GACE1C,EAAAC,cAAA,MAAA,CAAKN,UAAU,6BACZ2C,GACCtC,EAAAC,cAAA,OAAA,CAAMN,UAAU,4BACdK,EAAAC,cAACU,EAAY,MACZe,GAGJa,GACCvC,EAAAC,cAAA,OAAA,CAAMN,UAAU,gDACHgC,IAGba,GAAoBC,IACpBzC,EAAAC,cAAA,MAAA,CAAKN,UAAU,gCACZ6C,EAAmBT,EAAUY,MAU9CvB,EAAU4B,MAAQtD","x_google_ignoreList":[0]}
|