tftsr-devops_investigation/node_modules/@testing-library/user-event/dist/cjs/utils/index.js
Shaun Arman 8839075805 feat: initial implementation of TFTSR IT Triage & RCA application
Implements Phases 1-8 of the TFTSR implementation plan.

Rust backend (Tauri 2.x, src-tauri/):
- Multi-provider AI: OpenAI-compatible, Anthropic, Gemini, Mistral, Ollama
- PII detection engine: 11 regex patterns with overlap resolution
- SQLCipher AES-256 encrypted database with 10 versioned migrations
- 28 Tauri IPC commands for triage, analysis, document, and system ops
- Ollama: hardware probe, model recommendations, pull/delete with events
- RCA and blameless post-mortem Markdown document generators
- PDF export via printpdf
- Audit log: SHA-256 hash of every external data send
- Integration stubs for Confluence, ServiceNow, Azure DevOps (v0.2)

Frontend (React 18 + TypeScript + Vite, src/):
- 9 pages: full triage workflow NewIssue→LogUpload→Triage→Resolution→RCA→Postmortem→History+Settings
- 7 components: ChatWindow, TriageProgress, PiiDiffViewer, DocEditor, HardwareReport, ModelSelector, UI primitives
- 3 Zustand stores: session, settings (persisted), history
- Type-safe tauriCommands.ts matching Rust backend types exactly
- 8 IT domain system prompts (Linux, Windows, Network, K8s, DB, Virt, HW, Obs)

DevOps:
- .woodpecker/test.yml: rustfmt, clippy, cargo test, tsc, vitest on every push
- .woodpecker/release.yml: linux/amd64 + linux/arm64 builds, Gogs release upload

Verified:
- cargo check: zero errors
- tsc --noEmit: zero errors
- vitest run: 13/13 unit tests passing

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 22:36:25 -05:00

79 lines
4.0 KiB
JavaScript

'use strict';
var isClickableInput = require('./click/isClickableInput.js');
var Blob = require('./dataTransfer/Blob.js');
var DataTransfer = require('./dataTransfer/DataTransfer.js');
var FileList = require('./dataTransfer/FileList.js');
var Clipboard = require('./dataTransfer/Clipboard.js');
var timeValue = require('./edit/timeValue.js');
var isContentEditable = require('./edit/isContentEditable.js');
var isEditable = require('./edit/isEditable.js');
var maxLength = require('./edit/maxLength.js');
var setFiles = require('./edit/setFiles.js');
var cursor = require('./focus/cursor.js');
var getActiveElement = require('./focus/getActiveElement.js');
var getTabDestination = require('./focus/getTabDestination.js');
var isFocusable = require('./focus/isFocusable.js');
var selection = require('./focus/selection.js');
var selector = require('./focus/selector.js');
var readNextDescriptor = require('./keyDef/readNextDescriptor.js');
var cloneEvent = require('./misc/cloneEvent.js');
var findClosest = require('./misc/findClosest.js');
var getDocumentFromNode = require('./misc/getDocumentFromNode.js');
var getTreeDiff = require('./misc/getTreeDiff.js');
var getWindow = require('./misc/getWindow.js');
var isDescendantOrSelf = require('./misc/isDescendantOrSelf.js');
var isElementType = require('./misc/isElementType.js');
var isVisible = require('./misc/isVisible.js');
var isDisabled = require('./misc/isDisabled.js');
var level = require('./misc/level.js');
var wait = require('./misc/wait.js');
var cssPointerEvents = require('./pointer/cssPointerEvents.js');
exports.isClickableInput = isClickableInput.isClickableInput;
exports.readBlobText = Blob.readBlobText;
exports.createDataTransfer = DataTransfer.createDataTransfer;
exports.getBlobFromDataTransferItem = DataTransfer.getBlobFromDataTransferItem;
exports.createFileList = FileList.createFileList;
exports.attachClipboardStubToView = Clipboard.attachClipboardStubToView;
exports.createClipboardItem = Clipboard.createClipboardItem;
exports.detachClipboardStubFromView = Clipboard.detachClipboardStubFromView;
exports.readDataTransferFromClipboard = Clipboard.readDataTransferFromClipboard;
exports.resetClipboardStubOnView = Clipboard.resetClipboardStubOnView;
exports.writeDataTransferToClipboard = Clipboard.writeDataTransferToClipboard;
exports.buildTimeValue = timeValue.buildTimeValue;
exports.isValidDateOrTimeValue = timeValue.isValidDateOrTimeValue;
exports.getContentEditable = isContentEditable.getContentEditable;
exports.isContentEditable = isContentEditable.isContentEditable;
exports.isEditable = isEditable.isEditable;
exports.isEditableInputOrTextArea = isEditable.isEditableInputOrTextArea;
exports.getMaxLength = maxLength.getMaxLength;
exports.supportsMaxLength = maxLength.supportsMaxLength;
exports.setFiles = setFiles.setFiles;
exports.getNextCursorPosition = cursor.getNextCursorPosition;
exports.getActiveElement = getActiveElement.getActiveElement;
exports.getActiveElementOrBody = getActiveElement.getActiveElementOrBody;
exports.getTabDestination = getTabDestination.getTabDestination;
exports.isFocusable = isFocusable.isFocusable;
exports.hasNoSelection = selection.hasNoSelection;
exports.hasOwnSelection = selection.hasOwnSelection;
exports.FOCUSABLE_SELECTOR = selector.FOCUSABLE_SELECTOR;
exports.readNextDescriptor = readNextDescriptor.readNextDescriptor;
exports.cloneEvent = cloneEvent.cloneEvent;
exports.findClosest = findClosest.findClosest;
exports.getDocumentFromNode = getDocumentFromNode.getDocumentFromNode;
exports.getTreeDiff = getTreeDiff.getTreeDiff;
exports.getWindow = getWindow.getWindow;
exports.isDescendantOrSelf = isDescendantOrSelf.isDescendantOrSelf;
exports.isElementType = isElementType.isElementType;
exports.isVisible = isVisible.isVisible;
exports.isDisabled = isDisabled.isDisabled;
exports.ApiLevel = level.ApiLevel;
exports.getLevelRef = level.getLevelRef;
exports.setLevelRef = level.setLevelRef;
exports.wait = wait.wait;
exports.assertPointerEvents = cssPointerEvents.assertPointerEvents;
exports.hasPointerEvents = cssPointerEvents.hasPointerEvents;