@gyramais/gyra-design 0.2.1 → 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.
Files changed (44) hide show
  1. package/dist/components/Card/Card.d.ts +8 -1
  2. package/dist/components/Card/index.js +6 -6
  3. package/dist/components/Card/index.js.map +1 -1
  4. package/dist/components/Filter/index.js +6 -6
  5. package/dist/components/Filter/index.js.map +1 -1
  6. package/dist/components/FloatingCard/index.js +7 -7
  7. package/dist/components/FloatingCard/index.js.map +1 -1
  8. package/dist/components/Input/index.js +1 -1
  9. package/dist/components/Input/index.js.map +1 -1
  10. package/dist/components/MultiSelectPicker/MultiSelectPicker.d.ts +0 -3
  11. package/dist/components/MultiSelectPicker/index.js +1 -1
  12. package/dist/components/MultiSelectPicker/index.js.map +1 -1
  13. package/dist/components/RichInput/index.js +3 -3
  14. package/dist/components/RichInput/index.js.map +1 -1
  15. package/dist/components/SelectTree/index.js +1 -1
  16. package/dist/components/SelectTree/index.js.map +1 -1
  17. package/dist/components/TourGuide/TourGuide.d.ts +39 -0
  18. package/dist/components/TourGuide/index.d.ts +1 -0
  19. package/dist/components/TourGuide/index.js +7 -0
  20. package/dist/components/TourGuide/index.js.map +1 -0
  21. package/dist/index.css +184 -220
  22. package/package.json +1 -1
  23. package/dist/components/AiParecer/AiParecer.d.ts +0 -75
  24. package/dist/components/AiParecer/index.d.ts +0 -1
  25. package/dist/components/AiParecer/index.js +0 -7
  26. package/dist/components/AiParecer/index.js.map +0 -1
  27. package/dist/components/Email/Email.d.ts +0 -25
  28. package/dist/components/Email/index.d.ts +0 -2
  29. package/dist/components/Email/index.js +0 -2
  30. package/dist/components/Email/index.js.map +0 -1
  31. package/dist/components/EmailBalanceSheetFinalized/EmailBalanceSheetFinalized.d.ts +0 -18
  32. package/dist/components/EmailBalanceSheetFinalized/index.d.ts +0 -2
  33. package/dist/components/EmailBalanceSheetFinalized/index.js +0 -2
  34. package/dist/components/EmailBalanceSheetFinalized/index.js.map +0 -1
  35. package/dist/emails/balance-sheet-finalized/index.d.ts +0 -33
  36. package/dist/emails/balance-sheet-finalized/index.esm.js +0 -2
  37. package/dist/emails/balance-sheet-finalized/index.esm.js.map +0 -1
  38. package/dist/emails/balance-sheet-finalized/index.js +0 -2
  39. package/dist/emails/balance-sheet-finalized/index.js.map +0 -1
  40. package/dist/emails/email/index.d.ts +0 -94
  41. package/dist/emails/email/index.esm.js +0 -2
  42. package/dist/emails/email/index.esm.js.map +0 -1
  43. package/dist/emails/email/index.js +0 -2
  44. 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
  }
@@ -920,6 +920,9 @@ video {
920
920
  --tw-text-opacity: 1;
921
921
  color: rgb(59 57 64 / var(--tw-text-opacity, 1));
922
922
  }
923
+ .text-\[var\(--color-text-secondary\)\] {
924
+ color: var(--color-text-secondary);
925
+ }
923
926
  .text-\[var\(--primary-button-color\)\] {
924
927
  color: var(--primary-button-color);
925
928
  }
@@ -950,9 +953,6 @@ video {
950
953
  outline: 2px solid transparent;
951
954
  outline-offset: 2px;
952
955
  }
953
- .outline {
954
- outline-style: solid;
955
- }
956
956
  .blur {
957
957
  --tw-blur: blur(8px);
958
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);
@@ -3881,204 +3881,6 @@ h6 {
3881
3881
  stroke: transparent;
3882
3882
  }
3883
3883
 
3884
- .gyramais-ai-parecer {
3885
- background: linear-gradient(
3886
- 180deg,
3887
- rgba(124, 78, 255, 0.045) 0%,
3888
- rgba(18, 86, 255, 0.035) 100%
3889
- );
3890
- border: 1px solid rgba(124, 78, 255, 0.18);
3891
- border-radius: 12px;
3892
- padding: 14px 16px;
3893
- }
3894
-
3895
- .gyramais-ai-parecer__header {
3896
- display: flex;
3897
- align-items: center;
3898
- justify-content: space-between;
3899
- gap: 8px;
3900
- }
3901
-
3902
- .gyramais-ai-parecer__badge {
3903
- display: inline-flex;
3904
- align-items: center;
3905
- gap: 8px;
3906
- }
3907
-
3908
- .gyramais-ai-parecer__badge-icon {
3909
- width: 22px;
3910
- height: 22px;
3911
- border-radius: 50%;
3912
- background: linear-gradient(135deg, #7c4eff, #1256ff);
3913
- color: #fff;
3914
- display: inline-flex;
3915
- align-items: center;
3916
- justify-content: center;
3917
- font-size: 13px;
3918
- line-height: 1;
3919
- }
3920
-
3921
- .gyramais-ai-parecer__badge-label {
3922
- font-size: 11px;
3923
- font-weight: 700;
3924
- letter-spacing: 0.06em;
3925
- text-transform: uppercase;
3926
- color: #6635e0;
3927
- }
3928
-
3929
- .gyramais-ai-parecer__meta {
3930
- display: inline-flex;
3931
- align-items: center;
3932
- gap: 8px;
3933
- flex-wrap: wrap;
3934
- justify-content: flex-end;
3935
- }
3936
-
3937
- .gyramais-ai-parecer__score {
3938
- display: inline-flex;
3939
- align-items: center;
3940
- gap: 4px;
3941
- font-size: 11px;
3942
- font-weight: 600;
3943
- padding: 4px 10px;
3944
- border-radius: 999px;
3945
- white-space: nowrap;
3946
- background: rgba(18, 86, 255, 0.1);
3947
- color: #1256ff;
3948
- }
3949
-
3950
- .gyramais-ai-parecer__score strong {
3951
- font-weight: 700;
3952
- }
3953
-
3954
- .gyramais-ai-parecer__verdict {
3955
- font-size: 11px;
3956
- font-weight: 700;
3957
- letter-spacing: 0.04em;
3958
- text-transform: uppercase;
3959
- padding: 4px 10px;
3960
- border-radius: 999px;
3961
- white-space: nowrap;
3962
- }
3963
-
3964
- .gyramais-ai-parecer__verdict--info {
3965
- background: rgba(124, 78, 255, 0.12);
3966
- color: #6635e0;
3967
- }
3968
-
3969
- .gyramais-ai-parecer__verdict--success {
3970
- background: rgba(52, 199, 89, 0.18);
3971
- color: #1a7d37;
3972
- }
3973
-
3974
- .gyramais-ai-parecer__verdict--warning {
3975
- background: rgba(255, 159, 10, 0.2);
3976
- color: #946200;
3977
- }
3978
-
3979
- .gyramais-ai-parecer__verdict--danger {
3980
- background: rgba(255, 59, 48, 0.18);
3981
- color: #c93430;
3982
- }
3983
-
3984
- .gyramais-ai-parecer__body {
3985
- margin-top: 12px;
3986
- display: flex;
3987
- flex-direction: column;
3988
- gap: 14px;
3989
- }
3990
-
3991
- .gyramais-ai-parecer__topic {
3992
- display: flex;
3993
- gap: 12px;
3994
- align-items: flex-start;
3995
- }
3996
-
3997
- .gyramais-ai-parecer__topic-icon {
3998
- flex-shrink: 0;
3999
- }
4000
-
4001
- .gyramais-ai-parecer__topic-body {
4002
- width: 100%;
4003
- }
4004
-
4005
- .gyramais-ai-parecer__topic-label {
4006
- display: block;
4007
- font-weight: 600;
4008
- font-size: 14px;
4009
- color: var(--dark-text-color, #1f2430);
4010
- }
4011
-
4012
- .gyramais-ai-parecer__topic-content {
4013
- color: #626976;
4014
- font-size: 14px;
4015
- line-height: 1.55;
4016
- white-space: pre-line;
4017
- margin-top: 2px;
4018
- }
4019
-
4020
- .gyramais-ai-parecer__foot {
4021
- margin-top: 12px;
4022
- padding-top: 10px;
4023
- border-top: 1px dashed rgba(124, 78, 255, 0.18);
4024
- display: flex;
4025
- align-items: center;
4026
- gap: 12px;
4027
- flex-wrap: wrap;
4028
- font-size: 11px;
4029
- color: #8a8f9c;
4030
- }
4031
-
4032
- .gyramais-ai-parecer__src {
4033
- display: inline-flex;
4034
- align-items: center;
4035
- gap: 4px;
4036
- }
4037
-
4038
- .gyramais-ai-parecer__src-icon {
4039
- flex-shrink: 0;
4040
- }
4041
-
4042
- .gyramais-ai-parecer__actions {
4043
- margin-left: auto;
4044
- display: inline-flex;
4045
- align-items: center;
4046
- gap: 4px;
4047
- }
4048
-
4049
- .gyramais-ai-parecer__btn {
4050
- width: 22px;
4051
- height: 22px;
4052
- border: none;
4053
- background: transparent;
4054
- cursor: pointer;
4055
- border-radius: 6px;
4056
- color: #8a8f9c;
4057
- display: inline-flex;
4058
- align-items: center;
4059
- justify-content: center;
4060
- transition:
4061
- background 0.2s cubic-bezier(0.25, 0.1, 0.25, 1),
4062
- color 0.2s cubic-bezier(0.25, 0.1, 0.25, 1);
4063
- }
4064
-
4065
- .gyramais-ai-parecer__btn:hover {
4066
- background: rgba(124, 78, 255, 0.1);
4067
- color: #6635e0;
4068
- }
4069
-
4070
- .gyramais-ai-parecer__btn--active {
4071
- background: rgba(124, 78, 255, 0.14);
4072
- color: #6635e0;
4073
- }
4074
-
4075
- .gyramais-ai-parecer__btn svg,
4076
- .gyramais-ai-parecer__btn .material-symbols-outlined {
4077
- font-size: 14px;
4078
- width: 14px;
4079
- height: 14px;
4080
- }
4081
-
4082
3884
  .gyramais-avatar {
4083
3885
  display: flex;
4084
3886
  align-items: center;
@@ -4314,6 +4116,23 @@ h6 {
4314
4116
  display: flex;
4315
4117
  flex-direction: column;
4316
4118
  }
4119
+ /* Variante com mídia (ícone/badge): mídia à esquerda, texto à direita. */
4120
+ .gyramais-card .gyramais-card-header-left.with-media {
4121
+ flex-direction: row;
4122
+ align-items: center;
4123
+ gap: 0.75rem;
4124
+ }
4125
+ .gyramais-card .gyramais-card-header-media {
4126
+ display: flex;
4127
+ flex-shrink: 0;
4128
+ align-items: center;
4129
+ justify-content: center;
4130
+ }
4131
+ .gyramais-card .gyramais-card-header-text {
4132
+ display: flex;
4133
+ min-width: 0px;
4134
+ flex-direction: column;
4135
+ }
4317
4136
  .gyramais-card:not(.gyramais-card-disabled)
4318
4137
  .gyramais-card-header-left.with-collapse {
4319
4138
  cursor: pointer;
@@ -9206,22 +9025,6 @@ h6 {
9206
9025
  color: var(--color-text-tertiary);
9207
9026
  }
9208
9027
 
9209
- /* ── Group (categorias: Cargos, Pessoas, ...) ─────────────────────── */
9210
- .gyramais-multi-select-picker-group + .gyramais-multi-select-picker-group {
9211
- margin-top: 2px;
9212
- }
9213
- .gyramais-multi-select-picker-group-head {
9214
- padding-left: 14px;
9215
- padding-right: 14px;
9216
- padding-top: 10px;
9217
- padding-bottom: 4px;
9218
- font-size: 10.5px;
9219
- font-weight: 700;
9220
- text-transform: uppercase;
9221
- letter-spacing: 0.07em;
9222
- color: var(--color-text-tertiary);
9223
- }
9224
-
9225
9028
  /* ── Footer overrides ─────────────────────────────────────────────── */
9226
9029
  .gyramais-multi-select-picker-count {
9227
9030
  font-family: var(--font-mono);
@@ -10519,3 +10322,164 @@ h6 {
10519
10322
  .gyramais-step-sub-title {
10520
10323
  font-size: 0.875rem;
10521
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,6 +1,6 @@
1
1
  {
2
2
  "name": "@gyramais/gyra-design",
3
- "version": "0.2.1",
3
+ "version": "0.2.21",
4
4
  "description": "Gyramais Design System",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.esm.js",
@@ -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