@credithub/harlan-components 1.102.0 → 1.103.1

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,27 @@ 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 chamar callback 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, pronto para imprimir');
60
+ // Chama o callback externo (Harlan decide como imprimir)
61
+ onClickPrint === null || onClickPrint === void 0 ? void 0 : onClickPrint();
62
+ }
63
+ }), printWhenStable = _s.printWhenStable, isWaiting = _s.isWaiting;
64
+ // Handler que usa o observer ao invés de imprimir diretamente
65
+ var handlePrint = function () {
66
+ printWhenStable();
67
+ };
50
68
  // Extraindo valores do globalData
51
69
  var receitaStatus = ((_c = (_b = data.dossie) === null || _b === void 0 ? void 0 : _b.summary) === null || _c === void 0 ? void 0 : _c.receitaStatus) &&
52
70
  ['ATIVA', 'REGULAR'].indexOf(data.dossie.summary.receitaStatus) === -1
@@ -133,7 +151,7 @@ var ConsultaSimplesSection = function (_a) {
133
151
  }); })
134
152
  });
135
153
  }, [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,
154
+ 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
155
  ctimeDate ? (React.createElement(StatusMessage, { type: "warning" },
138
156
  React.createElement(WarningCircle, { weight: "fill", size: 18, color: theme.colors.cinzaEscuro, style: { marginRight: 6, verticalAlign: 'text-bottom' } }),
139
157
  "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,93 @@
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
+ // Chama o callback informando que o DOM está estável
32
+ // O consumidor (ex: Harlan) decide como imprimir
33
+ onStable === null || onStable === void 0 ? void 0 : onStable();
34
+ }, [cleanup, onStable]);
35
+ var startObserving = useCallback(function () {
36
+ // Limpa observadores anteriores
37
+ cleanup();
38
+ // Define estado de aguardando
39
+ setIsWaiting(true);
40
+ // Callback ao iniciar
41
+ onStart === null || onStart === void 0 ? void 0 : onStart();
42
+ var targetElement = rootElement || document.body;
43
+ if (!targetElement) {
44
+ console.warn('usePrintWhenStable: No target element found');
45
+ triggerPrint();
46
+ return;
47
+ }
48
+ // Timeout máximo para forçar impressão mesmo se o DOM não estabilizar
49
+ maxWaitTimeoutRef.current = setTimeout(function () {
50
+ console.warn("usePrintWhenStable: Forced print after ".concat(maxWaitTime, "ms max wait time"));
51
+ triggerPrint();
52
+ }, maxWaitTime);
53
+ // Cria o MutationObserver
54
+ observerRef.current = new MutationObserver(function () {
55
+ // Reseta o timeout a cada mutação detectada
56
+ if (timeoutRef.current) {
57
+ clearTimeout(timeoutRef.current);
58
+ }
59
+ // Cria novo timeout que será executado se não houver mais mutações
60
+ timeoutRef.current = setTimeout(function () {
61
+ triggerPrint();
62
+ }, debounceTime);
63
+ });
64
+ // Configura o observer para monitorar mudanças abrangentes
65
+ observerRef.current.observe(targetElement, {
66
+ childList: true, // Detecta adição/remoção de elementos
67
+ subtree: true, // Observa toda a árvore de descendentes
68
+ attributes: true, // Detecta mudanças em atributos
69
+ characterData: true, // Detecta mudanças em texto
70
+ attributeOldValue: false,
71
+ characterDataOldValue: false
72
+ });
73
+ // Inicia o primeiro timeout
74
+ timeoutRef.current = setTimeout(function () {
75
+ triggerPrint();
76
+ }, debounceTime);
77
+ }, [cleanup, debounceTime, maxWaitTime, onStart, rootElement, triggerPrint]);
78
+ return {
79
+ /**
80
+ * Inicia a observação do DOM e imprime quando estável
81
+ */
82
+ printWhenStable: startObserving,
83
+ /**
84
+ * Para a observação e limpa os timers
85
+ */
86
+ cancel: cleanup,
87
+ /**
88
+ * Indica se está aguardando o DOM estabilizar
89
+ */
90
+ isWaiting: isWaiting
91
+ };
92
+ };
93
+ 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,