PageSourceSearch

https://rollcodex.app/assets/import-BUd7Odza.js

js rollcodex.app collected 2026-10-02 01:15:11 UTC 38,670 bytes, 1 lines download raw bytes

1const e="Import",t={source:"Source",speakers:"Participants",sessions:"Sessions",review:"Review",results:"Results"},a={source:"Step 1 · Source",speakers:"Step 2 · Participants",sessions:"Step 3 · Sessions",review:"Step 4 · Review",results:"Step 5 · Results"},o={step0desc:"Choose the target system, then upload a VTT export to start an analysis scoped to the ledger.",step1desc:"Associate each participant with a player to improve import reading and campaign links.",step2desc:"Validate the detected session breakdown and adjust names before entering event review.",step3desc:"Review events and detected noise before the final write.",step4desc:"Check the imported result and quickly start a new import if needed.",defaultTitle:"Import workflow",defaultDesc:"Follow the wizard steps to finalize the import safely."},n={upload:"Preparation",uploadDetail:"File and secure storage",analyze:"Analysis",analyzeDetail:"VTT detection and import reading",players:"Matching",playersDetail:"Participant matching",sessions:"Sessions",sessionsDetail:"Draft consolidation",finalize:"Finalization",finalizeDetail:"Writing data",result:"Results",resultDetail:"Review and import complete"},i={interrupted:"Import interrupted",complete:"Import complete",completeDetail:"Sessions and events have been saved in RollCodex.",finalizing:"Finalization in progress",finalizingDetail:"Saving sessions, events, and associations to the ledger.",drafting:"Draft consolidation",draftingDetail:"RollCodex is preparing sessions and structuring events before the review phase.",reviewReady:"Review ready",reviewReadyDetail:"Final event review, binding to target campaign and table.",reviewStatus:"Review",sessionsDetected:"Sessions detected",sessionsDetectedDetail:"Checking session breakdown before final draft validation.",sessionsStatus:"Sessions",speakersDetected:"Participants detected",speakersDetectedDetail:"Associating participants with players to improve imported event reliability.",speakersStatus:"Matching",fileProcessing:"Initial file processing",fileProcessingDetail:"Secure upload, VTT source detection, and preliminary event analysis.",ready:"Import workflow ready",readyDetail:"Upload an export, let RollCodex detect the structure, then review sessions before finalization.",readyStatus:"Ready"},r={data:"Loading data",dataDesc:"Preparing the active ledger before import.",permissions:"Loading permissions",permissionsDesc:"Checking the active ledger role before opening import."},s={restricted:"Restricted access.",insufficientRights:"Insufficient permissions",roleRequired:"VTT import is restricted to members with the Owner, Admin, or GM role."},l={eyebrow:"VTT import",title:"VTT Import",description:"Import VTT exports into your active registry",stepsCount:"Import in {{count}} steps",stepProgress:"Step {{current}} of {{total}}"},c={campaign:"Target campaign",table:"Target table",batch:"Active import",noCampaign:"Chosen at review",noTable:"Chosen at review"},d={eyebrow:"Connected VTT import",title:"VTT connections",description:"Receive a snapshot from Foundry VTT or Roll20, then review the import before any finalization.",pendingReviewTitle:"Snapshots to review: {{count}}",pendingReviewDescription:"Review required before writing to the ledger.",pendingReviewLatest:"Latest snapshot: {{date}}",reviewLatest:"Review latest",noLive:"No live connection",reviewBeforeFinalize:"Human review before final import",planBadge:"Watcher and above",upgradeBadge:"{{plan}} required",planGateTitle:"Included from {{plan}}",planGateDescription:"Foundry, Roll20 and Alchemy connections are reserved for paid GM ledgers. Manual imports remain available on your current plan.",planGateCurrent:"Current plan: {{plan}}",statConnections:"Active",statReady:"To review",statFailed:"Failures",limitsTitle:"Limits to know",limitFoundryAccess:"Foundry: the person setting up the connection must be able to install and configure the RollCodex module in the world.",limitRoll20Visibility:"Roll20: the RollCodex extension reads the visible table messages.",limitRoll20ChromeExtension:"Roll20: the connection uses the RollCodex Roll20 Chrome extension published on the Chrome Web Store.",limitReview:"No snapshot is finalized on its own: RollCodex creates an import to review before writing to the registry.",rulesCompact:"Table-based connection, snapshot reviewed in RollCodex before writing to the registry.",refresh:"Refresh",setupModeTitle:"Guided VTT pairing",setupModeDescription:"RollCodex prepares a connection package for your VTT tool. Advanced settings stay folded away.",endpoint:"Receiving address",endpointMissing:"Address unavailable for this environment.",copyEndpoint:"Copy address",connectionId:"Connection identifier",copyConnectionId:"Copy identifier",copySecret:"Copy key",syncRoll20Extension:"Sync",connectionIdShort:"ID {{id}}...",connectionSecret:"Connection secret",secretTitle:"{{provider}} key",secretOnce:"This key is shown only once. Regenerate it if it is lost.",pairingTitle:"{{provider}} pairing ready",pairingDescription:"Open the VTT, import the RollCodex connection package, then send a snapshot when the game is ready to review.",openProvider:"Open {{provider}}",providerUnavailableTitle:"{{provider}} is not responding yet",providerUnavailableDescription:"RollCodex tried the local opening first. Start the Foundry app and open your world, then try again. If your world is hosted online, enter its address once.",retryOpenProvider:"Try again",foun
1dryServerAddress:"Foundry server address",foundryServerPlaceholder:"https://your-foundry.example.com",foundryServerHint:"RollCodex remembers this address in this browser for future openings.",openFoundryServer:"Open this server",copyPackage:"Copy package",downloadPackage:"Download package",copyRoll20ConnectCommand:"Copy Roll20 command",copyRoll20ReadyScript:"Copy ready script",copyRoll20FallbackScript:"Copy fallback script",copyRoll20Script:"Copy fallback script",downloadRoll20Script:"Download fallback script",openFoundryModule:"Foundry module",openRoll20Store:"Chrome Web Store",packageSafety:"This package contains the connection key. Import it into your VTT module or script and do not share it outside your registry.",manualSetupTitle:"Advanced manual setup",stepLabel:"Step {{index}}",openProviderStep:"Open the VTT with the target world or game.",importPackageStep:"Import the RollCodex package into your VTT tool.",reviewSnapshotStep:"Send a snapshot, then review the import in RollCodex.",create:"Connect",foundryHint:"Start the link from the RollCodex module installed in your Foundry world.",foundryModuleBadge:"From module",roll20ExtensionBadge:"Extension",roll20Hint:"Install the extension from the Chrome Web Store, then open RollCodex from the Roll20 table to choose registry, campaign and table.",alchemyHint:"Use a RollCodex connection package with the Alchemy game or companion connector.",genericProviderHint:"Use the RollCodex connection package with {{provider}}.",activeTitle:"Configured connections",activeDescription:"One row per active link for this system.",activeCount:"Connections: {{count}}",gmLabel:"GM: {{name}}",manageConnections:"Manage",hideConnections:"Hide",moreConnections:"+{{count}} more",revokedConnectionsTitle:"Revoked connections ({{count}})",noActiveConnections:"No connection configured for this system.",active:"Active",revoked:"Revoked",rotate:"Regenerate",revoke:"Revoke",connectionReady:"Key configured",lastUsed:"Last snapshot: {{date}}",connectionGm:"Linked GM: {{gm}}",connectionGmUnknown:"No linked GM",runsTitle:"Latest received snapshots",runsDescription:"Snapshots received for {{system}} only.",openBatch:"Review import",deleteCapture:"Delete",deleteCaptureTitle:"Delete this snapshot?",deleteCaptureDescription:"The snapshot will be removed from this list and its review import will be deleted. Already finalized events remain unchanged.",deleteCaptureCancel:"Cancel",deleteCaptureConfirm:"Delete snapshot",noRuns:"No snapshot received for this system.",messageCount:"{{count}} message(s)",messageCountUnknown:"Messages not counted",targetCampaignTable:"Campaign and table targeted",targetCampaignTableName:"{{campaign}} / {{table}}",targetCampaign:"Campaign targeted",targetCampaignName:"{{campaign}}",targetTableName:"{{table}}",targetNoTable:"No table set",targetReview:"Destination chosen during review",captureModes:{manual:"Manual capture",auto:"Automatic capture",unknown:"VTT capture"},captureReasons:{manual_button:"Manual capture",manual_session_end:"Manual session end",idle_timeout:"After pause capture",combat_end:"Combat end",foundry_pagehide:"Foundry closing",foundry_beforeunload:"Foundry closing",foundry_close_world:"World closing",roll20_auto_chat_idle:"Roll20 after pause capture",roll20_tab_hidden:"Roll20 tab hidden",roll20_pagehide:"Roll20 closing",roll20_beforeunload:"Roll20 closing"},sourceFormats:{foundryJson:"Foundry",foundryTxt:"Foundry",roll20ModJson:"Roll20",roll20Html:"Roll20",alchemyJson:"Alchemy",unknown:"VTT source"},runStatuses:{ready:"Ready to review",received:"Received",failed:"Failed",unknown:"Unknown status"},secretDismiss:"I have copied the key",upgradeCta:"View plans",toasts:{created:"VTT connection created.",createError:"Unable to create VTT connection.",rotated:"Key regenerated.",rotateError:"Unable to regenerate the key.",revoked:"Connection revoked.",revokeError:"Unable to revoke the connection.",endpointCopied:"Address copied.",connectionIdCopied:"Code copied.",secretCopied:"Key copied.",syncRoll20Done:"Roll20 extension synchronized.",syncRoll20Stored:"Roll20 extension synchronized. Reload Roll20 if the panel does not update.",syncRoll20MissingSecret:"Regenerate the Roll20 key before syncing the extension.",packageCopied:"Connection package copied.",packageDownloaded:"Connection package downloaded.",packageDownloadError:"Unable to download the connection package.",roll20ScriptCopied:"Roll20 script copied.",roll20ScriptDownloaded:"Roll20 script downloaded.",roll20ScriptReadError:"Unable to read the Roll20 script.",roll20CommandCopied:"Roll20 command copied.",roll20StorePending:"The Chrome Web Store link will be connected as soon as the listing is published.",providerOpened:"Opening {{provider}}.",providerUnavailable:"{{provider}} is not responding yet.",copyError:"Unable to copy this value.",planRequired:"This connection requires the {{plan}} plan or above.",planRequiredGeneric:"This action requires a plan that includes connected VTT snapshots.",permissionDenied:"You do not have permission to manage VTT connections in this ledger.",captureDeleted:"Snapshot deleted.",captureDeleteError:"Unable to delete this snapshot.",captureDeletedStorageWarning:"Snapshot removed, but the source file could not be cleaned up automatically.",batchReady:"Snapshot analyzed. You can resume review."},errors:{missingBatch:"Snapshot import not found.",openBatch:"Unable to open this 
1snapshot import.",missingSnapshotEndpoint:"RollCodex snapshot endpoint is missing.",syncRoll20BridgeMissing:"Roll20 extension not found on this page. Reload the unpacked extension and this RollCodex page.",syncRoll20Extension:"Unable to sync the Roll20 extension."}},p={eyebrow:"{{provider}} pairing",title:"Connect this game to RollCodex",description:"Choose the registry and system that will receive snapshots from {{provider}}. The key stays in the VTT client: RollCodex only stores its fingerprint.",pendingBadge:"Pending",connectedBadge:"Connected",world:"{{provider}} game",unknownWorld:"Unnamed game",foundrySystem:"Foundry system",providerSystem:"{{provider}} system",connection:"Connection",pairingCode:"Local code",foundryVersion:"Foundry {{version}}",providerVersion:"{{provider}} {{version}}",moduleVersion:"Module {{version}}",chainTitle:"Snapshot route",chainWorld:"Game",chainRegistry:"Registry",chainCampaign:"Campaign",chainTable:"Table",scopeTitle:"RollCodex destination",workspaceLabel:"Registry",workspaceHelper:"Only registries where your role can start an import are offered.",systemLabel:"RollCodex system",campaignLabel:"Campaign",tableLabel:"Table",tableRequired:"Choose a table: one active connection belongs to one table.",tableOneLinkHelper:"Each table can have one active connection only.",tableAlreadyLinked:"This table already has an active connection.",tableAlreadyLinkedOption:"{{table}} - already linked",noCampaign:"No specific campaign",noTable:"No specific table",noEligibleWorkspace:"No registry available to your account can create a VTT connection.",permissionDenied:"Your role in this registry cannot create a VTT connection.",planDenied:"This registry needs the {{plan}} plan or above to receive connected {{provider}} snapshots.",localProofTitle:"Local VTT proof",localProofReady:"{{provider}} confirmed this request from {{origin}}. Check that code {{code}} matches the code shown in the connector.",pairingHandshakeRequired:"RollCodex is waiting for the local {{provider}} confirmation before authorizing this link.",handshakeStatus:{idle:"Waiting for the {{provider}} request.",pending:"Checking the local {{provider}} connector.",ready:"{{provider}} connector confirmed.","missing-opener":"This page must be opened from the {{provider}} connector to confirm the local secret.",timeout:"The {{provider}} connector did not respond. Start the connection again from {{provider}}.",failed:"RollCodex could not query the {{provider}} window. Start the connection again from the connector."},authorize:"Authorize connection",openImport:"View imports",successTitle:"Connection created",successDescription:"RollCodex confirmed the connection. You can return to {{provider}} to finish pairing and send a test snapshot.",successStepLabel:"Next {{index}}",successStepFoundry:"Return to the Foundry world.",successStepProvider:"Return to {{provider}}.",successStepCapture:"Send a test snapshot from the module.",successStepReview:"Review the received import in RollCodex.",confirmationCopied:"The confirmation was copied. If {{provider}} does not update itself, click Recover confirmation in the connector.",confirmationFallback:"If {{provider}} does not update itself, copy this confirmation, then click Recover confirmation in the connector.",copyConfirmation:"Copy confirmation",invalidTitle:"Invalid {{provider}} request",invalidDescription:"Start the connection again from the RollCodex connector in {{provider}}. This page expects a request generated by the VTT client.",toasts:{connected:"{{provider}} connected to RollCodex.",error:"Unable to create the VTT connection.",permissionOrPlanError:"Connection refused: check your role in the registry and the active plan.",confirmationCopied:"Confirmation copied for {{provider}}.",confirmationCopyError:"Unable to copy the {{provider}} confirmation."}},h={active:"Active import",fileInProgress:"File in progress",inProgress:"In progress",ledger:"Ledger",none:"None",campaign:"Campaign",table:"Table",notSelected:"Not selected",recentHistory:"Recent import history",recentHistoryDesc:"Imports remain linked to the active ledger and can be reviewed from this page.",noCampaign:"No campaign",noTable:"No table",unnamed:"Unnamed import",sourceToDetect:"Source to detect",activeBadge:"Active",unknown:"Unknown",sessions:"Sessions",events:"Events",showResult:"Show result",loadBatch:"Load this import",deleteUnfinalized:"Delete",deleteUnfinalizedTitle:"Delete this unfinished import?",deleteUnfinalizedDescription:"The unfinished import {{filename}} will be removed from the active ledger. Finalized events are not affected.",deleteUnfinalizedCancel:"Cancel",deleteUnfinalizedConfirm:"Delete import",showLess:"Show less",showAll:"Show all ({{count}})",resultReloaded:"Import result reloaded.",batchReloaded:"Import reloaded. You can resume the import."},g={draftGenerating:"Generating draft",draftGeneratingDetail:"Preparing sessions, normalizing events, and consolidating detected matches.",draftStatus:"Processing"},m="Unavailable in observation mode",u="Unknown date",v="Unknown",y={title:"Roll20 metric reliability",description:"For Roll20 data, avoid damage and roll success metrics. Damage metrics are only viable when every player and the GM use Beyond20 and do not roll damage after a failed roll. Roll success is not measurable on Roll20 today."},b={formatError:"Unsupported format. Supported: .html, .htm, .txt, .log, .csv",dropHere:"Drop a file or click to browse",supportedFormats:"Supported formats: HTML, TXT, LOG, CSV",empty:"empty",reliability:"Reliability",covPrec:"cov {{cov}} / prec {{prec}}",pastImports:"{{count}} past import(s)",clickToChange:"Click to change file",dropVttHere:"Drop your VTT export here",formatHint:"Roll20 (.html) · Foundry VTT (.txt) · or manual import (.csv)",noVttPrefix:"No VTT? Fill in the",csvTemplate:"CSV template",noVttSuffix:"to import your data manually.",whereToFind:"Where to find my export?",helpRoll20:"Open Game Settings > Game Chat Log. Once the chat log is open, show all pages, then right-click > Save as... and save it as HTML.",helpFoundry:"Chat Log → Export Chat Log → generated .txt file.",helpCsvLabel:"Manual CSV",helpCsv:"Download the template above and fill it with your data.",n
1oExportYet:"No export yet? Try with a sample file:",tryDemo:"Try with sample data",fileTooLarge:"File too large. Maximum size: 10 MB.",maxFileSize:"Maximum size: 10 MB per file",eyebrow:"Deposit rite",analyzing:"Reading the grimoire",analyzingDetail:"RollCodex is securing the file and detecting the VTT source. Hang on a moment.",analyzingStatus:"Analysis"},f={title:"Participants",eyebrow:"Matching",mappedSuffix:"linked",associatePlayer:"Associate a player…",playerSelectPlaceholder:"Linked player",characterSelectPlaceholder:"Linked character",gmSelectPlaceholder:"Ledger GM",noLinkedPlayer:"- No linked player -",noLinkedCharacter:"- No linked character -",noLinkedGm:"- No linked GM -",unknownPlayer:"Player",unknownCharacter:"Character",playerActionLabel:"Player action",playerActionCreate:"Create a new player",playerActionAssign:"Link an existing player",playerActionNone:"Ignore this participant",existingPlayerLabel:"Existing player to link",existingPlayerPlaceholder:"Choose a player from the ledger",existingPlayerEmpty:"- Choose a player -",characterActionLabel:"Character sheet action",characterActionCreate:"Create a new character sheet",characterActionAssign:"Link an existing character sheet",characterActionNone:"Do not create a character sheet",existingCharacterLabel:"Existing character sheet",existingCharacterPlaceholder:"Choose a character sheet",existingCharacterEmpty:"- Choose a sheet -",createPlayer:"Create this player",createCharacter:"Create this character",createGm:"Create a GM profile",createPlayerLabel:"Create a player",createCharacterLabel:"Create or link a character",namePlaceholder:"Thomas",campaignLabel:"Campaign *",selectCampaign:"Choose a campaign from the active ledger",selectCampaignDefault:"- Select a campaign -",createCampaign:"Create a campaign",campaignNamePlaceholder:"New campaign",selectTable:"Choose a table from the active ledger",selectTableDefault:"- Select a table -",createTable:"Create a table",tableNamePlaceholder:"New table",submitGm:"Create GM",submitPlayer:"Create player",submitCharacter:"Create character",submitAssociation:"Link character",creatingPlayer:"Creating player...",creatingCharacter:"Creating character...",assigningCharacter:"Linking sheet...",nameRequired:"Character/GM name is required.",noSpeakerSelected:"No participant selected.",chooseCampaignFirst:"Choose or create a campaign from the active ledger before creating this table or player.",chooseTableFirst:"Choose a table from the active ledger before creating this player.",tableCampaignMismatch:"The chosen table is not linked to the selected campaign.",campaignCreated:"Campaign created.",campaignCreateError:"Unable to create campaign.",tableCreated:"Table created.",tableCreateError:"Unable to create table.",playerCreated:"Player/GM created.",playerLinked:"{{player}} is linked to the participant.",playerCreatedLinked:"{{player}} is created and linked to the participant.",playerLinkedCharacterAssigned:"{{player}} is linked. Character sheet assigned.",playerCreatedCharacterQueued:"{{player}} is created and linked. Character sheet creation is running in the background.",playerLinkedCharacterQueued:"{{player}} is linked. Character sheet creation is running in the background.",characterLinked:"{{character}} is linked to the participant.",characterCreatedLinked:"{{character}} is created and linked to the participant.",characterSheetCreated:"Character sheet created for {{character}}.",characterSheetCreatedPending:"Character sheet created and left pending: {{character}}.",playerCharacterCreated:"Player and assigned character created.",playerPendingCharacterCreated:"Player created, character left pending.",characterCreateError:"Player created, but unable to create character.",playerCreateError:"Unable to create player",playerCreatedNoCharacter:"{{player}} is created. Select or create a character to link this participant.",unmappedCount:"{{count}} participant(s) without a link",unmappedHint:"Select an existing character, create one, or choose a ledger GM for GM participants.",detectedSpeakers:"Detected participants",associateHint:"Associate each participant with a character. For a GM participant, choose an available GM in the ledger.",mappedCount:"{{mapped}}/{{total}} linked",messageCount:"{{count}} messages",ignoreUnmapped:"- Ignore / not linked -",generateSessions:"Generate sessions →",profileType:"Profile type",playerType:"Player",gmType:"GM",gmNameLabel:"GM name *",charNameLabel:"Character name *",progressionLabel:"Level / rank (optional)",progressionPlaceholder:"E.g.: 3",levelMinError:"Level/rank must be greater than or equal to 1.",noCharacterForTable:"No characters available for this table.",noGameMasters:"No GM available",selectGmFromRegistry:"Choose an available GM in the ledger.",speakerLeftUnmapped:"Participant left without a link for now.",selectPlayerRequired:"Choose the existing player to link.",selectCharacterRequired:"Select a character to assign.",createCharacterSheetLabel:"Create a character sheet",createCharacterSheetToggle:"Also create a character sheet",assignCharacterToggle:"Link the sheet to the player",createCharacterSheetHint:"The sheet is created in the selected table and uses the detected character name.",gmPlaceholder:"Game Master",charPlaceholder:"Thorin",playerNameLabel:"Real player name (optional)",tableLabel:"Game table *",tableHint:"Table binding must be explicit to avoid ambiguous anchoring between ledgers.",noSpeakersTitle:"No participants detected",noSpeakersHint:"The file produced no usable data. Make sure it is a valid Roll20 (.html) or Foundry VTT (.txt) export.",backToUpload:"Back to upload"},C={title:"Sessions",deleteSession:"Delete this session",allSessions:"All sessions",noiseCount:"Noise · {{count}}",allTypes:"All types",allPlayers:"All characters",noiseToggle:"Noise",noiseToggleShow:"Show noise ({{count}})",noiseToggleHide:"Hide noise ({{count}})",noiseToggleNone:"No noise detected",visibleCount:"{{visible}} shown of {{total}}",reviewMode:"Review mode",reviewModeExit:"Exit review mode",reviewPrevious:"Previous",reviewNext:"Next",reviewProgress:"{{current}} / {{total}}",reviewJumpAria:"Event number to jump to",reviewJumpTitle:"Enter a number and confirm to jump to that event",reviewedCount:"{{count}} reviewed of {{total}}",reviewedEvent:"Reviewed event",colSpeaker:"Participant",colSpeakerPlayer:"Participant / character",colAction:"Action",colType:"Type",colConfidence:"Confidence",confidenceDiagnostic:{title:"Confidence check",anomaliesTitle:"Anomalies detected",penaltyTotal:"Total penalty",finalConfidence:"Final confidence",inferredLabel:"Suggested"},anomaly:{attack_no_roll:"{{type}} without roll result",crit_non_combat:"nat 20 on {{type}} (non-combat)",initiative_incoherent_dnd5e:"D&D5e initiative > 30 ({{value}})",critical_miss_with_zero_damage:"Critical miss ({{value}}) with 0 explicit damage",damage_type_missing_value:"Type {{type}} without damage value",healing_type_missing_value:"Type {{type}} without heal value",aberrant_numeric_value:"Numeric value > 999 ({{value}})",damage_far_from_attack_phase_change:"Damage {{distance}} step(s) after attack (phase change)",damage_orphaned_distance:"Isolated damage ({{distance}} step(s) from attack)",damage_no_prior_attack:"Damage without prior attack",healing_self_no_prior_damage:"Self
1-heal without prior damage",event_isolated_phase_change:"Isolated event at phase boundary"}},k={title:"Review",searchPlaceholder:"Search...",noEvents:"No events",selectCampaignFirst:"Choose a campaign and table in the Participants step before the final import. Your current review will be kept.",importButton:"Import ({{events}} events, {{sessions}} session(s))",markValid:"Mark as valid",markNoise:"Mark as noise",showDetails:"Show details",hideDetails:"Hide details",type:"Type",attackDamageType:"Attack / damage",attackDamageKind:"Kind",attackDamageKinds:{weapon:"Weapon",spell:"Spell",ability:"Ability",other:"Other"},natureNone:"None",natureCustom:"Other…",abilityNaturePlaceholder:"e.g. Dexterity",skillNaturePlaceholder:"e.g. Perception",abilities:{strength:"Strength",dexterity:"Dexterity",constitution:"Constitution",intelligence:"Intelligence",wisdom:"Wisdom",charisma:"Charisma"},featureNatures:{class:"Class",race:"Species",other:"Other"},skills:{acrobatics:"Acrobatics",animal_handling:"Animal Handling",arcana:"Arcana",athletics:"Athletics",crafting:"Crafting",deception:"Deception",diplomacy:"Diplomacy",history:"History",insight:"Insight",intimidation:"Intimidation",investigation:"Investigation",lore:"Lore",medicine:"Medicine",nature:"Nature",occultism:"Occultism",perception:"Perception",performance:"Performance",persuasion:"Persuasion",religion:"Religion",sleight_of_hand:"Sleight of Hand",society:"Society",stealth:"Stealth",survival:"Survival",thievery:"Thievery"},player:"Player",character:"Character",mappedPlayer:"Linked player: {{player}}",mappedCharacter:"Linked character: {{character}}",sourceSpeaker:"Source participant: {{speaker}}",action:"Action",damageType:"Damage type",damageSubtypeNone:"None",damageSubtypeCustom:"Other…",damageSubtypeCustomPlaceholder:"e.g. radiation",damageBreakdownAdd:"Add a damage type",damageBreakdownRemove:"Remove this component",damageBreakdownTotal:"Total: {{total}}",damageBreakdownAmountPlaceholder:"e.g. 7",damageBreakdownAmountAria:"Amount of damage component {{index}}",damageBreakdownTypeAria:"Type of damage component {{index}}",damageSubtypes:{slashing:"Slashing",piercing:"Piercing",bludgeoning:"Bludgeoning",acid:"Acid",cold:"Cold",fire:"Fire",force:"Force",lightning:"Lightning",necrotic:"Necrotic",poison:"Poison",psychic:"Psychic",radiant:"Radiant",thunder:"Thunder",electricity:"Electricity",sonic:"Sonic",mental:"Mental",bleed:"Bleed",vitality:"Vitality",void:"Void",physical:"Physical",firearms:"Firearms",magic:"Magic",superficial:"Superficial",aggravated:"Aggravated",energy:"Energy",explosive:"Explosive",warp:"Warp",kinetic:"Kinetic",ion:"Ion"},modifier:"Modifier",rollTotal:"Roll total",rollMode:"Advantage / disadvantage",rollModeNone:"Normal",rollModeAdvantage:"Advantage",rollModeDisadvantage:"Disadvantage",rollOutcome:"Critical state",rollOutcomeNormal:"Standard",rollOutcomeCritical:"Critical",rollOutcomeFumble:"Critical failure",rollAdvantageShort:"Adv.",rollDisadvantageShort:"Disadv.",rollAdvantageTitle:"Roll with advantage",rollDisadvantageTitle:"Roll with disadvantage",rollCriticalShort:"Crit.",rollFumbleShort:"Crit. fail",damage:"Damage *",healing:"Healing *",rawText:"Source text",gmSystem:"- GM / system -",unknown:"Unknown",combinedRollBlock:"Attack roll",damageBlock:"Damage",combinedDamageBlock:"Linked damage",combinedHealBlock:"Linked healing",combinedDamageBadgeTitle:"Roll and damage carried by the same event",combinedHealBadgeTitle:"Roll and healing carried by the same event",linkAdjacent:"Link neighbor",linkAdjacentBefore:"Previous neighbor",linkAdjacentAfter:"Next neighbor",linkAdjacentBeforeDirection:"previous",linkAdjacentAfterDirection:"next",linkAdjacentUnavailableTitle:"No {{direction}} neighbor available",linkAdjacentDamageTitle:"Create an attack/damage link with the compatible {{direction}} neighbor",linkAdjacentHealTitle:"Create a roll/healing link with the compatible {{direction}} neighbor",linkManualTitle:"Create a link with another compatible event in the session",linkManualPlaceholder:"Link elsewhere",linkManualUnavailableTitle:"No other compatible event available in this session",linkValueDamage:"{{value}} damage",linkValueHeal:"{{value}} healing",linkValueRoll:"roll {{value}}",linkValueSuccesses:"{{value}} successes",unlinkAdjacent:"Cancel neighbor link",unlinkAdjacentTitle:"Separate this roll from its linked neighbor",unlinkAdjacentUnavailableTitle:"No manual neighbor link to cancel"}
1,T={title:"Results",searchPlaceholder:"Search...",noEvents:"No events",importSuccess:"Import successful!",sessionsCreated:"{{count}} session(s) created",sealEyebrow:"Sealed into the codex",sealTitle:"Entry sealed into the ledger",sealDetail:"{{count}} session(s) logged into the active ledger. Each imported event is bound to its campaign, table, and voice.",sealBadge:"Entry sealed",statSessions:"Sessions",statEvents:"Events",statSpeakers:"Detected voices",importReadyDesc:"{{sessions}} session(s) and {{events}} event(s) saved in the ledger.",totalSessions:"Sessions",totalEvents:"Events",playersLinked:"Linked players",pointsToReview:"To review",successWithReview:"Import usable, with points to review",noReviewIssues:"Import usable with no blocking point detected",reviewHelp:"The items below stay within the import scope: participants, reading confidence, and detected noise.",unresolvedSpeakers:"{{count}} participant(s) without a linked player",lowConfidence:"{{count}} low-confidence event(s)",noiseEvents:"{{count}} noise event(s) detected",newImport:"New import",dashboard:"Dashboard",campaigns:"Campaigns",metrics:"Metrics",suggestedMetrics:"What this import can help read",suggestedMetricsDesc:"These recommendations use only the fields detected in this import: types, rolls, damage, healing, and named actions.",suggestionCount:"{{count}} suggestion(s)",noEventDetails:"Event details are not available for this import.",eventCount:"{{count}} events",filteredCount:"{{filtered}} / {{total}} events",colSpeaker:"Participant",colAction:"Action",colType:"Type",colRoll:"Roll",colDmgHeal:"Damage/Healing",colConfidence:"Confidence",expandEvent:"Show this event source text",collapseEvent:"Hide this event source text",eventRawText:"Source text"},w={batchNotUsable:"This import cannot be processed from the current interface.",analysisComplete:"Analysis complete.",loadExampleError:"Error loading example.",speakersDetected:"{{speakers}} participant(s) detected in {{sessions}} session(s).",draftReady:"CSV draft ready.",draftError:"Error preparing CSV draft.",sessionsDraftReady:"Session draft generated.",sessionsDraftError:"Error generating session draft.",saveBatchError:"Unable to save import state.",unfinalizedBatchDeleted:"Unfinished import deleted.",unfinalizedBatchDeleteError:"Unable to delete this unfinished import.",unfinalizedBatchDeletedStorageWarning:"Import deleted, but the source file could not be cleaned up automatically.",importSuccess:"Import finalized successfully.",importError:"Error during finalization.",analysisError:"Error during analysis.",analysisEmptyFile:"Empty or unreadable file. Make sure the file contains a valid VTT export.",analysisUnknownHtml:"HTML file found but no Roll20 data detected. Make sure it comes from the Roll20 chat log after showing all pages and saving it as HTML.",analysisUnknownText:"Unrecognized text format. Make sure the file comes from Foundry VTT (Chat Log > Export) or use the CSV template.",analysisFoundryNoBlocks:"Foundry VTT file recognized but no blocks extracted. Check that the separator is present between messages.",analysisRoll20NoBlocks:"Roll20 file recognized but no entries extracted. The HTML structure appears unusual.",analysisNoData:"No usable data detected in this file."},S={saving:"Saving sessions, events, and associations to the ledger."},R={placeholder:"Select or create a campaign",noMatch:"No matching campaign found. You can create one.",createNew:"Create a new campaign",summaryPlaceholder:"Campaign summary",detected:"Detected campaign: {{name}}",matchFound:"A matching campaign already exists.",label:"Campaign",noCampaign:"- No campaign -",dialogTitle:"New campaign",nameLabel:"Campaign name *",namePlaceholder:"e.g. Tomb of Annihilation",descLabel:"Description (optional)"},D={placeholder:"Select or create a table",createNew:"Create a new table",selectCampaignFirst:"Select a campaign first to create a table.",namePlaceholder:"e.g. Thursday night group",descPlaceholder:"e.g. Weekly campaign",label:"Game table",noTable:"- No table -",linkedToCampaign:"The table will be linked to the selected campaign.",dialogTitle:"New game table",nameLabel:"Table name *",linkedTo:"Will be linked to campaign:",descLabel:"Description (optional)",vttSourceLabel:"VTT source (info)"},x={noWorkspace:"No active ledger selected to start the import.",systemRequired:"Target system is required to create the import.",storageMissing:"Import information is incomplete.",actionRequired:"Import action is required.",batchRequired:"Import is required.",noWorkspaceForImport:"No active ledger selected to start the import.",batchNotInWorkspace:"This import no longer belongs to the active ledger.",batchUnfinalizedDeleteUnavailable:"This import is finalized or can no longer be deleted.",loadDemoFailed:"Unable to load the example file.",unknownError:"Unknown error",campaignTableRequired:"You must choose a campaign and a table before finalizing.",campaignTableUnavailable:"The selected campaign or table is no longer available in the active ledger.",tableCampaignMismatch:"The selected table is not linked to the selected campaign.",playerTableMismatch:"{{player}} is not linked to the table selected for this import.",noWorkspaceForFinalize:"No active ledger selected to finalize the import.",campaignUnavailable:"The selected campaign is no longer available in the active ledger.",storageQuotaExceeded:"This ledger's storage quota is full. Remove existing imports or upgrade your plan to continue.",importWorkloadTooLarge:"Import too large: {{events}} events across {{sessions}} sessions. Current limits: {{maxEvents}} events per import, {{maxSessions}} sessions, {{maxEventsPerSession}} events per session. Split the export into several files.",oldBatch:"Old ({{days}}d)"},A={eyebrow:"Breakdown",confirmedSuffix:"sessions",eventsSuffix:"events",detectedSessions:"Detected sessions",autoRenumber:"A number is suggested automatically. Enter a manual number only when your table chronology requires it.",confirmedBadge:"{{count}} confirmed session(s) · {{events}} events",fewEvents:"Few events",alreadyImported:"Already imported",disabledSession:"Disabled session",sessionNumberLabel:"Manual no.",sessionNumberAuto:"Auto: {{number}}",sessionNameLabel:"Name",sessionNamePlaceholder:"Session {{index}} name",toggleSession:"Enable or disable {{session}}
1",invalidSessionNumber:"The manual number must be an integer greater than 0.",duplicateSessionNumber:"Each active session needs an available unique number for this table. Duplicate: {{numbers}}.",eventStats:"{{nonNoise}} valid events · {{noiseCount}} noise",reviewEvents:"Review events ({{count}}) →"},P={hints:{bannerEyebrow:"Connector suggestions",bannerLoading:"Loading VTT mapping suggestions",bannerTitle:"{{count}} mapping suggestion(s) to review",bannerDescription:"These suggestions come from the connected VTT snapshot and only update learning after your review.",knownCount:"{{count}} known",openReview:"Review suggestions",title:"VTT mapping suggestions",empty:"No mapping suggestion is attached to this import.",close:"Close",reviewDescription:"Review {{count}} suggestion(s) before finalizing this import.",saved:"{{accepted}} accepted, {{corrected}} corrected, {{rejected}} rejected.",error:"Unable to save VTT mapping reviews.",source_kind_speaker:"Speaker",source_kind_actor:"Actor",source_kind_token:"Token",source_kind_user:"User",source_kind_action:"Action",source_kind_roll_signature:"Roll signature",target_kind_player:"Player target",target_kind_character:"Character target",target_kind_event_type:"Event type target",target_kind_noise:"Noise target",targetUnknown:"Unresolved target",status_new:"New",status_match:"Known",status_conflict:"Changed",status_unresolved:"Unresolved",status_rejected:"Rejected",confidence:"Confidence",accept:"Accept",reject:"Reject",correct:"Correct",accept_all:"Accept available",reject_all:"Reject all",correctionLabel:"Correction",correctionPlaceholder:"Choose the right target",correctedTo:"Corrected to {{target}}",acceptDisabled:"This suggestion has no accepted target yet.",correctDisabled:"Choose a correction first.",cancel:"Cancel",saving:"Saving",save:"Save review",stats:"{{accepted}} accepted, {{corrected}} corrected, {{rejected}} rejected, {{pending}} pending"}},L={eyebrow:"VTT Source",loadingDescription:"Loading data for the active ledger.",backLabel:"Dashboard",subtitle:"Sessions and events from this VTT source",metricsLabel:"VTT Metrics",loadingMetrics:"Loading metrics…",campaignsTitle:"Campaigns",tablesTitle:"Tables",unresolvedSpeakers:"Unlinked participants",noCampaigns:"No campaign for this source.",sessionsTitle:"Sessions",noSessions:"No sessions for this source.",noDate:"No date",latestEventsTitle:"Latest events",noEvents:"No events for this source.",unknownSpeaker:"Unknown",noAction:"No action"},N={progress:"Progress"},E={parseWarningTitle:"Import diagnostic",suggestionsTitle:"Suggestions",technicalDetailsLabel:"Technical details",reasonCode:"Diagnostic code: {{reason}}"},M={title:e,nav:t,steps:a,guidance:o,timeline:n,messaging:i,loading:r,access:s,header:l,context:c,connections:d,foundryConnect:p,batch:h,processing:g,impersonating:m,unknownDate:u,unknownSource:v,roll20MetricsNotice:y,step1:b,step2:f,step3:C,step4:k,step5:T,toasts:w,finalize:S,campaign:R,table:D,errors:x,step1b:A,vtt:P,vttDetail:L,stepper:N,diagnostic:E};export{s as access,h as batch,R as campaign,d as connections,c as context,M as default,E as diagnostic,x as errors,S as finalize,p as foundryConnect,o as guidance,l as header,m as impersonating,r as loading,i as messaging,t as nav,g as processing,y as roll20MetricsNotice,b as step1,A as step1b,f as step2,C as step3,k as step4,T as step5,N as stepper,a as steps,D as table,n as timeline,e as title,w as toasts,u as unknownDate,v as unknownSource,P as vtt,L as vttDetail};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.