@credithub/harlan-components 1.102.0 → 1.103.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ interface PrintButtonProps {
3
+ onClick?: () => void;
4
+ isLoading?: boolean;
5
+ tooltipMessage?: string;
6
+ }
7
+ declare const PrintButton: React.FC<PrintButtonProps>;
8
+ export default PrintButton;
@@ -0,0 +1,39 @@
1
+ var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {
2
+ if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
3
+ return cooked;
4
+ };
5
+ import BtnWrapper from '../../assets/btn/btnWrapper';
6
+ import PrintIcon from '../../assets/btn/printIcon';
7
+ import Tooltip from '../../components/common/tooltip';
8
+ import React from 'react';
9
+ import styled, { keyframes } from 'styled-components';
10
+ // Animação de rotação do spinner
11
+ var spin = keyframes(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"], ["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"])));
12
+ // Container para garantir tamanho fixo e evitar layout shift
13
+ var IconContainer = styled.div(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n display: flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n flex-shrink: 0;\n"], ["\n display: flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n flex-shrink: 0;\n"])));
14
+ // Spinner estilizado com tamanho similar ao PrintIcon
15
+ var Spinner = styled.div(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n border: 2px solid rgba(0, 0, 0, 0.1);\n border-left-color: ", ";\n border-radius: 50%;\n width: 16px;\n height: 16px;\n animation: ", " 0.8s linear infinite;\n"], ["\n border: 2px solid rgba(0, 0, 0, 0.1);\n border-left-color: ", ";\n border-radius: 50%;\n width: 16px;\n height: 16px;\n animation: ", " 0.8s linear infinite;\n"])), function (_a) {
16
+ var theme = _a.theme;
17
+ return theme.colors.cinzaEscuro;
18
+ }, spin);
19
+ var TooltipWrapper = styled.div(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n /* Oculta o tooltip na impress\u00E3o */\n @media print {\n display: none !important;\n }\n"], ["\n /* Oculta o tooltip na impress\u00E3o */\n @media print {\n display: none !important;\n }\n"])));
20
+ var TooltipContent = styled.div(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n display: flex;\n flex-direction: column;\n gap: 8px;\n"], ["\n display: flex;\n flex-direction: column;\n gap: 8px;\n"])));
21
+ var TooltipTitle = styled.div(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n font-weight: 600;\n font-size: 14px;\n color: ", ";\n"], ["\n font-weight: 600;\n font-size: 14px;\n color: ", ";\n"])), function (_a) {
22
+ var theme = _a.theme;
23
+ return theme.colors.azulCredithub;
24
+ });
25
+ var TooltipMessage = styled.div(templateObject_7 || (templateObject_7 = __makeTemplateObject(["\n font-size: 13px;\n line-height: 1.4;\n"], ["\n font-size: 13px;\n line-height: 1.4;\n"])));
26
+ var PrintButton = function (_a) {
27
+ var onClick = _a.onClick, _b = _a.isLoading, isLoading = _b === void 0 ? false : _b, _c = _a.tooltipMessage, tooltipMessage = _c === void 0 ? 'Aguardando consultas finalizarem...' : _c;
28
+ var button = (React.createElement(BtnWrapper, { onClick: !isLoading ? onClick : undefined },
29
+ React.createElement(IconContainer, null, isLoading ? React.createElement(Spinner, null) : React.createElement(PrintIcon, null))));
30
+ if (isLoading) {
31
+ return (React.createElement(TooltipWrapper, null,
32
+ React.createElement(Tooltip, { placement: "left", content: React.createElement(TooltipContent, null,
33
+ React.createElement(TooltipTitle, null, "\u23F3 Aguardando estabiliza\u00E7\u00E3o"),
34
+ React.createElement(TooltipMessage, null, tooltipMessage)), icon: button })));
35
+ }
36
+ return button;
37
+ };
38
+ export default PrintButton;
39
+ var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7;
@@ -27,6 +27,7 @@ var __rest = (this && this.__rest) || function (s, e) {
27
27
  import ConsultaSimplesIcon from '../../assets/icones/consultaSimples';
28
28
  import { useGlobalData } from '../../contexts/globalDataContext';
29
29
  import { usePostHog } from '../../contexts/PostHogContext';
30
+ import usePrintWhenStable from '../../hooks/usePrintWhenStable';
30
31
  import theme from '../../styles/theme';
31
32
  import { formatMoney } from '../../utils/number';
32
33
  import { formatDocument } from '../../utils/string';
@@ -43,10 +44,26 @@ var spin = keyframes(templateObject_1 || (templateObject_1 = __makeTemplateObjec
43
44
  var Spinner = styled.div(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n border: 1px solid rgba(0, 0, 0, 0.1);\n border-left-color: #222;\n border-radius: 50%;\n width: 9px;\n height: 9px;\n animation: ", " 1s linear infinite;\n margin-right: 8px;\n display: inline-block;\n vertical-align: middle;\n"], ["\n border: 1px solid rgba(0, 0, 0, 0.1);\n border-left-color: #222;\n border-radius: 50%;\n width: 9px;\n height: 9px;\n animation: ", " 1s linear infinite;\n margin-right: 8px;\n display: inline-block;\n vertical-align: middle;\n"])), spin);
44
45
  var ConsultaSimplesSection = function (_a) {
45
46
  var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
46
- var documento = _a.documento, children = _a.children, onClose = _a.onClose, isFinancial = _a.isFinancial, ctime = _a.ctime, printMode = _a.printMode, rest = __rest(_a, ["documento", "children", "onClose", "isFinancial", "ctime", "printMode"]);
47
+ var documento = _a.documento, children = _a.children, onClose = _a.onClose, onClickPrint = _a.onClickPrint, isFinancial = _a.isFinancial, ctime = _a.ctime, printMode = _a.printMode, rest = __rest(_a, ["documento", "children", "onClose", "onClickPrint", "isFinancial", "ctime", "printMode"]);
47
48
  var ctx = useContext(Queries.Finder);
48
49
  var data = useGlobalData().data;
49
50
  var posthog = usePostHog().posthog;
51
+ // Hook para observar mutações no DOM e imprimir quando estável
52
+ var _s = usePrintWhenStable({
53
+ debounceTime: 500,
54
+ maxWaitTime: 30000,
55
+ onStart: function () {
56
+ console.log('ConsultaSimples: Aguardando DOM estabilizar para impressão...');
57
+ },
58
+ onStable: function () {
59
+ console.log('ConsultaSimples: DOM estável, iniciando impressão');
60
+ onClickPrint === null || onClickPrint === void 0 ? void 0 : onClickPrint();
61
+ }
62
+ }), printWhenStable = _s.printWhenStable, isWaiting = _s.isWaiting;
63
+ // Handler que usa o observer ao invés de imprimir diretamente
64
+ var handlePrint = function () {
65
+ printWhenStable();
66
+ };
50
67
  // Extraindo valores do globalData
51
68
  var receitaStatus = ((_c = (_b = data.dossie) === null || _b === void 0 ? void 0 : _b.summary) === null || _c === void 0 ? void 0 : _c.receitaStatus) &&
52
69
  ['ATIVA', 'REGULAR'].indexOf(data.dossie.summary.receitaStatus) === -1
@@ -133,7 +150,7 @@ var ConsultaSimplesSection = function (_a) {
133
150
  }); })
134
151
  });
135
152
  }, [posthog, pendencias]);
136
- return (React.createElement(Section, __assign({ title: "Consulta Simples", subtitle: "Consulta de informa\u00E7\u00F5es do documento.", description: React.createElement(React.Fragment, null,
153
+ return (React.createElement(Section, __assign({ title: "Consulta Simples", subtitle: "Consulta de informa\u00E7\u00F5es do documento.", onClickPrint: handlePrint, isPrintLoading: isWaiting, printLoadingMessage: "O sistema est\u00E1 verificando se todas as consultas foram conclu\u00EDdas. Por favor, aguarde...", description: React.createElement(React.Fragment, null,
137
154
  ctimeDate ? (React.createElement(StatusMessage, { type: "warning" },
138
155
  React.createElement(WarningCircle, { weight: "fill", size: 18, color: theme.colors.cinzaEscuro, style: { marginRight: 6, verticalAlign: 'text-bottom' } }),
139
156
  "Informa\u00E7\u00F5es referem-se a",
@@ -8,6 +8,8 @@ export interface SectionProps extends React.PropsWithChildren<{
8
8
  contentClassName?: string;
9
9
  ctx?: RequestContext<any>;
10
10
  printMode?: boolean;
11
+ isPrintLoading?: boolean;
12
+ printLoadingMessage?: string;
11
13
  } & HeaderProps> {
12
14
  }
13
15
  declare const Section: React.FC<SectionProps>;
@@ -7,7 +7,7 @@ import BtnWrapper from '../../assets/btn/btnWrapper';
7
7
  import ChevronDown from '../../assets/btn/chevronDown';
8
8
  import ChevronUp from '../../assets/btn/chevronUp';
9
9
  import CloseIcon from '../../assets/btn/closeIcon';
10
- import PrintIcon from '../../assets/btn/printIcon';
10
+ import PrintButton from '../../components/common/printButton';
11
11
  import useToggle from '../../hooks/useToggle';
12
12
  import classNames from 'classnames';
13
13
  import React from 'react';
@@ -16,14 +16,13 @@ import Header from './header';
16
16
  var SectionContaner = styled.section(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n @media screen {\n background-color: rgb(239, 239, 239);\n }\n page-break-before: avoid;\n page-break-after: avoid;\n page-break-inside: avoid;\n"], ["\n @media screen {\n background-color: rgb(239, 239, 239);\n }\n page-break-before: avoid;\n page-break-after: avoid;\n page-break-inside: avoid;\n"])));
17
17
  var ResultContainer = styled.div(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n display: ", ";\n position: relative;\n margin-top: 20px;\n flex-direction: column;\n row-gap: 20px;\n @media screen {\n background-color: #efefef;\n }\n"], ["\n display: ", ";\n position: relative;\n margin-top: 20px;\n flex-direction: column;\n row-gap: 20px;\n @media screen {\n background-color: #efefef;\n }\n"])), function (props) { return (props.hide ? 'none' : 'flex'); });
18
18
  var Section = function (_a) {
19
- var title = _a.title, subtitle = _a.subtitle, description = _a.description, _b = _a.minimized, minimized = _b === void 0 ? false : _b, onClose = _a.onClose, variant = _a.variant, loadingProps = _a.loadingProps, icon = _a.icon, actions = _a.actions, children = _a.children, onClickPrint = _a.onClickPrint, className = _a.className, contentClassName = _a.contentClassName, _c = _a.printMode, printMode = _c === void 0 ? false : _c;
20
- var _d = useToggle(!minimized), isOpen = _d[0], toggleOpen = _d[1];
19
+ var title = _a.title, subtitle = _a.subtitle, description = _a.description, _b = _a.minimized, minimized = _b === void 0 ? false : _b, onClose = _a.onClose, variant = _a.variant, loadingProps = _a.loadingProps, icon = _a.icon, actions = _a.actions, children = _a.children, onClickPrint = _a.onClickPrint, className = _a.className, contentClassName = _a.contentClassName, _c = _a.printMode, printMode = _c === void 0 ? false : _c, _d = _a.isPrintLoading, isPrintLoading = _d === void 0 ? false : _d, printLoadingMessage = _a.printLoadingMessage;
20
+ var _e = useToggle(!minimized), isOpen = _e[0], toggleOpen = _e[1];
21
21
  var sectionClass = classNames(className);
22
22
  var sectionContentClass = classNames(contentClassName);
23
23
  return (React.createElement(SectionContaner, { className: sectionClass },
24
24
  React.createElement(Header, { title: title, subtitle: subtitle, description: description, loadingProps: loadingProps, icon: icon, variant: variant, actions: !printMode ? (React.createElement(React.Fragment, null,
25
- React.createElement(BtnWrapper, null,
26
- React.createElement(PrintIcon, { onClick: onClickPrint })),
25
+ React.createElement(PrintButton, { onClick: onClickPrint, isLoading: isPrintLoading, tooltipMessage: printLoadingMessage }),
27
26
  children && (React.createElement(BtnWrapper, { hidden: variant === 'loading', onClick: toggleOpen }, isOpen ? React.createElement(ChevronUp, null) : React.createElement(ChevronDown, null))),
28
27
  onClose && (React.createElement(BtnWrapper, { onClick: onClose },
29
28
  React.createElement(CloseIcon, null))),
@@ -0,0 +1,44 @@
1
+ interface UsePrintWhenStableOptions {
2
+ /**
3
+ * Tempo em ms para considerar o DOM estável (sem mutações)
4
+ * @default 500
5
+ */
6
+ debounceTime?: number;
7
+ /**
8
+ * Elemento raiz para observar (se não fornecido, usa document.body)
9
+ */
10
+ rootElement?: HTMLElement | null;
11
+ /**
12
+ * Callback executado quando o DOM está estável e pronto para impressão
13
+ */
14
+ onStable?: () => void;
15
+ /**
16
+ * Callback executado ao iniciar a observação
17
+ */
18
+ onStart?: () => void;
19
+ /**
20
+ * Tempo máximo de espera em ms antes de forçar a impressão
21
+ * @default 10000 (10 segundos)
22
+ */
23
+ maxWaitTime?: number;
24
+ }
25
+ /**
26
+ * Hook que usa MutationObserver para detectar quando o DOM está estável
27
+ * e então executa a impressão. Isso garante que todos os dados foram carregados
28
+ * e renderizados antes de gerar o PDF.
29
+ */
30
+ export declare const usePrintWhenStable: (options?: UsePrintWhenStableOptions) => {
31
+ /**
32
+ * Inicia a observação do DOM e imprime quando estável
33
+ */
34
+ printWhenStable: () => void;
35
+ /**
36
+ * Para a observação e limpa os timers
37
+ */
38
+ cancel: () => void;
39
+ /**
40
+ * Indica se está aguardando o DOM estabilizar
41
+ */
42
+ isWaiting: boolean;
43
+ };
44
+ export default usePrintWhenStable;
@@ -0,0 +1,92 @@
1
+ import { useCallback, useRef, useState } from 'react';
2
+ /**
3
+ * Hook que usa MutationObserver para detectar quando o DOM está estável
4
+ * e então executa a impressão. Isso garante que todos os dados foram carregados
5
+ * e renderizados antes de gerar o PDF.
6
+ */
7
+ export var usePrintWhenStable = function (options) {
8
+ if (options === void 0) { options = {}; }
9
+ var _a = options.debounceTime, debounceTime = _a === void 0 ? 500 : _a, _b = options.rootElement, rootElement = _b === void 0 ? null : _b, onStable = options.onStable, onStart = options.onStart, _c = options.maxWaitTime, maxWaitTime = _c === void 0 ? 10000 : _c;
10
+ var observerRef = useRef(null);
11
+ var timeoutRef = useRef(null);
12
+ var maxWaitTimeoutRef = useRef(null);
13
+ var _d = useState(false), isWaiting = _d[0], setIsWaiting = _d[1];
14
+ var cleanup = useCallback(function () {
15
+ if (observerRef.current) {
16
+ observerRef.current.disconnect();
17
+ observerRef.current = null;
18
+ }
19
+ if (timeoutRef.current) {
20
+ clearTimeout(timeoutRef.current);
21
+ timeoutRef.current = null;
22
+ }
23
+ if (maxWaitTimeoutRef.current) {
24
+ clearTimeout(maxWaitTimeoutRef.current);
25
+ maxWaitTimeoutRef.current = null;
26
+ }
27
+ setIsWaiting(false);
28
+ }, []);
29
+ var triggerPrint = useCallback(function () {
30
+ cleanup();
31
+ onStable === null || onStable === void 0 ? void 0 : onStable();
32
+ window.print();
33
+ }, [cleanup, onStable]);
34
+ var startObserving = useCallback(function () {
35
+ // Limpa observadores anteriores
36
+ cleanup();
37
+ // Define estado de aguardando
38
+ setIsWaiting(true);
39
+ // Callback ao iniciar
40
+ onStart === null || onStart === void 0 ? void 0 : onStart();
41
+ var targetElement = rootElement || document.body;
42
+ if (!targetElement) {
43
+ console.warn('usePrintWhenStable: No target element found');
44
+ triggerPrint();
45
+ return;
46
+ }
47
+ // Timeout máximo para forçar impressão mesmo se o DOM não estabilizar
48
+ maxWaitTimeoutRef.current = setTimeout(function () {
49
+ console.warn("usePrintWhenStable: Forced print after ".concat(maxWaitTime, "ms max wait time"));
50
+ triggerPrint();
51
+ }, maxWaitTime);
52
+ // Cria o MutationObserver
53
+ observerRef.current = new MutationObserver(function () {
54
+ // Reseta o timeout a cada mutação detectada
55
+ if (timeoutRef.current) {
56
+ clearTimeout(timeoutRef.current);
57
+ }
58
+ // Cria novo timeout que será executado se não houver mais mutações
59
+ timeoutRef.current = setTimeout(function () {
60
+ triggerPrint();
61
+ }, debounceTime);
62
+ });
63
+ // Configura o observer para monitorar mudanças abrangentes
64
+ observerRef.current.observe(targetElement, {
65
+ childList: true, // Detecta adição/remoção de elementos
66
+ subtree: true, // Observa toda a árvore de descendentes
67
+ attributes: true, // Detecta mudanças em atributos
68
+ characterData: true, // Detecta mudanças em texto
69
+ attributeOldValue: false,
70
+ characterDataOldValue: false
71
+ });
72
+ // Inicia o primeiro timeout
73
+ timeoutRef.current = setTimeout(function () {
74
+ triggerPrint();
75
+ }, debounceTime);
76
+ }, [cleanup, debounceTime, maxWaitTime, onStart, rootElement, triggerPrint]);
77
+ return {
78
+ /**
79
+ * Inicia a observação do DOM e imprime quando estável
80
+ */
81
+ printWhenStable: startObserving,
82
+ /**
83
+ * Para a observação e limpa os timers
84
+ */
85
+ cancel: cleanup,
86
+ /**
87
+ * Indica se está aguardando o DOM estabilizar
88
+ */
89
+ isWaiting: isWaiting
90
+ };
91
+ };
92
+ export default usePrintWhenStable;
package/dist/index.d.ts CHANGED
@@ -3,6 +3,7 @@ export { default as BankAccounts } from './components/bank-accounts/bank-account
3
3
  export { default as CCF } from './components/ccf/ccf';
4
4
  export { default as ChartSystem } from './components/chart/chartSystem';
5
5
  export { default as AddItemField } from './components/common/addItem';
6
+ export { default as PrintButton } from './components/common/printButton';
6
7
  export { default as Tooltip } from './components/common/tooltip';
7
8
  export { default as Contacts } from './components/contacts/contacts';
8
9
  export { default as DividasPublicas } from './components/dividasPublicas/dividasPublicas';
@@ -23,3 +24,5 @@ export { default as SCR } from './components/scr/scr';
23
24
  export { default as Veiculos } from './components/veiculos/veiculos';
24
25
  export * from './components/webservice';
25
26
  export { default as ConsultaSimples } from './consultaSimples';
27
+ export { PrintModeProvider, usePrintMode } from './contexts/printModeContext';
28
+ export { default as usePrintWhenStable } from './hooks/usePrintWhenStable';
package/dist/index.js CHANGED
@@ -3,6 +3,7 @@ export { default as BankAccounts } from './components/bank-accounts/bank-account
3
3
  export { default as CCF } from './components/ccf/ccf';
4
4
  export { default as ChartSystem } from './components/chart/chartSystem';
5
5
  export { default as AddItemField } from './components/common/addItem';
6
+ export { default as PrintButton } from './components/common/printButton';
6
7
  export { default as Tooltip } from './components/common/tooltip';
7
8
  export { default as Contacts } from './components/contacts/contacts';
8
9
  export { default as DividasPublicas } from './components/dividasPublicas/dividasPublicas';
@@ -23,3 +24,5 @@ export { default as SCR } from './components/scr/scr';
23
24
  export { default as Veiculos } from './components/veiculos/veiculos';
24
25
  export * from './components/webservice';
25
26
  export { default as ConsultaSimples } from './consultaSimples';
27
+ export { PrintModeProvider, usePrintMode } from './contexts/printModeContext';
28
+ export { default as usePrintWhenStable } from './hooks/usePrintWhenStable';
@@ -5,7 +5,7 @@ var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cook
5
5
  // src/styles/globalStyle.tsx
6
6
  import React from 'react';
7
7
  import { createGlobalStyle } from 'styled-components';
8
- var GlobalStyle = createGlobalStyle(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n /* Reset + fonte padr\u00E3o para toda a aplica\u00E7\u00E3o (inclui modais e portais) */\n *, *::before, *::after {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n font-family: 'Open Sans Condensed', sans-serif;\n }\n\n body {\n -webkit-font-smoothing: antialiased;\n }\n\n /* Oculta bot\u00F5es na impress\u00E3o */\n @media print {\n button,\n [role=\"button\"],\n [class*=\"Button\"],\n [class^=\"Button\"],\n [class*=\"btn\"],\n [class^=\"btn\"],\n .button,\n .btn {\n display: none !important;\n }\n }\n\n /* Anima\u00E7\u00F5es utilit\u00E1rias */\n @keyframes highlight {\n from {\n background-color: rgba(255, 215, 0, 0.35);\n }\n to {\n background-color: transparent;\n }\n }\n\n .highlighted-process {\n animation: highlight 3s ease-out forwards !important;\n }\n\n @keyframes blueHighlight {\n from {\n background-color: rgba(0, 122, 255, 0.35);\n }\n to {\n background-color: rgba(0, 122, 255, 0.15);\n }\n }\n\n .blue-highlighted-process {\n animation: blueHighlight 2.5s ease-in-out;\n background-color: rgba(0, 122, 255, 0.15);\n transition: background-color 0.3s ease-in-out;\n }\n"], ["\n /* Reset + fonte padr\u00E3o para toda a aplica\u00E7\u00E3o (inclui modais e portais) */\n *, *::before, *::after {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n font-family: 'Open Sans Condensed', sans-serif;\n }\n\n body {\n -webkit-font-smoothing: antialiased;\n }\n\n /* Oculta bot\u00F5es na impress\u00E3o */\n @media print {\n button,\n [role=\"button\"],\n [class*=\"Button\"],\n [class^=\"Button\"],\n [class*=\"btn\"],\n [class^=\"btn\"],\n .button,\n .btn {\n display: none !important;\n }\n }\n\n /* Anima\u00E7\u00F5es utilit\u00E1rias */\n @keyframes highlight {\n from {\n background-color: rgba(255, 215, 0, 0.35);\n }\n to {\n background-color: transparent;\n }\n }\n\n .highlighted-process {\n animation: highlight 3s ease-out forwards !important;\n }\n\n @keyframes blueHighlight {\n from {\n background-color: rgba(0, 122, 255, 0.35);\n }\n to {\n background-color: rgba(0, 122, 255, 0.15);\n }\n }\n\n .blue-highlighted-process {\n animation: blueHighlight 2.5s ease-in-out;\n background-color: rgba(0, 122, 255, 0.15);\n transition: background-color 0.3s ease-in-out;\n }\n"])));
8
+ var GlobalStyle = createGlobalStyle(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n /* Reset + fonte padr\u00E3o para toda a aplica\u00E7\u00E3o (inclui modais e portais) */\n *, *::before, *::after {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n font-family: 'Open Sans Condensed', sans-serif;\n }\n\n body {\n -webkit-font-smoothing: antialiased;\n }\n\n /* Oculta bot\u00F5es e tooltips na impress\u00E3o */\n @media print {\n button,\n [role=\"button\"],\n [class*=\"Button\"],\n [class^=\"Button\"],\n [class*=\"btn\"],\n [class^=\"btn\"],\n .button,\n .btn,\n [class*=\"tooltip\"],\n [class*=\"Tooltip\"],\n [data-tooltip] {\n display: none !important;\n visibility: hidden !important;\n }\n }\n\n /* Anima\u00E7\u00F5es utilit\u00E1rias */\n @keyframes highlight {\n from {\n background-color: rgba(255, 215, 0, 0.35);\n }\n to {\n background-color: transparent;\n }\n }\n\n .highlighted-process {\n animation: highlight 3s ease-out forwards !important;\n }\n\n @keyframes blueHighlight {\n from {\n background-color: rgba(0, 122, 255, 0.35);\n }\n to {\n background-color: rgba(0, 122, 255, 0.15);\n }\n }\n\n .blue-highlighted-process {\n animation: blueHighlight 2.5s ease-in-out;\n background-color: rgba(0, 122, 255, 0.15);\n transition: background-color 0.3s ease-in-out;\n }\n"], ["\n /* Reset + fonte padr\u00E3o para toda a aplica\u00E7\u00E3o (inclui modais e portais) */\n *, *::before, *::after {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n font-family: 'Open Sans Condensed', sans-serif;\n }\n\n body {\n -webkit-font-smoothing: antialiased;\n }\n\n /* Oculta bot\u00F5es e tooltips na impress\u00E3o */\n @media print {\n button,\n [role=\"button\"],\n [class*=\"Button\"],\n [class^=\"Button\"],\n [class*=\"btn\"],\n [class^=\"btn\"],\n .button,\n .btn,\n [class*=\"tooltip\"],\n [class*=\"Tooltip\"],\n [data-tooltip] {\n display: none !important;\n visibility: hidden !important;\n }\n }\n\n /* Anima\u00E7\u00F5es utilit\u00E1rias */\n @keyframes highlight {\n from {\n background-color: rgba(255, 215, 0, 0.35);\n }\n to {\n background-color: transparent;\n }\n }\n\n .highlighted-process {\n animation: highlight 3s ease-out forwards !important;\n }\n\n @keyframes blueHighlight {\n from {\n background-color: rgba(0, 122, 255, 0.35);\n }\n to {\n background-color: rgba(0, 122, 255, 0.15);\n }\n }\n\n .blue-highlighted-process {\n animation: blueHighlight 2.5s ease-in-out;\n background-color: rgba(0, 122, 255, 0.15);\n transition: background-color 0.3s ease-in-out;\n }\n"])));
9
9
  // Componente que aplica os estilos globais da aplicação.
10
10
  // A fonte "Open Sans Condensed" já é carregada via index.html.
11
11
  var GlobalStyleProvider = function () { return (React.createElement(React.Fragment, null,