Session: a36c4282-0803-4db7-9dd3-e3571e4f85fa

CWD: /var/lib/metahuman-ocr-worker/work/job-219/worktree Branch: HEAD Mode: range From: origin/new_staging2 To: origin/bugfix/arvore-causas Model: deepseek-v4-flash Duration: 4m29s Files: 2 Status: complete

Coverage

2
Selected
2
Completed
0
Reused
0
Failed
0
Waived

Token Usage

1.55M
Prompt Tokens
47.84K
Completion Tokens
1.6M
Total Tokens
42
LLM Requests
1.19M
Cache Read
0
Cache Write
File breakdown 1 files
FilePromptCompletionCache ReadCache WriteTotal
public/js/ssma/tree_view.js,templates/ssma/cause_tree/tree_v… 1.55M 47.84K 1.19M0 1.6M

Review Comments (6 findings)

Severity:
Category:
public/js/ssma/tree_view.js 3 comments
bug medium L619
A flag que “engole” o próximo clique do menu lateral nunca é limpa se o clique não cair dentro do menu. Se o usuário pressionar o mouse sobre as ferramentas, arrastar e soltar fora (ou fechar o modal por Esc/Cancelar/X antes de soltar), `ignoreNextFloatingToolsClick` fica presa em `true`; na próxima vez que a pessoa clicar em qualquer botão do menu (zoom, adicionar causa etc.), o handler de `click` faz `stopPropagation` e a ação não executa — o primeiro clique “não responde”. Como isso contraria exatamente o comportamento esperado da PR (“clicar no menu fecha o modal e não dispara a ação”, mas depois o menu deve voltar a funcionar normalmente), convém resetar a flag no fechamento do modal e/ou quando o mouseup ocorrer fora do menu.
Existing Code
    let ignoreNextFloatingToolsClick = false;
maintainability low L603-L609
Os três helpers (`isEventInsideCauseTreeDiagram`, `isEventInsideCauseNodeModal`, `isEventInsideFloatingTools`) repetem o mesmo bloco de guarda (`const target = event.target; if (!(target instanceof Element)) return false;`). Vale extrair para um utilitário único (ex.: `closestFromEvent(event, selector)`) para evitar divergência futura e reduzir código repetido. Aproveitando, o seletor `'#ssmaCauseTreeNodeModal .modal-dialog'` está hardcoded no JS mesmo existindo a constante `SELECTORS.modal` — o ideal é derivá-lo dela.
Existing Code
    function isEventInsideCauseNodeModal(event) {
      const target = event.target;
      if (!(target instanceof Element)) {
        return false;
      }
      return Boolean(target.closest('#ssmaCauseTreeNodeModal .modal-dialog'));
    }
maintainability low L608
O seletor do modal está escrito à mão aqui (`#ssmaCauseTreeNodeModal`), enquanto o restante do arquivo usa a constante `SELECTORS.modal`. Se o id do modal mudar (no partial `_modal_node.html.twig` ou na própria `SELECTORS`), esta verificação passa a retornar sempre `false` e o efeito é silencioso: qualquer clique dentro do próprio modal passa a ser classificado como “clique fora” e fecha o modal, quebrando o preenchimento do formulário. Sugestão: derivar o seletor de `SELECTORS.modal` (ex.: `${SELECTORS.modal} .modal-dialog`) em vez de duplicar o id.
Existing Code
      return Boolean(target.closest('#ssmaCauseTreeNodeModal .modal-dialog'));
templates/ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig 3 comments
bug medium L495-L498
A regra desabilita os eventos de ponteiro de TODOS os filhos diretos do `<body>`. O container global de toasts (`#toastsContainerTopRight`) é justamente um filho direto do body — o AdminLTE o cria ali e o `watchToastContainer()` (AdminLTE/js/custom.js) o mantém como último filho do body. Resultado: com o modal de causa aberto, qualquer toast disparado por `showToast` (ex.: erro ao salvar) aparece, mas fica sem interação — não dá para clicar para dispensá-lo. Sugestão: restringir a regra ao wrapper da aplicação em vez de `body > *`, ou reabilitar explicitamente `pointer-events: auto` no container de toasts.
Existing Code
    body.cause-tree-node-modal-open > *,
    body.cause-tree-node-modal-open .modal-backdrop {
        pointer-events: none;
    }
Suggested Change
    body.cause-tree-node-modal-open .wrapper,
    body.cause-tree-node-modal-open .modal-backdrop {
        pointer-events: none;
    }

    body.cause-tree-node-modal-open #toastsContainerTopRight {
        pointer-events: auto;
    }
maintainability low L518-L521
O bloco `<style>` embutido no template já passa de 480 linhas e agora cresce mais ~80 linhas de media queries/regras de responsividade. Isso dificulta cache, reuso e revisão visual, e mistura responsabilidade de apresentação com o markup da tela. Não bloqueia a PR, mas vale mover esse CSS para um arquivo do módulo (ex.: `public/css/ssma/...`) em vez de continuar empilhando estilos dentro do `.twig`.
Existing Code
    @media (max-width: 991.98px), (max-height: 900px) {
        .cause-tree-stage {
            padding: 0;
        }
bug medium L68-L69
O `max-height: 100%` da coluna de ferramentas pode não surtir efeito, e aí o scroll interno criado aqui nunca ativa. O motivo é que o elemento pai (`.cause-tree-floating-tools`) tem altura automática (recebeu só `max-height`, sem `height`), e porcentagem de altura/max-height contra um pai sem altura definida é tratada como `none` pelo navegador. Na prática, em telas baixas os botões de baixo (zoom/centralizar) continuam transbordando a caixa do pai e sendo cortados pelo `overflow: hidden` da `.cause-tree-canvas` — exatamente o problema que a PR quer resolver. Vale abrir a tela em uma viewport baixa e confirmar se o scroll aparece; se não aparecer, dê altura definida ao pai (ex.: `height: calc(100% - 24px)`) ou troque o `max-height` da coluna por algo baseado na viewport (ex.: `max-height: calc(100vh - 120px)`).
Existing Code
        min-height: 0;
        max-height: 100%;
Files Reviewed 2 files
  • templates/ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig
  • public/js/ssma/tree_view.js
Conversations 1 files
public/js/ssma/tree_view.js,templates/ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig 42 requests

plan_task

Request #1 deepseek-flash P:7.62K C:7.43K CR:1.28K CW:0 33034ms
Reasoning
Let me analyze the changes. The changes are in two files: 1. `public/js/ssma/tree_view.js` - Added Bootstrap modal initialization (`$modal.modal({...})`), event handlers for document mousedown and click to manage modal closing behavior when clicking outside the modal, and guards in node click/dblclick handlers to prevent selection when modal is open. 2. `templates/ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig` - CSS changes for floating tools layout, pointer-events handling, media queries. Let me think about potential issues. Key concern: `$modal.modal({ backdrop: 'static', keyboard: true, show: false })`. With `backdrop: 'static'`, the modal prevents closing by clicking backdrop, but the code manually calls `$modal.modal('hide')` on document mousedown when clicking outside. However, there's a global capturing mousedown listener. Potential issues: 1. **Global capturing event listeners added each time the function runs** — If this initialization block runs multiple times (e.g., when the tree view is re-rendered/re-initialized), it will register duplicate `document.addEventListener('mousedown', ...)` and `click` listeners. This causes memory leaks and duplicate handlers. Need to check whether the enclosing function is called multiple times. The code is inside some function scope. Let me consider - the diff shows it's within a large block; adding `$modal.on('show.bs.modal', ...)` etc. Each time the initialization runs, new listeners accumulate on `document`. This is a real risk if the tree can be re-initialized. Severity medium/high. 2. **`$modal.modal({...})` called with `backdrop: 'static'`** — but the native backdrop click to close is disabled, which is intended. But `keyboard: true` allows Esc. Fine. 3. **Pointer-events manipulation in CSS** — `body.cause-tree-node-modal-open > *, body.cause-tree-node-modal-open .modal-backdrop { pointer-events: none; }` then re-enable for floating tools and svg. This is a broad selector that disables pointer events for all direct children of body. Potentially could break other overlays (e.g., toasts, tooltips, other modals like the bottom sheet). If a shared modal/toast appears while this modal is open, user can't interact. Actually `showToast` toasts are usually children of body → pointer-events: none would block clicking them, but toasts are usually non-interactive. Still, this applies globally to the entire page while modal open. Could affect e.g. date pickers rendered inside modal? Those are inside `.modal-dialog`, which has pointer-events auto, and children inherit. Actually pointer-events: none on parent, but `.modal-dialog` inside `#ssmaCauseTreeNodeModal` — `#ssmaCauseTreeNodeModal` is a direct child of body? If so it gets pointer-events none, but the rule `#ssmaCauseTreeNodeModal .modal-dialog { pointer-events: auto; }` re-enables. OK. But note: `body.cause-tree-node-modal-open > *` disables pointer-events for direct children of body. If the modal is nested (e.g., `#ssmaCauseTreeNodeModal` is a direct child of body), it's handled. But what about any select2 dropdown or datepicker appended to body (common libraries append to body)? They'd be blocked. Medium concern—worth flagging. 4. **The `ignoreNextFloatingToolsClick` flag** — It's set on mousedown when clicking floating tools, and then consumed on click. But if the click event doesn't fire (e.g., mousedown followed by mouseup outside), the flag stays true and could inadvertently swallow the next floating-tools click. Minor edge case. Could be a low/medium issue. 5. **`isCauseNodeModalOpen()`** returns true if modal has class 'show' or body class. The body class is added on `show.bs.modal` and removed on `hidden.bs.modal`. During fade animation, there may be a moment where the modal is not `show` but body class still present. Minor. 6. **Node click guard**: `if (isCauseNodeModalOpen()) { return; }` — but event.stopPropagation() is not called, so click still propagates to document. Combined with the CSS pointer-events none on `.cause-tree-node`, the nodes shouldn't receive clicks anyway. Duplicate prevention; fine. 7. **Potential regression**: With modal open, clicking on the SVG (diagram) does not close the modal — intentional. Clicking on nodes is blocked. But note the dblclick handler — dblclick also triggers mousedown twice; the mousedown listener sees target inside diagram (SVG) → returns without closing. Fine. 8. **`document.addEventListener('mousedown', handler, true)` in capture phase**: If a user clicks the modal's submit button, mousedown target is inside modal-dialog → returns. Good. 9. **Accessibility / `event.button !== 0`** check — good, only left clicks. 10. **The modal initialization** — `$modal.modal({show:false})` — if the modal was previously initialized with different options elsewhere, this could override. Also, Bootstrap `modal('hide')` is called on mousedown capture, but if the modal is in the middle of showing/hiding, this could throw or be a no-op. Minor. 11. **Escaping/security**: no user input. No XSS here. 12. **CSS `overflow-y: auto` on floating tools** — fine. 13. **Duplicate code**: `isEventInsideCauseTreeDiagram`, `isEventInsideCauseNodeModal`, `isEventInsideFloatingTools` all repeat the `target instanceof Element` null check. Could be extracted. Low. 14. Let me check whether `$modal` selector corresponds to `#ssmaCauseTreeNodeModal`. `isEventInsideCauseNodeModal` uses `#ssmaCauseTreeNodeModal .modal-dialog`. Need to verify `$modal` is that element. Let me look at existing code around line 571 to see what `$modal` is. The diff doesn't show. I should verify with file_read_diff or code_search. Actually the tool `file_read_diff` can be used for files in the change list, which includes tree_view.js. Hmm, but the diff we have is the full change for that file. Let me plan tool calls to verify. Let me think about what tool calls to plan: - Verify how `$modal` is defined and whether the enclosing initialization function can be called multiple times (duplicate listener risk). → code_search for `$modal` in tree_view.js, or file_read. Since we can't read arbitrary files, only file_read_diff for changed files and code_search. Use code_search for `ssmaCauseTreeNodeModal` and `$modal =` in public/js/ssma/tree_view.js. - Verify whether `cause-tree-node-modal-open` body class interacts with other elements. - Verify the modal is a direct child of body (for pointer-events rule). → search in twig template for the modal markup. Let me also consider the js file is described as large? It says "arquivo já grande" rule. tree_view.js appears to be 1000+ lines. Adding more logic to a large screen file — but the rule says logic should be in public/js (which it is). So the JS change is in the right place. The twig template still has `<style>` block (that's HTML tpl with styles). The rules say logic should not be in template script blocks; CSS is fine-ish. Let me now formulate issues: Issue 1 (high/medium): Duplicate global event listeners registered on `document` each time initialization runs → memory leak, duplicated handling, modal closing behavior runs multiple times. Since the handlers are added without removal and not idempotent, re-initialization (SPA-like tab reload, re-render) accumulates. Need to verify whether this init code can run more than once. Issue 2 (medium): `body.cause-tree-node-modal-open > *` sets `pointer-events: none` on all direct children of body — this could block interaction with other globally-appended UI (toasts, other modals, third-party dropdowns/datepickers appended to body) while the cause-tree modal is open. Need to check DOM structure. Issue 3 (medium/low): `ignoreNextFloatingToolsClick` flag can get stuck true if mousedown on floating tools is not followed by a click (e.g., drag, or mouseup outside), swallowing the next legitimate floating-tools click. Also the flag is set but if a second mousedown occurs... Edge case. Issue 4 (low): Repeated `target instanceof Element` null-check logic duplicated in three helper functions — could be extracted into a shared helper. Issue 5 (low/medium): `$modal.modal('hide')` called on mousedown capture while modal may be animating; also `backdrop: 'static'` plus manual hide is redundant with intent... Actually backdrop static prevents backdrop click closing; the manual logic handles outside clicks. That's the intent. Not a bug. Issue 6 (medium): With modal open and `pointer-events: none` on nodes, and the code returning early — the `dblclick` handler calls preventDefault/stopPropagation but the whole page's other elements are blocked via CSS. Possibly redundant but fine. Issue 7 (medium): The click handler on document (capture) that consumes floating-tools click — but the floating tools also has its own click handlers in JS. When modal is open and user clicks a floating tool, mousedown sets flag and hides modal, but the floating tool's action is suppressed only for the immediate click. Actually the floating tools buttons' click handlers — are they registered on the button or via delegation? If the tool's click handler is on the button element and this document capture handler stops propagation, then button handler (bubble phase) won't run. OK. But: does the mousedown handler `event.stopPropagation()` in capture phase prevent the modal's own listeners? Not relevant. Issue 8 (low): `isCauseNodeModalOpen` relies on body class added on `show.bs.modal` — if Bootstrap fails to fire or if modal initialized differently, state desync. Let me also consider a possible real bug: The document mousedown handler calls `$modal.modal('hide')` when clicking outside. But because the listener is in capture phase and calls `event.preventDefault()`/`stopPropagation()` only for floating tools, clicking outside (e.g., header) will both close the modal AND the underlying element will receive the click (since pointer-events: none on body children blocks it though). Wait—`body.cause-tree-node-modal-open > *` pointer-events none prevents header clicks. So the header won't get the click. But the mousedown still fires on document (capture) regardless of pointer-events? Actually pointer-events: none means the element doesn't receive pointer events, and the event target becomes the element behind (body?). Hmm, if all children have pointer-events none, the target of the event would be `body` or `html`. The document capture listener still fires. So `isEventInsideCauseTreeDiagram` false → hide modal. Good. So clicking header closes modal, matching requirement. But wait, `.cause-tree-floating-tools` has pointer-events: auto, so it receives events and the handler detects it. Good. Now, potential issue: `#ssmaCauseTreeNodeModal { pointer-events: none; }` is defined unconditionally (not scoped to body class). So even when modal is not open, the modal container has pointer-events none. But it's hidden anyway. Fine. However, the `.modal-dialog` gets pointer-events auto — so when modal is NOT open, but... it's hidden (display none). Fine. Hmm, but the rule `#ssmaCauseTreeNodeModal .modal-dialog { pointer-events: auto }` is outside the body class scope. If there's ever a case where modal container visible without body class... The body class is added on show. Fine. Actually there might be an issue: `body.cause-tree-node-modal-open > *` — does `#ssmaCauseTreeNodeModal` live inside a wrapper div rather than as a direct child of body? If it's not a direct child of body, the pointer-events:none rule for `> *` wouldn't apply to it, and it might not be disabled. But then the modal would remain interactive. Conversely if it IS a direct child, the `#ssmaCauseTreeNodeModal { pointer-events: none }` handles it and `.modal-dialog` re-enables. So need to verify placement. Let me plan a search in the twig template. Also, is there a concern that while modal open, the `.modal-backdrop` gets pointer-events none — good, because backdrop is appended to body as a direct child → would be blocked anyway; explicit rule handles it. Let me also think about the `keyboard: true` and `backdrop: 'static'`. Since backdrop is static, the backdrop element click won't close. But the requirement says clicking outside (backdrop area) should close modal. The custom mousedown handles it. OK. Now let me think about the "god template" rule for the twig file. The twig file `_tab_tree.html.twig` has a `<style>` block with many lines. The change adds CSS. There's no JS in this twig diff. So not a god template JS issue. But it has a large inline `<style>` — could flag as maintainability but low. Let me also check: the media query change `@media (max-width: 991.98px), (max-height: 900px)` — numeric hardcoded breakpoints. Fine, existing pattern. Now, the most important: duplicate listeners. Let me verify by searching for how this init function is invoked and whether `$modal` is destroyed. Let me plan tool calls: For issue 1: `→ code_search` search for `tree_view.js`... Actually code_search searches within files, so search text like `addEventListener('mousedown'` or `initCauseTree`... Hmm. Better: search for `$modal` in public/js/ssma/tree_view.js to find definition and surrounding function. And search for the function name that contains this init to see if it's called multiple times. Let me look at what's at line 571 in tree_view.js. The diff hunk header `@@ -571,6 +571,81 @@ const SELECTORS = {` indicates context line "const SELECTORS = {" near line 571. So the added block is inside some function after SELECTORS. Hmm. Actually the hunk context shows `const SELECTORS = {` as the function/context hint, then the code with `$modal.modal(...)`. So there's a `SELECTORS` constant, and the code around uses `$modal`. Let me search. Let me produce tool calls: For issue about duplicate listeners: → code_search with search_text `$modal = ` in file_patterns ['public/js/ssma/tree_view.js'] to find the selector definition. → code_search with search_text `document.addEventListener` in file_patterns ['public/js/ssma/tree_view.js'] to check for other listeners / whether these are removed. Also → file_find query_name `tree_view.js` to locate. Hmm, maybe better to check whether the containing function is called more than once: search for the function name. But we don't know it. Let's search `$modal.modal(` occurrences. For pointer-events: → code_search in twig for `ssmaCauseTreeNodeModal` to confirm DOM placement (direct child of body) and structure. Also → code_search for `showToast`? Not needed. For contract with backend: no AJAX added. The rule mentions checking contract; but no endpoint change. So skip. Let me also consider: the modal is initialized with `$modal.modal({...})`. But if `$modal` is empty (element not found), `.modal()` would throw. Probably fine. Another potential issue: The new document-level `mousedown` capture handler calls `$modal.modal('hide')`. Bootstrap's modal hide triggers `hide.bs.modal` and `hidden.bs.modal`, removing body class. Fine. Now, is there a risk that clicking inside the modal's `.modal-dialog` but on an element appended to body (like select2 dropdown or datepicker)? Those appended elements would be outside `.modal-dialog`, so `isEventInsideCauseNodeModal` returns false, and if not inside diagram/floating tools, it would close the modal. That's a real UX bug: interacting with a datepicker/select2 dropdown (appended to body) inside the modal would close the modal. This is a concrete medium/high risk. Need to check whether the modal form uses select2/datepicker. The twig there has category select (`ensureCategoryOption`). Could use select. Worth flagging as medium and verifying with code_search in template for `select2`/`datepicker`/`flatpickr`. Let me plan that. Also, third-party library appended to body already blocked by pointer-events none → so the dropdown wouldn't even open/be clickable! Actually the pointer-events rule blocks body children; the appended dropdown would be a direct child of body → pointer-events none → not clickable. That's a stronger bug. Worth flagging. OK let me also consider `overscroll-behavior: contain` etc. Fine. Let me structure the final answer. Issues sorted by severity: 1. [high] Duplicate global listeners on document each time the block executes (no removeEventListener / not idempotent). If tree view is re-initialized (tab switch/re-render), handlers accumulate, causing multiple hide calls, memory leak, and stuck `ignoreNextFloatingToolsClick`. Verify. Actually is it high or medium? Could cause memory leaks and unpredictable modal behavior. I'll mark medium-high. Let me say high since accumulating capture listeners can cause infinite/duplicated behavior and memory leak. Hmm, "may cause ... critical functional failures". I'd say medium. But duplicate listeners that call `$modal.modal('hide')` on every re-init—actually calling modal hide multiple times is idempotent-ish. The bigger risk is memory leak. I'll go medium. Hmm, but the priority rules emphasize duplication. Let me mark it medium. Actually, let me reconsider severity. Duplicate event listeners on document that are never removed → memory leak and potential performance degradation; also `ignoreNextFloatingToolsClick` closure. I'll mark medium. 2. [high/medium] `pointer-events: none` on all direct children of body while modal open blocks globally-appended UI (toasts, dropdowns, other modals). Could be high if it breaks datepicker inside modal. Mark high? Let me mark medium and describe. Hmm. Let me think: the modal's own form fields inside `.modal-dialog` are fine. But select2/datepicker appended to body blocked. Also the shared `_modal_bottom_sheet` component if used. The PR says shared modal not modified. But toasts: `showToast` — if a validation toast appears it may be unclickable (toasts usually auto-dismiss, but they're often in a container appended to body). Could be blocked. I'll mark medium. 3. [medium] Clicks on elements appended to body outside `.modal-dialog` (dropdowns/datepickers/autocomplete) will be treated as "outside" and close the modal. Combined with pointer-events none, these controls inside the modal may not work at all. Overlaps with #2; maybe combine. Let me keep separate but they're related. Actually I should keep issues distinct but not redundant. I'll combine into one about pointer-events and outside-click detection affecting body-appended widgets. Hmm, but they are two distinct mechanisms (CSS pointer-events vs JS outside-click detection). They both break the same widgets. I could present as one issue with two tool calls. Let me present as one issue. 4. [medium] `ignoreNextFloatingToolsClick` flag can remain true if a mousedown on floating tools isn't followed by a click (drag/mouseup outside), causing the next legitimate floating-tools click to be swallowed. Verify. 5. [medium] The `mousedown` handler calls `$modal.modal('hide')` on capture; but since the modal uses `backdrop: 'static'`, the overlay is always present... not a bug. 6. [low] Duplicated `target instanceof Element` null-check across three helpers — extract. 7. [low] Inline `<style>` block in the Twig template continues to grow; consider moving to a CSS file. Low/advisory. Let me also double check one thing: `body.cause-tree-node-modal-open > *` includes `script`, `style`, and other elements — harmless. Also, does the body class removal happen? `hidden.bs.modal` removes it. But if modal is removed from DOM or fails, class stuck → whole page pointer-events none = page frozen. That's a high-severity risk: if `hidden.bs.modal` doesn't fire (e.g., element removed, or hide fails), body class stays and the entire page becomes non-interactive (all direct children pointer-events:none). That's a critical functional failure. Worth flagging high. Let me include that: risk that the body class is left on body, disabling the whole page. The class is removed only on `hidden.bs.modal`. If the modal is hidden via other means (e.g., DOM removal without Bootstrap event), or if there's an error, the flag persists. High. Actually Bootstrap's `hidden.bs.modal` fires reliably when using `.modal('hide')`. But if the tree view container is replaced/removed while modal open, the event wouldn't fire and body class would stick. Medium-high. I'll present as one high issue: "page freeze risk if body class not removed." Hmm, but I already plan issue on pointer-events breadth. Let me combine: the pointer-events approach is broad and if the body class isn't cleared the whole page freezes. One issue. Let me now decide final list: 1. [high] Body-wide `pointer-events: none` while modal open — blocks all other page overlays/widgets appended to body and risks full page freeze if `cause-tree-node-modal-open` isn't removed. Tools: search twig for modal structure/select2; search JS for where class removed. 2. [high] Global `document` capture listeners (`mousedown`, `click`) added without removal → duplicates on re-init, leak, stale `ignoreNextFloatingToolsClick`. Tools: search for init function calls / other addEventListener. 3. [medium] Outside-click detection closes modal when clicking widgets appended to body (select2/datepicker/autocomplete) even though they belong to the modal form. Tool: search template for select2/datepicker usage. Hmm 1 and 3 overlap heavily. Maybe merge 1 and 3 into one issue about the outside-click/pointer-events approach affecting body-appended widgets. Let me merge into one high issue. 4. [medium] `ignoreNextFloatingToolsClick` may stay true and swallow next click. Also flag set but not reset on modal close. 5. [low] Duplicated `instanceof Element` guard across helpers. 6. [low] Growing inline `<style>` in template; consider extracting. Let me reconsider issue 4 (Esc/keyboard). `keyboard: true` — Esc closes. Requirement met. Another: the change calls `$modal.modal({...})` every time the block runs; if the modal was already shown, re-initializing could reset options. Minor. Also: `isCauseNodeModalOpen()` checks `$modal.hasClass('show')`. `show` class is added by Bootstrap. During hide animation, `show` present and `hiding` etc. Fine. Also potential: The node `click` handler guard returns early when modal open but doesn't `stopPropagation`; combined with pointer-events none on nodes, no issue. Low. Let me also check: The `mousedown` listener uses `event.button !== 0` for left. Good. Alright. Also, is there a hardcoded string issue? No. Now writing in pt-BR. Format: Summary, Issues with numbered items, severity tags, description, → tool lines. Let me write tool call lines carefully with arguments. For issue 2 (duplicate listeners): → code_search: search_text `addEventListener('mousedown'` file_patterns ['public/js/ssma/tree_view.js'] — confirmar se o handler é registrado sem remoção e se o bloco de inicialização pode rodar mais de uma vez → code_search: search_text `$modal` file_patterns ['public/js/ssma/tree_view.js'] — localizar a definição de `$modal` e a função que contém esse bloco, para saber se é chamada múltiplas vezes → file_find: query_name `tree_view.js` For issue 1 (pointer-events / body class): → code_search: search_text `ssmaCauseTreeNodeModal` file_patterns ['templates/ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig'] — verificar se o modal é filho direto do body e se o overlay/backdrop é anexado ao body → code_search: search_text `cause-tree-node-modal-open` — confirmar todos os pontos onde a classe é adicionada/removida → code_search: search_text `select2|datepicker|flatpickr|autocomplete` file_patterns twig — verificar widgets anexados ao body dentro do modal For issue (ignoreNextFloatingToolsClick): → code_search: search_text `ignoreNextFloatingToolsClick` file_patterns ['public/js/ssma/tree_view.js'] Let me finalize. I need to make sure issues sorted high→low. Final issues: 1. [high] — body-wide pointer-events none + body class removal dependency. 2. [high] — duplicate global listeners. 3. [medium] — outside-click detection / widgets appended to body. 4. [medium] — ignoreNextFloatingToolsClick stuck. 5. [low] — duplicated instanceof Element guard. 6. [low] — inline style growth. Hmm 1 and 3 might be merged; I'll keep separate but reference. Actually to avoid redundancy, let me merge 3 into 1 as part of the same issue? The instructions say each issue is a distinct risk point. #1 is about broad pointer-events disabling other page UI + freeze risk; #3 is about JS outside-click closing modal for widgets appended to body. Different mechanisms; keep separate. Fine. Let me write it. I should be careful with the exact modal container id vs `$modal`. `isEventInsideCauseNodeModal` uses `#ssmaCauseTreeNodeModal .modal-dialog`. So `$modal` is likely `$('#ssmaCauseTreeNodeModal')`. I'll note verifying. Write the response.
Summary: Ajuste na tela da árvore de causas (SSMA) para (a) compactar o menu flutuante em viewports menores com scroll interno e (b) permitir pan/zoom no diagrama com o modal de causa aberto, bloqueando cliques no restante da página via `pointer-events` e handlers globais de `mousedown`/`click` em `document`. As mudanças são localizadas em `public/js/ssma/tree_view.js` e no `<style>` do `_tab_tree.html.twig`, sem alteração de backend. Issues 1. [high] Com o modal aberto, o CSS desativa `pointer-events` em TODOS os filhos diretos do `<body>` (`body.cause-tree-node-modal-open > *`), exceto o menu flutuante e o SVG que são reabilitados. Isso atinge qualquer UI global anexada ao body (toasts, tooltips, outros modais/backdrops, dropdowns de bibliotecas). Pior: a classe `cause-tree-node-modal-open` só é removida no evento `hidden.bs.modal`; se o modal for removido/substituído do DOM (re-render da árvore, troca de aba, erro no Bootstrap) sem disparar o evento, a classe fica presa e a página inteira fica sem interação (tela “congelada”), exigindo reload. → code_search search_text `ssmaCauseTreeNodeModal` file_patterns ['templates/ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig'] — confirmar se o modal é filho direto de `<body>` e onde ficam o `.modal-backdrop` e o container do modal, para validar o alcance do seletor `> *` → code_search search_text `cause-tree-node-modal-open` — mapear todos os pontos que adicionam/removem a classe e checar se existe algum caminho de fechamento que não dispare `hidden.bs.modal` → code_search search_text `showToast|toast-container|modal-backdrop` — verificar se toasts/overlays globais anexados ao body seriam bloqueados enquanto o modal estiver aberto → file_read_diff path_array ['templates/ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig'] — revisar o bloco de CSS completo para confirmar a especificidade/ordem das regras de `pointer-events` 2. [high] Os listeners globais `document.addEventListener('mousedown', ..., true)` e `document.addEventListener('click', ..., true)` são registrados dentro do bloco de inicialização sem nunca serem removidos e sem guarda de idempotência. Se essa inicialização rodar mais de uma vez (re-render/troca de aba/reabertura da árvore), os handlers se acumulam no `document`, causando vazamento de memória, múltiplas chamadas de `$modal.modal('hide')` por clique e comportamento imprevisível do fechamento. → code_search search_text `$modal` file_patterns ['public/js/ssma/tree_view.js'] — localizar a definição de `$modal` e a função/bloco que contém este trecho, para saber se pode ser executado mais de uma vez → code_search search_text `addEventListener` file_patterns ['public/js/ssma/tree_view.js'] — conferir se há outros listeners globais e se existe padrão de cleanup/remoção no arquivo → file_find query_name `tree_view.js` — localizar outros arquivos/entradas de inicialização da árvore que possam reexecutar esse bloco 3. [medium] A detecção de “clique fora” só reconhece como “dentro” o que está sob `#ssmaCauseTreeNodeModal .modal-dialog`. Widgets que bibliotecas anexam ao body (select2, datepicker/flatpickr, autocomplete, tooltips interativos) ficam fora desse seletor: o clique é interpretado como externo e fecha o modal (e, pela regra de `pointer-events: none`, pode nem ser clicável). Resultado: controles do próprio formulário do modal podem não funcionar ou fechar o modal indevidamente. → code_search search_text `select2|datepicker|flatpickr|datetimepicker|autocomplete|typeahead` file_patterns ['templates/ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig'] — verificar se o formulário do modal usa widgets que renderizam fora do `.modal-dialog` → code_search search_text `appendTo|append(` file_patterns ['templates/ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig'] — checar se algum componente é montado diretamente no body 4. [medium] A flag `ignoreNextFloatingToolsClick` é marcada no `mousedown` e só é consumida/zerada se um `click` subsequente ocorrer dentro do menu flutuante. Se o usuário pressionar o mouse no menu e soltar fora (arrasto), ou se o `click` não disparar, a flag permanece `true` e engole o próximo clique legítimo do menu flutuante, fazendo o botão “não responder” na primeira tentativa. Ela também não é resetada quando o modal fecha. → code_search search_text `ignoreNextFloatingToolsClick` file_patterns ['public/js/ssma/tree_view.js'] — confirmar todos os pontos onde a flag é setada/limpa e se há reset no fechamento do modal 5. [low] Os três helpers `isEventInsideCauseTreeDiagram`, `isEventInsideCauseNodeModal` e `isEventInsideFloatingTools` repetem o mesmo bloco de guarda (`const target = event.target; if (!(target instanceof Element)) return false;`). É lógica duplicada que pode ser extraída para um único utilitário, facilitando manutenção e evitando divergência futura. → code_search search_text `instanceof Element` file_patterns ['public/js/ssma/tree_view.js'] — confirmar a duplicação e avaliar extração para helper comum 6. [low] O `<style>` embutido no template continua crescendo com novas media queries e regras de `pointer-events`/responsividade. Manter esse volume de CSS dentro do `.twig` dificulta reuso, cache e teste visual; seria preferível mover para um arquivo CSS do módulo. É ajuste de manutenibilidade, não bloqueia a PR. → code_search search_text `<style` file_patterns ['templates/ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig'] — medir o tamanho do bloco de estilo embutido para embasar a sugestão de extração

main_task

Request #1 deepseek-flash P:10.41K C:196 CR:2.56K CW:0 1789ms
I'll start by gathering context on both files to validate the findings.
Tool Calls (3)
code_search
Show Details
{"search_text": "ssmaCauseTreeNodeModal", "file_patterns": ["templates/ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig", "public/js/ssma/tree_view.js"]}
File: public/js/ssma/tree_view.js
Match lines: 2
15|    modal: '#ssmaCauseTreeNodeModal',
608|      return Boolean(target.closest('#ssmaCauseTreeNodeModal .modal-dialog'));

File: templates/ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig
Match lines: 2
487|    #ssmaCauseTreeNodeModal {
491|    #ssmaCauseTreeNodeModal .modal-dialog {

code_search
Show Details
{"search_text": "cause-tree-node-modal-open"}
File: public/js/ssma/tree_view.js
Match lines: 3
582|      document.body.classList.add('cause-tree-node-modal-open');
585|      document.body.classList.remove('cause-tree-node-modal-open');
589|      return $modal.hasClass('show') || document.body.classList.contains('cause-tree-node-modal-open');

File: templates/ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig
Match lines: 7
495|    body.cause-tree-node-modal-open > *,
496|    body.cause-tree-node-modal-open .modal-backdrop {
500|    body.cause-tree-node-modal-open .cause-tree-floating-tools {
504|    body.cause-tree-node-modal-open .js-cause-tree-svg {
509|    body.cause-tree-node-modal-open .js-cause-tree-svg:active {
513|    body.cause-tree-node-modal-open .cause-tree-node,
514|    body.cause-tree-node-modal-open .cause-tree-node * {

code_search
Show Details
{"search_text": "addEventListener", "file_patterns": ["public/js/ssma/tree_view.js"]}
File: public/js/ssma/tree_view.js
Match lines: 6
621|    document.addEventListener('mousedown', (event) => {
641|    document.addEventListener('click', (event) => {
1181|            link.addEventListener('click', stopCardInteraction);
1182|            link.addEventListener('dblclick', (event) => {
1727|    window.addEventListener('resize', () => {
1748|  document.addEventListener('DOMContentLoaded', () => {

Request #2 deepseek-flash P:11.05K C:186 CR:10.5K CW:0 2076ms
Reasoning
Let me read the JS around the relevant block, and check how the modal is initialized and whether it's inside an IIFE / init function that can run multiple times.
Tool Calls (2)
file_read
Show Details
{"file_path": "public/js/ssma/tree_view.js", "start_line": 1, "end_line": 80}
File: public/js/ssma/tree_view.js (Total lines: 1751)
IS_TRUNCATED: false
LINE_RANGE: 1-80
1|const SELECTORS = {
2|    screen: '.js-cause-tree-screen',
3|    svg: '.js-cause-tree-svg',
4|    empty: '.js-cause-tree-empty',
5|    selectionIndicator: '.cause-tree-selection-indicator',
6|    toggleSelectionIndicator: '.js-cause-tree-toggle-selection-indicator',
7|    addRoot: '.js-cause-tree-add-root',
8|    addAction: '.js-cause-tree-add-action',
9|    closeNode: '.js-cause-tree-close-node',
10|    editNode: '.js-cause-tree-edit-node',
11|    deleteNode: '.js-cause-tree-delete-node',
12|    zoomIn: '.js-cause-tree-zoom-in',
13|    zoomOut: '.js-cause-tree-zoom-out',
14|    fitView: '.js-cause-tree-fit-view',
15|    modal: '#ssmaCauseTreeNodeModal',
16|    closeModal: '#ssmaCauseTreeCloseModal',
17|    removeClosureConfirmModal: '#ssmaCauseTreeRemoveClosureModal',
18|    deactivateActionModal: '#ssmaCauseTreeDeactivateActionModal',
19|    deleteModal: '#ssmaCauseTreeDeleteModal',
20|    form: '.js-cause-tree-form',
21|    closeForm: '.js-cause-tree-close-form',
22|    modalTitle: '.js-cause-tree-modal-title',
23|    deleteNodeTitle: '.js-cause-tree-delete-node-title',
24|    deleteConfirm: '.js-cause-tree-delete-confirm',
25|    nodeId: '.js-cause-tree-node-id',
26|    parentId: '.js-cause-tree-parent-id',
27|    activeLabel: '.js-cause-tree-active-label',
28|    activeTitle: '.js-cause-tree-active-title',
29|    activeMeta: '.js-cause-tree-active-meta',
30|    closeModalTitle: '.js-cause-tree-close-modal-title',
31|    closeNodeId: '.js-cause-tree-close-node-id',
32|    closeTypeInput: '.js-cause-tree-close-type-input',
33|    closeConnectedWrapper: '.js-cause-tree-close-connected-wrapper',
34|    closeConnectedNodeInput: '.js-cause-tree-close-connected-node-input',
35|    closeCommentInput: '.js-cause-tree-close-comment-input',
36|    closeRemoveButton: '.js-cause-tree-remove-closure',
37|    closeRemoveConfirm: '.js-cause-tree-remove-closure-confirm',
38|    deactivateActionConfirm: '.js-cause-tree-deactivate-action-confirm',
39|    titleInput: '.js-cause-tree-node-title-input',
40|    categoryInput: '.js-cause-tree-node-category-input',
41|    descriptionInput: '.js-cause-tree-node-description-input',
42|    actionActiveInput: '.js-cause-tree-node-action-active-input'
43|  };
44|  
45|  const NODE_WIDTH = 308;
46|  const NODE_HEIGHT = 126;
47|  const TOP_SECTION_HEIGHT = 28;
48|  const MIDDLE_SECTION_HEIGHT = 52;
49|  const DEFAULT_CATEGORY_COLOR = '#355c9a';
50|  const ACTION_ICON_CLASS = 'fa-solid fa-list-check';
51|  const CLOSING_TYPE_DEFINITIONS = {
52|    closed: {
53|      value: 'closed',
54|      label: 'Encerrado',
55|      description: 'O ramo deixou de ser válido como explicação causal. A hipótese foi rejeitada ou considerada sem nexo suficiente com a ocorrência.',
56|      color: '#dc3545',
57|      iconClass: 'fa-solid fa-xmark'
58|    },
59|    connected: {
60|      value: 'connected',
61|      label: 'Conectado',
62|      description: 'O ramo não terminou de fato. Ele continua em outro ponto da árvore, geralmente para evitar repetição visual ou reaproveitar um nó já existente.',
63|      color: '#355c9a',
64|      iconClass: 'fa-solid fa-link'
65|    },
66|    provisional: {
67|      value: 'provisional',
68|      label: 'Provisório',
69|      description: 'O ramo foi interrompido sem fechamento definitivo. Existe uma explicação parcial, mas ainda faltam evidências, validação ou aprofundamento.',
70|      color: '#f59e0b',
71|      iconClass: 'fa-solid fa-question'
72|    },
73|    conclusive: {
74|      value: 'conclusive',
75|      label: 'Conclusivo',
76|      description: 'O ramo terminou com uma explicação considerada suficiente. A investigação entende que chegou a uma causa terminal útil para análise e ação.',
77|      color: '#10b981',
78|      iconClass: 'fa-solid fa-check'
79|    }
80|  };
file_read
Show Details
{"file_path": "public/js/ssma/tree_view.js", "start_line": 500, "end_line": 700}
File: public/js/ssma/tree_view.js (Total lines: 1751)
IS_TRUNCATED: false
LINE_RANGE: 500-700
500|  }
501|
502|  function isNodeClosed(node) {
503|    return Boolean(node && String(node.closureType || '').trim());
504|  }
505|
506|  function isLeafNode(node) {
507|    return Boolean(node) && (!Array.isArray(node.children) || node.children.length === 0);
508|  }
509|
510|  function nodeHasClosedDescendant(node) {
511|    if (!node || !Array.isArray(node.children) || !node.children.length) {
512|      return false;
513|    }
514|
515|    return node.children.some((child) => isNodeClosed(child) || nodeHasClosedDescendant(child));
516|  }
517|
518|  function initCauseTreeScreen(screen) {
519|    if (!window.d3) {
520|      console.error('D3 não foi carregado.');
521|      return;
522|    }
523|  
524|    const stage = screen.closest('.cause-tree-stage');
525|    const causeTreePage = screen.closest('.cause-tree-page');
526|    const pageHeader = causeTreePage ? causeTreePage.querySelector('.modern-header') : null;
527|  
528|    const state = {
529|      tree: parseJsonAttr(screen, 'data-initial-tree', {}),
530|      meta: parseJsonAttr(screen, 'data-initial-meta', {}),
531|      selectedNodeId: null,
532|      zoomedNodeId: null,
533|      modalMode: 'create',
534|      svg: null,
535|      viewport: null,
536|      zoom: null
537|    };
538|    const ROOT_GROUP_OFFSET = { x: 170, y: 110 };
539|  
540|    const routes = parseJsonAttr(screen, 'data-routes', {});
541|    const originUrl = String(screen.getAttribute('data-origin-url') || '').trim();
542|    const categoryDefinitions = buildCategoryDefinitions(parseJsonAttr(screen, 'data-category-options', []));
543|    const closingDefinitions = buildClosingDefinitions(parseJsonAttr(screen, 'data-closing-options', []));
544|    const api = createApi(routes);
545|    const $screen = $(screen);
546|    const $modal = $(SELECTORS.modal);
547|    const $closeModal = $(SELECTORS.closeModal);
548|    const $removeClosureConfirmModal = $(SELECTORS.removeClosureConfirmModal);
549|    const $deactivateActionModal = $(SELECTORS.deactivateActionModal);
550|    const $deleteModal = $(SELECTORS.deleteModal);
551|    const $form = $modal.find(SELECTORS.form);
552|    const $closeForm = $closeModal.find(SELECTORS.closeForm);
553|    const $submitButton = $modal.find('.js-cause-tree-submit');
554|    const $closeSubmitButton = $closeModal.find('.js-cause-tree-close-submit');
555|    const $closeRemoveButton = $closeModal.find(SELECTORS.closeRemoveButton);
556|    const $closeRemoveConfirmButton = $removeClosureConfirmModal.find(SELECTORS.closeRemoveConfirm);
557|    const $deactivateActionConfirmButton = $deactivateActionModal.find(SELECTORS.deactivateActionConfirm);
558|  
559|    const elements = {
560|      empty: $screen.find(SELECTORS.empty),
561|      selectionIndicator: $screen.find(SELECTORS.selectionIndicator),
562|      toggleSelectionIndicator: $screen.find(SELECTORS.toggleSelectionIndicator),
563|      addRoot: $screen.find(SELECTORS.addRoot),
564|      addAction: $screen.find(SELECTORS.addAction),
565|      closeNode: $screen.find(SELECTORS.closeNode),
566|      editNode: $screen.find(SELECTORS.editNode),
567|      deleteNode: $screen.find(SELECTORS.deleteNode),
568|      zoomIn: $screen.find(SELECTORS.zoomIn),
569|      zoomOut: $screen.find(SELECTORS.zoomOut),
570|      fitView: $screen.find(SELECTORS.fitView)
571|    };
572|    let isSelectionIndicatorVisible = false;
573|    let shouldRestoreCloseModalAfterRemoveConfirm = false;
574|
575|    $modal.modal({
576|      backdrop: 'static',
577|      keyboard: true,
578|      show: false
579|    });
580|
581|    $modal.on('show.bs.modal', () => {
582|      document.body.classList.add('cause-tree-node-modal-open');
583|    });
584|    $modal.on('hidden.bs.modal', () => {
585|      document.body.classList.remove('cause-tree-node-modal-open');
586|    });
587|
588|    function isCauseNodeModalOpen() {
589|      return $modal.hasClass('show') || document.body.classList.contains('cause-tree-node-modal-open');
590|    }
591|
592|    function isEventInsideCauseTreeDiagram(event) {
593|      const target = event.target;
594|      if (!(target instanceof Element)) {
595|        return false;
596|      }
597|      if (target.closest('.cause-tree-floating-tools')) {
598|        return false;
599|      }
600|      return Boolean(target.closest('.js-cause-tree-svg, .cause-tree-canvas'));
601|    }
602|
603|    function isEventInsideCauseNodeModal(event) {
604|      const target = event.target;
605|      if (!(target instanceof Element)) {
606|        return false;
607|      }
608|      return Boolean(target.closest('#ssmaCauseTreeNodeModal .modal-dialog'));
609|    }
610|
611|    function isEventInsideFloatingTools(event) {
612|      const target = event.target;
613|      if (!(target instanceof Element)) {
614|        return false;
615|      }
616|      return Boolean(target.closest('.cause-tree-floating-tools'));
617|    }
618|
619|    let ignoreNextFloatingToolsClick = false;
620|
621|    document.addEventListener('mousedown', (event) => {
622|      if (!isCauseNodeModalOpen() || event.button !== 0) {
623|        return;
624|      }
625|      if (isEventInsideCauseNodeModal(event)) {
626|        return;
627|      }
628|      if (isEventInsideFloatingTools(event)) {
629|        event.preventDefault();
630|        event.stopPropagation();
631|        ignoreNextFloatingToolsClick = true;
632|        $modal.modal('hide');
633|        return;
634|      }
635|      if (isEventInsideCauseTreeDiagram(event)) {
636|        return;
637|      }
638|      $modal.modal('hide');
639|    }, true);
640|
641|    document.addEventListener('click', (event) => {
642|      if (!ignoreNextFloatingToolsClick || !isEventInsideFloatingTools(event)) {
643|        return;
644|      }
645|      event.preventDefault();
646|      event.stopPropagation();
647|      ignoreNextFloatingToolsClick = false;
648|    }, true);
649|  
650|    function ensureCategoryOption(value) {
651|      const normalizedValue = String(value || '').trim();
652|      const $categorySelect = $modal.find(SELECTORS.categoryInput);
653|  
654|      $categorySelect.find('[data-dynamic-category="true"]').remove();
655|      if (!normalizedValue) {
656|        return;
657|      }
658|  
659|      const hasExistingOption = $categorySelect.find('option').filter((_, option) => option.value === normalizedValue).length > 0;
660|      if (!hasExistingOption) {
661|        const categoryDefinition = categoryDefinitions[normalizedValue];
662|        const optionLabel = categoryDefinition ? categoryDefinition.label : normalizedValue;
663|        $categorySelect.append(`<option value="${normalizedValue}" data-dynamic-category="true">${optionLabel}</option>`);
664|      }
665|    }
666|  
667|    function getCategoryDefinition(value) {
668|      const normalizedValue = normalizeCategoryKey(value);
669|      return categoryDefinitions[normalizedValue] || {
670|        value: normalizedValue,
671|        label: normalizedValue || 'Sem categoria',
672|        color: DEFAULT_CATEGORY_COLOR,
673|        iconClass: 'fas fa-question'
674|      };
675|    }
676|
677|    function getClosingDefinition(value) {
678|      const normalizedValue = String(value || '').trim().toLowerCase();
679|      return closingDefinitions[normalizedValue] || null;
680|    }
681|
682|    function buildClosureTooltip(node) {
683|      const closingDefinition = getClosingDefinition(node.closureType);
684|      if (!closingDefinition) {
685|        return '';
686|      }
687|
688|      const items = [`<li><strong>Tipo de Fechamento:</strong> ${closingDefinition.label}</li>`];
689|
690|      if (closingDefinition.value === 'closed') {
691|        return `<ul class="cause-tree-tooltip-list"><li><strong>Tipo de Fechamento:</strong> Encerrado</li></ul>`;
692|      }
693|
694|      if (closingDefinition.value === 'connected' && node.connectedNodeId) {
695|        const connectedNode = flattenTree(state.tree).find((item) => Number(item.id) === Number(node.connectedNodeId));
696|        if (connectedNode) {
697|          items.push(`<li><strong>Conectada com:</strong> ${connectedNode.title}</li>`);
698|          return `<ul class="cause-tree-tooltip-list">${items.join('')}</ul>`;
699|        }
700|
Request #3 deepseek-flash P:14.58K C:215 CR:11.14K CW:0 1769ms
Reasoning
Now let me look at how initCauseTreeScreen is called (DOMContentLoaded at 1748) and whether it can run multiple times. Also check the modal markup in the template to see if modal is a direct child of body and whether `pointer-events: none` on `body > *` blocks other global UI. Let me read the template header - the modal markup may be in another twig file. Let me search the template for the modal markup.
Tool Calls (2)
file_read
Show Details
{"file_path": "public/js/ssma/tree_view.js", "start_line": 1700, "end_line": 1751}
File: public/js/ssma/tree_view.js (Total lines: 1751)
IS_TRUNCATED: false
LINE_RANGE: 1700-1751
1700|
1701|  
1702|    window.__causeTreeSyncNodeActionCount = function syncNodeActionCount(nodeId, count) {
1703|      const node = getNodeById(Number(nodeId));
1704|      const nextCount = Math.max(0, Number(count) || 0);
1705|      if (node) {
1706|        node.actionCount = nextCount;
1707|        node.actionActive = nextCount > 0;
1708|      }
1709|
1710|      const wrap = document.querySelector(`.cause-tree-node-action-icon-wrap[data-node-id="${nodeId}"]`);
1711|      if (wrap) {
1712|        wrap.classList.toggle('is-inactive', nextCount <= 0);
1713|        wrap.style.color = nextCount > 0 ? '#10b981' : '#aab7bf';
1714|        wrap.setAttribute('title', nextCount > 1
1715|          ? `Esta causa possui ${nextCount} ações.`
1716|          : (nextCount > 0 ? 'Esta causa possui uma ação ativa.' : 'Esta causa não possui uma ação vinculada.'));
1717|        wrap.innerHTML = nextCount > 0
1718|          ? `<i class="${ACTION_ICON_CLASS}"></i><span class="cause-tree-node-action-count">${nextCount}</span>`
1719|          : `<i class="${ACTION_ICON_CLASS}"></i>`;
1720|      }
1721|
1722|      if (state.selectedNodeId === Number(nodeId)) {
1723|        updateControls();
1724|      }
1725|    };
1726|
1727|    window.addEventListener('resize', () => {
1728|      syncStageHeight();
1729|      if (state.tree && state.tree.id) renderTree();
1730|    });
1731|    syncStageHeight();
1732|  
1733|    if (state.tree && state.tree.id) {
1734|      state.selectedNodeId = state.meta.rootNodeId || state.tree.id;
1735|      renderTree();
1736|    } else {
1737|      loadTree();
1738|    }
1739|  
1740|    window.requestAnimationFrame(() => {
1741|      syncStageHeight();
1742|      if (state.tree && state.tree.id) {
1743|        renderTree();
1744|      }
1745|    });
1746|  }
1747|  
1748|  document.addEventListener('DOMContentLoaded', () => {
1749|    document.querySelectorAll(SELECTORS.screen).forEach((screen) => initCauseTreeScreen(screen));
1750|  });
1751|  
code_search
Show Details
{"search_text": "initCauseTreeScreen|js-cause-tree-screen"}
No matches found
Request #4 deepseek-flash P:15.45K C:241 CR:14.72K CW:0 2386ms
Reasoning
The init is called once on DOMContentLoaded for each screen. So the duplicate-listener risk is low unless script is re-executed. Note: the script is loaded per page load; the screen is one. So the "handlers accumulate" concern is theoretical — likely low severity. Now let's check the template to see where the modal markup lives and whether it's a direct child of body. Let's read the template file fully around styles and check modal placement.
Tool Calls (2)
file_read
Show Details
{"file_path": "templates/ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig", "start_line": 1, "end_line": 140}
File: templates/ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig (Total lines: 642)
IS_TRUNCATED: false
LINE_RANGE: 1-140
1|<style>
2|    .cause-tree-stage {
3|        flex: 1 1 auto;
4|        min-height: 0;
5|        max-height: 100%;
6|        padding: 0;
7|        overflow: hidden;
8|        box-sizing: border-box;
9|    }
10|
11|    .cause-tree-workspace {
12|        position: relative;
13|        height: 100%;
14|        background: #fff;
15|        border: 0;
16|        border-radius: 0;
17|        overflow: hidden;
18|        box-shadow: none;
19|    }
20|
21|    .cause-tree-canvas {
22|        position: relative;
23|        height: 100%;
24|        background:
25|            linear-gradient(90deg, rgba(83, 128, 150, 0.08) 1px, transparent 1px),
26|            linear-gradient(rgba(83, 128, 150, 0.08) 1px, transparent 1px);
27|        background-size: 42px 42px;
28|        overflow: hidden;
29|    }
30|
31|    .cause-tree-empty {
32|        position: absolute;
33|        inset: 0;
34|        display: none;
35|        align-items: center;
36|        justify-content: center;
37|        text-align: center;
38|        color: #73818a;
39|        padding: 24px;
40|    }
41|
42|    .cause-tree-empty.is-visible {
43|        display: flex;
44|    }
45|
46|    .cause-tree-canvas svg {
47|        width: 100%;
48|        height: 100%;
49|        display: block;
50|    }
51|
52|    .cause-tree-floating-tools {
53|        position: absolute;
54|        top: 18px;
55|        right: 18px;
56|        z-index: 5;
57|        display: flex;
58|        flex-direction: row;
59|        align-items: flex-start;
60|        gap: 12px;
61|        max-height: calc(100% - 24px);
62|    }
63|
64|    .cause-tree-floating-tools-actions {
65|        display: flex;
66|        flex-direction: column;
67|        gap: 10px;
68|        min-height: 0;
69|        max-height: 100%;
70|        overflow-x: hidden;
71|        overflow-y: auto;
72|        overscroll-behavior: contain;
73|        scrollbar-width: thin;
74|    }
75|
76|    .cause-tree-tool-group {
77|        display: flex;
78|        flex-direction: column;
79|        gap: 8px;
80|        padding: 10px;
81|        border: 1px solid #e4e9ee;
82|        border-radius: 12px;
83|        background: rgba(255, 255, 255, 0.94);
84|        box-shadow: 0 10px 18px rgba(16, 52, 64, 0.08);
85|        backdrop-filter: blur(4px);
86|    }
87|
88|    .cause-tree-selection-indicator {
89|        min-width: 220px;
90|        max-width: 260px;
91|        padding: 12px 14px;
92|        border: 1px solid #d9e3e8;
93|        border-radius: 12px;
94|        background: linear-gradient(180deg, #ffffff 0%, #f8fbfc 100%);
95|        box-shadow: 0 10px 18px rgba(16, 52, 64, 0.06);
96|        border-left: 4px solid #186073;
97|    }
98|
99|    .cause-tree-selection-label {
100|        display: block;
101|        margin-bottom: 6px;
102|        font-size: 11px;
103|        font-weight: 700;
104|        letter-spacing: .02em;
105|        text-transform: uppercase;
106|        color: #4f6b78;
107|    }
108|
109|    .cause-tree-selection-title {
110|        display: block;
111|        font-size: 13px;
112|        font-weight: 700;
113|        line-height: 1.35;
114|        color: #1f2f37;
115|        word-break: break-word;
116|    }
117|
118|    .cause-tree-selection-meta {
119|        display: block;
120|        margin-top: 4px;
121|        font-size: 11px;
122|        color: #5f7681;
123|        word-break: break-word;
124|    }
125|
126|    .cause-tree-selection-meta p {
127|        margin: 0;
128|    }
129|
130|    .cause-tree-selection-action-count {
131|        display: inline-block;
132|        margin-top: 6px !important;
133|        padding: 2px 8px;
134|        border-radius: 999px;
135|        background: #e8f4f2;
136|        color: #186073;
137|        font-size: 11px;
138|        font-weight: 700;
139|        line-height: 1.4;
140|    }
code_search
Show Details
{"search_text": "ssmaCauseTreeNodeModal", "file_patterns": ["templates/"]}
File: templates/ssma/cause_tree/tree_view/partials/_modal_node.html.twig
Match lines: 1
2|    modal_id: 'ssmaCauseTreeNodeModal',

File: templates/ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig
Match lines: 2
487|    #ssmaCauseTreeNodeModal {
491|    #ssmaCauseTreeNodeModal .modal-dialog {

Request #5 deepseek-flash P:17.08K C:164 CR:15.62K CW:0 1861ms
Reasoning
Let me check the modal partial to see where the modal is defined (direct child of body?) and how it's included.
Tool Calls (2)
file_read
Show Details
{"file_path": "templates/ssma/cause_tree/tree_view/partials/_modal_node.html.twig"}
File: templates/ssma/cause_tree/tree_view/partials/_modal_node.html.twig (Total lines: 43)
IS_TRUNCATED: false
LINE_RANGE: 1-43
1|{% embed 'components/_modal_bottom_sheet.html.twig' with {
2|    modal_id: 'ssmaCauseTreeNodeModal',
3|    modal_size: 'sm',
4|    modal_fixed_width: '560px'
5|} %}
6|    {% block modal_title %}
7|        <span class="js-cause-tree-modal-title">Adicionar causa</span>
8|    {% endblock %}
9|
10|    {% block modal_body %}
11|        <form id="ssmaCauseTreeNodeForm" class="js-cause-tree-form">
12|            <input type="hidden" name="nodeId" class="js-cause-tree-node-id">
13|            <input type="hidden" name="parentId" class="js-cause-tree-parent-id">
14|            <input type="hidden" name="actionActive" class="js-cause-tree-node-action-active-input" value="0">
15|
16|            <div class="cause-tree-modal-field">
17|                <label for="ssmaCauseTreeNodeTitle" class="d-block mb-2">Título</label>
18|                <input type="text" class="form-control js-cause-tree-node-title-input" id="ssmaCauseTreeNodeTitle" name="title" maxlength="120" placeholder="Digite o título da causa" required>
19|            </div>
20|
21|            <div class="cause-tree-modal-field mt-3">
22|                <label for="ssmaCauseTreeNodeCategory" class="d-block mb-2">Categoria</label>
23|                <select class="custom-select js-cause-tree-node-category-input" id="ssmaCauseTreeNodeCategory" name="category" required>
24|                    <option value="">Selecione</option>
25|                    {% for category in causeTreeCategories %}
26|                        <option value="{{ category.value }}">{{ category.label }}</option>
27|                    {% endfor %}
28|                </select>
29|            </div>
30|
31|            <div class="cause-tree-modal-field mt-3">
32|                <label for="ssmaCauseTreeNodeDescription" class="d-block mb-2">Descrição</label>
33|                <textarea class="form-control js-cause-tree-node-description-input" id="ssmaCauseTreeNodeDescription" name="description" rows="4" maxlength="255" placeholder="Descreva a hipótese, evidência ou contexto desta causa"></textarea>
34|            </div>
35|        </form>
36|    {% endblock %}
37|
38|    {% block modal_footer %}
39|        <button type="button" class="mhs-btn-cancel" data-dismiss="modal">Cancelar</button>
40|        <button type="submit" form="ssmaCauseTreeNodeForm" class="mhs-btn-primary js-cause-tree-submit">Salvar causa</button>
41|    {% endblock %}
42|{% endembed %}
43|
file_read
Show Details
{"file_path": "templates/ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig", "start_line": 440, "end_line": 642}
File: templates/ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig (Total lines: 642)
IS_TRUNCATED: false
LINE_RANGE: 440-642
440|        overflow: hidden;
441|        display: -webkit-box;
442|        -webkit-box-orient: vertical;
443|        -webkit-line-clamp: 2;
444|        line-clamp: 2;
445|        word-break: break-word;
446|        overflow-wrap: anywhere;
447|    }
448|
449|    .cause-tree-node-fo-divider {
450|        height: 1px;
451|        background: #e3eaef;
452|        margin: 6px 0 6px;
453|    }
454|
455|    .cause-tree-node-fo-desc {
456|        font-size: 11px;
457|        color: #6b7d87;
458|        line-height: 1.27;
459|        max-height: 2.7em;
460|        overflow: hidden;
461|        display: -webkit-box;
462|        -webkit-box-orient: vertical;
463|        -webkit-line-clamp: 2;
464|        line-clamp: 2;
465|        word-break: break-word;
466|        overflow-wrap: anywhere;
467|    }
468|
469|    .cause-tree-link {
470|        fill: none;
471|        stroke: rgba(120, 136, 150, 0.7);
472|        stroke-width: 1.8px;
473|    }
474|
475|    .cause-tree-modal-field label {
476|        font-weight: 600;
477|        color: #304956;
478|    }
479|
480|    .cause-tree-modal-field .form-control,
481|    .cause-tree-modal-field .custom-select {
482|        min-height: 44px;
483|        border-radius: 10px;
484|    }
485|
486|    /* Overlay lets pan/zoom reach the SVG; other page controls stay blocked. */
487|    #ssmaCauseTreeNodeModal {
488|        pointer-events: none;
489|    }
490|
491|    #ssmaCauseTreeNodeModal .modal-dialog {
492|        pointer-events: auto;
493|    }
494|
495|    body.cause-tree-node-modal-open > *,
496|    body.cause-tree-node-modal-open .modal-backdrop {
497|        pointer-events: none;
498|    }
499|
500|    body.cause-tree-node-modal-open .cause-tree-floating-tools {
501|        pointer-events: auto;
502|    }
503|
504|    body.cause-tree-node-modal-open .js-cause-tree-svg {
505|        pointer-events: auto;
506|        cursor: grab;
507|    }
508|
509|    body.cause-tree-node-modal-open .js-cause-tree-svg:active {
510|        cursor: grabbing;
511|    }
512|
513|    body.cause-tree-node-modal-open .cause-tree-node,
514|    body.cause-tree-node-modal-open .cause-tree-node * {
515|        pointer-events: none !important;
516|    }
517|
518|    @media (max-width: 991.98px), (max-height: 900px) {
519|        .cause-tree-stage {
520|            padding: 0;
521|        }
522|
523|        .cause-tree-floating-tools {
524|            top: 8px;
525|            right: 8px;
526|            max-height: calc(100% - 16px);
527|            gap: 8px;
528|        }
529|
530|        .cause-tree-floating-tools-actions {
531|            gap: 6px;
532|        }
533|
534|        .cause-tree-tool-group {
535|            padding: 6px;
536|            gap: 4px;
537|            border-radius: 10px;
538|        }
539|
540|        .cause-tree-tool-btn {
541|            min-width: 36px;
542|            min-height: 36px;
543|        }
544|    }
545|
546|    @media (max-height: 700px) {
547|        .cause-tree-floating-tools {
548|            top: 6px;
549|            right: 6px;
550|            max-height: calc(100% - 12px);
551|        }
552|
553|        .cause-tree-floating-tools-actions {
554|            gap: 4px;
555|        }
556|
557|        .cause-tree-tool-group {
558|            padding: 4px;
559|            gap: 3px;
560|        }
561|
562|        .cause-tree-tool-btn {
563|            min-width: 32px;
564|            min-height: 32px;
565|        }
566|    }
567|</style>
568|
569|    <div class="cause-tree-stage">
570|        <div
571|            class="cause-tree-workspace js-cause-tree-screen"
572|            data-initial-tree="{{ causeTreePayload.tree|json_encode|e('html_attr') }}"
573|            data-initial-meta="{{ causeTreePayload.meta|json_encode|e('html_attr') }}"
574|            data-routes="{{ causeTreeRoutes|json_encode|e('html_attr') }}"
575|            data-category-options="{{ causeTreeCategories|json_encode|e('html_attr') }}"
576|            data-closing-options="{{ causeTreeClosureTypes|json_encode|e('html_attr') }}"
577|            data-origin-url="{{ causeTreeCurrentCard.origin_url|default('')|e('html_attr') }}"
578|        >
579|            <div class="cause-tree-canvas">
580|                <div class="cause-tree-floating-tools">
581|                    <div class="cause-tree-selection-indicator d-none">
582|                        <span class="cause-tree-selection-label js-cause-tree-active-label">Causa selecionada</span>
583|                        <span class="cause-tree-selection-title js-cause-tree-active-title">Nenhuma causa selecionada</span>
584|                        <div class="cause-tree-selection-meta js-cause-tree-active-meta">Selecione uma causa na árvore</div>
585|                    </div>
586|                    <div class="cause-tree-floating-tools-actions">
587|                        <div class="cause-tree-tool-group">
588|                            <button type="button" class="cause-tree-tool-btn js-cause-tree-toggle-selection-indicator" title="Mostrar causa selecionada">
589|                                <i class="fa-regular fa-eye"></i>
590|                            </button>
591|                            <button type="button" class="cause-tree-tool-btn js-cause-tree-edit-node" title="Editar causa" disabled>
592|                                <i class="fa-regular fa-pen-to-square"></i>
593|                            </button>
594|                            <button type="button" class="cause-tree-tool-btn js-cause-tree-add-action" title="Alternar status da ação" disabled>
595|                                <i class="fa-solid fa-list-check"></i>
596|                            </button>
597|                            <button type="button" class="cause-tree-tool-btn js-cause-tree-delete-node" title="Remover causa" disabled>
598|                                <i class="fa-regular fa-trash-can"></i>
599|                            </button>
600|                        </div>
601|                        <div class="cause-tree-tool-group">
602|                            <button type="button" class="cause-tree-tool-btn js-cause-tree-add-root" title="Adicionar causa">
603|                                <i class="fa-regular fa-plus"></i>
604|                            </button>
605|                            <button type="button" class="cause-tree-tool-btn js-cause-tree-close-node" title="Encerrar causa" disabled>
606|                                <i class="fa-regular fa-lock"></i>
607|                            </button>
608|                        </div>
609|                        <div class="cause-tree-tool-group js-cause-tree-viewport-controls">
610|                            <button type="button" class="cause-tree-tool-btn cause-tree-tool-btn--icon js-cause-tree-zoom-in" title="Aumentar zoom">
611|                                <i class="fa-regular fa-magnifying-glass-plus"></i>
612|                            </button>
613|                            <button type="button" class="cause-tree-tool-btn cause-tree-tool-btn--icon js-cause-tree-zoom-out" title="Diminuir zoom">
614|                                <i class="fa-regular fa-magnifying-glass-minus"></i>
615|                            </button>
616|                            <button type="button" class="cause-tree-tool-btn cause-tree-tool-btn--icon js-cause-tree-fit-view" title="Centralizar árvore">
617|                                <i class="fa-regular fa-expand"></i>
618|                            </button>
619|                        </div>
620|                    </div>
621|                </div>
622|                <div class="cause-tree-empty js-cause-tree-empty">
623|                    <div>
624|                        <h2 class="h4 mb-2">Nenhuma causa disponível</h2>
625|                        <p class="mb-0">Crie a primeira causa para começar a montar a árvore da ocorrência.</p>
626|                    </div>
627|                </div>
628|                <svg class="js-cause-tree-svg" aria-label="Árvore de causas"></svg>
629|            </div>
630|        </div>
631|    </div>
632|
633|    <div class="d-none" aria-hidden="true">
634|        {% include 'components/ui/_member_avatars_stack.html.twig' with {
635|            members: [
636|                { id: 1, name: 'Conexão a', initials: 'a', avatar: null }
637|            ],
638|            max_visible: 3,
639|            size: 18
640|        } %}
641|    </div>
642|
Request #6 deepseek-flash P:20.18K C:153 CR:17.15K CW:0 1325ms
Reasoning
Now let's check the modal_bottom_sheet component to see where the modal is placed in DOM (probably it's a top-level element rendered where included, or appended to body via JS?). Let's check.
Tool Calls (2)
file_read
Show Details
{"file_path": "templates/components/_modal_bottom_sheet.html.twig"}
File: templates/components/_modal_bottom_sheet.html.twig (Total lines: 144)
IS_TRUNCATED: false
LINE_RANGE: 1-144
1|{# templates/components/_modal_bottom_sheet.html.twig #}
2|{#
3|    Bottom Sheet Modal Component
4|    
5|    Desktop: behaves like a centered modal
6|    Mobile: slides up from bottom as a bottom sheet (max 90vh)
7|
8|    Styles are loaded from:
9|    - public/css/metahuman-standard/components/_modal_bottom_sheet.css
10|
11|    This template keeps only the dynamic values inline:
12|    - width
13|    - internal padding
14|    - footer alignment
15|    
16|    @param string modal_id              - Unique ID for the modal
17|    @param string modal_size            - 'sm' for small modal, default for standard size
18|    @param string footer_justify_content - CSS justify-content for footer (default: 'flex-end')
19|    @param string body_template         - Optional body partial to include
20|    @param array  body_vars             - Optional variables passed to body_template
21|    
22|    Usage:
23|    {% embed 'components/_modal_bottom_sheet.html.twig' with { modal_id: 'my_modal' } %}
24|        {% block modal_title %}My Title{% endblock %}
25|        {% block modal_body %}My content{% endblock %}
26|        {% block modal_footer %}My buttons{% endblock %}
27|    {% endembed %}
28|#}
29|
30|{% set width = (modal_size|default('')) == 'sm' ? '30vw' : '60vw' %}
31|{% set main_padding = (modal_size|default('')) == 'sm' ? '16px' : '24px' %}
32|{% set size_class = (modal_size|default('')) == 'sm' ? 'modal-sm-custom' : '' %}
33|{% set use_validation_ui = use_validation_ui|default(false) %}
34|{% set validation_alert_id = validation_alert_id|default(modal_id ~ '-validation-alert') %}
35|{% set validation_alert_message = validation_alert_message|default('Preencha todos os campos obrigatórios') %}
36|{% set reset_validation_on_close = reset_validation_on_close|default(false) %}
37|{% set validation_scope_selector = '#' ~ modal_id %}
38|{% set validation_body_selector = validation_scope_selector ~ ' .modal-body' %}
39|
40|<div class="modal fade modal-bottom-sheet"
41|     id="{{ modal_id|default('dynamicModal') }}"
42|     tabindex="-1"
43|     role="dialog"
44|     aria-labelledby="{{ modal_id|default('dynamicModal') }}Label"
45|     aria-hidden="true"
46|     style="z-index: 1060;"
47|     {% if use_validation_ui %}data-validation-scope="true" data-validation-alert-selector="#{{ validation_alert_id }}"{% endif %}>
48|    <div class="modal-dialog modal-dialog-centered mhs-bottom-sheet-dialog {{ size_class }}"
49|         style="max-width: {{ width }};">
50|        <div class="modal-content mhs-bottom-sheet-content">
51|            
52|            {# ================================================================= #}
53|            {# Bottom Sheet Handle (Mobile only)                                 #}
54|            {# ================================================================= #}
55|            <div class="bottom-sheet-handle">
56|                <div class="handle-bar"></div>
57|            </div>
58|            
59|            {# ================================================================= #}
60|            {# Modal Header                                                      #}
61|            {# ================================================================= #}
62|            <div class="modal-header mhs-bottom-sheet-header"
63|                 style="padding: {{ main_padding }};">
64|                <h4 class="modal-title mhs-bottom-sheet-title" id="{{ modal_id|default('dynamicModal') }}Label">
65|                    {% block modal_title %}Título Padrão{% endblock %}
66|                </h4>
67|                <button type="button" class="close mhs-bottom-sheet-close" data-dismiss="modal" aria-label="Close">
68|                    <span class="mhs-bottom-sheet-close-icon" aria-hidden="true">&times;</span>
69|                </button>
70|            </div>
71|
72|            {# ================================================================= #}
73|            {# Modal Body                                                        #}
74|            {# ================================================================= #}
75|            <div class="modal-body mhs-bottom-sheet-body" style="padding: {{ main_padding }}; overflow-y: auto; flex: 1;">
76|                {% if use_validation_ui %}
77|                    {% include 'components/validation/_modal_validation_ui.html.twig' with {
78|                        validation_alert_id: validation_alert_id,
79|                        validation_alert_message: validation_alert_message,
80|                        validation_render_alert: true
81|                    } only %}
82|                {% endif %}
83|                {% if body_template is defined and body_template %}
84|                    {% include body_template with (body_vars is defined ? body_vars : {}) only %}
85|                {% else %}
86|                    {% block modal_body %}
87|                        <p>O conteúdo do corpo do modal vai aqui.</p>
88|                    {% endblock %}
89|                {% endif %}
90|            </div>
91|
92|            {# ================================================================= #}
93|            {# Modal Footer                                                      #}
94|            {# ================================================================= #}
95|            <div class="modal-footer mhs-bottom-sheet-footer"
96|                 style="padding: 16px {{ main_padding }}; justify-content: {{ footer_justify_content|default('flex-end') }};">
97|                {% block modal_footer %}
98|                    <button type="button" class="mhs-btn-cancel" data-dismiss="modal">Cancelar</button>
99|                    <button type="button" class="mhs-btn-primary">
100|                        Ação Principal
101|                    </button>
102|                {% endblock %}
103|            </div>
104|        </div>
105|    </div>
106|</div>
107|
108|{% if use_validation_ui %}
109|    {# Shared validation assets are opt-in so existing bottom sheets keep the same behavior #}
110|    {% include 'components/validation/_modal_validation_ui.html.twig' with {
111|        validation_scope_selector: validation_scope_selector,
112|        validation_body_selector: validation_body_selector,
113|        validation_alert_id: validation_alert_id,
114|        validation_alert_message: validation_alert_message,
115|        validation_render_assets: true
116|    } only %}
117|{% endif %}
118|
119|{% if use_validation_ui and reset_validation_on_close %}
120|<script>
121|$(document).ready(function() {
122|    // Auto-clear invalid styles while the user interacts with the form
123|    if (window.ModalValidation) {
124|        window.ModalValidation.bindAutoClear('#{{ modal_id|default('dynamicModal') }}');
125|    }
126|
127|    $('#{{ modal_id|default('dynamicModal') }}').on('hidden.bs.modal', function() {
128|        if (window.ModalValidation) {
129|            window.ModalValidation.clearState('{{ validation_scope_selector }}');
130|        }
131|    });
132|});
133|</script>
134|{% elseif use_validation_ui %}
135|<script>
136|$(document).ready(function() {
137|    // Validation can be enabled without forcing reset-on-close behavior
138|    if (window.ModalValidation) {
139|        window.ModalValidation.bindAutoClear('#{{ modal_id|default('dynamicModal') }}');
140|    }
141|});
142|</script>
143|{% endif %}
144|
code_search
Show Details
{"search_text": "_modal_node.html.twig", "file_patterns": ["templates/", "src/"]}
File: templates/ssma/cause_tree/tree_view/index.html.twig
Match lines: 1
375|{% include 'ssma/cause_tree/tree_view/partials/_modal_node.html.twig' %}

Request #7 deepseek-flash P:22.18K C:130 CR:20.22K CW:0 1760ms
Reasoning
Now, where is index.html.twig's include placed? Is it inside a block that is rendered as a direct child of body? Let me check the index.html.twig around line 375 and its extends.
Tool Calls (1)
file_read
Show Details
{"file_path": "templates/ssma/cause_tree/tree_view/index.html.twig", "start_line": 340, "end_line": 400}
File: templates/ssma/cause_tree/tree_view/index.html.twig (Total lines: 785)
IS_TRUNCATED: false
LINE_RANGE: 340-400
340|            </div>
341|            {% set _analysis = causeTreeCurrentCard.analysis_approval|default({}) %}
342|            {% if _analysis.status|default('') == 'rejected' and _analysis.note|default('') != '' %}
343|            <div class="px-3 pb-2 js-cause-tree-reject-note">
344|                <div class="alert alert-warning mb-0" role="status">
345|                    <strong>Análise reprovada.</strong>
346|                    {{ _analysis.note }}
347|                </div>
348|            </div>
349|            {% endif %}
350|
351|            {% include 'components/ui/_tabs.html.twig' with {
352|                'tabs_id': 'ssma_cause_tree_view_tabs',
353|                'use_existing_divs': true,
354|                'default_tab': 'tab_ssma_cause_tree_view_tree',
355|                'tabs': [
356|                    {'id': 'tab_ssma_cause_tree_view_tree', 'label': 'Árvore', 'target_div': 'tab-ssma-cause-tree-view-tree-content'},
357|                    {'id': 'tab_ssma_cause_tree_view_actions', 'label': 'Ações', 'target_div': 'tab-ssma-cause-tree-view-actions-content'}
358|                ]
359|            } %}
360|        </div>
361|
362|        <div class="js-cause-tree-action-plan-toolbar-wrap">
363|            {% include 'ssma/cause_tree/tree_view/partials/_action_plan_toolbar.html.twig' %}
364|        </div>
365|    </div>
366|
367|    <div id="tab-ssma-cause-tree-view-tree-content" class="tab-panel cause-tree-view-tab-panel cause-tree-view-tab-panel-tree" style="display: block;">
368|        {% include 'ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig' %}
369|    </div>
370|
371|    <div id="tab-ssma-cause-tree-view-actions-content" class="tab-panel cause-tree-view-tab-panel cause-tree-view-tab-panel-actions">
372|        {% include 'ssma/cause_tree/tree_view/tabs/_tab_action_plan.html.twig' %}
373|    </div>
374|</section>
375|{% include 'ssma/cause_tree/tree_view/partials/_modal_node.html.twig' %}
376|{% include 'ssma/cause_tree/tree_view/partials/_modal_close.html.twig' %}
377|{% include 'ssma/cause_tree/tree_view/partials/_modal_share.html.twig' %}
378|{% include 'ssma/cause_tree/tree_view/partials/_modal_validate.html.twig' %}
379|{% set finalize_tree_modal_body %}
380|    <p class="mb-0">Ao finalizar, a análise fica pronta para validação do aprovador.</p>
381|{% endset %}
382|{% include 'ssma/cause_tree/partials/_modal_confirm.html.twig' with {
383|    modal_id: 'ssmaCauseTreeFinalizeModal',
384|    modal_title: 'Finalizar árvore',
385|    modal_body: finalize_tree_modal_body,
386|    confirm_label: 'Finalizar',
387|    confirm_button_class: 'mhs-btn-primary js-cause-tree-finalize-confirm'
388|} %}
389|{% set remove_cause_modal_body %}
390|    <p class="mb-0">
391|        Deseja remover <strong class="js-cause-tree-delete-node-title">esta causa</strong> e todos os seus desdobramentos?
392|    </p>
393|    <p class="mb-0 mt-3 text-muted">
394|        Esta ação não pode ser desfeita.
395|    </p>
396|{% endset %}
397|{% include 'ssma/cause_tree/partials/_modal_confirm.html.twig' with {
398|    modal_id: 'ssmaCauseTreeDeleteModal',
399|    modal_title: 'Remover causa',
400|    modal_body: remove_cause_modal_body,
Request #8 deepseek-flash P:23.29K C:3.5K CR:22.27K CW:0 16139ms
Reasoning
So the modal is included directly at top-level of the template (a section's sibling), likely direct child of body content area. Let's see the extends of index.html.twig and whether it's within a block rendered into body. Actually, the modal may not be a direct child of body — it's included in a template that extends a layout, likely inside a `{% block content %}`. In that case, `body.cause-tree-node-modal-open > *` would only apply to direct children of body (the layout's wrappers), which would include the entire page content — blocking pointer events for everything. That's the intent (other page controls stay blocked), except they re-enable floating tools and svg. Hmm but the modal is a descendant of body > whatever; the CSS sets pointer-events: none on all body's direct children, and then re-enables for `.js-cause-tree-svg`, `.cause-tree-floating-tools`, and `#ssmaCauseTreeNodeModal .modal-dialog` (which is inside some body child, with pointer-events: auto). Wait, but pointer-events: none on an ancestor doesn't automatically prevent descendant with pointer-events: auto from receiving events — that's the standard trick: setting pointer-events:none on parent and pointer-events:auto on child re-enables the child. Yes, that works. But note that `#ssmaCauseTreeNodeModal` (the outer element) has pointer-events: none, and `.modal-dialog` inside has auto. Fine. Potential issue: pointer-events: none on `body > *` also affects the modal's ancestors? No—modal is inside body > main content, and modal-dialog re-enables. Now the more important concern: the modal is a Bootstrap modal with `backdrop: 'static'`. The `.modal-backdrop` is appended to body and has `pointer-events: none` here (per the CSS), which lets clicks pass to the svg. Actually the backdrop itself covers the screen; with pointer-events: none, clicks go through to elements below — but those elements are also pointer-events: none except svg/tools/modal-dialog. Good. Now, potential real bugs: 1. Bootstrap's `backdrop: 'static'` means clicking outside the modal does not close it (Bootstrap handles). But setting `backdrop: 'static'` also means clicking the backdrop doesn't close it — that's why the custom mousedown handler exists. Fine. Wait, actually earlier in the file, was the modal already initialized with `.modal(...)` elsewhere? Let me check if there's another `$modal.modal(` call. If the modal was previously shown via `$modal.modal('show')`, adding a second `.modal({...})` init with `show:false` could hide/reset. Let me search for `modal('show')` and `$modal.modal`. 2. `keyboard: true` — with `backdrop: 'static'`, Esc still closes modal in Bootstrap 4? Actually with `backdrop: 'static'`, Esc key still works if keyboard true. Yes. 3. The `mousedown` handler closes modal when clicking outside diagram. But `isCauseNodeModalOpen()` is true also when body has class. If user clicks the modal's Cancel button — that's inside modal-dialog so returns early. Fine. But there's an issue: clicking on the diagram while modal is open — Bootstrap's data-api/backdrop? Not relevant. 4. Big issue candidate: The custom `mousedown` handler on document in capture phase prevents default and stops propagation when clicking floating tools, then hides the modal. Then the `click` handler consumes the next click on floating tools. But there's a subtlety: the click listener is registered at document capture too; it will run before the button's own click handler? The floating tools buttons have handlers bound via jQuery on the elements themselves (e.g., `elements.zoomIn.on('click', ...)`). Since document capture listener runs first and calls stopPropagation, the button's handler won't run. Good. However, `ignoreNextFloatingToolsClick` is set to true on mousedown over floating tools. Then on subsequent click inside floating tools, it's consumed. But if the user mousedowns over the tools and the click happens... Actually, since preventDefault on mousedown doesn't prevent click event. So click will fire on the same element (if mouseup on same element). It'll be swallowed. OK. But consider: mousedown on floating tools sets flag, prevents default, hides modal. Then modal hides, `hidden.bs.modal` removes body class. The click event fires; the capture click handler checks flag && isEventInsideFloatingTools → true, so prevents/stops and resets flag. Fine. But if mousedown on tools and mouseup elsewhere (drag), no click fires on the tools; flag stays true. Then the flag would swallow the next click within floating tools that occurred... but wait, the click handler runs on document capture and if the next click is inside floating tools, it's swallowed. If the next click is elsewhere, the handler returns early (flag remains true). So flag remains true until a click happens inside floating tools, and that one is swallowed. That's the described issue #4 — the first click after a drag gets swallowed. Medium/low severity. But note the modal is already closed at that point; the flag persisting means the next click on floating tools is swallowed (once). Real, but minor UX. Actually there's a bigger scenario: after modal closed, clicking floating tools normally — no wait, the flag only affects if flag is true. Initially false. Fine. Also `ignoreNextFloatingToolsClick` is not reset when modal closes. Medium-low. 5. Consider the `click` capture handler: it only handles floating tools. But what about the node click handlers? They added `if (isCauseNodeModalOpen()) return;` in the node click handler. And CSS pointer-events none on nodes. Fine. 6. Now the `mousedown` capture handler calls `$modal.modal('hide')` for clicks outside diagram. But the modal is initialized with `backdrop: 'static'`. When user clicks on the page header (which is outside the diagram), the modal hides. That matches requirement. Potential bug: clicking on the diagram background - `isEventInsideCauseTreeDiagram` uses `.js-cause-tree-svg, .cause-tree-canvas`. Fine. But what about clicking on the empty-state div or grid? Not important. 7. Now important: mousedown handler currently `event.preventDefault()` and `stopPropagation()` on floating tools mousedown. This prevents focusing the button and also prevents jQuery `mousedown` handlers. But stopPropagation in capture at document level prevents event from reaching the button - the button's own click listeners are on click, and we also stop click. Hmm but the click handler stops propagation only if flag true. Since flag is set, click is swallowed. Fine. But one subtle bug: the click capture handler checks `!ignoreNextFloatingToolsClick || !isEventInsideFloatingTools(event)`. If the user pressed mousedown on floating tools (flag=true) and then click occurs inside floating tools, it swallows. But if user clicks the floating tools when modal is NOT open: mousedown handler returns early because `isCauseNodeModalOpen()` false, flag stays whatever. If flag left true from previous scenario, then the click on floating tools when modal is closed gets swallowed → broken button. That reinforces issue 4. 8. Another potential issue: `$modal.modal({backdrop:'static', keyboard:true, show:false})` — initializing with `show:false` is fine. But is `$modal` empty when the tree screen exists? The modal is included globally in index. If the modal doesn't exist, `$modal.modal(...)` on empty jQuery set is a no-op. And `$modal.on(...)` no-op. And `isCauseNodeModalOpen()` returns body class. Fine. But note: `initCauseTreeScreen` returns early if `!window.d3`. Not relevant. 9. Check whether the modal is displayed by `$modal.modal('show')` and whether adding this init doesn't break existing behavior. Let me search. 10. Also `document.body.classList.add('cause-tree-node-modal-open')` on `show.bs.modal`. But the requirement is that the class should be applied. Consider that `show.bs.modal` fires for any show. Fine. Potential concern: This CSS is global (`body.cause-tree-node-modal-open` etc.) and `#ssmaCauseTreeNodeModal { pointer-events: none }` — this CSS is inside the `_tab_tree.html.twig` `<style>` block which is only rendered when the tree tab is present. Actually _tab_tree is included in index.html.twig always. Fine. But wait: `#ssmaCauseTreeNodeModal { pointer-events: none; }` is applied at all times, even when modal is NOT open. Since the modal is hidden (display:none), pointer-events doesn't matter. OK. 11. Potential issue: the `mousedown` handler hides modal when clicking anywhere outside diagram, including clicking on the modal backdrop region... which is pointer-events none, so event target would be the element underneath — which is pointer-events none → the event target becomes... Hmm. When an element has pointer-events: none, the browser hit-tests to the element below. So the target would be a body child also with pointer-events none; the topmost element with pointer-events auto would be target. If nothing, body itself. So `event.target` would be `body` or `document.documentElement`. `isEventInsideCauseNodeModal(body)` false → hide modal. That's the intended "click on dimmed area closes modal". OK. Hmm, but with `backdrop: 'static'`, Bootstrap appends `.modal-backdrop` to body and it has pointer-events: none here. But clicking the backdrop doesn't move focus. Fine. 12. Now, a bigger concern: does the custom code conflict with Bootstrap's own outside-click handling? With `backdrop: 'static'`, Bootstrap doesn't close on backdrop click. So no double-close. 13. Now, a real risk: `$modal.modal('hide')` called on mousedown, but Bootstrap's hide triggers a transition; if user then... fine. 14. Accessibility: keyboard Tab can still focus elements behind modal since pointer-events doesn't block keyboard. Minor. 15. Now let's evaluate the "medium" issue 3: the modal form uses a native select (custom-select) — no select2. So no widget appended to body. Also the delete confirm modals etc. Let me check whether other modals (delete confirm, close modal) are shown while the cause node modal is open — e.g., `shouldRestoreCloseModalAfterRemoveConfirm`. When the remove-closure-confirm modal opens on top, its `.modal-dialog` is not inside `#ssmaCauseTreeNodeModal`, so pointer-events none → the confirm modal would be unclickable, and the mousedown handler would hide the cause node modal. Hmm — but is the remove confirm modal shown while the node modal is open? Let's look at the code: `shouldRestoreCloseModalAfterRemoveConfirm` suggests the close modal is hidden while the remove confirm is shown, then restored. That's the close node modal (`#ssmaCauseTreeCloseModal`), not the node modal. Let's check whether node modal stays open while another modal opens. The delete confirm modal is shown when clicking delete in floating tools — but with the node modal open, floating tools click closes the node modal first. So not simultaneous. Let me examine the JS more for modal show usage, particularly `$modal.modal('show')`, and other modals interactions. Also important: check the `selectNode` and other handlers for `isCauseNodeModalOpen` checks. And there may be drag handlers on the SVG for pan (mousedown on svg). Let's inspect the pan/zoom implementation — it probably binds mousedown on svg via d3.zoom. Since document mousedown capture handler returns early when inside diagram, fine. But wait: the doc-level capture handler for mousedown checks `isCauseNodeModalOpen()` and `isEventInsideCauseNodeModal`. When modal is open and user drags on the SVG: svg is inside `.js-cause-tree-svg` → returns early. Good. Now the zoom is on scroll wheel presumably; the wheel event on the SVG while modal open: since pointer-events auto on svg and none elsewhere, wheel works. But wait — the `.modal-backdrop` is on top of the page with a high z-index (1040/1050) and pointer-events none, so scroll reaches the svg. But the backdrop has `pointer-events: none` only under `body.cause-tree-node-modal-open`. Good. Hmm, but the modal element `#ssmaCauseTreeNodeModal` is display:flex when shown (Bootstrap `.modal.show` display flex, position fixed inset 0, overflow). The modal itself covers the entire viewport. pointer-events: none on it, and auto on `.modal-dialog`. So the svg beneath the modal overlay receives events. But there's a subtlety with z-index: The modal has z-index 1060 (inline style). The SVG is behind it. Since modal has pointer-events none, hit-testing passes through to the svg. Yes, pointer-events none causes the element to be "transparent" to hit testing, so elements below receive events. Now issue: the scroll wheel over the modal overlay — the svg receives wheel events? Yes if hit-testing passes through. OK. Now: potential important bug — `isEventInsideCauseNodeModal` uses `target.closest('#ssmaCauseTreeNodeModal .modal-dialog')`. When clicking inside the modal-dialog, target is inside the modal; closest matches. Fine. Another potential bug: `event.stopPropagation()` on mousedown when clicking floating tools prevents Bootstrap from... not relevant. Now, a real concern: The `document.addEventListener('mousedown', ...)` is added every time `initCauseTreeScreen` runs. Since it runs once per screen on DOMContentLoaded, and there's only one screen, it's fine. However, the tree screen might be re-initialized when switching tabs? Let's check if the tab content is reloaded via AJAX. The tabs use `use_existing_divs: true`, so likely no re-render. Let me check if there's any code that re-inits on tab shown. Let me search for 'shown.bs.tab' or similar in this index template/JS. Also: the listeners are never removed when the screen is destroyed - memory leak but minor. Let me now evaluate the CSS `body.cause-tree-node-modal-open > *` blocking global UI: e.g., toasts. If a toast appears while the modal is open (e.g., after saving?), the modal is closed on save presumably. But other global elements like tooltips. Actually, if the toast container is appended to body while modal open, its pointer-events is none → user can't dismiss it. Minor. More significant: the "close modal" (encerrar causa) modal & other modals also appended in body. Are they shown while node modal open? Let's check `shouldRestoreCloseModalAfterRemoveConfirm` usage. Let me read the JS sections about modals and floating tools handlers to fully verify these claims.
Tool Calls (2)
code_search
Show Details
{"search_text": "\\$modal\\.modal\\(|\\$closeModal\\.modal\\(|\\$deleteModal\\.modal\\(", "file_patterns": ["public/js/ssma/tree_view.js"], "use_perl_regexp": true}
File: public/js/ssma/tree_view.js
Match lines: 10
575|    $modal.modal({
632|        $modal.modal('hide');
638|      $modal.modal('hide');
1383|      $modal.modal('show');
1399|      $closeModal.modal('show');
1417|            $closeModal.modal('hide');
1516|      $deleteModal.modal('show');
1571|          $modal.modal('hide');
1637|      $closeModal.modal('hide');
1675|          $deleteModal.modal('hide');

code_search
Show Details
{"search_text": "shouldRestoreCloseModalAfterRemoveConfirm", "file_patterns": ["public/js/ssma/tree_view.js"]}
File: public/js/ssma/tree_view.js
Match lines: 5
573|    let shouldRestoreCloseModalAfterRemoveConfirm = false;
1635|      shouldRestoreCloseModalAfterRemoveConfirm = true;
1648|      shouldRestoreCloseModalAfterRemoveConfirm = false;
1692|      const shouldReopenCloseModal = shouldRestoreCloseModalAfterRemoveConfirm;
1693|      shouldRestoreCloseModalAfterRemoveConfirm = false;

Request #9 deepseek-flash P:27.03K C:189 CR:26.75K CW:0 1307ms
Reasoning
Let me read around 1370-1430 and 1500-1700 to understand modal flows and whether other modals open while node modal is open.
Tool Calls (2)
file_read
Show Details
{"file_path": "public/js/ssma/tree_view.js", "start_line": 1355, "end_line": 1440}
File: public/js/ssma/tree_view.js (Total lines: 1751)
IS_TRUNCATED: false
LINE_RANGE: 1355-1440
1355|        title: '',
1356|        category: '',
1357|        description: '',
1358|        actionActive: false,
1359|        parentId: options.parentId ?? null,
1360|        nodeId: ''
1361|      };
1362|  
1363|      const values = mode === 'edit' && selectedNode
1364|        ? {
1365|            title: selectedNode.title || '',
1366|            category: selectedNode.category || '',
1367|            description: selectedNode.description || '',
1368|            actionActive: Boolean(selectedNode.actionActive),
1369|            parentId: selectedNode.parentId ?? '',
1370|            nodeId: selectedNode.id
1371|          }
1372|        : defaults;
1373|  
1374|      state.modalMode = mode;
1375|      $modal.find(SELECTORS.modalTitle).text(mode === 'edit' ? 'Editar causa' : 'Adicionar causa');
1376|      $modal.find(SELECTORS.nodeId).val(values.nodeId);
1377|      $modal.find(SELECTORS.parentId).val(values.parentId ?? '');
1378|      $modal.find(SELECTORS.titleInput).val(values.title);
1379|      ensureCategoryOption(values.category);
1380|      $modal.find(SELECTORS.categoryInput).val(values.category);
1381|      $modal.find(SELECTORS.descriptionInput).val(values.description);
1382|      $modal.find(SELECTORS.actionActiveInput).val(values.actionActive ? '1' : '0');
1383|      $modal.modal('show');
1384|    }
1385|
1386|    function openCloseModal() {
1387|      const selectedNode = getSelectedNode();
1388|      if (!selectedNode || selectedNode.parentId === null) return;
1389|      const isEditingClosure = isNodeClosed(selectedNode);
1390|
1391|      $closeModal.find(SELECTORS.closeModalTitle).text(isEditingClosure ? 'Editar fechamento' : 'Encerrar causa');
1392|      $closeModal.find(SELECTORS.closeNodeId).val(selectedNode.id);
1393|      $closeModal.find(SELECTORS.closeTypeInput).val(String(selectedNode.closureType || ''));
1394|      $closeModal.find(SELECTORS.closeCommentInput).val(String(selectedNode.closureComment || ''));
1395|      $closeSubmitButton.text('Salvar fechamento');
1396|      $closeRemoveButton.toggleClass('d-none', !isEditingClosure);
1397|      populateConnectedNodeOptions(selectedNode, selectedNode.connectedNodeId ?? '');
1398|      toggleConnectedNodeField();
1399|      $closeModal.modal('show');
1400|    }
1401|
1402|    function saveNodeClosure(selectedNode, payload, $button, successMessage, options = {}) {
1403|      const nodeId = selectedNode.id;
1404|      const loadingText = options.loadingText || 'Salvando...';
1405|      setButtonLoading($button, loadingText);
1406|
1407|      api.updateNode(nodeId, payload)
1408|        .done((response) => {
1409|          if (!response.success) {
1410|            notify('error', response.message || 'Não foi possível atualizar o fechamento da causa.');
1411|            return;
1412|          }
1413|
1414|          if (options.modalToHide) {
1415|            options.modalToHide.modal('hide');
1416|          } else {
1417|            $closeModal.modal('hide');
1418|          }
1419|          applyServerState(response, response.node ? response.node.id : Number(nodeId));
1420|          notify('success', successMessage);
1421|        })
1422|        .fail((xhr) => {
1423|          const response = xhr && xhr.responseJSON ? xhr.responseJSON : {};
1424|          notify('error', response.message || 'Não foi possível atualizar o fechamento da causa.');
1425|        })
1426|        .always(() => {
1427|          resetButtonLoading($button);
1428|        });
1429|    }
1430|  
1431|    function loadTree() {
1432|      api.loadTree()
1433|        .done((response) => {
1434|          if (!response.success) {
1435|            notify('error', response.message || 'Não foi possível carregar a árvore.');
1436|            return;
1437|          }
1438|  
1439|          applyServerState(response, response.meta ? response.meta.rootNodeId : null);
1440|        })
file_read
Show Details
{"file_path": "public/js/ssma/tree_view.js", "start_line": 1550, "end_line": 1700}
File: public/js/ssma/tree_view.js (Total lines: 1751)
IS_TRUNCATED: false
LINE_RANGE: 1550-1700
1550|        return;
1551|      }
1552|  
1553|      const nodeId = $modal.find(SELECTORS.nodeId).val();
1554|      const capturedMode = state.modalMode;
1555|      const prevActionActive = capturedMode === 'edit' && nodeId
1556|        ? Boolean((getNodeById(Number(nodeId)) || {}).actionActive)
1557|        : false;
1558|      setButtonLoading($submitButton, 'Salvando...');
1559|
1560|      const request = capturedMode === 'edit' && nodeId
1561|        ? api.updateNode(nodeId, payload)
1562|        : api.createNode(payload);
1563|
1564|      request
1565|        .done((response) => {
1566|          if (!response.success) {
1567|            notify('error', response.message || 'Não foi possível salvar a causa.');
1568|            return;
1569|          }
1570|
1571|          $modal.modal('hide');
1572|          applyServerState(response, response.node ? response.node.id : (response.meta ? response.meta.rootNodeId : null));
1573|          notify('success', 'Causa salva com sucesso.');
1574|          const nextAct = payload.actionActive === 1;
1575|          const changedId = capturedMode === 'edit' && nodeId
1576|            ? Number(nodeId)
1577|            : (response.node ? response.node.id : null);
1578|          if (prevActionActive !== nextAct && changedId) {
1579|            $(document).trigger('causeTreeNodeActionChanged', [changedId, String(payload.title || '').trim(), nextAct]);
1580|          }
1581|        })
1582|        .fail((xhr) => {
1583|          const response = xhr && xhr.responseJSON ? xhr.responseJSON : {};
1584|          notify('error', response.message || 'Não foi possível salvar a causa.');
1585|        })
1586|        .always(() => {
1587|          resetButtonLoading($submitButton);
1588|        });
1589|    });
1590|
1591|    $closeForm.on('submit', (event) => {
1592|      event.preventDefault();
1593|
1594|      const selectedNode = getSelectedNode();
1595|      const nodeId = $closeModal.find(SELECTORS.closeNodeId).val();
1596|      const closureType = String($closeModal.find(SELECTORS.closeTypeInput).val() || '').trim();
1597|      const connectedNodeId = String($closeModal.find(SELECTORS.closeConnectedNodeInput).val() || '').trim();
1598|      const closureComment = String($closeModal.find(SELECTORS.closeCommentInput).val() || '').trim();
1599|
1600|      if (!selectedNode || !nodeId) {
1601|        notify('error', 'Selecione uma causa válida para encerrar.');
1602|        return;
1603|      }
1604|
1605|      if (!closureType) {
1606|        notify('error', 'Selecione o tipo de fechamento.');
1607|        return;
1608|      }
1609|
1610|      if (closureType === 'connected' && !connectedNodeId) {
1611|        notify('error', 'Selecione a causa conectada.');
1612|        return;
1613|      }
1614|
1615|      const payload = buildNodePayload(selectedNode, {
1616|        closureType,
1617|        closureComment,
1618|        connectedNodeId: closureType === 'connected' ? connectedNodeId : ''
1619|      });
1620|
1621|      saveNodeClosure(
1622|        selectedNode,
1623|        payload,
1624|        $closeSubmitButton,
1625|        isNodeClosed(selectedNode) ? 'Fechamento da causa atualizado com sucesso.' : 'Fechamento da causa salvo com sucesso.'
1626|      );
1627|    });
1628|
1629|    $closeRemoveButton.on('click', () => {
1630|      const selectedNode = getSelectedNode();
1631|      if (!selectedNode || !isNodeClosed(selectedNode)) {
1632|        return;
1633|      }
1634|
1635|      shouldRestoreCloseModalAfterRemoveConfirm = true;
1636|      $removeClosureConfirmModal.data('nodeId', selectedNode.id);
1637|      $closeModal.modal('hide');
1638|      $removeClosureConfirmModal.modal('show');
1639|    });
1640|
1641|    $closeRemoveConfirmButton.on('click', () => {
1642|      const nodeId = $removeClosureConfirmModal.data('nodeId');
1643|      const selectedNode = flattenTree(state.tree).find((node) => Number(node.id) === Number(nodeId));
1644|      if (!selectedNode || !isNodeClosed(selectedNode)) {
1645|        return;
1646|      }
1647|
1648|      shouldRestoreCloseModalAfterRemoveConfirm = false;
1649|      const payload = buildNodePayload(selectedNode, {
1650|        closureType: '',
1651|        closureComment: '',
1652|        connectedNodeId: ''
1653|      });
1654|
1655|      saveNodeClosure(selectedNode, payload, $closeRemoveConfirmButton, 'Fechamento removido com sucesso.', {
1656|        modalToHide: $removeClosureConfirmModal,
1657|        loadingText: 'Removendo...'
1658|      });
1659|    });
1660|
1661|    $deleteModal.find(SELECTORS.deleteConfirm).on('click', () => {
1662|      const nodeId = $deleteModal.data('nodeId');
1663|      if (!nodeId) return;
1664|      const nodeToDelete = getNodeById(nodeId);
1665|      const $deleteButton = $deleteModal.find(SELECTORS.deleteConfirm);
1666|      setButtonLoading($deleteButton, 'Removendo...');
1667|
1668|      api.deleteNode(nodeId)
1669|        .done((response) => {
1670|          if (!response.success) {
1671|            notify('error', response.message || 'Não foi possível remover a causa.');
1672|            return;
1673|          }
1674|
1675|          $deleteModal.modal('hide');
1676|          applyServerState(response, response.meta ? response.meta.rootNodeId : null);
1677|          notify('success', 'Causa removida com sucesso.');
1678|          if (nodeToDelete && nodeToDelete.actionActive) {
1679|            $(document).trigger('causeTreeNodeActionChanged', [nodeToDelete.id, nodeToDelete.title, false]);
1680|          }
1681|        })
1682|        .fail((xhr) => {
1683|          const response = xhr && xhr.responseJSON ? xhr.responseJSON : {};
1684|          notify('error', response.message || 'Não foi possível remover a causa.');
1685|        })
1686|        .always(() => {
1687|          resetButtonLoading($deleteButton);
1688|        });
1689|    });
1690|
1691|    $removeClosureConfirmModal.on('hidden.bs.modal', () => {
1692|      const shouldReopenCloseModal = shouldRestoreCloseModalAfterRemoveConfirm;
1693|      shouldRestoreCloseModalAfterRemoveConfirm = false;
1694|      $removeClosureConfirmModal.removeData('nodeId');
1695|
1696|      if (shouldReopenCloseModal) {
1697|        openCloseModal();
1698|      }
1699|    });
1700|
Request #10 deepseek-flash P:30.1K C:544 CR:27.14K CW:0 3257ms
Reasoning
Important: `$removeClosureConfirmModal` and `$closeModal` are other modals shown while the node modal could be open? The close modal is only opened from floating tools, which now closes the node modal. So no overlap. Hmm but wait: `$closeModal` is opened with `$closeModal.modal('show')` while the node modal is closed (since clicking floating tool closes node modal first via mousedown handler... actually the node modal closing is triggered by mousedown (hide), then click is swallowed so the tool button handler doesn't run). So no overlap. But there's a case: after removing closure confirm, `openCloseModal()` reopens the close modal. Not overlapping with node modal. Now consider: `$removeClosureConfirmModal` — it's a Bootstrap modal with default backdrop (not 'static'), so clicking outside closes it. But the CSS `#ssmaCauseTreeNodeModal { pointer-events: none }` only applies to the node modal, so other modals unaffected. Unless the node modal open class is stuck. Now the key question for issue #1: the stuck class. `hidden.bs.modal` is fired by Bootstrap when the modal finishes hiding. Since hide is triggered via `.modal('hide')`, event should fire. Edge case: if modal removed from DOM mid-transition. Low probability. Also, when the user navigates away (turbo/AJAX page change), the class stays in body classList if the body persists? Typically full page loads. Low. But the more impactful issue: `body.cause-tree-node-modal-open > *` sets pointer-events none on all direct children of body. If toasts (`showToast`) are appended to body, they'd be non-interactive while modal is open. But how often toasts appear while modal open? In `saveNode`, on failure, `notify('error', ...)` is called while the modal stays open (the return after notify happens without hiding). So an error toast appears while node modal open → the toast would be pointer-events: none (if appended directly to body). Let's check the toast helper — is the container a direct child of body? Let me search for showToast implementation.
Tool Calls (2)
code_search
Show Details
{"search_text": "function showToast|showToast ="}
No matches found
code_search
Show Details
{"search_text": "toast-container|toastContainer"}
No matches found
Request #11 deepseek-flash P:30.67K C:160 CR:30.46K CW:0 1682ms
Reasoning
Hmm, no showToast in the repo? Maybe it's minified or in a bundle. Let me search "showToast".
Tool Calls (2)
code_search
Show Details
{"search_text": "showToast"}
Note: The results have been truncated. Only showing first 100 results.
File: .opencodereview/rules/frontend/js.md
Match lines: 1
20|- Feedback de sucesso, erro e validação usa o helper global `showToast` — `alert()`, `Toasts('create', ...)` custom ou toasts locais divergentes são Atenção.

File: .opencodereview/rules/frontend/twig.md
Match lines: 1
29|- Feedback de sucesso/erro/validação usa o helper padrão `showToast`; `alert()` é proibido em fluxo novo.

File: .opencodereview/rules/projects/task-deadline.md
Match lines: 1
64|- Erro 403/400 de prazo usa `showToast` com a mensagem do backend — não `alert()` genérico que esconde o motivo.

File: .opencodereview/rules/ssma/action-plan-panel.md
Match lines: 1
76|- Respostas de sucesso, erro e validação usam o helper global `showToast` — nunca `alert()` nem toast local divergente.

File: .opencodereview/rules/ssma/occurrence-approve.md
Match lines: 1
57|- Feedback usa `showToast`. Não introduzir `alert()`.

File: agents/especialistas/frontend/jquery_specialist.md
Match lines: 2
131|            showToast('User created', 'Success', 'fas fa-check', 'bg-success');
417|                showToast(response.message, 'Success', 'fas fa-check', 'bg-success');

File: docs/engineering/pr/homolog/PR_commits_homolog.txt
Match lines: 5
3466|3a726cb3bf Refactor toast notifications in feed and newsletter templates to include consistent success and error messages with appropriate icons and styles. Replace showAlert function with showToast for better user feedback. Update CSS for dropdowns and KPI labels for improved visibility.
3973|18faa9adf4 fix(pdi): adiciona showToast.js e try/catch no create para feedback correto ao salvar meta PDI
4085|f4340c79cc fix: corrigir assinatura showToast em share-vacancy e CalendarModalService
11104|c09dd937ac goal_comany, goal_member, goal_team new validation functins, commented code in goal_permission that its breaking the modal behaviour and preventing functions like showToast to work propperly
13708|d6ea5ac5eb fix(toast): standardizes showToast function calls

File: docs/escalas-e-turnos/engineering/architecture.md
Match lines: 1
32|- Modal delete SSMA, toast global `showToast`

File: docs/front/features/subsidiary_companies/overview.md
Match lines: 1
101|- `showToast(success, message)` centraliza feedback.

File: docs/qa/communication_center/QA_commits_communication_center.txt
Match lines: 1
74|23faaa181 fix: corrigir assinatura showToast em share-vacancy e CalendarModalService

File: docs/qa/core/merge_arthur_gustavo_dei_assessment.md
Match lines: 1
91|- `showToast` com cores explicitas por tipo (success/error/warning/info), sem depender so das classes padrao.

File: docs/qa/project-goals/QA_commits_project-goals.txt
Match lines: 1
16|05d7c1203 fix(pdi): adiciona showToast.js e try/catch no create para feedback correto ao salvar meta PDI

File: public/AdminLTE/css/custom.css
Match lines: 1
5149| * applies when the toast has no AdminLTE bg-* utility (showToast always passes one).

File: public/AdminLTE/js/custom.js
Match lines: 2
13|    '/js/utils/showToast.js',
25|        showToast,

File: public/finances/payroll.js
Match lines: 6
2010|    const showToast = !!opts.showToast;
2037|      if (showToast) toastr?.error('CPF inválido');
2042|      if (showToast) toastr?.error('CPF já cadastrado');
2047|    if (showToast) warnPayrollMemberCpfChange($input, digits);
3600|        validatePayrollMemberCpfField($(this), { showToast: true });
3611|      const cpfCheck = validatePayrollMemberCpfField($('#payrollMemberCpf'), { showToast: true });

File: public/js/ai_training/index.js
Match lines: 51
105|            showToast(
141|            showToast(
224|                        showToast(
244|                        showToast(
575|                        showToast(
588|                        showToast(
600|                        showToast(
667|                                    showToast(
683|                                showToast(
710|                                                showToast('Falha ao marcar como concluído. Tente novamente.', 'Erro', 'fas fa-times', 'bg-danger');
715|                                            showToast('Erro ao marcar como concluído. Tente novamente.', 'Erro', 'fas fa-times', 'bg-danger');
730|                                showToast('Este item não pode ser desmarcado após a conclusão.', 'Ação Inválida', 'fas fa-lock', 'bg-warning');
786|                        showToast(
870|                showToast(
899|                                    showToast('Não foi possível salvar seu progresso. A navegação foi cancelada.', 'Erro', 'fas fa-times', 'bg-danger');
904|                                showToast('Erro ao salvar seu progresso. A navegação foi cancelada.', 'Erro', 'fas fa-times', 'bg-danger');
961|                    showToast(
973|                    showToast(
1024|                    showToast(
1031|                    showToast(
1502|                showToast(
2244|                                    showToast(
2328|                                            showToast(
2354|                                            showToast(
2369|                                        showToast(
2406|                                    showToast(
2533|                showToast(
2548|                showToast(
3006|                        showToast('Erro: Nenhuma lição ativa. Selecione novamente a avaliação.', 'Erro', 'fas fa-times', 'bg-danger');
3049|                                    showToast('Avaliação marcada como concluída!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
3056|                                    showToast('Falha ao concluir a avaliação. ' + (response ? response.error : 'Erro desconhecido'), 'Erro', 'fas fa-times', 'bg-danger');
3065|                                showToast('Erro: ' + error.message, 'Erro', 'fas fa-times', 'bg-danger');
3079|                        showToast('Avaliação marcada como concluída! (Modo Teste)', 'Sucesso', 'fas fa-check-circle', 'bg-info');
3373|                    showToast(
3441|                    showToast(
4171|                showToast(
4221|                                showToast(
4246|                                showToast(
4254|                            showToast(
4263|                        showToast(
4288|                        showToast(
4295|                        showToast(
4314|                showToast('Avaliação concluída (Modo Teste)', 'Avaliação Salva', 'fas fa-check', 'bg-info');
4319|            /* showToast(
4421|                    showToast(
5333|                        showToast('Módulo concluído com sucesso!', 'Módulo Concluído', 'fas fa-trophy', 'bg-success');
5335|                        showToast('Não foi possível marcar o módulo como concluído.', 'Erro', 'fas fa-times', 'bg-danger');
5340|                    showToast('Erro ao marcar o módulo como concluído.', 'Erro', 'fas fa-times', 'bg-danger');
6417|			showToast('Avaliação salva com sucesso!', 'Concluído', 'fas fa-check-circle', 'bg-success');
9474|			if (typeof showToast === 'function') {
9475|				showToast('Avaliação concluída!', 'Concluído', 'fas fa-check-circle', 'bg-success');

File: public/js/app/contratadosTab.js
Match lines: 7
71|                showToast(response.message, 'Sucesso!', 'fas fa-check', 'bg-success');
75|                showToast(errorMessage, 'Erro!', 'fas fa-exclamation-circle', 'bg-danger');
99|                    showToast(response.message, 'Sucesso!', 'fas fa-check', 'bg-success'); 
102|                    showToast('Falha ao atualizar o estado do documento.', 'Erro!', 'fas fa-exclamation-circle', 'bg-danger'); 
105|                showToast('Falha ao processar a solicitação.', 'Erro!', 'fas fa-exclamation-circle', 'bg-danger'); 
222|        showToast(response.message, 'Sucesso', 'fas fa-check', 'bg-success');
225|        showToast(errorMessage, 'Erro', 'fas fa-exclamation-triangle', 'bg-warning');

File: public/js/chat/features/chat-webrtc-integration.js
Match lines: 12
111|                if (typeof showToast === 'function') {
112|                    showToast('Este usuário não está disponível no momento', 'Indisponível', 'fas fa-user-clock', 'bg-warning');
128|                    if (typeof showToast === 'function') {
129|                        showToast('Esta chamada já está ativa em outro dispositivo', 'Chamada Ativa', 'fas fa-mobile-alt', 'bg-info');
163|                    if (typeof showToast === 'function') {
164|                        showToast(message, title, icon, toastClass);
173|                if (typeof showToast === 'function') {
174|                    showToast('Erro ao verificar disponibilidade. Tente novamente.', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
669|        } else if (typeof showToast === 'function') {
670|            showToast(message, 'Erro na Chamada', 'fas fa-exclamation-circle', 'bg-danger');
680|        } else if (typeof showToast === 'function') {
681|            showToast(message, 'Aviso', 'fas fa-exclamation-triangle', 'bg-warning');

File: public/js/chat_ia/interview_ia.js
Match lines: 8
16|  function showToast(type, message) {
196|        showToast("success", "Link copiado com sucesso");
198|        showToast("error", "Nao foi possivel copiar o link");
220|      showToast("warning", "Titulo e obrigatorio");
225|      showToast("warning", "Upload de roteiro e obrigatorio");
239|        showToast("warning", error.message || "Preencha corretamente as midias.");
273|      showToast("success", "Quadro salvo com sucesso");
275|      showToast("error", error.message || "Falha ao criar quadro de pesquisas");

File: public/js/chat_ia/nps_ia.js
Match lines: 7
32|  function showToast(type, message) {
232|        showToast("success", "Perguntas selecionadas salvas com sucesso");
236|        showToast("error", err.message || "Erro ao salvar perguntas");
251|      showToast("warning", "Titulo da pesquisa e obrigatorio");
269|        showToast("warning", error.message || "Preencha corretamente os dados das midias.");
293|        showToast("success", "Pesquisa criada com sucesso");
299|      showToast("error", err.message || "Erro ao criar pesquisa");

File: public/js/chat_ia/ssma_prevention_handoff.js
Match lines: 2
46|        if (typeof window.showToast === 'function') {
47|            window.showToast(msg, 'Aviso', 'fas fa-info-circle', 'bg-warning');

File: public/js/chat_ia/workflow_approval_modal.js
Match lines: 2
1019|    if (typeof window.showToast === 'function') {
1020|      window.showToast(text, 'error');

File: public/js/company_customization/company-branding-form.js
Match lines: 3
890|        showToast(message, title || 'Atenção', 'fas fa-exclamation-triangle', bgColor || 'bg-danger');
979|                    showToast('Faça upload de um logo para gerar a sugestão.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-danger');
1061|                    showToast(response.message || 'Branding salvo com sucesso.', 'Sucesso', 'fas fa-check', 'bg-success');

File: public/js/company_customization/company-home-hero-form.js
Match lines: 4
58|        showToast((response && response.message) || 'Não foi possível salvar.', 'Erro', 'fas fa-times', 'bg-danger');
69|      showToast(response.message || 'Imagem de fundo salva com sucesso.', 'Sucesso', 'fas fa-check', 'bg-success');
75|      showToast(message, 'Erro', 'fas fa-times', 'bg-danger');
93|        showToast('A imagem deve ter no máximo 4 MB.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-danger');

File: public/js/company_customization/company-workarea-loading.js
Match lines: 4
100|      showToast('A imagem deve ter no máximo 4 MB.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-danger');
139|        showToast((response && response.message) || 'Não foi possível salvar.', 'Erro', 'fas fa-times', 'bg-danger');
167|      showToast(response.message || 'Tela de área de trabalho salva com sucesso.', 'Sucesso', 'fas fa-check', 'bg-success');
173|      showToast(message, 'Erro', 'fas fa-times', 'bg-danger');

File: public/js/employee-advocacy/share-vacancy.js
Match lines: 4
437|        if (typeof showToast === 'function') {
438|            showToast(message, title, 'fas fa-times-circle', 'bg-danger');
448|        if (typeof showToast === 'function') {
449|            showToast(message, title, 'fas fa-check-circle', 'bg-success');

File: public/js/goal-adriana-create-modal.js
Match lines: 2
309|        if (typeof window.showToast === 'function') {
310|            window.showToast(message, title, icon, bg);

File: public/js/goal-check-in.js
Match lines: 2
726|                if (typeof window.showToast === 'function') {
727|                    window.showToast(error.message, 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');

File: public/js/goal-item-menu-handlers.js
Match lines: 4
38|                if (window.showToast && successMessage) {
39|                    window.showToast(successMessage, 'Sucesso', 'fas fa-check-circle', 'bg-success');
44|                if (window.showToast) {
45|                    window.showToast(error.message, 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');

File: public/js/goals-company-offcanvas.js
Match lines: 24
251|        } else if (window.showToast) {
252|            window.showToast(message, 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
488|            if (window.showToast) {
489|                window.showToast(invalid[1], 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
496|            if (window.showToast) {
497|                window.showToast(
509|            if (window.showToast) {
510|                window.showToast('Informe a unidade personalizada.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
516|            if (window.showToast) {
517|                window.showToast('Os valores devem respeitar os limites da forma de medição.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
636|            if (window.showToast) {
637|                window.showToast(invalid[1], 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
644|            if (window.showToast) {
645|                window.showToast(
905|            if (result.warnings?.length && window.showToast) {
906|                window.showToast(
912|            } else if (window.showToast) {
913|                window.showToast('Meta salva com sucesso!', 'Sucesso', 'fa-check-circle', 'bg-success');
1017|            if (window.showToast) {
1018|                window.showToast(error.message, 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
1139|            if (window.showToast) {
1140|                window.showToast('Resultado adicionado à lista.', 'Sucesso', 'fa-check-circle', 'bg-success');
1256|            if (window.showToast) {
1257|                window.showToast('Ação adicionada à lista.', 'Sucesso', 'fa-check-circle', 'bg-success');

File: public/js/governance/governance-authorization-view-monitoring.js
Match lines: 2
1092|        if (typeof window.showToast === 'function') {
1095|            window.showToast(message, type === 'success' ? 'Sucesso' : 'Atenção', icons[type] || icons.warning, bg[type] || bg.warning);

File: public/js/metahuman-standard/pages/organizational_structure_index.js
Match lines: 23
170|                showToast(
180|            showToast(
469|                showToast(
498|            showToast(message, 'Erro!', 'fas fa-exclamation-triangle', 'bg-danger');
506|            showToast('Nenhuma alteração pendente.', 'Atenção!', 'fas fa-exclamation-triangle', 'bg-warning');
523|                showToast(response.message || 'Erro ao atualizar membros.', 'Erro!', 'fas fa-exclamation-triangle', 'bg-danger');
526|            showToast(
536|            showToast(message, 'Erro!', 'fas fa-exclamation-triangle', 'bg-danger');
771|                showToast(
780|            showToast(
799|            showToast(message, 'Erro!', 'fas fa-exclamation-triangle', 'bg-danger');
884|                showToast(
898|            showToast(
1409|            showToast('Informe o ' + orgLabelAreaTitleLower + '.', 'Atenção!', 'fas fa-exclamation-triangle', 'bg-warning');
1421|                showToast(
1430|            showToast(
1441|            showToast(message, 'Erro!', 'fas fa-exclamation-triangle', 'bg-danger');
1477|                    showToast(
1485|                    showToast(
1524|                                showToast(
1541|                            showToast(
1556|                            showToast(
1592|                showToast(

File: public/js/offboarding/offboardingActivityController.js
Match lines: 30
161|                        showToast('Selecione um template.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
167|                            showToast('Esta atividade já foi adicionada a esta etapa.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
211|                    showToast('Imagem inválida (formato ou tamanho).','Erro','fas fa-times-circle','bg-danger');
366|            showToast('Modal não encontrado. Verifique se o arquivo foi incluído.', 'Erro', 'fas fa-times-circle', 'bg-danger');
470|                showToast('Você precisa selecionar uma opção: usar template ou criar nova atividade.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
886|                showToast(
1002|            showToast('Modal de imagem não encontrado.', 'Erro', 'fas fa-times-circle', 'bg-danger');
1040|            showToast('Por favor, selecione uma imagem.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
1145|            showToast('Erro ao criar atividade.', 'Erro', 'fas fa-times-circle', 'bg-danger');
1159|            showToast('Atividade criada na biblioteca com sucesso!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
1176|        showToast('Erro inesperado ao criar atividade.', 'Erro', 'fas fa-times-circle', 'bg-danger');
1189|            showToast('Erro ao editar atividade.', 'Erro', 'fas fa-times-circle', 'bg-danger');
1207|        showToast('Atividade editada com sucesso!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
1213|        showToast('Erro inesperado ao editar atividade.', 'Erro', 'fas fa-times-circle', 'bg-danger');
1224|            showToast('Erro ao excluir atividade.', 'Erro', 'fas fa-times-circle', 'bg-danger');
1243|        showToast('Atividade excluída com sucesso!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
1249|        showToast('Erro inesperado ao excluir atividade.', 'Erro', 'fas fa-times-circle', 'bg-danger');
1260|        showToast(
1303|        showToast('Erro inesperado ao duplicar atividade.', 'Erro', 'fas fa-times-circle', 'bg-danger');
1311|        showToast(
1325|            showToast('Erro ao adicionar atividade à etapa.', 'Erro', 'fas fa-times-circle', 'bg-danger');
1336|        showToast('Atividade adicionada à etapa com sucesso!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
1340|        showToast('Ocorreu um erro ao adicionar atividade à etapa.', 'Erro', 'fas fa-times-circle', 'bg-danger');
1352|            showToast('Erro ao remover atividade da etapa.', 'Erro', 'fas fa-times-circle', 'bg-danger');
1366|        showToast('Atividade removida da etapa com sucesso!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
1370|        showToast('Ocorreu um erro ao remover atividade da etapa.', 'Erro', 'fas fa-times-circle', 'bg-danger');
1417|                showToast(data.message || 'Erro ao criar atividade.', 'Erro', 'fas fa-times-circle', 'bg-danger');
1423|            showToast('Erro de conexão ao criar atividade.', 'Erro', 'fas fa-times-circle', 'bg-danger');
1438|                showToast(data.message || 'Erro ao criar atividade.', 'Erro', 'fas fa-times-circle', 'bg-danger');
1444|            showToast('Erro de conexão ao criar atividade.', 'Erro', 'fas fa-times-circle', 'bg-danger');

File: public/js/offboarding/offboardingMemberController.js
Match lines: 4
1007|        showToast('Membro não encontrado.', 'Erro', 'fas fa-times-circle', 'bg-danger');
1698|        showToast(error.message || 'Erro ao atualizar membro de offboarding.', 'Erro', 'fas fa-times-circle', 'bg-danger');
1884|            showToast('Solicitação aceita, mas houve problema no envio do email', 'Aviso', 'fas fa-exclamation-triangle', 'bg-warning');
1925|            showToast('Solicitação recusada, mas houve problema no envio do email', 'Aviso', 'fas fa-exclamation-triangle', 'bg-warning');

File: public/js/offboarding/offboardingStepController.js
Match lines: 7
283|            showToast('Preencha nome e tipo de avanço.', 'Atenção', 'fas fa-exclamation-triangle','bg-warning');
316|            showToast(`Etapa ${acao === 'criar' ? 'criada' : 'atualizada'} com sucesso!`, 'Sucesso','fas fa-check-circle','bg-success');
322|        showToast(`Erro ao ${acao === 'criar' ? 'criar' : 'salvar'} etapa: ${error.message}`, 'Erro','fas fa-times-circle','bg-danger');
339|                    showToast('Etapa excluída com sucesso!','Sucesso','fas fa-check-circle','bg-success');
345|                showToast(`Erro ao excluir etapa: ${error.message}`,'Erro','fas fa-times-circle','bg-danger');
376|                    showToast('Etapa duplicada com sucesso!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
382|                showToast(

File: public/js/offboarding/utils.js
Match lines: 2
370|    showToast(message, 'Sucesso', 'fas fa-check-circle', 'bg-success');
374|    showToast(message, 'Erro', 'fas fa-times-circle', 'bg-danger');

File: public/js/offboarding/visualizar_atividades.js
Match lines: 44
86|            showToast('Informe o motivo do desligamento.', 'Campo obrigatório', 'fas fa-exclamation-triangle', 'bg-warning');
146|                showToast(
156|            showToast('Erro ao processar solicitação.', 'Erro', 'fas fa-times-circle', 'bg-danger');
165|            showToast('Informe o link da carta.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
168|        showToast('Link da carta adicionado!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
1077|            showToast(
1096|            showToast('Etapa não encontrada ou não liberada.', 'Erro', 'fas fa-times', 'bg-danger');
1119|                    showToast('Nenhuma atividade encontrada nesta etapa.', 'Erro', 'fas fa-times', 'bg-danger');
1428|                    showToast('Link confirmado com sucesso!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
1431|                    showToast('Informe um link válido. Ele deve começar com http:// ou https://', 'Campo inválido', 'fas fa-exclamation-triangle', 'bg-warning');
1572|        if (typeof showToast !== 'undefined') {
1573|            showToast(msg, 'Erro', 'fas fa-times', 'bg-danger');
1580|        if (typeof showToast !== 'undefined') {
1581|            showToast(msg, 'Sucesso', 'fas fa-check', 'bg-success');
2154|        showToast('Solicitação não encontrada.', 'Erro', 'fas fa-times-circle', 'bg-danger');
2164|        showToast('Solicitação não encontrada.', 'Erro', 'fas fa-times-circle', 'bg-danger');
2195|                showToast('Solicitação de desligamento excluída com sucesso.', 'Sucesso', 'fas fa-check-circle', 'bg-success');
2198|                showToast(error.message || 'Erro ao excluir. Tente novamente.', 'Erro', 'fas fa-times-circle', 'bg-danger');
2347|        showToast('Offboarding não encontrado.', 'Erro', 'fas fa-times', 'bg-danger');
2355|        showToast(
2375|                    showToast('Erro ao iniciar o offboarding.', 'Erro', 'fas fa-times', 'bg-danger');
2449|        showToast('Erro ao iniciar o offboarding.', 'Erro', 'fas fa-times', 'bg-danger');
2472|            showToast('Você não possui acesso a este offboarding.', 'Erro', 'fas fa-times', 'bg-danger');
2941|        if (typeof showToast !== 'undefined') {
2942|            showToast('ID da atividade não encontrado.', 'Erro', 'fas fa-times', 'bg-danger');
2951|        if (typeof showToast !== 'undefined') {
2952|            showToast('Atividade não encontrada.', 'Erro', 'fas fa-times', 'bg-danger');
2966|            if (typeof showToast !== 'undefined') {
2967|                showToast('Erro ao renderizar a atividade.', 'Erro', 'fas fa-times', 'bg-danger');
2973|        if (typeof showToast !== 'undefined') {
2974|            showToast('Erro ao abrir visualização da atividade.', 'Erro', 'fas fa-times', 'bg-danger');
3013|            showToast('Não foi possível carregar o conteúdo da atividade.', 'Erro', 'fas fa-times', 'bg-danger');
3341|        showToast(
3465|                showToast('Link confirmado com sucesso!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
3468|                showToast('Informe um link válido. Ele deve começar com http:// ou https://', 'Campo inválido', 'fas fa-exclamation-triangle', 'bg-warning');
3528|        showToast('Confirme todos os links obrigatórios antes de enviar as assinaturas.', 'Campo obrigatório', 'fas fa-exclamation-triangle', 'bg-warning');
3546|            showToast('Assinaturas enviadas com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
3548|            showToast(result.message || 'Erro ao salvar assinaturas.', 'Erro', 'fas fa-times', 'bg-danger');
3555|        showToast('Erro de conexão ao salvar assinaturas.', 'Erro', 'fas fa-times', 'bg-danger');
3578|        showToast('Erro ao desmarcar atividade. Tente novamente.', 'Erro', 'fas fa-times', 'bg-danger');
3898|                showToast(
3922|        showToast('Erro ao identificar etapas.', 'Erro', 'fas fa-times-circle', 'bg-danger');
3989|        showToast('Etapa alterada com sucesso!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
3995|        showToast(error.message || 'Erro ao alterar etapa.', 'Erro', 'fas fa-times-circle', 'bg-danger');

File: public/js/onboarding/onboardingActivityController.js
Match lines: 46
53|                            showToast('Selecione um template.', 'Atenção', 'fa-solid fa-triangle-exclamation', 'bg-warning');
60|                            showToast('Esta atividade já foi adicionada a esta etapa.', 'Atenção', 'fa-solid fa-triangle-exclamation', 'bg-warning');
600|                    showToast(
841|                showToast(
957|                showToast('Erro inesperado ao salvar atividade.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
1161|                    showToast(
1186|                    showToast(
1279|                showToast('Erro ao criar atividade.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
1289|                showToast('Atividade criada na biblioteca com sucesso!', 'Sucesso', 'fa-solid fa-circle-check', 'bg-success');
1300|            showToast('Erro inesperado ao criar atividade.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
1311|                showToast('Erro ao editar atividade.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
1343|                showToast('Atividade da etapa atualizada com sucesso!', 'Sucesso', 'fa-solid fa-circle-check', 'bg-success');
1357|            showToast('Atividade editada com sucesso!', 'Sucesso', 'fa-solid fa-circle-check', 'bg-success');
1362|            showToast('Erro inesperado ao editar atividade.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
1373|                showToast('Erro ao excluir atividade.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
1388|            showToast('Atividade excluída com sucesso!', 'Sucesso', 'fa-solid fa-circle-check', 'bg-success');
1394|            showToast('Erro inesperado ao excluir atividade.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
1407|                    showToast('Etapa não encontrada!', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
1435|                        showToast('Atividade duplicada com sucesso!', 'Sucesso', 'fa-solid fa-circle-check', 'bg-success');
1438|                        showToast(result.message || 'Erro ao duplicar atividade.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
1445|                        showToast('Template de atividade não encontrado.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
1493|                        showToast('Atividade duplicada com sucesso!', 'Sucesso', 'fa-solid fa-circle-check', 'bg-success');
1496|                        showToast(result.message || 'Erro ao duplicar atividade.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
1504|                    showToast('Template de atividade não encontrado.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
1540|            showToast('Erro inesperado ao duplicar atividade.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
1551|            showToast(
1565|                showToast(
1579|            showToast(
1588|            showToast(
1605|                showToast('Etapa não encontrada!', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
1617|                showToast('Erro ao remover atividade da etapa.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
1643|            showToast('Atividade removida da etapa com sucesso!', 'Sucesso', 'fa-solid fa-circle-check', 'bg-success');
1647|            showToast('Ocorreu um erro ao remover atividade da etapa.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
1688|                        showToast('Por favor, preencha os campos "Quantidade de Dias", "Direção Relativa" e "Referência de Data".', 'Campos obrigatórios', 'fa-solid fa-triangle-exclamation', 'bg-warning');
1690|                        showToast('Quando selecionar "Antes" na Direção Relativa, a Data de Referência deve ser "Contrato".', 'Validação', 'fa-solid fa-triangle-exclamation', 'bg-warning');
1692|                        showToast(data.message, 'Erro de validação', 'fa-solid fa-triangle-exclamation', 'bg-warning');
1694|                        showToast(data.message || 'Erro ao criar atividade.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
1718|                        showToast('Por favor, preencha os campos "Quantidade de Dias", "Direção Relativa" e "Referência de Data".', 'Campos obrigatórios', 'fa-solid fa-triangle-exclamation', 'bg-warning');
1720|                        showToast('Quando selecionar "Antes" na Direção Relativa, a Data de Referência deve ser "Contrato".', 'Validação', 'fa-solid fa-triangle-exclamation', 'bg-warning');
1722|                        showToast(data.message, 'Erro de validação', 'fa-solid fa-triangle-exclamation', 'bg-warning');
1724|                        showToast(data.message || 'Erro ao criar atividade.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
2086|            showToast(
2094|            showToast(
2103|        showToast(
2380|        if (typeof showToast === 'function') {
2381|            showToast('Erro ao carregar documentos do Neural de Documentos.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');

File: public/js/onboarding/visualizar_atividades.js
Match lines: 6
635|            showToast('Atividade não encontrada!', 'Erro', 'fa-solid fa-circle-exclamation', 'bg-danger');
728|                showToast('Tipo de atividade inválido', 'Erro', 'fa-solid fa-circle-exclamation', 'bg-danger');
1152|                    if (typeof showToast === 'function') showToast('Não foi possível avançar.', 'Erro', 'fa-solid fa-circle-exclamation', 'bg-danger');
1158|                if (typeof showToast === 'function') showToast(err.message || 'Erro ao avançar etapa.', 'Erro', 'fa-solid fa-circle-exclamation', 'bg-danger');
2330|        if (showSuccessToast && typeof showToast === 'function') {
2331|            showToast('Link confirmado com sucesso!', 'Sucesso', 'fa-solid fa-check', 'bg-success');

File: public/js/organizational_structure/org_structure_enhancements.js
Match lines: 1
259|            showToast(

File: public/js/projects/GanttChart.js
Match lines: 4
4350|            showToast('Relacionamento entre tarefas criado com sucesso', 'Sucesso', 'fas fa-check', 'bg-success');
4355|            showToast('Erro ao criar relacionamento entre tarefas', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
4768|            showToast('Relacionamento entre tarefas removido com sucesso', 'Sucesso', 'fas fa-check', 'bg-success');
4810|            showToast('Erro ao remover relacionamento entre tarefas', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');

File: public/js/projects/ProfessionalGanttChart.js
Match lines: 4
4350|            showToast('Relacionamento entre tarefas criado com sucesso', 'Sucesso', 'fas fa-check', 'bg-success');
4355|            showToast('Erro ao criar relacionamento entre tarefas', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
4768|            showToast('Relacionamento entre tarefas removido com sucesso', 'Sucesso', 'fas fa-check', 'bg-success');
4810|            showToast('Erro ao remover relacionamento entre tarefas', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');

File: public/js/services/CalendarModalService.js
Match lines: 14
6777|    if (typeof showToast === "function") {
6778|      showToast(message, "Sucesso", "fas fa-check", "bg-success");
6788|    if (typeof showToast === "function") {
6789|      showToast(message, "Erro", "fas fa-times-circle", "bg-danger");
7603|          // Tentar usar showToast como fallback
7604|          this.tryShowToast(message);
7607|    } else if (typeof showToast === "function") {
7608|      // Usar showToast se toastr não estiver disponível
7609|      showToast(message, "Sucesso", "fas fa-check", "bg-success");
7617|   * ✅ NOVO: Tenta usar showToast como fallback
7619|  tryShowToast(message) {
7621|      if (typeof showToast === "function") {
7622|        showToast(message, "Sucesso", "fas fa-check", "bg-success");
7627|      console.error("Erro ao usar showToast:", error);

File: public/js/shift-scheduling/index.js
Match lines: 2
241|      if (typeof showToast === 'function') {
242|        showToast(message, config.title, config.icon, config.bg);

File: public/js/ssma/action_plan_panel.js
Match lines: 6
431|        if (typeof window.showToast === 'function') {
432|            window.showToast(message, title || 'Plano de Ação', icon || 'fas fa-info-circle', tone || 'bg-info');
2017|        if (typeof window.showToast === 'function') {
2018|            window.showToast(
2565|                    } else if (typeof window.showToast === 'function') {
2566|                        window.showToast(q, 'Adriana', 'fa-regular fa-sparkles', 'bg-info');

File: public/js/ssma/cause-tree-committee-card.js
Match lines: 6
115|            if (typeof window.showToast === 'function') {
116|                window.showToast('Seletor de membros indisponível. Recarregue a página.', 'Erro', 'fas fa-times', 'bg-danger');
245|                if (typeof window.showToast === 'function') {
246|                    window.showToast('Card do comitê indisponível. Recarregue a página.', 'Erro', 'fas fa-times', 'bg-danger');
289|            if (typeof window.showToast === 'function') {
290|                window.showToast(error, 'Atenção', 'fas fa-info', 'bg-warning');

File: public/js/ssma/tree_view.js
Match lines: 2
99|    if (typeof window.showToast === 'function') {
100|      window.showToast(message, title, icon, bgColor);

File: public/js/utils/showToast.js
Match lines: 1
1|function showToast(message, title, iconClass, bgColor) {

File: public/js/webrtc-calls.js
Match lines: 14
1982|            if (typeof showToast === 'function') {
1983|                showToast('Chamada atendida em outro dispositivo', 'Informação', 'fas fa-phone', 'bg-info');
3185|                if (typeof showToast === 'function') {
3186|                    showToast('Compartilhamento de tela cancelado', 'Informação', 'fas fa-desktop', 'bg-info');
3193|            if (typeof showToast === 'function') {
3194|                showToast('Erro ao compartilhar tela: ' + (error.message || 'Erro desconhecido'), 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
4413|        if (typeof showToast === 'function') {
4414|            showToast(message, title, icon, 'bg-warning');
4437|        if (typeof showToast === 'function') {
4438|            showToast('Chamada cancelada', 'Informação', 'fas fa-phone-slash', 'bg-info');
5162|            if (typeof showToast === 'function') {
5163|                showToast(message, toastTitle, toastIcon, toastClass);
5177|        if (!isPermissionError && typeof showToast === 'function') {
5178|            showToast(message, toastTitle, toastIcon, toastClass); 

File: templates/LiveInterviewSchedule/_modal_required_evaluator.html.twig
Match lines: 3
67|                        showToast('Especialista solicitado com sucesso!', "Sucesso", true);
73|                        showToast(response.message || 'Erro ao solicitar especialista.', false);
81|                    showToast(errorMessage, false);

File: templates/a360/search_wall/externo/canva-externo.html.twig
Match lines: 4
638|        showToast('Adicione pelo menos uma referência antes de enviar a avaliação.', false);
650|            showToast('Avaliação enviada com sucesso!', true);
658|            showToast('Erro ao enviar avaliação. Tente novamente.', false);
666|function showToast(message, isSuccess) {

File: templates/bank_returns/index.html.twig
Match lines: 8
1596|                showToast(resp.message || 'Cancelado.', 'success');
1600|                showToast(resp && resp.message ? resp.message : 'Não foi possível cancelar.', 'error');
1604|            showToast(msg, 'error');
1621|                showToast(resp.message || 'Processado com sucesso.', 'success');
1628|                showToast(resp && resp.message ? resp.message : 'Não foi possível processar.', 'error');
1632|            showToast(msg, 'error');
3303|    function showToast(message, type) {
3311|    window.showToast = showToast;

File: templates/calendar_member/calendar_member_old.html.twig
Match lines: 6
799|                            showToast(titleMessage, successMessage, typeMessage);
956|            function showToast(title, message, toastClass) {
1243|                        showToast(titleMessage, successMessage, typeMessage);
1264|                            showToast(titleMessage, successMessage, typeMessage);
1271|                        showToast(titleMessage, successMessage, typeMessage);
2337|    <script src="{{ asset('js/utils/showToast.js') }}"></script>

File: templates/calendar_member/tabs/_calendar_tab.html.twig
Match lines: 8
3253|    // ✅ NOVO: Função showToast como fallback para notificações
3254|    function showToast(title, message, toastClass) {
3768|                    showToast(successMessage, titleMessage, icon, typeMessage);
4705|                showToast(successMessage, titleMessage, icon, typeMessage);
7342|            // Usar showToast se disponível, senão usar o sistema de toast padrão
7343|            if (typeof showToast === 'function') {
7344|                showToast(err_msg, 'Campos Obrigatórios', 'fas fa-exclamation-triangle', 'bg-warning');
8311|<script src="{{ asset('js/utils/showToast.js') }}"></script>

File: templates/calendar_member/tabs/_calendar_tab_old.html.twig
Match lines: 5
742|                    showToast(titleMessage, successMessage, typeMessage);
894|    function showToast(title, message, toastClass) {
1187|                showToast(titleMessage, successMessage, typeMessage);
1208|                    showToast(titleMessage, successMessage, typeMessage);
1215|                showToast(titleMessage, successMessage, typeMessage);

File: templates/calendar_member/tabs/_permissions_tab.html.twig
Match lines: 2
916|                    if (typeof showToast === 'function') {
917|                        showToast('Permissão atualizada com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');

File: templates/candidate/_tab_skill_test_tasks.html.twig
Match lines: 3
526|                    showToast(response.message, 'Sucesso', 'fas fa-check-circle', 'bg-success');
529|                    showToast(response.message || 'Erro ao atualizar visibilidade.', 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
537|                showToast(errorMessage, 'Erro', 'fas fa-exclamation-circle', 'bg-danger');

File: templates/candidate/cv_review.html.twig
Match lines: 4
333|            showToast("A nota deve estar entre 0 e 100.", "Erro", "fas fa-exclamation-circle", "bg-danger");
371|                showToast("Avaliação do CV salva com sucesso!", "Sucesso", "fas fa-check-circle", "bg-success");
373|                showToast("Erro ao salvar: " + data.message, "Erro", "fas fa-times-circle", "bg-danger");
378|            showToast("Ocorreu um erro ao salvar a avaliação.", "Erro", "fas fa-times-circle", "bg-danger");

File: templates/candidate/profile.html.twig
Match lines: 5
3430|    function showToast(title, message, toastClass) {
3445|            showToast('Error', 'ID do especialista não encontrado!', 'bg-danger'); 
3461|                showToast('Success', 'Especialista removido com sucesso!', 'bg-success'); 
3463|                showToast('Error', 'Erro ao remover especialista: ' + data.message, 'bg-danger');
3468|            showToast('Error', 'Houve um erro ao tentar remover o especialista.', 'bg-danger');

File: templates/chat/components/chat_ia_tool.html.twig
Match lines: 2
308|        showToast(message, duration = 3000) {
412|                UI.showToast(CONFIG.ERROR_MESSAGES.COPY_SUCCESS);

File: templates/chat/components/tools/automations.html.twig
Match lines: 17
787|            showToast('Por favor, selecione um tipo de automação.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
842|                showToast('Por favor, selecione o horário.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
848|                showToast('Por favor, selecione o horário.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
854|                showToast('Por favor, selecione o horário.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
860|                showToast('Por favor, selecione a data específica.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
865|                showToast('Por favor, selecione o horário.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
871|                showToast('Por favor, selecione o horário.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
879|            showToast('Por favor, digite a mensagem.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
888|            showToast('Por favor, selecione pelo menos um canal para resumir.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
898|                showToast('Por favor, selecione o horário.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
904|                showToast('Por favor, selecione o horário.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
910|                showToast('Por favor, selecione o horário.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
916|                showToast('Por favor, selecione a data específica.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
921|                showToast('Por favor, selecione o horário.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
927|                showToast('Por favor, selecione o horário.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
973|    showToast(successMessage, 'Sucesso', 'fas fa-check-circle', 'bg-success');
1318|            showToast('Automação excluída com sucesso!', 'Sucesso', 'fas fa-check-circle', 'bg-success');

File: templates/chat/layout.html.twig
Match lines: 4
3698|                        } else if (typeof showToast === 'function') {
3699|                            showToast(error.message, 'error');
3709|                } else if (typeof showToast === 'function') {
3710|                    showToast('WebRTC não suportado neste navegador', 'warning');

File: templates/communication_center/demand_view/tabs/_tab_home.html.twig
Match lines: 2
341|                showToast('Comentário enviado.', 'Sucesso', 'fas fa-check', 'bg-success');
349|                showToast(message, 'Erro', 'fas fa-times-circle', 'bg-danger');

File: templates/communication_center/index.html.twig
Match lines: 4
144|                    if (typeof showToast === 'function') {
145|                        showToast((res && res.message) || 'Não foi possível carregar o modal.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
160|                if (typeof showToast === 'function') {
161|                    showToast('Erro ao carregar modais SSMA.', 'Erro', 'fas fa-times', 'bg-danger');

File: templates/communication_center/partials/_demand_action_xhr.html.twig
Match lines: 2
21|                showToast(resp.message || 'Erro ao executar ação.', 'Erro', 'fas fa-xmark', 'bg-danger');
39|            showToast('Erro de comunicação com o servidor.', 'Erro', 'fas fa-xmark', 'bg-danger');

File: templates/communication_center/partials/_modal_aprovar_demand.html.twig
Match lines: 1
47|            showToast('Demanda aprovada com sucesso.', 'Sucesso', 'fas fa-check', 'bg-success');

File: templates/communication_center/partials/_modal_arquivar_demand.html.twig
Match lines: 1
37|            showToast('Demanda arquivada com sucesso.', 'Sucesso', 'fas fa-check', 'bg-success');

File: templates/communication_center/partials/_modal_create_demand.html.twig
Match lines: 8
749|                showToast(
773|            showToast(
830|                        showToast(response.message || 'Demanda criada com sucesso!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
835|                    showToast('Não foi possível criar a demanda.', 'Erro', 'fas fa-times-circle', 'bg-danger');
842|                    showToast(message, 'Erro', 'fas fa-times-circle', 'bg-danger');
877|                        showToast(response.message || 'Demanda atualizada com sucesso!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
882|                    showToast('Não foi possível atualizar a demanda.', 'Erro', 'fas fa-times-circle', 'bg-danger');
889|                    showToast(message, 'Erro', 'fas fa-times-circle', 'bg-danger');

File: templates/communication_center/partials/_modal_desarquivar_demand.html.twig
Match lines: 1
36|            showToast('Demanda desarquivada com sucesso.', 'Sucesso', 'fas fa-check', 'bg-success');

File: templates/communication_center/partials/_modal_reabrir_demand.html.twig
Match lines: 1
37|            showToast('Demanda reaberta com sucesso.', 'Sucesso', 'fas fa-check', 'bg-success');

File: templates/communication_center/partials/_modal_reprovar_demand.html.twig
Match lines: 1
47|            showToast('Demanda reprovada.', 'Atenção', 'fas fa-xmark', 'bg-danger');

File: templates/communication_center/partials/_modal_resolver_demand.html.twig
Match lines: 1
165|            showToast('Demanda resolvida com sucesso.', 'Sucesso', 'fas fa-check', 'bg-success');

File: templates/communication_center/partials/_ssma_validation_modal_handlers.html.twig
Match lines: 6
22|                    if (typeof showToast === 'function') {
23|                        showToast(res.message, 'Sucesso', 'fas fa-check', 'bg-success');
26|                } else if (typeof showToast === 'function') {
27|                    showToast(res.message || 'Erro ao processar.', 'Erro', 'fas fa-times', 'bg-danger');
31|                if (typeof showToast === 'function') {
32|                    showToast('Erro ao comunicar com o servidor.', 'Erro', 'fas fa-times', 'bg-danger');

File: templates/communication_center/tabs/_tab_automations.html.twig
Match lines: 12
195|                showToast(data.message || 'Erro ao alterar automação.', 'Erro', 'fas fa-times', 'bg-danger');
202|            showToast('Erro ao alterar automação.', 'Erro', 'fas fa-times', 'bg-danger');
212|            showToast('Modal de confirmação indisponível.', 'Erro', 'fas fa-times', 'bg-danger');
230|                    showToast('Automação excluída.', 'Sucesso', 'fas fa-check', 'bg-success');
233|                    showToast(data.message || 'Erro ao excluir.', 'Erro', 'fas fa-times', 'bg-danger');
237|                showToast('Erro ao excluir automação.', 'Erro', 'fas fa-times', 'bg-danger');
264|                showToast('Automação copiada.', 'Sucesso', 'fas fa-check', 'bg-success');
267|                showToast(data.message || 'Erro ao copiar automação.', 'Erro', 'fas fa-times', 'bg-danger');
271|            showToast('Erro ao copiar automação.', 'Erro', 'fas fa-times', 'bg-danger');
372|                    showToast(data.message || 'Erro ao carregar automações.', 'Erro', 'fas fa-times', 'bg-danger');
586|        if (message && typeof showToast === 'function') {
587|            showToast(message, 'Erro', 'fas fa-times', 'bg-danger');

File: templates/communication_center/tabs/_tab_interface_map.html.twig
Match lines: 2
539|        if (typeof showToast === 'function') {
540|            showToast(

File: templates/communication_center/tabs/_tab_kanban.html.twig
Match lines: 4
681|            showToast('Movendo para "' + targetStatus + '"...', 'Processando', 'fas fa-spinner fa-spin', 'bg-secondary');
684|                showToast('Demanda movida para "' + targetStatus + '" com sucesso.', 'Sucesso', 'fas fa-check', 'bg-success');
751|        if (typeof showToast === 'function') {
752|            showToast(

File: templates/company/_autorizacoes_javascript.html.twig
Match lines: 4
1910|    if (typeof window.showToast === 'function') {
1911|        window.showToast(
2563|            if (typeof window.showToast === 'function') {
2564|                window.showToast(

File: templates/company/components/memberOffCanvas.html.twig
Match lines: 3
257|    // function showToast(message, title = 'Notificação', iconClass = 'fas fa-check', bgColor = 'bg-success') {
557|                showToast('Permissão atualizada com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
708|                showToast('Permissão atualizada com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');

File: templates/company/crm/getLeads/index_leads_view.html.twig
Match lines: 1
3989|<script src="{{ asset('js/utils/showToast.js') }}"></script>

File: templates/company/manage_companies.html.twig
Match lines: 12
600|								showToast(resp.message || 'Erro ao atualizar status de agendamentos.', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
611|							showToast(resp.message || 'Status de agendamento atualizado.', 'Sucesso', 'fas fa-check-circle', 'bg-success');
615|							showToast(
655|								showToast((resp && resp.message) || 'Erro ao remover conexão.', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
659|							showToast(resp.message || 'Conexão removida com sucesso.', 'Sucesso', 'fas fa-check-circle', 'bg-success');
667|							showToast(getRequestErrorMessage(err, 'Erro ao remover conexão.'), 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
805|			        showToast(resp.message || 'Solicitação de conexão enviada com sucesso.', 'Sucesso', 'fas fa-check-circle', 'bg-success');
812|			        showToast(resp.message || 'Erro ao enviar solicitação de conexão.', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
819|			    showToast(
923|						showToast(resp.message || 'Entidade removida da lista com sucesso.', 'Sucesso', 'fas fa-check-circle', 'bg-success');
930|						showToast(resp.message || 'Erro ao desconectar entidade.', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
937|					showToast(getRequestErrorMessage(err, 'Erro ao desconectar entidade.'), 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');

File: templates/company/member_guides_esocial/afastamento.html.twig
Match lines: 1
443|                showToast(EsocialUniqueEventId.getAjaxErrorMessage(error, 'Erro ao salvar os dados.'), 'Erro', 'fas fa-times', 'bg-danger');

File: templates/company/member_guides_esocial/desligamento.html.twig
Match lines: 1
319|                showToast(EsocialUniqueEventId.getAjaxErrorMessage(xhr, 'Erro ao enviar os dados. Tente novamente.'), 'Erro', 'fas fa-times', 'bg-danger');

File: templates/company/member_guides_esocial/desligamento_termino.html.twig
Match lines: 1
225|                showToast(EsocialUniqueEventId.getAjaxErrorMessage(xhr, 'Erro ao enviar os dados. Tente novamente.'), 'Erro', 'fas fa-times', 'bg-danger');

File: templates/company/member_guides_esocial/reintegracao.html.twig
Match lines: 1
299|                showToast(EsocialUniqueEventId.getAjaxErrorMessage(error, 'Erro ao salvar os dados.'), 'Erro', 'fas fa-times', 'bg-danger');

File: templates/company/member_guides_esocial/remuneracao.html.twig
Match lines: 1
289|                showToast(EsocialUniqueEventId.getAjaxErrorMessage(xhr, 'Erro ao enviar os dados. Tente novamente.'), 'Erro', 'fas fa-times', 'bg-danger');

File: templates/company/member_guides_esocial/trabalhador.html.twig
Match lines: 6
690|            if (typeof showToast === 'function') {
691|                showToast('Selecione a empresa parceira para o vínculo terceiro.', 'Erro', 'fas fa-times', 'bg-danger');
722|                showToast(EsocialUniqueEventId.getAjaxErrorMessage(xhr, 'Erro ao enviar os dados.'), 'Erro', 'fas fa-times', 'bg-danger');
726|        showToast('Não foi possível salvar os dados iniciais.', 'Erro', 'fas fa-times', 'bg-danger');
730|        if (typeof showToast === 'function') {
731|            showToast('Não foi possível salvar os dados iniciais.', 'Erro', 'fas fa-times', 'bg-danger');

File: templates/company/my_service_package.html.twig
Match lines: 9
911|			if (typeof showToast === 'function') {
912|				showToast('Não foi possível localizar o CEP informado.', 'Atenção', 'fa-exclamation-circle', 'bg-warning');
1021|			showToast('Informe sua senha para continuar.', 'Atenção', 'fa-exclamation-circle', 'bg-warning');
1041|				showToast(data.message || currentPlanAction.errorMessage, 'Erro!', 'fa-times-circle', 'bg-danger');
1045|			showToast(data.message || currentPlanAction.successMessage, 'Sucesso!', 'fa-check-circle', 'bg-success');
1055|			showToast(currentPlanAction.errorMessage, 'Erro!', 'fa-times-circle', 'bg-danger');
1123|				showToast(data.message || 'Preencha os dados obrigatórios para pagamento.', 'Atenção', 'fa-exclamation-circle', 'bg-warning');
1131|			showToast(data.message || 'Dados salvos com sucesso.', 'Sucesso!', 'fa-check-circle', 'bg-success');
1135|			showToast('Não foi possível salvar os dados obrigatórios agora.', 'Erro!', 'fa-times-circle', 'bg-danger');

File: templates/company/team.html.twig
Match lines: 15
272|    <script src="{{ asset('js/utils/showToast.js') }}"></script>
332|                showToast('O nome do time é obrigatório', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
338|            //     showToast('A descrição do time é obrigatória', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
345|            //     showToast('Selecione pelo menos um membro para o time', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
398|            showToast(`Time "${teamsArray[index].name}" removido com sucesso!`, 'Sucesso', 'fas fa-check', 'bg-success');
553|                                    showToast('Membro "' + member_name + '" removido com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
564|                                    showToast('Houve um erro. Tente novamente!', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
569|                                showToast('Houve um erro. Tente novamente!', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
671|                            showToast('Membro "' + newMember.name + '" adicionado com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
802|                            showToast('Houve um erro. Tente novamente!', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
807|                        showToast('Houve um erro. Tente novamente!', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
853|                        showToast('Erro ao salvar time', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
912|                                    showToast(`Time "${teamName}" removido com sucesso!`, 'Sucesso', 'fas fa-check', 'bg-success');
915|                                    showToast('Erro ao remover time', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
919|                                showToast('Erro ao remover time', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');

File: templates/company/team/view.html.twig
Match lines: 5
316|            showToast('Selecione pelo menos um membro!', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
335|            showToast(`${members.length} membro(s) adicionado(s) com sucesso!`, 'Sucesso', 'fas fa-check', 'bg-success');
423|                    showToast(`Membro "${memberName}" removido com sucesso!`, 'Sucesso', 'fas fa-check', 'bg-success');
431|                    showToast('Erro ao remover membro. Tente novamente!', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
436|                showToast('Erro ao remover membro. Tente novamente!', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');

File: templates/company/team_v2.html.twig
Match lines: 15
564|    <script src="{{ asset('js/utils/showToast.js') }}"></script>
694|                showToast('O nome do time é obrigatório', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
700|            //     showToast('A descrição do time é obrigatória', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
707|            //     showToast('Selecione pelo menos um membro para o time', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
806|            showToast(`Time "${teamsArray[index].name}" removido com sucesso!`, 'Sucesso', 'fas fa-check', 'bg-success');
969|                            showToast('Membro "' + memberName + '" removido com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
975|                            showToast('Houve um erro. Tente novamente!', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
980|                        showToast('Houve um erro. Tente novamente!', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
1088|                        showToast('Erro ao salvar time', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
1137|                                    showToast(`Time "${teamName}" removido com sucesso!`, 'Sucesso', 'fas fa-check', 'bg-success');
1140|                                    showToast('Erro ao remover time', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
1144|                                showToast('Erro ao remover time', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
1245|                    showToast('Selecione pelo menos um membro!', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
1263|                    showToast(`${members.length} membro(s) adicionado(s) com sucesso!`, 'Sucesso', 'fas fa-check', 'bg-success');
1288|                            showToast('Erro ao adicionar membro: ' + member.name, 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');

File: templates/company/teams.html.twig
Match lines: 12
919|                showToast('Este formato de arquivo não é aceito.<br>Tente novamente com arquivos ".JPG" ou ".PNG".', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger', 5000);
1059|                    showToast('Preencha o nome da equipe antes de prosseguir.', 'Aviso', 'fas fa-exclamation-triangle', 'bg-warning', 5000);
1073|                        showToast('Algo deu errado. Tente novamente!', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
1109|                            showToast('Equipe "<u>' + ret_team.name + '</u>" modificada com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
1111|                            showToast('Houve um erro. Tente novamente!', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
1126|                    showToast(err_msg, 'Aviso', 'fas fa-exclamation-triangle', 'bg-warning', 5000, false);
1138|                        showToast('Algo deu errado. Tente novamente!', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
1278|                            showToast('Equipe "<u>' + ret_team.name + '</u>" criada com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
1280|                            showToast('Houve um erro. Tente novamente!', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
1317|                                showToast('Houve um erro. Tente novamente!', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
1337|                                    showToast('Equipe "<u>' + teamName + '</u>" removida com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
1339|                                    showToast('Houve um erro. Tente novamente!', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');

File: templates/company/teams_permissions.html.twig
Match lines: 6
627|	<script src="{{ asset('js/utils/showToast.js') }}"></script>
716|		// function showToast(message, title = 'Notificação', iconClass = 'fas fa-check', bgColor = 'bg-success') {
790|						showToast('Permissão atualizada com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
841|		// function showToast(message, title = 'Notificação', iconClass = 'fas fa-check', bgColor = 'bg-success') {
1163|					showToast('Permissão atualizada com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
1336|					showToast('Permissão atualizada com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');

File: templates/company/teams_permissions_v2.html.twig
Match lines: 5
725|		// function showToast(message, title = 'Notificação', iconClass = 'fas fa-check', bgColor = 'bg-success') {
804|					showToast('Permissão atualizada com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
855|		// function showToast(message, title = 'Notificação', iconClass = 'fas fa-check', bgColor = 'bg-success') {
1158|					showToast('Permissão atualizada com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
1335|				showToast('Permissão atualizada com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');

File: templates/company/teams_v2.html.twig
Match lines: 14
500|                showToast('Este formato de arquivo não é aceito.<br>Tente novamente com arquivos ".JPG" ou ".PNG".', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger', 5000);
650|                    showToast('Preencha o nome da equipe antes de prosseguir.', 'Aviso', 'fas fa-exclamation-triangle', 'bg-warning', 5000);
664|                        showToast('Algo deu errado. Tente novamente!', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
670|                            showToast('Equipe "<u>' + ret_team.name + '</u>" modificada com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
715|                            showToast('Equipe "<u>' + ret_team.name + '</u>" modificada com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
718|                            showToast('Houve um erro. Tente novamente!', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
736|                    showToast(err_msg, 'Aviso', 'fas fa-exclamation-triangle', 'bg-warning', 5000, false);
748|                        showToast('Algo deu errado. Tente novamente!', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
829|                            showToast('Equipe "<u>' + ret_team.name + '</u>" criada com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
832|                            showToast('Houve um erro. Tente novamente!', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
864|                        showToast('Houve um erro. Tente novamente!', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
869|                            showToast('Equipe "<u>' + teamName + '</u>" removida com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
883|                            showToast('Equipe "<u>' + teamName + '</u>" removida com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
886|                            showToast('Houve um erro. Tente novamente!', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');

File: templates/components/permissions_tab.html.twig
Match lines: 2
1374|    } else if (typeof showToast === 'function') {
1375|        showToast(message, type);

File: templates/contractor/tabs/_tab_empresas.html.twig
Match lines: 47
1267|    function showToastMsg(msg, title, icon, bg) {
1268|        if (typeof showToast === 'function') {
1269|            showToast(msg, title || 'Aviso', icon || 'fas fa-info-circle', bg || 'bg-warning');
1510|                showToastMsg('Empresa não encontrada.', 'Erro', 'fas fa-times', 'bg-danger');
1523|            showToastMsg('Não foi possível carregar os detalhes da empresa.', 'Erro', 'fas fa-times', 'bg-danger');
1609|            showToastMsg(msg, 'Erro', 'fas fa-times', 'bg-danger');
1626|                showToastMsg('Empresa removida com sucesso.', 'Sucesso', 'fas fa-check', 'bg-success');
1632|            showToastMsg((res && res.message) ? res.message : 'Não foi possível excluir a empresa.', 'Erro', 'fas fa-times', 'bg-danger');
1645|            showToastMsg(res.message || 'Não foi possível excluir a empresa.', 'Erro', 'fas fa-times', 'bg-danger');
1823|            showToastMsg('Preencha os campos obrigatórios para salvar a empresa.', 'Campos obrigatórios', 'fas fa-exclamation-triangle', 'bg-warning');
1884|                showToastMsg('Empresa não encontrada.', 'Erro', 'fas fa-times', 'bg-danger');
1894|            showToastMsg(msg, 'Erro', 'fas fa-times', 'bg-danger');
1962|            showToastMsg((res && res.message) ? res.message : 'Não foi possível associar os requisitos.', 'Erro', 'fas fa-times', 'bg-danger');
1968|            showToastMsg(msg, 'Erro', 'fas fa-times', 'bg-danger');
2002|                            showToastMsg('Empresa cadastrada com requisitos associados.', 'Sucesso', 'fas fa-check', 'bg-success');
2005|                        showToastMsg(payload.id ? 'Empresa atualizada com sucesso.' : 'Empresa cadastrada com sucesso.', 'Sucesso', 'fas fa-check', 'bg-success');
2037|                showToastMsg((res && res.message) ? res.message : 'Não foi possível salvar a empresa.', 'Erro', 'fas fa-times', 'bg-danger');
2040|                showToastMsg(msg, 'Erro', 'fas fa-times', 'bg-danger');
2046|            showToastMsg('Não foi possível salvar a empresa.', 'Erro', 'fas fa-times', 'bg-danger');
2473|            showToastMsg('Salve a empresa antes de enviar documentos.', 'Aviso', 'fas fa-info-circle', 'bg-warning');
2482|            showToastMsg('Requisito inválido.', 'Erro', 'fas fa-times', 'bg-danger');
2508|                showToastMsg('Documento enviado com sucesso.', 'Sucesso', 'fas fa-check', 'bg-success');
2514|            showToastMsg((res && res.message) ? res.message : 'Não foi possível enviar o documento.', 'Erro', 'fas fa-times', 'bg-danger');
2520|            showToastMsg(msg, 'Erro', 'fas fa-times', 'bg-danger');
2563|                showToastMsg('Documento removido com sucesso.', 'Sucesso', 'fas fa-check', 'bg-success');
2569|            showToastMsg((res && res.message) ? res.message : 'Não foi possível remover o documento.', 'Erro', 'fas fa-times', 'bg-danger');
2575|            showToastMsg(msg, 'Erro', 'fas fa-times', 'bg-danger');
2811|                showToastMsg('Requisito removido com sucesso.', 'Sucesso', 'fas fa-check', 'bg-success');
2818|            showToastMsg((res && res.message) ? res.message : 'Não foi possível remover o requisito.', 'Erro', 'fas fa-times', 'bg-danger');
2821|            showToastMsg(msg, 'Erro', 'fas fa-times', 'bg-danger');
2846|        showToastMsg('Requisito removido.', 'Sucesso', 'fas fa-check', 'bg-success');
2854|                showToastMsg((res && res.message) ? res.message : 'Não foi possível carregar os requisitos.', 'Erro', 'fas fa-times', 'bg-danger');
2865|            showToastMsg(msg, 'Erro', 'fas fa-times', 'bg-danger');
2950|            showToastMsg('Salve a empresa antes de adicionar requisitos.', 'Aviso', 'fas fa-info-circle', 'bg-warning');
3007|            showToastMsg('Requisitos associados. Salve a empresa para confirmar.', 'Sucesso', 'fas fa-check', 'bg-success');
3018|                showToastMsg('Requisitos associados com sucesso.', 'Sucesso', 'fas fa-check', 'bg-success');
3027|            showToastMsg((res && res.message) ? res.message : 'Não foi possível salvar.', 'Erro', 'fas fa-times', 'bg-danger');
3031|            showToastMsg(msg, 'Erro', 'fas fa-times', 'bg-danger');
3038|            showToastMsg('Selecione o tipo da empresa para marcar os requisitos recomendados.', 'Aviso', 'fas fa-info-circle', 'bg-warning');
3045|                showToastMsg('Nenhum requisito recomendado encontrado para este tipo de empresa.', 'Aviso', 'fas fa-info-circle', 'bg-warning');
3149|            showToastMsg('Não foi possível salvar os documentos.', 'Erro', 'fas fa-times', 'bg-danger');
3159|            showToastMsg('Nenhum requisito selecionado para salvar.', 'Aviso', 'fas fa-info-circle', 'bg-warning');
3164|                showToastMsg('Documentos salvos com sucesso.', 'Sucesso', 'fas fa-check', 'bg-success');
3471|            showToastMsg('Arquivo indisponível para download.', 'Aviso', 'fas fa-info-circle', 'bg-warning');
3535|                showToastMsg('Empresa inativada com sucesso.', 'Sucesso', 'fas fa-check', 'bg-success');
3552|                showToastMsg('Empresa inativada com sucesso.', 'Sucesso', 'fas fa-check', 'bg-success');
3569|                showToastMsg('Empresa reativada com sucesso.', 'Sucesso', 'fas fa-check', 'bg-success');

File: templates/contractor/tabs/_tab_requisitos_documentais.html.twig
Match lines: 17
915|    function showToastMsg(msg, title, icon, bg) {
916|        if (typeof showToast === 'function') {
917|            showToast(msg, title || 'Aviso', icon || 'fas fa-info-circle', bg || 'bg-warning');
1312|                showToastMsg('Requisito não encontrado.', 'Erro', 'fas fa-times', 'bg-danger');
1324|            showToastMsg('Não foi possível carregar os dados do requisito.', 'Erro', 'fas fa-times', 'bg-danger');
1401|                showToastMsg(
1415|            showToastMsg((res && res.message) ? res.message : 'Não foi possível salvar o requisito.', 'Erro', 'fas fa-times', 'bg-danger');
1418|            showToastMsg(msg, 'Erro', 'fas fa-times', 'bg-danger');
1654|                showToastMsg('Requisito não encontrado.', 'Erro', 'fas fa-times', 'bg-danger');
1670|            showToastMsg('Não foi possível carregar os detalhes do requisito.', 'Erro', 'fas fa-times', 'bg-danger');
1751|            showToastMsg(msg, 'Erro', 'fas fa-times', 'bg-danger');
1768|                showToastMsg('Requisito removido com sucesso.', 'Sucesso', 'fas fa-check', 'bg-success');
1784|            showToastMsg((res && res.message) ? res.message : 'Não foi possível excluir o requisito.', 'Erro', 'fas fa-times', 'bg-danger');
1797|            showToastMsg(res.message || 'Não foi possível excluir o requisito.', 'Erro', 'fas fa-times', 'bg-danger');
1883|                showToastMsg('Requisito marcado como inativo.', 'Sucesso', 'fas fa-check', 'bg-success');
1901|                showToastMsg('Requisito inativado com sucesso.', 'Sucesso', 'fas fa-check', 'bg-success');
1919|                showToastMsg('Requisito reativado com sucesso.', 'Sucesso', 'fas fa-check', 'bg-success');

File: templates/crm_automations/index.html.twig
Match lines: 24
1113|                showToast(data.message, 'Sucesso', 'fas fa-check', 'bg-success');
1127|                showToast('Erro ao atualizar o status da automação: ' + data.message, 'Erro', 'fas fa-times', 'bg-danger');
1132|            showToast('Erro na comunicação com o servidor: ' + error.message, 'Erro', 'fas fa-times', 'bg-danger');
1149|            showToast(data.message, 'Sucesso', 'fas fa-check', 'bg-success');
1152|            showToast('Erro ao clonar a automação: ' + data.message, 'Erro', 'fas fa-times', 'bg-danger');
1156|        showToast('Erro na comunicação com o servidor: ' + error.message, 'Erro', 'fas fa-times', 'bg-danger');
1179|            showToast('Erro: Selecione uma chave de ativação.', 'Erro', 'fas fa-times', 'bg-danger');
1197|                    showToast(data.message, 'Sucesso', 'fas fa-check', 'bg-success');
1201|                    showToast('Erro ao processar a solicitação: ' + data.message, 'Erro', 'fas fa-times', 'bg-danger');
1623|                if (typeof showToast === 'function') {
1624|                    showToast(data.message, 'Sucesso', 'fas fa-check', 'bg-success');
1635|                if (typeof showToast === 'function') {
1636|                    showToast('Erro ao excluir a automação: ' + data.message, 'Erro', 'fas fa-times', 'bg-danger');
1644|            if (typeof showToast === 'function') {
1645|                showToast('Erro na comunicação com o servidor: ' + error.message, 'Erro', 'fas fa-times', 'bg-danger');
1656|    if (typeof showToast === 'function') {
1657|        showToast('Carregando dados da automação...', 'Info', 'fas fa-spinner fa-spin', 'bg-info');
1671|                if (typeof showToast === 'function') {
1672|                    showToast('Erro ao carregar automação: ' + data.message, 'Erro', 'fas fa-times', 'bg-danger');
1680|            if (typeof showToast === 'function') {
1681|                showToast('Erro na comunicação com o servidor', 'Erro', 'fas fa-times', 'bg-danger');
1704|                if (typeof showToast === 'function') {
1705|                    showToast('Erro: ID da automação não encontrado', 'Erro', 'fas fa-times', 'bg-danger');
1714|<script src="{{ asset('js/utils/showToast.js') }}"></script>

File: templates/crm_automations/newLeads.html.twig
Match lines: 3
1661|            // Mostrar erros de validação usando showToast
1663|            showToast('Por favor, corrija os seguintes problemas:<br><br>• ' + errorMessage, 'Erro de Validação', 'fas fa-exclamation-triangle', 'bg-danger');
1682|            showToast(data.message, 'Sucesso', 'fas fa-check', 'bg-success');

File: templates/cultural_hub/active_voice/active_voice_index.html.twig
Match lines: 9
1568|            showToast('Não foi possível enviar o comentário.', 'Erro', 'fas fa-times', 'bg-danger');
1604|                showToast('Não foi possível processar sua ação.', 'Erro', 'fas fa-times', 'bg-danger');
1636|                showToast('Comentário excluído com sucesso.', 'Sucesso', 'fas fa-check', 'bg-success');
1640|                showToast('Não foi possível excluir o comentário.', 'Erro', 'fas fa-times', 'bg-danger');
1676|                showToast('Não foi possível curtir o reconhecimento.', 'Erro', 'fas fa-times', 'bg-danger');
1886|                showToast('Mensagem do reconhecimento enviada!', 'Sucesso', 'fas fa-check', 'bg-success');
1923|                showToast(errorMessage, 'Erro', 'fas fa-times', 'bg-danger');
2014|                showToast('Seu feedback foi registrado e será analisado.', 'Sucesso', 'fas fa-check', 'bg-success');
2022|                showToast(errorMessage, 'Erro', 'fas fa-times', 'bg-danger');

File: templates/cultural_hub/active_voice/tabs/configuracoes.html.twig
Match lines: 2
297|        showToast(
314|        showToast(

File: templates/cultural_hub/active_voice/tabs/ocorrencias.html.twig
Match lines: 8
615|            showToast('Erro ao salvar ação: ' + (errorData.error || 'Erro desconhecido'), 'Erro', 'fas fa-times', 'bg-danger');
619|        showToast('Erro ao conectar com o servidor. Tente novamente.', 'Erro', 'fas fa-times', 'bg-danger');
667|            showToast('Feedback marcado como resolvido.', 'Sucesso', 'fas fa-check', 'bg-success');
670|            showToast('Erro ao marcar como solucionado: ' + (errorData.error || 'Erro desconhecido'), 'Erro', 'fas fa-times', 'bg-danger');
677|        showToast('Erro ao conectar com o servidor. Tente novamente.', 'Erro', 'fas fa-times', 'bg-danger');
929|            showToast(`Meta ${metaType} criada com sucesso!`, 'Sucesso', 'fas fa-check', 'bg-success');
932|            showToast('Erro ao criar meta: ' + (errorData.error || 'Erro desconhecido'), 'Erro', 'fas fa-times', 'bg-danger');
936|        showToast('Erro ao conectar com o servidor. Tente novamente.', 'Erro', 'fas fa-times', 'bg-danger');

File: templates/cultural_hub/feed/feed_index.html.twig
Match lines: 23
1230|			showToast('Link copiado para a área de transferência!', 'Sucesso', 'fas fa-check', 'bg-success');
1233|			showToast('Não foi possível copiar o link.', 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
1995|				// showToast('Você removeu a reação.', 'success');
2007|				// showToast('Você curtiu com ❤️.', 'success');
2011|			showToast('Não foi possível atualizar a reação.', 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
2659|						showToast('Enquete criada com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
2676|					showToast(`Erro ao criar enquete: ${error.message}`, 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
2705|					showToast('Post publicado com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
2717|				showToast(`Erro ao criar post: ${error.message}`, 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
2842|			showToast('Você já respondeu esta enquete.', 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
2875|			showToast('Selecione ao menos uma opção para votar.', 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
2906|			showToast('Não foi possível registrar seu voto.', 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
2962|			showToast('Não foi possível cancelar seu voto.', 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
2986|				showToast(response.isActive ? 'Automação ativada' : 'Automação desativada', 'Sucesso', 'fas fa-check', 'bg-success');
2992|				showToast(errorMessage, 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
3026|					showToast('Automação excluída com sucesso', 'Sucesso', 'fas fa-check', 'bg-success');
3031|					showToast(errorMessage, 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
3037|	function showToast(message, titleOrType = 'info', icon = null, className = null) {
3115|		if (!date || !time) { showToast('Por favor, selecione uma data e horário válidos.', 'Erro', 'fas fa-exclamation-circle', 'bg-danger'); return; }
3131|		showToast('Publicação programada com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
3154|			showToast('Erro: ID do post não encontrado.', 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
3207|				showToast('Publicação excluída com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
3214|			showToast(`Erro ao excluir publicação: ${error.message}`, 'Erro', 'fas fa-exclamation-circle', 'bg-danger');

File: templates/cultural_hub/newsletter/create_newsletter.html.twig
Match lines: 4
533|			showToast('O título deve ter no máximo 90 caracteres.', 'Aviso', 'fas fa-exclamation-triangle', 'bg-warning');
547|			showToast('Newsletter salva com sucesso.', 'Sucesso', 'fas fa-check', 'bg-success');
554|			showToast((data && data.error) ? data.error : 'Falha ao salvar newsletter.', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
557|		showToast('Erro ao salvar newsletter.', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');

File: templates/cultural_hub/newsletter/index.html.twig
Match lines: 14
2281|								showToast('Selecione pelo menos uma newsletter para publicar.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
2304|								if (!hasTeams) showToast('Nenhuma equipe disponível. Use "Todos os membros" para publicar.', 'Informação', 'fas fa-info-circle', 'bg-info');
2308|								if (!hasLists) showToast('Nenhuma lista personalizada criada. Use "Todos os membros" para publicar.', 'Informação', 'fas fa-info-circle', 'bg-info');
2332|								showToast('Selecione pelo menos uma newsletter para publicar.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
2337|								if (!listaPersonalizada) { showToast('Selecione uma lista personalizada ou escolha "Todos os membros".', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning'); return; }
2339|								if (selectedOption.prop('disabled')) { showToast('Nenhuma lista personalizada disponível. Escolha "Todos os membros".', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning'); return; }
2343|								if (!equipesSelecionadas) { showToast('Selecione uma equipe ou escolha "Todos os membros".', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning'); return; }
2345|								if (selectedOption.prop('disabled')) { showToast('Nenhuma equipe disponível. Escolha "Todos os membros".', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning'); return; }
2381|								showToast('Newsletter publicada com sucesso!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
2384|								showToast('Erro ao publicar newsletter: ' + (data.error || data.message || 'Erro desconhecido'), 'Erro', 'fas fa-times-circle', 'bg-danger');
2387|						.catch(() => showToast('Erro ao conectar com o servidor. Tente novamente.', 'Erro', 'fas fa-times-circle', 'bg-danger'));
2404|									showToast('Newsletter excluída com sucesso!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
2407|									showToast('Erro ao excluir newsletter: ' + (data.error || 'Erro desconhecido'), 'Erro', 'fas fa-times-circle', 'bg-danger');
2410|							.catch(() => showToast('Erro ao excluir newsletter. Tente novamente.', 'Erro', 'fas fa-times-circle', 'bg-danger'));

File: templates/cultural_hub/newsletter/newsletter_tabs/publish.html.twig
Match lines: 6
872|            if (!checked) { showToast('Selecione uma newsletter para publicar.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning'); return; }
893|                        showToast(data && data.error ? data.error : 'Não foi possível publicar.', 'Erro', 'fas fa-times-circle', 'bg-danger');
896|                .catch(()=> showToast('Erro ao publicar.', 'Erro', 'fas fa-times-circle', 'bg-danger'));
1113|        showToast('Newsletter excluída com sucesso!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
1125|        showToast(data.error || 'Erro ao excluir newsletter.', 'Erro', 'fas fa-times-circle', 'bg-danger');
1130|      showToast('Falha na exclusão. Verifique a conexão e tente novamente.', 'Erro', 'fas fa-times-circle', 'bg-danger');

File: templates/dashboard/nova_pagina.html.twig
Match lines: 2
3976|                if (typeMessage && !activities.length) {//showToast('', successMessage, typeMessage);
4027|                showToast(successMessage, 'Atenção', "fas fa-times-circle", typeMessage);

File: templates/decision_system/automations/list_automations.html.twig
Match lines: 7
689|            showToast(active ? 'Automação ativada!' : 'Automação desativada!', 'Sucesso', 'fas fa-check', 'bg-success');
692|            showToast(data.message || 'Erro ao atualizar automação', 'Erro', 'fas fa-times', 'bg-danger');
698|        showToast('Erro ao atualizar automação', 'Erro', 'fas fa-times', 'bg-danger');
712|    showToast('Funcionalidade de duplicar em desenvolvimento', 'Informação', 'fas fa-info-circle', 'bg-info');
755|                    showToast('Automação excluída com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
780|                    showToast(data.message || 'Erro ao excluir automação', 'Erro', 'fas fa-times', 'bg-danger');
786|                showToast('Erro ao excluir automação', 'Erro', 'fas fa-times', 'bg-danger');

File: templates/employee-advocacy/Tenant/partials/dashboard.html.twig
Match lines: 6
146|                showToast('Sucesso', result.message || 'Configurações salvas com sucesso!', 'bg-success');
152|                showToast('Erro', result.message || 'Erro ao salvar configurações', 'bg-danger');
163|function showToast(title, message, bgClass = 'bg-info') {
164|    // Verifica se existe uma função showToast global
165|    if (typeof window.showToast === 'function') {
166|        window.showToast(title, message, bgClass);

File: templates/free-trial/company_activation_companies.html.twig
Match lines: 6
995|                        showToast(response.message || 'Erro ao carregar customização do plano.', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
1003|                    showToast(message, 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
1055|                showToast('O limite customizado não pode ficar abaixo do limite base do pacote.', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
1073|                        showToast(response.message || 'Erro ao salvar customização.', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
1077|                    showToast(response.message || 'Customização salva com sucesso.', 'Sucesso', 'fas fa-check-circle', 'bg-success');
1082|                    showToast(message, 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');

File: templates/governance/authorization/tabs/_tab_authorizations_config.html.twig
Match lines: 26
1190|            if (typeof showToast === 'function') {
1191|                showToast(msg, 'Aviso', 'fas fa-exclamation-triangle', 'bg-warning');
1375|                if (typeof showToast === 'function') {
1376|                    showToast(msg, 'Erro', 'fas fa-times', 'bg-danger');
1401|        if (typeof showToast === 'function') {
1402|            showToast(msg, 'Aviso', 'fas fa-info-circle', 'bg-warning');
1748|            if (typeof showToast === 'function') {
1749|                showToast('Requisito atualizado com sucesso.', 'Sucesso', 'fas fa-check', 'bg-success');
1775|            if (typeof showToast === 'function') {
1776|                showToast('Requisito criado com sucesso.', 'Sucesso', 'fas fa-check', 'bg-success');
1804|            if (typeof showToast === 'function') {
1805|                showToast('Não foi possível identificar o requisito para exclusão.', 'Erro', 'fas fa-times', 'bg-danger');
1819|            if (typeof showToast === 'function') {
1820|                showToast(
1899|                    if (typeof showToast === 'function') {
1900|                        showToast('Requisito removido com sucesso.', 'Sucesso', 'fas fa-check', 'bg-success');
1912|            if (typeof showToast === 'function') {
1913|                showToast('Não foi possível identificar o requisito para exclusão.', 'Erro', 'fas fa-times', 'bg-danger');
1928|            if (typeof showToast === 'function') {
1929|                showToast(
1962|        if (typeof showToast === 'function') {
1963|            showToast('Requisito marcado como inativo.', 'Sucesso', 'fas fa-check', 'bg-success');
1992|        if (typeof showToast === 'function') {
1993|            showToast('Requisito inativado com sucesso.', 'Sucesso', 'fas fa-check', 'bg-success');
2022|        if (typeof showToast === 'function') {
2023|            showToast('Requisito reativado com sucesso.', 'Sucesso', 'fas fa-check', 'bg-success');

File: templates/governance/authorization/tabs/_tab_authorizations_create.html.twig
Match lines: 22
1040|                if (typeof showToast === 'function') {
1041|                    showToast(res.message || successMessage, 'Sucesso', 'fas fa-check', 'bg-success');
1049|            if (typeof showToast === 'function') {
1050|                showToast((res && res.message) ? res.message : errorMessage, 'Erro', 'fas fa-times', 'bg-danger');
1058|            if (typeof showToast === 'function') showToast(msg, 'Erro', 'fas fa-times', 'bg-danger');
1822|            if (typeof showToast === 'function') {
1823|                showToast('Autorização inválida.', 'Erro', 'fas fa-times', 'bg-danger');
1912|            if (typeof showToast === 'function') {
1913|                showToast('Não foi possível carregar os dados da autorização.', 'Erro', 'fas fa-times', 'bg-danger');
1994|                if (typeof showToast === 'function') showToast(msg, 'Erro', 'fas fa-times', 'bg-danger');
2002|            if (typeof showToast === 'function') showToast(res.message || 'Salvo.', 'Sucesso', 'fas fa-check', 'bg-success');
2007|            if (typeof showToast === 'function') showToast(msg, 'Erro', 'fas fa-times', 'bg-danger');
2080|            if (typeof showToast === 'function') {
2081|                showToast(
2095|            if (typeof showToast === 'function') {
2096|                showToast(msg, 'Erro', 'fas fa-times', 'bg-danger');
2174|                if (typeof showToast === 'function') {
2175|                    showToast(res.message || 'Autorização removida.', 'Sucesso', 'fas fa-check', 'bg-success');
2188|            if (typeof showToast === 'function') {
2189|                showToast((res && res.message) ? res.message : 'Erro ao remover.', 'Erro', 'fas fa-times', 'bg-danger');
2206|            if (typeof showToast === 'function') {
2207|                showToast(msg, 'Erro', 'fas fa-times', 'bg-danger');

File: templates/governance/authorization/tabs/_tab_authorizations_monitoring.html.twig
Match lines: 21
874|            showToast('Não foi possível identificar a autorização.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
891|                showToast(res.message || 'Validade estendida com sucesso.', 'Sucesso', 'fas fa-check', 'bg-success');
895|            showToast((res && res.message) ? res.message : 'Não foi possível estender a validade.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
900|            showToast(message, 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
907|        showToast('Abrir bate-papo ficará disponível quando a integração de chat estiver conectada.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
934|                showToast(res.message || 'Notificação enviada com sucesso.', 'Sucesso', 'fas fa-check', 'bg-success');
940|            showToast((res && res.message) ? res.message : 'Não foi possível enviar a notificação.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
948|            showToast(message, 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
958|            showToast('Não foi possível identificar o colaborador ou a autorização.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
964|            showToast('Não foi possível abrir o formulário de notificação.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
1728|            showToast('Selecione ao menos uma autorização.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
1733|            showToast('Selecione ao menos um membro.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
1738|            showToast('Informe a validade para todos os documentos selecionados.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
1746|                showToast(applyErr, 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
1754|                showToast(messages[messages.length - 1] || 'Autorização aplicada com sucesso.', 'Sucesso', 'fas fa-check', 'bg-success');
1765|                    showToast('Autorização aplicada, mas houve erro ao enviar documentos: ' + uploadErr, 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
1767|                    showToast('Autorização aplicada com sucesso. Documentos enviados; aguarde a aprovação do gestor.', 'Sucesso', 'fas fa-check', 'bg-success');
1797|        if (typeof window.showToast === 'function') {
1798|            window.showToast(message, 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
2227|        if (typeof window.showToast === 'function') {
2228|            window.showToast(

File: templates/governance/badge/badge_create.html.twig
Match lines: 3
933|            if (typeof showToast !== 'function') {
938|                showToast(message, 'Sucesso', 'fas fa-check-circle', 'bg-success');
942|            showToast(message, 'Erro', 'fas fa-times', 'bg-danger');

File: templates/governance/badge/partials/_modal_save_config.html.twig
Match lines: 6
136|                if (typeof showToast === 'function') {
137|                    showToast((response && response.message) || 'Não foi possível salvar as configurações.', 'Erro', 'fas fa-times', 'bg-danger');
160|                if (typeof showToast === 'function') {
161|                    showToast(response.message || 'Configurações salvas com sucesso.', 'Sucesso', 'fas fa-check-circle', 'bg-success');
166|            if (typeof showToast === 'function') {
167|                showToast(response.message || 'Erro ao comunicar com o servidor.', 'Erro', 'fas fa-times', 'bg-danger');

File: templates/innovation/criar_questionario.html.twig
Match lines: 23
470|    showToast(
666|    showToast(
2934|            showToast(
2968|            showToast(
2990|            showToast(
3021|            showToast(
3227|            showToast(
3281|            showToast(
3343|                showToast('Por favor, selecione apenas arquivos de imagem.', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
3350|                showToast('A imagem deve ter no máximo 5MB.', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
3388|                        showToast(response.message || 'Erro ao fazer upload da imagem.', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
3392|                    showToast('Erro ao fazer upload da imagem.', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
3546|            showToast(
3567|            showToast(
3658|                    showToast(
3675|                showToast(
3688|            showToast(
3768|function showToast(message, title, iconClass, bgColor) {
4010|                showToast(
4028|                    showToast(
4134|                showToast(
4160|                    showToast(
4173|        showToast(

File: templates/interview_ia/components/_researcher_form_modal.html.twig
Match lines: 2
461|        if (typeof showToast === 'function') {
462|            showToast(

File: templates/invoice/partials/_modal_add_balance.html.twig
Match lines: 3
242|                        showToast('Não foi possível gerar a cobrança dos créditos extras.', 'Atenção', 'fas fa-exclamation-circle', 'bg-warning');
255|                    showToast(response.message || 'Cobrança criada com sucesso.', 'Sucesso', 'fas fa-check-circle', 'bg-success');
259|                    showToast(

File: templates/invoice/tabs/_tab_ia_on_demand.html.twig
Match lines: 18
1098|        if (typeof showToast === 'function' && message) {
1099|            showToast(message, 'Atenção', 'fas fa-exclamation-circle', 'bg-warning');
1169|            if (typeof showToast === 'function') {
1170|                showToast('Não foi possível localizar o CEP informado.', 'Atenção', 'fas fa-exclamation-circle', 'bg-warning');
1211|                    showToast('Não foi possível salvar o saldo extra controlado.', 'Atenção', 'fas fa-exclamation-circle', 'bg-warning');
1221|                showToast(response.message || 'Configuração salva com sucesso.', 'Sucesso', 'fas fa-check-circle', 'bg-success');
1236|                showToast(
1701|                showToast('Preencha os campos obrigatórios antes de salvar.', 'Atenção', 'fas fa-exclamation-circle', 'bg-warning');
1708|                showToast('Preencha os campos obrigatórios antes de salvar.', 'Atenção', 'fas fa-exclamation-circle', 'bg-warning');
1727|            showToast('Preencha os campos obrigatórios antes de adicionar saldo.', 'Atenção', 'fas fa-exclamation-circle', 'bg-warning');
1732|            showToast('Selecione uma forma de pagamento para gerar a cobrança.', 'Atenção', 'fas fa-exclamation-circle', 'bg-warning');
1923|            showToast('Cartão salvo removido com sucesso.', 'Sucesso', 'fas fa-check-circle', 'bg-success');
1987|                showToast('Não foi possível localizar a rota para salvar os dados de pagamento.', 'Atenção', 'fas fa-exclamation-circle', 'bg-warning');
2007|                    showToast((response && response.message) ? response.message : 'Dados de pagamento salvos com sucesso.', 'Sucesso', 'fas fa-check-circle', 'bg-success');
2022|                    showToast(
2066|                        showToast('Não foi possível remover o cartão salvo do saldo extra controlado.', 'Atenção', 'fas fa-exclamation-circle', 'bg-warning');
2074|                    showToast(response.message || 'Cartão removido com sucesso.', 'Sucesso', 'fas fa-check-circle', 'bg-success');
2078|                    showToast(

File: templates/layoutAdmin.html.twig
Match lines: 4
133|<script type="text/javascript" src="{{asset('js/utils/showToast.js')}}"></script>
4029|                {# function showToast(title, message, toastClass) {
4072|                        //showToast(successMessage, 'Atenção', "fas fa-times-circle", typeMessage);
4119|                        showToast(successMessage, 'Atenção', "fas fa-times-circle", typeMessage);

File: templates/layoutUser.html.twig
Match lines: 5
3622|		    }); #}{# function showToast(title, message, toastClass) {
3663|                            //showToast('', successMessage, typeMessage);
3711|                        showToast(successMessage, 'Atenção', "fas fa-times-circle", typeMessage);
3918|{# Include showToast utility for notifications #}
3919|<script src="{{ asset('js/utils/showToast.js') }}"></script>

File: templates/layoutUserOld.html.twig
Match lines: 3
1243|		    }); #}{# function showToast(title, message, toastClass) {
1280|                    //showToast('', successMessage, typeMessage);
1327|                showToast(successMessage, 'Atenção', "fas fa-times-circle", typeMessage);

File: templates/layout_evaluator.html.twig
Match lines: 2
241|{# Include showToast utility for notifications #}
242|<script src="{{ asset('js/utils/showToast.js') }}"></script>

File: templates/license/individual_license_request.html.twig
Match lines: 17
400|            showToast(err_msg, 'Erro', 'fa-exclamation-triangle', 'bg-warning');
568|                    showToast("Não foi possível carregar as informações da alteração.", 'Erro', 'fa-times-circle', 'bg-danger');
572|                showToast("Erro ao carregar as informações da alteração.", 'Erro', 'fa-times-circle', 'bg-danger');
588|                    showToast("Licença confirmada com sucesso!", 'Sucesso', 'fa-check-circle', 'bg-success');
592|                    showToast("Erro ao confirmar a licença.", 'Erro', 'fa-times-circle', 'bg-danger');
596|                showToast("Erro ao confirmar a licença.", 'Erro', 'fa-times-circle', 'bg-danger');
611|                    showToast("Licença rejeitada com sucesso!", 'Sucesso', 'fa-check-circle', 'bg-success');
615|                    showToast("Erro ao rejeitar a licença.", 'Erro', 'fa-times-circle', 'bg-danger');
620|                showToast("Erro ao rejeitar a licença.", 'Erro', 'fa-times-circle', 'bg-danger');
740|        showToast(customMessage, 'Sucesso', 'fa-check-circle', 'bg-success');
774|        showToast(customMessage, 'Sucesso', 'fa-check-circle', 'bg-success');
789|        showToast(customMessage, 'Aviso', 'fa-times-circle', 'bg-danger');
824|        showToast(customMessage, 'Aviso', 'fa-times-circle', 'bg-danger');
877|        showToast(customMessage, 'Solicitação Cancelada', 'fa-times-circle', 'bg-danger');
894|            showToast(customMessage, 'Sucesso', 'fa-check-circle', 'bg-success');
1011|                            showToast(customMessage, 'Sucesso', 'fa-check-circle', 'bg-success');
1049|                            showToast(customMessage, 'Sucesso', 'fa-check-circle', 'bg-success');

File: templates/license/individual_license_request_default.html.twig
Match lines: 18
582|                    showToast(err_msg, 'Erro', 'fa-exclamation-triangle', 'bg-warning');
633|                            showToast("Não foi possível carregar as informações da alteração.", 'Erro', 'fa-times-circle', 'bg-danger');
637|                        showToast("Erro ao carregar as informações da alteração.", 'Erro', 'fa-times-circle', 'bg-danger');
653|                            showToast("Licença confirmada com sucesso!", 'Sucesso', 'fa-check-circle', 'bg-success');
657|                            showToast("Erro ao confirmar a licença.", 'Erro', 'fa-times-circle', 'bg-danger');
661|                        showToast("Erro ao confirmar a licença.", 'Erro', 'fa-times-circle', 'bg-danger');
676|                            showToast("Licença rejeitada com sucesso!", 'Sucesso', 'fa-check-circle', 'bg-success');
680|                            showToast("Erro ao rejeitar a licença.", 'Erro', 'fa-times-circle', 'bg-danger');
685|                        showToast("Erro ao rejeitar a licença.", 'Erro', 'fa-times-circle', 'bg-danger');
804|                showToast(customMessage, 'Sucesso', 'fa-check-circle', 'bg-success');
838|                showToast(customMessage, 'Sucesso', 'fa-check-circle', 'bg-success');
852|                showToast(customMessage, 'Aviso', 'fa-times-circle', 'bg-danger');
887|                showToast(customMessage, 'Aviso', 'fa-times-circle', 'bg-danger');
940|                showToast(customMessage, 'Solicitação Cancelada', 'fa-times-circle', 'bg-danger');
957|                    showToast(customMessage, 'Sucesso', 'fa-check-circle', 'bg-success');
1061|                                    showToast(`Você editou a solicitação da licença: ${selectedLicense.name}`, 'Sucesso', 'fa-check-circle', 'bg-success');
1066|                                showToast(`Você adicionou uma nova solicitação de licença: ${selectedLicense.name}`, 'Sucesso', 'fa-check-circle', 'bg-success');
1074|                        showToast('Erro ao processar a solicitação', 'Erro', 'fa-times-circle', 'bg-danger');

File: templates/logs/index.html.twig
Match lines: 2
578|                        showToast('Não foi possível carregar os detalhes do log.', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
590|                    showToast(message, 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');

File: templates/manager/lead_qualified_users.html.twig
Match lines: 5
823|    function showToast(message, type) {
857|            showToast('Por favor, selecione uma empresa e um processo seletivo.', 'error');
862|            showToast('Dados do profissional não encontrados.', 'error');
884|                showToast(message, success ? 'success' : 'error');
894|                showToast(message, 'error');

File: templates/new-goals/components/_goal_conclusion_modal.html.twig
Match lines: 2
386|            if (typeof window.showToast === 'function') {
387|                window.showToast(message, 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');

File: templates/new-goals/components/_goal_cycle_modal.html.twig
Match lines: 10
145|                if (window.showToast) {
146|                    window.showToast('Informe o nome do ciclo.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
153|                    if (window.showToast) {
154|                        window.showToast('Preencha todos os campos obrigatórios do ciclo.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
159|                    if (window.showToast) {
160|                        window.showToast('A data final não pode ser anterior à data inicial.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
193|                if (result.warnings?.length && window.showToast) {
194|                    window.showToast(
202|                if (window.showToast) {
203|                    window.showToast(error.message, 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');

File: templates/new-goals/components/_goal_detail_offcanvas.html.twig
Match lines: 2
149|                    if (typeof window.showToast === 'function') {
150|                        window.showToast(error.message || 'Erro ao comentar.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');

File: templates/new-goals/components/_goal_item_conclusion_modal.html.twig
Match lines: 2
200|            if (typeof window.showToast === 'function') {
201|                window.showToast(message, 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');

File: templates/new-goals/goal_company/goal_company.html.twig
Match lines: 17
966|        showToast(err_msg, "Atenção", "fas fa-exclamation-triangle", "bg-warning");
1019|        showToast(err_msg, "Atenção", "fas fa-exclamation-triangle", "bg-warning");
1549|                showToast("Membros Atualizados com Sucesso!", 'Sucesso', 'fa-check-circle', 'bg-success');
1555|                showToast("Erro ao Salvar Membros. Por favor, tente novamente.", "Atenção", "fas fa-exclamation-triangle", "bg-warning");
1835|                    showToast("Meta salva com sucesso!", 'Sucesso', 'fa-check-circle', 'bg-success');
1852|                    showToast("Ocorreu um erro ao salvar a meta. Tente novamente.", "Atenção", "fas fa-exclamation-triangle", "bg-danger");
2170|                showToast(`Ação de Desenvolvimento salva com sucesso!`, 'Sucesso', 'fa-check-circle', 'bg-success');
2222|                    showToast("Ocorreu um erro ao salvar a ação. Tente novamente.", "Atenção", "fas fa-exclamation-triangle", "bg-danger");
2325|                            showToast("Meta deletada com sucesso!", 'Sucesso', 'fa-check-circle', 'bg-success');
2344|                        showToast(`Erro: ${error.message}`, "Atenção", "fas fa-exclamation-triangle", "bg-danger");
2375|                            showToast("Meta Concluída com sucesso!", 'Sucesso', 'fa-check-circle', 'bg-success');
2388|                        showToast(`Erro: ${error.message}`, "Atenção", "fas fa-exclamation-triangle", "bg-danger");
2431|                showToast(`Ação de Desenvolvimenta ${action === 'conclude' ? 'concluída' : 'deletada'} com sucesso!`, 'Sucesso', 'fa-check-circle', 'bg-success');
3212|                if (window.showToast && successMessage) {
3213|                    window.showToast(successMessage, 'Sucesso', 'fas fa-check-circle', 'bg-success');
3218|                if (window.showToast) {
3219|                    window.showToast(error.message, 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');

File: templates/new-goals/goal_company/modals_goal_company/modal_change_gda_meta.html.twig
Match lines: 1
208|                    showToast("Valor atual da meta atualizado com sucesso!", 'Sucesso', 'fa-check-circle', 'bg-success');

File: templates/new-goals/goal_cycles/goal_cycles.html.twig
Match lines: 2
314|        if (window.showToast) {
321|            window.showToast(message, cfg[0], cfg[1], cfg[2]);

File: templates/new-goals/goal_member/goal_member.html.twig
Match lines: 15
883|        showToast(err_msg, "Atenção", "fas fa-exclamation-triangle", "bg-warning");
930|        showToast(err_msg, "Atenção", "fas fa-exclamation-triangle", "bg-warning");
1115|                                showToast("Prazo atualizado com sucesso!", 'Sucesso', 'fa-check-circle', 'bg-success');
1117|                                showToast("Erro ao atualizar o prazo:", "Atenção", "fas fa-exclamation-triangle", "bg-warning");
1309|                showToast("Membros Atualizados com Sucesso!", 'Sucesso', 'fa-check-circle', 'bg-success');
1313|                showToast("Erro ao Salvar Membros. Por favor, tente novamente.", "Atenção", "fas fa-exclamation-triangle", "bg-warning");
1551|                    showToast("Meta salva com sucesso!", 'Sucesso', 'fa-check-circle', 'bg-success');
1567|                    showToast("Ocorreu um erro ao salvar a meta. Tente novamente.", "Atenção", "fas fa-exclamation-triangle", "bg-danger");
2010|                    showToast(`Ação de Desenvolvimento salva com sucesso!`, 'Sucesso', 'fa-check-circle', 'bg-success');
2068|                    showToast("Ocorreu um erro ao salvar a ação. Tente novamente.", "Atenção", "fas fa-exclamation-triangle", "bg-danger");
2171|                            showToast("Meta deletada com sucesso!", 'Sucesso', 'fa-check-circle', 'bg-success');
2184|                        showToast(`Erro: ${error.message}`, "Atenção", "fas fa-exclamation-triangle", "bg-danger");
2215|                            showToast("Meta Concluída com sucesso!", 'Sucesso', 'fa-check-circle', 'bg-success');
2228|                        showToast(`Erro: ${error.message}`, "Atenção", "fas fa-exclamation-triangle", "bg-danger");
2271|                showToast(`Ação de Desenvolvimenta ${action === 'conclude' ? 'concluída' : 'deletada'} com sucesso!`, 'Sucesso', 'fa-check-circle', 'bg-success');

File: templates/new-goals/goal_team/goal_team.html.twig
Match lines: 15
920|    if (typeof showToast === 'function') {
921|        showToast(message, title, iconClass, bgColor);
1221|                showToast("Membros Atualizados com Sucesso!", 'Sucesso', 'fa-check-circle', 'bg-success');
1229|                showToast("Erro ao Salvar Membros. Por favor, tente novamente.", "Atenção", "fas fa-exclamation-triangle", "bg-warning");
1956|                        showToast("Erro ao carregar meta. Dados inválidos.", "Erro", "fas fa-exclamation-triangle", "bg-danger");
2035|                    showToast("Erro ao carregar meta. Tente novamente.", "Erro", "fas fa-exclamation-triangle", "bg-danger");
2920|                    showToast(
2976|                    showToast(
3073|                            showToast("Meta deletada com sucesso!", 'Sucesso', 'fa-check-circle', 'bg-success');
3088|                        showToast(
3219|                showToast(`Ação de Desenvolvimento ${action === 'conclude' ? 'concluída' : 'deletada'} com sucesso!`, 'Sucesso', 'fa-check-circle', 'bg-success');
3515|                if (window.showToast && successMessage) {
3516|                    window.showToast(successMessage, 'Sucesso', 'fas fa-check-circle', 'bg-success');
3521|                if (window.showToast) {
3522|                    window.showToast(error.message, 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');

File: templates/new-goals/goal_team/modals_goal_collective/modal_change_gda_meta_collective.html.twig
Match lines: 1
217|                    showToast("Valor atual da meta atualizado com sucesso!", 'Sucesso', 'fa-check-circle', 'bg-success');

File: templates/new-goals/goal_team/modals_goal_collective/modal_create_meta_colective.html.twig
Match lines: 12
688|            if (typeof window.showToast === 'function') {
689|                window.showToast(message, title, icon, background);
1214|                if (window.showToast) {
1215|                    window.showToast('Preencha todos os campos obrigatórios do resultado.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
1220|                if (window.showToast) {
1221|                    window.showToast('O prazo do resultado não pode ultrapassar o fim do ciclo.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
1226|                if (window.showToast) {
1227|                    window.showToast('Informe a unidade personalizada.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
1307|                if (window.showToast) {
1308|                    window.showToast('Preencha o título, responsável e prazo da ação.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
1313|                if (window.showToast) {
1314|                    window.showToast('O prazo da ação não pode ultrapassar o fim do ciclo.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');

File: templates/new-goals/goals-members-shortcuts/dashboards/individualAssesmentShortcut.html.twig
Match lines: 1
1543|                    showToast('Você não pode selecionar a mesma seção para ambos os eixos.', false);

File: templates/new-goals/pdi/pdi_goals_member/goals_pdi.html.twig
Match lines: 1
2481|                    showToast('Ação revertida com sucesso!', 'Sucesso', 'fa-check-circle', 'bg-success');

File: templates/new-goals/pdi/pdi_permissions.html.twig
Match lines: 1
1495|        window.showToast = function(message, title, icon, bgClass) {

File: templates/new-goals/view_goal/view_goal_meta.html.twig
Match lines: 28
1622|                        showToast("Feedback salvo com sucesso!", 'Sucesso', 'fa-check-circle', 'bg-success');
1628|                        showToast("Ocorreu um erro ao salvar o feedback.", "Atenção", "fas fa-exclamation-triangle", "bg-warning");
1638|                    showToast("Por favor, selecione um tipo de feedback.", "Atenção", "fas fa-exclamation-triangle", "bg-warning");
1642|                    showToast("Por favor, digite um feedback.", "Atenção", "fas fa-exclamation-triangle", "bg-warning");
1734|                        showToast("Por favor, selecione um tipo de feedback.", "Atenção", "fas fa-exclamation-triangle", "bg-warning");
2028|                    showToast("Por favor, preencha todos os campos obrigatórios.", "Atenção", "fas fa-exclamation-triangle", "bg-warning");
2033|                    showToast("Por favor, preencha uma competência.", "Atenção", "fas fa-exclamation-triangle", "bg-warning");
2068|                        showToast("Meta salva com sucesso!", 'Sucesso', 'fa-check-circle', 'bg-success');
2091|                        showToast("Ocorreu um erro ao salvar a meta. Tente novamente.", "Atenção", "fas fa-exclamation-triangle", "bg-danger");
2370|                        showToast("Erro ao carregar os dados da ação. Por favor, tente novamente.", "Atenção", "fas fa-exclamation-triangle", "bg-warning");
2690|                    showToast(
2719|                        showToast(
2749|                        showToast(
2856|                                showToast("Meta deletada com sucesso!", 'Sucesso', 'fa-check-circle', 'bg-success');
2867|                            showToast(`Erro: ${error.message}`, "Atenção", "fas fa-exclamation-triangle", "bg-danger");
2898|                                showToast("Meta Concluída com sucesso!", 'Sucesso', 'fa-check-circle', 'bg-success');
2911|                            showToast(`Erro: ${error.message}`, "Atenção", "fas fa-exclamation-triangle", "bg-danger");
2954|                        showToast(`Ação de Desenvolvimenta ${action === 'conclude' ? 'concluída' : 'deletada'} com sucesso!`, 'Sucesso', 'fa-check-circle', 'bg-success');
3051|                    showToast(
3165|                    showToast("Erro ao criar comentário. Verifique o console para mais detalhes.", 'Sucesso', 'fa-check-circle', 'bg-success');
3291|                    showToast('Erro ao curtir/remover curtida. Verifique o console para mais detalhes.', "Atenção", "fas fa-exclamation-triangle", "bg-warning");
3335|                    showToast("O comentário não pode estar vazio.", "Atenção", "fas fa-exclamation-triangle", "bg-warning");
3371|                        showToast("Comentário atualizado com sucesso!", 'Sucesso', 'fa-check-circle', 'bg-success');
3375|                        showToast("Erro ao atualizar comentário. Verifique o console para mais detalhes.", "Atenção", "fas fa-exclamation-triangle", "bg-warning");
3406|                        showToast("Comentário removido com sucesso!", 'Sucesso', 'fa-check-circle', 'bg-success');
3414|                        showToast("Erro ao remover comentário. Verifique o console para mais detalhes.", "Atenção", "fas fa-exclamation-triangle", "bg-warning");
3554|                    showToast("Membros Atualizados com Sucesso!", 'Sucesso', 'fa-check-circle', 'bg-success');
3560|                    showToast("Erro ao Salvar Membros. Por favor, tente novamente.", "Atenção", "fas fa-exclamation-triangle", "bg-warning");

File: templates/new_home/manager_home.html.twig
Match lines: 1
2216|        showToast(

File: templates/new_home/member_home.html.twig
Match lines: 1
1155|        showToast(

File: templates/new_home/partials/_modal_customize_home.html.twig
Match lines: 2
553|        if (typeof showToast === 'function') {
554|            showToast(message, settings.title, settings.icon, settings.className);

File: templates/offboarding/index.html.twig
Match lines: 7
1792|                    showToast('Informe o nome do offboarding.', 'Campo obrigatório', 'fas fa-exclamation-triangle', 'bg-warning');
1798|                    showToast('Selecione uma categoria.', 'Campo obrigatório', 'fas fa-exclamation-triangle', 'bg-warning');
2119|                    showToast('Informe o título do documento.', 'Campo obrigatório', 'fas fa-exclamation-triangle', 'bg-warning');
2125|                    showToast('Informe o link do documento.', 'Campo obrigatório', 'fas fa-exclamation-triangle', 'bg-warning');
2134|                        showToast('Informe um link válido.', 'Campo inválido', 'fas fa-exclamation-triangle', 'bg-warning');
2577|                    showToast('Por favor, selecione apenas arquivos de imagem (JPEG, PNG, GIF, WEBP).', 'Erro', 'fas fa-times-circle', 'bg-danger');
2584|                    showToast('Arquivo muito grande! Por favor, selecione uma imagem de até 2MB.', 'Erro', 'fas fa-times-circle', 'bg-danger');

File: templates/offboarding/index_user.html.twig
Match lines: 1
299|    <script src="{{ asset('js/utils/showToast.js') }}"></script>

File: templates/offboarding/offboarding_view.html.twig
Match lines: 1
589|    <script src="{{ asset('js/utils/showToast.js') }}"></script>

File: templates/offboarding/old_files/index_admin.html.twig
Match lines: 3
825|    <script src="{{ asset('js/utils/showToast.js') }}"></script>
2102|                showToast('Por favor, selecione apenas arquivos de imagem (JPEG, PNG, GIF, WEBP).', 'Erro', 'fas fa-times-circle', 'bg-danger');
2110|                showToast('Arquivo muito grande! Por favor, selecione uma imagem de até 2MB.', 'Erro', 'fas fa-times-circle', 'bg-danger');

File: templates/offboarding/old_files/index_user.html.twig
Match lines: 1
87|    <script src="{{ asset('js/utils/showToast.js') }}"></script>

File: templates/offboarding/old_files/offboarding.html.twig
Match lines: 1
335|    <script src="{{ asset('js/utils/showToast.js') }}"></script>

File: templates/offboarding/old_files/permissions.twig
Match lines: 6
783|                        showToast('Permissão atualizada com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
790|                    showToast(`Erro: ${error.message}`, 'Erro', 'fas fa-times', 'bg-danger');
1169|                        showToast('Permissão global atualizada com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
1176|                    showToast(`Erro: ${error.message}`, 'Erro', 'fas fa-times', 'bg-danger');
1227|                        showToast('Permissão atualizada com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
1234|                    showToast(`Erro: ${error.message}`, 'Erro', 'fas fa-times', 'bg-danger');

File: templates/onboarding/index_admin.html.twig
Match lines: 28
680|    <script src="{{ asset('js/utils/showToast.js') }}"></script>
1039|                    showToast('Onboarding não encontrado.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
1067|                showToast('Informe o nome do onboarding.', 'Atenção', 'fa-solid fa-triangle-exclamation', 'bg-warning');
1071|                showToast('Selecione a categoria.', 'Atenção', 'fa-solid fa-triangle-exclamation', 'bg-warning');
1075|                showToast('Erro interno: categorias não carregadas.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
1080|                showToast('Categoria inválida.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
1084|                showToast('Erro interno: empresa não definida.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
1213|                        showToast('Não foi possível criar onboarding.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
1220|                    showToast('Onboarding criado com sucesso!', 'Sucesso', 'fa-solid fa-circle-check', 'bg-success');
1224|                    showToast('Erro ao criar onboarding.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
1246|                        showToast('Não foi possível editar onboarding.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
1252|                    showToast('Onboarding atualizado com sucesso!', 'Sucesso', 'fa-solid fa-circle-check', 'bg-success');
1259|                    showToast('Erro ao editar onboarding.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
1269|                    showToast('Onboarding excluído com sucesso!', 'Sucesso', 'fa-solid fa-circle-check', 'bg-success');
1273|                    showToast('Erro ao excluir onboarding.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
1473|                    showToast('Documento não encontrado.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
1509|                showToast('Informe o título do documento.', 'Atenção', 'fa-solid fa-triangle-exclamation', 'bg-danger');
1516|                showToast('Informe o link do documento.', 'Atenção', 'fa-solid fa-triangle-exclamation', 'bg-danger');
1524|                    showToast('Informe um link válido.', 'Atenção', 'fa-solid fa-triangle-exclamation', 'bg-danger');
1535|                    showToast('ID de documento inválido.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
1575|                showToast('Documento criado com sucesso!', 'Sucesso', 'fa-solid fa-circle-check', 'bg-success');
1578|                showToast(err.message || 'Erro ao criar documento.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
1607|                showToast('Documento atualizado com sucesso!', 'Sucesso', 'fa-solid fa-circle-check', 'bg-success');
1610|                showToast(err.message || 'Erro ao atualizar documento.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
1647|                        showToast('Documento excluído com sucesso!', 'Sucesso', 'fa-solid fa-circle-check', 'bg-success');
1650|                        showToast(err.message || 'Erro ao excluir documento.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
1694|                showToast('Por favor, selecione apenas arquivos de imagem (JPEG, PNG, GIF, WEBP).', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
1700|                showToast('Arquivo muito grande! Por favor, selecione uma imagem de até 2MB.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');

File: templates/onboarding/index_user.html.twig
Match lines: 1
40|    <script src="{{ asset('js/utils/showToast.js') }}"></script>

File: templates/onboarding/old_files/index_admin.html.twig
Match lines: 31
517|    <script src="{{ asset('js/utils/showToast.js') }}"></script>
907|                            showToast(
945|                        showToast('Informe o nome do onboarding.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
949|                        showToast('Selecione a categoria.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
955|                        showToast('Erro interno: categorias não carregadas.', 'Erro', 'fas fa-times-circle', 'bg-danger');
961|                        showToast('Categoria inválida.', 'Erro', 'fas fa-times-circle', 'bg-danger');
967|                        showToast('Erro interno: empresa não definida.', 'Erro', 'fas fa-times-circle', 'bg-danger');
1060|                            showToast('Não foi possível criar onboarding.', 'Erro', 'fas fa-times-circle', 'bg-danger');
1067|                        showToast('Onboarding criado com sucesso!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
1071|                        showToast('Erro ao criar onboarding.', 'Erro', 'fas fa-times-circle', 'bg-danger');
1090|                                showToast('Não foi possível editar onboarding.', 'Erro', 'fas fa-times-circle', 'bg-danger');
1096|                            showToast('Onboarding atualizado com sucesso!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
1100|                            showToast('Erro ao editar onboarding.', 'Erro', 'fas fa-times-circle', 'bg-danger');
1125|                                showToast('Não foi possível editar onboarding.', 'Erro', 'fas fa-times-circle', 'bg-danger');
1132|                            showToast('Onboarding atualizado com sucesso!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
1141|                            showToast('Erro ao editar onboarding.', 'Erro', 'fas fa-times-circle', 'bg-danger');
1150|                        showToast('Onboarding excluído com sucesso!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
1154|                        showToast('Erro ao excluir onboarding.', 'Erro', 'fas fa-times-circle', 'bg-danger');
1377|                        showToast('Documento não encontrado.', 'Erro', 'fas fa-times-circle', 'bg-danger');
1423|                    showToast('Informe o título do documento.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-danger');
1431|                    showToast('Informe o link do documento.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-danger');
1440|                        showToast('Informe um link válido.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-danger');
1455|                        showToast('ID de documento inválido.', 'Erro', 'fas fa-times-circle', 'bg-danger');
1505|                    showToast('Documento criado com sucesso!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
1508|                    showToast(err.message || 'Erro ao criar documento.', 'Erro', 'fas fa-times-circle', 'bg-danger');
1544|                    showToast('Documento atualizado com sucesso!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
1547|                    showToast(err.message || 'Erro ao atualizar documento.', 'Erro', 'fas fa-times-circle', 'bg-danger');
1589|                            showToast('Documento excluído com sucesso!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
1592|                            showToast(err.message || 'Erro ao excluir documento.', 'Erro', 'fas fa-times-circle', 'bg-danger');
2275|            showToast('Por favor, selecione apenas arquivos de imagem (JPEG, PNG, GIF, WEBP).', 'Erro', 'fas fa-times-circle', 'bg-danger');
2283|            showToast('Arquivo muito grande! Por favor, selecione uma imagem de até 2MB.', 'Erro', 'fas fa-times-circle', 'bg-danger');

File: templates/onboarding/old_files/onboarding.html.twig
Match lines: 48
623|    <script src="{{ asset('js/utils/showToast.js') }}"></script>
1997|                        showToast(
2051|                        showToast(
2061|                        showToast(
2282|                    showToast(
2423|                        showToast(
2436|                        showToast(
2492|                            showToast(
2499|                            showToast(
2509|                        showToast(
2549|                                showToast(
2558|                                showToast(
2575|                            showToast(
2746|                            .then(() => showToast('Link de atalho copiado!', 'success'))
2747|                            .catch(() => showToast('Não foi possível copiar o link de atalho.', 'error'));
2770|                        showToast('Membro não encontrado.', 'Erro', 'fas fa-times-circle', 'bg-danger');
2776|                        showToast('Membro sem nome válido.', 'Erro', 'fas fa-times-circle', 'bg-danger');
2782|                        showToast('Membro sem email válido.', 'Erro', 'fas fa-times-circle', 'bg-danger');
2788|                        showToast('Email inválido.', 'Erro', 'fas fa-times-circle', 'bg-danger');
2796|                        showToast(
2835|                            showToast(
2842|                            showToast(
2852|                        showToast(
3115|                            showToast(
3181|                        showToast(
3192|                        showToast(
3221|                            showToast(
3231|                            showToast(
3241|                            showToast(
3294|                                showToast(
3302|                                showToast(
3313|                            showToast(
3338|                                showToast(
3346|                                showToast(
3357|                            showToast(
3371|                        showToast(
3399|                                showToast(
3406|                                showToast(
3416|                            showToast(
3432|                                showToast(
3439|                                showToast(
3449|                            showToast(
3481|                        showToast(
4018|                showToast(
4045|                showToast('Só é possível mover membros para etapas manuais', 'Movimento não permitido', 'fas fa-exclamation-triangle', 'bg-warning');
4192|                    showToast(
4207|                    showToast(
4216|                showToast(

File: templates/onboarding/old_files/permissions.twig
Match lines: 6
1546|                        showToast('Permissão atualizada com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
1553|                    showToast(`Erro: ${error.message}`, 'Erro', 'fas fa-times', 'bg-danger');
1967|                        showToast('Permissão global atualizada com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
1974|                    showToast(`Erro: ${error.message}`, 'Erro', 'fas fa-times', 'bg-danger');
2025|                        showToast('Permissão atualizada com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
2032|                    showToast(`Erro: ${error.message}`, 'Erro', 'fas fa-times', 'bg-danger');

File: templates/onboarding/onboarding_view/index.html.twig
Match lines: 1
255|    <script src="{{ asset('js/utils/showToast.js') }}"></script>

File: templates/onboarding/onboarding_view/tabs/_tab_customize.html.twig
Match lines: 25
735|                            showToast(
801|                        showToast(
812|                        showToast(
841|                            showToast(
851|                            showToast(
861|                            showToast(
913|                                showToast(
920|                                showToast(
931|                            showToast(
955|                                showToast(
962|                                showToast(
973|                            showToast(
987|                        showToast(
1014|                                showToast(
1021|                                showToast(
1031|                            showToast(
1046|                                showToast(
1053|                                showToast(
1063|                            showToast(
1095|                        showToast(
1514|                showToast(
1532|                showToast('Só é possível mover membros para etapas manuais', 'Movimento não permitido', 'fa-solid fa-triangle-exclamation', 'bg-warning');
1652|                    showToast(
1665|                    showToast(
1674|                showToast(

File: templates/onboarding/onboarding_view/tabs/_tab_members.html.twig
Match lines: 17
519|            .then(() => showToast('Link de atalho copiado!', 'Sucesso', 'fa-solid fa-circle-check', 'bg-success'))
520|            .catch(() => showToast('Não foi possível copiar o link de atalho.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger'));
560|            showToast(
649|            showToast(
660|            showToast('Selecione pelo menos um membro para adicionar.', 'Atenção', 'fa-solid fa-triangle-exclamation', 'bg-warning');
702|                showToast('Sucesso ao adicionar membros!', 'Sucesso', 'fa-solid fa-circle-check', 'bg-success');
704|                showToast('Erro ao adicionar membros.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
708|            showToast(error.message || 'Ocorreu um erro ao adicionar os membros.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
734|                    showToast('Sucesso ao retirar membro!', 'Sucesso', 'fa-solid fa-circle-check', 'bg-success');
737|                    showToast('Erro ao retirar membro.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
743|                showToast('Ocorreu um erro ao retirar o membro.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
891|            showToast('Dados do membro inválidos.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
895|            showToast('Email inválido.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
902|            showToast('Por favor, insira uma mensagem.', 'Atenção', 'fa-solid fa-triangle-exclamation', 'bg-warning');
923|                showToast(`Lembrete enviado com sucesso para ${data.recipient}!`, 'Sucesso', 'fa-solid fa-circle-check', 'bg-success');
925|                showToast(data.message || 'Falha ao enviar o lembrete.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
928|        .catch(() => { showToast('Ocorreu um erro ao enviar o lembrete.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger'); })

File: templates/onboarding/onboarding_view/tabs/_tab_overview.html.twig
Match lines: 3
1081|                        showToast(
1135|                        showToast(
1144|                        showToast(

File: templates/organograma/company_layout.html.twig
Match lines: 75
2690|    <script src="{{ asset('js/utils/showToast.js') }}"></script> {# showToast('O nome do time é obrigatório', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger'); #}
3538|                                    showToast('Você só pode mover membros do seu time.', 'Acesso restrito', 'fas fa-ban', 'bg-warning');
5719|                                showToast(`Membro ${companyMember.fullName} adicionado com sucesso!`, 'Sucesso', 'fas fa-check', 'bg-success');
5721|                                showToast(`Cargo ${roleName} adicionado com sucesso!`, 'Sucesso', 'fas fa-check', 'bg-success');
5748|                                    showToast('Você só pode mover membros do seu time.', 'Acesso restrito', 'fas fa-ban', 'bg-warning');
5763|                                showToast('Um cargo assistente não pode ser superior a ninguém.', 'Erro', 'fas fa-times-circle', 'bg-danger');
5799|                                    showToast(`Sócio movido como cargo subordinado com sucesso!`, 'Sucesso', 'fas fa-check', 'bg-success');
5810|                                    showToast('Um cargo não pode ter mais de um assistente.', 'Erro', 'fas fa-times-circle', 'bg-danger');
5840|                                showToast('Assistente movido com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
5888|                            showToast('Cargo movido com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
5917|                                showToast('Sócio removido com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
5930|                                showToast('Remova primeiro os cargos subordinados, sócios e assistentes antes de remover o cargo raiz.', 'Aviso', 'fas fa-info-circle', 'bg-warning');
5943|                            showToast('Cargo raiz removido. Organograma vazio.', 'Sucesso', 'fas fa-check', 'bg-success');
5979|                        showToast('Cargo removido com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
6421|                            showToast('Este cargo já está vago!', 'Aviso', 'fas fa-info-circle', 'bg-warning');
6461|                            showToast(`Membro ${removedMember.fullName} removido com sucesso!`, 'Sucesso', 'fas fa-check', 'bg-success');
6552|                        showToast(`${companyMemberFullName} adicionado com sucesso!`, 'Sucesso', 'fas fa-check', 'bg-success');
6819|                                        showToast(message, 'Sucesso', 'fas fa-check', 'bg-success');
6841|                                    showToast(message, 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
6845|                                showToast('Erro na comunicação com o servidor', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
7060|                                    showToast(message, 'Sucesso', 'fas fa-check', 'bg-success');
7097|                                showToast(message, 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
7102|                            showToast('Erro na comunicação com o servidor', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
8019|                                showToast(`Sócio ${roleName} atualizado com sucesso!`, 'Sucesso', 'fas fa-check', 'bg-success');
8062|                            showToast(`Assistente ${roleName} convertido para Sócio com sucesso!`, 'Sucesso', 'fas fa-check', 'bg-success');
8110|                            showToast(`Cargo convertido em Sócio ${roleName} com sucesso!`, 'Sucesso', 'fas fa-check', 'bg-success');
8138|                                showToast(`Sócio ${roleName} convertido em Cargo com sucesso!`, 'Sucesso', 'fas fa-check', 'bg-success');
8212|                            showToast(`Cargo ${roleName} atualizado com sucesso!`, 'Sucesso', 'fas fa-check', 'bg-success');
8220|                            showToast('Não é possível converter o cargo raiz em assistente!', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
8247|                            showToast(`Cargo ${roleName} convertido para assistente com sucesso!`, 'Sucesso', 'fas fa-check', 'bg-success');
8277|                            showToast(`Assistente ${roleName} convertido para cargo normal com sucesso!`, 'Sucesso', 'fas fa-check', 'bg-success');
8971|                                    showToast(
8994|                                showToast(
9003|                            showToast(`Não foi possível identificar o cargo`, 'Erro', 'fas fa-exclamation-triangle', 'bg-warning');
9935|                        showToast('Não é possível salvar: cargo sem membro associado', 'Aviso', 'fas fa-exclamation-triangle', 'bg-warning');
9963|                        showToast('Cargo atualizado na simulação.', 'Sucesso', 'fas fa-check', 'bg-success');
10007|                        showToast('Cargo atualizado com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
10011|                        showToast('Erro ao salvar alterações.', 'Erro', 'fas fa-times', 'bg-danger');
10502|                                    showToast('Permissão global atualizada com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
10509|                                showToast(`Erro: ${error.message}`, 'Erro', 'fas fa-times', 'bg-danger');
10582|                                    showToast('Permissão global atualizada com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
10589|                                showToast(`Erro: ${error.message}`, 'Erro', 'fas fa-times', 'bg-danger');
10658|                                    showToast('Permissão atualizada com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
10665|                                showToast(`Erro: ${error.message}`, 'Erro', 'fas fa-times', 'bg-danger');
10737|                                    showToast('Permissão atualizada com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
10744|                                showToast(`Erro: ${error.message}`, 'Erro', 'fas fa-times', 'bg-danger');
11005|                            showToast(response.message, 'Sucesso', 'fas fa-check', 'bg-success');
11017|                        showToast(errorMessage, 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
11364|            //             showToast('Selecione pelo menos um cargo para processar', 'Aviso', 'fas fa-exclamation-triangle', 'bg-warning');
11400|            //                 showToast(
11410|            //                 showToast(
11420|            //             showToast(
11452|            //             showToast('Não há cargos para sincronizar', 'Informação', 'fas fa-info-circle', 'bg-info');
11523|                            showToast('Cargo removido com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
11652|                        showToast('Você deve selecionar um cargo!', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
11670|                            showToast('Um cargo não pode ter mais de um assistente.', 'Erro', 'fas fa-times-circle', 'bg-danger');
11742|                                showToast(`Sócio ${selectedMember.fullName} adicionado com sucesso!`, 'Sucesso', 'fas fa-check', 'bg-success');
11744|                                showToast(`Sócio ${roleName} adicionado com sucesso!`, 'Sucesso', 'fas fa-check', 'bg-success');
11755|                                showToast('Um cargo não pode ter mais de um assistente.', 'Erro', 'fas fa-times-circle', 'bg-danger');
11822|                                    showToast(`Assistente ${selectedMember.fullName} adicionado com sucesso!`, 'Sucesso', 'fas fa-check', 'bg-success');
11824|                                    showToast(`Cargo de assistente ${roleName} adicionado com sucesso!`, 'Sucesso', 'fas fa-check', 'bg-success');
11896|                            showToast(`Primeiro cargo adicionado com sucesso! ${selectedMember.fullName} é agora o cargo raiz.`, 'Sucesso', 'fas fa-check', 'bg-success');
11898|                            showToast(`Primeiro cargo "${roleName}" adicionado com sucesso!`, 'Sucesso', 'fas fa-check', 'bg-success');
12369|                            if (typeof showToast === 'function') {
12370|                                showToast('Simulação enviada para aprovação com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
12376|                            if (typeof showToast === 'function') {
12377|                                showToast(data.message || 'Erro ao enviar simulação para aprovação', 'Erro', 'fas fa-times', 'bg-danger');
12387|                        if (typeof showToast === 'function') {
12388|                            showToast('Erro ao enviar simulação para aprovação', 'Erro', 'fas fa-times', 'bg-danger');
12430|                            if (typeof showToast === 'function') {
12431|                                showToast('Simulação aprovada com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
12437|                            if (typeof showToast === 'function') {
12438|                                showToast(data.message || 'Erro ao aprovar simulação', 'Erro', 'fas fa-times', 'bg-danger');
12448|                        if (typeof showToast === 'function') {
12449|                            showToast('Erro ao aprovar simulação', 'Erro', 'fas fa-times', 'bg-danger');

File: templates/organograma/company_layout_js.html.twig
Match lines: 61
5|    <script src="{{ asset('js/utils/showToast.js') }}"></script> {# showToast('O nome do time é obrigatório', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger'); #}
1799|                                showToast(`Membro ${companyMember.fullName} adicionado com sucesso!`, 'Sucesso', 'fas fa-check', 'bg-success');
1801|                                showToast(`Cargo ${roleName} adicionado com sucesso!`, 'Sucesso', 'fas fa-check', 'bg-success');
1831|                            showToast('Um cargo assistente não pode ser superior a ninguém.', 'Erro', 'fas fa-times-circle', 'bg-danger');
1859|                                showToast(`Sócio movido como cargo subordinado com sucesso!`, 'Sucesso', 'fas fa-check', 'bg-success');
1868|                                showToast('Um cargo não pode ter mais de um assistente.', 'Erro', 'fas fa-times-circle', 'bg-danger');
1890|                            showToast('Assistente movido com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
1926|                        showToast('Cargo movido com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
1954|                                showToast('Sócio removido com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
1967|                                showToast('Remova primeiro os cargos subordinados, sócios e assistentes antes de remover o cargo raiz.', 'Aviso', 'fas fa-info-circle', 'bg-warning');
1980|                            showToast('Cargo raiz removido. Organograma vazio.', 'Sucesso', 'fas fa-check', 'bg-success');
2016|                        showToast('Cargo removido com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
2365|                            showToast('Este cargo já está vago!', 'Aviso', 'fas fa-info-circle', 'bg-warning');
2405|                            showToast(`Membro ${removedMember.fullName} removido com sucesso!`, 'Sucesso', 'fas fa-check', 'bg-success');
2465|                        showToast(`${companyMemberFullName} adicionado com sucesso!`, 'Sucesso', 'fas fa-check', 'bg-success');
2610|                                    showToast('Organograma vazio salvo com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
2612|                                    showToast('Erro ao salvar organograma vazio', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
2616|                                showToast('Erro na comunicação com o servidor', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
2704|                                showToast('Organograma salvo com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
2707|                                showToast('Erro ao salvar organograma', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
2712|                            showToast('Erro na comunicação com o servidor', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
3158|                                showToast(`Sócio ${roleName} atualizado com sucesso!`, 'Sucesso', 'fas fa-check', 'bg-success');
3205|                            showToast(`Assistente ${roleName} convertido para Sócio com sucesso!`, 'Sucesso', 'fas fa-check', 'bg-success');
3252|                            showToast(`Cargo convertido em Sócio ${roleName} com sucesso!`, 'Sucesso', 'fas fa-check', 'bg-success');
3280|                                showToast(`Sócio ${roleName} convertido em Cargo com sucesso!`, 'Sucesso', 'fas fa-check', 'bg-success');
3302|                            showToast(`Cargo ${roleName} atualizado com sucesso!`, 'Sucesso', 'fas fa-check', 'bg-success');
3310|                            showToast('Não é possível converter o cargo raiz em assistente!', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
3337|                            showToast(`Cargo ${roleName} convertido para assistente com sucesso!`, 'Sucesso', 'fas fa-check', 'bg-success');
3367|                            showToast(`Assistente ${roleName} convertido para cargo normal com sucesso!`, 'Sucesso', 'fas fa-check', 'bg-success');
4050|                                    showToast(
4097|                                showToast(
4107|                                showToast(
4116|                            showToast(`Não foi possível identificar o cargo`, 'Erro', 'fas fa-exclamation-triangle', 'bg-warning');
4937|                        showToast('Não é possível salvar: cargo sem membro associado', 'Aviso', 'fas fa-exclamation-triangle', 'bg-warning');
4991|                        showToast('Cargo atualizado com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
4995|                        showToast('Erro ao salvar alterações.', 'Erro', 'fas fa-times', 'bg-danger');
5487|                                    showToast('Permissão global atualizada com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
5494|                                showToast(`Erro: ${error.message}`, 'Erro', 'fas fa-times', 'bg-danger');
5567|                                    showToast('Permissão global atualizada com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
5574|                                showToast(`Erro: ${error.message}`, 'Erro', 'fas fa-times', 'bg-danger');
5643|                                    showToast('Permissão atualizada com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
5650|                                showToast(`Erro: ${error.message}`, 'Erro', 'fas fa-times', 'bg-danger');
5722|                                    showToast('Permissão atualizada com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
5729|                                showToast(`Erro: ${error.message}`, 'Erro', 'fas fa-times', 'bg-danger');
5951|                            showToast(response.message, 'Sucesso', 'fas fa-check', 'bg-success');
5963|                        showToast(errorMessage, 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
6371|            //             showToast('Selecione pelo menos um cargo para processar', 'Aviso', 'fas fa-exclamation-triangle', 'bg-warning');
6407|            //                 showToast(
6417|            //                 showToast(
6427|            //             showToast(
6459|            //             showToast('Não há cargos para sincronizar', 'Informação', 'fas fa-info-circle', 'bg-info');
6542|                            showToast('Cargo removido com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
6570|                    showToast('Você deve selecionar um cargo!', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
6590|                            showToast('Um cargo não pode ter mais de um assistente.', 'Erro', 'fas fa-times-circle', 'bg-danger');
6621|                                showToast(`Sócio ${selectedMember.fullName} adicionado com sucesso!`, 'Sucesso', 'fas fa-check', 'bg-success');
6623|                                showToast(`Sócio ${roleName} adicionado com sucesso!`, 'Sucesso', 'fas fa-check', 'bg-success');
6634|                                showToast('Um cargo não pode ter mais de um assistente.', 'Erro', 'fas fa-times-circle', 'bg-danger');
6660|                                    showToast(`Assistente ${selectedMember.fullName} adicionado com sucesso!`, 'Sucesso', 'fas fa-check', 'bg-success');
6662|                                    showToast(`Cargo de assistente ${roleName} adicionado com sucesso!`, 'Sucesso', 'fas fa-check', 'bg-success');
6688|                            showToast(`Primeiro cargo adicionado com sucesso! ${selectedMember.fullName} é agora o cargo raiz.`, 'Sucesso', 'fas fa-check', 'bg-success');
6690|                            showToast(`Primeiro cargo "${roleName}" adicionado com sucesso!`, 'Sucesso', 'fas fa-check', 'bg-success');

File: templates/payables/payroll/form_embedded.html.twig
Match lines: 8
2002|    //     showToast('O nome é obrigatório.', 'Aviso!', 'fas fa-exclamation-circle', 'bg-warning');
2009|            showToast(field.message, 'Aviso!', 'fas fa-exclamation-circle', 'bg-warning');
2017|        showToast('Por favor, insira um e-mail válido.', 'Aviso!', 'fas fa-exclamation-circle', 'bg-warning');
2025|            showToast(`${fieldLabel}: Por favor, insira apenas números.`, 'Aviso!', 'fas fa-exclamation-circle', 'bg-warning');
2051|                showToast(`${fieldName} é obrigatório.`, 'Aviso!', 'fas fa-exclamation-circle', 'bg-warning');
2479|                        showToast('Folha de pagamento salva com sucesso.', 'Sucesso!','fas fa-check', 'bg-success');
2490|                                showToast(resp.message, 'Erro!', 'fas fa-times', 'bg-danger');
2494|                        showToast('Erro ao salvar folha de pagamento.', 'Erro!', 'fas fa-times', 'bg-danger');

File: templates/payables/payroll/form_fragment.html.twig
Match lines: 8
1977|    //     showToast('O nome é obrigatório.', 'Aviso!', 'fas fa-exclamation-circle', 'bg-warning');
1984|            showToast(field.message, 'Aviso!', 'fas fa-exclamation-circle', 'bg-warning');
1992|        showToast('Por favor, insira um e-mail válido.', 'Aviso!', 'fas fa-exclamation-circle', 'bg-warning');
2000|            showToast(`${fieldLabel}: Por favor, insira apenas números.`, 'Aviso!', 'fas fa-exclamation-circle', 'bg-warning');
2026|                showToast(`${fieldName} é obrigatório.`, 'Aviso!', 'fas fa-exclamation-circle', 'bg-warning');
2454|                        showToast('Folha de pagamento salva com sucesso.', 'Sucesso!','fas fa-check', 'bg-success');
2465|                                showToast(resp.message, 'Erro!', 'fas fa-times', 'bg-danger');
2469|                        showToast('Erro ao salvar folha de pagamento.', 'Erro!', 'fas fa-times', 'bg-danger');

File: templates/permissions_tags/add.html.twig
Match lines: 4
184|		// function showToast(message, title = 'Notificação', iconClass = 'fas fa-check', bgColor = 'bg-success') {
247|						showToast(data.message, 'Sucesso', 'fas fa-check', 'bg-success');
254|						showToast(data.message, 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
258|                    showToast(error, 'Erro', 'fas fa-exclamation-circle', 'bg-danger');

File: templates/permissions_tags/edit.html.twig
Match lines: 4
183|        // function showToast(message, title = 'Notificação', iconClass = 'fas fa-check', bgColor = 'bg-success') {
247|						showToast(data.message, 'Sucesso', 'fas fa-check', 'bg-success');
254|						showToast(data.message, 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
258|                    showToast(error, 'Erro', 'fas fa-exclamation-circle', 'bg-danger');

File: templates/permissions_tags/index.html.twig
Match lines: 3
188|						showToast(result.message || 'Permissão excluída com sucesso.', 'Sucesso', 'fas fa-check', 'bg-success');
191|						showToast('Erro ao excluir a permissão: ' + result.message, 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
197|					showToast('Erro ao excluir a permissão: ' + msg, 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');

File: templates/permissions_tags/member_tab_permissions.html.twig
Match lines: 15
1084|                    if (typeof showToast === 'function') {
1085|                        showToast('Erro ao carregar dados de permissões', 'Erro', 'fas fa-times', 'bg-danger');
1613|                showToast('Não foi possível identificar o produto desta permissão. Recarregue a página e tente novamente.', 'Erro', 'fas fa-times', 'bg-danger');
1696|                    showToast('Permissão atualizada com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
1698|                    showToast(data.message || 'Erro ao atualizar permissão', 'Erro', 'fas fa-times', 'bg-danger');
1703|                showToast('Erro ao atualizar permissão', 'Erro', 'fas fa-times', 'bg-danger');
2005|                        showToast('Permissão global definida e aplicada a todos os produtos!', 'Sucesso', 'fas fa-check', 'bg-success');
2007|                        showToast('Permissão global atualizada com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
2037|                showToast(`Erro: ${error.message}`, 'Erro', 'fas fa-times', 'bg-danger');
2180|        // showToast override removed - uses global showToast from utils/showToast.js
2400|                                showToast('Permissão global definida e aplicada a todos os produtos!', 'Sucesso', 'fas fa-check', 'bg-success');
2402|                                showToast('Permissão global atualizada com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
2498|                            showToast('Permissão atualizada com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
2501|                        showToast('Erro ao atualizar permissão', 'Erro', 'fas fa-times', 'bg-danger');
2506|                    showToast('Erro ao atualizar permissão', 'Erro', 'fas fa-times', 'bg-danger');

File: templates/pps/tabela_simulacao.html.twig
Match lines: 2
4203|                if (typeof showToast === 'function') {
4204|                    showToast('Alterações salvas com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');

File: templates/process/_fragment/_classification_dropdown.html.twig
Match lines: 6
501|                    if (typeof showToast === 'function') {
502|                        showToast('Classificação atualizada!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
505|                    if (typeof showToast === 'function') {
506|                        showToast('Erro: ' + (data.message || 'Erro desconhecido'), 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
513|                if (typeof showToast === 'function') {
514|                    showToast('Erro ao atualizar.', 'Erro', 'fas fa-exclamation-circle', 'bg-danger');

File: templates/process/_fragment/_controls_dash.html.twig
Match lines: 1
425|                showToast('Erro ao carregar etapa. Recarregando página...', 'Erro', 'fas fa-exclamation-circle', 'bg-danger');

File: templates/process/_fragment/_modals_report.html.twig
Match lines: 8
466|            showToast('Selecione pelo menos uma etapa', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
678|            showToast('Selecione um candidato', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
705|        showToast('Gerando relatório de entrevistas IA...', 'Aguarde', 'fas fa-spinner fa-spin', 'bg-info');
722|            showToast('Relatório de entrevistas IA gerado com sucesso!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
726|            showToast('Não foi possível gerar o relatório. Verifique se há entrevistas IA completadas.', 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
737|        showToast('Gerando relatório de ' + userName + '...', 'Aguarde', 'fas fa-spinner fa-spin', 'bg-info');
752|            showToast('Relatório de ' + userName + ' baixado com sucesso!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
756|            showToast('Não foi possível gerar o relatório individual.', 'Erro', 'fas fa-exclamation-circle', 'bg-danger');

File: templates/process/_fragment/_scripts_dash.html.twig
Match lines: 10
93|            showToast("Por favor, selecione a nova data de encerramento.", "Erro", "fas fa-exclamation-circle", "bg-danger");
121|                showToast("Processo reaberto com sucesso.", "Sucesso!", "fas fa-check-circle", "bg-success");
130|                showToast("Erro ao reabrir o processo.", "Erro", "fas fa-exclamation-circle", "bg-danger");
142|            showToast("Falha na comunicação com o servidor.", "Erro", "fas fa-exclamation-circle", "bg-danger");
276|                        showToast('Composição do ranking salva com sucesso', 'Sucesso', 'fas fa-check-circle', 'bg-success');
309|                        showToast(response.message || 'Erro ao salvar composição do ranking', 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
320|                    showToast('Erro ao salvar composição do ranking', 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
580|                showToast('Avaliação salva com sucesso', 'Sucesso', 'fas fa-check-circle', 'bg-success');
583|                showToast(error.message || 'Erro ao salvar avaliação', 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
1563|        showToast(message, title, iconMap[type] || 'fas fa-info-circle', `bg-${type}`);

File: templates/process/dashboard.html.twig
Match lines: 3
1807|                    showToast('Candidato adicionado aos favoritos', 'Favorito', 'fas fa-star', 'bg-success');
1809|                    showToast('Candidato removido dos favoritos', 'Favorito', 'fas fa-star', 'bg-info');
1815|                showToast('Erro ao atualizar favorito', 'Erro', 'fas fa-exclamation-circle', 'bg-danger');

File: templates/process/edit.html.twig
Match lines: 16
707|        showToast('O nome do processo é obrigatório.', 'Atenção', 'fa-exclamation-triangle', 'bg-warning');
713|        showToast('A data de início é obrigatória.', 'Atenção', 'fa-exclamation-triangle', 'bg-warning');
719|        showToast('A data de término é obrigatória.', 'Atenção', 'fa-exclamation-triangle', 'bg-warning');
725|        showToast('A empresa é obrigatória.', 'Atenção', 'fa-exclamation-triangle', 'bg-warning');
731|        showToast('O responsável é obrigatório.', 'Atenção', 'fa-exclamation-triangle', 'bg-warning');
737|        showToast('A área profissional é obrigatória.', 'Atenção', 'fa-exclamation-triangle', 'bg-warning');
743|        showToast('A descrição da vaga é obrigatória.', 'Atenção', 'fa-exclamation-triangle', 'bg-warning');
749|        showToast('O tipo de horário é obrigatório.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
757|            showToast('Os horários de entrada e saída são obrigatórios para o tipo de horário fixo.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
766|            showToast('O período e a jornada são obrigatórios para o tipo de horário período.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
775|            showToast('A duração e as horas por dia são obrigatórias para o tipo de horário flexível.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
787|            showToast('A unidade da federação e o município são obrigatórios para locais de trabalho híbridos ou presenciais.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
803|        showToast('Selecione pelo menos uma seção para a Etapa Online.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
812|            showToast('Selecione pelo menos uma opção de manual para a entrevista.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
822|            showToast('Selecione pelo menos uma opção de avaliação.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
1808|            showToast('A etapa foi excluída com sucesso.', 'Etapa excluída', 'fas fa-check-circle', 'bg-success');

File: templates/process/index.html.twig
Match lines: 2
47|    // showToast using toastr - defined synchronously before tab scripts
59|        Object.defineProperty(window, 'showToast', {

File: templates/process/modal/_modal_selective_process_add_stage.html.twig
Match lines: 23
1583|                    if (typeof showToast === 'function') {
1584|                        showToast('Endereço preenchido com base no CEP.', 'Sucesso', 'fas fa-check-circle', 'bg-success');
1588|                    if (typeof showToast === 'function') {
1589|                        showToast('CEP não encontrado. Verifique o número digitado.', 'Aviso', 'fas fa-exclamation-triangle', 'bg-warning');
1595|                if (typeof showToast === 'function') {
1596|                    showToast('Erro ao buscar CEP. Verifique sua conexão.', 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
1758|            showToast('A data da avaliação não pode ser anterior ao início do processo (' + formatDateBR(processStartDate) + ').', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
1764|            showToast('A data da avaliação não pode ser posterior ao término do processo (' + formatDateBR(processEndDate) + ').', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
2077|                    showToast('Por favor, selecione uma área profissional primeiro.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
2161|            showToast('Você pode adicionar no máximo ' + maxFitCulturalTags + ' assessments.', 'Limite atingido', 'fas fa-exclamation-triangle', 'bg-warning');
2165|            showToast('Este assessment já foi adicionado.', 'Duplicado', 'fas fa-info-circle', 'bg-info');
2704|            showToast('Por favor, insira um título para a etapa do processo seletivo.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
2710|            showToast('Por favor, insira uma descrição para a etapa do processo seletivo.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
2722|                showToast('A data de término da etapa não pode ser anterior à data de início do processo seletivo.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
2726|                showToast('A data de término da etapa não pode ser posterior à data de término do processo seletivo.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
2734|                showToast('Por favor, insira a rua para a etapa do processo seletivo.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
2740|                showToast('Por favor, insira o bairro para a etapa do processo seletivo.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
2746|                showToast('Por favor, insira a cidade para a etapa do processo seletivo.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
2752|                showToast('Por favor, insira um CEP válido para a etapa do processo seletivo.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
2758|                showToast('Por favor, insira o número para a etapa do processo seletivo.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
2771|                        showToast('A data da avaliação/dinâmica não pode ser anterior à data de início do processo seletivo.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
2776|                        showToast('A data da avaliação/dinâmica não pode ser posterior à data de término do processo seletivo.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
2787|                showToast('Por favor, insira o link de acompanhamento ao vivo.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');

File: templates/process/modal_selective_process_add_stage.html.twig
Match lines: 6
1096|            showToast('Você pode selecionar no máximo 2 assessments.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
1166|            showToast('Atenção', 'Por favor, selecione uma área profissional primeiro.', 'bg-warning');
1748|            showToast('Selecione pelo menos uma seção para a Etapa Online.', 'Atenção', 'bg-warning');
1757|                showToast('Selecione pelo menos uma opção de manual para a entrevista.', 'Atenção', 'bg-warning');
1766|                showToast('Selecione pelo menos um assessment para o Fit Cultural.', 'Atenção', 'bg-warning');
1786|                showToast('Por favor, selecione um template de Entrevista IA.', 'Atenção', 'bg-warning');

File: templates/process/modal_stage_progress.html.twig
Match lines: 14
404|            showToast('Nenhum candidato selecionado.', 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
412|                showToast('Por favor, preencha a mensagem do email.', 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
419|                showToast('Por favor, selecione um template.', 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
424|            showToast('Por favor, selecione uma opção de notificação (Email ou WhatsApp).', 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
447|                showToast('Notificação enviada com sucesso para os candidatos selecionados!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
452|                showToast(msg, 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
458|            showToast('Ocorreu um erro inesperado. Tente novamente.', 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
492|            showToast('Nenhum candidato não selecionado.', 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
500|                showToast('Por favor, preencha a mensagem do email.', 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
507|                showToast('Por favor, selecione um template do WhatsApp.', 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
512|            showToast('Por favor, selecione uma opção de notificação (Email ou WhatsApp).', 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
534|                showToast('Notificação enviada com sucesso para os candidatos não selecionados!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
538|                showToast('Erro ao enviar a notificação para os candidatos não selecionados.', 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
544|            showToast('Ocorreu um erro inesperado. Tente novamente.', 'Erro', 'fas fa-exclamation-circle', 'bg-danger');

File: templates/process/new_selective_process.html.twig
Match lines: 41
688|        showToast('Cada palavra-chave deve ter no máximo 50 caracteres.', 'Aviso', 'fas fa-exclamation-triangle', 'bg-warning');
744|            showToast('Cada palavra-chave deve ter no máximo 50 caracteres.', 'Aviso', 'fas fa-exclamation-triangle', 'bg-warning');
764|            showToast('Limite de 5 palavras-chave atingido.', 'Info', 'fas fa-info-circle', 'bg-info');
814|        showToast('O nome do processo é obrigatório.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
820|        showToast('A data de início é obrigatória.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
826|        showToast('A data de término é obrigatória.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
833|        showToast('A empresa é obrigatória.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
840|        showToast('O responsável é obrigatório.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
846|        showToast('A área profissional é obrigatória.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
862|        showToast('O cargo é obrigatório.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
869|        showToast('A descrição da vaga é obrigatória.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
878|        showToast('O tipo de horário é obrigatório.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
885|            showToast('Os horários de entrada e saída são obrigatórios para o tipo de horário fixo.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
893|            showToast('O período e a jornada são obrigatórios para o tipo de horário período.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
901|            showToast('A duração e as horas por dia são obrigatórias para o tipo de horário flexível.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
920|            showToast('Para a modalidade Presencial, preencha todos os campos de endereço: CEP, Rua, Número, Bairro, Cidade e Estado (UF).', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
952|        showToast('Selecione pelo menos uma seção para a Etapa Online.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
964|            showToast('Selecione um roteiro de entrevista ou uma opção de manual.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
987|            showToast('Selecione pelo menos um assessment para o Fit Cultural.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
2458|                showToast('Sucesso', 'Configuração do Employee Advocacy atualizada com sucesso!', 'bg-success');
2461|                showToast('Erro', data.message || 'Erro ao atualizar configuração.', 'bg-danger');
2468|            showToast('Erro', 'Erro ao salvar configuração do Employee Advocacy.', 'bg-danger');
2544|        if (typeof showToast === 'function') {
2545|            showToast('Alguns campos podem não ter sido carregados corretamente. Verifique antes de salvar.', 'Aviso', 'fas fa-exclamation-triangle', 'bg-warning');
2737|            showToast('Selecione no máximo 5 palavras-chave.', 'Aviso', 'fas fa-exclamation-triangle', 'bg-warning');
2753|                    showToast('Selecione o tipo (Desejável ou Diferencial) para cada habilidade marcada.', 'Aviso', 'fas fa-exclamation-triangle', 'bg-warning');
2770|                    showToast('Selecione o tipo (Desejável ou Diferencial) para cada certificação marcada.', 'Aviso', 'fas fa-exclamation-triangle', 'bg-warning');
2792|            showToast('É necessário adicionar no mínimo uma etapa para continuar.', 'Aviso', 'fas fa-exclamation-triangle', 'bg-warning');
2855|                    showToast(response.message || response.error || 'Erro ao salvar o processo seletivo.', 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
2861|                showToast(response.message || response.error || 'Ocorreu um erro ao processar a requisição.', 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
3008|            showToast('Dados da etapa não encontrados. Tente recarregar a página.', 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
3043|            showToast('Etapa duplicada com sucesso!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
3051|            showToast('A etapa foi excluída com sucesso.', 'Etapa excluída', 'fas fa-check-circle', 'bg-success');
3781|    showToast('Processo seletivo preenchido automaticamente!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
3892|        showToast(
4135|        showToast(
4394|            if (typeof showToast === 'function') {
4395|                showToast('Não foi possível carregar os dados do trabalho.', 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
4425|        showToast('Dados do cargo não disponíveis.', 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
4459|                showToast(response.message || 'Erro ao processar cargo.', 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
4470|            showToast(errorMessage, 'Erro', 'fas fa-exclamation-circle', 'bg-danger');

File: templates/process/profissionals_dashboard.html.twig
Match lines: 2
965|            if (typeof showToast === 'function') {
966|                showToast('Selecione um profissional', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');

File: templates/process/tabs/_tab_benefits.html.twig
Match lines: 6
379|        // Feedback messages now use showToast (global toastr-based function)
498|                            showToast(response.message || 'Benefício salvo com sucesso.', 'Sucesso', 'fas fa-check-circle', 'bg-success');
501|                            showToast(message, 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
505|                        showToast(getErrorMessage(xhr, 'Não foi possível salvar o benefício.'), 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
546|                    showToast(message, 'Sucesso', 'fas fa-check-circle', 'bg-success');
549|                    showToast(getErrorMessage(xhr, 'Não foi possível excluir o benefício.'), 'Erro', 'fas fa-exclamation-circle', 'bg-danger');

File: templates/process/tabs/_tab_create_job_details.html.twig
Match lines: 6
1163|                    if (typeof showToast === 'function') {
1164|                        showToast('Endereço preenchido com base no CEP.', 'Sucesso', 'fas fa-check-circle', 'bg-success');
1170|                    if (typeof showToast === 'function') {
1171|                        showToast('CEP não encontrado. Verifique o número digitado.', 'Aviso', 'fas fa-exclamation-triangle', 'bg-warning');
1178|                if (typeof showToast === 'function') {
1179|                    showToast('Erro ao buscar CEP. Verifique sua conexão.', 'Erro', 'fas fa-exclamation-circle', 'bg-danger');

File: templates/process/tabs/_tab_create_stages.html.twig
Match lines: 2
484|            showToast('Você pode adicionar no máximo ' + maxTags + ' tags', 'Limite atingido', 'fas fa-exclamation-triangle', 'bg-warning');
488|            showToast('Esta tag já foi adicionada', 'Tag duplicada', 'fas fa-info-circle', 'bg-info');

File: templates/process/tabs/_tab_hired.html.twig
Match lines: 13
655|        // Feedback messages now use showToast (global toastr-based function)
811|        // Feedback messages now use showToast (global toastr-based function)
813|        // showToast is now available globally via showToast.js (loaded by custom.js)
1135|                        showToast('Por favor, preencha pelo menos a primeira questão do formulário.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
1162|                            showToast(response.message || 'Documento salvo com sucesso!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
1173|                            showToast((response && response.message) || 'Não foi possível criar o documento.', 'Falha', 'fas fa-exclamation-circle', 'bg-danger');
1179|                        showToast(msg, 'Falha', 'fas fa-exclamation-circle', 'bg-danger');
1214|                            showToast(response.message || 'Documento atualizado com sucesso!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
1216|                            showToast((response && response.message) || 'Não foi possível atualizar o documento.', 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
1220|                        showToast('Não foi possível atualizar o documento.', 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
1254|                            showToast(response.message || 'Documento excluído com sucesso!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
1256|                            showToast((response && response.message) || 'Não foi possível excluir o documento.', 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
1260|                        showToast('Não foi possível excluir o documento.', 'Erro', 'fas fa-exclamation-circle', 'bg-danger');

File: templates/process/tabs/_tab_skill_sets.html.twig
Match lines: 7
612|        // Feedback messages now use showToast (global toastr-based function)
1126|                showToast('Nenhuma habilidade selecionada.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
1180|                        showToast(message, 'Sucesso', 'fas fa-check-circle', 'bg-success');
1182|                        showToast(message || 'Não foi possível salvar o conjunto.', 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
1187|                    showToast(errorMessage, 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
1274|                        showToast(message, 'Sucesso', 'fas fa-check-circle', 'bg-success');
1278|                        showToast(errorMessage, 'Erro', 'fas fa-exclamation-circle', 'bg-danger');

File: templates/process/tabs/_tab_skills.html.twig
Match lines: 6
404|        // Feedback messages now use showToast (global toastr-based function)
522|                            showToast(response.message || 'Skill salva com sucesso.', 'Sucesso', 'fas fa-check-circle', 'bg-success');
525|                            showToast(message, 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
529|                        showToast(getErrorMessage(xhr, 'Não foi possível salvar a skill.'), 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
571|                    showToast(message, 'Sucesso', 'fas fa-check-circle', 'bg-success');
574|                    showToast(getErrorMessage(xhr, 'Não foi possível excluir a skill.'), 'Erro', 'fas fa-exclamation-circle', 'bg-danger');

File: templates/process_department/components/_professional_area_form_modal.html.twig
Match lines: 5
560|        showToast(
616|                showToast(
683|                        showToast(
692|                    showToast(
715|                    showToast(

File: templates/process_department/index.html.twig
Match lines: 6
1062|                    showToast(
1070|                    showToast(
1116|                                showToast(
1131|                            showToast(
1146|                            showToast(message, 'Erro!', 'fas fa-exclamation-triangle', 'bg-danger');
1176|                showToast(message, 'Erro!', 'fas fa-exclamation-triangle', 'bg-danger');

File: templates/process_requeriments/index.html.twig
Match lines: 10
675|                showToast("Erro", "Nenhuma skill selecionada para exclusão.", "bg-danger");
693|                    showToast(response.message, "Sucesso",  "bg-success");
697|                    showToast(errorMessage,"Erro", "bg-danger");
719|                showToast("Erro", "Nenhum conjunto selecionado para exclusão.", "bg-danger");
737|                    showToast(response.message, "Sucesso",  "bg-success");
743|                    showToast(errorMessage, "Erro","bg-danger");
770|                    showToast("Sucesso", "Requisito salvo com sucesso!", "bg-success");
780|                    showToast("Erro", errorMessage, "bg-danger");
805|                    showToast("Sucesso", "Conjunto salvo com sucesso!", "bg-success");
814|                    showToast("Erro", errorMessage, "bg-danger");

File: templates/professional_assessment/manage.html.twig
Match lines: 1
1762|            showToast(

File: templates/professional_project/components/cronograma_view.html.twig
Match lines: 2
1291|        showToast('ID da tarefa não encontrado.', 'Erro', 'fas fa-times', 'bg-danger');
1314|        showToast('Erro ao carregar dados da tarefa: ' + err.message, 'Erro', 'fas fa-times', 'bg-danger');

File: templates/professional_project/components/lista_steps.html.twig
Match lines: 1
874|        showToast('Erro ao carregar dados da tarefa: ' + error.message, 'Erro', 'fas fa-times', 'bg-danger');

File: templates/professional_project/components/painel_geral_project.html.twig
Match lines: 1
471|            showToast('Erro ao carregar dados da tarefa: ' + error.message, 'Erro', 'fas fa-times', 'bg-danger');

File: templates/professional_project/components/projects_home.html.twig
Match lines: 9
564|                showToast(response.message || 'Registro removido com sucesso.', 'Sucesso', 'fas fa-check', 'bg-success');
568|                showToast(response.message || 'Houve um erro. Tente novamente!', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
574|            showToast('Houve um erro. Tente novamente!', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
969|            showToast(`Etapa "${stepName}" criada com sucesso!`, 'Sucesso', 'fas fa-check', 'bg-success');
980|            showToast('Erro ao criar a etapa!', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
2093|        showToast('Tarefa salva com sucesso.', 'Sucesso', 'fas fa-check-circle', 'bg-success');
2099|        showToast("Erro ao salvar tarefa: " + error.message, 'Erro', 'fas fa-times', 'bg-danger');
3132|        showToast('Tarefa finalizada com sucesso.', 'Sucesso', 'fas fa-check-circle', 'bg-success');
3144|        showToast(`Erro ao concluir a tarefa: ${error.message}`, 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');

File: templates/professional_project/components/task_board.html.twig
Match lines: 5
1500|            showToast(`Não foi possível encontrar a coluna de destino para atualizar ${label}.`, 'Erro', 'fas fa-times', 'bg-danger');
1540|        showToast(`${label.charAt(0).toUpperCase() + label.slice(1)} atualizado com sucesso.`, 'Sucesso', 'fas fa-check-circle', 'bg-success');
1544|        showToast(error.message || `Erro ao atualizar ${label}.`, 'Erro', 'fas fa-times', 'bg-danger');
2386|        showToast('ID da tarefa não encontrado.', 'Erro', 'fas fa-times', 'bg-danger');
2410|        showToast('Erro ao carregar dados da tarefa: ' + error.message, 'Erro', 'fas fa-times', 'bg-danger');

File: templates/professional_project/components/task_board_priority.html.twig
Match lines: 2
244|        showToast('ID da tarefa não encontrado.', 'Erro', 'fas fa-times', 'bg-danger');
266|        showToast('Erro ao carregar dados da tarefa: ' + error.message, 'Erro', 'fas fa-times', 'bg-danger');

File: templates/projects2.0/components/automation_view.html.twig
Match lines: 2
444|        showToast("Automação copiada com sucesso!", "Sucesso!", "fa-check-circle", "bg-success");
449|        showToast("Falha ao copiar a automação.", "Erro!", "fa-times-circle", "bg-danger");

File: templates/projects2.0/components/configuracoes_view.html.twig
Match lines: 4
212|            if (typeof showToast === 'function') {
213|                showToast(response.message || 'Configurações salvas com sucesso', 'Sucesso', 'fas fa-check', 'bg-success');
221|            if (typeof showToast === 'function') {
222|                showToast(message, 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');

File: templates/projects2.0/components/cronograma_view.html.twig
Match lines: 2
1300|        showToast('ID da tarefa não encontrado.', 'Erro', 'fas fa-times', 'bg-danger');
1323|        showToast('Erro ao carregar dados da tarefa: ' + err.message, 'Erro', 'fas fa-times', 'bg-danger');

File: templates/projects2.0/components/lista_steps.html.twig
Match lines: 3
1069|        showToast('Erro ao carregar dados da tarefa: ' + error.message, 'Erro', 'fas fa-times', 'bg-danger');
1406|            if (typeof showToast === 'function') {
1407|                showToast(message, 'Erro', 'fas fa-times', 'bg-danger');

File: templates/projects2.0/components/modal_share_project.html.twig
Match lines: 3
122|            showToast("Nenhum membro foi selecionado.", "Atenção", "fas fa-exclamation-triangle", "bg-warning");
144|            showToast(data.message || "Erro ao salvar os membros.", "Erro", "fas fa-times", "bg-danger");
148|            showToast("Erro ao salvar os membros. Tente novamente.", "Erro", "fas fa-times", "bg-danger");

File: templates/projects2.0/components/off_canvas_task.html.twig
Match lines: 7
5040|                showToast("Link da tarefa não encontrado.", "Erro", "fas fa-times", "bg-danger");
5047|                showToast("Link copiado com sucesso!", "Sucesso", "fas fa-link", "bg-success");
5051|                showToast("Não foi possível copiar o link.", "Erro", "fas fa-exclamation-triangle", "bg-danger");
5083|                            showToast("Solicitação de ajuda efetuada com sucesso!", "Sucesso", "fas fa-check-circle", "bg-success");
5086|                            showToast("Solicitação de ajuda cancelada.", "Atenção", "fas fa-exclamation-triangle", "bg-warning");
5089|                        showToast("Houve um erro. Tente novamente!", "Erro", "fas fa-times", "bg-danger");
5094|                    showToast("Houve um erro. Tente novamente!", "Erro", "fas fa-times", "bg-danger");

File: templates/projects2.0/components/painel_geral_project.html.twig
Match lines: 1
799|                showToast('Erro ao carregar dados da tarefa: ' + error.message, 'Erro', 'fas fa-times', 'bg-danger');

File: templates/projects2.0/components/projects_home.html.twig
Match lines: 19
1117|        showToast('Link copiado com sucesso!', 'Sucesso', 'fas fa-link', 'bg-success');
1119|        showToast('Não foi possível copiar o link.', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
1339|                showToast(response.message || 'Registro removido com sucesso.', 'Sucesso', 'fas fa-check', 'bg-success');
1343|                showToast(response.message || 'Houve um erro. Tente novamente!', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
1349|            showToast('Houve um erro. Tente novamente!', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
1758|            showToast(`Etapa "${stepName}" criada com sucesso!`, 'Sucesso', 'fas fa-check', 'bg-success');
1769|            showToast('Erro ao criar a etapa!', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
1784|        showToast('Erro ao criar a etapa!', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
3125|        if (typeof showToast === 'function') {
3126|            showToast('{{ taskType }} salva com sucesso.', 'Sucesso', 'fas fa-check-circle', 'bg-success');
3133|        if (typeof showToast === 'function') {
3134|            showToast("Erro ao salvar tarefa: " + error.message, 'Erro', 'fas fa-times', 'bg-danger');
3875|        if (typeof showToast === 'function') {
3876|            showToast(error.message, 'Erro', 'fas fa-times', 'bg-danger');
4353|        showToast('{{ taskType }} finalizada com sucesso.', 'Sucesso', 'fas fa-check-circle', 'bg-success');
4365|        showToast(`Erro ao concluir a tarefa: ${error.message}`, 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
4544|            showToast('Tarefa destacada com sucesso!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
4546|            showToast('Destaque removido!', 'Informação', 'fas fa-info-circle', 'bg-info');
4552|        showToast('Erro ao salvar destaque da tarefa.', 'Erro', 'fas fa-times', 'bg-danger');

File: templates/projects2.0/components/task_board.html.twig
Match lines: 7
1849|            showToast(`Não foi possível encontrar a coluna de destino para atualizar ${label}.`, 'Erro', 'fas fa-times', 'bg-danger');
1889|        showToast(`${label.charAt(0).toUpperCase() + label.slice(1)} atualizado com sucesso.`, 'Sucesso', 'fas fa-check-circle', 'bg-success');
1893|        showToast(error.message || `Erro ao atualizar ${label}.`, 'Erro', 'fas fa-times', 'bg-danger');
2747|        showToast('ID da tarefa não encontrado.', 'Erro', 'fas fa-times', 'bg-danger');
2771|        showToast('Erro ao carregar dados da tarefa: ' + error.message, 'Erro', 'fas fa-times', 'bg-danger');
3437|                if (typeof showToast === 'function') {
3438|                    showToast(message, 'Erro', 'fas fa-times', 'bg-danger');

File: templates/projects2.0/components/task_board_priority.html.twig
Match lines: 2
267|        showToast('ID da tarefa não encontrado.', 'Erro', 'fas fa-times', 'bg-danger');
289|        showToast('Erro ao carregar dados da tarefa: ' + error.message, 'Erro', 'fas fa-times', 'bg-danger');

File: templates/receivables/index.html.twig
Match lines: 8
5035|showToast('success', response.message || 'Status atualizado!');
5039|showToast('error', response.message || 'Erro');
5043|showToast('error', 'Erro ao atualizar');
7784|showToast('warning', btn.attr('title') || 'Sem permissão para salvar este lançamento.');
7982|showToast('success', response.message || 'Salvo!');
7986|showToast('error', response.message || 'Erro');
7996|showToast('error', msg);
8914|function showToast(type, message) {

File: templates/recruitment/qualified_professionals/index.html.twig
Match lines: 2
189|                    showToast(response.message || 'Erro ao excluir busca.', 'error');
193|                showToast('Erro ao excluir busca. Tente novamente.', 'error');

File: templates/recruitment/qualified_professionals/partials/_modal_add_to_trm.html.twig
Match lines: 6
390|                showToast('Endpoint de validacao de senha nao configurado.', 'Erro!', 'fas fa-exclamation-circle', 'bg-danger');
407|                            showToast(response.message || 'Senha incorreta.', 'Erro!', 'fas fa-exclamation-circle', 'bg-danger');
412|                            showToast('Endpoint de adição ao TRM não configurado.', 'Erro!', 'fas fa-exclamation-circle', 'bg-danger');
423|                                    showToast(addResponse.message || 'Erro ao adicionar profissionais.', 'Erro!', 'fas fa-exclamation-circle', 'bg-danger');
429|                                showToast('Erro ao adicionar profissionais ao TRM. Tente novamente.', 'error');
434|                    showToast('Erro ao verificar senha. Tente novamente.', 'error');

File: templates/recruitment/qualified_professionals/partials/_modal_advanced_search.html.twig
Match lines: 5
251|function showToast(message, type) {
361|            showToast('Endpoint de criacao da busca nao configurado.', 'error');
371|            showToast('Selecione pelo menos um critério de busca com filtro e valor preenchidos.', 'error');
393|                    showToast(response.message || 'Erro ao criar busca.', 'error');
397|                showToast((xhr.responseJSON && xhr.responseJSON.message) || 'Erro ao processar busca.', 'error');

File: templates/servicePackages/index.html.twig
Match lines: 6
397|                        showToast('Erro ao alterar visibilidade do pacote.', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
403|                    showToast(
411|                    showToast('Erro ao alterar visibilidade do pacote.', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
451|                        showToast(
458|                        showToast(
472|                    showToast(

File: templates/servicePackages/modals/_modal_new_package.html.twig
Match lines: 4
659|                        showToast(response.message || 'Erro ao salvar o pacote.', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
669|                    showToast(response.message || 'Pacote salvo com sucesso!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
672|                    showToast('Erro ao salvar o pacote: comunicação com o servidor falhou.', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
705|                    showToast('Erro ao carregar os dados do pacote.', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');

File: templates/sets_evaluation/new_group_evaluations.html.twig
Match lines: 2
623|            if (typeof showToast === 'function') {
624|                showToast('Selecione pelo menos uma avaliação.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');

File: templates/ssma/action_plan/tabs/_tab_action_plan.html.twig
Match lines: 18
1161|                                showToast(
1174|                            showToast(response.message || 'Ação removida com sucesso.', 'Sucesso', 'fas fa-check-circle', 'bg-success');
1176|                            showToast('Não foi possível remover a ação.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
1193|                            showToast(response.message || 'Erro ao reabrir ação.', 'Erro', 'fas fa-times', 'bg-danger');
1222|                        showToast(response.message || 'Ação reaberta com sucesso.', 'Sucesso', 'fas fa-undo', 'bg-success');
1225|                        showToast('Erro ao reabrir ação.', 'Erro', 'fas fa-times', 'bg-danger');
1236|                    showToast('URL do projeto não encontrada. Tente recarregar a página.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
1259|                showToast(
1309|                        showToast('Não foi possível carregar os planos de ação.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
1334|                    showToast('Não foi possível carregar os planos de ação.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
1342|                showToast('Selecione um plano de ação antes de vincular.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
1361|            showToast(
1376|                    showToast(response.message || 'Ação vinculada com sucesso.', 'Sucesso', 'fas fa-check-circle', 'bg-success');
1388|                    showToast(msg, 'Erro', 'fas fa-times', 'bg-danger');
2234|            if (typeof showToast === 'function') {
2235|                showToast('Não foi possível abrir a impressão do relatório.', 'Erro', 'fas fa-times', 'bg-danger');
2260|                if (typeof showToast === 'function') {
2261|                    showToast('Não foi possível abrir a impressão do relatório.', 'Erro', 'fas fa-times', 'bg-danger');

File: templates/ssma/cause_tree/tabs/_tab_cause_trees.html.twig
Match lines: 2
490|        if (typeof window.showToast === 'function') {
491|            window.showToast(

File: templates/ssma/cause_tree/tabs/_tab_config.html.twig
Match lines: 2
64|        if (typeof window.showToast === 'function') {
65|            window.showToast(message, ok ? 'Sucesso' : 'Erro', ok ? 'fas fa-check' : 'fas fa-times', ok ? 'bg-success' : 'bg-danger');

File: templates/ssma/cause_tree/tree_view/index.html.twig
Match lines: 2
580|        if (typeof showToast === 'function') {
582|            showToast(

File: templates/ssma/cause_tree/tree_view/tabs/_tab_action_plan.html.twig
Match lines: 24
709|                    if (typeof showToast === 'function') {
710|                        showToast('Selecione ao menos uma ação completa para criar plano.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
795|                            if (typeof showToast === 'function') {
796|                                showToast((response && response.message) || 'A ação foi criada, mas não foi possível marcar a linha como aplicada.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
804|                        if (typeof showToast === 'function') {
805|                            showToast('A ação foi criada, mas não foi possível marcar a linha como aplicada.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
900|                            if (typeof showToast === 'function') {
901|                                showToast((response && response.message) || 'Não foi possível adicionar a ação.', 'Erro', 'fas fa-times', 'bg-danger');
911|                        if (typeof showToast === 'function') {
912|                            showToast(response.message || 'Ação adicionada.', 'Sucesso', 'fas fa-check', 'bg-success');
923|                        if (typeof showToast === 'function') {
924|                            showToast(message, 'Erro', 'fas fa-times', 'bg-danger');
961|                            if (typeof showToast === 'function') {
962|                                showToast((response && response.message) || 'Não foi possível remover a ação.', 'Erro', 'fas fa-times', 'bg-danger');
978|                        if (typeof showToast === 'function') {
979|                            showToast(response.message || 'Ação removida.', 'Sucesso', 'fas fa-check', 'bg-success');
990|                        if (typeof showToast === 'function') {
991|                            showToast(message, 'Erro', 'fas fa-times', 'bg-danger');
1234|                                if (typeof showToast === 'function') {
1235|                                    showToast('Execução e validação devem ser pessoas diferentes.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
1252|                                    if (typeof showToast === 'function') {
1253|                                        showToast((response && response.message) || 'Não foi possível salvar o plano de ação.', 'Erro', 'fas fa-times', 'bg-danger');
1267|                                if (typeof showToast === 'function') {
1268|                                    showToast(message, 'Erro', 'fas fa-times', 'bg-danger');

File: templates/ssma/occurrence/deep_dive_group.html.twig
Match lines: 6
476|            if (typeof showToast === 'function') {
477|                showToast('Não foi possível abrir o modal de membros. Atualize a página.', 'Erro', 'fas fa-times', 'bg-danger');
633|                    if (typeof showToast === 'function') {
634|                        showToast(msg, 'Erro', 'fas fa-times', 'bg-danger');
649|                if (typeof showToast === 'function') {
650|                    showToast(msg, 'Erro', 'fas fa-times', 'bg-danger');

File: templates/ssma/occurrence/occurrence_view.html.twig
Match lines: 36
1526|        if (typeof showToast === 'function') {
1527|            showToast('Não foi possível abrir o aprofundamento. Atualize a página.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
2289|                    showToast('Ação removida com sucesso.', 'Sucesso', 'fas fa-check-circle', 'bg-success');
2292|                                showToast(response.message || 'Erro ao deletar ação.', 'Erro', 'fas fa-times', 'bg-danger');
2297|                            showToast('Erro ao comunicar com o servidor.', 'Erro', 'fas fa-times', 'bg-danger');
2361|                        showToast('Ação reaberta com sucesso.', 'Sucesso', 'fas fa-check-circle', 'bg-success');
2363|                        showToast(response.message || 'Erro ao reabrir ação.', 'Erro', 'fas fa-times', 'bg-danger');
2367|                    showToast('Erro ao comunicar com o servidor.', 'Erro', 'fas fa-times', 'bg-danger');
2379|                showToast('URL do projeto não encontrada. Tente recarregar a página.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
2384|        showToast('Esta integração será conectada ao back-end em uma próxima etapa.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
2422|                    showToast('Não foi possível carregar os planos de ação.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
2447|                showToast('Não foi possível carregar os planos de ação.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
2455|            showToast('Selecione um plano de ação antes de vincular.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
2474|                    showToast(
2503|                showToast(response.message || 'Ação vinculada com sucesso.', 'Sucesso', 'fas fa-check-circle', 'bg-success');
2515|                showToast(msg, 'Erro', 'fas fa-times', 'bg-danger');
2696|                    showToast('Arquivo "' + escapeHtml(file.name) + '" excede ' + MAX_MB + 'MB.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
2716|                            showToast((res && res.message) ? res.message : 'Falha ao enviar evidência.', 'Erro', 'fas fa-times', 'bg-danger');
2734|                                    showToast('Evidência enviada mas não foi possível salvar no registro.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
2761|                        showToast(serverMsg || 'Erro de comunicação ao enviar evidência.', 'Erro', 'fas fa-times', 'bg-danger');
3200|                        if (typeof showToast === 'function') {
3201|                            showToast(data.message || 'Ocorrência finalizada.', 'Sucesso', 'fas fa-check', 'bg-success');
3206|                    if (typeof showToast === 'function') {
3207|                        showToast(data.message || 'Não foi possível finalizar.', 'Erro', 'fas fa-times', 'bg-danger');
3215|                    if (typeof showToast === 'function') {
3216|                        showToast('Não foi possível finalizar.', 'Erro', 'fas fa-times', 'bg-danger');
3256|                if (typeof showToast === 'function') {
3257|                    showToast('A ocorrência está em readequação. Corrija e reenvie antes de validar de novo.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
3275|                if (typeof showToast === 'function') {
3276|                    showToast('Informe a observação para reprovar a ocorrência.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
3307|                        if (typeof showToast === 'function') {
3308|                            showToast(data.message || 'Ocorrência atualizada.', 'Sucesso', 'fas fa-check', 'bg-success');
3321|                    if (typeof showToast === 'function') {
3322|                        showToast(data.message || 'Não foi possível validar.', 'Erro', 'fas fa-times', 'bg-danger');
3330|                    if (typeof showToast === 'function') {
3331|                        showToast('Não foi possível validar.', 'Erro', 'fas fa-times', 'bg-danger');

File: templates/ssma/occurrence/partials/_modal_event.html.twig
Match lines: 36
3852|                if (typeof showToast === 'function') {
3853|                    showToast(
4467|        if (!flashApproval || typeof showToast !== 'function') {
4474|            showToast(
4598|            showToast: (typeof showToast === 'function') ? showToast : null,
4656|            showToast: (typeof showToast === 'function') ? showToast : null,
4729|                    if (typeof showToast === 'function') {
4730|                        showToast('Escreva uma sugestão antes de melhorar com IA.', 'Atenção', 'fas fa-info-circle', 'bg-warning');
4748|                    } else if (typeof showToast === 'function') {
4749|                        showToast((data && data.message) || 'Não foi possível melhorar o texto.', 'Erro', 'fas fa-times', 'bg-danger');
4753|                    if (typeof showToast === 'function') {
4754|                        showToast('Erro de comunicação com a IA.', 'Erro', 'fas fa-times', 'bg-danger');
6472|                    if (typeof showToast === 'function') {
6473|                        showToast(
7127|            if (typeof showToast === 'function') {
7128|                showToast('Aprofundamento finalizado. Somente um administrador ou gestor administrador pode alterar.', 'Atenção', 'fas fa-lock', 'bg-warning');
7273|            if (dtFutureOrInvalid && typeof showToast === 'function') {
7274|                showToast('A data do evento não pode ser um dia futuro. Informe a data de hoje ou anterior.', 'Data inválida', 'fas fa-exclamation-triangle', 'bg-warning');
7275|            } else if (!window.__ssmaEvSkipGenericValidationToast && typeof showToast === 'function') {
7276|                showToast('Revise os campos destacados antes de registrar.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
7653|                if (typeof showToast === 'function') {
7654|                    showToast(waitMsg, 'Evidência', 'fas fa-hourglass-half', 'bg-warning');
7787|                if (typeof showToast === 'function') {
7788|                    showToast(errText, 'Erro', 'fas fa-times', 'bg-danger');
7799|                if (typeof showToast === 'function') {
7800|                    showToast(failMsg, 'Erro', 'fas fa-times', 'bg-danger');
7845|                if (typeof showToast === 'function') {
7846|                    showToast(okMsg, 'Sucesso', 'fas fa-check', 'bg-success');
7869|            if (typeof showToast === 'function') {
7870|                showToast(msg, 'Erro', 'fas fa-times', 'bg-danger');
8024|                        if (n > 0 && typeof showToast === 'function') {
8025|                            showToast(
8097|            if (typeof showToast === 'function') {
8098|                showToast('Sem permissão para registrar ocorrências nesta conta.', 'Acesso', 'fas fa-lock', 'bg-warning');
8111|        } else if (typeof showToast === 'function') {
8112|            showToast('Não foi possível abrir o formulário de ocorrência. Atualize a página.', 'Erro', 'fas fa-times', 'bg-danger');

File: templates/ssma/occurrence/partials/_modal_occurrence.html.twig
Match lines: 6
349|                    showToast('Arquivo "' + file.name + '" excede 10MB.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
366|                            showToast((res && res.message) ? res.message : 'Falha ao enviar evidência.', 'Erro', 'fas fa-times', 'bg-danger');
375|                        showToast(serverMsg || 'Erro ao enviar evidência. Tente novamente.', 'Erro', 'fas fa-times', 'bg-danger');
676|                        showToast(response.message || 'Ocorrência registrada com sucesso.', 'Sucesso', 'fas fa-check', 'bg-success');
681|                        showToast(response.message || 'Erro ao registrar ocorrência.', 'Erro', 'fas fa-times', 'bg-danger');
687|                    showToast('Erro ao comunicar com o servidor. Tente novamente.', 'Erro', 'fas fa-times', 'bg-danger');

File: templates/ssma/occurrence/partials/_tab_occurrence_type_permissions.html.twig
Match lines: 8
595|        if (typeof showToast === 'function') {
596|            showToast(message, 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
869|                if (!opts.silent && typeof showToast === 'function') {
870|                    showToast(msg, 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
878|            if (!opts.silent && typeof showToast === 'function') {
879|                showToast('Falha de rede ao salvar permissões por tipo.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
943|            if (typeof showToast === 'function') {
944|                showToast(data.message || 'Permissões atualizadas.', 'Sucesso', 'fas fa-check', 'bg-success');

File: templates/ssma/occurrence/tabs/_tab_config.html.twig
Match lines: 10
1180|        if (typeof showToast === 'function') {
1181|            showToast(message, 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
1638|                        if (typeof showToast === 'function') {
1639|                            showToast((res && res.message) || 'Erro ao salvar aprovadores.', 'Erro', 'fas fa-times', 'bg-danger');
1643|                    if (typeof showToast === 'function' && res.message) {
1645|                        showToast(
1655|                    if (typeof showToast === 'function') {
1656|                        showToast('Erro ao salvar aprovadores de ocorrência.', 'Erro', 'fas fa-times', 'bg-danger');
1677|                if (typeof showToast === 'function') {
1678|                    showToast('Seletor de membros indisponível. Recarregue a página.', 'Erro', 'fas fa-times', 'bg-danger');

File: templates/ssma/occurrence/tabs/_tab_dashboard.html.twig
Match lines: 12
1381|                if (typeof showToast === 'function') {
1382|                    showToast(msg, 'Erro', 'fas fa-times', 'bg-danger');
1390|            if (typeof showToast === 'function') {
1391|                showToast(res.message || 'Horas salvas.', 'Sucesso', 'fas fa-check', 'bg-success');
1404|            if (typeof showToast === 'function') {
1405|                showToast(msg, 'Erro', 'fas fa-times', 'bg-danger');
1641|                if (typeof showToast === 'function') {
1642|                    showToast('Não foi possível atualizar o painel. Tente novamente.', 'Erro', 'fas fa-times', 'bg-danger');
1862|            if (typeof showToast === 'function') {
1863|                showToast('Não foi possível abrir a impressão do relatório.', 'Erro', 'fas fa-times', 'bg-danger');
1888|                if (typeof showToast === 'function') {
1889|                    showToast('Não foi possível abrir a impressão do relatório.', 'Erro', 'fas fa-times', 'bg-danger');

File: templates/ssma/occurrence/tabs/_tab_occurrence_panel.html.twig
Match lines: 2
399|                if (typeof showToast === 'function') {
400|                    showToast('Não foi possível atualizar o painel. Tente novamente.', 'Erro', 'fas fa-times', 'bg-danger');

File: templates/ssma/occurrence/tabs/_tab_occurrences.html.twig
Match lines: 15
1823|                    if (resp && resp.success === false && typeof showToast === 'function') {
1824|                        showToast('Não foi possível carregar mais ocorrências.', 'Ocorrências', 'fas fa-exclamation-triangle', 'bg-warning');
1850|                if (typeof showToast === 'function') {
1851|                    showToast('Não foi possível carregar mais ocorrências.', 'Ocorrências', 'fas fa-exclamation-triangle', 'bg-warning');
2095|                            showToast('Ocorrência deletada com sucesso.', 'Sucesso', 'fas fa-check', 'bg-success');
2098|                            showToast(response.message || 'Erro ao deletar ocorrência.', 'Erro', 'fas fa-times', 'bg-danger');
2103|                        showToast('Erro ao comunicar com o servidor.', 'Erro', 'fas fa-times', 'bg-danger');
2137|                            showToast('Evento deletado com sucesso.', 'Sucesso', 'fas fa-check', 'bg-success');
2140|                            showToast(response.message || 'Erro ao deletar evento.', 'Erro', 'fas fa-times', 'bg-danger');
2145|                        showToast('Erro ao comunicar com o servidor.', 'Erro', 'fas fa-times', 'bg-danger');
2889|                    showToast('A ocorrência foi marcada como finalizada com sucesso.', 'Sucesso', 'fas fa-check', 'bg-success');
2891|                    showToast(response.message || 'Erro ao finalizar ocorrência.', 'Erro', 'fas fa-times', 'bg-danger');
2896|                showToast('Erro ao comunicar com o servidor.', 'Erro', 'fas fa-times', 'bg-danger');
3068|        if (typeof showToast === 'function') {
3069|            showToast(message, title, icon, bg);

File: templates/ssma/occurrence/tabs/panel/_panel_comparativo_filiais_scripts.html.twig
Match lines: 4
160|                if (typeof showToast === 'function') {
161|                    showToast('Não foi possível carregar o comparativo. Tente novamente.', 'Erro', 'fas fa-times', 'bg-danger');
194|            if (typeof showToast === 'function') {
195|                showToast('Não foi possível carregar o comparativo. Tente novamente.', 'Erro', 'fas fa-times', 'bg-danger');

File: templates/ssma/partials/_modal_action.html.twig
Match lines: 7
2458|            if (typeof showToast === 'function') {
2459|                showToast('Não foi possível identificar o desvio/inspeção.', 'Erro', 'fas fa-times', 'bg-danger');
2530|                    showToast((response && response.message) || 'Erro ao aplicar plano de ação.', 'Erro', 'fas fa-times', 'bg-danger');
2534|                showToast(response.message || 'Ações aplicadas com sucesso.', 'Sucesso', 'fas fa-check', 'bg-success');
2541|                showToast(message, 'Erro', 'fas fa-times', 'bg-danger');
2607|            showToast(msg, 'Sucesso', 'fas fa-check', 'bg-success');
2623|            showToast(message, 'Erro', 'fas fa-times', 'bg-danger');

File: templates/ssma/partials/_modal_action_resolution.html.twig
Match lines: 11
547|                if (typeof showToast === 'function') {
548|                    showToast(
582|            if (typeof showToast === 'function') {
583|                showToast('Ação inválida. Recarregue a página e tente novamente.', 'Erro', 'fas fa-times', 'bg-danger');
618|                        if (typeof showToast === 'function') {
619|                            showToast(
635|                        if (typeof showToast === 'function') {
636|                            showToast(msg, 'Erro', 'fas fa-times', 'bg-danger');
644|                    if (typeof showToast === 'function') showToast(msg, 'Erro', 'fas fa-times', 'bg-danger');
667|                        if (typeof showToast === 'function') showToast('Falha ao enviar imagem de evidência.', 'Erro', 'fas fa-times', 'bg-danger');
672|                    if (typeof showToast === 'function') showToast('Erro ao enviar imagem.', 'Erro', 'fas fa-times', 'bg-danger');

File: templates/ssma/partials/_modal_action_validation.html.twig
Match lines: 4
228|                    if (typeof showToast === 'function') {
229|                        showToast(response.message || 'Validação registrada.', 'Sucesso', 'fas fa-check', 'bg-success');
233|                    if (typeof showToast === 'function') showToast(msg, 'Erro', 'fas fa-times', 'bg-danger');
241|                if (typeof showToast === 'function') showToast(msg, 'Erro', 'fas fa-times', 'bg-danger');

File: templates/ssma/partials/_shared_module_assets.html.twig
Match lines: 7
1398|                if (item.options.showToast) {
1399|                    item.options.showToast(errMsg, 'Erro', 'fas fa-times', 'bg-danger');
1415|                if (item.options.showToast) {
1416|                    item.options.showToast(msg, 'Erro', 'fas fa-times', 'bg-danger');
1431|            showToast: typeof showToast === 'function' ? showToast : null
1442|            if (options.showToast) {
1443|                options.showToast(sizeMsg, 'Atenção', 'fas fa-info-circle', 'bg-warning');

File: templates/ssma/prevention/approach/index.html.twig
Match lines: 17
832|            if (typeof showToast === 'function') {
833|                showToast('Descreva como foi feito o coaching.', 'Atenção', 'fas fa-info-circle', 'bg-warning');
854|                    if (typeof showToast === 'function') {
855|                        showToast((res && res.message) || 'Não foi possível salvar o coaching.', 'Erro', 'fas fa-times', 'bg-danger');
861|                if (typeof showToast === 'function') {
862|                    showToast('Não foi possível salvar o coaching.', 'Erro', 'fas fa-times', 'bg-danger');
875|                if (typeof showToast === 'function') {
876|                    showToast('Erro ao enviar arquivo de evidência.', 'Erro', 'fas fa-times', 'bg-danger');
1160|        showToast(
1195|                                showToast('Ação removida com sucesso.', 'Sucesso', 'fas fa-check-circle', 'bg-success');
1198|                                showToast(resp.message || 'Erro ao deletar.', 'Erro', 'fas fa-times', 'bg-danger');
1203|                            showToast('Erro ao comunicar com o servidor.', 'Erro', 'fas fa-times', 'bg-danger');
1229|                        showToast('Ação reaberta.', 'Sucesso', 'fas fa-check-circle', 'bg-success');
1231|                        showToast(resp.message || 'Erro.', 'Erro', 'fas fa-times', 'bg-danger');
1235|                    showToast('Erro ao comunicar com o servidor.', 'Erro', 'fas fa-times', 'bg-danger');
1245|                showToast('URL do projeto não encontrada.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
1249|        showToast('Esta integração será conectada em breve.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');

File: templates/ssma/prevention/inspection/index.html.twig
Match lines: 9
903|        showToast(payload.operation === 'resolve' ? 'Ação finalizada com sucesso.' : 'Ação reavaliada com sucesso.',
932|                                showToast('Ação removida com sucesso.', 'Sucesso', 'fas fa-check-circle', 'bg-success');
935|                                showToast(resp.message || 'Erro ao deletar.', 'Erro', 'fas fa-times', 'bg-danger');
940|                            showToast('Erro ao comunicar com o servidor.', 'Erro', 'fas fa-times', 'bg-danger');
964|                    if (resp.success) { updateActionCard(actionId, { solved: false }); showToast('Ação reaberta.', 'Sucesso', 'fas fa-check-circle', 'bg-success'); }
965|                    else { showToast(resp.message || 'Erro.', 'Erro', 'fas fa-times', 'bg-danger'); }
967|                error: function () { showToast('Erro ao comunicar com o servidor.', 'Erro', 'fas fa-times', 'bg-danger'); }
974|            else showToast('URL do projeto não encontrada.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
977|        showToast('Esta integração será conectada em breve.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');

File: templates/ssma/prevention/modals/_modal_approach.html.twig
Match lines: 15
2462|            showToast('Erro ao carregar questionários. Tente novamente.', 'Erro', 'fas fa-times', 'bg-danger');
3137|                if (typeof showToast === 'function') {
3138|                    showToast('O coach não pode ser o mesmo membro selecionado como observador.', 'Atenção', 'fas fa-info-circle', 'bg-warning');
3163|            showToast('Responda todas as perguntas do formulário.', 'Formulário', 'fas fa-exclamation-circle', 'bg-warning');
3207|            showToast(msg, 'Aprofundamento incompleto', 'fas fa-exclamation-circle', 'bg-warning');
3297|            showToast('Informe se houve reconhecimento de comportamento seguro.', 'Observações', 'fas fa-exclamation-circle', 'bg-warning');
3328|        showToast(body, 'Sucesso', 'fas fa-check', 'bg-success');
3342|            showToast('Data da abordagem não pode ser futura.', 'Atenção', 'fas fa-info-circle', 'bg-warning');
3346|            showToast(
3401|                    showToast((d && d.message) || 'Erro ao salvar.','Erro','fas fa-times','bg-danger');
3408|                showToast(msg2,'Erro','fas fa-times','bg-danger');
3536|                showToast('Erro ao carregar abordagem.','Erro','fas fa-times','bg-danger');
3623|            showToast('Erro ao carregar abordagem.','Erro','fas fa-times','bg-danger');
4257|            if (typeof showToast === 'function') {
4258|                showToast(message, 'Erro', 'fas fa-times', 'bg-danger');

File: templates/ssma/prevention/modals/_modal_approach_form.html.twig
Match lines: 1
232|        showToast(message, 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');

File: templates/ssma/prevention/modals/_modal_approach_view.html.twig
Match lines: 12
860|            if (typeof showToast === 'function') {
861|                showToast('Descreva como foi feito o coaching.', 'Atenção', 'fas fa-info-circle', 'bg-warning');
882|                    if (typeof showToast === 'function') {
883|                        showToast((res && res.message) || 'Não foi possível salvar o coaching.', 'Erro', 'fas fa-times', 'bg-danger');
888|                if (typeof showToast === 'function') {
889|                    showToast('Coaching salvo com sucesso.', 'Sucesso', 'fas fa-check', 'bg-success');
893|                if (typeof showToast === 'function') {
894|                    showToast('Não foi possível salvar o coaching.', 'Erro', 'fas fa-times', 'bg-danger');
907|                if (typeof showToast === 'function') {
908|                    showToast('Erro ao enviar arquivo de evidência.', 'Erro', 'fas fa-times', 'bg-danger');
959|                    showToast(resp.message || 'Erro ao carregar abordagem.', 'Erro', 'fas fa-times', 'bg-danger');
963|                showToast('Erro ao comunicar com o servidor.', 'Erro', 'fas fa-times', 'bg-danger');

File: templates/ssma/prevention/modals/_modal_inspection.html.twig
Match lines: 6
1832|                showToast('Aguarde o término do envio dos arquivos de evidência.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
1851|                        showToast(data.message || 'Inspeção registrada com sucesso.', 'Sucesso', 'fas fa-check', 'bg-success');
1853|                        showToast((data && data.message) || 'Erro ao registrar inspeção.', 'Erro', 'fas fa-times', 'bg-danger');
1862|                    showToast(msg, 'Erro', 'fas fa-times', 'bg-danger');
2003|                        showToast(response.message || 'Erro ao carregar inspeção.', 'Erro', 'fas fa-times', 'bg-danger');
2009|                error: function () { showToast('Erro ao carregar inspeção.', 'Erro', 'fas fa-times', 'bg-danger'); }

File: templates/ssma/prevention/modals/_modal_inspection_details.html.twig
Match lines: 2
645|                        showToast(resp.message||'Erro ao carregar inspeção.','Erro','fas fa-times','bg-danger');
652|                    showToast('Erro ao carregar inspeção.','Erro','fas fa-times','bg-danger');

File: templates/ssma/prevention/modals/_modal_prevention_global_goals.html.twig
Match lines: 18
252|                if (typeof showToast === 'function') {
253|                    showToast((res && res.message) || 'Não foi possível salvar.', 'Erro', 'fas fa-times', 'bg-danger');
257|            if (typeof showToast === 'function') {
258|                showToast('Meta do cargo salva.', 'Sucesso', 'fas fa-check', 'bg-success');
264|            if (typeof showToast === 'function') {
265|                showToast('Não foi possível salvar.', 'Erro', 'fas fa-times', 'bg-danger');
277|                if (typeof showToast === 'function') {
278|                    showToast((res && res.message) || 'Não foi possível aplicar.', 'Erro', 'fas fa-times', 'bg-danger');
283|            if (typeof showToast === 'function') {
284|                showToast('Meta aplicada a ' + n + ' membro(s) do cargo.', 'Sucesso', 'fas fa-check', 'bg-success');
291|            if (typeof showToast === 'function') {
292|                showToast('Não foi possível aplicar.', 'Erro', 'fas fa-times', 'bg-danger');
320|                if (typeof showToast === 'function') {
321|                    showToast((res && res.message) || 'Não foi possível salvar.', 'Erro', 'fas fa-times', 'bg-danger');
325|            if (typeof showToast === 'function') {
326|                showToast('Configurações de metas salvas.', 'Sucesso', 'fas fa-check', 'bg-success');
331|            if (typeof showToast === 'function') {
332|                showToast('Não foi possível salvar.', 'Erro', 'fas fa-times', 'bg-danger');

File: templates/ssma/prevention/partials/_meta_abono_section.html.twig
Match lines: 24
381|            if (typeof showToast === 'function') {
382|                showToast('Upload de evidências indisponível. Recarregue a página.', 'Erro', 'fas fa-times', 'bg-danger');
391|            showToast: typeof showToast === 'function' ? showToast : null
590|            if (typeof showToast === 'function') {
591|                showToast('Aguarde o envio das evidências antes de salvar.', 'Atenção', 'fas fa-info-circle', 'bg-warning');
597|            if (typeof showToast === 'function') showToast('Selecione o colaborador.', 'Atenção', 'fas fa-info-circle', 'bg-warning');
601|            if (typeof showToast === 'function') showToast('Preencha o período.', 'Atenção', 'fas fa-info-circle', 'bg-warning');
605|            if (typeof showToast === 'function') showToast('Preencha a justificativa.', 'Atenção', 'fas fa-info-circle', 'bg-warning');
621|                if (typeof showToast === 'function') showToast((res && res.message) || 'Falha ao salvar.', 'Erro', 'fas fa-times', 'bg-danger');
628|            if (typeof showToast === 'function') {
629|                showToast(asDraft ? 'Rascunho salvo.' : 'Solicitação enviada.', 'Sucesso', 'fas fa-check', 'bg-success');
635|            if (typeof showToast === 'function') showToast(msg, 'Erro', 'fas fa-times', 'bg-danger');
703|                if (typeof showToast === 'function') showToast((res && res.message) || 'Falha na revisão.', 'Erro', 'fas fa-times', 'bg-danger');
706|            if (typeof showToast === 'function') {
707|                showToast(status === 'approved' ? 'Revisão aprovada.' : 'Revisão recusada.', 'OK', 'fas fa-check', 'bg-success');
782|                if (typeof showToast === 'function') showToast('Solicitação enviada.', 'Sucesso', 'fas fa-check', 'bg-success');
784|            } else if (typeof showToast === 'function') {
785|                showToast((res && res.message) || 'Não foi possível enviar a solicitação.', 'Erro', 'fas fa-times', 'bg-danger');
793|            if (typeof showToast === 'function') showToast(msg, 'Erro', 'fas fa-times', 'bg-danger');
803|                if (typeof showToast === 'function') showToast('Solicitação cancelada.', 'OK', 'fas fa-check', 'bg-success');
821|                if (typeof showToast === 'function') showToast('Rascunho excluído.', 'OK', 'fas fa-check', 'bg-success');
823|            } else if (typeof showToast === 'function') {
824|                showToast((res && res.message) || 'Não foi possível excluir o rascunho.', 'Erro', 'fas fa-times', 'bg-danger');
832|            if (typeof showToast === 'function') showToast(msg, 'Erro', 'fas fa-times', 'bg-danger');

File: templates/ssma/prevention/tabs/_tab_approaches.html.twig
Match lines: 7
838|                    showToast('Abordagem duplicada como rascunho.', 'Sucesso', 'fas fa-check', 'bg-success');
841|                    showToast(resp.message || 'Erro ao duplicar.', 'Erro', 'fas fa-times', 'bg-danger');
845|                showToast('Erro ao comunicar com o servidor.', 'Erro', 'fas fa-times', 'bg-danger');
875|                            showToast('Abordagem excluída.', 'Sucesso', 'fas fa-check', 'bg-success');
878|                            showToast(resp.message || 'Erro ao excluir.', 'Erro', 'fas fa-times', 'bg-danger');
882|                        showToast('Erro ao comunicar com o servidor.', 'Erro', 'fas fa-times', 'bg-danger');
900|            showToast('Modal de ação não disponível.', 'Erro', 'fas fa-times', 'bg-danger');

File: templates/ssma/prevention/tabs/_tab_inspections.html.twig
Match lines: 8
1146|                            showToast(response.message || 'Erro ao deletar inspeção.', 'Erro', 'fas fa-times', 'bg-danger');
1155|                            showToast(successMsg, 'Sucesso', 'fas fa-check', 'bg-success');
1161|                            showToast('A exclusão demorou para responder. Tente novamente.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
1163|                            showToast('Erro ao deletar inspeção.', 'Erro', 'fas fa-times', 'bg-danger');
1184|            showToast('Confirmar não disponível.', 'Erro', 'fas fa-times', 'bg-danger');
1213|                            showToast((data && data.message) || 'Erro ao finalizar inspeção.', 'Erro', 'fas fa-times', 'bg-danger');
1219|                        showToast(data.message || 'Inspeção finalizada com sucesso.', 'Sucesso', 'fas fa-check', 'bg-success');
1232|                        showToast(msg, 'Erro', 'fas fa-times', 'bg-danger');

File: templates/ssma/prevention/tabs/_tab_prevention_config.html.twig
Match lines: 20
1276|            showToast('Erro ao salvar o formulário. Tente novamente.', 'Erro', 'fas fa-times', 'bg-danger');
1403|            showToast('Não foi possível carregar os questionários padrão.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
1755|            if (typeof showToast === 'function') {
1756|                showToast('Seletor de membros indisponível. Recarregue a página.', 'Erro', 'fas fa-times', 'bg-danger');
1862|            if (res && !res.success && typeof showToast === 'function') {
1863|                showToast((res && res.message) || 'Erro ao salvar aprovadores.', 'Erro', 'fas fa-times', 'bg-danger');
1878|            if (typeof showToast === 'function') {
1879|                showToast(msg, 'Erro', 'fas fa-times', 'bg-danger');
2001|            if (typeof showToast === 'function') {
2002|                showToast('Seletor de membros indisponível. Recarregue a página.', 'Erro', 'fas fa-times', 'bg-danger');
2058|            if (res && !res.success && typeof showToast === 'function') {
2059|                showToast((res && res.message) || 'Erro ao salvar coaches.', 'Erro', 'fas fa-times', 'bg-danger');
2063|            if (typeof showToast === 'function') {
2064|                showToast('Erro ao salvar lista de coaches.', 'Erro', 'fas fa-times', 'bg-danger');
2229|                    if (typeof showToast === 'function') {
2230|                        showToast('Tipos de inspeção atualizados.', 'Sucesso', 'fas fa-check', 'bg-success');
2232|                } else if (typeof showToast === 'function') {
2233|                    showToast((res && res.message) || 'Erro ao salvar tipos de inspeção.', 'Erro', 'fas fa-times', 'bg-danger');
2238|                if (typeof showToast === 'function') {
2239|                    showToast('Erro ao comunicar com o servidor.', 'Erro', 'fas fa-times', 'bg-danger');

File: templates/ssma/prevention/tabs/_tab_prevention_goals.html.twig
Match lines: 17
555|                    if (typeof showToast === 'function') {
556|                        showToast('Não foi possível aplicar o filtro.', 'Erro', 'fas fa-times', 'bg-danger');
564|                if (typeof showToast === 'function') {
565|                    showToast('Não foi possível aplicar o filtro.', 'Erro', 'fas fa-times', 'bg-danger');
870|            if (typeof showToast === 'function') showToast('Ligue o membro na meta antes de editar.', 'Atenção', 'fas fa-info-circle', 'bg-warning');
876|            if (typeof showToast === 'function') showToast('Membro não encontrado nesta meta.', 'Atenção', 'fas fa-info-circle', 'bg-warning');
880|            if (typeof showToast === 'function') showToast('Todos os membros já estão na lista desta meta.', 'Atenção', 'fas fa-info-circle', 'bg-warning');
934|                if (typeof showToast === 'function') showToast((res && res.message) || 'Não foi possível salvar a meta.', 'Erro', 'fas fa-times', 'bg-danger');
939|            if (typeof showToast === 'function') showToast('Não foi possível salvar a meta.', 'Erro', 'fas fa-times', 'bg-danger');
1011|                if (typeof showToast === 'function') showToast((res && res.message) || 'Não foi possível remover o membro.', 'Erro', 'fas fa-times', 'bg-danger');
1017|            if (typeof showToast === 'function') showToast('Não foi possível remover o membro.', 'Erro', 'fas fa-times', 'bg-danger');
1053|            if (typeof showToast === 'function') {
1054|                showToast('Selecione ao menos um participante.', 'Validação', 'fas fa-info-circle', 'bg-warning');
1059|            if (typeof showToast === 'function') {
1060|                showToast('Informe a meta de referência (ex.: 1).', 'Validação', 'fas fa-info-circle', 'bg-warning');
1080|                if (typeof showToast === 'function') showToast((res && res.message) || 'Não foi possível salvar a meta.', 'Erro', 'fas fa-times', 'bg-danger');
1085|            if (typeof showToast === 'function') showToast('Não foi possível salvar a meta.', 'Erro', 'fas fa-times', 'bg-danger');

File: templates/ssma/prevention/tabs/_tab_prevention_panel.html.twig
Match lines: 5
2134|                    if (resp && resp.message && typeof showToast==='function')
2135|                        showToast('Erro no painel: ' + resp.message, 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
2146|                if (resp.filter_empty&&typeof showToast==='function')
2147|                    showToast('Sem registros para este filtro.','Filtro','fas fa-info-circle','bg-info');
2153|                if(typeof showToast==='function') showToast(msg,'Erro','fas fa-times','bg-danger'); },

File: templates/ssma/refusal/partials/_modal_register.html.twig
Match lines: 3
483|            showToast: typeof showToast === 'function' ? showToast : null
698|            if (typeof showToast === 'function') {
699|                showToast(data.message || 'Salvo.', 'Sucesso', 'fas fa-check', 'bg-success');

File: templates/ssma/refusal/tabs/_tab_config.html.twig
Match lines: 4
147|            if (typeof showToast === 'function') {
148|                showToast(
158|            if (typeof showToast === 'function') {
159|                showToast('Falha ao salvar configurações.', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');

File: templates/sst_exam/components/_tab_scheduling.html.twig
Match lines: 6
1124|				showToast('Nenhuma guia de exame disponível para este registro.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
1194|				showToast('Registro de exame não encontrado.', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
1240|				showToast('Solicitação de exame reagendada com sucesso!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
1244|				showToast(error.message || 'Falha ao reagendar exame. Tente novamente.', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
1340|				showToast('Exame(s) agendado(s) com sucesso!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
1343|				showToast(error.message || 'Falha ao agendar exame. Tente novamente.', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');

File: templates/sst_exam/components/historico.html.twig
Match lines: 6
827|				showToast('Nenhum arquivo de exame disponível para este registro.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
920|				showToast('Registro de exame não encontrado.', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
924|				showToast('Não é possível editar este registro.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
1132|				showToast(isEditMode ? 'Registro de exame não encontrado.' : 'Não foi encontrado um agendamento de exame para este colaborador. Agende o exame antes de importar o resultado.', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
1161|				showToast(isEditMode ? 'Exame atualizado com sucesso!' : 'Exame importado com sucesso!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
1165|				showToast(error.message || 'Falha ao importar exame. Tente novamente.', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');

File: templates/structural_research/criar_questionario.html.twig
Match lines: 18
496|    showToast(
658|    showToast(
2531|            showToast(
2565|            showToast(
2587|            showToast(
2816|            showToast(
2870|            showToast(
3027|            showToast(
3048|            showToast(
3059|        showToast(
3223|        showToast(
3263|                showToast(
3275|                showToast(
3305|            showToast(
3522|function showToast(message, title, iconClass, bgColor) {
3771|                showToast(
3789|                    showToast(
3893|        showToast(

File: templates/structural_research/structural_research_permission.html.twig
Match lines: 4
975|                    showToast('Permissão atualizada com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
978|                    showToast(data.message || 'Erro ao atualizar permissão', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
1360|                    showToast('Permissão atualizada com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
1606|        window.showToast = function(message, title, icon, bgClass) {

File: templates/subsidiary_company/mySubsidiaryCompanies.html.twig
Match lines: 13
554|            function showToast(success, message) {
726|                                showToast(true, response.message || 'Convite enviado com sucesso!');
730|                            showToast(false, response.message || 'Houve um erro. Tente novamente!');
735|                            showToast(false, response.message || response.error || textStatus);
788|                                showToast(true, response.message || 'Convite editado com sucesso!');
792|                            showToast(false, response.message || 'Houve um erro. Tente novamente!');
797|                            showToast(false, response.message || response.error || textStatus);
827|                                showToast(true, 'Convite reenviado com sucesso!');
829|                                showToast(false, data.message || 'Houve um erro. Tente novamente!');
836|                            showToast(false, 'Houve um erro. Tente novamente!');
877|                                showToast(true, 'Filial "' + companyName + '" removida com sucesso!');
881|                            showToast(false, data.message || 'Houve um erro. Tente novamente!');
886|                            showToast(false, 'Houve um erro. Tente novamente!');

File: templates/templates/a360/criar_pesquisa.html.twig
Match lines: 10
936|                showToast(validationResult.message, 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
1086|                showToast(validationResult.message, 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
1350|        showToast('Selecione um avaliador para continuar.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
1513|            showToast('Selecione pelo menos um membro para ser avaliado.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
1775|            showToast(errors.join('<br>'), 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
1790|    showToast('Enviando dados, aguarde...', 'Salvando', 'fas fa-spinner fa-spin', 'bg-info');
1820|                showToast(response.message, 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
1822|                showToast('Pesquisa salva com sucesso.', 'Sucesso!', 'fas fa-check-circle', 'bg-success');
1827|                showToast(response.message || response.error || 'Ocorreu um erro ao salvar a pesquisa.', 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
1833|            showToast(response.message || response.error || 'Ocorreu um erro de comunicação com o servidor.', 'Erro', 'fas fa-exclamation-circle', 'bg-danger');

File: templates/templates/a360/criar_pesquisa_old.html.twig
Match lines: 3
1488|                    showToast('Por favor, selecione pelo menos um tipo de avaliação antes de salvar.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
1497|                    showToast('Por favor, selecione um questionário antes de salvar.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
1624|                        showToast('Pesquisa salva com sucesso.', 'Sucesso!', 'fas fa-check-circle', 'bg-success');

File: templates/templates/a360/criar_questionario.html.twig
Match lines: 18
517|    showToast(
678|    showToast(
2534|            showToast(
2568|            showToast(
2590|            showToast(
2817|            showToast(
2871|            showToast(
3028|            showToast(
3049|            showToast(
3145|                    showToast(
3158|                showToast(
3171|            showToast(
3251|function showToast(message, title, iconClass, bgColor) {
3500|                showToast(
3518|                    showToast(
3622|        showToast(
3910|    showToast(message, duration = 3000) {
4019|            IAUtil.showToast(IA_CONFIG.ERROR_MESSAGES.COPY_SUCCESS);

File: templates/templates/calendar.html.twig
Match lines: 6
503|        showToast(successMessage, 'Lembrete de Horário', 'fa-clock', 'bg-success');
508|    showToast(successMessage, 'Convite Atividade Coletiva', 'fa-users', 'bg-success');
606|            showToast(successMessage, 'Atividade Atualizada', 'fa-check-circle', 'bg-success');
675|                showToast('Atividade Atualizada', successMessage, 'bg-success');
682|                showToast(successMessage, 'Atividade Adicionada', 'fa-check-circle', 'bg-success');
745|            showToast(successMessage, 'Atividade Movida', 'fa-check-circle', 'bg-success');

File: templates/templates/components/assessment_periodicity_management.html.twig
Match lines: 4
254|        showToast('Por favor, selecione uma nova periodicidade.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
260|        showToast('Esta periodicidade já está sendo usada para este assessment.', 'Informação', 'fas fa-info-circle', 'bg-info');
326|          showToast('Periodicidade alterada com sucesso!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
344|          showToast(

File: templates/templates/components/ia_text_tool.html.twig
Match lines: 4
424|        showToast(message, duration = 3000) {
541|                UI.showToast(CONFIG.ERROR_MESSAGES.COPY_SUCCESS);
643|                UI.showToast('Texto substituído com sucesso!');
662|                UI.showToast('Texto inserido com sucesso!');

File: templates/templates/components/ia_text_tool_ckeditor.html.twig
Match lines: 2
377|        showToast(message, duration = 3000) {
478|                UI.showToast(CONFIG.ERROR_MESSAGES.COPY_SUCCESS);

File: templates/templates/dashboard_assessment_360_participant.html.twig
Match lines: 2
2912|		showToast('Selecione seções diferentes para os eixos X e Y.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
3188|<script src="{{ asset('js/utils/showToast.js') }}"></script>

File: templates/templates/dashboard_general_performance.html.twig
Match lines: 1
1487|                    showToast('Você não pode selecionar a mesma seção para ambos os eixos.', 'Aviso!', 'fas fa-exclamation-triangle', 'bg-warning');

File: templates/templates/dashboard_individual_performance.html.twig
Match lines: 1
2178|                showToast('Você não pode selecionar a mesma seção para ambos os eixos.', 'Aviso!', 'fas fa-exclamation-triangle', 'bg-warning');

File: templates/templates/dashboard_team_performance.html.twig
Match lines: 1
1351|                showToast('Você não pode selecionar a mesma seção para ambos os eixos.', 'Aviso!', 'fas fa-exclamation-triangle', 'bg-warning');

File: templates/templates/eSocial_event_forms/event_s_2200_form.html.twig
Match lines: 1
501|        showToast('Todos os campos do dependente são obrigatórios e o CPF deve ser válido!', 'Erro de Validação', 'fas fa-exclamation-triangle', 'bg-danger');

File: templates/templates/eSocial_events_dispatch.html.twig
Match lines: 5
274|        showToast(`Todos os campos do bloco ${blockName} devem estar completos antes de enviar o formulário`, 'Erro de Validação', 'fas fa-exclamation-triangle', 'bg-danger');
377|    showToast(`Evento ${formData.event_name} ${action} com sucesso!`, 'Sucesso', 'fas fa-check-circle', 'bg-success');
507|            showToast(`O evento foi deletado com sucesso!`, 'Sucesso', 'fas fa-check-circle', 'bg-success');
510|            showToast(`Erro ao deletar o evento.`, 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
539|<script src="{{ asset('js/utils/showToast.js') }}"></script>

File: templates/templates/esocial_config.html.twig
Match lines: 1
506|                    showToast(EsocialUniqueEventId.getAjaxErrorMessage(xhr, 'Erro ao salvar os dados.'), 'Erro', 'fas fa-times', 'bg-danger');

File: templates/templates/freela_panel_index.html.twig
Match lines: 1
600|function showToast(message, isSuccess) {

File: templates/templates/individual_license_request.html.twig
Match lines: 7
326|            showToast(err_msg, 'Erro', 'fa-exclamation-triangle', 'bg-warning');
530|        showToast(customMessage, 'Sucesso', 'fa-check-circle', 'bg-success');
544|        showToast(customMessage, 'Aviso', 'fa-exclamation-triangle', 'bg-danger');
576|        showToast(customMessage, 'Solicitação Cancelada', 'fa-times-circle', 'bg-danger');
593|            showToast(customMessage, 'Sucesso', 'fa-check-circle', 'bg-success');
671|                    showToast(customMessage, 'Sucesso', 'fa-check-circle', 'bg-success');
688|                showToast(customMessage, 'Sucesso', 'fa-check-circle', 'bg-success');

File: templates/templates/licenses_collective.html.twig
Match lines: 13
515|            showToast('Por favor, adicione um tipo de licença antes de adicionar ou editar uma licença coletiva.', 'Aviso!', 'fa-exclamation-triangle', 'bg-warning');
911|                            showToast(response.message || 'Erro ao editar tipo de licença coletiva.', 'Erro!', 'fa-times-circle', 'bg-warning');
926|                        showToast('Tipo de Licença Coletiva editado com sucesso.', 'Sucesso!', 'fa-check-circle', 'bg-success');
942|                            showToast(response.message || 'Erro ao adicionar tipo de licença coletiva.', 'Erro!', 'fa-times-circle', 'bg-warning');
955|                            showToast('Tipo de Licença Coletiva adicionado com sucesso.', 'Sucesso!', 'fa-check-circle', 'bg-success');
1044|                        showToast('Licença Coletiva editada com sucesso.', 'Sucesso!', 'fa-check-circle', 'bg-success');
1071|                            showToast('Licença Coletiva adicionada com sucesso.', 'Sucesso!', 'fa-check-circle', 'bg-success');
1077|                        showToast('Erro ao adicionar licença coletiva.', 'Erro!', 'fa-times-circle', 'bg-danger');
1142|                                showToast('Tipo de Licença Coletiva removida com sucesso.', 'Sucesso!', 'fa-check-circle', 'bg-success');
1157|                                showToast(response.message, 'Erro!', 'fa-times-circle', 'bg-warning');
1163|                                showToast(response.message, 'Erro!', 'fa-times-circle', 'bg-warning');
1166|                                showToast('Ocorreu um erro ao tentar remover o Tipo de Licença Coletiva.', 'Erro!', 'fa-times-circle', 'bg-warning');
1183|                            showToast('Licença Coletiva removida com sucesso.', 'Sucesso!', 'fa-check-circle', 'bg-success');

File: templates/templates/licenses_implantation.html.twig
Match lines: 15
820|                showToast("Licença publicada com sucesso!", "Sucesso!", "fa-check-circle", "bg-success");
823|                showToast("Falha ao publicar a licença.", "Erro!", "fa-times-circle", "bg-danger");
828|            showToast("Falha ao publicar a licença.", "Erro!", "fa-times-circle", "bg-danger");
1087|            showToast("Nenhuma licença selecionada para publicação.", "Erro!", "fa-times-circle", "bg-danger");
1121|            showToast("Digite um ano válido (2000-2123).", "Erro!", "fa-exclamation-triangle", "bg-warning");
1715|                    showToast("Licença editada com sucesso!", "Sucesso!", "fa-check-circle", "bg-success");
1741|                    showToast("Licença adicionada com sucesso!", "Sucesso!", "fa-check-circle", "bg-success");
1789|                                            showToast('Licença adicionada sem envio ao eSocial.', 'Sucesso!', 'fa-check-circle', 'bg-success');
1798|                                        showToast('Erro ao salvar licença.', 'Erro!', 'fa-times-circle', 'bg-danger');
1822|                                            showToast('Licença adicionada com eventos eSocial para membros cadastrados.', 'Sucesso!', 'fa-check-circle', 'bg-success');
1831|                                        showToast('Erro ao criar eventos eSocial.', 'Erro!', 'fa-times-circle', 'bg-danger');
1846|                        showToast('Erro ao adicionar licença.', 'Erro!', 'fa-times-circle', 'bg-danger');
1883|                                showToast("Licença excluída com sucesso!", "Sucesso!", "fa-check-circle", "bg-success");
1887|                                showToast("Falha ao excluir a licença.", "Erro!", "fa-times-circle", "bg-danger");
1892|                            showToast("Falha ao excluir a licença.", "Erro!", "fa-times-circle", "bg-danger");

File: templates/templates/licenses_individual.html.twig
Match lines: 5
396|                showToast(
406|                showToast(
455|                        showToast("Licença removida com sucesso.", "Sucesso!", "fa-check-circle", "bg-success");
458|                        showToast(response.message, "Erro!", "fa-times-circle", "bg-danger");
463|                    showToast("Não foi possível remover a licença: " + error.message, "Erro!", "fa-times-circle", "bg-danger");

File: templates/templates/licenses_requests_approval.html.twig
Match lines: 9
700|                                    showToast(customMessage, 'Solicitação Rejeitada', 'fa-check-circle', 'bg-success');
705|                                showToast('Falha ao rejeitar a solicitação.', 'Erro', 'fa-times-circle', 'bg-danger');
747|                showToast(customMessage, 'Solicitação Aprovada', 'fa-check-circle', 'bg-success');
798|                            showToast(customMessage, 'Licença Atualizada', 'fa-check-circle', 'bg-success');
809|                        showToast('Erro ao atualizar a licença.', 'Erro', 'fa-times-circle', 'bg-danger');
820|                    showToast('Por favor, confirme as alterações antes de fechar o modal.', 'Alterações não confirmadas', 'fa-exclamation-triangle', 'bg-warning');
981|                                    showToast('A requisição de licença foi adicionada com sucesso.', 'Licença Adicionada', 'fa-check-circle', 'bg-success');
1046|                                            showToast('A requisição de licença foi adicionada com sucesso (sem eSocial).', 'Licença Adicionada', 'fa-check-circle', 'bg-success');
1225|                showToast(customMessage, 'Solicitação Cancelada', 'fa-times-circle', 'bg-danger');

File: templates/templates/modal_add_license_implantation.html.twig
Match lines: 7
510|                showToast("Selecione a Licença antes de inserir datas no calendário", "Aviso!", "fa-exclamation-triangle", "bg-warning");
518|                showToast("Licença 'Dia Único' não permite adicionar mais de uma data.", "Aviso!", "fa-exclamation-triangle", "bg-warning");
549|                    showToast("Não é permitido adicionar/remover datas para licenças periódicas", "Aviso!", "fa-exclamation-triangle", "bg-warning");
573|                showToast("Ação não permitida para este tipo de licença", "Aviso!", "fa-exclamation-triangle", "bg-warning");
584|                showToast("Licença não selecionada ou inválida", "Aviso!", "fa-exclamation-triangle", "bg-warning");
593|                    showToast("Não é permitido remover datas para licenças periódicas", "Aviso!", "fa-exclamation-triangle", "bg-warning");
607|                showToast("Não é permitido remover datas para este tipo de licença", "Aviso!", "fa-exclamation-triangle", "bg-warning");

File: templates/templates/modal_selective_process_add_stage.html.twig
Match lines: 7
751|            showToast('Atenção', 'Por favor, selecione uma área profissional primeiro.', 'bg-warning');
869|            showToast('Atenção', 'O título da etapa é obrigatório.', 'bg-warning');
875|            showToast('Atenção', 'A descrição da etapa é obrigatória.', 'bg-warning');
884|                showToast('Atenção', 'A rua é obrigatória para Etapa Presencial.', 'bg-warning');
890|                showToast('Atenção', 'O bairro é obrigatório para Etapa Presencial.', 'bg-warning');
896|                showToast('Atenção', 'A cidade é obrigatória para Etapa Presencial.', 'bg-warning');
902|                showToast('Atenção', 'O CEP é obrigatório e deve estar completo para Etapa Presencial.', 'bg-warning');

File: templates/templates/modal_specialists_new_date_request.html.twig
Match lines: 16
415|			if (typeof showToast !== 'undefined') {
416|				showToast('Por favor, preencha todas as datas e horas corretamente.', false);
445|							if (typeof showToast !== 'undefined') {
446|								showToast('Consulta confirmada com sucesso para a data sugerida pelo especialista!', true);
459|							if (typeof showToast !== 'undefined') {
460|								showToast(msg, false);
468|						if (typeof showToast !== 'undefined') {
469|							showToast(errorMessage, false);
480|				if (typeof showToast !== 'undefined') {
481|					showToast('Nenhuma data disponível para confirmar. Por favor, sugira uma nova data.', false);
511|					if (typeof showToast !== 'undefined') {
512|						showToast('Consulta marcada com sucesso para a nova data proposta!', true);
524|					if (typeof showToast !== 'undefined') {
525|						showToast(msg, false);
533|				if (typeof showToast !== 'undefined') {
534|					showToast(errorMessage, false);

File: templates/templates/modals_selective_process_utilities.html.twig
Match lines: 1
747|            showToast('Atenção', 'Selecione pelo menos uma avaliação para criar um novo elemento', 'bg-warning');

File: templates/templates/payment_management.html.twig
Match lines: 8
643|showToast(response.message, 'Sucesso', 'fas fa-check', 'bg-success');
661|showToast(xhr.responseJSON.message, 'Erro', 'fas fa-times', 'bg-danger');
996|showToast('Tabela atualizada com sucesso', 'Sucesso', 'fas fa-check', 'bg-success');
1042|showToast('Defina uma data de pagamento antes de visualizar os detalhes da Folha de Pagamento', 'Data de pagamento não definida', 'fas fa-times', 'bg-danger');
1067|showToast(response.message, 'Sucesso', 'fas fa-check', 'bg-success');
1085|showToast('Erro ao excluir folha de pagamento', 'Erro', 'fas fa-times', 'bg-danger');
1089|showToast(error.responseJSON.message, 'Erro', 'fas fa-times', 'bg-danger');
1176|<script src="{{ asset('js/utils/showToast.js') }}"></script>{% endblock %}

File: templates/templates/payroll_details.html.twig
Match lines: 2
553|                showToast('Folha de pagamento emitida com sucesso!', 'Sucesso!', 'fas fa-check', 'bg-success');
560|                showToast('Erro ao emitir folha de pagamento.', 'Erro!', 'bg-danger');

File: templates/templates/payroll_form.html.twig
Match lines: 8
1998|    //     showToast('O nome é obrigatório.', 'Aviso!', 'fas fa-exclamation-circle', 'bg-warning');
2005|            showToast(field.message, 'Aviso!', 'fas fa-exclamation-circle', 'bg-warning');
2013|        showToast('Por favor, insira um e-mail válido.', 'Aviso!', 'fas fa-exclamation-circle', 'bg-warning');
2021|            showToast(`${fieldLabel}: Por favor, insira apenas números.`, 'Aviso!', 'fas fa-exclamation-circle', 'bg-warning');
2047|                showToast(`${fieldName} é obrigatório.`, 'Aviso!', 'fas fa-exclamation-circle', 'bg-warning');
2475|                        showToast('Folha de pagamento salva com sucesso.', 'Sucesso!','fas fa-check', 'bg-success');
2486|                                showToast(resp.message, 'Erro!', 'fas fa-times', 'bg-danger');
2490|                        showToast('Erro ao salvar folha de pagamento.', 'Erro!', 'fas fa-times', 'bg-danger');

File: templates/templates/recomendations_canva.html.twig
Match lines: 4
836|        showToast('Posições dos membros salvas!', 'Sucesso!', 'fa-check-circle', 'bg-success');
860|                showToast('Posições salvas no servidor', 'Sucesso!', 'fa-check-circle', 'bg-success');
865|                showToast('Erro ao salvar as posições dos avaliados no servidor', 'Erro!', 'fa-times-circle', 'bg-danger');
883|        showToast('Todos os dados foram enviados!', 'Sucesso!', 'fa-check-circle', 'bg-success');

File: templates/templates/roles.html.twig
Match lines: 15
782|        if (typeof showToast === 'function') {
783|            showToast(
810|    if (typeof showToast === 'function') {
811|        showToast(message, 'Erro ao criar estrutura', 'fas fa-exclamation-triangle', 'bg-danger');
1654|                    showToast(response.message || 'Não foi possível salvar a competência.', 'Erro', 'fas fa-times', 'bg-danger');
1664|                showToast(message, 'Erro', 'fas fa-times', 'bg-danger');
1691|                    showToast(response.message || 'Não foi possível criar a competência.', 'Erro', 'fas fa-times', 'bg-danger');
1707|                showToast(message, 'Erro', 'fas fa-times', 'bg-danger');
1941|                showToast(response.message || 'Não foi possível remover a competência.', 'Erro', 'fas fa-times', 'bg-danger');
1956|            showToast(message, 'Erro', 'fas fa-times', 'bg-danger');
2016|        showToast('Você pode adicionar no máximo ' + maxTags + ' palavras-chave.', 'Limite atingido', 'fas fa-exclamation-triangle', 'bg-warning');
2486|                    showToast(xhr.responseJSON.message, 'Erro ao cadastrar cargo', 'fas fa-exclamation-triangle', 'bg-danger');
2488|                    showToast('Ocorreu um erro inesperado. Tente novamente.', 'Erro ao cadastrar cargo', 'fas fa-times', 'bg-danger');
2525|                    showToast(xhr.responseJSON.message, 'Erro ao editar cargo', 'fas fa-exclamation-triangle', 'bg-danger');
2527|                    showToast('Ocorreu um erro inesperado. Tente novamente.', 'Erro ao editar cargo', 'fas fa-times', 'bg-danger');

File: templates/templates/salary_panel_general_view.html.twig
Match lines: 4
1814|            showToast('Não há gráficos disponíveis para exportar!', 'Aviso!', 'fas fa-exclamation-triangle', 'bg-warning');
1824|        showToast('Preparando todos os gráficos para exportação...', 'Info', 'fas fa-info-circle', 'bg-info');
1946|            showToast('PDF exportado com sucesso!', 'Sucesso!', 'fas fa-check-circle', 'bg-success');
1951|            showToast('Erro ao gerar PDF. Tente novamente.', 'Erro!', 'fas fa-exclamation-circle', 'bg-danger');

File: templates/templates/salary_panel_role_simulation.html.twig
Match lines: 13
398|            showToast('Selecione o título do cargo no mercado.', 'Aviso!', 'fas fa-exclamation-circle', 'bg-warning');
403|        //     showToast('Selecione os níveis desejados.', 'Aviso!', 'fas fa-exclamation-circle', 'bg-warning');
408|            showToast('Selecione a quantidade de divisões.', 'Aviso!', 'fas fa-exclamation-circle', 'bg-warning');
484|            showToast('Não há cargos para editar no momento.', 'Aviso!', 'fas fa-exclamation-circle', 'bg-warning');
695|                showToast(`Erro: ${data.error}`, 'Erro!', 'fas fa-exclamation-circle', 'bg-danger');
732|            showToast('Simulação realizada com sucesso!', 'Sucesso!', 'fas fa-check', 'bg-success');
793|            showToast(`Erro ao carregar dados da simulação: ${error.message}`, 'Erro!', 'fas fa-exclamation-circle', 'bg-danger');
934|                    showToast(`Por favor, preencha o título do cargo na linha ${role.row}.`, 'Aviso!', 'fas fa-exclamation-circle', 'bg-warning');
937|                    showToast(`Por favor, preencha o salário base na linha ${role.row}.`, 'Aviso!', 'fas fa-exclamation-circle', 'bg-warning');
946|            showToast('Cargos adicionados com sucesso.', 'Sucesso!', 'fas fa-check', 'bg-success');
994|            showToast('Realize uma simulação primeiro para exportar o PDF!', 'Aviso!', 'fas fa-exclamation-triangle', 'bg-warning');
1060|            showToast('PDF exportado com sucesso!', 'Sucesso!', 'fas fa-check', 'bg-success');
1065|            showToast('Erro ao gerar PDF. Tente novamente.', 'Erro!', 'fas fa-exclamation-circle', 'bg-danger');

File: templates/templates/salary_survey.html.twig
Match lines: 9
382|            showToast(field.message, 'Aviso!', 'fas fa-exclamation-circle', 'bg-warning');
388|        showToast('Por favor, insira uma data válida para a última atualização.', 'Aviso!', 'fas fa-exclamation-circle', 'bg-warning');
621|                    showToast('Pesquisa salarial cadastrada com sucesso!', 'Sucesso!', 'fas fa-check', 'bg-success');
623|                    showToast('Houve um erro. Tente novamente!', 'Erro!', 'fas fa-exclamation-triangle', 'bg-danger');
645|                    showToast('Pesquisa salarial atualizada com sucesso!', 'Sucesso!', 'fas fa-check', 'bg-success');
648|                    showToast('Houve um erro. Tente novamente!', 'Erro!', 'fas fa-exclamation-triangle', 'bg-danger');
670|                showToast('Pesquisa salarial excluída com sucesso.', 'Sucesso!', 'fas fa-check', 'bg-success'); 
673|                showToast('Houve um erro ao tentar excluir a pesquisa salarial.', 'Erro!', 'fas fa-exclamation-triangle', 'bg-danger');
678|            showToast('Houve um erro ao tentar excluir a pesquisa salarial.', 'Erro!', 'fas fa-exclamation-triangle', 'bg-danger');

File: templates/templates/selective_process_creation.html.twig
Match lines: 11
552|        showToast('O nome do processo é obrigatório.', 'Atenção', 'fa-exclamation-triangle', 'bg-warning');
558|        showToast('A data de início é obrigatória.', 'Atenção', 'fa-exclamation-triangle', 'bg-warning');
564|        showToast('A data de término é obrigatória.', 'Atenção', 'fa-exclamation-triangle', 'bg-warning');
570|        showToast('A empresa é obrigatória.', 'Atenção', 'fa-exclamation-triangle', 'bg-warning');
576|        showToast('O responsável é obrigatório.', 'Atenção', 'fa-exclamation-triangle', 'bg-warning');
582|        showToast('A área profissional é obrigatória.', 'Atenção', 'fa-exclamation-triangle', 'bg-warning');
588|        showToast('A descrição da vaga é obrigatória.', 'Atenção', 'fa-exclamation-triangle', 'bg-warning');
602|        showToast('Selecione pelo menos uma seção para a Etapa Online.', 'Atenção', 'fa-exclamation-triangle', 'bg-warning');
611|            showToast('Selecione pelo menos uma opção de manual para a entrevista.', 'Atenção', 'fa-exclamation-triangle', 'bg-warning');
621|            showToast('Selecione pelo menos uma opção de avaliação.', 'Atenção', 'fa-exclamation-triangle', 'bg-warning');
987|            showToast('A etapa foi excluída com sucesso.', 'Etapa excluída', 'fa-check-circle', 'bg-success');

File: templates/templates/specialist_activities_validation.html.twig
Match lines: 11
430|        function showToast(message, isSuccess) {
461|                        showToast('Este especialista não está autorizado para validar avaliações.', false);
466|                        showToast('Nenhuma Avaliação para validar foi encontrada.', false);
468|                        showToast('Erro ao buscar as avaliações para validar.', false);
582|                                showToast('Avaliação validada com sucesso.', true);
589|                                showToast(response.message, false);
594|                            showToast('Erro ao validar a avaliação.', false);
659|            showToast('Erro: ID da avaliação não encontrado.', false);
672|                    showToast('Avaliação salva com sucesso.', true);
678|                    showToast(response.message, false);
682|                showToast('Erro ao salvar a avaliação. Tente novamente.', false);

File: templates/templates/specialist_activities_validation_interview.html.twig
Match lines: 28
1152|        function showToast(message, isSuccess) {
1192|                    showToast('Nenhuma Entrevista ou Avaliação para validar foi encontrada.', false);
1195|                showToast('Nenhuma Entrevista para validar foi encontrada.', false);
1199|            showToast(`Erro ao buscar as entrevistas para validar: ${xhr.statusText}`, false);
1328|                        showToast('Entrevista validada com sucesso.', true);
1332|                        showToast(response.message, false);
1337|                    showToast('Erro ao validar a entrevista.', false);
1362|                        showToast('Entrevista validada com sucesso.', true);
1366|                        showToast(response.message, false);
1371|                    showToast('Erro ao validar a entrevista.', false);
1439|            showToast('Erro: ID da entrevista não encontrado.', false);
1453|                    showToast('Avaliação salva com sucesso!', true);
1459|                    showToast('Erro ao salvar a avaliação: ' + response.message, false);
1463|                showToast('Erro ao enviar a avaliação.', false);
1528|                                showToast('Avaliação validada com sucesso.', true);
1535|                                showToast(response.message, false);
1540|                            showToast('Erro ao validar a avaliação.', false);
1637|            showToast('Erro: ID da avaliação não encontrado.', false);
1650|                    showToast('Avaliação salva com sucesso.', true);
1656|                    showToast(response.message, false);
1660|                showToast('Erro ao salvar a avaliação. Tente novamente.', false);
1698|                    showToast('Detalhes salvos com sucesso.', true);
1700|                    showToast(response.message, false);
1704|                showToast('Erro ao salvar detalhes da entrevista.', false);
1730|                        showToast('Entrevista validada com sucesso.', true);
1736|                        showToast(response.message, false);
1740|                    showToast('Erro ao validar a entrevista.', false);
1747|    function showToast(message, isSuccess) {

File: templates/templates/specialists_index.html.twig
Match lines: 17
515|			function showToast(message, isSuccess) {
1779|					showToast('Por favor, insira uma URL válida.', false);
1851|					showToast('Ainda existe algum requisito pendente para envio. Atualize os dados e tente novamente.', false);
1904|									showToast(data.message || 'Erro ao enviar os dados. Tente novamente.', false);
1915|								showToast(message, false);
1924|						showToast('Erro ao enviar o currículo. Tente novamente.', false);
2385|					showToast('Não foi possível identificar o especialista para a nova data. Tente novamente mais tarde.', false);
2437|								showToast('Data de entrevista confirmada com sucesso!', true);
2441|								showToast('Datas de entrevista sugeridas com sucesso!', true);
2445|							showToast('Erro ao salvar as entrevistas: ' + error, false);
2472|							showToast('Data de entrevista confirmada com sucesso!', true);
2475|							showToast('Erro ao confirmar a data da entrevista.', false);
2490|					showToast('Nenhuma data foi selecionada ou adicionada.', false);
2808|												showToast('Por favor, selecione uma hora futura para o dia atual!', false);
2818|												showToast('Por favor, selecione um horário futuro para o dia atual!', false);
2831|											showToast('Esta data já está disponível para agendamento. Por favor, escolha outra data.', false);
2841|											showToast('Esta data e hora já estão disponíveis para agendamento!', false);

File: templates/templates/specialists_management_hired.html.twig
Match lines: 51
1315|                        showToast('Configuração de validação atualizada com sucesso', true);
1317|                        showToast('Erro ao atualizar configuração de validação', false);
1321|                    showToast('Erro na comunicação com o servidor', false);
1334|            .then(() => { showToast('Link copiado com sucesso', true); })
1335|            .catch(() => { showToast('Erro ao copiar o link', false); });
1899|                    showToast('Especialista habilitado com sucesso', true);
1902|                    showToast('Erro ao habilitar especialista', false);
1915|                showToast(errorMessage, false);
2017|            showToast('Por favor, selecione um motivo para a desabilitação', false);
2022|            showToast('Por favor, especifique o motivo da desabilitação', false);
2027|            showToast('Por favor, selecione uma data prevista de retorno', false);
2060|                    showToast('Especialista desabilitado com sucesso', true);
2062|                    showToast('Erro ao desabilitar especialista', false);
2069|                showToast(errorMessage, false);
2164|                showToast('Este especialista não está autorizado para validar avaliações.', false);
2169|                showToast('Nenhuma Avaliação para validar foi encontrada.', false);
2171|                showToast('Erro ao buscar as avaliações para validar.', false);
2191|                showToast('Nenhuma Entrevista para validar foi encontrada.', false);
2196|                showToast('Nenhuma Entrevista para validar foi encontrada.', false);
2198|                showToast('Erro ao buscar as entrevistas para validar.', false);
2263|        showToast('Link copiado com sucesso!', true);
2310|                    showToast('Nenhuma Entrevista para validar foi encontrada.', false);
2315|                    showToast('Nenhuma Entrevista para validar foi encontrada.', false);
2317|                    showToast('Erro ao buscar as entrevistas para validar.', false);
2407|            showToast('Erro: ID da entrevista não encontrado.', false);
2421|                    showToast('Avaliação salva com sucesso!', true);
2424|                    showToast('Erro ao salvar a avaliação: ' + response.message, false);
2428|                showToast('Erro ao enviar a avaliação.', false);
2488|            showToast('Erro: ID da avaliação não encontrado.', false);
2501|                    showToast('Avaliação salva com sucesso.', true);
2504|                    showToast(response.message, false);
2508|                showToast('Erro ao salvar a avaliação. Tente novamente.', false);
2590|                    showToast('Entrevista validada com sucesso.', true);
2593|                    showToast(response.message, false);
2598|                showToast('Erro ao validar a entrevista.', false);
2626|                    showToast('Avaliação validada com sucesso.', true);
2630|                    showToast(response.message, false);
2635|                showToast('Erro ao validar a avaliação.', false);
2696|                showToast('Nenhuma Entrevista para validar foi encontrada.', false);
2701|                showToast('Nenhuma Entrevista para validar foi encontrada.', false);
2703|                showToast('Erro ao buscar as entrevistas para validar.', false);
2719|                showToast('Este especialista não está autorizado para validar avaliações.', false);
2724|                showToast('Nenhuma Avaliação para validar foi encontrada.', false);
2726|                showToast('Erro ao buscar as avaliações para validar.', false);
3078|                        showToast('Configuração de validação atualizada com sucesso', true);
3080|                        showToast('Erro ao atualizar configuração de validação', false);
3086|                    showToast('Erro na comunicação com o servidor', false);
3141|            showToast('Por favor, informe o motivo do bloqueio', false);
3163|                    showToast('Especialista bloqueado com sucesso', true);
3166|                    showToast('Erro ao bloquear especialista', false);
3173|                showToast(errorMessage, false);

File: templates/templates/specialists_management_index.html.twig
Match lines: 3
422|function showToast(message, isSuccess) {
505|                showToast('Não foram recebidos dados do servidor.', false);
570|            showToast(errorMessage, false);

File: templates/templates/specialists_management_specialists_requests.html.twig
Match lines: 27
1118|					showToast('Selecione uma data antes de salvar.', false);
1192|								showToast('A data foi salva com sucesso!', true);
1200|							showToast('Erro ao salvar a data.', false);
1212|						showToast(errorMessage, false);
1729|							showToast(`Especialista desbloqueado com sucesso como ${typeLabel}.`, true);
1733|							showToast(response.message || 'Erro ao desbloquear especialista.', false);
1744|						showToast(errorMessage, false);
1982|						showToast('Funcionalidade de reagendamento será implementada em breve.', true);
1996|						showToast('Funcionalidade de confirmação será implementada em breve.', true);
2032|					showToast('Por favor, selecione se a entrevista foi realizada antes de aprovar.', false);
2071|								showToast(`Especialista aprovado com sucesso como ${typeLabel}.`, true);
2074|								showToast('Erro ao aprovar o especialista.', false);
2086|							showToast(errorMessage, false);
2218|							showToast('Por favor, complete todas as seções antes de reprovar.', false);
2242|									showToast('Especialista reprovado com sucesso.', true);
2292|									showToast('Erro ao reprovar o especialista.', false);
2301|								showToast('Erro ao reprovar o especialista', false);
2326|							showToast('Nova data e hora aprovada com sucesso.', true);
2387|							showToast('Nova data e hora reprovada com sucesso.', true);
2549|								showToast('Datas agendadas com sucesso.', true);
2554|							showToast('Erro ao agendar datas.', false);
2567|						showToast(errorMessage, false);
2578|				showToast('Por favor, certifique-se de que todas as entradas de data e hora estão completas antes de salvar.', false);
2628|						showToast('Por favor, insira um link válido.', false);
2642|						showToast('Por favor, insira um link de URL válido.', false);
2682|							showToast('Link da videoconferência inserido com sucesso.', true);
2696|							showToast(errorMessage, false);

File: templates/templates/timesheet.html.twig
Match lines: 4
1103|						showToast('Por favor, preencha a "Carga Horária" antes de adicionar ou editar uma atividade.', 'Aviso!', 'fas fa-exclamation-triangle', 'bg-alert');
1120|					showToast('Por favor, preencha a "Carga Horária" antes de adicionar ou editar uma atividade.', 'Aviso!', 'fas fa-exclamation-triangle', 'bg-alert');
2428|					showToast(err_msg, 'Erro!', 'fas fa-exclamation-triangle', 'bg-danger');
2927|	<script src="{{ asset('js/utils/showToast.js') }}"></script>

File: templates/templates_whats_app/modalDeleteTemplate.html.twig
Match lines: 3
47|                showToast('Template deletado com sucesso!', 'Sucesso!', 'fa-check-circle', 'bg-success');
53|                showToast(data.error, 'Aviso!', 'fa-exclamation-triangle', 'bg-warning');
58|            showToast('Ocorreu um erro ao tentar deletar o template.', 'Aviso!', 'fa-exclamation-triangle', 'bg-warning');

File: templates/templates_whats_app/modalIntegracao.html.twig
Match lines: 3
90|            showToast('Por favor, preencha todos os campos obrigatórios.', 'Aviso!', 'fa-exclamation-triangle', 'bg-warning');
130|                showToast('Dados salvos com sucesso!', 'Sucesso!', 'fa-check-circle', 'bg-success');
137|            showToast('Erro ao salvar os dados.', 'Aviso!', 'fa-exclamation-triangle', 'bg-warning');

File: templates/templates_whats_app/newTemplation.html.twig
Match lines: 6
480|          showToast('Por favor, preencha todos os campos obrigatórios.', 'Aviso!', 'fa-exclamation-triangle', 'bg-warning');
523|              showToast(
531|              showToast(responseData.error, 'Erro!', 'fa-times-circle', 'bg-danger');
536|          showToast(responseData.error, 'Erro!', 'fa-times-circle', 'bg-danger');
612|              showToast('Rascunho salvo com sucesso!', 'Sucesso!', 'fa-check-circle', 'bg-success');
615|              showToast('Erro ao salvar o rascunho: ' + responseData.error, 'Erro!', 'fa-times-circle', 'bg-danger');

File: templates/tokens/models.html.twig
Match lines: 2
336|                if (typeof showToast === 'function') {
337|                    showToast(message, title || 'Atenção', icon || 'fas fa-info-circle', bgColor || 'bg-info');

File: templates/training_modules/modules.html.twig
Match lines: 13
1274|                    showToast('Nenhum capítulo ativo encontrado!', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
1799|                        showToast('Erro ao atualizar a ordem dos capítulos.', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
1804|                    showToast('Erro ao atualizar a ordem dos capítulos. Tente novamente.', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
1877|                            showToast('A avaliação foi removida com sucesso e confirmada no banco de dados.', 'Sucesso', 'fas fa-check', 'bg-success');
1888|                        showToast('Erro ao excluir avaliação. Por favor, tente novamente.', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
1926|                        showToast('Erro ao excluir capítulo: ID não encontrado.', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
1960|                        showToast('O capítulo foi removido com sucesso.', 'Sucesso', 'fas fa-check', 'bg-success');
1967|                        showToast('Erro ao excluir capítulo. Por favor, tente novamente.', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
2062|                    showToast('Por favor, insira um título para o módulo.', 'Aviso', 'fas fa-exclamation-triangle', 'bg-warning');
2138|                                showToast("Erro ao salvar capítulo: " + (data.message || "Erro desconhecido"), 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
2144|                            showToast("Erro ao salvar capítulo. Por favor, tente novamente.", 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
2231|                                showToast("Erro ao salvar capítulo: " + (data.message || "Erro desconhecido"), 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
2238|                            showToast("Erro ao salvar capítulo. Por favor, tente novamente.", 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');

File: templates/training_modules/modules_assessment.html.twig
Match lines: 2
2144|showToast(message, duration = 3000) {
2253|IAUtil.showToast(IA_CONFIG.ERROR_MESSAGES.COPY_SUCCESS);

File: templates/trm/campaigns/campaign/tabs/_tab_campaign.html.twig
Match lines: 18
535|                showToast('Não foi possível salvar o rascunho.', 'Aviso', 'fas fa-exclamation-triangle', 'bg-warning');
566|                        showToast('Campanha atualizada com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
569|                        showToast(data.error || 'Erro ao salvar campanha', 'Erro', 'fas fa-times-circle', 'bg-danger');
572|                error: function() { showToast('Erro ao salvar campanha', 'Erro', 'fas fa-times-circle', 'bg-danger'); }
599|                    showToast(msg, 'Sucesso', 'fas fa-check', 'bg-success');
602|                    showToast(data.error || 'Erro ao iniciar campanha', 'Erro', 'fas fa-times-circle', 'bg-danger');
609|                showToast(msg, 'Erro', 'fas fa-times-circle', 'bg-danger');
623|                        showToast('Campanha pausada!', 'Sucesso', 'fas fa-check', 'bg-success');
626|                        showToast(data.error || 'Erro ao pausar', 'Erro', 'fas fa-times-circle', 'bg-danger');
629|                error: function() { showToast('Erro ao pausar campanha', 'Erro', 'fas fa-times-circle', 'bg-danger'); }
643|                        showToast(data.message || 'Campanha retomada!', 'Sucesso', 'fas fa-check', 'bg-success');
646|                        showToast(data.error || 'Erro ao retomar', 'Erro', 'fas fa-times-circle', 'bg-danger');
649|                error: function() { showToast('Erro ao retomar campanha', 'Erro', 'fas fa-times-circle', 'bg-danger'); }
663|                        showToast(data.message || 'Campanha concluída!', 'Sucesso', 'fas fa-check', 'bg-success');
666|                        showToast(data.error || 'Erro ao concluir', 'Erro', 'fas fa-times-circle', 'bg-danger');
669|                error: function() { showToast('Erro ao concluir campanha', 'Erro', 'fas fa-times-circle', 'bg-danger'); }
701|                showToast(result.error || 'Erro ao gerar preview', 'Erro', 'fas fa-times-circle', 'bg-danger');
705|            showToast('Erro ao gerar pré-visualização', 'Erro', 'fas fa-times-circle', 'bg-danger');

File: templates/trm/campaigns/campaign/tabs/_tab_panel.html.twig
Match lines: 2
484|                    if (typeof showToast === 'function') {
485|                        showToast('Erro ao salvar feedback da campanha.', 'Erro', 'fas fa-times-circle', 'bg-danger');

File: templates/trm/campaigns/index.html.twig
Match lines: 19
391|            showToast('Informe o nome da campanha', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
411|                    showToast('Campanha criada com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
423|                    showToast(data.message || data.error || 'Erro ao criar campanha', 'Erro', 'fas fa-times-circle', 'bg-danger');
428|                showToast(response.message || response.error || 'Erro ao criar campanha', 'Erro', 'fas fa-times-circle', 'bg-danger');
456|                            showToast('Campanha duplicada com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
464|                            showToast(data.error || 'Erro ao duplicar', 'Erro', 'fas fa-times-circle', 'bg-danger');
468|                        showToast('Erro ao duplicar campanha', 'Erro', 'fas fa-times-circle', 'bg-danger');
491|                            showToast(data.message || 'Campanha iniciada com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
494|                            showToast(data.error || 'Erro ao iniciar campanha', 'Erro', 'fas fa-times-circle', 'bg-danger');
501|                        showToast(msg, 'Erro', 'fas fa-times-circle', 'bg-danger');
524|                            showToast(data.message || 'Campanha concluída!', 'Sucesso', 'fas fa-check', 'bg-success');
527|                            showToast(data.error || 'Erro ao concluir campanha', 'Erro', 'fas fa-times-circle', 'bg-danger');
531|                        showToast('Erro ao concluir campanha', 'Erro', 'fas fa-times-circle', 'bg-danger');
553|                            showToast('Campanha pausada!', 'Sucesso', 'fas fa-check', 'bg-success');
556|                            showToast(data.error || 'Erro ao pausar', 'Erro', 'fas fa-times-circle', 'bg-danger');
560|                        showToast('Erro ao pausar campanha', 'Erro', 'fas fa-times-circle', 'bg-danger');
583|                            showToast('Campanha excluída com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
587|                            showToast(data.error || 'Erro ao excluir campanha', 'Erro', 'fas fa-times-circle', 'bg-danger');
591|                        showToast('Erro ao excluir campanha', 'Erro', 'fas fa-times-circle', 'bg-danger');

File: templates/trm/talent_profile/index.html.twig
Match lines: 3
572|                showToast('Resumo gerado com sucesso!', 'Sucesso!', 'fas fa-check-circle', 'bg-success');
580|                showToast(data.message || 'Erro ao gerar resumo', 'Erro!', 'fas fa-times-circle', 'bg-danger');
590|            showToast('Erro de conexão', 'Erro!', 'fas fa-times-circle', 'bg-danger');

File: templates/trm/talent_profile/partials/_modal_schedule_interview.html.twig
Match lines: 5
81|                showToast('Erro ao carregar membros da empresa', 'Erro!', 'fas fa-times-circle', 'bg-danger');
91|            showToast('Selecione um entrevistador.', 'Atenção!', 'fas fa-exclamation-circle', 'bg-warning');
105|                    showToast(resp.message || 'Entrevistador alocado com sucesso!', 'Sucesso!', 'fas fa-check-circle', 'bg-success');
109|                    showToast(resp.message || 'Erro ao agendar entrevista.', 'Erro!', 'fas fa-times-circle', 'bg-danger');
114|                showToast(message, 'Erro!', 'fas fa-times-circle', 'bg-danger');

File: templates/trm/talent_profile/partials/_modal_send_proposal.html.twig
Match lines: 5
176|                showToast('Erro ao carregar lista de vagas', 'Erro!', 'fas fa-times-circle', 'bg-danger');
238|            showToast('Preencha todos os campos obrigatórios.', 'Atenção!', 'fas fa-exclamation-circle', 'bg-warning');
255|                    showToast(resp.message || 'Proposta enviada com sucesso!', 'Sucesso!', 'fas fa-check-circle', 'bg-success');
259|                    showToast(resp.message || 'Erro ao enviar proposta.', 'Erro!', 'fas fa-times-circle', 'bg-danger');
265|                showToast(msg, 'Erro!', 'fas fa-times-circle', 'bg-danger');

File: templates/trm/talent_profile/tabs/_tab_processes.html.twig
Match lines: 1
212|        showToast('Performance do processo em breve.', 'Info', 'fas fa-chart-line', 'bg-info');

File: templates/trm/talents_and_communities/community.html.twig
Match lines: 6
437|        if (ids.length === 0) { showToast('Selecione pelo menos um membro', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning'); return; }
472|                        showToast('Membro removido!', 'Sucesso', 'fas fa-check', 'bg-success');
474|                        showToast(r.error || 'Erro ao remover membro', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
477|                error: function() { showToast('Erro ao remover membro', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger'); },
494|                    if (success > 0) showToast(success + ' membro(s) removido(s)!', 'Sucesso', 'fas fa-check', 'bg-success');
495|                    if (done - success > 0) showToast((done - success) + ' não puderam ser removidos', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');

File: templates/trm/talents_and_communities/partials/_modal_add_community.html.twig
Match lines: 10
279|                if (!response.success) { showToast('Erro ao carregar comunidade', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger'); return; }
299|            error: function() { showToast('Erro ao carregar comunidade', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger'); }
334|            if (!ruleJson) { showToast('Adicione pelo menos uma condição', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning'); return; }
342|        if (!formData.name) { showToast('Informe o nome da comunidade', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning'); return; }
353|                    showToast(isEdit ? 'Comunidade atualizada!' : 'Comunidade criada!', 'Sucesso', 'fas fa-check', 'bg-success');
357|                    showToast(response.error || 'Erro ao salvar comunidade', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
360|            error:    function(xhr) { showToast(xhr.responseJSON?.error || 'Erro ao salvar comunidade', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger'); },
380|                    showToast('Texto gerado com IA!', 'Sucesso', 'fas fa-check', 'bg-success');
382|                    showToast(response.error || 'Erro ao gerar texto', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
385|            error:    function() { showToast('Erro ao conectar com IA', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger'); },

File: templates/trm/talents_and_communities/partials/_modal_add_member_to_community.html.twig
Match lines: 2
225|                    if (success > 0) showToast(success + ' talento(s) adicionado(s)!', 'Sucesso', 'fas fa-check', 'bg-success');
226|                    if (done - success > 0) showToast((done - success) + ' não puderam ser adicionados', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');

File: templates/trm/talents_and_communities/partials/_modal_add_talent.html.twig
Match lines: 9
228|                    showToast('Erro ao carregar dados do talento', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
263|                showToast('Erro ao carregar dados do talento', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
299|            showToast('O nome é obrigatório', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
313|                    showToast(isEdit ? 'Talento atualizado com sucesso!' : 'Talento cadastrado com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
317|                    showToast(response.error || 'Erro ao salvar talento', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
321|                showToast(xhr.responseJSON?.error || 'Erro ao salvar talento', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
402|                    showToast('Texto gerado com IA!', 'Sucesso', 'fas fa-check', 'bg-success');
404|                    showToast(response.error || 'Erro ao gerar texto', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
407|            error:    function() { showToast('Erro ao conectar com IA', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger'); },

File: templates/trm/talents_and_communities/partials/_modal_delete_community.html.twig
Match lines: 8
19|        showToast('Recalculando membros...', 'Info', 'fas fa-spinner fa-spin', 'bg-info');
24|                if (response.success) { showToast('Membros recalculados!', 'Sucesso', 'fas fa-check', 'bg-success'); location.reload(); }
25|                else { showToast(response.error || 'Erro ao recalcular', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger'); }
27|            error: function() { showToast('Erro ao recalcular membros', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger'); }
33|        if (ids.length === 0) { showToast('Selecione pelo menos uma comunidade', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning'); return; }
54|                    showToast('Comunidade(s) excluída(s)!', 'Sucesso', 'fas fa-check', 'bg-success');
64|                    showToast(response.error || 'Erro ao excluir', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
69|                showToast((xhr.responseJSON && xhr.responseJSON.error) || 'Erro ao excluir comunidades', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');

File: templates/trm/talents_and_communities/partials/_modal_delete_talent.html.twig
Match lines: 4
19|        if (ids.length === 0) { showToast('Selecione pelo menos um talento', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning'); return; }
40|                    showToast(response.message || 'Talento(s) excluído(s) com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
61|                    showToast(response.error || 'Erro ao excluir talentos', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
66|                showToast((xhr.responseJSON && xhr.responseJSON.error) || 'Erro ao excluir talentos', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');

File: templates/trm/talents_and_communities/partials/_modal_import_contacts.html.twig
Match lines: 3
72|            showToast('Selecione um arquivo CSV ou Excel', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
77|        showToast('Arquivo selecionado!', 'Sucesso', 'fas fa-check', 'bg-success');
95|        showToast('Modelo baixado!', 'Sucesso', 'fas fa-check', 'bg-success');

File: templates/trm/talents_and_communities/partials/_modal_invite_to_process.html.twig
Match lines: 4
48|            showToast('Selecione um processo seletivo', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
62|                    showToast(r.message || 'Talento convidado com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
65|                    showToast(r.message || 'Erro ao convidar', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
70|                showToast(msg, 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');

File: templates/user_admin/add.html.twig
Match lines: 2
789|        function showToast(message, title = 'Notificação', iconClass = 'fas fa-check', bgColor = 'bg-success') {
1030|                    showToast("Erro ao carregar os detalhes do administrador.");

File: templates/welfare_assessment/welfare_management.html.twig
Match lines: 12
720|            showToast('Selecione pelo menos um membro!', 'Atenção', 'fas fa-exclamation-triangle', 'bg-danger');
732|            showToast('Selecione pelo menos um assessment!', 'Atenção', 'fas fa-exclamation-triangle', 'bg-danger');
754|                showToast(
781|                showToast('Recarregando a página...', 'Sucesso', 'fas fa-check', 'bg-success');
790|                showToast(
892|            showToast(
902|            showToast(data.message, 'Sucesso', 'fas fa-check', 'bg-success');
1192|            showToast(
1231|        showToast('Selecione pelo menos um membro!', 'Atenção', 'fas fa-exclamation-triangle', 'bg-danger');
1259|        showToast('Nenhum assessment pendente para os membros selecionados!', 'Atenção', 'fas fa-exclamation-triangle', 'bg-danger');
1274|            showToast('Convites reenviados com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
1277|            showToast('Erro ao reenviar convites. Tente novamente.', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');

File: templates/welfare_hub/health_specialist_panel/tabs/agenda.html.twig
Match lines: 12
140|      function showToast(message, type) {
522|            showToast('Disponibilidade adicionada com sucesso!', 'success');
526|            showToast('Erro ao adicionar disponibilidade: ' + (data.error || 'Erro desconhecido'), 'error');
531|          showToast('Erro ao salvar disponibilidade', 'error');
543|            showToast('Disponibilidade removida com sucesso!', 'success');
546|            showToast('Erro ao remover disponibilidade: ' + (data.error || 'Erro desconhecido'), 'error');
551|          showToast('Erro ao remover disponibilidade', 'error');
566|            showToast('Disponibilidade atualizada com sucesso!', 'success');
570|            showToast('Erro ao atualizar disponibilidade: ' + (data.error || 'Erro desconhecido'), 'error');
575|          showToast('Erro ao atualizar disponibilidade', 'error');
1037|              showToast('Por favor, preencha o título da disponibilidade', 'warning');
1041|              showToast('Por favor, selecione ao menos um dia e horário', 'warning');

code_search
Show Details
{"search_text": "modal-backdrop|appendTo\\(document.body\\)|\\$\\(document.body\\).append", "file_patterns": ["public/js/", "templates/"], "use_perl_regexp": true}
Note: The results have been truncated. Only showing first 100 results.
File: public/js/bootstrap.js
Match lines: 1
1109|        .addClass('modal-backdrop ' + animate)

File: public/js/bootstrap.min.js
Match lines: 1
7|!function(a){a(function(){a.support.transition=function(){var a=function(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},c;for(c in b)if(a.style[c]!==undefined)return b[c]}();return a&&{end:a}}()})}(window.jQuery),!function(a){var b=function(b,c){this.options=c,this.$element=a(b).delegate('[data-dismiss="modal"]',"click.dismiss.modal",a.proxy(this.hide,this)),this.options.remote&&this.$element.find(".modal-body").load(this.options.remote)};b.prototype={constructor:b,toggle:function(){return this[this.isShown?"hide":"show"]()},show:function(){var b=this,c=a.Event("show");this.$element.trigger(c);if(this.isShown||c.isDefaultPrevented())return;this.isShown=!0,this.escape(),this.backdrop(function(){var c=a.support.transition&&b.$element.hasClass("fade");b.$element.parent().length||b.$element.appendTo(document.body),b.$element.show(),c&&b.$element[0].offsetWidth,b.$element.addClass("in").attr("aria-hidden",!1),b.enforceFocus(),c?b.$element.one(a.support.transition.end,function(){b.$element.focus().trigger("shown")}):b.$element.focus().trigger("shown")})},hide:function(b){b&&b.preventDefault();var c=this;b=a.Event("hide"),this.$element.trigger(b);if(!this.isShown||b.isDefaultPrevented())return;this.isShown=!1,this.escape(),a(document).off("focusin.modal"),this.$element.removeClass("in").attr("aria-hidden",!0),a.support.transition&&this.$element.hasClass("fade")?this.hideWithTransition():this.hideModal()},enforceFocus:function(){var b=this;a(document).on("focusin.modal",function(a){b.$element[0]!==a.target&&!b.$element.has(a.target).length&&b.$element.focus()})},escape:function(){var a=this;this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.modal",function(b){b.which==27&&a.hide()}):this.isShown||this.$element.off("keyup.dismiss.modal")},hideWithTransition:function(){var b=this,c=setTimeout(function(){b.$element.off(a.support.transition.end),b.hideModal()},500);this.$element.one(a.support.transition.end,function(){clearTimeout(c),b.hideModal()})},hideModal:function(){var a=this;this.$element.hide(),this.backdrop(function(){a.removeBackdrop(),a.$element.trigger("hidden")})},removeBackdrop:function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},backdrop:function(b){var c=this,d=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var e=a.support.transition&&d;this.$backdrop=a('<div class="modal-backdrop '+d+'" />').appendTo(document.body),this.$backdrop.click(this.options.backdrop=="static"?a.proxy(this.$element[0].focus,this.$element[0]):a.proxy(this.hide,this)),e&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in");if(!b)return;e?this.$backdrop.one(a.support.transition.end,b):b()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(a.support.transition.end,b):b()):b&&b()}};var c=a.fn.modal;a.fn.modal=function(c){return this.each(function(){var d=a(this),e=d.data("modal"),f=a.extend({},a.fn.modal.defaults,d.data(),typeof c=="object"&&c);e||d.data("modal",e=new b(this,f)),typeof c=="string"?e[c]():f.show&&e.show()})},a.fn.modal.defaults={backdrop:!0,keyboard:!0,show:!0},a.fn.modal.Constructor=b,a.fn.modal.noConflict=function(){return a.fn.modal=c,this},a(document).on("click.modal.data-api",'[data-toggle="modal"]',function(b){var c=a(this),d=c.attr("href"),e=a(c.attr("data-target")||d&&d.replace(/.*(?=#[^\s]+$)/,"")),f=e.data("modal")?"toggle":a.extend({remote:!/#/.test(d)&&d},e.data(),c.data());b.preventDefault(),e.modal(f).one("hide",function(){c.focus()})})}(window.jQuery),!function(a){function d(){a(b).each(function(){e(a(this)).removeClass("open")})}function e(b){var c=b.attr("data-target"),d;c||(c=b.attr("href"),c=c&&/#/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,"")),d=c&&a(c);if(!d||!d.length)d=b.parent();return d}var b="[data-toggle=dropdown]",c=function(b){var c=a(b).on("click.dropdown.data-api",this.toggle);a("html").on("click.dropdown.data-api",function(){c.parent().removeClass("open")})};c.prototype={constructor:c,toggle:function(b){var c=a(this),f,g;if(c.is(".disabled, :disabled"))return;return f=e(c),g=f.hasClass("open"),d(),g||f.toggleClass("open"),c.focus(),!1},keydown:function(c){var d,f,g,h,i,j;if(!/(38|40|27)/.test(c.keyCode))return;d=a(this),c.preventDefault(),c.stopPropagation();if(d.is(".disabled, :disabled"))return;h=e(d),i=h.hasClass("open");if(!i||i&&c.keyCode==27)return c.which==27&&h.find(b).focus(),d.click();f=a("[role=menu] li:not(.divider):visible a",h);if(!f.length)return;j=f.index(f.filter(":focus")),c.keyCode==38&&j>0&&j--,c.keyCode==40&&j<f.length-1&&j++,~j||(j=0),f.eq(j).focus()}};var f=a.fn.dropdown;a.fn.dropdown=function(b){return this.each(function(){var d=a(this),e=d.data("dropdown");e||d.data("dropdown",e=new c(this)),typeof b=="string"&&e[b].call(d)})},a.fn.dropdown.Constructor=c,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=f,this},a(document).on("click.dropdown.data-api",d).on("click.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.dropdown-menu",function(a){a.stopPropagation()}).on("click.dropdown.data-api",b,c.prototype.toggle).on("keydown.dropdown.data-api",b+", [role=menu]",c.prototype.keydown)}(window.jQuery),!function(a){function b(b,c){var d=a.proxy(this.process,this),e=a(b).is("body")?a(window):a(b),f;this.options=a.extend({},a.fn.scrollspy.defaults,c),this.$scrollElement=e.on("scroll.scroll-spy.data-api",d),this.selector=(this.options.target||(f=a(b).attr("href"))&&f.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.$body=a("body"),this.refresh(),this.process()}b.prototype={constructor:b,refresh:function(){var b=this,c;this.offsets=a([]),this.targets=a([]),c=this.$body.find(this.selector).map(function(){var c=a(this),d=c.data("target")||c.attr("href"),e=/^#\w/.test(d)&&a(d);return e&&e.length&&[[e.position().top+(!a.isWindow(b.$scrollElement.get(0))&&b.$scrollElement.scrollTop()),d]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},process:function(){var a=this.$scrollElement.scrollTop()+this.options.offset,b=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,c=b-this.$scrollElement.height(),d=this.offsets,e=this.targets,f=this.activeTarget,g;if(a>=c)return f!=(g=e.last()[0])&&this.activate(g);for(g=d.length;g--;)f!=e[g]&&a>=d[g]&&(!d[g+1]||a<=d[g+1])&&this.activate(e[g])},activate:function(b){var c,d;this.activeTarget=b,a(this.selector).parent(".active").removeClass("active"),d=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',c=a(d).parent("li").addClass("active"),c.parent(".dropdown-menu").length&&(c=c.closest("li.dropdown").addClass("active")),c.trigger("activate")}};var c=a.fn.scrollspy;a.fn.scrollspy=function(c){return this.each(function(){var d=a(this),e=d.data("scrollspy"),f=typeof c=="object"&&c;e||d.data("scrollspy",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.scrollspy.Constructor=b,a.fn.scrollspy.defaults={offset:10},a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=c,this},a(window).on("load",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);b.scrollspy(b.data())})})}(window.jQuery),!function(a){var b=function(b){this.element=a(b)};b.prototype={constructor:b,show:function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.attr("data-target"),e,f,g;d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,""));if(b.parent("li").hasClass("active"))return;e=c.find(".active:last a")[0],g=a.Event("show",{relatedTarget:e}),b.trigger(g);if(g.isDefaultPrevented())return;f=a(d),this.activate(b.parent("li"),c),this.activate(f,f.parent(),function(){b.trigger({type:"shown",relatedTarget:e})})},activate:function(b,c,d){function g(){e.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),f?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var e=c.find("> .active"),f=d&&a.support.transition&&e.hasClass("fade");f?e.one(a.support.transition.end,g):g(),e.removeClass("in")}};var c=a.fn.tab;a.fn.tab=function(c){return this.each(function(){var d=a(this),e=d.data("tab");e||d.data("tab",e=new b(this)),typeof c=="string"&&e[c]()})},a.fn.tab.Constructor=b,a.fn.tab.noConflict=function(){return a.fn.tab=c,this},a(document).on("click.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(b){b.preventDefault(),a(this).tab("show")})}(window.jQuery),!function(a){var b=function(a,b){this.init("tooltip",a,b)};b.prototype={constructor:b,init:function(b,c,d){var e,f,g,h,i;this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.enabled=!0,g=this.options.trigger.split(" ");for(i=g.length;i--;)h=g[i],h=="click"?this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this)):h!="manual"&&(e=h=="hover"?"mouseenter":"focus",f=h=="hover"?"mouseleave":"blur",this.$element.on(e+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(f+"."+this.type,this.options.selector,a.proxy(this.leave,this)));this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},getOptions:function(b){return b=a.extend({},a.fn[this.type].defaults,this.$element.data(),b),b.delay&&typeof b.delay=="number"&&(b.delay={show:b.delay,hide:b.delay}),b},enter:function(b){var c=a.fn[this.type].defaults,d={},e;this._options&&a.each(this._options,function(a,b){c[a]!=b&&(d[a]=b)},this),e=a(b.currentTarget)[this.type](d).data(this.type);if(!e.options.delay||!e.options.delay.show)return e.show();clearTimeout(this.timeout),e.hoverState="in",this.timeout=setTimeout(function(){e.hoverState=="in"&&e.show()},e.options.delay.show)},leave:function(b){var c=a(b.currentTarget)[this.type](this._options).data(this.type);this.timeout&&clearTimeout(this.timeout);if(!c.options.delay||!c.options.delay.hide)return c.hide();c.hoverState="out",this.timeout=setTimeout(function(){c.hoverState=="out"&&c.hide()},c.options.delay.hide)},show:function(){var b,c,d,e,f,g,h=a.Event("show");if(this.hasContent()&&this.enabled){this.$element.trigger(h);if(h.isDefaultPrevented())return;b=this.tip(),this.setContent(),this.options.animation&&b.addClass("fade"),f=typeof this.options.placement=="function"?this.options.placement.call(this,b[0],this.$element[0]):this.options.placement,b.detach().css({top:0,left:0,display:"block"}),this.options.container?b.appendTo(this.options.container):b.insertAfter(this.$element),c=this.getPosition(),d=b[0].offsetWidth,e=b[0].offsetHeight;switch(f){case"bottom":g={top:c.top+c.height,left:c.left+c.width/2-d/2};break;case"top":g={top:c.top-e,left:c.left+c.width/2-d/2};break;case"left":g={top:c.top+c.height/2-e/2,left:c.left-d};break;case"right":g={top:c.top+c.height/2-e/2,left:c.left+c.width}}this.applyPlacement(g,f),this.$element.trigger("shown")}},applyPlacement:function(a,b){var c=this.tip(),d=c[0].offsetWidth,e=c[0].offsetHeight,f,g,h,i;c.offset(a).addClass(b).addClass("in"),f=c[0].offsetWidth,g=c[0].offsetHeight,b=="top"&&g!=e&&(a.top=a.top+e-g,i=!0),b=="bottom"||b=="top"?(h=0,a.left<0&&(h=a.left*-2,a.left=0,c.offset(a),f=c[0].offsetWidth,g=c[0].offsetHeight),this.replaceArrow(h-d+f,f,"left")):this.replaceArrow(g-e,g,"top"),i&&c.offset(a)},replaceArrow:function(a,b,c){this.arrow().css(c,a?50*(1-a/b)+"%":"")},setContent:function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},hide:function(){function e(){var b=setTimeout(function(){c.off(a.support.transition.end).detach()},500);c.one(a.support.transition.end,function(){clearTimeout(b),c.detach()})}var b=this,c=this.tip(),d=a.Event("hide");this.$element.trigger(d);if(d.isDefaultPrevented())return;return c.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?e():c.detach(),this.$element.trigger("hidden"),this},fixTitle:function(){var a=this.$element;(a.attr("title")||typeof a.attr("data-original-title")!="string")&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},hasContent:function(){return this.getTitle()},getPosition:function(){var b=this.$element[0];return a.extend({},typeof b.getBoundingClientRect=="function"?b.getBoundingClientRect():{width:b.offsetWidth,height:b.offsetHeight},this.$element.offset())},getTitle:function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||(typeof c.title=="function"?c.title.call(b[0]):c.title),a},tip:function(){return this.$tip=this.$tip||a(this.options.template)},arrow:function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},validate:function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},enable:function(){this.enabled=!0},disable:function(){this.enabled=!1},toggleEnabled:function(){this.enabled=!this.enabled},toggle:function(b){var c=b?a(b.currentTarget)[this.type](this._options).data(this.type):this;c.tip().hasClass("in")?c.hide():c.show()},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type)}};var c=a.fn.tooltip;a.fn.tooltip=function(c){return this.each(function(){var d=a(this),e=d.data("tooltip"),f=typeof c=="object"&&c;e||d.data("tooltip",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.tooltip.Constructor=b,a.fn.tooltip.defaults={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1},a.fn.tooltip.noConflict=function(){return a.fn.tooltip=c,this}}(window.jQuery),!function(a){var b=function(a,b){this.init("popover",a,b)};b.prototype=a.extend({},a.fn.tooltip.Constructor.prototype,{constructor:b,setContent:function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content")[this.options.html?"html":"text"](c),a.removeClass("fade top bottom left right in")},hasContent:function(){return this.getTitle()||this.getContent()},getContent:function(){var a,b=this.$element,c=this.options;return a=(typeof c.content=="function"?c.content.call(b[0]):c.content)||b.attr("data-content"),a},tip:function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type)}});var c=a.fn.popover;a.fn.popover=function(c){return this.each(function(){var d=a(this),e=d.data("popover"),f=typeof c=="object"&&c;e||d.data("popover",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.popover.Constructor=b,a.fn.popover.defaults=a.extend({},a.fn.tooltip.defaults,{placement:"right",trigger:"click",content:"",template:'<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),a.fn.popover.noConflict=function(){return a.fn.popover=c,this}}(window.jQuery),!function(a){var b=function(b,c){this.options=a.extend({},a.fn.affix.defaults,c),this.$window=a(window).on("scroll.affix.data-api",a.proxy(this.checkPosition,this)).on("click.affix.data-api",a.proxy(function(){setTimeout(a.proxy(this.checkPosition,this),1)},this)),this.$element=a(b),this.checkPosition()};b.prototype.checkPosition=function(){if(!this.$element.is(":visible"))return;var b=a(document).height(),c=this.$window.scrollTop(),d=this.$element.offset(),e=this.options.offset,f=e.bottom,g=e.top,h="affix affix-top affix-bottom",i;typeof e!="object"&&(f=g=e),typeof g=="function"&&(g=e.top()),typeof f=="function"&&(f=e.bottom()),i=this.unpin!=null&&c+this.unpin<=d.top?!1:f!=null&&d.top+this.$element.height()>=b-f?"bottom":g!=null&&c<=g?"top":!1;if(this.affixed===i)return;this.affixed=i,this.unpin=i=="bottom"?d.top-c:null,this.$element.removeClass(h).addClass("affix"+(i?"-"+i:""))};var c=a.fn.affix;a.fn.affix=function(c){return this.each(function(){var d=a(this),e=d.data("affix"),f=typeof c=="object"&&c;e||d.data("affix",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.affix.Constructor=b,a.fn.affix.defaults={offset:0},a.fn.affix.noConflict=function(){return a.fn.affix=c,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var b=a(this),c=b.data();c.offset=c.offset||{},c.offsetBottom&&(c.offset.bottom=c.offsetBottom),c.offsetTop&&(c.offset.top=c.offsetTop),b.affix(c)})})}(window.jQuery),!function(a){var b='[data-dismiss="alert"]',c=function(c){a(c).on("click",b,this.close)};c.prototype.close=function(b){function f(){e.trigger("closed").remove()}var c=a(this),d=c.attr("data-target"),e;d||(d=c.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),e=a(d),b&&b.preventDefault(),e.length||(e=c.hasClass("alert")?c:c.parent()),e.trigger(b=a.Event("close"));if(b.isDefaultPrevented())return;e.removeClass("in"),a.support.transition&&e.hasClass("fade")?e.on(a.support.transition.end,f):f()};var d=a.fn.alert;a.fn.alert=function(b){return this.each(function(){var d=a(this),e=d.data("alert");e||d.data("alert",e=new c(this)),typeof b=="string"&&e[b].call(d)})},a.fn.alert.Constructor=c,a.fn.alert.noConflict=function(){return a.fn.alert=d,this},a(document).on("click.alert.data-api",b,c.prototype.close)}(window.jQuery),!function(a){var b=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.button.defaults,c)};b.prototype.setState=function(a){var b="disabled",c=this.$element,d=c.data(),e=c.is("input")?"val":"html";a+="Text",d.resetText||c.data("resetText",c[e]()),c[e](d[a]||this.options[a]),setTimeout(function(){a=="loadingText"?c.addClass(b).attr(b,b):c.removeClass(b).removeAttr(b)},0)},b.prototype.toggle=function(){var a=this.$element.closest('[data-toggle="buttons-radio"]');a&&a.find(".active").removeClass("active"),this.$element.toggleClass("active")};var c=a.fn.button;a.fn.button=function(c){return this.each(function(){var d=a(this),e=d.data("button"),f=typeof c=="object"&&c;e||d.data("button",e=new b(this,f)),c=="toggle"?e.toggle():c&&e.setState(c)})},a.fn.button.defaults={loadingText:"loading..."},a.fn.button.Constructor=b,a.fn.button.noConflict=function(){return a.fn.button=c,this},a(document).on("click.button.data-api","[data-toggle^=button]",function(b){var c=a(b.target);c.hasClass("btn")||(c=c.closest(".btn")),c.button("toggle")})}(window.jQuery),!function(a){var b=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.collapse.defaults,c),this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};b.prototype={constructor:b,dimension:function(){var a=this.$element.hasClass("width");return a?"width":"height"},show:function(){var b,c,d,e;if(this.transitioning||this.$element.hasClass("in"))return;b=this.dimension(),c=a.camelCase(["scroll",b].join("-")),d=this.$parent&&this.$parent.find("> .accordion-group > .in");if(d&&d.length){e=d.data("collapse");if(e&&e.transitioning)return;d.collapse("hide"),e||d.data("collapse",null)}this.$element[b](0),this.transition("addClass",a.Event("show"),"shown"),a.support.transition&&this.$element[b](this.$element[0][c])},hide:function(){var b;if(this.transitioning||!this.$element.hasClass("in"))return;b=this.dimension(),this.reset(this.$element[b]()),this.transition("removeClass",a.Event("hide"),"hidden"),this.$element[b](0)},reset:function(a){var b=this.dimension();return this.$element.removeClass("collapse")[b](a||"auto")[0].offsetWidth,this.$element[a!==null?"addClass":"removeClass"]("collapse"),this},transition:function(b,c,d){var e=this,f=function(){c.type=="show"&&e.reset(),e.transitioning=0,e.$element.trigger(d)};this.$element.trigger(c);if(c.isDefaultPrevented())return;this.transitioning=1,this.$element[b]("in"),a.support.transition&&this.$element.hasClass("collapse")?this.$element.one(a.support.transition.end,f):f()},toggle:function(){this[this.$element.hasClass("in")?"hide":"show"]()}};var c=a.fn.collapse;a.fn.collapse=function(c){return this.each(function(){var d=a(this),e=d.data("collapse"),f=a.extend({},a.fn.collapse.defaults,d.data(),typeof c=="object"&&c);e||d.data("collapse",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.collapse.defaults={toggle:!0},a.fn.collapse.Constructor=b,a.fn.collapse.noConflict=function(){return a.fn.collapse=c,this},a(document).on("click.collapse.data-api","[data-toggle=collapse]",function(b){var c=a(this),d,e=c.attr("data-target")||b.preventDefault()||(d=c.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""),f=a(e).data("collapse")?"toggle":c.data();c[a(e).hasClass("in")?"addClass":"removeClass"]("collapsed"),a(e).collapse(f)})}(window.jQuery),!function(a){var b=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.options.pause=="hover"&&this.$element.on("mouseenter",a.proxy(this.pause,this)).on("mouseleave",a.proxy(this.cycle,this))};b.prototype={cycle:function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},getActiveIndex:function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},to:function(b){var c=this.getActiveIndex(),d=this;if(b>this.$items.length-1||b<0)return;return this.sliding?this.$element.one("slid",function(){d.to(b)}):c==b?this.pause().cycle():this.slide(b>c?"next":"prev",a(this.$items[b]))},pause:function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition.end&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),clearInterval(this.interval),this.interval=null,this},next:function(){if(this.sliding)return;return this.slide("next")},prev:function(){if(this.sliding)return;return this.slide("prev")},slide:function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g=b=="next"?"left":"right",h=b=="next"?"first":"last",i=this,j;this.sliding=!0,f&&this.pause(),e=e.length?e:this.$element.find(".item")[h](),j=a.Event("slide",{relatedTarget:e[0],direction:g});if(e.hasClass("active"))return;this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid",function(){var b=a(i.$indicators.children()[i.getActiveIndex()]);b&&b.addClass("active")}));if(a.support.transition&&this.$element.hasClass("slide")){this.$element.trigger(j);if(j.isDefaultPrevented())return;e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),this.$element.one(a.support.transition.end,function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger("slid")},0)})}else{this.$element.trigger(j);if(j.isDefaultPrevented())return;d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger("slid")}return f&&this.cycle(),this}};var c=a.fn.carousel;a.fn.carousel=function(c){return this.each(function(){var d=a(this),e=d.data("carousel"),f=a.extend({},a.fn.carousel.defaults,typeof c=="object"&&c),g=typeof c=="string"?c:f.slide;e||d.data("carousel",e=new b(this,f)),typeof c=="number"?e.to(c):g?e[g]():f.interval&&e.pause().cycle()})},a.fn.carousel.defaults={interval:5e3,pause:"hover"},a.fn.carousel.Constructor=b,a.fn.carousel.noConflict=function(){return a.fn.carousel=c,this},a(document).on("click.carousel.data-api","[data-slide], [data-slide-to]",function(b){var c=a(this),d,e=a(c.attr("data-target")||(d=c.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,"")),f=a.extend({},e.data(),c.data()),g;e.carousel(f),(g=c.attr("data-slide-to"))&&e.data("carousel").pause().to(g).cycle(),b.preventDefault()})}(window.jQuery),!function(a){var b=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.typeahead.defaults,c),this.matcher=this.options.matcher||this.matcher,this.sorter=this.options.sorter||this.sorter,this.highlighter=this.options.highlighter||this.highlighter,this.updater=this.options.updater||this.updater,this.source=this.options.source,this.$menu=a(this.options.menu),this.shown=!1,this.listen()};b.prototype={constructor:b,select:function(){var a=this.$menu.find(".active").attr("data-value");return this.$element.val(this.updater(a)).change(),this.hide()},updater:function(a){return a},show:function(){var b=a.extend({},this.$element.position(),{height:this.$element[0].offsetHeight});return this.$menu.insertAfter(this.$element).css({top:b.top+b.height,left:b.left}).show(),this.shown=!0,this},hide:function(){return this.$menu.hide(),this.shown=!1,this},lookup:function(b){var c;return this.query=this.$element.val(),!this.query||this.query.length<this.options.minLength?this.shown?this.hide():this:(c=a.isFunction(this.source)?this.source(this.query,a.proxy(this.process,this)):this.source,c?this.process(c):this)},process:function(b){var c=this;return b=a.grep(b,function(a){return c.matcher(a)}),b=this.sorter(b),b.length?this.render(b.slice(0,this.options.items)).show():this.shown?this.hide():this},matcher:function(a){return~a.toLowerCase().indexOf(this.query.toLowerCase())},sorter:function(a){var b=[],c=[],d=[],e;while(e=a.shift())e.toLowerCase().indexOf(this.query.toLowerCase())?~e.indexOf(this.query)?c.push(e):d.push(e):b.push(e);return b.concat(c,d)},highlighter:function(a){var b=this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&");return a.replace(new RegExp("("+b+")","ig"),function(a,b){return"<strong>"+b+"</strong>"})},render:function(b){var c=this;return b=a(b).map(function(b,d){return b=a(c.options.item).attr("data-value",d),b.find("a").html(c.highlighter(d)),b[0]}),b.first().addClass("active"),this.$menu.html(b),this},next:function(b){var c=this.$menu.find(".active").removeClass("active"),d=c.next();d.length||(d=a(this.$menu.find("li")[0])),d.addClass("active")},prev:function(a){var b=this.$menu.find(".active").removeClass("active"),c=b.prev();c.length||(c=this.$menu.find("li").last()),c.addClass("active")},listen:function(){this.$element.on("focus",a.proxy(this.focus,this)).on("blur",a.proxy(this.blur,this)).on("keypress",a.proxy(this.keypress,this)).on("keyup",a.proxy(this.keyup,this)),this.eventSupported("keydown")&&this.$element.on("keydown",a.proxy(this.keydown,this)),this.$menu.on("click",a.proxy(this.click,this)).on("mouseenter","li",a.proxy(this.mouseenter,this)).on("mouseleave","li",a.proxy(this.mouseleave,this))},eventSupported:function(a){var b=a in this.$element;return b||(this.$element.setAttribute(a,"return;"),b=typeof this.$element[a]=="function"),b},move:function(a){if(!this.shown)return;switch(a.keyCode){case 9:case 13:case 27:a.preventDefault();break;case 38:a.preventDefault(),this.prev();break;case 40:a.preventDefault(),this.next()}a.stopPropagation()},keydown:function(b){this.suppressKeyPressRepeat=~a.inArray(b.keyCode,[40,38,9,13,27]),this.move(b)},keypress:function(a){if(this.suppressKeyPressRepeat)return;this.move(a)},keyup:function(a){switch(a.keyCode){case 40:case 38:case 16:case 17:case 18:break;case 9:case 13:if(!this.shown)return;this.select();break;case 27:if(!this.shown)return;this.hide();break;default:this.lookup()}a.stopPropagation(),a.preventDefault()},focus:function(a){this.focused=!0},blur:function(a){this.focused=!1,!this.mousedover&&this.shown&&this.hide()},click:function(a){a.stopPropagation(),a.preventDefault(),this.select(),this.$element.focus()},mouseenter:function(b){this.mousedover=!0,this.$menu.find(".active").removeClass("active"),a(b.currentTarget).addClass("active")},mouseleave:function(a){this.mousedover=!1,!this.focused&&this.shown&&this.hide()}};var c=a.fn.typeahead;a.fn.typeahead=function(c){return this.each(function(){var d=a(this),e=d.data("typeahead"),f=typeof c=="object"&&c;e||d.data("typeahead",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.typeahead.defaults={source:[],items:8,menu:'<ul class="typeahead dropdown-menu"></ul>',item:'<li><a href="#"></a></li>',minLength:1},a.fn.typeahead.Constructor=b,a.fn.typeahead.noConflict=function(){return a.fn.typeahead=c,this},a(document).on("focus.typeahead.data-api",'[data-provide="typeahead"]',function(b){var c=a(this);if(c.data("typeahead"))return;c.typeahead(c.data())})}(window.jQuery)

File: public/js/bootstrap4.min.js
Match lines: 1
6|!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("jquery"),require("popper.js")):"function"==typeof define&&define.amd?define(["exports","jquery","popper.js"],e):e(t.bootstrap={},t.jQuery,t.Popper)}(this,function(t,e,h){"use strict";function i(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}function s(t,e,n){return e&&i(t.prototype,e),n&&i(t,n),t}function l(r){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{},e=Object.keys(o);"function"==typeof Object.getOwnPropertySymbols&&(e=e.concat(Object.getOwnPropertySymbols(o).filter(function(t){return Object.getOwnPropertyDescriptor(o,t).enumerable}))),e.forEach(function(t){var e,n,i;e=r,i=o[n=t],n in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i})}return r}e=e&&e.hasOwnProperty("default")?e.default:e,h=h&&h.hasOwnProperty("default")?h.default:h;var r,n,o,a,c,u,f,d,g,_,m,p,v,y,E,C,T,b,S,I,A,D,w,N,O,k,P,j,H,L,R,x,W,U,q,F,K,M,Q,B,V,Y,z,J,Z,G,$,X,tt,et,nt,it,rt,ot,st,at,lt,ct,ht,ut,ft,dt,gt,_t,mt,pt,vt,yt,Et,Ct,Tt,bt,St,It,At,Dt,wt,Nt,Ot,kt,Pt,jt,Ht,Lt,Rt,xt,Wt,Ut,qt,Ft,Kt,Mt,Qt,Bt,Vt,Yt,zt,Jt,Zt,Gt,$t,Xt,te,ee,ne,ie,re,oe,se,ae,le,ce,he,ue,fe,de,ge,_e,me,pe,ve,ye,Ee,Ce,Te,be,Se,Ie,Ae,De,we,Ne,Oe,ke,Pe,je,He,Le,Re,xe,We,Ue,qe,Fe,Ke,Me,Qe,Be,Ve,Ye,ze,Je,Ze,Ge,$e,Xe,tn,en,nn,rn,on,sn,an,ln,cn,hn,un,fn,dn,gn,_n,mn,pn,vn,yn,En,Cn,Tn,bn,Sn,In,An,Dn,wn,Nn,On,kn,Pn,jn,Hn,Ln,Rn,xn,Wn,Un,qn,Fn=function(i){var e="transitionend";function t(t){var e=this,n=!1;return i(this).one(l.TRANSITION_END,function(){n=!0}),setTimeout(function(){n||l.triggerTransitionEnd(e)},t),this}var l={TRANSITION_END:"bsTransitionEnd",getUID:function(t){for(;t+=~~(1e6*Math.random()),document.getElementById(t););return t},getSelectorFromElement:function(t){var e=t.getAttribute("data-target");e&&"#"!==e||(e=t.getAttribute("href")||"");try{return document.querySelector(e)?e:null}catch(t){return null}},getTransitionDurationFromElement:function(t){if(!t)return 0;var e=i(t).css("transition-duration");return parseFloat(e)?(e=e.split(",")[0],1e3*parseFloat(e)):0},reflow:function(t){return t.offsetHeight},triggerTransitionEnd:function(t){i(t).trigger(e)},supportsTransitionEnd:function(){return Boolean(e)},isElement:function(t){return(t[0]||t).nodeType},typeCheckConfig:function(t,e,n){for(var i in n)if(Object.prototype.hasOwnProperty.call(n,i)){var r=n[i],o=e[i],s=o&&l.isElement(o)?"element":(a=o,{}.toString.call(a).match(/\s([a-z]+)/i)[1].toLowerCase());if(!new RegExp(r).test(s))throw new Error(t.toUpperCase()+': Option "'+i+'" provided type "'+s+'" but expected type "'+r+'".')}var a}};return i.fn.emulateTransitionEnd=t,i.event.special[l.TRANSITION_END]={bindType:e,delegateType:e,handle:function(t){if(i(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}},l}(e),Kn=(n="alert",a="."+(o="bs.alert"),c=(r=e).fn[n],u={CLOSE:"close"+a,CLOSED:"closed"+a,CLICK_DATA_API:"click"+a+".data-api"},f="alert",d="fade",g="show",_=function(){function i(t){this._element=t}var t=i.prototype;return t.close=function(t){var e=this._element;t&&(e=this._getRootElement(t)),this._triggerCloseEvent(e).isDefaultPrevented()||this._removeElement(e)},t.dispose=function(){r.removeData(this._element,o),this._element=null},t._getRootElement=function(t){var e=Fn.getSelectorFromElement(t),n=!1;return e&&(n=document.querySelector(e)),n||(n=r(t).closest("."+f)[0]),n},t._triggerCloseEvent=function(t){var e=r.Event(u.CLOSE);return r(t).trigger(e),e},t._removeElement=function(e){var n=this;if(r(e).removeClass(g),r(e).hasClass(d)){var t=Fn.getTransitionDurationFromElement(e);r(e).one(Fn.TRANSITION_END,function(t){return n._destroyElement(e,t)}).emulateTransitionEnd(t)}else this._destroyElement(e)},t._destroyElement=function(t){r(t).detach().trigger(u.CLOSED).remove()},i._jQueryInterface=function(n){return this.each(function(){var t=r(this),e=t.data(o);e||(e=new i(this),t.data(o,e)),"close"===n&&e[n](this)})},i._handleDismiss=function(e){return function(t){t&&t.preventDefault(),e.close(this)}},s(i,null,[{key:"VERSION",get:function(){return"4.1.3"}}]),i}(),r(document).on(u.CLICK_DATA_API,'[data-dismiss="alert"]',_._handleDismiss(new _)),r.fn[n]=_._jQueryInterface,r.fn[n].Constructor=_,r.fn[n].noConflict=function(){return r.fn[n]=c,_._jQueryInterface},_),Mn=(p="button",y="."+(v="bs.button"),E=".data-api",C=(m=e).fn[p],T="active",b="btn",I='[data-toggle^="button"]',A='[data-toggle="buttons"]',D="input",w=".active",N=".btn",O={CLICK_DATA_API:"click"+y+E,FOCUS_BLUR_DATA_API:(S="focus")+y+E+" blur"+y+E},k=function(){function n(t){this._element=t}var t=n.prototype;return t.toggle=function(){var t=!0,e=!0,n=m(this._element).closest(A)[0];if(n){var i=this._element.querySelector(D);if(i){if("radio"===i.type)if(i.checked&&this._element.classList.contains(T))t=!1;else{var r=n.querySelector(w);r&&m(r).removeClass(T)}if(t){if(i.hasAttribute("disabled")||n.hasAttribute("disabled")||i.classList.contains("disabled")||n.classList.contains("disabled"))return;i.checked=!this._element.classList.contains(T),m(i).trigger("change")}i.focus(),e=!1}}e&&this._element.setAttribute("aria-pressed",!this._element.classList.contains(T)),t&&m(this._element).toggleClass(T)},t.dispose=function(){m.removeData(this._element,v),this._element=null},n._jQueryInterface=function(e){return this.each(function(){var t=m(this).data(v);t||(t=new n(this),m(this).data(v,t)),"toggle"===e&&t[e]()})},s(n,null,[{key:"VERSION",get:function(){return"4.1.3"}}]),n}(),m(document).on(O.CLICK_DATA_API,I,function(t){t.preventDefault();var e=t.target;m(e).hasClass(b)||(e=m(e).closest(N)),k._jQueryInterface.call(m(e),"toggle")}).on(O.FOCUS_BLUR_DATA_API,I,function(t){var e=m(t.target).closest(N)[0];m(e).toggleClass(S,/^focus(in)?$/.test(t.type))}),m.fn[p]=k._jQueryInterface,m.fn[p].Constructor=k,m.fn[p].noConflict=function(){return m.fn[p]=C,k._jQueryInterface},k),Qn=(j="carousel",L="."+(H="bs.carousel"),R=".data-api",x=(P=e).fn[j],W={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0},U={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean"},q="next",F="prev",K="left",M="right",Q={SLIDE:"slide"+L,SLID:"slid"+L,KEYDOWN:"keydown"+L,MOUSEENTER:"mouseenter"+L,MOUSELEAVE:"mouseleave"+L,TOUCHEND:"touchend"+L,LOAD_DATA_API:"load"+L+R,CLICK_DATA_API:"click"+L+R},B="carousel",V="active",Y="slide",z="carousel-item-right",J="carousel-item-left",Z="carousel-item-next",G="carousel-item-prev",$=".active",X=".active.carousel-item",tt=".carousel-item",et=".carousel-item-next, .carousel-item-prev",nt=".carousel-indicators",it="[data-slide], [data-slide-to]",rt='[data-ride="carousel"]',ot=function(){function o(t,e){this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this._config=this._getConfig(e),this._element=P(t)[0],this._indicatorsElement=this._element.querySelector(nt),this._addEventListeners()}var t=o.prototype;return t.next=function(){this._isSliding||this._slide(q)},t.nextWhenVisible=function(){!document.hidden&&P(this._element).is(":visible")&&"hidden"!==P(this._element).css("visibility")&&this.next()},t.prev=function(){this._isSliding||this._slide(F)},t.pause=function(t){t||(this._isPaused=!0),this._element.querySelector(et)&&(Fn.triggerTransitionEnd(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null},t.cycle=function(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config.interval&&!this._isPaused&&(this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))},t.to=function(t){var e=this;this._activeElement=this._element.querySelector(X);var n=this._getItemIndex(this._activeElement);if(!(t>this._items.length-1||t<0))if(this._isSliding)P(this._element).one(Q.SLID,function(){return e.to(t)});else{if(n===t)return this.pause(),void this.cycle();var i=n<t?q:F;this._slide(i,this._items[t])}},t.dispose=function(){P(this._element).off(L),P.removeData(this._element,H),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null},t._getConfig=function(t){return t=l({},W,t),Fn.typeCheckConfig(j,t,U),t},t._addEventListeners=function(){var e=this;this._config.keyboard&&P(this._element).on(Q.KEYDOWN,function(t){return e._keydown(t)}),"hover"===this._config.pause&&(P(this._element).on(Q.MOUSEENTER,function(t){return e.pause(t)}).on(Q.MOUSELEAVE,function(t){return e.cycle(t)}),"ontouchstart"in document.documentElement&&P(this._element).on(Q.TOUCHEND,function(){e.pause(),e.touchTimeout&&clearTimeout(e.touchTimeout),e.touchTimeout=setTimeout(function(t){return e.cycle(t)},500+e._config.interval)}))},t._keydown=function(t){if(!/input|textarea/i.test(t.target.tagName))switch(t.which){case 37:t.preventDefault(),this.prev();break;case 39:t.preventDefault(),this.next()}},t._getItemIndex=function(t){return this._items=t&&t.parentNode?[].slice.call(t.parentNode.querySelectorAll(tt)):[],this._items.indexOf(t)},t._getItemByDirection=function(t,e){var n=t===q,i=t===F,r=this._getItemIndex(e),o=this._items.length-1;if((i&&0===r||n&&r===o)&&!this._config.wrap)return e;var s=(r+(t===F?-1:1))%this._items.length;return-1===s?this._items[this._items.length-1]:this._items[s]},t._triggerSlideEvent=function(t,e){var n=this._getItemIndex(t),i=this._getItemIndex(this._element.querySelector(X)),r=P.Event(Q.SLIDE,{relatedTarget:t,direction:e,from:i,to:n});return P(this._element).trigger(r),r},t._setActiveIndicatorElement=function(t){if(this._indicatorsElement){var e=[].slice.call(this._indicatorsElement.querySelectorAll($));P(e).removeClass(V);var n=this._indicatorsElement.children[this._getItemIndex(t)];n&&P(n).addClass(V)}},t._slide=function(t,e){var n,i,r,o=this,s=this._element.querySelector(X),a=this._getItemIndex(s),l=e||s&&this._getItemByDirection(t,s),c=this._getItemIndex(l),h=Boolean(this._interval);if(t===q?(n=J,i=Z,r=K):(n=z,i=G,r=M),l&&P(l).hasClass(V))this._isSliding=!1;else if(!this._triggerSlideEvent(l,r).isDefaultPrevented()&&s&&l){this._isSliding=!0,h&&this.pause(),this._setActiveIndicatorElement(l);var u=P.Event(Q.SLID,{relatedTarget:l,direction:r,from:a,to:c});if(P(this._element).hasClass(Y)){P(l).addClass(i),Fn.reflow(l),P(s).addClass(n),P(l).addClass(n);var f=Fn.getTransitionDurationFromElement(s);P(s).one(Fn.TRANSITION_END,function(){P(l).removeClass(n+" "+i).addClass(V),P(s).removeClass(V+" "+i+" "+n),o._isSliding=!1,setTimeout(function(){return P(o._element).trigger(u)},0)}).emulateTransitionEnd(f)}else P(s).removeClass(V),P(l).addClass(V),this._isSliding=!1,P(this._element).trigger(u);h&&this.cycle()}},o._jQueryInterface=function(i){return this.each(function(){var t=P(this).data(H),e=l({},W,P(this).data());"object"==typeof i&&(e=l({},e,i));var n="string"==typeof i?i:e.slide;if(t||(t=new o(this,e),P(this).data(H,t)),"number"==typeof i)t.to(i);else if("string"==typeof n){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}else e.interval&&(t.pause(),t.cycle())})},o._dataApiClickHandler=function(t){var e=Fn.getSelectorFromElement(this);if(e){var n=P(e)[0];if(n&&P(n).hasClass(B)){var i=l({},P(n).data(),P(this).data()),r=this.getAttribute("data-slide-to");r&&(i.interval=!1),o._jQueryInterface.call(P(n),i),r&&P(n).data(H).to(r),t.preventDefault()}}},s(o,null,[{key:"VERSION",get:function(){return"4.1.3"}},{key:"Default",get:function(){return W}}]),o}(),P(document).on(Q.CLICK_DATA_API,it,ot._dataApiClickHandler),P(window).on(Q.LOAD_DATA_API,function(){for(var t=[].slice.call(document.querySelectorAll(rt)),e=0,n=t.length;e<n;e++){var i=P(t[e]);ot._jQueryInterface.call(i,i.data())}}),P.fn[j]=ot._jQueryInterface,P.fn[j].Constructor=ot,P.fn[j].noConflict=function(){return P.fn[j]=x,ot._jQueryInterface},ot),Bn=(at="collapse",ct="."+(lt="bs.collapse"),ht=(st=e).fn[at],ut={toggle:!0,parent:""},ft={toggle:"boolean",parent:"(string|element)"},dt={SHOW:"show"+ct,SHOWN:"shown"+ct,HIDE:"hide"+ct,HIDDEN:"hidden"+ct,CLICK_DATA_API:"click"+ct+".data-api"},gt="show",_t="collapse",mt="collapsing",pt="collapsed",vt="width",yt="height",Et=".show, .collapsing",Ct='[data-toggle="collapse"]',Tt=function(){function a(e,t){this._isTransitioning=!1,this._element=e,this._config=this._getConfig(t),this._triggerArray=st.makeArray(document.querySelectorAll('[data-toggle="collapse"][href="#'+e.id+'"],[data-toggle="collapse"][data-target="#'+e.id+'"]'));for(var n=[].slice.call(document.querySelectorAll(Ct)),i=0,r=n.length;i<r;i++){var o=n[i],s=Fn.getSelectorFromElement(o),a=[].slice.call(document.querySelectorAll(s)).filter(function(t){return t===e});null!==s&&0<a.length&&(this._selector=s,this._triggerArray.push(o))}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}var t=a.prototype;return t.toggle=function(){st(this._element).hasClass(gt)?this.hide():this.show()},t.show=function(){var t,e,n=this;if(!this._isTransitioning&&!st(this._element).hasClass(gt)&&(this._parent&&0===(t=[].slice.call(this._parent.querySelectorAll(Et)).filter(function(t){return t.getAttribute("data-parent")===n._config.parent})).length&&(t=null),!(t&&(e=st(t).not(this._selector).data(lt))&&e._isTransitioning))){var i=st.Event(dt.SHOW);if(st(this._element).trigger(i),!i.isDefaultPrevented()){t&&(a._jQueryInterface.call(st(t).not(this._selector),"hide"),e||st(t).data(lt,null));var r=this._getDimension();st(this._element).removeClass(_t).addClass(mt),this._element.style[r]=0,this._triggerArray.length&&st(this._triggerArray).removeClass(pt).attr("aria-expanded",!0),this.setTransitioning(!0);var o="scroll"+(r[0].toUpperCase()+r.slice(1)),s=Fn.getTransitionDurationFromElement(this._element);st(this._element).one(Fn.TRANSITION_END,function(){st(n._element).removeClass(mt).addClass(_t).addClass(gt),n._element.style[r]="",n.setTransitioning(!1),st(n._element).trigger(dt.SHOWN)}).emulateTransitionEnd(s),this._element.style[r]=this._element[o]+"px"}}},t.hide=function(){var t=this;if(!this._isTransitioning&&st(this._element).hasClass(gt)){var e=st.Event(dt.HIDE);if(st(this._element).trigger(e),!e.isDefaultPrevented()){var n=this._getDimension();this._element.style[n]=this._element.getBoundingClientRect()[n]+"px",Fn.reflow(this._element),st(this._element).addClass(mt).removeClass(_t).removeClass(gt);var i=this._triggerArray.length;if(0<i)for(var r=0;r<i;r++){var o=this._triggerArray[r],s=Fn.getSelectorFromElement(o);if(null!==s)st([].slice.call(document.querySelectorAll(s))).hasClass(gt)||st(o).addClass(pt).attr("aria-expanded",!1)}this.setTransitioning(!0);this._element.style[n]="";var a=Fn.getTransitionDurationFromElement(this._element);st(this._element).one(Fn.TRANSITION_END,function(){t.setTransitioning(!1),st(t._element).removeClass(mt).addClass(_t).trigger(dt.HIDDEN)}).emulateTransitionEnd(a)}}},t.setTransitioning=function(t){this._isTransitioning=t},t.dispose=function(){st.removeData(this._element,lt),this._config=null,this._parent=null,this._element=null,this._triggerArray=null,this._isTransitioning=null},t._getConfig=function(t){return(t=l({},ut,t)).toggle=Boolean(t.toggle),Fn.typeCheckConfig(at,t,ft),t},t._getDimension=function(){return st(this._element).hasClass(vt)?vt:yt},t._getParent=function(){var n=this,t=null;Fn.isElement(this._config.parent)?(t=this._config.parent,"undefined"!=typeof this._config.parent.jquery&&(t=this._config.parent[0])):t=document.querySelector(this._config.parent);var e='[data-toggle="collapse"][data-parent="'+this._config.parent+'"]',i=[].slice.call(t.querySelectorAll(e));return st(i).each(function(t,e){n._addAriaAndCollapsedClass(a._getTargetFromElement(e),[e])}),t},t._addAriaAndCollapsedClass=function(t,e){if(t){var n=st(t).hasClass(gt);e.length&&st(e).toggleClass(pt,!n).attr("aria-expanded",n)}},a._getTargetFromElement=function(t){var e=Fn.getSelectorFromElement(t);return e?document.querySelector(e):null},a._jQueryInterface=function(i){return this.each(function(){var t=st(this),e=t.data(lt),n=l({},ut,t.data(),"object"==typeof i&&i?i:{});if(!e&&n.toggle&&/show|hide/.test(i)&&(n.toggle=!1),e||(e=new a(this,n),t.data(lt,e)),"string"==typeof i){if("undefined"==typeof e[i])throw new TypeError('No method named "'+i+'"');e[i]()}})},s(a,null,[{key:"VERSION",get:function(){return"4.1.3"}},{key:"Default",get:function(){return ut}}]),a}(),st(document).on(dt.CLICK_DATA_API,Ct,function(t){"A"===t.currentTarget.tagName&&t.preventDefault();var n=st(this),e=Fn.getSelectorFromElement(this),i=[].slice.call(document.querySelectorAll(e));st(i).each(function(){var t=st(this),e=t.data(lt)?"toggle":n.data();Tt._jQueryInterface.call(t,e)})}),st.fn[at]=Tt._jQueryInterface,st.fn[at].Constructor=Tt,st.fn[at].noConflict=function(){return st.fn[at]=ht,Tt._jQueryInterface},Tt),Vn=(St="dropdown",At="."+(It="bs.dropdown"),Dt=".data-api",wt=(bt=e).fn[St],Nt=new RegExp("38|40|27"),Ot={HIDE:"hide"+At,HIDDEN:"hidden"+At,SHOW:"show"+At,SHOWN:"shown"+At,CLICK:"click"+At,CLICK_DATA_API:"click"+At+Dt,KEYDOWN_DATA_API:"keydown"+At+Dt,KEYUP_DATA_API:"keyup"+At+Dt},kt="disabled",Pt="show",jt="dropup",Ht="dropright",Lt="dropleft",Rt="dropdown-menu-right",xt="position-static",Wt='[data-toggle="dropdown"]',Ut=".dropdown form",qt=".dropdown-menu",Ft=".navbar-nav",Kt=".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",Mt="top-start",Qt="top-end",Bt="bottom-start",Vt="bottom-end",Yt="right-start",zt="left-start",Jt={offset:0,flip:!0,boundary:"scrollParent",reference:"toggle",display:"dynamic"},Zt={offset:"(number|string|function)",flip:"boolean",boundary:"(string|element)",reference:"(string|element)",display:"string"},Gt=function(){function c(t,e){this._element=t,this._popper=null,this._config=this._getConfig(e),this._menu=this._getMenuElement(),this._inNavbar=this._detectNavbar(),this._addEventListeners()}var t=c.prototype;return t.toggle=function(){if(!this._element.disabled&&!bt(this._element).hasClass(kt)){var t=c._getParentFromElement(this._element),e=bt(this._menu).hasClass(Pt);if(c._clearMenus(),!e){var n={relatedTarget:this._element},i=bt.Event(Ot.SHOW,n);if(bt(t).trigger(i),!i.isDefaultPrevented()){if(!this._inNavbar){if("undefined"==typeof h)throw new TypeError("Bootstrap dropdown require Popper.js (https://popper.js.org)");var r=this._element;"parent"===this._config.reference?r=t:Fn.isElement(this._config.reference)&&(r=this._config.reference,"undefined"!=typeof this._config.reference.jquery&&(r=this._config.reference[0])),"scrollParent"!==this._config.boundary&&bt(t).addClass(xt),this._popper=new h(r,this._menu,this._getPopperConfig())}"ontouchstart"in document.documentElement&&0===bt(t).closest(Ft).length&&bt(document.body).children().on("mouseover",null,bt.noop),this._element.focus(),this._element.setAttribute("aria-expanded",!0),bt(this._menu).toggleClass(Pt),bt(t).toggleClass(Pt).trigger(bt.Event(Ot.SHOWN,n))}}}},t.dispose=function(){bt.removeData(this._element,It),bt(this._element).off(At),this._element=null,(this._menu=null)!==this._popper&&(this._popper.destroy(),this._popper=null)},t.update=function(){this._inNavbar=this._detectNavbar(),null!==this._popper&&this._popper.scheduleUpdate()},t._addEventListeners=function(){var e=this;bt(this._element).on(Ot.CLICK,function(t){t.preventDefault(),t.stopPropagation(),e.toggle()})},t._getConfig=function(t){return t=l({},this.constructor.Default,bt(this._element).data(),t),Fn.typeCheckConfig(St,t,this.constructor.DefaultType),t},t._getMenuElement=function(){if(!this._menu){var t=c._getParentFromElement(this._element);t&&(this._menu=t.querySelector(qt))}return this._menu},t._getPlacement=function(){var t=bt(this._element.parentNode),e=Bt;return t.hasClass(jt)?(e=Mt,bt(this._menu).hasClass(Rt)&&(e=Qt)):t.hasClass(Ht)?e=Yt:t.hasClass(Lt)?e=zt:bt(this._menu).hasClass(Rt)&&(e=Vt),e},t._detectNavbar=function(){return 0<bt(this._element).closest(".navbar").length},t._getPopperConfig=function(){var e=this,t={};"function"==typeof this._config.offset?t.fn=function(t){return t.offsets=l({},t.offsets,e._config.offset(t.offsets)||{}),t}:t.offset=this._config.offset;var n={placement:this._getPlacement(),modifiers:{offset:t,flip:{enabled:this._config.flip},preventOverflow:{boundariesElement:this._config.boundary}}};return"static"===this._config.display&&(n.modifiers.applyStyle={enabled:!1}),n},c._jQueryInterface=function(e){return this.each(function(){var t=bt(this).data(It);if(t||(t=new c(this,"object"==typeof e?e:null),bt(this).data(It,t)),"string"==typeof e){if("undefined"==typeof t[e])throw new TypeError('No method named "'+e+'"');t[e]()}})},c._clearMenus=function(t){if(!t||3!==t.which&&("keyup"!==t.type||9===t.which))for(var e=[].slice.call(document.querySelectorAll(Wt)),n=0,i=e.length;n<i;n++){var r=c._getParentFromElement(e[n]),o=bt(e[n]).data(It),s={relatedTarget:e[n]};if(t&&"click"===t.type&&(s.clickEvent=t),o){var a=o._menu;if(bt(r).hasClass(Pt)&&!(t&&("click"===t.type&&/input|textarea/i.test(t.target.tagName)||"keyup"===t.type&&9===t.which)&&bt.contains(r,t.target))){var l=bt.Event(Ot.HIDE,s);bt(r).trigger(l),l.isDefaultPrevented()||("ontouchstart"in document.documentElement&&bt(document.body).children().off("mouseover",null,bt.noop),e[n].setAttribute("aria-expanded","false"),bt(a).removeClass(Pt),bt(r).removeClass(Pt).trigger(bt.Event(Ot.HIDDEN,s)))}}}},c._getParentFromElement=function(t){var e,n=Fn.getSelectorFromElement(t);return n&&(e=document.querySelector(n)),e||t.parentNode},c._dataApiKeydownHandler=function(t){if((/input|textarea/i.test(t.target.tagName)?!(32===t.which||27!==t.which&&(40!==t.which&&38!==t.which||bt(t.target).closest(qt).length)):Nt.test(t.which))&&(t.preventDefault(),t.stopPropagation(),!this.disabled&&!bt(this).hasClass(kt))){var e=c._getParentFromElement(this),n=bt(e).hasClass(Pt);if((n||27===t.which&&32===t.which)&&(!n||27!==t.which&&32!==t.which)){var i=[].slice.call(e.querySelectorAll(Kt));if(0!==i.length){var r=i.indexOf(t.target);38===t.which&&0<r&&r--,40===t.which&&r<i.length-1&&r++,r<0&&(r=0),i[r].focus()}}else{if(27===t.which){var o=e.querySelector(Wt);bt(o).trigger("focus")}bt(this).trigger("click")}}},s(c,null,[{key:"VERSION",get:function(){return"4.1.3"}},{key:"Default",get:function(){return Jt}},{key:"DefaultType",get:function(){return Zt}}]),c}(),bt(document).on(Ot.KEYDOWN_DATA_API,Wt,Gt._dataApiKeydownHandler).on(Ot.KEYDOWN_DATA_API,qt,Gt._dataApiKeydownHandler).on(Ot.CLICK_DATA_API+" "+Ot.KEYUP_DATA_API,Gt._clearMenus).on(Ot.CLICK_DATA_API,Wt,function(t){t.preventDefault(),t.stopPropagation(),Gt._jQueryInterface.call(bt(this),"toggle")}).on(Ot.CLICK_DATA_API,Ut,function(t){t.stopPropagation()}),bt.fn[St]=Gt._jQueryInterface,bt.fn[St].Constructor=Gt,bt.fn[St].noConflict=function(){return bt.fn[St]=wt,Gt._jQueryInterface},Gt),Yn=(Xt="modal",ee="."+(te="bs.modal"),ne=($t=e).fn[Xt],ie={backdrop:!0,keyboard:!0,focus:!0,show:!0},re={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean",show:"boolean"},oe={HIDE:"hide"+ee,HIDDEN:"hidden"+ee,SHOW:"show"+ee,SHOWN:"shown"+ee,FOCUSIN:"focusin"+ee,RESIZE:"resize"+ee,CLICK_DISMISS:"click.dismiss"+ee,KEYDOWN_DISMISS:"keydown.dismiss"+ee,MOUSEUP_DISMISS:"mouseup.dismiss"+ee,MOUSEDOWN_DISMISS:"mousedown.dismiss"+ee,CLICK_DATA_API:"click"+ee+".data-api"},se="modal-scrollbar-measure",ae="modal-backdrop",le="modal-open",ce="fade",he="show",ue=".modal-dialog",fe='[data-toggle="modal"]',de='[data-dismiss="modal"]',ge=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",_e=".sticky-top",me=function(){function r(t,e){this._config=this._getConfig(e),this._element=t,this._dialog=t.querySelector(ue),this._backdrop=null,this._isShown=!1,this._isBodyOverflowing=!1,this._ignoreBackdropClick=!1,this._scrollbarWidth=0}var t=r.prototype;return t.toggle=function(t){return this._isShown?this.hide():this.show(t)},t.show=function(t){var e=this;if(!this._isTransitioning&&!this._isShown){$t(this._element).hasClass(ce)&&(this._isTransitioning=!0);var n=$t.Event(oe.SHOW,{relatedTarget:t});$t(this._element).trigger(n),this._isShown||n.isDefaultPrevented()||(this._isShown=!0,this._checkScrollbar(),this._setScrollbar(),this._adjustDialog(),$t(document.body).addClass(le),this._setEscapeEvent(),this._setResizeEvent(),$t(this._element).on(oe.CLICK_DISMISS,de,function(t){return e.hide(t)}),$t(this._dialog).on(oe.MOUSEDOWN_DISMISS,function(){$t(e._element).one(oe.MOUSEUP_DISMISS,function(t){$t(t.target).is(e._element)&&(e._ignoreBackdropClick=!0)})}),this._showBackdrop(function(){return e._showElement(t)}))}},t.hide=function(t){var e=this;if(t&&t.preventDefault(),!this._isTransitioning&&this._isShown){var n=$t.Event(oe.HIDE);if($t(this._element).trigger(n),this._isShown&&!n.isDefaultPrevented()){this._isShown=!1;var i=$t(this._element).hasClass(ce);if(i&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),$t(document).off(oe.FOCUSIN),$t(this._element).removeClass(he),$t(this._element).off(oe.CLICK_DISMISS),$t(this._dialog).off(oe.MOUSEDOWN_DISMISS),i){var r=Fn.getTransitionDurationFromElement(this._element);$t(this._element).one(Fn.TRANSITION_END,function(t){return e._hideModal(t)}).emulateTransitionEnd(r)}else this._hideModal()}}},t.dispose=function(){$t.removeData(this._element,te),$t(window,document,this._element,this._backdrop).off(ee),this._config=null,this._element=null,this._dialog=null,this._backdrop=null,this._isShown=null,this._isBodyOverflowing=null,this._ignoreBackdropClick=null,this._scrollbarWidth=null},t.handleUpdate=function(){this._adjustDialog()},t._getConfig=function(t){return t=l({},ie,t),Fn.typeCheckConfig(Xt,t,re),t},t._showElement=function(t){var e=this,n=$t(this._element).hasClass(ce);this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.appendChild(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.scrollTop=0,n&&Fn.reflow(this._element),$t(this._element).addClass(he),this._config.focus&&this._enforceFocus();var i=$t.Event(oe.SHOWN,{relatedTarget:t}),r=function(){e._config.focus&&e._element.focus(),e._isTransitioning=!1,$t(e._element).trigger(i)};if(n){var o=Fn.getTransitionDurationFromElement(this._element);$t(this._dialog).one(Fn.TRANSITION_END,r).emulateTransitionEnd(o)}else r()},t._enforceFocus=function(){var e=this;$t(document).off(oe.FOCUSIN).on(oe.FOCUSIN,function(t){document!==t.target&&e._element!==t.target&&0===$t(e._element).has(t.target).length&&e._element.focus()})},t._setEscapeEvent=function(){var e=this;this._isShown&&this._config.keyboard?$t(this._element).on(oe.KEYDOWN_DISMISS,function(t){27===t.which&&(t.preventDefault(),e.hide())}):this._isShown||$t(this._element).off(oe.KEYDOWN_DISMISS)},t._setResizeEvent=function(){var e=this;this._isShown?$t(window).on(oe.RESIZE,function(t){return e.handleUpdate(t)}):$t(window).off(oe.RESIZE)},t._hideModal=function(){var t=this;this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._isTransitioning=!1,this._showBackdrop(function(){$t(document.body).removeClass(le),t._resetAdjustments(),t._resetScrollbar(),$t(t._element).trigger(oe.HIDDEN)})},t._removeBackdrop=function(){this._backdrop&&($t(this._backdrop).remove(),this._backdrop=null)},t._showBackdrop=function(t){var e=this,n=$t(this._element).hasClass(ce)?ce:"";if(this._isShown&&this._config.backdrop){if(this._backdrop=document.createElement("div"),this._backdrop.className=ae,n&&this._backdrop.classList.add(n),$t(this._backdrop).appendTo(document.body),$t(this._element).on(oe.CLICK_DISMISS,function(t){e._ignoreBackdropClick?e._ignoreBackdropClick=!1:t.target===t.currentTarget&&("static"===e._config.backdrop?e._element.focus():e.hide())}),n&&Fn.reflow(this._backdrop),$t(this._backdrop).addClass(he),!t)return;if(!n)return void t();var i=Fn.getTransitionDurationFromElement(this._backdrop);$t(this._backdrop).one(Fn.TRANSITION_END,t).emulateTransitionEnd(i)}else if(!this._isShown&&this._backdrop){$t(this._backdrop).removeClass(he);var r=function(){e._removeBackdrop(),t&&t()};if($t(this._element).hasClass(ce)){var o=Fn.getTransitionDurationFromElement(this._backdrop);$t(this._backdrop).one(Fn.TRANSITION_END,r).emulateTransitionEnd(o)}else r()}else t&&t()},t._adjustDialog=function(){var t=this._element.scrollHeight>document.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},t._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},t._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=t.left+t.right<window.innerWidth,this._scrollbarWidth=this._getScrollbarWidth()},t._setScrollbar=function(){var r=this;if(this._isBodyOverflowing){var t=[].slice.call(document.querySelectorAll(ge)),e=[].slice.call(document.querySelectorAll(_e));$t(t).each(function(t,e){var n=e.style.paddingRight,i=$t(e).css("padding-right");$t(e).data("padding-right",n).css("padding-right",parseFloat(i)+r._scrollbarWidth+"px")}),$t(e).each(function(t,e){var n=e.style.marginRight,i=$t(e).css("margin-right");$t(e).data("margin-right",n).css("margin-right",parseFloat(i)-r._scrollbarWidth+"px")});var n=document.body.style.paddingRight,i=$t(document.body).css("padding-right");$t(document.body).data("padding-right",n).css("padding-right",parseFloat(i)+this._scrollbarWidth+"px")}},t._resetScrollbar=function(){var t=[].slice.call(document.querySelectorAll(ge));$t(t).each(function(t,e){var n=$t(e).data("padding-right");$t(e).removeData("padding-right"),e.style.paddingRight=n||""});var e=[].slice.call(document.querySelectorAll(""+_e));$t(e).each(function(t,e){var n=$t(e).data("margin-right");"undefined"!=typeof n&&$t(e).css("margin-right",n).removeData("margin-right")});var n=$t(document.body).data("padding-right");$t(document.body).removeData("padding-right"),document.body.style.paddingRight=n||""},t._getScrollbarWidth=function(){var t=document.createElement("div");t.className=se,document.body.appendChild(t);var e=t.getBoundingClientRect().width-t.clientWidth;return document.body.removeChild(t),e},r._jQueryInterface=function(n,i){return this.each(function(){var t=$t(this).data(te),e=l({},ie,$t(this).data(),"object"==typeof n&&n?n:{});if(t||(t=new r(this,e),$t(this).data(te,t)),"string"==typeof n){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n](i)}else e.show&&t.show(i)})},s(r,null,[{key:"VERSION",get:function(){return"4.1.3"}},{key:"Default",get:function(){return ie}}]),r}(),$t(document).on(oe.CLICK_DATA_API,fe,function(t){var e,n=this,i=Fn.getSelectorFromElement(this);i&&(e=document.querySelector(i));var r=$t(e).data(te)?"toggle":l({},$t(e).data(),$t(this).data());"A"!==this.tagName&&"AREA"!==this.tagName||t.preventDefault();var o=$t(e).one(oe.SHOW,function(t){t.isDefaultPrevented()||o.one(oe.HIDDEN,function(){$t(n).is(":visible")&&n.focus()})});me._jQueryInterface.call($t(e),r,this)}),$t.fn[Xt]=me._jQueryInterface,$t.fn[Xt].Constructor=me,$t.fn[Xt].noConflict=function(){return $t.fn[Xt]=ne,me._jQueryInterface},me),zn=(ve="tooltip",Ee="."+(ye="bs.tooltip"),Ce=(pe=e).fn[ve],Te="bs-tooltip",be=new RegExp("(^|\\s)"+Te+"\\S+","g"),Ae={animation:!0,template:'<div class="tooltip" role="tooltip"><div class="arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!(Ie={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"}),selector:!(Se={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)"}),placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent"},we="out",Ne={HIDE:"hide"+Ee,HIDDEN:"hidden"+Ee,SHOW:(De="show")+Ee,SHOWN:"shown"+Ee,INSERTED:"inserted"+Ee,CLICK:"click"+Ee,FOCUSIN:"focusin"+Ee,FOCUSOUT:"focusout"+Ee,MOUSEENTER:"mouseenter"+Ee,MOUSELEAVE:"mouseleave"+Ee},Oe="fade",ke="show",Pe=".tooltip-inner",je=".arrow",He="hover",Le="focus",Re="click",xe="manual",We=function(){function i(t,e){if("undefined"==typeof h)throw new TypeError("Bootstrap tooltips require Popper.js (https://popper.js.org)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var t=i.prototype;return t.enable=function(){this._isEnabled=!0},t.disable=function(){this._isEnabled=!1},t.toggleEnabled=function(){this._isEnabled=!this._isEnabled},t.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=pe(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),pe(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(pe(this.getTipElement()).hasClass(ke))return void this._leave(null,this);this._enter(null,this)}},t.dispose=function(){clearTimeout(this._timeout),pe.removeData(this.element,this.constructor.DATA_KEY),pe(this.element).off(this.constructor.EVENT_KEY),pe(this.element).closest(".modal").off("hide.bs.modal"),this.tip&&pe(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,(this._activeTrigger=null)!==this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},t.show=function(){var e=this;if("none"===pe(this.element).css("display"))throw new Error("Please use show on visible elements");var t=pe.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){pe(this.element).trigger(t);var n=pe.contains(this.element.ownerDocument.documentElement,this.element);if(t.isDefaultPrevented()||!n)return;var i=this.getTipElement(),r=Fn.getUID(this.constructor.NAME);i.setAttribute("id",r),this.element.setAttribute("aria-describedby",r),this.setContent(),this.config.animation&&pe(i).addClass(Oe);var o="function"==typeof this.config.placement?this.config.placement.call(this,i,this.element):this.config.placement,s=this._getAttachment(o);this.addAttachmentClass(s);var a=!1===this.config.container?document.body:pe(document).find(this.config.container);pe(i).data(this.constructor.DATA_KEY,this),pe.contains(this.element.ownerDocument.documentElement,this.tip)||pe(i).appendTo(a),pe(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new h(this.element,i,{placement:s,modifiers:{offset:{offset:this.config.offset},flip:{behavior:this.config.fallbackPlacement},arrow:{element:je},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){e._handlePopperPlacementChange(t)}}),pe(i).addClass(ke),"ontouchstart"in document.documentElement&&pe(document.body).children().on("mouseover",null,pe.noop);var l=function(){e.config.animation&&e._fixTransition();var t=e._hoverState;e._hoverState=null,pe(e.element).trigger(e.constructor.Event.SHOWN),t===we&&e._leave(null,e)};if(pe(this.tip).hasClass(Oe)){var c=Fn.getTransitionDurationFromElement(this.tip);pe(this.tip).one(Fn.TRANSITION_END,l).emulateTransitionEnd(c)}else l()}},t.hide=function(t){var e=this,n=this.getTipElement(),i=pe.Event(this.constructor.Event.HIDE),r=function(){e._hoverState!==De&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),pe(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(pe(this.element).trigger(i),!i.isDefaultPrevented()){if(pe(n).removeClass(ke),"ontouchstart"in document.documentElement&&pe(document.body).children().off("mouseover",null,pe.noop),this._activeTrigger[Re]=!1,this._activeTrigger[Le]=!1,this._activeTrigger[He]=!1,pe(this.tip).hasClass(Oe)){var o=Fn.getTransitionDurationFromElement(n);pe(n).one(Fn.TRANSITION_END,r).emulateTransitionEnd(o)}else r();this._hoverState=""}},t.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},t.isWithContent=function(){return Boolean(this.getTitle())},t.addAttachmentClass=function(t){pe(this.getTipElement()).addClass(Te+"-"+t)},t.getTipElement=function(){return this.tip=this.tip||pe(this.config.template)[0],this.tip},t.setContent=function(){var t=this.getTipElement();this.setElementContent(pe(t.querySelectorAll(Pe)),this.getTitle()),pe(t).removeClass(Oe+" "+ke)},t.setElementContent=function(t,e){var n=this.config.html;"object"==typeof e&&(e.nodeType||e.jquery)?n?pe(e).parent().is(t)||t.empty().append(e):t.text(pe(e).text()):t[n?"html":"text"](e)},t.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},t._getAttachment=function(t){return Ie[t.toUpperCase()]},t._setListeners=function(){var i=this;this.config.trigger.split(" ").forEach(function(t){if("click"===t)pe(i.element).on(i.constructor.Event.CLICK,i.config.selector,function(t){return i.toggle(t)});else if(t!==xe){var e=t===He?i.constructor.Event.MOUSEENTER:i.constructor.Event.FOCUSIN,n=t===He?i.constructor.Event.MOUSELEAVE:i.constructor.Event.FOCUSOUT;pe(i.element).on(e,i.config.selector,function(t){return i._enter(t)}).on(n,i.config.selector,function(t){return i._leave(t)})}pe(i.element).closest(".modal").on("hide.bs.modal",function(){return i.hide()})}),this.config.selector?this.config=l({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},t._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},t._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||pe(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),pe(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?Le:He]=!0),pe(e.getTipElement()).hasClass(ke)||e._hoverState===De?e._hoverState=De:(clearTimeout(e._timeout),e._hoverState=De,e.config.delay&&e.config.delay.show?e._timeout=setTimeout(function(){e._hoverState===De&&e.show()},e.config.delay.show):e.show())},t._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||pe(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),pe(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?Le:He]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=we,e.config.delay&&e.config.delay.hide?e._timeout=setTimeout(function(){e._hoverState===we&&e.hide()},e.config.delay.hide):e.hide())},t._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},t._getConfig=function(t){return"number"==typeof(t=l({},this.constructor.Default,pe(this.element).data(),"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),Fn.typeCheckConfig(ve,t,this.constructor.DefaultType),t},t._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},t._cleanTipClass=function(){var t=pe(this.getTipElement()),e=t.attr("class").match(be);null!==e&&e.length&&t.removeClass(e.join(""))},t._handlePopperPlacementChange=function(t){var e=t.instance;this.tip=e.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},t._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute("x-placement")&&(pe(t).removeClass(Oe),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},i._jQueryInterface=function(n){return this.each(function(){var t=pe(this).data(ye),e="object"==typeof n&&n;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),pe(this).data(ye,t)),"string"==typeof n)){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.1.3"}},{key:"Default",get:function(){return Ae}},{key:"NAME",get:function(){return ve}},{key:"DATA_KEY",get:function(){return ye}},{key:"Event",get:function(){return Ne}},{key:"EVENT_KEY",get:function(){return Ee}},{key:"DefaultType",get:function(){return Se}}]),i}(),pe.fn[ve]=We._jQueryInterface,pe.fn[ve].Constructor=We,pe.fn[ve].noConflict=function(){return pe.fn[ve]=Ce,We._jQueryInterface},We),Jn=(qe="popover",Ke="."+(Fe="bs.popover"),Me=(Ue=e).fn[qe],Qe="bs-popover",Be=new RegExp("(^|\\s)"+Qe+"\\S+","g"),Ve=l({},zn.Default,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>'}),Ye=l({},zn.DefaultType,{content:"(string|element|function)"}),ze="fade",Ze=".popover-header",Ge=".popover-body",$e={HIDE:"hide"+Ke,HIDDEN:"hidden"+Ke,SHOW:(Je="show")+Ke,SHOWN:"shown"+Ke,INSERTED:"inserted"+Ke,CLICK:"click"+Ke,FOCUSIN:"focusin"+Ke,FOCUSOUT:"focusout"+Ke,MOUSEENTER:"mouseenter"+Ke,MOUSELEAVE:"mouseleave"+Ke},Xe=function(t){var e,n;function i(){return t.apply(this,arguments)||this}n=t,(e=i).prototype=Object.create(n.prototype),(e.prototype.constructor=e).__proto__=n;var r=i.prototype;return r.isWithContent=function(){return this.getTitle()||this._getContent()},r.addAttachmentClass=function(t){Ue(this.getTipElement()).addClass(Qe+"-"+t)},r.getTipElement=function(){return this.tip=this.tip||Ue(this.config.template)[0],this.tip},r.setContent=function(){var t=Ue(this.getTipElement());this.setElementContent(t.find(Ze),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(Ge),e),t.removeClass(ze+" "+Je)},r._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},r._cleanTipClass=function(){var t=Ue(this.getTipElement()),e=t.attr("class").match(Be);null!==e&&0<e.length&&t.removeClass(e.join(""))},i._jQueryInterface=function(n){return this.each(function(){var t=Ue(this).data(Fe),e="object"==typeof n?n:null;if((t||!/destroy|hide/.test(n))&&(t||(t=new i(this,e),Ue(this).data(Fe,t)),"string"==typeof n)){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.1.3"}},{key:"Default",get:function(){return Ve}},{key:"NAME",get:function(){return qe}},{key:"DATA_KEY",get:function(){return Fe}},{key:"Event",get:function(){return $e}},{key:"EVENT_KEY",get:function(){return Ke}},{key:"DefaultType",get:function(){return Ye}}]),i}(zn),Ue.fn[qe]=Xe._jQueryInterface,Ue.fn[qe].Constructor=Xe,Ue.fn[qe].noConflict=function(){return Ue.fn[qe]=Me,Xe._jQueryInterface},Xe),Zn=(en="scrollspy",rn="."+(nn="bs.scrollspy"),on=(tn=e).fn[en],sn={offset:10,method:"auto",target:""},an={offset:"number",method:"string",target:"(string|element)"},ln={ACTIVATE:"activate"+rn,SCROLL:"scroll"+rn,LOAD_DATA_API:"load"+rn+".data-api"},cn="dropdown-item",hn="active",un='[data-spy="scroll"]',fn=".active",dn=".nav, .list-group",gn=".nav-link",_n=".nav-item",mn=".list-group-item",pn=".dropdown",vn=".dropdown-item",yn=".dropdown-toggle",En="offset",Cn="position",Tn=function(){function n(t,e){var n=this;this._element=t,this._scrollElement="BODY"===t.tagName?window:t,this._config=this._getConfig(e),this._selector=this._config.target+" "+gn+","+this._config.target+" "+mn+","+this._config.target+" "+vn,this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,tn(this._scrollElement).on(ln.SCROLL,function(t){return n._process(t)}),this.refresh(),this._process()}var t=n.prototype;return t.refresh=function(){var e=this,t=this._scrollElement===this._scrollElement.window?En:Cn,r="auto"===this._config.method?t:this._config.method,o=r===Cn?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),[].slice.call(document.querySelectorAll(this._selector)).map(function(t){var e,n=Fn.getSelectorFromElement(t);if(n&&(e=document.querySelector(n)),e){var i=e.getBoundingClientRect();if(i.width||i.height)return[tn(e)[r]().top+o,n]}return null}).filter(function(t){return t}).sort(function(t,e){return t[0]-e[0]}).forEach(function(t){e._offsets.push(t[0]),e._targets.push(t[1])})},t.dispose=function(){tn.removeData(this._element,nn),tn(this._scrollElement).off(rn),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null},t._getConfig=function(t){if("string"!=typeof(t=l({},sn,"object"==typeof t&&t?t:{})).target){var e=tn(t.target).attr("id");e||(e=Fn.getUID(en),tn(t.target).attr("id",e)),t.target="#"+e}return Fn.typeCheckConfig(en,t,an),t},t._getScrollTop=function(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop},t._getScrollHeight=function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},t._getOffsetHeight=function(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height},t._process=function(){var t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),n=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),n<=t){var i=this._targets[this._targets.length-1];this._activeTarget!==i&&this._activate(i)}else{if(this._activeTarget&&t<this._offsets[0]&&0<this._offsets[0])return this._activeTarget=null,void this._clear();for(var r=this._offsets.length;r--;){this._activeTarget!==this._targets[r]&&t>=this._offsets[r]&&("undefined"==typeof this._offsets[r+1]||t<this._offsets[r+1])&&this._activate(this._targets[r])}}},t._activate=function(e){this._activeTarget=e,this._clear();var t=this._selector.split(",");t=t.map(function(t){return t+'[data-target="'+e+'"],'+t+'[href="'+e+'"]'});var n=tn([].slice.call(document.querySelectorAll(t.join(","))));n.hasClass(cn)?(n.closest(pn).find(yn).addClass(hn),n.addClass(hn)):(n.addClass(hn),n.parents(dn).prev(gn+", "+mn).addClass(hn),n.parents(dn).prev(_n).children(gn).addClass(hn)),tn(this._scrollElement).trigger(ln.ACTIVATE,{relatedTarget:e})},t._clear=function(){var t=[].slice.call(document.querySelectorAll(this._selector));tn(t).filter(fn).removeClass(hn)},n._jQueryInterface=function(e){return this.each(function(){var t=tn(this).data(nn);if(t||(t=new n(this,"object"==typeof e&&e),tn(this).data(nn,t)),"string"==typeof e){if("undefined"==typeof t[e])throw new TypeError('No method named "'+e+'"');t[e]()}})},s(n,null,[{key:"VERSION",get:function(){return"4.1.3"}},{key:"Default",get:function(){return sn}}]),n}(),tn(window).on(ln.LOAD_DATA_API,function(){for(var t=[].slice.call(document.querySelectorAll(un)),e=t.length;e--;){var n=tn(t[e]);Tn._jQueryInterface.call(n,n.data())}}),tn.fn[en]=Tn._jQueryInterface,tn.fn[en].Constructor=Tn,tn.fn[en].noConflict=function(){return tn.fn[en]=on,Tn._jQueryInterface},Tn),Gn=(In="."+(Sn="bs.tab"),An=(bn=e).fn.tab,Dn={HIDE:"hide"+In,HIDDEN:"hidden"+In,SHOW:"show"+In,SHOWN:"shown"+In,CLICK_DATA_API:"click"+In+".data-api"},wn="dropdown-menu",Nn="active",On="disabled",kn="fade",Pn="show",jn=".dropdown",Hn=".nav, .list-group",Ln=".active",Rn="> li > .active",xn='[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',Wn=".dropdown-toggle",Un="> .dropdown-menu .active",qn=function(){function i(t){this._element=t}var t=i.prototype;return t.show=function(){var n=this;if(!(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&bn(this._element).hasClass(Nn)||bn(this._element).hasClass(On))){var t,i,e=bn(this._element).closest(Hn)[0],r=Fn.getSelectorFromElement(this._element);if(e){var o="UL"===e.nodeName?Rn:Ln;i=(i=bn.makeArray(bn(e).find(o)))[i.length-1]}var s=bn.Event(Dn.HIDE,{relatedTarget:this._element}),a=bn.Event(Dn.SHOW,{relatedTarget:i});if(i&&bn(i).trigger(s),bn(this._element).trigger(a),!a.isDefaultPrevented()&&!s.isDefaultPrevented()){r&&(t=document.querySelector(r)),this._activate(this._element,e);var l=function(){var t=bn.Event(Dn.HIDDEN,{relatedTarget:n._element}),e=bn.Event(Dn.SHOWN,{relatedTarget:i});bn(i).trigger(t),bn(n._element).trigger(e)};t?this._activate(t,t.parentNode,l):l()}}},t.dispose=function(){bn.removeData(this._element,Sn),this._element=null},t._activate=function(t,e,n){var i=this,r=("UL"===e.nodeName?bn(e).find(Rn):bn(e).children(Ln))[0],o=n&&r&&bn(r).hasClass(kn),s=function(){return i._transitionComplete(t,r,n)};if(r&&o){var a=Fn.getTransitionDurationFromElement(r);bn(r).one(Fn.TRANSITION_END,s).emulateTransitionEnd(a)}else s()},t._transitionComplete=function(t,e,n){if(e){bn(e).removeClass(Pn+" "+Nn);var i=bn(e.parentNode).find(Un)[0];i&&bn(i).removeClass(Nn),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!1)}if(bn(t).addClass(Nn),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),Fn.reflow(t),bn(t).addClass(Pn),t.parentNode&&bn(t.parentNode).hasClass(wn)){var r=bn(t).closest(jn)[0];if(r){var o=[].slice.call(r.querySelectorAll(Wn));bn(o).addClass(Nn)}t.setAttribute("aria-expanded",!0)}n&&n()},i._jQueryInterface=function(n){return this.each(function(){var t=bn(this),e=t.data(Sn);if(e||(e=new i(this),t.data(Sn,e)),"string"==typeof n){if("undefined"==typeof e[n])throw new TypeError('No method named "'+n+'"');e[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.1.3"}}]),i}(),bn(document).on(Dn.CLICK_DATA_API,xn,function(t){t.preventDefault(),qn._jQueryInterface.call(bn(this),"show")}),bn.fn.tab=qn._jQueryInterface,bn.fn.tab.Constructor=qn,bn.fn.tab.noConflict=function(){return bn.fn.tab=An,qn._jQueryInterface},qn);!function(t){if("undefined"==typeof t)throw new TypeError("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.");var e=t.fn.jquery.split(" ")[0].split(".");if(e[0]<2&&e[1]<9||1===e[0]&&9===e[1]&&e[2]<1||4<=e[0])throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}(e),t.Util=Fn,t.Alert=Kn,t.Button=Mn,t.Carousel=Qn,t.Collapse=Bn,t.Dropdown=Vn,t.Modal=Yn,t.Popover=Jn,t.Scrollspy=Zn,t.Tab=Gn,t.Tooltip=zn,Object.defineProperty(t,"__esModule",{value:!0})});

File: public/js/chat/features/chat-audio-recording.js
Match lines: 1
231|        jq('.modal-backdrop').remove();

File: public/js/chat/features/chat-incoming-calls.js
Match lines: 2
395|                jq('.modal-backdrop').remove();
403|                jq('.modal-backdrop').remove();

File: public/js/chat/features/chat-offcanvas-call.js
Match lines: 1
536|        jq('.modal-backdrop').remove();

File: public/js/chat_ia/workflow_approval_modal.js
Match lines: 4
770|    var backdrops = document.querySelectorAll('.modal-backdrop');
817|    if (!document.querySelector('.modal-backdrop')) {
819|      backdrop.className = 'modal-backdrop fade show';
861|    document.querySelectorAll('.modal-backdrop').forEach(function (el) {

File: public/js/colorpicker.js
Match lines: 1
396|							cal.appendTo(document.body);

File: public/js/datetimepicker/tests/tests/methods.js
Match lines: 1
43|            var input= $('<input type="text" value="15.12.2008"/>').appendTo(document.body);

File: public/js/decision_system/risk_intelligence_signals.js
Match lines: 3
215|        if (!document.querySelector('.modal-backdrop')) {
217|            backdrop.className = 'modal-backdrop fade show';
244|        document.querySelectorAll('.modal-backdrop').forEach((node) => node.remove());

File: public/js/games_web/business_case_dinamica_de_negocios/game_phase_manager.js
Match lines: 1
809|            ".modal, .confirmation-modal, .modal-backdrop"

File: public/js/games_web/cenarios_globais/game_phase_manager.js
Match lines: 1
1618|            ".modal, .confirmation-modal, .modal-backdrop"

File: public/js/games_web/cognicao/game_phase_manager.js
Match lines: 1
1337|            ".modal, .confirmation-modal, .modal-backdrop"

File: public/js/games_web/compreensao_texto/game_phase_manager.js
Match lines: 1
1270|      ".modal, .confirmation-modal, .modal-backdrop"

File: public/js/games_web/conselho_gestor/game_phase_manager.js
Match lines: 1
1580|            ".modal, .confirmation-modal, .modal-backdrop"

File: public/js/games_web/game_template/game_phase_manager.js
Match lines: 1
1202|      ".modal, .confirmation-modal, .modal-backdrop"

File: public/js/games_web/inteligencia_emocional/game_phase_manager.js
Match lines: 1
1181|      ".modal, .confirmation-modal, .modal-backdrop"

File: public/js/games_web/raciocinio_logico/game_phase_manager.js
Match lines: 1
1232|      ".modal, .confirmation-modal, .modal-backdrop"

File: public/js/games_web/valores_individuais/game_phase_manager.js
Match lines: 1
1226|      ".modal, .confirmation-modal, .modal-backdrop"

File: public/js/goal-adriana-create-modal.js
Match lines: 1
550|        document.querySelectorAll('.modal-backdrop').forEach(function (el) {

File: public/js/goals-company-offcanvas.js
Match lines: 1
32|        document.querySelectorAll('.modal-backdrop').forEach(el => el.remove());

File: public/js/jquery-file-upload/js/cors/jquery.postmessage-transport.js
Match lines: 1
116|            .appendTo(document.body);

File: public/js/jquery-file-upload/js/jquery.iframe-transport.js
Match lines: 1
176|          form.append(iframe).appendTo(document.body);

File: public/js/jquery-file-upload/test/unit.js
Match lines: 1
65|      .appendTo(document.body);

File: public/js/jquery-ui-1.9.2.min.js
Match lines: 1
6|(function(e,t){function i(t,n){var r,i,o,u=t.nodeName.toLowerCase();return"area"===u?(r=t.parentNode,i=r.name,!t.href||!i||r.nodeName.toLowerCase()!=="map"?!1:(o=e("img[usemap=#"+i+"]")[0],!!o&&s(o))):(/input|select|textarea|button|object/.test(u)?!t.disabled:"a"===u?t.href||n:n)&&s(t)}function s(t){return e.expr.filters.visible(t)&&!e(t).parents().andSelf().filter(function(){return e.css(this,"visibility")==="hidden"}).length}var n=0,r=/^ui-id-\d+$/;e.ui=e.ui||{};if(e.ui.version)return;e.extend(e.ui,{version:"1.9.2",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),e.fn.extend({_focus:e.fn.focus,focus:function(t,n){return typeof t=="number"?this.each(function(){var r=this;setTimeout(function(){e(r).focus(),n&&n.call(r)},t)}):this._focus.apply(this,arguments)},scrollParent:function(){var t;return e.ui.ie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?t=this.parents().filter(function(){return/(relative|absolute|fixed)/.test(e.css(this,"position"))&&/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0):t=this.parents().filter(function(){return/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0),/fixed/.test(this.css("position"))||!t.length?e(document):t},zIndex:function(n){if(n!==t)return this.css("zIndex",n);if(this.length){var r=e(this[0]),i,s;while(r.length&&r[0]!==document){i=r.css("position");if(i==="absolute"||i==="relative"||i==="fixed"){s=parseInt(r.css("zIndex"),10);if(!isNaN(s)&&s!==0)return s}r=r.parent()}}return 0},uniqueId:function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++n)})},removeUniqueId:function(){return this.each(function(){r.test(this.id)&&e(this).removeAttr("id")})}}),e.extend(e.expr[":"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(n){return!!e.data(n,t)}}):function(t,n,r){return!!e.data(t,r[3])},focusable:function(t){return i(t,!isNaN(e.attr(t,"tabindex")))},tabbable:function(t){var n=e.attr(t,"tabindex"),r=isNaN(n);return(r||n>=0)&&i(t,!r)}}),e(function(){var t=document.body,n=t.appendChild(n=document.createElement("div"));n.offsetHeight,e.extend(n.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0}),e.support.minHeight=n.offsetHeight===100,e.support.selectstart="onselectstart"in n,t.removeChild(n).style.display="none"}),e("<a>").outerWidth(1).jquery||e.each(["Width","Height"],function(n,r){function u(t,n,r,s){return e.each(i,function(){n-=parseFloat(e.css(t,"padding"+this))||0,r&&(n-=parseFloat(e.css(t,"border"+this+"Width"))||0),s&&(n-=parseFloat(e.css(t,"margin"+this))||0)}),n}var i=r==="Width"?["Left","Right"]:["Top","Bottom"],s=r.toLowerCase(),o={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn["inner"+r]=function(n){return n===t?o["inner"+r].call(this):this.each(function(){e(this).css(s,u(this,n)+"px")})},e.fn["outer"+r]=function(t,n){return typeof t!="number"?o["outer"+r].call(this,t):this.each(function(){e(this).css(s,u(this,t,!0,n)+"px")})}}),e("<a>").data("a-b","a").removeData("a-b").data("a-b")&&(e.fn.removeData=function(t){return function(n){return arguments.length?t.call(this,e.camelCase(n)):t.call(this)}}(e.fn.removeData)),function(){var t=/msie ([\w.]+)/.exec(navigator.userAgent.toLowerCase())||[];e.ui.ie=t.length?!0:!1,e.ui.ie6=parseFloat(t[1],10)===6}(),e.fn.extend({disableSelection:function(){return this.bind((e.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),e.extend(e.ui,{plugin:{add:function(t,n,r){var i,s=e.ui[t].prototype;for(i in r)s.plugins[i]=s.plugins[i]||[],s.plugins[i].push([n,r[i]])},call:function(e,t,n){var r,i=e.plugins[t];if(!i||!e.element[0].parentNode||e.element[0].parentNode.nodeType===11)return;for(r=0;r<i.length;r++)e.options[i[r][0]]&&i[r][1].apply(e.element,n)}},contains:e.contains,hasScroll:function(t,n){if(e(t).css("overflow")==="hidden")return!1;var r=n&&n==="left"?"scrollLeft":"scrollTop",i=!1;return t[r]>0?!0:(t[r]=1,i=t[r]>0,t[r]=0,i)},isOverAxis:function(e,t,n){return e>t&&e<t+n},isOver:function(t,n,r,i,s,o){return e.ui.isOverAxis(t,r,s)&&e.ui.isOverAxis(n,i,o)}})})(jQuery);(function(e,t){var n=0,r=Array.prototype.slice,i=e.cleanData;e.cleanData=function(t){for(var n=0,r;(r=t[n])!=null;n++)try{e(r).triggerHandler("remove")}catch(s){}i(t)},e.widget=function(t,n,r){var i,s,o,u,a=t.split(".")[0];t=t.split(".")[1],i=a+"-"+t,r||(r=n,n=e.Widget),e.expr[":"][i.toLowerCase()]=function(t){return!!e.data(t,i)},e[a]=e[a]||{},s=e[a][t],o=e[a][t]=function(e,t){if(!this._createWidget)return new o(e,t);arguments.length&&this._createWidget(e,t)},e.extend(o,s,{version:r.version,_proto:e.extend({},r),_childConstructors:[]}),u=new n,u.options=e.widget.extend({},u.options),e.each(r,function(t,i){e.isFunction(i)&&(r[t]=function(){var e=function(){return n.prototype[t].apply(this,arguments)},r=function(e){return n.prototype[t].apply(this,e)};return function(){var t=this._super,n=this._superApply,s;return this._super=e,this._superApply=r,s=i.apply(this,arguments),this._super=t,this._superApply=n,s}}())}),o.prototype=e.widget.extend(u,{widgetEventPrefix:s?u.widgetEventPrefix:t},r,{constructor:o,namespace:a,widgetName:t,widgetBaseClass:i,widgetFullName:i}),s?(e.each(s._childConstructors,function(t,n){var r=n.prototype;e.widget(r.namespace+"."+r.widgetName,o,n._proto)}),delete s._childConstructors):n._childConstructors.push(o),e.widget.bridge(t,o)},e.widget.extend=function(n){var i=r.call(arguments,1),s=0,o=i.length,u,a;for(;s<o;s++)for(u in i[s])a=i[s][u],i[s].hasOwnProperty(u)&&a!==t&&(e.isPlainObject(a)?n[u]=e.isPlainObject(n[u])?e.widget.extend({},n[u],a):e.widget.extend({},a):n[u]=a);return n},e.widget.bridge=function(n,i){var s=i.prototype.widgetFullName||n;e.fn[n]=function(o){var u=typeof o=="string",a=r.call(arguments,1),f=this;return o=!u&&a.length?e.widget.extend.apply(null,[o].concat(a)):o,u?this.each(function(){var r,i=e.data(this,s);if(!i)return e.error("cannot call methods on "+n+" prior to initialization; "+"attempted to call method '"+o+"'");if(!e.isFunction(i[o])||o.charAt(0)==="_")return e.error("no such method '"+o+"' for "+n+" widget instance");r=i[o].apply(i,a);if(r!==i&&r!==t)return f=r&&r.jquery?f.pushStack(r.get()):r,!1}):this.each(function(){var t=e.data(this,s);t?t.option(o||{})._init():e.data(this,s,new i(o,this))}),f}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{disabled:!1,create:null},_createWidget:function(t,r){r=e(r||this.defaultElement||this)[0],this.element=e(r),this.uuid=n++,this.eventNamespace="."+this.widgetName+this.uuid,this.options=e.widget.extend({},this.options,this._getCreateOptions(),t),this.bindings=e(),this.hoverable=e(),this.focusable=e(),r!==this&&(e.data(r,this.widgetName,this),e.data(r,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===r&&this.destroy()}}),this.document=e(r.style?r.ownerDocument:r.document||r),this.window=e(this.document[0].defaultView||this.document[0].parentWindow)),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:e.noop,_getCreateEventData:e.noop,_create:e.noop,_init:e.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetName).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:e.noop,widget:function(){return this.element},option:function(n,r){var i=n,s,o,u;if(arguments.length===0)return e.widget.extend({},this.options);if(typeof n=="string"){i={},s=n.split("."),n=s.shift();if(s.length){o=i[n]=e.widget.extend({},this.options[n]);for(u=0;u<s.length-1;u++)o[s[u]]=o[s[u]]||{},o=o[s[u]];n=s.pop();if(r===t)return o[n]===t?null:o[n];o[n]=r}else{if(r===t)return this.options[n]===t?null:this.options[n];i[n]=r}}return this._setOptions(i),this},_setOptions:function(e){var t;for(t in e)this._setOption(t,e[t]);return this},_setOption:function(e,t){return this.options[e]=t,e==="disabled"&&(this.widget().toggleClass(this.widgetFullName+"-disabled ui-state-disabled",!!t).attr("aria-disabled",t),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")),this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_on:function(t,n,r){var i,s=this;typeof t!="boolean"&&(r=n,n=t,t=!1),r?(n=i=e(n),this.bindings=this.bindings.add(n)):(r=n,n=this.element,i=this.widget()),e.each(r,function(r,o){function u(){if(!t&&(s.options.disabled===!0||e(this).hasClass("ui-state-disabled")))return;return(typeof o=="string"?s[o]:o).apply(s,arguments)}typeof o!="string"&&(u.guid=o.guid=o.guid||u.guid||e.guid++);var a=r.match(/^(\w+)\s*(.*)$/),f=a[1]+s.eventNamespace,l=a[2];l?i.delegate(l,f,u):n.bind(f,u)})},_off:function(e,t){t=(t||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.unbind(t).undelegate(t)},_delay:function(e,t){function n(){return(typeof e=="string"?r[e]:e).apply(r,arguments)}var r=this;return setTimeout(n,t||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){e(t.currentTarget).addClass("ui-state-hover")},mouseleave:function(t){e(t.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){e(t.currentTarget).addClass("ui-state-focus")},focusout:function(t){e(t.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(t,n,r){var i,s,o=this.options[t];r=r||{},n=e.Event(n),n.type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),n.target=this.element[0],s=n.originalEvent;if(s)for(i in s)i in n||(n[i]=s[i]);return this.element.trigger(n,r),!(e.isFunction(o)&&o.apply(this.element[0],[n].concat(r))===!1||n.isDefaultPrevented())}},e.each({show:"fadeIn",hide:"fadeOut"},function(t,n){e.Widget.prototype["_"+t]=function(r,i,s){typeof i=="string"&&(i={effect:i});var o,u=i?i===!0||typeof i=="number"?n:i.effect||n:t;i=i||{},typeof i=="number"&&(i={duration:i}),o=!e.isEmptyObject(i),i.complete=s,i.delay&&r.delay(i.delay),o&&e.effects&&(e.effects.effect[u]||e.uiBackCompat!==!1&&e.effects[u])?r[t](i):u!==t&&r[u]?r[u](i.duration,i.easing,s):r.queue(function(n){e(this)[t](),s&&s.call(r[0]),n()})}}),e.uiBackCompat!==!1&&(e.Widget.prototype._getCreateOptions=function(){return e.metadata&&e.metadata.get(this.element[0])[this.widgetName]})})(jQuery);(function(e,t){var n=!1;e(document).mouseup(function(e){n=!1}),e.widget("ui.mouse",{version:"1.9.2",options:{cancel:"input,textarea,button,select,option",distance:1,delay:0},_mouseInit:function(){var t=this;this.element.bind("mousedown."+this.widgetName,function(e){return t._mouseDown(e)}).bind("click."+this.widgetName,function(n){if(!0===e.data(n.target,t.widgetName+".preventClickEvent"))return e.removeData(n.target,t.widgetName+".preventClickEvent"),n.stopImmediatePropagation(),!1}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),this._mouseMoveDelegate&&e(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(t){if(n)return;this._mouseStarted&&this._mouseUp(t),this._mouseDownEvent=t;var r=this,i=t.which===1,s=typeof this.options.cancel=="string"&&t.target.nodeName?e(t.target).closest(this.options.cancel).length:!1;if(!i||s||!this._mouseCapture(t))return!0;this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){r.mouseDelayMet=!0},this.options.delay));if(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)){this._mouseStarted=this._mouseStart(t)!==!1;if(!this._mouseStarted)return t.preventDefault(),!0}return!0===e.data(t.target,this.widgetName+".preventClickEvent")&&e.removeData(t.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(e){return r._mouseMove(e)},this._mouseUpDelegate=function(e){return r._mouseUp(e)},e(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),t.preventDefault(),n=!0,!0},_mouseMove:function(t){return!e.ui.ie||document.documentMode>=9||!!t.button?this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,t)!==!1,this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted):this._mouseUp(t)},_mouseUp:function(t){return e(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&e.data(t.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(t)),!1},_mouseDistanceMet:function(e){return Math.max(Math.abs(this._mouseDownEvent.pageX-e.pageX),Math.abs(this._mouseDownEvent.pageY-e.pageY))>=this.options.distance},_mouseDelayMet:function(e){return this.mouseDelayMet},_mouseStart:function(e){},_mouseDrag:function(e){},_mouseStop:function(e){},_mouseCapture:function(e){return!0}})})(jQuery);(function(e,t){function h(e,t,n){return[parseInt(e[0],10)*(l.test(e[0])?t/100:1),parseInt(e[1],10)*(l.test(e[1])?n/100:1)]}function p(t,n){return parseInt(e.css(t,n),10)||0}e.ui=e.ui||{};var n,r=Math.max,i=Math.abs,s=Math.round,o=/left|center|right/,u=/top|center|bottom/,a=/[\+\-]\d+%?/,f=/^\w+/,l=/%$/,c=e.fn.position;e.position={scrollbarWidth:function(){if(n!==t)return n;var r,i,s=e("<div style='display:block;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),o=s.children()[0];return e("body").append(s),r=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,r===i&&(i=s[0].clientWidth),s.remove(),n=r-i},getScrollInfo:function(t){var n=t.isWindow?"":t.element.css("overflow-x"),r=t.isWindow?"":t.element.css("overflow-y"),i=n==="scroll"||n==="auto"&&t.width<t.element[0].scrollWidth,s=r==="scroll"||r==="auto"&&t.height<t.element[0].scrollHeight;return{width:i?e.position.scrollbarWidth():0,height:s?e.position.scrollbarWidth():0}},getWithinInfo:function(t){var n=e(t||window),r=e.isWindow(n[0]);return{element:n,isWindow:r,offset:n.offset()||{left:0,top:0},scrollLeft:n.scrollLeft(),scrollTop:n.scrollTop(),width:r?n.width():n.outerWidth(),height:r?n.height():n.outerHeight()}}},e.fn.position=function(t){if(!t||!t.of)return c.apply(this,arguments);t=e.extend({},t);var n,l,d,v,m,g=e(t.of),y=e.position.getWithinInfo(t.within),b=e.position.getScrollInfo(y),w=g[0],E=(t.collision||"flip").split(" "),S={};return w.nodeType===9?(l=g.width(),d=g.height(),v={top:0,left:0}):e.isWindow(w)?(l=g.width(),d=g.height(),v={top:g.scrollTop(),left:g.scrollLeft()}):w.preventDefault?(t.at="left top",l=d=0,v={top:w.pageY,left:w.pageX}):(l=g.outerWidth(),d=g.outerHeight(),v=g.offset()),m=e.extend({},v),e.each(["my","at"],function(){var e=(t[this]||"").split(" "),n,r;e.length===1&&(e=o.test(e[0])?e.concat(["center"]):u.test(e[0])?["center"].concat(e):["center","center"]),e[0]=o.test(e[0])?e[0]:"center",e[1]=u.test(e[1])?e[1]:"center",n=a.exec(e[0]),r=a.exec(e[1]),S[this]=[n?n[0]:0,r?r[0]:0],t[this]=[f.exec(e[0])[0],f.exec(e[1])[0]]}),E.length===1&&(E[1]=E[0]),t.at[0]==="right"?m.left+=l:t.at[0]==="center"&&(m.left+=l/2),t.at[1]==="bottom"?m.top+=d:t.at[1]==="center"&&(m.top+=d/2),n=h(S.at,l,d),m.left+=n[0],m.top+=n[1],this.each(function(){var o,u,a=e(this),f=a.outerWidth(),c=a.outerHeight(),w=p(this,"marginLeft"),x=p(this,"marginTop"),T=f+w+p(this,"marginRight")+b.width,N=c+x+p(this,"marginBottom")+b.height,C=e.extend({},m),k=h(S.my,a.outerWidth(),a.outerHeight());t.my[0]==="right"?C.left-=f:t.my[0]==="center"&&(C.left-=f/2),t.my[1]==="bottom"?C.top-=c:t.my[1]==="center"&&(C.top-=c/2),C.left+=k[0],C.top+=k[1],e.support.offsetFractions||(C.left=s(C.left),C.top=s(C.top)),o={marginLeft:w,marginTop:x},e.each(["left","top"],function(r,i){e.ui.position[E[r]]&&e.ui.position[E[r]][i](C,{targetWidth:l,targetHeight:d,elemWidth:f,elemHeight:c,collisionPosition:o,collisionWidth:T,collisionHeight:N,offset:[n[0]+k[0],n[1]+k[1]],my:t.my,at:t.at,within:y,elem:a})}),e.fn.bgiframe&&a.bgiframe(),t.using&&(u=function(e){var n=v.left-C.left,s=n+l-f,o=v.top-C.top,u=o+d-c,h={target:{element:g,left:v.left,top:v.top,width:l,height:d},element:{element:a,left:C.left,top:C.top,width:f,height:c},horizontal:s<0?"left":n>0?"right":"center",vertical:u<0?"top":o>0?"bottom":"middle"};l<f&&i(n+s)<l&&(h.horizontal="center"),d<c&&i(o+u)<d&&(h.vertical="middle"),r(i(n),i(s))>r(i(o),i(u))?h.important="horizontal":h.important="vertical",t.using.call(this,e,h)}),a.offset(e.extend(C,{using:u}))})},e.ui.position={fit:{left:function(e,t){var n=t.within,i=n.isWindow?n.scrollLeft:n.offset.left,s=n.width,o=e.left-t.collisionPosition.marginLeft,u=i-o,a=o+t.collisionWidth-s-i,f;t.collisionWidth>s?u>0&&a<=0?(f=e.left+u+t.collisionWidth-s-i,e.left+=u-f):a>0&&u<=0?e.left=i:u>a?e.left=i+s-t.collisionWidth:e.left=i:u>0?e.left+=u:a>0?e.left-=a:e.left=r(e.left-o,e.left)},top:function(e,t){var n=t.within,i=n.isWindow?n.scrollTop:n.offset.top,s=t.within.height,o=e.top-t.collisionPosition.marginTop,u=i-o,a=o+t.collisionHeight-s-i,f;t.collisionHeight>s?u>0&&a<=0?(f=e.top+u+t.collisionHeight-s-i,e.top+=u-f):a>0&&u<=0?e.top=i:u>a?e.top=i+s-t.collisionHeight:e.top=i:u>0?e.top+=u:a>0?e.top-=a:e.top=r(e.top-o,e.top)}},flip:{left:function(e,t){var n=t.within,r=n.offset.left+n.scrollLeft,s=n.width,o=n.isWindow?n.scrollLeft:n.offset.left,u=e.left-t.collisionPosition.marginLeft,a=u-o,f=u+t.collisionWidth-s-o,l=t.my[0]==="left"?-t.elemWidth:t.my[0]==="right"?t.elemWidth:0,c=t.at[0]==="left"?t.targetWidth:t.at[0]==="right"?-t.targetWidth:0,h=-2*t.offset[0],p,d;if(a<0){p=e.left+l+c+h+t.collisionWidth-s-r;if(p<0||p<i(a))e.left+=l+c+h}else if(f>0){d=e.left-t.collisionPosition.marginLeft+l+c+h-o;if(d>0||i(d)<f)e.left+=l+c+h}},top:function(e,t){var n=t.within,r=n.offset.top+n.scrollTop,s=n.height,o=n.isWindow?n.scrollTop:n.offset.top,u=e.top-t.collisionPosition.marginTop,a=u-o,f=u+t.collisionHeight-s-o,l=t.my[1]==="top",c=l?-t.elemHeight:t.my[1]==="bottom"?t.elemHeight:0,h=t.at[1]==="top"?t.targetHeight:t.at[1]==="bottom"?-t.targetHeight:0,p=-2*t.offset[1],d,v;a<0?(v=e.top+c+h+p+t.collisionHeight-s-r,e.top+c+h+p>a&&(v<0||v<i(a))&&(e.top+=c+h+p)):f>0&&(d=e.top-t.collisionPosition.marginTop+c+h+p-o,e.top+c+h+p>f&&(d>0||i(d)<f)&&(e.top+=c+h+p))}},flipfit:{left:function(){e.ui.position.flip.left.apply(this,arguments),e.ui.position.fit.left.apply(this,arguments)},top:function(){e.ui.position.flip.top.apply(this,arguments),e.ui.position.fit.top.apply(this,arguments)}}},function(){var t,n,r,i,s,o=document.getElementsByTagName("body")[0],u=document.createElement("div");t=document.createElement(o?"div":"body"),r={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},o&&e.extend(r,{position:"absolute",left:"-1000px",top:"-1000px"});for(s in r)t.style[s]=r[s];t.appendChild(u),n=o||document.documentElement,n.insertBefore(t,n.firstChild),u.style.cssText="position: absolute; left: 10.7432222px;",i=e(u).offset().left,e.support.offsetFractions=i>10&&i<11,t.innerHTML="",n.removeChild(t)}(),e.uiBackCompat!==!1&&function(e){var n=e.fn.position;e.fn.position=function(r){if(!r||!r.offset)return n.call(this,r);var i=r.offset.split(" "),s=r.at.split(" ");return i.length===1&&(i[1]=i[0]),/^\d/.test(i[0])&&(i[0]="+"+i[0]),/^\d/.test(i[1])&&(i[1]="+"+i[1]),s.length===1&&(/left|center|right/.test(s[0])?s[1]="center":(s[1]=s[0],s[0]="center")),n.call(this,e.extend(r,{at:s[0]+i[0]+" "+s[1]+i[1],offset:t}))}}(jQuery)})(jQuery);(function(e,t){var n=0,r={},i={};r.height=r.paddingTop=r.paddingBottom=r.borderTopWidth=r.borderBottomWidth="hide",i.height=i.paddingTop=i.paddingBottom=i.borderTopWidth=i.borderBottomWidth="show",e.widget("ui.accordion",{version:"1.9.2",options:{active:0,animate:{},collapsible:!1,event:"click",header:"> li > :first-child,> :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},_create:function(){var t=this.accordionId="ui-accordion-"+(this.element.attr("id")||++n),r=this.options;this.prevShow=this.prevHide=e(),this.element.addClass("ui-accordion ui-widget ui-helper-reset"),this.headers=this.element.find(r.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all"),this._hoverable(this.headers),this._focusable(this.headers),this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom").hide(),!r.collapsible&&(r.active===!1||r.active==null)&&(r.active=0),r.active<0&&(r.active+=this.headers.length),this.active=this._findActive(r.active).addClass("ui-accordion-header-active ui-state-active").toggleClass("ui-corner-all ui-corner-top"),this.active.next().addClass("ui-accordion-content-active").show(),this._createIcons(),this.refresh(),this.element.attr("role","tablist"),this.headers.attr("role","tab").each(function(n){var r=e(this),i=r.attr("id"),s=r.next(),o=s.attr("id");i||(i=t+"-header-"+n,r.attr("id",i)),o||(o=t+"-panel-"+n,s.attr("id",o)),r.attr("aria-controls",o),s.attr("aria-labelledby",i)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false",tabIndex:-1}).next().attr({"aria-expanded":"false","aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true",tabIndex:0}).next().attr({"aria-expanded":"true","aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._on(this.headers,{keydown:"_keydown"}),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._setupEvents(r.event)},_getCreateEventData:function(){return{header:this.active,content:this.active.length?this.active.next():e()}},_createIcons:function(){var t=this.options.icons;t&&(e("<span>").addClass("ui-accordion-header-icon ui-icon "+t.header).prependTo(this.headers),this.active.children(".ui-accordion-header-icon").removeClass(t.header).addClass(t.activeHeader),this.headers.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.removeClass("ui-accordion-icons").children(".ui-accordion-header-icon").remove()},_destroy:function(){var e;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.removeClass("ui-accordion-header ui-accordion-header-active ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-selected").removeAttr("aria-controls").removeAttr("tabIndex").each(function(){/^ui-accordion/.test(this.id)&&this.removeAttribute("id")}),this._destroyIcons(),e=this.headers.next().css("display","").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled").each(function(){/^ui-accordion/.test(this.id)&&this.removeAttribute("id")}),this.options.heightStyle!=="content"&&e.css("height","")},_setOption:function(e,t){if(e==="active"){this._activate(t);return}e==="event"&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(t)),this._super(e,t),e==="collapsible"&&!t&&this.options.active===!1&&this._activate(0),e==="icons"&&(this._destroyIcons(),t&&this._createIcons()),e==="disabled"&&this.headers.add(this.headers.next()).toggleClass("ui-state-disabled",!!t)},_keydown:function(t){if(t.altKey||t.ctrlKey)return;var n=e.ui.keyCode,r=this.headers.length,i=this.headers.index(t.target),s=!1;switch(t.keyCode){case n.RIGHT:case n.DOWN:s=this.headers[(i+1)%r];break;case n.LEFT:case n.UP:s=this.headers[(i-1+r)%r];break;case n.SPACE:case n.ENTER:this._eventHandler(t);break;case n.HOME:s=this.headers[0];break;case n.END:s=this.headers[r-1]}s&&(e(t.target).attr("tabIndex",-1),e(s).attr("tabIndex",0),s.focus(),t.preventDefault())},_panelKeyDown:function(t){t.keyCode===e.ui.keyCode.UP&&t.ctrlKey&&e(t.currentTarget).prev().focus()},refresh:function(){var t,n,r=this.options.heightStyle,i=this.element.parent();r==="fill"?(e.support.minHeight||(n=i.css("overflow"),i.css("overflow","hidden")),t=i.height(),this.element.siblings(":visible").each(function(){var n=e(this),r=n.css("position");if(r==="absolute"||r==="fixed")return;t-=n.outerHeight(!0)}),n&&i.css("overflow",n),this.headers.each(function(){t-=e(this).outerHeight(!0)}),this.headers.next().each(function(){e(this).height(Math.max(0,t-e(this).innerHeight()+e(this).height()))}).css("overflow","auto")):r==="auto"&&(t=0,this.headers.next().each(function(){t=Math.max(t,e(this).css("height","").height())}).height(t))},_activate:function(t){var n=this._findActive(t)[0];if(n===this.active[0])return;n=n||this.active[0],this._eventHandler({target:n,currentTarget:n,preventDefault:e.noop})},_findActive:function(t){return typeof t=="number"?this.headers.eq(t):e()},_setupEvents:function(t){var n={};if(!t)return;e.each(t.split(" "),function(e,t){n[t]="_eventHandler"}),this._on(this.headers,n)},_eventHandler:function(t){var n=this.options,r=this.active,i=e(t.currentTarget),s=i[0]===r[0],o=s&&n.collapsible,u=o?e():i.next(),a=r.next(),f={oldHeader:r,oldPanel:a,newHeader:o?e():i,newPanel:u};t.preventDefault();if(s&&!n.collapsible||this._trigger("beforeActivate",t,f)===!1)return;n.active=o?!1:this.headers.index(i),this.active=s?e():i,this._toggle(f),r.removeClass("ui-accordion-header-active ui-state-active"),n.icons&&r.children(".ui-accordion-header-icon").removeClass(n.icons.activeHeader).addClass(n.icons.header),s||(i.removeClass("ui-corner-all").addClass("ui-accordion-header-active ui-state-active ui-corner-top"),n.icons&&i.children(".ui-accordion-header-icon").removeClass(n.icons.header).addClass(n.icons.activeHeader),i.next().addClass("ui-accordion-content-active"))},_toggle:function(t){var n=t.newPanel,r=this.prevShow.length?this.prevShow:t.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=n,this.prevHide=r,this.options.animate?this._animate(n,r,t):(r.hide(),n.show(),this._toggleComplete(t)),r.attr({"aria-expanded":"false","aria-hidden":"true"}),r.prev().attr("aria-selected","false"),n.length&&r.length?r.prev().attr("tabIndex",-1):n.length&&this.headers.filter(function(){return e(this).attr("tabIndex")===0}).attr("tabIndex",-1),n.attr({"aria-expanded":"true","aria-hidden":"false"}).prev().attr({"aria-selected":"true",tabIndex:0})},_animate:function(e,t,n){var s,o,u,a=this,f=0,l=e.length&&(!t.length||e.index()<t.index()),c=this.options.animate||{},h=l&&c.down||c,p=function(){a._toggleComplete(n)};typeof h=="number"&&(u=h),typeof h=="string"&&(o=h),o=o||h.easing||c.easing,u=u||h.duration||c.duration;if(!t.length)return e.animate(i,u,o,p);if(!e.length)return t.animate(r,u,o,p);s=e.show().outerHeight(),t.animate(r,{duration:u,easing:o,step:function(e,t){t.now=Math.round(e)}}),e.hide().animate(i,{duration:u,easing:o,complete:p,step:function(e,n){n.now=Math.round(e),n.prop!=="height"?f+=n.now:a.options.heightStyle!=="content"&&(n.now=Math.round(s-t.outerHeight()-f),f=0)}})},_toggleComplete:function(e){var t=e.oldPanel;t.removeClass("ui-accordion-content-active").prev().removeClass("ui-corner-top").addClass("ui-corner-all"),t.length&&(t.parent()[0].className=t.parent()[0].className),this._trigger("activate",null,e)}}),e.uiBackCompat!==!1&&(function(e,t){e.extend(t.options,{navigation:!1,navigationFilter:function(){return this.href.toLowerCase()===location.href.toLowerCase()}});var n=t._create;t._create=function(){if(this.options.navigation){var t=this,r=this.element.find(this.options.header),i=r.next(),s=r.add(i).find("a").filter(this.options.navigationFilter)[0];s&&r.add(i).each(function(n){if(e.contains(this,s))return t.options.active=Math.floor(n/2),!1})}n.call(this)}}(jQuery,jQuery.ui.accordion.prototype),function(e,t){e.extend(t.options,{heightStyle:null,autoHeight:!0,clearStyle:!1,fillSpace:!1});var n=t._create,r=t._setOption;e.extend(t,{_create:function(){this.options.heightStyle=this.options.heightStyle||this._mergeHeightStyle(),n.call(this)},_setOption:function(e){if(e==="autoHeight"||e==="clearStyle"||e==="fillSpace")this.options.heightStyle=this._mergeHeightStyle();r.apply(this,arguments)},_mergeHeightStyle:function(){var e=this.options;if(e.fillSpace)return"fill";if(e.clearStyle)return"content";if(e.autoHeight)return"auto"}})}(jQuery,jQuery.ui.accordion.prototype),function(e,t){e.extend(t.options.icons,{activeHeader:null,headerSelected:"ui-icon-triangle-1-s"});var n=t._createIcons;t._createIcons=function(){this.options.icons&&(this.options.icons.activeHeader=this.options.icons.activeHeader||this.options.icons.headerSelected),n.call(this)}}(jQuery,jQuery.ui.accordion.prototype),function(e,t){t.activate=t._activate;var n=t._findActive;t._findActive=function(e){return e===-1&&(e=!1),e&&typeof e!="number"&&(e=this.headers.index(this.headers.filter(e)),e===-1&&(e=!1)),n.call(this,e)}}(jQuery,jQuery.ui.accordion.prototype),jQuery.ui.accordion.prototype.resize=jQuery.ui.accordion.prototype.refresh,function(e,t){e.extend(t.options,{change:null,changestart:null});var n=t._trigger;t._trigger=function(e,t,r){var i=n.apply(this,arguments);return i?(e==="beforeActivate"?i=n.call(this,"changestart",t,{oldHeader:r.oldHeader,oldContent:r.oldPanel,newHeader:r.newHeader,newContent:r.newPanel}):e==="activate"&&(i=n.call(this,"change",t,{oldHeader:r.oldHeader,oldContent:r.oldPanel,newHeader:r.newHeader,newContent:r.newPanel})),i):!1}}(jQuery,jQuery.ui.accordion.prototype),function(e,t){e.extend(t.options,{animate:null,animated:"slide"});var n=t._create;t._create=function(){var e=this.options;e.animate===null&&(e.animated?e.animated==="slide"?e.animate=300:e.animated==="bounceslide"?e.animate={duration:200,down:{easing:"easeOutBounce",duration:1e3}}:e.animate=e.animated:e.animate=!1),n.call(this)}}(jQuery,jQuery.ui.accordion.prototype))})(jQuery);(function(e,t){var n=0;e.widget("ui.autocomplete",{version:"1.9.2",defaultElement:"<input>",options:{appendTo:"body",autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},pending:0,_create:function(){var t,n,r;this.isMultiLine=this._isMultiLine(),this.valueMethod=this.element[this.element.is("input,textarea")?"val":"text"],this.isNewMenu=!0,this.element.addClass("ui-autocomplete-input").attr("autocomplete","off"),this._on(this.element,{keydown:function(i){if(this.element.prop("readOnly")){t=!0,r=!0,n=!0;return}t=!1,r=!1,n=!1;var s=e.ui.keyCode;switch(i.keyCode){case s.PAGE_UP:t=!0,this._move("previousPage",i);break;case s.PAGE_DOWN:t=!0,this._move("nextPage",i);break;case s.UP:t=!0,this._keyEvent("previous",i);break;case s.DOWN:t=!0,this._keyEvent("next",i);break;case s.ENTER:case s.NUMPAD_ENTER:this.menu.active&&(t=!0,i.preventDefault(),this.menu.select(i));break;case s.TAB:this.menu.active&&this.menu.select(i);break;case s.ESCAPE:this.menu.element.is(":visible")&&(this._value(this.term),this.close(i),i.preventDefault());break;default:n=!0,this._searchTimeout(i)}},keypress:function(r){if(t){t=!1,r.preventDefault();return}if(n)return;var i=e.ui.keyCode;switch(r.keyCode){case i.PAGE_UP:this._move("previousPage",r);break;case i.PAGE_DOWN:this._move("nextPage",r);break;case i.UP:this._keyEvent("previous",r);break;case i.DOWN:this._keyEvent("next",r)}},input:function(e){if(r){r=!1,e.preventDefault();return}this._searchTimeout(e)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(e){if(this.cancelBlur){delete this.cancelBlur;return}clearTimeout(this.searching),this.close(e),this._change(e)}}),this._initSource(),this.menu=e("<ul>").addClass("ui-autocomplete").appendTo(this.document.find(this.options.appendTo||"body")[0]).menu({input:e(),role:null}).zIndex(this.element.zIndex()+1).hide().data("menu"),this._on(this.menu.element,{mousedown:function(t){t.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur});var n=this.menu.element[0];e(t.target).closest(".ui-menu-item").length||this._delay(function(){var t=this;this.document.one("mousedown",function(r){r.target!==t.element[0]&&r.target!==n&&!e.contains(n,r.target)&&t.close()})})},menufocus:function(t,n){if(this.isNewMenu){this.isNewMenu=!1;if(t.originalEvent&&/^mouse/.test(t.originalEvent.type)){this.menu.blur(),this.document.one("mousemove",function(){e(t.target).trigger(t.originalEvent)});return}}var r=n.item.data("ui-autocomplete-item")||n.item.data("item.autocomplete");!1!==this._trigger("focus",t,{item:r})?t.originalEvent&&/^key/.test(t.originalEvent.type)&&this._value(r.value):this.liveRegion.text(r.value)},menuselect:function(e,t){var n=t.item.data("ui-autocomplete-item")||t.item.data("item.autocomplete"),r=this.previous;this.element[0]!==this.document[0].activeElement&&(this.element.focus(),this.previous=r,this._delay(function(){this.previous=r,this.selectedItem=n})),!1!==this._trigger("select",e,{item:n})&&this._value(n.value),this.term=this._value(),this.close(e),this.selectedItem=n}}),this.liveRegion=e("<span>",{role:"status","aria-live":"polite"}).addClass("ui-helper-hidden-accessible").insertAfter(this.element),e.fn.bgiframe&&this.menu.element.bgiframe(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(e,t){this._super(e,t),e==="source"&&this._initSource(),e==="appendTo"&&this.menu.element.appendTo(this.document.find(t||"body")[0]),e==="disabled"&&t&&this.xhr&&this.xhr.abort()},_isMultiLine:function(){return this.element.is("textarea")?!0:this.element.is("input")?!1:this.element.prop("isContentEditable")},_initSource:function(){var t,n,r=this;e.isArray(this.options.source)?(t=this.options.source,this.source=function(n,r){r(e.ui.autocomplete.filter(t,n.term))}):typeof this.options.source=="string"?(n=this.options.source,this.source=function(t,i){r.xhr&&r.xhr.abort(),r.xhr=e.ajax({url:n,data:t,dataType:"json",success:function(e){i(e)},error:function(){i([])}})}):this.source=this.options.source},_searchTimeout:function(e){clearTimeout(this.searching),this.searching=this._delay(function(){this.term!==this._value()&&(this.selectedItem=null,this.search(null,e))},this.options.delay)},search:function(e,t){e=e!=null?e:this._value(),this.term=this._value();if(e.length<this.options.minLength)return this.close(t);if(this._trigger("search",t)===!1)return;return this._search(e)},_search:function(e){this.pending++,this.element.addClass("ui-autocomplete-loading"),this.cancelSearch=!1,this.source({term:e},this._response())},_response:function(){var e=this,t=++n;return function(r){t===n&&e.__response(r),e.pending--,e.pending||e.element.removeClass("ui-autocomplete-loading")}},__response:function(e){e&&(e=this._normalize(e)),this._trigger("response",null,{content:e}),!this.options.disabled&&e&&e.length&&!this.cancelSearch?(this._suggest(e),this._trigger("open")):this._close()},close:function(e){this.cancelSearch=!0,this._close(e)},_close:function(e){this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.blur(),this.isNewMenu=!0,this._trigger("close",e))},_change:function(e){this.previous!==this._value()&&this._trigger("change",e,{item:this.selectedItem})},_normalize:function(t){return t.length&&t[0].label&&t[0].value?t:e.map(t,function(t){return typeof t=="string"?{label:t,value:t}:e.extend({label:t.label||t.value,value:t.value||t.label},t)})},_suggest:function(t){var n=this.menu.element.empty().zIndex(this.element.zIndex()+1);this._renderMenu(n,t),this.menu.refresh(),n.show(),this._resizeMenu(),n.position(e.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next()},_resizeMenu:function(){var e=this.menu.element;e.outerWidth(Math.max(e.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(t,n){var r=this;e.each(n,function(e,n){r._renderItemData(t,n)})},_renderItemData:function(e,t){return this._renderItem(e,t).data("ui-autocomplete-item",t)},_renderItem:function(t,n){return e("<li>").append(e("<a>").text(n.label)).appendTo(t)},_move:function(e,t){if(!this.menu.element.is(":visible")){this.search(null,t);return}if(this.menu.isFirstItem()&&/^previous/.test(e)||this.menu.isLastItem()&&/^next/.test(e)){this._value(this.term),this.menu.blur();return}this.menu[e](t)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(e,t){if(!this.isMultiLine||this.menu.element.is(":visible"))this._move(e,t),t.preventDefault()}}),e.extend(e.ui.autocomplete,{escapeRegex:function(e){return e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(t,n){var r=new RegExp(e.ui.autocomplete.escapeRegex(n),"i");return e.grep(t,function(e){return r.test(e.label||e.value||e)})}}),e.widget("ui.autocomplete",e.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(e){return e+(e>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(e){var t;this._superApply(arguments);if(this.options.disabled||this.cancelSearch)return;e&&e.length?t=this.options.messages.results(e.length):t=this.options.messages.noResults,this.liveRegion.text(t)}})})(jQuery);(function(e,t){var n,r,i,s,o="ui-button ui-widget ui-state-default ui-corner-all",u="ui-state-hover ui-state-active ",a="ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",f=function(){var t=e(this).find(":ui-button");setTimeout(function(){t.button("refresh")},1)},l=function(t){var n=t.name,r=t.form,i=e([]);return n&&(r?i=e(r).find("[name='"+n+"']"):i=e("[name='"+n+"']",t.ownerDocument).filter(function(){return!this.form})),i};e.widget("ui.button",{version:"1.9.2",defaultElement:"<button>",options:{disabled:null,text:!0,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset"+this.eventNamespace).bind("reset"+this.eventNamespace,f),typeof this.options.disabled!="boolean"?this.options.disabled=!!this.element.prop("disabled"):this.element.prop("disabled",this.options.disabled),this._determineButtonType(),this.hasTitle=!!this.buttonElement.attr("title");var t=this,u=this.options,a=this.type==="checkbox"||this.type==="radio",c=a?"":"ui-state-active",h="ui-state-focus";u.label===null&&(u.label=this.type==="input"?this.buttonElement.val():this.buttonElement.html()),this._hoverable(this.buttonElement),this.buttonElement.addClass(o).attr("role","button").bind("mouseenter"+this.eventNamespace,function(){if(u.disabled)return;this===n&&e(this).addClass("ui-state-active")}).bind("mouseleave"+this.eventNamespace,function(){if(u.disabled)return;e(this).removeClass(c)}).bind("click"+this.eventNamespace,function(e){u.disabled&&(e.preventDefault(),e.stopImmediatePropagation())}),this.element.bind("focus"+this.eventNamespace,function(){t.buttonElement.addClass(h)}).bind("blur"+this.eventNamespace,function(){t.buttonElement.removeClass(h)}),a&&(this.element.bind("change"+this.eventNamespace,function(){if(s)return;t.refresh()}),this.buttonElement.bind("mousedown"+this.eventNamespace,function(e){if(u.disabled)return;s=!1,r=e.pageX,i=e.pageY}).bind("mouseup"+this.eventNamespace,function(e){if(u.disabled)return;if(r!==e.pageX||i!==e.pageY)s=!0})),this.type==="checkbox"?this.buttonElement.bind("click"+this.eventNamespace,function(){if(u.disabled||s)return!1;e(this).toggleClass("ui-state-active"),t.buttonElement.attr("aria-pressed",t.element[0].checked)}):this.type==="radio"?this.buttonElement.bind("click"+this.eventNamespace,function(){if(u.disabled||s)return!1;e(this).addClass("ui-state-active"),t.buttonElement.attr("aria-pressed","true");var n=t.element[0];l(n).not(n).map(function(){return e(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed","false")}):(this.buttonElement.bind("mousedown"+this.eventNamespace,function(){if(u.disabled)return!1;e(this).addClass("ui-state-active"),n=this,t.document.one("mouseup",function(){n=null})}).bind("mouseup"+this.eventNamespace,function(){if(u.disabled)return!1;e(this).removeClass("ui-state-active")}).bind("keydown"+this.eventNamespace,function(t){if(u.disabled)return!1;(t.keyCode===e.ui.keyCode.SPACE||t.keyCode===e.ui.keyCode.ENTER)&&e(this).addClass("ui-state-active")}).bind("keyup"+this.eventNamespace,function(){e(this).removeClass("ui-state-active")}),this.buttonElement.is("a")&&this.buttonElement.keyup(function(t){t.keyCode===e.ui.keyCode.SPACE&&e(this).click()})),this._setOption("disabled",u.disabled),this._resetButton()},_determineButtonType:function(){var e,t,n;this.element.is("[type=checkbox]")?this.type="checkbox":this.element.is("[type=radio]")?this.type="radio":this.element.is("input")?this.type="input":this.type="button",this.type==="checkbox"||this.type==="radio"?(e=this.element.parents().last(),t="label[for='"+this.element.attr("id")+"']",this.buttonElement=e.find(t),this.buttonElement.length||(e=e.length?e.siblings():this.element.siblings(),this.buttonElement=e.filter(t),this.buttonElement.length||(this.buttonElement=e.find(t))),this.element.addClass("ui-helper-hidden-accessible"),n=this.element.is(":checked"),n&&this.buttonElement.addClass("ui-state-active"),this.buttonElement.prop("aria-pressed",n)):this.buttonElement=this.element},widget:function(){return this.buttonElement},_destroy:function(){this.element.removeClass("ui-helper-hidden-accessible"),this.buttonElement.removeClass(o+" "+u+" "+a).removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html()),this.hasTitle||this.buttonElement.removeAttr("title")},_setOption:function(e,t){this._super(e,t);if(e==="disabled"){t?this.element.prop("disabled",!0):this.element.prop("disabled",!1);return}this._resetButton()},refresh:function(){var t=this.element.is("input, button")?this.element.is(":disabled"):this.element.hasClass("ui-button-disabled");t!==this.options.disabled&&this._setOption("disabled",t),this.type==="radio"?l(this.element[0]).each(function(){e(this).is(":checked")?e(this).button("widget").addClass("ui-state-active").attr("aria-pressed","true"):e(this).button("widget").removeClass("ui-state-active").attr("aria-pressed","false")}):this.type==="checkbox"&&(this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed","true"):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed","false"))},_resetButton:function(){if(this.type==="input"){this.options.label&&this.element.val(this.options.label);return}var t=this.buttonElement.removeClass(a),n=e("<span></span>",this.document[0]).addClass("ui-button-text").html(this.options.label).appendTo(t.empty()).text(),r=this.options.icons,i=r.primary&&r.secondary,s=[];r.primary||r.secondary?(this.options.text&&s.push("ui-button-text-icon"+(i?"s":r.primary?"-primary":"-secondary")),r.primary&&t.prepend("<span class='ui-button-icon-primary ui-icon "+r.primary+"'></span>"),r.secondary&&t.append("<span class='ui-button-icon-secondary ui-icon "+r.secondary+"'></span>"),this.options.text||(s.push(i?"ui-button-icons-only":"ui-button-icon-only"),this.hasTitle||t.attr("title",e.trim(n)))):s.push("ui-button-text-only"),t.addClass(s.join(" "))}}),e.widget("ui.buttonset",{version:"1.9.2",options:{items:"button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(e,t){e==="disabled"&&this.buttons.button("option",e,t),this._super(e,t)},refresh:function(){var t=this.element.css("direction")==="rtl";this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return e(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(t?"ui-corner-right":"ui-corner-left").end().filter(":last").addClass(t?"ui-corner-left":"ui-corner-right").end().end()},_destroy:function(){this.element.removeClass("ui-buttonset"),this.buttons.map(function(){return e(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy")}})})(jQuery);(function($,undefined){function Datepicker(){this.debug=!1,this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},$.extend(this._defaults,this.regional[""]),this.dpDiv=bindHover($('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}function bindHover(e){var t="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return e.delegate(t,"mouseout",function(){$(this).removeClass("ui-state-hover"),this.className.indexOf("ui-datepicker-prev")!=-1&&$(this).removeClass("ui-datepicker-prev-hover"),this.className.indexOf("ui-datepicker-next")!=-1&&$(this).removeClass("ui-datepicker-next-hover")}).delegate(t,"mouseover",function(){$.datepicker._isDisabledDatepicker(instActive.inline?e.parent()[0]:instActive.input[0])||($(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),$(this).addClass("ui-state-hover"),this.className.indexOf("ui-datepicker-prev")!=-1&&$(this).addClass("ui-datepicker-prev-hover"),this.className.indexOf("ui-datepicker-next")!=-1&&$(this).addClass("ui-datepicker-next-hover"))})}function extendRemove(e,t){$.extend(e,t);for(var n in t)if(t[n]==null||t[n]==undefined)e[n]=t[n];return e}$.extend($.ui,{datepicker:{version:"1.9.2"}});var PROP_NAME="datepicker",dpuuid=(new Date).getTime(),instActive;$.extend(Datepicker.prototype,{markerClassName:"hasDatepicker",maxRows:4,log:function(){this.debug&&console.log.apply("",arguments)},_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(e){return extendRemove(this._defaults,e||{}),this},_attachDatepicker:function(target,settings){var inlineSettings=null;for(var attrName in this._defaults){var attrValue=target.getAttribute("date:"+attrName);if(attrValue){inlineSettings=inlineSettings||{};try{inlineSettings[attrName]=eval(attrValue)}catch(err){inlineSettings[attrName]=attrValue}}}var nodeName=target.nodeName.toLowerCase(),inline=nodeName=="div"||nodeName=="span";target.id||(this.uuid+=1,target.id="dp"+this.uuid);var inst=this._newInst($(target),inline);inst.settings=$.extend({},settings||{},inlineSettings||{}),nodeName=="input"?this._connectDatepicker(target,inst):inline&&this._inlineDatepicker(target,inst)},_newInst:function(e,t){var n=e[0].id.replace(/([^A-Za-z0-9_-])/g,"\\\\$1");return{id:n,input:e,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:t,dpDiv:t?bindHover($('<div class="'+this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>')):this.dpDiv}},_connectDatepicker:function(e,t){var n=$(e);t.append=$([]),t.trigger=$([]);if(n.hasClass(this.markerClassName))return;this._attachments(n,t),n.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",function(e,n,r){t.settings[n]=r}).bind("getData.datepicker",function(e,n){return this._get(t,n)}),this._autoSize(t),$.data(e,PROP_NAME,t),t.settings.disabled&&this._disableDatepicker(e)},_attachments:function(e,t){var n=this._get(t,"appendText"),r=this._get(t,"isRTL");t.append&&t.append.remove(),n&&(t.append=$('<span class="'+this._appendClass+'">'+n+"</span>"),e[r?"before":"after"](t.append)),e.unbind("focus",this._showDatepicker),t.trigger&&t.trigger.remove();var i=this._get(t,"showOn");(i=="focus"||i=="both")&&e.focus(this._showDatepicker);if(i=="button"||i=="both"){var s=this._get(t,"buttonText"),o=this._get(t,"buttonImage");t.trigger=$(this._get(t,"buttonImageOnly")?$("<img/>").addClass(this._triggerClass).attr({src:o,alt:s,title:s}):$('<button type="button"></button>').addClass(this._triggerClass).html(o==""?s:$("<img/>").attr({src:o,alt:s,title:s}))),e[r?"before":"after"](t.trigger),t.trigger.click(function(){return $.datepicker._datepickerShowing&&$.datepicker._lastInput==e[0]?$.datepicker._hideDatepicker():$.datepicker._datepickerShowing&&$.datepicker._lastInput!=e[0]?($.datepicker._hideDatepicker(),$.datepicker._showDatepicker(e[0])):$.datepicker._showDatepicker(e[0]),!1})}},_autoSize:function(e){if(this._get(e,"autoSize")&&!e.inline){var t=new Date(2009,11,20),n=this._get(e,"dateFormat");if(n.match(/[DM]/)){var r=function(e){var t=0,n=0;for(var r=0;r<e.length;r++)e[r].length>t&&(t=e[r].length,n=r);return n};t.setMonth(r(this._get(e,n.match(/MM/)?"monthNames":"monthNamesShort"))),t.setDate(r(this._get(e,n.match(/DD/)?"dayNames":"dayNamesShort"))+20-t.getDay())}e.input.attr("size",this._formatDate(e,t).length)}},_inlineDatepicker:function(e,t){var n=$(e);if(n.hasClass(this.markerClassName))return;n.addClass(this.markerClassName).append(t.dpDiv).bind("setData.datepicker",function(e,n,r){t.settings[n]=r}).bind("getData.datepicker",function(e,n){return this._get(t,n)}),$.data(e,PROP_NAME,t),this._setDate(t,this._getDefaultDate(t),!0),this._updateDatepicker(t),this._updateAlternate(t),t.settings.disabled&&this._disableDatepicker(e),t.dpDiv.css("display","block")},_dialogDatepicker:function(e,t,n,r,i){var s=this._dialogInst;if(!s){this.uuid+=1;var o="dp"+this.uuid;this._dialogInput=$('<input type="text" id="'+o+'" style="position: absolute; top: -100px; width: 0px;"/>'),this._dialogInput.keydown(this._doKeyDown),$("body").append(this._dialogInput),s=this._dialogInst=this._newInst(this._dialogInput,!1),s.settings={},$.data(this._dialogInput[0],PROP_NAME,s)}extendRemove(s.settings,r||{}),t=t&&t.constructor==Date?this._formatDate(s,t):t,this._dialogInput.val(t),this._pos=i?i.length?i:[i.pageX,i.pageY]:null;if(!this._pos){var u=document.documentElement.clientWidth,a=document.documentElement.clientHeight,f=document.documentElement.scrollLeft||document.body.scrollLeft,l=document.documentElement.scrollTop||document.body.scrollTop;this._pos=[u/2-100+f,a/2-150+l]}return this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),s.settings.onSelect=n,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),$.blockUI&&$.blockUI(this.dpDiv),$.data(this._dialogInput[0],PROP_NAME,s),this},_destroyDatepicker:function(e){var t=$(e),n=$.data(e,PROP_NAME);if(!t.hasClass(this.markerClassName))return;var r=e.nodeName.toLowerCase();$.removeData(e,PROP_NAME),r=="input"?(n.append.remove(),n.trigger.remove(),t.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)):(r=="div"||r=="span")&&t.removeClass(this.markerClassName).empty()},_enableDatepicker:function(e){var t=$(e),n=$.data(e,PROP_NAME);if(!t.hasClass(this.markerClassName))return;var r=e.nodeName.toLowerCase();if(r=="input")e.disabled=!1,n.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""});else if(r=="div"||r=="span"){var i=t.children("."+this._inlineClass);i.children().removeClass("ui-state-disabled"),i.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)}this._disabledInputs=$.map(this._disabledInputs,function(t){return t==e?null:t})},_disableDatepicker:function(e){var t=$(e),n=$.data(e,PROP_NAME);if(!t.hasClass(this.markerClassName))return;var r=e.nodeName.toLowerCase();if(r=="input")e.disabled=!0,n.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"});else if(r=="div"||r=="span"){var i=t.children("."+this._inlineClass);i.children().addClass("ui-state-disabled"),i.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)}this._disabledInputs=$.map(this._disabledInputs,function(t){return t==e?null:t}),this._disabledInputs[this._disabledInputs.length]=e},_isDisabledDatepicker:function(e){if(!e)return!1;for(var t=0;t<this._disabledInputs.length;t++)if(this._disabledInputs[t]==e)return!0;return!1},_getInst:function(e){try{return $.data(e,PROP_NAME)}catch(t){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(e,t,n){var r=this._getInst(e);if(arguments.length==2&&typeof t=="string")return t=="defaults"?$.extend({},$.datepicker._defaults):r?t=="all"?$.extend({},r.settings):this._get(r,t):null;var i=t||{};typeof t=="string"&&(i={},i[t]=n);if(r){this._curInst==r&&this._hideDatepicker();var s=this._getDateDatepicker(e,!0),o=this._getMinMaxDate(r,"min"),u=this._getMinMaxDate(r,"max");extendRemove(r.settings,i),o!==null&&i.dateFormat!==undefined&&i.minDate===undefined&&(r.settings.minDate=this._formatDate(r,o)),u!==null&&i.dateFormat!==undefined&&i.maxDate===undefined&&(r.settings.maxDate=this._formatDate(r,u)),this._attachments($(e),r),this._autoSize(r),this._setDate(r,s),this._updateAlternate(r),this._updateDatepicker(r)}},_changeDatepicker:function(e,t,n){this._optionDatepicker(e,t,n)},_refreshDatepicker:function(e){var t=this._getInst(e);t&&this._updateDatepicker(t)},_setDateDatepicker:function(e,t){var n=this._getInst(e);n&&(this._setDate(n,t),this._updateDatepicker(n),this._updateAlternate(n))},_getDateDatepicker:function(e,t){var n=this._getInst(e);return n&&!n.inline&&this._setDateFromField(n,t),n?this._getDate(n):null},_doKeyDown:function(e){var t=$.datepicker._getInst(e.target),n=!0,r=t.dpDiv.is(".ui-datepicker-rtl");t._keyEvent=!0;if($.datepicker._datepickerShowing)switch(e.keyCode){case 9:$.datepicker._hideDatepicker(),n=!1;break;case 13:var i=$("td."+$.datepicker._dayOverClass+":not(."+$.datepicker._currentClass+")",t.dpDiv);i[0]&&$.datepicker._selectDay(e.target,t.selectedMonth,t.selectedYear,i[0]);var s=$.datepicker._get(t,"onSelect");if(s){var o=$.datepicker._formatDate(t);s.apply(t.input?t.input[0]:null,[o,t])}else $.datepicker._hideDatepicker();return!1;case 27:$.datepicker._hideDatepicker();break;case 33:$.datepicker._adjustDate(e.target,e.ctrlKey?-$.datepicker._get(t,"stepBigMonths"):-$.datepicker._get(t,"stepMonths"),"M");break;case 34:$.datepicker._adjustDate(e.target,e.ctrlKey?+$.datepicker._get(t,"stepBigMonths"):+$.datepicker._get(t,"stepMonths"),"M");break;case 35:(e.ctrlKey||e.metaKey)&&$.datepicker._clearDate(e.target),n=e.ctrlKey||e.metaKey;break;case 36:(e.ctrlKey||e.metaKey)&&$.datepicker._gotoToday(e.target),n=e.ctrlKey||e.metaKey;break;case 37:(e.ctrlKey||e.metaKey)&&$.datepicker._adjustDate(e.target,r?1:-1,"D"),n=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&$.datepicker._adjustDate(e.target,e.ctrlKey?-$.datepicker._get(t,"stepBigMonths"):-$.datepicker._get(t,"stepMonths"),"M");break;case 38:(e.ctrlKey||e.metaKey)&&$.datepicker._adjustDate(e.target,-7,"D"),n=e.ctrlKey||e.metaKey;break;case 39:(e.ctrlKey||e.metaKey)&&$.datepicker._adjustDate(e.target,r?-1:1,"D"),n=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&$.datepicker._adjustDate(e.target,e.ctrlKey?+$.datepicker._get(t,"stepBigMonths"):+$.datepicker._get(t,"stepMonths"),"M");break;case 40:(e.ctrlKey||e.metaKey)&&$.datepicker._adjustDate(e.target,7,"D"),n=e.ctrlKey||e.metaKey;break;default:n=!1}else e.keyCode==36&&e.ctrlKey?$.datepicker._showDatepicker(this):n=!1;n&&(e.preventDefault(),e.stopPropagation())},_doKeyPress:function(e){var t=$.datepicker._getInst(e.target);if($.datepicker._get(t,"constrainInput")){var n=$.datepicker._possibleChars($.datepicker._get(t,"dateFormat")),r=String.fromCharCode(e.charCode==undefined?e.keyCode:e.charCode);return e.ctrlKey||e.metaKey||r<" "||!n||n.indexOf(r)>-1}},_doKeyUp:function(e){var t=$.datepicker._getInst(e.target);if(t.input.val()!=t.lastVal)try{var n=$.datepicker.parseDate($.datepicker._get(t,"dateFormat"),t.input?t.input.val():null,$.datepicker._getFormatConfig(t));n&&($.datepicker._setDateFromField(t),$.datepicker._updateAlternate(t),$.datepicker._updateDatepicker(t))}catch(r){$.datepicker.log(r)}return!0},_showDatepicker:function(e){e=e.target||e,e.nodeName.toLowerCase()!="input"&&(e=$("input",e.parentNode)[0]);if($.datepicker._isDisabledDatepicker(e)||$.datepicker._lastInput==e)return;var t=$.datepicker._getInst(e);$.datepicker._curInst&&$.datepicker._curInst!=t&&($.datepicker._curInst.dpDiv.stop(!0,!0),t&&$.datepicker._datepickerShowing&&$.datepicker._hideDatepicker($.datepicker._curInst.input[0]));var n=$.datepicker._get(t,"beforeShow"),r=n?n.apply(e,[e,t]):{};if(r===!1)return;extendRemove(t.settings,r),t.lastVal=null,$.datepicker._lastInput=e,$.datepicker._setDateFromField(t),$.datepicker._inDialog&&(e.value=""),$.datepicker._pos||($.datepicker._pos=$.datepicker._findPos(e),$.datepicker._pos[1]+=e.offsetHeight);var i=!1;$(e).parents().each(function(){return i|=$(this).css("position")=="fixed",!i});var s={left:$.datepicker._pos[0],top:$.datepicker._pos[1]};$.datepicker._pos=null,t.dpDiv.empty(),t.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),$.datepicker._updateDatepicker(t),s=$.datepicker._checkOffset(t,s,i),t.dpDiv.css({position:$.datepicker._inDialog&&$.blockUI?"static":i?"fixed":"absolute",display:"none",left:s.left+"px",top:s.top+"px"});if(!t.inline){var o=$.datepicker._get(t,"showAnim"),u=$.datepicker._get(t,"duration"),a=function(){var e=t.dpDiv.find("iframe.ui-datepicker-cover");if(!!e.length){var n=$.datepicker._getBorders(t.dpDiv);e.css({left:-n[0],top:-n[1],width:t.dpDiv.outerWidth(),height:t.dpDiv.outerHeight()})}};t.dpDiv.zIndex($(e).zIndex()+1),$.datepicker._datepickerShowing=!0,$.effects&&($.effects.effect[o]||$.effects[o])?t.dpDiv.show(o,$.datepicker._get(t,"showOptions"),u,a):t.dpDiv[o||"show"](o?u:null,a),(!o||!u)&&a(),t.input.is(":visible")&&!t.input.is(":disabled")&&t.input.focus(),$.datepicker._curInst=t}},_updateDatepicker:function(e){this.maxRows=4;var t=$.datepicker._getBorders(e.dpDiv);instActive=e,e.dpDiv.empty().append(this._generateHTML(e)),this._attachHandlers(e);var n=e.dpDiv.find("iframe.ui-datepicker-cover");!n.length||n.css({left:-t[0],top:-t[1],width:e.dpDiv.outerWidth(),height:e.dpDiv.outerHeight()}),e.dpDiv.find("."+this._dayOverClass+" a").mouseover();var r=this._getNumberOfMonths(e),i=r[1],s=17;e.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),i>1&&e.dpDiv.addClass("ui-datepicker-multi-"+i).css("width",s*i+"em"),e.dpDiv[(r[0]!=1||r[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi"),e.dpDiv[(this._get(e,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),e==$.datepicker._curInst&&$.datepicker._datepickerShowing&&e.input&&e.input.is(":visible")&&!e.input.is(":disabled")&&e.input[0]!=document.activeElement&&e.input.focus();if(e.yearshtml){var o=e.yearshtml;setTimeout(function(){o===e.yearshtml&&e.yearshtml&&e.dpDiv.find("select.ui-datepicker-year:first").replaceWith(e.yearshtml),o=e.yearshtml=null},0)}},_getBorders:function(e){var t=function(e){return{thin:1,medium:2,thick:3}[e]||e};return[parseFloat(t(e.css("border-left-width"))),parseFloat(t(e.css("border-top-width")))]},_checkOffset:function(e,t,n){var r=e.dpDiv.outerWidth(),i=e.dpDiv.outerHeight(),s=e.input?e.input.outerWidth():0,o=e.input?e.input.outerHeight():0,u=document.documentElement.clientWidth+(n?0:$(document).scrollLeft()),a=document.documentElement.clientHeight+(n?0:$(document).scrollTop());return t.left-=this._get(e,"isRTL")?r-s:0,t.left-=n&&t.left==e.input.offset().left?$(document).scrollLeft():0,t.top-=n&&t.top==e.input.offset().top+o?$(document).scrollTop():0,t.left-=Math.min(t.left,t.left+r>u&&u>r?Math.abs(t.left+r-u):0),t.top-=Math.min(t.top,t.top+i>a&&a>i?Math.abs(i+o):0),t},_findPos:function(e){var t=this._getInst(e),n=this._get(t,"isRTL");while(e&&(e.type=="hidden"||e.nodeType!=1||$.expr.filters.hidden(e)))e=e[n?"previousSibling":"nextSibling"];var r=$(e).offset();return[r.left,r.top]},_hideDatepicker:function(e){var t=this._curInst;if(!t||e&&t!=$.data(e,PROP_NAME))return;if(this._datepickerShowing){var n=this._get(t,"showAnim"),r=this._get(t,"duration"),i=function(){$.datepicker._tidyDialog(t)};$.effects&&($.effects.effect[n]||$.effects[n])?t.dpDiv.hide(n,$.datepicker._get(t,"showOptions"),r,i):t.dpDiv[n=="slideDown"?"slideUp":n=="fadeIn"?"fadeOut":"hide"](n?r:null,i),n||i(),this._datepickerShowing=!1;var s=this._get(t,"onClose");s&&s.apply(t.input?t.input[0]:null,[t.input?t.input.val():"",t]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),$.blockUI&&($.unblockUI(),$("body").append(this.dpDiv))),this._inDialog=!1}},_tidyDialog:function(e){e.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(e){if(!$.datepicker._curInst)return;var t=$(e.target),n=$.datepicker._getInst(t[0]);(t[0].id!=$.datepicker._mainDivId&&t.parents("#"+$.datepicker._mainDivId).length==0&&!t.hasClass($.datepicker.markerClassName)&&!t.closest("."+$.datepicker._triggerClass).length&&$.datepicker._datepickerShowing&&(!$.datepicker._inDialog||!$.blockUI)||t.hasClass($.datepicker.markerClassName)&&$.datepicker._curInst!=n)&&$.datepicker._hideDatepicker()},_adjustDate:function(e,t,n){var r=$(e),i=this._getInst(r[0]);if(this._isDisabledDatepicker(r[0]))return;this._adjustInstDate(i,t+(n=="M"?this._get(i,"showCurrentAtPos"):0),n),this._updateDatepicker(i)},_gotoToday:function(e){var t=$(e),n=this._getInst(t[0]);if(this._get(n,"gotoCurrent")&&n.currentDay)n.selectedDay=n.currentDay,n.drawMonth=n.selectedMonth=n.currentMonth,n.drawYear=n.selectedYear=n.currentYear;else{var r=new Date;n.selectedDay=r.getDate(),n.drawMonth=n.selectedMonth=r.getMonth(),n.drawYear=n.selectedYear=r.getFullYear()}this._notifyChange(n),this._adjustDate(t)},_selectMonthYear:function(e,t,n){var r=$(e),i=this._getInst(r[0]);i["selected"+(n=="M"?"Month":"Year")]=i["draw"+(n=="M"?"Month":"Year")]=parseInt(t.options[t.selectedIndex].value,10),this._notifyChange(i),this._adjustDate(r)},_selectDay:function(e,t,n,r){var i=$(e);if($(r).hasClass(this._unselectableClass)||this._isDisabledDatepicker(i[0]))return;var s=this._getInst(i[0]);s.selectedDay=s.currentDay=$("a",r).html(),s.selectedMonth=s.currentMonth=t,s.selectedYear=s.currentYear=n,this._selectDate(e,this._formatDate(s,s.currentDay,s.currentMonth,s.currentYear))},_clearDate:function(e){var t=$(e),n=this._getInst(t[0]);this._selectDate(t,"")},_selectDate:function(e,t){var n=$(e),r=this._getInst(n[0]);t=t!=null?t:this._formatDate(r),r.input&&r.input.val(t),this._updateAlternate(r);var i=this._get(r,"onSelect");i?i.apply(r.input?r.input[0]:null,[t,r]):r.input&&r.input.trigger("change"),r.inline?this._updateDatepicker(r):(this._hideDatepicker(),this._lastInput=r.input[0],typeof r.input[0]!="object"&&r.input.focus(),this._lastInput=null)},_updateAlternate:function(e){var t=this._get(e,"altField");if(t){var n=this._get(e,"altFormat")||this._get(e,"dateFormat"),r=this._getDate(e),i=this.formatDate(n,r,this._getFormatConfig(e));$(t).each(function(){$(this).val(i)})}},noWeekends:function(e){var t=e.getDay();return[t>0&&t<6,""]},iso8601Week:function(e){var t=new Date(e.getTime());t.setDate(t.getDate()+4-(t.getDay()||7));var n=t.getTime();return t.setMonth(0),t.setDate(1),Math.floor(Math.round((n-t)/864e5)/7)+1},parseDate:function(e,t,n){if(e==null||t==null)throw"Invalid arguments";t=typeof t=="object"?t.toString():t+"";if(t=="")return null;var r=(n?n.shortYearCutoff:null)||this._defaults.shortYearCutoff;r=typeof r!="string"?r:(new Date).getFullYear()%100+parseInt(r,10);var i=(n?n.dayNamesShort:null)||this._defaults.dayNamesShort,s=(n?n.dayNames:null)||this._defaults.dayNames,o=(n?n.monthNamesShort:null)||this._defaults.monthNamesShort,u=(n?n.monthNames:null)||this._defaults.monthNames,a=-1,f=-1,l=-1,c=-1,h=!1,p=function(t){var n=y+1<e.length&&e.charAt(y+1)==t;return n&&y++,n},d=function(e){var n=p(e),r=e=="@"?14:e=="!"?20:e=="y"&&n?4:e=="o"?3:2,i=new RegExp("^\\d{1,"+r+"}"),s=t.substring(g).match(i);if(!s)throw"Missing number at position "+g;return g+=s[0].length,parseInt(s[0],10)},v=function(e,n,r){var i=$.map(p(e)?r:n,function(e,t){return[[t,e]]}).sort(function(e,t){return-(e[1].length-t[1].length)}),s=-1;$.each(i,function(e,n){var r=n[1];if(t.substr(g,r.length).toLowerCase()==r.toLowerCase())return s=n[0],g+=r.length,!1});if(s!=-1)return s+1;throw"Unknown name at position "+g},m=function(){if(t.charAt(g)!=e.charAt(y))throw"Unexpected literal at position "+g;g++},g=0;for(var y=0;y<e.length;y++)if(h)e.charAt(y)=="'"&&!p("'")?h=!1:m();else switch(e.charAt(y)){case"d":l=d("d");break;case"D":v("D",i,s);break;case"o":c=d("o");break;case"m":f=d("m");break;case"M":f=v("M",o,u);break;case"y":a=d("y");break;case"@":var b=new Date(d("@"));a=b.getFullYear(),f=b.getMonth()+1,l=b.getDate();break;case"!":var b=new Date((d("!")-this._ticksTo1970)/1e4);a=b.getFullYear(),f=b.getMonth()+1,l=b.getDate();break;case"'":p("'")?m():h=!0;break;default:m()}if(g<t.length){var w=t.substr(g);if(!/^\s+/.test(w))throw"Extra/unparsed characters found in date: "+w}a==-1?a=(new Date).getFullYear():a<100&&(a+=(new Date).getFullYear()-(new Date).getFullYear()%100+(a<=r?0:-100));if(c>-1){f=1,l=c;do{var E=this._getDaysInMonth(a,f-1);if(l<=E)break;f++,l-=E}while(!0)}var b=this._daylightSavingAdjust(new Date(a,f-1,l));if(b.getFullYear()!=a||b.getMonth()+1!=f||b.getDate()!=l)throw"Invalid date";return b},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1e7,formatDate:function(e,t,n){if(!t)return"";var r=(n?n.dayNamesShort:null)||this._defaults.dayNamesShort,i=(n?n.dayNames:null)||this._defaults.dayNames,s=(n?n.monthNamesShort:null)||this._defaults.monthNamesShort,o=(n?n.monthNames:null)||this._defaults.monthNames,u=function(t){var n=h+1<e.length&&e.charAt(h+1)==t;return n&&h++,n},a=function(e,t,n){var r=""+t;if(u(e))while(r.length<n)r="0"+r;return r},f=function(e,t,n,r){return u(e)?r[t]:n[t]},l="",c=!1;if(t)for(var h=0;h<e.length;h++)if(c)e.charAt(h)=="'"&&!u("'")?c=!1:l+=e.charAt(h);else switch(e.charAt(h)){case"d":l+=a("d",t.getDate(),2);break;case"D":l+=f("D",t.getDay(),r,i);break;case"o":l+=a("o",Math.round(((new Date(t.getFullYear(),t.getMonth(),t.getDate())).getTime()-(new Date(t.getFullYear(),0,0)).getTime())/864e5),3);break;case"m":l+=a("m",t.getMonth()+1,2);break;case"M":l+=f("M",t.getMonth(),s,o);break;case"y":l+=u("y")?t.getFullYear():(t.getYear()%100<10?"0":"")+t.getYear()%100;break;case"@":l+=t.getTime();break;case"!":l+=t.getTime()*1e4+this._ticksTo1970;break;case"'":u("'")?l+="'":c=!0;break;default:l+=e.charAt(h)}return l},_possibleChars:function(e){var t="",n=!1,r=function(t){var n=i+1<e.length&&e.charAt(i+1)==t;return n&&i++,n};for(var i=0;i<e.length;i++)if(n)e.charAt(i)=="'"&&!r("'")?n=!1:t+=e.charAt(i);else switch(e.charAt(i)){case"d":case"m":case"y":case"@":t+="0123456789";break;case"D":case"M":return null;case"'":r("'")?t+="'":n=!0;break;default:t+=e.charAt(i)}return t},_get:function(e,t){return e.settings[t]!==undefined?e.settings[t]:this._defaults[t]},_setDateFromField:function(e,t){if(e.input.val()==e.lastVal)return;var n=this._get(e,"dateFormat"),r=e.lastVal=e.input?e.input.val():null,i,s;i=s=this._getDefaultDate(e);var o=this._getFormatConfig(e);try{i=this.parseDate(n,r,o)||s}catch(u){this.log(u),r=t?"":r}e.selectedDay=i.getDate(),e.drawMonth=e.selectedMonth=i.getMonth(),e.drawYear=e.selectedYear=i.getFullYear(),e.currentDay=r?i.getDate():0,e.currentMonth=r?i.getMonth():0,e.currentYear=r?i.getFullYear():0,this._adjustInstDate(e)},_getDefaultDate:function(e){return this._restrictMinMax(e,this._determineDate(e,this._get(e,"defaultDate"),new Date))},_determineDate:function(e,t,n){var r=function(e){var t=new Date;return t.setDate(t.getDate()+e),t},i=function(t){try{return $.datepicker.parseDate($.datepicker._get(e,"dateFormat"),t,$.datepicker._getFormatConfig(e))}catch(n){}var r=(t.toLowerCase().match(/^c/)?$.datepicker._getDate(e):null)||new Date,i=r.getFullYear(),s=r.getMonth(),o=r.getDate(),u=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,a=u.exec(t);while(a){switch(a[2]||"d"){case"d":case"D":o+=parseInt(a[1],10);break;case"w":case"W":o+=parseInt(a[1],10)*7;break;case"m":case"M":s+=parseInt(a[1],10),o=Math.min(o,$.datepicker._getDaysInMonth(i,s));break;case"y":case"Y":i+=parseInt(a[1],10),o=Math.min(o,$.datepicker._getDaysInMonth(i,s))}a=u.exec(t)}return new Date(i,s,o)},s=t==null||t===""?n:typeof t=="string"?i(t):typeof t=="number"?isNaN(t)?n:r(t):new Date(t.getTime());return s=s&&s.toString()=="Invalid Date"?n:s,s&&(s.setHours(0),s.setMinutes(0),s.setSeconds(0),s.setMilliseconds(0)),this._daylightSavingAdjust(s)},_daylightSavingAdjust:function(e){return e?(e.setHours(e.getHours()>12?e.getHours()+2:0),e):null},_setDate:function(e,t,n){var r=!t,i=e.selectedMonth,s=e.selectedYear,o=this._restrictMinMax(e,this._determineDate(e,t,new Date));e.selectedDay=e.currentDay=o.getDate(),e.drawMonth=e.selectedMonth=e.currentMonth=o.getMonth(),e.drawYear=e.selectedYear=e.currentYear=o.getFullYear(),(i!=e.selectedMonth||s!=e.selectedYear)&&!n&&this._notifyChange(e),this._adjustInstDate(e),e.input&&e.input.val(r?"":this._formatDate(e))},_getDate:function(e){var t=!e.currentYear||e.input&&e.input.val()==""?null:this._daylightSavingAdjust(new Date(e.currentYear,e.currentMonth,e.currentDay));return t},_attachHandlers:function(e){var t=this._get(e,"stepMonths"),n="#"+e.id.replace(/\\\\/g,"\\");e.dpDiv.find("[data-handler]").map(function(){var e={prev:function(){window["DP_jQuery_"+dpuuid].datepicker._adjustDate(n,-t,"M")},next:function(){window["DP_jQuery_"+dpuuid].datepicker._adjustDate(n,+t,"M")},hide:function(){window["DP_jQuery_"+dpuuid].datepicker._hideDatepicker()},today:function(){window["DP_jQuery_"+dpuuid].datepicker._gotoToday(n)},selectDay:function(){return window["DP_jQuery_"+dpuuid].datepicker._selectDay(n,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return window["DP_jQuery_"+dpuuid].datepicker._selectMonthYear(n,this,"M"),!1},selectYear:function(){return window["DP_jQuery_"+dpuuid].datepicker._selectMonthYear(n,this,"Y"),!1}};$(this).bind(this.getAttribute("data-event"),e[this.getAttribute("data-handler")])})},_generateHTML:function(e){var t=new Date;t=this._daylightSavingAdjust(new Date(t.getFullYear(),t.getMonth(),t.getDate()));var n=this._get(e,"isRTL"),r=this._get(e,"showButtonPanel"),i=this._get(e,"hideIfNoPrevNext"),s=this._get(e,"navigationAsDateFormat"),o=this._getNumberOfMonths(e),u=this._get(e,"showCurrentAtPos"),a=this._get(e,"stepMonths"),f=o[0]!=1||o[1]!=1,l=this._daylightSavingAdjust(e.currentDay?new Date(e.currentYear,e.currentMonth,e.currentDay):new Date(9999,9,9)),c=this._getMinMaxDate(e,"min"),h=this._getMinMaxDate(e,"max"),p=e.drawMonth-u,d=e.drawYear;p<0&&(p+=12,d--);if(h){var v=this._daylightSavingAdjust(new Date(h.getFullYear(),h.getMonth()-o[0]*o[1]+1,h.getDate()));v=c&&v<c?c:v;while(this._daylightSavingAdjust(new Date(d,p,1))>v)p--,p<0&&(p=11,d--)}e.drawMonth=p,e.drawYear=d;var m=this._get(e,"prevText");m=s?this.formatDate(m,this._daylightSavingAdjust(new Date(d,p-a,1)),this._getFormatConfig(e)):m;var g=this._canAdjustMonth(e,-1,d,p)?'<a class="ui-datepicker-prev ui-corner-all" data-handler="prev" data-event="click" title="'+m+'"><span class="ui-icon ui-icon-circle-triangle-'+(n?"e":"w")+'">'+m+"</span></a>":i?"":'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+m+'"><span class="ui-icon ui-icon-circle-triangle-'+(n?"e":"w")+'">'+m+"</span></a>",y=this._get(e,"nextText");y=s?this.formatDate(y,this._daylightSavingAdjust(new Date(d,p+a,1)),this._getFormatConfig(e)):y;var b=this._canAdjustMonth(e,1,d,p)?'<a class="ui-datepicker-next ui-corner-all" data-handler="next" data-event="click" title="'+y+'"><span class="ui-icon ui-icon-circle-triangle-'+(n?"w":"e")+'">'+y+"</span></a>":i?"":'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+y+'"><span class="ui-icon ui-icon-circle-triangle-'+(n?"w":"e")+'">'+y+"</span></a>",w=this._get(e,"currentText"),E=this._get(e,"gotoCurrent")&&e.currentDay?l:t;w=s?this.formatDate(w,E,this._getFormatConfig(e)):w;var S=e.inline?"":'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" data-handler="hide" data-event="click">'+this._get(e,"closeText")+"</button>",x=r?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(n?S:"")+(this._isInRange(e,E)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" data-handler="today" data-event="click">'+w+"</button>":"")+(n?"":S)+"</div>":"",T=parseInt(this._get(e,"firstDay"),10);T=isNaN(T)?0:T;var N=this._get(e,"showWeek"),C=this._get(e,"dayNames"),k=this._get(e,"dayNamesShort"),L=this._get(e,"dayNamesMin"),A=this._get(e,"monthNames"),O=this._get(e,"monthNamesShort"),M=this._get(e,"beforeShowDay"),_=this._get(e,"showOtherMonths"),D=this._get(e,"selectOtherMonths"),P=this._get(e,"calculateWeek")||this.iso8601Week,H=this._getDefaultDate(e),B="";for(var j=0;j<o[0];j++){var F="";this.maxRows=4;for(var I=0;I<o[1];I++){var q=this._daylightSavingAdjust(new Date(d,p,e.selectedDay)),R=" ui-corner-all",U="";if(f){U+='<div class="ui-datepicker-group';if(o[1]>1)switch(I){case 0:U+=" ui-datepicker-group-first",R=" ui-corner-"+(n?"right":"left");break;case o[1]-1:U+=" ui-datepicker-group-last",R=" ui-corner-"+(n?"left":"right");break;default:U+=" ui-datepicker-group-middle",R=""}U+='">'}U+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+R+'">'+(/all|left/.test(R)&&j==0?n?b:g:"")+(/all|right/.test(R)&&j==0?n?g:b:"")+this._generateMonthYearHeader(e,p,d,c,h,j>0||I>0,A,O)+'</div><table class="ui-datepicker-calendar"><thead>'+"<tr>";var z=N?'<th class="ui-datepicker-week-col">'+this._get(e,"weekHeader")+"</th>":"";for(var W=0;W<7;W++){var X=(W+T)%7;z+="<th"+((W+T+6)%7>=5?' class="ui-datepicker-week-end"':"")+">"+'<span title="'+C[X]+'">'+L[X]+"</span></th>"}U+=z+"</tr></thead><tbody>";var V=this._getDaysInMonth(d,p);d==e.selectedYear&&p==e.selectedMonth&&(e.selectedDay=Math.min(e.selectedDay,V));var J=(this._getFirstDayOfMonth(d,p)-T+7)%7,K=Math.ceil((J+V)/7),Q=f?this.maxRows>K?this.maxRows:K:K;this.maxRows=Q;var G=this._daylightSavingAdjust(new Date(d,p,1-J));for(var Y=0;Y<Q;Y++){U+="<tr>";var Z=N?'<td class="ui-datepicker-week-col">'+this._get(e,"calculateWeek")(G)+"</td>":"";for(var W=0;W<7;W++){var et=M?M.apply(e.input?e.input[0]:null,[G]):[!0,""],tt=G.getMonth()!=p,nt=tt&&!D||!et[0]||c&&G<c||h&&G>h;Z+='<td class="'+((W+T+6)%7>=5?" ui-datepicker-week-end":"")+(tt?" ui-datepicker-other-month":"")+(G.getTime()==q.getTime()&&p==e.selectedMonth&&e._keyEvent||H.getTime()==G.getTime()&&H.getTime()==q.getTime()?" "+this._dayOverClass:"")+(nt?" "+this._unselectableClass+" ui-state-disabled":"")+(tt&&!_?"":" "+et[1]+(G.getTime()==l.getTime()?" "+this._currentClass:"")+(G.getTime()==t.getTime()?" ui-datepicker-today":""))+'"'+((!tt||_)&&et[2]?' title="'+et[2]+'"':"")+(nt?"":' data-handler="selectDay" data-event="click" data-month="'+G.getMonth()+'" data-year="'+G.getFullYear()+'"')+">"+(tt&&!_?"&#xa0;":nt?'<span class="ui-state-default">'+G.getDate()+"</span>":'<a class="ui-state-default'+(G.getTime()==t.getTime()?" ui-state-highlight":"")+(G.getTime()==l.getTime()?" ui-state-active":"")+(tt?" ui-priority-secondary":"")+'" href="#">'+G.getDate()+"</a>")+"</td>",G.setDate(G.getDate()+1),G=this._daylightSavingAdjust(G)}U+=Z+"</tr>"}p++,p>11&&(p=0,d++),U+="</tbody></table>"+(f?"</div>"+(o[0]>0&&I==o[1]-1?'<div class="ui-datepicker-row-break"></div>':""):""),F+=U}B+=F}return B+=x+($.ui.ie6&&!e.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>':""),e._keyEvent=!1,B},_generateMonthYearHeader:function(e,t,n,r,i,s,o,u){var a=this._get(e,"changeMonth"),f=this._get(e,"changeYear"),l=this._get(e,"showMonthAfterYear"),c='<div class="ui-datepicker-title">',h="";if(s||!a)h+='<span class="ui-datepicker-month">'+o[t]+"</span>";else{var p=r&&r.getFullYear()==n,d=i&&i.getFullYear()==n;h+='<select class="ui-datepicker-month" data-handler="selectMonth" data-event="change">';for(var v=0;v<12;v++)(!p||v>=r.getMonth())&&(!d||v<=i.getMonth())&&(h+='<option value="'+v+'"'+(v==t?' selected="selected"':"")+">"+u[v]+"</option>");h+="</select>"}l||(c+=h+(s||!a||!f?"&#xa0;":""));if(!e.yearshtml){e.yearshtml="";if(s||!f)c+='<span class="ui-datepicker-year">'+n+"</span>";else{var m=this._get(e,"yearRange").split(":"),g=(new Date).getFullYear(),y=function(e){var t=e.match(/c[+-].*/)?n+parseInt(e.substring(1),10):e.match(/[+-].*/)?g+parseInt(e,10):parseInt(e,10);return isNaN(t)?g:t},b=y(m[0]),w=Math.max(b,y(m[1]||""));b=r?Math.max(b,r.getFullYear()):b,w=i?Math.min(w,i.getFullYear()):w,e.yearshtml+='<select class="ui-datepicker-year" data-handler="selectYear" data-event="change">';for(;b<=w;b++)e.yearshtml+='<option value="'+b+'"'+(b==n?' selected="selected"':"")+">"+b+"</option>";e.yearshtml+="</select>",c+=e.yearshtml,e.yearshtml=null}}return c+=this._get(e,"yearSuffix"),l&&(c+=(s||!a||!f?"&#xa0;":"")+h),c+="</div>",c},_adjustInstDate:function(e,t,n){var r=e.drawYear+(n=="Y"?t:0),i=e.drawMonth+(n=="M"?t:0),s=Math.min(e.selectedDay,this._getDaysInMonth(r,i))+(n=="D"?t:0),o=this._restrictMinMax(e,this._daylightSavingAdjust(new Date(r,i,s)));e.selectedDay=o.getDate(),e.drawMonth=e.selectedMonth=o.getMonth(),e.drawYear=e.selectedYear=o.getFullYear(),(n=="M"||n=="Y")&&this._notifyChange(e)},_restrictMinMax:function(e,t){var n=this._getMinMaxDate(e,"min"),r=this._getMinMaxDate(e,"max"),i=n&&t<n?n:t;return i=r&&i>r?r:i,i},_notifyChange:function(e){var t=this._get(e,"onChangeMonthYear");t&&t.apply(e.input?e.input[0]:null,[e.selectedYear,e.selectedMonth+1,e])},_getNumberOfMonths:function(e){var t=this._get(e,"numberOfMonths");return t==null?[1,1]:typeof t=="number"?[1,t]:t},_getMinMaxDate:function(e,t){return this._determineDate(e,this._get(e,t+"Date"),null)},_getDaysInMonth:function(e,t){return 32-this._daylightSavingAdjust(new Date(e,t,32)).getDate()},_getFirstDayOfMonth:function(e,t){return(new Date(e,t,1)).getDay()},_canAdjustMonth:function(e,t,n,r){var i=this._getNumberOfMonths(e),s=this._daylightSavingAdjust(new Date(n,r+(t<0?t:i[0]*i[1]),1));return t<0&&s.setDate(this._getDaysInMonth(s.getFullYear(),s.getMonth())),this._isInRange(e,s)},_isInRange:function(e,t){var n=this._getMinMaxDate(e,"min"),r=this._getMinMaxDate(e,"max");return(!n||t.getTime()>=n.getTime())&&(!r||t.getTime()<=r.getTime())},_getFormatConfig:function(e){var t=this._get(e,"shortYearCutoff");return t=typeof t!="string"?t:(new Date).getFullYear()%100+parseInt(t,10),{shortYearCutoff:t,dayNamesShort:this._get(e,"dayNamesShort"),dayNames:this._get(e,"dayNames"),monthNamesShort:this._get(e,"monthNamesShort"),monthNames:this._get(e,"monthNames")}},_formatDate:function(e,t,n,r){t||(e.currentDay=e.selectedDay,e.currentMonth=e.selectedMonth,e.currentYear=e.selectedYear);var i=t?typeof t=="object"?t:this._daylightSavingAdjust(new Date(r,n,t)):this._daylightSavingAdjust(new Date(e.currentYear,e.currentMonth,e.currentDay));return this.formatDate(this._get(e,"dateFormat"),i,this._getFormatConfig(e))}}),$.fn.datepicker=function(e){if(!this.length)return this;$.datepicker.initialized||($(document).mousedown($.datepicker._checkExternalClick).find(document.body).append($.datepicker.dpDiv),$.datepicker.initialized=!0);var t=Array.prototype.slice.call(arguments,1);return typeof e!="string"||e!="isDisabled"&&e!="getDate"&&e!="widget"?e=="option"&&arguments.length==2&&typeof arguments[1]=="string"?$.datepicker["_"+e+"Datepicker"].apply($.datepicker,[this[0]].concat(t)):this.each(function(){typeof e=="string"?$.datepicker["_"+e+"Datepicker"].apply($.datepicker,[this].concat(t)):$.datepicker._attachDatepicker(this,e)}):$.datepicker["_"+e+"Datepicker"].apply($.datepicker,[this[0]].concat(t))},$.datepicker=new Datepicker,$.datepicker.initialized=!1,$.datepicker.uuid=(new Date).getTime(),$.datepicker.version="1.9.2",window["DP_jQuery_"+dpuuid]=$})(jQuery);(function(e,t){var n="ui-dialog ui-widget ui-widget-content ui-corner-all ",r={buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},i={maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0};e.widget("ui.dialog",{version:"1.9.2",options:{autoOpen:!0,buttons:{},closeOnEscape:!0,closeText:"close",dialogClass:"",draggable:!0,hide:null,height:"auto",maxHeight:!1,maxWidth:!1,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(t){var n=e(this).css(t).offset().top;n<0&&e(this).css("top",t.top-n)}},resizable:!0,show:null,stack:!0,title:"",width:300,zIndex:1e3},_create:function(){this.originalTitle=this.element.attr("title"),typeof this.originalTitle!="string"&&(this.originalTitle=""),this.oldPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.options.title=this.options.title||this.originalTitle;var t=this,r=this.options,i=r.title||"&#160;",s,o,u,a,f;s=(this.uiDialog=e("<div>")).addClass(n+r.dialogClass).css({display:"none",outline:0,zIndex:r.zIndex}).attr("tabIndex",-1).keydown(function(n){r.closeOnEscape&&!n.isDefaultPrevented()&&n.keyCode&&n.keyCode===e.ui.keyCode.ESCAPE&&(t.close(n),n.preventDefault())}).mousedown(function(e){t.moveToTop(!1,e)}).appendTo("body"),this.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(s),o=(this.uiDialogTitlebar=e("<div>")).addClass("ui-dialog-titlebar  ui-widget-header  ui-corner-all  ui-helper-clearfix").bind("mousedown",function(){s.focus()}).prependTo(s),u=e("<a href='#'></a>").addClass("ui-dialog-titlebar-close  ui-corner-all").attr("role","button").click(function(e){e.preventDefault(),t.close(e)}).appendTo(o),(this.uiDialogTitlebarCloseText=e("<span>")).addClass("ui-icon ui-icon-closethick").text(r.closeText).appendTo(u),a=e("<span>").uniqueId().addClass("ui-dialog-title").html(i).prependTo(o),f=(this.uiDialogButtonPane=e("<div>")).addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),(this.uiButtonSet=e("<div>")).addClass("ui-dialog-buttonset").appendTo(f),s.attr({role:"dialog","aria-labelledby":a.attr("id")}),o.find("*").add(o).disableSelection(),this._hoverable(u),this._focusable(u),r.draggable&&e.fn.draggable&&this._makeDraggable(),r.resizable&&e.fn.resizable&&this._makeResizable(),this._createButtons(r.buttons),this._isOpen=!1,e.fn.bgiframe&&s.bgiframe(),this._on(s,{keydown:function(t){if(!r.modal||t.keyCode!==e.ui.keyCode.TAB)return;var n=e(":tabbable",s),i=n.filter(":first"),o=n.filter(":last");if(t.target===o[0]&&!t.shiftKey)return i.focus(1),!1;if(t.target===i[0]&&t.shiftKey)return o.focus(1),!1}})},_init:function(){this.options.autoOpen&&this.open()},_destroy:function(){var e,t=this.oldPosition;this.overlay&&this.overlay.destroy(),this.uiDialog.hide(),this.element.removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body"),this.uiDialog.remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),e=t.parent.children().eq(t.index),e.length&&e[0]!==this.element[0]?e.before(this.element):t.parent.append(this.element)},widget:function(){return this.uiDialog},close:function(t){var n=this,r,i;if(!this._isOpen)return;if(!1===this._trigger("beforeClose",t))return;return this._isOpen=!1,this.overlay&&this.overlay.destroy(),this.options.hide?this._hide(this.uiDialog,this.options.hide,function(){n._trigger("close",t)}):(this.uiDialog.hide(),this._trigger("close",t)),e.ui.dialog.overlay.resize(),this.options.modal&&(r=0,e(".ui-dialog").each(function(){this!==n.uiDialog[0]&&(i=e(this).css("z-index"),isNaN(i)||(r=Math.max(r,i)))}),e.ui.dialog.maxZ=r),this},isOpen:function(){return this._isOpen},moveToTop:function(t,n){var r=this.options,i;return r.modal&&!t||!r.stack&&!r.modal?this._trigger("focus",n):(r.zIndex>e.ui.dialog.maxZ&&(e.ui.dialog.maxZ=r.zIndex),this.overlay&&(e.ui.dialog.maxZ+=1,e.ui.dialog.overlay.maxZ=e.ui.dialog.maxZ,this.overlay.$el.css("z-index",e.ui.dialog.overlay.maxZ)),i={scrollTop:this.element.scrollTop(),scrollLeft:this.element.scrollLeft()},e.ui.dialog.maxZ+=1,this.uiDialog.css("z-index",e.ui.dialog.maxZ),this.element.attr(i),this._trigger("focus",n),this)},open:function(){if(this._isOpen)return;var t,n=this.options,r=this.uiDialog;return this._size(),this._position(n.position),r.show(n.show),this.overlay=n.modal?new e.ui.dialog.overlay(this):null,this.moveToTop(!0),t=this.element.find(":tabbable"),t.length||(t=this.uiDialogButtonPane.find(":tabbable"),t.length||(t=r)),t.eq(0).focus(),this._isOpen=!0,this._trigger("open"),this},_createButtons:function(t){var n=this,r=!1;this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),typeof t=="object"&&t!==null&&e.each(t,function(){return!(r=!0)}),r?(e.each(t,function(t,r){var i,s;r=e.isFunction(r)?{click:r,text:t}:r,r=e.extend({type:"button"},r),s=r.click,r.click=function(){s.apply(n.element[0],arguments)},i=e("<button></button>",r).appendTo(n.uiButtonSet),e.fn.button&&i.button()}),this.uiDialog.addClass("ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog)):this.uiDialog.removeClass("ui-dialog-buttons")},_makeDraggable:function(){function r(e){return{position:e.position,offset:e.offset}}var t=this,n=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(n,i){e(this).addClass("ui-dialog-dragging"),t._trigger("dragStart",n,r(i))},drag:function(e,n){t._trigger("drag",e,r(n))},stop:function(i,s){n.position=[s.position.left-t.document.scrollLeft(),s.position.top-t.document.scrollTop()],e(this).removeClass("ui-dialog-dragging"),t._trigger("dragStop",i,r(s)),e.ui.dialog.overlay.resize()}})},_makeResizable:function(n){function u(e){return{originalPosition:e.originalPosition,originalSize:e.originalSize,position:e.position,size:e.size}}n=n===t?this.options.resizable:n;var r=this,i=this.options,s=this.uiDialog.css("position"),o=typeof n=="string"?n:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:i.maxWidth,maxHeight:i.maxHeight,minWidth:i.minWidth,minHeight:this._minHeight(),handles:o,start:function(t,n){e(this).addClass("ui-dialog-resizing"),r._trigger("resizeStart",t,u(n))},resize:function(e,t){r._trigger("resize",e,u(t))},stop:function(t,n){e(this).removeClass("ui-dialog-resizing"),i.height=e(this).height(),i.width=e(this).width(),r._trigger("resizeStop",t,u(n)),e.ui.dialog.overlay.resize()}}).css("position",s).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var e=this.options;return e.height==="auto"?e.minHeight:Math.min(e.minHeight,e.height)},_position:function(t){var n=[],r=[0,0],i;if(t){if(typeof t=="string"||typeof t=="object"&&"0"in t)n=t.split?t.split(" "):[t[0],t[1]],n.length===1&&(n[1]=n[0]),e.each(["left","top"],function(e,t){+n[e]===n[e]&&(r[e]=n[e],n[e]=t)}),t={my:n[0]+(r[0]<0?r[0]:"+"+r[0])+" "+n[1]+(r[1]<0?r[1]:"+"+r[1]),at:n.join(" ")};t=e.extend({},e.ui.dialog.prototype.options.position,t)}else t=e.ui.dialog.prototype.options.position;i=this.uiDialog.is(":visible"),i||this.uiDialog.show(),this.uiDialog.position(t),i||this.uiDialog.hide()},_setOptions:function(t){var n=this,s={},o=!1;e.each(t,function(e,t){n._setOption(e,t),e in r&&(o=!0),e in i&&(s[e]=t)}),o&&this._size(),this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option",s)},_setOption:function(t,r){var i,s,o=this.uiDialog;switch(t){case"buttons":this._createButtons(r);break;case"closeText":this.uiDialogTitlebarCloseText.text(""+r);break;case"dialogClass":o.removeClass(this.options.dialogClass).addClass(n+r);break;case"disabled":r?o.addClass("ui-dialog-disabled"):o.removeClass("ui-dialog-disabled");break;case"draggable":i=o.is(":data(draggable)"),i&&!r&&o.draggable("destroy"),!i&&r&&this._makeDraggable();break;case"position":this._position(r);break;case"resizable":s=o.is(":data(resizable)"),s&&!r&&o.resizable("destroy"),s&&typeof r=="string"&&o.resizable("option","handles",r),!s&&r!==!1&&this._makeResizable(r);break;case"title":e(".ui-dialog-title",this.uiDialogTitlebar).html(""+(r||"&#160;"))}this._super(t,r)},_size:function(){var t,n,r,i=this.options,s=this.uiDialog.is(":visible");this.element.show().css({width:"auto",minHeight:0,height:0}),i.minWidth>i.width&&(i.width=i.minWidth),t=this.uiDialog.css({height:"auto",width:i.width}).outerHeight(),n=Math.max(0,i.minHeight-t),i.height==="auto"?e.support.minHeight?this.element.css({minHeight:n,height:"auto"}):(this.uiDialog.show(),r=this.element.css("height","auto").height(),s||this.uiDialog.hide(),this.element.height(Math.max(r,n))):this.element.height(Math.max(i.height-t,0)),this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}}),e.extend(e.ui.dialog,{uuid:0,maxZ:0,getTitleId:function(e){var t=e.attr("id");return t||(this.uuid+=1,t=this.uuid),"ui-dialog-title-"+t},overlay:function(t){this.$el=e.ui.dialog.overlay.create(t)}}),e.extend(e.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:e.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(e){return e+".dialog-overlay"}).join(" "),create:function(t){this.instances.length===0&&(setTimeout(function(){e.ui.dialog.overlay.instances.length&&e(document).bind(e.ui.dialog.overlay.events,function(t){if(e(t.target).zIndex()<e.ui.dialog.overlay.maxZ)return!1})},1),e(window).bind("resize.dialog-overlay",e.ui.dialog.overlay.resize));var n=this.oldInstances.pop()||e("<div>").addClass("ui-widget-overlay");return e(document).bind("keydown.dialog-overlay",function(r){var i=e.ui.dialog.overlay.instances;i.length!==0&&i[i.length-1]===n&&t.options.closeOnEscape&&!r.isDefaultPrevented()&&r.keyCode&&r.keyCode===e.ui.keyCode.ESCAPE&&(t.close(r),r.preventDefault())}),n.appendTo(document.body).css({width:this.width(),height:this.height()}),e.fn.bgiframe&&n.bgiframe(),this.instances.push(n),n},destroy:function(t){var n=e.inArray(t,this.instances),r=0;n!==-1&&this.oldInstances.push(this.instances.splice(n,1)[0]),this.instances.length===0&&e([document,window]).unbind(".dialog-overlay"),t.height(0).width(0).remove(),e.each(this.instances,function(){r=Math.max(r,this.css("z-index"))}),this.maxZ=r},height:function(){var t,n;return e.ui.ie?(t=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),n=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight),t<n?e(window).height()+"px":t+"px"):e(document).height()+"px"},width:function(){var t,n;return e.ui.ie?(t=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth),n=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth),t<n?e(window).width()+"px":t+"px"):e(document).width()+"px"},resize:function(){var t=e([]);e.each(e.ui.dialog.overlay.instances,function(){t=t.add(this)}),t.css({width:0,height:0}).css({width:e.ui.dialog.overlay.width(),height:e.ui.dialog.overlay.height()})}}),e.extend(e.ui.dialog.overlay.prototype,{destroy:function(){e.ui.dialog.overlay.destroy(this.$el)}})})(jQuery);(function(e,t){e.widget("ui.draggable",e.ui.mouse,{version:"1.9.2",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1},_create:function(){this.options.helper=="original"&&!/^(?:r|a|f)/.test(this.element.css("position"))&&(this.element[0].style.position="relative"),this.options.addClasses&&this.element.addClass("ui-draggable"),this.options.disabled&&this.element.addClass("ui-draggable-disabled"),this._mouseInit()},_destroy:function(){this.element.removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),this._mouseDestroy()},_mouseCapture:function(t){var n=this.options;return this.helper||n.disabled||e(t.target).is(".ui-resizable-handle")?!1:(this.handle=this._getHandle(t),this.handle?(e(n.iframeFix===!0?"iframe":n.iframeFix).each(function(){e('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1e3}).css(e(this).offset()).appendTo("body")}),!0):!1)},_mouseStart:function(t){var n=this.options;return this.helper=this._createHelper(t),this.helper.addClass("ui-draggable-dragging"),this._cacheHelperProportions(),e.ui.ddmanager&&(e.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(),this.offset=this.positionAbs=this.element.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},e.extend(this.offset,{click:{left:t.pageX-this.offset.left,top:t.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.originalPosition=this.position=this._generatePosition(t),this.originalPageX=t.pageX,this.originalPageY=t.pageY,n.cursorAt&&this._adjustOffsetFromHelper(n.cursorAt),n.containment&&this._setContainment(),this._trigger("start",t)===!1?(this._clear(),!1):(this._cacheHelperProportions(),e.ui.ddmanager&&!n.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this._mouseDrag(t,!0),e.ui.ddmanager&&e.ui.ddmanager.dragStart(this,t),!0)},_mouseDrag:function(t,n){this.position=this._generatePosition(t),this.positionAbs=this._convertPositionTo("absolute");if(!n){var r=this._uiHash();if(this._trigger("drag",t,r)===!1)return this._mouseUp({}),!1;this.position=r.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";return e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),!1},_mouseStop:function(t){var n=!1;e.ui.ddmanager&&!this.options.dropBehaviour&&(n=e.ui.ddmanager.drop(this,t)),this.dropped&&(n=this.dropped,this.dropped=!1);var r=this.element[0],i=!1;while(r&&(r=r.parentNode))r==document&&(i=!0);if(!i&&this.options.helper==="original")return!1;if(this.options.revert=="invalid"&&!n||this.options.revert=="valid"&&n||this.options.revert===!0||e.isFunction(this.options.revert)&&this.options.revert.call(this.element,n)){var s=this;e(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){s._trigger("stop",t)!==!1&&s._clear()})}else this._trigger("stop",t)!==!1&&this._clear();return!1},_mouseUp:function(t){return e("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)}),e.ui.ddmanager&&e.ui.ddmanager.dragStop(this,t),e.ui.mouse.prototype._mouseUp.call(this,t)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear(),this},_getHandle:function(t){var n=!this.options.handle||!e(this.options.handle,this.element).length?!0:!1;return e(this.options.handle,this.element).find("*").andSelf().each(function(){this==t.target&&(n=!0)}),n},_createHelper:function(t){var n=this.options,r=e.isFunction(n.helper)?e(n.helper.apply(this.element[0],[t])):n.helper=="clone"?this.element.clone().removeAttr("id"):this.element;return r.parents("body").length||r.appendTo(n.appendTo=="parent"?this.element[0].parentNode:n.appendTo),r[0]!=this.element[0]&&!/(fixed|absolute)/.test(r.css("position"))&&r.css("position","absolute"),r},_adjustOffsetFromHelper:function(t){typeof t=="string"&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var t=this.offsetParent.offset();this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop());if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&e.ui.ie)t={top:0,left:0};return{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var e=this.element.position();return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:e.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t=this.options;t.containment=="parent"&&(t.containment=this.helper[0].parentNode);if(t.containment=="document"||t.containment=="window")this.containment=[t.containment=="document"?0:e(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,t.containment=="document"?0:e(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,(t.containment=="document"?0:e(window).scrollLeft())+e(t.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(t.containment=="document"?0:e(window).scrollTop())+(e(t.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(t.containment)&&t.containment.constructor!=Array){var n=e(t.containment),r=n[0];if(!r)return;var i=n.offset(),s=e(r).css("overflow")!="hidden";this.containment=[(parseInt(e(r).css("borderLeftWidth"),10)||0)+(parseInt(e(r).css("paddingLeft"),10)||0),(parseInt(e(r).css("borderTopWidth"),10)||0)+(parseInt(e(r).css("paddingTop"),10)||0),(s?Math.max(r.scrollWidth,r.offsetWidth):r.offsetWidth)-(parseInt(e(r).css("borderLeftWidth"),10)||0)-(parseInt(e(r).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(s?Math.max(r.scrollHeight,r.offsetHeight):r.offsetHeight)-(parseInt(e(r).css("borderTopWidth"),10)||0)-(parseInt(e(r).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relative_container=n}else t.containment.constructor==Array&&(this.containment=t.containment)},_convertPositionTo:function(t,n){n||(n=this.position);var r=t=="absolute"?1:-1,i=this.options,s=this.cssPosition!="absolute"||this.scrollParent[0]!=document&&!!e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,o=/(html|body)/i.test(s[0].tagName);return{top:n.top+this.offset.relative.top*r+this.offset.parent.top*r-(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():o?0:s.scrollTop())*r,left:n.left+this.offset.relative.left*r+this.offset.parent.left*r-(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():o?0:s.scrollLeft())*r}},_generatePosition:function(t){var n=this.options,r=this.cssPosition!="absolute"||this.scrollParent[0]!=document&&!!e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,i=/(html|body)/i.test(r[0].tagName),s=t.pageX,o=t.pageY;if(this.originalPosition){var u;if(this.containment){if(this.relative_container){var a=this.relative_container.offset();u=[this.containment[0]+a.left,this.containment[1]+a.top,this.containment[2]+a.left,this.containment[3]+a.top]}else u=this.containment;t.pageX-this.offset.click.left<u[0]&&(s=u[0]+this.offset.click.left),t.pageY-this.offset.click.top<u[1]&&(o=u[1]+this.offset.click.top),t.pageX-this.offset.click.left>u[2]&&(s=u[2]+this.offset.click.left),t.pageY-this.offset.click.top>u[3]&&(o=u[3]+this.offset.click.top)}if(n.grid){var f=n.grid[1]?this.originalPageY+Math.round((o-this.originalPageY)/n.grid[1])*n.grid[1]:this.originalPageY;o=u?f-this.offset.click.top<u[1]||f-this.offset.click.top>u[3]?f-this.offset.click.top<u[1]?f+n.grid[1]:f-n.grid[1]:f:f;var l=n.grid[0]?this.originalPageX+Math.round((s-this.originalPageX)/n.grid[0])*n.grid[0]:this.originalPageX;s=u?l-this.offset.click.left<u[0]||l-this.offset.click.left>u[2]?l-this.offset.click.left<u[0]?l+n.grid[0]:l-n.grid[0]:l:l}}return{top:o-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():i?0:r.scrollTop()),left:s-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():i?0:r.scrollLeft())}},_clear:function(){this.helper.removeClass("ui-draggable-dragging"),this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval&&this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1},_trigger:function(t,n,r){return r=r||this._uiHash(),e.ui.plugin.call(this,t,[n,r]),t=="drag"&&(this.positionAbs=this._convertPositionTo("absolute")),e.Widget.prototype._trigger.call(this,t,n,r)},plugins:{},_uiHash:function(e){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),e.ui.plugin.add("draggable","connectToSortable",{start:function(t,n){var r=e(this).data("draggable"),i=r.options,s=e.extend({},n,{item:r.element});r.sortables=[],e(i.connectToSortable).each(function(){var n=e.data(this,"sortable");n&&!n.options.disabled&&(r.sortables.push({instance:n,shouldRevert:n.options.revert}),n.refreshPositions(),n._trigger("activate",t,s))})},stop:function(t,n){var r=e(this).data("draggable"),i=e.extend({},n,{item:r.element});e.each(r.sortables,function(){this.instance.isOver?(this.instance.isOver=0,r.cancelHelperRemoval=!0,this.instance.cancelHelperRemoval=!1,this.shouldRevert&&(this.instance.options.revert=!0),this.instance._mouseStop(t),this.instance.options.helper=this.instance.options._helper,r.options.helper=="original"&&this.instance.currentItem.css({top:"auto",left:"auto"})):(this.instance.cancelHelperRemoval=!1,this.instance._trigger("deactivate",t,i))})},drag:function(t,n){var r=e(this).data("draggable"),i=this,s=function(t){var n=this.offset.click.top,r=this.offset.click.left,i=this.positionAbs.top,s=this.positionAbs.left,o=t.height,u=t.width,a=t.top,f=t.left;return e.ui.isOver(i+n,s+r,a,f,o,u)};e.each(r.sortables,function(s){var o=!1,u=this;this.instance.positionAbs=r.positionAbs,this.instance.helperProportions=r.helperProportions,this.instance.offset.click=r.offset.click,this.instance._intersectsWith(this.instance.containerCache)&&(o=!0,e.each(r.sortables,function(){return this.instance.positionAbs=r.positionAbs,this.instance.helperProportions=r.helperProportions,this.instance.offset.click=r.offset.click,this!=u&&this.instance._intersectsWith(this.instance.containerCache)&&e.ui.contains(u.instance.element[0],this.instance.element[0])&&(o=!1),o})),o?(this.instance.isOver||(this.instance.isOver=1,this.instance.currentItem=e(i).clone().removeAttr("id").appendTo(this.instance.element).data("sortable-item",!0),this.instance.options._helper=this.instance.options.helper,this.instance.options.helper=function(){return n.helper[0]},t.target=this.instance.currentItem[0],this.instance._mouseCapture(t,!0),this.instance._mouseStart(t,!0,!0),this.instance.offset.click.top=r.offset.click.top,this.instance.offset.click.left=r.offset.click.left,this.instance.offset.parent.left-=r.offset.parent.left-this.instance.offset.parent.left,this.instance.offset.parent.top-=r.offset.parent.top-this.instance.offset.parent.top,r._trigger("toSortable",t),r.dropped=this.instance.element,r.currentItem=r.element,this.instance.fromOutside=r),this.instance.currentItem&&this.instance._mouseDrag(t)):this.instance.isOver&&(this.instance.isOver=0,this.instance.cancelHelperRemoval=!0,this.instance.options.revert=!1,this.instance._trigger("out",t,this.instance._uiHash(this.instance)),this.instance._mouseStop(t,!0),this.instance.options.helper=this.instance.options._helper,this.instance.currentItem.remove(),this.instance.placeholder&&this.instance.placeholder.remove(),r._trigger("fromSortable",t),r.dropped=!1)})}}),e.ui.plugin.add("draggable","cursor",{start:function(t,n){var r=e("body"),i=e(this).data("draggable").options;r.css("cursor")&&(i._cursor=r.css("cursor")),r.css("cursor",i.cursor)},stop:function(t,n){var r=e(this).data("draggable").options;r._cursor&&e("body").css("cursor",r._cursor)}}),e.ui.plugin.add("draggable","opacity",{start:function(t,n){var r=e(n.helper),i=e(this).data("draggable").options;r.css("opacity")&&(i._opacity=r.css("opacity")),r.css("opacity",i.opacity)},stop:function(t,n){var r=e(this).data("draggable").options;r._opacity&&e(n.helper).css("opacity",r._opacity)}}),e.ui.plugin.add("draggable","scroll",{start:function(t,n){var r=e(this).data("draggable");r.scrollParent[0]!=document&&r.scrollParent[0].tagName!="HTML"&&(r.overflowOffset=r.scrollParent.offset())},drag:function(t,n){var r=e(this).data("draggable"),i=r.options,s=!1;if(r.scrollParent[0]!=document&&r.scrollParent[0].tagName!="HTML"){if(!i.axis||i.axis!="x")r.overflowOffset.top+r.scrollParent[0].offsetHeight-t.pageY<i.scrollSensitivity?r.scrollParent[0].scrollTop=s=r.scrollParent[0].scrollTop+i.scrollSpeed:t.pageY-r.overflowOffset.top<i.scrollSensitivity&&(r.scrollParent[0].scrollTop=s=r.scrollParent[0].scrollTop-i.scrollSpeed);if(!i.axis||i.axis!="y")r.overflowOffset.left+r.scrollParent[0].offsetWidth-t.pageX<i.scrollSensitivity?r.scrollParent[0].scrollLeft=s=r.scrollParent[0].scrollLeft+i.scrollSpeed:t.pageX-r.overflowOffset.left<i.scrollSensitivity&&(r.scrollParent[0].scrollLeft=s=r.scrollParent[0].scrollLeft-i.scrollSpeed)}else{if(!i.axis||i.axis!="x")t.pageY-e(document).scrollTop()<i.scrollSensitivity?s=e(document).scrollTop(e(document).scrollTop()-i.scrollSpeed):e(window).height()-(t.pageY-e(document).scrollTop())<i.scrollSensitivity&&(s=e(document).scrollTop(e(document).scrollTop()+i.scrollSpeed));if(!i.axis||i.axis!="y")t.pageX-e(document).scrollLeft()<i.scrollSensitivity?s=e(document).scrollLeft(e(document).scrollLeft()-i.scrollSpeed):e(window).width()-(t.pageX-e(document).scrollLeft())<i.scrollSensitivity&&(s=e(document).scrollLeft(e(document).scrollLeft()+i.scrollSpeed))}s!==!1&&e.ui.ddmanager&&!i.dropBehaviour&&e.ui.ddmanager.prepareOffsets(r,t)}}),e.ui.plugin.add("draggable","snap",{start:function(t,n){var r=e(this).data("draggable"),i=r.options;r.snapElements=[],e(i.snap.constructor!=String?i.snap.items||":data(draggable)":i.snap).each(function(){var t=e(this),n=t.offset();this!=r.element[0]&&r.snapElements.push({item:this,width:t.outerWidth(),height:t.outerHeight(),top:n.top,left:n.left})})},drag:function(t,n){var r=e(this).data("draggable"),i=r.options,s=i.snapTolerance,o=n.offset.left,u=o+r.helperProportions.width,a=n.offset.top,f=a+r.helperProportions.height;for(var l=r.snapElements.length-1;l>=0;l--){var c=r.snapElements[l].left,h=c+r.snapElements[l].width,p=r.snapElements[l].top,d=p+r.snapElements[l].height;if(!(c-s<o&&o<h+s&&p-s<a&&a<d+s||c-s<o&&o<h+s&&p-s<f&&f<d+s||c-s<u&&u<h+s&&p-s<a&&a<d+s||c-s<u&&u<h+s&&p-s<f&&f<d+s)){r.snapElements[l].snapping&&r.options.snap.release&&r.options.snap.release.call(r.element,t,e.extend(r._uiHash(),{snapItem:r.snapElements[l].item})),r.snapElements[l].snapping=!1;continue}if(i.snapMode!="inner"){var v=Math.abs(p-f)<=s,m=Math.abs(d-a)<=s,g=Math.abs(c-u)<=s,y=Math.abs(h-o)<=s;v&&(n.position.top=r._convertPositionTo("relative",{top:p-r.helperProportions.height,left:0}).top-r.margins.top),m&&(n.position.top=r._convertPositionTo("relative",{top:d,left:0}).top-r.margins.top),g&&(n.position.left=r._convertPositionTo("relative",{top:0,left:c-r.helperProportions.width}).left-r.margins.left),y&&(n.position.left=r._convertPositionTo("relative",{top:0,left:h}).left-r.margins.left)}var b=v||m||g||y;if(i.snapMode!="outer"){var v=Math.abs(p-a)<=s,m=Math.abs(d-f)<=s,g=Math.abs(c-o)<=s,y=Math.abs(h-u)<=s;v&&(n.position.top=r._convertPositionTo("relative",{top:p,left:0}).top-r.margins.top),m&&(n.position.top=r._convertPositionTo("relative",{top:d-r.helperProportions.height,left:0}).top-r.margins.top),g&&(n.position.left=r._convertPositionTo("relative",{top:0,left:c}).left-r.margins.left),y&&(n.position.left=r._convertPositionTo("relative",{top:0,left:h-r.helperProportions.width}).left-r.margins.left)}!r.snapElements[l].snapping&&(v||m||g||y||b)&&r.options.snap.snap&&r.options.snap.snap.call(r.element,t,e.extend(r._uiHash(),{snapItem:r.snapElements[l].item})),r.snapElements[l].snapping=v||m||g||y||b}}}),e.ui.plugin.add("draggable","stack",{start:function(t,n){var r=e(this).data("draggable").options,i=e.makeArray(e(r.stack)).sort(function(t,n){return(parseInt(e(t).css("zIndex"),10)||0)-(parseInt(e(n).css("zIndex"),10)||0)});if(!i.length)return;var s=parseInt(i[0].style.zIndex)||0;e(i).each(function(e){this.style.zIndex=s+e}),this[0].style.zIndex=s+i.length}}),e.ui.plugin.add("draggable","zIndex",{start:function(t,n){var r=e(n.helper),i=e(this).data("draggable").options;r.css("zIndex")&&(i._zIndex=r.css("zIndex")),r.css("zIndex",i.zIndex)},stop:function(t,n){var r=e(this).data("draggable").options;r._zIndex&&e(n.helper).css("zIndex",r._zIndex)}})})(jQuery);(function(e,t){e.widget("ui.droppable",{version:"1.9.2",widgetEventPrefix:"drop",options:{accept:"*",activeClass:!1,addClasses:!0,greedy:!1,hoverClass:!1,scope:"default",tolerance:"intersect"},_create:function(){var t=this.options,n=t.accept;this.isover=0,this.isout=1,this.accept=e.isFunction(n)?n:function(e){return e.is(n)},this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight},e.ui.ddmanager.droppables[t.scope]=e.ui.ddmanager.droppables[t.scope]||[],e.ui.ddmanager.droppables[t.scope].push(this),t.addClasses&&this.element.addClass("ui-droppable")},_destroy:function(){var t=e.ui.ddmanager.droppables[this.options.scope];for(var n=0;n<t.length;n++)t[n]==this&&t.splice(n,1);this.element.removeClass("ui-droppable ui-droppable-disabled")},_setOption:function(t,n){t=="accept"&&(this.accept=e.isFunction(n)?n:function(e){return e.is(n)}),e.Widget.prototype._setOption.apply(this,arguments)},_activate:function(t){var n=e.ui.ddmanager.current;this.options.activeClass&&this.element.addClass(this.options.activeClass),n&&this._trigger("activate",t,this.ui(n))},_deactivate:function(t){var n=e.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass),n&&this._trigger("deactivate",t,this.ui(n))},_over:function(t){var n=e.ui.ddmanager.current;if(!n||(n.currentItem||n.element)[0]==this.element[0])return;this.accept.call(this.element[0],n.currentItem||n.element)&&(this.options.hoverClass&&this.element.addClass(this.options.hoverClass),this._trigger("over",t,this.ui(n)))},_out:function(t){var n=e.ui.ddmanager.current;if(!n||(n.currentItem||n.element)[0]==this.element[0])return;this.accept.call(this.element[0],n.currentItem||n.element)&&(this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("out",t,this.ui(n)))},_drop:function(t,n){var r=n||e.ui.ddmanager.current;if(!r||(r.currentItem||r.element)[0]==this.element[0])return!1;var i=!1;return this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var t=e.data(this,"droppable");if(t.options.greedy&&!t.options.disabled&&t.options.scope==r.options.scope&&t.accept.call(t.element[0],r.currentItem||r.element)&&e.ui.intersect(r,e.extend(t,{offset:t.element.offset()}),t.options.tolerance))return i=!0,!1}),i?!1:this.accept.call(this.element[0],r.currentItem||r.element)?(this.options.activeClass&&this.element.removeClass(this.options.activeClass),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("drop",t,this.ui(r)),this.element):!1},ui:function(e){return{draggable:e.currentItem||e.element,helper:e.helper,position:e.position,offset:e.positionAbs}}}),e.ui.intersect=function(t,n,r){if(!n.offset)return!1;var i=(t.positionAbs||t.position.absolute).left,s=i+t.helperProportions.width,o=(t.positionAbs||t.position.absolute).top,u=o+t.helperProportions.height,a=n.offset.left,f=a+n.proportions.width,l=n.offset.top,c=l+n.proportions.height;switch(r){case"fit":return a<=i&&s<=f&&l<=o&&u<=c;case"intersect":return a<i+t.helperProportions.width/2&&s-t.helperProportions.width/2<f&&l<o+t.helperProportions.height/2&&u-t.helperProportions.height/2<c;case"pointer":var h=(t.positionAbs||t.position.absolute).left+(t.clickOffset||t.offset.click).left,p=(t.positionAbs||t.position.absolute).top+(t.clickOffset||t.offset.click).top,d=e.ui.isOver(p,h,l,a,n.proportions.height,n.proportions.width);return d;case"touch":return(o>=l&&o<=c||u>=l&&u<=c||o<l&&u>c)&&(i>=a&&i<=f||s>=a&&s<=f||i<a&&s>f);default:return!1}},e.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(t,n){var r=e.ui.ddmanager.droppables[t.options.scope]||[],i=n?n.type:null,s=(t.currentItem||t.element).find(":data(droppable)").andSelf();e:for(var o=0;o<r.length;o++){if(r[o].options.disabled||t&&!r[o].accept.call(r[o].element[0],t.currentItem||t.element))continue;for(var u=0;u<s.length;u++)if(s[u]==r[o].element[0]){r[o].proportions.height=0;continue e}r[o].visible=r[o].element.css("display")!="none";if(!r[o].visible)continue;i=="mousedown"&&r[o]._activate.call(r[o],n),r[o].offset=r[o].element.offset(),r[o].proportions={width:r[o].element[0].offsetWidth,height:r[o].element[0].offsetHeight}}},drop:function(t,n){var r=!1;return e.each(e.ui.ddmanager.droppables[t.options.scope]||[],function(){if(!this.options)return;!this.options.disabled&&this.visible&&e.ui.intersect(t,this,this.options.tolerance)&&(r=this._drop.call(this,n)||r),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],t.currentItem||t.element)&&(this.isout=1,this.isover=0,this._deactivate.call(this,n))}),r},dragStart:function(t,n){t.element.parentsUntil("body").bind("scroll.droppable",function(){t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,n)})},drag:function(t,n){t.options.refreshPositions&&e.ui.ddmanager.prepareOffsets(t,n),e.each(e.ui.ddmanager.droppables[t.options.scope]||[],function(){if(this.options.disabled||this.greedyChild||!this.visible)return;var r=e.ui.intersect(t,this,this.options.tolerance),i=!r&&this.isover==1?"isout":r&&this.isover==0?"isover":null;if(!i)return;var s;if(this.options.greedy){var o=this.options.scope,u=this.element.parents(":data(droppable)").filter(function(){return e.data(this,"droppable").options.scope===o});u.length&&(s=e.data(u[0],"droppable"),s.greedyChild=i=="isover"?1:0)}s&&i=="isover"&&(s.isover=0,s.isout=1,s._out.call(s,n)),this[i]=1,this[i=="isout"?"isover":"isout"]=0,this[i=="isover"?"_over":"_out"].call(this,n),s&&i=="isout"&&(s.isout=0,s.isover=1,s._over.call(s,n))})},dragStop:function(t,n){t.element.parentsUntil("body").unbind("scroll.droppable"),t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,n)}}})(jQuery);jQuery.effects||function(e,t){var n=e.uiBackCompat!==!1,r="ui-effects-";e.effects={effect:{}},function(t,n){function p(e,t,n){var r=a[t.type]||{};return e==null?n||!t.def?null:t.def:(e=r.floor?~~e:parseFloat(e),isNaN(e)?t.def:r.mod?(e+r.mod)%r.mod:0>e?0:r.max<e?r.max:e)}function d(e){var n=o(),r=n._rgba=[];return e=e.toLowerCase(),h(s,function(t,i){var s,o=i.re.exec(e),a=o&&i.parse(o),f=i.space||"rgba";if(a)return s=n[f](a),n[u[f].cache]=s[u[f].cache],r=n._rgba=s._rgba,!1}),r.length?(r.join()==="0,0,0,0"&&t.extend(r,c.transparent),n):c[e]}function v(e,t,n){return n=(n+1)%1,n*6<1?e+(t-e)*n*6:n*2<1?t:n*3<2?e+(t-e)*(2/3-n)*6:e}var r="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor".split(" "),i=/^([\-+])=\s*(\d+\.?\d*)/,s=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d+(?:\.\d+)?)\s*)?\)/,parse:function(e){return[e[1],e[2],e[3],e[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d+(?:\.\d+)?)\s*)?\)/,parse:function(e){return[e[1]*2.55,e[2]*2.55,e[3]*2.55,e[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(e){return[parseInt(e[1],16),parseInt(e[2],16),parseInt(e[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(e){return[parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16),parseInt(e[3]+e[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d+(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(e){return[e[1],e[2]/100,e[3]/100,e[4]]}}],o=t.Color=function(e,n,r,i){return new t.Color.fn.parse(e,n,r,i)},u={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},a={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},f=o.support={},l=t("<p>")[0],c,h=t.each;l.style.cssText="background-color:rgba(1,1,1,.5)",f.rgba=l.style.backgroundColor.indexOf("rgba")>-1,h(u,function(e,t){t.cache="_"+e,t.props.alpha={idx:3,type:"percent",def:1}}),o.fn=t.extend(o.prototype,{parse:function(r,i,s,a){if(r===n)return this._rgba=[null,null,null,null],this;if(r.jquery||r.nodeType)r=t(r).css(i),i=n;var f=this,l=t.type(r),v=this._rgba=[];i!==n&&(r=[r,i,s,a],l="array");if(l==="string")return this.parse(d(r)||c._default);if(l==="array")return h(u.rgba.props,function(e,t){v[t.idx]=p(r[t.idx],t)}),this;if(l==="object")return r instanceof o?h(u,function(e,t){r[t.cache]&&(f[t.cache]=r[t.cache].slice())}):h(u,function(t,n){var i=n.cache;h(n.props,function(e,t){if(!f[i]&&n.to){if(e==="alpha"||r[e]==null)return;f[i]=n.to(f._rgba)}f[i][t.idx]=p(r[e],t,!0)}),f[i]&&e.inArray(null,f[i].slice(0,3))<0&&(f[i][3]=1,n.from&&(f._rgba=n.from(f[i])))}),this},is:function(e){var t=o(e),n=!0,r=this;return h(u,function(e,i){var s,o=t[i.cache];return o&&(s=r[i.cache]||i.to&&i.to(r._rgba)||[],h(i.props,function(e,t){if(o[t.idx]!=null)return n=o[t.idx]===s[t.idx],n})),n}),n},_space:function(){var e=[],t=this;return h(u,function(n,r){t[r.cache]&&e.push(n)}),e.pop()},transition:function(e,t){var n=o(e),r=n._space(),i=u[r],s=this.alpha()===0?o("transparent"):this,f=s[i.cache]||i.to(s._rgba),l=f.slice();return n=n[i.cache],h(i.props,function(e,r){var i=r.idx,s=f[i],o=n[i],u=a[r.type]||{};if(o===null)return;s===null?l[i]=o:(u.mod&&(o-s>u.mod/2?s+=u.mod:s-o>u.mod/2&&(s-=u.mod)),l[i]=p((o-s)*t+s,r))}),this[r](l)},blend:function(e){if(this._rgba[3]===1)return this;var n=this._rgba.slice(),r=n.pop(),i=o(e)._rgba;return o(t.map(n,function(e,t){return(1-r)*i[t]+r*e}))},toRgbaString:function(){var e="rgba(",n=t.map(this._rgba,function(e,t){return e==null?t>2?1:0:e});return n[3]===1&&(n.pop(),e="rgb("),e+n.join()+")"},toHslaString:function(){var e="hsla(",n=t.map(this.hsla(),function(e,t){return e==null&&(e=t>2?1:0),t&&t<3&&(e=Math.round(e*100)+"%"),e});return n[3]===1&&(n.pop(),e="hsl("),e+n.join()+")"},toHexString:function(e){var n=this._rgba.slice(),r=n.pop();return e&&n.push(~~(r*255)),"#"+t.map(n,function(e){return e=(e||0).toString(16),e.length===1?"0"+e:e}).join("")},toString:function(){return this._rgba[3]===0?"transparent":this.toRgbaString()}}),o.fn.parse.prototype=o.fn,u.hsla.to=function(e){if(e[0]==null||e[1]==null||e[2]==null)return[null,null,null,e[3]];var t=e[0]/255,n=e[1]/255,r=e[2]/255,i=e[3],s=Math.max(t,n,r),o=Math.min(t,n,r),u=s-o,a=s+o,f=a*.5,l,c;return o===s?l=0:t===s?l=60*(n-r)/u+360:n===s?l=60*(r-t)/u+120:l=60*(t-n)/u+240,f===0||f===1?c=f:f<=.5?c=u/a:c=u/(2-a),[Math.round(l)%360,c,f,i==null?1:i]},u.hsla.from=function(e){if(e[0]==null||e[1]==null||e[2]==null)return[null,null,null,e[3]];var t=e[0]/360,n=e[1],r=e[2],i=e[3],s=r<=.5?r*(1+n):r+n-r*n,o=2*r-s;return[Math.round(v(o,s,t+1/3)*255),Math.round(v(o,s,t)*255),Math.round(v(o,s,t-1/3)*255),i]},h(u,function(e,r){var s=r.props,u=r.cache,a=r.to,f=r.from;o.fn[e]=function(e){a&&!this[u]&&(this[u]=a(this._rgba));if(e===n)return this[u].slice();var r,i=t.type(e),l=i==="array"||i==="object"?e:arguments,c=this[u].slice();return h(s,function(e,t){var n=l[i==="object"?e:t.idx];n==null&&(n=c[t.idx]),c[t.idx]=p(n,t)}),f?(r=o(f(c)),r[u]=c,r):o(c)},h(s,function(n,r){if(o.fn[n])return;o.fn[n]=function(s){var o=t.type(s),u=n==="alpha"?this._hsla?"hsla":"rgba":e,a=this[u](),f=a[r.idx],l;return o==="undefined"?f:(o==="function"&&(s=s.call(this,f),o=t.type(s)),s==null&&r.empty?this:(o==="string"&&(l=i.exec(s),l&&(s=f+parseFloat(l[2])*(l[1]==="+"?1:-1))),a[r.idx]=s,this[u](a)))}})}),h(r,function(e,n){t.cssHooks[n]={set:function(e,r){var i,s,u="";if(t.type(r)!=="string"||(i=d(r))){r=o(i||r);if(!f.rgba&&r._rgba[3]!==1){s=n==="backgroundColor"?e.parentNode:e;while((u===""||u==="transparent")&&s&&s.style)try{u=t.css(s,"backgroundColor"),s=s.parentNode}catch(a){}r=r.blend(u&&u!=="transparent"?u:"_default")}r=r.toRgbaString()}try{e.style[n]=r}catch(l){}}},t.fx.step[n]=function(e){e.colorInit||(e.start=o(e.elem,n),e.end=o(e.end),e.colorInit=!0),t.cssHooks[n].set(e.elem,e.start.transition(e.end,e.pos))}}),t.cssHooks.borderColor={expand:function(e){var t={};return h(["Top","Right","Bottom","Left"],function(n,r){t["border"+r+"Color"]=e}),t}},c=t.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(jQuery),function(){function i(){var t=this.ownerDocument.defaultView?this.ownerDocument.defaultView.getComputedStyle(this,null):this.currentStyle,n={},r,i;if(t&&t.length&&t[0]&&t[t[0]]){i=t.length;while(i--)r=t[i],typeof t[r]=="string"&&(n[e.camelCase(r)]=t[r])}else for(r in t)typeof t[r]=="string"&&(n[r]=t[r]);return n}function s(t,n){var i={},s,o;for(s in n)o=n[s],t[s]!==o&&!r[s]&&(e.fx.step[s]||!isNaN(parseFloat(o)))&&(i[s]=o);return i}var n=["add","remove","toggle"],r={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};e.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(t,n){e.fx.step[n]=function(e){if(e.end!=="none"&&!e.setAttr||e.pos===1&&!e.setAttr)jQuery.style(e.elem,n,e.end),e.setAttr=!0}}),e.effects.animateClass=function(t,r,o,u){var a=e.speed(r,o,u);return this.queue(function(){var r=e(this),o=r.attr("class")||"",u,f=a.children?r.find("*").andSelf():r;f=f.map(function(){var t=e(this);return{el:t,start:i.call(this)}}),u=function(){e.each(n,function(e,n){t[n]&&r[n+"Class"](t[n])})},u(),f=f.map(function(){return this.end=i.call(this.el[0]),this.diff=s(this.start,this.end),this}),r.attr("class",o),f=f.map(function(){var t=this,n=e.Deferred(),r=jQuery.extend({},a,{queue:!1,complete:function(){n.resolve(t)}});return this.el.animate(this.diff,r),n.promise()}),e.when.apply(e,f.get()).done(function(){u(),e.each(arguments,function(){var t=this.el;e.each(this.diff,function(e){t.css(e,"")})}),a.complete.call(r[0])})})},e.fn.extend({_addClass:e.fn.addClass,addClass:function(t,n,r,i){return n?e.effects.animateClass.call(this,{add:t},n,r,i):this._addClass(t)},_removeClass:e.fn.removeClass,removeClass:function(t,n,r,i){return n?e.effects.animateClass.call(this,{remove:t},n,r,i):this._removeClass(t)},_toggleClass:e.fn.toggleClass,toggleClass:function(n,r,i,s,o){return typeof r=="boolean"||r===t?i?e.effects.animateClass.call(this,r?{add:n}:{remove:n},i,s,o):this._toggleClass(n,r):e.effects.animateClass.call(this,{toggle:n},r,i,s)},switchClass:function(t,n,r,i,s){return e.effects.animateClass.call(this,{add:n,remove:t},r,i,s)}})}(),function(){function i(t,n,r,i){e.isPlainObject(t)&&(n=t,t=t.effect),t={effect:t},n==null&&(n={}),e.isFunction(n)&&(i=n,r=null,n={});if(typeof n=="number"||e.fx.speeds[n])i=r,r=n,n={};return e.isFunction(r)&&(i=r,r=null),n&&e.extend(t,n),r=r||n.duration,t.duration=e.fx.off?0:typeof r=="number"?r:r in e.fx.speeds?e.fx.speeds[r]:e.fx.speeds._default,t.complete=i||n.complete,t}function s(t){return!t||typeof t=="number"||e.fx.speeds[t]?!0:typeof t=="string"&&!e.effects.effect[t]?n&&e.effects[t]?!1:!0:!1}e.extend(e.effects,{version:"1.9.2",save:function(e,t){for(var n=0;n<t.length;n++)t[n]!==null&&e.data(r+t[n],e[0].style[t[n]])},restore:function(e,n){var i,s;for(s=0;s<n.length;s++)n[s]!==null&&(i=e.data(r+n[s]),i===t&&(i=""),e.css(n[s],i))},setMode:function(e,t){return t==="toggle"&&(t=e.is(":hidden")?"show":"hide"),t},getBaseline:function(e,t){var n,r;switch(e[0]){case"top":n=0;break;case"middle":n=.5;break;case"bottom":n=1;break;default:n=e[0]/t.height}switch(e[1]){case"left":r=0;break;case"center":r=.5;break;case"right":r=1;break;default:r=e[1]/t.width}return{x:r,y:n}},createWrapper:function(t){if(t.parent().is(".ui-effects-wrapper"))return t.parent();var n={width:t.outerWidth(!0),height:t.outerHeight(!0),"float":t.css("float")},r=e("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),i={width:t.width(),height:t.height()},s=document.activeElement;try{s.id}catch(o){s=document.body}return t.wrap(r),(t[0]===s||e.contains(t[0],s))&&e(s).focus(),r=t.parent(),t.css("position")==="static"?(r.css({position:"relative"}),t.css({position:"relative"})):(e.extend(n,{position:t.css("position"),zIndex:t.css("z-index")}),e.each(["top","left","bottom","right"],function(e,r){n[r]=t.css(r),isNaN(parseInt(n[r],10))&&(n[r]="auto")}),t.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),t.css(i),r.css(n).show()},removeWrapper:function(t){var n=document.activeElement;return t.parent().is(".ui-effects-wrapper")&&(t.parent().replaceWith(t),(t[0]===n||e.contains(t[0],n))&&e(n).focus()),t},setTransition:function(t,n,r,i){return i=i||{},e.each(n,function(e,n){var s=t.cssUnit(n);s[0]>0&&(i[n]=s[0]*r+s[1])}),i}}),e.fn.extend({effect:function(){function a(n){function u(){e.isFunction(i)&&i.call(r[0]),e.isFunction(n)&&n()}var r=e(this),i=t.complete,s=t.mode;(r.is(":hidden")?s==="hide":s==="show")?u():o.call(r[0],t,u)}var t=i.apply(this,arguments),r=t.mode,s=t.queue,o=e.effects.effect[t.effect],u=!o&&n&&e.effects[t.effect];return e.fx.off||!o&&!u?r?this[r](t.duration,t.complete):this.each(function(){t.complete&&t.complete.call(this)}):o?s===!1?this.each(a):this.queue(s||"fx",a):u.call(this,{options:t,duration:t.duration,callback:t.complete,mode:t.mode})},_show:e.fn.show,show:function(e){if(s(e))return this._show.apply(this,arguments);var t=i.apply(this,arguments);return t.mode="show",this.effect.call(this,t)},_hide:e.fn.hide,hide:function(e){if(s(e))return this._hide.apply(this,arguments);var t=i.apply(this,arguments);return t.mode="hide",this.effect.call(this,t)},__toggle:e.fn.toggle,toggle:function(t){if(s(t)||typeof t=="boolean"||e.isFunction(t))return this.__toggle.apply(this,arguments);var n=i.apply(this,arguments);return n.mode="toggle",this.effect.call(this,n)},cssUnit:function(t){var n=this.css(t),r=[];return e.each(["em","px","%","pt"],function(e,t){n.indexOf(t)>0&&(r=[parseFloat(n),t])}),r}})}(),function(){var t={};e.each(["Quad","Cubic","Quart","Quint","Expo"],function(e,n){t[n]=function(t){return Math.pow(t,e+2)}}),e.extend(t,{Sine:function(e){return 1-Math.cos(e*Math.PI/2)},Circ:function(e){return 1-Math.sqrt(1-e*e)},Elastic:function(e){return e===0||e===1?e:-Math.pow(2,8*(e-1))*Math.sin(((e-1)*80-7.5)*Math.PI/15)},Back:function(e){return e*e*(3*e-2)},Bounce:function(e){var t,n=4;while(e<((t=Math.pow(2,--n))-1)/11);return 1/Math.pow(4,3-n)-7.5625*Math.pow((t*3-2)/22-e,2)}}),e.each(t,function(t,n){e.easing["easeIn"+t]=n,e.easing["easeOut"+t]=function(e){return 1-n(1-e)},e.easing["easeInOut"+t]=function(e){return e<.5?n(e*2)/2:1-n(e*-2+2)/2}})}()}(jQuery);(function(e,t){var n=/up|down|vertical/,r=/up|left|vertical|horizontal/;e.effects.effect.blind=function(t,i){var s=e(this),o=["position","top","bottom","left","right","height","width"],u=e.effects.setMode(s,t.mode||"hide"),a=t.direction||"up",f=n.test(a),l=f?"height":"width",c=f?"top":"left",h=r.test(a),p={},d=u==="show",v,m,g;s.parent().is(".ui-effects-wrapper")?e.effects.save(s.parent(),o):e.effects.save(s,o),s.show(),v=e.effects.createWrapper(s).css({overflow:"hidden"}),m=v[l](),g=parseFloat(v.css(c))||0,p[l]=d?m:0,h||(s.css(f?"bottom":"right",0).css(f?"top":"left","auto").css({position:"absolute"}),p[c]=d?g:m+g),d&&(v.css(l,0),h||v.css(c,g+m)),v.animate(p,{duration:t.duration,easing:t.easing,queue:!1,complete:function(){u==="hide"&&s.hide(),e.effects.restore(s,o),e.effects.removeWrapper(s),i()}})}})(jQuery);(function(e,t){e.effects.effect.bounce=function(t,n){var r=e(this),i=["position","top","bottom","left","right","height","width"],s=e.effects.setMode(r,t.mode||"effect"),o=s==="hide",u=s==="show",a=t.direction||"up",f=t.distance,l=t.times||5,c=l*2+(u||o?1:0),h=t.duration/c,p=t.easing,d=a==="up"||a==="down"?"top":"left",v=a==="up"||a==="left",m,g,y,b=r.queue(),w=b.length;(u||o)&&i.push("opacity"),e.effects.save(r,i),r.show(),e.effects.createWrapper(r),f||(f=r[d==="top"?"outerHeight":"outerWidth"]()/3),u&&(y={opacity:1},y[d]=0,r.css("opacity",0).css(d,v?-f*2:f*2).animate(y,h,p)),o&&(f/=Math.pow(2,l-1)),y={},y[d]=0;for(m=0;m<l;m++)g={},g[d]=(v?"-=":"+=")+f,r.animate(g,h,p).animate(y,h,p),f=o?f*2:f/2;o&&(g={opacity:0},g[d]=(v?"-=":"+=")+f,r.animate(g,h,p)),r.queue(function(){o&&r.hide(),e.effects.restore(r,i),e.effects.removeWrapper(r),n()}),w>1&&b.splice.apply(b,[1,0].concat(b.splice(w,c+1))),r.dequeue()}})(jQuery);(function(e,t){e.effects.effect.clip=function(t,n){var r=e(this),i=["position","top","bottom","left","right","height","width"],s=e.effects.setMode(r,t.mode||"hide"),o=s==="show",u=t.direction||"vertical",a=u==="vertical",f=a?"height":"width",l=a?"top":"left",c={},h,p,d;e.effects.save(r,i),r.show(),h=e.effects.createWrapper(r).css({overflow:"hidden"}),p=r[0].tagName==="IMG"?h:r,d=p[f](),o&&(p.css(f,0),p.css(l,d/2)),c[f]=o?d:0,c[l]=o?0:d/2,p.animate(c,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){o||r.hide(),e.effects.restore(r,i),e.effects.removeWrapper(r),n()}})}})(jQuery);(function(e,t){e.effects.effect.drop=function(t,n){var r=e(this),i=["position","top","bottom","left","right","opacity","height","width"],s=e.effects.setMode(r,t.mode||"hide"),o=s==="show",u=t.direction||"left",a=u==="up"||u==="down"?"top":"left",f=u==="up"||u==="left"?"pos":"neg",l={opacity:o?1:0},c;e.effects.save(r,i),r.show(),e.effects.createWrapper(r),c=t.distance||r[a==="top"?"outerHeight":"outerWidth"](!0)/2,o&&r.css("opacity",0).css(a,f==="pos"?-c:c),l[a]=(o?f==="pos"?"+=":"-=":f==="pos"?"-=":"+=")+c,r.animate(l,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){s==="hide"&&r.hide(),e.effects.restore(r,i),e.effects.removeWrapper(r),n()}})}})(jQuery);(function(e,t){e.effects.effect.explode=function(t,n){function y(){c.push(this),c.length===r*i&&b()}function b(){s.css({visibility:"visible"}),e(c).remove(),u||s.hide(),n()}var r=t.pieces?Math.round(Math.sqrt(t.pieces)):3,i=r,s=e(this),o=e.effects.setMode(s,t.mode||"hide"),u=o==="show",a=s.show().css("visibility","hidden").offset(),f=Math.ceil(s.outerWidth()/i),l=Math.ceil(s.outerHeight()/r),c=[],h,p,d,v,m,g;for(h=0;h<r;h++){v=a.top+h*l,g=h-(r-1)/2;for(p=0;p<i;p++)d=a.left+p*f,m=p-(i-1)/2,s.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-p*f,top:-h*l}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:f,height:l,left:d+(u?m*f:0),top:v+(u?g*l:0),opacity:u?0:1}).animate({left:d+(u?0:m*f),top:v+(u?0:g*l),opacity:u?1:0},t.duration||500,t.easing,y)}}})(jQuery);(function(e,t){e.effects.effect.fade=function(t,n){var r=e(this),i=e.effects.setMode(r,t.mode||"toggle");r.animate({opacity:i},{queue:!1,duration:t.duration,easing:t.easing,complete:n})}})(jQuery);(function(e,t){e.effects.effect.fold=function(t,n){var r=e(this),i=["position","top","bottom","left","right","height","width"],s=e.effects.setMode(r,t.mode||"hide"),o=s==="show",u=s==="hide",a=t.size||15,f=/([0-9]+)%/.exec(a),l=!!t.horizFirst,c=o!==l,h=c?["width","height"]:["height","width"],p=t.duration/2,d,v,m={},g={};e.effects.save(r,i),r.show(),d=e.effects.createWrapper(r).css({overflow:"hidden"}),v=c?[d.width(),d.height()]:[d.height(),d.width()],f&&(a=parseInt(f[1],10)/100*v[u?0:1]),o&&d.css(l?{height:0,width:a}:{height:a,width:0}),m[h[0]]=o?v[0]:a,g[h[1]]=o?v[1]:0,d.animate(m,p,t.easing).animate(g,p,t.easing,function(){u&&r.hide(),e.effects.restore(r,i),e.effects.removeWrapper(r),n()})}})(jQuery);(function(e,t){e.effects.effect.highlight=function(t,n){var r=e(this),i=["backgroundImage","backgroundColor","opacity"],s=e.effects.setMode(r,t.mode||"show"),o={backgroundColor:r.css("backgroundColor")};s==="hide"&&(o.opacity=0),e.effects.save(r,i),r.show().css({backgroundImage:"none",backgroundColor:t.color||"#ffff99"}).animate(o,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){s==="hide"&&r.hide(),e.effects.restore(r,i),n()}})}})(jQuery);(function(e,t){e.effects.effect.pulsate=function(t,n){var r=e(this),i=e.effects.setMode(r,t.mode||"show"),s=i==="show",o=i==="hide",u=s||i==="hide",a=(t.times||5)*2+(u?1:0),f=t.duration/a,l=0,c=r.queue(),h=c.length,p;if(s||!r.is(":visible"))r.css("opacity",0).show(),l=1;for(p=1;p<a;p++)r.animate({opacity:l},f,t.easing),l=1-l;r.animate({opacity:l},f,t.easing),r.queue(function(){o&&r.hide(),n()}),h>1&&c.splice.apply(c,[1,0].concat(c.splice(h,a+1))),r.dequeue()}})(jQuery);(function(e,t){e.effects.effect.puff=function(t,n){var r=e(this),i=e.effects.setMode(r,t.mode||"hide"),s=i==="hide",o=parseInt(t.percent,10)||150,u=o/100,a={height:r.height(),width:r.width(),outerHeight:r.outerHeight(),outerWidth:r.outerWidth()};e.extend(t,{effect:"scale",queue:!1,fade:!0,mode:i,complete:n,percent:s?o:100,from:s?a:{height:a.height*u,width:a.width*u,outerHeight:a.outerHeight*u,outerWidth:a.outerWidth*u}}),r.effect(t)},e.effects.effect.scale=function(t,n){var r=e(this),i=e.extend(!0,{},t),s=e.effects.setMode(r,t.mode||"effect"),o=parseInt(t.percent,10)||(parseInt(t.percent,10)===0?0:s==="hide"?0:100),u=t.direction||"both",a=t.origin,f={height:r.height(),width:r.width(),outerHeight:r.outerHeight(),outerWidth:r.outerWidth()},l={y:u!=="horizontal"?o/100:1,x:u!=="vertical"?o/100:1};i.effect="size",i.queue=!1,i.complete=n,s!=="effect"&&(i.origin=a||["middle","center"],i.restore=!0),i.from=t.from||(s==="show"?{height:0,width:0,outerHeight:0,outerWidth:0}:f),i.to={height:f.height*l.y,width:f.width*l.x,outerHeight:f.outerHeight*l.y,outerWidth:f.outerWidth*l.x},i.fade&&(s==="show"&&(i.from.opacity=0,i.to.opacity=1),s==="hide"&&(i.from.opacity=1,i.to.opacity=0)),r.effect(i)},e.effects.effect.size=function(t,n){var r,i,s,o=e(this),u=["position","top","bottom","left","right","width","height","overflow","opacity"],a=["position","top","bottom","left","right","overflow","opacity"],f=["width","height","overflow"],l=["fontSize"],c=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],h=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],p=e.effects.setMode(o,t.mode||"effect"),d=t.restore||p!=="effect",v=t.scale||"both",m=t.origin||["middle","center"],g=o.css("position"),y=d?u:a,b={height:0,width:0,outerHeight:0,outerWidth:0};p==="show"&&o.show(),r={height:o.height(),width:o.width(),outerHeight:o.outerHeight(),outerWidth:o.outerWidth()},t.mode==="toggle"&&p==="show"?(o.from=t.to||b,o.to=t.from||r):(o.from=t.from||(p==="show"?b:r),o.to=t.to||(p==="hide"?b:r)),s={from:{y:o.from.height/r.height,x:o.from.width/r.width},to:{y:o.to.height/r.height,x:o.to.width/r.width}};if(v==="box"||v==="both")s.from.y!==s.to.y&&(y=y.concat(c),o.from=e.effects.setTransition(o,c,s.from.y,o.from),o.to=e.effects.setTransition(o,c,s.to.y,o.to)),s.from.x!==s.to.x&&(y=y.concat(h),o.from=e.effects.setTransition(o,h,s.from.x,o.from),o.to=e.effects.setTransition(o,h,s.to.x,o.to));(v==="content"||v==="both")&&s.from.y!==s.to.y&&(y=y.concat(l).concat(f),o.from=e.effects.setTransition(o,l,s.from.y,o.from),o.to=e.effects.setTransition(o,l,s.to.y,o.to)),e.effects.save(o,y),o.show(),e.effects.createWrapper(o),o.css("overflow","hidden").css(o.from),m&&(i=e.effects.getBaseline(m,r),o.from.top=(r.outerHeight-o.outerHeight())*i.y,o.from.left=(r.outerWidth-o.outerWidth())*i.x,o.to.top=(r.outerHeight-o.to.outerHeight)*i.y,o.to.left=(r.outerWidth-o.to.outerWidth)*i.x),o.css(o.from);if(v==="content"||v==="both")c=c.concat(["marginTop","marginBottom"]).concat(l),h=h.concat(["marginLeft","marginRight"]),f=u.concat(c).concat(h),o.find("*[width]").each(function(){var n=e(this),r={height:n.height(),width:n.width(),outerHeight:n.outerHeight(),outerWidth:n.outerWidth()};d&&e.effects.save(n,f),n.from={height:r.height*s.from.y,width:r.width*s.from.x,outerHeight:r.outerHeight*s.from.y,outerWidth:r.outerWidth*s.from.x},n.to={height:r.height*s.to.y,width:r.width*s.to.x,outerHeight:r.height*s.to.y,outerWidth:r.width*s.to.x},s.from.y!==s.to.y&&(n.from=e.effects.setTransition(n,c,s.from.y,n.from),n.to=e.effects.setTransition(n,c,s.to.y,n.to)),s.from.x!==s.to.x&&(n.from=e.effects.setTransition(n,h,s.from.x,n.from),n.to=e.effects.setTransition(n,h,s.to.x,n.to)),n.css(n.from),n.animate(n.to,t.duration,t.easing,function(){d&&e.effects.restore(n,f)})});o.animate(o.to,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){o.to.opacity===0&&o.css("opacity",o.from.opacity),p==="hide"&&o.hide(),e.effects.restore(o,y),d||(g==="static"?o.css({position:"relative",top:o.to.top,left:o.to.left}):e.each(["top","left"],function(e,t){o.css(t,function(t,n){var r=parseInt(n,10),i=e?o.to.left:o.to.top;return n==="auto"?i+"px":r+i+"px"})})),e.effects.removeWrapper(o),n()}})}})(jQuery);(function(e,t){e.effects.effect.shake=function(t,n){var r=e(this),i=["position","top","bottom","left","right","height","width"],s=e.effects.setMode(r,t.mode||"effect"),o=t.direction||"left",u=t.distance||20,a=t.times||3,f=a*2+1,l=Math.round(t.duration/f),c=o==="up"||o==="down"?"top":"left",h=o==="up"||o==="left",p={},d={},v={},m,g=r.queue(),y=g.length;e.effects.save(r,i),r.show(),e.effects.createWrapper(r),p[c]=(h?"-=":"+=")+u,d[c]=(h?"+=":"-=")+u*2,v[c]=(h?"-=":"+=")+u*2,r.animate(p,l,t.easing);for(m=1;m<a;m++)r.animate(d,l,t.easing).animate(v,l,t.easing);r.animate(d,l,t.easing).animate(p,l/2,t.easing).queue(function(){s==="hide"&&r.hide(),e.effects.restore(r,i),e.effects.removeWrapper(r),n()}),y>1&&g.splice.apply(g,[1,0].concat(g.splice(y,f+1))),r.dequeue()}})(jQuery);(function(e,t){e.effects.effect.slide=function(t,n){var r=e(this),i=["position","top","bottom","left","right","width","height"],s=e.effects.setMode(r,t.mode||"show"),o=s==="show",u=t.direction||"left",a=u==="up"||u==="down"?"top":"left",f=u==="up"||u==="left",l,c={};e.effects.save(r,i),r.show(),l=t.distance||r[a==="top"?"outerHeight":"outerWidth"](!0),e.effects.createWrapper(r).css({overflow:"hidden"}),o&&r.css(a,f?isNaN(l)?"-"+l:-l:l),c[a]=(o?f?"+=":"-=":f?"-=":"+=")+l,r.animate(c,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){s==="hide"&&r.hide(),e.effects.restore(r,i),e.effects.removeWrapper(r),n()}})}})(jQuery);(function(e,t){e.effects.effect.transfer=function(t,n){var r=e(this),i=e(t.to),s=i.css("position")==="fixed",o=e("body"),u=s?o.scrollTop():0,a=s?o.scrollLeft():0,f=i.offset(),l={top:f.top-u,left:f.left-a,height:i.innerHeight(),width:i.innerWidth()},c=r.offset(),h=e('<div class="ui-effects-transfer"></div>').appendTo(document.body).addClass(t.className).css({top:c.top-u,left:c.left-a,height:r.innerHeight(),width:r.innerWidth(),position:s?"fixed":"absolute"}).animate(l,t.duration,t.easing,function(){h.remove(),n()})}})(jQuery);(function(e,t){var n=!1;e.widget("ui.menu",{version:"1.9.2",defaultElement:"<ul>",delay:300,options:{icons:{submenu:"ui-icon-carat-1-e"},menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.element.uniqueId().addClass("ui-menu ui-widget ui-widget-content ui-corner-all").toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length).attr({role:this.options.role,tabIndex:0}).bind("click"+this.eventNamespace,e.proxy(function(e){this.options.disabled&&e.preventDefault()},this)),this.options.disabled&&this.element.addClass("ui-state-disabled").attr("aria-disabled","true"),this._on({"mousedown .ui-menu-item > a":function(e){e.preventDefault()},"click .ui-state-disabled > a":function(e){e.preventDefault()},"click .ui-menu-item:has(a)":function(t){var r=e(t.target).closest(".ui-menu-item");!n&&r.not(".ui-state-disabled").length&&(n=!0,this.select(t),r.has(".ui-menu").length?this.expand(t):this.element.is(":focus")||(this.element.trigger("focus",[!0]),this.active&&this.active.parents(".ui-menu").length===1&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(t){var n=e(t.currentTarget);n.siblings().children(".ui-state-active").removeClass("ui-state-active"),this.focus(t,n)},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(e,t){var n=this.active||this.element.children(".ui-menu-item").eq(0);t||this.focus(e,n)},blur:function(t){this._delay(function(){e.contains(this.element[0],this.document[0].activeElement)||this.collapseAll(t)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){e(t.target).closest(".ui-menu").length||this.collapseAll(t),n=!1}})},_destroy:function(){this.element.removeAttr("aria-activedescendant").find(".ui-menu").andSelf().removeClass("ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons").removeAttr("role").removeAttr("tabIndex").removeAttr("aria-labelledby").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-disabled").removeUniqueId().show(),this.element.find(".ui-menu-item").removeClass("ui-menu-item").removeAttr("role").removeAttr("aria-disabled").children("a").removeUniqueId().removeClass("ui-corner-all ui-state-hover").removeAttr("tabIndex").removeAttr("role").removeAttr("aria-haspopup").children().each(function(){var t=e(this);t.data("ui-menu-submenu-carat")&&t.remove()}),this.element.find(".ui-menu-divider").removeClass("ui-menu-divider ui-widget-content")},_keydown:function(t){function a(e){return e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")}var n,r,i,s,o,u=!0;switch(t.keyCode){case e.ui.keyCode.PAGE_UP:this.previousPage(t);break;case e.ui.keyCode.PAGE_DOWN:this.nextPage(t);break;case e.ui.keyCode.HOME:this._move("first","first",t);break;case e.ui.keyCode.END:this._move("last","last",t);break;case e.ui.keyCode.UP:this.previous(t);break;case e.ui.keyCode.DOWN:this.next(t);break;case e.ui.keyCode.LEFT:this.collapse(t);break;case e.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(t);break;case e.ui.keyCode.ENTER:case e.ui.keyCode.SPACE:this._activate(t);break;case e.ui.keyCode.ESCAPE:this.collapse(t);break;default:u=!1,r=this.previousFilter||"",i=String.fromCharCode(t.keyCode),s=!1,clearTimeout(this.filterTimer),i===r?s=!0:i=r+i,o=new RegExp("^"+a(i),"i"),n=this.activeMenu.children(".ui-menu-item").filter(function(){return o.test(e(this).children("a").text())}),n=s&&n.index(this.active.next())!==-1?this.active.nextAll(".ui-menu-item"):n,n.length||(i=String.fromCharCode(t.keyCode),o=new RegExp("^"+a(i),"i"),n=this.activeMenu.children(".ui-menu-item").filter(function(){return o.test(e(this).children("a").text())})),n.length?(this.focus(t,n),n.length>1?(this.previousFilter=i,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter):delete this.previousFilter}u&&t.preventDefault()},_activate:function(e){this.active.is(".ui-state-disabled")||(this.active.children("a[aria-haspopup='true']").length?this.expand(e):this.select(e))},refresh:function(){var t,n=this.options.icons.submenu,r=this.element.find(this.options.menus);r.filter(":not(.ui-menu)").addClass("ui-menu ui-widget ui-widget-content ui-corner-all").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var t=e(this),r=t.prev("a"),i=e("<span>").addClass("ui-menu-icon ui-icon "+n).data("ui-menu-submenu-carat",!0);r.attr("aria-haspopup","true").prepend(i),t.attr("aria-labelledby",r.attr("id"))}),t=r.add(this.element),t.children(":not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","presentation").children("a").uniqueId().addClass("ui-corner-all").attr({tabIndex:-1,role:this._itemRole()}),t.children(":not(.ui-menu-item)").each(function(){var t=e(this);/[^\-—–\s]/.test(t.text())||t.addClass("ui-widget-content ui-menu-divider")}),t.children(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!e.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},focus:function(e,t){var n,r;this.blur(e,e&&e.type==="focus"),this._scrollIntoView(t),this.active=t.first(),r=this.active.children("a").addClass("ui-state-focus"),this.options.role&&this.element.attr("aria-activedescendant",r.attr("id")),this.active.parent().closest(".ui-menu-item").children("a:first").addClass("ui-state-active"),e&&e.type==="keydown"?this._close():this.timer=this._delay(function(){this._close()},this.delay),n=t.children(".ui-menu"),n.length&&/^mouse/.test(e.type)&&this._startOpening(n),this.activeMenu=t.parent(),this._trigger("focus",e,{item:t})},_scrollIntoView:function(t){var n,r,i,s,o,u;this._hasScroll()&&(n=parseFloat(e.css(this.activeMenu[0],"borderTopWidth"))||0,r=parseFloat(e.css(this.activeMenu[0],"paddingTop"))||0,i=t.offset().top-this.activeMenu.offset().top-n-r,s=this.activeMenu.scrollTop(),o=this.activeMenu.height(),u=t.height(),i<0?this.activeMenu.scrollTop(s+i):i+u>o&&this.activeMenu.scrollTop(s+i-o+u))},blur:function(e,t){t||clearTimeout(this.timer);if(!this.active)return;this.active.children("a").removeClass("ui-state-focus"),this.active=null,this._trigger("blur",e,{item:this.active})},_startOpening:function(e){clearTimeout(this.timer);if(e.attr("aria-hidden")!=="true")return;this.timer=this._delay(function(){this._close(),this._open(e)},this.delay)},_open:function(t){var n=e.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(t.parents(".ui-menu")).hide().attr("aria-hidden","true"),t.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(n)},collapseAll:function(t,n){clearTimeout(this.timer),this.timer=this._delay(function(){var r=n?this.element:e(t&&t.target).closest(this.element.find(".ui-menu"));r.length||(r=this.element),this._close(r),this.blur(t),this.activeMenu=r},this.delay)},_close:function(e){e||(e=this.active?this.active.parent():this.element),e.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false").end().find("a.ui-state-active").removeClass("ui-state-active")},collapse:function(e){var t=this.active&&this.active.parent().closest(".ui-menu-item",this.element);t&&t.length&&(this._close(),this.focus(e,t))},expand:function(e){var t=this.active&&this.active.children(".ui-menu ").children(".ui-menu-item").first();t&&t.length&&(this._open(t.parent()),this._delay(function(){this.focus(e,t)}))},next:function(e){this._move("next","first",e)},previous:function(e){this._move("prev","last",e)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(e,t,n){var r;this.active&&(e==="first"||e==="last"?r=this.active[e==="first"?"prevAll":"nextAll"](".ui-menu-item").eq(-1):r=this.active[e+"All"](".ui-menu-item").eq(0));if(!r||!r.length||!this.active)r=this.activeMenu.children(".ui-menu-item")[t]();this.focus(n,r)},nextPage:function(t){var n,r,i;if(!this.active){this.next(t);return}if(this.isLastItem())return;this._hasScroll()?(r=this.active.offset().top,i=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return n=e(this),n.offset().top-r-i<0}),this.focus(t,n)):this.focus(t,this.activeMenu.children(".ui-menu-item")[this.active?"last":"first"]())},previousPage:function(t){var n,r,i;if(!this.active){this.next(t);return}if(this.isFirstItem())return;this._hasScroll()?(r=this.active.offset().top,i=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return n=e(this),n.offset().top-r+i>0}),this.focus(t,n)):this.focus(t,this.activeMenu.children(".ui-menu-item").first())},_hasScroll:function(){return this.element.outerHeight()<this.element.prop("scrollHeight")},select:function(t){this.active=this.active||e(t.target).closest(".ui-menu-item");var n={item:this.active};this.active.has(".ui-menu").length||this.collapseAll(t,!0),this._trigger("select",t,n)}})})(jQuery);(function(e,t){e.widget("ui.progressbar",{version:"1.9.2",options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()}),this.valueDiv=e("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element),this.oldValue=this._value(),this._refreshValue()},_destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.valueDiv.remove()},value:function(e){return e===t?this._value():(this._setOption("value",e),this)},_setOption:function(e,t){e==="value"&&(this.options.value=t,this._refreshValue(),this._value()===this.options.max&&this._trigger("complete")),this._super(e,t)},_value:function(){var e=this.options.value;return typeof e!="number"&&(e=0),Math.min(this.options.max,Math.max(this.min,e))},_percentage:function(){return 100*this._value()/this.options.max},_refreshValue:function(){var e=this.value(),t=this._percentage();this.oldValue!==e&&(this.oldValue=e,this._trigger("change")),this.valueDiv.toggle(e>this.min).toggleClass("ui-corner-right",e===this.options.max).width(t.toFixed(0)+"%"),this.element.attr("aria-valuenow",e)}})})(jQuery);(function(e,t){e.widget("ui.resizable",e.ui.mouse,{version:"1.9.2",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1e3},_create:function(){var t=this,n=this.options;this.element.addClass("ui-resizable"),e.extend(this,{_aspectRatio:!!n.aspectRatio,aspectRatio:n.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:n.helper||n.ghost||n.animate?n.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)&&(this.element.wrap(e('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("resizable",this.element.data("resizable")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize()),this.handles=n.handles||(e(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se");if(this.handles.constructor==String){this.handles=="all"&&(this.handles="n,e,s,w,se,sw,ne,nw");var r=this.handles.split(",");this.handles={};for(var i=0;i<r.length;i++){var s=e.trim(r[i]),o="ui-resizable-"+s,u=e('<div class="ui-resizable-handle '+o+'"></div>');u.css({zIndex:n.zIndex}),"se"==s&&u.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[s]=".ui-resizable-"+s,this.element.append(u)}}this._renderAxis=function(t){t=t||this.element;for(var n in this.handles){this.handles[n].constructor==String&&(this.handles[n]=e(this.handles[n],this.element).show());if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var r=e(this.handles[n],this.element),i=0;i=/sw|ne|nw|se|n|s/.test(n)?r.outerHeight():r.outerWidth();var s=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join("");t.css(s,i),this._proportionallyResize()}if(!e(this.handles[n]).length)continue}},this._renderAxis(this.element),this._handles=e(".ui-resizable-handle",this.element).disableSelection(),this._handles.mouseover(function(){if(!t.resizing){if(this.className)var e=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);t.axis=e&&e[1]?e[1]:"se"}}),n.autoHide&&(this._handles.hide(),e(this.element).addClass("ui-resizable-autohide").mouseenter(function(){if(n.disabled)return;e(this).removeClass("ui-resizable-autohide"),t._handles.show()}).mouseleave(function(){if(n.disabled)return;t.resizing||(e(this).addClass("ui-resizable-autohide"),t._handles.hide())})),this._mouseInit()},_destroy:function(){this._mouseDestroy();var t=function(t){e(t).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){t(this.element);var n=this.element;this.originalElement.css({position:n.css("position"),width:n.outerWidth(),height:n.outerHeight(),top:n.css("top"),left:n.css("left")}).insertAfter(n),n.remove()}return this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_mouseCapture:function(t){var n=!1;for(var r in this.handles)e(this.handles[r])[0]==t.target&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(t){var r=this.options,i=this.element.position(),s=this.element;this.resizing=!0,this.documentScroll={top:e(document).scrollTop(),left:e(document).scrollLeft()},(s.is(".ui-draggable")||/absolute/.test(s.css("position")))&&s.css({position:"absolute",top:i.top,left:i.left}),this._renderProxy();var o=n(this.helper.css("left")),u=n(this.helper.css("top"));r.containment&&(o+=e(r.containment).scrollLeft()||0,u+=e(r.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:o,top:u},this.size=this._helper?{width:s.outerWidth(),height:s.outerHeight()}:{width:s.width(),height:s.height()},this.originalSize=this._helper?{width:s.outerWidth(),height:s.outerHeight()}:{width:s.width(),height:s.height()},this.originalPosition={left:o,top:u},this.sizeDiff={width:s.outerWidth()-s.width(),height:s.outerHeight()-s.height()},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio=typeof r.aspectRatio=="number"?r.aspectRatio:this.originalSize.width/this.originalSize.height||1;var a=e(".ui-resizable-"+this.axis).css("cursor");return e("body").css("cursor",a=="auto"?this.axis+"-resize":a),s.addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(e){var t=this.helper,n=this.options,r={},i=this,s=this.originalMousePosition,o=this.axis,u=e.pageX-s.left||0,a=e.pageY-s.top||0,f=this._change[o];if(!f)return!1;var l=f.apply(this,[e,u,a]);this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey)l=this._updateRatio(l,e);return l=this._respectSize(l,e),this._propagate("resize",e),t.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"}),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),this._updateCache(l),this._trigger("resize",e,this.ui()),!1},_mouseStop:function(t){this.resizing=!1;var n=this.options,r=this;if(this._helper){var i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),o=s&&e.ui.hasScroll(i[0],"left")?0:r.sizeDiff.height,u=s?0:r.sizeDiff.width,a={width:r.helper.width()-u,height:r.helper.height()-o},f=parseInt(r.element.css("left"),10)+(r.position.left-r.originalPosition.left)||null,l=parseInt(r.element.css("top"),10)+(r.position.top-r.originalPosition.top)||null;n.animate||this.element.css(e.extend(a,{top:l,left:f})),r.helper.height(r.size.height),r.helper.width(r.size.width),this._helper&&!n.animate&&this._proportionallyResize()}return e("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updateVirtualBoundaries:function(e){var t=this.options,n,i,s,o,u;u={minWidth:r(t.minWidth)?t.minWidth:0,maxWidth:r(t.maxWidth)?t.maxWidth:Infinity,minHeight:r(t.minHeight)?t.minHeight:0,maxHeight:r(t.maxHeight)?t.maxHeight:Infinity};if(this._aspectRatio||e)n=u.minHeight*this.aspectRatio,s=u.minWidth/this.aspectRatio,i=u.maxHeight*this.aspectRatio,o=u.maxWidth/this.aspectRatio,n>u.minWidth&&(u.minWidth=n),s>u.minHeight&&(u.minHeight=s),i<u.maxWidth&&(u.maxWidth=i),o<u.maxHeight&&(u.maxHeight=o);this._vBoundaries=u},_updateCache:function(e){var t=this.options;this.offset=this.helper.offset(),r(e.left)&&(this.position.left=e.left),r(e.top)&&(this.position.top=e.top),r(e.height)&&(this.size.height=e.height),r(e.width)&&(this.size.width=e.width)},_updateRatio:function(e,t){var n=this.options,i=this.position,s=this.size,o=this.axis;return r(e.height)?e.width=e.height*this.aspectRatio:r(e.width)&&(e.height=e.width/this.aspectRatio),o=="sw"&&(e.left=i.left+(s.width-e.width),e.top=null),o=="nw"&&(e.top=i.top+(s.height-e.height),e.left=i.left+(s.width-e.width)),e},_respectSize:function(e,t){var n=this.helper,i=this._vBoundaries,s=this._aspectRatio||t.shiftKey,o=this.axis,u=r(e.width)&&i.maxWidth&&i.maxWidth<e.width,a=r(e.height)&&i.maxHeight&&i.maxHeight<e.height,f=r(e.width)&&i.minWidth&&i.minWidth>e.width,l=r(e.height)&&i.minHeight&&i.minHeight>e.height;f&&(e.width=i.minWidth),l&&(e.height=i.minHeight),u&&(e.width=i.maxWidth),a&&(e.height=i.maxHeight);var c=this.originalPosition.left+this.originalSize.width,h=this.position.top+this.size.height,p=/sw|nw|w/.test(o),d=/nw|ne|n/.test(o);f&&p&&(e.left=c-i.minWidth),u&&p&&(e.left=c-i.maxWidth),l&&d&&(e.top=h-i.minHeight),a&&d&&(e.top=h-i.maxHeight);var v=!e.width&&!e.height;return v&&!e.left&&e.top?e.top=null:v&&!e.top&&e.left&&(e.left=null),e},_proportionallyResize:function(){var t=this.options;if(!this._proportionallyResizeElements.length)return;var n=this.helper||this.element;for(var r=0;r<this._proportionallyResizeElements.length;r++){var i=this._proportionallyResizeElements[r];if(!this.borderDif){var s=[i.css("borderTopWidth"),i.css("borderRightWidth"),i.css("borderBottomWidth"),i.css("borderLeftWidth")],o=[i.css("paddingTop"),i.css("paddingRight"),i.css("paddingBottom"),i.css("paddingLeft")];this.borderDif=e.map(s,function(e,t){var n=parseInt(e,10)||0,r=parseInt(o[t],10)||0;return n+r})}i.css({height:n.height()-this.borderDif[0]-this.borderDif[2]||0,width:n.width()-this.borderDif[1]-this.borderDif[3]||0})}},_renderProxy:function(){var t=this.element,n=this.options;this.elementOffset=t.offset();if(this._helper){this.helper=this.helper||e('<div style="overflow:hidden;"></div>');var r=e.ui.ie6?1:0,i=e.ui.ie6?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+i,height:this.element.outerHeight()+i,position:"absolute",left:this.elementOffset.left-r+"px",top:this.elementOffset.top-r+"px",zIndex:++n.zIndex}),this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(e,t,n){return{width:this.originalSize.width+t}},w:function(e,t,n){var r=this.options,i=this.originalSize,s=this.originalPosition;return{left:s.left+t,width:i.width-t}},n:function(e,t,n){var r=this.options,i=this.originalSize,s=this.originalPosition;return{top:s.top+n,height:i.height-n}},s:function(e,t,n){return{height:this.originalSize.height+n}},se:function(t,n,r){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,n,r]))},sw:function(t,n,r){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,n,r]))},ne:function(t,n,r){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,n,r]))},nw:function(t,n,r){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,n,r]))}},_propagate:function(t,n){e.ui.plugin.call(this,t,[n,this.ui()]),t!="resize"&&this._trigger(t,n,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),e.ui.plugin.add("resizable","alsoResize",{start:function(t,n){var r=e(this).data("resizable"),i=r.options,s=function(t){e(t).each(function(){var t=e(this);t.data("resizable-alsoresize",{width:parseInt(t.width(),10),height:parseInt(t.height(),10),left:parseInt(t.css("left"),10),top:parseInt(t.css("top"),10)})})};typeof i.alsoResize=="object"&&!i.alsoResize.parentNode?i.alsoResize.length?(i.alsoResize=i.alsoResize[0],s(i.alsoResize)):e.each(i.alsoResize,function(e){s(e)}):s(i.alsoResize)},resize:function(t,n){var r=e(this).data("resizable"),i=r.options,s=r.originalSize,o=r.originalPosition,u={height:r.size.height-s.height||0,width:r.size.width-s.width||0,top:r.position.top-o.top||0,left:r.position.left-o.left||0},a=function(t,r){e(t).each(function(){var t=e(this),i=e(this).data("resizable-alsoresize"),s={},o=r&&r.length?r:t.parents(n.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(o,function(e,t){var n=(i[t]||0)+(u[t]||0);n&&n>=0&&(s[t]=n||null)}),t.css(s)})};typeof i.alsoResize=="object"&&!i.alsoResize.nodeType?e.each(i.alsoResize,function(e,t){a(e,t)}):a(i.alsoResize)},stop:function(t,n){e(this).removeData("resizable-alsoresize")}}),e.ui.plugin.add("resizable","animate",{stop:function(t,n){var r=e(this).data("resizable"),i=r.options,s=r._proportionallyResizeElements,o=s.length&&/textarea/i.test(s[0].nodeName),u=o&&e.ui.hasScroll(s[0],"left")?0:r.sizeDiff.height,a=o?0:r.sizeDiff.width,f={width:r.size.width-a,height:r.size.height-u},l=parseInt(r.element.css("left"),10)+(r.position.left-r.originalPosition.left)||null,c=parseInt(r.element.css("top"),10)+(r.position.top-r.originalPosition.top)||null;r.element.animate(e.extend(f,c&&l?{top:c,left:l}:{}),{duration:i.animateDuration,easing:i.animateEasing,step:function(){var n={width:parseInt(r.element.css("width"),10),height:parseInt(r.element.css("height"),10),top:parseInt(r.element.css("top"),10),left:parseInt(r.element.css("left"),10)};s&&s.length&&e(s[0]).css({width:n.width,height:n.height}),r._updateCache(n),r._propagate("resize",t)}})}}),e.ui.plugin.add("resizable","containment",{start:function(t,r){var i=e(this).data("resizable"),s=i.options,o=i.element,u=s.containment,a=u instanceof e?u.get(0):/parent/.test(u)?o.parent().get(0):u;if(!a)return;i.containerElement=e(a);if(/document/.test(u)||u==document)i.containerOffset={left:0,top:0},i.containerPosition={left:0,top:0},i.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight};else{var f=e(a),l=[];e(["Top","Right","Left","Bottom"]).each(function(e,t){l[e]=n(f.css("padding"+t))}),i.containerOffset=f.offset(),i.containerPosition=f.position(),i.containerSize={height:f.innerHeight()-l[3],width:f.innerWidth()-l[1]};var c=i.containerOffset,h=i.containerSize.height,p=i.containerSize.width,d=e.ui.hasScroll(a,"left")?a.scrollWidth:p,v=e.ui.hasScroll(a)?a.scrollHeight:h;i.parentData={element:a,left:c.left,top:c.top,width:d,height:v}}},resize:function(t,n){var r=e(this).data("resizable"),i=r.options,s=r.containerSize,o=r.containerOffset,u=r.size,a=r.position,f=r._aspectRatio||t.shiftKey,l={top:0,left:0},c=r.containerElement;c[0]!=document&&/static/.test(c.css("position"))&&(l=o),a.left<(r._helper?o.left:0)&&(r.size.width=r.size.width+(r._helper?r.position.left-o.left:r.position.left-l.left),f&&(r.size.height=r.size.width/r.aspectRatio),r.position.left=i.helper?o.left:0),a.top<(r._helper?o.top:0)&&(r.size.height=r.size.height+(r._helper?r.position.top-o.top:r.position.top),f&&(r.size.width=r.size.height*r.aspectRatio),r.position.top=r._helper?o.top:0),r.offset.left=r.parentData.left+r.position.left,r.offset.top=r.parentData.top+r.position.top;var h=Math.abs((r._helper?r.offset.left-l.left:r.offset.left-l.left)+r.sizeDiff.width),p=Math.abs((r._helper?r.offset.top-l.top:r.offset.top-o.top)+r.sizeDiff.height),d=r.containerElement.get(0)==r.element.parent().get(0),v=/relative|absolute/.test(r.containerElement.css("position"));d&&v&&(h-=r.parentData.left),h+r.size.width>=r.parentData.width&&(r.size.width=r.parentData.width-h,f&&(r.size.height=r.size.width/r.aspectRatio)),p+r.size.height>=r.parentData.height&&(r.size.height=r.parentData.height-p,f&&(r.size.width=r.size.height*r.aspectRatio))},stop:function(t,n){var r=e(this).data("resizable"),i=r.options,s=r.position,o=r.containerOffset,u=r.containerPosition,a=r.containerElement,f=e(r.helper),l=f.offset(),c=f.outerWidth()-r.sizeDiff.width,h=f.outerHeight()-r.sizeDiff.height;r._helper&&!i.animate&&/relative/.test(a.css("position"))&&e(this).css({left:l.left-u.left-o.left,width:c,height:h}),r._helper&&!i.animate&&/static/.test(a.css("position"))&&e(this).css({left:l.left-u.left-o.left,width:c,height:h})}}),e.ui.plugin.add("resizable","ghost",{start:function(t,n){var r=e(this).data("resizable"),i=r.options,s=r.size;r.ghost=r.originalElement.clone(),r.ghost.css({opacity:.25,display:"block",position:"relative",height:s.height,width:s.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof i.ghost=="string"?i.ghost:""),r.ghost.appendTo(r.helper)},resize:function(t,n){var r=e(this).data("resizable"),i=r.options;r.ghost&&r.ghost.css({position:"relative",height:r.size.height,width:r.size.width})},stop:function(t,n){var r=e(this).data("resizable"),i=r.options;r.ghost&&r.helper&&r.helper.get(0).removeChild(r.ghost.get(0))}}),e.ui.plugin.add("resizable","grid",{resize:function(t,n){var r=e(this).data("resizable"),i=r.options,s=r.size,o=r.originalSize,u=r.originalPosition,a=r.axis,f=i._aspectRatio||t.shiftKey;i.grid=typeof i.grid=="number"?[i.grid,i.grid]:i.grid;var l=Math.round((s.width-o.width)/(i.grid[0]||1))*(i.grid[0]||1),c=Math.round((s.height-o.height)/(i.grid[1]||1))*(i.grid[1]||1);/^(se|s|e)$/.test(a)?(r.size.width=o.width+l,r.size.height=o.height+c):/^(ne)$/.test(a)?(r.size.width=o.width+l,r.size.height=o.height+c,r.position.top=u.top-c):/^(sw)$/.test(a)?(r.size.width=o.width+l,r.size.height=o.height+c,r.position.left=u.left-l):(r.size.width=o.width+l,r.size.height=o.height+c,r.position.top=u.top-c,r.position.left=u.left-l)}});var n=function(e){return parseInt(e,10)||0},r=function(e){return!isNaN(parseInt(e,10))}})(jQuery);(function(e,t){e.widget("ui.selectable",e.ui.mouse,{version:"1.9.2",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch"},_create:function(){var t=this;this.element.addClass("ui-selectable"),this.dragged=!1;var n;this.refresh=function(){n=e(t.options.filter,t.element[0]),n.addClass("ui-selectee"),n.each(function(){var t=e(this),n=t.offset();e.data(this,"selectable-item",{element:this,$element:t,left:n.left,top:n.top,right:n.left+t.outerWidth(),bottom:n.top+t.outerHeight(),startselected:!1,selected:t.hasClass("ui-selected"),selecting:t.hasClass("ui-selecting"),unselecting:t.hasClass("ui-unselecting")})})},this.refresh(),this.selectees=n.addClass("ui-selectee"),this._mouseInit(),this.helper=e("<div class='ui-selectable-helper'></div>")},_destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item"),this.element.removeClass("ui-selectable ui-selectable-disabled"),this._mouseDestroy()},_mouseStart:function(t){var n=this;this.opos=[t.pageX,t.pageY];if(this.options.disabled)return;var r=this.options;this.selectees=e(r.filter,this.element[0]),this._trigger("start",t),e(r.appendTo).append(this.helper),this.helper.css({left:t.clientX,top:t.clientY,width:0,height:0}),r.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var r=e.data(this,"selectable-item");r.startselected=!0,!t.metaKey&&!t.ctrlKey&&(r.$element.removeClass("ui-selected"),r.selected=!1,r.$element.addClass("ui-unselecting"),r.unselecting=!0,n._trigger("unselecting",t,{unselecting:r.element}))}),e(t.target).parents().andSelf().each(function(){var r=e.data(this,"selectable-item");if(r){var i=!t.metaKey&&!t.ctrlKey||!r.$element.hasClass("ui-selected");return r.$element.removeClass(i?"ui-unselecting":"ui-selected").addClass(i?"ui-selecting":"ui-unselecting"),r.unselecting=!i,r.selecting=i,r.selected=i,i?n._trigger("selecting",t,{selecting:r.element}):n._trigger("unselecting",t,{unselecting:r.element}),!1}})},_mouseDrag:function(t){var n=this;this.dragged=!0;if(this.options.disabled)return;var r=this.options,i=this.opos[0],s=this.opos[1],o=t.pageX,u=t.pageY;if(i>o){var a=o;o=i,i=a}if(s>u){var a=u;u=s,s=a}return this.helper.css({left:i,top:s,width:o-i,height:u-s}),this.selectees.each(function(){var a=e.data(this,"selectable-item");if(!a||a.element==n.element[0])return;var f=!1;r.tolerance=="touch"?f=!(a.left>o||a.right<i||a.top>u||a.bottom<s):r.tolerance=="fit"&&(f=a.left>i&&a.right<o&&a.top>s&&a.bottom<u),f?(a.selected&&(a.$element.removeClass("ui-selected"),a.selected=!1),a.unselecting&&(a.$element.removeClass("ui-unselecting"),a.unselecting=!1),a.selecting||(a.$element.addClass("ui-selecting"),a.selecting=!0,n._trigger("selecting",t,{selecting:a.element}))):(a.selecting&&((t.metaKey||t.ctrlKey)&&a.startselected?(a.$element.removeClass("ui-selecting"),a.selecting=!1,a.$element.addClass("ui-selected"),a.selected=!0):(a.$element.removeClass("ui-selecting"),a.selecting=!1,a.startselected&&(a.$element.addClass("ui-unselecting"),a.unselecting=!0),n._trigger("unselecting",t,{unselecting:a.element}))),a.selected&&!t.metaKey&&!t.ctrlKey&&!a.startselected&&(a.$element.removeClass("ui-selected"),a.selected=!1,a.$element.addClass("ui-unselecting"),a.unselecting=!0,n._trigger("unselecting",t,{unselecting:a.element})))}),!1},_mouseStop:function(t){var n=this;this.dragged=!1;var r=this.options;return e(".ui-unselecting",this.element[0]).each(function(){var r=e.data(this,"selectable-item");r.$element.removeClass("ui-unselecting"),r.unselecting=!1,r.startselected=!1,n._trigger("unselected",t,{unselected:r.element})}),e(".ui-selecting",this.element[0]).each(function(){var r=e.data(this,"selectable-item");r.$element.removeClass("ui-selecting").addClass("ui-selected"),r.selecting=!1,r.selected=!0,r.startselected=!0,n._trigger("selected",t,{selected:r.element})}),this._trigger("stop",t),this.helper.remove(),!1}})})(jQuery);(function(e,t){var n=5;e.widget("ui.slider",e.ui.mouse,{version:"1.9.2",widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null},_create:function(){var t,r,i=this.options,s=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),o="<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",u=[];this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget"+" ui-widget-content"+" ui-corner-all"+(i.disabled?" ui-slider-disabled ui-disabled":"")),this.range=e([]),i.range&&(i.range===!0&&(i.values||(i.values=[this._valueMin(),this._valueMin()]),i.values.length&&i.values.length!==2&&(i.values=[i.values[0],i.values[0]])),this.range=e("<div></div>").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(i.range==="min"||i.range==="max"?" ui-slider-range-"+i.range:""))),r=i.values&&i.values.length||1;for(t=s.length;t<r;t++)u.push(o);this.handles=s.add(e(u.join("")).appendTo(this.element)),this.handle=this.handles.eq(0),this.handles.add(this.range).filter("a").click(function(e){e.preventDefault()}).mouseenter(function(){i.disabled||e(this).addClass("ui-state-hover")}).mouseleave(function(){e(this).removeClass("ui-state-hover")}).focus(function(){i.disabled?e(this).blur():(e(".ui-slider .ui-state-focus").removeClass("ui-state-focus"),e(this).addClass("ui-state-focus"))}).blur(function(){e(this).removeClass("ui-state-focus")}),this.handles.each(function(t){e(this).data("ui-slider-handle-index",t)}),this._on(this.handles,{keydown:function(t){var r,i,s,o,u=e(t.target).data("ui-slider-handle-index");switch(t.keyCode){case e.ui.keyCode.HOME:case e.ui.keyCode.END:case e.ui.keyCode.PAGE_UP:case e.ui.keyCode.PAGE_DOWN:case e.ui.keyCode.UP:case e.ui.keyCode.RIGHT:case e.ui.keyCode.DOWN:case e.ui.keyCode.LEFT:t.preventDefault();if(!this._keySliding){this._keySliding=!0,e(t.target).addClass("ui-state-active"),r=this._start(t,u);if(r===!1)return}}o=this.options.step,this.options.values&&this.options.values.length?i=s=this.values(u):i=s=this.value();switch(t.keyCode){case e.ui.keyCode.HOME:s=this._valueMin();break;case e.ui.keyCode.END:s=this._valueMax();break;case e.ui.keyCode.PAGE_UP:s=this._trimAlignValue(i+(this._valueMax()-this._valueMin())/n);break;case e.ui.keyCode.PAGE_DOWN:s=this._trimAlignValue(i-(this._valueMax()-this._valueMin())/n);break;case e.ui.keyCode.UP:case e.ui.keyCode.RIGHT:if(i===this._valueMax())return;s=this._trimAlignValue(i+o);break;case e.ui.keyCode.DOWN:case e.ui.keyCode.LEFT:if(i===this._valueMin())return;s=this._trimAlignValue(i-o)}this._slide(t,u,s)},keyup:function(t){var n=e(t.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(t,n),this._change(t,n),e(t.target).removeClass("ui-state-active"))}}),this._refreshValue(),this._animateOff=!1},_destroy:function(){this.handles.remove(),this.range.remove(),this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all"),this._mouseDestroy()},_mouseCapture:function(t){var n,r,i,s,o,u,a,f,l=this,c=this.options;return c.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),n={x:t.pageX,y:t.pageY},r=this._normValueFromMouse(n),i=this._valueMax()-this._valueMin()+1,this.handles.each(function(t){var n=Math.abs(r-l.values(t));i>n&&(i=n,s=e(this),o=t)}),c.range===!0&&this.values(1)===c.min&&(o+=1,s=e(this.handles[o])),u=this._start(t,o),u===!1?!1:(this._mouseSliding=!0,this._handleIndex=o,s.addClass("ui-state-active").focus(),a=s.offset(),f=!e(t.target).parents().andSelf().is(".ui-slider-handle"),this._clickOffset=f?{left:0,top:0}:{left:t.pageX-a.left-s.width()/2,top:t.pageY-a.top-s.height()/2-(parseInt(s.css("borderTopWidth"),10)||0)-(parseInt(s.css("borderBottomWidth"),10)||0)+(parseInt(s.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(t,o,r),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(e){var t={x:e.pageX,y:e.pageY},n=this._normValueFromMouse(t);return this._slide(e,this._handleIndex,n),!1},_mouseStop:function(e){return this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(e,this._handleIndex),this._change(e,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(e){var t,n,r,i,s;return this.orientation==="horizontal"?(t=this.elementSize.width,n=e.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(t=this.elementSize.height,n=e.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),r=n/t,r>1&&(r=1),r<0&&(r=0),this.orientation==="vertical"&&(r=1-r),i=this._valueMax()-this._valueMin(),s=this._valueMin()+r*i,this._trimAlignValue(s)},_start:function(e,t){var n={handle:this.handles[t],value:this.value()};return this.options.values&&this.options.values.length&&(n.value=this.values(t),n.values=this.values()),this._trigger("start",e,n)},_slide:function(e,t,n){var r,i,s;this.options.values&&this.options.values.length?(r=this.values(t?0:1),this.options.values.length===2&&this.options.range===!0&&(t===0&&n>r||t===1&&n<r)&&(n=r),n!==this.values(t)&&(i=this.values(),i[t]=n,s=this._trigger("slide",e,{handle:this.handles[t],value:n,values:i}),r=this.values(t?0:1),s!==!1&&this.values(t,n,!0))):n!==this.value()&&(s=this._trigger("slide",e,{handle:this.handles[t],value:n}),s!==!1&&this.value(n))},_stop:function(e,t){var n={handle:this.handles[t],value:this.value()};this.options.values&&this.options.values.length&&(n.value=this.values(t),n.values=this.values()),this._trigger("stop",e,n)},_change:function(e,t){if(!this._keySliding&&!this._mouseSliding){var n={handle:this.handles[t],value:this.value()};this.options.values&&this.options.values.length&&(n.value=this.values(t),n.values=this.values()),this._trigger("change",e,n)}},value:function(e){if(arguments.length){this.options.value=this._trimAlignValue(e),this._refreshValue(),this._change(null,0);return}return this._value()},values:function(t,n){var r,i,s;if(arguments.length>1){this.options.values[t]=this._trimAlignValue(n),this._refreshValue(),this._change(null,t);return}if(!arguments.length)return this._values();if(!e.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(t):this.value();r=this.options.values,i=arguments[0];for(s=0;s<r.length;s+=1)r[s]=this._trimAlignValue(i[s]),this._change(null,s);this._refreshValue()},_setOption:function(t,n){var r,i=0;e.isArray(this.options.values)&&(i=this.options.values.length),e.Widget.prototype._setOption.apply(this,arguments);switch(t){case"disabled":n?(this.handles.filter(".ui-state-focus").blur(),this.handles.removeClass("ui-state-hover"),this.handles.prop("disabled",!0),this.element.addClass("ui-disabled")):(this.handles.prop("disabled",!1),this.element.removeClass("ui-disabled"));break;case"orientation":this._detectOrientation(),this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation),this._refreshValue();break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":this._animateOff=!0,this._refreshValue();for(r=0;r<i;r+=1)this._change(null,r);this._animateOff=!1;break;case"min":case"max":this._animateOff=!0,this._refreshValue(),this._animateOff=!1}},_value:function(){var e=this.options.value;return e=this._trimAlignValue(e),e},_values:function(e){var t,n,r;if(arguments.length)return t=this.options.values[e],t=this._trimAlignValue(t),t;n=this.options.values.slice();for(r=0;r<n.length;r+=1)n[r]=this._trimAlignValue(n[r]);return n},_trimAlignValue:function(e){if(e<=this._valueMin())return this._valueMin();if(e>=this._valueMax())return this._valueMax();var t=this.options.step>0?this.options.step:1,n=(e-this._valueMin())%t,r=e-n;return Math.abs(n)*2>=t&&(r+=n>0?t:-t),parseFloat(r.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var t,n,r,i,s,o=this.options.range,u=this.options,a=this,f=this._animateOff?!1:u.animate,l={};this.options.values&&this.options.values.length?this.handles.each(function(r){n=(a.values(r)-a._valueMin())/(a._valueMax()-a._valueMin())*100,l[a.orientation==="horizontal"?"left":"bottom"]=n+"%",e(this).stop(1,1)[f?"animate":"css"](l,u.animate),a.options.range===!0&&(a.orientation==="horizontal"?(r===0&&a.range.stop(1,1)[f?"animate":"css"]({left:n+"%"},u.animate),r===1&&a.range[f?"animate":"css"]({width:n-t+"%"},{queue:!1,duration:u.animate})):(r===0&&a.range.stop(1,1)[f?"animate":"css"]({bottom:n+"%"},u.animate),r===1&&a.range[f?"animate":"css"]({height:n-t+"%"},{queue:!1,duration:u.animate}))),t=n}):(r=this.value(),i=this._valueMin(),s=this._valueMax(),n=s!==i?(r-i)/(s-i)*100:0,l[this.orientation==="horizontal"?"left":"bottom"]=n+"%",this.handle.stop(1,1)[f?"animate":"css"](l,u.animate),o==="min"&&this.orientation==="horizontal"&&this.range.stop(1,1)[f?"animate":"css"]({width:n+"%"},u.animate),o==="max"&&this.orientation==="horizontal"&&this.range[f?"animate":"css"]({width:100-n+"%"},{queue:!1,duration:u.animate}),o==="min"&&this.orientation==="vertical"&&this.range.stop(1,1)[f?"animate":"css"]({height:n+"%"},u.animate),o==="max"&&this.orientation==="vertical"&&this.range[f?"animate":"css"]({height:100-n+"%"},{queue:!1,duration:u.animate}))}})})(jQuery);(function(e,t){e.widget("ui.sortable",e.ui.mouse,{version:"1.9.2",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3},_create:function(){var e=this.options;this.containerCache={},this.element.addClass("ui-sortable"),this.refresh(),this.floating=this.items.length?e.axis==="x"||/left|right/.test(this.items[0].item.css("float"))||/inline|table-cell/.test(this.items[0].item.css("display")):!1,this.offset=this.element.offset(),this._mouseInit(),this.ready=!0},_destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled"),this._mouseDestroy();for(var e=this.items.length-1;e>=0;e--)this.items[e].item.removeData(this.widgetName+"-item");return this},_setOption:function(t,n){t==="disabled"?(this.options[t]=n,this.widget().toggleClass("ui-sortable-disabled",!!n)):e.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(t,n){var r=this;if(this.reverting)return!1;if(this.options.disabled||this.options.type=="static")return!1;this._refreshItems(t);var i=null,s=e(t.target).parents().each(function(){if(e.data(this,r.widgetName+"-item")==r)return i=e(this),!1});e.data(t.target,r.widgetName+"-item")==r&&(i=e(t.target));if(!i)return!1;if(this.options.handle&&!n){var o=!1;e(this.options.handle,i).find("*").andSelf().each(function(){this==t.target&&(o=!0)});if(!o)return!1}return this.currentItem=i,this._removeCurrentsFromItems(),!0},_mouseStart:function(t,n,r){var i=this.options;this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(t),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},e.extend(this.offset,{click:{left:t.pageX-this.offset.left,top:t.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(t),this.originalPageX=t.pageX,this.originalPageY=t.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!=this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),i.containment&&this._setContainment(),i.cursor&&(e("body").css("cursor")&&(this._storedCursor=e("body").css("cursor")),e("body").css("cursor",i.cursor)),i.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",i.opacity)),i.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",i.zIndex)),this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",t,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions();if(!r)for(var s=this.containers.length-1;s>=0;s--)this.containers[s]._trigger("activate",t,this._uiHash(this));return e.ui.ddmanager&&(e.ui.ddmanager.current=this),e.ui.ddmanager&&!i.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this.dragging=!0,this.helper.addClass("ui-sortable-helper"),this._mouseDrag(t),!0},_mouseDrag:function(t){this.position=this._generatePosition(t),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs);if(this.options.scroll){var n=this.options,r=!1;this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-t.pageY<n.scrollSensitivity?this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop+n.scrollSpeed:t.pageY-this.overflowOffset.top<n.scrollSensitivity&&(this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop-n.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-t.pageX<n.scrollSensitivity?this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft+n.scrollSpeed:t.pageX-this.overflowOffset.left<n.scrollSensitivity&&(this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft-n.scrollSpeed)):(t.pageY-e(document).scrollTop()<n.scrollSensitivity?r=e(document).scrollTop(e(document).scrollTop()-n.scrollSpeed):e(window).height()-(t.pageY-e(document).scrollTop())<n.scrollSensitivity&&(r=e(document).scrollTop(e(document).scrollTop()+n.scrollSpeed)),t.pageX-e(document).scrollLeft()<n.scrollSensitivity?r=e(document).scrollLeft(e(document).scrollLeft()-n.scrollSpeed):e(window).width()-(t.pageX-e(document).scrollLeft())<n.scrollSensitivity&&(r=e(document).scrollLeft(e(document).scrollLeft()+n.scrollSpeed))),r!==!1&&e.ui.ddmanager&&!n.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t)}this.positionAbs=this._convertPositionTo("absolute");if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";for(var i=this.items.length-1;i>=0;i--){var s=this.items[i],o=s.item[0],u=this._intersectsWithPointer(s);if(!u)continue;if(s.instance!==this.currentContainer)continue;if(o!=this.currentItem[0]&&this.placeholder[u==1?"next":"prev"]()[0]!=o&&!e.contains(this.placeholder[0],o)&&(this.options.type=="semi-dynamic"?!e.contains(this.element[0],o):!0)){this.direction=u==1?"down":"up";if(this.options.tolerance!="pointer"&&!this._intersectsWithSides(s))break;this._rearrange(t,s),this._trigger("change",t,this._uiHash());break}}return this._contactContainers(t),e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),this._trigger("sort",t,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(t,n){if(!t)return;e.ui.ddmanager&&!this.options.dropBehaviour&&e.ui.ddmanager.drop(this,t);if(this.options.revert){var r=this,i=this.placeholder.offset();this.reverting=!0,e(this.helper).animate({left:i.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:i.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){r._clear(t)})}else this._clear(t,n);return!1},cancel:function(){if(this.dragging){this._mouseUp({target:null}),this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var t=this.containers.length-1;t>=0;t--)this.containers[t]._trigger("deactivate",null,this._uiHash(this)),this.containers[t].containerCache.over&&(this.containers[t]._trigger("out",null,this._uiHash(this)),this.containers[t].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),e.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?e(this.domPosition.prev).after(this.currentItem):e(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(t){var n=this._getItemsAsjQuery(t&&t.connected),r=[];return t=t||{},e(n).each(function(){var n=(e(t.item||this).attr(t.attribute||"id")||"").match(t.expression||/(.+)[-=_](.+)/);n&&r.push((t.key||n[1]+"[]")+"="+(t.key&&t.expression?n[1]:n[2]))}),!r.length&&t.key&&r.push(t.key+"="),r.join("&")},toArray:function(t){var n=this._getItemsAsjQuery(t&&t.connected),r=[];return t=t||{},n.each(function(){r.push(e(t.item||this).attr(t.attribute||"id")||"")}),r},_intersectsWith:function(e){var t=this.positionAbs.left,n=t+this.helperProportions.width,r=this.positionAbs.top,i=r+this.helperProportions.height,s=e.left,o=s+e.width,u=e.top,a=u+e.height,f=this.offset.click.top,l=this.offset.click.left,c=r+f>u&&r+f<a&&t+l>s&&t+l<o;return this.options.tolerance=="pointer"||this.options.forcePointerForContainers||this.options.tolerance!="pointer"&&this.helperProportions[this.floating?"width":"height"]>e[this.floating?"width":"height"]?c:s<t+this.helperProportions.width/2&&n-this.helperProportions.width/2<o&&u<r+this.helperProportions.height/2&&i-this.helperProportions.height/2<a},_intersectsWithPointer:function(t){var n=this.options.axis==="x"||e.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,t.top,t.height),r=this.options.axis==="y"||e.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,t.left,t.width),i=n&&r,s=this._getDragVerticalDirection(),o=this._getDragHorizontalDirection();return i?this.floating?o&&o=="right"||s=="down"?2:1:s&&(s=="down"?2:1):!1},_intersectsWithSides:function(t){var n=e.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,t.top+t.height/2,t.height),r=e.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,t.left+t.width/2,t.width),i=this._getDragVerticalDirection(),s=this._getDragHorizontalDirection();return this.floating&&s?s=="right"&&r||s=="left"&&!r:i&&(i=="down"&&n||i=="up"&&!n)},_getDragVerticalDirection:function(){var e=this.positionAbs.top-this.lastPositionAbs.top;return e!=0&&(e>0?"down":"up")},_getDragHorizontalDirection:function(){var e=this.positionAbs.left-this.lastPositionAbs.left;return e!=0&&(e>0?"right":"left")},refresh:function(e){return this._refreshItems(e),this.refreshPositions(),this},_connectWith:function(){var e=this.options;return e.connectWith.constructor==String?[e.connectWith]:e.connectWith},_getItemsAsjQuery:function(t){var n=[],r=[],i=this._connectWith();if(i&&t)for(var s=i.length-1;s>=0;s--){var o=e(i[s]);for(var u=o.length-1;u>=0;u--){var a=e.data(o[u],this.widgetName);a&&a!=this&&!a.options.disabled&&r.push([e.isFunction(a.options.items)?a.options.items.call(a.element):e(a.options.items,a.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),a])}}r.push([e.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):e(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]);for(var s=r.length-1;s>=0;s--)r[s][0].each(function(){n.push(this)});return e(n)},_removeCurrentsFromItems:function(){var t=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=e.grep(this.items,function(e){for(var n=0;n<t.length;n++)if(t[n]==e.item[0])return!1;return!0})},_refreshItems:function(t){this.items=[],this.containers=[this];var n=this.items,r=[[e.isFunction(this.options.items)?this.options.items.call(this.element[0],t,{item:this.currentItem}):e(this.options.items,this.element),this]],i=this._connectWith();if(i&&this.ready)for(var s=i.length-1;s>=0;s--){var o=e(i[s]);for(var u=o.length-1;u>=0;u--){var a=e.data(o[u],this.widgetName);a&&a!=this&&!a.options.disabled&&(r.push([e.isFunction(a.options.items)?a.options.items.call(a.element[0],t,{item:this.currentItem}):e(a.options.items,a.element),a]),this.containers.push(a))}}for(var s=r.length-1;s>=0;s--){var f=r[s][1],l=r[s][0];for(var u=0,c=l.length;u<c;u++){var h=e(l[u]);h.data(this.widgetName+"-item",f),n.push({item:h,instance:f,width:0,height:0,left:0,top:0})}}},refreshPositions:function(t){this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());for(var n=this.items.length-1;n>=0;n--){var r=this.items[n];if(r.instance!=this.currentContainer&&this.currentContainer&&r.item[0]!=this.currentItem[0])continue;var i=this.options.toleranceElement?e(this.options.toleranceElement,r.item):r.item;t||(r.width=i.outerWidth(),r.height=i.outerHeight());var s=i.offset();r.left=s.left,r.top=s.top}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(var n=this.containers.length-1;n>=0;n--){var s=this.containers[n].element.offset();this.containers[n].containerCache.left=s.left,this.containers[n].containerCache.top=s.top,this.containers[n].containerCache.width=this.containers[n].element.outerWidth(),this.containers[n].containerCache.height=this.containers[n].element.outerHeight()}return this},_createPlaceholder:function(t){t=t||this;var n=t.options;if(!n.placeholder||n.placeholder.constructor==String){var r=n.placeholder;n.placeholder={element:function(){var n=e(document.createElement(t.currentItem[0].nodeName)).addClass(r||t.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];return r||(n.style.visibility="hidden"),n},update:function(e,i){if(r&&!n.forcePlaceholderSize)return;i.height()||i.height(t.currentItem.innerHeight()-parseInt(t.currentItem.css("paddingTop")||0,10)-parseInt(t.currentItem.css("paddingBottom")||0,10)),i.width()||i.width(t.currentItem.innerWidth()-parseInt(t.currentItem.css("paddingLeft")||0,10)-parseInt(t.currentItem.css("paddingRight")||0,10))}}}t.placeholder=e(n.placeholder.element.call(t.element,t.currentItem)),t.currentItem.after(t.placeholder),n.placeholder.update(t,t.placeholder)},_contactContainers:function(t){var n=null,r=null;for(var i=this.containers.length-1;i>=0;i--){if(e.contains(this.currentItem[0],this.containers[i].element[0]))continue;if(this._intersectsWith(this.containers[i].containerCache)){if(n&&e.contains(this.containers[i].element[0],n.element[0]))continue;n=this.containers[i],r=i}else this.containers[i].containerCache.over&&(this.containers[i]._trigger("out",t,this._uiHash(this)),this.containers[i].containerCache.over=0)}if(!n)return;if(this.containers.length===1)this.containers[r]._trigger("over",t,this._uiHash(this)),this.containers[r].containerCache.over=1;else{var s=1e4,o=null,u=this.containers[r].floating?"left":"top",a=this.containers[r].floating?"width":"height",f=this.positionAbs[u]+this.offset.click[u];for(var l=this.items.length-1;l>=0;l--){if(!e.contains(this.containers[r].element[0],this.items[l].item[0]))continue;if(this.items[l].item[0]==this.currentItem[0])continue;var c=this.items[l].item.offset()[u],h=!1;Math.abs(c-f)>Math.abs(c+this.items[l][a]-f)&&(h=!0,c+=this.items[l][a]),Math.abs(c-f)<s&&(s=Math.abs(c-f),o=this.items[l],this.direction=h?"up":"down")}if(!o&&!this.options.dropOnEmpty)return;this.currentContainer=this.containers[r],o?this._rearrange(t,o,null,!0):this._rearrange(t,null,this.containers[r].element,!0),this._trigger("change",t,this._uiHash()),this.containers[r]._trigger("change",t,this._uiHash(this)),this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[r]._trigger("over",t,this._uiHash(this)),this.containers[r].containerCache.over=1}},_createHelper:function(t){var n=this.options,r=e.isFunction(n.helper)?e(n.helper.apply(this.element[0],[t,this.currentItem])):n.helper=="clone"?this.currentItem.clone():this.currentItem;return r.parents("body").length||e(n.appendTo!="parent"?n.appendTo:this.currentItem[0].parentNode)[0].appendChild(r[0]),r[0]==this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(r[0].style.width==""||n.forceHelperSize)&&r.width(this.currentItem.width()),(r[0].style.height==""||n.forceHelperSize)&&r.height(this.currentItem.height()),r},_adjustOffsetFromHelper:function(t){typeof t=="string"&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var t=this.offsetParent.offset();this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop());if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&e.ui.ie)t={top:0,left:0};return{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var e=this.currentItem.position();return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:e.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t=this.options;t.containment=="parent"&&(t.containment=this.helper[0].parentNode);if(t.containment=="document"||t.containment=="window")this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,e(t.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(e(t.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(t.containment)){var n=e(t.containment)[0],r=e(t.containment).offset(),i=e(n).css("overflow")!="hidden";this.containment=[r.left+(parseInt(e(n).css("borderLeftWidth"),10)||0)+(parseInt(e(n).css("paddingLeft"),10)||0)-this.margins.left,r.top+(parseInt(e(n).css("borderTopWidth"),10)||0)+(parseInt(e(n).css("paddingTop"),10)||0)-this.margins.top,r.left+(i?Math.max(n.scrollWidth,n.offsetWidth):n.offsetWidth)-(parseInt(e(n).css("borderLeftWidth"),10)||0)-(parseInt(e(n).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,r.top+(i?Math.max(n.scrollHeight,n.offsetHeight):n.offsetHeight)-(parseInt(e(n).css("borderTopWidth"),10)||0)-(parseInt(e(n).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}},_convertPositionTo:function(t,n){n||(n=this.position);var r=t=="absolute"?1:-1,i=this.options,s=this.cssPosition!="absolute"||this.scrollParent[0]!=document&&!!e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,o=/(html|body)/i.test(s[0].tagName);return{top:n.top+this.offset.relative.top*r+this.offset.parent.top*r-(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():o?0:s.scrollTop())*r,left:n.left+this.offset.relative.left*r+this.offset.parent.left*r-(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():o?0:s.scrollLeft())*r}},_generatePosition:function(t){var n=this.options,r=this.cssPosition!="absolute"||this.scrollParent[0]!=document&&!!e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,i=/(html|body)/i.test(r[0].tagName);this.cssPosition=="relative"&&(this.scrollParent[0]==document||this.scrollParent[0]==this.offsetParent[0])&&(this.offset.relative=this._getRelativeOffset());var s=t.pageX,o=t.pageY;if(this.originalPosition){this.containment&&(t.pageX-this.offset.click.left<this.containment[0]&&(s=this.containment[0]+this.offset.click.left),t.pageY-this.offset.click.top<this.containment[1]&&(o=this.containment[1]+this.offset.click.top),t.pageX-this.offset.click.left>this.containment[2]&&(s=this.containment[2]+this.offset.click.left),t.pageY-this.offset.click.top>this.containment[3]&&(o=this.containment[3]+this.offset.click.top));if(n.grid){var u=this.originalPageY+Math.round((o-this.originalPageY)/n.grid[1])*n.grid[1];o=this.containment?u-this.offset.click.top<this.containment[1]||u-this.offset.click.top>this.containment[3]?u-this.offset.click.top<this.containment[1]?u+n.grid[1]:u-n.grid[1]:u:u;var a=this.originalPageX+Math.round((s-this.originalPageX)/n.grid[0])*n.grid[0];s=this.containment?a-this.offset.click.left<this.containment[0]||a-this.offset.click.left>this.containment[2]?a-this.offset.click.left<this.containment[0]?a+n.grid[0]:a-n.grid[0]:a:a}}return{top:o-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():i?0:r.scrollTop()),left:s-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():i?0:r.scrollLeft())}},_rearrange:function(e,t,n,r){n?n[0].appendChild(this.placeholder[0]):t.item[0].parentNode.insertBefore(this.placeholder[0],this.direction=="down"?t.item[0]:t.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var i=this.counter;this._delay(function(){i==this.counter&&this.refreshPositions(!r)})},_clear:function(t,n){this.reverting=!1;var r=[];!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var i in this._storedCSS)if(this._storedCSS[i]=="auto"||this._storedCSS[i]=="static")this._storedCSS[i]="";this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();this.fromOutside&&!n&&r.push(function(e){this._trigger("receive",e,this._uiHash(this.fromOutside))}),(this.fromOutside||this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!=this.currentItem.parent()[0])&&!n&&r.push(function(e){this._trigger("update",e,this._uiHash())}),this!==this.currentContainer&&(n||(r.push(function(e){this._trigger("remove",e,this._uiHash())}),r.push(function(e){return function(t){e._trigger("receive",t,this._uiHash(this))}}.call(this,this.currentContainer)),r.push(function(e){return function(t){e._trigger("update",t,this._uiHash(this))}}.call(this,this.currentContainer))));for(var i=this.containers.length-1;i>=0;i--)n||r.push(function(e){return function(t){e._trigger("deactivate",t,this._uiHash(this))}}.call(this,this.containers[i])),this.containers[i].containerCache.over&&(r.push(function(e){return function(t){e._trigger("out",t,this._uiHash(this))}}.call(this,this.containers[i])),this.containers[i].containerCache.over=0);this._storedCursor&&e("body").css("cursor",this._storedCursor),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex),this.dragging=!1;if(this.cancelHelperRemoval){if(!n){this._trigger("beforeStop",t,this._uiHash());for(var i=0;i<r.length;i++)r[i].call(this,t);this._trigger("stop",t,this._uiHash())}return this.fromOutside=!1,!1}n||this._trigger("beforeStop",t,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.helper[0]!=this.currentItem[0]&&this.helper.remove(),this.helper=null;if(!n){for(var i=0;i<r.length;i++)r[i].call(this,t);this._trigger("stop",t,this._uiHash())}return this.fromOutside=!1,!0},_trigger:function(){e.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(t){var n=t||this;return{helper:n.helper,placeholder:n.placeholder||e([]),position:n.position,originalPosition:n.originalPosition,offset:n.positionAbs,item:n.currentItem,sender:t?t.element:null}}})})(jQuery);(function(e){function t(e){return function(){var t=this.element.val();e.apply(this,arguments),this._refresh(),t!==this.element.val()&&this._trigger("change")}}e.widget("ui.spinner",{version:"1.9.2",defaultElement:"<input>",widgetEventPrefix:"spin",options:{culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var t={},n=this.element;return e.each(["min","max","step"],function(e,r){var i=n.attr(r);i!==undefined&&i.length&&(t[r]=i)}),t},_events:{keydown:function(e){this._start(e)&&this._keydown(e)&&e.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(e){if(this.cancelBlur){delete this.cancelBlur;return}this._refresh(),this.previous!==this.element.val()&&this._trigger("change",e)},mousewheel:function(e,t){if(!t)return;if(!this.spinning&&!this._start(e))return!1;this._spin((t>0?1:-1)*this.options.step,e),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(e)},100),e.preventDefault()},"mousedown .ui-spinner-button":function(t){function r(){var e=this.element[0]===this.document[0].activeElement;e||(this.element.focus(),this.previous=n,this._delay(function(){this.previous=n}))}var n;n=this.element[0]===this.document[0].activeElement?this.previous:this.element.val(),t.preventDefault(),r.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,r.call(this)});if(this._start(t)===!1)return;this._repeat(null,e(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(t){if(!e(t.currentTarget).hasClass("ui-state-active"))return;if(this._start(t)===!1)return!1;this._repeat(null,e(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t)},"mouseleave .ui-spinner-button":"_stop"},_draw:function(){var e=this.uiSpinner=this.element.addClass("ui-spinner-input").attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml());this.element.attr("role","spinbutton"),this.buttons=e.find(".ui-spinner-button").attr("tabIndex",-1).button().removeClass("ui-corner-all"),this.buttons.height()>Math.ceil(e.height()*.5)&&e.height()>0&&e.height(e.height()),this.options.disabled&&this.disable()},_keydown:function(t){var n=this.options,r=e.ui.keyCode;switch(t.keyCode){case r.UP:return this._repeat(null,1,t),!0;case r.DOWN:return this._repeat(null,-1,t),!0;case r.PAGE_UP:return this._repeat(null,n.page,t),!0;case r.PAGE_DOWN:return this._repeat(null,-n.page,t),!0}return!1},_uiSpinnerHtml:function(){return"<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>"},_buttonHtml:function(){return"<a class='ui-spinner-button ui-spinner-up ui-corner-tr'><span class='ui-icon "+this.options.icons.up+"'>&#9650;</span>"+"</a>"+"<a class='ui-spinner-button ui-spinner-down ui-corner-br'>"+"<span class='ui-icon "+this.options.icons.down+"'>&#9660;</span>"+"</a>"},_start:function(e){return!this.spinning&&this._trigger("start",e)===!1?!1:(this.counter||(this.counter=1),this.spinning=!0,!0)},_repeat:function(e,t,n){e=e||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,t,n)},e),this._spin(t*this.options.step,n)},_spin:function(e,t){var n=this.value()||0;this.counter||(this.counter=1),n=this._adjustValue(n+e*this._increment(this.counter));if(!this.spinning||this._trigger("spin",t,{value:n})!==!1)this._value(n),this.counter++},_increment:function(t){var n=this.options.incremental;return n?e.isFunction(n)?n(t):Math.floor(t*t*t/5e4-t*t/500+17*t/200+1):1},_precision:function(){var e=this._precisionOf(this.options.step);return this.options.min!==null&&(e=Math.max(e,this._precisionOf(this.options.min))),e},_precisionOf:function(e){var t=e.toString(),n=t.indexOf(".");return n===-1?0:t.length-n-1},_adjustValue:function(e){var t,n,r=this.options;return t=r.min!==null?r.min:0,n=e-t,n=Math.round(n/r.step)*r.step,e=t+n,e=parseFloat(e.toFixed(this._precision())),r.max!==null&&e>r.max?r.max:r.min!==null&&e<r.min?r.min:e},_stop:function(e){if(!this.spinning)return;clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",e)},_setOption:function(e,t){if(e==="culture"||e==="numberFormat"){var n=this._parse(this.element.val());this.options[e]=t,this.element.val(this._format(n));return}(e==="max"||e==="min"||e==="step")&&typeof t=="string"&&(t=this._parse(t)),this._super(e,t),e==="disabled"&&(t?(this.element.prop("disabled",!0),this.buttons.button("disable")):(this.element.prop("disabled",!1),this.buttons.button("enable")))},_setOptions:t(function(e){this._super(e),this._value(this.element.val())}),_parse:function(e){return typeof e=="string"&&e!==""&&(e=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(e,10,this.options.culture):+e),e===""||isNaN(e)?null:e},_format:function(e){return e===""?"":window.Globalize&&this.options.numberFormat?Globalize.format(e,this.options.numberFormat,this.options.culture):e},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},_value:function(e,t){var n;e!==""&&(n=this._parse(e),n!==null&&(t||(n=this._adjustValue(n)),e=this._format(n))),this.element.val(e),this._refresh()},_destroy:function(){this.element.removeClass("ui-spinner-input").prop("disabled",!1).removeAttr("autocomplete").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:t(function(e){this._stepUp(e)}),_stepUp:function(e){this._spin((e||1)*this.options.step)},stepDown:t(function(e){this._stepDown(e)}),_stepDown:function(e){this._spin((e||1)*-this.options.step)},pageUp:t(function(e){this._stepUp((e||1)*this.options.page)}),pageDown:t(function(e){this._stepDown((e||1)*this.options.page)}),value:function(e){if(!arguments.length)return this._parse(this.element.val());t(this._value).call(this,e)},widget:function(){return this.uiSpinner}})})(jQuery);(function(e,t){function i(){return++n}function s(e){return e.hash.length>1&&e.href.replace(r,"")===location.href.replace(r,"").replace(/\s/g,"%20")}var n=0,r=/#.*$/;e.widget("ui.tabs",{version:"1.9.2",delay:300,options:{active:null,collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_create:function(){var t=this,n=this.options,r=n.active,i=location.hash.substring(1);this.running=!1,this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all").toggleClass("ui-tabs-collapsible",n.collapsible).delegate(".ui-tabs-nav > li","mousedown"+this.eventNamespace,function(t){e(this).is(".ui-state-disabled")&&t.preventDefault()}).delegate(".ui-tabs-anchor","focus"+this.eventNamespace,function(){e(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this._processTabs();if(r===null){i&&this.tabs.each(function(t,n){if(e(n).attr("aria-controls")===i)return r=t,!1}),r===null&&(r=this.tabs.index(this.tabs.filter(".ui-tabs-active")));if(r===null||r===-1)r=this.tabs.length?0:!1}r!==!1&&(r=this.tabs.index(this.tabs.eq(r)),r===-1&&(r=n.collapsible?!1:0)),n.active=r,!n.collapsible&&n.active===!1&&this.anchors.length&&(n.active=0),e.isArray(n.disabled)&&(n.disabled=e.unique(n.disabled.concat(e.map(this.tabs.filter(".ui-state-disabled"),function(e){return t.tabs.index(e)}))).sort()),this.options.active!==!1&&this.anchors.length?this.active=this._findActive(this.options.active):this.active=e(),this._refresh(),this.active.length&&this.load(n.active)},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):e()}},_tabKeydown:function(t){var n=e(this.document[0].activeElement).closest("li"),r=this.tabs.index(n),i=!0;if(this._handlePageNav(t))return;switch(t.keyCode){case e.ui.keyCode.RIGHT:case e.ui.keyCode.DOWN:r++;break;case e.ui.keyCode.UP:case e.ui.keyCode.LEFT:i=!1,r--;break;case e.ui.keyCode.END:r=this.anchors.length-1;break;case e.ui.keyCode.HOME:r=0;break;case e.ui.keyCode.SPACE:t.preventDefault(),clearTimeout(this.activating),this._activate(r);return;case e.ui.keyCode.ENTER:t.preventDefault(),clearTimeout(this.activating),this._activate(r===this.options.active?!1:r);return;default:return}t.preventDefault(),clearTimeout(this.activating),r=this._focusNextTab(r,i),t.ctrlKey||(n.attr("aria-selected","false"),this.tabs.eq(r).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",r)},this.delay))},_panelKeydown:function(t){if(this._handlePageNav(t))return;t.ctrlKey&&t.keyCode===e.ui.keyCode.UP&&(t.preventDefault(),this.active.focus())},_handlePageNav:function(t){if(t.altKey&&t.keyCode===e.ui.keyCode.PAGE_UP)return this._activate(this._focusNextTab(this.options.active-1,!1)),!0;if(t.altKey&&t.keyCode===e.ui.keyCode.PAGE_DOWN)return this._activate(this._focusNextTab(this.options.active+1,!0)),!0},_findNextTab:function(t,n){function i(){return t>r&&(t=0),t<0&&(t=r),t}var r=this.tabs.length-1;while(e.inArray(i(),this.options.disabled)!==-1)t=n?t+1:t-1;return t},_focusNextTab:function(e,t){return e=this._findNextTab(e,t),this.tabs.eq(e).focus(),e},_setOption:function(e,t){if(e==="active"){this._activate(t);return}if(e==="disabled"){this._setupDisabled(t);return}this._super(e,t),e==="collapsible"&&(this.element.toggleClass("ui-tabs-collapsible",t),!t&&this.options.active===!1&&this._activate(0)),e==="event"&&this._setupEvents(t),e==="heightStyle"&&this._setupHeightStyle(t)},_tabId:function(e){return e.attr("aria-controls")||"ui-tabs-"+i()},_sanitizeSelector:function(e){return e?e.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var t=this.options,n=this.tablist.children(":has(a[href])");t.disabled=e.map(n.filter(".ui-state-disabled"),function(e){return n.index(e)}),this._processTabs(),t.active===!1||!this.anchors.length?(t.active=!1,this.active=e()):this.active.length&&!e.contains(this.tablist[0],this.active[0])?this.tabs.length===t.disabled.length?(t.active=!1,this.active=e()):this._activate(this._findNextTab(Math.max(0,t.active-1),!1)):t.active=this.tabs.index(this.active),this._refresh()},_refresh:function(){this._setupDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-expanded":"false","aria-hidden":"true"}),this.active.length?(this.active.addClass("ui-tabs-active ui-state-active").attr({"aria-selected":"true",tabIndex:0}),this._getPanelForTab(this.active).show().attr({"aria-expanded":"true","aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var t=this;this.tablist=this._getList().addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").attr("role","tablist"),this.tabs=this.tablist.find("> li:has(a[href])").addClass("ui-state-default ui-corner-top").attr({role:"tab",tabIndex:-1}),this.anchors=this.tabs.map(function(){return e("a",this)[0]}).addClass("ui-tabs-anchor").attr({role:"presentation",tabIndex:-1}),this.panels=e(),this.anchors.each(function(n,r){var i,o,u,a=e(r).uniqueId().attr("id"),f=e(r).closest("li"),l=f.attr("aria-controls");s(r)?(i=r.hash,o=t.element.find(t._sanitizeSelector(i))):(u=t._tabId(f),i="#"+u,o=t.element.find(i),o.length||(o=t._createPanel(u),o.insertAfter(t.panels[n-1]||t.tablist)),o.attr("aria-live","polite")),o.length&&(t.panels=t.panels.add(o)),l&&f.data("ui-tabs-aria-controls",l),f.attr({"aria-controls":i.substring(1),"aria-labelledby":a}),o.attr("aria-labelledby",a)}),this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").attr("role","tabpanel")},_getList:function(){return this.element.find("ol,ul").eq(0)},_createPanel:function(t){return e("<div>").attr("id",t).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("ui-tabs-destroy",!0)},_setupDisabled:function(t){e.isArray(t)&&(t.length?t.length===this.anchors.length&&(t=!0):t=!1);for(var n=0,r;r=this.tabs[n];n++)t===!0||e.inArray(n,t)!==-1?e(r).addClass("ui-state-disabled").attr("aria-disabled","true"):e(r).removeClass("ui-state-disabled").removeAttr("aria-disabled");this.options.disabled=t},_setupEvents:function(t){var n={click:function(e){e.preventDefault()}};t&&e.each(t.split(" "),function(e,t){n[t]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(this.anchors,n),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(t){var n,r,i=this.element.parent();t==="fill"?(e.support.minHeight||(r=i.css("overflow"),i.css("overflow","hidden")),n=i.height(),this.element.siblings(":visible").each(function(){var t=e(this),r=t.css("position");if(r==="absolute"||r==="fixed")return;n-=t.outerHeight(!0)}),r&&i.css("overflow",r),this.element.children().not(this.panels).each(function(){n-=e(this).outerHeight(!0)}),this.panels.each(function(){e(this).height(Math.max(0,n-e(this).innerHeight()+e(this).height()))}).css("overflow","auto")):t==="auto"&&(n=0,this.panels.each(function(){n=Math.max(n,e(this).height("").height())}).height(n))},_eventHandler:function(t){var n=this.options,r=this.active,i=e(t.currentTarget),s=i.closest("li"),o=s[0]===r[0],u=o&&n.collapsible,a=u?e():this._getPanelForTab(s),f=r.length?this._getPanelForTab(r):e(),l={oldTab:r,oldPanel:f,newTab:u?e():s,newPanel:a};t.preventDefault();if(s.hasClass("ui-state-disabled")||s.hasClass("ui-tabs-loading")||this.running||o&&!n.collapsible||this._trigger("beforeActivate",t,l)===!1)return;n.active=u?!1:this.tabs.index(s),this.active=o?e():s,this.xhr&&this.xhr.abort(),!f.length&&!a.length&&e.error("jQuery UI Tabs: Mismatching fragment identifier."),a.length&&this.load(this.tabs.index(s),t),this._toggle(t,l)},_toggle:function(t,n){function o(){r.running=!1,r._trigger("activate",t,n)}function u(){n.newTab.closest("li").addClass("ui-tabs-active ui-state-active"),i.length&&r.options.show?r._show(i,r.options.show,o):(i.show(),o())}var r=this,i=n.newPanel,s=n.oldPanel;this.running=!0,s.length&&this.options.hide?this._hide(s,this.options.hide,function(){n.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),u()}):(n.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),s.hide(),u()),s.attr({"aria-expanded":"false","aria-hidden":"true"}),n.oldTab.attr("aria-selected","false"),i.length&&s.length?n.oldTab.attr("tabIndex",-1):i.length&&this.tabs.filter(function(){return e(this).attr("tabIndex")===0}).attr("tabIndex",-1),i.attr({"aria-expanded":"true","aria-hidden":"false"}),n.newTab.attr({"aria-selected":"true",tabIndex:0})},_activate:function(t){var n,r=this._findActive(t);if(r[0]===this.active[0])return;r.length||(r=this.active),n=r.find(".ui-tabs-anchor")[0],this._eventHandler({target:n,currentTarget:n,preventDefault:e.noop})},_findActive:function(t){return t===!1?e():this.tabs.eq(t)},_getIndex:function(e){return typeof e=="string"&&(e=this.anchors.index(this.anchors.filter("[href$='"+e+"']"))),e},_destroy:function(){this.xhr&&this.xhr.abort(),this.element.removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible"),this.tablist.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").removeAttr("role"),this.anchors.removeClass("ui-tabs-anchor").removeAttr("role").removeAttr("tabIndex").removeData("href.tabs").removeData("load.tabs").removeUniqueId(),this.tabs.add(this.panels).each(function(){e.data(this,"ui-tabs-destroy")?e(this).remove():e(this).removeClass("ui-state-default ui-state-active ui-state-disabled ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel").removeAttr("tabIndex").removeAttr("aria-live").removeAttr("aria-busy").removeAttr("aria-selected").removeAttr("aria-labelledby").removeAttr("aria-hidden").removeAttr("aria-expanded").removeAttr("role")}),this.tabs.each(function(){var t=e(this),n=t.data("ui-tabs-aria-controls");n?t.attr("aria-controls",n):t.removeAttr("aria-controls")}),this.panels.show(),this.options.heightStyle!=="content"&&this.panels.css("height","")},enable:function(n){var r=this.options.disabled;if(r===!1)return;n===t?r=!1:(n=this._getIndex(n),e.isArray(r)?r=e.map(r,function(e){return e!==n?e:null}):r=e.map(this.tabs,function(e,t){return t!==n?t:null})),this._setupDisabled(r)},disable:function(n){var r=this.options.disabled;if(r===!0)return;if(n===t)r=!0;else{n=this._getIndex(n);if(e.inArray(n,r)!==-1)return;e.isArray(r)?r=e.merge([n],r).sort():r=[n]}this._setupDisabled(r)},load:function(t,n){t=this._getIndex(t);var r=this,i=this.tabs.eq(t),o=i.find(".ui-tabs-anchor"),u=this._getPanelForTab(i),a={tab:i,panel:u};if(s(o[0]))return;this.xhr=e.ajax(this._ajaxSettings(o,n,a)),this.xhr&&this.xhr.statusText!=="canceled"&&(i.addClass("ui-tabs-loading"),u.attr("aria-busy","true"),this.xhr.success(function(e){setTimeout(function(){u.html(e),r._trigger("load",n,a)},1)}).complete(function(e,t){setTimeout(function(){t==="abort"&&r.panels.stop(!1,!0),i.removeClass("ui-tabs-loading"),u.removeAttr("aria-busy"),e===r.xhr&&delete r.xhr},1)}))},_ajaxSettings:function(t,n,r){var i=this;return{url:t.attr("href"),beforeSend:function(t,s){return i._trigger("beforeLoad",n,e.extend({jqXHR:t,ajaxSettings:s},r))}}},_getPanelForTab:function(t){var n=e(t).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+n))}}),e.uiBackCompat!==!1&&(e.ui.tabs.prototype._ui=function(e,t){return{tab:e,panel:t,index:this.anchors.index(e)}},e.widget("ui.tabs",e.ui.tabs,{url:function(e,t){this.anchors.eq(e).attr("href",t)}}),e.widget("ui.tabs",e.ui.tabs,{options:{ajaxOptions:null,cache:!1},_create:function(){this._super();var t=this;this._on({tabsbeforeload:function(n,r){if(e.data(r.tab[0],"cache.tabs")){n.preventDefault();return}r.jqXHR.success(function(){t.options.cache&&e.data(r.tab[0],"cache.tabs",!0)})}})},_ajaxSettings:function(t,n,r){var i=this.options.ajaxOptions;return e.extend({},i,{error:function(e,t){try{i.error(e,t,r.tab.closest("li").index(),r.tab[0])}catch(n){}}},this._superApply(arguments))},_setOption:function(e,t){e==="cache"&&t===!1&&this.anchors.removeData("cache.tabs"),this._super(e,t)},_destroy:function(){this.anchors.removeData("cache.tabs"),this._super()},url:function(e){this.anchors.eq(e).removeData("cache.tabs"),this._superApply(arguments)}}),e.widget("ui.tabs",e.ui.tabs,{abort:function(){this.xhr&&this.xhr.abort()}}),e.widget("ui.tabs",e.ui.tabs,{options:{spinner:"<em>Loading&#8230;</em>"},_create:function(){this._super(),this._on({tabsbeforeload:function(e,t){if(e.target!==this.element[0]||!this.options.spinner)return;var n=t.tab.find("span"),r=n.html();n.html(this.options.spinner),t.jqXHR.complete(function(){n.html(r)})}})}}),e.widget("ui.tabs",e.ui.tabs,{options:{enable:null,disable:null},enable:function(t){var n=this.options,r;if(t&&n.disabled===!0||e.isArray(n.disabled)&&e.inArray(t,n.disabled)!==-1)r=!0;this._superApply(arguments),r&&this._trigger("enable",null,this._ui(this.anchors[t],this.panels[t]))},disable:function(t){var n=this.options,r;if(t&&n.disabled===!1||e.isArray(n.disabled)&&e.inArray(t,n.disabled)===-1)r=!0;this._superApply(arguments),r&&this._trigger("disable",null,this._ui(this.anchors[t],this.panels[t]))}}),e.widget("ui.tabs",e.ui.tabs,{options:{add:null,remove:null,tabTemplate:"<li><a href='#{href}'><span>#{label}</span></a></li>"},add:function(n,r,i){i===t&&(i=this.anchors.length);var s,o,u=this.options,a=e(u.tabTemplate.replace(/#\{href\}/g,n).replace(/#\{label\}/g,r)),f=n.indexOf("#")?this._tabId(a):n.replace("#","");return a.addClass("ui-state-default ui-corner-top").data("ui-tabs-destroy",!0),a.attr("aria-controls",f),s=i>=this.tabs.length,o=this.element.find("#"+f),o.length||(o=this._createPanel(f),s?i>0?o.insertAfter(this.panels.eq(-1)):o.appendTo(this.element):o.insertBefore(this.panels[i])),o.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").hide(),s?a.appendTo(this.tablist):a.insertBefore(this.tabs[i]),u.disabled=e.map(u.disabled,function(e){return e>=i?++e:e}),this.refresh(),this.tabs.length===1&&u.active===!1&&this.option("active",0),this._trigger("add",null,this._ui(this.anchors[i],this.panels[i])),this},remove:function(t){t=this._getIndex(t);var n=this.options,r=this.tabs.eq(t).remove(),i=this._getPanelForTab(r).remove();return r.hasClass("ui-tabs-active")&&this.anchors.length>2&&this._activate(t+(t+1<this.anchors.length?1:-1)),n.disabled=e.map(e.grep(n.disabled,function(e){return e!==t}),function(e){return e>=t?--e:e}),this.refresh(),this._trigger("remove",null,this._ui(r.find("a")[0],i[0])),this}}),e.widget("ui.tabs",e.ui.tabs,{length:function(){return this.anchors.length}}),e.widget("ui.tabs",e.ui.tabs,{options:{idPrefix:"ui-tabs-"},_tabId:function(t){var n=t.is("li")?t.find("a[href]"):t;return n=n[0],e(n).closest("li").attr("aria-controls")||n.title&&n.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF\-]/g,"")||this.options.idPrefix+i()}}),e.widget("ui.tabs",e.ui.tabs,{options:{panelTemplate:"<div></div>"},_createPanel:function(t){return e(this.options.panelTemplate).attr("id",t).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("ui-tabs-destroy",!0)}}),e.widget("ui.tabs",e.ui.tabs,{_create:function(){var e=this.options;e.active===null&&e.selected!==t&&(e.active=e.selected===-1?!1:e.selected),this._super(),e.selected=e.active,e.selected===!1&&(e.selected=-1)},_setOption:function(e,t){if(e!=="selected")return this._super(e,t);var n=this.options;this._super("active",t===-1?!1:t),n.selected=n.active,n.selected===!1&&(n.selected=-1)},_eventHandler:function(){this._superApply(arguments),this.options.selected=this.options.active,this.options.selected===!1&&(this.options.selected=-1)}}),e.widget("ui.tabs",e.ui.tabs,{options:{show:null,select:null},_create:function(){this._super(),this.options.active!==!1&&this._trigger("show",null,this._ui(this.active.find(".ui-tabs-anchor")[0],this._getPanelForTab(this.active)[0]))},_trigger:function(e,t,n){var r,i,s=this._superApply(arguments);return s?(e==="beforeActivate"?(r=n.newTab.length?n.newTab:n.oldTab,i=n.newPanel.length?n.newPanel:n.oldPanel,s=this._super("select",t,{tab:r.find(".ui-tabs-anchor")[0],panel:i[0],index:r.closest("li").index()})):e==="activate"&&n.newTab.length&&(s=this._super("show",t,{tab:n.newTab.find(".ui-tabs-anchor")[0],panel:n.newPanel[0],index:n.newTab.closest("li").index()})),s):!1}}),e.widget("ui.tabs",e.ui.tabs,{select:function(e){e=this._getIndex(e);if(e===-1){if(!this.options.collapsible||this.options.selected===-1)return;e=this.options.selected}this.anchors.eq(e).trigger(this.options.event+this.eventNamespace)}}),function(){var t=0;e.widget("ui.tabs",e.ui.tabs,{options:{cookie:null},_create:function(){var e=this.options,t;e.active==null&&e.cookie&&(t=parseInt(this._cookie(),10),t===-1&&(t=!1),e.active=t),this._super()},_cookie:function(n){var r=[this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+ ++t)];return arguments.length&&(r.push(n===!1?-1:n),r.push(this.options.cookie)),e.cookie.apply(null,r)},_refresh:function(){this._super(),this.options.cookie&&this._cookie(this.options.active,this.options.cookie)},_eventHandler:function(){this._superApply(arguments),this.options.cookie&&this._cookie(this.options.active,this.options.cookie)},_destroy:function(){this._super(),this.options.cookie&&this._cookie(null,this.options.cookie)}})}(),e.widget("ui.tabs",e.ui.tabs,{_trigger:function(t,n,r){var i=e.extend({},r);return t==="load"&&(i.panel=i.panel[0],i.tab=i.tab.find(".ui-tabs-anchor")[0]),this._super(t,n,i)}}),e.widget("ui.tabs",e.ui.tabs,{options:{fx:null},_getFx:function(){var t,n,r=this.options.fx;return r&&(e.isArray(r)?(t=r[0],n=r[1]):t=n=r),r?{show:n,hide:t}:null},_toggle:function(e,t){function o(){n.running=!1,n._trigger("activate",e,t)}function u(){t.newTab.closest("li").addClass("ui-tabs-active ui-state-active"),r.length&&s.show?r.animate(s.show,s.show.duration,function(){o()}):(r.show(),o())}var n=this,r=t.newPanel,i=t.oldPanel,s=this._getFx();if(!s)return this._super(e,t);n.running=!0,i.length&&s.hide?i.animate(s.hide,s.hide.duration,function(){t.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),u()}):(t.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),i.hide(),u())}}))})(jQuery);(function(e){function n(t,n){var r=(t.attr("aria-describedby")||"").split(/\s+/);r.push(n),t.data("ui-tooltip-id",n).attr("aria-describedby",e.trim(r.join(" ")))}function r(t){var n=t.data("ui-tooltip-id"),r=(t.attr("aria-describedby")||"").split(/\s+/),i=e.inArray(n,r);i!==-1&&r.splice(i,1),t.removeData("ui-tooltip-id"),r=e.trim(r.join(" ")),r?t.attr("aria-describedby",r):t.removeAttr("aria-describedby")}var t=0;e.widget("ui.tooltip",{version:"1.9.2",options:{content:function(){return e(this).attr("title")},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,tooltipClass:null,track:!1,close:null,open:null},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.options.disabled&&this._disable()},_setOption:function(t,n){var r=this;if(t==="disabled"){this[n?"_disable":"_enable"](),this.options[t]=n;return}this._super(t,n),t==="content"&&e.each(this.tooltips,function(e,t){r._updateContent(t)})},_disable:function(){var t=this;e.each(this.tooltips,function(n,r){var i=e.Event("blur");i.target=i.currentTarget=r[0],t.close(i,!0)}),this.element.find(this.options.items).andSelf().each(function(){var t=e(this);t.is("[title]")&&t.data("ui-tooltip-title",t.attr("title")).attr("title","")})},_enable:function(){this.element.find(this.options.items).andSelf().each(function(){var t=e(this);t.data("ui-tooltip-title")&&t.attr("title",t.data("ui-tooltip-title"))})},open:function(t){var n=this,r=e(t?t.target:this.element).closest(this.options.items);if(!r.length||r.data("ui-tooltip-id"))return;r.attr("title")&&r.data("ui-tooltip-title",r.attr("title")),r.data("ui-tooltip-open",!0),t&&t.type==="mouseover"&&r.parents().each(function(){var t=e(this),r;t.data("ui-tooltip-open")&&(r=e.Event("blur"),r.target=r.currentTarget=this,n.close(r,!0)),t.attr("title")&&(t.uniqueId(),n.parents[this.id]={element:this,title:t.attr("title")},t.attr("title",""))}),this._updateContent(r,t)},_updateContent:function(e,t){var n,r=this.options.content,i=this,s=t?t.type:null;if(typeof r=="string")return this._open(t,e,r);n=r.call(e[0],function(n){if(!e.data("ui-tooltip-open"))return;i._delay(function(){t&&(t.type=s),this._open(t,e,n)})}),n&&this._open(t,e,n)},_open:function(t,r,i){function f(e){a.of=e;if(s.is(":hidden"))return;s.position(a)}var s,o,u,a=e.extend({},this.options.position);if(!i)return;s=this._find(r);if(s.length){s.find(".ui-tooltip-content").html(i);return}r.is("[title]")&&(t&&t.type==="mouseover"?r.attr("title",""):r.removeAttr("title")),s=this._tooltip(r),n(r,s.attr("id")),s.find(".ui-tooltip-content").html(i),this.options.track&&t&&/^mouse/.test(t.type)?(this._on(this.document,{mousemove:f}),f(t)):s.position(e.extend({of:r},this.options.position)),s.hide(),this._show(s,this.options.show),this.options.show&&this.options.show.delay&&(u=setInterval(function(){s.is(":visible")&&(f(a.of),clearInterval(u))},e.fx.interval)),this._trigger("open",t,{tooltip:s}),o={keyup:function(t){if(t.keyCode===e.ui.keyCode.ESCAPE){var n=e.Event(t);n.currentTarget=r[0],this.close(n,!0)}},remove:function(){this._removeTooltip(s)}};if(!t||t.type==="mouseover")o.mouseleave="close";if(!t||t.type==="focusin")o.focusout="close";this._on(!0,r,o)},close:function(t){var n=this,i=e(t?t.currentTarget:this.element),s=this._find(i);if(this.closing)return;i.data("ui-tooltip-title")&&i.attr("title",i.data("ui-tooltip-title")),r(i),s.stop(!0),this._hide(s,this.options.hide,function(){n._removeTooltip(e(this))}),i.removeData("ui-tooltip-open"),this._off(i,"mouseleave focusout keyup"),i[0]!==this.element[0]&&this._off(i,"remove"),this._off(this.document,"mousemove"),t&&t.type==="mouseleave"&&e.each(this.parents,function(t,r){e(r.element).attr("title",r.title),delete n.parents[t]}),this.closing=!0,this._trigger("close",t,{tooltip:s}),this.closing=!1},_tooltip:function(n){var r="ui-tooltip-"+t++,i=e("<div>").attr({id:r,role:"tooltip"}).addClass("ui-tooltip ui-widget ui-corner-all ui-widget-content "+(this.options.tooltipClass||""));return e("<div>").addClass("ui-tooltip-content").appendTo(i),i.appendTo(this.document[0].body),e.fn.bgiframe&&i.bgiframe(),this.tooltips[r]=n,i},_find:function(t){var n=t.data("ui-tooltip-id");return n?e("#"+n):e()},_removeTooltip:function(e){e.remove(),delete this.tooltips[e.attr("id")]},_destroy:function(){var t=this;e.each(this.tooltips,function(n,r){var i=e.Event("blur");i.target=i.currentTarget=r[0],t.close(i,!0),e("#"+n).remove(),r.data("ui-tooltip-title")&&(r.attr("title",r.data("ui-tooltip-title")),r.removeData("ui-tooltip-title"))})}})})(jQuery);

File: public/js/jquery-ui.min.js
Match lines: 1
11|var n,r=t.type(s),c="array"===r||"object"===r?s:arguments,d=this[o].slice();return f(a,function(t,e){var s=c["object"===r?t:e.idx];null==s&&(s=d[e.idx]),d[e.idx]=i(s,e)}),u?(n=l(u(d)),n[o]=d,n):l(d)},f(a,function(e,i){l.fn[e]||(l.fn[e]=function(n){var a,o=t.type(n),h="alpha"===e?this._hsla?"hsla":"rgba":s,l=this[h](),u=l[i.idx];return"undefined"===o?u:("function"===o&&(n=n.call(this,u),o=t.type(n)),null==n&&i.empty?this:("string"===o&&(a=r.exec(n),a&&(n=u+parseFloat(a[2])*("+"===a[1]?1:-1))),l[i.idx]=n,this[h](l)))})})}),l.hook=function(e){var i=e.split(" ");f(i,function(e,i){t.cssHooks[i]={set:function(e,n){var a,o,r="";if("transparent"!==n&&("string"!==t.type(n)||(a=s(n)))){if(n=l(a||n),!d.rgba&&1!==n._rgba[3]){for(o="backgroundColor"===i?e.parentNode:e;(""===r||"transparent"===r)&&o&&o.style;)try{r=t.css(o,"backgroundColor"),o=o.parentNode}catch(h){}n=n.blend(r&&"transparent"!==r?r:"_default")}n=n.toRgbaString()}try{e.style[i]=n}catch(h){}}},t.fx.step[i]=function(e){e.colorInit||(e.start=l(e.elem,i),e.end=l(e.end),e.colorInit=!0),t.cssHooks[i].set(e.elem,e.start.transition(e.end,e.pos))}})},l.hook(o),t.cssHooks.borderColor={expand:function(t){var e={};return f(["Top","Right","Bottom","Left"],function(i,s){e["border"+s+"Color"]=t}),e}},a=t.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(p),function(){function e(e){var i,s,n=e.ownerDocument.defaultView?e.ownerDocument.defaultView.getComputedStyle(e,null):e.currentStyle,a={};if(n&&n.length&&n[0]&&n[n[0]])for(s=n.length;s--;)i=n[s],"string"==typeof n[i]&&(a[t.camelCase(i)]=n[i]);else for(i in n)"string"==typeof n[i]&&(a[i]=n[i]);return a}function i(e,i){var s,a,o={};for(s in i)a=i[s],e[s]!==a&&(n[s]||(t.fx.step[s]||!isNaN(parseFloat(a)))&&(o[s]=a));return o}var s=["add","remove","toggle"],n={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};t.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(e,i){t.fx.step[i]=function(t){("none"!==t.end&&!t.setAttr||1===t.pos&&!t.setAttr)&&(p.style(t.elem,i,t.end),t.setAttr=!0)}}),t.fn.addBack||(t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.effects.animateClass=function(n,a,o,r){var h=t.speed(a,o,r);return this.queue(function(){var a,o=t(this),r=o.attr("class")||"",l=h.children?o.find("*").addBack():o;l=l.map(function(){var i=t(this);return{el:i,start:e(this)}}),a=function(){t.each(s,function(t,e){n[e]&&o[e+"Class"](n[e])})},a(),l=l.map(function(){return this.end=e(this.el[0]),this.diff=i(this.start,this.end),this}),o.attr("class",r),l=l.map(function(){var e=this,i=t.Deferred(),s=t.extend({},h,{queue:!1,complete:function(){i.resolve(e)}});return this.el.animate(this.diff,s),i.promise()}),t.when.apply(t,l.get()).done(function(){a(),t.each(arguments,function(){var e=this.el;t.each(this.diff,function(t){e.css(t,"")})}),h.complete.call(o[0])})})},t.fn.extend({addClass:function(e){return function(i,s,n,a){return s?t.effects.animateClass.call(this,{add:i},s,n,a):e.apply(this,arguments)}}(t.fn.addClass),removeClass:function(e){return function(i,s,n,a){return arguments.length>1?t.effects.animateClass.call(this,{remove:i},s,n,a):e.apply(this,arguments)}}(t.fn.removeClass),toggleClass:function(e){return function(i,s,n,a,o){return"boolean"==typeof s||void 0===s?n?t.effects.animateClass.call(this,s?{add:i}:{remove:i},n,a,o):e.apply(this,arguments):t.effects.animateClass.call(this,{toggle:i},s,n,a)}}(t.fn.toggleClass),switchClass:function(e,i,s,n,a){return t.effects.animateClass.call(this,{add:i,remove:e},s,n,a)}})}(),function(){function e(e,i,s,n){return t.isPlainObject(e)&&(i=e,e=e.effect),e={effect:e},null==i&&(i={}),t.isFunction(i)&&(n=i,s=null,i={}),("number"==typeof i||t.fx.speeds[i])&&(n=s,s=i,i={}),t.isFunction(s)&&(n=s,s=null),i&&t.extend(e,i),s=s||i.duration,e.duration=t.fx.off?0:"number"==typeof s?s:s in t.fx.speeds?t.fx.speeds[s]:t.fx.speeds._default,e.complete=n||i.complete,e}function i(e){return!e||"number"==typeof e||t.fx.speeds[e]?!0:"string"!=typeof e||t.effects.effect[e]?t.isFunction(e)?!0:"object"!=typeof e||e.effect?!1:!0:!0}t.extend(t.effects,{version:"1.11.4",save:function(t,e){for(var i=0;e.length>i;i++)null!==e[i]&&t.data(d+e[i],t[0].style[e[i]])},restore:function(t,e){var i,s;for(s=0;e.length>s;s++)null!==e[s]&&(i=t.data(d+e[s]),void 0===i&&(i=""),t.css(e[s],i))},setMode:function(t,e){return"toggle"===e&&(e=t.is(":hidden")?"show":"hide"),e},getBaseline:function(t,e){var i,s;switch(t[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=t[0]/e.height}switch(t[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=t[1]/e.width}return{x:s,y:i}},createWrapper:function(e){if(e.parent().is(".ui-effects-wrapper"))return e.parent();var i={width:e.outerWidth(!0),height:e.outerHeight(!0),"float":e.css("float")},s=t("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),n={width:e.width(),height:e.height()},a=document.activeElement;try{a.id}catch(o){a=document.body}return e.wrap(s),(e[0]===a||t.contains(e[0],a))&&t(a).focus(),s=e.parent(),"static"===e.css("position")?(s.css({position:"relative"}),e.css({position:"relative"})):(t.extend(i,{position:e.css("position"),zIndex:e.css("z-index")}),t.each(["top","left","bottom","right"],function(t,s){i[s]=e.css(s),isNaN(parseInt(i[s],10))&&(i[s]="auto")}),e.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),e.css(n),s.css(i).show()},removeWrapper:function(e){var i=document.activeElement;return e.parent().is(".ui-effects-wrapper")&&(e.parent().replaceWith(e),(e[0]===i||t.contains(e[0],i))&&t(i).focus()),e},setTransition:function(e,i,s,n){return n=n||{},t.each(i,function(t,i){var a=e.cssUnit(i);a[0]>0&&(n[i]=a[0]*s+a[1])}),n}}),t.fn.extend({effect:function(){function i(e){function i(){t.isFunction(a)&&a.call(n[0]),t.isFunction(e)&&e()}var n=t(this),a=s.complete,r=s.mode;(n.is(":hidden")?"hide"===r:"show"===r)?(n[r](),i()):o.call(n[0],s,i)}var s=e.apply(this,arguments),n=s.mode,a=s.queue,o=t.effects.effect[s.effect];return t.fx.off||!o?n?this[n](s.duration,s.complete):this.each(function(){s.complete&&s.complete.call(this)}):a===!1?this.each(i):this.queue(a||"fx",i)},show:function(t){return function(s){if(i(s))return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="show",this.effect.call(this,n)}}(t.fn.show),hide:function(t){return function(s){if(i(s))return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="hide",this.effect.call(this,n)}}(t.fn.hide),toggle:function(t){return function(s){if(i(s)||"boolean"==typeof s)return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="toggle",this.effect.call(this,n)}}(t.fn.toggle),cssUnit:function(e){var i=this.css(e),s=[];return t.each(["em","px","%","pt"],function(t,e){i.indexOf(e)>0&&(s=[parseFloat(i),e])}),s}})}(),function(){var e={};t.each(["Quad","Cubic","Quart","Quint","Expo"],function(t,i){e[i]=function(e){return Math.pow(e,t+2)}}),t.extend(e,{Sine:function(t){return 1-Math.cos(t*Math.PI/2)},Circ:function(t){return 1-Math.sqrt(1-t*t)},Elastic:function(t){return 0===t||1===t?t:-Math.pow(2,8*(t-1))*Math.sin((80*(t-1)-7.5)*Math.PI/15)},Back:function(t){return t*t*(3*t-2)},Bounce:function(t){for(var e,i=4;((e=Math.pow(2,--i))-1)/11>t;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*e-2)/22-t,2)}}),t.each(e,function(e,i){t.easing["easeIn"+e]=i,t.easing["easeOut"+e]=function(t){return 1-i(1-t)},t.easing["easeInOut"+e]=function(t){return.5>t?i(2*t)/2:1-i(-2*t+2)/2}})}(),t.effects,t.effects.effect.blind=function(e,i){var s,n,a,o=t(this),r=/up|down|vertical/,h=/up|left|vertical|horizontal/,l=["position","top","bottom","left","right","height","width"],u=t.effects.setMode(o,e.mode||"hide"),c=e.direction||"up",d=r.test(c),p=d?"height":"width",f=d?"top":"left",m=h.test(c),g={},v="show"===u;o.parent().is(".ui-effects-wrapper")?t.effects.save(o.parent(),l):t.effects.save(o,l),o.show(),s=t.effects.createWrapper(o).css({overflow:"hidden"}),n=s[p](),a=parseFloat(s.css(f))||0,g[p]=v?n:0,m||(o.css(d?"bottom":"right",0).css(d?"top":"left","auto").css({position:"absolute"}),g[f]=v?a:n+a),v&&(s.css(p,0),m||s.css(f,a+n)),s.animate(g,{duration:e.duration,easing:e.easing,queue:!1,complete:function(){"hide"===u&&o.hide(),t.effects.restore(o,l),t.effects.removeWrapper(o),i()}})},t.effects.effect.bounce=function(e,i){var s,n,a,o=t(this),r=["position","top","bottom","left","right","height","width"],h=t.effects.setMode(o,e.mode||"effect"),l="hide"===h,u="show"===h,c=e.direction||"up",d=e.distance,p=e.times||5,f=2*p+(u||l?1:0),m=e.duration/f,g=e.easing,v="up"===c||"down"===c?"top":"left",_="up"===c||"left"===c,b=o.queue(),y=b.length;for((u||l)&&r.push("opacity"),t.effects.save(o,r),o.show(),t.effects.createWrapper(o),d||(d=o["top"===v?"outerHeight":"outerWidth"]()/3),u&&(a={opacity:1},a[v]=0,o.css("opacity",0).css(v,_?2*-d:2*d).animate(a,m,g)),l&&(d/=Math.pow(2,p-1)),a={},a[v]=0,s=0;p>s;s++)n={},n[v]=(_?"-=":"+=")+d,o.animate(n,m,g).animate(a,m,g),d=l?2*d:d/2;l&&(n={opacity:0},n[v]=(_?"-=":"+=")+d,o.animate(n,m,g)),o.queue(function(){l&&o.hide(),t.effects.restore(o,r),t.effects.removeWrapper(o),i()}),y>1&&b.splice.apply(b,[1,0].concat(b.splice(y,f+1))),o.dequeue()},t.effects.effect.clip=function(e,i){var s,n,a,o=t(this),r=["position","top","bottom","left","right","height","width"],h=t.effects.setMode(o,e.mode||"hide"),l="show"===h,u=e.direction||"vertical",c="vertical"===u,d=c?"height":"width",p=c?"top":"left",f={};t.effects.save(o,r),o.show(),s=t.effects.createWrapper(o).css({overflow:"hidden"}),n="IMG"===o[0].tagName?s:o,a=n[d](),l&&(n.css(d,0),n.css(p,a/2)),f[d]=l?a:0,f[p]=l?0:a/2,n.animate(f,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){l||o.hide(),t.effects.restore(o,r),t.effects.removeWrapper(o),i()}})},t.effects.effect.drop=function(e,i){var s,n=t(this),a=["position","top","bottom","left","right","opacity","height","width"],o=t.effects.setMode(n,e.mode||"hide"),r="show"===o,h=e.direction||"left",l="up"===h||"down"===h?"top":"left",u="up"===h||"left"===h?"pos":"neg",c={opacity:r?1:0};t.effects.save(n,a),n.show(),t.effects.createWrapper(n),s=e.distance||n["top"===l?"outerHeight":"outerWidth"](!0)/2,r&&n.css("opacity",0).css(l,"pos"===u?-s:s),c[l]=(r?"pos"===u?"+=":"-=":"pos"===u?"-=":"+=")+s,n.animate(c,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){"hide"===o&&n.hide(),t.effects.restore(n,a),t.effects.removeWrapper(n),i()}})},t.effects.effect.explode=function(e,i){function s(){b.push(this),b.length===c*d&&n()}function n(){p.css({visibility:"visible"}),t(b).remove(),m||p.hide(),i()}var a,o,r,h,l,u,c=e.pieces?Math.round(Math.sqrt(e.pieces)):3,d=c,p=t(this),f=t.effects.setMode(p,e.mode||"hide"),m="show"===f,g=p.show().css("visibility","hidden").offset(),v=Math.ceil(p.outerWidth()/d),_=Math.ceil(p.outerHeight()/c),b=[];for(a=0;c>a;a++)for(h=g.top+a*_,u=a-(c-1)/2,o=0;d>o;o++)r=g.left+o*v,l=o-(d-1)/2,p.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-o*v,top:-a*_}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:v,height:_,left:r+(m?l*v:0),top:h+(m?u*_:0),opacity:m?0:1}).animate({left:r+(m?0:l*v),top:h+(m?0:u*_),opacity:m?1:0},e.duration||500,e.easing,s)},t.effects.effect.fade=function(e,i){var s=t(this),n=t.effects.setMode(s,e.mode||"toggle");s.animate({opacity:n},{queue:!1,duration:e.duration,easing:e.easing,complete:i})},t.effects.effect.fold=function(e,i){var s,n,a=t(this),o=["position","top","bottom","left","right","height","width"],r=t.effects.setMode(a,e.mode||"hide"),h="show"===r,l="hide"===r,u=e.size||15,c=/([0-9]+)%/.exec(u),d=!!e.horizFirst,p=h!==d,f=p?["width","height"]:["height","width"],m=e.duration/2,g={},v={};t.effects.save(a,o),a.show(),s=t.effects.createWrapper(a).css({overflow:"hidden"}),n=p?[s.width(),s.height()]:[s.height(),s.width()],c&&(u=parseInt(c[1],10)/100*n[l?0:1]),h&&s.css(d?{height:0,width:u}:{height:u,width:0}),g[f[0]]=h?n[0]:u,v[f[1]]=h?n[1]:0,s.animate(g,m,e.easing).animate(v,m,e.easing,function(){l&&a.hide(),t.effects.restore(a,o),t.effects.removeWrapper(a),i()})},t.effects.effect.highlight=function(e,i){var s=t(this),n=["backgroundImage","backgroundColor","opacity"],a=t.effects.setMode(s,e.mode||"show"),o={backgroundColor:s.css("backgroundColor")};"hide"===a&&(o.opacity=0),t.effects.save(s,n),s.show().css({backgroundImage:"none",backgroundColor:e.color||"#ffff99"}).animate(o,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){"hide"===a&&s.hide(),t.effects.restore(s,n),i()}})},t.effects.effect.size=function(e,i){var s,n,a,o=t(this),r=["position","top","bottom","left","right","width","height","overflow","opacity"],h=["position","top","bottom","left","right","overflow","opacity"],l=["width","height","overflow"],u=["fontSize"],c=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],d=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],p=t.effects.setMode(o,e.mode||"effect"),f=e.restore||"effect"!==p,m=e.scale||"both",g=e.origin||["middle","center"],v=o.css("position"),_=f?r:h,b={height:0,width:0,outerHeight:0,outerWidth:0};"show"===p&&o.show(),s={height:o.height(),width:o.width(),outerHeight:o.outerHeight(),outerWidth:o.outerWidth()},"toggle"===e.mode&&"show"===p?(o.from=e.to||b,o.to=e.from||s):(o.from=e.from||("show"===p?b:s),o.to=e.to||("hide"===p?b:s)),a={from:{y:o.from.height/s.height,x:o.from.width/s.width},to:{y:o.to.height/s.height,x:o.to.width/s.width}},("box"===m||"both"===m)&&(a.from.y!==a.to.y&&(_=_.concat(c),o.from=t.effects.setTransition(o,c,a.from.y,o.from),o.to=t.effects.setTransition(o,c,a.to.y,o.to)),a.from.x!==a.to.x&&(_=_.concat(d),o.from=t.effects.setTransition(o,d,a.from.x,o.from),o.to=t.effects.setTransition(o,d,a.to.x,o.to))),("content"===m||"both"===m)&&a.from.y!==a.to.y&&(_=_.concat(u).concat(l),o.from=t.effects.setTransition(o,u,a.from.y,o.from),o.to=t.effects.setTransition(o,u,a.to.y,o.to)),t.effects.save(o,_),o.show(),t.effects.createWrapper(o),o.css("overflow","hidden").css(o.from),g&&(n=t.effects.getBaseline(g,s),o.from.top=(s.outerHeight-o.outerHeight())*n.y,o.from.left=(s.outerWidth-o.outerWidth())*n.x,o.to.top=(s.outerHeight-o.to.outerHeight)*n.y,o.to.left=(s.outerWidth-o.to.outerWidth)*n.x),o.css(o.from),("content"===m||"both"===m)&&(c=c.concat(["marginTop","marginBottom"]).concat(u),d=d.concat(["marginLeft","marginRight"]),l=r.concat(c).concat(d),o.find("*[width]").each(function(){var i=t(this),s={height:i.height(),width:i.width(),outerHeight:i.outerHeight(),outerWidth:i.outerWidth()};f&&t.effects.save(i,l),i.from={height:s.height*a.from.y,width:s.width*a.from.x,outerHeight:s.outerHeight*a.from.y,outerWidth:s.outerWidth*a.from.x},i.to={height:s.height*a.to.y,width:s.width*a.to.x,outerHeight:s.height*a.to.y,outerWidth:s.width*a.to.x},a.from.y!==a.to.y&&(i.from=t.effects.setTransition(i,c,a.from.y,i.from),i.to=t.effects.setTransition(i,c,a.to.y,i.to)),a.from.x!==a.to.x&&(i.from=t.effects.setTransition(i,d,a.from.x,i.from),i.to=t.effects.setTransition(i,d,a.to.x,i.to)),i.css(i.from),i.animate(i.to,e.duration,e.easing,function(){f&&t.effects.restore(i,l)})})),o.animate(o.to,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){0===o.to.opacity&&o.css("opacity",o.from.opacity),"hide"===p&&o.hide(),t.effects.restore(o,_),f||("static"===v?o.css({position:"relative",top:o.to.top,left:o.to.left}):t.each(["top","left"],function(t,e){o.css(e,function(e,i){var s=parseInt(i,10),n=t?o.to.left:o.to.top;return"auto"===i?n+"px":s+n+"px"})})),t.effects.removeWrapper(o),i()}})},t.effects.effect.scale=function(e,i){var s=t(this),n=t.extend(!0,{},e),a=t.effects.setMode(s,e.mode||"effect"),o=parseInt(e.percent,10)||(0===parseInt(e.percent,10)?0:"hide"===a?0:100),r=e.direction||"both",h=e.origin,l={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()},u={y:"horizontal"!==r?o/100:1,x:"vertical"!==r?o/100:1};n.effect="size",n.queue=!1,n.complete=i,"effect"!==a&&(n.origin=h||["middle","center"],n.restore=!0),n.from=e.from||("show"===a?{height:0,width:0,outerHeight:0,outerWidth:0}:l),n.to={height:l.height*u.y,width:l.width*u.x,outerHeight:l.outerHeight*u.y,outerWidth:l.outerWidth*u.x},n.fade&&("show"===a&&(n.from.opacity=0,n.to.opacity=1),"hide"===a&&(n.from.opacity=1,n.to.opacity=0)),s.effect(n)},t.effects.effect.puff=function(e,i){var s=t(this),n=t.effects.setMode(s,e.mode||"hide"),a="hide"===n,o=parseInt(e.percent,10)||150,r=o/100,h={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()};t.extend(e,{effect:"scale",queue:!1,fade:!0,mode:n,complete:i,percent:a?o:100,from:a?h:{height:h.height*r,width:h.width*r,outerHeight:h.outerHeight*r,outerWidth:h.outerWidth*r}}),s.effect(e)},t.effects.effect.pulsate=function(e,i){var s,n=t(this),a=t.effects.setMode(n,e.mode||"show"),o="show"===a,r="hide"===a,h=o||"hide"===a,l=2*(e.times||5)+(h?1:0),u=e.duration/l,c=0,d=n.queue(),p=d.length;for((o||!n.is(":visible"))&&(n.css("opacity",0).show(),c=1),s=1;l>s;s++)n.animate({opacity:c},u,e.easing),c=1-c;n.animate({opacity:c},u,e.easing),n.queue(function(){r&&n.hide(),i()}),p>1&&d.splice.apply(d,[1,0].concat(d.splice(p,l+1))),n.dequeue()},t.effects.effect.shake=function(e,i){var s,n=t(this),a=["position","top","bottom","left","right","height","width"],o=t.effects.setMode(n,e.mode||"effect"),r=e.direction||"left",h=e.distance||20,l=e.times||3,u=2*l+1,c=Math.round(e.duration/u),d="up"===r||"down"===r?"top":"left",p="up"===r||"left"===r,f={},m={},g={},v=n.queue(),_=v.length;for(t.effects.save(n,a),n.show(),t.effects.createWrapper(n),f[d]=(p?"-=":"+=")+h,m[d]=(p?"+=":"-=")+2*h,g[d]=(p?"-=":"+=")+2*h,n.animate(f,c,e.easing),s=1;l>s;s++)n.animate(m,c,e.easing).animate(g,c,e.easing);n.animate(m,c,e.easing).animate(f,c/2,e.easing).queue(function(){"hide"===o&&n.hide(),t.effects.restore(n,a),t.effects.removeWrapper(n),i()}),_>1&&v.splice.apply(v,[1,0].concat(v.splice(_,u+1))),n.dequeue()},t.effects.effect.slide=function(e,i){var s,n=t(this),a=["position","top","bottom","left","right","width","height"],o=t.effects.setMode(n,e.mode||"show"),r="show"===o,h=e.direction||"left",l="up"===h||"down"===h?"top":"left",u="up"===h||"left"===h,c={};t.effects.save(n,a),n.show(),s=e.distance||n["top"===l?"outerHeight":"outerWidth"](!0),t.effects.createWrapper(n).css({overflow:"hidden"}),r&&n.css(l,u?isNaN(s)?"-"+s:-s:s),c[l]=(r?u?"+=":"-=":u?"-=":"+=")+s,n.animate(c,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){"hide"===o&&n.hide(),t.effects.restore(n,a),t.effects.removeWrapper(n),i()}})},t.effects.effect.transfer=function(e,i){var s=t(this),n=t(e.to),a="fixed"===n.css("position"),o=t("body"),r=a?o.scrollTop():0,h=a?o.scrollLeft():0,l=n.offset(),u={top:l.top-r,left:l.left-h,height:n.innerHeight(),width:n.innerWidth()},c=s.offset(),d=t("<div class='ui-effects-transfer'></div>").appendTo(document.body).addClass(e.className).css({top:c.top-r,left:c.left-h,height:s.innerHeight(),width:s.innerWidth(),position:a?"fixed":"absolute"}).animate(u,e.duration,e.easing,function(){d.remove(),i()})}});

File: public/js/jquery.autogrow-textarea.js
Match lines: 1
23|            }).appendTo(document.body);

File: public/js/metahuman-standard/components/_mobile_bottom_sheet.js
Match lines: 2
133|      $overlay.appendTo(document.body);
137|      $sheet.appendTo(document.body);

File: public/js/metahuman-standard/components/_shell_offcanvas.js
Match lines: 6
148|    instance.$backdrop.appendTo(document.body);
151|    instance.$wrapper.appendTo(document.body);
158|    instance.$modal.appendTo(document.body);
410|    $backdrop.appendTo(document.body);
413|    $wrapper.appendTo(document.body);
416|    $modal.appendTo(document.body);

File: public/js/metahuman-standard/pages/organizational_structure_index.js
Match lines: 1
655|        $('.modal-backdrop').last().css('z-index', 1095);

File: public/js/offboarding/visualizar_atividades.js
Match lines: 1
2986|        const backdrops = document.querySelectorAll('.modal-backdrop');

File: public/js/people-analytics/import/chart-import-handler.js
Match lines: 1
684|            const backdrop = document.querySelector('.modal-backdrop');

File: public/js/projects/GanttChart.js
Match lines: 1
4209|                        const backdrop = document.querySelector('.modal-backdrop');

File: public/js/projects/ProfessionalGanttChart.js
Match lines: 1
4209|                        const backdrop = document.querySelector('.modal-backdrop');

File: public/js/recommendations-network-ported/jquery-ui.min.js
Match lines: 1
11|f&&e.effects.save(i,l),i.from={height:s.height*a.from.y,width:s.width*a.from.x,outerHeight:s.outerHeight*a.from.y,outerWidth:s.outerWidth*a.from.x},i.to={height:s.height*a.to.y,width:s.width*a.to.x,outerHeight:s.height*a.to.y,outerWidth:s.width*a.to.x},a.from.y!==a.to.y&&(i.from=e.effects.setTransition(i,d,a.from.y,i.from),i.to=e.effects.setTransition(i,d,a.to.y,i.to)),a.from.x!==a.to.x&&(i.from=e.effects.setTransition(i,c,a.from.x,i.from),i.to=e.effects.setTransition(i,c,a.to.x,i.to)),i.css(i.from),i.animate(i.to,t.duration,t.easing,function(){f&&e.effects.restore(i,l)})})),o.animate(o.to,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){0===o.to.opacity&&o.css("opacity",o.from.opacity),"hide"===p&&o.hide(),e.effects.restore(o,y),f||("static"===v?o.css({position:"relative",top:o.to.top,left:o.to.left}):e.each(["top","left"],function(e,t){o.css(t,function(t,i){var s=parseInt(i,10),n=e?o.to.left:o.to.top;return"auto"===i?n+"px":s+n+"px"})})),e.effects.removeWrapper(o),i()}})},e.effects.effect.scale=function(t,i){var s=e(this),n=e.extend(!0,{},t),a=e.effects.setMode(s,t.mode||"effect"),o=parseInt(t.percent,10)||(0===parseInt(t.percent,10)?0:"hide"===a?0:100),r=t.direction||"both",h=t.origin,l={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()},u={y:"horizontal"!==r?o/100:1,x:"vertical"!==r?o/100:1};n.effect="size",n.queue=!1,n.complete=i,"effect"!==a&&(n.origin=h||["middle","center"],n.restore=!0),n.from=t.from||("show"===a?{height:0,width:0,outerHeight:0,outerWidth:0}:l),n.to={height:l.height*u.y,width:l.width*u.x,outerHeight:l.outerHeight*u.y,outerWidth:l.outerWidth*u.x},n.fade&&("show"===a&&(n.from.opacity=0,n.to.opacity=1),"hide"===a&&(n.from.opacity=1,n.to.opacity=0)),s.effect(n)},e.effects.effect.puff=function(t,i){var s=e(this),n=e.effects.setMode(s,t.mode||"hide"),a="hide"===n,o=parseInt(t.percent,10)||150,r=o/100,h={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()};e.extend(t,{effect:"scale",queue:!1,fade:!0,mode:n,complete:i,percent:a?o:100,from:a?h:{height:h.height*r,width:h.width*r,outerHeight:h.outerHeight*r,outerWidth:h.outerWidth*r}}),s.effect(t)},e.effects.effect.pulsate=function(t,i){var s,n=e(this),a=e.effects.setMode(n,t.mode||"show"),o="show"===a,r="hide"===a,h=o||"hide"===a,l=2*(t.times||5)+(h?1:0),u=t.duration/l,d=0,c=n.queue(),p=c.length;for((o||!n.is(":visible"))&&(n.css("opacity",0).show(),d=1),s=1;l>s;s++)n.animate({opacity:d},u,t.easing),d=1-d;n.animate({opacity:d},u,t.easing),n.queue(function(){r&&n.hide(),i()}),p>1&&c.splice.apply(c,[1,0].concat(c.splice(p,l+1))),n.dequeue()},e.effects.effect.shake=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","height","width"],o=e.effects.setMode(n,t.mode||"effect"),r=t.direction||"left",h=t.distance||20,l=t.times||3,u=2*l+1,d=Math.round(t.duration/u),c="up"===r||"down"===r?"top":"left",p="up"===r||"left"===r,f={},m={},g={},v=n.queue(),y=v.length;for(e.effects.save(n,a),n.show(),e.effects.createWrapper(n),f[c]=(p?"-=":"+=")+h,m[c]=(p?"+=":"-=")+2*h,g[c]=(p?"-=":"+=")+2*h,n.animate(f,d,t.easing),s=1;l>s;s++)n.animate(m,d,t.easing).animate(g,d,t.easing);n.animate(m,d,t.easing).animate(f,d/2,t.easing).queue(function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}),y>1&&v.splice.apply(v,[1,0].concat(v.splice(y,u+1))),n.dequeue()},e.effects.effect.slide=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","width","height"],o=e.effects.setMode(n,t.mode||"show"),r="show"===o,h=t.direction||"left",l="up"===h||"down"===h?"top":"left",u="up"===h||"left"===h,d={};e.effects.save(n,a),n.show(),s=t.distance||n["top"===l?"outerHeight":"outerWidth"](!0),e.effects.createWrapper(n).css({overflow:"hidden"}),r&&n.css(l,u?isNaN(s)?"-"+s:-s:s),d[l]=(r?u?"+=":"-=":u?"-=":"+=")+s,n.animate(d,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}})},e.effects.effect.transfer=function(t,i){var s=e(this),n=e(t.to),a="fixed"===n.css("position"),o=e("body"),r=a?o.scrollTop():0,h=a?o.scrollLeft():0,l=n.offset(),u={top:l.top-r,left:l.left-h,height:n.innerHeight(),width:n.innerWidth()},d=s.offset(),c=e("<div class='ui-effects-transfer'></div>").appendTo(document.body).addClass(t.className).css({top:d.top-r,left:d.left-h,height:s.innerHeight(),width:s.innerWidth(),position:a?"fixed":"absolute"}).animate(u,t.duration,t.easing,function(){c.remove(),i()})},e.widget("ui.progressbar",{version:"1.11.2",options:{max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min}),this.valueDiv=e("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element),this._refreshValue()},_destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.valueDiv.remove()},value:function(e){return void 0===e?this.options.value:(this.options.value=this._constrainedValue(e),this._refreshValue(),void 0)},_constrainedValue:function(e){return void 0===e&&(e=this.options.value),this.indeterminate=e===!1,"number"!=typeof e&&(e=0),this.indeterminate?!1:Math.min(this.options.max,Math.max(this.min,e))},_setOptions:function(e){var t=e.value;delete e.value,this._super(e),this.options.value=this._constrainedValue(t),this._refreshValue()},_setOption:function(e,t){"max"===e&&(t=Math.max(this.min,t)),"disabled"===e&&this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this._super(e,t)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var t=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||t>this.min).toggleClass("ui-corner-right",t===this.options.max).width(i.toFixed(0)+"%"),this.element.toggleClass("ui-progressbar-indeterminate",this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=e("<div class='ui-progressbar-overlay'></div>").appendTo(this.valueDiv))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":t}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==t&&(this.oldValue=t,this._trigger("change")),t===this.options.max&&this._trigger("complete")}}),e.widget("ui.selectable",e.ui.mouse,{version:"1.11.2",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var t,i=this;this.element.addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){t=e(i.options.filter,i.element[0]),t.addClass("ui-selectee"),t.each(function(){var t=e(this),i=t.offset();e.data(this,"selectable-item",{element:this,$element:t,left:i.left,top:i.top,right:i.left+t.outerWidth(),bottom:i.top+t.outerHeight(),startselected:!1,selected:t.hasClass("ui-selected"),selecting:t.hasClass("ui-selecting"),unselecting:t.hasClass("ui-unselecting")})})},this.refresh(),this.selectees=t.addClass("ui-selectee"),this._mouseInit(),this.helper=e("<div class='ui-selectable-helper'></div>")},_destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item"),this.element.removeClass("ui-selectable ui-selectable-disabled"),this._mouseDestroy()},_mouseStart:function(t){var i=this,s=this.options;this.opos=[t.pageX,t.pageY],this.options.disabled||(this.selectees=e(s.filter,this.element[0]),this._trigger("start",t),e(s.appendTo).append(this.helper),this.helper.css({left:t.pageX,top:t.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var s=e.data(this,"selectable-item");s.startselected=!0,t.metaKey||t.ctrlKey||(s.$element.removeClass("ui-selected"),s.selected=!1,s.$element.addClass("ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",t,{unselecting:s.element}))}),e(t.target).parents().addBack().each(function(){var s,n=e.data(this,"selectable-item");return n?(s=!t.metaKey&&!t.ctrlKey||!n.$element.hasClass("ui-selected"),n.$element.removeClass(s?"ui-unselecting":"ui-selected").addClass(s?"ui-selecting":"ui-unselecting"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger("selecting",t,{selecting:n.element}):i._trigger("unselecting",t,{unselecting:n.element}),!1):void 0}))},_mouseDrag:function(t){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,a=this.opos[0],o=this.opos[1],r=t.pageX,h=t.pageY;return a>r&&(i=r,r=a,a=i),o>h&&(i=h,h=o,o=i),this.helper.css({left:a,top:o,width:r-a,height:h-o}),this.selectees.each(function(){var i=e.data(this,"selectable-item"),l=!1;i&&i.element!==s.element[0]&&("touch"===n.tolerance?l=!(i.left>r||a>i.right||i.top>h||o>i.bottom):"fit"===n.tolerance&&(l=i.left>a&&r>i.right&&i.top>o&&h>i.bottom),l?(i.selected&&(i.$element.removeClass("ui-selected"),i.selected=!1),i.unselecting&&(i.$element.removeClass("ui-unselecting"),i.unselecting=!1),i.selecting||(i.$element.addClass("ui-selecting"),i.selecting=!0,s._trigger("selecting",t,{selecting:i.element}))):(i.selecting&&((t.metaKey||t.ctrlKey)&&i.startselected?(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.$element.addClass("ui-selected"),i.selected=!0):(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.startselected&&(i.$element.addClass("ui-unselecting"),i.unselecting=!0),s._trigger("unselecting",t,{unselecting:i.element}))),i.selected&&(t.metaKey||t.ctrlKey||i.startselected||(i.$element.removeClass("ui-selected"),i.selected=!1,i.$element.addClass("ui-unselecting"),i.unselecting=!0,s._trigger("unselecting",t,{unselecting:i.element})))))}),!1}},_mouseStop:function(t){var i=this;return this.dragged=!1,e(".ui-unselecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-unselecting"),s.unselecting=!1,s.startselected=!1,i._trigger("unselected",t,{unselected:s.element})}),e(".ui-selecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-selecting").addClass("ui-selected"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger("selected",t,{selected:s.element})}),this._trigger("stop",t),this.helper.remove(),!1}}),e.widget("ui.selectmenu",{version:"1.11.2",defaultElement:"<select>",options:{appendTo:null,disabled:null,icons:{button:"ui-icon-triangle-1-s"},position:{my:"left top",at:"left bottom",collision:"none"},width:null,change:null,close:null,focus:null,open:null,select:null},_create:function(){var e=this.element.uniqueId().attr("id");this.ids={element:e,button:e+"-button",menu:e+"-menu"},this._drawButton(),this._drawMenu(),this.options.disabled&&this.disable()},_drawButton:function(){var t=this,i=this.element.attr("tabindex");this.label=e("label[for='"+this.ids.element+"']").attr("for",this.ids.button),this._on(this.label,{click:function(e){this.button.focus(),e.preventDefault()}}),this.element.hide(),this.button=e("<span>",{"class":"ui-selectmenu-button ui-widget ui-state-default ui-corner-all",tabindex:i||this.options.disabled?-1:0,id:this.ids.button,role:"combobox","aria-expanded":"false","aria-autocomplete":"list","aria-owns":this.ids.menu,"aria-haspopup":"true"}).insertAfter(this.element),e("<span>",{"class":"ui-icon "+this.options.icons.button}).prependTo(this.button),this.buttonText=e("<span>",{"class":"ui-selectmenu-text"}).appendTo(this.button),this._setText(this.buttonText,this.element.find("option:selected").text()),this._resizeButton(),this._on(this.button,this._buttonEvents),this.button.one("focusin",function(){t.menuItems||t._refreshMenu()}),this._hoverable(this.button),this._focusable(this.button)},_drawMenu:function(){var t=this;this.menu=e("<ul>",{"aria-hidden":"true","aria-labelledby":this.ids.button,id:this.ids.menu}),this.menuWrap=e("<div>",{"class":"ui-selectmenu-menu ui-front"}).append(this.menu).appendTo(this._appendTo()),this.menuInstance=this.menu.menu({role:"listbox",select:function(e,i){e.preventDefault(),t._setSelection(),t._select(i.item.data("ui-selectmenu-item"),e)},focus:function(e,i){var s=i.item.data("ui-selectmenu-item");null!=t.focusIndex&&s.index!==t.focusIndex&&(t._trigger("focus",e,{item:s}),t.isOpen||t._select(s,e)),t.focusIndex=s.index,t.button.attr("aria-activedescendant",t.menuItems.eq(s.index).attr("id"))}}).menu("instance"),this.menu.addClass("ui-corner-bottom").removeClass("ui-corner-all"),this.menuInstance._off(this.menu,"mouseleave"),this.menuInstance._closeOnDocumentClick=function(){return!1},this.menuInstance._isDivider=function(){return!1}},refresh:function(){this._refreshMenu(),this._setText(this.buttonText,this._getSelectedItem().text()),this.options.width||this._resizeButton()},_refreshMenu:function(){this.menu.empty();var e,t=this.element.find("option");t.length&&(this._parseOptions(t),this._renderMenu(this.menu,this.items),this.menuInstance.refresh(),this.menuItems=this.menu.find("li").not(".ui-selectmenu-optgroup"),e=this._getSelectedItem(),this.menuInstance.focus(null,e),this._setAria(e.data("ui-selectmenu-item")),this._setOption("disabled",this.element.prop("disabled")))},open:function(e){this.options.disabled||(this.menuItems?(this.menu.find(".ui-state-focus").removeClass("ui-state-focus"),this.menuInstance.focus(null,this._getSelectedItem())):this._refreshMenu(),this.isOpen=!0,this._toggleAttr(),this._resizeMenu(),this._position(),this._on(this.document,this._documentClick),this._trigger("open",e))},_position:function(){this.menuWrap.position(e.extend({of:this.button},this.options.position))},close:function(e){this.isOpen&&(this.isOpen=!1,this._toggleAttr(),this.range=null,this._off(this.document),this._trigger("close",e))},widget:function(){return this.button},menuWidget:function(){return this.menu},_renderMenu:function(t,i){var s=this,n="";e.each(i,function(i,a){a.optgroup!==n&&(e("<li>",{"class":"ui-selectmenu-optgroup ui-menu-divider"+(a.element.parent("optgroup").prop("disabled")?" ui-state-disabled":""),text:a.optgroup}).appendTo(t),n=a.optgroup),s._renderItemData(t,a)})},_renderItemData:function(e,t){return this._renderItem(e,t).data("ui-selectmenu-item",t)},_renderItem:function(t,i){var s=e("<li>");return i.disabled&&s.addClass("ui-state-disabled"),this._setText(s,i.label),s.appendTo(t)},_setText:function(e,t){t?e.text(t):e.html("&#160;")},_move:function(e,t){var i,s,n=".ui-menu-item";this.isOpen?i=this.menuItems.eq(this.focusIndex):(i=this.menuItems.eq(this.element[0].selectedIndex),n+=":not(.ui-state-disabled)"),s="first"===e||"last"===e?i["first"===e?"prevAll":"nextAll"](n).eq(-1):i[e+"All"](n).eq(0),s.length&&this.menuInstance.focus(t,s)},_getSelectedItem:function(){return this.menuItems.eq(this.element[0].selectedIndex)},_toggle:function(e){this[this.isOpen?"close":"open"](e)},_setSelection:function(){var e;this.range&&(window.getSelection?(e=window.getSelection(),e.removeAllRanges(),e.addRange(this.range)):this.range.select(),this.button.focus())},_documentClick:{mousedown:function(t){this.isOpen&&(e(t.target).closest(".ui-selectmenu-menu, #"+this.ids.button).length||this.close(t))}},_buttonEvents:{mousedown:function(){var e;window.getSelection?(e=window.getSelection(),e.rangeCount&&(this.range=e.getRangeAt(0))):this.range=document.selection.createRange()},click:function(e){this._setSelection(),this._toggle(e)},keydown:function(t){var i=!0;switch(t.keyCode){case e.ui.keyCode.TAB:case e.ui.keyCode.ESCAPE:this.close(t),i=!1;break;case e.ui.keyCode.ENTER:this.isOpen&&this._selectFocusedItem(t);break;case e.ui.keyCode.UP:t.altKey?this._toggle(t):this._move("prev",t);break;case e.ui.keyCode.DOWN:t.altKey?this._toggle(t):this._move("next",t);break;case e.ui.keyCode.SPACE:this.isOpen?this._selectFocusedItem(t):this._toggle(t);break;case e.ui.keyCode.LEFT:this._move("prev",t);break;case e.ui.keyCode.RIGHT:this._move("next",t);break;case e.ui.keyCode.HOME:case e.ui.keyCode.PAGE_UP:this._move("first",t);break;case e.ui.keyCode.END:case e.ui.keyCode.PAGE_DOWN:this._move("last",t);break;default:this.menu.trigger(t),i=!1}i&&t.preventDefault()}},_selectFocusedItem:function(e){var t=this.menuItems.eq(this.focusIndex);t.hasClass("ui-state-disabled")||this._select(t.data("ui-selectmenu-item"),e)},_select:function(e,t){var i=this.element[0].selectedIndex;this.element[0].selectedIndex=e.index,this._setText(this.buttonText,e.label),this._setAria(e),this._trigger("select",t,{item:e}),e.index!==i&&this._trigger("change",t,{item:e}),this.close(t)},_setAria:function(e){var t=this.menuItems.eq(e.index).attr("id");this.button.attr({"aria-labelledby":t,"aria-activedescendant":t}),this.menu.attr("aria-activedescendant",t)},_setOption:function(e,t){"icons"===e&&this.button.find("span.ui-icon").removeClass(this.options.icons.button).addClass(t.button),this._super(e,t),"appendTo"===e&&this.menuWrap.appendTo(this._appendTo()),"disabled"===e&&(this.menuInstance.option("disabled",t),this.button.toggleClass("ui-state-disabled",t).attr("aria-disabled",t),this.element.prop("disabled",t),t?(this.button.attr("tabindex",-1),this.close()):this.button.attr("tabindex",0)),"width"===e&&this._resizeButton()},_appendTo:function(){var t=this.options.appendTo;return t&&(t=t.jquery||t.nodeType?e(t):this.document.find(t).eq(0)),t&&t[0]||(t=this.element.closest(".ui-front")),t.length||(t=this.document[0].body),t},_toggleAttr:function(){this.button.toggleClass("ui-corner-top",this.isOpen).toggleClass("ui-corner-all",!this.isOpen).attr("aria-expanded",this.isOpen),this.menuWrap.toggleClass("ui-selectmenu-open",this.isOpen),this.menu.attr("aria-hidden",!this.isOpen)},_resizeButton:function(){var e=this.options.width;e||(e=this.element.show().outerWidth(),this.element.hide()),this.button.outerWidth(e)},_resizeMenu:function(){this.menu.outerWidth(Math.max(this.button.outerWidth(),this.menu.width("").outerWidth()+1))},_getCreateOptions:function(){return{disabled:this.element.prop("disabled")}},_parseOptions:function(t){var i=[];t.each(function(t,s){var n=e(s),a=n.parent("optgroup");i.push({element:n,index:t,value:n.attr("value"),label:n.text(),optgroup:a.attr("label")||"",disabled:a.prop("disabled")||n.prop("disabled")})}),this.items=i},_destroy:function(){this.menuWrap.remove(),this.button.remove(),this.element.show(),this.element.removeUniqueId(),this.label.attr("for",this.ids.element)}}),e.widget("ui.slider",e.ui.mouse,{version:"1.11.2",widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},numPages:5,_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this._calculateNewMax(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget"+" ui-widget-content"+" ui-corner-all"),this._refresh(),this._setOption("disabled",this.options.disabled),this._animateOff=!1},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var t,i,s=this.options,n=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),a="<span class='ui-slider-handle ui-state-default ui-corner-all' tabindex='0'></span>",o=[];for(i=s.values&&s.values.length||1,n.length>i&&(n.slice(i).remove(),n=n.slice(0,i)),t=n.length;i>t;t++)o.push(a);this.handles=n.add(e(o.join("")).appendTo(this.element)),this.handle=this.handles.eq(0),this.handles.each(function(t){e(this).data("ui-slider-handle-index",t)})},_createRange:function(){var t=this.options,i="";t.range?(t.range===!0&&(t.values?t.values.length&&2!==t.values.length?t.values=[t.values[0],t.values[0]]:e.isArray(t.values)&&(t.values=t.values.slice(0)):t.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?this.range.removeClass("ui-slider-range-min ui-slider-range-max").css({left:"",bottom:""}):(this.range=e("<div></div>").appendTo(this.element),i="ui-slider-range ui-widget-header ui-corner-all"),this.range.addClass(i+("min"===t.range||"max"===t.range?" ui-slider-range-"+t.range:""))):(this.range&&this.range.remove(),this.range=null)},_setupEvents:function(){this._off(this.handles),this._on(this.handles,this._handleEvents),this._hoverable(this.handles),this._focusable(this.handles)},_destroy:function(){this.handles.remove(),this.range&&this.range.remove(),this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-widget ui-widget-content ui-corner-all"),this._mouseDestroy()},_mouseCapture:function(t){var i,s,n,a,o,r,h,l,u=this,d=this.options;return d.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),i={x:t.pageX,y:t.pageY},s=this._normValueFromMouse(i),n=this._valueMax()-this._valueMin()+1,this.handles.each(function(t){var i=Math.abs(s-u.values(t));(n>i||n===i&&(t===u._lastChangedValue||u.values(t)===d.min))&&(n=i,a=e(this),o=t)}),r=this._start(t,o),r===!1?!1:(this._mouseSliding=!0,this._handleIndex=o,a.addClass("ui-state-active").focus(),h=a.offset(),l=!e(t.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:t.pageX-h.left-a.width()/2,top:t.pageY-h.top-a.height()/2-(parseInt(a.css("borderTopWidth"),10)||0)-(parseInt(a.css("borderBottomWidth"),10)||0)+(parseInt(a.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(t,o,s),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(e){var t={x:e.pageX,y:e.pageY},i=this._normValueFromMouse(t);return this._slide(e,this._handleIndex,i),!1},_mouseStop:function(e){return this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(e,this._handleIndex),this._change(e,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(e){var t,i,s,n,a;return"horizontal"===this.orientation?(t=this.elementSize.width,i=e.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(t=this.elementSize.height,i=e.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),s=i/t,s>1&&(s=1),0>s&&(s=0),"vertical"===this.orientation&&(s=1-s),n=this._valueMax()-this._valueMin(),a=this._valueMin()+s*n,this._trimAlignValue(a)},_start:function(e,t){var i={handle:this.handles[t],value:this.value()};return this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._trigger("start",e,i)},_slide:function(e,t,i){var s,n,a;this.options.values&&this.options.values.length?(s=this.values(t?0:1),2===this.options.values.length&&this.options.range===!0&&(0===t&&i>s||1===t&&s>i)&&(i=s),i!==this.values(t)&&(n=this.values(),n[t]=i,a=this._trigger("slide",e,{handle:this.handles[t],value:i,values:n}),s=this.values(t?0:1),a!==!1&&this.values(t,i))):i!==this.value()&&(a=this._trigger("slide",e,{handle:this.handles[t],value:i}),a!==!1&&this.value(i))},_stop:function(e,t){var i={handle:this.handles[t],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._trigger("stop",e,i)},_change:function(e,t){if(!this._keySliding&&!this._mouseSliding){var i={handle:this.handles[t],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._lastChangedValue=t,this._trigger("change",e,i)}},value:function(e){return arguments.length?(this.options.value=this._trimAlignValue(e),this._refreshValue(),this._change(null,0),void 0):this._value()},values:function(t,i){var s,n,a;if(arguments.length>1)return this.options.values[t]=this._trimAlignValue(i),this._refreshValue(),this._change(null,t),void 0;if(!arguments.length)return this._values();if(!e.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(t):this.value();for(s=this.options.values,n=arguments[0],a=0;s.length>a;a+=1)s[a]=this._trimAlignValue(n[a]),this._change(null,a);this._refreshValue()},_setOption:function(t,i){var s,n=0;switch("range"===t&&this.options.range===!0&&("min"===i?(this.options.value=this._values(0),this.options.values=null):"max"===i&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),e.isArray(this.options.values)&&(n=this.options.values.length),"disabled"===t&&this.element.toggleClass("ui-state-disabled",!!i),this._super(t,i),t){case"orientation":this._detectOrientation(),this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation),this._refreshValue(),this.handles.css("horizontal"===i?"bottom":"left","");break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":for(this._animateOff=!0,this._refreshValue(),s=0;n>s;s+=1)this._change(null,s);this._animateOff=!1;break;case"step":case"min":case"max":this._animateOff=!0,this._calculateNewMax(),this._refreshValue(),this._animateOff=!1;break;case"range":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_value:function(){var e=this.options.value;return e=this._trimAlignValue(e)},_values:function(e){var t,i,s;if(arguments.length)return t=this.options.values[e],t=this._trimAlignValue(t);if(this.options.values&&this.options.values.length){for(i=this.options.values.slice(),s=0;i.length>s;s+=1)i[s]=this._trimAlignValue(i[s]);return i}return[]},_trimAlignValue:function(e){if(this._valueMin()>=e)return this._valueMin();if(e>=this._valueMax())return this._valueMax();var t=this.options.step>0?this.options.step:1,i=(e-this._valueMin())%t,s=e-i;return 2*Math.abs(i)>=t&&(s+=i>0?t:-t),parseFloat(s.toFixed(5))},_calculateNewMax:function(){var e=(this.options.max-this._valueMin())%this.options.step;this.max=this.options.max-e},_valueMin:function(){return this.options.min},_valueMax:function(){return this.max},_refreshValue:function(){var t,i,s,n,a,o=this.options.range,r=this.options,h=this,l=this._animateOff?!1:r.animate,u={};this.options.values&&this.options.values.length?this.handles.each(function(s){i=100*((h.values(s)-h._valueMin())/(h._valueMax()-h._valueMin())),u["horizontal"===h.orientation?"left":"bottom"]=i+"%",e(this).stop(1,1)[l?"animate":"css"](u,r.animate),h.options.range===!0&&("horizontal"===h.orientation?(0===s&&h.range.stop(1,1)[l?"animate":"css"]({left:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({width:i-t+"%"},{queue:!1,duration:r.animate})):(0===s&&h.range.stop(1,1)[l?"animate":"css"]({bottom:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({height:i-t+"%"},{queue:!1,duration:r.animate}))),t=i}):(s=this.value(),n=this._valueMin(),a=this._valueMax(),i=a!==n?100*((s-n)/(a-n)):0,u["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[l?"animate":"css"](u,r.animate),"min"===o&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:i+"%"},r.animate),"max"===o&&"horizontal"===this.orientation&&this.range[l?"animate":"css"]({width:100-i+"%"},{queue:!1,duration:r.animate}),"min"===o&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:i+"%"},r.animate),"max"===o&&"vertical"===this.orientation&&this.range[l?"animate":"css"]({height:100-i+"%"},{queue:!1,duration:r.animate}))},_handleEvents:{keydown:function(t){var i,s,n,a,o=e(t.target).data("ui-slider-handle-index");switch(t.keyCode){case e.ui.keyCode.HOME:case e.ui.keyCode.END:case e.ui.keyCode.PAGE_UP:case e.ui.keyCode.PAGE_DOWN:case e.ui.keyCode.UP:case e.ui.keyCode.RIGHT:case e.ui.keyCode.DOWN:case e.ui.keyCode.LEFT:if(t.preventDefault(),!this._keySliding&&(this._keySliding=!0,e(t.target).addClass("ui-state-active"),i=this._start(t,o),i===!1))return}switch(a=this.options.step,s=n=this.options.values&&this.options.values.length?this.values(o):this.value(),t.keyCode){case e.ui.keyCode.HOME:n=this._valueMin();break;case e.ui.keyCode.END:n=this._valueMax();break;case e.ui.keyCode.PAGE_UP:n=this._trimAlignValue(s+(this._valueMax()-this._valueMin())/this.numPages);break;case e.ui.keyCode.PAGE_DOWN:n=this._trimAlignValue(s-(this._valueMax()-this._valueMin())/this.numPages);break;case e.ui.keyCode.UP:case e.ui.keyCode.RIGHT:if(s===this._valueMax())return;n=this._trimAlignValue(s+a);break;case e.ui.keyCode.DOWN:case e.ui.keyCode.LEFT:if(s===this._valueMin())return;n=this._trimAlignValue(s-a)}this._slide(t,o,n)},keyup:function(t){var i=e(t.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(t,i),this._change(t,i),e(t.target).removeClass("ui-state-active"))}}}),e.widget("ui.sortable",e.ui.mouse,{version:"1.11.2",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_isOverAxis:function(e,t,i){return e>=t&&t+i>e},_isFloating:function(e){return/left|right/.test(e.css("float"))||/inline|table-cell/.test(e.css("display"))},_create:function(){var e=this.options;this.containerCache={},this.element.addClass("ui-sortable"),this.refresh(),this.floating=this.items.length?"x"===e.axis||this._isFloating(this.items[0].item):!1,this.offset=this.element.offset(),this._mouseInit(),this._setHandleClassName(),this.ready=!0},_setOption:function(e,t){this._super(e,t),"handle"===e&&this._setHandleClassName()},_setHandleClassName:function(){this.element.find(".ui-sortable-handle").removeClass("ui-sortable-handle"),e.each(this.items,function(){(this.instance.options.handle?this.item.find(this.instance.options.handle):this.item).addClass("ui-sortable-handle")})},_destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").find(".ui-sortable-handle").removeClass("ui-sortable-handle"),this._mouseDestroy();for(var e=this.items.length-1;e>=0;e--)this.items[e].item.removeData(this.widgetName+"-item");return this},_mouseCapture:function(t,i){var s=null,n=!1,a=this;return this.reverting?!1:this.options.disabled||"static"===this.options.type?!1:(this._refreshItems(t),e(t.target).parents().each(function(){return e.data(this,a.widgetName+"-item")===a?(s=e(this),!1):void 0}),e.data(t.target,a.widgetName+"-item")===a&&(s=e(t.target)),s?!this.options.handle||i||(e(this.options.handle,s).find("*").addBack().each(function(){this===t.target&&(n=!0)}),n)?(this.currentItem=s,this._removeCurrentsFromItems(),!0):!1:!1)},_mouseStart:function(t,i,s){var n,a,o=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(t),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},e.extend(this.offset,{click:{left:t.pageX-this.offset.left,top:t.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(t),this.originalPageX=t.pageX,this.originalPageY=t.pageY,o.cursorAt&&this._adjustOffsetFromHelper(o.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),o.containment&&this._setContainment(),o.cursor&&"auto"!==o.cursor&&(a=this.document.find("body"),this.storedCursor=a.css("cursor"),a.css("cursor",o.cursor),this.storedStylesheet=e("<style>*{ cursor: "+o.cursor+" !important; }</style>").appendTo(a)),o.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",o.opacity)),o.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",o.zIndex)),this.scrollParent[0]!==document&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",t,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;n>=0;n--)this.containers[n]._trigger("activate",t,this._uiHash(this));

File: public/js/spaces_control/buildings/building_form.js
Match lines: 1
132|    $('.modal-backdrop').remove();

File: public/js/webrtc-calls.js
Match lines: 2
913|        jq('.modal-backdrop').remove();
934|            jq('.modal-backdrop').remove();

File: templates/ai_committee/ai_committee_offcanvas.html.twig
Match lines: 3
1562|            $('.modal-backdrop').last().css('z-index', 1065);
1569|            $wrapper.appendTo(document.body);
1573|            $committeePanelModal.appendTo(document.body);

File: templates/calendar_member/connections.html.twig
Match lines: 1
141|.modal-backdrop.show {

File: templates/calendar_member/partials/modal_add_calendar_atividade.html.twig
Match lines: 1
719|    #modal_add_calendar_atividade .modal-backdrop {

File: templates/calendar_member/partials/modal_calendar_filters.html.twig
Match lines: 1
29|	.modal-backdrop.show {

File: templates/calendar_member/tabs/_calendar_tab.html.twig
Match lines: 2
1536|		.modal-backdrop.show {
1569|		.modal-backdrop.show {

File: templates/candidate/configuracoes.html.twig
Match lines: 3
443|            var existingBackdrop = document.querySelector('.modal-backdrop');
450|            backdrop.className = 'modal-backdrop fade show';
460|            document.querySelectorAll('.modal-backdrop').forEach(function (backdrop) {

File: templates/chat/components/chat_section.html.twig
Match lines: 2
5892|        $('.modal-backdrop').remove();
5901|        $('.modal-backdrop').remove();

File: templates/chat_ia/partials/_modal_workflow_approval.html.twig
Match lines: 1
50|body.workflow-approval-stacked-modal-open .modal-backdrop {

File: templates/communication_center/index.html.twig
Match lines: 1
132|        $('.modal-backdrop').remove();

File: templates/company/crm/getLeads/modal_add_capture_form.html.twig
Match lines: 2
8|.modal-backdrop.confirmation-backdrop {
270|            $('.modal-backdrop:last').addClass('confirmation-backdrop');

File: templates/company/crm/leads/crm_leads.html.twig
Match lines: 5
5067|    $('.modal-backdrop').remove();
5082|    $('.modal-backdrop').remove();
5104|            $('.modal-backdrop').remove();
5248|            $('.modal-backdrop').remove();
5279|    $(document).on('click', '.modal-backdrop', function() {

File: templates/company/crm/leads/defaultViewForms/view_offCanvas.html.twig
Match lines: 3
936|    .modal-backdrop {
947|    .modal-backdrop.show {
951|<div id="backdrop" class="modal-backdrop"></div> <!-- Backdrop element -->

File: templates/company/partials/_offcanvas_apply_authorization.html.twig
Match lines: 1
104|    body.aut-member-apply-offcanvas-open .modal-backdrop.show {

File: templates/components/_modal.html.twig
Match lines: 2
97|        #{{ modal_id|default('dynamicModal') }}.modal.show ~ .modal-backdrop,
98|        #{{ modal_id|default('dynamicModal') }} + .modal-backdrop {

File: templates/contractor/tabs/_tab_empresas.html.twig
Match lines: 2
3247|        $('.modal-backdrop').last().css('z-index', 1309);
3252|            $('.modal-backdrop').remove();

File: templates/cultural_hub/newsletter/index.html.twig
Match lines: 1
545|		.modal-backdrop {

File: templates/decision_system/modals/_select_template_type.html.twig
Match lines: 3
4|    <div class="template-type-modal-backdrop"></div>
117|.template-type-modal-backdrop {
585|        var backdrop = document.querySelector('.template-type-modal-backdrop');

File: templates/governance/authorization/partials/_offcanvas_view_authorization_monitoring.html.twig
Match lines: 1
60|    body.aut-monit-view-offcanvas-open .modal-backdrop.show {

File: templates/governance/cases/index.html.twig
Match lines: 1
155|    $('.modal-backdrop.show').last().css('z-index', GOV_CASES_MODAL_BACKDROP_Z);

File: templates/initial_tenent_steps/index.html.twig
Match lines: 3
1421|                let backdrop = document.querySelector('.modal-backdrop[data-payment-terms-backdrop="true"]');
1424|                    backdrop.className = 'modal-backdrop fade show';
1443|                const backdrop = document.querySelector('.modal-backdrop[data-payment-terms-backdrop="true"]');

File: templates/initial_tenent_steps/modals/_modal_modules_min_selection.html.twig
Match lines: 3
88|	.modal-backdrop[data-modules-min-modal="{{ modules_min_modal_id }}"] {
104|			return document.querySelector('.modal-backdrop[data-modules-min-modal="' + modalId + '"]');
133|				backdrop.className = 'modal-backdrop fade show in';

File: templates/new-goals/goal_team/goal_team.html.twig
Match lines: 2
1802|            document.querySelectorAll(".modal-backdrop").forEach(el => el.remove());
2555|            document.querySelectorAll(".modal-backdrop").forEach(el => el.remove());

File: templates/new-goals/goal_team/modals_goal_collective/modal_create_meta_colective.html.twig
Match lines: 1
435|            document.querySelectorAll('.modal-backdrop').forEach(function (el) {

File: templates/new-goals/pdi/pdi_permissions.html.twig
Match lines: 4
154|.modal-backdrop {
189|    .modal-backdrop {
1852|            #permissionTagModal + .modal-backdrop {
1895|                const modalBackdrop = document.querySelector('.modal-backdrop');

File: templates/onboarding/old_files/offcanvasMembro.html.twig
Match lines: 1
2|    <div id="overlayMembro" class="modal-backdrop fade d-none"></div>

File: templates/onboarding/old_files/permissions.twig
Match lines: 2
236|.modal-backdrop {
271|    .modal-backdrop {

File: templates/organograma/index.html.twig
Match lines: 1
78|                    $('.modal-backdrop').remove();

File: templates/organograma/simulation_edit.html.twig
Match lines: 1
252|                            $('.modal-backdrop').remove();

File: templates/payables/payroll/_rubricas_embed.html.twig
Match lines: 2
1683|            try { $('.modal-backdrop').last().addClass('rubricas-modal-backdrop'); } catch (e) {}
1687|            try { $('.modal-backdrop.rubricas-modal-backdrop').removeClass('rubricas-modal-backdrop'); } catch (e) {}

File: templates/payments/components/_terms_of_use_modal.html.twig
Match lines: 3
261|    .modal-backdrop[data-payment-terms-modal="{{ payment_terms_modal_id }}"] {
277|            return document.querySelector('.modal-backdrop[data-payment-terms-modal="' + modalId + '"]');
300|                backdrop.className = 'modal-backdrop fade show in';

File: templates/permissions_tags/member_tab_permissions.html.twig
Match lines: 1
72|    body.modal-open .modal-backdrop {

File: templates/pps/nova_simulacao.html.twig
Match lines: 1
396|                        $('.modal-backdrop').remove();

File: templates/process/_fragment/_modal_network_questionnaries.html.twig
Match lines: 1
347|        var $backdrop = $('.modal-backdrop').last();

File: templates/process/modal/_modal_leave_without_save.html.twig
Match lines: 1
44|#modal_leave_without_save + .modal-backdrop { z-index: 1059 !important; }

File: templates/process/modal/_modal_selective_process_add_stage.html.twig
Match lines: 5
2035|        var $backdrop = $('.modal-backdrop').last();
2271|        var $backdrop = $('.modal-backdrop').last();
2365|        var $backdrop = $('.modal-backdrop').last();
2398|        var $backdrop = $('.modal-backdrop').last();
2454|        var $backdrop = $('.modal-backdrop').last();

File: templates/process/tabs/_tab_create_stages.html.twig
Match lines: 1
638|        var $backdrop = $('.modal-backdrop').last();

File: templates/projects2.0/components/off_canvas_task.html.twig
Match lines: 5
1383|        #modal_discard_task_changes + .modal-backdrop,
1384|        .modal-backdrop.modal-discard-task-backdrop { z-index: 1060 !important; }
1491|                    $modal.next('.modal-backdrop').addClass('modal-discard-task-backdrop');
1520|                $('.modal-backdrop').not('.modal-discard-task-backdrop').remove();
1547|                $('.modal-backdrop').remove();

File: templates/refunds/dashboard_v2.html.twig
Match lines: 6
46|        var b = document.querySelector('.modal-backdrop[data-refund-backdrop]');
47|        if (!b) { b = document.createElement('div'); b.className = 'modal-backdrop fade show'; b.setAttribute('data-refund-backdrop','1'); document.body.appendChild(b); }
55|    var b = document.querySelector('.modal-backdrop[data-refund-backdrop]');
56|    if (!b) { b = document.createElement('div'); b.className = 'modal-backdrop fade show'; b.setAttribute('data-refund-backdrop','1'); document.body.appendChild(b); }
1213|		var backdrop = document.querySelector('.modal-backdrop[data-refund-backdrop]');
1216|			backdrop.className = 'modal-backdrop fade show';

File: templates/spaces_control/buildings/tabs/_tab_spaces.html.twig
Match lines: 1
408|        $('.modal-backdrop').remove();

File: templates/spaces_control/floor_plan/tabs/_tab_book_room.html.twig
Match lines: 1
17|    .modal-backdrop {

File: templates/ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig
Match lines: 1
496|    body.cause-tree-node-modal-open .modal-backdrop {

File: templates/ssma/occurrence/partials/_modal_classify.html.twig
Match lines: 2
111|body.ssma-classify-modal-open .modal-backdrop { z-index: 10065 !important; }
248|      var backs = document.querySelectorAll('.modal-backdrop');

File: templates/ssma/partials/_modal_delete_confirm.html.twig
Match lines: 4
226|    body.modal-open #ssmaDeleteConfirmModal ~ .modal-backdrop:last-of-type,
227|    body.modal-open .modal-backdrop.show {
295|                var $backs = $('.modal-backdrop');
301|                $('.modal-backdrop').last().css('z-index', z - 10);

File: templates/structural_research/admin_structural_research_users_list.html.twig
Match lines: 1
359|        $('.modal-backdrop').remove();

File: templates/structural_research/structural_research_permission.html.twig
Match lines: 6
169|.modal-backdrop {
204|    .modal-backdrop {
1923|            #permissionTagModal + .modal-backdrop {
2027|                const modalBackdrop = document.querySelector('.modal-backdrop');
2228|            .modal-backdrop {
2237|            #successConfirmationModal + .modal-backdrop {

File: templates/templates/components/assessment_periodicity_management.html.twig
Match lines: 4
115|  $(document).on('click', '.modal-backdrop', function() {
284|          $('.modal-backdrop').remove();
361|      $('.modal-backdrop').remove();
366|        $('.modal-backdrop').remove();

File: templates/templates/esocial_config_lotacoes.twig
Match lines: 1
1234|        $('.modal-backdrop').remove(); // Remove o fundo do modal, se ainda estiver presente

File: templates/templates/specialist_activities_validation_interview.html.twig
Match lines: 1
870|        $('.modal-backdrop').remove();

File: templates/templates/utils/modal_delete_confirmation.html.twig
Match lines: 1
80|            document.querySelectorAll(".modal-backdrop").forEach(function (backdrop) {

File: templates/templates/utils/modal_warning_confirmation.html.twig
Match lines: 1
21|#modal_warning_confirmation + .modal-backdrop {

File: templates/time-management/components/Tenant/tabs/overview/partials/modals/HistoryFilterModal.tsx
Match lines: 1
48|                className="modal-backdrop fade show" 

File: templates/time-management/components/Tenant/tabs/overview/partials/modals/OccurrenceFilterModal.tsx
Match lines: 1
83|				className="modal-backdrop fade show" 

File: templates/time-management/components/Tenant/tabs/pointControl/partials/modals/FilterModal.tsx
Match lines: 1
72|				className="modal-backdrop fade show" 

File: templates/time-management/ui/modal/index.tsx
Match lines: 1
74|            <div className="modal-backdrop fade show mhs-modal-backdrop" onClick={onClose}></div>

File: templates/welfare_assessment/dashboard/partials/_modal_periodicity_config.html.twig
Match lines: 3
92|      $('.modal-backdrop').remove();
99|    $('.modal-backdrop').remove();
103|      $('.modal-backdrop').remove();

File: templates/welfare_assessment/dashboard/partials/_modal_periodicity_confirm.html.twig
Match lines: 2
98|    $('.modal-backdrop').remove();
103|      $('.modal-backdrop').remove();

Request #12 deepseek-flash P:11.38K C:204 CR:10.37K CW:0 1682ms
Reasoning
Let me review the code changes. The previous review summary already identified issues. I need to confirm and report them. Let me look at the actual files to confirm. Let me start by reading the relevant files.
Tool Calls (2)
file_read
Show Details
{"file_path": "public/js/ssma/tree_view.js", "start_line": 540, "end_line": 700}
File: public/js/ssma/tree_view.js (Total lines: 1751)
IS_TRUNCATED: false
LINE_RANGE: 540-700
540|    const routes = parseJsonAttr(screen, 'data-routes', {});
541|    const originUrl = String(screen.getAttribute('data-origin-url') || '').trim();
542|    const categoryDefinitions = buildCategoryDefinitions(parseJsonAttr(screen, 'data-category-options', []));
543|    const closingDefinitions = buildClosingDefinitions(parseJsonAttr(screen, 'data-closing-options', []));
544|    const api = createApi(routes);
545|    const $screen = $(screen);
546|    const $modal = $(SELECTORS.modal);
547|    const $closeModal = $(SELECTORS.closeModal);
548|    const $removeClosureConfirmModal = $(SELECTORS.removeClosureConfirmModal);
549|    const $deactivateActionModal = $(SELECTORS.deactivateActionModal);
550|    const $deleteModal = $(SELECTORS.deleteModal);
551|    const $form = $modal.find(SELECTORS.form);
552|    const $closeForm = $closeModal.find(SELECTORS.closeForm);
553|    const $submitButton = $modal.find('.js-cause-tree-submit');
554|    const $closeSubmitButton = $closeModal.find('.js-cause-tree-close-submit');
555|    const $closeRemoveButton = $closeModal.find(SELECTORS.closeRemoveButton);
556|    const $closeRemoveConfirmButton = $removeClosureConfirmModal.find(SELECTORS.closeRemoveConfirm);
557|    const $deactivateActionConfirmButton = $deactivateActionModal.find(SELECTORS.deactivateActionConfirm);
558|  
559|    const elements = {
560|      empty: $screen.find(SELECTORS.empty),
561|      selectionIndicator: $screen.find(SELECTORS.selectionIndicator),
562|      toggleSelectionIndicator: $screen.find(SELECTORS.toggleSelectionIndicator),
563|      addRoot: $screen.find(SELECTORS.addRoot),
564|      addAction: $screen.find(SELECTORS.addAction),
565|      closeNode: $screen.find(SELECTORS.closeNode),
566|      editNode: $screen.find(SELECTORS.editNode),
567|      deleteNode: $screen.find(SELECTORS.deleteNode),
568|      zoomIn: $screen.find(SELECTORS.zoomIn),
569|      zoomOut: $screen.find(SELECTORS.zoomOut),
570|      fitView: $screen.find(SELECTORS.fitView)
571|    };
572|    let isSelectionIndicatorVisible = false;
573|    let shouldRestoreCloseModalAfterRemoveConfirm = false;
574|
575|    $modal.modal({
576|      backdrop: 'static',
577|      keyboard: true,
578|      show: false
579|    });
580|
581|    $modal.on('show.bs.modal', () => {
582|      document.body.classList.add('cause-tree-node-modal-open');
583|    });
584|    $modal.on('hidden.bs.modal', () => {
585|      document.body.classList.remove('cause-tree-node-modal-open');
586|    });
587|
588|    function isCauseNodeModalOpen() {
589|      return $modal.hasClass('show') || document.body.classList.contains('cause-tree-node-modal-open');
590|    }
591|
592|    function isEventInsideCauseTreeDiagram(event) {
593|      const target = event.target;
594|      if (!(target instanceof Element)) {
595|        return false;
596|      }
597|      if (target.closest('.cause-tree-floating-tools')) {
598|        return false;
599|      }
600|      return Boolean(target.closest('.js-cause-tree-svg, .cause-tree-canvas'));
601|    }
602|
603|    function isEventInsideCauseNodeModal(event) {
604|      const target = event.target;
605|      if (!(target instanceof Element)) {
606|        return false;
607|      }
608|      return Boolean(target.closest('#ssmaCauseTreeNodeModal .modal-dialog'));
609|    }
610|
611|    function isEventInsideFloatingTools(event) {
612|      const target = event.target;
613|      if (!(target instanceof Element)) {
614|        return false;
615|      }
616|      return Boolean(target.closest('.cause-tree-floating-tools'));
617|    }
618|
619|    let ignoreNextFloatingToolsClick = false;
620|
621|    document.addEventListener('mousedown', (event) => {
622|      if (!isCauseNodeModalOpen() || event.button !== 0) {
623|        return;
624|      }
625|      if (isEventInsideCauseNodeModal(event)) {
626|        return;
627|      }
628|      if (isEventInsideFloatingTools(event)) {
629|        event.preventDefault();
630|        event.stopPropagation();
631|        ignoreNextFloatingToolsClick = true;
632|        $modal.modal('hide');
633|        return;
634|      }
635|      if (isEventInsideCauseTreeDiagram(event)) {
636|        return;
637|      }
638|      $modal.modal('hide');
639|    }, true);
640|
641|    document.addEventListener('click', (event) => {
642|      if (!ignoreNextFloatingToolsClick || !isEventInsideFloatingTools(event)) {
643|        return;
644|      }
645|      event.preventDefault();
646|      event.stopPropagation();
647|      ignoreNextFloatingToolsClick = false;
648|    }, true);
649|  
650|    function ensureCategoryOption(value) {
651|      const normalizedValue = String(value || '').trim();
652|      const $categorySelect = $modal.find(SELECTORS.categoryInput);
653|  
654|      $categorySelect.find('[data-dynamic-category="true"]').remove();
655|      if (!normalizedValue) {
656|        return;
657|      }
658|  
659|      const hasExistingOption = $categorySelect.find('option').filter((_, option) => option.value === normalizedValue).length > 0;
660|      if (!hasExistingOption) {
661|        const categoryDefinition = categoryDefinitions[normalizedValue];
662|        const optionLabel = categoryDefinition ? categoryDefinition.label : normalizedValue;
663|        $categorySelect.append(`<option value="${normalizedValue}" data-dynamic-category="true">${optionLabel}</option>`);
664|      }
665|    }
666|  
667|    function getCategoryDefinition(value) {
668|      const normalizedValue = normalizeCategoryKey(value);
669|      return categoryDefinitions[normalizedValue] || {
670|        value: normalizedValue,
671|        label: normalizedValue || 'Sem categoria',
672|        color: DEFAULT_CATEGORY_COLOR,
673|        iconClass: 'fas fa-question'
674|      };
675|    }
676|
677|    function getClosingDefinition(value) {
678|      const normalizedValue = String(value || '').trim().toLowerCase();
679|      return closingDefinitions[normalizedValue] || null;
680|    }
681|
682|    function buildClosureTooltip(node) {
683|      const closingDefinition = getClosingDefinition(node.closureType);
684|      if (!closingDefinition) {
685|        return '';
686|      }
687|
688|      const items = [`<li><strong>Tipo de Fechamento:</strong> ${closingDefinition.label}</li>`];
689|
690|      if (closingDefinition.value === 'closed') {
691|        return `<ul class="cause-tree-tooltip-list"><li><strong>Tipo de Fechamento:</strong> Encerrado</li></ul>`;
692|      }
693|
694|      if (closingDefinition.value === 'connected' && node.connectedNodeId) {
695|        const connectedNode = flattenTree(state.tree).find((item) => Number(item.id) === Number(node.connectedNodeId));
696|        if (connectedNode) {
697|          items.push(`<li><strong>Conectada com:</strong> ${connectedNode.title}</li>`);
698|          return `<ul class="cause-tree-tooltip-list">${items.join('')}</ul>`;
699|        }
700|
file_read
Show Details
{"file_path": "templates/ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig", "start_line": 470, "end_line": 580}
File: templates/ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig (Total lines: 642)
IS_TRUNCATED: false
LINE_RANGE: 470-580
470|        fill: none;
471|        stroke: rgba(120, 136, 150, 0.7);
472|        stroke-width: 1.8px;
473|    }
474|
475|    .cause-tree-modal-field label {
476|        font-weight: 600;
477|        color: #304956;
478|    }
479|
480|    .cause-tree-modal-field .form-control,
481|    .cause-tree-modal-field .custom-select {
482|        min-height: 44px;
483|        border-radius: 10px;
484|    }
485|
486|    /* Overlay lets pan/zoom reach the SVG; other page controls stay blocked. */
487|    #ssmaCauseTreeNodeModal {
488|        pointer-events: none;
489|    }
490|
491|    #ssmaCauseTreeNodeModal .modal-dialog {
492|        pointer-events: auto;
493|    }
494|
495|    body.cause-tree-node-modal-open > *,
496|    body.cause-tree-node-modal-open .modal-backdrop {
497|        pointer-events: none;
498|    }
499|
500|    body.cause-tree-node-modal-open .cause-tree-floating-tools {
501|        pointer-events: auto;
502|    }
503|
504|    body.cause-tree-node-modal-open .js-cause-tree-svg {
505|        pointer-events: auto;
506|        cursor: grab;
507|    }
508|
509|    body.cause-tree-node-modal-open .js-cause-tree-svg:active {
510|        cursor: grabbing;
511|    }
512|
513|    body.cause-tree-node-modal-open .cause-tree-node,
514|    body.cause-tree-node-modal-open .cause-tree-node * {
515|        pointer-events: none !important;
516|    }
517|
518|    @media (max-width: 991.98px), (max-height: 900px) {
519|        .cause-tree-stage {
520|            padding: 0;
521|        }
522|
523|        .cause-tree-floating-tools {
524|            top: 8px;
525|            right: 8px;
526|            max-height: calc(100% - 16px);
527|            gap: 8px;
528|        }
529|
530|        .cause-tree-floating-tools-actions {
531|            gap: 6px;
532|        }
533|
534|        .cause-tree-tool-group {
535|            padding: 6px;
536|            gap: 4px;
537|            border-radius: 10px;
538|        }
539|
540|        .cause-tree-tool-btn {
541|            min-width: 36px;
542|            min-height: 36px;
543|        }
544|    }
545|
546|    @media (max-height: 700px) {
547|        .cause-tree-floating-tools {
548|            top: 6px;
549|            right: 6px;
550|            max-height: calc(100% - 12px);
551|        }
552|
553|        .cause-tree-floating-tools-actions {
554|            gap: 4px;
555|        }
556|
557|        .cause-tree-tool-group {
558|            padding: 4px;
559|            gap: 3px;
560|        }
561|
562|        .cause-tree-tool-btn {
563|            min-width: 32px;
564|            min-height: 32px;
565|        }
566|    }
567|</style>
568|
569|    <div class="cause-tree-stage">
570|        <div
571|            class="cause-tree-workspace js-cause-tree-screen"
572|            data-initial-tree="{{ causeTreePayload.tree|json_encode|e('html_attr') }}"
573|            data-initial-meta="{{ causeTreePayload.meta|json_encode|e('html_attr') }}"
574|            data-routes="{{ causeTreeRoutes|json_encode|e('html_attr') }}"
575|            data-category-options="{{ causeTreeCategories|json_encode|e('html_attr') }}"
576|            data-closing-options="{{ causeTreeClosureTypes|json_encode|e('html_attr') }}"
577|            data-origin-url="{{ causeTreeCurrentCard.origin_url|default('')|e('html_attr') }}"
578|        >
579|            <div class="cause-tree-canvas">
580|                <div class="cause-tree-floating-tools">
Request #13 deepseek-flash P:14.46K C:152 CR:11.52K CW:0 1645ms
Reasoning
Let me confirm the state of the modal structure. Let me check where the modal is placed relative to body — whether it is a direct child of body, and where toasts are attached. Let me search for the modal template include.
Tool Calls (2)
code_search
Show Details
{"search_text": "ssmaCauseTreeNodeModal"}
File: public/js/ssma/tree_view.js
Match lines: 2
15|    modal: '#ssmaCauseTreeNodeModal',
608|      return Boolean(target.closest('#ssmaCauseTreeNodeModal .modal-dialog'));

File: templates/ssma/cause_tree/tree_view/partials/_modal_node.html.twig
Match lines: 1
2|    modal_id: 'ssmaCauseTreeNodeModal',

File: templates/ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig
Match lines: 2
487|    #ssmaCauseTreeNodeModal {
491|    #ssmaCauseTreeNodeModal .modal-dialog {

code_search
Show Details
{"search_text": "toast-container|showToast", "file_patterns": ["templates/", "public/js/utils/"]}
No matches found
Request #14 deepseek-flash P:14.78K C:122 CR:14.59K CW:0 1508ms
Reasoning
Let me find the modal template and where it's rendered.
Tool Calls (2)
file_read
Show Details
{"file_path": "templates/ssma/cause_tree/tree_view/partials/_modal_node.html.twig"}
File: templates/ssma/cause_tree/tree_view/partials/_modal_node.html.twig (Total lines: 43)
IS_TRUNCATED: false
LINE_RANGE: 1-43
1|{% embed 'components/_modal_bottom_sheet.html.twig' with {
2|    modal_id: 'ssmaCauseTreeNodeModal',
3|    modal_size: 'sm',
4|    modal_fixed_width: '560px'
5|} %}
6|    {% block modal_title %}
7|        <span class="js-cause-tree-modal-title">Adicionar causa</span>
8|    {% endblock %}
9|
10|    {% block modal_body %}
11|        <form id="ssmaCauseTreeNodeForm" class="js-cause-tree-form">
12|            <input type="hidden" name="nodeId" class="js-cause-tree-node-id">
13|            <input type="hidden" name="parentId" class="js-cause-tree-parent-id">
14|            <input type="hidden" name="actionActive" class="js-cause-tree-node-action-active-input" value="0">
15|
16|            <div class="cause-tree-modal-field">
17|                <label for="ssmaCauseTreeNodeTitle" class="d-block mb-2">Título</label>
18|                <input type="text" class="form-control js-cause-tree-node-title-input" id="ssmaCauseTreeNodeTitle" name="title" maxlength="120" placeholder="Digite o título da causa" required>
19|            </div>
20|
21|            <div class="cause-tree-modal-field mt-3">
22|                <label for="ssmaCauseTreeNodeCategory" class="d-block mb-2">Categoria</label>
23|                <select class="custom-select js-cause-tree-node-category-input" id="ssmaCauseTreeNodeCategory" name="category" required>
24|                    <option value="">Selecione</option>
25|                    {% for category in causeTreeCategories %}
26|                        <option value="{{ category.value }}">{{ category.label }}</option>
27|                    {% endfor %}
28|                </select>
29|            </div>
30|
31|            <div class="cause-tree-modal-field mt-3">
32|                <label for="ssmaCauseTreeNodeDescription" class="d-block mb-2">Descrição</label>
33|                <textarea class="form-control js-cause-tree-node-description-input" id="ssmaCauseTreeNodeDescription" name="description" rows="4" maxlength="255" placeholder="Descreva a hipótese, evidência ou contexto desta causa"></textarea>
34|            </div>
35|        </form>
36|    {% endblock %}
37|
38|    {% block modal_footer %}
39|        <button type="button" class="mhs-btn-cancel" data-dismiss="modal">Cancelar</button>
40|        <button type="submit" form="ssmaCauseTreeNodeForm" class="mhs-btn-primary js-cause-tree-submit">Salvar causa</button>
41|    {% endblock %}
42|{% endembed %}
43|
code_search
Show Details
{"search_text": "showToast", "file_patterns": ["public/js/"]}
Note: The results have been truncated. Only showing first 100 results.
File: public/js/ai_training/index.js
Match lines: 51
105|            showToast(
141|            showToast(
224|                        showToast(
244|                        showToast(
575|                        showToast(
588|                        showToast(
600|                        showToast(
667|                                    showToast(
683|                                showToast(
710|                                                showToast('Falha ao marcar como concluído. Tente novamente.', 'Erro', 'fas fa-times', 'bg-danger');
715|                                            showToast('Erro ao marcar como concluído. Tente novamente.', 'Erro', 'fas fa-times', 'bg-danger');
730|                                showToast('Este item não pode ser desmarcado após a conclusão.', 'Ação Inválida', 'fas fa-lock', 'bg-warning');
786|                        showToast(
870|                showToast(
899|                                    showToast('Não foi possível salvar seu progresso. A navegação foi cancelada.', 'Erro', 'fas fa-times', 'bg-danger');
904|                                showToast('Erro ao salvar seu progresso. A navegação foi cancelada.', 'Erro', 'fas fa-times', 'bg-danger');
961|                    showToast(
973|                    showToast(
1024|                    showToast(
1031|                    showToast(
1502|                showToast(
2244|                                    showToast(
2328|                                            showToast(
2354|                                            showToast(
2369|                                        showToast(
2406|                                    showToast(
2533|                showToast(
2548|                showToast(
3006|                        showToast('Erro: Nenhuma lição ativa. Selecione novamente a avaliação.', 'Erro', 'fas fa-times', 'bg-danger');
3049|                                    showToast('Avaliação marcada como concluída!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
3056|                                    showToast('Falha ao concluir a avaliação. ' + (response ? response.error : 'Erro desconhecido'), 'Erro', 'fas fa-times', 'bg-danger');
3065|                                showToast('Erro: ' + error.message, 'Erro', 'fas fa-times', 'bg-danger');
3079|                        showToast('Avaliação marcada como concluída! (Modo Teste)', 'Sucesso', 'fas fa-check-circle', 'bg-info');
3373|                    showToast(
3441|                    showToast(
4171|                showToast(
4221|                                showToast(
4246|                                showToast(
4254|                            showToast(
4263|                        showToast(
4288|                        showToast(
4295|                        showToast(
4314|                showToast('Avaliação concluída (Modo Teste)', 'Avaliação Salva', 'fas fa-check', 'bg-info');
4319|            /* showToast(
4421|                    showToast(
5333|                        showToast('Módulo concluído com sucesso!', 'Módulo Concluído', 'fas fa-trophy', 'bg-success');
5335|                        showToast('Não foi possível marcar o módulo como concluído.', 'Erro', 'fas fa-times', 'bg-danger');
5340|                    showToast('Erro ao marcar o módulo como concluído.', 'Erro', 'fas fa-times', 'bg-danger');
6417|			showToast('Avaliação salva com sucesso!', 'Concluído', 'fas fa-check-circle', 'bg-success');
9474|			if (typeof showToast === 'function') {
9475|				showToast('Avaliação concluída!', 'Concluído', 'fas fa-check-circle', 'bg-success');

File: public/js/app/contratadosTab.js
Match lines: 7
71|                showToast(response.message, 'Sucesso!', 'fas fa-check', 'bg-success');
75|                showToast(errorMessage, 'Erro!', 'fas fa-exclamation-circle', 'bg-danger');
99|                    showToast(response.message, 'Sucesso!', 'fas fa-check', 'bg-success'); 
102|                    showToast('Falha ao atualizar o estado do documento.', 'Erro!', 'fas fa-exclamation-circle', 'bg-danger'); 
105|                showToast('Falha ao processar a solicitação.', 'Erro!', 'fas fa-exclamation-circle', 'bg-danger'); 
222|        showToast(response.message, 'Sucesso', 'fas fa-check', 'bg-success');
225|        showToast(errorMessage, 'Erro', 'fas fa-exclamation-triangle', 'bg-warning');

File: public/js/chat/features/chat-webrtc-integration.js
Match lines: 12
111|                if (typeof showToast === 'function') {
112|                    showToast('Este usuário não está disponível no momento', 'Indisponível', 'fas fa-user-clock', 'bg-warning');
128|                    if (typeof showToast === 'function') {
129|                        showToast('Esta chamada já está ativa em outro dispositivo', 'Chamada Ativa', 'fas fa-mobile-alt', 'bg-info');
163|                    if (typeof showToast === 'function') {
164|                        showToast(message, title, icon, toastClass);
173|                if (typeof showToast === 'function') {
174|                    showToast('Erro ao verificar disponibilidade. Tente novamente.', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
669|        } else if (typeof showToast === 'function') {
670|            showToast(message, 'Erro na Chamada', 'fas fa-exclamation-circle', 'bg-danger');
680|        } else if (typeof showToast === 'function') {
681|            showToast(message, 'Aviso', 'fas fa-exclamation-triangle', 'bg-warning');

File: public/js/chat_ia/interview_ia.js
Match lines: 8
16|  function showToast(type, message) {
196|        showToast("success", "Link copiado com sucesso");
198|        showToast("error", "Nao foi possivel copiar o link");
220|      showToast("warning", "Titulo e obrigatorio");
225|      showToast("warning", "Upload de roteiro e obrigatorio");
239|        showToast("warning", error.message || "Preencha corretamente as midias.");
273|      showToast("success", "Quadro salvo com sucesso");
275|      showToast("error", error.message || "Falha ao criar quadro de pesquisas");

File: public/js/chat_ia/nps_ia.js
Match lines: 7
32|  function showToast(type, message) {
232|        showToast("success", "Perguntas selecionadas salvas com sucesso");
236|        showToast("error", err.message || "Erro ao salvar perguntas");
251|      showToast("warning", "Titulo da pesquisa e obrigatorio");
269|        showToast("warning", error.message || "Preencha corretamente os dados das midias.");
293|        showToast("success", "Pesquisa criada com sucesso");
299|      showToast("error", err.message || "Erro ao criar pesquisa");

File: public/js/chat_ia/ssma_prevention_handoff.js
Match lines: 2
46|        if (typeof window.showToast === 'function') {
47|            window.showToast(msg, 'Aviso', 'fas fa-info-circle', 'bg-warning');

File: public/js/chat_ia/workflow_approval_modal.js
Match lines: 2
1019|    if (typeof window.showToast === 'function') {
1020|      window.showToast(text, 'error');

File: public/js/company_customization/company-branding-form.js
Match lines: 3
890|        showToast(message, title || 'Atenção', 'fas fa-exclamation-triangle', bgColor || 'bg-danger');
979|                    showToast('Faça upload de um logo para gerar a sugestão.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-danger');
1061|                    showToast(response.message || 'Branding salvo com sucesso.', 'Sucesso', 'fas fa-check', 'bg-success');

File: public/js/company_customization/company-home-hero-form.js
Match lines: 4
58|        showToast((response && response.message) || 'Não foi possível salvar.', 'Erro', 'fas fa-times', 'bg-danger');
69|      showToast(response.message || 'Imagem de fundo salva com sucesso.', 'Sucesso', 'fas fa-check', 'bg-success');
75|      showToast(message, 'Erro', 'fas fa-times', 'bg-danger');
93|        showToast('A imagem deve ter no máximo 4 MB.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-danger');

File: public/js/company_customization/company-workarea-loading.js
Match lines: 4
100|      showToast('A imagem deve ter no máximo 4 MB.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-danger');
139|        showToast((response && response.message) || 'Não foi possível salvar.', 'Erro', 'fas fa-times', 'bg-danger');
167|      showToast(response.message || 'Tela de área de trabalho salva com sucesso.', 'Sucesso', 'fas fa-check', 'bg-success');
173|      showToast(message, 'Erro', 'fas fa-times', 'bg-danger');

File: public/js/employee-advocacy/share-vacancy.js
Match lines: 4
437|        if (typeof showToast === 'function') {
438|            showToast(message, title, 'fas fa-times-circle', 'bg-danger');
448|        if (typeof showToast === 'function') {
449|            showToast(message, title, 'fas fa-check-circle', 'bg-success');

File: public/js/goal-adriana-create-modal.js
Match lines: 2
309|        if (typeof window.showToast === 'function') {
310|            window.showToast(message, title, icon, bg);

File: public/js/goal-check-in.js
Match lines: 2
726|                if (typeof window.showToast === 'function') {
727|                    window.showToast(error.message, 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');

File: public/js/goal-item-menu-handlers.js
Match lines: 4
38|                if (window.showToast && successMessage) {
39|                    window.showToast(successMessage, 'Sucesso', 'fas fa-check-circle', 'bg-success');
44|                if (window.showToast) {
45|                    window.showToast(error.message, 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');

File: public/js/goals-company-offcanvas.js
Match lines: 24
251|        } else if (window.showToast) {
252|            window.showToast(message, 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
488|            if (window.showToast) {
489|                window.showToast(invalid[1], 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
496|            if (window.showToast) {
497|                window.showToast(
509|            if (window.showToast) {
510|                window.showToast('Informe a unidade personalizada.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
516|            if (window.showToast) {
517|                window.showToast('Os valores devem respeitar os limites da forma de medição.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
636|            if (window.showToast) {
637|                window.showToast(invalid[1], 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
644|            if (window.showToast) {
645|                window.showToast(
905|            if (result.warnings?.length && window.showToast) {
906|                window.showToast(
912|            } else if (window.showToast) {
913|                window.showToast('Meta salva com sucesso!', 'Sucesso', 'fa-check-circle', 'bg-success');
1017|            if (window.showToast) {
1018|                window.showToast(error.message, 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
1139|            if (window.showToast) {
1140|                window.showToast('Resultado adicionado à lista.', 'Sucesso', 'fa-check-circle', 'bg-success');
1256|            if (window.showToast) {
1257|                window.showToast('Ação adicionada à lista.', 'Sucesso', 'fa-check-circle', 'bg-success');

File: public/js/governance/governance-authorization-view-monitoring.js
Match lines: 2
1092|        if (typeof window.showToast === 'function') {
1095|            window.showToast(message, type === 'success' ? 'Sucesso' : 'Atenção', icons[type] || icons.warning, bg[type] || bg.warning);

File: public/js/metahuman-standard/pages/organizational_structure_index.js
Match lines: 23
170|                showToast(
180|            showToast(
469|                showToast(
498|            showToast(message, 'Erro!', 'fas fa-exclamation-triangle', 'bg-danger');
506|            showToast('Nenhuma alteração pendente.', 'Atenção!', 'fas fa-exclamation-triangle', 'bg-warning');
523|                showToast(response.message || 'Erro ao atualizar membros.', 'Erro!', 'fas fa-exclamation-triangle', 'bg-danger');
526|            showToast(
536|            showToast(message, 'Erro!', 'fas fa-exclamation-triangle', 'bg-danger');
771|                showToast(
780|            showToast(
799|            showToast(message, 'Erro!', 'fas fa-exclamation-triangle', 'bg-danger');
884|                showToast(
898|            showToast(
1409|            showToast('Informe o ' + orgLabelAreaTitleLower + '.', 'Atenção!', 'fas fa-exclamation-triangle', 'bg-warning');
1421|                showToast(
1430|            showToast(
1441|            showToast(message, 'Erro!', 'fas fa-exclamation-triangle', 'bg-danger');
1477|                    showToast(
1485|                    showToast(
1524|                                showToast(
1541|                            showToast(
1556|                            showToast(
1592|                showToast(

File: public/js/offboarding/offboardingActivityController.js
Match lines: 30
161|                        showToast('Selecione um template.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
167|                            showToast('Esta atividade já foi adicionada a esta etapa.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
211|                    showToast('Imagem inválida (formato ou tamanho).','Erro','fas fa-times-circle','bg-danger');
366|            showToast('Modal não encontrado. Verifique se o arquivo foi incluído.', 'Erro', 'fas fa-times-circle', 'bg-danger');
470|                showToast('Você precisa selecionar uma opção: usar template ou criar nova atividade.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
886|                showToast(
1002|            showToast('Modal de imagem não encontrado.', 'Erro', 'fas fa-times-circle', 'bg-danger');
1040|            showToast('Por favor, selecione uma imagem.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
1145|            showToast('Erro ao criar atividade.', 'Erro', 'fas fa-times-circle', 'bg-danger');
1159|            showToast('Atividade criada na biblioteca com sucesso!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
1176|        showToast('Erro inesperado ao criar atividade.', 'Erro', 'fas fa-times-circle', 'bg-danger');
1189|            showToast('Erro ao editar atividade.', 'Erro', 'fas fa-times-circle', 'bg-danger');
1207|        showToast('Atividade editada com sucesso!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
1213|        showToast('Erro inesperado ao editar atividade.', 'Erro', 'fas fa-times-circle', 'bg-danger');
1224|            showToast('Erro ao excluir atividade.', 'Erro', 'fas fa-times-circle', 'bg-danger');
1243|        showToast('Atividade excluída com sucesso!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
1249|        showToast('Erro inesperado ao excluir atividade.', 'Erro', 'fas fa-times-circle', 'bg-danger');
1260|        showToast(
1303|        showToast('Erro inesperado ao duplicar atividade.', 'Erro', 'fas fa-times-circle', 'bg-danger');
1311|        showToast(
1325|            showToast('Erro ao adicionar atividade à etapa.', 'Erro', 'fas fa-times-circle', 'bg-danger');
1336|        showToast('Atividade adicionada à etapa com sucesso!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
1340|        showToast('Ocorreu um erro ao adicionar atividade à etapa.', 'Erro', 'fas fa-times-circle', 'bg-danger');
1352|            showToast('Erro ao remover atividade da etapa.', 'Erro', 'fas fa-times-circle', 'bg-danger');
1366|        showToast('Atividade removida da etapa com sucesso!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
1370|        showToast('Ocorreu um erro ao remover atividade da etapa.', 'Erro', 'fas fa-times-circle', 'bg-danger');
1417|                showToast(data.message || 'Erro ao criar atividade.', 'Erro', 'fas fa-times-circle', 'bg-danger');
1423|            showToast('Erro de conexão ao criar atividade.', 'Erro', 'fas fa-times-circle', 'bg-danger');
1438|                showToast(data.message || 'Erro ao criar atividade.', 'Erro', 'fas fa-times-circle', 'bg-danger');
1444|            showToast('Erro de conexão ao criar atividade.', 'Erro', 'fas fa-times-circle', 'bg-danger');

File: public/js/offboarding/offboardingMemberController.js
Match lines: 4
1007|        showToast('Membro não encontrado.', 'Erro', 'fas fa-times-circle', 'bg-danger');
1698|        showToast(error.message || 'Erro ao atualizar membro de offboarding.', 'Erro', 'fas fa-times-circle', 'bg-danger');
1884|            showToast('Solicitação aceita, mas houve problema no envio do email', 'Aviso', 'fas fa-exclamation-triangle', 'bg-warning');
1925|            showToast('Solicitação recusada, mas houve problema no envio do email', 'Aviso', 'fas fa-exclamation-triangle', 'bg-warning');

File: public/js/offboarding/offboardingStepController.js
Match lines: 7
283|            showToast('Preencha nome e tipo de avanço.', 'Atenção', 'fas fa-exclamation-triangle','bg-warning');
316|            showToast(`Etapa ${acao === 'criar' ? 'criada' : 'atualizada'} com sucesso!`, 'Sucesso','fas fa-check-circle','bg-success');
322|        showToast(`Erro ao ${acao === 'criar' ? 'criar' : 'salvar'} etapa: ${error.message}`, 'Erro','fas fa-times-circle','bg-danger');
339|                    showToast('Etapa excluída com sucesso!','Sucesso','fas fa-check-circle','bg-success');
345|                showToast(`Erro ao excluir etapa: ${error.message}`,'Erro','fas fa-times-circle','bg-danger');
376|                    showToast('Etapa duplicada com sucesso!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
382|                showToast(

File: public/js/offboarding/utils.js
Match lines: 2
370|    showToast(message, 'Sucesso', 'fas fa-check-circle', 'bg-success');
374|    showToast(message, 'Erro', 'fas fa-times-circle', 'bg-danger');

File: public/js/offboarding/visualizar_atividades.js
Match lines: 44
86|            showToast('Informe o motivo do desligamento.', 'Campo obrigatório', 'fas fa-exclamation-triangle', 'bg-warning');
146|                showToast(
156|            showToast('Erro ao processar solicitação.', 'Erro', 'fas fa-times-circle', 'bg-danger');
165|            showToast('Informe o link da carta.', 'Atenção', 'fas fa-exclamation-triangle', 'bg-warning');
168|        showToast('Link da carta adicionado!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
1077|            showToast(
1096|            showToast('Etapa não encontrada ou não liberada.', 'Erro', 'fas fa-times', 'bg-danger');
1119|                    showToast('Nenhuma atividade encontrada nesta etapa.', 'Erro', 'fas fa-times', 'bg-danger');
1428|                    showToast('Link confirmado com sucesso!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
1431|                    showToast('Informe um link válido. Ele deve começar com http:// ou https://', 'Campo inválido', 'fas fa-exclamation-triangle', 'bg-warning');
1572|        if (typeof showToast !== 'undefined') {
1573|            showToast(msg, 'Erro', 'fas fa-times', 'bg-danger');
1580|        if (typeof showToast !== 'undefined') {
1581|            showToast(msg, 'Sucesso', 'fas fa-check', 'bg-success');
2154|        showToast('Solicitação não encontrada.', 'Erro', 'fas fa-times-circle', 'bg-danger');
2164|        showToast('Solicitação não encontrada.', 'Erro', 'fas fa-times-circle', 'bg-danger');
2195|                showToast('Solicitação de desligamento excluída com sucesso.', 'Sucesso', 'fas fa-check-circle', 'bg-success');
2198|                showToast(error.message || 'Erro ao excluir. Tente novamente.', 'Erro', 'fas fa-times-circle', 'bg-danger');
2347|        showToast('Offboarding não encontrado.', 'Erro', 'fas fa-times', 'bg-danger');
2355|        showToast(
2375|                    showToast('Erro ao iniciar o offboarding.', 'Erro', 'fas fa-times', 'bg-danger');
2449|        showToast('Erro ao iniciar o offboarding.', 'Erro', 'fas fa-times', 'bg-danger');
2472|            showToast('Você não possui acesso a este offboarding.', 'Erro', 'fas fa-times', 'bg-danger');
2941|        if (typeof showToast !== 'undefined') {
2942|            showToast('ID da atividade não encontrado.', 'Erro', 'fas fa-times', 'bg-danger');
2951|        if (typeof showToast !== 'undefined') {
2952|            showToast('Atividade não encontrada.', 'Erro', 'fas fa-times', 'bg-danger');
2966|            if (typeof showToast !== 'undefined') {
2967|                showToast('Erro ao renderizar a atividade.', 'Erro', 'fas fa-times', 'bg-danger');
2973|        if (typeof showToast !== 'undefined') {
2974|            showToast('Erro ao abrir visualização da atividade.', 'Erro', 'fas fa-times', 'bg-danger');
3013|            showToast('Não foi possível carregar o conteúdo da atividade.', 'Erro', 'fas fa-times', 'bg-danger');
3341|        showToast(
3465|                showToast('Link confirmado com sucesso!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
3468|                showToast('Informe um link válido. Ele deve começar com http:// ou https://', 'Campo inválido', 'fas fa-exclamation-triangle', 'bg-warning');
3528|        showToast('Confirme todos os links obrigatórios antes de enviar as assinaturas.', 'Campo obrigatório', 'fas fa-exclamation-triangle', 'bg-warning');
3546|            showToast('Assinaturas enviadas com sucesso!', 'Sucesso', 'fas fa-check', 'bg-success');
3548|            showToast(result.message || 'Erro ao salvar assinaturas.', 'Erro', 'fas fa-times', 'bg-danger');
3555|        showToast('Erro de conexão ao salvar assinaturas.', 'Erro', 'fas fa-times', 'bg-danger');
3578|        showToast('Erro ao desmarcar atividade. Tente novamente.', 'Erro', 'fas fa-times', 'bg-danger');
3898|                showToast(
3922|        showToast('Erro ao identificar etapas.', 'Erro', 'fas fa-times-circle', 'bg-danger');
3989|        showToast('Etapa alterada com sucesso!', 'Sucesso', 'fas fa-check-circle', 'bg-success');
3995|        showToast(error.message || 'Erro ao alterar etapa.', 'Erro', 'fas fa-times-circle', 'bg-danger');

File: public/js/onboarding/onboardingActivityController.js
Match lines: 46
53|                            showToast('Selecione um template.', 'Atenção', 'fa-solid fa-triangle-exclamation', 'bg-warning');
60|                            showToast('Esta atividade já foi adicionada a esta etapa.', 'Atenção', 'fa-solid fa-triangle-exclamation', 'bg-warning');
600|                    showToast(
841|                showToast(
957|                showToast('Erro inesperado ao salvar atividade.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
1161|                    showToast(
1186|                    showToast(
1279|                showToast('Erro ao criar atividade.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
1289|                showToast('Atividade criada na biblioteca com sucesso!', 'Sucesso', 'fa-solid fa-circle-check', 'bg-success');
1300|            showToast('Erro inesperado ao criar atividade.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
1311|                showToast('Erro ao editar atividade.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
1343|                showToast('Atividade da etapa atualizada com sucesso!', 'Sucesso', 'fa-solid fa-circle-check', 'bg-success');
1357|            showToast('Atividade editada com sucesso!', 'Sucesso', 'fa-solid fa-circle-check', 'bg-success');
1362|            showToast('Erro inesperado ao editar atividade.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
1373|                showToast('Erro ao excluir atividade.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
1388|            showToast('Atividade excluída com sucesso!', 'Sucesso', 'fa-solid fa-circle-check', 'bg-success');
1394|            showToast('Erro inesperado ao excluir atividade.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
1407|                    showToast('Etapa não encontrada!', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
1435|                        showToast('Atividade duplicada com sucesso!', 'Sucesso', 'fa-solid fa-circle-check', 'bg-success');
1438|                        showToast(result.message || 'Erro ao duplicar atividade.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
1445|                        showToast('Template de atividade não encontrado.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
1493|                        showToast('Atividade duplicada com sucesso!', 'Sucesso', 'fa-solid fa-circle-check', 'bg-success');
1496|                        showToast(result.message || 'Erro ao duplicar atividade.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
1504|                    showToast('Template de atividade não encontrado.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
1540|            showToast('Erro inesperado ao duplicar atividade.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
1551|            showToast(
1565|                showToast(
1579|            showToast(
1588|            showToast(
1605|                showToast('Etapa não encontrada!', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
1617|                showToast('Erro ao remover atividade da etapa.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
1643|            showToast('Atividade removida da etapa com sucesso!', 'Sucesso', 'fa-solid fa-circle-check', 'bg-success');
1647|            showToast('Ocorreu um erro ao remover atividade da etapa.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
1688|                        showToast('Por favor, preencha os campos "Quantidade de Dias", "Direção Relativa" e "Referência de Data".', 'Campos obrigatórios', 'fa-solid fa-triangle-exclamation', 'bg-warning');
1690|                        showToast('Quando selecionar "Antes" na Direção Relativa, a Data de Referência deve ser "Contrato".', 'Validação', 'fa-solid fa-triangle-exclamation', 'bg-warning');
1692|                        showToast(data.message, 'Erro de validação', 'fa-solid fa-triangle-exclamation', 'bg-warning');
1694|                        showToast(data.message || 'Erro ao criar atividade.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
1718|                        showToast('Por favor, preencha os campos "Quantidade de Dias", "Direção Relativa" e "Referência de Data".', 'Campos obrigatórios', 'fa-solid fa-triangle-exclamation', 'bg-warning');
1720|                        showToast('Quando selecionar "Antes" na Direção Relativa, a Data de Referência deve ser "Contrato".', 'Validação', 'fa-solid fa-triangle-exclamation', 'bg-warning');
1722|                        showToast(data.message, 'Erro de validação', 'fa-solid fa-triangle-exclamation', 'bg-warning');
1724|                        showToast(data.message || 'Erro ao criar atividade.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');
2086|            showToast(
2094|            showToast(
2103|        showToast(
2380|        if (typeof showToast === 'function') {
2381|            showToast('Erro ao carregar documentos do Neural de Documentos.', 'Erro', 'fa-solid fa-circle-xmark', 'bg-danger');

File: public/js/onboarding/visualizar_atividades.js
Match lines: 6
635|            showToast('Atividade não encontrada!', 'Erro', 'fa-solid fa-circle-exclamation', 'bg-danger');
728|                showToast('Tipo de atividade inválido', 'Erro', 'fa-solid fa-circle-exclamation', 'bg-danger');
1152|                    if (typeof showToast === 'function') showToast('Não foi possível avançar.', 'Erro', 'fa-solid fa-circle-exclamation', 'bg-danger');
1158|                if (typeof showToast === 'function') showToast(err.message || 'Erro ao avançar etapa.', 'Erro', 'fa-solid fa-circle-exclamation', 'bg-danger');
2330|        if (showSuccessToast && typeof showToast === 'function') {
2331|            showToast('Link confirmado com sucesso!', 'Sucesso', 'fa-solid fa-check', 'bg-success');

File: public/js/organizational_structure/org_structure_enhancements.js
Match lines: 1
259|            showToast(

File: public/js/projects/GanttChart.js
Match lines: 4
4350|            showToast('Relacionamento entre tarefas criado com sucesso', 'Sucesso', 'fas fa-check', 'bg-success');
4355|            showToast('Erro ao criar relacionamento entre tarefas', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
4768|            showToast('Relacionamento entre tarefas removido com sucesso', 'Sucesso', 'fas fa-check', 'bg-success');
4810|            showToast('Erro ao remover relacionamento entre tarefas', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');

File: public/js/projects/ProfessionalGanttChart.js
Match lines: 4
4350|            showToast('Relacionamento entre tarefas criado com sucesso', 'Sucesso', 'fas fa-check', 'bg-success');
4355|            showToast('Erro ao criar relacionamento entre tarefas', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');
4768|            showToast('Relacionamento entre tarefas removido com sucesso', 'Sucesso', 'fas fa-check', 'bg-success');
4810|            showToast('Erro ao remover relacionamento entre tarefas', 'Erro', 'fas fa-exclamation-triangle', 'bg-danger');

File: public/js/services/CalendarModalService.js
Match lines: 14
6777|    if (typeof showToast === "function") {
6778|      showToast(message, "Sucesso", "fas fa-check", "bg-success");
6788|    if (typeof showToast === "function") {
6789|      showToast(message, "Erro", "fas fa-times-circle", "bg-danger");
7603|          // Tentar usar showToast como fallback
7604|          this.tryShowToast(message);
7607|    } else if (typeof showToast === "function") {
7608|      // Usar showToast se toastr não estiver disponível
7609|      showToast(message, "Sucesso", "fas fa-check", "bg-success");
7617|   * ✅ NOVO: Tenta usar showToast como fallback
7619|  tryShowToast(message) {
7621|      if (typeof showToast === "function") {
7622|        showToast(message, "Sucesso", "fas fa-check", "bg-success");
7627|      console.error("Erro ao usar showToast:", error);

File: public/js/shift-scheduling/index.js
Match lines: 2
241|      if (typeof showToast === 'function') {
242|        showToast(message, config.title, config.icon, config.bg);

File: public/js/ssma/action_plan_panel.js
Match lines: 6
431|        if (typeof window.showToast === 'function') {
432|            window.showToast(message, title || 'Plano de Ação', icon || 'fas fa-info-circle', tone || 'bg-info');
2017|        if (typeof window.showToast === 'function') {
2018|            window.showToast(
2565|                    } else if (typeof window.showToast === 'function') {
2566|                        window.showToast(q, 'Adriana', 'fa-regular fa-sparkles', 'bg-info');

File: public/js/ssma/cause-tree-committee-card.js
Match lines: 6
115|            if (typeof window.showToast === 'function') {
116|                window.showToast('Seletor de membros indisponível. Recarregue a página.', 'Erro', 'fas fa-times', 'bg-danger');
245|                if (typeof window.showToast === 'function') {
246|                    window.showToast('Card do comitê indisponível. Recarregue a página.', 'Erro', 'fas fa-times', 'bg-danger');
289|            if (typeof window.showToast === 'function') {
290|                window.showToast(error, 'Atenção', 'fas fa-info', 'bg-warning');

File: public/js/ssma/tree_view.js
Match lines: 2
99|    if (typeof window.showToast === 'function') {
100|      window.showToast(message, title, icon, bgColor);

File: public/js/utils/showToast.js
Match lines: 1
1|function showToast(message, title, iconClass, bgColor) {

File: public/js/webrtc-calls.js
Match lines: 14
1982|            if (typeof showToast === 'function') {
1983|                showToast('Chamada atendida em outro dispositivo', 'Informação', 'fas fa-phone', 'bg-info');
3185|                if (typeof showToast === 'function') {
3186|                    showToast('Compartilhamento de tela cancelado', 'Informação', 'fas fa-desktop', 'bg-info');
3193|            if (typeof showToast === 'function') {
3194|                showToast('Erro ao compartilhar tela: ' + (error.message || 'Erro desconhecido'), 'Erro', 'fas fa-exclamation-circle', 'bg-danger');
4413|        if (typeof showToast === 'function') {
4414|            showToast(message, title, icon, 'bg-warning');
4437|        if (typeof showToast === 'function') {
4438|            showToast('Chamada cancelada', 'Informação', 'fas fa-phone-slash', 'bg-info');
5162|            if (typeof showToast === 'function') {
5163|                showToast(message, toastTitle, toastIcon, toastClass);
5177|        if (!isPermissionError && typeof showToast === 'function') {
5178|            showToast(message, toastTitle, toastIcon, toastClass); 

Request #15 deepseek-flash P:24.15K C:62 CR:14.85K CW:0 1639ms
Reasoning
Let me check how showToast creates the toast container - whether it appends to body.
Tool Calls (1)
file_read
Show Details
{"file_path": "public/js/utils/showToast.js"}
File: public/js/utils/showToast.js (Total lines: 12)
IS_TRUNCATED: false
LINE_RANGE: 1-12
1|function showToast(message, title, iconClass, bgColor) {
2|    $(document).Toasts('create', {
3|        icon: iconClass,
4|        title: title,
5|        subtitle: '',
6|        body: message,
7|        class: bgColor + ' mt-2 mr-2',
8|        autohide: true,
9|        delay: 3000,
10|        autoremove: true
11|    });
12|}
Request #16 deepseek-flash P:24.36K C:214 CR:24.19K CW:0 1770ms
Reasoning
The adminlte Toasts plugin appends the toast container to body. Let me verify — AdminLTE's Toasts appends `.toast` elements inside `.toasts-container` or directly to body. Actually, in AdminLTE 3, `$(document).Toasts('create', ...)` inserts the toast into `.toasts-container` if it exists, otherwise appends directly to body. Let me check. Let me search for toasts-container in the templates.
Tool Calls (2)
code_search
Show Details
{"search_text": "toasts-container|Toasts"}
No matches found
code_search
Show Details
{"search_text": "cause-tree-floating-tools", "file_patterns": ["templates/ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig"]}
File: templates/ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig
Match lines: 9
52|    .cause-tree-floating-tools {
64|    .cause-tree-floating-tools-actions {
500|    body.cause-tree-node-modal-open .cause-tree-floating-tools {
523|        .cause-tree-floating-tools {
530|        .cause-tree-floating-tools-actions {
547|        .cause-tree-floating-tools {
553|        .cause-tree-floating-tools-actions {
580|                <div class="cause-tree-floating-tools">
586|                    <div class="cause-tree-floating-tools-actions">

Request #17 deepseek-flash P:24.74K C:505 CR:24.45K CW:0 2775ms
Reasoning
Let me find how the adminlte Toasts plugin works. It's likely in vendor. Let me check for the toast container element in the base layout. Actually let me search in the layouts for `.toasts-container` or similar. Since search returned no matches, the toast is probably appended directly to body. That would mean `body.cause-tree-node-modal-open > *` would apply pointer-events: none to the toast element. Toasts with `autohide: true` still show for 3s and then remove, so they would appear but not be clickable (can't close them). Actually the toast also has a close button. But more importantly, the toast is visible but pointer-events none would prevent clicking the close. Not a "frozen screen" issue though. Hmm, but wait — the more critical issue: `body.cause-tree-node-modal-open > *` applies `pointer-events: none` to ALL direct children of body. This includes the `.modal-backdrop` that Bootstrap appends to body when the modal opens, the main app wrapper, etc. But since the modal itself (`#ssmaCauseTreeNodeModal`) is presumably also a direct child of body, it gets pointer-events: none (then re-enabled for the .modal-dialog only). That's intentional. Now, the risk of the class being stuck. Let me check if the modal is removed from DOM. The modal is included in the template; it's not re-rendered. `initCauseTreeScreen` is called once at DOMContentLoaded per previous summary. So the listeners accumulation risk is low. Now let me focus on the main identified issues that are most defensible: 1. The toast blocking: `body.cause-tree-node-modal-open > *` → toasts. Severity: medium. Is this real? Let me verify where adminlte appends toasts. Let me look for the adminlte Toasts JS.
Tool Calls (2)
file_find
Show Details
{"query_name": "toasts"}
// The file was not found
code_search
Show Details
{"search_text": "toast", "file_patterns": ["public/**/*.js", ":(exclude)public/js/*"]}
Note: The results have been truncated. Only showing first 100 results.
File: public/AdminLTE/js/adminlte.js
Match lines: 45
1663|   * AdminLTE Toasts.js
1667|  var Toasts = function ($) {
1672|    var NAME = 'Toasts';
1673|    var DATA_KEY = 'lte.toasts';
1682|      BODY: 'toast-body',
1683|      CONTAINER_TOP_RIGHT: '#toastsContainerTopRight',
1684|      CONTAINER_TOP_LEFT: '#toastsContainerTopLeft',
1685|      CONTAINER_BOTTOM_RIGHT: '#toastsContainerBottomRight',
1686|      CONTAINER_BOTTOM_LEFT: '#toastsContainerBottomLeft'
1689|      TOP_RIGHT: 'toasts-top-right',
1690|      TOP_LEFT: 'toasts-top-left',
1691|      BOTTOM_RIGHT: 'toasts-bottom-right',
1692|      BOTTOM_LEFT: 'toasts-bottom-left',
1723|    var Toasts = /*#__PURE__*/function () {
1724|      function Toasts(element, config) {
1734|      var _proto = Toasts.prototype;
1737|        var toast = $('<div class="toast" role="alert" aria-live="assertive" aria-atomic="true"/>');
1738|        toast.data('autohide', this._config.autohide);
1739|        toast.data('animation', this._config.fade);
1742|          toast.addClass(this._config.class);
1746|          toast.data('delay', this._config.delay);
1749|        var toast_header = $('<div class="toast-header">');
1752|          var toast_image = $('<img />').addClass('rounded mr-2').attr('src', this._config.image).attr('alt', this._config.imageAlt);
1755|            toast_image.height(this._config.imageHeight).width('auto');
1758|          toast_header.append(toast_image);
1762|          toast_header.append($('<i />').addClass('mr-2').addClass(this._config.icon));
1766|          toast_header.append($('<strong />').addClass('mr-auto').html(this._config.title));
1770|          toast_header.append($('<small />').html(this._config.subtitle));
1774|          var toast_close = $('<button data-dismiss="toast" />').attr('type', 'button').addClass('ml-2 mb-1 close').attr('aria-label', 'Close').append('<span aria-hidden="true">&times;</span>');
1777|            toast_close.toggleClass('ml-2 ml-auto');
1780|          toast_header.append(toast_close);
1783|        toast.append(toast_header);
1786|          toast.append($('<div class="toast-body" />').html(this._config.body));
1789|        $(this._getContainerId()).prepend(toast);
1792|        toast.toast('show');
1795|          toast.on('hidden.bs.toast', function () {
1841|      Toasts._jQueryInterface = function _jQueryInterface(option, config) {
1845|          var toast = new Toasts($(this), _options);
1848|            toast[option]();
1853|      return Toasts;
1861|    $.fn[NAME] = Toasts._jQueryInterface;
1862|    $.fn[NAME].Constructor = Toasts;
1866|      return Toasts._jQueryInterface;
1869|    return Toasts;
1879|  exports.Toasts = Toasts;

File: public/AdminLTE/js/adminlte.min.js
Match lines: 1
6|!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t=t||self).adminlte={})}(this,(function(t){"use strict";var e=function(t){var e="ControlSidebar",i="lte.controlsidebar",n=t.fn[e],s={COLLAPSED:"collapsed.lte.controlsidebar",EXPANDED:"expanded.lte.controlsidebar"},o=".control-sidebar",a=".control-sidebar-content",r='[data-widget="control-sidebar"]',l=".main-header",c=".main-footer",d="control-sidebar-animate",h="control-sidebar-open",f="control-sidebar-slide-open",u="layout-fixed",g="layout-navbar-fixed",p="layout-sm-navbar-fixed",_="layout-md-navbar-fixed",m="layout-lg-navbar-fixed",v="layout-xl-navbar-fixed",C="layout-footer-fixed",y="layout-sm-footer-fixed",b="layout-md-footer-fixed",w="layout-lg-footer-fixed",x="layout-xl-footer-fixed",E={controlsidebarSlide:!0,scrollbarTheme:"os-theme-light",scrollbarAutoHide:"l"},A=function(){function e(t,e){this._element=t,this._config=e,this._init()}var n=e.prototype;return n.collapse=function(){this._config.controlsidebarSlide?(t("html").addClass(d),t("body").removeClass(f).delay(300).queue((function(){t(o).hide(),t("html").removeClass(d),t(this).dequeue()}))):t("body").removeClass(h);var e=t.Event(s.COLLAPSED);t(this._element).trigger(e)},n.show=function(){this._config.controlsidebarSlide?(t("html").addClass(d),t(o).show().delay(10).queue((function(){t("body").addClass(f).delay(300).queue((function(){t("html").removeClass(d),t(this).dequeue()})),t(this).dequeue()}))):t("body").addClass(h);var e=t.Event(s.EXPANDED);t(this._element).trigger(e)},n.toggle=function(){t("body").hasClass(h)||t("body").hasClass(f)?this.collapse():this.show()},n._init=function(){var e=this;this._fixHeight(),this._fixScrollHeight(),t(window).resize((function(){e._fixHeight(),e._fixScrollHeight()})),t(window).scroll((function(){(t("body").hasClass(h)||t("body").hasClass(f))&&e._fixScrollHeight()}))},n._fixScrollHeight=function(){var e={scroll:t(document).height(),window:t(window).height(),header:t(l).outerHeight(),footer:t(c).outerHeight()},i=Math.abs(e.window+t(window).scrollTop()-e.scroll),n=t(window).scrollTop(),s=!1,r=!1;t("body").hasClass(u)&&((t("body").hasClass(g)||t("body").hasClass(p)||t("body").hasClass(_)||t("body").hasClass(m)||t("body").hasClass(v))&&"fixed"===t(l).css("position")&&(s=!0),(t("body").hasClass(C)||t("body").hasClass(y)||t("body").hasClass(b)||t("body").hasClass(w)||t("body").hasClass(x))&&"fixed"===t(c).css("position")&&(r=!0),0===n&&0===i?(t(o).css("bottom",e.footer),t(o).css("top",e.header),t(o+", "+o+" "+a).css("height",e.window-(e.header+e.footer))):i<=e.footer?!1===r?(t(o).css("bottom",e.footer-i),t(o+", "+o+" "+a).css("height",e.window-(e.footer-i))):t(o).css("bottom",e.footer):n<=e.header?!1===s?(t(o).css("top",e.header-n),t(o+", "+o+" "+a).css("height",e.window-(e.header-n))):t(o).css("top",e.header):!1===s?(t(o).css("top",0),t(o+", "+o+" "+a).css("height",e.window)):t(o).css("top",e.header))},n._fixHeight=function(){var e=t(window).height(),i=t(l).outerHeight(),n=t(c).outerHeight();if(t("body").hasClass(u)){var s=e-i;(t("body").hasClass(C)||t("body").hasClass(y)||t("body").hasClass(b)||t("body").hasClass(w)||t("body").hasClass(x))&&"fixed"===t(c).css("position")&&(s=e-i-n),t(o+" "+a).css("height",s),"undefined"!=typeof t.fn.overlayScrollbars&&t(o+" "+a).overlayScrollbars({className:this._config.scrollbarTheme,sizeAutoCapable:!0,scrollbars:{autoHide:this._config.scrollbarAutoHide,clickScrolling:!0}})}},e._jQueryInterface=function(n){return this.each((function(){var s=t(this).data(i),o=t.extend({},E,t(this).data());if(s||(s=new e(this,o),t(this).data(i,s)),"undefined"===s[n])throw new Error(n+" is not a function");s[n]()}))},e}();return t(document).on("click",r,(function(e){e.preventDefault(),A._jQueryInterface.call(t(this),"toggle")})),t.fn[e]=A._jQueryInterface,t.fn[e].Constructor=A,t.fn[e].noConflict=function(){return t.fn[e]=n,A._jQueryInterface},A}(jQuery),i=function(t){var e="Layout",i=t.fn[e],n=".main-header",s=".main-sidebar",o=".main-sidebar .sidebar",a=".content-wrapper",r=".control-sidebar-content",l='[data-widget="control-sidebar"]',c=".main-footer",d='[data-widget="pushmenu"]',h=".login-box",f=".register-box",u="sidebar-focused",g="layout-fixed",p="control-sidebar-slide-open",_="control-sidebar-open",m={scrollbarTheme:"os-theme-light",scrollbarAutoHide:"l",panelAutoHeight:!0,loginRegisterAutoHeight:!0},v=function(){function e(t,e){this._config=e,this._element=t,this._init()}var i=e.prototype;return i.fixLayoutHeight=function(e){void 0===e&&(e=null);var i=0;(t("body").hasClass(p)||t("body").hasClass(_)||"control_sidebar"==e)&&(i=t(r).height());var s={window:t(window).height(),header:0!==t(n).length?t(n).outerHeight():0,footer:0!==t(c).length?t(c).outerHeight():0,sidebar:0!==t(o).length?t(o).height():0,control_sidebar:i},l=this._max(s),d=this._config.panelAutoHeight;!0===d&&(d=0),!1!==d&&(l==s.control_sidebar?t(a).css("min-height",l+d):l==s.window?t(a).css("min-height",l+d-s.header-s.footer):t(a).css("min-height",l+d-s.header)),t("body").hasClass(g)&&(!1!==d&&t(a).css("min-height",l+d-s.header-s.footer),"undefined"!=typeof t.fn.overlayScrollbars&&t(o).overlayScrollbars({className:this._config.scrollbarTheme,sizeAutoCapable:!0,scrollbars:{autoHide:this._config.scrollbarAutoHide,clickScrolling:!0}}))},i.fixLoginRegisterHeight=function(){if(0===t(h+", "+f).length)t("body, html").css("height","auto");else if(0!==t(h+", "+f).length){var e=t(h+", "+f).height();t("body").css("min-height")!==e&&t("body").css("min-height",e)}},i._init=function(){var e=this;this.fixLayoutHeight(),!0===this._config.loginRegisterAutoHeight?this.fixLoginRegisterHeight():Number.isInteger(this._config.loginRegisterAutoHeight)&&setInterval(this.fixLoginRegisterHeight,this._config.loginRegisterAutoHeight),t(o).on("collapsed.lte.treeview expanded.lte.treeview",(function(){e.fixLayoutHeight()})),t(d).on("collapsed.lte.pushmenu shown.lte.pushmenu",(function(){e.fixLayoutHeight()})),t(l).on("collapsed.lte.controlsidebar",(function(){e.fixLayoutHeight()})).on("expanded.lte.controlsidebar",(function(){e.fixLayoutHeight("control_sidebar")})),t(window).resize((function(){e.fixLayoutHeight()})),t("body.hold-transition").removeClass("hold-transition")},i._max=function(t){var e=0;return Object.keys(t).forEach((function(i){t[i]>e&&(e=t[i])})),e},e._jQueryInterface=function(i){return void 0===i&&(i=""),this.each((function(){var n=t(this).data("lte.layout"),s=t.extend({},m,t(this).data());n||(n=new e(t(this),s),t(this).data("lte.layout",n)),"init"===i||""===i?n._init():"fixLayoutHeight"!==i&&"fixLoginRegisterHeight"!==i||n[i]()}))},e}();return t(window).on("load",(function(){v._jQueryInterface.call(t("body"))})),t(o+" a").on("focusin",(function(){t(s).addClass(u)})),t(o+" a").on("focusout",(function(){t(s).removeClass(u)})),t.fn[e]=v._jQueryInterface,t.fn[e].Constructor=v,t.fn[e].noConflict=function(){return t.fn[e]=i,v._jQueryInterface},v}(jQuery),n=function(t){var e="PushMenu",i=".lte.pushmenu",n=t.fn[e],s={COLLAPSED:"collapsed"+i,SHOWN:"shown"+i},o={autoCollapseSize:992,enableRemember:!1,noTransitionAfterReload:!0},a='[data-widget="pushmenu"]',r="body",l="#sidebar-overlay",c=".wrapper",d="sidebar-collapse",h="sidebar-open",f="sidebar-closed",u=function(){function e(e,i){this._element=e,this._options=t.extend({},o,i),t(l).length||this._addOverlay(),this._init()}var n=e.prototype;return n.expand=function(){this._options.autoCollapseSize&&t(window).width()<=this._options.autoCollapseSize&&t(r).addClass(h),t(r).removeClass(d).removeClass(f),this._options.enableRemember&&localStorage.setItem("remember"+i,h);var e=t.Event(s.SHOWN);t(this._element).trigger(e)},n.collapse=function(){this._options.autoCollapseSize&&t(window).width()<=this._options.autoCollapseSize&&t(r).removeClass(h).addClass(f),t(r).addClass(d),this._options.enableRemember&&localStorage.setItem("remember"+i,d);var e=t.Event(s.COLLAPSED);t(this._element).trigger(e)},n.toggle=function(){t(r).hasClass(d)?this.expand():this.collapse()},n.autoCollapse=function(e){void 0===e&&(e=!1),this._options.autoCollapseSize&&(t(window).width()<=this._options.autoCollapseSize?t(r).hasClass(h)||this.collapse():1==e&&(t(r).hasClass(h)?t(r).removeClass(h):t(r).hasClass(f)&&this.expand()))},n.remember=function(){this._options.enableRemember&&(localStorage.getItem("remember"+i)==d?this._options.noTransitionAfterReload?t("body").addClass("hold-transition").addClass(d).delay(50).queue((function(){t(this).removeClass("hold-transition"),t(this).dequeue()})):t("body").addClass(d):this._options.noTransitionAfterReload?t("body").addClass("hold-transition").removeClass(d).delay(50).queue((function(){t(this).removeClass("hold-transition"),t(this).dequeue()})):t("body").removeClass(d))},n._init=function(){var e=this;this.remember(),this.autoCollapse(),t(window).resize((function(){e.autoCollapse(!0)}))},n._addOverlay=function(){var e=this,i=t("<div />",{id:"sidebar-overlay"});i.on("click",(function(){e.collapse()})),t(c).append(i)},e._jQueryInterface=function(i){return this.each((function(){var n=t(this).data("lte.pushmenu"),s=t.extend({},o,t(this).data());n||(n=new e(this,s),t(this).data("lte.pushmenu",n)),"string"==typeof i&&i.match(/collapse|expand|toggle/)&&n[i]()}))},e}();return t(document).on("click",a,(function(e){e.preventDefault();var i=e.currentTarget;"pushmenu"!==t(i).data("widget")&&(i=t(i).closest(a)),u._jQueryInterface.call(t(i),"toggle")})),t(window).on("load",(function(){u._jQueryInterface.call(t(a))})),t.fn[e]=u._jQueryInterface,t.fn[e].Constructor=u,t.fn[e].noConflict=function(){return t.fn[e]=n,u._jQueryInterface},u}(jQuery),s=function(t){var e="Treeview",i=t.fn[e],n={SELECTED:"selected.lte.treeview",EXPANDED:"expanded.lte.treeview",COLLAPSED:"collapsed.lte.treeview",LOAD_DATA_API:"load.lte.treeview"},s=".nav-item",o=".nav-treeview",a=".menu-open",r='[data-widget="treeview"]',l="menu-open",c="sidebar-collapse",d={trigger:r+" "+".nav-link",animationSpeed:300,accordion:!0,expandSidebar:!1,sidebarButtonSelector:'[data-widget="pushmenu"]'},h=function(){function e(t,e){this._config=e,this._element=t}var i=e.prototype;return i.init=function(){this._setupListeners()},i.expand=function(e,i){var s=this,r=t.Event(n.EXPANDED);if(this._config.accordion){var c=i.siblings(a).first(),d=c.find(o).first();this.collapse(d,c)}e.stop().slideDown(this._config.animationSpeed,(function(){i.addClass(l),t(s._element).trigger(r)})),this._config.expandSidebar&&this._expandSidebar()},i.collapse=function(e,i){var s=this,r=t.Event(n.COLLAPSED);e.stop().slideUp(this._config.animationSpeed,(function(){i.removeClass(l),t(s._element).trigger(r),e.find(a+" > "+o).slideUp(),e.find(a).removeClass(l)}))},i.toggle=function(e){var i=t(e.currentTarget),n=i.parent(),a=n.find("> "+o);if(a.is(o)||(n.is(s)||(a=n.parent().find("> "+o)),a.is(o))){e.preventDefault();var r=i.parents(s).first();r.hasClass(l)?this.collapse(t(a),r):this.expand(t(a),r)}},i._setupListeners=function(){var e=this;t(document).on("click",this._config.trigger,(function(t){e.toggle(t)}))},i._expandSidebar=function(){t("body").hasClass(c)&&t(this._config.sidebarButtonSelector).PushMenu("expand")},e._jQueryInterface=function(i){return this.each((function(){var n=t(this).data("lte.treeview"),s=t.extend({},d,t(this).data());n||(n=new e(t(this),s),t(this).data("lte.treeview",n)),"init"===i&&n[i]()}))},e}();return t(window).on(n.LOAD_DATA_API,(function(){t(r).each((function(){h._jQueryInterface.call(t(this),"init")}))})),t.fn[e]=h._jQueryInterface,t.fn[e].Constructor=h,t.fn[e].noConflict=function(){return t.fn[e]=i,h._jQueryInterface},h}(jQuery),o=function(t){var e="DirectChat",i=t.fn[e],n="toggled{EVENT_KEY}",s='[data-widget="chat-pane-toggle"]',o=".direct-chat",a="direct-chat-contacts-open",r=function(){function e(t,e){this._element=t}return e.prototype.toggle=function(){t(this._element).parents(o).first().toggleClass(a);var e=t.Event(n);t(this._element).trigger(e)},e._jQueryInterface=function(i){return this.each((function(){var n=t(this).data("lte.directchat");n||(n=new e(t(this)),t(this).data("lte.directchat",n)),n[i]()}))},e}();return t(document).on("click",s,(function(e){e&&e.preventDefault(),r._jQueryInterface.call(t(this),"toggle")})),t.fn[e]=r._jQueryInterface,t.fn[e].Constructor=r,t.fn[e].noConflict=function(){return t.fn[e]=i,r._jQueryInterface},r}(jQuery),a=function(t){var e="TodoList",i=t.fn[e],n='[data-widget="todo-list"]',s="done",o={onCheck:function(t){return t},onUnCheck:function(t){return t}},a=function(){function e(t,e){this._config=e,this._element=t,this._init()}var i=e.prototype;return i.toggle=function(e){e.parents("li").toggleClass(s),t(e).prop("checked")?this.check(e):this.unCheck(t(e))},i.check=function(t){this._config.onCheck.call(t)},i.unCheck=function(t){this._config.onUnCheck.call(t)},i._init=function(){var e=this;t(n).find("input:checkbox:checked").parents("li").toggleClass(s),t(n).on("change","input:checkbox",(function(i){e.toggle(t(i.target))}))},e._jQueryInterface=function(i){return this.each((function(){var n=t(this).data("lte.todolist"),s=t.extend({},o,t(this).data());n||(n=new e(t(this),s),t(this).data("lte.todolist",n)),"init"===i&&n[i]()}))},e}();return t(window).on("load",(function(){a._jQueryInterface.call(t(n))})),t.fn[e]=a._jQueryInterface,t.fn[e].Constructor=a,t.fn[e].noConflict=function(){return t.fn[e]=i,a._jQueryInterface},a}(jQuery),r=function(t){var e="CardWidget",i=".lte.cardwidget",n=t.fn[e],s={EXPANDED:"expanded"+i,COLLAPSED:"collapsed"+i,MAXIMIZED:"maximized"+i,MINIMIZED:"minimized"+i,REMOVED:"removed"+i},o="card",a="collapsed-card",r="collapsing-card",l="expanding-card",c="was-collapsed",d="maximized-card",h={DATA_REMOVE:'[data-card-widget="remove"]',DATA_COLLAPSE:'[data-card-widget="collapse"]',DATA_MAXIMIZE:'[data-card-widget="maximize"]',CARD:"."+o,CARD_HEADER:".card-header",CARD_BODY:".card-body",CARD_FOOTER:".card-footer",COLLAPSED:"."+a},f={animationSpeed:"normal",collapseTrigger:h.DATA_COLLAPSE,removeTrigger:h.DATA_REMOVE,maximizeTrigger:h.DATA_MAXIMIZE,collapseIcon:"fa-minus",expandIcon:"fa-plus",maximizeIcon:"fa-expand",minimizeIcon:"fa-compress"},u=function(){function e(e,i){this._element=e,this._parent=e.parents(h.CARD).first(),e.hasClass(o)&&(this._parent=e),this._settings=t.extend({},f,i)}var i=e.prototype;return i.collapse=function(){var e=this;this._parent.addClass(r).children(h.CARD_BODY+", "+h.CARD_FOOTER).slideUp(this._settings.animationSpeed,(function(){e._parent.addClass(a).removeClass(r)})),this._parent.find("> "+h.CARD_HEADER+" "+this._settings.collapseTrigger+" ."+this._settings.collapseIcon).addClass(this._settings.expandIcon).removeClass(this._settings.collapseIcon);var i=t.Event(s.COLLAPSED);this._element.trigger(i,this._parent)},i.expand=function(){var e=this;this._parent.addClass(l).children(h.CARD_BODY+", "+h.CARD_FOOTER).slideDown(this._settings.animationSpeed,(function(){e._parent.removeClass(a).removeClass(l)})),this._parent.find("> "+h.CARD_HEADER+" "+this._settings.collapseTrigger+" ."+this._settings.expandIcon).addClass(this._settings.collapseIcon).removeClass(this._settings.expandIcon);var i=t.Event(s.EXPANDED);this._element.trigger(i,this._parent)},i.remove=function(){this._parent.slideUp();var e=t.Event(s.REMOVED);this._element.trigger(e,this._parent)},i.toggle=function(){this._parent.hasClass(a)?this.expand():this.collapse()},i.maximize=function(){this._parent.find(this._settings.maximizeTrigger+" ."+this._settings.maximizeIcon).addClass(this._settings.minimizeIcon).removeClass(this._settings.maximizeIcon),this._parent.css({height:this._parent.height(),width:this._parent.width(),transition:"all .15s"}).delay(150).queue((function(){t(this).addClass(d),t("html").addClass(d),t(this).hasClass(a)&&t(this).addClass(c),t(this).dequeue()}));var e=t.Event(s.MAXIMIZED);this._element.trigger(e,this._parent)},i.minimize=function(){this._parent.find(this._settings.maximizeTrigger+" ."+this._settings.minimizeIcon).addClass(this._settings.maximizeIcon).removeClass(this._settings.minimizeIcon),this._parent.css("cssText","height:"+this._parent[0].style.height+" !important;width:"+this._parent[0].style.width+" !important; transition: all .15s;").delay(10).queue((function(){t(this).removeClass(d),t("html").removeClass(d),t(this).css({height:"inherit",width:"inherit"}),t(this).hasClass(c)&&t(this).removeClass(c),t(this).dequeue()}));var e=t.Event(s.MINIMIZED);this._element.trigger(e,this._parent)},i.toggleMaximize=function(){this._parent.hasClass(d)?this.minimize():this.maximize()},i._init=function(e){var i=this;this._parent=e,t(this).find(this._settings.collapseTrigger).click((function(){i.toggle()})),t(this).find(this._settings.maximizeTrigger).click((function(){i.toggleMaximize()})),t(this).find(this._settings.removeTrigger).click((function(){i.remove()}))},e._jQueryInterface=function(i){var n=t(this).data("lte.cardwidget"),s=t.extend({},f,t(this).data());n||(n=new e(t(this),s),t(this).data("lte.cardwidget","string"==typeof i?n:i)),"string"==typeof i&&i.match(/collapse|expand|remove|toggle|maximize|minimize|toggleMaximize/)?n[i]():"object"==typeof i&&n._init(t(this))},e}();return t(document).on("click",h.DATA_COLLAPSE,(function(e){e&&e.preventDefault(),u._jQueryInterface.call(t(this),"toggle")})),t(document).on("click",h.DATA_REMOVE,(function(e){e&&e.preventDefault(),u._jQueryInterface.call(t(this),"remove")})),t(document).on("click",h.DATA_MAXIMIZE,(function(e){e&&e.preventDefault(),u._jQueryInterface.call(t(this),"toggleMaximize")})),t.fn[e]=u._jQueryInterface,t.fn[e].Constructor=u,t.fn[e].noConflict=function(){return t.fn[e]=n,u._jQueryInterface},u}(jQuery),l=function(t){var e="CardRefresh",i=t.fn[e],n={LOADED:"loaded.lte.cardrefresh",OVERLAY_ADDED:"overlay.added.lte.cardrefresh",OVERLAY_REMOVED:"overlay.removed.lte.cardrefresh"},s="card",o={CARD:"."+s,DATA_REFRESH:'[data-card-widget="card-refresh"]'},a={source:"",sourceSelector:"",params:{},trigger:o.DATA_REFRESH,content:".card-body",loadInContent:!0,loadOnInit:!0,responseType:"",overlayTemplate:'<div class="overlay"><i class="fas fa-2x fa-sync-alt fa-spin"></i></div>',onLoadStart:function(){},onLoadDone:function(t){return t}},r=function(){function e(e,i){if(this._element=e,this._parent=e.parents(o.CARD).first(),this._settings=t.extend({},a,i),this._overlay=t(this._settings.overlayTemplate),e.hasClass(s)&&(this._parent=e),""===this._settings.source)throw new Error("Source url was not defined. Please specify a url in your CardRefresh source option.")}var i=e.prototype;return i.load=function(){this._addOverlay(),this._settings.onLoadStart.call(t(this)),t.get(this._settings.source,this._settings.params,function(e){this._settings.loadInContent&&(""!=this._settings.sourceSelector&&(e=t(e).find(this._settings.sourceSelector).html()),this._parent.find(this._settings.content).html(e)),this._settings.onLoadDone.call(t(this),e),this._removeOverlay()}.bind(this),""!==this._settings.responseType&&this._settings.responseType);var e=t.Event(n.LOADED);t(this._element).trigger(e)},i._addOverlay=function(){this._parent.append(this._overlay);var e=t.Event(n.OVERLAY_ADDED);t(this._element).trigger(e)},i._removeOverlay=function(){this._parent.find(this._overlay).remove();var e=t.Event(n.OVERLAY_REMOVED);t(this._element).trigger(e)},i._init=function(e){var i=this;t(this).find(this._settings.trigger).on("click",(function(){i.load()})),this._settings.loadOnInit&&this.load()},e._jQueryInterface=function(i){var n=t(this).data("lte.cardrefresh"),s=t.extend({},a,t(this).data());n||(n=new e(t(this),s),t(this).data("lte.cardrefresh","string"==typeof i?n:i)),"string"==typeof i&&i.match(/load/)?n[i]():n._init(t(this))},e}();return t(document).on("click",o.DATA_REFRESH,(function(e){e&&e.preventDefault(),r._jQueryInterface.call(t(this),"load")})),t(document).ready((function(){t(o.DATA_REFRESH).each((function(){r._jQueryInterface.call(t(this))}))})),t.fn[e]=r._jQueryInterface,t.fn[e].Constructor=r,t.fn[e].noConflict=function(){return t.fn[e]=i,r._jQueryInterface},r}(jQuery),c=function(t){var e="Dropdown",i=t.fn[e],n=".navbar",s=".dropdown-menu",o=".dropdown-menu.show",a='[data-toggle="dropdown"]',r="dropdown-menu-right",l={},c=function(){function e(t,e){this._config=e,this._element=t}var i=e.prototype;return i.toggleSubmenu=function(){this._element.siblings().show().toggleClass("show"),this._element.next().hasClass("show")||this._element.parents(".dropdown-menu").first().find(".show").removeClass("show").hide(),this._element.parents("li.nav-item.dropdown.show").on("hidden.bs.dropdown",(function(e){t(".dropdown-submenu .show").removeClass("show").hide()}))},i.fixPosition=function(){var e=t(o);if(0!==e.length){e.hasClass(r)?(e.css("left","inherit"),e.css("right",0)):(e.css("left",0),e.css("right","inherit"));var i=e.offset(),n=e.width(),s=t(window).width()-i.left;i.left<0?(e.css("left","inherit"),e.css("right",i.left-5)):s<n&&(e.css("left","inherit"),e.css("right",0))}},e._jQueryInterface=function(i){return this.each((function(){var n=t(this).data("lte.dropdown"),s=t.extend({},l,t(this).data());n||(n=new e(t(this),s),t(this).data("lte.dropdown",n)),"toggleSubmenu"!==i&&"fixPosition"!=i||n[i]()}))},e}();return t(s+" "+a).on("click",(function(e){e.preventDefault(),e.stopPropagation(),c._jQueryInterface.call(t(this),"toggleSubmenu")})),t(n+" "+a).on("click",(function(e){e.preventDefault(),setTimeout((function(){c._jQueryInterface.call(t(this),"fixPosition")}),1)})),t.fn[e]=c._jQueryInterface,t.fn[e].Constructor=c,t.fn[e].noConflict=function(){return t.fn[e]=i,c._jQueryInterface},c}(jQuery),d=function(t){var e="Toasts",i=t.fn[e],n={INIT:"init.lte.toasts",CREATED:"created.lte.toasts",REMOVED:"removed.lte.toasts"},s="#toastsContainerTopRight",o="#toastsContainerTopLeft",a="#toastsContainerBottomRight",r="#toastsContainerBottomLeft",l="toasts-top-right",c="toasts-top-left",d="toasts-bottom-right",h="toasts-bottom-left",f="topRight",u="topLeft",g="bottomRight",p="bottomLeft",_={position:f,fixed:!0,autohide:!1,autoremove:!0,delay:1e3,fade:!0,icon:null,image:null,imageAlt:null,imageHeight:"25px",title:null,subtitle:null,close:!0,body:null,class:null},m=function(){function e(e,i){this._config=i,this._prepareContainer();var s=t.Event(n.INIT);t("body").trigger(s)}var i=e.prototype;return i.create=function(){var e=t('<div class="toast" role="alert" aria-live="assertive" aria-atomic="true"/>');e.data("autohide",this._config.autohide),e.data("animation",this._config.fade),this._config.class&&e.addClass(this._config.class),this._config.delay&&500!=this._config.delay&&e.data("delay",this._config.delay);var i=t('<div class="toast-header">');if(null!=this._config.image){var s=t("<img />").addClass("rounded mr-2").attr("src",this._config.image).attr("alt",this._config.imageAlt);null!=this._config.imageHeight&&s.height(this._config.imageHeight).width("auto"),i.append(s)}if(null!=this._config.icon&&i.append(t("<i />").addClass("mr-2").addClass(this._config.icon)),null!=this._config.title&&i.append(t("<strong />").addClass("mr-auto").html(this._config.title)),null!=this._config.subtitle&&i.append(t("<small />").html(this._config.subtitle)),1==this._config.close){var o=t('<button data-dismiss="toast" />').attr("type","button").addClass("ml-2 mb-1 close").attr("aria-label","Close").append('<span aria-hidden="true">&times;</span>');null==this._config.title&&o.toggleClass("ml-2 ml-auto"),i.append(o)}e.append(i),null!=this._config.body&&e.append(t('<div class="toast-body" />').html(this._config.body)),t(this._getContainerId()).prepend(e);var a=t.Event(n.CREATED);t("body").trigger(a),e.toast("show"),this._config.autoremove&&e.on("hidden.bs.toast",(function(){t(this).delay(200).remove();var e=t.Event(n.REMOVED);t("body").trigger(e)}))},i._getContainerId=function(){return this._config.position==f?s:this._config.position==u?o:this._config.position==g?a:this._config.position==p?r:void 0},i._prepareContainer=function(){if(0===t(this._getContainerId()).length){var e=t("<div />").attr("id",this._getContainerId().replace("#",""));this._config.position==f?e.addClass(l):this._config.position==u?e.addClass(c):this._config.position==g?e.addClass(d):this._config.position==p&&e.addClass(h),t("body").append(e)}this._config.fixed?t(this._getContainerId()).addClass("fixed"):t(this._getContainerId()).removeClass("fixed")},e._jQueryInterface=function(i,n){return this.each((function(){var s=t.extend({},_,n),o=new e(t(this),s);"create"===i&&o[i]()}))},e}();return t.fn[e]=m._jQueryInterface,t.fn[e].Constructor=m,t.fn[e].noConflict=function(){return t.fn[e]=i,m._jQueryInterface},m}(jQuery);t.CardRefresh=l,t.CardWidget=r,t.ControlSidebar=e,t.DirectChat=o,t.Dropdown=c,t.Layout=i,t.PushMenu=n,t.Toasts=d,t.TodoList=a,t.Treeview=s,Object.defineProperty(t,"__esModule",{value:!0})}));

File: public/AdminLTE/js/custom.js
Match lines: 9
13|    '/js/utils/showToast.js',
25|        showToast,
37|// Função para observar mudanças no DOM e garantir que o container de toasts esteja sempre no final do body - isso evita problemas de sobreposição com outros elementos e conflitos principalmente entre toasts e modais
38|function watchToastContainer() {
42|                const toastContainer = $('#toastsContainerTopRight');
43|                if (toastContainer.length > 0 && !toastContainer.is('body > :last-child')) {
44|                    toastContainer.detach().appendTo('body');
57|const toastWatcher = watchToastContainer();
58|// Para parar, chame toastWatcher.disconnect();

File: public/AdminLTE/plugins/bootstrap/js/bootstrap.bundle.js
Match lines: 14
6904|  var NAME$a = 'toast';
6906|  var DATA_KEY$a = 'bs.toast';
6933|    DATA_DISMISS: '[data-dismiss="toast"]'
6941|  var Toast =
6944|    function Toast(element, config) {
6953|    var _proto = Toast.prototype;
7062|    Toast._jQueryInterface = function _jQueryInterface(config) {
7070|          data = new Toast(this, _config);
7084|    _createClass(Toast, null, [{
7101|    return Toast;
7110|  $.fn[NAME$a] = Toast._jQueryInterface;
7111|  $.fn[NAME$a].Constructor = Toast;
7115|    return Toast._jQueryInterface;
7127|  exports.Toast = Toast;

File: public/AdminLTE/plugins/bootstrap/js/bootstrap.bundle.min.js
Match lines: 1
6|!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("jquery")):"function"==typeof define&&define.amd?define(["exports","jquery"],t):t((e=e||self).bootstrap={},e.jQuery)}(this,function(e,p){"use strict";function i(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function s(e,t,n){return t&&i(e.prototype,t),n&&i(e,n),e}function t(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,i)}return n}function l(o){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?t(Object(r),!0).forEach(function(e){var t,n,i;t=o,i=r[n=e],n in t?Object.defineProperty(t,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[n]=i}):Object.getOwnPropertyDescriptors?Object.defineProperties(o,Object.getOwnPropertyDescriptors(r)):t(Object(r)).forEach(function(e){Object.defineProperty(o,e,Object.getOwnPropertyDescriptor(r,e))})}return o}p=p&&p.hasOwnProperty("default")?p.default:p;var n="transitionend";function o(e){var t=this,n=!1;return p(this).one(m.TRANSITION_END,function(){n=!0}),setTimeout(function(){n||m.triggerTransitionEnd(t)},e),this}var m={TRANSITION_END:"bsTransitionEnd",getUID:function(e){for(;e+=~~(1e6*Math.random()),document.getElementById(e););return e},getSelectorFromElement:function(e){var t=e.getAttribute("data-target");if(!t||"#"===t){var n=e.getAttribute("href");t=n&&"#"!==n?n.trim():""}try{return document.querySelector(t)?t:null}catch(e){return null}},getTransitionDurationFromElement:function(e){if(!e)return 0;var t=p(e).css("transition-duration"),n=p(e).css("transition-delay"),i=parseFloat(t),o=parseFloat(n);return i||o?(t=t.split(",")[0],n=n.split(",")[0],1e3*(parseFloat(t)+parseFloat(n))):0},reflow:function(e){return e.offsetHeight},triggerTransitionEnd:function(e){p(e).trigger(n)},supportsTransitionEnd:function(){return Boolean(n)},isElement:function(e){return(e[0]||e).nodeType},typeCheckConfig:function(e,t,n){for(var i in n)if(Object.prototype.hasOwnProperty.call(n,i)){var o=n[i],r=t[i],s=r&&m.isElement(r)?"element":(a=r,{}.toString.call(a).match(/\s([a-z]+)/i)[1].toLowerCase());if(!new RegExp(o).test(s))throw new Error(e.toUpperCase()+': Option "'+i+'" provided type "'+s+'" but expected type "'+o+'".')}var a},findShadowRoot:function(e){if(!document.documentElement.attachShadow)return null;if("function"!=typeof e.getRootNode)return e instanceof ShadowRoot?e:e.parentNode?m.findShadowRoot(e.parentNode):null;var t=e.getRootNode();return t instanceof ShadowRoot?t:null},jQueryDetection:function(){if("undefined"==typeof p)throw new TypeError("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.");var e=p.fn.jquery.split(" ")[0].split(".");if(e[0]<2&&e[1]<9||1===e[0]&&9===e[1]&&e[2]<1||4<=e[0])throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}};m.jQueryDetection(),p.fn.emulateTransitionEnd=o,p.event.special[m.TRANSITION_END]={bindType:n,delegateType:n,handle:function(e){if(p(e.target).is(this))return e.handleObj.handler.apply(this,arguments)}};var r="alert",a="bs.alert",c="."+a,h=p.fn[r],u={CLOSE:"close"+c,CLOSED:"closed"+c,CLICK_DATA_API:"click"+c+".data-api"},f="alert",d="fade",g="show",_=function(){function i(e){this._element=e}var e=i.prototype;return e.close=function(e){var t=this._element;e&&(t=this._getRootElement(e)),this._triggerCloseEvent(t).isDefaultPrevented()||this._removeElement(t)},e.dispose=function(){p.removeData(this._element,a),this._element=null},e._getRootElement=function(e){var t=m.getSelectorFromElement(e),n=!1;return t&&(n=document.querySelector(t)),n=n||p(e).closest("."+f)[0]},e._triggerCloseEvent=function(e){var t=p.Event(u.CLOSE);return p(e).trigger(t),t},e._removeElement=function(t){var n=this;if(p(t).removeClass(g),p(t).hasClass(d)){var e=m.getTransitionDurationFromElement(t);p(t).one(m.TRANSITION_END,function(e){return n._destroyElement(t,e)}).emulateTransitionEnd(e)}else this._destroyElement(t)},e._destroyElement=function(e){p(e).detach().trigger(u.CLOSED).remove()},i._jQueryInterface=function(n){return this.each(function(){var e=p(this),t=e.data(a);t||(t=new i(this),e.data(a,t)),"close"===n&&t[n](this)})},i._handleDismiss=function(t){return function(e){e&&e.preventDefault(),t.close(this)}},s(i,null,[{key:"VERSION",get:function(){return"4.4.1"}}]),i}();p(document).on(u.CLICK_DATA_API,'[data-dismiss="alert"]',_._handleDismiss(new _)),p.fn[r]=_._jQueryInterface,p.fn[r].Constructor=_,p.fn[r].noConflict=function(){return p.fn[r]=h,_._jQueryInterface};var v="button",y="bs.button",E="."+y,b=".data-api",w=p.fn[v],T="active",C="btn",S="focus",D='[data-toggle^="button"]',I='[data-toggle="buttons"]',A='[data-toggle="button"]',O='[data-toggle="buttons"] .btn',N='input:not([type="hidden"])',k=".active",L=".btn",P={CLICK_DATA_API:"click"+E+b,FOCUS_BLUR_DATA_API:"focus"+E+b+" blur"+E+b,LOAD_DATA_API:"load"+E+b},x=function(){function n(e){this._element=e}var e=n.prototype;return e.toggle=function(){var e=!0,t=!0,n=p(this._element).closest(I)[0];if(n){var i=this._element.querySelector(N);if(i){if("radio"===i.type)if(i.checked&&this._element.classList.contains(T))e=!1;else{var o=n.querySelector(k);o&&p(o).removeClass(T)}else"checkbox"===i.type?"LABEL"===this._element.tagName&&i.checked===this._element.classList.contains(T)&&(e=!1):e=!1;e&&(i.checked=!this._element.classList.contains(T),p(i).trigger("change")),i.focus(),t=!1}}this._element.hasAttribute("disabled")||this._element.classList.contains("disabled")||(t&&this._element.setAttribute("aria-pressed",!this._element.classList.contains(T)),e&&p(this._element).toggleClass(T))},e.dispose=function(){p.removeData(this._element,y),this._element=null},n._jQueryInterface=function(t){return this.each(function(){var e=p(this).data(y);e||(e=new n(this),p(this).data(y,e)),"toggle"===t&&e[t]()})},s(n,null,[{key:"VERSION",get:function(){return"4.4.1"}}]),n}();p(document).on(P.CLICK_DATA_API,D,function(e){var t=e.target;if(p(t).hasClass(C)||(t=p(t).closest(L)[0]),!t||t.hasAttribute("disabled")||t.classList.contains("disabled"))e.preventDefault();else{var n=t.querySelector(N);if(n&&(n.hasAttribute("disabled")||n.classList.contains("disabled")))return void e.preventDefault();x._jQueryInterface.call(p(t),"toggle")}}).on(P.FOCUS_BLUR_DATA_API,D,function(e){var t=p(e.target).closest(L)[0];p(t).toggleClass(S,/^focus(in)?$/.test(e.type))}),p(window).on(P.LOAD_DATA_API,function(){for(var e=[].slice.call(document.querySelectorAll(O)),t=0,n=e.length;t<n;t++){var i=e[t],o=i.querySelector(N);o.checked||o.hasAttribute("checked")?i.classList.add(T):i.classList.remove(T)}for(var r=0,s=(e=[].slice.call(document.querySelectorAll(A))).length;r<s;r++){var a=e[r];"true"===a.getAttribute("aria-pressed")?a.classList.add(T):a.classList.remove(T)}}),p.fn[v]=x._jQueryInterface,p.fn[v].Constructor=x,p.fn[v].noConflict=function(){return p.fn[v]=w,x._jQueryInterface};var j="carousel",H="bs.carousel",R="."+H,F=".data-api",M=p.fn[j],W={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0,touch:!0},U={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean",touch:"boolean"},B="next",q="prev",K="left",Q="right",V={SLIDE:"slide"+R,SLID:"slid"+R,KEYDOWN:"keydown"+R,MOUSEENTER:"mouseenter"+R,MOUSELEAVE:"mouseleave"+R,TOUCHSTART:"touchstart"+R,TOUCHMOVE:"touchmove"+R,TOUCHEND:"touchend"+R,POINTERDOWN:"pointerdown"+R,POINTERUP:"pointerup"+R,DRAG_START:"dragstart"+R,LOAD_DATA_API:"load"+R+F,CLICK_DATA_API:"click"+R+F},Y="carousel",z="active",X="slide",G="carousel-item-right",$="carousel-item-left",J="carousel-item-next",Z="carousel-item-prev",ee="pointer-event",te=".active",ne=".active.carousel-item",ie=".carousel-item",oe=".carousel-item img",re=".carousel-item-next, .carousel-item-prev",se=".carousel-indicators",ae="[data-slide], [data-slide-to]",le='[data-ride="carousel"]',ce={TOUCH:"touch",PEN:"pen"},he=function(){function r(e,t){this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this.touchStartX=0,this.touchDeltaX=0,this._config=this._getConfig(t),this._element=e,this._indicatorsElement=this._element.querySelector(se),this._touchSupported="ontouchstart"in document.documentElement||0<navigator.maxTouchPoints,this._pointerEvent=Boolean(window.PointerEvent||window.MSPointerEvent),this._addEventListeners()}var e=r.prototype;return e.next=function(){this._isSliding||this._slide(B)},e.nextWhenVisible=function(){!document.hidden&&p(this._element).is(":visible")&&"hidden"!==p(this._element).css("visibility")&&this.next()},e.prev=function(){this._isSliding||this._slide(q)},e.pause=function(e){e||(this._isPaused=!0),this._element.querySelector(re)&&(m.triggerTransitionEnd(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null},e.cycle=function(e){e||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config.interval&&!this._isPaused&&(this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))},e.to=function(e){var t=this;this._activeElement=this._element.querySelector(ne);var n=this._getItemIndex(this._activeElement);if(!(e>this._items.length-1||e<0))if(this._isSliding)p(this._element).one(V.SLID,function(){return t.to(e)});else{if(n===e)return this.pause(),void this.cycle();var i=n<e?B:q;this._slide(i,this._items[e])}},e.dispose=function(){p(this._element).off(R),p.removeData(this._element,H),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null},e._getConfig=function(e){return e=l({},W,{},e),m.typeCheckConfig(j,e,U),e},e._handleSwipe=function(){var e=Math.abs(this.touchDeltaX);if(!(e<=40)){var t=e/this.touchDeltaX;(this.touchDeltaX=0)<t&&this.prev(),t<0&&this.next()}},e._addEventListeners=function(){var t=this;this._config.keyboard&&p(this._element).on(V.KEYDOWN,function(e){return t._keydown(e)}),"hover"===this._config.pause&&p(this._element).on(V.MOUSEENTER,function(e){return t.pause(e)}).on(V.MOUSELEAVE,function(e){return t.cycle(e)}),this._config.touch&&this._addTouchEventListeners()},e._addTouchEventListeners=function(){var t=this;if(this._touchSupported){var n=function(e){t._pointerEvent&&ce[e.originalEvent.pointerType.toUpperCase()]?t.touchStartX=e.originalEvent.clientX:t._pointerEvent||(t.touchStartX=e.originalEvent.touches[0].clientX)},i=function(e){t._pointerEvent&&ce[e.originalEvent.pointerType.toUpperCase()]&&(t.touchDeltaX=e.originalEvent.clientX-t.touchStartX),t._handleSwipe(),"hover"===t._config.pause&&(t.pause(),t.touchTimeout&&clearTimeout(t.touchTimeout),t.touchTimeout=setTimeout(function(e){return t.cycle(e)},500+t._config.interval))};p(this._element.querySelectorAll(oe)).on(V.DRAG_START,function(e){return e.preventDefault()}),this._pointerEvent?(p(this._element).on(V.POINTERDOWN,function(e){return n(e)}),p(this._element).on(V.POINTERUP,function(e){return i(e)}),this._element.classList.add(ee)):(p(this._element).on(V.TOUCHSTART,function(e){return n(e)}),p(this._element).on(V.TOUCHMOVE,function(e){return function(e){e.originalEvent.touches&&1<e.originalEvent.touches.length?t.touchDeltaX=0:t.touchDeltaX=e.originalEvent.touches[0].clientX-t.touchStartX}(e)}),p(this._element).on(V.TOUCHEND,function(e){return i(e)}))}},e._keydown=function(e){if(!/input|textarea/i.test(e.target.tagName))switch(e.which){case 37:e.preventDefault(),this.prev();break;case 39:e.preventDefault(),this.next()}},e._getItemIndex=function(e){return this._items=e&&e.parentNode?[].slice.call(e.parentNode.querySelectorAll(ie)):[],this._items.indexOf(e)},e._getItemByDirection=function(e,t){var n=e===B,i=e===q,o=this._getItemIndex(t),r=this._items.length-1;if((i&&0===o||n&&o===r)&&!this._config.wrap)return t;var s=(o+(e===q?-1:1))%this._items.length;return-1==s?this._items[this._items.length-1]:this._items[s]},e._triggerSlideEvent=function(e,t){var n=this._getItemIndex(e),i=this._getItemIndex(this._element.querySelector(ne)),o=p.Event(V.SLIDE,{relatedTarget:e,direction:t,from:i,to:n});return p(this._element).trigger(o),o},e._setActiveIndicatorElement=function(e){if(this._indicatorsElement){var t=[].slice.call(this._indicatorsElement.querySelectorAll(te));p(t).removeClass(z);var n=this._indicatorsElement.children[this._getItemIndex(e)];n&&p(n).addClass(z)}},e._slide=function(e,t){var n,i,o,r=this,s=this._element.querySelector(ne),a=this._getItemIndex(s),l=t||s&&this._getItemByDirection(e,s),c=this._getItemIndex(l),h=Boolean(this._interval);if(o=e===B?(n=$,i=J,K):(n=G,i=Z,Q),l&&p(l).hasClass(z))this._isSliding=!1;else if(!this._triggerSlideEvent(l,o).isDefaultPrevented()&&s&&l){this._isSliding=!0,h&&this.pause(),this._setActiveIndicatorElement(l);var u=p.Event(V.SLID,{relatedTarget:l,direction:o,from:a,to:c});if(p(this._element).hasClass(X)){p(l).addClass(i),m.reflow(l),p(s).addClass(n),p(l).addClass(n);var f=parseInt(l.getAttribute("data-interval"),10);f?(this._config.defaultInterval=this._config.defaultInterval||this._config.interval,this._config.interval=f):this._config.interval=this._config.defaultInterval||this._config.interval;var d=m.getTransitionDurationFromElement(s);p(s).one(m.TRANSITION_END,function(){p(l).removeClass(n+" "+i).addClass(z),p(s).removeClass(z+" "+i+" "+n),r._isSliding=!1,setTimeout(function(){return p(r._element).trigger(u)},0)}).emulateTransitionEnd(d)}else p(s).removeClass(z),p(l).addClass(z),this._isSliding=!1,p(this._element).trigger(u);h&&this.cycle()}},r._jQueryInterface=function(i){return this.each(function(){var e=p(this).data(H),t=l({},W,{},p(this).data());"object"==typeof i&&(t=l({},t,{},i));var n="string"==typeof i?i:t.slide;if(e||(e=new r(this,t),p(this).data(H,e)),"number"==typeof i)e.to(i);else if("string"==typeof n){if("undefined"==typeof e[n])throw new TypeError('No method named "'+n+'"');e[n]()}else t.interval&&t.ride&&(e.pause(),e.cycle())})},r._dataApiClickHandler=function(e){var t=m.getSelectorFromElement(this);if(t){var n=p(t)[0];if(n&&p(n).hasClass(Y)){var i=l({},p(n).data(),{},p(this).data()),o=this.getAttribute("data-slide-to");o&&(i.interval=!1),r._jQueryInterface.call(p(n),i),o&&p(n).data(H).to(o),e.preventDefault()}}},s(r,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"Default",get:function(){return W}}]),r}();p(document).on(V.CLICK_DATA_API,ae,he._dataApiClickHandler),p(window).on(V.LOAD_DATA_API,function(){for(var e=[].slice.call(document.querySelectorAll(le)),t=0,n=e.length;t<n;t++){var i=p(e[t]);he._jQueryInterface.call(i,i.data())}}),p.fn[j]=he._jQueryInterface,p.fn[j].Constructor=he,p.fn[j].noConflict=function(){return p.fn[j]=M,he._jQueryInterface};var ue="collapse",fe="bs.collapse",de="."+fe,pe=p.fn[ue],me={toggle:!0,parent:""},ge={toggle:"boolean",parent:"(string|element)"},_e={SHOW:"show"+de,SHOWN:"shown"+de,HIDE:"hide"+de,HIDDEN:"hidden"+de,CLICK_DATA_API:"click"+de+".data-api"},ve="show",ye="collapse",Ee="collapsing",be="collapsed",we="width",Te="height",Ce=".show, .collapsing",Se='[data-toggle="collapse"]',De=function(){function a(t,e){this._isTransitioning=!1,this._element=t,this._config=this._getConfig(e),this._triggerArray=[].slice.call(document.querySelectorAll('[data-toggle="collapse"][href="#'+t.id+'"],[data-toggle="collapse"][data-target="#'+t.id+'"]'));for(var n=[].slice.call(document.querySelectorAll(Se)),i=0,o=n.length;i<o;i++){var r=n[i],s=m.getSelectorFromElement(r),a=[].slice.call(document.querySelectorAll(s)).filter(function(e){return e===t});null!==s&&0<a.length&&(this._selector=s,this._triggerArray.push(r))}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}var e=a.prototype;return e.toggle=function(){p(this._element).hasClass(ve)?this.hide():this.show()},e.show=function(){var e,t,n=this;if(!this._isTransitioning&&!p(this._element).hasClass(ve)&&(this._parent&&0===(e=[].slice.call(this._parent.querySelectorAll(Ce)).filter(function(e){return"string"==typeof n._config.parent?e.getAttribute("data-parent")===n._config.parent:e.classList.contains(ye)})).length&&(e=null),!(e&&(t=p(e).not(this._selector).data(fe))&&t._isTransitioning))){var i=p.Event(_e.SHOW);if(p(this._element).trigger(i),!i.isDefaultPrevented()){e&&(a._jQueryInterface.call(p(e).not(this._selector),"hide"),t||p(e).data(fe,null));var o=this._getDimension();p(this._element).removeClass(ye).addClass(Ee),this._element.style[o]=0,this._triggerArray.length&&p(this._triggerArray).removeClass(be).attr("aria-expanded",!0),this.setTransitioning(!0);var r="scroll"+(o[0].toUpperCase()+o.slice(1)),s=m.getTransitionDurationFromElement(this._element);p(this._element).one(m.TRANSITION_END,function(){p(n._element).removeClass(Ee).addClass(ye).addClass(ve),n._element.style[o]="",n.setTransitioning(!1),p(n._element).trigger(_e.SHOWN)}).emulateTransitionEnd(s),this._element.style[o]=this._element[r]+"px"}}},e.hide=function(){var e=this;if(!this._isTransitioning&&p(this._element).hasClass(ve)){var t=p.Event(_e.HIDE);if(p(this._element).trigger(t),!t.isDefaultPrevented()){var n=this._getDimension();this._element.style[n]=this._element.getBoundingClientRect()[n]+"px",m.reflow(this._element),p(this._element).addClass(Ee).removeClass(ye).removeClass(ve);var i=this._triggerArray.length;if(0<i)for(var o=0;o<i;o++){var r=this._triggerArray[o],s=m.getSelectorFromElement(r);if(null!==s)p([].slice.call(document.querySelectorAll(s))).hasClass(ve)||p(r).addClass(be).attr("aria-expanded",!1)}this.setTransitioning(!0);this._element.style[n]="";var a=m.getTransitionDurationFromElement(this._element);p(this._element).one(m.TRANSITION_END,function(){e.setTransitioning(!1),p(e._element).removeClass(Ee).addClass(ye).trigger(_e.HIDDEN)}).emulateTransitionEnd(a)}}},e.setTransitioning=function(e){this._isTransitioning=e},e.dispose=function(){p.removeData(this._element,fe),this._config=null,this._parent=null,this._element=null,this._triggerArray=null,this._isTransitioning=null},e._getConfig=function(e){return(e=l({},me,{},e)).toggle=Boolean(e.toggle),m.typeCheckConfig(ue,e,ge),e},e._getDimension=function(){return p(this._element).hasClass(we)?we:Te},e._getParent=function(){var e,n=this;m.isElement(this._config.parent)?(e=this._config.parent,"undefined"!=typeof this._config.parent.jquery&&(e=this._config.parent[0])):e=document.querySelector(this._config.parent);var t='[data-toggle="collapse"][data-parent="'+this._config.parent+'"]',i=[].slice.call(e.querySelectorAll(t));return p(i).each(function(e,t){n._addAriaAndCollapsedClass(a._getTargetFromElement(t),[t])}),e},e._addAriaAndCollapsedClass=function(e,t){var n=p(e).hasClass(ve);t.length&&p(t).toggleClass(be,!n).attr("aria-expanded",n)},a._getTargetFromElement=function(e){var t=m.getSelectorFromElement(e);return t?document.querySelector(t):null},a._jQueryInterface=function(i){return this.each(function(){var e=p(this),t=e.data(fe),n=l({},me,{},e.data(),{},"object"==typeof i&&i?i:{});if(!t&&n.toggle&&/show|hide/.test(i)&&(n.toggle=!1),t||(t=new a(this,n),e.data(fe,t)),"string"==typeof i){if("undefined"==typeof t[i])throw new TypeError('No method named "'+i+'"');t[i]()}})},s(a,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"Default",get:function(){return me}}]),a}();p(document).on(_e.CLICK_DATA_API,Se,function(e){"A"===e.currentTarget.tagName&&e.preventDefault();var n=p(this),t=m.getSelectorFromElement(this),i=[].slice.call(document.querySelectorAll(t));p(i).each(function(){var e=p(this),t=e.data(fe)?"toggle":n.data();De._jQueryInterface.call(e,t)})}),p.fn[ue]=De._jQueryInterface,p.fn[ue].Constructor=De,p.fn[ue].noConflict=function(){return p.fn[ue]=pe,De._jQueryInterface};var Ie="undefined"!=typeof window&&"undefined"!=typeof document&&"undefined"!=typeof navigator,Ae=function(){for(var e=["Edge","Trident","Firefox"],t=0;t<e.length;t+=1)if(Ie&&0<=navigator.userAgent.indexOf(e[t]))return 1;return 0}();var Oe=Ie&&window.Promise?function(e){var t=!1;return function(){t||(t=!0,window.Promise.resolve().then(function(){t=!1,e()}))}}:function(e){var t=!1;return function(){t||(t=!0,setTimeout(function(){t=!1,e()},Ae))}};function Ne(e){return e&&"[object Function]"==={}.toString.call(e)}function ke(e,t){if(1!==e.nodeType)return[];var n=e.ownerDocument.defaultView.getComputedStyle(e,null);return t?n[t]:n}function Le(e){return"HTML"===e.nodeName?e:e.parentNode||e.host}function Pe(e){if(!e)return document.body;switch(e.nodeName){case"HTML":case"BODY":return e.ownerDocument.body;case"#document":return e.body}var t=ke(e),n=t.overflow,i=t.overflowX,o=t.overflowY;return/(auto|scroll|overlay)/.test(n+o+i)?e:Pe(Le(e))}function xe(e){return e&&e.referenceNode?e.referenceNode:e}var je=Ie&&!(!window.MSInputMethodContext||!document.documentMode),He=Ie&&/MSIE 10/.test(navigator.userAgent);function Re(e){return 11===e?je:10===e?He:je||He}function Fe(e){if(!e)return document.documentElement;for(var t=Re(10)?document.body:null,n=e.offsetParent||null;n===t&&e.nextElementSibling;)n=(e=e.nextElementSibling).offsetParent;var i=n&&n.nodeName;return i&&"BODY"!==i&&"HTML"!==i?-1!==["TH","TD","TABLE"].indexOf(n.nodeName)&&"static"===ke(n,"position")?Fe(n):n:e?e.ownerDocument.documentElement:document.documentElement}function Me(e){return null!==e.parentNode?Me(e.parentNode):e}function We(e,t){if(!(e&&e.nodeType&&t&&t.nodeType))return document.documentElement;var n=e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING,i=n?e:t,o=n?t:e,r=document.createRange();r.setStart(i,0),r.setEnd(o,0);var s=r.commonAncestorContainer;if(e!==s&&t!==s||i.contains(o))return function(e){var t=e.nodeName;return"BODY"!==t&&("HTML"===t||Fe(e.firstElementChild)===e)}(s)?s:Fe(s);var a=Me(e);return a.host?We(a.host,t):We(e,Me(t).host)}function Ue(e,t){var n="top"===(1<arguments.length&&void 0!==t?t:"top")?"scrollTop":"scrollLeft",i=e.nodeName;if("BODY"!==i&&"HTML"!==i)return e[n];var o=e.ownerDocument.documentElement;return(e.ownerDocument.scrollingElement||o)[n]}function Be(e,t){var n="x"===t?"Left":"Top",i="Left"==n?"Right":"Bottom";return parseFloat(e["border"+n+"Width"],10)+parseFloat(e["border"+i+"Width"],10)}function qe(e,t,n,i){return Math.max(t["offset"+e],t["scroll"+e],n["client"+e],n["offset"+e],n["scroll"+e],Re(10)?parseInt(n["offset"+e])+parseInt(i["margin"+("Height"===e?"Top":"Left")])+parseInt(i["margin"+("Height"===e?"Bottom":"Right")]):0)}function Ke(e){var t=e.body,n=e.documentElement,i=Re(10)&&getComputedStyle(n);return{height:qe("Height",t,n,i),width:qe("Width",t,n,i)}}var Qe=function(e,t,n){return t&&Ve(e.prototype,t),n&&Ve(e,n),e};function Ve(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function Ye(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var ze=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e};function Xe(e){return ze({},e,{right:e.left+e.width,bottom:e.top+e.height})}function Ge(e){var t={};try{if(Re(10)){t=e.getBoundingClientRect();var n=Ue(e,"top"),i=Ue(e,"left");t.top+=n,t.left+=i,t.bottom+=n,t.right+=i}else t=e.getBoundingClientRect()}catch(e){}var o={left:t.left,top:t.top,width:t.right-t.left,height:t.bottom-t.top},r="HTML"===e.nodeName?Ke(e.ownerDocument):{},s=r.width||e.clientWidth||o.width,a=r.height||e.clientHeight||o.height,l=e.offsetWidth-s,c=e.offsetHeight-a;if(l||c){var h=ke(e);l-=Be(h,"x"),c-=Be(h,"y"),o.width-=l,o.height-=c}return Xe(o)}function $e(e,t,n){var i=2<arguments.length&&void 0!==n&&n,o=Re(10),r="HTML"===t.nodeName,s=Ge(e),a=Ge(t),l=Pe(e),c=ke(t),h=parseFloat(c.borderTopWidth,10),u=parseFloat(c.borderLeftWidth,10);i&&r&&(a.top=Math.max(a.top,0),a.left=Math.max(a.left,0));var f=Xe({top:s.top-a.top-h,left:s.left-a.left-u,width:s.width,height:s.height});if(f.marginTop=0,f.marginLeft=0,!o&&r){var d=parseFloat(c.marginTop,10),p=parseFloat(c.marginLeft,10);f.top-=h-d,f.bottom-=h-d,f.left-=u-p,f.right-=u-p,f.marginTop=d,f.marginLeft=p}return(o&&!i?t.contains(l):t===l&&"BODY"!==l.nodeName)&&(f=function(e,t,n){var i=2<arguments.length&&void 0!==n&&n,o=Ue(t,"top"),r=Ue(t,"left"),s=i?-1:1;return e.top+=o*s,e.bottom+=o*s,e.left+=r*s,e.right+=r*s,e}(f,t)),f}function Je(e){if(!e||!e.parentElement||Re())return document.documentElement;for(var t=e.parentElement;t&&"none"===ke(t,"transform");)t=t.parentElement;return t||document.documentElement}function Ze(e,t,n,i,o){var r=4<arguments.length&&void 0!==o&&o,s={top:0,left:0},a=r?Je(e):We(e,xe(t));if("viewport"===i)s=function(e,t){var n=1<arguments.length&&void 0!==t&&t,i=e.ownerDocument.documentElement,o=$e(e,i),r=Math.max(i.clientWidth,window.innerWidth||0),s=Math.max(i.clientHeight,window.innerHeight||0),a=n?0:Ue(i),l=n?0:Ue(i,"left");return Xe({top:a-o.top+o.marginTop,left:l-o.left+o.marginLeft,width:r,height:s})}(a,r);else{var l=void 0;"scrollParent"===i?"BODY"===(l=Pe(Le(t))).nodeName&&(l=e.ownerDocument.documentElement):l="window"===i?e.ownerDocument.documentElement:i;var c=$e(l,a,r);if("HTML"!==l.nodeName||function e(t){var n=t.nodeName;if("BODY"===n||"HTML"===n)return!1;if("fixed"===ke(t,"position"))return!0;var i=Le(t);return!!i&&e(i)}(a))s=c;else{var h=Ke(e.ownerDocument),u=h.height,f=h.width;s.top+=c.top-c.marginTop,s.bottom=u+c.top,s.left+=c.left-c.marginLeft,s.right=f+c.left}}var d="number"==typeof(n=n||0);return s.left+=d?n:n.left||0,s.top+=d?n:n.top||0,s.right-=d?n:n.right||0,s.bottom-=d?n:n.bottom||0,s}function et(e,t,i,n,o,r){var s=5<arguments.length&&void 0!==r?r:0;if(-1===e.indexOf("auto"))return e;var a=Ze(i,n,s,o),l={top:{width:a.width,height:t.top-a.top},right:{width:a.right-t.right,height:a.height},bottom:{width:a.width,height:a.bottom-t.bottom},left:{width:t.left-a.left,height:a.height}},c=Object.keys(l).map(function(e){return ze({key:e},l[e],{area:function(e){return e.width*e.height}(l[e])})}).sort(function(e,t){return t.area-e.area}),h=c.filter(function(e){var t=e.width,n=e.height;return t>=i.clientWidth&&n>=i.clientHeight}),u=0<h.length?h[0].key:c[0].key,f=e.split("-")[1];return u+(f?"-"+f:"")}function tt(e,t,n,i){var o=3<arguments.length&&void 0!==i?i:null;return $e(n,o?Je(t):We(t,xe(n)),o)}function nt(e){var t=e.ownerDocument.defaultView.getComputedStyle(e),n=parseFloat(t.marginTop||0)+parseFloat(t.marginBottom||0),i=parseFloat(t.marginLeft||0)+parseFloat(t.marginRight||0);return{width:e.offsetWidth+i,height:e.offsetHeight+n}}function it(e){var t={left:"right",right:"left",bottom:"top",top:"bottom"};return e.replace(/left|right|bottom|top/g,function(e){return t[e]})}function ot(e,t,n){n=n.split("-")[0];var i=nt(e),o={width:i.width,height:i.height},r=-1!==["right","left"].indexOf(n),s=r?"top":"left",a=r?"left":"top",l=r?"height":"width",c=r?"width":"height";return o[s]=t[s]+t[l]/2-i[l]/2,o[a]=n===a?t[a]-i[c]:t[it(a)],o}function rt(e,t){return Array.prototype.find?e.find(t):e.filter(t)[0]}function st(e,n,t){return(void 0===t?e:e.slice(0,function(e,t,n){if(Array.prototype.findIndex)return e.findIndex(function(e){return e[t]===n});var i=rt(e,function(e){return e[t]===n});return e.indexOf(i)}(e,"name",t))).forEach(function(e){e.function&&console.warn("`modifier.function` is deprecated, use `modifier.fn`!");var t=e.function||e.fn;e.enabled&&Ne(t)&&(n.offsets.popper=Xe(n.offsets.popper),n.offsets.reference=Xe(n.offsets.reference),n=t(n,e))}),n}function at(e,n){return e.some(function(e){var t=e.name;return e.enabled&&t===n})}function lt(e){for(var t=[!1,"ms","Webkit","Moz","O"],n=e.charAt(0).toUpperCase()+e.slice(1),i=0;i<t.length;i++){var o=t[i],r=o?""+o+n:e;if("undefined"!=typeof document.body.style[r])return r}return null}function ct(e){var t=e.ownerDocument;return t?t.defaultView:window}function ht(e,t,n,i){n.updateBound=i,ct(e).addEventListener("resize",n.updateBound,{passive:!0});var o=Pe(e);return function e(t,n,i,o){var r="BODY"===t.nodeName,s=r?t.ownerDocument.defaultView:t;s.addEventListener(n,i,{passive:!0}),r||e(Pe(s.parentNode),n,i,o),o.push(s)}(o,"scroll",n.updateBound,n.scrollParents),n.scrollElement=o,n.eventsEnabled=!0,n}function ut(){this.state.eventsEnabled&&(cancelAnimationFrame(this.scheduleUpdate),this.state=function(e,t){return ct(e).removeEventListener("resize",t.updateBound),t.scrollParents.forEach(function(e){e.removeEventListener("scroll",t.updateBound)}),t.updateBound=null,t.scrollParents=[],t.scrollElement=null,t.eventsEnabled=!1,t}(this.reference,this.state))}function ft(e){return""!==e&&!isNaN(parseFloat(e))&&isFinite(e)}function dt(n,i){Object.keys(i).forEach(function(e){var t="";-1!==["width","height","top","right","bottom","left"].indexOf(e)&&ft(i[e])&&(t="px"),n.style[e]=i[e]+t})}function pt(e,t){function n(e){return e}var i=e.offsets,o=i.popper,r=i.reference,s=Math.round,a=Math.floor,l=s(r.width),c=s(o.width),h=-1!==["left","right"].indexOf(e.placement),u=-1!==e.placement.indexOf("-"),f=t?h||u||l%2==c%2?s:a:n,d=t?s:n;return{left:f(l%2==1&&c%2==1&&!u&&t?o.left-1:o.left),top:d(o.top),bottom:d(o.bottom),right:f(o.right)}}var mt=Ie&&/Firefox/i.test(navigator.userAgent);function gt(e,t,n){var i=rt(e,function(e){return e.name===t}),o=!!i&&e.some(function(e){return e.name===n&&e.enabled&&e.order<i.order});if(!o){var r="`"+t+"`",s="`"+n+"`";console.warn(s+" modifier is required by "+r+" modifier in order to work, be sure to include it before "+r+"!")}return o}var _t=["auto-start","auto","auto-end","top-start","top","top-end","right-start","right","right-end","bottom-end","bottom","bottom-start","left-end","left","left-start"],vt=_t.slice(3);function yt(e,t){var n=1<arguments.length&&void 0!==t&&t,i=vt.indexOf(e),o=vt.slice(i+1).concat(vt.slice(0,i));return n?o.reverse():o}var Et="flip",bt="clockwise",wt="counterclockwise";function Tt(e,o,r,t){var s=[0,0],a=-1!==["right","left"].indexOf(t),n=e.split(/(\+|\-)/).map(function(e){return e.trim()}),i=n.indexOf(rt(n,function(e){return-1!==e.search(/,|\s/)}));n[i]&&-1===n[i].indexOf(",")&&console.warn("Offsets separated by white space(s) are deprecated, use a comma (,) instead.");var l=/\s*,\s*|\s+/,c=-1!==i?[n.slice(0,i).concat([n[i].split(l)[0]]),[n[i].split(l)[1]].concat(n.slice(i+1))]:[n];return(c=c.map(function(e,t){var n=(1===t?!a:a)?"height":"width",i=!1;return e.reduce(function(e,t){return""===e[e.length-1]&&-1!==["+","-"].indexOf(t)?(e[e.length-1]=t,i=!0,e):i?(e[e.length-1]+=t,i=!1,e):e.concat(t)},[]).map(function(e){return function(e,t,n,i){var o=e.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),r=+o[1],s=o[2];if(!r)return e;if(0!==s.indexOf("%"))return"vh"!==s&&"vw"!==s?r:("vh"===s?Math.max(document.documentElement.clientHeight,window.innerHeight||0):Math.max(document.documentElement.clientWidth,window.innerWidth||0))/100*r;var a=void 0;switch(s){case"%p":a=n;break;case"%":case"%r":default:a=i}return Xe(a)[t]/100*r}(e,n,o,r)})})).forEach(function(n,i){n.forEach(function(e,t){ft(e)&&(s[i]+=e*("-"===n[t-1]?-1:1))})}),s}var Ct={placement:"bottom",positionFixed:!1,eventsEnabled:!0,removeOnDestroy:!1,onCreate:function(){},onUpdate:function(){},modifiers:{shift:{order:100,enabled:!0,fn:function(e){var t=e.placement,n=t.split("-")[0],i=t.split("-")[1];if(i){var o=e.offsets,r=o.reference,s=o.popper,a=-1!==["bottom","top"].indexOf(n),l=a?"left":"top",c=a?"width":"height",h={start:Ye({},l,r[l]),end:Ye({},l,r[l]+r[c]-s[c])};e.offsets.popper=ze({},s,h[i])}return e}},offset:{order:200,enabled:!0,fn:function(e,t){var n=t.offset,i=e.placement,o=e.offsets,r=o.popper,s=o.reference,a=i.split("-")[0],l=void 0;return l=ft(+n)?[+n,0]:Tt(n,r,s,a),"left"===a?(r.top+=l[0],r.left-=l[1]):"right"===a?(r.top+=l[0],r.left+=l[1]):"top"===a?(r.left+=l[0],r.top-=l[1]):"bottom"===a&&(r.left+=l[0],r.top+=l[1]),e.popper=r,e},offset:0},preventOverflow:{order:300,enabled:!0,fn:function(e,i){var t=i.boundariesElement||Fe(e.instance.popper);e.instance.reference===t&&(t=Fe(t));var n=lt("transform"),o=e.instance.popper.style,r=o.top,s=o.left,a=o[n];o.top="",o.left="",o[n]="";var l=Ze(e.instance.popper,e.instance.reference,i.padding,t,e.positionFixed);o.top=r,o.left=s,o[n]=a,i.boundaries=l;var c=i.priority,h=e.offsets.popper,u={primary:function(e){var t=h[e];return h[e]<l[e]&&!i.escapeWithReference&&(t=Math.max(h[e],l[e])),Ye({},e,t)},secondary:function(e){var t="right"===e?"left":"top",n=h[t];return h[e]>l[e]&&!i.escapeWithReference&&(n=Math.min(h[t],l[e]-("right"===e?h.width:h.height))),Ye({},t,n)}};return c.forEach(function(e){var t=-1!==["left","top"].indexOf(e)?"primary":"secondary";h=ze({},h,u[t](e))}),e.offsets.popper=h,e},priority:["left","right","top","bottom"],padding:5,boundariesElement:"scrollParent"},keepTogether:{order:400,enabled:!0,fn:function(e){var t=e.offsets,n=t.popper,i=t.reference,o=e.placement.split("-")[0],r=Math.floor,s=-1!==["top","bottom"].indexOf(o),a=s?"right":"bottom",l=s?"left":"top",c=s?"width":"height";return n[a]<r(i[l])&&(e.offsets.popper[l]=r(i[l])-n[c]),n[l]>r(i[a])&&(e.offsets.popper[l]=r(i[a])),e}},arrow:{order:500,enabled:!0,fn:function(e,t){var n;if(!gt(e.instance.modifiers,"arrow","keepTogether"))return e;var i=t.element;if("string"==typeof i){if(!(i=e.instance.popper.querySelector(i)))return e}else if(!e.instance.popper.contains(i))return console.warn("WARNING: `arrow.element` must be child of its popper element!"),e;var o=e.placement.split("-")[0],r=e.offsets,s=r.popper,a=r.reference,l=-1!==["left","right"].indexOf(o),c=l?"height":"width",h=l?"Top":"Left",u=h.toLowerCase(),f=l?"left":"top",d=l?"bottom":"right",p=nt(i)[c];a[d]-p<s[u]&&(e.offsets.popper[u]-=s[u]-(a[d]-p)),a[u]+p>s[d]&&(e.offsets.popper[u]+=a[u]+p-s[d]),e.offsets.popper=Xe(e.offsets.popper);var m=a[u]+a[c]/2-p/2,g=ke(e.instance.popper),_=parseFloat(g["margin"+h],10),v=parseFloat(g["border"+h+"Width"],10),y=m-e.offsets.popper[u]-_-v;return y=Math.max(Math.min(s[c]-p,y),0),e.arrowElement=i,e.offsets.arrow=(Ye(n={},u,Math.round(y)),Ye(n,f,""),n),e},element:"[x-arrow]"},flip:{order:600,enabled:!0,fn:function(m,g){if(at(m.instance.modifiers,"inner"))return m;if(m.flipped&&m.placement===m.originalPlacement)return m;var _=Ze(m.instance.popper,m.instance.reference,g.padding,g.boundariesElement,m.positionFixed),v=m.placement.split("-")[0],y=it(v),E=m.placement.split("-")[1]||"",b=[];switch(g.behavior){case Et:b=[v,y];break;case bt:b=yt(v);break;case wt:b=yt(v,!0);break;default:b=g.behavior}return b.forEach(function(e,t){if(v!==e||b.length===t+1)return m;v=m.placement.split("-")[0],y=it(v);var n=m.offsets.popper,i=m.offsets.reference,o=Math.floor,r="left"===v&&o(n.right)>o(i.left)||"right"===v&&o(n.left)<o(i.right)||"top"===v&&o(n.bottom)>o(i.top)||"bottom"===v&&o(n.top)<o(i.bottom),s=o(n.left)<o(_.left),a=o(n.right)>o(_.right),l=o(n.top)<o(_.top),c=o(n.bottom)>o(_.bottom),h="left"===v&&s||"right"===v&&a||"top"===v&&l||"bottom"===v&&c,u=-1!==["top","bottom"].indexOf(v),f=!!g.flipVariations&&(u&&"start"===E&&s||u&&"end"===E&&a||!u&&"start"===E&&l||!u&&"end"===E&&c),d=!!g.flipVariationsByContent&&(u&&"start"===E&&a||u&&"end"===E&&s||!u&&"start"===E&&c||!u&&"end"===E&&l),p=f||d;(r||h||p)&&(m.flipped=!0,(r||h)&&(v=b[t+1]),p&&(E=function(e){return"end"===e?"start":"start"===e?"end":e}(E)),m.placement=v+(E?"-"+E:""),m.offsets.popper=ze({},m.offsets.popper,ot(m.instance.popper,m.offsets.reference,m.placement)),m=st(m.instance.modifiers,m,"flip"))}),m},behavior:"flip",padding:5,boundariesElement:"viewport",flipVariations:!1,flipVariationsByContent:!1},inner:{order:700,enabled:!1,fn:function(e){var t=e.placement,n=t.split("-")[0],i=e.offsets,o=i.popper,r=i.reference,s=-1!==["left","right"].indexOf(n),a=-1===["top","left"].indexOf(n);return o[s?"left":"top"]=r[n]-(a?o[s?"width":"height"]:0),e.placement=it(t),e.offsets.popper=Xe(o),e}},hide:{order:800,enabled:!0,fn:function(e){if(!gt(e.instance.modifiers,"hide","preventOverflow"))return e;var t=e.offsets.reference,n=rt(e.instance.modifiers,function(e){return"preventOverflow"===e.name}).boundaries;if(t.bottom<n.top||t.left>n.right||t.top>n.bottom||t.right<n.left){if(!0===e.hide)return e;e.hide=!0,e.attributes["x-out-of-boundaries"]=""}else{if(!1===e.hide)return e;e.hide=!1,e.attributes["x-out-of-boundaries"]=!1}return e}},computeStyle:{order:850,enabled:!0,fn:function(e,t){var n=t.x,i=t.y,o=e.offsets.popper,r=rt(e.instance.modifiers,function(e){return"applyStyle"===e.name}).gpuAcceleration;void 0!==r&&console.warn("WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!");var s=void 0!==r?r:t.gpuAcceleration,a=Fe(e.instance.popper),l=Ge(a),c={position:o.position},h=pt(e,window.devicePixelRatio<2||!mt),u="bottom"===n?"top":"bottom",f="right"===i?"left":"right",d=lt("transform"),p=void 0,m=void 0;if(m="bottom"==u?"HTML"===a.nodeName?-a.clientHeight+h.bottom:-l.height+h.bottom:h.top,p="right"==f?"HTML"===a.nodeName?-a.clientWidth+h.right:-l.width+h.right:h.left,s&&d)c[d]="translate3d("+p+"px, "+m+"px, 0)",c[u]=0,c[f]=0,c.willChange="transform";else{var g="bottom"==u?-1:1,_="right"==f?-1:1;c[u]=m*g,c[f]=p*_,c.willChange=u+", "+f}var v={"x-placement":e.placement};return e.attributes=ze({},v,e.attributes),e.styles=ze({},c,e.styles),e.arrowStyles=ze({},e.offsets.arrow,e.arrowStyles),e},gpuAcceleration:!0,x:"bottom",y:"right"},applyStyle:{order:900,enabled:!0,fn:function(e){return dt(e.instance.popper,e.styles),function(t,n){Object.keys(n).forEach(function(e){!1!==n[e]?t.setAttribute(e,n[e]):t.removeAttribute(e)})}(e.instance.popper,e.attributes),e.arrowElement&&Object.keys(e.arrowStyles).length&&dt(e.arrowElement,e.arrowStyles),e},onLoad:function(e,t,n,i,o){var r=tt(o,t,e,n.positionFixed),s=et(n.placement,r,t,e,n.modifiers.flip.boundariesElement,n.modifiers.flip.padding);return t.setAttribute("x-placement",s),dt(t,{position:n.positionFixed?"fixed":"absolute"}),n},gpuAcceleration:void 0}}},St=(Qe(Dt,[{key:"update",value:function(){return function(){if(!this.state.isDestroyed){var e={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};e.offsets.reference=tt(this.state,this.popper,this.reference,this.options.positionFixed),e.placement=et(this.options.placement,e.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding),e.originalPlacement=e.placement,e.positionFixed=this.options.positionFixed,e.offsets.popper=ot(this.popper,e.offsets.reference,e.placement),e.offsets.popper.position=this.options.positionFixed?"fixed":"absolute",e=st(this.modifiers,e),this.state.isCreated?this.options.onUpdate(e):(this.state.isCreated=!0,this.options.onCreate(e))}}.call(this)}},{key:"destroy",value:function(){return function(){return this.state.isDestroyed=!0,at(this.modifiers,"applyStyle")&&(this.popper.removeAttribute("x-placement"),this.popper.style.position="",this.popper.style.top="",this.popper.style.left="",this.popper.style.right="",this.popper.style.bottom="",this.popper.style.willChange="",this.popper.style[lt("transform")]=""),this.disableEventListeners(),this.options.removeOnDestroy&&this.popper.parentNode.removeChild(this.popper),this}.call(this)}},{key:"enableEventListeners",value:function(){return function(){this.state.eventsEnabled||(this.state=ht(this.reference,this.options,this.state,this.scheduleUpdate))}.call(this)}},{key:"disableEventListeners",value:function(){return ut.call(this)}}]),Dt);function Dt(e,t){var n=this,i=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,Dt),this.scheduleUpdate=function(){return requestAnimationFrame(n.update)},this.update=Oe(this.update.bind(this)),this.options=ze({},Dt.Defaults,i),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=e&&e.jquery?e[0]:e,this.popper=t&&t.jquery?t[0]:t,this.options.modifiers={},Object.keys(ze({},Dt.Defaults.modifiers,i.modifiers)).forEach(function(e){n.options.modifiers[e]=ze({},Dt.Defaults.modifiers[e]||{},i.modifiers?i.modifiers[e]:{})}),this.modifiers=Object.keys(this.options.modifiers).map(function(e){return ze({name:e},n.options.modifiers[e])}).sort(function(e,t){return e.order-t.order}),this.modifiers.forEach(function(e){e.enabled&&Ne(e.onLoad)&&e.onLoad(n.reference,n.popper,n.options,e,n.state)}),this.update();var o=this.options.eventsEnabled;o&&this.enableEventListeners(),this.state.eventsEnabled=o}St.Utils=("undefined"!=typeof window?window:global).PopperUtils,St.placements=_t,St.Defaults=Ct;var It="dropdown",At="bs.dropdown",Ot="."+At,Nt=".data-api",kt=p.fn[It],Lt=new RegExp("38|40|27"),Pt={HIDE:"hide"+Ot,HIDDEN:"hidden"+Ot,SHOW:"show"+Ot,SHOWN:"shown"+Ot,CLICK:"click"+Ot,CLICK_DATA_API:"click"+Ot+Nt,KEYDOWN_DATA_API:"keydown"+Ot+Nt,KEYUP_DATA_API:"keyup"+Ot+Nt},xt="disabled",jt="show",Ht="dropup",Rt="dropright",Ft="dropleft",Mt="dropdown-menu-right",Wt="position-static",Ut='[data-toggle="dropdown"]',Bt=".dropdown form",qt=".dropdown-menu",Kt=".navbar-nav",Qt=".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",Vt="top-start",Yt="top-end",zt="bottom-start",Xt="bottom-end",Gt="right-start",$t="left-start",Jt={offset:0,flip:!0,boundary:"scrollParent",reference:"toggle",display:"dynamic",popperConfig:null},Zt={offset:"(number|string|function)",flip:"boolean",boundary:"(string|element)",reference:"(string|element)",display:"string",popperConfig:"(null|object)"},en=function(){function c(e,t){this._element=e,this._popper=null,this._config=this._getConfig(t),this._menu=this._getMenuElement(),this._inNavbar=this._detectNavbar(),this._addEventListeners()}var e=c.prototype;return e.toggle=function(){if(!this._element.disabled&&!p(this._element).hasClass(xt)){var e=p(this._menu).hasClass(jt);c._clearMenus(),e||this.show(!0)}},e.show=function(e){if(void 0===e&&(e=!1),!(this._element.disabled||p(this._element).hasClass(xt)||p(this._menu).hasClass(jt))){var t={relatedTarget:this._element},n=p.Event(Pt.SHOW,t),i=c._getParentFromElement(this._element);if(p(i).trigger(n),!n.isDefaultPrevented()){if(!this._inNavbar&&e){if("undefined"==typeof St)throw new TypeError("Bootstrap's dropdowns require Popper.js (https://popper.js.org/)");var o=this._element;"parent"===this._config.reference?o=i:m.isElement(this._config.reference)&&(o=this._config.reference,"undefined"!=typeof this._config.reference.jquery&&(o=this._config.reference[0])),"scrollParent"!==this._config.boundary&&p(i).addClass(Wt),this._popper=new St(o,this._menu,this._getPopperConfig())}"ontouchstart"in document.documentElement&&0===p(i).closest(Kt).length&&p(document.body).children().on("mouseover",null,p.noop),this._element.focus(),this._element.setAttribute("aria-expanded",!0),p(this._menu).toggleClass(jt),p(i).toggleClass(jt).trigger(p.Event(Pt.SHOWN,t))}}},e.hide=function(){if(!this._element.disabled&&!p(this._element).hasClass(xt)&&p(this._menu).hasClass(jt)){var e={relatedTarget:this._element},t=p.Event(Pt.HIDE,e),n=c._getParentFromElement(this._element);p(n).trigger(t),t.isDefaultPrevented()||(this._popper&&this._popper.destroy(),p(this._menu).toggleClass(jt),p(n).toggleClass(jt).trigger(p.Event(Pt.HIDDEN,e)))}},e.dispose=function(){p.removeData(this._element,At),p(this._element).off(Ot),this._element=null,(this._menu=null)!==this._popper&&(this._popper.destroy(),this._popper=null)},e.update=function(){this._inNavbar=this._detectNavbar(),null!==this._popper&&this._popper.scheduleUpdate()},e._addEventListeners=function(){var t=this;p(this._element).on(Pt.CLICK,function(e){e.preventDefault(),e.stopPropagation(),t.toggle()})},e._getConfig=function(e){return e=l({},this.constructor.Default,{},p(this._element).data(),{},e),m.typeCheckConfig(It,e,this.constructor.DefaultType),e},e._getMenuElement=function(){if(!this._menu){var e=c._getParentFromElement(this._element);e&&(this._menu=e.querySelector(qt))}return this._menu},e._getPlacement=function(){var e=p(this._element.parentNode),t=zt;return e.hasClass(Ht)?(t=Vt,p(this._menu).hasClass(Mt)&&(t=Yt)):e.hasClass(Rt)?t=Gt:e.hasClass(Ft)?t=$t:p(this._menu).hasClass(Mt)&&(t=Xt),t},e._detectNavbar=function(){return 0<p(this._element).closest(".navbar").length},e._getOffset=function(){var t=this,e={};return"function"==typeof this._config.offset?e.fn=function(e){return e.offsets=l({},e.offsets,{},t._config.offset(e.offsets,t._element)||{}),e}:e.offset=this._config.offset,e},e._getPopperConfig=function(){var e={placement:this._getPlacement(),modifiers:{offset:this._getOffset(),flip:{enabled:this._config.flip},preventOverflow:{boundariesElement:this._config.boundary}}};return"static"===this._config.display&&(e.modifiers.applyStyle={enabled:!1}),l({},e,{},this._config.popperConfig)},c._jQueryInterface=function(t){return this.each(function(){var e=p(this).data(At);if(e||(e=new c(this,"object"==typeof t?t:null),p(this).data(At,e)),"string"==typeof t){if("undefined"==typeof e[t])throw new TypeError('No method named "'+t+'"');e[t]()}})},c._clearMenus=function(e){if(!e||3!==e.which&&("keyup"!==e.type||9===e.which))for(var t=[].slice.call(document.querySelectorAll(Ut)),n=0,i=t.length;n<i;n++){var o=c._getParentFromElement(t[n]),r=p(t[n]).data(At),s={relatedTarget:t[n]};if(e&&"click"===e.type&&(s.clickEvent=e),r){var a=r._menu;if(p(o).hasClass(jt)&&!(e&&("click"===e.type&&/input|textarea/i.test(e.target.tagName)||"keyup"===e.type&&9===e.which)&&p.contains(o,e.target))){var l=p.Event(Pt.HIDE,s);p(o).trigger(l),l.isDefaultPrevented()||("ontouchstart"in document.documentElement&&p(document.body).children().off("mouseover",null,p.noop),t[n].setAttribute("aria-expanded","false"),r._popper&&r._popper.destroy(),p(a).removeClass(jt),p(o).removeClass(jt).trigger(p.Event(Pt.HIDDEN,s)))}}}},c._getParentFromElement=function(e){var t,n=m.getSelectorFromElement(e);return n&&(t=document.querySelector(n)),t||e.parentNode},c._dataApiKeydownHandler=function(e){if((/input|textarea/i.test(e.target.tagName)?!(32===e.which||27!==e.which&&(40!==e.which&&38!==e.which||p(e.target).closest(qt).length)):Lt.test(e.which))&&(e.preventDefault(),e.stopPropagation(),!this.disabled&&!p(this).hasClass(xt))){var t=c._getParentFromElement(this),n=p(t).hasClass(jt);if(n||27!==e.which)if(n&&(!n||27!==e.which&&32!==e.which)){var i=[].slice.call(t.querySelectorAll(Qt)).filter(function(e){return p(e).is(":visible")});if(0!==i.length){var o=i.indexOf(e.target);38===e.which&&0<o&&o--,40===e.which&&o<i.length-1&&o++,o<0&&(o=0),i[o].focus()}}else{if(27===e.which){var r=t.querySelector(Ut);p(r).trigger("focus")}p(this).trigger("click")}}},s(c,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"Default",get:function(){return Jt}},{key:"DefaultType",get:function(){return Zt}}]),c}();p(document).on(Pt.KEYDOWN_DATA_API,Ut,en._dataApiKeydownHandler).on(Pt.KEYDOWN_DATA_API,qt,en._dataApiKeydownHandler).on(Pt.CLICK_DATA_API+" "+Pt.KEYUP_DATA_API,en._clearMenus).on(Pt.CLICK_DATA_API,Ut,function(e){e.preventDefault(),e.stopPropagation(),en._jQueryInterface.call(p(this),"toggle")}).on(Pt.CLICK_DATA_API,Bt,function(e){e.stopPropagation()}),p.fn[It]=en._jQueryInterface,p.fn[It].Constructor=en,p.fn[It].noConflict=function(){return p.fn[It]=kt,en._jQueryInterface};var tn="modal",nn="bs.modal",on="."+nn,rn=p.fn[tn],sn={backdrop:!0,keyboard:!0,focus:!0,show:!0},an={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean",show:"boolean"},ln={HIDE:"hide"+on,HIDE_PREVENTED:"hidePrevented"+on,HIDDEN:"hidden"+on,SHOW:"show"+on,SHOWN:"shown"+on,FOCUSIN:"focusin"+on,RESIZE:"resize"+on,CLICK_DISMISS:"click.dismiss"+on,KEYDOWN_DISMISS:"keydown.dismiss"+on,MOUSEUP_DISMISS:"mouseup.dismiss"+on,MOUSEDOWN_DISMISS:"mousedown.dismiss"+on,CLICK_DATA_API:"click"+on+".data-api"},cn="modal-dialog-scrollable",hn="modal-scrollbar-measure",un="modal-backdrop",fn="modal-open",dn="fade",pn="show",mn="modal-static",gn=".modal-dialog",_n=".modal-body",vn='[data-toggle="modal"]',yn='[data-dismiss="modal"]',En=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",bn=".sticky-top",wn=function(){function o(e,t){this._config=this._getConfig(t),this._element=e,this._dialog=e.querySelector(gn),this._backdrop=null,this._isShown=!1,this._isBodyOverflowing=!1,this._ignoreBackdropClick=!1,this._isTransitioning=!1,this._scrollbarWidth=0}var e=o.prototype;return e.toggle=function(e){return this._isShown?this.hide():this.show(e)},e.show=function(e){var t=this;if(!this._isShown&&!this._isTransitioning){p(this._element).hasClass(dn)&&(this._isTransitioning=!0);var n=p.Event(ln.SHOW,{relatedTarget:e});p(this._element).trigger(n),this._isShown||n.isDefaultPrevented()||(this._isShown=!0,this._checkScrollbar(),this._setScrollbar(),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),p(this._element).on(ln.CLICK_DISMISS,yn,function(e){return t.hide(e)}),p(this._dialog).on(ln.MOUSEDOWN_DISMISS,function(){p(t._element).one(ln.MOUSEUP_DISMISS,function(e){p(e.target).is(t._element)&&(t._ignoreBackdropClick=!0)})}),this._showBackdrop(function(){return t._showElement(e)}))}},e.hide=function(e){var t=this;if(e&&e.preventDefault(),this._isShown&&!this._isTransitioning){var n=p.Event(ln.HIDE);if(p(this._element).trigger(n),this._isShown&&!n.isDefaultPrevented()){this._isShown=!1;var i=p(this._element).hasClass(dn);if(i&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),p(document).off(ln.FOCUSIN),p(this._element).removeClass(pn),p(this._element).off(ln.CLICK_DISMISS),p(this._dialog).off(ln.MOUSEDOWN_DISMISS),i){var o=m.getTransitionDurationFromElement(this._element);p(this._element).one(m.TRANSITION_END,function(e){return t._hideModal(e)}).emulateTransitionEnd(o)}else this._hideModal()}}},e.dispose=function(){[window,this._element,this._dialog].forEach(function(e){return p(e).off(on)}),p(document).off(ln.FOCUSIN),p.removeData(this._element,nn),this._config=null,this._element=null,this._dialog=null,this._backdrop=null,this._isShown=null,this._isBodyOverflowing=null,this._ignoreBackdropClick=null,this._isTransitioning=null,this._scrollbarWidth=null},e.handleUpdate=function(){this._adjustDialog()},e._getConfig=function(e){return e=l({},sn,{},e),m.typeCheckConfig(tn,e,an),e},e._triggerBackdropTransition=function(){var e=this;if("static"===this._config.backdrop){var t=p.Event(ln.HIDE_PREVENTED);if(p(this._element).trigger(t),t.defaultPrevented)return;this._element.classList.add(mn);var n=m.getTransitionDurationFromElement(this._element);p(this._element).one(m.TRANSITION_END,function(){e._element.classList.remove(mn)}).emulateTransitionEnd(n),this._element.focus()}else this.hide()},e._showElement=function(e){var t=this,n=p(this._element).hasClass(dn),i=this._dialog?this._dialog.querySelector(_n):null;this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.appendChild(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),p(this._dialog).hasClass(cn)&&i?i.scrollTop=0:this._element.scrollTop=0,n&&m.reflow(this._element),p(this._element).addClass(pn),this._config.focus&&this._enforceFocus();function o(){t._config.focus&&t._element.focus(),t._isTransitioning=!1,p(t._element).trigger(r)}var r=p.Event(ln.SHOWN,{relatedTarget:e});if(n){var s=m.getTransitionDurationFromElement(this._dialog);p(this._dialog).one(m.TRANSITION_END,o).emulateTransitionEnd(s)}else o()},e._enforceFocus=function(){var t=this;p(document).off(ln.FOCUSIN).on(ln.FOCUSIN,function(e){document!==e.target&&t._element!==e.target&&0===p(t._element).has(e.target).length&&t._element.focus()})},e._setEscapeEvent=function(){var t=this;this._isShown&&this._config.keyboard?p(this._element).on(ln.KEYDOWN_DISMISS,function(e){27===e.which&&t._triggerBackdropTransition()}):this._isShown||p(this._element).off(ln.KEYDOWN_DISMISS)},e._setResizeEvent=function(){var t=this;this._isShown?p(window).on(ln.RESIZE,function(e){return t.handleUpdate(e)}):p(window).off(ln.RESIZE)},e._hideModal=function(){var e=this;this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._isTransitioning=!1,this._showBackdrop(function(){p(document.body).removeClass(fn),e._resetAdjustments(),e._resetScrollbar(),p(e._element).trigger(ln.HIDDEN)})},e._removeBackdrop=function(){this._backdrop&&(p(this._backdrop).remove(),this._backdrop=null)},e._showBackdrop=function(e){var t=this,n=p(this._element).hasClass(dn)?dn:"";if(this._isShown&&this._config.backdrop){if(this._backdrop=document.createElement("div"),this._backdrop.className=un,n&&this._backdrop.classList.add(n),p(this._backdrop).appendTo(document.body),p(this._element).on(ln.CLICK_DISMISS,function(e){t._ignoreBackdropClick?t._ignoreBackdropClick=!1:e.target===e.currentTarget&&t._triggerBackdropTransition()}),n&&m.reflow(this._backdrop),p(this._backdrop).addClass(pn),!e)return;if(!n)return void e();var i=m.getTransitionDurationFromElement(this._backdrop);p(this._backdrop).one(m.TRANSITION_END,e).emulateTransitionEnd(i)}else if(!this._isShown&&this._backdrop){p(this._backdrop).removeClass(pn);var o=function(){t._removeBackdrop(),e&&e()};if(p(this._element).hasClass(dn)){var r=m.getTransitionDurationFromElement(this._backdrop);p(this._backdrop).one(m.TRANSITION_END,o).emulateTransitionEnd(r)}else o()}else e&&e()},e._adjustDialog=function(){var e=this._element.scrollHeight>document.documentElement.clientHeight;!this._isBodyOverflowing&&e&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!e&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},e._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},e._checkScrollbar=function(){var e=document.body.getBoundingClientRect();this._isBodyOverflowing=e.left+e.right<window.innerWidth,this._scrollbarWidth=this._getScrollbarWidth()},e._setScrollbar=function(){var o=this;if(this._isBodyOverflowing){var e=[].slice.call(document.querySelectorAll(En)),t=[].slice.call(document.querySelectorAll(bn));p(e).each(function(e,t){var n=t.style.paddingRight,i=p(t).css("padding-right");p(t).data("padding-right",n).css("padding-right",parseFloat(i)+o._scrollbarWidth+"px")}),p(t).each(function(e,t){var n=t.style.marginRight,i=p(t).css("margin-right");p(t).data("margin-right",n).css("margin-right",parseFloat(i)-o._scrollbarWidth+"px")});var n=document.body.style.paddingRight,i=p(document.body).css("padding-right");p(document.body).data("padding-right",n).css("padding-right",parseFloat(i)+this._scrollbarWidth+"px")}p(document.body).addClass(fn)},e._resetScrollbar=function(){var e=[].slice.call(document.querySelectorAll(En));p(e).each(function(e,t){var n=p(t).data("padding-right");p(t).removeData("padding-right"),t.style.paddingRight=n||""});var t=[].slice.call(document.querySelectorAll(""+bn));p(t).each(function(e,t){var n=p(t).data("margin-right");"undefined"!=typeof n&&p(t).css("margin-right",n).removeData("margin-right")});var n=p(document.body).data("padding-right");p(document.body).removeData("padding-right"),document.body.style.paddingRight=n||""},e._getScrollbarWidth=function(){var e=document.createElement("div");e.className=hn,document.body.appendChild(e);var t=e.getBoundingClientRect().width-e.clientWidth;return document.body.removeChild(e),t},o._jQueryInterface=function(n,i){return this.each(function(){var e=p(this).data(nn),t=l({},sn,{},p(this).data(),{},"object"==typeof n&&n?n:{});if(e||(e=new o(this,t),p(this).data(nn,e)),"string"==typeof n){if("undefined"==typeof e[n])throw new TypeError('No method named "'+n+'"');e[n](i)}else t.show&&e.show(i)})},s(o,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"Default",get:function(){return sn}}]),o}();p(document).on(ln.CLICK_DATA_API,vn,function(e){var t,n=this,i=m.getSelectorFromElement(this);i&&(t=document.querySelector(i));var o=p(t).data(nn)?"toggle":l({},p(t).data(),{},p(this).data());"A"!==this.tagName&&"AREA"!==this.tagName||e.preventDefault();var r=p(t).one(ln.SHOW,function(e){e.isDefaultPrevented()||r.one(ln.HIDDEN,function(){p(n).is(":visible")&&n.focus()})});wn._jQueryInterface.call(p(t),o,this)}),p.fn[tn]=wn._jQueryInterface,p.fn[tn].Constructor=wn,p.fn[tn].noConflict=function(){return p.fn[tn]=rn,wn._jQueryInterface};var Tn=["background","cite","href","itemtype","longdesc","poster","src","xlink:href"],Cn={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Sn=/^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi,Dn=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;function In(e,r,t){if(0===e.length)return e;if(t&&"function"==typeof t)return t(e);for(var n=(new window.DOMParser).parseFromString(e,"text/html"),s=Object.keys(r),a=[].slice.call(n.body.querySelectorAll("*")),i=function(e){var t=a[e],n=t.nodeName.toLowerCase();if(-1===s.indexOf(t.nodeName.toLowerCase()))return t.parentNode.removeChild(t),"continue";var i=[].slice.call(t.attributes),o=[].concat(r["*"]||[],r[n]||[]);i.forEach(function(e){!function(e,t){var n=e.nodeName.toLowerCase();if(-1!==t.indexOf(n))return-1===Tn.indexOf(n)||Boolean(e.nodeValue.match(Sn)||e.nodeValue.match(Dn));for(var i=t.filter(function(e){return e instanceof RegExp}),o=0,r=i.length;o<r;o++)if(n.match(i[o]))return!0;return!1}(e,o)&&t.removeAttribute(e.nodeName)})},o=0,l=a.length;o<l;o++)i(o);return n.body.innerHTML}var An="tooltip",On="bs.tooltip",Nn="."+On,kn=p.fn[An],Ln="bs-tooltip",Pn=new RegExp("(^|\\s)"+Ln+"\\S+","g"),xn=["sanitize","whiteList","sanitizeFn"],jn={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string|function)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)",sanitize:"boolean",sanitizeFn:"(null|function)",whiteList:"object",popperConfig:"(null|object)"},Hn={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"},Rn={animation:!0,template:'<div class="tooltip" role="tooltip"><div class="arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",sanitize:!0,sanitizeFn:null,whiteList:Cn,popperConfig:null},Fn="show",Mn="out",Wn={HIDE:"hide"+Nn,HIDDEN:"hidden"+Nn,SHOW:"show"+Nn,SHOWN:"shown"+Nn,INSERTED:"inserted"+Nn,CLICK:"click"+Nn,FOCUSIN:"focusin"+Nn,FOCUSOUT:"focusout"+Nn,MOUSEENTER:"mouseenter"+Nn,MOUSELEAVE:"mouseleave"+Nn},Un="fade",Bn="show",qn=".tooltip-inner",Kn=".arrow",Qn="hover",Vn="focus",Yn="click",zn="manual",Xn=function(){function i(e,t){if("undefined"==typeof St)throw new TypeError("Bootstrap's tooltips require Popper.js (https://popper.js.org/)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=e,this.config=this._getConfig(t),this.tip=null,this._setListeners()}var e=i.prototype;return e.enable=function(){this._isEnabled=!0},e.disable=function(){this._isEnabled=!1},e.toggleEnabled=function(){this._isEnabled=!this._isEnabled},e.toggle=function(e){if(this._isEnabled)if(e){var t=this.constructor.DATA_KEY,n=p(e.currentTarget).data(t);n||(n=new this.constructor(e.currentTarget,this._getDelegateConfig()),p(e.currentTarget).data(t,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(p(this.getTipElement()).hasClass(Bn))return void this._leave(null,this);this._enter(null,this)}},e.dispose=function(){clearTimeout(this._timeout),p.removeData(this.element,this.constructor.DATA_KEY),p(this.element).off(this.constructor.EVENT_KEY),p(this.element).closest(".modal").off("hide.bs.modal",this._hideModalHandler),this.tip&&p(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},e.show=function(){var t=this;if("none"===p(this.element).css("display"))throw new Error("Please use show on visible elements");var e=p.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){p(this.element).trigger(e);var n=m.findShadowRoot(this.element),i=p.contains(null!==n?n:this.element.ownerDocument.documentElement,this.element);if(e.isDefaultPrevented()||!i)return;var o=this.getTipElement(),r=m.getUID(this.constructor.NAME);o.setAttribute("id",r),this.element.setAttribute("aria-describedby",r),this.setContent(),this.config.animation&&p(o).addClass(Un);var s="function"==typeof this.config.placement?this.config.placement.call(this,o,this.element):this.config.placement,a=this._getAttachment(s);this.addAttachmentClass(a);var l=this._getContainer();p(o).data(this.constructor.DATA_KEY,this),p.contains(this.element.ownerDocument.documentElement,this.tip)||p(o).appendTo(l),p(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new St(this.element,o,this._getPopperConfig(a)),p(o).addClass(Bn),"ontouchstart"in document.documentElement&&p(document.body).children().on("mouseover",null,p.noop);var c=function(){t.config.animation&&t._fixTransition();var e=t._hoverState;t._hoverState=null,p(t.element).trigger(t.constructor.Event.SHOWN),e===Mn&&t._leave(null,t)};if(p(this.tip).hasClass(Un)){var h=m.getTransitionDurationFromElement(this.tip);p(this.tip).one(m.TRANSITION_END,c).emulateTransitionEnd(h)}else c()}},e.hide=function(e){function t(){n._hoverState!==Fn&&i.parentNode&&i.parentNode.removeChild(i),n._cleanTipClass(),n.element.removeAttribute("aria-describedby"),p(n.element).trigger(n.constructor.Event.HIDDEN),null!==n._popper&&n._popper.destroy(),e&&e()}var n=this,i=this.getTipElement(),o=p.Event(this.constructor.Event.HIDE);if(p(this.element).trigger(o),!o.isDefaultPrevented()){if(p(i).removeClass(Bn),"ontouchstart"in document.documentElement&&p(document.body).children().off("mouseover",null,p.noop),this._activeTrigger[Yn]=!1,this._activeTrigger[Vn]=!1,this._activeTrigger[Qn]=!1,p(this.tip).hasClass(Un)){var r=m.getTransitionDurationFromElement(i);p(i).one(m.TRANSITION_END,t).emulateTransitionEnd(r)}else t();this._hoverState=""}},e.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},e.isWithContent=function(){return Boolean(this.getTitle())},e.addAttachmentClass=function(e){p(this.getTipElement()).addClass(Ln+"-"+e)},e.getTipElement=function(){return this.tip=this.tip||p(this.config.template)[0],this.tip},e.setContent=function(){var e=this.getTipElement();this.setElementContent(p(e.querySelectorAll(qn)),this.getTitle()),p(e).removeClass(Un+" "+Bn)},e.setElementContent=function(e,t){"object"!=typeof t||!t.nodeType&&!t.jquery?this.config.html?(this.config.sanitize&&(t=In(t,this.config.whiteList,this.config.sanitizeFn)),e.html(t)):e.text(t):this.config.html?p(t).parent().is(e)||e.empty().append(t):e.text(p(t).text())},e.getTitle=function(){var e=this.element.getAttribute("data-original-title");return e=e||("function"==typeof this.config.title?this.config.title.call(this.element):this.config.title)},e._getPopperConfig=function(e){var t=this;return l({},{placement:e,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:Kn},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(e){e.originalPlacement!==e.placement&&t._handlePopperPlacementChange(e)},onUpdate:function(e){return t._handlePopperPlacementChange(e)}},{},this.config.popperConfig)},e._getOffset=function(){var t=this,e={};return"function"==typeof this.config.offset?e.fn=function(e){return e.offsets=l({},e.offsets,{},t.config.offset(e.offsets,t.element)||{}),e}:e.offset=this.config.offset,e},e._getContainer=function(){return!1===this.config.container?document.body:m.isElement(this.config.container)?p(this.config.container):p(document).find(this.config.container)},e._getAttachment=function(e){return Hn[e.toUpperCase()]},e._setListeners=function(){var i=this;this.config.trigger.split(" ").forEach(function(e){if("click"===e)p(i.element).on(i.constructor.Event.CLICK,i.config.selector,function(e){return i.toggle(e)});else if(e!==zn){var t=e===Qn?i.constructor.Event.MOUSEENTER:i.constructor.Event.FOCUSIN,n=e===Qn?i.constructor.Event.MOUSELEAVE:i.constructor.Event.FOCUSOUT;p(i.element).on(t,i.config.selector,function(e){return i._enter(e)}).on(n,i.config.selector,function(e){return i._leave(e)})}}),this._hideModalHandler=function(){i.element&&i.hide()},p(this.element).closest(".modal").on("hide.bs.modal",this._hideModalHandler),this.config.selector?this.config=l({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},e._fixTitle=function(){var e=typeof this.element.getAttribute("data-original-title");!this.element.getAttribute("title")&&"string"==e||(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},e._enter=function(e,t){var n=this.constructor.DATA_KEY;(t=t||p(e.currentTarget).data(n))||(t=new this.constructor(e.currentTarget,this._getDelegateConfig()),p(e.currentTarget).data(n,t)),e&&(t._activeTrigger["focusin"===e.type?Vn:Qn]=!0),p(t.getTipElement()).hasClass(Bn)||t._hoverState===Fn?t._hoverState=Fn:(clearTimeout(t._timeout),t._hoverState=Fn,t.config.delay&&t.config.delay.show?t._timeout=setTimeout(function(){t._hoverState===Fn&&t.show()},t.config.delay.show):t.show())},e._leave=function(e,t){var n=this.constructor.DATA_KEY;(t=t||p(e.currentTarget).data(n))||(t=new this.constructor(e.currentTarget,this._getDelegateConfig()),p(e.currentTarget).data(n,t)),e&&(t._activeTrigger["focusout"===e.type?Vn:Qn]=!1),t._isWithActiveTrigger()||(clearTimeout(t._timeout),t._hoverState=Mn,t.config.delay&&t.config.delay.hide?t._timeout=setTimeout(function(){t._hoverState===Mn&&t.hide()},t.config.delay.hide):t.hide())},e._isWithActiveTrigger=function(){for(var e in this._activeTrigger)if(this._activeTrigger[e])return!0;return!1},e._getConfig=function(e){var t=p(this.element).data();return Object.keys(t).forEach(function(e){-1!==xn.indexOf(e)&&delete t[e]}),"number"==typeof(e=l({},this.constructor.Default,{},t,{},"object"==typeof e&&e?e:{})).delay&&(e.delay={show:e.delay,hide:e.delay}),"number"==typeof e.title&&(e.title=e.title.toString()),"number"==typeof e.content&&(e.content=e.content.toString()),m.typeCheckConfig(An,e,this.constructor.DefaultType),e.sanitize&&(e.template=In(e.template,e.whiteList,e.sanitizeFn)),e},e._getDelegateConfig=function(){var e={};if(this.config)for(var t in this.config)this.constructor.Default[t]!==this.config[t]&&(e[t]=this.config[t]);return e},e._cleanTipClass=function(){var e=p(this.getTipElement()),t=e.attr("class").match(Pn);null!==t&&t.length&&e.removeClass(t.join(""))},e._handlePopperPlacementChange=function(e){var t=e.instance;this.tip=t.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(e.placement))},e._fixTransition=function(){var e=this.getTipElement(),t=this.config.animation;null===e.getAttribute("x-placement")&&(p(e).removeClass(Un),this.config.animation=!1,this.hide(),this.show(),this.config.animation=t)},i._jQueryInterface=function(n){return this.each(function(){var e=p(this).data(On),t="object"==typeof n&&n;if((e||!/dispose|hide/.test(n))&&(e||(e=new i(this,t),p(this).data(On,e)),"string"==typeof n)){if("undefined"==typeof e[n])throw new TypeError('No method named "'+n+'"');e[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"Default",get:function(){return Rn}},{key:"NAME",get:function(){return An}},{key:"DATA_KEY",get:function(){return On}},{key:"Event",get:function(){return Wn}},{key:"EVENT_KEY",get:function(){return Nn}},{key:"DefaultType",get:function(){return jn}}]),i}();p.fn[An]=Xn._jQueryInterface,p.fn[An].Constructor=Xn,p.fn[An].noConflict=function(){return p.fn[An]=kn,Xn._jQueryInterface};var Gn="popover",$n="bs.popover",Jn="."+$n,Zn=p.fn[Gn],ei="bs-popover",ti=new RegExp("(^|\\s)"+ei+"\\S+","g"),ni=l({},Xn.Default,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>'}),ii=l({},Xn.DefaultType,{content:"(string|element|function)"}),oi="fade",ri="show",si=".popover-header",ai=".popover-body",li={HIDE:"hide"+Jn,HIDDEN:"hidden"+Jn,SHOW:"show"+Jn,SHOWN:"shown"+Jn,INSERTED:"inserted"+Jn,CLICK:"click"+Jn,FOCUSIN:"focusin"+Jn,FOCUSOUT:"focusout"+Jn,MOUSEENTER:"mouseenter"+Jn,MOUSELEAVE:"mouseleave"+Jn},ci=function(e){function i(){return e.apply(this,arguments)||this}!function(e,t){e.prototype=Object.create(t.prototype),(e.prototype.constructor=e).__proto__=t}(i,e);var t=i.prototype;return t.isWithContent=function(){return this.getTitle()||this._getContent()},t.addAttachmentClass=function(e){p(this.getTipElement()).addClass(ei+"-"+e)},t.getTipElement=function(){return this.tip=this.tip||p(this.config.template)[0],this.tip},t.setContent=function(){var e=p(this.getTipElement());this.setElementContent(e.find(si),this.getTitle());var t=this._getContent();"function"==typeof t&&(t=t.call(this.element)),this.setElementContent(e.find(ai),t),e.removeClass(oi+" "+ri)},t._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},t._cleanTipClass=function(){var e=p(this.getTipElement()),t=e.attr("class").match(ti);null!==t&&0<t.length&&e.removeClass(t.join(""))},i._jQueryInterface=function(n){return this.each(function(){var e=p(this).data($n),t="object"==typeof n?n:null;if((e||!/dispose|hide/.test(n))&&(e||(e=new i(this,t),p(this).data($n,e)),"string"==typeof n)){if("undefined"==typeof e[n])throw new TypeError('No method named "'+n+'"');e[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"Default",get:function(){return ni}},{key:"NAME",get:function(){return Gn}},{key:"DATA_KEY",get:function(){return $n}},{key:"Event",get:function(){return li}},{key:"EVENT_KEY",get:function(){return Jn}},{key:"DefaultType",get:function(){return ii}}]),i}(Xn);p.fn[Gn]=ci._jQueryInterface,p.fn[Gn].Constructor=ci,p.fn[Gn].noConflict=function(){return p.fn[Gn]=Zn,ci._jQueryInterface};var hi="scrollspy",ui="bs.scrollspy",fi="."+ui,di=p.fn[hi],pi={offset:10,method:"auto",target:""},mi={offset:"number",method:"string",target:"(string|element)"},gi={ACTIVATE:"activate"+fi,SCROLL:"scroll"+fi,LOAD_DATA_API:"load"+fi+".data-api"},_i="dropdown-item",vi="active",yi='[data-spy="scroll"]',Ei=".nav, .list-group",bi=".nav-link",wi=".nav-item",Ti=".list-group-item",Ci=".dropdown",Si=".dropdown-item",Di=".dropdown-toggle",Ii="offset",Ai="position",Oi=function(){function n(e,t){var n=this;this._element=e,this._scrollElement="BODY"===e.tagName?window:e,this._config=this._getConfig(t),this._selector=this._config.target+" "+bi+","+this._config.target+" "+Ti+","+this._config.target+" "+Si,this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,p(this._scrollElement).on(gi.SCROLL,function(e){return n._process(e)}),this.refresh(),this._process()}var e=n.prototype;return e.refresh=function(){var t=this,e=this._scrollElement===this._scrollElement.window?Ii:Ai,o="auto"===this._config.method?e:this._config.method,r=o===Ai?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),[].slice.call(document.querySelectorAll(this._selector)).map(function(e){var t,n=m.getSelectorFromElement(e);if(n&&(t=document.querySelector(n)),t){var i=t.getBoundingClientRect();if(i.width||i.height)return[p(t)[o]().top+r,n]}return null}).filter(function(e){return e}).sort(function(e,t){return e[0]-t[0]}).forEach(function(e){t._offsets.push(e[0]),t._targets.push(e[1])})},e.dispose=function(){p.removeData(this._element,ui),p(this._scrollElement).off(fi),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null},e._getConfig=function(e){if("string"!=typeof(e=l({},pi,{},"object"==typeof e&&e?e:{})).target){var t=p(e.target).attr("id");t||(t=m.getUID(hi),p(e.target).attr("id",t)),e.target="#"+t}return m.typeCheckConfig(hi,e,mi),e},e._getScrollTop=function(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop},e._getScrollHeight=function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},e._getOffsetHeight=function(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height},e._process=function(){var e=this._getScrollTop()+this._config.offset,t=this._getScrollHeight(),n=this._config.offset+t-this._getOffsetHeight();if(this._scrollHeight!==t&&this.refresh(),n<=e){var i=this._targets[this._targets.length-1];this._activeTarget!==i&&this._activate(i)}else{if(this._activeTarget&&e<this._offsets[0]&&0<this._offsets[0])return this._activeTarget=null,void this._clear();for(var o=this._offsets.length;o--;){this._activeTarget!==this._targets[o]&&e>=this._offsets[o]&&("undefined"==typeof this._offsets[o+1]||e<this._offsets[o+1])&&this._activate(this._targets[o])}}},e._activate=function(t){this._activeTarget=t,this._clear();var e=this._selector.split(",").map(function(e){return e+'[data-target="'+t+'"],'+e+'[href="'+t+'"]'}),n=p([].slice.call(document.querySelectorAll(e.join(","))));n.hasClass(_i)?(n.closest(Ci).find(Di).addClass(vi),n.addClass(vi)):(n.addClass(vi),n.parents(Ei).prev(bi+", "+Ti).addClass(vi),n.parents(Ei).prev(wi).children(bi).addClass(vi)),p(this._scrollElement).trigger(gi.ACTIVATE,{relatedTarget:t})},e._clear=function(){[].slice.call(document.querySelectorAll(this._selector)).filter(function(e){return e.classList.contains(vi)}).forEach(function(e){return e.classList.remove(vi)})},n._jQueryInterface=function(t){return this.each(function(){var e=p(this).data(ui);if(e||(e=new n(this,"object"==typeof t&&t),p(this).data(ui,e)),"string"==typeof t){if("undefined"==typeof e[t])throw new TypeError('No method named "'+t+'"');e[t]()}})},s(n,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"Default",get:function(){return pi}}]),n}();p(window).on(gi.LOAD_DATA_API,function(){for(var e=[].slice.call(document.querySelectorAll(yi)),t=e.length;t--;){var n=p(e[t]);Oi._jQueryInterface.call(n,n.data())}}),p.fn[hi]=Oi._jQueryInterface,p.fn[hi].Constructor=Oi,p.fn[hi].noConflict=function(){return p.fn[hi]=di,Oi._jQueryInterface};var Ni="bs.tab",ki="."+Ni,Li=p.fn.tab,Pi={HIDE:"hide"+ki,HIDDEN:"hidden"+ki,SHOW:"show"+ki,SHOWN:"shown"+ki,CLICK_DATA_API:"click"+ki+".data-api"},xi="dropdown-menu",ji="active",Hi="disabled",Ri="fade",Fi="show",Mi=".dropdown",Wi=".nav, .list-group",Ui=".active",Bi="> li > .active",qi='[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',Ki=".dropdown-toggle",Qi="> .dropdown-menu .active",Vi=function(){function i(e){this._element=e}var e=i.prototype;return e.show=function(){var n=this;if(!(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&p(this._element).hasClass(ji)||p(this._element).hasClass(Hi))){var e,i,t=p(this._element).closest(Wi)[0],o=m.getSelectorFromElement(this._element);if(t){var r="UL"===t.nodeName||"OL"===t.nodeName?Bi:Ui;i=(i=p.makeArray(p(t).find(r)))[i.length-1]}var s=p.Event(Pi.HIDE,{relatedTarget:this._element}),a=p.Event(Pi.SHOW,{relatedTarget:i});if(i&&p(i).trigger(s),p(this._element).trigger(a),!a.isDefaultPrevented()&&!s.isDefaultPrevented()){o&&(e=document.querySelector(o)),this._activate(this._element,t);var l=function(){var e=p.Event(Pi.HIDDEN,{relatedTarget:n._element}),t=p.Event(Pi.SHOWN,{relatedTarget:i});p(i).trigger(e),p(n._element).trigger(t)};e?this._activate(e,e.parentNode,l):l()}}},e.dispose=function(){p.removeData(this._element,Ni),this._element=null},e._activate=function(e,t,n){function i(){return o._transitionComplete(e,r,n)}var o=this,r=(!t||"UL"!==t.nodeName&&"OL"!==t.nodeName?p(t).children(Ui):p(t).find(Bi))[0],s=n&&r&&p(r).hasClass(Ri);if(r&&s){var a=m.getTransitionDurationFromElement(r);p(r).removeClass(Fi).one(m.TRANSITION_END,i).emulateTransitionEnd(a)}else i()},e._transitionComplete=function(e,t,n){if(t){p(t).removeClass(ji);var i=p(t.parentNode).find(Qi)[0];i&&p(i).removeClass(ji),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!1)}if(p(e).addClass(ji),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!0),m.reflow(e),e.classList.contains(Ri)&&e.classList.add(Fi),e.parentNode&&p(e.parentNode).hasClass(xi)){var o=p(e).closest(Mi)[0];if(o){var r=[].slice.call(o.querySelectorAll(Ki));p(r).addClass(ji)}e.setAttribute("aria-expanded",!0)}n&&n()},i._jQueryInterface=function(n){return this.each(function(){var e=p(this),t=e.data(Ni);if(t||(t=new i(this),e.data(Ni,t)),"string"==typeof n){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.4.1"}}]),i}();p(document).on(Pi.CLICK_DATA_API,qi,function(e){e.preventDefault(),Vi._jQueryInterface.call(p(this),"show")}),p.fn.tab=Vi._jQueryInterface,p.fn.tab.Constructor=Vi,p.fn.tab.noConflict=function(){return p.fn.tab=Li,Vi._jQueryInterface};var Yi="toast",zi="bs.toast",Xi="."+zi,Gi=p.fn[Yi],$i={CLICK_DISMISS:"click.dismiss"+Xi,HIDE:"hide"+Xi,HIDDEN:"hidden"+Xi,SHOW:"show"+Xi,SHOWN:"shown"+Xi},Ji="fade",Zi="hide",eo="show",to="showing",no={animation:"boolean",autohide:"boolean",delay:"number"},io={animation:!0,autohide:!0,delay:500},oo='[data-dismiss="toast"]',ro=function(){function i(e,t){this._element=e,this._config=this._getConfig(t),this._timeout=null,this._setListeners()}var e=i.prototype;return e.show=function(){var e=this,t=p.Event($i.SHOW);if(p(this._element).trigger(t),!t.isDefaultPrevented()){this._config.animation&&this._element.classList.add(Ji);var n=function(){e._element.classList.remove(to),e._element.classList.add(eo),p(e._element).trigger($i.SHOWN),e._config.autohide&&(e._timeout=setTimeout(function(){e.hide()},e._config.delay))};if(this._element.classList.remove(Zi),m.reflow(this._element),this._element.classList.add(to),this._config.animation){var i=m.getTransitionDurationFromElement(this._element);p(this._element).one(m.TRANSITION_END,n).emulateTransitionEnd(i)}else n()}},e.hide=function(){if(this._element.classList.contains(eo)){var e=p.Event($i.HIDE);p(this._element).trigger(e),e.isDefaultPrevented()||this._close()}},e.dispose=function(){clearTimeout(this._timeout),this._timeout=null,this._element.classList.contains(eo)&&this._element.classList.remove(eo),p(this._element).off($i.CLICK_DISMISS),p.removeData(this._element,zi),this._element=null,this._config=null},e._getConfig=function(e){return e=l({},io,{},p(this._element).data(),{},"object"==typeof e&&e?e:{}),m.typeCheckConfig(Yi,e,this.constructor.DefaultType),e},e._setListeners=function(){var e=this;p(this._element).on($i.CLICK_DISMISS,oo,function(){return e.hide()})},e._close=function(){function e(){t._element.classList.add(Zi),p(t._element).trigger($i.HIDDEN)}var t=this;if(this._element.classList.remove(eo),this._config.animation){var n=m.getTransitionDurationFromElement(this._element);p(this._element).one(m.TRANSITION_END,e).emulateTransitionEnd(n)}else e()},i._jQueryInterface=function(n){return this.each(function(){var e=p(this),t=e.data(zi);if(t||(t=new i(this,"object"==typeof n&&n),e.data(zi,t)),"string"==typeof n){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n](this)}})},s(i,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"DefaultType",get:function(){return no}},{key:"Default",get:function(){return io}}]),i}();p.fn[Yi]=ro._jQueryInterface,p.fn[Yi].Constructor=ro,p.fn[Yi].noConflict=function(){return p.fn[Yi]=Gi,ro._jQueryInterface},e.Alert=_,e.Button=x,e.Carousel=he,e.Collapse=De,e.Dropdown=en,e.Modal=wn,e.Popover=ci,e.Scrollspy=Oi,e.Tab=Vi,e.Toast=ro,e.Tooltip=Xn,e.Util=m,Object.defineProperty(e,"__esModule",{value:!0})});

File: public/AdminLTE/plugins/bootstrap/js/bootstrap.js
Match lines: 14
4291|  var NAME$a = 'toast';
4293|  var DATA_KEY$a = 'bs.toast';
4320|    DATA_DISMISS: '[data-dismiss="toast"]'
4328|  var Toast =
4331|    function Toast(element, config) {
4340|    var _proto = Toast.prototype;
4449|    Toast._jQueryInterface = function _jQueryInterface(config) {
4457|          data = new Toast(this, _config);
4471|    _createClass(Toast, null, [{
4488|    return Toast;
4497|  $.fn[NAME$a] = Toast._jQueryInterface;
4498|  $.fn[NAME$a].Constructor = Toast;
4502|    return Toast._jQueryInterface;
4514|  exports.Toast = Toast;

File: public/AdminLTE/plugins/bootstrap/js/bootstrap.min.js
Match lines: 1
6|!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("jquery"),require("popper.js")):"function"==typeof define&&define.amd?define(["exports","jquery","popper.js"],e):e((t=t||self).bootstrap={},t.jQuery,t.Popper)}(this,function(t,g,u){"use strict";function i(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}function s(t,e,n){return e&&i(t.prototype,e),n&&i(t,n),t}function e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,i)}return n}function l(o){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?e(Object(r),!0).forEach(function(t){var e,n,i;e=o,i=r[n=t],n in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i}):Object.getOwnPropertyDescriptors?Object.defineProperties(o,Object.getOwnPropertyDescriptors(r)):e(Object(r)).forEach(function(t){Object.defineProperty(o,t,Object.getOwnPropertyDescriptor(r,t))})}return o}g=g&&g.hasOwnProperty("default")?g.default:g,u=u&&u.hasOwnProperty("default")?u.default:u;var n="transitionend";function o(t){var e=this,n=!1;return g(this).one(_.TRANSITION_END,function(){n=!0}),setTimeout(function(){n||_.triggerTransitionEnd(e)},t),this}var _={TRANSITION_END:"bsTransitionEnd",getUID:function(t){for(;t+=~~(1e6*Math.random()),document.getElementById(t););return t},getSelectorFromElement:function(t){var e=t.getAttribute("data-target");if(!e||"#"===e){var n=t.getAttribute("href");e=n&&"#"!==n?n.trim():""}try{return document.querySelector(e)?e:null}catch(t){return null}},getTransitionDurationFromElement:function(t){if(!t)return 0;var e=g(t).css("transition-duration"),n=g(t).css("transition-delay"),i=parseFloat(e),o=parseFloat(n);return i||o?(e=e.split(",")[0],n=n.split(",")[0],1e3*(parseFloat(e)+parseFloat(n))):0},reflow:function(t){return t.offsetHeight},triggerTransitionEnd:function(t){g(t).trigger(n)},supportsTransitionEnd:function(){return Boolean(n)},isElement:function(t){return(t[0]||t).nodeType},typeCheckConfig:function(t,e,n){for(var i in n)if(Object.prototype.hasOwnProperty.call(n,i)){var o=n[i],r=e[i],s=r&&_.isElement(r)?"element":(a=r,{}.toString.call(a).match(/\s([a-z]+)/i)[1].toLowerCase());if(!new RegExp(o).test(s))throw new Error(t.toUpperCase()+': Option "'+i+'" provided type "'+s+'" but expected type "'+o+'".')}var a},findShadowRoot:function(t){if(!document.documentElement.attachShadow)return null;if("function"!=typeof t.getRootNode)return t instanceof ShadowRoot?t:t.parentNode?_.findShadowRoot(t.parentNode):null;var e=t.getRootNode();return e instanceof ShadowRoot?e:null},jQueryDetection:function(){if("undefined"==typeof g)throw new TypeError("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.");var t=g.fn.jquery.split(" ")[0].split(".");if(t[0]<2&&t[1]<9||1===t[0]&&9===t[1]&&t[2]<1||4<=t[0])throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}};_.jQueryDetection(),g.fn.emulateTransitionEnd=o,g.event.special[_.TRANSITION_END]={bindType:n,delegateType:n,handle:function(t){if(g(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}};var r="alert",a="bs.alert",c="."+a,h=g.fn[r],f={CLOSE:"close"+c,CLOSED:"closed"+c,CLICK_DATA_API:"click"+c+".data-api"},d="alert",m="fade",p="show",v=function(){function i(t){this._element=t}var t=i.prototype;return t.close=function(t){var e=this._element;t&&(e=this._getRootElement(t)),this._triggerCloseEvent(e).isDefaultPrevented()||this._removeElement(e)},t.dispose=function(){g.removeData(this._element,a),this._element=null},t._getRootElement=function(t){var e=_.getSelectorFromElement(t),n=!1;return e&&(n=document.querySelector(e)),n=n||g(t).closest("."+d)[0]},t._triggerCloseEvent=function(t){var e=g.Event(f.CLOSE);return g(t).trigger(e),e},t._removeElement=function(e){var n=this;if(g(e).removeClass(p),g(e).hasClass(m)){var t=_.getTransitionDurationFromElement(e);g(e).one(_.TRANSITION_END,function(t){return n._destroyElement(e,t)}).emulateTransitionEnd(t)}else this._destroyElement(e)},t._destroyElement=function(t){g(t).detach().trigger(f.CLOSED).remove()},i._jQueryInterface=function(n){return this.each(function(){var t=g(this),e=t.data(a);e||(e=new i(this),t.data(a,e)),"close"===n&&e[n](this)})},i._handleDismiss=function(e){return function(t){t&&t.preventDefault(),e.close(this)}},s(i,null,[{key:"VERSION",get:function(){return"4.4.1"}}]),i}();g(document).on(f.CLICK_DATA_API,'[data-dismiss="alert"]',v._handleDismiss(new v)),g.fn[r]=v._jQueryInterface,g.fn[r].Constructor=v,g.fn[r].noConflict=function(){return g.fn[r]=h,v._jQueryInterface};var y="button",E="bs.button",C="."+E,T=".data-api",b=g.fn[y],S="active",D="btn",I="focus",w='[data-toggle^="button"]',A='[data-toggle="buttons"]',N='[data-toggle="button"]',O='[data-toggle="buttons"] .btn',k='input:not([type="hidden"])',P=".active",L=".btn",j={CLICK_DATA_API:"click"+C+T,FOCUS_BLUR_DATA_API:"focus"+C+T+" blur"+C+T,LOAD_DATA_API:"load"+C+T},H=function(){function n(t){this._element=t}var t=n.prototype;return t.toggle=function(){var t=!0,e=!0,n=g(this._element).closest(A)[0];if(n){var i=this._element.querySelector(k);if(i){if("radio"===i.type)if(i.checked&&this._element.classList.contains(S))t=!1;else{var o=n.querySelector(P);o&&g(o).removeClass(S)}else"checkbox"===i.type?"LABEL"===this._element.tagName&&i.checked===this._element.classList.contains(S)&&(t=!1):t=!1;t&&(i.checked=!this._element.classList.contains(S),g(i).trigger("change")),i.focus(),e=!1}}this._element.hasAttribute("disabled")||this._element.classList.contains("disabled")||(e&&this._element.setAttribute("aria-pressed",!this._element.classList.contains(S)),t&&g(this._element).toggleClass(S))},t.dispose=function(){g.removeData(this._element,E),this._element=null},n._jQueryInterface=function(e){return this.each(function(){var t=g(this).data(E);t||(t=new n(this),g(this).data(E,t)),"toggle"===e&&t[e]()})},s(n,null,[{key:"VERSION",get:function(){return"4.4.1"}}]),n}();g(document).on(j.CLICK_DATA_API,w,function(t){var e=t.target;if(g(e).hasClass(D)||(e=g(e).closest(L)[0]),!e||e.hasAttribute("disabled")||e.classList.contains("disabled"))t.preventDefault();else{var n=e.querySelector(k);if(n&&(n.hasAttribute("disabled")||n.classList.contains("disabled")))return void t.preventDefault();H._jQueryInterface.call(g(e),"toggle")}}).on(j.FOCUS_BLUR_DATA_API,w,function(t){var e=g(t.target).closest(L)[0];g(e).toggleClass(I,/^focus(in)?$/.test(t.type))}),g(window).on(j.LOAD_DATA_API,function(){for(var t=[].slice.call(document.querySelectorAll(O)),e=0,n=t.length;e<n;e++){var i=t[e],o=i.querySelector(k);o.checked||o.hasAttribute("checked")?i.classList.add(S):i.classList.remove(S)}for(var r=0,s=(t=[].slice.call(document.querySelectorAll(N))).length;r<s;r++){var a=t[r];"true"===a.getAttribute("aria-pressed")?a.classList.add(S):a.classList.remove(S)}}),g.fn[y]=H._jQueryInterface,g.fn[y].Constructor=H,g.fn[y].noConflict=function(){return g.fn[y]=b,H._jQueryInterface};var R="carousel",x="bs.carousel",F="."+x,U=".data-api",W=g.fn[R],q={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0,touch:!0},M={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean",touch:"boolean"},K="next",Q="prev",B="left",V="right",Y={SLIDE:"slide"+F,SLID:"slid"+F,KEYDOWN:"keydown"+F,MOUSEENTER:"mouseenter"+F,MOUSELEAVE:"mouseleave"+F,TOUCHSTART:"touchstart"+F,TOUCHMOVE:"touchmove"+F,TOUCHEND:"touchend"+F,POINTERDOWN:"pointerdown"+F,POINTERUP:"pointerup"+F,DRAG_START:"dragstart"+F,LOAD_DATA_API:"load"+F+U,CLICK_DATA_API:"click"+F+U},z="carousel",X="active",$="slide",G="carousel-item-right",J="carousel-item-left",Z="carousel-item-next",tt="carousel-item-prev",et="pointer-event",nt=".active",it=".active.carousel-item",ot=".carousel-item",rt=".carousel-item img",st=".carousel-item-next, .carousel-item-prev",at=".carousel-indicators",lt="[data-slide], [data-slide-to]",ct='[data-ride="carousel"]',ht={TOUCH:"touch",PEN:"pen"},ut=function(){function r(t,e){this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this.touchStartX=0,this.touchDeltaX=0,this._config=this._getConfig(e),this._element=t,this._indicatorsElement=this._element.querySelector(at),this._touchSupported="ontouchstart"in document.documentElement||0<navigator.maxTouchPoints,this._pointerEvent=Boolean(window.PointerEvent||window.MSPointerEvent),this._addEventListeners()}var t=r.prototype;return t.next=function(){this._isSliding||this._slide(K)},t.nextWhenVisible=function(){!document.hidden&&g(this._element).is(":visible")&&"hidden"!==g(this._element).css("visibility")&&this.next()},t.prev=function(){this._isSliding||this._slide(Q)},t.pause=function(t){t||(this._isPaused=!0),this._element.querySelector(st)&&(_.triggerTransitionEnd(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null},t.cycle=function(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config.interval&&!this._isPaused&&(this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))},t.to=function(t){var e=this;this._activeElement=this._element.querySelector(it);var n=this._getItemIndex(this._activeElement);if(!(t>this._items.length-1||t<0))if(this._isSliding)g(this._element).one(Y.SLID,function(){return e.to(t)});else{if(n===t)return this.pause(),void this.cycle();var i=n<t?K:Q;this._slide(i,this._items[t])}},t.dispose=function(){g(this._element).off(F),g.removeData(this._element,x),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null},t._getConfig=function(t){return t=l({},q,{},t),_.typeCheckConfig(R,t,M),t},t._handleSwipe=function(){var t=Math.abs(this.touchDeltaX);if(!(t<=40)){var e=t/this.touchDeltaX;(this.touchDeltaX=0)<e&&this.prev(),e<0&&this.next()}},t._addEventListeners=function(){var e=this;this._config.keyboard&&g(this._element).on(Y.KEYDOWN,function(t){return e._keydown(t)}),"hover"===this._config.pause&&g(this._element).on(Y.MOUSEENTER,function(t){return e.pause(t)}).on(Y.MOUSELEAVE,function(t){return e.cycle(t)}),this._config.touch&&this._addTouchEventListeners()},t._addTouchEventListeners=function(){var e=this;if(this._touchSupported){var n=function(t){e._pointerEvent&&ht[t.originalEvent.pointerType.toUpperCase()]?e.touchStartX=t.originalEvent.clientX:e._pointerEvent||(e.touchStartX=t.originalEvent.touches[0].clientX)},i=function(t){e._pointerEvent&&ht[t.originalEvent.pointerType.toUpperCase()]&&(e.touchDeltaX=t.originalEvent.clientX-e.touchStartX),e._handleSwipe(),"hover"===e._config.pause&&(e.pause(),e.touchTimeout&&clearTimeout(e.touchTimeout),e.touchTimeout=setTimeout(function(t){return e.cycle(t)},500+e._config.interval))};g(this._element.querySelectorAll(rt)).on(Y.DRAG_START,function(t){return t.preventDefault()}),this._pointerEvent?(g(this._element).on(Y.POINTERDOWN,function(t){return n(t)}),g(this._element).on(Y.POINTERUP,function(t){return i(t)}),this._element.classList.add(et)):(g(this._element).on(Y.TOUCHSTART,function(t){return n(t)}),g(this._element).on(Y.TOUCHMOVE,function(t){return function(t){t.originalEvent.touches&&1<t.originalEvent.touches.length?e.touchDeltaX=0:e.touchDeltaX=t.originalEvent.touches[0].clientX-e.touchStartX}(t)}),g(this._element).on(Y.TOUCHEND,function(t){return i(t)}))}},t._keydown=function(t){if(!/input|textarea/i.test(t.target.tagName))switch(t.which){case 37:t.preventDefault(),this.prev();break;case 39:t.preventDefault(),this.next()}},t._getItemIndex=function(t){return this._items=t&&t.parentNode?[].slice.call(t.parentNode.querySelectorAll(ot)):[],this._items.indexOf(t)},t._getItemByDirection=function(t,e){var n=t===K,i=t===Q,o=this._getItemIndex(e),r=this._items.length-1;if((i&&0===o||n&&o===r)&&!this._config.wrap)return e;var s=(o+(t===Q?-1:1))%this._items.length;return-1==s?this._items[this._items.length-1]:this._items[s]},t._triggerSlideEvent=function(t,e){var n=this._getItemIndex(t),i=this._getItemIndex(this._element.querySelector(it)),o=g.Event(Y.SLIDE,{relatedTarget:t,direction:e,from:i,to:n});return g(this._element).trigger(o),o},t._setActiveIndicatorElement=function(t){if(this._indicatorsElement){var e=[].slice.call(this._indicatorsElement.querySelectorAll(nt));g(e).removeClass(X);var n=this._indicatorsElement.children[this._getItemIndex(t)];n&&g(n).addClass(X)}},t._slide=function(t,e){var n,i,o,r=this,s=this._element.querySelector(it),a=this._getItemIndex(s),l=e||s&&this._getItemByDirection(t,s),c=this._getItemIndex(l),h=Boolean(this._interval);if(o=t===K?(n=J,i=Z,B):(n=G,i=tt,V),l&&g(l).hasClass(X))this._isSliding=!1;else if(!this._triggerSlideEvent(l,o).isDefaultPrevented()&&s&&l){this._isSliding=!0,h&&this.pause(),this._setActiveIndicatorElement(l);var u=g.Event(Y.SLID,{relatedTarget:l,direction:o,from:a,to:c});if(g(this._element).hasClass($)){g(l).addClass(i),_.reflow(l),g(s).addClass(n),g(l).addClass(n);var f=parseInt(l.getAttribute("data-interval"),10);f?(this._config.defaultInterval=this._config.defaultInterval||this._config.interval,this._config.interval=f):this._config.interval=this._config.defaultInterval||this._config.interval;var d=_.getTransitionDurationFromElement(s);g(s).one(_.TRANSITION_END,function(){g(l).removeClass(n+" "+i).addClass(X),g(s).removeClass(X+" "+i+" "+n),r._isSliding=!1,setTimeout(function(){return g(r._element).trigger(u)},0)}).emulateTransitionEnd(d)}else g(s).removeClass(X),g(l).addClass(X),this._isSliding=!1,g(this._element).trigger(u);h&&this.cycle()}},r._jQueryInterface=function(i){return this.each(function(){var t=g(this).data(x),e=l({},q,{},g(this).data());"object"==typeof i&&(e=l({},e,{},i));var n="string"==typeof i?i:e.slide;if(t||(t=new r(this,e),g(this).data(x,t)),"number"==typeof i)t.to(i);else if("string"==typeof n){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}else e.interval&&e.ride&&(t.pause(),t.cycle())})},r._dataApiClickHandler=function(t){var e=_.getSelectorFromElement(this);if(e){var n=g(e)[0];if(n&&g(n).hasClass(z)){var i=l({},g(n).data(),{},g(this).data()),o=this.getAttribute("data-slide-to");o&&(i.interval=!1),r._jQueryInterface.call(g(n),i),o&&g(n).data(x).to(o),t.preventDefault()}}},s(r,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"Default",get:function(){return q}}]),r}();g(document).on(Y.CLICK_DATA_API,lt,ut._dataApiClickHandler),g(window).on(Y.LOAD_DATA_API,function(){for(var t=[].slice.call(document.querySelectorAll(ct)),e=0,n=t.length;e<n;e++){var i=g(t[e]);ut._jQueryInterface.call(i,i.data())}}),g.fn[R]=ut._jQueryInterface,g.fn[R].Constructor=ut,g.fn[R].noConflict=function(){return g.fn[R]=W,ut._jQueryInterface};var ft="collapse",dt="bs.collapse",gt="."+dt,_t=g.fn[ft],mt={toggle:!0,parent:""},pt={toggle:"boolean",parent:"(string|element)"},vt={SHOW:"show"+gt,SHOWN:"shown"+gt,HIDE:"hide"+gt,HIDDEN:"hidden"+gt,CLICK_DATA_API:"click"+gt+".data-api"},yt="show",Et="collapse",Ct="collapsing",Tt="collapsed",bt="width",St="height",Dt=".show, .collapsing",It='[data-toggle="collapse"]',wt=function(){function a(e,t){this._isTransitioning=!1,this._element=e,this._config=this._getConfig(t),this._triggerArray=[].slice.call(document.querySelectorAll('[data-toggle="collapse"][href="#'+e.id+'"],[data-toggle="collapse"][data-target="#'+e.id+'"]'));for(var n=[].slice.call(document.querySelectorAll(It)),i=0,o=n.length;i<o;i++){var r=n[i],s=_.getSelectorFromElement(r),a=[].slice.call(document.querySelectorAll(s)).filter(function(t){return t===e});null!==s&&0<a.length&&(this._selector=s,this._triggerArray.push(r))}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}var t=a.prototype;return t.toggle=function(){g(this._element).hasClass(yt)?this.hide():this.show()},t.show=function(){var t,e,n=this;if(!this._isTransitioning&&!g(this._element).hasClass(yt)&&(this._parent&&0===(t=[].slice.call(this._parent.querySelectorAll(Dt)).filter(function(t){return"string"==typeof n._config.parent?t.getAttribute("data-parent")===n._config.parent:t.classList.contains(Et)})).length&&(t=null),!(t&&(e=g(t).not(this._selector).data(dt))&&e._isTransitioning))){var i=g.Event(vt.SHOW);if(g(this._element).trigger(i),!i.isDefaultPrevented()){t&&(a._jQueryInterface.call(g(t).not(this._selector),"hide"),e||g(t).data(dt,null));var o=this._getDimension();g(this._element).removeClass(Et).addClass(Ct),this._element.style[o]=0,this._triggerArray.length&&g(this._triggerArray).removeClass(Tt).attr("aria-expanded",!0),this.setTransitioning(!0);var r="scroll"+(o[0].toUpperCase()+o.slice(1)),s=_.getTransitionDurationFromElement(this._element);g(this._element).one(_.TRANSITION_END,function(){g(n._element).removeClass(Ct).addClass(Et).addClass(yt),n._element.style[o]="",n.setTransitioning(!1),g(n._element).trigger(vt.SHOWN)}).emulateTransitionEnd(s),this._element.style[o]=this._element[r]+"px"}}},t.hide=function(){var t=this;if(!this._isTransitioning&&g(this._element).hasClass(yt)){var e=g.Event(vt.HIDE);if(g(this._element).trigger(e),!e.isDefaultPrevented()){var n=this._getDimension();this._element.style[n]=this._element.getBoundingClientRect()[n]+"px",_.reflow(this._element),g(this._element).addClass(Ct).removeClass(Et).removeClass(yt);var i=this._triggerArray.length;if(0<i)for(var o=0;o<i;o++){var r=this._triggerArray[o],s=_.getSelectorFromElement(r);if(null!==s)g([].slice.call(document.querySelectorAll(s))).hasClass(yt)||g(r).addClass(Tt).attr("aria-expanded",!1)}this.setTransitioning(!0);this._element.style[n]="";var a=_.getTransitionDurationFromElement(this._element);g(this._element).one(_.TRANSITION_END,function(){t.setTransitioning(!1),g(t._element).removeClass(Ct).addClass(Et).trigger(vt.HIDDEN)}).emulateTransitionEnd(a)}}},t.setTransitioning=function(t){this._isTransitioning=t},t.dispose=function(){g.removeData(this._element,dt),this._config=null,this._parent=null,this._element=null,this._triggerArray=null,this._isTransitioning=null},t._getConfig=function(t){return(t=l({},mt,{},t)).toggle=Boolean(t.toggle),_.typeCheckConfig(ft,t,pt),t},t._getDimension=function(){return g(this._element).hasClass(bt)?bt:St},t._getParent=function(){var t,n=this;_.isElement(this._config.parent)?(t=this._config.parent,"undefined"!=typeof this._config.parent.jquery&&(t=this._config.parent[0])):t=document.querySelector(this._config.parent);var e='[data-toggle="collapse"][data-parent="'+this._config.parent+'"]',i=[].slice.call(t.querySelectorAll(e));return g(i).each(function(t,e){n._addAriaAndCollapsedClass(a._getTargetFromElement(e),[e])}),t},t._addAriaAndCollapsedClass=function(t,e){var n=g(t).hasClass(yt);e.length&&g(e).toggleClass(Tt,!n).attr("aria-expanded",n)},a._getTargetFromElement=function(t){var e=_.getSelectorFromElement(t);return e?document.querySelector(e):null},a._jQueryInterface=function(i){return this.each(function(){var t=g(this),e=t.data(dt),n=l({},mt,{},t.data(),{},"object"==typeof i&&i?i:{});if(!e&&n.toggle&&/show|hide/.test(i)&&(n.toggle=!1),e||(e=new a(this,n),t.data(dt,e)),"string"==typeof i){if("undefined"==typeof e[i])throw new TypeError('No method named "'+i+'"');e[i]()}})},s(a,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"Default",get:function(){return mt}}]),a}();g(document).on(vt.CLICK_DATA_API,It,function(t){"A"===t.currentTarget.tagName&&t.preventDefault();var n=g(this),e=_.getSelectorFromElement(this),i=[].slice.call(document.querySelectorAll(e));g(i).each(function(){var t=g(this),e=t.data(dt)?"toggle":n.data();wt._jQueryInterface.call(t,e)})}),g.fn[ft]=wt._jQueryInterface,g.fn[ft].Constructor=wt,g.fn[ft].noConflict=function(){return g.fn[ft]=_t,wt._jQueryInterface};var At="dropdown",Nt="bs.dropdown",Ot="."+Nt,kt=".data-api",Pt=g.fn[At],Lt=new RegExp("38|40|27"),jt={HIDE:"hide"+Ot,HIDDEN:"hidden"+Ot,SHOW:"show"+Ot,SHOWN:"shown"+Ot,CLICK:"click"+Ot,CLICK_DATA_API:"click"+Ot+kt,KEYDOWN_DATA_API:"keydown"+Ot+kt,KEYUP_DATA_API:"keyup"+Ot+kt},Ht="disabled",Rt="show",xt="dropup",Ft="dropright",Ut="dropleft",Wt="dropdown-menu-right",qt="position-static",Mt='[data-toggle="dropdown"]',Kt=".dropdown form",Qt=".dropdown-menu",Bt=".navbar-nav",Vt=".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",Yt="top-start",zt="top-end",Xt="bottom-start",$t="bottom-end",Gt="right-start",Jt="left-start",Zt={offset:0,flip:!0,boundary:"scrollParent",reference:"toggle",display:"dynamic",popperConfig:null},te={offset:"(number|string|function)",flip:"boolean",boundary:"(string|element)",reference:"(string|element)",display:"string",popperConfig:"(null|object)"},ee=function(){function c(t,e){this._element=t,this._popper=null,this._config=this._getConfig(e),this._menu=this._getMenuElement(),this._inNavbar=this._detectNavbar(),this._addEventListeners()}var t=c.prototype;return t.toggle=function(){if(!this._element.disabled&&!g(this._element).hasClass(Ht)){var t=g(this._menu).hasClass(Rt);c._clearMenus(),t||this.show(!0)}},t.show=function(t){if(void 0===t&&(t=!1),!(this._element.disabled||g(this._element).hasClass(Ht)||g(this._menu).hasClass(Rt))){var e={relatedTarget:this._element},n=g.Event(jt.SHOW,e),i=c._getParentFromElement(this._element);if(g(i).trigger(n),!n.isDefaultPrevented()){if(!this._inNavbar&&t){if("undefined"==typeof u)throw new TypeError("Bootstrap's dropdowns require Popper.js (https://popper.js.org/)");var o=this._element;"parent"===this._config.reference?o=i:_.isElement(this._config.reference)&&(o=this._config.reference,"undefined"!=typeof this._config.reference.jquery&&(o=this._config.reference[0])),"scrollParent"!==this._config.boundary&&g(i).addClass(qt),this._popper=new u(o,this._menu,this._getPopperConfig())}"ontouchstart"in document.documentElement&&0===g(i).closest(Bt).length&&g(document.body).children().on("mouseover",null,g.noop),this._element.focus(),this._element.setAttribute("aria-expanded",!0),g(this._menu).toggleClass(Rt),g(i).toggleClass(Rt).trigger(g.Event(jt.SHOWN,e))}}},t.hide=function(){if(!this._element.disabled&&!g(this._element).hasClass(Ht)&&g(this._menu).hasClass(Rt)){var t={relatedTarget:this._element},e=g.Event(jt.HIDE,t),n=c._getParentFromElement(this._element);g(n).trigger(e),e.isDefaultPrevented()||(this._popper&&this._popper.destroy(),g(this._menu).toggleClass(Rt),g(n).toggleClass(Rt).trigger(g.Event(jt.HIDDEN,t)))}},t.dispose=function(){g.removeData(this._element,Nt),g(this._element).off(Ot),this._element=null,(this._menu=null)!==this._popper&&(this._popper.destroy(),this._popper=null)},t.update=function(){this._inNavbar=this._detectNavbar(),null!==this._popper&&this._popper.scheduleUpdate()},t._addEventListeners=function(){var e=this;g(this._element).on(jt.CLICK,function(t){t.preventDefault(),t.stopPropagation(),e.toggle()})},t._getConfig=function(t){return t=l({},this.constructor.Default,{},g(this._element).data(),{},t),_.typeCheckConfig(At,t,this.constructor.DefaultType),t},t._getMenuElement=function(){if(!this._menu){var t=c._getParentFromElement(this._element);t&&(this._menu=t.querySelector(Qt))}return this._menu},t._getPlacement=function(){var t=g(this._element.parentNode),e=Xt;return t.hasClass(xt)?(e=Yt,g(this._menu).hasClass(Wt)&&(e=zt)):t.hasClass(Ft)?e=Gt:t.hasClass(Ut)?e=Jt:g(this._menu).hasClass(Wt)&&(e=$t),e},t._detectNavbar=function(){return 0<g(this._element).closest(".navbar").length},t._getOffset=function(){var e=this,t={};return"function"==typeof this._config.offset?t.fn=function(t){return t.offsets=l({},t.offsets,{},e._config.offset(t.offsets,e._element)||{}),t}:t.offset=this._config.offset,t},t._getPopperConfig=function(){var t={placement:this._getPlacement(),modifiers:{offset:this._getOffset(),flip:{enabled:this._config.flip},preventOverflow:{boundariesElement:this._config.boundary}}};return"static"===this._config.display&&(t.modifiers.applyStyle={enabled:!1}),l({},t,{},this._config.popperConfig)},c._jQueryInterface=function(e){return this.each(function(){var t=g(this).data(Nt);if(t||(t=new c(this,"object"==typeof e?e:null),g(this).data(Nt,t)),"string"==typeof e){if("undefined"==typeof t[e])throw new TypeError('No method named "'+e+'"');t[e]()}})},c._clearMenus=function(t){if(!t||3!==t.which&&("keyup"!==t.type||9===t.which))for(var e=[].slice.call(document.querySelectorAll(Mt)),n=0,i=e.length;n<i;n++){var o=c._getParentFromElement(e[n]),r=g(e[n]).data(Nt),s={relatedTarget:e[n]};if(t&&"click"===t.type&&(s.clickEvent=t),r){var a=r._menu;if(g(o).hasClass(Rt)&&!(t&&("click"===t.type&&/input|textarea/i.test(t.target.tagName)||"keyup"===t.type&&9===t.which)&&g.contains(o,t.target))){var l=g.Event(jt.HIDE,s);g(o).trigger(l),l.isDefaultPrevented()||("ontouchstart"in document.documentElement&&g(document.body).children().off("mouseover",null,g.noop),e[n].setAttribute("aria-expanded","false"),r._popper&&r._popper.destroy(),g(a).removeClass(Rt),g(o).removeClass(Rt).trigger(g.Event(jt.HIDDEN,s)))}}}},c._getParentFromElement=function(t){var e,n=_.getSelectorFromElement(t);return n&&(e=document.querySelector(n)),e||t.parentNode},c._dataApiKeydownHandler=function(t){if((/input|textarea/i.test(t.target.tagName)?!(32===t.which||27!==t.which&&(40!==t.which&&38!==t.which||g(t.target).closest(Qt).length)):Lt.test(t.which))&&(t.preventDefault(),t.stopPropagation(),!this.disabled&&!g(this).hasClass(Ht))){var e=c._getParentFromElement(this),n=g(e).hasClass(Rt);if(n||27!==t.which)if(n&&(!n||27!==t.which&&32!==t.which)){var i=[].slice.call(e.querySelectorAll(Vt)).filter(function(t){return g(t).is(":visible")});if(0!==i.length){var o=i.indexOf(t.target);38===t.which&&0<o&&o--,40===t.which&&o<i.length-1&&o++,o<0&&(o=0),i[o].focus()}}else{if(27===t.which){var r=e.querySelector(Mt);g(r).trigger("focus")}g(this).trigger("click")}}},s(c,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"Default",get:function(){return Zt}},{key:"DefaultType",get:function(){return te}}]),c}();g(document).on(jt.KEYDOWN_DATA_API,Mt,ee._dataApiKeydownHandler).on(jt.KEYDOWN_DATA_API,Qt,ee._dataApiKeydownHandler).on(jt.CLICK_DATA_API+" "+jt.KEYUP_DATA_API,ee._clearMenus).on(jt.CLICK_DATA_API,Mt,function(t){t.preventDefault(),t.stopPropagation(),ee._jQueryInterface.call(g(this),"toggle")}).on(jt.CLICK_DATA_API,Kt,function(t){t.stopPropagation()}),g.fn[At]=ee._jQueryInterface,g.fn[At].Constructor=ee,g.fn[At].noConflict=function(){return g.fn[At]=Pt,ee._jQueryInterface};var ne="modal",ie="bs.modal",oe="."+ie,re=g.fn[ne],se={backdrop:!0,keyboard:!0,focus:!0,show:!0},ae={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean",show:"boolean"},le={HIDE:"hide"+oe,HIDE_PREVENTED:"hidePrevented"+oe,HIDDEN:"hidden"+oe,SHOW:"show"+oe,SHOWN:"shown"+oe,FOCUSIN:"focusin"+oe,RESIZE:"resize"+oe,CLICK_DISMISS:"click.dismiss"+oe,KEYDOWN_DISMISS:"keydown.dismiss"+oe,MOUSEUP_DISMISS:"mouseup.dismiss"+oe,MOUSEDOWN_DISMISS:"mousedown.dismiss"+oe,CLICK_DATA_API:"click"+oe+".data-api"},ce="modal-dialog-scrollable",he="modal-scrollbar-measure",ue="modal-backdrop",fe="modal-open",de="fade",ge="show",_e="modal-static",me=".modal-dialog",pe=".modal-body",ve='[data-toggle="modal"]',ye='[data-dismiss="modal"]',Ee=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",Ce=".sticky-top",Te=function(){function o(t,e){this._config=this._getConfig(e),this._element=t,this._dialog=t.querySelector(me),this._backdrop=null,this._isShown=!1,this._isBodyOverflowing=!1,this._ignoreBackdropClick=!1,this._isTransitioning=!1,this._scrollbarWidth=0}var t=o.prototype;return t.toggle=function(t){return this._isShown?this.hide():this.show(t)},t.show=function(t){var e=this;if(!this._isShown&&!this._isTransitioning){g(this._element).hasClass(de)&&(this._isTransitioning=!0);var n=g.Event(le.SHOW,{relatedTarget:t});g(this._element).trigger(n),this._isShown||n.isDefaultPrevented()||(this._isShown=!0,this._checkScrollbar(),this._setScrollbar(),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),g(this._element).on(le.CLICK_DISMISS,ye,function(t){return e.hide(t)}),g(this._dialog).on(le.MOUSEDOWN_DISMISS,function(){g(e._element).one(le.MOUSEUP_DISMISS,function(t){g(t.target).is(e._element)&&(e._ignoreBackdropClick=!0)})}),this._showBackdrop(function(){return e._showElement(t)}))}},t.hide=function(t){var e=this;if(t&&t.preventDefault(),this._isShown&&!this._isTransitioning){var n=g.Event(le.HIDE);if(g(this._element).trigger(n),this._isShown&&!n.isDefaultPrevented()){this._isShown=!1;var i=g(this._element).hasClass(de);if(i&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),g(document).off(le.FOCUSIN),g(this._element).removeClass(ge),g(this._element).off(le.CLICK_DISMISS),g(this._dialog).off(le.MOUSEDOWN_DISMISS),i){var o=_.getTransitionDurationFromElement(this._element);g(this._element).one(_.TRANSITION_END,function(t){return e._hideModal(t)}).emulateTransitionEnd(o)}else this._hideModal()}}},t.dispose=function(){[window,this._element,this._dialog].forEach(function(t){return g(t).off(oe)}),g(document).off(le.FOCUSIN),g.removeData(this._element,ie),this._config=null,this._element=null,this._dialog=null,this._backdrop=null,this._isShown=null,this._isBodyOverflowing=null,this._ignoreBackdropClick=null,this._isTransitioning=null,this._scrollbarWidth=null},t.handleUpdate=function(){this._adjustDialog()},t._getConfig=function(t){return t=l({},se,{},t),_.typeCheckConfig(ne,t,ae),t},t._triggerBackdropTransition=function(){var t=this;if("static"===this._config.backdrop){var e=g.Event(le.HIDE_PREVENTED);if(g(this._element).trigger(e),e.defaultPrevented)return;this._element.classList.add(_e);var n=_.getTransitionDurationFromElement(this._element);g(this._element).one(_.TRANSITION_END,function(){t._element.classList.remove(_e)}).emulateTransitionEnd(n),this._element.focus()}else this.hide()},t._showElement=function(t){var e=this,n=g(this._element).hasClass(de),i=this._dialog?this._dialog.querySelector(pe):null;this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.appendChild(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),g(this._dialog).hasClass(ce)&&i?i.scrollTop=0:this._element.scrollTop=0,n&&_.reflow(this._element),g(this._element).addClass(ge),this._config.focus&&this._enforceFocus();function o(){e._config.focus&&e._element.focus(),e._isTransitioning=!1,g(e._element).trigger(r)}var r=g.Event(le.SHOWN,{relatedTarget:t});if(n){var s=_.getTransitionDurationFromElement(this._dialog);g(this._dialog).one(_.TRANSITION_END,o).emulateTransitionEnd(s)}else o()},t._enforceFocus=function(){var e=this;g(document).off(le.FOCUSIN).on(le.FOCUSIN,function(t){document!==t.target&&e._element!==t.target&&0===g(e._element).has(t.target).length&&e._element.focus()})},t._setEscapeEvent=function(){var e=this;this._isShown&&this._config.keyboard?g(this._element).on(le.KEYDOWN_DISMISS,function(t){27===t.which&&e._triggerBackdropTransition()}):this._isShown||g(this._element).off(le.KEYDOWN_DISMISS)},t._setResizeEvent=function(){var e=this;this._isShown?g(window).on(le.RESIZE,function(t){return e.handleUpdate(t)}):g(window).off(le.RESIZE)},t._hideModal=function(){var t=this;this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._isTransitioning=!1,this._showBackdrop(function(){g(document.body).removeClass(fe),t._resetAdjustments(),t._resetScrollbar(),g(t._element).trigger(le.HIDDEN)})},t._removeBackdrop=function(){this._backdrop&&(g(this._backdrop).remove(),this._backdrop=null)},t._showBackdrop=function(t){var e=this,n=g(this._element).hasClass(de)?de:"";if(this._isShown&&this._config.backdrop){if(this._backdrop=document.createElement("div"),this._backdrop.className=ue,n&&this._backdrop.classList.add(n),g(this._backdrop).appendTo(document.body),g(this._element).on(le.CLICK_DISMISS,function(t){e._ignoreBackdropClick?e._ignoreBackdropClick=!1:t.target===t.currentTarget&&e._triggerBackdropTransition()}),n&&_.reflow(this._backdrop),g(this._backdrop).addClass(ge),!t)return;if(!n)return void t();var i=_.getTransitionDurationFromElement(this._backdrop);g(this._backdrop).one(_.TRANSITION_END,t).emulateTransitionEnd(i)}else if(!this._isShown&&this._backdrop){g(this._backdrop).removeClass(ge);var o=function(){e._removeBackdrop(),t&&t()};if(g(this._element).hasClass(de)){var r=_.getTransitionDurationFromElement(this._backdrop);g(this._backdrop).one(_.TRANSITION_END,o).emulateTransitionEnd(r)}else o()}else t&&t()},t._adjustDialog=function(){var t=this._element.scrollHeight>document.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},t._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},t._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=t.left+t.right<window.innerWidth,this._scrollbarWidth=this._getScrollbarWidth()},t._setScrollbar=function(){var o=this;if(this._isBodyOverflowing){var t=[].slice.call(document.querySelectorAll(Ee)),e=[].slice.call(document.querySelectorAll(Ce));g(t).each(function(t,e){var n=e.style.paddingRight,i=g(e).css("padding-right");g(e).data("padding-right",n).css("padding-right",parseFloat(i)+o._scrollbarWidth+"px")}),g(e).each(function(t,e){var n=e.style.marginRight,i=g(e).css("margin-right");g(e).data("margin-right",n).css("margin-right",parseFloat(i)-o._scrollbarWidth+"px")});var n=document.body.style.paddingRight,i=g(document.body).css("padding-right");g(document.body).data("padding-right",n).css("padding-right",parseFloat(i)+this._scrollbarWidth+"px")}g(document.body).addClass(fe)},t._resetScrollbar=function(){var t=[].slice.call(document.querySelectorAll(Ee));g(t).each(function(t,e){var n=g(e).data("padding-right");g(e).removeData("padding-right"),e.style.paddingRight=n||""});var e=[].slice.call(document.querySelectorAll(""+Ce));g(e).each(function(t,e){var n=g(e).data("margin-right");"undefined"!=typeof n&&g(e).css("margin-right",n).removeData("margin-right")});var n=g(document.body).data("padding-right");g(document.body).removeData("padding-right"),document.body.style.paddingRight=n||""},t._getScrollbarWidth=function(){var t=document.createElement("div");t.className=he,document.body.appendChild(t);var e=t.getBoundingClientRect().width-t.clientWidth;return document.body.removeChild(t),e},o._jQueryInterface=function(n,i){return this.each(function(){var t=g(this).data(ie),e=l({},se,{},g(this).data(),{},"object"==typeof n&&n?n:{});if(t||(t=new o(this,e),g(this).data(ie,t)),"string"==typeof n){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n](i)}else e.show&&t.show(i)})},s(o,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"Default",get:function(){return se}}]),o}();g(document).on(le.CLICK_DATA_API,ve,function(t){var e,n=this,i=_.getSelectorFromElement(this);i&&(e=document.querySelector(i));var o=g(e).data(ie)?"toggle":l({},g(e).data(),{},g(this).data());"A"!==this.tagName&&"AREA"!==this.tagName||t.preventDefault();var r=g(e).one(le.SHOW,function(t){t.isDefaultPrevented()||r.one(le.HIDDEN,function(){g(n).is(":visible")&&n.focus()})});Te._jQueryInterface.call(g(e),o,this)}),g.fn[ne]=Te._jQueryInterface,g.fn[ne].Constructor=Te,g.fn[ne].noConflict=function(){return g.fn[ne]=re,Te._jQueryInterface};var be=["background","cite","href","itemtype","longdesc","poster","src","xlink:href"],Se={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},De=/^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi,Ie=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;function we(t,r,e){if(0===t.length)return t;if(e&&"function"==typeof e)return e(t);for(var n=(new window.DOMParser).parseFromString(t,"text/html"),s=Object.keys(r),a=[].slice.call(n.body.querySelectorAll("*")),i=function(t){var e=a[t],n=e.nodeName.toLowerCase();if(-1===s.indexOf(e.nodeName.toLowerCase()))return e.parentNode.removeChild(e),"continue";var i=[].slice.call(e.attributes),o=[].concat(r["*"]||[],r[n]||[]);i.forEach(function(t){!function(t,e){var n=t.nodeName.toLowerCase();if(-1!==e.indexOf(n))return-1===be.indexOf(n)||Boolean(t.nodeValue.match(De)||t.nodeValue.match(Ie));for(var i=e.filter(function(t){return t instanceof RegExp}),o=0,r=i.length;o<r;o++)if(n.match(i[o]))return!0;return!1}(t,o)&&e.removeAttribute(t.nodeName)})},o=0,l=a.length;o<l;o++)i(o);return n.body.innerHTML}var Ae="tooltip",Ne="bs.tooltip",Oe="."+Ne,ke=g.fn[Ae],Pe="bs-tooltip",Le=new RegExp("(^|\\s)"+Pe+"\\S+","g"),je=["sanitize","whiteList","sanitizeFn"],He={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string|function)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)",sanitize:"boolean",sanitizeFn:"(null|function)",whiteList:"object",popperConfig:"(null|object)"},Re={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"},xe={animation:!0,template:'<div class="tooltip" role="tooltip"><div class="arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",sanitize:!0,sanitizeFn:null,whiteList:Se,popperConfig:null},Fe="show",Ue="out",We={HIDE:"hide"+Oe,HIDDEN:"hidden"+Oe,SHOW:"show"+Oe,SHOWN:"shown"+Oe,INSERTED:"inserted"+Oe,CLICK:"click"+Oe,FOCUSIN:"focusin"+Oe,FOCUSOUT:"focusout"+Oe,MOUSEENTER:"mouseenter"+Oe,MOUSELEAVE:"mouseleave"+Oe},qe="fade",Me="show",Ke=".tooltip-inner",Qe=".arrow",Be="hover",Ve="focus",Ye="click",ze="manual",Xe=function(){function i(t,e){if("undefined"==typeof u)throw new TypeError("Bootstrap's tooltips require Popper.js (https://popper.js.org/)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var t=i.prototype;return t.enable=function(){this._isEnabled=!0},t.disable=function(){this._isEnabled=!1},t.toggleEnabled=function(){this._isEnabled=!this._isEnabled},t.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=g(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),g(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(g(this.getTipElement()).hasClass(Me))return void this._leave(null,this);this._enter(null,this)}},t.dispose=function(){clearTimeout(this._timeout),g.removeData(this.element,this.constructor.DATA_KEY),g(this.element).off(this.constructor.EVENT_KEY),g(this.element).closest(".modal").off("hide.bs.modal",this._hideModalHandler),this.tip&&g(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},t.show=function(){var e=this;if("none"===g(this.element).css("display"))throw new Error("Please use show on visible elements");var t=g.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){g(this.element).trigger(t);var n=_.findShadowRoot(this.element),i=g.contains(null!==n?n:this.element.ownerDocument.documentElement,this.element);if(t.isDefaultPrevented()||!i)return;var o=this.getTipElement(),r=_.getUID(this.constructor.NAME);o.setAttribute("id",r),this.element.setAttribute("aria-describedby",r),this.setContent(),this.config.animation&&g(o).addClass(qe);var s="function"==typeof this.config.placement?this.config.placement.call(this,o,this.element):this.config.placement,a=this._getAttachment(s);this.addAttachmentClass(a);var l=this._getContainer();g(o).data(this.constructor.DATA_KEY,this),g.contains(this.element.ownerDocument.documentElement,this.tip)||g(o).appendTo(l),g(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new u(this.element,o,this._getPopperConfig(a)),g(o).addClass(Me),"ontouchstart"in document.documentElement&&g(document.body).children().on("mouseover",null,g.noop);var c=function(){e.config.animation&&e._fixTransition();var t=e._hoverState;e._hoverState=null,g(e.element).trigger(e.constructor.Event.SHOWN),t===Ue&&e._leave(null,e)};if(g(this.tip).hasClass(qe)){var h=_.getTransitionDurationFromElement(this.tip);g(this.tip).one(_.TRANSITION_END,c).emulateTransitionEnd(h)}else c()}},t.hide=function(t){function e(){n._hoverState!==Fe&&i.parentNode&&i.parentNode.removeChild(i),n._cleanTipClass(),n.element.removeAttribute("aria-describedby"),g(n.element).trigger(n.constructor.Event.HIDDEN),null!==n._popper&&n._popper.destroy(),t&&t()}var n=this,i=this.getTipElement(),o=g.Event(this.constructor.Event.HIDE);if(g(this.element).trigger(o),!o.isDefaultPrevented()){if(g(i).removeClass(Me),"ontouchstart"in document.documentElement&&g(document.body).children().off("mouseover",null,g.noop),this._activeTrigger[Ye]=!1,this._activeTrigger[Ve]=!1,this._activeTrigger[Be]=!1,g(this.tip).hasClass(qe)){var r=_.getTransitionDurationFromElement(i);g(i).one(_.TRANSITION_END,e).emulateTransitionEnd(r)}else e();this._hoverState=""}},t.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},t.isWithContent=function(){return Boolean(this.getTitle())},t.addAttachmentClass=function(t){g(this.getTipElement()).addClass(Pe+"-"+t)},t.getTipElement=function(){return this.tip=this.tip||g(this.config.template)[0],this.tip},t.setContent=function(){var t=this.getTipElement();this.setElementContent(g(t.querySelectorAll(Ke)),this.getTitle()),g(t).removeClass(qe+" "+Me)},t.setElementContent=function(t,e){"object"!=typeof e||!e.nodeType&&!e.jquery?this.config.html?(this.config.sanitize&&(e=we(e,this.config.whiteList,this.config.sanitizeFn)),t.html(e)):t.text(e):this.config.html?g(e).parent().is(t)||t.empty().append(e):t.text(g(e).text())},t.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t=t||("function"==typeof this.config.title?this.config.title.call(this.element):this.config.title)},t._getPopperConfig=function(t){var e=this;return l({},{placement:t,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:Qe},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}},{},this.config.popperConfig)},t._getOffset=function(){var e=this,t={};return"function"==typeof this.config.offset?t.fn=function(t){return t.offsets=l({},t.offsets,{},e.config.offset(t.offsets,e.element)||{}),t}:t.offset=this.config.offset,t},t._getContainer=function(){return!1===this.config.container?document.body:_.isElement(this.config.container)?g(this.config.container):g(document).find(this.config.container)},t._getAttachment=function(t){return Re[t.toUpperCase()]},t._setListeners=function(){var i=this;this.config.trigger.split(" ").forEach(function(t){if("click"===t)g(i.element).on(i.constructor.Event.CLICK,i.config.selector,function(t){return i.toggle(t)});else if(t!==ze){var e=t===Be?i.constructor.Event.MOUSEENTER:i.constructor.Event.FOCUSIN,n=t===Be?i.constructor.Event.MOUSELEAVE:i.constructor.Event.FOCUSOUT;g(i.element).on(e,i.config.selector,function(t){return i._enter(t)}).on(n,i.config.selector,function(t){return i._leave(t)})}}),this._hideModalHandler=function(){i.element&&i.hide()},g(this.element).closest(".modal").on("hide.bs.modal",this._hideModalHandler),this.config.selector?this.config=l({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},t._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");!this.element.getAttribute("title")&&"string"==t||(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},t._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||g(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),g(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?Ve:Be]=!0),g(e.getTipElement()).hasClass(Me)||e._hoverState===Fe?e._hoverState=Fe:(clearTimeout(e._timeout),e._hoverState=Fe,e.config.delay&&e.config.delay.show?e._timeout=setTimeout(function(){e._hoverState===Fe&&e.show()},e.config.delay.show):e.show())},t._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||g(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),g(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?Ve:Be]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=Ue,e.config.delay&&e.config.delay.hide?e._timeout=setTimeout(function(){e._hoverState===Ue&&e.hide()},e.config.delay.hide):e.hide())},t._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},t._getConfig=function(t){var e=g(this.element).data();return Object.keys(e).forEach(function(t){-1!==je.indexOf(t)&&delete e[t]}),"number"==typeof(t=l({},this.constructor.Default,{},e,{},"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),_.typeCheckConfig(Ae,t,this.constructor.DefaultType),t.sanitize&&(t.template=we(t.template,t.whiteList,t.sanitizeFn)),t},t._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},t._cleanTipClass=function(){var t=g(this.getTipElement()),e=t.attr("class").match(Le);null!==e&&e.length&&t.removeClass(e.join(""))},t._handlePopperPlacementChange=function(t){var e=t.instance;this.tip=e.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},t._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute("x-placement")&&(g(t).removeClass(qe),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},i._jQueryInterface=function(n){return this.each(function(){var t=g(this).data(Ne),e="object"==typeof n&&n;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),g(this).data(Ne,t)),"string"==typeof n)){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"Default",get:function(){return xe}},{key:"NAME",get:function(){return Ae}},{key:"DATA_KEY",get:function(){return Ne}},{key:"Event",get:function(){return We}},{key:"EVENT_KEY",get:function(){return Oe}},{key:"DefaultType",get:function(){return He}}]),i}();g.fn[Ae]=Xe._jQueryInterface,g.fn[Ae].Constructor=Xe,g.fn[Ae].noConflict=function(){return g.fn[Ae]=ke,Xe._jQueryInterface};var $e="popover",Ge="bs.popover",Je="."+Ge,Ze=g.fn[$e],tn="bs-popover",en=new RegExp("(^|\\s)"+tn+"\\S+","g"),nn=l({},Xe.Default,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>'}),on=l({},Xe.DefaultType,{content:"(string|element|function)"}),rn="fade",sn="show",an=".popover-header",ln=".popover-body",cn={HIDE:"hide"+Je,HIDDEN:"hidden"+Je,SHOW:"show"+Je,SHOWN:"shown"+Je,INSERTED:"inserted"+Je,CLICK:"click"+Je,FOCUSIN:"focusin"+Je,FOCUSOUT:"focusout"+Je,MOUSEENTER:"mouseenter"+Je,MOUSELEAVE:"mouseleave"+Je},hn=function(t){function i(){return t.apply(this,arguments)||this}!function(t,e){t.prototype=Object.create(e.prototype),(t.prototype.constructor=t).__proto__=e}(i,t);var e=i.prototype;return e.isWithContent=function(){return this.getTitle()||this._getContent()},e.addAttachmentClass=function(t){g(this.getTipElement()).addClass(tn+"-"+t)},e.getTipElement=function(){return this.tip=this.tip||g(this.config.template)[0],this.tip},e.setContent=function(){var t=g(this.getTipElement());this.setElementContent(t.find(an),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(ln),e),t.removeClass(rn+" "+sn)},e._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},e._cleanTipClass=function(){var t=g(this.getTipElement()),e=t.attr("class").match(en);null!==e&&0<e.length&&t.removeClass(e.join(""))},i._jQueryInterface=function(n){return this.each(function(){var t=g(this).data(Ge),e="object"==typeof n?n:null;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),g(this).data(Ge,t)),"string"==typeof n)){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"Default",get:function(){return nn}},{key:"NAME",get:function(){return $e}},{key:"DATA_KEY",get:function(){return Ge}},{key:"Event",get:function(){return cn}},{key:"EVENT_KEY",get:function(){return Je}},{key:"DefaultType",get:function(){return on}}]),i}(Xe);g.fn[$e]=hn._jQueryInterface,g.fn[$e].Constructor=hn,g.fn[$e].noConflict=function(){return g.fn[$e]=Ze,hn._jQueryInterface};var un="scrollspy",fn="bs.scrollspy",dn="."+fn,gn=g.fn[un],_n={offset:10,method:"auto",target:""},mn={offset:"number",method:"string",target:"(string|element)"},pn={ACTIVATE:"activate"+dn,SCROLL:"scroll"+dn,LOAD_DATA_API:"load"+dn+".data-api"},vn="dropdown-item",yn="active",En='[data-spy="scroll"]',Cn=".nav, .list-group",Tn=".nav-link",bn=".nav-item",Sn=".list-group-item",Dn=".dropdown",In=".dropdown-item",wn=".dropdown-toggle",An="offset",Nn="position",On=function(){function n(t,e){var n=this;this._element=t,this._scrollElement="BODY"===t.tagName?window:t,this._config=this._getConfig(e),this._selector=this._config.target+" "+Tn+","+this._config.target+" "+Sn+","+this._config.target+" "+In,this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,g(this._scrollElement).on(pn.SCROLL,function(t){return n._process(t)}),this.refresh(),this._process()}var t=n.prototype;return t.refresh=function(){var e=this,t=this._scrollElement===this._scrollElement.window?An:Nn,o="auto"===this._config.method?t:this._config.method,r=o===Nn?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),[].slice.call(document.querySelectorAll(this._selector)).map(function(t){var e,n=_.getSelectorFromElement(t);if(n&&(e=document.querySelector(n)),e){var i=e.getBoundingClientRect();if(i.width||i.height)return[g(e)[o]().top+r,n]}return null}).filter(function(t){return t}).sort(function(t,e){return t[0]-e[0]}).forEach(function(t){e._offsets.push(t[0]),e._targets.push(t[1])})},t.dispose=function(){g.removeData(this._element,fn),g(this._scrollElement).off(dn),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null},t._getConfig=function(t){if("string"!=typeof(t=l({},_n,{},"object"==typeof t&&t?t:{})).target){var e=g(t.target).attr("id");e||(e=_.getUID(un),g(t.target).attr("id",e)),t.target="#"+e}return _.typeCheckConfig(un,t,mn),t},t._getScrollTop=function(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop},t._getScrollHeight=function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},t._getOffsetHeight=function(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height},t._process=function(){var t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),n=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),n<=t){var i=this._targets[this._targets.length-1];this._activeTarget!==i&&this._activate(i)}else{if(this._activeTarget&&t<this._offsets[0]&&0<this._offsets[0])return this._activeTarget=null,void this._clear();for(var o=this._offsets.length;o--;){this._activeTarget!==this._targets[o]&&t>=this._offsets[o]&&("undefined"==typeof this._offsets[o+1]||t<this._offsets[o+1])&&this._activate(this._targets[o])}}},t._activate=function(e){this._activeTarget=e,this._clear();var t=this._selector.split(",").map(function(t){return t+'[data-target="'+e+'"],'+t+'[href="'+e+'"]'}),n=g([].slice.call(document.querySelectorAll(t.join(","))));n.hasClass(vn)?(n.closest(Dn).find(wn).addClass(yn),n.addClass(yn)):(n.addClass(yn),n.parents(Cn).prev(Tn+", "+Sn).addClass(yn),n.parents(Cn).prev(bn).children(Tn).addClass(yn)),g(this._scrollElement).trigger(pn.ACTIVATE,{relatedTarget:e})},t._clear=function(){[].slice.call(document.querySelectorAll(this._selector)).filter(function(t){return t.classList.contains(yn)}).forEach(function(t){return t.classList.remove(yn)})},n._jQueryInterface=function(e){return this.each(function(){var t=g(this).data(fn);if(t||(t=new n(this,"object"==typeof e&&e),g(this).data(fn,t)),"string"==typeof e){if("undefined"==typeof t[e])throw new TypeError('No method named "'+e+'"');t[e]()}})},s(n,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"Default",get:function(){return _n}}]),n}();g(window).on(pn.LOAD_DATA_API,function(){for(var t=[].slice.call(document.querySelectorAll(En)),e=t.length;e--;){var n=g(t[e]);On._jQueryInterface.call(n,n.data())}}),g.fn[un]=On._jQueryInterface,g.fn[un].Constructor=On,g.fn[un].noConflict=function(){return g.fn[un]=gn,On._jQueryInterface};var kn="bs.tab",Pn="."+kn,Ln=g.fn.tab,jn={HIDE:"hide"+Pn,HIDDEN:"hidden"+Pn,SHOW:"show"+Pn,SHOWN:"shown"+Pn,CLICK_DATA_API:"click"+Pn+".data-api"},Hn="dropdown-menu",Rn="active",xn="disabled",Fn="fade",Un="show",Wn=".dropdown",qn=".nav, .list-group",Mn=".active",Kn="> li > .active",Qn='[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',Bn=".dropdown-toggle",Vn="> .dropdown-menu .active",Yn=function(){function i(t){this._element=t}var t=i.prototype;return t.show=function(){var n=this;if(!(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&g(this._element).hasClass(Rn)||g(this._element).hasClass(xn))){var t,i,e=g(this._element).closest(qn)[0],o=_.getSelectorFromElement(this._element);if(e){var r="UL"===e.nodeName||"OL"===e.nodeName?Kn:Mn;i=(i=g.makeArray(g(e).find(r)))[i.length-1]}var s=g.Event(jn.HIDE,{relatedTarget:this._element}),a=g.Event(jn.SHOW,{relatedTarget:i});if(i&&g(i).trigger(s),g(this._element).trigger(a),!a.isDefaultPrevented()&&!s.isDefaultPrevented()){o&&(t=document.querySelector(o)),this._activate(this._element,e);var l=function(){var t=g.Event(jn.HIDDEN,{relatedTarget:n._element}),e=g.Event(jn.SHOWN,{relatedTarget:i});g(i).trigger(t),g(n._element).trigger(e)};t?this._activate(t,t.parentNode,l):l()}}},t.dispose=function(){g.removeData(this._element,kn),this._element=null},t._activate=function(t,e,n){function i(){return o._transitionComplete(t,r,n)}var o=this,r=(!e||"UL"!==e.nodeName&&"OL"!==e.nodeName?g(e).children(Mn):g(e).find(Kn))[0],s=n&&r&&g(r).hasClass(Fn);if(r&&s){var a=_.getTransitionDurationFromElement(r);g(r).removeClass(Un).one(_.TRANSITION_END,i).emulateTransitionEnd(a)}else i()},t._transitionComplete=function(t,e,n){if(e){g(e).removeClass(Rn);var i=g(e.parentNode).find(Vn)[0];i&&g(i).removeClass(Rn),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!1)}if(g(t).addClass(Rn),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),_.reflow(t),t.classList.contains(Fn)&&t.classList.add(Un),t.parentNode&&g(t.parentNode).hasClass(Hn)){var o=g(t).closest(Wn)[0];if(o){var r=[].slice.call(o.querySelectorAll(Bn));g(r).addClass(Rn)}t.setAttribute("aria-expanded",!0)}n&&n()},i._jQueryInterface=function(n){return this.each(function(){var t=g(this),e=t.data(kn);if(e||(e=new i(this),t.data(kn,e)),"string"==typeof n){if("undefined"==typeof e[n])throw new TypeError('No method named "'+n+'"');e[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.4.1"}}]),i}();g(document).on(jn.CLICK_DATA_API,Qn,function(t){t.preventDefault(),Yn._jQueryInterface.call(g(this),"show")}),g.fn.tab=Yn._jQueryInterface,g.fn.tab.Constructor=Yn,g.fn.tab.noConflict=function(){return g.fn.tab=Ln,Yn._jQueryInterface};var zn="toast",Xn="bs.toast",$n="."+Xn,Gn=g.fn[zn],Jn={CLICK_DISMISS:"click.dismiss"+$n,HIDE:"hide"+$n,HIDDEN:"hidden"+$n,SHOW:"show"+$n,SHOWN:"shown"+$n},Zn="fade",ti="hide",ei="show",ni="showing",ii={animation:"boolean",autohide:"boolean",delay:"number"},oi={animation:!0,autohide:!0,delay:500},ri='[data-dismiss="toast"]',si=function(){function i(t,e){this._element=t,this._config=this._getConfig(e),this._timeout=null,this._setListeners()}var t=i.prototype;return t.show=function(){var t=this,e=g.Event(Jn.SHOW);if(g(this._element).trigger(e),!e.isDefaultPrevented()){this._config.animation&&this._element.classList.add(Zn);var n=function(){t._element.classList.remove(ni),t._element.classList.add(ei),g(t._element).trigger(Jn.SHOWN),t._config.autohide&&(t._timeout=setTimeout(function(){t.hide()},t._config.delay))};if(this._element.classList.remove(ti),_.reflow(this._element),this._element.classList.add(ni),this._config.animation){var i=_.getTransitionDurationFromElement(this._element);g(this._element).one(_.TRANSITION_END,n).emulateTransitionEnd(i)}else n()}},t.hide=function(){if(this._element.classList.contains(ei)){var t=g.Event(Jn.HIDE);g(this._element).trigger(t),t.isDefaultPrevented()||this._close()}},t.dispose=function(){clearTimeout(this._timeout),this._timeout=null,this._element.classList.contains(ei)&&this._element.classList.remove(ei),g(this._element).off(Jn.CLICK_DISMISS),g.removeData(this._element,Xn),this._element=null,this._config=null},t._getConfig=function(t){return t=l({},oi,{},g(this._element).data(),{},"object"==typeof t&&t?t:{}),_.typeCheckConfig(zn,t,this.constructor.DefaultType),t},t._setListeners=function(){var t=this;g(this._element).on(Jn.CLICK_DISMISS,ri,function(){return t.hide()})},t._close=function(){function t(){e._element.classList.add(ti),g(e._element).trigger(Jn.HIDDEN)}var e=this;if(this._element.classList.remove(ei),this._config.animation){var n=_.getTransitionDurationFromElement(this._element);g(this._element).one(_.TRANSITION_END,t).emulateTransitionEnd(n)}else t()},i._jQueryInterface=function(n){return this.each(function(){var t=g(this),e=t.data(Xn);if(e||(e=new i(this,"object"==typeof n&&n),t.data(Xn,e)),"string"==typeof n){if("undefined"==typeof e[n])throw new TypeError('No method named "'+n+'"');e[n](this)}})},s(i,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"DefaultType",get:function(){return ii}},{key:"Default",get:function(){return oi}}]),i}();g.fn[zn]=si._jQueryInterface,g.fn[zn].Constructor=si,g.fn[zn].noConflict=function(){return g.fn[zn]=Gn,si._jQueryInterface},t.Alert=v,t.Button=H,t.Carousel=ut,t.Collapse=wt,t.Dropdown=ee,t.Modal=Te,t.Popover=hn,t.Scrollspy=On,t.Tab=Yn,t.Toast=si,t.Tooltip=Xe,t.Util=_,Object.defineProperty(t,"__esModule",{value:!0})});

File: public/assets/controllers/file-management/actions.js
Match lines: 4
49|    window.toastr?.success?.('Link copiado!');
95|  if (!previewUrl) return window.toastr?.error?.('Pré-visualização indisponível.');
99|  window.toastr?.success?.('Link copiado.');
112|  if (!downloadUrl) return window.toastr?.error?.('Download indisponível.');

File: public/assets/controllers/file-management/addnew.js
Match lines: 1
2|import { success as toastSuccess, error as toastError } from '../../lib/notify.js'; 

File: public/assets/controllers/file-management/attendance-list-realtime.js
Match lines: 3
29|    window.toastr?.info?.(`A lista de presença${title} está gerando o PDF.`);
35|    window.toastr?.success?.(`Lista de presença${title} pronta.`);
41|    window.toastr?.error?.(`Falha ao gerar a lista de presença.${detail}`);

File: public/assets/controllers/file-management/attendance-list.js
Match lines: 4
324|      window.toastr?.info?.(
337|      window.toastr?.error?.(message);
353|      window.toastr?.error?.(message);
459|    window.toastr?.error?.(message);

File: public/assets/controllers/file-management/browse.js
Match lines: 13
1|import  { error as toastError, success as toastSuccess } from "../../lib/notify.js";
277|      toastError("Falha ao carregar a lista.");
426|      toastSuccess('Pasta movida com sucesso.');
429|      toastError(err?.response?.data?.message || 'Não foi possível mover a pasta.');
502|  //   toastSuccess('Arquivo movido com sucesso.');
660|    toastr?.success?.('Link copiado!');
666|    toastr?.success?.('Link copiado!');
686|    toastr.error("Falha ao carregar compartilhamento.");
712|    toastr.success("Compartilhamento atualizado!");
716|    toastr.error("Erro ao salvar compartilhamento.");
1112|      toastr?.warning?.('Selecione uma pasta para exportar.');
1126|      toastr?.success?.(`Enviado(s) ${n} arquivo(s) para o Google Drive`);
1129|      toastr?.error?.(msg);

File: public/assets/controllers/file-management/file-actions.js
Match lines: 15
40|    window.toastr?.error?.('Não foi possível atualizar favorito.');
227|    window.toastr?.error?.(message || "Arquivo assinado não encontrado.");
242|    window.toastr?.error?.("Falha ao abrir arquivo.");
393|    window.toastr?.success?.("Arquivo excluído com sucesso.");
400|    window.toastr?.error?.(getRequestErrorMessage(e, "Erro ao excluir arquivo."));
499|      window.toastr?.error?.('Este arquivo não possui URL pública.');
515|    window.toastr?.success?.('Download iniciado.');
517|    window.toastr?.error?.('Não foi possível iniciar o download.');
527|      window.toastr?.error?.('Este arquivo não possui link para copiar.');
543|    window.toastr?.success?.('Link copiado!');
545|    window.toastr?.error?.('Falha ao copiar o link.');
565|      window.toastr?.success?.("Arquivo excluído com sucesso.");
569|      window.toastr?.error?.(getRequestErrorMessage(e, "Erro ao excluir arquivo."));
655|      window.toastr?.success?.('Arquivo movido com sucesso.');
659|      window.toastr?.error?.(getFileActionErrorMessage(e, 'Não foi possível mover o arquivo.'));

File: public/assets/controllers/file-management/file-move.js
Match lines: 4
226|    window.toastr?.success?.("Arquivo movido com sucesso.");
230|    window.toastr?.error?.(getMoveErrorMessage(e));
268|      window.toastr?.success?.("Arquivo movido com sucesso.");
272|      window.toastr?.error?.(getMoveErrorMessage(e));

File: public/assets/controllers/file-management/files.api.js
Match lines: 4
1|import { error as toastError } from "../../lib/notify.js";
77|    // Mostra toast de erro se disponível
78|    if (typeof toastError === 'function') {
79|      toastError(validation.message);

File: public/assets/controllers/file-management/files.view.js
Match lines: 7
2|import  { error as toastError, success as toastSuccess } from "../../lib/notify.js";
445|        window.toastr?.info?.('A lista de presença ainda está gerando o PDF.');
1075|      (window.toastr?.warning || alert)('Nenhum arquivo selecionado.');
1097|      window.toastr?.success?.('Arquivo enviado para o Google Drive.');
1100|      (window.toastr?.error || alert)(err.message || 'Falha ao exportar para o Drive.');
1551|      toastError('Erro ao carregar as tags do arquivo.');
1731|    toastError(err?.message || 'Falha ao carregar resumo do arquivo.');

File: public/assets/controllers/file-management/folder-move.js
Match lines: 2
245|    window.toastr?.success?.("Pasta movida com sucesso.");
249|    window.toastr?.error?.("Não foi possível mover a pasta.");

File: public/assets/controllers/file-management/import-drive.js
Match lines: 6
2|import { success as toastSuccess, error as toastError } from '../../lib/notify.js';
50|        toastSuccess('Conectado ao Google Drive com sucesso!');
114|      toastError(error.message || 'Erro ao carregar arquivos do Google Drive');
228|      toastError('Selecione pelo menos um arquivo');
269|      toastSuccess(`${imported} arquivo(s) importado(s) com sucesso!`);
279|      toastError(`${failed} arquivo(s) falharam ao importar`);

File: public/assets/controllers/file-management/listDocuments.js
Match lines: 1
499|        window.toastr?.info?.('A lista de presença ainda está gerando o PDF.');

File: public/assets/controllers/file-management/menu-actions.js
Match lines: 4
2|import  { error as toastError, success as toastSuccess } from "../../lib/notify.js";
109|        toastError("Não foi possível excluir a pasta.");
113|      toastError("Não foi possível excluir a pasta.");
117|  if (window.toastr?.success) window.toastr.success("Pasta excluída com sucesso.");

File: public/assets/controllers/file-management/modals.js
Match lines: 13
4|import { error as toastError } from "../../lib/notify.js";
131|      if (!name) return toastr.error("Informe um nome."); 
158|        toastr.success("Pasta criada com sucesso!");
168|        toastr.error("Falha ao criar a pasta.");
278|        toastError(validation.message);
307|        toastError(validation.message);
342|        toastr.error(error.message || 'Falha ao enviar arquivos.');
366|        toastr.success('Arquivo salvo com sucesso!!'); 
371|        toastr.error(res.error || 'Falha ao enviar arquivos.');
400|        toastError(validation.message);
430|        toastError(validation.message);
487|        toastr.success('Pasta enviada com sucesso!'); 
493|        toastr.error('Erro ao enviar pasta: ' + (error.message || 'Erro desconhecido'));

File: public/assets/controllers/file-management/rename.js
Match lines: 5
117|    window.toastr?.error?.('Não inclua a extensão. Ela será mantida automaticamente.');
124|    window.toastr?.success?.('Arquivo renomeado.');
128|    window.toastr?.error?.(msg);
155|    toastr.success('Pasta renomeada com sucesso.');
158|    toastr.error('Falha ao renomear pasta.');

File: public/assets/controllers/file-management/tags.views.js
Match lines: 10
2|    error as toastError,
3|    success as toastSuccess,
45|      toastError(errorMessage);
735|      toastError("Informe um nome para a tag.");
749|      toastError("Erro ao atualizar tag.");
941|      toastError('Não foi possível criar/associar a tag.');
960|          toastError("Erro ao remover tag.");
1030|          toastError(error?.message || "Erro ao adicionar tag.");
1107|            toastError("Erro ao remover tag.");
1133|              toastError("Erro ao deletar tag permanentemente.");

File: public/assets/controllers/file-management/upload.controller.js
Match lines: 5
69|      toastSuccess('Arquivos enviados com sucesso!');
81|      toastError(message);
109|        // Mostra toast de erro
110|        if (typeof toastError === 'function') {
111|          toastError(message);

File: public/assets/controllers/file-management/utils/toast.js
Match lines: 2
2|export const toastError = (m) => _error(m);
3|export const toastSuccess = (m) => _success(m);

File: public/assets/controllers/lib/notify.js
Match lines: 13
4|  positionClass: 'toast-bottom-right',
15|  if (!window.toastr) return;
18|    window.toastr.options = { ...BASE_DEFAULTS, ...userDefaults, ...(window.toastr.options || {}) };
21|  // mescla por chamada (sem sujar defaults globais do toastr)
22|  window.toastr.options = { ...window.toastr.options, ...extra };
31|  if (window.toastr) {
33|    window.toastr.success(message);
40|  if (window.toastr) {
42|    window.toastr.info(message);
49|  if (window.toastr) {
51|    window.toastr.warning(message);
58|  if (window.toastr) {
60|    window.toastr.error(message);

File: public/assets/lib/notify.js
Match lines: 13
4|  positionClass: 'toast-bottom-right',
15|  if (!window.toastr) return;
18|    window.toastr.options = { ...BASE_DEFAULTS, ...userDefaults, ...(window.toastr.options || {}) };
21|  // mescla por chamada (sem sujar defaults globais do toastr)
22|  window.toastr.options = { ...window.toastr.options, ...extra };
31|  if (window.toastr) {
33|    window.toastr.success(message);
40|  if (window.toastr) {
42|    window.toastr.info(message);
49|  if (window.toastr) {
51|    window.toastr.warning(message);
58|  if (window.toastr) {
60|    window.toastr.error(message);

File: public/finances/common.js
Match lines: 100
84|        toastr.warning('Sessão expirada. Recarregando a página...');
132|        } else if (typeof toastr !== 'undefined') {
133|            toastr.error('Aguarde o carregamento da página.');
148|            if (typeof toastr !== 'undefined') {
149|                toastr.error('Erro ao processar ação. Tente recarregar a página.');
1355|        } else if (typeof toastr !== 'undefined') {
1356|            toastr.error('Não foi possível baixar a remessa.');
1360|        if (typeof toastr !== 'undefined') {
1361|            toastr.error('Erro de conexão ao baixar a remessa.');
1644|            toastr.warning('Selecione um arquivo');
1685|                        toastr.success('Dados atualizados!');
1710|    toastr.info('Preparando exportação...');
1715|            toastr.warning('Nenhum dado para exportar');
1770|            toastr.success('Exportação CSV concluída!');
1812|            toastr.success('Exportação Excel concluída!');
1815|        toastr.error('Erro ao buscar dados para exportação');
2023|                    toastr.success('Centro de custo excluído com sucesso!');
2028|                    toastr.error(resp?.message || 'Erro ao excluir centro de custo');
2032|                toastr.error('Erro ao excluir centro de custo');
2083|            // return toastr.warning('Preencha os campos obrigatórios!');
2096|                    toastr.success('Centro de custo salvo com sucesso!');
2105|                    toastr.error(resp?.message || 'Erro ao salvar centro de custo');
2110|                toastr.error(errorMsg);
3499|            toastr.error('Registro não encontrado na tabela');
3507|            toastr.error('Dados do registro não encontrados');
3688|            toastr.error('Erro ao carregar dados do registro');
3963|                    toastr.success('Orçamento excluído com sucesso!');
3968|                    toastr.error(resp?.message || 'Erro ao excluir orçamento');
3972|                toastr.error('Erro ao excluir orçamento');
4022|            // return toastr.warning('Preencha os campos obrigatórios!');
4035|                    toastr.success('Orçamento salvo com sucesso!');
4055|                    toastr.error(resp?.message || 'Erro ao salvar orçamento');
4060|                toastr.error(errorMsg);
5275|            toastr.error('Registro não encontrado na tabela');
5283|            toastr.error('Dados do registro não encontrados');
5467|            toastr.error('Erro ao carregar dados do registro');
5779|            toastr.error('Erro ao carregar opções de bancos');
5802|            toastr.error('Erro ao carregar estatísticas');
5831|            toastr.error('Erro ao carregar contas bancárias');
6238|                    toastr.success(resp.message || 'Conta bancária salva com sucesso');
6261|                    toastr.error(resp.message || 'Erro ao salvar conta bancária');
6265|                toastr.error('Erro ao salvar conta bancária');
6285|            toastr.error('Registro não encontrado na tabela');
6295|            toastr.error('Dados do registro não encontrados');
6377|            toastr.error('Erro ao carregar dados do registro');
6406|                toastr.error('Erro ao carregar convênios CNAB');
6492|                    toastr.error('Erro ao carregar dados do convênio');
6500|                toastr.error('Selecione uma conta bancária primeiro');
6526|                    toastr.success(resp.message || 'Status do convênio alterado com sucesso');
6529|                    toastr.error(resp.message || 'Erro ao alterar status do convênio');
6539|                toastr.error(resp && resp.message ? resp.message : 'Erro ao alterar status do convênio');
6575|                    toastr.success(resp.message || 'Convênio CNAB excluído com sucesso');
6581|                    toastr.error(resp.message || 'Erro ao excluir convênio CNAB');
6586|                toastr.error(resp && resp.message ? resp.message : 'Erro ao excluir convênio CNAB');
6608|            toastr.error('Conta bancária não identificada');
6613|            toastr.error('Selecione o serviço CNAB');
6629|            toastr.error('Selecione o serviço CNAB');
6648|                    toastr.success(resp.message || 'Convênio CNAB salvo com sucesso');
6652|                    toastr.error(resp.message || 'Erro ao salvar convênio CNAB');
6657|                toastr.error(resp && resp.message ? resp.message : 'Erro ao salvar convênio CNAB');
6720|                    toastr.success('Conta bancária removida com sucesso');
6725|                    toastr.error(resp.message || 'Erro ao remover conta bancária');
6729|                toastr.error('Erro ao remover conta bancária');
6771|                    toastr.success('Conta bancária removida com sucesso');
6776|                    toastr.error(resp.message || 'Erro ao remover conta bancária');
6780|                toastr.error('Erro ao remover conta bancária');
8208|                        toastr.error((resp && resp.message) ? resp.message : 'Erro ao listar registros');
8223|                    toastr.error('Erro ao listar registros');
8456|                        toastr.warning('Selecione pelo menos um registro para exportar.');
8467|                        toastr.warning('Nenhum registro selecionado.');
8495|                        toastr.error(message || 'Erro ao exportar CNAB', 'Erro ao exportar CNAB', {
8522|                            toastr.success('CNAB exportado com sucesso');
8544|                                    toastr.error(msg);
8552|                                            if (detail) toastr.warning(detail, title, { timeOut: 12000 });
8630|                        toastr.error('Conta bancária não identificada');
8655|                            toastr.success(resp.message || 'Convênio cadastrado com sucesso.');
8658|                            toastr.error(resp.message || 'Erro ao salvar convênio');
8662|                        toastr.error(msg);
8795|                        toastr.error((resp && resp.message) ? resp.message : 'Resposta inválida ao carregar opções');
8806|                    toastr.error(msg);
8879|                    toastr.error('Não foi possível carregar opções de fornecedor');
8899|                    toastr.error('Não foi possível carregar responsáveis de centro de custo');
8919|                    toastr.error('Não foi possível carregar bancos');
8995|                                    toastr.success('Dados do CNPJ preenchidos automaticamente!');
9004|                                    toastr.warning(response.message);
9008|                                        toastr.info('Aguarde um momento antes de consultar novamente');
9010|                                        toastr.error(response.message);
9069|                        toastr.warning('Preencha todos os campos obrigatórios do fornecedor.');
9094|                                toastr.error(resp && resp.message ? resp.message : 'Erro ao cadastrar fornecedor');
9097|                            toastr.success(resp.message || 'Fornecedor cadastrado com sucesso');
9115|                            toastr.error(msg);
9129|                        toastr.warning('Preencha todos os campos obrigatórios do centro de custo.');
9150|                                toastr.error(resp && resp.message ? resp.message : 'Erro ao cadastrar centro de custo');
9153|                            toastr.success(resp.message || 'Centro de custo cadastrado com sucesso');
9161|                            toastr.error(msg);
9178|                        toastr.warning('Preencha todos os campos obrigatórios da conta bancária.');
9204|                                toastr.error(resp && resp.message ? resp.message : 'Erro ao cadastrar conta bancária');
9207|                            toastr.success(resp.message || 'Conta bancária cadastrada com sucesso');
9215|                            toastr.error(msg);
10770|                        toastr.error('Erro ao carregar dados da tabela de lançamentos');

File: public/finances/payroll.js
Match lines: 77
2|/* global $, toastr */
29|      $input.data('cpf-change-toast', false);
32|    if (!$input.data('cpf-change-toast')) {
33|      toastr?.warning('CPF alterado. Ao salvar, o CPF será atualizado no perfil do membro.');
34|      $input.data('cpf-change-toast', true);
515|    toastr?.info('Consultando eSocial... (pode levar alguns segundos)');
520|          toastr?.error(resp?.message || 'Não foi possível consultar o eSocial.');
529|          toastr?.warning('eSocial bloqueia esta consulta entre os dias 1 e 7 do mês.');
533|        toastr?.success(presentes + ' de ' + rubricas.length + ' rubricas na base do eSocial (' + ambiente + ').');
537|        toastr?.error(xhr?.responseJSON?.message || 'Falha ao consultar o eSocial.');
546|      toastr?.error('Competência inválida para envio ao eSocial.');
590|          toastr?.error(resp?.message || 'Erro ao enviar folha para o eSocial');
601|        toastr?.success(resp.message || 'Envio da folha para o eSocial iniciado.');
615|        toastr?.error(msg);
793|        toastr?.error(resp?.message || 'Erro ao carregar folha');
805|      toastr?.error((xhr.responseJSON && xhr.responseJSON.message) ? xhr.responseJSON.message : 'Erro ao carregar folha');
851|        toastr?.error(resp?.message || 'Erro ao carregar competência');
875|      toastr?.error((xhr.responseJSON && xhr.responseJSON.message) ? xhr.responseJSON.message : 'Erro ao carregar competência');
946|      toastr?.error('Informe ano e mês para duplicar a folha.');
963|        toastr?.error(resp?.message || 'Erro ao duplicar folha');
966|      toastr?.success(resp.message || 'Folha duplicada');
975|      toastr?.error(xhr?.responseJSON?.message || 'Erro ao duplicar folha');
1082|        toastr?.error((resp?.message || 'Erro ao fechar folha') + blockers);
1085|      toastr?.success(resp.message || 'Folha fechada com sucesso');
1098|      toastr?.error((data?.message || 'Erro ao fechar folha') + blockers);
1220|        toastr?.success(resp.message || 'Configuração salva');
1223|        toastr?.error(resp?.message || 'Erro ao salvar configuração');
1226|      toastr?.error(xhr?.responseJSON?.message || 'Erro ao salvar configuração');
1388|        toastr?.error(resp?.message || 'Erro ao gerar evento eSocial');
1391|      toastr?.success(resp.message || 'Evento eSocial gerado');
1397|      toastr?.error(xhr?.responseJSON?.message || 'Erro ao gerar evento eSocial');
1514|          toastr?.error(resp?.message || 'Erro ao excluir folha');
1517|        toastr?.success(resp.message || 'Folha excluída');
1522|        toastr?.error(msg);
1546|        toastr?.error('Competência inválida para duplicar.');
1617|            toastr?.error(resp?.message || 'Erro ao voltar para Em preparação');
1620|          toastr?.success(resp.message || 'Folha voltou para Em preparação');
1623|          toastr?.error(xhr?.responseJSON?.message || 'Erro ao voltar para Em preparação');
1690|        toastr?.error('Competência inválida para duplicar.');
2010|    const showToast = !!opts.showToast;
2037|      if (showToast) toastr?.error('CPF inválido');
2042|      if (showToast) toastr?.error('CPF já cadastrado');
2047|    if (showToast) warnPayrollMemberCpfChange($input, digits);
2732|      toastr?.error('Informe um valor maior que zero.');
2881|    $('#payrollMemberCpf').data('original-cpf', '').data('cpf-change-toast', false);
2926|      .data('cpf-change-toast', false);
3317|            if (typeof toastr !== 'undefined') {
3318|              toastr.success(response.message || 'Membro cadastrado com sucesso!');
3319|            } else if ($(document).Toasts) {
3320|              $(document).Toasts('create', { icon: 'fas fa-check', class: 'bg-success', title: 'Sucesso', body: response.message || 'Membro cadastrado.', autohide: true, delay: 3000, autoremove: true });
3324|            if ($(document).Toasts) {
3325|              $(document).Toasts('create', { icon: 'fas fa-exclamation-triangle', title: response.message, class: 'bg-danger mt-2 mr-2', autohide: true, delay: 3000, autoremove: true });
3332|          if ($(document).Toasts) {
3333|            $(document).Toasts('create', { icon: 'fas fa-exclamation-triangle', title: 'Erro ao se comunicar com o servidor.', class: 'bg-danger mt-2 mr-2', autohide: true, delay: 3000, autoremove: true });
3353|        toastr?.warning('A folha não está em construção.');
3375|        .data('cpf-change-toast', false);
3454|          toastr?.error(resp?.message || 'Erro ao excluir folha');
3457|        toastr?.success(resp.message || 'Folha excluída');
3462|        toastr?.error(msg);
3489|          toastr?.warning('A folha não está em construção.');
3495|          toastr?.error('Dados do colaborador não encontrados. Recarregue a página.');
3506|          toastr?.warning('A folha não está em construção.');
3535|          toastr?.error(resp?.message || 'Erro ao excluir membro');
3538|        toastr?.success(resp.message || 'Colaborador excluído');
3542|        toastr?.error((xhr.responseJSON && xhr.responseJSON.message) ? xhr.responseJSON.message : 'Erro ao excluir membro');
3595|        // Enquanto digita: só higieniza máscara; não bloqueia nem dispara toast.
3597|        $i.data('cpf-change-toast', false);
3600|        validatePayrollMemberCpfField($(this), { showToast: true });
3611|      const cpfCheck = validatePayrollMemberCpfField($('#payrollMemberCpf'), { showToast: true });
3615|        toastr?.error('Informe um CPF válido com 11 dígitos');
3623|        toastr?.error('Selecione um vínculo');
3790|          toastr?.error(msg);
3793|        toastr?.success(resp.message || (payrollId ? 'Colaborador atualizado' : 'Colaborador salvo'));
3810|        toastr?.error(msg);
4011|            toastr?.error(resp?.message || 'Erro ao criar folha');
4014|          toastr?.success(resp.message || 'Folha criada');
4020|          toastr?.error(xhr?.responseJSON?.message || 'Erro ao criar folha');

Request #18 deepseek-flash P:87.5K C:2.27K CR:25.22K CW:0 10928ms
Reasoning
The AdminLTE Toasts plugin appends `#toastsContainerTopRight` container to `body`. And there's `watchToastContainer()` in custom.js that moves the toast container to be the last child of body. So the toast container IS a direct child of body. Therefore `body.cause-tree-node-modal-open > *` applies `pointer-events: none` to the toast container, making toasts non-interactive while the modal is open. But since `autohide` is true with 3000ms, they auto-hide. So the toast is visible but can't be clicked (close button). That's a minor issue but it's a real one. Actually the impact is limited—toast will disappear automatically. But the user cannot dismiss it manually. Also, AdminLTE toast container `fixed` positioned. Hmm, is this "medium"? The previous review flagged it as medium. But honestly, since toasts auto-hide, the impact is minimal. Let me reconsider. Actually, the bigger impact: `pointer-events: none` on `body > *` includes the modal backdrop... which is intended. It includes the whole app wrapper (`.wrapper` or `#app`), which is intended to block clicks. But the flip side is that it also blocks everything, and the re-enabling only covers `.cause-tree-floating-tools` and `.js-cause-tree-svg`. So all other UI is blocked, which is the intent. The issue is that other modals that could be opened while this one is open would be blocked. But previous review concluded other modals don't coexist. Let me focus on the most concrete, defensible issues: 1. **`ignoreNextFloatingToolsClick` flag not reset** — medium. Let me analyze precisely. On mousedown inside floating tools while modal open: `preventDefault()`, `stopPropagation()`, set flag true, hide modal. Then on click inside floating tools: preventDefault, stopPropagation, clear flag. But if the modal hide triggers a transition and the click event fires on the floating tools... Actually, the flag is set during mousedown on floating tools. Then a `click` event fires after mouseup, target inside floating tools, so flag cleared. OK. But if the user mousedowns on the floating tools and then moves the mouse out before mouseup, the `click` event fires on the common ancestor, not inside floating tools (actually click fires on the nearest common ancestor of mousedown and mouseup targets). So `isEventInsideFloatingTools` would be false, and the flag remains true. Then the next legitimate click inside floating tools will be swallowed (preventDefault + stopPropagation), so the button does nothing on first attempt. This is a real bug, though edge-case. Also the flag is never reset when the modal closes. So after closing the modal by other means, the stale flag persists and the next click on floating tools is swallowed. This is a genuine issue. Also, there's a subtle problem: the handlers are added globally and check `isCauseNodeModalOpen()`. The `mousedown` handler calls `$modal.modal('hide')` when clicking outside. But mousedown on the backdrop... wait, the backdrop has `pointer-events: none`? No — `body.cause-tree-node-modal-open .modal-backdrop` has `pointer-events: none`, so clicking backdrop won't register. But `document.addEventListener('mousedown', ...)` still catches it because the event target... if pointer-events is none, the backdrop won't be the target; the target would be whatever's behind it. Hmm, actually with pointer-events:none the element is transparent to pointer events. So the click passes through to the element below (the app wrapper which also has pointer-events: none)... eventually maybe body or html. Anyway, the document handler will fire on the click. If target is not inside modal/diagram/floating tools → hide modal. Fine. 2. **CSS `body.cause-tree-node-modal-open > *` blocking toasts** — this is real, since toast container is a direct child of body. Medium/low. I'll report as medium with reasoning. Let me double check: the toast container `#toastsContainerTopRight` is appended to body by the AdminLTE plugin (`t("body").append(e)`) and then `watchToastContainer` moves it to be last child. So yes, it's `body > *`. Confirmed. Actually wait, does `pointer-events: none` on the container prevent the toast from showing? No, it just prevents mouse interactions. The toast still displays. So the impact: user can't click to dismiss the toast, and can't select text. Low-medium. Given the "Erro ao salvar mantém modal aberto" scenario — a toast shows error but user can't dismiss it. Minor. Hmm. But there's a more serious concern: Does the whole page become non-interactive permanently if the class gets stuck? The class is removed on `hidden.bs.modal`. The modal isn't removed from DOM. So the risk is low. I'd mention as low. 3. **Global listeners accumulation** — low, since init runs once. The previous review concluded it runs once. I'll skip or mention low. 4. **Duplicate guard logic in helpers** — low style. 5. **God template CSS** — low. Now, what's the most valuable comment? Let me think about the actual functional bug that matters most. Let me reconsider issue: the `mousedown` handler at capture phase calls `event.preventDefault()` and `event.stopPropagation()` for floating tools. This prevents the button's own click handlers from firing (they use `click` events). And it hides the modal. The requirement says: "Clique no menu flutuante lateral também fecha o modal, sem executar a ação do botão". So this is intended. But there's a bug: clicking the floating tools also hides the modal via the `mousedown` outside-modal branch... wait no, floating tools branch returns. Then the click branch does preventDefault/stopPropagation. OK. But what about touch devices? `mousedown` doesn't fire on touch. So on mobile/touch, tapping the floating tools would not set `ignoreNextFloatingToolsClick`, and the click would propagate → the button action fires and the modal... The `click` handler only does something if the flag is set. So on touch, tapping floating tools executes the action AND doesn't close the modal. That deviates from the stated requirement. Hmm, actually on touch, browsers fire a synthesized `mousedown` after `touchstart`/`touchend` in many cases (compatibility mouse events). Modern browsers fire mousedown/mouseup/click for taps. So it may still work. But `event.button !== 0` — for synthesized mouse events button is 0. OK, probably fine. Let me now consider the pointer-events approach for pan/zoom: `body.cause-tree-node-modal-open .js-cause-tree-svg { pointer-events: auto; }`. But the SVG is inside `.cause-tree-canvas` inside `.wrapper` — the direct children of body have pointer-events none, so can the SVG receive events? CSS pointer-events: none on an ancestor does NOT prevent descendants from receiving events if the descendant has pointer-events: auto. Actually, per spec, if an element has pointer-events: none, its descendants can still be targets if they set pointer-events to a value other than none. Yes, that's the standard behavior. So it works. But wait: the modal backdrop is a direct child of body with pointer-events none (explicitly), and the modal `#ssmaCauseTreeNodeModal` is set to pointer-events: none with `.modal-dialog` auto. But then `body.cause-tree-node-modal-open > *` sets `#ssmaCauseTreeNodeModal` to pointer-events none too (same effect). Fine. Now `.modal-backdrop` is `body > *`, so gets pointer-events none. Good, so it doesn't block the SVG. Now, another thought: the modal itself is a direct child of body. The `.modal-dialog` re-enables pointer-events. But the modal content includes the form. Good. Now, what about `body.cause-tree-node-modal-open .js-cause-tree-svg` — is the SVG inside the tree diagram? The re-enable is at `.js-cause-tree-svg` only, plus `.cause-tree-canvas`? Actually `isEventInsideCauseTreeDiagram` checks `.js-cause-tree-svg, .cause-tree-canvas`. But the CSS only re-enables pointer-events for `.js-cause-tree-svg`, NOT `.cause-tree-canvas`. So clicks on the canvas outside the SVG would not be received... but that's for closing the modal: `isEventInsideCauseTreeDiagram` returns true → doesn't close the modal. But if `.cause-tree-canvas` has pointer-events none (inherited from body > * → the wrapper), then clicking the canvas area outside the SVG hits nothing → target would be... the canvas element still exists; pointer-events none means the event target becomes the element underneath. Hmm, if the canvas has pointer-events none, then clicking in the canvas area targets whatever is below (body/html). Then `isEventInsideCauseTreeDiagram(event)` returns false → modal hides. But the requirement says clicking on the diagram should NOT close the modal, and clicking outside should close. Since the whole canvas is the diagram, the intended area is `.js-cause-tree-svg`. Hmm, if `.cause-tree-canvas` is the full stage, then clicks near the SVG within canvas would close the modal prematurely. Actually wait — is `.cause-tree-canvas` the same as `.js-cause-tree-svg`? Let me check the template structure. Let me read the template around lines 569-640.
Tool Calls (2)
file_read
Show Details
{"file_path": "templates/ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig", "start_line": 1, "end_line": 130}
File: templates/ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig (Total lines: 642)
IS_TRUNCATED: false
LINE_RANGE: 1-130
1|<style>
2|    .cause-tree-stage {
3|        flex: 1 1 auto;
4|        min-height: 0;
5|        max-height: 100%;
6|        padding: 0;
7|        overflow: hidden;
8|        box-sizing: border-box;
9|    }
10|
11|    .cause-tree-workspace {
12|        position: relative;
13|        height: 100%;
14|        background: #fff;
15|        border: 0;
16|        border-radius: 0;
17|        overflow: hidden;
18|        box-shadow: none;
19|    }
20|
21|    .cause-tree-canvas {
22|        position: relative;
23|        height: 100%;
24|        background:
25|            linear-gradient(90deg, rgba(83, 128, 150, 0.08) 1px, transparent 1px),
26|            linear-gradient(rgba(83, 128, 150, 0.08) 1px, transparent 1px);
27|        background-size: 42px 42px;
28|        overflow: hidden;
29|    }
30|
31|    .cause-tree-empty {
32|        position: absolute;
33|        inset: 0;
34|        display: none;
35|        align-items: center;
36|        justify-content: center;
37|        text-align: center;
38|        color: #73818a;
39|        padding: 24px;
40|    }
41|
42|    .cause-tree-empty.is-visible {
43|        display: flex;
44|    }
45|
46|    .cause-tree-canvas svg {
47|        width: 100%;
48|        height: 100%;
49|        display: block;
50|    }
51|
52|    .cause-tree-floating-tools {
53|        position: absolute;
54|        top: 18px;
55|        right: 18px;
56|        z-index: 5;
57|        display: flex;
58|        flex-direction: row;
59|        align-items: flex-start;
60|        gap: 12px;
61|        max-height: calc(100% - 24px);
62|    }
63|
64|    .cause-tree-floating-tools-actions {
65|        display: flex;
66|        flex-direction: column;
67|        gap: 10px;
68|        min-height: 0;
69|        max-height: 100%;
70|        overflow-x: hidden;
71|        overflow-y: auto;
72|        overscroll-behavior: contain;
73|        scrollbar-width: thin;
74|    }
75|
76|    .cause-tree-tool-group {
77|        display: flex;
78|        flex-direction: column;
79|        gap: 8px;
80|        padding: 10px;
81|        border: 1px solid #e4e9ee;
82|        border-radius: 12px;
83|        background: rgba(255, 255, 255, 0.94);
84|        box-shadow: 0 10px 18px rgba(16, 52, 64, 0.08);
85|        backdrop-filter: blur(4px);
86|    }
87|
88|    .cause-tree-selection-indicator {
89|        min-width: 220px;
90|        max-width: 260px;
91|        padding: 12px 14px;
92|        border: 1px solid #d9e3e8;
93|        border-radius: 12px;
94|        background: linear-gradient(180deg, #ffffff 0%, #f8fbfc 100%);
95|        box-shadow: 0 10px 18px rgba(16, 52, 64, 0.06);
96|        border-left: 4px solid #186073;
97|    }
98|
99|    .cause-tree-selection-label {
100|        display: block;
101|        margin-bottom: 6px;
102|        font-size: 11px;
103|        font-weight: 700;
104|        letter-spacing: .02em;
105|        text-transform: uppercase;
106|        color: #4f6b78;
107|    }
108|
109|    .cause-tree-selection-title {
110|        display: block;
111|        font-size: 13px;
112|        font-weight: 700;
113|        line-height: 1.35;
114|        color: #1f2f37;
115|        word-break: break-word;
116|    }
117|
118|    .cause-tree-selection-meta {
119|        display: block;
120|        margin-top: 4px;
121|        font-size: 11px;
122|        color: #5f7681;
123|        word-break: break-word;
124|    }
125|
126|    .cause-tree-selection-meta p {
127|        margin: 0;
128|    }
129|
130|    .cause-tree-selection-action-count {
file_read
Show Details
{"file_path": "templates/ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig", "start_line": 565, "end_line": 642}
File: templates/ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig (Total lines: 642)
IS_TRUNCATED: false
LINE_RANGE: 565-642
565|        }
566|    }
567|</style>
568|
569|    <div class="cause-tree-stage">
570|        <div
571|            class="cause-tree-workspace js-cause-tree-screen"
572|            data-initial-tree="{{ causeTreePayload.tree|json_encode|e('html_attr') }}"
573|            data-initial-meta="{{ causeTreePayload.meta|json_encode|e('html_attr') }}"
574|            data-routes="{{ causeTreeRoutes|json_encode|e('html_attr') }}"
575|            data-category-options="{{ causeTreeCategories|json_encode|e('html_attr') }}"
576|            data-closing-options="{{ causeTreeClosureTypes|json_encode|e('html_attr') }}"
577|            data-origin-url="{{ causeTreeCurrentCard.origin_url|default('')|e('html_attr') }}"
578|        >
579|            <div class="cause-tree-canvas">
580|                <div class="cause-tree-floating-tools">
581|                    <div class="cause-tree-selection-indicator d-none">
582|                        <span class="cause-tree-selection-label js-cause-tree-active-label">Causa selecionada</span>
583|                        <span class="cause-tree-selection-title js-cause-tree-active-title">Nenhuma causa selecionada</span>
584|                        <div class="cause-tree-selection-meta js-cause-tree-active-meta">Selecione uma causa na árvore</div>
585|                    </div>
586|                    <div class="cause-tree-floating-tools-actions">
587|                        <div class="cause-tree-tool-group">
588|                            <button type="button" class="cause-tree-tool-btn js-cause-tree-toggle-selection-indicator" title="Mostrar causa selecionada">
589|                                <i class="fa-regular fa-eye"></i>
590|                            </button>
591|                            <button type="button" class="cause-tree-tool-btn js-cause-tree-edit-node" title="Editar causa" disabled>
592|                                <i class="fa-regular fa-pen-to-square"></i>
593|                            </button>
594|                            <button type="button" class="cause-tree-tool-btn js-cause-tree-add-action" title="Alternar status da ação" disabled>
595|                                <i class="fa-solid fa-list-check"></i>
596|                            </button>
597|                            <button type="button" class="cause-tree-tool-btn js-cause-tree-delete-node" title="Remover causa" disabled>
598|                                <i class="fa-regular fa-trash-can"></i>
599|                            </button>
600|                        </div>
601|                        <div class="cause-tree-tool-group">
602|                            <button type="button" class="cause-tree-tool-btn js-cause-tree-add-root" title="Adicionar causa">
603|                                <i class="fa-regular fa-plus"></i>
604|                            </button>
605|                            <button type="button" class="cause-tree-tool-btn js-cause-tree-close-node" title="Encerrar causa" disabled>
606|                                <i class="fa-regular fa-lock"></i>
607|                            </button>
608|                        </div>
609|                        <div class="cause-tree-tool-group js-cause-tree-viewport-controls">
610|                            <button type="button" class="cause-tree-tool-btn cause-tree-tool-btn--icon js-cause-tree-zoom-in" title="Aumentar zoom">
611|                                <i class="fa-regular fa-magnifying-glass-plus"></i>
612|                            </button>
613|                            <button type="button" class="cause-tree-tool-btn cause-tree-tool-btn--icon js-cause-tree-zoom-out" title="Diminuir zoom">
614|                                <i class="fa-regular fa-magnifying-glass-minus"></i>
615|                            </button>
616|                            <button type="button" class="cause-tree-tool-btn cause-tree-tool-btn--icon js-cause-tree-fit-view" title="Centralizar árvore">
617|                                <i class="fa-regular fa-expand"></i>
618|                            </button>
619|                        </div>
620|                    </div>
621|                </div>
622|                <div class="cause-tree-empty js-cause-tree-empty">
623|                    <div>
624|                        <h2 class="h4 mb-2">Nenhuma causa disponível</h2>
625|                        <p class="mb-0">Crie a primeira causa para começar a montar a árvore da ocorrência.</p>
626|                    </div>
627|                </div>
628|                <svg class="js-cause-tree-svg" aria-label="Árvore de causas"></svg>
629|            </div>
630|        </div>
631|    </div>
632|
633|    <div class="d-none" aria-hidden="true">
634|        {% include 'components/ui/_member_avatars_stack.html.twig' with {
635|            members: [
636|                { id: 1, name: 'Conexão a', initials: 'a', avatar: null }
637|            ],
638|            max_visible: 3,
639|            size: 18
640|        } %}
641|    </div>
642|
Request #19 deepseek-flash P:92.19K C:648 CR:89.73K CW:0 4161ms
Reasoning
The SVG fills the canvas (width/height 100%). The canvas is the same size as the SVG. So clicking anywhere on the canvas hits the SVG (topmost element with pointer-events auto). Good — `.js-cause-tree-svg` covers the whole canvas. So `isEventInsideCauseTreeDiagram` works via the SVG. Fine. Now, let me check the `mousedown` handler: it's attached at capture phase. When clicking on the floating tools while modal open: preventDefault on mousedown. Hmm, preventDefault on mousedown prevents focus. It also may prevent the click event? No, preventDefault on mousedown doesn't prevent click. It prevents text selection, focus, drag. OK. Now, the important thing: does `event.stopPropagation()` at document capture prevent the button's click handler from firing? stopPropagation on mousedown prevents other mousedown listeners, but not the click listener. That's why they added the click capture handler with the flag. OK. Now let's think about a subtle issue: The `mousedown` handler hides the modal when clicking outside the modal/diagram/floating tools. But it does NOT prevent default or stop propagation. So the underlying element still receives the click (e.g., a tab). But the body has pointer-events: none so the click wouldn't reach it anyway. Except elements that re-enable pointer events. Fine. Now let me weigh which comments to give. Given the review plan and previous summary, I should produce concise comments. Let me focus on the most solid ones: A. `ignoreNextFloatingToolsClick` flag never reset when the modal closes → first click on floating tools swallowed. Medium. This is a genuine, concrete bug. B. CSS `body.cause-tree-node-modal-open > *` also disables pointer-events on the global toast container (`#toastsContainerTopRight`, a direct child of body per AdminLTE + `watchToastContainer`), so toasts can't be clicked/dismissed while the node modal is open. Medium/Low. C. Duplicate guard code in the three helpers — low, style/maintainability. Let me also consider: is there an accessibility/behavioral issue with `pointer-events: none` also disabling keyboard? Not in code diff scope... it's a valid point but low. Let me also check whether there's a potential issue with `isCauseNodeModalOpen()` calling `$modal.hasClass('show') || document.body.classList.contains(...)`. Fine. Now, let me verify the claim about `watchToastContainer` in custom.js. It moves toast container to be last child of body. Yes. Let me read custom.js to confirm.
Tool Calls (1)
file_read
Show Details
{"file_path": "public/AdminLTE/js/custom.js", "start_line": 30, "end_line": 60}
File: public/AdminLTE/js/custom.js (Total lines: 60)
IS_TRUNCATED: false
LINE_RANGE: 30-60
30|        isValidDate,
31|        isValidEmail,
32|        isValidUrl,
33|    };
34|});
35|
36|// START Yann
37|// Função para observar mudanças no DOM e garantir que o container de toasts esteja sempre no final do body - isso evita problemas de sobreposição com outros elementos e conflitos principalmente entre toasts e modais
38|function watchToastContainer() {
39|    const observer = new MutationObserver(function(mutations) {
40|        mutations.forEach(function(mutation) {
41|            if (mutation.type === 'childList' && mutation.addedNodes.length > 0) {
42|                const toastContainer = $('#toastsContainerTopRight');
43|                if (toastContainer.length > 0 && !toastContainer.is('body > :last-child')) {
44|                    toastContainer.detach().appendTo('body');
45|                }
46|            }
47|        });
48|    });
49|    observer.observe(document.body, {
50|        childList: true,
51|        subtree: true
52|    });
53|    return observer;
54|}
55|
56|// play no watcher
57|const toastWatcher = watchToastContainer();
58|// Para parar, chame toastWatcher.disconnect();
59|// Mas você não vai chamar, né!? kkk
60|// END Yann
Request #20 deepseek-flash P:93.19K C:2.19K CR:92.8K CW:0 10154ms
Reasoning
Confirmed: the toast container is a direct child of body. So `body.cause-tree-node-modal-open > *` disables pointer-events on toasts. This is a real regression: while the node modal is open, error/success toasts can't be interacted with (dismiss). Given autohide, impact is limited but still. Actually wait — more importantly, toasts are often shown when the modal is open (e.g., validation errors on save, or when delete confirm happens). Actually the modal for delete is separate. Hmm. Actually there's a bigger issue. Let's reconsider: `body.cause-tree-node-modal-open .modal-backdrop { pointer-events: none }` AND `body.cause-tree-node-modal-open > *`. The `> *` already covers `.modal-backdrop`. So the explicit selector is redundant. Minor. Now let me also think about whether the `> *` rule blocks the modal's own backdrop click handler... not needed. Now, another important concern: since `body.cause-tree-node-modal-open > *` applies `pointer-events: none` to ALL body children, and the modal itself (`#ssmaCauseTreeNodeModal`) is a body child, then `#ssmaCauseTreeNodeModal .modal-dialog { pointer-events: auto }` re-enables the dialog. But `#ssmaCauseTreeNodeModal { pointer-events: none }` was already there. So fine. Hmm, but there's a subtlety: `body.cause-tree-node-modal-open .js-cause-tree-svg { pointer-events: auto; }` — the SVG is a descendant of `body > *` (the wrapper), which has pointer-events none. As discussed, a descendant with pointer-events:auto can still receive events. Correct per CSS spec. OK. Let me now decide which comments to file. I'll file 3-4 comments: 1. [medium] `ignoreNextFloatingToolsClick` never reset — flag persists after modal closes / drag out of the menu, so the first legitimate click on the floating menu is swallowed. 2. [medium] CSS `> *` disables pointer-events on the global toast container → toasts not clickable while modal open. 3. [low] duplicated guard logic in helpers. Maybe also mention the class stuck risk? The previous summary said low. Since the modal isn't removed from DOM dynamically, I'll consider skipping to keep focus. But maybe mention briefly? I'll include it as low? Hmm, the guidance says avoid noise. I think the most valuable are 1 and 2. I'll add #3 as low (maintainability). Actually, let me reconsider whether there's something about hardcoded selector `'#ssmaCauseTreeNodeModal .modal-dialog'` in JS while SELECTORS.modal exists. That's a hardcoded ID duplicating the constant. Minor maintainability. Could combine with #3. Let me craft the comments in Portuguese, following the format. For comment 1, existing_code must be lines from the diff. Let me pick: ``` + event.preventDefault(); + event.stopPropagation(); + ignoreNextFloatingToolsClick = false; ``` That's in the click handler. Or better place the comment at the mousedown where the flag is set: ``` + ignoreNextFloatingToolsClick = true; ``` Hmm. The issue is about the flag not being reset. I'll anchor to the line where it's set to true, or where the click handler clears it. Let me anchor to: ``` + if (!ignoreNextFloatingToolsClick || !isEventInsideFloatingTools(event)) { + return; + } ``` That's the check. Actually the suggestion is to reset the flag on modal close. I'll anchor to the declaration line: ``` + let ignoreNextFloatingToolsClick = false; ``` That's a clean anchor. For comment 2, anchor to CSS: ``` + body.cause-tree-node-modal-open > *, + body.cause-tree-node-modal-open .modal-backdrop { + pointer-events: none; + } ``` For comment 3, anchor to duplicate guard: ``` + const target = event.target; + if (!(target instanceof Element)) { + return false; + } + if (target.closest('.cause-tree-floating-tools')) { + return false; + } ``` Hmm, better anchor to `isEventInsideCauseNodeModal`'s guard. Let me use: ``` + function isEventInsideCauseNodeModal(event) { + const target = event.target; + if (!(target instanceof Element)) { + return false; + } + return Boolean(target.closest('#ssmaCauseTreeNodeModal .modal-dialog')); + } ``` That block appears once (the added lines). Good. Now, should I include the "god template CSS" comment? The template is 642 lines with a big <style> block. The rule prioritizes flagging god templates. However this PR adds ~80 lines of CSS to it, which is somewhat in the direction of the rule "any increase should be flagged". I could add a low-severity comment. But the file is a Twig template with a `<style>` block plus a lot of markup; the pre-existing style block was already ~480 lines. Adding more CSS... The rule says such mixing should be flagged. I'll add it as low priority, anchored to a new CSS block. Hmm, but I should avoid too many comments. Let me include it briefly since the checklist emphasizes it as the highest weight for Twig templates. Actually, the rule: "God template — maior peso. Se este template já é um 'god template' (centenas de linhas misturando markup, estado e chamadas AJAX), qualquer PR que aumente ainda mais essa mistura deve ser sinalizada antes de qualquer outro achado." The CSS isn't AJAX/state mixing, but it's a big inline style. It's 642 lines mostly CSS. I'll add a low comment suggesting moving to a CSS file. Actually, the plan item #6 says exactly this. I'll include it as low. Hmm, but is it too noisy? I think 4 comments is reasonable. Let me reconsider severity for comment 1: it's medium (real functional regression, exactly against the PR's stated behavior). Yes. Let me write them. Now, one more check: is the flag issue real given `$modal.modal('hide')`? When the user mousedowns on floating tools, the handler calls preventDefault + stopPropagation, sets flag, and hides the modal. Then mouseup on the same button fires `click`. But wait — because `mousedown` had `preventDefault()`, does the click still fire? Yes, click fires regardless of mousedown preventDefault. So the click handler runs, target inside floating tools, clears flag, prevents action. Good. Now the scenario where flag remains true: mousedown on the floating tools → mouse released outside (drag). The click event fires on the nearest common ancestor which may not be inside floating tools (e.g., the canvas). Then `isEventInsideFloatingTools(event)` false → return without clearing flag. Flag stays true forever. Next click on a floating tool: the click capture handler sees flag true and target inside floating tools → preventDefault + stopPropagation → the button's real handler (registered later in bubbling) is stopped? stopPropagation at document capture stops the event from reaching the target! Yes — capture phase at document is the first phase; stopPropagation prevents further propagation including target/bubbling. So the button's click listener never runs. The first click does nothing. The flag then becomes false. So second click works. Real bug. Also after closing modal with Esc/Cancel while flag true, the next click on floating tools is swallowed. Real. Good, I'll report. Now also: when the modal is closed and later reopened, the flag might still be true from a previous session. Report. Let me write the comments now. For comment 2, I need to phrase impact: while the cause modal is open, the global toast container (`#toastsContainerTopRight`, direct child of body per AdminLTE + watchToastContainer) receives pointer-events:none, so toasts shown during that period can't be clicked/dismissed. Suggest scoping the rule to the app wrapper instead of `body > *`, or explicitly re-enabling pointer-events on the toast container. Let me finalize. Actually, let me double check whether the toast container has an ID and is created lazily. Yes: `_prepareContainer` creates `#toastsContainerTopRight` and appends to body. And watchToastContainer keeps it as last child of body. So it's `body > *`. Confirmed. One more consideration for comment 2: Is it possible that the toast container doesn't exist until a toast is shown, and once a toast is created while modal open, the container gets appended and gets pointer-events none. Yes. Also, mutation of body could trigger... irrelevant. Now write comments. Also should I mention the stuck class risk in the same comment as #2? They're different files/lines. The stuck-class risk is JS (body class). Let me consider adding it as a separate low comment anchored to the hidden.bs.modal handler. Hmm. I'll skip it to reduce noise? The previous review rated low. I think I'll include the toast one (twig) and the flag one (js) plus the duplicate helper (js). That's 3-4. Actually, the stuck-class risk (page frozen) is potentially high impact but low probability. Since the modal element is never removed and hidden.bs.modal reliably fires, I'll skip. Let me write final comments.
Tool Calls (2)
code_search
Show Details
{"search_text": "cause-tree-node-modal-open"}
File: public/js/ssma/tree_view.js
Match lines: 3
582|      document.body.classList.add('cause-tree-node-modal-open');
585|      document.body.classList.remove('cause-tree-node-modal-open');
589|      return $modal.hasClass('show') || document.body.classList.contains('cause-tree-node-modal-open');

File: templates/ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig
Match lines: 7
495|    body.cause-tree-node-modal-open > *,
496|    body.cause-tree-node-modal-open .modal-backdrop {
500|    body.cause-tree-node-modal-open .cause-tree-floating-tools {
504|    body.cause-tree-node-modal-open .js-cause-tree-svg {
509|    body.cause-tree-node-modal-open .js-cause-tree-svg:active {
513|    body.cause-tree-node-modal-open .cause-tree-node,
514|    body.cause-tree-node-modal-open .cause-tree-node * {

code_search
Show Details
{"search_text": "initCauseTreeScreen|DOMContentLoaded", "file_patterns": ["public/js/ssma/tree_view.js"]}
No matches found
Request #21 deepseek-flash P:95.61K C:901 CR:95.36K CW:0 4785ms
Reasoning
Confirmed the class is only added/removed in the two handlers. Now let me produce the comments. Let me finalize the 3-4 comments. Let me write them in Portuguese.
Análise concluída. Segue o feedback.
Tool Calls (1)
code_comment
Show Details
{"comments": [{"content": "A flag que “engole” o próximo clique do menu lateral nunca é limpa se o clique não cair dentro do menu. Se o usuário pressionar o mouse sobre as ferramentas, arrastar e soltar fora (ou fechar o modal por Esc/Cancelar/X antes de soltar), `ignoreNextFloatingToolsClick` fica presa em `true`; na próxima vez que a pessoa clicar em qualquer botão do menu (zoom, adicionar causa etc.), o handler de `click` faz `stopPropagation` e a ação não executa — o primeiro clique “não responde”. Como isso contraria exatamente o comportamento esperado da PR (“clicar no menu fecha o modal e não dispara a ação”, mas depois o menu deve voltar a funcionar normalmente), convém resetar a flag no fechamento do modal e/ou quando o mouseup ocorrer fora do menu.", "existing_code": "    let ignoreNextFloatingToolsClick = false;", "category": "bug", "severity": "medium", "path": "public/js/ssma/tree_view.js"}, {"content": "A regra desabilita os eventos de ponteiro de TODOS os filhos diretos do `<body>`. O container global de toasts (`#toastsContainerTopRight`) é justamente um filho direto do body — o AdminLTE o cria ali e o `watchToastContainer()` (AdminLTE/js/custom.js) o mantém como último filho do body. Resultado: com o modal de causa aberto, qualquer toast disparado por `showToast` (ex.: erro ao salvar) aparece, mas fica sem interação — não dá para clicar para dispensá-lo. Sugestão: restringir a regra ao wrapper da aplicação em vez de `body > *`, ou reabilitar explicitamente `pointer-events: auto` no container de toasts.", "existing_code": "    body.cause-tree-node-modal-open > *,\n    body.cause-tree-node-modal-open .modal-backdrop {\n        pointer-events: none;\n    }", "category": "bug", "severity": "medium", "path": "templates/ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig", "suggestion_code": "    body.cause-tree-node-modal-open .wrapper,\n    body.cause-tree-node-modal-open .modal-backdrop {\n        pointer-events: none;\n    }\n\n    body.cause-tree-node-modal-open #toastsContainerTopRight {\n        pointer-events: auto;\n    }"}, {"content": "Os três helpers (`isEventInsideCauseTreeDiagram`, `isEventInsideCauseNodeModal`, `isEventInsideFloatingTools`) repetem o mesmo bloco de guarda (`const target = event.target; if (!(target instanceof Element)) return false;`). Vale extrair para um utilitário único (ex.: `closestFromEvent(event, selector)`) para evitar divergência futura e reduzir código repetido. Aproveitando, o seletor `'#ssmaCauseTreeNodeModal .modal-dialog'` está hardcoded no JS mesmo existindo a constante `SELECTORS.modal` — o ideal é derivá-lo dela.", "existing_code": "    function isEventInsideCauseNodeModal(event) {\n      const target = event.target;\n      if (!(target instanceof Element)) {\n        return false;\n      }\n      return Boolean(target.closest('#ssmaCauseTreeNodeModal .modal-dialog'));\n    }", "category": "maintainability", "severity": "low", "path": "public/js/ssma/tree_view.js"}]}
(async)
Request #22 deepseek-flash P:96.53K C:601 CR:96.38K CW:0 4048ms
Reasoning
Let me also add the god-template CSS comment? The template is 642 lines, mostly a `<style>` block. The added ~80 lines increase it. The rule says flag it. I'll add a low comment. Hmm, I already gave a twig comment. The rule emphasizes god template as highest weight for Twig. Let me add a brief low comment about moving the inline CSS to a CSS file. Actually, let me reconsider — the file is mostly CSS + markup + a Twig include. It's not "AJAX/state mixing", so the god template rule partially applies. Still, the plan item #6 suggested this. I'll add it as low to be thorough. Actually, I want to keep the review focused. The plan mentions it as issue 6 (low). I'll include it since each file should get its pass and it's a legitimate maintainability note. Let me anchor to a new media query block added. Actually the comment should be about the added CSS increasing the inline style block. Anchor: ``` + @media (max-height: 700px) { ``` Hmm. Let me use the block: ``` + @media (max-width: 991.98px), (max-height: 900px) { + .cause-tree-stage { + padding: 0; + } ``` I'll anchor to that. Hmm — but is this noise? The instruction: "Achado de estilo puro ... sem efeito real deve ser curto e de prioridade baixa". Fine, low. I'll add it. Actually, I've already made 3 comments covering the main issues. Adding the CSS-location note is reasonable given the checklist explicitly wants it. Let me add it briefly.
Tool Calls (1)
code_comment
Show Details
{"comments": [{"category": "maintainability", "content": "O bloco `<style>` embutido no template já passa de 480 linhas e agora cresce mais ~80 linhas de media queries/regras de responsividade. Isso dificulta cache, reuso e revisão visual, e mistura responsabilidade de apresentação com o markup da tela. Não bloqueia a PR, mas vale mover esse CSS para um arquivo do módulo (ex.: `public/css/ssma/...`) em vez de continuar empilhando estilos dentro do `.twig`.", "existing_code": "    @media (max-width: 991.98px), (max-height: 900px) {\n        .cause-tree-stage {\n            padding: 0;\n        }", "path": "templates/ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig", "severity": "low"}]}
(async)
Request #23 deepseek-flash P:97.15K C:405 CR:96.9K CW:0 3078ms
Reasoning
I've done a pass on both files. Let me confirm I have given every file its own pass: - public/js/ssma/tree_view.js: 2 comments (flag, duplicate helpers) - templates/ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig: 2 comments (pointer-events/toasts, inline CSS) Done. Call task_done.
Revisei os dois arquivos do grupo. Resumo do feedback: **`public/js/ssma/tree_view.js`** - **Médio:** a flag `ignoreNextFloatingToolsClick` não é resetada quando o modal fecha nem quando o `mouseup` cai fora do menu flutuante — o primeiro clique seguinte no menu é engolido (botão "não responde"). - **Baixo:** guarda duplicada nos três helpers `isEventInside*` e seletor `#ssmaCauseTreeNodeModal .modal-dialog` hardcoded em vez de reutilizar `SELECTORS.modal`. **`templates/ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig`** - **Médio:** `body.cause-tree-node-modal-open > *` aplica `pointer-events: none` ao container global de toasts (`#toastsContainerTopRight`, filho direto do body), então toasts ficam sem interação enquanto o modal está aberto. - **Baixo:** o `<style>` embutido continua crescendo dentro do template; sugerido extrair para arquivo CSS do módulo. Não encontrei problemas de segurança, contrato com backend ou integridade de dados (não há alteração de backend/migrations nesta PR).
Tool Calls (1)
task_done
Show Details
{"state": "DONE"}
Request #24 deepseek-flash P:9.47K C:856 CR:8.7K CW:0 4363ms
Reasoning
Let me review the code changes. Let me gather context about the JS file and template. Key things to check: 1. The mousedown handler catching clicks - it hides modal when clicking outside. Also `keyboard: true` modal option - Esc closes. 2. The `click` handler on nodes - `if (isCauseNodeModalOpen()) return;` — but the mousedown handler with capture already prevents propagation for floating tools; for the diagram, it doesn't stop propagation, so click inside diagram... wait, nodes have pointer-events: none when modal open (CSS). Actually `body.cause-tree-node-modal-open .cause-tree-node` pointer-events none. So node clicks aren't triggered anyway. The guard is defensive. 3. Potential issue: the modal is initialized with `$modal.modal({...})` with `show: false`. Need to check the modal element id #ssmaCauseTreeNodeModal and whether it's a Bootstrap modal. Let me read the file. 4. A significant potential issue: `document.addEventListener('mousedown', ...)` capture — clicking inside the modal dialog works. Clicking outside modal but inside diagram: returns without hiding; but mousedown inside the diagram is captured; however the drag on the SVG will still happen since pointer-events auto. Good. But there's a subtlety: clicking outside the diagram (e.g., header) hides the modal. But the mousedown event is captured and calls $modal.modal('hide'). However, propagation isn't stopped, so the underlying element still receives the click event, potentially executing its action (e.g., navigating tabs). The CSS `body.cause-tree-node-modal-open > *` sets pointer-events none, which blocks all children — but the confirmed finding says that blocks toast containers too. Since pointer-events none prevents the click from reaching those elements, that's handled. Hmm, but the elements with pointer-events: none won't get events. So OK. Wait — but the confirmed finding #3 already covers that. 5. Another potential issue: The mousedown handler at capture on document uses `event.button !== 0` check. Fine. 6. Potential leak: `ignoreNextFloatingToolsClick` set true on mousedown in floating tools, then the click handler resets it. Confirmed finding #1 covers stuck flag. 7. The `isCauseNodeModalOpen` checks `$modal.hasClass('show')` — fine. 8. Now check whether the modal id is `#ssmaCauseTreeNodeModal` and `.modal-dialog`. Let me read the template file to verify the modal markup exists and the id matches. Let me read files. Also check the CSS: `body.cause-tree-node-modal-open .js-cause-tree-svg { pointer-events: auto; cursor: grab; }` — but `.js-cause-tree-svg` is inside `.cause-tree-canvas`/stage which is inside a child of body; that child has pointer-events none, but the descendant rule re-enables. However, if an ancestor has pointer-events: none, descendants can re-enable with pointer-events: auto. Yes that works. But wait — the diagram container may include the modal? No. Let me read the files to confirm structure and check for issues like the `mousedown` handler being added once vs multiple times (if `$modal.modal()` init code is inside a function called multiple times, duplicate event listeners would stack). Let's read the JS region. Let me read the JS file around lines 540-700.
Tool Calls (2)
file_read
Show Details
{"file_path": "public/js/ssma/tree_view.js", "start_line": 470, "end_line": 720}
File: public/js/ssma/tree_view.js (Total lines: 1751)
IS_TRUNCATED: false
LINE_RANGE: 470-720
470|      };
471|    });
472|  
473|    staticDefinitions.forEach((option) => {
474|      if (!map[option.value]) {
475|        map[option.value] = option;
476|      }
477|    });
478|  
479|    return map;
480|  }
481|
482|  function buildClosingDefinitions(rawOptions = []) {
483|    const map = { ...CLOSING_TYPE_DEFINITIONS };
484|
485|    if (!Array.isArray(rawOptions)) {
486|      return map;
487|    }
488|
489|    rawOptions.forEach((option) => {
490|      const value = String(option.value || '').trim().toLowerCase();
491|      if (!value || !map[value]) return;
492|
493|      map[value] = {
494|        ...map[value],
495|        label: String(option.label || map[value].label)
496|      };
497|    });
498|
499|    return map;
500|  }
501|
502|  function isNodeClosed(node) {
503|    return Boolean(node && String(node.closureType || '').trim());
504|  }
505|
506|  function isLeafNode(node) {
507|    return Boolean(node) && (!Array.isArray(node.children) || node.children.length === 0);
508|  }
509|
510|  function nodeHasClosedDescendant(node) {
511|    if (!node || !Array.isArray(node.children) || !node.children.length) {
512|      return false;
513|    }
514|
515|    return node.children.some((child) => isNodeClosed(child) || nodeHasClosedDescendant(child));
516|  }
517|
518|  function initCauseTreeScreen(screen) {
519|    if (!window.d3) {
520|      console.error('D3 não foi carregado.');
521|      return;
522|    }
523|  
524|    const stage = screen.closest('.cause-tree-stage');
525|    const causeTreePage = screen.closest('.cause-tree-page');
526|    const pageHeader = causeTreePage ? causeTreePage.querySelector('.modern-header') : null;
527|  
528|    const state = {
529|      tree: parseJsonAttr(screen, 'data-initial-tree', {}),
530|      meta: parseJsonAttr(screen, 'data-initial-meta', {}),
531|      selectedNodeId: null,
532|      zoomedNodeId: null,
533|      modalMode: 'create',
534|      svg: null,
535|      viewport: null,
536|      zoom: null
537|    };
538|    const ROOT_GROUP_OFFSET = { x: 170, y: 110 };
539|  
540|    const routes = parseJsonAttr(screen, 'data-routes', {});
541|    const originUrl = String(screen.getAttribute('data-origin-url') || '').trim();
542|    const categoryDefinitions = buildCategoryDefinitions(parseJsonAttr(screen, 'data-category-options', []));
543|    const closingDefinitions = buildClosingDefinitions(parseJsonAttr(screen, 'data-closing-options', []));
544|    const api = createApi(routes);
545|    const $screen = $(screen);
546|    const $modal = $(SELECTORS.modal);
547|    const $closeModal = $(SELECTORS.closeModal);
548|    const $removeClosureConfirmModal = $(SELECTORS.removeClosureConfirmModal);
549|    const $deactivateActionModal = $(SELECTORS.deactivateActionModal);
550|    const $deleteModal = $(SELECTORS.deleteModal);
551|    const $form = $modal.find(SELECTORS.form);
552|    const $closeForm = $closeModal.find(SELECTORS.closeForm);
553|    const $submitButton = $modal.find('.js-cause-tree-submit');
554|    const $closeSubmitButton = $closeModal.find('.js-cause-tree-close-submit');
555|    const $closeRemoveButton = $closeModal.find(SELECTORS.closeRemoveButton);
556|    const $closeRemoveConfirmButton = $removeClosureConfirmModal.find(SELECTORS.closeRemoveConfirm);
557|    const $deactivateActionConfirmButton = $deactivateActionModal.find(SELECTORS.deactivateActionConfirm);
558|  
559|    const elements = {
560|      empty: $screen.find(SELECTORS.empty),
561|      selectionIndicator: $screen.find(SELECTORS.selectionIndicator),
562|      toggleSelectionIndicator: $screen.find(SELECTORS.toggleSelectionIndicator),
563|      addRoot: $screen.find(SELECTORS.addRoot),
564|      addAction: $screen.find(SELECTORS.addAction),
565|      closeNode: $screen.find(SELECTORS.closeNode),
566|      editNode: $screen.find(SELECTORS.editNode),
567|      deleteNode: $screen.find(SELECTORS.deleteNode),
568|      zoomIn: $screen.find(SELECTORS.zoomIn),
569|      zoomOut: $screen.find(SELECTORS.zoomOut),
570|      fitView: $screen.find(SELECTORS.fitView)
571|    };
572|    let isSelectionIndicatorVisible = false;
573|    let shouldRestoreCloseModalAfterRemoveConfirm = false;
574|
575|    $modal.modal({
576|      backdrop: 'static',
577|      keyboard: true,
578|      show: false
579|    });
580|
581|    $modal.on('show.bs.modal', () => {
582|      document.body.classList.add('cause-tree-node-modal-open');
583|    });
584|    $modal.on('hidden.bs.modal', () => {
585|      document.body.classList.remove('cause-tree-node-modal-open');
586|    });
587|
588|    function isCauseNodeModalOpen() {
589|      return $modal.hasClass('show') || document.body.classList.contains('cause-tree-node-modal-open');
590|    }
591|
592|    function isEventInsideCauseTreeDiagram(event) {
593|      const target = event.target;
594|      if (!(target instanceof Element)) {
595|        return false;
596|      }
597|      if (target.closest('.cause-tree-floating-tools')) {
598|        return false;
599|      }
600|      return Boolean(target.closest('.js-cause-tree-svg, .cause-tree-canvas'));
601|    }
602|
603|    function isEventInsideCauseNodeModal(event) {
604|      const target = event.target;
605|      if (!(target instanceof Element)) {
606|        return false;
607|      }
608|      return Boolean(target.closest('#ssmaCauseTreeNodeModal .modal-dialog'));
609|    }
610|
611|    function isEventInsideFloatingTools(event) {
612|      const target = event.target;
613|      if (!(target instanceof Element)) {
614|        return false;
615|      }
616|      return Boolean(target.closest('.cause-tree-floating-tools'));
617|    }
618|
619|    let ignoreNextFloatingToolsClick = false;
620|
621|    document.addEventListener('mousedown', (event) => {
622|      if (!isCauseNodeModalOpen() || event.button !== 0) {
623|        return;
624|      }
625|      if (isEventInsideCauseNodeModal(event)) {
626|        return;
627|      }
628|      if (isEventInsideFloatingTools(event)) {
629|        event.preventDefault();
630|        event.stopPropagation();
631|        ignoreNextFloatingToolsClick = true;
632|        $modal.modal('hide');
633|        return;
634|      }
635|      if (isEventInsideCauseTreeDiagram(event)) {
636|        return;
637|      }
638|      $modal.modal('hide');
639|    }, true);
640|
641|    document.addEventListener('click', (event) => {
642|      if (!ignoreNextFloatingToolsClick || !isEventInsideFloatingTools(event)) {
643|        return;
644|      }
645|      event.preventDefault();
646|      event.stopPropagation();
647|      ignoreNextFloatingToolsClick = false;
648|    }, true);
649|  
650|    function ensureCategoryOption(value) {
651|      const normalizedValue = String(value || '').trim();
652|      const $categorySelect = $modal.find(SELECTORS.categoryInput);
653|  
654|      $categorySelect.find('[data-dynamic-category="true"]').remove();
655|      if (!normalizedValue) {
656|        return;
657|      }
658|  
659|      const hasExistingOption = $categorySelect.find('option').filter((_, option) => option.value === normalizedValue).length > 0;
660|      if (!hasExistingOption) {
661|        const categoryDefinition = categoryDefinitions[normalizedValue];
662|        const optionLabel = categoryDefinition ? categoryDefinition.label : normalizedValue;
663|        $categorySelect.append(`<option value="${normalizedValue}" data-dynamic-category="true">${optionLabel}</option>`);
664|      }
665|    }
666|  
667|    function getCategoryDefinition(value) {
668|      const normalizedValue = normalizeCategoryKey(value);
669|      return categoryDefinitions[normalizedValue] || {
670|        value: normalizedValue,
671|        label: normalizedValue || 'Sem categoria',
672|        color: DEFAULT_CATEGORY_COLOR,
673|        iconClass: 'fas fa-question'
674|      };
675|    }
676|
677|    function getClosingDefinition(value) {
678|      const normalizedValue = String(value || '').trim().toLowerCase();
679|      return closingDefinitions[normalizedValue] || null;
680|    }
681|
682|    function buildClosureTooltip(node) {
683|      const closingDefinition = getClosingDefinition(node.closureType);
684|      if (!closingDefinition) {
685|        return '';
686|      }
687|
688|      const items = [`<li><strong>Tipo de Fechamento:</strong> ${closingDefinition.label}</li>`];
689|
690|      if (closingDefinition.value === 'closed') {
691|        return `<ul class="cause-tree-tooltip-list"><li><strong>Tipo de Fechamento:</strong> Encerrado</li></ul>`;
692|      }
693|
694|      if (closingDefinition.value === 'connected' && node.connectedNodeId) {
695|        const connectedNode = flattenTree(state.tree).find((item) => Number(item.id) === Number(node.connectedNodeId));
696|        if (connectedNode) {
697|          items.push(`<li><strong>Conectada com:</strong> ${connectedNode.title}</li>`);
698|          return `<ul class="cause-tree-tooltip-list">${items.join('')}</ul>`;
699|        }
700|
701|        items.push('<li><strong>Conectada com:</strong> Outra causa</li>');
702|        return `<ul class="cause-tree-tooltip-list">${items.join('')}</ul>`;
703|      }
704|
705|      if (closingDefinition.value === 'provisional') {
706|        return `<ul class="cause-tree-tooltip-list">${items.join('')}</ul>`;
707|      }
708|      return `<ul class="cause-tree-tooltip-list">${items.join('')}</ul>`;
709|    }
710|
711|    function populateConnectedNodeOptions(selectedNode, selectedConnectedNodeId = '') {
712|      const $connectedSelect = $closeModal.find(SELECTORS.closeConnectedNodeInput);
713|      const options = flattenTree(state.tree)
714|        .filter((node) => node.parentId !== null && Number(node.id) !== Number(selectedNode.id))
715|        .sort((left, right) => String(left.title || '').localeCompare(String(right.title || ''), 'pt-BR'));
716|
717|      $connectedSelect.empty().append('<option value="">Selecione uma causa</option>');
718|      options.forEach((node) => {
719|        const categoryLabel = getCategoryDefinition(node.category).label;
720|        $connectedSelect.append(`<option value="${node.id}">${node.title} (${categoryLabel})</option>`);
code_search
Show Details
{"search_text": "ssmaCauseTreeNodeModal"}
File: public/js/ssma/tree_view.js
Match lines: 2
15|    modal: '#ssmaCauseTreeNodeModal',
608|      return Boolean(target.closest('#ssmaCauseTreeNodeModal .modal-dialog'));

File: templates/ssma/cause_tree/tree_view/partials/_modal_node.html.twig
Match lines: 1
2|    modal_id: 'ssmaCauseTreeNodeModal',

File: templates/ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig
Match lines: 2
487|    #ssmaCauseTreeNodeModal {
491|    #ssmaCauseTreeNodeModal .modal-dialog {

Request #25 deepseek-flash P:13.21K C:194 CR:10.24K CW:0 1492ms
Reasoning
Let me check the modal partial to see the structure — whether the modal-dialog contains the form, and whether the modal partial is the "modal" component. Also let's check the template file around the style block. Let's read `_modal_node.html.twig`.
Tool Calls (2)
file_read
Show Details
{"file_path": "templates/ssma/cause_tree/tree_view/partials/_modal_node.html.twig"}
File: templates/ssma/cause_tree/tree_view/partials/_modal_node.html.twig (Total lines: 43)
IS_TRUNCATED: false
LINE_RANGE: 1-43
1|{% embed 'components/_modal_bottom_sheet.html.twig' with {
2|    modal_id: 'ssmaCauseTreeNodeModal',
3|    modal_size: 'sm',
4|    modal_fixed_width: '560px'
5|} %}
6|    {% block modal_title %}
7|        <span class="js-cause-tree-modal-title">Adicionar causa</span>
8|    {% endblock %}
9|
10|    {% block modal_body %}
11|        <form id="ssmaCauseTreeNodeForm" class="js-cause-tree-form">
12|            <input type="hidden" name="nodeId" class="js-cause-tree-node-id">
13|            <input type="hidden" name="parentId" class="js-cause-tree-parent-id">
14|            <input type="hidden" name="actionActive" class="js-cause-tree-node-action-active-input" value="0">
15|
16|            <div class="cause-tree-modal-field">
17|                <label for="ssmaCauseTreeNodeTitle" class="d-block mb-2">Título</label>
18|                <input type="text" class="form-control js-cause-tree-node-title-input" id="ssmaCauseTreeNodeTitle" name="title" maxlength="120" placeholder="Digite o título da causa" required>
19|            </div>
20|
21|            <div class="cause-tree-modal-field mt-3">
22|                <label for="ssmaCauseTreeNodeCategory" class="d-block mb-2">Categoria</label>
23|                <select class="custom-select js-cause-tree-node-category-input" id="ssmaCauseTreeNodeCategory" name="category" required>
24|                    <option value="">Selecione</option>
25|                    {% for category in causeTreeCategories %}
26|                        <option value="{{ category.value }}">{{ category.label }}</option>
27|                    {% endfor %}
28|                </select>
29|            </div>
30|
31|            <div class="cause-tree-modal-field mt-3">
32|                <label for="ssmaCauseTreeNodeDescription" class="d-block mb-2">Descrição</label>
33|                <textarea class="form-control js-cause-tree-node-description-input" id="ssmaCauseTreeNodeDescription" name="description" rows="4" maxlength="255" placeholder="Descreva a hipótese, evidência ou contexto desta causa"></textarea>
34|            </div>
35|        </form>
36|    {% endblock %}
37|
38|    {% block modal_footer %}
39|        <button type="button" class="mhs-btn-cancel" data-dismiss="modal">Cancelar</button>
40|        <button type="submit" form="ssmaCauseTreeNodeForm" class="mhs-btn-primary js-cause-tree-submit">Salvar causa</button>
41|    {% endblock %}
42|{% endembed %}
43|
file_read
Show Details
{"file_path": "templates/ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig", "start_line": 1, "end_line": 140}
File: templates/ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig (Total lines: 642)
IS_TRUNCATED: false
LINE_RANGE: 1-140
1|<style>
2|    .cause-tree-stage {
3|        flex: 1 1 auto;
4|        min-height: 0;
5|        max-height: 100%;
6|        padding: 0;
7|        overflow: hidden;
8|        box-sizing: border-box;
9|    }
10|
11|    .cause-tree-workspace {
12|        position: relative;
13|        height: 100%;
14|        background: #fff;
15|        border: 0;
16|        border-radius: 0;
17|        overflow: hidden;
18|        box-shadow: none;
19|    }
20|
21|    .cause-tree-canvas {
22|        position: relative;
23|        height: 100%;
24|        background:
25|            linear-gradient(90deg, rgba(83, 128, 150, 0.08) 1px, transparent 1px),
26|            linear-gradient(rgba(83, 128, 150, 0.08) 1px, transparent 1px);
27|        background-size: 42px 42px;
28|        overflow: hidden;
29|    }
30|
31|    .cause-tree-empty {
32|        position: absolute;
33|        inset: 0;
34|        display: none;
35|        align-items: center;
36|        justify-content: center;
37|        text-align: center;
38|        color: #73818a;
39|        padding: 24px;
40|    }
41|
42|    .cause-tree-empty.is-visible {
43|        display: flex;
44|    }
45|
46|    .cause-tree-canvas svg {
47|        width: 100%;
48|        height: 100%;
49|        display: block;
50|    }
51|
52|    .cause-tree-floating-tools {
53|        position: absolute;
54|        top: 18px;
55|        right: 18px;
56|        z-index: 5;
57|        display: flex;
58|        flex-direction: row;
59|        align-items: flex-start;
60|        gap: 12px;
61|        max-height: calc(100% - 24px);
62|    }
63|
64|    .cause-tree-floating-tools-actions {
65|        display: flex;
66|        flex-direction: column;
67|        gap: 10px;
68|        min-height: 0;
69|        max-height: 100%;
70|        overflow-x: hidden;
71|        overflow-y: auto;
72|        overscroll-behavior: contain;
73|        scrollbar-width: thin;
74|    }
75|
76|    .cause-tree-tool-group {
77|        display: flex;
78|        flex-direction: column;
79|        gap: 8px;
80|        padding: 10px;
81|        border: 1px solid #e4e9ee;
82|        border-radius: 12px;
83|        background: rgba(255, 255, 255, 0.94);
84|        box-shadow: 0 10px 18px rgba(16, 52, 64, 0.08);
85|        backdrop-filter: blur(4px);
86|    }
87|
88|    .cause-tree-selection-indicator {
89|        min-width: 220px;
90|        max-width: 260px;
91|        padding: 12px 14px;
92|        border: 1px solid #d9e3e8;
93|        border-radius: 12px;
94|        background: linear-gradient(180deg, #ffffff 0%, #f8fbfc 100%);
95|        box-shadow: 0 10px 18px rgba(16, 52, 64, 0.06);
96|        border-left: 4px solid #186073;
97|    }
98|
99|    .cause-tree-selection-label {
100|        display: block;
101|        margin-bottom: 6px;
102|        font-size: 11px;
103|        font-weight: 700;
104|        letter-spacing: .02em;
105|        text-transform: uppercase;
106|        color: #4f6b78;
107|    }
108|
109|    .cause-tree-selection-title {
110|        display: block;
111|        font-size: 13px;
112|        font-weight: 700;
113|        line-height: 1.35;
114|        color: #1f2f37;
115|        word-break: break-word;
116|    }
117|
118|    .cause-tree-selection-meta {
119|        display: block;
120|        margin-top: 4px;
121|        font-size: 11px;
122|        color: #5f7681;
123|        word-break: break-word;
124|    }
125|
126|    .cause-tree-selection-meta p {
127|        margin: 0;
128|    }
129|
130|    .cause-tree-selection-action-count {
131|        display: inline-block;
132|        margin-top: 6px !important;
133|        padding: 2px 8px;
134|        border-radius: 999px;
135|        background: #e8f4f2;
136|        color: #186073;
137|        font-size: 11px;
138|        font-weight: 700;
139|        line-height: 1.4;
140|    }
Request #26 deepseek-flash P:15.38K C:1.44K CR:13.31K CW:0 6905ms
Reasoning
The modal is a bottom sheet component (`_modal_bottom_sheet.html.twig`). With `backdrop: 'static'`, clicking the backdrop won't close the modal normally. Since the new JS handles outside clicks to close, that's consistent with requirement "Clique fora do diagrama fecha o modal." Now, an important potential issue: `$modal.modal({backdrop:'static', keyboard:true, show:false})`. Let me check how the modal bottom sheet component works — whether it uses Bootstrap modal. The `_modal_bottom_sheet.html.twig` is a shared component. The `data-dismiss="modal"` on Cancel button confirms Bootstrap. Now check whether there's existing code elsewhere that initializes the modal (e.g., an existing `$modal.modal(...)` call or `.modal('show')`). Let me search in tree_view.js for `modal(` usage. Actually more relevant: potential issues in this diff. Issue A: `document.body.classList.remove('cause-tree-node-modal-open')` on hidden — fine. Issue B: The `mousedown` capture handler hides the modal on any mousedown outside the diagram/modal/floating-tools. This includes clicks on the modal backdrop of OTHER modals... minor. Issue C: The `hidden.bs.modal` removes the class. If the user opens the delete-confirm modal (a separate modal) while the cause node modal is open? Not typical. Issue D: Important — when modal is hidden, `hide()` is called but the `cause-tree-node-modal-open` class remains until the hide transition completes (Bootstrap fires hidden.bs.modal after transition). During that period isCauseNodeModalOpen() returns true. Not a big deal. Issue E: A real bug possibility — the mousedown handler calls `$modal.modal('hide')` when clicking outside the diagram. But it does not stop propagation for clicks outside floating tools. Since `body.cause-tree-node-modal-open > *` has pointer-events none, page elements don't get events. But wait: pointer-events:none means the element and its subtree don't receive mouse events — so mousedown wouldn't even be dispatched on those elements? Actually events are dispatched based on hit-testing; with pointer-events: none, the element is not a hit target, so the event target would be... the body itself (or html). So event.target would be body, which is a child? No, body isn't matched by `body > *`. Hmm, `body.cause-tree-node-modal-open > *` — body's direct children get pointer-events none. If all direct children have pointer-events none, the hit target becomes html/body itself? Then `event.target` = body element (or documentElement). Then `isEventInsideCauseTreeDiagram` false, `isEventInsideFloatingTools` false, `isEventInsideCauseNodeModal` false → hide modal. OK. But hold on: the SVG has pointer-events auto, so clicking on the diagram targets the svg. Good. Now the floating tools: `body.cause-tree-node-modal-open .cause-tree-floating-tools { pointer-events: auto; }` — the tools are within the diagram stage, which is a div with pointer-events none as a direct child of body. Descendant rule re-enables. Fine. Issue F: The click handler `if (!ignoreNextFloatingToolsClick || !isEventInsideFloatingTools(event)) return;` — fine per confirmed finding 1. Issue G: Now the CSS `body.cause-tree-node-modal-open .cause-tree-node, ... { pointer-events: none !important; }` — nodes not clickable, so the guards in click/dblclick handlers are redundant but harmless. Wait — but the mousedown handler `isEventInsideCauseTreeDiagram` returns true when clicking a node card inside the svg (since it's inside `.js-cause-tree-svg`), so it returns without hiding. But requirement says "Clique no diagrama não fecha o modal" — correct. But nodes have pointer-events none with !important, so the mousedown on a node would hit... the node has pointer-events none, so it hits the underlying svg? Actually the node is inside the svg; the hit test would go to the svg element. So target = svg or its child `.cause-tree-canvas`? The svg is inside `.cause-tree-canvas`. target.closest('.js-cause-tree-svg, .cause-tree-canvas') true → return. Good. Issue H: potential issue with drag on SVG — since mousedown on the svg is captured by document listener (capture phase) but not stopped, d3 zoom still works. Good. Issue I: A concern: `event.preventDefault()` on mousedown inside floating tools. Since it's a capture listener at document level, calling preventDefault prevents default behaviors (e.g., focus). Also prevents the click? No, preventDefault on mousedown doesn't prevent click. They set ignoreNextFloatingToolsClick and prevent click. OK. But here's a subtle bug: `event.stopPropagation()` in capture phase at document level stops the event from reaching the target — so the floating tools' own d3/button handlers won't run. Combined with the click handler's stopPropagation, the button action is blocked. Good. However — what about the case where the user mousedowns on the floating tools and the modal is hidden... the click handler resets flag. Fine. Issue J: What if the user mousedowns on floating tools (setting flag + hiding the modal), and then the `click` event's target is not inside floating tools (e.g., dialog moved due to layout)? Then flag stays true → next click anywhere inside floating tools would be swallowed. That's confirmed finding #1. Now let me look for other potential issues: duplicate event listeners — is `initCauseTreeScreen` called once per screen? Let me search for where it's called. Also: are these document-level listeners ever removed? If the screen (SPA tab) is re-initialized, listeners accumulate. Let's check. Let's search for `initCauseTreeScreen`.
Tool Calls (2)
code_search
Show Details
{"search_text": "initCauseTreeScreen|addEventListener|\\.modal\\(", "file_patterns": ["public/js/ssma/tree_view.js"], "use_perl_regexp": true}
File: public/js/ssma/tree_view.js
Match lines: 22
518|  function initCauseTreeScreen(screen) {
575|    $modal.modal({
621|    document.addEventListener('mousedown', (event) => {
632|        $modal.modal('hide');
638|      $modal.modal('hide');
641|    document.addEventListener('click', (event) => {
1181|            link.addEventListener('click', stopCardInteraction);
1182|            link.addEventListener('dblclick', (event) => {
1383|      $modal.modal('show');
1399|      $closeModal.modal('show');
1415|            options.modalToHide.modal('hide');
1417|            $closeModal.modal('hide');
1496|          .modal('show');
1516|      $deleteModal.modal('show');
1524|      $deactivateActionModal.modal('hide');
1571|          $modal.modal('hide');
1637|      $closeModal.modal('hide');
1638|      $removeClosureConfirmModal.modal('show');
1675|          $deleteModal.modal('hide');
1727|    window.addEventListener('resize', () => {
1748|  document.addEventListener('DOMContentLoaded', () => {
1749|    document.querySelectorAll(SELECTORS.screen).forEach((screen) => initCauseTreeScreen(screen));

code_search
Show Details
{"search_text": "cause-tree-node-modal-open"}
File: public/js/ssma/tree_view.js
Match lines: 3
582|      document.body.classList.add('cause-tree-node-modal-open');
585|      document.body.classList.remove('cause-tree-node-modal-open');
589|      return $modal.hasClass('show') || document.body.classList.contains('cause-tree-node-modal-open');

File: templates/ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig
Match lines: 7
495|    body.cause-tree-node-modal-open > *,
496|    body.cause-tree-node-modal-open .modal-backdrop {
500|    body.cause-tree-node-modal-open .cause-tree-floating-tools {
504|    body.cause-tree-node-modal-open .js-cause-tree-svg {
509|    body.cause-tree-node-modal-open .js-cause-tree-svg:active {
513|    body.cause-tree-node-modal-open .cause-tree-node,
514|    body.cause-tree-node-modal-open .cause-tree-node * {

Request #27 deepseek-flash P:17.35K C:486 CR:16.77K CW:0 2720ms
Reasoning
Only one screen init via DOMContentLoaded for each screen selector. So no repeated listeners. Now let's check the modal show flow at line 1383 and later to see if the new code conflicts. Let's read around 1360-1450 and 1560-1660. Also check if `$modal.modal('show')` triggers `show.bs.modal` → adds class. Note: the class is added on 'show.bs.modal' which fires before the modal is shown. But if `show` option is passed... fine. An important consideration: other modals on the page — `$closeModal`, `$removeClosureConfirmModal`, `$deleteModal`, `$deactivateActionModal`. When the cause node modal is open and the user clicks "Salvar" → what happens? The save probably triggers a validation modal or the close modal. Hmm, no — save hides the modal. But consider: with the cause node modal open, if the user confirms deactivation... not relevant. However there's a real potential issue: `body.cause-tree-node-modal-open > *` blocks pointer events for all direct children of body. Those other modals ($closeModal, etc.) are likely direct children of body. If the cause node modal stays open while another modal is displayed... but requirement says the cause node modal stays open during pan/zoom only. Actually here's a scenario: In `openModal` for create/edit, does it hide another modal then show? Let me look at line 1383 region. Let me read 1360-1450.
Tool Calls (2)
file_read
Show Details
{"file_path": "public/js/ssma/tree_view.js", "start_line": 1340, "end_line": 1460}
File: public/js/ssma/tree_view.js (Total lines: 1751)
IS_TRUNCATED: false
LINE_RANGE: 1340-1460
1340|      updateControls();
1341|      fitView(false);
1342|    }
1343|  
1344|    function applyServerState(response, selectedNodeId = null) {
1345|      if (!response || !response.tree) return;
1346|      state.tree = response.tree;
1347|      state.meta = response.meta || {};
1348|      state.selectedNodeId = selectedNodeId;
1349|      renderTree();
1350|    }
1351|  
1352|    function openModal(mode, options = {}) {
1353|      const selectedNode = getSelectedNode();
1354|      const defaults = {
1355|        title: '',
1356|        category: '',
1357|        description: '',
1358|        actionActive: false,
1359|        parentId: options.parentId ?? null,
1360|        nodeId: ''
1361|      };
1362|  
1363|      const values = mode === 'edit' && selectedNode
1364|        ? {
1365|            title: selectedNode.title || '',
1366|            category: selectedNode.category || '',
1367|            description: selectedNode.description || '',
1368|            actionActive: Boolean(selectedNode.actionActive),
1369|            parentId: selectedNode.parentId ?? '',
1370|            nodeId: selectedNode.id
1371|          }
1372|        : defaults;
1373|  
1374|      state.modalMode = mode;
1375|      $modal.find(SELECTORS.modalTitle).text(mode === 'edit' ? 'Editar causa' : 'Adicionar causa');
1376|      $modal.find(SELECTORS.nodeId).val(values.nodeId);
1377|      $modal.find(SELECTORS.parentId).val(values.parentId ?? '');
1378|      $modal.find(SELECTORS.titleInput).val(values.title);
1379|      ensureCategoryOption(values.category);
1380|      $modal.find(SELECTORS.categoryInput).val(values.category);
1381|      $modal.find(SELECTORS.descriptionInput).val(values.description);
1382|      $modal.find(SELECTORS.actionActiveInput).val(values.actionActive ? '1' : '0');
1383|      $modal.modal('show');
1384|    }
1385|
1386|    function openCloseModal() {
1387|      const selectedNode = getSelectedNode();
1388|      if (!selectedNode || selectedNode.parentId === null) return;
1389|      const isEditingClosure = isNodeClosed(selectedNode);
1390|
1391|      $closeModal.find(SELECTORS.closeModalTitle).text(isEditingClosure ? 'Editar fechamento' : 'Encerrar causa');
1392|      $closeModal.find(SELECTORS.closeNodeId).val(selectedNode.id);
1393|      $closeModal.find(SELECTORS.closeTypeInput).val(String(selectedNode.closureType || ''));
1394|      $closeModal.find(SELECTORS.closeCommentInput).val(String(selectedNode.closureComment || ''));
1395|      $closeSubmitButton.text('Salvar fechamento');
1396|      $closeRemoveButton.toggleClass('d-none', !isEditingClosure);
1397|      populateConnectedNodeOptions(selectedNode, selectedNode.connectedNodeId ?? '');
1398|      toggleConnectedNodeField();
1399|      $closeModal.modal('show');
1400|    }
1401|
1402|    function saveNodeClosure(selectedNode, payload, $button, successMessage, options = {}) {
1403|      const nodeId = selectedNode.id;
1404|      const loadingText = options.loadingText || 'Salvando...';
1405|      setButtonLoading($button, loadingText);
1406|
1407|      api.updateNode(nodeId, payload)
1408|        .done((response) => {
1409|          if (!response.success) {
1410|            notify('error', response.message || 'Não foi possível atualizar o fechamento da causa.');
1411|            return;
1412|          }
1413|
1414|          if (options.modalToHide) {
1415|            options.modalToHide.modal('hide');
1416|          } else {
1417|            $closeModal.modal('hide');
1418|          }
1419|          applyServerState(response, response.node ? response.node.id : Number(nodeId));
1420|          notify('success', successMessage);
1421|        })
1422|        .fail((xhr) => {
1423|          const response = xhr && xhr.responseJSON ? xhr.responseJSON : {};
1424|          notify('error', response.message || 'Não foi possível atualizar o fechamento da causa.');
1425|        })
1426|        .always(() => {
1427|          resetButtonLoading($button);
1428|        });
1429|    }
1430|  
1431|    function loadTree() {
1432|      api.loadTree()
1433|        .done((response) => {
1434|          if (!response.success) {
1435|            notify('error', response.message || 'Não foi possível carregar a árvore.');
1436|            return;
1437|          }
1438|  
1439|          applyServerState(response, response.meta ? response.meta.rootNodeId : null);
1440|        })
1441|        .fail(() => {
1442|          notify('error', 'Não foi possível carregar a árvore de causas.');
1443|        });
1444|    }
1445|  
1446|    elements.addRoot.on('click', () => {
1447|      const selectedNode = getSelectedNode();
1448|  
1449|      if (!selectedNode) {
1450|        openModal('create', { parentId: '' });
1451|        return;
1452|      }
1453|
1454|      if (isNodeClosed(selectedNode)) {
1455|        return;
1456|      }
1457|  
1458|      openModal('create', { parentId: selectedNode.id });
1459|    });
1460|  
file_read
Show Details
{"file_path": "public/js/ssma/tree_view.js", "start_line": 1550, "end_line": 1700}
File: public/js/ssma/tree_view.js (Total lines: 1751)
IS_TRUNCATED: false
LINE_RANGE: 1550-1700
1550|        return;
1551|      }
1552|  
1553|      const nodeId = $modal.find(SELECTORS.nodeId).val();
1554|      const capturedMode = state.modalMode;
1555|      const prevActionActive = capturedMode === 'edit' && nodeId
1556|        ? Boolean((getNodeById(Number(nodeId)) || {}).actionActive)
1557|        : false;
1558|      setButtonLoading($submitButton, 'Salvando...');
1559|
1560|      const request = capturedMode === 'edit' && nodeId
1561|        ? api.updateNode(nodeId, payload)
1562|        : api.createNode(payload);
1563|
1564|      request
1565|        .done((response) => {
1566|          if (!response.success) {
1567|            notify('error', response.message || 'Não foi possível salvar a causa.');
1568|            return;
1569|          }
1570|
1571|          $modal.modal('hide');
1572|          applyServerState(response, response.node ? response.node.id : (response.meta ? response.meta.rootNodeId : null));
1573|          notify('success', 'Causa salva com sucesso.');
1574|          const nextAct = payload.actionActive === 1;
1575|          const changedId = capturedMode === 'edit' && nodeId
1576|            ? Number(nodeId)
1577|            : (response.node ? response.node.id : null);
1578|          if (prevActionActive !== nextAct && changedId) {
1579|            $(document).trigger('causeTreeNodeActionChanged', [changedId, String(payload.title || '').trim(), nextAct]);
1580|          }
1581|        })
1582|        .fail((xhr) => {
1583|          const response = xhr && xhr.responseJSON ? xhr.responseJSON : {};
1584|          notify('error', response.message || 'Não foi possível salvar a causa.');
1585|        })
1586|        .always(() => {
1587|          resetButtonLoading($submitButton);
1588|        });
1589|    });
1590|
1591|    $closeForm.on('submit', (event) => {
1592|      event.preventDefault();
1593|
1594|      const selectedNode = getSelectedNode();
1595|      const nodeId = $closeModal.find(SELECTORS.closeNodeId).val();
1596|      const closureType = String($closeModal.find(SELECTORS.closeTypeInput).val() || '').trim();
1597|      const connectedNodeId = String($closeModal.find(SELECTORS.closeConnectedNodeInput).val() || '').trim();
1598|      const closureComment = String($closeModal.find(SELECTORS.closeCommentInput).val() || '').trim();
1599|
1600|      if (!selectedNode || !nodeId) {
1601|        notify('error', 'Selecione uma causa válida para encerrar.');
1602|        return;
1603|      }
1604|
1605|      if (!closureType) {
1606|        notify('error', 'Selecione o tipo de fechamento.');
1607|        return;
1608|      }
1609|
1610|      if (closureType === 'connected' && !connectedNodeId) {
1611|        notify('error', 'Selecione a causa conectada.');
1612|        return;
1613|      }
1614|
1615|      const payload = buildNodePayload(selectedNode, {
1616|        closureType,
1617|        closureComment,
1618|        connectedNodeId: closureType === 'connected' ? connectedNodeId : ''
1619|      });
1620|
1621|      saveNodeClosure(
1622|        selectedNode,
1623|        payload,
1624|        $closeSubmitButton,
1625|        isNodeClosed(selectedNode) ? 'Fechamento da causa atualizado com sucesso.' : 'Fechamento da causa salvo com sucesso.'
1626|      );
1627|    });
1628|
1629|    $closeRemoveButton.on('click', () => {
1630|      const selectedNode = getSelectedNode();
1631|      if (!selectedNode || !isNodeClosed(selectedNode)) {
1632|        return;
1633|      }
1634|
1635|      shouldRestoreCloseModalAfterRemoveConfirm = true;
1636|      $removeClosureConfirmModal.data('nodeId', selectedNode.id);
1637|      $closeModal.modal('hide');
1638|      $removeClosureConfirmModal.modal('show');
1639|    });
1640|
1641|    $closeRemoveConfirmButton.on('click', () => {
1642|      const nodeId = $removeClosureConfirmModal.data('nodeId');
1643|      const selectedNode = flattenTree(state.tree).find((node) => Number(node.id) === Number(nodeId));
1644|      if (!selectedNode || !isNodeClosed(selectedNode)) {
1645|        return;
1646|      }
1647|
1648|      shouldRestoreCloseModalAfterRemoveConfirm = false;
1649|      const payload = buildNodePayload(selectedNode, {
1650|        closureType: '',
1651|        closureComment: '',
1652|        connectedNodeId: ''
1653|      });
1654|
1655|      saveNodeClosure(selectedNode, payload, $closeRemoveConfirmButton, 'Fechamento removido com sucesso.', {
1656|        modalToHide: $removeClosureConfirmModal,
1657|        loadingText: 'Removendo...'
1658|      });
1659|    });
1660|
1661|    $deleteModal.find(SELECTORS.deleteConfirm).on('click', () => {
1662|      const nodeId = $deleteModal.data('nodeId');
1663|      if (!nodeId) return;
1664|      const nodeToDelete = getNodeById(nodeId);
1665|      const $deleteButton = $deleteModal.find(SELECTORS.deleteConfirm);
1666|      setButtonLoading($deleteButton, 'Removendo...');
1667|
1668|      api.deleteNode(nodeId)
1669|        .done((response) => {
1670|          if (!response.success) {
1671|            notify('error', response.message || 'Não foi possível remover a causa.');
1672|            return;
1673|          }
1674|
1675|          $deleteModal.modal('hide');
1676|          applyServerState(response, response.meta ? response.meta.rootNodeId : null);
1677|          notify('success', 'Causa removida com sucesso.');
1678|          if (nodeToDelete && nodeToDelete.actionActive) {
1679|            $(document).trigger('causeTreeNodeActionChanged', [nodeToDelete.id, nodeToDelete.title, false]);
1680|          }
1681|        })
1682|        .fail((xhr) => {
1683|          const response = xhr && xhr.responseJSON ? xhr.responseJSON : {};
1684|          notify('error', response.message || 'Não foi possível remover a causa.');
1685|        })
1686|        .always(() => {
1687|          resetButtonLoading($deleteButton);
1688|        });
1689|    });
1690|
1691|    $removeClosureConfirmModal.on('hidden.bs.modal', () => {
1692|      const shouldReopenCloseModal = shouldRestoreCloseModalAfterRemoveConfirm;
1693|      shouldRestoreCloseModalAfterRemoveConfirm = false;
1694|      $removeClosureConfirmModal.removeData('nodeId');
1695|
1696|      if (shouldReopenCloseModal) {
1697|        openCloseModal();
1698|      }
1699|    });
1700|
Request #28 deepseek-flash P:21.02K C:371 CR:17.79K CW:0 2478ms
Reasoning
Now, an important scenario: other modals ($closeModal, $removeClosureConfirmModal, $deleteModal, $deactivateActionModal) exist. The new document-level mousedown handler only triggers if the cause node modal is open. When the cause node modal is open, clicking on... hmm, the `$closeModal` etc. can't be opened while the cause node modal is open. So fine. But wait, the confirmed finding #3 already mentions the toast container and other direct children of body. Now: A new consideration — the new mousedown listener is installed via `document.addEventListener('mousedown', ..., true)` unconditionally for every screen. It's a global listener for the entire page while the screen exists, but guarded by isCauseNodeModalOpen(). Fine. Another consideration: does `$modal.modal({...})` re-init conflict with the bottom sheet component's own JS? Let's check `_modal_bottom_sheet.html.twig` to see if it has data attributes and whether calling `.modal()` with options is fine. Since existing code already calls `$modal.modal('show')` without init, Bootstrap's jQuery plugin uses data attributes defaults. Initializing with `{backdrop:'static', keyboard:true, show:false}` is fine. Hmm, but there's a subtlety: the bottom sheet component may already be initialized elsewhere (e.g., custom JS for mobile bottom sheet). Let me check the component. Let me read `templates/components/_modal_bottom_sheet.html.twig`.
Tool Calls (1)
file_read
Show Details
{"file_path": "templates/components/_modal_bottom_sheet.html.twig"}
File: templates/components/_modal_bottom_sheet.html.twig (Total lines: 144)
IS_TRUNCATED: false
LINE_RANGE: 1-144
1|{# templates/components/_modal_bottom_sheet.html.twig #}
2|{#
3|    Bottom Sheet Modal Component
4|    
5|    Desktop: behaves like a centered modal
6|    Mobile: slides up from bottom as a bottom sheet (max 90vh)
7|
8|    Styles are loaded from:
9|    - public/css/metahuman-standard/components/_modal_bottom_sheet.css
10|
11|    This template keeps only the dynamic values inline:
12|    - width
13|    - internal padding
14|    - footer alignment
15|    
16|    @param string modal_id              - Unique ID for the modal
17|    @param string modal_size            - 'sm' for small modal, default for standard size
18|    @param string footer_justify_content - CSS justify-content for footer (default: 'flex-end')
19|    @param string body_template         - Optional body partial to include
20|    @param array  body_vars             - Optional variables passed to body_template
21|    
22|    Usage:
23|    {% embed 'components/_modal_bottom_sheet.html.twig' with { modal_id: 'my_modal' } %}
24|        {% block modal_title %}My Title{% endblock %}
25|        {% block modal_body %}My content{% endblock %}
26|        {% block modal_footer %}My buttons{% endblock %}
27|    {% endembed %}
28|#}
29|
30|{% set width = (modal_size|default('')) == 'sm' ? '30vw' : '60vw' %}
31|{% set main_padding = (modal_size|default('')) == 'sm' ? '16px' : '24px' %}
32|{% set size_class = (modal_size|default('')) == 'sm' ? 'modal-sm-custom' : '' %}
33|{% set use_validation_ui = use_validation_ui|default(false) %}
34|{% set validation_alert_id = validation_alert_id|default(modal_id ~ '-validation-alert') %}
35|{% set validation_alert_message = validation_alert_message|default('Preencha todos os campos obrigatórios') %}
36|{% set reset_validation_on_close = reset_validation_on_close|default(false) %}
37|{% set validation_scope_selector = '#' ~ modal_id %}
38|{% set validation_body_selector = validation_scope_selector ~ ' .modal-body' %}
39|
40|<div class="modal fade modal-bottom-sheet"
41|     id="{{ modal_id|default('dynamicModal') }}"
42|     tabindex="-1"
43|     role="dialog"
44|     aria-labelledby="{{ modal_id|default('dynamicModal') }}Label"
45|     aria-hidden="true"
46|     style="z-index: 1060;"
47|     {% if use_validation_ui %}data-validation-scope="true" data-validation-alert-selector="#{{ validation_alert_id }}"{% endif %}>
48|    <div class="modal-dialog modal-dialog-centered mhs-bottom-sheet-dialog {{ size_class }}"
49|         style="max-width: {{ width }};">
50|        <div class="modal-content mhs-bottom-sheet-content">
51|            
52|            {# ================================================================= #}
53|            {# Bottom Sheet Handle (Mobile only)                                 #}
54|            {# ================================================================= #}
55|            <div class="bottom-sheet-handle">
56|                <div class="handle-bar"></div>
57|            </div>
58|            
59|            {# ================================================================= #}
60|            {# Modal Header                                                      #}
61|            {# ================================================================= #}
62|            <div class="modal-header mhs-bottom-sheet-header"
63|                 style="padding: {{ main_padding }};">
64|                <h4 class="modal-title mhs-bottom-sheet-title" id="{{ modal_id|default('dynamicModal') }}Label">
65|                    {% block modal_title %}Título Padrão{% endblock %}
66|                </h4>
67|                <button type="button" class="close mhs-bottom-sheet-close" data-dismiss="modal" aria-label="Close">
68|                    <span class="mhs-bottom-sheet-close-icon" aria-hidden="true">&times;</span>
69|                </button>
70|            </div>
71|
72|            {# ================================================================= #}
73|            {# Modal Body                                                        #}
74|            {# ================================================================= #}
75|            <div class="modal-body mhs-bottom-sheet-body" style="padding: {{ main_padding }}; overflow-y: auto; flex: 1;">
76|                {% if use_validation_ui %}
77|                    {% include 'components/validation/_modal_validation_ui.html.twig' with {
78|                        validation_alert_id: validation_alert_id,
79|                        validation_alert_message: validation_alert_message,
80|                        validation_render_alert: true
81|                    } only %}
82|                {% endif %}
83|                {% if body_template is defined and body_template %}
84|                    {% include body_template with (body_vars is defined ? body_vars : {}) only %}
85|                {% else %}
86|                    {% block modal_body %}
87|                        <p>O conteúdo do corpo do modal vai aqui.</p>
88|                    {% endblock %}
89|                {% endif %}
90|            </div>
91|
92|            {# ================================================================= #}
93|            {# Modal Footer                                                      #}
94|            {# ================================================================= #}
95|            <div class="modal-footer mhs-bottom-sheet-footer"
96|                 style="padding: 16px {{ main_padding }}; justify-content: {{ footer_justify_content|default('flex-end') }};">
97|                {% block modal_footer %}
98|                    <button type="button" class="mhs-btn-cancel" data-dismiss="modal">Cancelar</button>
99|                    <button type="button" class="mhs-btn-primary">
100|                        Ação Principal
101|                    </button>
102|                {% endblock %}
103|            </div>
104|        </div>
105|    </div>
106|</div>
107|
108|{% if use_validation_ui %}
109|    {# Shared validation assets are opt-in so existing bottom sheets keep the same behavior #}
110|    {% include 'components/validation/_modal_validation_ui.html.twig' with {
111|        validation_scope_selector: validation_scope_selector,
112|        validation_body_selector: validation_body_selector,
113|        validation_alert_id: validation_alert_id,
114|        validation_alert_message: validation_alert_message,
115|        validation_render_assets: true
116|    } only %}
117|{% endif %}
118|
119|{% if use_validation_ui and reset_validation_on_close %}
120|<script>
121|$(document).ready(function() {
122|    // Auto-clear invalid styles while the user interacts with the form
123|    if (window.ModalValidation) {
124|        window.ModalValidation.bindAutoClear('#{{ modal_id|default('dynamicModal') }}');
125|    }
126|
127|    $('#{{ modal_id|default('dynamicModal') }}').on('hidden.bs.modal', function() {
128|        if (window.ModalValidation) {
129|            window.ModalValidation.clearState('{{ validation_scope_selector }}');
130|        }
131|    });
132|});
133|</script>
134|{% elseif use_validation_ui %}
135|<script>
136|$(document).ready(function() {
137|    // Validation can be enabled without forcing reset-on-close behavior
138|    if (window.ModalValidation) {
139|        window.ModalValidation.bindAutoClear('#{{ modal_id|default('dynamicModal') }}');
140|    }
141|});
142|</script>
143|{% endif %}
144|
Request #29 deepseek-flash P:23.18K C:804 CR:21.38K CW:0 4248ms
Reasoning
The modal is Bootstrap-based, `data-dismiss="modal"` works. Now, one important issue with the mousedown-outside-to-close implementation: the modal itself is a `modal-bottom-sheet` which on mobile slides from bottom with a `.handle-bar` and possibly drag behavior. On mobile, there may be a drag handler that closes the modal by swiping down. Not relevant. Another point: `.modal-dialog` click check. Since we check `#ssmaCauseTreeNodeModal .modal-dialog`, clicks on the backdrop (the `.modal` element itself) are outside modal-dialog → hide. But note this mousedown handler is capture-phase on document; Bootstrap's own backdrop mousedown with `backdrop:'static'` doesn't hide. Our handler calls `$modal.modal('hide')`. That works. Now consider: `body.cause-tree-node-modal-open .modal-backdrop { pointer-events: none; }` — so the backdrop can't get events; the hit target for a click on the shaded area would then be body (since all body children except #ssmaCauseTreeNodeModal subtree have pointer-events none... wait, `#ssmaCauseTreeNodeModal { pointer-events: none; }` but `.modal-dialog { pointer-events: auto; }`. So hit test on the modal area outside the dialog → the modal element has pointer-events none → falls through to body. event.target = body. isEventInsideCauseNodeModal(body) → false. isEventInsideFloatingTools false. isEventInsideCauseTreeDiagram false → hide modal. Good, that matches "clique na área escurecida fecha o modal". Hmm, but wait: is `.cause-tree-canvas` a direct child of body? No, nested. `body.cause-tree-node-modal-open > *` only targets direct children with pointer-events none. Descendants inherit `pointer-events: none` from the parent? pointer-events is inherited in SVG... Actually, `pointer-events` is an inherited property in CSS (yes, pointer-events is inherited). So setting none on a direct child of body makes all its descendants none too, unless overridden (which is done for the svg and floating tools). Good. Now the potential issue: `body.cause-tree-node-modal-open .cause-tree-node, ... * { pointer-events: none !important; }` — the `!important` beats... hmm the svg rule `body.cause-tree-node-modal-open .js-cause-tree-svg { pointer-events: auto; }` doesn't conflict. OK. Now let's look at the JS for the node click handler diff (lines ~1076) and check the drag behavior. Let me read 1060-1120. Also I should check whether the d3 zoom on the svg is attached to the svg element or to a parent; with pointer-events none on the canvas parent... `.cause-tree-canvas` gets pointer-events none inherited from body child; the svg re-enables auto. d3 zoom listens on the svg. Good. Now important: tooltips/hover on nodes are disabled while the modal is open — that's intended. Another potential bug: while the modal is open, dragging the diagram is possible, but is the modal center still "in the center"? Not code. Let me now read the node rendering region 1050-1130 to see the new guards.
Tool Calls (1)
file_read
Show Details
{"file_path": "public/js/ssma/tree_view.js", "start_line": 1040, "end_line": 1210}
File: public/js/ssma/tree_view.js (Total lines: 1751)
IS_TRUNCATED: false
LINE_RANGE: 1040-1210
1040|            }
1041|          });
1042|        state.svg.call(state.zoom);
1043|        // Disable d3 default dblclick zoom; we handle zoom via card/canvas double-click.
1044|        state.svg.on('dblclick.zoom', null);
1045|        state.svg.on('dblclick.causeTreeFit', (event) => {
1046|          if (event.defaultPrevented) return;
1047|          fitView(true);
1048|        });
1049|      } else {
1050|        state.viewport.selectAll('*').remove();
1051|      }
1052|  
1053|      state.svg.attr('viewBox', `0 0 ${width} ${height}`);
1054|  
1055|      if (!hasTree) {
1056|        updateControls();
1057|        return;
1058|      }
1059|  
1060|      const layoutData = computeCompactTreeLayout(state.tree);
1061|      const connectionDecorators = buildConnectionDecorators(state.tree);
1062|  
1063|      const rootGroup = state.viewport.append('g').attr('transform', `translate(${ROOT_GROUP_OFFSET.x}, ${ROOT_GROUP_OFFSET.y})`);
1064|  
1065|      rootGroup.selectAll('.cause-tree-link')
1066|        .data(layoutData.links)
1067|        .enter()
1068|        .append('path')
1069|        .attr('class', 'cause-tree-link')
1070|        .attr('d', buildLinkPath);
1071|  
1072|      const nodeGroups = rootGroup.selectAll('.cause-tree-node')
1073|        .data(layoutData.nodes)
1074|        .enter()
1075|        .append('g')
1076|        .attr('class', (item) => item.id === state.selectedNodeId ? 'cause-tree-node app-card-surface is-selected' : 'cause-tree-node app-card-surface')
1077|        .attr('transform', (item) => `translate(${item.y}, ${item.x})`)
1078|        .on('click', (event, item) => {
1079|          if (isCauseNodeModalOpen()) {
1080|            return;
1081|          }
1082|          event.stopPropagation();
1083|          selectNode(item.id);
1084|        })
1085|        .on('dblclick', (event, item) => {
1086|          if (isCauseNodeModalOpen()) {
1087|            event.preventDefault();
1088|            event.stopPropagation();
1089|            return;
1090|          }
1091|          event.preventDefault();
1092|          event.stopPropagation();
1093|          selectNode(item.id);
1094|          if (state.zoomedNodeId === item.id) {
1095|            fitView(true);
1096|            return;
1097|          }
1098|          zoomToNode(item);
1099|        });
1100|  
1101|      nodeGroups.append('rect')
1102|        .attr('class', 'cause-tree-node-shell')
1103|        .attr('x', -NODE_WIDTH / 2)
1104|        .attr('y', -NODE_HEIGHT / 2)
1105|        .attr('width', NODE_WIDTH)
1106|        .attr('height', NODE_HEIGHT);
1107|  
1108|      nodeGroups.append('path')
1109|        .attr('class', 'cause-tree-node-topband')
1110|        .attr('d', buildTopBandPath());
1111|  
1112|      nodeGroups.append('line')
1113|        .attr('class', 'cause-tree-node-divider')
1114|        .attr('x1', -NODE_WIDTH / 2)
1115|        .attr('x2', NODE_WIDTH / 2)
1116|        .attr('y1', -NODE_HEIGHT / 2 + TOP_SECTION_HEIGHT)
1117|        .attr('y2', -NODE_HEIGHT / 2 + TOP_SECTION_HEIGHT);
1118|  
1119|      nodeGroups.append('foreignObject')
1120|        .attr('x', -NODE_WIDTH / 2 + 8)
1121|        .attr('y', -NODE_HEIGHT / 2 + 6)
1122|        .attr('width', 16)
1123|        .attr('height', 16)
1124|        .each(function appendCategoryIcon(item) {
1125|          const categoryDefinition = getCategoryDefinition(item.category);
1126|          const iconWrapper = document.createElement('div');
1127|          iconWrapper.className = 'cause-tree-node-category-icon-wrap';
1128|          iconWrapper.style.color = categoryDefinition.color;
1129|          iconWrapper.innerHTML = `<i class="${categoryDefinition.iconClass}"></i>`;
1130|          this.appendChild(iconWrapper);
1131|        });
1132|  
1133|      nodeGroups.append('text')
1134|        .attr('class', 'cause-tree-node-toptext')
1135|        .attr('x', -NODE_WIDTH / 2 + 36)
1136|        .attr('y', -NODE_HEIGHT / 2 + (TOP_SECTION_HEIGHT / 2))
1137|        .attr('dominant-baseline', 'middle')
1138|        .text((item) => getCategoryDefinition(item.category).label);
1139|
1140|      nodeGroups.filter((item) => {
1141|        const incomingConnections = connectionDecorators.targetDecorators[item.id] || [];
1142|        return incomingConnections.length > 0;
1143|      })
1144|        .append('foreignObject')
1145|        .attr('x', (item) => {
1146|          const stackWidth = getConnectionStackWidth(connectionDecorators.targetDecorators[item.id] || [], 18, 3);
1147|          const rightOffset = item.parentId !== null ? 30 : (originUrl ? 28 : 8);
1148|          return (NODE_WIDTH / 2) - stackWidth - rightOffset;
1149|        })
1150|        .attr('y', -NODE_HEIGHT / 2 + 5)
1151|        .attr('width', (item) => Math.max(18, getConnectionStackWidth(connectionDecorators.targetDecorators[item.id] || [], 18, 3)))
1152|        .attr('height', 18)
1153|        .each(function appendIncomingConnections(item) {
1154|          const stackWrapper = document.createElement('div');
1155|          stackWrapper.className = 'cause-tree-node-connections-stack';
1156|          stackWrapper.innerHTML = buildConnectionAvatarsStackHtml(connectionDecorators.targetDecorators[item.id] || [], 18, 3);
1157|          this.appendChild(stackWrapper);
1158|        });
1159|  
1160|      if (originUrl) {
1161|        nodeGroups.filter((item) => item.parentId === null)
1162|          .append('foreignObject')
1163|          .attr('x', NODE_WIDTH / 2 - 26)
1164|          .attr('y', -NODE_HEIGHT / 2 + 5)
1165|          .attr('width', 18)
1166|          .attr('height', 18)
1167|          .each(function appendOriginLink() {
1168|            const wrap = document.createElement('div');
1169|            wrap.className = 'cause-tree-node-origin-wrap';
1170|
1171|            const link = document.createElement('a');
1172|            link.href = originUrl;
1173|            link.className = 'cause-tree-node-origin-link js-cause-tree-origin-open';
1174|            link.title = 'Ver ocorrência';
1175|            link.setAttribute('aria-label', 'Ver ocorrência');
1176|            link.innerHTML = '<i class="fas fa-external-link-alt"></i>';
1177|
1178|            const stopCardInteraction = (event) => {
1179|              event.stopPropagation();
1180|            };
1181|            link.addEventListener('click', stopCardInteraction);
1182|            link.addEventListener('dblclick', (event) => {
1183|              event.preventDefault();
1184|              event.stopPropagation();
1185|            });
1186|
1187|            wrap.appendChild(link);
1188|            this.appendChild(wrap);
1189|          });
1190|      }
1191|
1192|      nodeGroups.filter((item) => item.parentId !== null)
1193|        .append('foreignObject')
1194|        .attr('x', NODE_WIDTH / 2 - 52)
1195|        .attr('y', -NODE_HEIGHT / 2 + 5)
1196|        .attr('width', 52)
1197|        .attr('height', 18)
1198|        .each(function appendActionIcon(item) {
1199|          const actionCount = getNodeActionCount(item);
1200|          const iconWrapper = document.createElement('div');
1201|          iconWrapper.className = `cause-tree-node-action-icon-wrap js-cause-tree-action-tooltip${item.actionActive ? '' : ' is-inactive'}`;
1202|          iconWrapper.setAttribute('data-node-id', String(item.id));
1203|          iconWrapper.style.color = item.actionActive ? '#10b981' : '#aab7bf';
1204|          iconWrapper.setAttribute('data-toggle', 'tooltip');
1205|          iconWrapper.setAttribute('data-placement', 'left');
1206|          iconWrapper.setAttribute('title', item.actionActive
1207|            ? 'Esta causa possui uma ação ativa.'
1208|            : 'Esta causa não possui uma ação vinculada.');
1209|          iconWrapper.innerHTML = item.actionActive && actionCount > 0
1210|            ? `<i class="${ACTION_ICON_CLASS}"></i><span class="cause-tree-node-action-count">${actionCount}</span>`
Request #30 deepseek-flash P:26.27K C:2.51K CR:23.94K CW:0 11443ms
Reasoning
Now, one more thing: since node elements have pointer-events none while the modal is open, the guards are redundant. But that's the intent (defensive). Hmm wait — actually the CSS rule makes nodes non-interactive with the modal open. But the modal closing path: clicking on the diagram does not close the modal, so nodes remain non-interactive until modal closes. That's intended. But here's a potential UX regression: with the modal open, clicking a node does nothing (pointer-events none → hit goes to svg → d3 pan). Fine per requirements. Now let's think about whether there is a real bug in the new JS regarding `event.button !== 0` for `mousedown`. Fine. Consider: The `click` capture handler resets the flag only when the click target is inside floating tools. Confirmed finding covers stuck flag. What about a real bug: The mousedown handler calls `$modal.modal('hide')` when clicking the floating tools, but also `event.preventDefault()` and `stopPropagation()`. This blocks mousedown on the tools. But the tools contain buttons; the "close" behavior is intended per requirement. Now think about a scenario where the floating tools contain other interactive widgets like the selection indicator panel (with buttons?). `.cause-tree-floating-tools` includes the selection indicator and tool groups. Clicking the selection indicator (a card, non-button) would also close the modal and swallow the click. Probably fine. Hmm — but the requirement says clicking the floating menu closes the modal and doesn't trigger the button. OK. Now another possible issue: The diagram check `isEventInsideCauseTreeDiagram` excludes `.cause-tree-floating-tools` first. That's because floating tools are inside the stage? Actually floating tools are inside `.cause-tree-workspace`, which is a sibling of `.cause-tree-canvas`. Let me check the HTML structure of the tab to know if `.cause-tree-floating-tools` is inside `.cause-tree-canvas`. If it's a sibling of canvas, then the exclusion is unnecessary but harmless. Now, let me check whether there's a "cause-tree-stage" element as direct child of body... The structure: `body > ... > .cause-tree-page > .cause-tree-stage > .cause-tree-workspace > .cause-tree-canvas > svg`. Now, key question: is the `body.cause-tree-node-modal-open > * { pointer-events: none }` approach going to break the modal's own backdrop? Confirmed finding covers toasts. Let me look for other issues. Think about the `hidden.bs.modal` handler removing the class: but there are multiple listeners for `hidden.bs.modal` on $modal? No. Now, what about `show.bs.modal` adding the class — the class is added when the modal starts to show. But the modal is `pointer-events: none` and `.modal-dialog` auto. Since `#ssmaCauseTreeNodeModal { pointer-events: none; }` is a global rule (not scoped to the body class), it applies whenever... it's a static CSS rule so applies always, even when the modal is closed. That's fine since it's hidden anyway. Hmm, but wait: is the rule `#ssmaCauseTreeNodeModal { pointer-events: none; }` applied always? Yes. But when the modal is closed, it's not displayed. When open, dialog is auto. Fine. Now consider the interaction with `hide.bs.modal` and the backdrop removal... Bootstrap removes the backdrop. Fine. Another potential issue: the mousedown handler closes the modal when clicking anywhere outside the diagram — including on the modal's own header/footer? No, those are inside `.modal-dialog`. But wait — `.modal-dialog` contains `.modal-content` which includes header/body/footer. Yes, inside modal-dialog → return. Good. Now what about clicks in the bottom-sheet "handle-bar" area? Inside modal-dialog → fine. Now, another thing: with `backdrop: 'static'`, Bootstrap adds the `modal-static` class... irrelevant. Potential issue: The order of checks means a mousedown in floating tools hides the modal, but the floating tools may be *inside* the modal? No. Let me now consider the "Esc key" behavior: `keyboard: true` default → Esc hides modal → hidden.bs.modal removes class. Good. Another idea: The requirement "Clique no diagrama não fecha o modal" — but the diagram includes the `.cause-tree-stage` padding area. `isEventInsideCauseTreeDiagram` checks `.js-cause-tree-svg, .cause-tree-canvas`. The stage has padding 0. So fine. Hmm, what about clicking on empty area within the canvas but outside the svg? The svg fills canvas 100%/100%. Fine. Now — an actual functional concern: clicking on the floating tools hides the modal and swallows the click. But what about the "Zoom" buttons? requirement says they shouldn't work while modal open? The requirement says: "Clique no menu flutuante lateral fecha o modal, sem executar a ação do botão (zoom, adicionar, etc.)." So intended. Now let me focus on remaining code-quality items that are not duplicates of confirmed findings: 1. The `click` capture handler registered globally — uses flag. Covered. 2. Duplicate helpers — covered. 3. New global CSS in template — covered partially (god template finding). 4. Potential issue: `$modal.modal({...})` init with `keyboard: true` — previously default. But `backdrop: 'static'` changes behavior: previously, clicking the backdrop would close the modal (default backdrop: true). Now the backdrop is static, and the new mousedown handler closes on outside click... except it doesn't close when the click is inside the diagram. OK, intentionally "clique fora do diagrama fecha o modal". Hmm, but here's an important subtlety: `backdrop: 'static'` also sets `.modal-static` class... no, that's only for the shake effect. 5. Now, is there a real bug: the mousedown handler is attached to `document` in capture phase, but only within `initCauseTreeScreen`. Fine. 6. What about the `isCauseNodeModalOpen()` being used in node click handlers — the `$modal.hasClass('show')`: during the modal's fade-out (after hide), `show` class is removed immediately? Bootstrap's hide removes `show` class then fades. Anyway the body class stays until hidden. Fine. 7. Potential issue: the `document.body.classList.remove('cause-tree-node-modal-open')` on 'hidden.bs.modal' — but if a nested/second modal show is triggered... not relevant. Now let me examine the template CSS changes more carefully for potential regressions: - `.cause-tree-floating-tools { max-height: calc(100% - 24px); }` — added. Since tools are absolutely positioned inside `.cause-tree-workspace`? Position absolute relative to nearest positioned ancestor (workspace, position: relative). `100%` = height of workspace. So max-height fine. - `.cause-tree-floating-tools-actions { min-height: 0; max-height: 100%; overflow-y: auto; ... }` — the actions container is a flex child of the row flex container. For `max-height: 100%` to be meaningful, the parent must have a definite height. The parent `.cause-tree-floating-tools` has `max-height: calc(100% - 24px)` but its height is content-based (flex row, align-items: flex-start). So `max-height: 100%` on the child resolves against the parent's height... For percentage max-height to work, the parent must have a definite height. The parent has no explicit height; percentage against an auto height typically resolves to `none` for max-height? Actually per spec, if the containing block's height depends on content, percentage heights are treated as auto (which for max-height = none). So `.cause-tree-floating-tools-actions { max-height: 100% }` may not constrain anything, meaning no internal scroll appears. Hmm, that's a potential real issue: the whole point of the change is "menu flutuante não cortar em telas pequenas" — if the max-height:100% doesn't resolve, scroll wouldn't appear and the bottom buttons would still be cut off... BUT the parent's `max-height: calc(100% - 24px)` does constrain... wait, the parent's max-height also uses a percentage against its containing block. The parent is `position: absolute` with `top: 18px; right: 18px` — an absolutely positioned element with `top` set but no `bottom` — its containing block is the workspace with definite height (height: 100% of stage which has definite?). Hmm, `.cause-tree-workspace { height: 100% }`, `.cause-tree-stage { flex: 1 1 auto; min-height: 0; max-height: 100%; }`. So the stage's height is determined by flex layout — definite-ish. For an absolutely positioned element, percentage max-height resolves against the containing block's height (padding box), which is definite here. So `max-height: calc(100% - 24px)` on the floating tools works. Then for the child `.cause-tree-floating-tools-actions` — percentage max-height against parent's height, which is auto (content-based but constrained by max-height). Per CSS 2.1, if the containing block's height depends on content, percentage computed value for max-height is... For max-height, spec says: "The percentage is calculated with respect to the height of the generated box's containing block. If the height of the containing block is not specified explicitly (i.e., it depends on content height), and this element is not absolutely positioned, the percentage value is treated as 'none'." So `max-height: 100%` would be treated as none → the actions column won't scroll internally. Instead, the parent `.cause-tree-floating-tools` with align-items: flex-start... the column child would overflow the parent's max-height without clipping (overflow visible by default on parent). Actually the child has overflow-y: auto, but with max-height none, the child grows to content height, and it overflows the parent's box. Parent doesn't clip (overflow visible). So the buttons could again overflow past the bottom of the screen → the original bug not fully fixed? Hmm, but wait: is the parent's max-height going to cause the flex layout to shrink the children? In a flex row container with align-items: flex-start, the cross-size (height) of items is content-based; the container's max-height doesn't force items to shrink. So yes, items overflow. Hmm, this is speculative but a plausible real issue. But is it worth reporting? The user rules say focus on real issues. This is a CSS reasoning that could be wrong. Let me check whether the floating tools also contain the selection indicator. Let me read the markup of the tab to see the structure of `.cause-tree-floating-tools` and `.cause-tree-floating-tools-actions`. Actually, wait. Maybe the parent has an explicit height somewhere. Let me check the template markup.
Tool Calls (1)
code_search
Show Details
{"search_text": "cause-tree-floating-tools|cause-tree-workspace|cause-tree-stage", "file_patterns": ["templates/ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig"]}
No matches found
Request #31 deepseek-flash P:28.79K C:63 CR:28.54K CW:0 1202ms
Reasoning
Hmm, no matches - maybe the markup is in another file. Let's search broadly.
Tool Calls (1)
code_search
Show Details
{"search_text": "cause-tree-floating-tools"}
File: public/js/ssma/tree_view.js
Match lines: 2
597|      if (target.closest('.cause-tree-floating-tools')) {
616|      return Boolean(target.closest('.cause-tree-floating-tools'));

File: templates/ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig
Match lines: 9
52|    .cause-tree-floating-tools {
64|    .cause-tree-floating-tools-actions {
500|    body.cause-tree-node-modal-open .cause-tree-floating-tools {
523|        .cause-tree-floating-tools {
530|        .cause-tree-floating-tools-actions {
547|        .cause-tree-floating-tools {
553|        .cause-tree-floating-tools-actions {
580|                <div class="cause-tree-floating-tools">
586|                    <div class="cause-tree-floating-tools-actions">

Request #32 deepseek-flash P:29.06K C:91 CR:28.8K CW:0 1435ms
Tool Calls (1)
file_read
Show Details
{"file_path": "templates/ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig", "start_line": 555, "end_line": 642}
File: templates/ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig (Total lines: 642)
IS_TRUNCATED: false
LINE_RANGE: 555-642
555|        }
556|
557|        .cause-tree-tool-group {
558|            padding: 4px;
559|            gap: 3px;
560|        }
561|
562|        .cause-tree-tool-btn {
563|            min-width: 32px;
564|            min-height: 32px;
565|        }
566|    }
567|</style>
568|
569|    <div class="cause-tree-stage">
570|        <div
571|            class="cause-tree-workspace js-cause-tree-screen"
572|            data-initial-tree="{{ causeTreePayload.tree|json_encode|e('html_attr') }}"
573|            data-initial-meta="{{ causeTreePayload.meta|json_encode|e('html_attr') }}"
574|            data-routes="{{ causeTreeRoutes|json_encode|e('html_attr') }}"
575|            data-category-options="{{ causeTreeCategories|json_encode|e('html_attr') }}"
576|            data-closing-options="{{ causeTreeClosureTypes|json_encode|e('html_attr') }}"
577|            data-origin-url="{{ causeTreeCurrentCard.origin_url|default('')|e('html_attr') }}"
578|        >
579|            <div class="cause-tree-canvas">
580|                <div class="cause-tree-floating-tools">
581|                    <div class="cause-tree-selection-indicator d-none">
582|                        <span class="cause-tree-selection-label js-cause-tree-active-label">Causa selecionada</span>
583|                        <span class="cause-tree-selection-title js-cause-tree-active-title">Nenhuma causa selecionada</span>
584|                        <div class="cause-tree-selection-meta js-cause-tree-active-meta">Selecione uma causa na árvore</div>
585|                    </div>
586|                    <div class="cause-tree-floating-tools-actions">
587|                        <div class="cause-tree-tool-group">
588|                            <button type="button" class="cause-tree-tool-btn js-cause-tree-toggle-selection-indicator" title="Mostrar causa selecionada">
589|                                <i class="fa-regular fa-eye"></i>
590|                            </button>
591|                            <button type="button" class="cause-tree-tool-btn js-cause-tree-edit-node" title="Editar causa" disabled>
592|                                <i class="fa-regular fa-pen-to-square"></i>
593|                            </button>
594|                            <button type="button" class="cause-tree-tool-btn js-cause-tree-add-action" title="Alternar status da ação" disabled>
595|                                <i class="fa-solid fa-list-check"></i>
596|                            </button>
597|                            <button type="button" class="cause-tree-tool-btn js-cause-tree-delete-node" title="Remover causa" disabled>
598|                                <i class="fa-regular fa-trash-can"></i>
599|                            </button>
600|                        </div>
601|                        <div class="cause-tree-tool-group">
602|                            <button type="button" class="cause-tree-tool-btn js-cause-tree-add-root" title="Adicionar causa">
603|                                <i class="fa-regular fa-plus"></i>
604|                            </button>
605|                            <button type="button" class="cause-tree-tool-btn js-cause-tree-close-node" title="Encerrar causa" disabled>
606|                                <i class="fa-regular fa-lock"></i>
607|                            </button>
608|                        </div>
609|                        <div class="cause-tree-tool-group js-cause-tree-viewport-controls">
610|                            <button type="button" class="cause-tree-tool-btn cause-tree-tool-btn--icon js-cause-tree-zoom-in" title="Aumentar zoom">
611|                                <i class="fa-regular fa-magnifying-glass-plus"></i>
612|                            </button>
613|                            <button type="button" class="cause-tree-tool-btn cause-tree-tool-btn--icon js-cause-tree-zoom-out" title="Diminuir zoom">
614|                                <i class="fa-regular fa-magnifying-glass-minus"></i>
615|                            </button>
616|                            <button type="button" class="cause-tree-tool-btn cause-tree-tool-btn--icon js-cause-tree-fit-view" title="Centralizar árvore">
617|                                <i class="fa-regular fa-expand"></i>
618|                            </button>
619|                        </div>
620|                    </div>
621|                </div>
622|                <div class="cause-tree-empty js-cause-tree-empty">
623|                    <div>
624|                        <h2 class="h4 mb-2">Nenhuma causa disponível</h2>
625|                        <p class="mb-0">Crie a primeira causa para começar a montar a árvore da ocorrência.</p>
626|                    </div>
627|                </div>
628|                <svg class="js-cause-tree-svg" aria-label="Árvore de causas"></svg>
629|            </div>
630|        </div>
631|    </div>
632|
633|    <div class="d-none" aria-hidden="true">
634|        {% include 'components/ui/_member_avatars_stack.html.twig' with {
635|            members: [
636|                { id: 1, name: 'Conexão a', initials: 'a', avatar: null }
637|            ],
638|            max_visible: 3,
639|            size: 18
640|        } %}
641|    </div>
642|
Request #33 deepseek-flash P:30.45K C:2.03K CR:29.06K CW:0 9973ms
Reasoning
So `.cause-tree-floating-tools` is inside `.cause-tree-canvas`, absolutely positioned relative to `.cause-tree-canvas` (position: relative). Good. Now the parent's max-height: `.cause-tree-floating-tools { max-height: calc(100% - 24px); }` — percentage against `.cause-tree-canvas` height. `.cause-tree-canvas { position: relative; height: 100% }` inside `.cause-tree-workspace { height: 100% }` inside `.cause-tree-stage { flex: 1 1 auto; min-height: 0; max-height: 100% }`. The stage's height depends on flex layout, so it may not be a "specified explicitly" height for the canvas's `height: 100%`... Actually `.cause-tree-canvas { height: 100% }` resolves against `.cause-tree-workspace` height which is `height: 100%` of the stage. The stage's height is determined by the flex container — it's not `auto` in a percentage-resolution sense? In practice, browsers resolve percentages against flex-item definite sizes when the flex item's size is determinate (flex-basis etc.). This tends to work in modern browsers (with flex:1 1 auto... it's a bit iffy but they are typical layouts that work). Anyway, for `max-height` on the absolutely positioned child, its containing block is `.cause-tree-canvas` (positioned), height = 100% of workspace. That should be definite in practice. Then `.cause-tree-floating-tools-actions { max-height: 100% }` where parent is `.cause-tree-floating-tools` — an absolutely positioned element with `top:18px; right:18px` and no height set. Its height is auto (shrink-to-fit / content). Per CSS spec, percentage max-height against auto-height containing block → treated as none for non-absolutely-positioned elements. So the child won't be constrained. Hence the internal scroll wouldn't kick in, and the tool buttons could overflow beyond the parent's max-height, potentially still being cut off by the canvas's `overflow: hidden`. Since `.cause-tree-canvas { overflow: hidden }`, the overflowing buttons would be cut. Hmm, so the fix may not actually work in some cases? But wait: does the parent's `max-height` + the flex container's default `align-items: flex-start` mean the items are laid out at the top with their natural height, overflowing the parent box? Yes, and parent's overflow is visible, so children render beyond the parent, but the canvas clips at its own boundary. The parent is at top:18px; child overflows downward past the container bottom... it will be clipped by the canvas overflow hidden at canvas bottom. So the bottom buttons might still be clipped, unless the max-height:100% resolves. Hmm, but actually, there's a subtlety: `.cause-tree-floating-tools` is `display: flex; flex-direction: row`. Its children are flex items in a row, so their cross size (height) — for a flex item with `align-self: auto` → `align-items: flex-start`, the item's cross size is its content-based height (not stretched). So the actions column height = content. max-height:100% of parent's auto height → treated as none. So no internal scroll or constraint... unless browsers resolve the percentage against the parent's used height. Actually! Important: for percentage heights, the spec says resolve against the containing block's height. If the containing block's height depends on content, percentage is treated as auto. So `max-height: 100%` → `none`... but here's the thing: the parent has a max-height constraint; the parent's used height would be min(content, max-height). If content > max-height, the parent's used height = max-height (24px less than canvas), which is NOT content-dependent... but during layout the percentage resolution happens before? Browsers typically treat a percentage against an auto-height parent as `auto`/`none`. In practice, Chrome resolves percentages of max-height against the parent's used height after layout in many cases? Actually the classic behavior: percentage height against auto parent height → auto. For max-height, Chrome follows the same (treated as none). Hmm, actually there's a nuance: since the parent has a max-height that gives it a definite height... some browsers (Chrome) do resolve percentage heights of children against a parent whose height is definite due to max-height? Not certain. Let me check whether the same pattern is used elsewhere in the codebase, e.g., `.mhs-bottom-sheet` or other templates where `max-height: 100%` combined with a parent max-height works. Not needed. This CSS concern is somewhat speculative; I'd better verify by checking whether there's a wrapper with definite height. Hmm. Actually, let me reconsider: `.cause-tree-floating-tools` has `max-height: calc(100% - 24px)` on an absolutely positioned element. But the element's height is auto. For flex items inside it, the percentage resolution against "content-based height" — Chrome does resolve percentage max-height against an auto-height parent as `none`. Let me recall... In Chrome, a child with `height: 100%` inside a parent with `height: auto` → height resolves to auto (content). Same for max-height. So the child's max-height: 100% is treated as none. I'm fairly confident. But hold on — maybe the intent was for the flex container's max-height to apply and the flex algorithm to shrink the items. Since the flex container has `align-items: flex-start`, items don't stretch. But max-height on the container in a flex layout: the flex algorithm computes the container's content height = max of items' heights; then clamps to max-height. Items overflow. So no scroll within `.cause-tree-floating-tools-actions`. Hmm, this is a functional issue (the fix not achieving goal), but it's a CSS detail that I can't test. It could be a valid finding but risky. The instructions say to focus on real issues and avoid speculation. Given the confirmed findings already cover the CSS-organizational aspect, maybe I should mention something else. Let me look for other issues in the JS diff more concretely. Potential issue: the new `document.addEventListener('mousedown', ...)` handler hides the modal when clicking outside the diagram — but `hidden.bs.modal` removes the body class. However, when the modal is hidden via `$modal.modal('hide')` triggered by mousedown while the user is still holding the mouse button... fine. Another potentially important issue: On the mousedown-outside path, the modal closes, but the click event is NOT prevented/stopped. So the click on the underlying element may still fire. But since `body.cause-tree-node-modal-open > * { pointer-events: none }` blocks it... Hmm, but here's the catch: the CSS class `cause-tree-node-modal-open` blocks pointer events for everything under body. So the "click on header/tabs not executing" requirement is achieved by CSS, not by JS. And the modal closes because mousedown target is body/descendant not in diagram. Wait — but that's contradictory: if pointer-events: none is applied to all body children (including the header, tabs, etc.), then their descendants can't be hovered/clicked. OK, that's the intent. However, there's a big side effect: `body.cause-tree-node-modal-open > *` includes the modal container itself (`#ssmaCauseTreeNodeModal`) which is a direct child of body — it has pointer-events none, but `.modal-dialog` auto. Fine. Now, the toast container issue is confirmed. What about `hidden.bs.modal` – if the user clicks Esc, Bootstrap hides → class removed. Fine. Let me now examine other potential issues: The `click` capture listener on document is registered for the whole document, and it does `event.stopPropagation()` when the flag is set. Consider: user mousedowns on floating tools → flag true, modal hides, mousedown propagation stopped. Then click event fires → target is the floating tools button → flag check passes → preventDefault + stopPropagation + reset. Good. But in that path, the modal hide triggers a transition; after hidden, the class removed. The click's stopPropagation is fine. Another thing: `ignoreNextFloatingToolsClick` and the floating tools include buttons that open other modals (e.g., edit, add). Those clicks are swallowed. Fine. Now, what about the scenario where the modal is not open and the user clicks the floating tools — no effect (isCauseNodeModalOpen false). Good. Let me look at whether there's a Kendo/other library. No. Let me consider whether `$modal.modal({backdrop:'static'})` could break the mobile bottom sheet's swipe-down-to-close behavior. There might be a global JS handling `.bottom-sheet-handle` drag → requires non-static backdrop? Let's search for `mhs-bottom-sheet` or `bottom-sheet-handle` JS.
Tool Calls (1)
code_search
Show Details
{"search_text": "bottom-sheet-handle|modal-bottom-sheet", "file_patterns": ["public/js/", "public/css/"]}
No matches found
Request #34 deepseek-flash P:32.49K C:882 CR:32.26K CW:0 4976ms
Reasoning
No JS handles it. Fine. Let me check whether there's an existing modal-open class conflict: `body.modal-open` is Bootstrap's. This new class is distinct. Now, one more important scenario: the requirement mentions "Clique fora do diagrama (header, abas, área escurecida) fecha o modal." But with `backdrop: 'static'`, the backdrop... fine, handled. Let me now think about the `isEventInsideCauseTreeDiagram` check returning false when the target is inside `.cause-tree-floating-tools` — but floating tools are checked before anyway. Redundant but harmless. Now, are there any issues regarding the new CSS `body.cause-tree-node-modal-open .js-cause-tree-svg:active { cursor: grabbing; }`? Fine. What about `#ssmaCauseTreeNodeModal { pointer-events: none; }` — this rule is in the tab template's `<style>` block, which is loaded whenever the tab is rendered. Fine. Another: `.cause-tree-floating-tools { max-height: calc(100% - 24px); }` — with the top 18px, the tools' bottom could exceed canvas by 6px... 18 + (100% - 24px) = 100% - 6px. Fine. Now let me check the media query `@media (max-width: 991.98px), (max-height: 900px)` — the `max-height: 900px` condition applies to very common desktop viewports (e.g., 1920x1080 minus browser chrome → viewport height ~900-950). This means the compact layout will apply to most laptops. Hmm, is that a real issue? It changes the floating tools positioning from top:18/right:18 to top:8/right:8 and reduces padding on many desktops. That's a visual regression risk: `max-height: 900px` is a very common viewport height (1366x768 → 768 height; 1920x1080 → ~940 viewport height after chrome). Actually 900px viewport height is quite tall; many laptops have 768-800. Desktop 1080p screens give ~900-960. So this media query would affect a large portion of desktop users, changing the tools' appearance (smaller buttons/padding) even when there's plenty of vertical space. This is a legitimate maintainability/UX concern: the desktop layout would be unintentionally compacted. Given requirement said "compactação do menu flutuante em viewports menores", using max-height:900px seems broad. Hmm, it's plausible-intended (to handle 900px-height windows). Not necessarily a bug. I'd rather not report a subjective UI threshold. Hmm. Let me focus and check whether there's a real bug involving the other modals: `$closeModal`, `$deleteModal`, `$deactivateActionModal`, `$removeClosureConfirmModal`. Are these direct children of body? They're probably in other partials rendered by the tab. If a user opens the delete confirm modal while the cause node modal is open... can't happen since the delete button is in the floating tools (clicking closes the modal instead). Hmm, but wait — actually, is there a scenario where the cause-node modal is open AND another modal is shown? Requirement: "Modal só fecha por Cancelar/X/salvar/Esc, clique fora do diagrama ou clique no menu lateral." So no other modal opens while cause modal is open. Fine. Hmm — but what about the submit action: when the user clicks "Salvar causa", is there a validation modal? Let's check the confirm dialog around line 1496 `.modal('show')`. Let me read 1470-1550.
Tool Calls (1)
file_read
Show Details
{"file_path": "public/js/ssma/tree_view.js", "start_line": 1460, "end_line": 1552}
File: public/js/ssma/tree_view.js (Total lines: 1751)
IS_TRUNCATED: false
LINE_RANGE: 1460-1552
1460|  
1461|    elements.editNode.on('click', () => {
1462|      const selectedNode = getSelectedNode();
1463|      if (!selectedNode || selectedNode.parentId === null) return;
1464|      openModal('edit');
1465|    });
1466|
1467|    elements.closeNode.on('click', () => {
1468|      const selectedNode = getSelectedNode();
1469|      if (!selectedNode || selectedNode.parentId === null) {
1470|        return;
1471|      }
1472|
1473|      if (isNodeClosed(selectedNode)) {
1474|        openCloseModal();
1475|        return;
1476|      }
1477|
1478|      if (!isLeafNode(selectedNode)) {
1479|        notify('error', 'Somente causas no final do ramo podem ser encerradas.');
1480|        return;
1481|      }
1482|
1483|      openCloseModal();
1484|    });
1485|  
1486|    elements.addAction.on('click', function handleAddAction() {
1487|      const selectedNode = getSelectedNode();
1488|      if (!selectedNode || selectedNode.parentId === null) {
1489|        return;
1490|      }
1491|
1492|      if (selectedNode.actionActive && nodeHasActionPlanData(selectedNode)) {
1493|        $deactivateActionModal
1494|          .data('nodeId', selectedNode.id)
1495|          .data('triggerButton', this)
1496|          .modal('show');
1497|        return;
1498|      }
1499|
1500|      updateNodeActionState($(this), selectedNode.id);
1501|    });
1502|
1503|    elements.toggleSelectionIndicator.on('click', () => {
1504|      if (!(state.tree && state.tree.id)) {
1505|        return;
1506|      }
1507|
1508|      setSelectionIndicatorVisibility(!isSelectionIndicatorVisible);
1509|    });
1510|  
1511|    elements.deleteNode.on('click', () => {
1512|      const selectedNode = getSelectedNode();
1513|      if (!selectedNode || selectedNode.parentId === null) return;
1514|      $deleteModal.data('nodeId', selectedNode.id);
1515|      $deleteModal.find(SELECTORS.deleteNodeTitle).text(selectedNode.title || 'esta causa');
1516|      $deleteModal.modal('show');
1517|    });
1518|
1519|    $deactivateActionConfirmButton.on('click', function handleDeactivateActionConfirm() {
1520|      const nodeId = $deactivateActionModal.data('nodeId');
1521|      const triggerButton = $deactivateActionModal.data('triggerButton');
1522|      if (!nodeId || !triggerButton) return;
1523|
1524|      $deactivateActionModal.modal('hide');
1525|      $deactivateActionModal.removeData('nodeId').removeData('triggerButton');
1526|      updateNodeActionState($(triggerButton), nodeId);
1527|    });
1528|  
1529|    elements.zoomIn.on('click', () => adjustZoom(1.2));
1530|    elements.zoomOut.on('click', () => adjustZoom(0.82));
1531|    elements.fitView.on('click', () => fitView(true));
1532|
1533|    $closeModal.find(SELECTORS.closeTypeInput).on('change', () => {
1534|      toggleConnectedNodeField();
1535|    });
1536|  
1537|    $form.on('submit', (event) => {
1538|      event.preventDefault();
1539|  
1540|      const payload = {
1541|        parentId: $modal.find(SELECTORS.parentId).val(),
1542|        title: String($modal.find(SELECTORS.titleInput).val() || '').trim(),
1543|        category: String($modal.find(SELECTORS.categoryInput).val() || '').trim(),
1544|        description: String($modal.find(SELECTORS.descriptionInput).val() || '').trim(),
1545|        actionActive: $modal.find(SELECTORS.actionActiveInput).val() === '1' ? 1 : 0
1546|      };
1547|  
1548|      if (!payload.title) {
1549|        notify('error', 'Informe um título para a causa.');
1550|        return;
1551|      }
1552|  
Request #35 deepseek-flash P:34.43K C:4.05K CR:33.28K CW:0 17724ms
Reasoning
Notice: when the user saves a node, `$modal.modal('hide')` is called; `body.cause-tree-node-modal-open` removed on hidden. Fine. Now, a subtle problem: `openModal` (create/edit) is triggered from buttons inside the floating tools. But with the new mousedown handler, when the modal is closed, no interference. Fine. But wait! There's a scenario: The "Adicionar causa" button in floating tools. First click: modal opens (no isCauseNodeModalOpen). Good. Hmm, another scenario: The user opens the cause modal, then clicks "Adicionar causa" button in the floating tools → mousedown handler: floating tools → hide modal, swallow click. So the modal closes, and the user must click again to open. Per requirement, correct. Now, let's think about a possible bug with the mousedown handler running in the capture phase on document: it's registered before... hmm, in capture phase at document level, the handler runs before any other handler for the mousedown. It calls `$modal.modal('hide')`. That's fine. But here's a real issue: `event.preventDefault()` in the mousedown handler inside floating tools prevents focus changes... minor. Let me think about whether the buttons in the floating tools are `disabled` - they appear disabled before selection. Clicking them keeps them blocked. Another: The floating tools include `.js-cause-tree-viewport-controls` group (zoom in/out/fit). Per requirement, clicking them with the modal open should close the modal and not zoom. But the requirement ALSO says the diagram can be zoomed via scroll while the modal is open. So zoom buttons are blocked but wheel zoom works. Slightly odd UX but per spec. Now, is there any issue about the mousedown handler hiding the modal when the user starts a drag on the SVG but the initial target is not within the svg (e.g., starts on the empty-state overlay `.cause-tree-empty`)? `.cause-tree-empty` is inside the canvas but not the svg; it's `display:none` unless visible. If there's no tree, `is-visible` displays it. With an empty tree the modal can't be open anyway (adding the first cause opens the modal from the floating tools... hmm, actually "Adicionar causa" opens the modal; while it's open, the empty state is visible (covering the canvas with `inset: 0` and padding). If the user clicks on the empty-state area (the diagram area) while the modal is open... the target is `.cause-tree-empty > div` — not `.js-cause-tree-svg` nor `.cause-tree-canvas`?? Wait, `.cause-tree-empty` is a child of `.cause-tree-canvas`, so `target.closest('.js-cause-tree-svg, .cause-tree-canvas')` returns the canvas → treated as inside diagram → modal doesn't close. Hmm, but does the empty state have pointer-events? It's a descendant of a body child with pointer-events: none (inherited) → the empty overlay has pointer-events none → clicks pass through to... the canvas (also pointer-events none) → svg? The svg has pointer-events auto → target = svg (if the click is within the svg, which fills the canvas). So target is the svg → inside diagram → modal stays open. Consistent with "clique no diagrama não fecha". But with an empty tree, is dragging on the svg meaningful? No tree → not much. Not an issue. OK, I think the substantive findings are: 1. Confirmed ones (flag, duplicate helpers, pointer-events on body children, god CSS). What else could be genuinely new and real? Let me think about the `hidden.bs.modal` handler + the fact that `$modal` is the node modal. When the user clicks outside to close, `modal('hide')` is invoked. Fine. Potential issue: keyboard `keyboard: true`: previously (default) Esc worked too. No change. Let me think about `$modal.modal({...})` being called at init: Bootstrap's `.modal(options)` with `show: false` just initializes. However, calling `.modal({...})` *after* the modal has been initialized elsewhere... not. Hmm — one thing: Bootstrap 4's `modal('show')` on an element with `backdrop: 'static'` adds class `modal-static` only if `backdrop === 'static'`? Actually in Bootstrap 4, `_showBackdrop` adds `modal-static` class to the backdrop when `_config.backdrop === 'static'`, causing a "shake" animation on click. Actually the `.modal-static` class applies `transform: scale(1.02)` on click of the backdrop — but only when `backdrop: 'static'` AND `keyboard: false`? Let me recall Bootstrap 4 source: ```js _showBackdrop(callback) { ... if (this._config.backdrop === 'static') { this._backdrop[0].classList.add(ClassName.STATIC) } ... } ``` Hmm, in Bootstrap 4.6: ```js _showBackdrop(callback) { $('<div class="' + ClassName.BACKDROP + '"/>') .addClass(this._config.backdrop === 'static' ? ClassName.STATIC : ClassName.FADE) .appendTo(document.body) ``` Yes! Bootstrap 4.6 adds the `modal-static` class when backdrop is 'static' — hmm actually let me be careful. In BS 4.6: ```js _showBackdrop(callback) { const animate = $(this._element).hasClass(ClassName.FADE) if (this._isShown && this._config.backdrop) { this._backdrop = document.createElement('div') this._backdrop.className = ClassName.BACKDROP if (animate) { this._backdrop.classList.add(ClassName.FADE) } $(this._backdrop).appendTo(document.body) $(this._element).on(Event.CLICK_DISMISS, (event) => { if (this._ignoreBackdropClick) { ... } if (this._config.backdrop === 'static') { this._triggerBackdropTransition() return } ... ``` In 4.6, `_triggerBackdropTransition` adds `modal-static` to the element, not the backdrop. And that only happens when the backdrop is clicked while static. Since the backdrop now has pointer-events none (new CSS), the backdrop click won't be registered at all — the click lands on... hmm, the `CLICK_DISMISS` handler is bound on `this._element` (the modal itself), and the click event from the backdrop element wouldn't propagate to the modal element (they're siblings). Right, Bootstrap relies on the backdrop being a separate element with its own click listener? Let me check: Bootstrap 4.6 binds `Event.CLICK_DISMISS` on `$(this._element)` — and the backdrop is `document.body`'s child, a sibling of the modal. Hmm, then how does clicking the backdrop trigger dismissal? In BS 4, the modal element `.modal` covers the full screen with the backdrop behind it... Actually no: the `.modal` element is `position: fixed; inset: 0` with the backdrop as a sibling placed before it in DOM, and both are `position: fixed` with the backdrop having a lower z-index. So clicking the "shaded area" actually hits the `.modal` element itself (which is full-screen), not the `.backdrop`. That's why the click handler is on `this._element`. Right: `.modal` is full-screen transparent, `.modal-dialog` is the visible box. So in this new implementation: `#ssmaCauseTreeNodeModal { pointer-events: none; }` means clicks on the shaded area do NOT hit the modal element; they fall through to `body`/html (backdrop has pointer-events none too). So the mousedown handler on document gets target=body → hide. Good; they intentionally replaced Bootstrap's backdrop dismiss with their own. But wait — there's an important consequence! `_triggerBackdropTransition` (the shake) is thereby bypassed. Not important. Hmm, but here's a real potential issue: since `#ssmaCauseTreeNodeModal` has `pointer-events: none` globally (not gated by modal open), when the modal is open the `.modal` element can't receive clicks. That's OK. Now: with pointer-events none on the whole body children, does the *scroll* work? `.cause-tree-floating-tools-actions` scroll needs wheel events; pointer-events auto on floating tools → wheel works. Hmm, what about the modal's own body scroll (`.modal-body` overflow-y auto)? The user might need to scroll the form. The wheel event over the modal-body: `.modal-dialog { pointer-events: auto }` → descendant modal-body inherits auto → wheel works. Good. Now let me consider: does `body.cause-tree-node-modal-open > *` break the ability to click on *other* modals that were already open, e.g. the close modal? Not possible. Hmm, what about a nested scenario: The user opens the cause node modal, then a `showToast` error appears... covered. Let me look for anything else suspicious. Let me re-read the diff for the template CSS: added `max-height: calc(100% - 24px)` to `.cause-tree-floating-tools`. The confirmed finding #4 covers the god-CSS issue. Should I report the `.cause-tree-floating-tools-actions { max-height: 100% }` percentage-resolution issue? Let me reason more concretely. The parent `.cause-tree-floating-tools` is absolutely positioned with `top: 18px; right: 18px`, `display: flex`, no `height`. Its containing block is `.cause-tree-canvas` (position: relative). The parent's height is auto → content-based, but capped by max-height. For the child `.cause-tree-floating-tools-actions` (a flex item of that row), `max-height: 100%` — percentage max-height resolves against the containing block height, which for a flex item is the flex container's content box height... The flex container's height is auto/content-based → percentage treated as `none` per CSS 2.1 §10.7 ("If the height of the containing block is not specified explicitly and the element is not absolutely positioned, the percentage value is treated as 'none'"). Hmm, but for max-height the spec says the same. So `max-height: 100%` → none → no scroll and no clamping. The buttons overflow the parent, and eventually get clipped by `.cause-tree-canvas { overflow: hidden }` — which would reproduce the original bug (bottom buttons cut off) on short screens. Wait, but does the parent's max-height help? The parent is a flex container with row direction; items are placed along the main axis (horizontal). The container's cross size (height) = max item cross-size, clamped by max-height. When content exceeds max-height, items overflow the container (align-items: flex-start → items positioned at cross-start). No shrinking of items in the cross axis happens due to container max-height. So yes, items overflow visually, and since the container's overflow is visible, and `.cause-tree-canvas` clips, the bottom buttons get cut. Hmm, unless... `min-height: 0` on the child. Irrelevant. So this could be a real functional gap: the new `max-height: 100%` may not clamp the actions column, so the scroll added (`overflow-y: auto`) may never activate, leaving the bottom buttons (zoom/centralizar) clipped on short viewports — precisely the bug this PR claims to fix. But wait, the media queries reduce padding/gaps so the content may fit anyway. And maybe the actual fix works because... hmm. Actually hold on. Is the percentage really treated as none? In modern browsers, percentage heights/max-heights against a parent with a definite *max-height* but auto height: I believe Chrome resolves the percentage against the parent's used height only if the parent's height is definite. There's a known behavior: "percentages of an auto-height parent resolve to auto", but there's also the note that if the parent's height is constrained by max-height, browsers do NOT treat it as definite. So yes → none. Hmm, but wait, maybe the layout is: `.cause-tree-floating-tools` is a flex item of ... no, it's absolutely positioned. I'm fairly confident about the spec, and this is a plausible real defect. However, given that CSS behavior in browsers can be counterintuitive and I cannot test, and the reviewer guidelines say to report confirmed issues... I could report it as a medium-severity finding with a suggestion: give the parent a definite height (e.g., `height: calc(100% - 24px)` or wrap with flex and `min-height: 0`), or set max-height in px/vh on the actions container. Hmm, but is it truly the case that the parent won't constrain? Let me consider whether the parent's max-height being a percentage of canvas height works at all. If the canvas height is not definite (because `.cause-tree-canvas { height: 100% }` of `.cause-tree-workspace { height: 100% }` of `.cause-tree-stage { flex: 1 1 auto; max-height: 100% }`), then the parent's max-height percentage also resolves against... For absolutely positioned elements, the containing block is `.cause-tree-canvas`, whose height is a percentage itself... if the stage's height is indefinite, the canvas's `height: 100%` → auto, and then the abs-positioned child's percentage max-height → none as well. Interesting: so the whole max-height chain is questionable. In practice, within a flex column layout of the page, these heights generally resolve. Hmm. Given the uncertainty, maybe I should report this as a "question/alert" rather than a hard bug. The rules say main priority: duplicated logic/file too big. Hmm. Let me consider if there are other, more clear-cut findings. Another candidate: the new document-level `mousedown` listener closes the modal whenever the user mousedowns anywhere outside the diagram — including on elements with higher z-index, like the toast container or a browser UI. Consider: a toast appears; the user clicks the toast's close button → target is inside `#toastsContainerTopRight`, which is a direct child of body with `pointer-events: none` (because of the body rule), so... toasts already can't be clicked (confirmed finding #3). Another candidate: the backdrop click scenario. Since `#ssmaCauseTreeNodeModal` is `pointer-events: none`, and the backdrop too, the mousedown target will be `body`. Hmm, but wait: does `event.target` become `body` or `html`? Either way → not inside diagram → hide. OK. Hmm, another candidate: When the modal is open and the user clicks somewhere that bubbles... fine. What about double-hide: clicking outside triggers `$modal.modal('hide')`; and `isCauseNodeModalOpen()` remains true during the fade, so a second mousedown during fade calls hide again. Bootstrap handles repeated hide gracefully. Let me examine the `click` handler's flag for a possible *additional* bug beyond the confirmed one: If the user mousedowns inside floating tools and the modal hides, then the click event's target... the DOM may change: hiding the modal triggers `hidden.bs.modal` → removes body class → the floating tools remain same DOM. So the click still targets the tool button. Fine. But consider: `$modal.modal('hide')` called in mousedown on floating tools; then the click handler checks `isEventInsideFloatingTools(event)`. But is the button possibly removed/re-rendered between mousedown and click? No. OK, what about the interplay between the flag and clicks *outside* floating tools while the flag is set: `if (!ignoreNextFloatingToolsClick || !isEventInsideFloatingTools(event)) return;` — if the flag is set (stuck) and the user clicks elsewhere (e.g., a tool button that's now outside?), nothing happens. Covered by confirmed finding 1. Let me look at the rest of the JS file for anything related that might now be broken by the new CSS/JS — e.g., code that relies on clicking nodes to select while the modal is open? The `updateControls`/selection logic. Not relevant. Another thought: the `initCauseTreeScreen` now calls `$modal.modal({...})` with `show: false`. But there's also a `$modal.on('show.bs.modal')` handler. Fine. Hmm, what about other instances of `#ssmaCauseTreeNodeModal` on the page? Single. Let me consider `document.body.classList` usage vs. existing pattern of `$('body')`. Style only. Let me check if there's a `handleAjaxError`/CSRF concern — no new AJAX. So, what to report? Options: (a) The percentage max-height chain (CSS) — medium. (b) The `max-height: 900px` media query affecting desktop — low/medium (UX regression). (c) Nothing else. Also potentially: the new global document listeners are never removed when the screen is destroyed (SPA/tab switching). Does this app swap tabs via AJAX without full page reload? The tree view tabs — if the tab content is loaded via AJAX (e.g., Bootstrap tabs loading remote content), `initCauseTreeScreen` would run per DOMContentLoaded only (line 1748-1749 runs once). So no leak. Hmm wait, actually let me check line 1748 context and whether there's a re-init mechanism (e.g., MutationObserver or a custom event).
Tool Calls (2)
file_read
Show Details
{"file_path": "public/js/ssma/tree_view.js", "start_line": 1700, "end_line": 1751}
File: public/js/ssma/tree_view.js (Total lines: 1751)
IS_TRUNCATED: false
LINE_RANGE: 1700-1751
1700|
1701|  
1702|    window.__causeTreeSyncNodeActionCount = function syncNodeActionCount(nodeId, count) {
1703|      const node = getNodeById(Number(nodeId));
1704|      const nextCount = Math.max(0, Number(count) || 0);
1705|      if (node) {
1706|        node.actionCount = nextCount;
1707|        node.actionActive = nextCount > 0;
1708|      }
1709|
1710|      const wrap = document.querySelector(`.cause-tree-node-action-icon-wrap[data-node-id="${nodeId}"]`);
1711|      if (wrap) {
1712|        wrap.classList.toggle('is-inactive', nextCount <= 0);
1713|        wrap.style.color = nextCount > 0 ? '#10b981' : '#aab7bf';
1714|        wrap.setAttribute('title', nextCount > 1
1715|          ? `Esta causa possui ${nextCount} ações.`
1716|          : (nextCount > 0 ? 'Esta causa possui uma ação ativa.' : 'Esta causa não possui uma ação vinculada.'));
1717|        wrap.innerHTML = nextCount > 0
1718|          ? `<i class="${ACTION_ICON_CLASS}"></i><span class="cause-tree-node-action-count">${nextCount}</span>`
1719|          : `<i class="${ACTION_ICON_CLASS}"></i>`;
1720|      }
1721|
1722|      if (state.selectedNodeId === Number(nodeId)) {
1723|        updateControls();
1724|      }
1725|    };
1726|
1727|    window.addEventListener('resize', () => {
1728|      syncStageHeight();
1729|      if (state.tree && state.tree.id) renderTree();
1730|    });
1731|    syncStageHeight();
1732|  
1733|    if (state.tree && state.tree.id) {
1734|      state.selectedNodeId = state.meta.rootNodeId || state.tree.id;
1735|      renderTree();
1736|    } else {
1737|      loadTree();
1738|    }
1739|  
1740|    window.requestAnimationFrame(() => {
1741|      syncStageHeight();
1742|      if (state.tree && state.tree.id) {
1743|        renderTree();
1744|      }
1745|    });
1746|  }
1747|  
1748|  document.addEventListener('DOMContentLoaded', () => {
1749|    document.querySelectorAll(SELECTORS.screen).forEach((screen) => initCauseTreeScreen(screen));
1750|  });
1751|  
file_read
Show Details
{"file_path": "public/js/ssma/tree_view.js", "start_line": 1, "end_line": 60}
File: public/js/ssma/tree_view.js (Total lines: 1751)
IS_TRUNCATED: false
LINE_RANGE: 1-60
1|const SELECTORS = {
2|    screen: '.js-cause-tree-screen',
3|    svg: '.js-cause-tree-svg',
4|    empty: '.js-cause-tree-empty',
5|    selectionIndicator: '.cause-tree-selection-indicator',
6|    toggleSelectionIndicator: '.js-cause-tree-toggle-selection-indicator',
7|    addRoot: '.js-cause-tree-add-root',
8|    addAction: '.js-cause-tree-add-action',
9|    closeNode: '.js-cause-tree-close-node',
10|    editNode: '.js-cause-tree-edit-node',
11|    deleteNode: '.js-cause-tree-delete-node',
12|    zoomIn: '.js-cause-tree-zoom-in',
13|    zoomOut: '.js-cause-tree-zoom-out',
14|    fitView: '.js-cause-tree-fit-view',
15|    modal: '#ssmaCauseTreeNodeModal',
16|    closeModal: '#ssmaCauseTreeCloseModal',
17|    removeClosureConfirmModal: '#ssmaCauseTreeRemoveClosureModal',
18|    deactivateActionModal: '#ssmaCauseTreeDeactivateActionModal',
19|    deleteModal: '#ssmaCauseTreeDeleteModal',
20|    form: '.js-cause-tree-form',
21|    closeForm: '.js-cause-tree-close-form',
22|    modalTitle: '.js-cause-tree-modal-title',
23|    deleteNodeTitle: '.js-cause-tree-delete-node-title',
24|    deleteConfirm: '.js-cause-tree-delete-confirm',
25|    nodeId: '.js-cause-tree-node-id',
26|    parentId: '.js-cause-tree-parent-id',
27|    activeLabel: '.js-cause-tree-active-label',
28|    activeTitle: '.js-cause-tree-active-title',
29|    activeMeta: '.js-cause-tree-active-meta',
30|    closeModalTitle: '.js-cause-tree-close-modal-title',
31|    closeNodeId: '.js-cause-tree-close-node-id',
32|    closeTypeInput: '.js-cause-tree-close-type-input',
33|    closeConnectedWrapper: '.js-cause-tree-close-connected-wrapper',
34|    closeConnectedNodeInput: '.js-cause-tree-close-connected-node-input',
35|    closeCommentInput: '.js-cause-tree-close-comment-input',
36|    closeRemoveButton: '.js-cause-tree-remove-closure',
37|    closeRemoveConfirm: '.js-cause-tree-remove-closure-confirm',
38|    deactivateActionConfirm: '.js-cause-tree-deactivate-action-confirm',
39|    titleInput: '.js-cause-tree-node-title-input',
40|    categoryInput: '.js-cause-tree-node-category-input',
41|    descriptionInput: '.js-cause-tree-node-description-input',
42|    actionActiveInput: '.js-cause-tree-node-action-active-input'
43|  };
44|  
45|  const NODE_WIDTH = 308;
46|  const NODE_HEIGHT = 126;
47|  const TOP_SECTION_HEIGHT = 28;
48|  const MIDDLE_SECTION_HEIGHT = 52;
49|  const DEFAULT_CATEGORY_COLOR = '#355c9a';
50|  const ACTION_ICON_CLASS = 'fa-solid fa-list-check';
51|  const CLOSING_TYPE_DEFINITIONS = {
52|    closed: {
53|      value: 'closed',
54|      label: 'Encerrado',
55|      description: 'O ramo deixou de ser válido como explicação causal. A hipótese foi rejeitada ou considerada sem nexo suficiente com a ocorrência.',
56|      color: '#dc3545',
57|      iconClass: 'fa-solid fa-xmark'
58|    },
59|    connected: {
60|      value: 'connected',
Request #36 deepseek-flash P:39.99K C:952 CR:38.4K CW:0 4920ms
Reasoning
Now — the d3 zoom behavior on the SVG. Let me check how the zoom is bound: `state.svg.call(state.zoom)` at line 1042. Let's check the zoom setup to see if it uses `filter` to ignore events or `translateExtent`. Also check whether the zoom filter requires the target to be the svg (default filter `!event.ctrlKey || event.type === 'wheel'`). Fine. Important: does the d3 zoom's mousedown default behavior call `event.preventDefault()`/stopImmediatePropagation? d3-zoom's mousedown handler calls `event.preventDefault()`? d3-zoom `mousedowned` does `select(event.view).on("mousemove.zoom", ...)`. It calls `event.stopImmediatePropagation()` maybe. Doesn't matter; our capture handler runs first. Now, when the user drags the diagram with the modal open and the drag starts inside the svg, that's fine. But what if the drag starts inside the svg and ENDS outside (e.g., over the floating tools)? The mousedown already passed (inside diagram → no hide). Fine. What if the drag starts on the floating tools (mousedown → hide modal + preventDefault + stopPropagation)? Then the flag stuck. Covered. Hmm, let me now think about the "click on the shaded area closes the modal" path more: Since the backdrop has `pointer-events: none` — wait, the rule is `body.cause-tree-node-modal-open .modal-backdrop { pointer-events: none; }`. This only applies while the class is present. OK. Now, is there any chance the CSS `body.cause-tree-node-modal-open > *` breaks the *page scroll* or other interactions beyond pointer events? Only pointer events. Another idea: does the new `.cause-tree-floating-tools { max-height: calc(100% - 24px); }` plus `overflow-y: auto` on the actions and `overscroll-behavior: contain` interfere with d3 zoom's wheel handler? `.cause-tree-floating-tools` is excluded from the diagram (the SVG is a sibling), so wheel over the tools scrolls them; wheel over the svg zooms. But: d3-zoom's wheel listener on the svg... fine. Hmm, one more potentially important functional issue: the requirement says "Com o modal aberto, é possível arrastar e dar zoom no diagrama" and "nós... não devem ser acionados". The CSS `body.cause-tree-node-modal-open .js-cause-tree-svg { pointer-events: auto; cursor: grab; }` — but the `<foreignObject>` descendants (the node action tooltips, origin link) are `pointer-events: none !important` via the node rule. OK. But hold on: the node rule is `body.cause-tree-node-modal-open .cause-tree-node, body.cause-tree-node-modal-open .cause-tree-node * { pointer-events: none !important; }`. Fine. Now what about the *tooltip* initialization: tooltips on `.js-cause-tree-action-tooltip` elements (line 1204 `data-toggle="tooltip"`). Where are they initialized? If they're initialized on mouseenter... Let me check: `initActionTooltips` maybe uses `$el.tooltip()`. Not relevant to the diff. OK. Let me decide on the findings to report. I should provide at least the ones not already confirmed. Let me reconsider the CSS max-height chain issue more rigorously, because reporting a wrong CSS claim would be bad. Let me check if the repo has similar patterns where a parent with max-height percentages is used with a scrolling child. Search for `max-height: calc(100% - ` in templates/css to see if it's an established working pattern. Actually there's a much more direct way to verify intent: is there a sibling pattern? Let's search for "overscroll-behavior: contain" in css/templates.
Tool Calls (2)
code_search
Show Details
{"search_text": "max-height: calc\\(100% - ", "use_perl_regexp": true}
File: public/AdminLTE/css/adminlte.css
Match lines: 2
6236|  max-height: calc(100% - 1rem);
6415|    max-height: calc(100% - 3.5rem);

File: public/css/game_110/main.css
Match lines: 4
2883|    max-height: calc(100% - 4rem);
2936|        max-height: calc(100% - 3rem);
2949|        max-height: calc(100% - 2rem);
2961|        max-height: calc(100% - 1rem);

File: public/css/game_127/main.css
Match lines: 4
2191|    max-height: calc(100% - 4rem);
2244|        max-height: calc(100% - 3rem);
2257|        max-height: calc(100% - 2rem);
2269|        max-height: calc(100% - 1rem);

File: public/css/game_134/main.css
Match lines: 4
2876|    max-height: calc(100% - 4rem);
2929|        max-height: calc(100% - 3rem);
2942|        max-height: calc(100% - 2rem);
2954|        max-height: calc(100% - 1rem);

File: public/css/game_143/main.css
Match lines: 2
6801|  max-height: calc(100% - 60px); /* Deixa espaço para o header */
7298|    max-height: calc(100% - 50px);

File: public/css/game_template/main.css
Match lines: 4
2188|  max-height: calc(100% - 4rem);
2241|    max-height: calc(100% - 3rem);
2254|    max-height: calc(100% - 2rem);
2266|    max-height: calc(100% - 1rem);

File: public/css/ingles_avancado/main.css
Match lines: 2
6547|  max-height: calc(100% - 60px); /* Deixa espaço para o header */
7057|    max-height: calc(100% - 50px);

File: public/css/kanban-styles.css
Match lines: 2
93|    max-height: calc(100% - 20px);
155|        max-height: calc(100% - 10px);

File: public/css/pitch_ingles/main.css
Match lines: 5
6575|  max-height: calc(100% - 60px); /* Deixa espaço para o header */
7085|    max-height: calc(100% - 50px);
8645|  max-height: calc(100% - 2rem);
9289|    max-height: calc(100% - 1rem);
9346|    max-height: calc(100% - 0.5rem);

File: templates/ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig
Match lines: 3
61|        max-height: calc(100% - 24px);
526|            max-height: calc(100% - 16px);
550|            max-height: calc(100% - 12px);

code_search
Show Details
{"search_text": "overscroll-behavior: contain"}
File: public/js/adriana-chat.js
Match lines: 1
3687|         overscroll-behavior: contain !important;

File: templates/chat/components/adriana_side_chat.html.twig
Match lines: 1
566|        overscroll-behavior: contain !important;

File: templates/ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig
Match lines: 1
72|        overscroll-behavior: contain;

Request #37 deepseek-flash P:41.78K C:7.8K CR:40.83K CW:0 35720ms
Reasoning
Not enough to confirm. I'll consider whether to report the CSS max-height concern. The risk of a false positive is moderate. Let me actually verify: in the current DOM, is `.cause-tree-floating-tools` height auto? Yes, only max-height. Its parent `.cause-tree-canvas` has `height: 100%` and `position: relative`. For the child `.cause-tree-floating-tools-actions` with `max-height: 100%`: The containing block for a percentage max-height of a non-absolutely positioned element is the parent's content box height. The parent's height is auto. Per CSS 2.1 §10.7: "If the height of the containing block is not specified explicitly (i.e., it depends on content height), and this element is not absolutely positioned, the percentage value is treated as 'none'." So the child's max-height would be `none` → no internal scroll. HOWEVER — since the parent is a *flex container*, is the flex item's containing block... still the flex container's content box; height auto → percentage → none. Yes. Hmm, but the CSSWG resolved that for flex items and grid items, percentage sizes against an indefinite container resolve against... For flex items, if the flex container has a definite size in the cross axis, percentages resolve; otherwise behave as auto. Here the flex container's height is content-based → indefinite → behaves as auto. So the scroll likely never activates. That means the intended fix for the "menu cortado" bug relies on the media queries shrinking buttons (which they do: 36px, then 32px) plus the container max-height... but the container's max-height doesn't clip since overflow is visible, and the actions column doesn't scroll. Hmm, but actually if the parent's max-height clamps, then... the parent's background/border? The groups have their own backgrounds. The overflow beyond the parent's box is still visible and rendered (visible overflow) but clipped by the canvas at the bottom edge. So the bottom buttons may be partially outside the viewport → the original bug persists! Hmm, wait. There's another mechanism: the parent's max-height could cause the flex line's items to be... no. Hmm, but is the height of `.cause-tree-floating-tools` perhaps determined to be fully definite because of `align-items: flex-start`? No. Given the doubt, I might phrase the comment as "verificar se o scroll interno realmente ativa" — a question-style alert. The reviewer rules allow "alerta, não bloqueio". I think it's reasonable to raise as medium: the max-height: 100% on the actions column depends on a parent with auto height, so it may be ignored and the buttons may continue to be cut off — suggest `height: 100%` on the parent or using `max-height: 100vh` / `calc(100vh - ...)`. Hmm. But it's also possible that the max-height on the parent is enough because... hmm, no, items overflow. Actually wait. Let me reconsider: does the parent's `max-height` even do anything if the children overflow? The children are rendered, and overflow: visible → they extend beyond the parent's box. The canvas clips at its bounds (overflow: hidden). The parent is positioned top: 18px inside the canvas, so the content extending below the canvas bottom by (content height - (canvas height - 24px) - 18px) is clipped. The original bug was exactly this. With the media queries reducing button sizes (36→32px) and gaps, the total height shrinks: 3 groups. Let's compute approximate heights: group 1: 4 buttons × 36 + 3 gaps × 4 + padding 12 = 144+12+12 = 168; hmm the gaps within group in the compact query: `.cause-tree-tool-group { gap: 4px }`; toolbar actions gap 6px. Group 2: 2 × 36 + 4 + 12 = 88. Group 3: 3 × 36 + 8 + 12 = 128. Total = 168 + 88 + 128 + 2 × 6 = 396. Plus no selection indicator. So ~400px. On a 900px-tall viewport minus header etc., that fits. So in practice the fix works for many screens via the compact sizing, and the max-height is a safety net. So the CSS concern is mostly theoretical for common sizes; for extremely short viewports (e.g., 400px height), it wouldn't scroll and buttons would be cut. The media query at max-height:700px reduces further (32px). Still, on a 500px viewport height, 350px of tools + header might overflow. I think reporting this as a medium-priority alert is defensible: the scroll intended may never activate due to the parent's auto height. Let me think about whether to also mention `height: 100%` alternative. I'll phrase it carefully as "verifique/ajuste". Hmm, but I want to be careful: maybe in Chrome the percentage does resolve. Actually, I recall a well-known Chrome behavior where `height: 100%` inside an auto-height parent doesn't work — and there are many StackOverflow questions about `max-height: 100%` not working inside a flex parent with auto height. In flexbox specifically, if the flex container has `align-items: stretch` (default), the item's cross size is stretched to the container's height — but here it's `flex-start`. And the container's height comes from max-height... For a flex container with a max-height and content taller, the container's used height = max-height (definite!). Then does the child's percentage resolve against that definite used height? Per spec, percentage resolution requires the containing block's height to be *specified explicitly*; a max-height clamp does not make it definite. Browsers: Chrome treats the parent's height as indefinite in this case → child's `height: 100%` behaves as auto. I'm ~80% confident. But some browsers do resolve percentages against a parent's clamped max-height... Actually, I now recall that for **max-height** percentages, browsers may resolve against the parent's *used* height if the parent's height is definite post-layout. Hmm. I'll report it with clear hedging as an "Atenção" and suggest verifying in the browser; low/medium severity. Actually, the guidance says avoid speculation... A reviewer asking "this may not work, please verify" is acceptable as an alert but might be considered noise. Hmm. Let me weigh: The task expects me to find issues in the diff. I already have 4 confirmed findings. I should look harder for a concrete bug in the JS. Let me re-read the new JS block once more carefully: ```js $modal.modal({ backdrop: 'static', keyboard: true, show: false }); $modal.on('show.bs.modal', () => { document.body.classList.add('cause-tree-node-modal-open'); }); $modal.on('hidden.bs.modal', () => { document.body.classList.remove('cause-tree-node-modal-open'); }); ``` Consider: the user clicks "Adicionar causa" (floating tools) to open the modal → modal shows. Then the user presses Esc → hidden → class removed. Fine. But consider the "Cancelar" button: `data-dismiss="modal"` → Bootstrap hide → class removed. Fine. Now consider the `$form.on('submit')` → on error (e.g., server returns success=false), the modal stays open; class stays. Fine. Now: **Potential bug** — the `hidden.bs.modal` handler removes the body class. But `hide` is triggered from within `mousedown` (capture) on the floating tools; at that moment we also set the flag and stopPropagation. Bootstrap's `hide()` initiates a transition; if the modal has `.fade`, `hidden.bs.modal` fires after ~300ms. During that time, the body class remains, and `isCauseNodeModalOpen()` returns true. Now, the deferred click handler will `stopPropagation()` on the click (resetting the flag). OK. Now here's a thought: What about **`event.stopPropagation()` in the mousedown capture phase on document** — this prevents propagation to the target and also to other listeners on document (bubble). Since d3's zoom mousedown listener is registered on the SVG element, and it won't be reached. Good, intended. Now what about **`mousedown` on the floating tools but the modal is NOT open** → nothing. Good. Hmm, now one more: the click handler `if (!ignoreNextFloatingToolsClick || !isEventInsideFloatingTools(event)) return;` — the flag is only reset when a click inside the floating tools occurs. Suppose the user mousedowns on a floating tool, and the browser doesn't fire a click (e.g., the mouseup happens outside the tool). Then the flag stays set → next click inside the tools is swallowed (the confirmed finding). Also the reverse scenario in the opposite direction. I think beyond the confirmed findings, maybe there's an issue with `isEventInsideCauseTreeDiagram` excluding floating tools — not a bug. Let me now think about the template: is there a risk that the `#ssmaCauseTreeNodeModal { pointer-events: none; }` rule leaks and breaks other usage? No. OK, let me reconsider the `@media (max-width: 991.98px), (max-height: 900px)` change: the original rule was `@media (max-width: 991.98px)` with `.cause-tree-stage { padding: 0; }` and floating tools top/right 12px. The new one adds `max-height: 900px`, so on any viewport with height ≤ 900px the compact styles apply. On a typical 1920×1080 full-screen monitor, viewport height is ~939-960 → not affected. On a 1366×768 laptop → affected (768 ≤ 900) — that's expected/desired (small screen). On a browser window that's not maximized (e.g., 1400×850) → affected. Reasonable. I don't think that's worth a comment. Hmm, so maybe I should look at the `.cause-tree-tool-btn` min-width/min-height changes: 36px → in the second query 32px. Accessibility: WCAG recommends 44×44px touch targets; reducing to 32px on small screens makes tapping harder. Hmm, that's a mild UX/a11y regression. Could mention as low. The requirement explicitly asks to compact. Might be worth a brief low-severity note? Eh, it's a deliberate design decision; the reviewer rules say style findings without real effect should be low priority or skipped. Let me look for other real issues in the JS: maybe the new `document`-level mousedown handler closes the modal when the user interacts with the *other* modals' elements. Since those modals are body children with pointer-events none while the class is set... not reachable. Hmm, wait. Big one: **the toast container is confirmed blocked**, but what about the "Adicionar causa" modal being open and a `showToast` triggered by `notify('error', ...)` inside the modal (e.g., "Informe um título para a causa.")? That IS a real flow: the user submits the form with an empty title → `notify('error', ...)` → `showToast` displays a toast, but the toast container is `pointer-events: none` and, more importantly, the toast is rendered BEHIND/blocked? pointer-events: none doesn't hide it, just makes it non-interactive. But the confirmed finding said the toasts can't be dismissed/clicked. Also z-index: `#toastsContainerTopRight` z-index probably 9999 — the modal is z-index 1060. Hmm, pointer-events none only affects interaction, not visibility. The confirmed finding says users can't interact with the toast. That's already reported. So `showToast` while the cause node modal is open is broken → confirmed finding #3 covers it. OK. Also, is there a *validation* flow in this form using `ModalValidation`? The modal partial uses `use_validation_ui` false. The title is required via HTML `required` → browser validation popup. Fine. Hmm, another thought: the new mousedown handler is registered on `document` for every screen instance, and there's only one screen. Fine. Let me consider whether the mousedown handler could break the **double-click on the SVG to fit view**: with modal open, dblclick on the svg → d3 handler `dblclick.causeTreeFit` → fitView. Fine. Let me consider: with the modal open, clicking on a node: CSS makes nodes pointer-events none. But d3's node click handler exists; the CSS prevents it. Fine. Now: is `pointer-events: none` on `.cause-tree-node *` going to break the tooltip dismissal? Not relevant. Alright, maybe another angle: **the JS references the DOM id `#ssmaCauseTreeNodeModal` hardcoded in `isEventInsideCauseNodeModal`** instead of using `SELECTORS.modal`. That's a hardcode/duplication issue (maintainability, low). The SELECTORS.modal constant exists. This is a legit small maintainability point: if the modal id changes in the partial or in SELECTORS, this hardcoded selector silently breaks (the modal would be treated as outside, so mousedown inside the modal would... wait, if #ssmaCauseTreeNodeModal changes, `isEventInsideCauseNodeModal` would always return false, so mousedown inside the modal dialog would trigger `$modal.modal('hide')` → the modal closes whenever you click inside it! That's a real fragile coupling. Since SELECTORS.modal exists, using it is trivial. Hmm, but is this a "real issue"? It's a maintainability/duplication concern, low severity, worth a brief comment. Actually there's a subtlety: they'd want `SELECTORS.modal + ' .modal-dialog'`. That's a clean suggestion. Also the duplicate `.cause-tree-floating-tools` selector used in both `isEventInsideCauseTreeDiagram` and `isEventInsideFloatingTools` — part of the confirmed duplicate-helpers finding. Given the instructions to find real issues and not repeat confirmed ones, I can report: 1. Hardcoded `#ssmaCauseTreeNodeModal` instead of `SELECTORS.modal` (low, maintainability) — with the concrete risk that a rename would make clicks inside the modal close it. 2. The CSS percentage max-height on the actions column may not constrain/scroll (medium) — as an alert to verify. 3. Maybe: the a11y reduction of touch targets to 32px (low). I'll skip this or... The rules emphasize low priority style findings being brief. I could combine into one? Better to keep the comment list focused. Hmm, but is #2 too speculative? Let me think about whether I can verify by finding a similar existing working pattern... Let's check `.cause-tree-selection-indicator` etc. Not helpful. Alternatively, maybe I'm wrong about the flex behavior in a key way: The parent `.cause-tree-floating-tools` has `max-height: calc(100% - 24px)` and `display: flex; flex-direction: row`. When the flex container has a max-height that's smaller than the content, and `align-items: flex-start`, the items are NOT stretched or shrunk. Confirmed: overflow. So the only question is whether `.cause-tree-floating-tools-actions`'s `max-height: 100%` resolves. Even if it resolves (browsers do resolve it against the parent's used max-height in some cases?), the child would then be clamped to the parent's height → internal scroll appears. If it doesn't resolve → no clamp → overflow beyond the canvas → bottom cut. So the fix's effectiveness hinges on this. Reporting as an alert asking to validate in a short viewport is fair and useful. I'll mark it medium severity, category bug? Better: "other"/"bug"? I'd use category "bug" with severity "medium" but phrasing as a verification request. Hmm, the code_comment tool requires category/severity. I'll use category "bug", severity "medium". Hmm, if it's wrong, it's a false positive. Maybe severity "low"? The impact (buttons cut off) is the PR's core goal. I'll say medium. Actually, let me reconsider whether I should report it at all. Considering the PR's stated purpose ("menu não cortar"), a reviewer noting "the scroll may not activate because the parent's height is auto; consider height: 100% or a definite max-height" is a valuable, actionable review comment. I'll include it, clearly stating it needs verification in the browser at a short viewport. Also, should I mention the `.cause-tree-floating-tools` positioning/size when `max-height: 900px` triggers on desktop? I'll skip. One more possible issue to check in the JS: `document.body.classList.add` on `show.bs.modal`. What if another instance of this screen exists (two trees on one page)? Then two initCauseTreeScreen calls → each with its own document listener and each with its own `$modal` (the same modal element if the screen selector matches one). The mousedown listeners would both fire → both call their own `$modal.modal('hide')` (same modal) — fine. But `document.body.classList.remove` on hidden removes the class even if the other... only one modal. Fine. Let me also double-check the click handler guard's use of `isEventInsideFloatingTools` combined with the mousedown handler: For a *keyboard* click on a floating tool button (Enter key) while the modal is open: mousedown isn't fired by key; the click event fires with flag false → returns → the button action executes! So keyboard users can still activate floating tools while the modal is open, contradicting "não devem ser acionados". Hmm, that's an accessibility inconsistency: the button action (e.g., zoom, open add modal) would execute while the modal is open. Is this a real issue? Buttons can be focused... but wait, can they be focused? The body children have pointer-events: none, but focus is not affected by pointer-events; Tab navigation still works! So a keyboard user can Tab to the floating tools buttons and press Enter → the action executes (the d3 zoom via the button handler), and the modal stays open. Also, the elements behind (header, tabs) — pointer-events: none doesn't prevent keyboard focus/activation! So keyboard users can still activate header buttons and tabs while the modal is "blocking" everything else. Hmm! That's a real accessibility/behavior gap: the block is done purely with `pointer-events: none`, which doesn't block keyboard interaction (Tab + Enter/Space). Also `aria-hidden` isn't handled. But is this in scope of "nós, botões do header, abas e demais controles não devem ser acionados"? Requirement says they shouldn't be triggered. Keyboard activation can still trigger them. Yet, the previous behavior (before the PR) probably also allowed this (the modal was `pointer-events` blocking too?). Before the PR, the modal had a normal backdrop (`backdrop: 'static'` now, previously default true) — keyboard focus trapping isn't implemented by Bootstrap either... Actually, Bootstrap's modal does add `tabindex="-1"` and focuses the modal, and there's `_enforceFocus`. Bootstrap 4 modal has `_enforceFocus()` which redirects focus back to the modal when focus moves outside! Yes: ```js _enforceFocus() { const element = this._element $(document) .off(FOCUSIN_DISMISS, SELECTOR) .on(FOCUSIN_DISMISS, SELECTOR, (event) => { if (document !== event.target && element !== event.target && !element.contains(event.target)) { element.focus() } }) } ``` where `SELECTOR = function() { return this.ownerDocument... }`. Hmm, in BS 4.6 `_enforceFocus` uses `FOCUSIN_DISMISS = 'focusin.bs.modal'` and `SELECTOR = 'a[href], area[href], input:not([disabled]), ...'`? Let me recall BS 4.6: ```js _enforceFocus() { const element = this._element $(document) .off(Event.FOCUSIN) // Guard against infinite focus loop .on(Event.FOCUSIN, (event) => { if (document !== event.target && element !== event.target && !$(element).has(event.target).length) { element.focus() } }) } ``` And `_show` calls `this._enforceFocus()`. By default, `_enforceFocus` is enabled unless `focus: false`... In BS 4.6, `_enforceFocus` is called in `_show` unconditionally? There's `this._config.focus && this._enforceFocus()`. Hmm, in BS 4.6: ```js this._showBackdrop(() => { ... this._showElement(relatedTarget) }) ``` and in `_showElement`: `if (!this._config.focus) { this._enforceFocus() }`? Let me not go down this path. Bootstrap should handle focus enforcement for the modal (focusing the modal element when focus escapes). But wait — with pointer-events: none on everything and the modal still focused, keyboard Tab would focus elements behind? Bootstrap's focusin handler pulls focus back to the modal. So keyboard activation is likely still blocked by Bootstrap. OK, so the keyboard concern is mostly handled by Bootstrap. But the floating tools buttons... Bootstrap's `_enforceFocus` would yank focus back into the modal. So pressing Enter on a tool button requires a click first (which is blocked). So the keyboard path is likely fine. I'll drop that. Alright. Let me also consider the tab-order/aria: not needed. So my final comments: 1. (Medium) CSS: `max-height: 100%` on `.cause-tree-floating-tools-actions` may not take effect because the parent's height is auto; the scroll intended may never activate, and the bottom buttons may still be cut off on short screens. Suggest `height: 100%`/definite height on the parent, or a viewport-based max-height. Ask to test at a low viewport height. 2. (Low) Hardcoded `#ssmaCauseTreeNodeModal` in `isEventInsideCauseNodeModal` instead of `SELECTORS.modal` — risk of silent breakage (a rename would make clicks inside the modal dialog close it). Should I add anything about `.cause-tree-floating-tools { max-height: calc(100% - 24px) }` without `min-height: 0`? no. Hmm, also consider the interaction between `isEventInsideCauseNodeModal` and multiple modal dialogs... no. Hmm, one more possible issue worth reporting: the new document-level `mousedown` handler closes the modal for ANY left mousedown outside the diagram — including mousedowns on the *selection indicator* and the tools (handled) — but also including mousedowns on elements of other modals' backdrops... n/a. And: what about the case where the user starts a text selection inside the modal's input and drags the mouse outside the dialog (common when selecting text and moving beyond)? The mousedown happens inside the dialog → no close. Fine. But the reverse: the user mousedowns inside the diagram (no close) and drags; fine. Another: the user mousedowns on the modal *backdrop* area (shaded) → modal closes on mousedown. Previously (Bootstrap default) it closed on click/mouseup. Difference: mousedown closes even if the user just wanted to drag from the backdrop? no dragging on backdrop. Fine. Another: The modal closes on mousedown anywhere outside → if the user has unsaved form data, no confirmation. Requirement explicitly says clicking outside closes the modal. Fine, matches spec. Let me also double check: does the requirement "Clique no diagrama não fecha o modal" conflict with `event.target` for the diagram when the click is on the *grid background*? The svg fills the canvas → target=svg. Good. Now, are there other files? Two files in review. I reviewed both. I should give the twig file at least one finding — I have the CSS one (#1). Good. Let me phrase comments in Portuguese per the mandatory format: first sentence simple, then why it matters, then what to do. Comment 1 (twig CSS): "O `max-height: 100%` da coluna de ferramentas pode não surtir efeito, porque o elemento pai (`.cause-tree-floating-tools`) tem altura automática (só `max-height`), e porcentagem de altura contra pai sem altura definida é tratada como `none`. Na prática, o scroll interno criado aqui pode nunca ativar e os botões de baixo (zoom/centralizar) continuam sendo cortados em telas baixas — exatamente o problema que a PR quer resolver. Vale confirmar em viewport baixa; se não rolar, dar altura definida ao pai (`height: calc(100% - 24px)`) ou usar `max-height: calc(100vh - ...)` no `.cause-tree-floating-tools-actions`." Comment 2 (JS hardcoded selector): "O seletor do modal está escrito à mão aqui (`#ssmaCauseTreeNodeModal`), enquanto o resto do arquivo usa `SELECTORS.modal`. Se o id do modal mudar (no partial `_modal_node.html.twig` ou em `SELECTORS`), esta checagem passa a retornar sempre `false` e, com isso, qualquer clique dentro do próprio modal passa a ser tratado como 'clique fora' e fecha o modal — um efeito colateral silencioso. Sugestão: usar `$(SELECTORS.modal).find('.modal-dialog')` ou montar o seletor a partir de `SELECTORS.modal`." Both are reasonable and non-duplicative. Let me double check that `SELECTORS.modal` is `#ssmaCauseTreeNodeModal` — yes, line 15. Now let me confirm the existing_code snippets match the diff exactly (must be newly added lines). For comment 1, the added lines in the twig diff: ``` + .cause-tree-floating-tools-actions { + display: flex; + flex-direction: column; + gap: 10px; + min-height: 0; + max-height: 100%; ``` Wait, in the diff the hunk shows the existing block with `gap: 10px;` then added `min-height: 0; max-height: 100%; ...`. Per the diff: ``` .cause-tree-floating-tools-actions { display: flex; flex-direction: column; gap: 10px; + min-height: 0; + max-height: 100%; + overflow-x: hidden; ... ``` So the added lines are `min-height: 0;` etc. I should use `+ max-height: 100%;` as existing_code (only newly added lines, without the `+`? The instructions say "Only return newly added code lines" and maintain consistent style with diff code). Examples in the tool description use plain code lines. I'll provide ` max-height: 100%;` — hmm, to be safe, including indentation as in the diff. The diff line is `+ max-height: 100%;` so the code content is ` max-height: 100%;` (8 spaces). I'll provide exactly that. Actually let me include two lines for uniqueness: ` min-height: 0;\n max-height: 100%;`. Hmm, the sliding window matches consecutive lines; providing just one line is fine, but there's another `max-height: 100%`-ish? In the file line 69 is `max-height: 100%;` — unique. Also line 5 has `max-height: 100%` (no semicolon? line 5: `max-height: 100%;`) — that's in `.cause-tree-stage` which is unchanged code (not in the diff), so matching against diff text is the criterion. The tool matches within the diff. `max-height: 100%;` appears in the diff hunk as an added line only once. OK. For comment 2, existing_code: the added line ` return Boolean(target.closest('#ssmaCauseTreeNodeModal .modal-dialog'));` — I need to check the indentation from the diff. The diff shows: ``` + return Boolean(target.closest('#ssmaCauseTreeNodeModal .modal-dialog')); ``` Six spaces. Good. Let me write the comments. Wait — before finalizing, let me double-check one more potential real bug I may have missed in the JS: the mousedown handler checks `isEventInsideCauseNodeModal(event)` — using `event.target.closest('#ssmaCauseTreeNodeModal .modal-dialog')`. Fine. And there's a subtle thing: the mousedown handler's `event.button !== 0` check — for touch events, mousedown has button 0. Fine. Another consideration: on mobile (touch), `mousedown` fires; tapping outside the diagram (e.g., on the header) closes the modal. OK. One more: the handler doesn't check `event.defaultPrevented` or if the target is the modal's *scrollbar*. If a user drags the modal-body scrollbar... target is inside the modal-dialog → fine. Alright, also should I mention that the mousedown-close bypasses Bootstrap's `backdrop: 'static'` semantics (so the backdrop shake/no-dismiss no longer exists)? Cosmetic. Another thought about a possible real bug: because the backdrop now has `pointer-events: none`, clicking the backdrop area doesn't hit the `.modal` element → Bootstrap's `_enforceFocus`... n/a. Hmm, what about the case where the modal is open and the user clicks the *browser's* toast container region... covered. I'm done. Let me also consider whether to flag that the new global `document` listeners in `initCauseTreeScreen` are never cleaned up (if the tab content is replaced via AJAX, the listeners accumulate and reference detached DOM). Is the tree view loaded via AJAX tab? The tabs `_tab_tree.html.twig` are likely rendered server-side within a tab set; switching tabs may reload the page or just toggle visibility. Given `initCauseTreeScreen` runs only on DOMContentLoaded, the listeners are fine. Final answer: two comments. Actually, wait. Let me reconsider the severity/category for comment 1. If I claim it's a bug and it's not, that's a false positive. I'll set severity "low" and category "other"? Hmm — the tool's category enum includes "bug". I'll use "bug"/"medium" but phrase as verification. Hmm. Let me use category "bug", severity "medium". Actually, to be safe and honest, I'll phrase clearly that it should be verified in the browser — reviewers do this legitimately. Hmm, let me reconsider one more time whether percentage max-height against an auto-height flex container resolves in Chrome. There's a well-known gotcha: "percentage height doesn't work on a child when the parent's height is auto" — yes. But for `max-height`, the CSS2.1 rule is identical. Chrome implements: if the containing block's height is indefinite, percentage heights compute to auto; for max-height → none. BUT: there's a special case — a flex container with `overflow: auto`? not here. Also `position: relative` parent? not here. Hmm, one additional consideration: what does the *used* max-height of the parent become? `calc(100% - 24px)` of the canvas — definite. When laying out the child's percentage max-height, Chrome resolves percentages against the containing block's *height*, and for the flex item, the containing block is the flex container's content box, whose height is `auto`. Chrome's behavior: `max-height: 100%` on a flex item with `align-items: flex-start` inside an auto-height flex container → treated as none. Yes, I'm reasonably confident. OK, writing it now. Also should I note that the `.cause-tree-floating-tools` `max-height` without clipping means the parent's box doesn't create a scroll area? Yes, that's part of the comment. Let me write the final response in pt-BR with the tool call.
Analisei os dois arquivos do grupo de revisão (o JS e o template) e os componentes relacionados (`_modal_bottom_sheet.html.twig`, `partials/_modal_node.html.twig`), além do fluxo de abertura/fechamento do modal no `tree_view.js`. Além dos achados já confirmados, encontrei dois pontos:
Tool Calls (1)
code_comment
Show Details
{"comments": [{"path": "templates/ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig", "content": "O `max-height: 100%` da coluna de ferramentas pode não surtir efeito, e aí o scroll interno criado aqui nunca ativa. O motivo é que o elemento pai (`.cause-tree-floating-tools`) tem altura automática (recebeu só `max-height`, sem `height`), e porcentagem de altura/max-height contra um pai sem altura definida é tratada como `none` pelo navegador. Na prática, em telas baixas os botões de baixo (zoom/centralizar) continuam transbordando a caixa do pai e sendo cortados pelo `overflow: hidden` da `.cause-tree-canvas` — exatamente o problema que a PR quer resolver. Vale abrir a tela em uma viewport baixa e confirmar se o scroll aparece; se não aparecer, dê altura definida ao pai (ex.: `height: calc(100% - 24px)`) ou troque o `max-height` da coluna por algo baseado na viewport (ex.: `max-height: calc(100vh - 120px)`).", "existing_code": "        min-height: 0;\n        max-height: 100%;", "category": "bug", "severity": "medium"}, {"path": "public/js/ssma/tree_view.js", "content": "O seletor do modal está escrito à mão aqui (`#ssmaCauseTreeNodeModal`), enquanto o restante do arquivo usa a constante `SELECTORS.modal`. Se o id do modal mudar (no partial `_modal_node.html.twig` ou na própria `SELECTORS`), esta verificação passa a retornar sempre `false` e o efeito é silencioso: qualquer clique dentro do próprio modal passa a ser classificado como “clique fora” e fecha o modal, quebrando o preenchimento do formulário. Sugestão: derivar o seletor de `SELECTORS.modal` (ex.: `${SELECTORS.modal} .modal-dialog`) em vez de duplicar o id.", "existing_code": "      return Boolean(target.closest('#ssmaCauseTreeNodeModal .modal-dialog'));", "category": "maintainability", "severity": "low"}]}
(async)
Request #38 deepseek-flash P:49.6K C:364 CR:49.41K CW:0 2328ms
Resumo da revisão: **`public/js/ssma/tree_view.js`** - O bloco novo de interação do modal (init via `.modal()`, listeners globais de `mousedown`/`click` em fase de captura e guards em `click`/`dblclick` dos nós) está coerente com os requisitos declarados: clique no diagrama não fecha, clique fora fecha, clique nas ferramentas fecha sem disparar a ação. - Ponto apontado: id do modal hardcoded (`#ssmaCauseTreeNodeModal`) em vez de `SELECTORS.modal`, com risco de quebra silenciosa (clique dentro do modal passaria a fechá-lo). **`templates/ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig`** - As regras de `pointer-events` e as media queries seguem a lógica descrita (libera pan/zoom no SVG e bloqueia o resto). - Ponto apontado: `max-height: 100%` em `.cause-tree-floating-tools-actions` depende de um pai com altura automática, o que pode impedir o scroll interno de ativar — vale validar em viewport baixa. Não identifiquei problemas de segurança, contrato com backend, CSRF, XSS ou integridade de dados introduzidos pelo diff (não há chamadas AJAX novas; o CSS novo não usa `|raw`, `.html()` nem valores de usuário).
Tool Calls (1)
task_done
Show Details
{"state": "DONE"}

memory_compression_task

Request #1 deepseek-flash P:224.14K C:2.14K CR:256 CW:0 13524ms
Reasoning
The user wants me to compress the conversation into a structured summary. Let me analyze what happened. This is a code review conversation about a cause tree (SSMA cause tree) view. The assistant was investigating potential issues in: - `public/js/ssma/tree_view.js` - `templates/ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig` - `templates/ssma/cause_tree/tree_view/partials/_modal_node.html.twig` - `templates/components/_modal_bottom_sheet.html.twig` - `templates/ssma/cause_tree/tree_view/index.html.twig` The findings from the reasoning: 1. Body class `cause-tree-node-modal-open` - potential stuck class (low probability) 2. `body.cause-tree-node-modal-open > *` sets pointer-events none on all direct children of body — could block toasts (showToast) while modal is open. Confirmed showToast is global helper that appends toasts. Error toasts appear while node modal open on save failure → toast would be non-interactive. 3. `ignoreNextFloatingToolsClick` flag not reset when modal closes — first click on floating tools after a drag gets swallowed. Medium-low. 4. Duplicate event listeners risk - low (init runs once on DOMContentLoaded). 5. Accessibility - keyboard Tab can still focus elements behind modal. 6. `mousedown` handler hides modal when clicking anywhere outside diagram. The tool calls: - grep for `#ssmaCauseTreeNodeModal` in tree_view.js and _tab_tree.html.twig - grep for `cause-tree-node-modal-open` - grep for addEventListener - read tree_view.js lines 1-80, 500-700, 1700-1751 - read template tabs 1-140, 440-642 - searched modal markup - read _modal_node.html.twig - read _modal_bottom_sheet.html.twig - read index.html.twig around 340-400 - greps for `$modal.modal` usage, `shouldRestoreCloseModalAfterRemoveConfirm` - read tree_view.js 1355-1440, 1550-1700 - searched showToast (found global helper) - searched `.modal-backdrop` and Bootstrap modal code Since the output must be in Portuguese (pt-BR), I need to write the summary in Portuguese. Let me organize. Identified Code Issues: - [MEDIUM] `public/js/ssma/tree_view.js` — flag `ignoreNextFloatingToolsClick` não é resetado ao fechar o modal; pode engolir o próximo clique em ferramentas flutuantes após um arrasto. - [MEDIUM] `templates/ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig` — CSS `body.cause-tree-node-modal-open > *` aplica pointer-events:none a todos os filhos diretos do body, bloqueando toasts globais (showToast) exibidos com o modal aberto (ex.: erro ao salvar). - [LOW] `public/js/ssma/tree_view.js` — classe `cause-tree-node-modal-open` pode ficar presa no body se o modal for removido durante a transição. - [LOW] `public/js/ssma/tree_view.js` — listener de document mousedown/click adicionado por instância; risco teórico de listeners duplicados se o script for reexecutado. - [LOW] Acessibilidade — pointer-events não bloqueia foco por teclado; elementos atrás do modal permanecem focáveis. Tool Call Conclusions: - Leitura de tree_view.js (1-80, 500-700, 1355-1440, 1550-1700, 1700-1751): confirmada inicialização do modal Bootstrap com backdrop static, handlers de mousedown/click em capture, listeners adicionados em initCauseTreeScreen chamado uma vez em DOMContentLoaded. - Leitura de _tab_tree.html.twig (1-140, 440-642): confirmadas regras CSS de pointer-events e classe body. - Leitura de _modal_node.html.twig e _modal_bottom_sheet.html.twig: modal é renderizado no topo do template (não filho direto do body necessariamente), embed do bottom sheet. - Leitura de index.html.twig (340-400): modal incluído após a section principal, fora dela. - Busca de showToast: helper global `public/js/utils/showToast.js`; toasts vão para body. - Busca de `.modal-backdrop` / Bootstrap modal: confirmado backdrop gerenciado pelo Bootstrap 4.1.3; backdrop static. - Busca de `$modal.modal`: modal inicializado com show:false; hide por fora do diagrama. Completed Tasks: - Confirmação de que o modal não é reaberto/duplicado; init única. - Confirmação de que outros modais (close/delete) não abrem simultaneamente com o modal do nó. Pending Tasks: - Validar impacto do CSS na interação de toasts globais com o modal aberto. - Validar correção referente ao flag ignoreNextFloatingToolsClick. Current Focus: Validar se as regras de pointer-events do body e handlers globais de mousedown/click do modal de nó causam regressões de interação. Let me write in Portuguese, concise.
### Problemas de Código Identificados - [MÉDIA] `public/js/ssma/tree_view.js` — flag `ignoreNextFloatingToolsClick` não é redefinida ao fechar o modal; pode engolir o primeiro clique nas ferramentas flutuantes após um arrasto iniciado sobre elas. - [MÉDIA] `templates/ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig` — regra CSS `body.cause-tree-node-modal-open > *` aplica `pointer-events:none` a todos os filhos diretos do body, tornando não interativos os toasts globais (helper `showToast`) exibidos enquanto o modal do nó está aberto (ex.: erro ao salvar mantém o modal aberto). - [BAIXA] `public/js/ssma/tree_view.js` — classe `cause-tree-node-modal-open` pode permanecer presa no `body` caso o modal seja removido durante a transição (evento `hidden.bs.modal` não dispara). - [BAIXA] `public/js/ssma/tree_view.js` — listeners de `mousedown`/`click` em fase de captura adicionados a cada inicialização da tela; risco teórico de acúmulo caso o script seja reexecutado. - [BAIXA] Acessibilidade — `pointer-events:none` não bloqueia foco por teclado; controles atrás do modal permanecem focáveis via Tab. ### Conclusões das Chamadas de Ferramentas - leitura de `public/js/ssma/tree_view.js` (trechos 1-80, 500-700, 1355-1440, 1550-1700, 1700-1751): confirmada inicialização do modal Bootstrap com `backdrop:'static'`, handlers globais de `mousedown`/`click` em captura, e que `initCauseTreeScreen` é chamada uma única vez por tela via `DOMContentLoaded`. - leitura de `templates/ssma/cause_tree/tree_view/tabs/_tab_tree.html.twig` (1-140, 440-642): confirmadas as regras de `pointer-events` e a classe `body.cause-tree-node-modal-open>`. - leitura de `partials/_modal_node.html.twig` e `components/_modal_bottom_sheet.html.twig`: modal é embutido via template de bottom sheet e renderizado fora da section principal. - leitura de `index.html.twig` (340-400): modal incluído no topo do template, como irmão da section, após o conteúdo das abas. - busca por `showToast`: helper global em `public/js/utils/showToast.js`, amplamente usado; reforça o risco do CSS bloquear toasts. - busca por `$modal.modal` e `shouldRestoreCloseModalAfterRemoveConfirm`: confirmado que modais de fechamento/exclusão não coexistem abertos com o modal do nó (abrir ferramentas fecha o modal do nó primeiro). - busca por `.modal-backdrop` e bootstrap modal: confirmado comportamento padrão do Bootstrap 4.1.3 e backdrop `static`. ### Tarefas Concluídas - Verificado que o modal do nó não é inicializado nem aberto múltiplas vezes. - Verificado que outros modais não ficam abertos simultaneamente ao modal do nó. - Confirmado que a lógica de fechamento por clique fora é implementada por handler próprio, não conflitando com o `backdrop:'static'` do Bootstrap. ### Tarefas Pendentes - Avaliar e confirmar o impacto real do CSS `body.cause-tree-node-modal-open > *` sobre os toasts globais (`showToast`) exibidos com o modal aberto. - Validar e reportar a correção referente ao flag `ignoreNextFloatingToolsClick` não redefinido no fechamento do modal. ### Foco Atual Validar se as regras de `pointer-events` do body e os handlers globais de `mousedown`/`click` do modal do nó introduzem regressões de interação (toasts e ferramentas flutuantes).

review_filter_task

Request #1 deepseek-flash P:4.71K C:793 CR:1.79K CW:0 4462ms
Reasoning
Let me analyze each comment. c-0: about `ignoreNextFloatingToolsClick` flag never being reset. This is about behavioral change? It's about a flag stuck true. Is it a protected subject? Behavioral change — "a message, field, status, or default that the old code produced and the new code no longer does; an altered error path". Hmm, this is about new code being added and potential bug. Not exactly behavioral/compat change of old code. Let me think about Ground A/B. Does the diff contain the flag? Yes, `let ignoreNextFloatingToolsClick = false;` and the click handler. The comment's central claim: the flag is never cleared if the click doesn't fall inside the menu. In the diff, the click handler resets `ignoreNextFloatingToolsClick = false;` but only after the guard `if (!ignoreNextFloatingToolsClick || !isEventInsideFloatingTools(event)) return;`. So if a click event occurs outside floating tools, the handler returns early and never resets the flag. Indeed the flag stays true. So the claim is correct — it's a real potential issue. Not contradicted by the diff. Approve. Actually wait, is the comment wrong about something? It says the flag gets stuck true. That's consistent with the diff code. So approve. c-1: style/refactoring suggestion — extract duplicate guard, derive selector from SELECTORS.modal. Is what it states true? The helpers do repeat the guard block. Is `SELECTORS.modal` actually defined? We see `const SELECTORS = {` in the diff context but not its content. The comment says "existing constant SELECTORS.modal". We can't verify. But it's a style suggestion — Step 2 value veto if true. Since we can't verify the SELECTORS.modal exists, but the claim about repetition is true. The comment is about readability/DRY. Approve. Hmm, but note: does the comment claim the selector is hardcoded even though SELECTORS.modal exists — if SELECTORS.modal doesn't exist, the suggestion is partially wrong but the central claim about duplication holds. Either way approve. c-2: about pointer-events on body > * disabling toasts. This is about CSS in the twig file, which is in the diff. The comment claims toasts container is direct child of body. Ground B would require a diff line contradicting. Not present. It's a behavioral claim about toasts not clickable — is this a protected "behavioral change"? It's about new CSS rule affecting existing behavior (toast interaction). Hmm, "behavioral or compatibility change — a message, field, status, or default that the old code produced and the new code no longer does". This is arguably a behavioral change. Either way, approve. Can't disprove. c-3: style/maintainability — move CSS to separate file. The claim: embedded style block already over 480 lines. The diff shows `@@ -476,14 +483,85 @@` meaning the file had ~483 lines at that hunk... The comment says the style block passes 480 lines. The diff has line numbers up to 567ish. It's a style suggestion; not incorrect. Approve (value veto—style, and true-ish). So all approve. Final answer: approve_all_comments. Wait — but should I consider whether any Ground A applies? c-0, c-1 are on the JS file — the code is present. c-2, c-3 on the twig file — the CSS is present. All good. Approve all.
Tool Calls (1)
approve_all_comments
Show Details
{}
Request #2 deepseek-flash P:4.3K C:636 CR:3.58K CW:0 3825ms
Reasoning
Let me examine both comments. Comment c-0: about `#ssmaCauseTreeNodeModal` hardcoded selector. The diff shows the line `return Boolean(target.closest('#ssmaCauseTreeNodeModal .modal-dialog'));` exists in tree_view.js. So Ground A doesn't apply. Is it factually wrong? It's about code style/using constant, a suggestion. The claim: "O seletor do modal está escrito à mão aqui, enquanto o restante do arquivo usa a constante SELECTORS.modal." Hmm, we can't verify whether the rest of the file uses SELECTORS.modal. Actually the diff shows `const SELECTORS = {` at line 571 context. But we don't see SELECTORS.modal. The claim that selector is hardcoded is true — the diff line shows hardcoded string. The rest is reasoning about a hypothetical. Not refutable from diff. Approve. Comment c-1: about max-height: 100% not working. This is a claim about CSS behavior. It's about style/readability? It's a CSS layout behavior claim. The existing_code quoted is `min-height: 0;\n max-height: 100%;` which is in the diff under `.cause-tree-floating-tools-actions`. The parent `.cause-tree-floating-tools` got `max-height: calc(100% - 16px)` in the media query and `max-height: calc(100% - 24px)` in the base rule. Wait, look: the base `.cause-tree-floating-tools` has `max-height: calc(100% - 24px)`. The comment says the parent has "altura automática (recebeu só max-height, sem height)". That's true — parent only got max-height. The claim that percentage against a parent without defined height is treated as none — this is a CSS behavior chain of reasoning. Not a literal diff contradiction. Is it Ground B? The comment asserts "o elemento pai tem altura automática (recebeu só max-height, sem height)". The diff confirms parent got max-height only. So the comment's own premise is consistent. The conclusion is a reasoning about CSS spec. Not refutable from diff straight-off. Also it's arguably a style/layout issue, but not exactly "style, formatting, naming, blank lines, wording of comment, readability". Hmm. It's about whether scroll activates — a functional concern about layout. Not protected subject. Not clearly refutable. Could Ground B apply? The comment says percentage height against undefined-height parent treated as none. That's a well-known CSS fact actually (percentage heights resolve against definite heights). Not contradicted by diff. So approve both. Wait, but let me double check c-0 possible Ground A: the comment subject file is tree_view.js and the code is present in the diff. So no. Both approved. Use approve_all_comments.
Tool Calls (1)
approve_all_comments
Show Details
{}