@protobase/ui 0.66.6 → 0.66.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/account/blocks/password-block.js +1 -1
- package/dist/account/change-email-dialog.js +5 -1
- package/dist/account/password-change-dialog.js +4 -11
- package/dist/account/password-section.js +2 -2
- package/dist/app/error-reporting.js +8 -3
- package/dist/app/field-types/field-type-cells.js +2 -1
- package/dist/auth/email-code-form.js +8 -4
- package/dist/auth/sign-up-code-form.js +8 -4
- package/dist/auth/two-factor-form.js +2 -1
- package/dist/locale/en.js +5 -4
- package/dist/locale/nl.js +5 -4
- package/dist/package.js +1 -1
- package/dist/shell/assets/app-BZ_OcfpZ.js +8 -0
- package/dist/shell/assets/calls-uuSb7D6L.js +2 -0
- package/dist/shell/assets/cn-B1sdg8aY.js +2 -0
- package/dist/shell/assets/export-worker-CcXp0ZdG.js +15 -0
- package/dist/shell/assets/index-B2M0LDVQ.js +2 -0
- package/dist/shell/assets/maplibre-DfXLXH-O.js +815 -0
- package/dist/shell/assets/{markdown-content-DOuciTNH.js → markdown-content-L1MZShpP.js} +2 -2
- package/dist/shell/assets/parse-worker-CUJ2o-AL.js +35 -0
- package/dist/shell/assets/preload-helper-Ru-oozfe.js +2 -0
- package/dist/shell/assets/{prod-YZ9ZMG1O.js → prod-DSoLg5cQ.js} +3 -3
- package/dist/shell/assets/{react-CR5VJ85Q.js → react-CqoBMk9d.js} +2 -2
- package/dist/shell/assets/record-map-Cocva8wo.js +2 -0
- package/dist/shell/assets/records-map-B1PDo3PS.js +2 -0
- package/dist/shell/assets/rolldown-runtime-DXfiGoCU.js +1 -0
- package/dist/shell/assets/shared-protobase-ui-V8ARYzmY.js +2 -0
- package/dist/shell/assets/shared-react-CJlT6JLM.js +1 -0
- package/dist/shell/assets/shared-react-dom-untDBgp5.js +1 -0
- package/dist/shell/assets/shared-react-jsx-runtime-DGG2WguE.js +1 -0
- package/dist/shell/assets/{vendor-Kvdo8Jrw.js → vendor-qs9zUu9T.js} +2 -2
- package/dist/shell/index.html +8 -8
- package/dist/shell/protobase.shell.json +2 -2
- package/dist/shell/protobase.sw.js +2 -2
- package/dist/shell-source-maps/assets/app-BZ_OcfpZ.js.map +1 -0
- package/dist/shell-source-maps/assets/calls-uuSb7D6L.js.map +1 -0
- package/dist/shell-source-maps/assets/cn-B1sdg8aY.js.map +1 -0
- package/dist/shell-source-maps/assets/export-worker-CcXp0ZdG.js.map +1 -0
- package/dist/shell-source-maps/assets/index-B2M0LDVQ.js.map +1 -0
- package/dist/shell-source-maps/assets/maplibre-DfXLXH-O.js.map +1 -0
- package/dist/shell-source-maps/assets/{markdown-content-DOuciTNH.js.map → markdown-content-L1MZShpP.js.map} +1 -1
- package/dist/shell-source-maps/assets/parse-worker-CUJ2o-AL.js.map +1 -0
- package/dist/shell-source-maps/assets/preload-helper-Ru-oozfe.js.map +1 -0
- package/dist/shell-source-maps/assets/prod-DSoLg5cQ.js.map +1 -0
- package/dist/shell-source-maps/assets/react-CqoBMk9d.js.map +1 -0
- package/dist/shell-source-maps/assets/record-map-Cocva8wo.js.map +1 -0
- package/dist/shell-source-maps/assets/records-map-B1PDo3PS.js.map +1 -0
- package/dist/shell-source-maps/assets/shared-protobase-ui-V8ARYzmY.js.map +1 -0
- package/dist/shell-source-maps/assets/{vendor-Kvdo8Jrw.js.map → vendor-qs9zUu9T.js.map} +1 -1
- package/package.json +4 -4
- package/dist/shell/assets/app-D1iOLNRp.js +0 -8
- package/dist/shell/assets/calls-CMM47K7J.js +0 -2
- package/dist/shell/assets/cn-Bi0ZEjD9.js +0 -2
- package/dist/shell/assets/export-worker-BKuC4P2E.js +0 -15
- package/dist/shell/assets/index-DYuB1IqS.js +0 -2
- package/dist/shell/assets/maplibre-lc2A-_P4.js +0 -815
- package/dist/shell/assets/parse-worker-BzLD2jKf.js +0 -35
- package/dist/shell/assets/preload-helper-DedkISGJ.js +0 -2
- package/dist/shell/assets/record-map-CupIwJyD.js +0 -2
- package/dist/shell/assets/records-map-Cs38aEuP.js +0 -2
- package/dist/shell/assets/rolldown-runtime-hePW80VL.js +0 -1
- package/dist/shell/assets/shared-protobase-ui-CMNP9cBW.js +0 -2
- package/dist/shell/assets/shared-react-CuZpzdyh.js +0 -1
- package/dist/shell/assets/shared-react-dom-BNlY7-7i.js +0 -1
- package/dist/shell/assets/shared-react-jsx-runtime-Csr2Kx2w.js +0 -1
- package/dist/shell-source-maps/assets/app-D1iOLNRp.js.map +0 -1
- package/dist/shell-source-maps/assets/calls-CMM47K7J.js.map +0 -1
- package/dist/shell-source-maps/assets/cn-Bi0ZEjD9.js.map +0 -1
- package/dist/shell-source-maps/assets/export-worker-BKuC4P2E.js.map +0 -1
- package/dist/shell-source-maps/assets/index-DYuB1IqS.js.map +0 -1
- package/dist/shell-source-maps/assets/maplibre-lc2A-_P4.js.map +0 -1
- package/dist/shell-source-maps/assets/parse-worker-BzLD2jKf.js.map +0 -1
- package/dist/shell-source-maps/assets/preload-helper-DedkISGJ.js.map +0 -1
- package/dist/shell-source-maps/assets/prod-YZ9ZMG1O.js.map +0 -1
- package/dist/shell-source-maps/assets/react-CR5VJ85Q.js.map +0 -1
- package/dist/shell-source-maps/assets/record-map-CupIwJyD.js.map +0 -1
- package/dist/shell-source-maps/assets/records-map-Cs38aEuP.js.map +0 -1
- package/dist/shell-source-maps/assets/shared-protobase-ui-CMNP9cBW.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"export-worker-BKuC4P2E.js","names":["app","account","app","auth","calls","carousel","chat","format","forms","invitations","lists","live","markdown","mentions","organizations","plugins","primitives","roles","status","toasts","users","createElement","Fragment","text","text","text","text","message","__commonJSMin","mod","cb","enumLabel","labels","value","fallback","activeLocale","setFallbackLocale","locale","formatTags","formatTag","cache","cachedFormat","tag","id","key","make","memoize","options","cacheDefault","serializer","serializerDefault","strategyDefault","fn","isPrimitive","monadic","cacheKey","arg","computedValue","variadic","args","assemble","strategy","context","serialize","strategyVariadic","strategyMonadic","ObjectWithoutPrototypeCache","strategies","DATE_TIME_REGEX","parseDateTimeSkeleton","result","skeleton","len","match","WHITE_SPACE_REGEX","parseNumberSkeletonFromString","stringTokens","x","tokens","stringToken","stemAndOptions","stem","option","icuUnitToEcma","unit","FRACTION_PRECISION_REGEX","SIGNIFICANT_PRECISION_REGEX","INTEGER_WIDTH_REGEX","CONCISE_INTEGER_WIDTH_REGEX","parseSignificantPrecision","str","g2","g1","parseSign","parseConciseScientificAndEngineeringStem","signDisplay","parseNotationOptions","opt","parseNumberSkeleton","token","all","g3","g4","g5","signOpts","conciseScientificAndEngineeringOpts","ErrorKind","\"EXPECT_ARGUMENT_CLOSING_BRACE\"","\"EMPTY_ARGUMENT\"","\"MALFORMED_ARGUMENT\"","\"EXPECT_ARGUMENT_TYPE\"","\"INVALID_ARGUMENT_TYPE\"","\"EXPECT_ARGUMENT_STYLE\"","\"INVALID_NUMBER_SKELETON\"","\"INVALID_DATE_TIME_SKELETON\"","\"EXPECT_NUMBER_SKELETON\"","\"EXPECT_DATE_TIME_SKELETON\"","\"UNCLOSED_QUOTE_IN_ARGUMENT_STYLE\"","\"EXPECT_SELECT_ARGUMENT_OPTIONS\"","\"EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE\"","\"INVALID_PLURAL_ARGUMENT_OFFSET_VALUE\"","\"EXPECT_SELECT_ARGUMENT_SELECTOR\"","\"EXPECT_PLURAL_ARGUMENT_SELECTOR\"","\"EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT\"","\"EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT\"","\"INVALID_PLURAL_ARGUMENT_SELECTOR\"","\"DUPLICATE_PLURAL_ARGUMENT_SELECTOR\"","\"DUPLICATE_SELECT_ARGUMENT_SELECTOR\"","\"MISSING_OTHER_CLAUSE\"","\"INVALID_TAG\"","\"INVALID_TAG_NAME\"","\"UNMATCHED_CLOSING_TAG\"","\"UNCLOSED_TAG\"","isLiteralElement","el","isArgumentElement","isNumberElement","isDateElement","isTimeElement","isSelectElement","isPluralElement","isPoundElement","isTagElement","isNumberSkeleton","isDateTimeSkeleton","SPACE_SEPARATOR_REGEX","IDENTIFIER_PREFIX_REGEX","timeData","\"AC\"","\"AD\"","\"AE\"","\"AF\"","\"AG\"","\"AI\"","\"AL\"","\"AM\"","\"AO\"","\"AR\"","\"AS\"","\"AT\"","\"AU\"","\"AW\"","\"AX\"","\"AZ\"","\"BA\"","\"BB\"","\"BD\"","\"BE\"","\"BF\"","\"BG\"","\"BH\"","\"BI\"","\"BJ\"","\"BL\"","\"BM\"","\"BN\"","\"BO\"","\"BQ\"","\"BR\"","\"BS\"","\"BT\"","\"BW\"","\"BY\"","\"BZ\"","\"CA\"","\"CC\"","\"CD\"","\"CF\"","\"CG\"","\"CH\"","\"CI\"","\"CK\"","\"CL\"","\"CM\"","\"CN\"","\"CO\"","\"CP\"","\"CR\"","\"CU\"","\"CV\"","\"CW\"","\"CX\"","\"CY\"","\"CZ\"","\"DE\"","\"DG\"","\"DJ\"","\"DK\"","\"DM\"","\"DO\"","\"DZ\"","\"EA\"","\"EC\"","\"EE\"","\"EG\"","\"EH\"","\"ER\"","\"ES\"","\"ET\"","\"FI\"","\"FJ\"","\"FK\"","\"FM\"","\"FO\"","\"FR\"","\"GA\"","\"GB\"","\"GD\"","\"GE\"","\"GF\"","\"GG\"","\"GH\"","\"GI\"","\"GL\"","\"GM\"","\"GN\"","\"GP\"","\"GQ\"","\"GR\"","\"GS\"","\"GT\"","\"GU\"","\"GW\"","\"GY\"","\"HK\"","\"HN\"","\"HR\"","\"HU\"","\"IC\"","\"ID\"","\"IE\"","\"IL\"","\"IM\"","\"IN\"","\"IO\"","\"IQ\"","\"IR\"","\"IS\"","\"IT\"","\"JE\"","\"JM\"","\"JO\"","\"JP\"","\"KE\"","\"KG\"","\"KH\"","\"KI\"","\"KM\"","\"KN\"","\"KP\"","\"KR\"","\"KW\"","\"KY\"","\"KZ\"","\"LA\"","\"LB\"","\"LC\"","\"LI\"","\"LK\"","\"LR\"","\"LS\"","\"LT\"","\"LU\"","\"LV\"","\"LY\"","\"MA\"","\"MC\"","\"MD\"","\"ME\"","\"MF\"","\"MG\"","\"MH\"","\"MK\"","\"ML\"","\"MM\"","\"MN\"","\"MO\"","\"MP\"","\"MQ\"","\"MR\"","\"MS\"","\"MT\"","\"MU\"","\"MV\"","\"MW\"","\"MX\"","\"MY\"","\"MZ\"","\"NA\"","\"NC\"","\"NE\"","\"NF\"","\"NG\"","\"NI\"","\"NL\"","\"NO\"","\"NP\"","\"NR\"","\"NU\"","\"NZ\"","\"OM\"","\"PA\"","\"PE\"","\"PF\"","\"PG\"","\"PH\"","\"PK\"","\"PL\"","\"PM\"","\"PN\"","\"PR\"","\"PS\"","\"PT\"","\"PW\"","\"PY\"","\"QA\"","\"RE\"","\"RO\"","\"RS\"","\"RU\"","\"RW\"","\"SA\"","\"SB\"","\"SC\"","\"SD\"","\"SE\"","\"SG\"","\"SH\"","\"SI\"","\"SJ\"","\"SK\"","\"SL\"","\"SM\"","\"SN\"","\"SO\"","\"SR\"","\"SS\"","\"ST\"","\"SV\"","\"SX\"","\"SY\"","\"SZ\"","\"TA\"","\"TC\"","\"TD\"","\"TF\"","\"TG\"","\"TH\"","\"TJ\"","\"TL\"","\"TM\"","\"TN\"","\"TO\"","\"TR\"","\"TT\"","\"TW\"","\"TZ\"","\"UA\"","\"UG\"","\"UM\"","\"US\"","\"UY\"","\"UZ\"","\"VA\"","\"VC\"","\"VE\"","\"VG\"","\"VI\"","\"VN\"","\"VU\"","\"WF\"","\"WS\"","\"XK\"","\"YE\"","\"YT\"","\"ZA\"","\"ZM\"","\"ZW\"","getBestPattern","skeletonCopy","patternPos","patternChar","extraLength","hourLen","dayPeriodLen","hourChar","getDefaultHourSymbolFromLocale","hourCycle","localeWithHourCycles","languageTag","regionTag","SPACE_SEPARATOR_START_REGEX","SPACE_SEPARATOR_END_REGEX","createLocation","hasNativeFromEntries","hasTrimStart","hasTrimEnd","fromEntries","obj","k","v","entries","trimStart","s","trimEnd","IDENTIFIER_PREFIX_RE","createIdentifierPrefixRegex","regex","matchIdentifierAtIndex","index","plainTopLevelEndPosition","message","line","column","offset","code","next","Parser","firstCode","plainEndPosition","start","elements","char","nestingLevel","expectingCloseTag","parentArgType","position","_isAlpha","startPosition","tagName","childrenResult","children","endTagStartPosition","closingTagNameStartPosition","startOffset","_isPotentialElementNameChar","parseQuoteResult","parseUnquotedResult","parseLeftAngleResult","location","_isAlphaOrSlash","codePoints","ch","openingBracePosition","startingPosition","endOffset","typeStartPosition","argType","typeEndPosition","styleAndLocation","styleStartPosition","style","argCloseResult","dateTimePattern","identifierAndLocation","pluralOffset","optionsResult","nestedBraces","apostrophePosition","hasOtherClause","parsedSelectors","selector","selectorLocation","parsedFirstIdentifier","fragmentResult","expectCloseTag","sign","hasDigits","decimal","invalidNumberError","expectNumberError","prefix","i","currentOffset","pattern","targetOffset","_isWhiteSpace","codepoint","c","pruneLocation","els","parse","opts","error","FormatError","msg","originalMessage","InvalidValueError","variableId","InvalidValueTypeError","type","MissingValueError","mergeLiteral","parts","lastPart","part","isFormatXMLElementFn","formatToParts","currentPluralValue","formatters","locales","varName","values","formats","scale","formatFn","chunks","p","exactKey","numericValue","rule","mergeConfig","c2","c1","mergeConfigs","configs","defaultConfig","createFastMemoizeCache","store","createDefaultFormatters","IntlMessageFormat","parseOpts","overrideFormats","supportedLocales","require_react_production","REACT_ELEMENT_TYPE","REACT_FRAGMENT_TYPE","ReactNoopUpdateQueue","assign","emptyObject","Component","props","updater","partialState","callback","ComponentDummy","PureComponent","pureComponentPrototype","hasOwnProperty","ReactElement","refProp","propName","config","childrenLength","childArray","import_react","catalogues","\"cancel\"","\"day\"","\"week\"","\"notFound\"","\"noResource\"","\"somethingWentWrong\"","\"signInPolicy\"","\"adminsOnly\"","\"onlyAdminPolicy\"","\"ownersOnly\"","\"onlyOwners\"","\"chooseResource\"","\"pickFromSidebar\"","\"nothingHere\"","\"noPage\"","\"assistant\"","\"operationFailed\"","\"nothingSaved\"","\"admin\"","\"new\"","\"loadingRecord\"","\"noComponent\"","\"choose\"","\"fileMissing\"","\"chooseFileFor\"","\"notUploaded\"","\"uploadingLabel\"","\"uploading\"","\"replace\"","\"remove\"","\"dropFile\"","\"chooseFile\"","\"average\"","\"pages\"","\"account\"","\"sales\"","\"crm\"","\"catalog\"","\"inventory\"","\"hr\"","\"cannotReach\"","\"searchPlural\"","\"couldNotLoadOptions\"","\"noMatches\"","\"loading\"","\"leaveTitle\"","\"leaveDescription\"","\"leaveInputLost\"","\"stay\"","\"leave\"","\"reloadTitle\"","\"reloadDraftKept\"","\"reloadInputLost\"","\"keepEditing\"","\"reload\"","\"show\"","\"hide\"","\"couldNotShow\"","\"setNewValue\"","\"noAnswer\"","\"signInRefused\"","\"loadingFrom\"","\"restWorks\"","\"tryAgain\"","\"staffSession\"","\"staffSignedIn\"","\"stopStaffSession\"","\"open\"","\"openLabel\"","\"navigation\"","\"resources\"","\"breadcrumb\"","\"tabs\"","\"more\"","\"openNavigation\"","\"backTo\"","\"search\"","\"closeSearch\"","\"clearSearch\"","\"globalSearch\"","\"searchResults\"","\"searching\"","\"profileMenu\"","\"organizations\"","\"roles\"","\"signIn\"","\"signOut\"","\"theme\"","\"light\"","\"dark\"","\"system\"","\"recent\"","\"couldNotLoad\"","\"viewAll\"","\"couldNotSearch\"","\"title\"","\"change\"","\"notSet\"","\"yes\"","\"no\"","\"nothingYet\"","\"weekOf\"","\"other\"","\"records\"","\"couldNotPost\"","\"comment\"","\"placeholder\"","\"showEarlier\"","\"noComments\"","\"confirmTitle\"","\"confirmWhy\"","\"usePasskey\"","\"authenticatorCode\"","\"confirm\"","\"nothingToConfirmWith\"","\"subject\"","\"submit\"","\"notCreated\"","\"notSaved\"","\"setByDatabase\"","\"details\"","\"otherFields\"","\"notAllowed\"","\"cannotCreate\"","\"confirmDescription\"","\"delete\"","\"changedTitle\"","\"changedDescription\"","\"reviewChanges\"","\"deleteAnyway\"","\"noVisibleChanges\"","\"bulkConfirmTitle\"","\"bulkConfirmDescription\"","\"deleteCount\"","\"deleting\"","\"progress\"","\"working\"","\"deleted\"","\"deletedOf\"","\"kept\"","\"done\"","\"deletedToast\"","\"undo\"","\"restored\"","\"alreadyBack\"","\"couldNotRestore\"","\"couldNotDelete\"","\"changedSinceLoaded\"","\"stillPointAt\"","\"table\"","\"display\"","\"sort\"","\"ascending\"","\"descending\"","\"movedTo\"","\"orderChanged\"","\"stayedIn\"","\"couldNotUndo\"","\"couldNotLoadRows\"","\"noPlural\"","\"noValue\"","\"somethingWrong\"","\"showMore\"","\"noDrop\"","\"pickedUp\"","\"isOver\"","\"putBack\"","\"wasMovedTo\"","\"cancelled\"","\"startsOn\"","\"noColumn\"","\"noDay\"","\"placeOf\"","\"place\"","\"boardAcross\"","\"boardAnywhere\"","\"boardWithin\"","\"calendarInstructions\"","\"timelineInstructions\"","\"month\"","\"quarter\"","\"calendarScale\"","\"timelineScale\"","\"previousPeriod\"","\"nextPeriod\"","\"today\"","\"capped\"","\"nothingIn\"","\"noneMatch\"","\"list\"","\"showOneApproximate\"","\"showOne\"","\"showMany\"","\"showManyApproximate\"","\"showManySomeApproximate\"","\"zoomIn\"","\"needsStyle\"","\"noneHere\"","\"showAll\"","\"chosen\"","\"approximatePosition\"","\"previous\"","\"next\"","\"close\"","\"features\"","\"couldNotReorder\"","\"couldNotMoveTo\"","\"moreHidden\"","\"firstOf\"","\"firstOfAbout\"","\"edit\"","\"excel\"","\"csv\"","\"asShown\"","\"rawValues\"","\"shownHint\"","\"rawHint\"","\"counting\"","\"moreThan\"","\"columns\"","\"moveUp\"","\"moveDown\"","\"selectedRows\"","\"rowsInList\"","\"selected\"","\"exportPlural\"","\"export\"","\"format\"","\"rows\"","\"listHint\"","\"values\"","\"exports\"","\"overLimit\"","\"exporting\"","\"rowsExported\"","\"doneOf\"","\"exported\"","\"truncated\"","\"couldNotExport\"","\"couldNotBuild\"","\"workbook\"","\"csvFile\"","\"atLeastCharacters\"","\"atMostCharacters\"","\"wholeNumberAtLeast\"","\"wholeNumberAtMost\"","\"wholeNumber\"","\"number\"","\"wholeNumberBelow\"","\"decimalsBelow\"","\"date\"","\"timestamp\"","\"country\"","\"currency\"","\"uuid\"","\"enum\"","\"relation\"","\"json\"","\"required\"","\"checkField\"","\"checkFields\"","\"fieldType\"","\"needsOrganizations\"","\"couldNotLoadMembers\"","\"unknownMember\"","\"searchMembers\"","\"showPhoto\"","\"holderDetails\"","\"previousPhoto\"","\"nextPhoto\"","\"couldNotLoadOne\"","\"reorder\"","\"couldNotChange\"","\"movedToPlace\"","\"notMoved\"","\"noRule\"","\"create\"","\"update\"","\"undelete\"","\"database\"","\"databaseRole\"","\"changed\"","\"changedThis\"","\"noChanges\"","\"import\"","\"importPlural\"","\"couldNotReadFile\"","\"couldNotCheck\"","\"checkRows\"","\"back\"","\"checking\"","\"importRows\"","\"cancelImport\"","\"file\"","\"fileHint\"","\"reading\"","\"theFile\"","\"sheet\"","\"upsert\"","\"createHint\"","\"updateHint\"","\"upsertHint\"","\"doNotImport\"","\"whatEachRowDoes\"","\"findBy\"","\"chooseField\"","\"findByHint\"","\"foundInColumn\"","\"chooseColumn\"","\"numbers\"","\"dates\"","\"dayFirst\"","\"monthFirst\"","\"datesHint\"","\"requiredMarked\"","\"emptyInFirstRows\"","\"field\"","\"fieldFor\"","\"foundBy\"","\"pluralFoundBy\"","\"noColumnFills\"","\"rowsNotImported\"","\"rowProblems\"","\"andMore\"","\"checkingRows\"","\"check\"","\"toCreate\"","\"toUpdate\"","\"withProblems\"","\"firstRows\"","\"row\"","\"problemRows\"","\"download\"","\"batches\"","\"stopping\"","\"saving\"","\"rowsSaved\"","\"stopped\"","\"summary\"","\"created\"","\"updated\"","\"skipped\"","\"failed\"","\"notWrittenHint\"","\"notImportedFile\"","\"line\"","\"problems\"","\"notNumber\"","\"notWholeNumber\"","\"tooLarge\"","\"notBoolean\"","\"notDate\"","\"hasTime\"","\"severalValues\"","\"notOneOf\"","\"notText\"","\"emptyRequired\"","\"noneHas\"","\"severalHave\"","\"notOneRecord\"","\"nothingToUpdate\"","\"fileNotUtf8\"","\"noSheets\"","\"missingSheetPart\"","\"notZip\"","\"zip64\"","\"compression\"","\"notWorkbook\"","\"noSheetCalled\"","\"unreadable\"","\"column\"","\"noList\"","\"filters\"","\"filtersCount\"","\"newRecord\"","\"openRecord\"","\"exportCount\"","\"actionCount\"","\"dragToSort\"","\"unreadableFilter\"","\"noMatchSearch\"","\"noMatchFilters\"","\"noMatch\"","\"noneYet\"","\"clearFilters\"","\"changedBySomeoneElse\"","\"couldNotSave\"","\"holdTitle\"","\"holdLine\"","\"mapLayer\"","\"map\"","\"description\"","\"reloadPage\"","\"reloadPageHint\"","\"bannerTitle\"","\"bannerLine\"","\"noTab\"","\"couldNotDraw\"","\"unknownBlock\"","\"needsRecord\"","\"cannotChange\"","\"cannotDelete\"","\"doesNotApply\"","\"noHandler\"","\"noInputComponent\"","\"doneOn\"","\"noAction\"","\"saved\"","\"save\"","\"settings\"","\"couldNotCount\"","\"dateFormat\"","\"atMost\"","\"dependsOn\"","\"history\"","\"comments\"","\"fetching\"","\"noRecord\"","\"openingElsewhere\"","\"someoneElse\"","\"justNow\"","\"unsavedChanges\"","\"linesChanged\"","\"linesReloaded\"","\"unsavedKept\"","\"continueEditing\"","\"discard\"","\"unsavedRestored\"","\"keep\"","\"savingSubject\"","\"subjectSaved\"","\"recordActions\"","\"couldNotLoadRelated\"","\"relatedRecords\"","\"lineNumber\"","\"lineField\"","\"tooManyLines\"","\"range\"","\"hour\"","\"measure\"","\"maximum\"","\"noSamples\"","\"couldNotLoadYour\"","\"showLess\"","\"none\"","\"immediate\"","\"weekly\"","\"scheduled\"","\"manual\"","\"job\"","\"build\"","\"updatingNow\"","\"started\"","\"nextOn\"","\"succeeded\"","\"unchanged\"","\"alreadyLatest\"","\"onlyAdmin\"","\"couldNotStart\"","\"runtimeUpdate\"","\"updating\"","\"updateNow\"","\"currentVersion\"","\"latestVersion\"","\"checkFailed\"","\"updateAvailable\"","\"favorite\"","\"couldNotTakeOff\"","\"searchOne\"","\"searchTwo\"","\"searchMore\"","\"goTo\"","\"saveSearch\"","\"saveAsNew\"","\"updateName\"","\"updateNameQuestion\"","\"updateNounQuestion\"","\"couldNotRename\"","\"renameTitle\"","\"deleteTitle\"","\"noSavedYet\"","\"on\"","\"off\"","\"asMany\"","\"fewer\"","\"optional\"","\"added\"","\"removed\"","\"filterChanges\"","\"addedRemoved\"","\"searchSaved\"","\"openPlural\"","\"searchUpdated\"","\"couldNotUpdate\"","\"noNew\"","\"askQuestion\"","\"reconnecting\"","\"empty\"","\"backendNoAnswer\"","\"cannotShowLive\"","\"passwordChanged\"","\"code\"","\"backupCode\"","\"email\"","\"password\"","\"passwordOptional\"","\"continue\"","\"backToSignIn\"","\"useAnotherAddress\"","\"checkEmail\"","\"newCodeSent\"","\"sendNewCode\"","\"sendNewCodeIn\"","\"signInCodeDescription\"","\"signInCodeSent\"","\"signUpCodeDescription\"","\"signUpCodeSent\"","\"noAdminTitle\"","\"noAdminDescription\"","\"noAdminExplanation\"","\"copyCommand\"","\"firstAdminExplanation\"","\"firstAdminLink\"","\"tooManyRequests\"","\"tooManyAttempts\"","\"resetTitle\"","\"resetDescription\"","\"sendResetLink\"","\"resetSent\"","\"linkExpiredTitle\"","\"linkExpiredExplanation\"","\"sendNewLink\"","\"passwordsDiffer\"","\"choosePassword\"","\"atLeast\"","\"useAtLeast\"","\"passwordTooLong\"","\"newPassword\"","\"repeatPassword\"","\"setPassword\"","\"signingInWith\"","\"takingYouTo\"","\"providerNotOffered\"","\"turnOnTwoFactor\"","\"addPasskey\"","\"requiredForEveryAccount\"","\"passkeyExplanation\"","\"couldNotReadAccount\"","\"signInTitle\"","\"continueWith\"","\"signInWithPasskey\"","\"passkeyFor\"","\"or\"","\"emailSignInCode\"","\"usePassword\"","\"forgotPassword\"","\"newHere\"","\"haveAccount\"","\"createAnAccount\"","\"browse\"","\"notNow\"","\"detailsTitle\"","\"detailsDescription\"","\"yourName\"","\"codeWasRight\"","\"withoutPassword\"","\"createAccount\"","\"codeToConfirm\"","\"emailCode\"","\"browseWithoutAccount\"","\"staffTitle\"","\"staffUnavailable\"","\"signInAsPerson\"","\"forStaffOf\"","\"theirEmail\"","\"reason\"","\"reasonExample\"","\"staffExplanation\"","\"totpInstruction\"","\"otpInstruction\"","\"backupInstruction\"","\"twoFactorTitle\"","\"twoFactorDescription\"","\"codeToFinish\"","\"trustBrowser\"","\"trustBrowserFor\"","\"verify\"","\"useAuthenticator\"","\"emailCodeInstead\"","\"useBackupCode\"","\"passkeyClosed\"","\"wrongEmailOrPassword\"","\"wrongPassword\"","\"wrongCode\"","\"wrongOrExpiredCode\"","\"codeExpired\"","\"tooManyCodes\"","\"wrongBackupCode\"","\"tooManyCodesSignIn\"","\"locked\"","\"tooSlow\"","\"passkeyNotFound\"","\"passkeyFailed\"","\"passkeyAdded\"","\"notFresh\"","\"staffPermissionMissing\"","\"staffNotStrong\"","\"staffStale\"","\"staffExpired\"","\"staffProviderFailed\"","\"staffUserUnavailable\"","\"staffReasonRequired\"","\"staffForbidden\"","\"untrustedCallback\"","\"staffFailed\"","\"passwordLeaked\"","\"signupDisabled\"","\"notLinked\"","\"linkedToOther\"","\"couldNotLink\"","\"accessDenied\"","\"domainNotAllowed\"","\"providerFailed\"","\"accept\"","\"decline\"","\"startCall\"","\"join\"","\"inProgress\"","\"people\"","\"joinCall\"","\"microphone\"","\"camera\"","\"shareScreen\"","\"stopSharing\"","\"muted\"","\"you\"","\"alone\"","\"connecting\"","\"full\"","\"ended\"","\"refused\"","\"unavailable\"","\"callAgain\"","\"noMicrophone\"","\"noCamera\"","\"noDevices\"","\"cannotConnect\"","\"poorConnection\"","\"goodConnection\"","\"sharing\"","\"youAreSharing\"","\"speaking\"","\"preview\"","\"guestName\"","\"denied\"","\"waiting\"","\"askToJoin\"","\"someone\"","\"guests\"","\"waitingGuest\"","\"admit\"","\"deny\"","\"revoke\"","\"newLink\"","\"copyLink\"","\"copied\"","\"guestLinks\"","\"noLinks\"","\"inLobby\"","\"guestsInCall\"","\"guestsMaySend\"","\"sendAll\"","\"sendCamera\"","\"sendMicrophone\"","\"linkUntil\"","\"linkUntilEnd\"","\"linkLasts\"","\"forAnHour\"","\"addressesVisible\"","\"guestRefused\"","\"guestIntro\"","\"youLeft\"","\"photoOf\"","\"message\"","\"send\"","\"yesterday\"","\"newMessages\"","\"loadEarlier\"","\"noRows\"","\"cutOff\"","\"unsortable\"","\"columnMenu\"","\"unpin\"","\"pinToLeft\"","\"resizeColumn\"","\"shownIn\"","\"clearSelection\"","\"noRowsSelected\"","\"selectRow\"","\"rowActions\"","\"move\"","\"reorderInstructions\"","\"droppedAt\"","\"year\"","\"unknownPreset\"","\"unsupported\"","\"clearAll\"","\"searchIn\"","\"moreFilters\"","\"showOnly\"","\"minimum\"","\"aboutRows\"","\"secondsAgo\"","\"minutesAgo\"","\"hoursAgo\"","\"daysAgo\"","\"noForm\"","\"notSent\"","\"checkTooLong\"","\"instructions\"","\"over\"","\"dropped\"","\"droppedAtStart\"","\"addLine\"","\"noLines\"","\"removeLine\"","\"dragToReorder\"","\"actionsFor\"","\"invite\"","\"expired\"","\"until\"","\"sendAgain\"","\"passLinkOn\"","\"write\"","\"nothingToPreview\"","\"peopleToMention\"","\"noOneFound\"","\"notifications\"","\"notificationsUnread\"","\"notificationsManyUnread\"","\"markAllRead\"","\"loadFailed\"","\"unread\"","\"pushOff\"","\"turnOn\"","\"pushOn\"","\"turnOff\"","\"pushBlocked\"","\"manageOrganizations\"","\"organization\"","\"members\"","\"invitations\"","\"owner\"","\"member\"","\"name\"","\"slug\"","\"current\"","\"allOrganizations\"","\"allOrganizationsDescription\"","\"findOrganization\"","\"nameOrSlug\"","\"cannotChangeRole\"","\"makeAccountToJoin\"","\"makeAccount\"","\"passwordRequired\"","\"createAndJoin\"","\"createYourAccount\"","\"invalidLink\"","\"invitation\"","\"goToApp\"","\"invitesToApp\"","\"invitesTo\"","\"invitesToWith\"","\"hasAccount\"","\"signInAs\"","\"signInAsToJoin\"","\"otherAddress\"","\"signOutToAccept\"","\"inviteSomeone\"","\"inviteDescription\"","\"organizationRole\"","\"peopleInvited\"","\"notAcceptedYet\"","\"sendingAgain\"","\"nobodyWaiting\"","\"roleOf\"","\"couldNotReadMembers\"","\"whoWorks\"","\"membersDescription\"","\"detailsEditable\"","\"detailsReadOnly\"","\"guestLinksDescription\"","\"guestLinksAllowed\"","\"handOver\"","\"handOverDescription\"","\"newOwner\"","\"chooseMember\"","\"deleteOrganization\"","\"deleteDescription\"","\"deleteConfirm\"","\"organizationName\"","\"leaveOwner\"","\"leaveMember\"","\"leaveName\"","\"noOrganization\"","\"youAre\"","\"throughGlobalRoles\"","\"newOrganization\"","\"newOrganizationDescription\"","\"invitationsForYou\"","\"invitationsForYouDescription\"","\"anOrganization\"","\"noAppRoles\"","\"organizationsSubtitle\"","\"yourOrganizations\"","\"memberOf\"","\"notMember\"","\"couldNotReadOrganizations\"","\"pluginsOff\"","\"pluginOff\"","\"dismiss\"","\"answered\"","\"notObject\"","\"noName\"","\"noApi\"","\"noVersions\"","\"noModule\"","\"badStylesheet\"","\"badVersion\"","\"savedDifferent\"","\"example\"","\"savedThis\"","\"keepMine\"","\"useTheirs\"","\"actions\"","\"savedAgo\"","\"notSavedRetrying\"","\"lastEditedBy\"","\"lastUpdated\"","\"viewing\"","\"couldNotReadRoles\"","\"couldNotSwitch\"","\"setStatus\"","\"editStatus\"","\"availability\"","\"automatic\"","\"busy\"","\"doNotDisturb\"","\"doNotDisturbHint\"","\"statusText\"","\"statusPlaceholder\"","\"clearsAfter\"","\"never\"","\"thirtyMinutes\"","\"oneHour\"","\"fourHours\"","\"thisWeek\"","\"custom\"","\"clearsAt\"","\"pickTime\"","\"clear\"","\"online\"","\"away\"","\"addAnAccount\"","\"addDescription\"","\"addAccount\"","\"peopleDescription\"","\"findSomeone\"","\"emailAddress\"","\"keepOneRole\"","\"blocked\"","\"unblock\"","\"block\"","tags","compiled","formatOf","namespace","cached","source","format","messages","text","text$2","viewerZone","partsFormats","partsFormat","known","zone","wallClock","ms","zoneOffset","clock","day","name","formatDate","zonedFormats","formatDateTime","relative","units","formatRelativeTime","away","seconds","size","text$1","isStoredFile","isFileDraft","fileShown","affixed","hints","displayValue","field","now","empty","isEmpty","relationLabel","fileText","mode","csvText","excelSerial","dateFormats","literal","affix","numberFormat","digits","numberCell","number","dateCell","xlsxCell","utf8Bom","needsQuotes","formulaStart","csvField","csvTextField","csvLine","fields","u8","u16","i32","fleb","fdeb","clim","freb","b","eb","r","j","_a","fl","revfl","_b","revfd","rev","hMap","cd","l","mb","le","co","rvb","sv","r_1","m","flt","fdt","flm","fdm","shft","slc","e","ec","err","ind","nt","wbits","o","wbits16","hTree","t","d","t2","et","a","i0","i1","i2","maxSym","tr","mbt","ln","dt","lft","cst","i2_1","i2_2","i2_3","n","lc","cl","cli","cln","cls","w","clen","cf","wfblk","dat","pos","out","wblk","final","lf","dlt","mlb","df","ddt","mdb","_c","lclt","nlc","_d","lcdt","ndc","lcfreq","_e","lct","mlcb","nlcc","flen","bl","ftlen","dtlen","bs","lm","ll","dm","dl","llm","lcts","it","clct","li","sym","syms","dst","deo","dflt","st","pre","post","lst","lvl","msk_1","plvl","prev","head","bs1_1","bs2_1","hsh","lc_1","wi","hv","imod","pimod","rem","ch_1","dif","maxn","maxd","ml","nl","mmd","md","ti","lin","din","crct","crc","cr","dopt","dict","newDat","mrg","wbytes","Deflate","f","endLen","chunk","newBuf","split","sync","ep","te","td","strToU8","latin1","ar_1","ar","ai","dbf","exfl","ex","wzh","col","exl","ce","u","y","exf","wzf","ZipPassThrough","filename","ZipDeflate","_this","Zip","file","fl_1","com","hl_1","header","chks_1","pAll_1","_i","chks_2","chk","tr_1","ind_1","uf_1","nxt","cl_1","dd","bt","tl","invalidXml","escapeXml","columnLetters","letter","textCell","ref","xml","mainNs","relNs","packageRelNs","contentTypes","rootRels","workbookRels","sheetName","workbook","styles","numFmts","xfs","encoder","createXlsxWriter","zip","onChunk","add","path","sheet","worksheet","cols","width","letters","styleOf","cellXml","cell","rowNumber","row","cells","typedText","columnWidths","columns","longest","records","record","createCsvBuilder","plan","createXlsxBuilder","writer","createExportBuilder","joined","bytes","handle","builder","scope","event"],"sources":["../../../schema/src/enum-label.ts","../../src/locale/active-locale.ts","../../src/format/intl-cache.ts","../../../../node_modules/.bun/@formatjs+fast-memoize@3.1.7/node_modules/@formatjs/fast-memoize/index.js","../../../../node_modules/.bun/@formatjs+icu-skeleton-parser@2.1.12/node_modules/@formatjs/icu-skeleton-parser/index.js","../../../../node_modules/.bun/@formatjs+icu-messageformat-parser@3.5.22/node_modules/@formatjs/icu-messageformat-parser/index.js","../../../../node_modules/.bun/intl-messageformat@12.1.4/node_modules/intl-messageformat/index.js","../../../../node_modules/.bun/react@19.3.0/node_modules/react/cjs/react.production.js","../../../../node_modules/.bun/react@19.3.0/node_modules/react/index.js","../../src/locale/en.json","../../src/locale/nl.json","../../src/locale/messages.ts","../../src/format/messages.ts","../../src/format/zone.ts","../../src/format/date.ts","../../src/live/messages.ts","../../src/live/file-values.ts","../../src/live/display-value.ts","../../src/app/export/cells.ts","../../src/app/export/csv.ts","../../../../node_modules/.bun/fflate@0.8.3/node_modules/fflate/esm/browser.js","../../src/app/export/xlsx.ts","../../src/app/export/builder.ts","../../src/app/export/builder-port.ts","../../src/app/export/export-worker.ts"],"sourcesContent":["/** How an enum value reads: its label from the view's `valueLabels`, else the stored value unchanged (`co_signer`). */\nexport const enumLabel = (value: string, labels?: Record<string, string>) => labels?.[value] ?? value\n","import { pickLocale, type Locale } from '@protobase/schema/internal'\n\n// The built-in screens read one locale, so plain functions (formats, messages) need no context: the app's when its\n// `/meta` names one, else the fallback the app starts with, the browser's language unless given. Both only ever get\n// set to what the app decides on each render, so a part of the tree that renders later never sees another one.\nlet fallback: Locale = 'en'\nlet app: Locale | undefined\n\n/** The language the screens are in now. */\nexport const activeLocale = (): Locale => app ?? fallback\n\n/** The language the screens are in when the app sets none: the browser's, or the one the app was given. */\nexport const setFallbackLocale = (locale: Locale) => {\n fallback = locale\n}\n\n/** The language the app sets for everyone, from its `/meta`; undefined when it sets none. */\nexport const setAppLocale = (locale: Locale | undefined) => {\n app = locale\n}\n\n/** The browser's language when the screens come in it, else English. */\nexport const browserLocale = (languages = globalThis.navigator?.languages ?? []) => pickLocale(languages)\n\n// The language tag numbers and dates are written with: English as in Ireland and Britain (`6 Oct 2026`, `1,234.5`).\nconst formatTags: Record<Locale, string> = { en: 'en-GB', nl: 'nl-NL' }\n\n/** The language tag `Intl` formats numbers and dates with, for the active locale. */\nexport const formatTag = () => formatTags[activeLocale()]\n","import { formatTag } from '../locale/active-locale'\n\nconst cache = new Map<string, unknown>()\n\n/** One `Intl` formatter per language tag and `key`, made with `make` for the active locale's tag the first time. */\nexport const cachedFormat = <T>(key: string, make: (tag: string) => T): T => {\n const tag = formatTag()\n const id = `${tag}|${key}`\n if (!cache.has(id)) cache.set(id, make(tag))\n return cache.get(id) as T\n}\n","//#region packages/fast-memoize/index.ts\nfunction memoize(fn, options) {\n\tconst cache = options && options.cache ? options.cache : cacheDefault;\n\tconst serializer = options && options.serializer ? options.serializer : serializerDefault;\n\treturn (options && options.strategy ? options.strategy : strategyDefault)(fn, {\n\t\tcache,\n\t\tserializer\n\t});\n}\nfunction isPrimitive(value) {\n\treturn value == null || typeof value === \"number\" || typeof value === \"boolean\";\n}\nfunction monadic(fn, cache, serializer, arg) {\n\tconst cacheKey = isPrimitive(arg) ? arg : serializer(arg);\n\tlet computedValue = cache.get(cacheKey);\n\tif (typeof computedValue === \"undefined\") {\n\t\tcomputedValue = fn.call(this, arg);\n\t\tcache.set(cacheKey, computedValue);\n\t}\n\treturn computedValue;\n}\nfunction variadic(fn, cache, serializer) {\n\tconst args = Array.prototype.slice.call(arguments, 3);\n\tconst cacheKey = serializer(args);\n\tlet computedValue = cache.get(cacheKey);\n\tif (typeof computedValue === \"undefined\") {\n\t\tcomputedValue = fn.apply(this, args);\n\t\tcache.set(cacheKey, computedValue);\n\t}\n\treturn computedValue;\n}\nfunction assemble(fn, context, strategy, cache, serialize) {\n\treturn strategy.bind(context, fn, cache, serialize);\n}\nfunction strategyDefault(fn, options) {\n\tconst strategy = fn.length === 1 ? monadic : variadic;\n\treturn assemble(fn, this, strategy, options.cache.create(), options.serializer);\n}\nfunction strategyVariadic(fn, options) {\n\treturn assemble(fn, this, variadic, options.cache.create(), options.serializer);\n}\nfunction strategyMonadic(fn, options) {\n\treturn assemble(fn, this, monadic, options.cache.create(), options.serializer);\n}\nconst serializerDefault = function() {\n\treturn JSON.stringify(arguments);\n};\nvar ObjectWithoutPrototypeCache = class {\n\tconstructor() {\n\t\tthis.cache = Object.create(null);\n\t}\n\tget(key) {\n\t\treturn this.cache[key];\n\t}\n\tset(key, value) {\n\t\tthis.cache[key] = value;\n\t}\n};\nconst cacheDefault = { create: function create() {\n\treturn new ObjectWithoutPrototypeCache();\n} };\nconst strategies = {\n\tvariadic: strategyVariadic,\n\tmonadic: strategyMonadic\n};\n//#endregion\nexport { memoize, strategies };\n\n//# sourceMappingURL=index.js.map","//#region packages/icu-skeleton-parser/date-time.ts\n/**\n* https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n* Credit: https://github.com/caridy/intl-datetimeformat-pattern/blob/master/index.js\n* with some tweaks\n*/\nconst DATE_TIME_REGEX = /(?:[Eec]{1,6}|G{1,5}|[Qq]{1,5}|(?:[yYur]+|U{1,5})|[ML]{1,5}|d{1,2}|D{1,3}|F{1}|[abB]{1,5}|[hkHK]{1,2}|w{1,2}|W{1}|m{1,2}|s{1,2}|[zZOvVxX]{1,4})(?=([^']*'[^']*')*[^']*$)/g;\n/**\n* Parse Date time skeleton into Intl.DateTimeFormatOptions\n* Ref: https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n* @public\n* @param skeleton skeleton string\n*/\nfunction parseDateTimeSkeleton(skeleton) {\n\tconst result = {};\n\tskeleton.replace(DATE_TIME_REGEX, (match) => {\n\t\tconst len = match.length;\n\t\tswitch (match[0]) {\n\t\t\tcase \"G\":\n\t\t\t\tresult.era = len === 4 ? \"long\" : len === 5 ? \"narrow\" : \"short\";\n\t\t\t\tbreak;\n\t\t\tcase \"y\":\n\t\t\t\tresult.year = len === 2 ? \"2-digit\" : \"numeric\";\n\t\t\t\tbreak;\n\t\t\tcase \"Y\":\n\t\t\tcase \"u\":\n\t\t\tcase \"U\":\n\t\t\tcase \"r\": throw new RangeError(\"`Y/u/U/r` (year) patterns are not supported, use `y` instead\");\n\t\t\tcase \"q\":\n\t\t\tcase \"Q\": throw new RangeError(\"`q/Q` (quarter) patterns are not supported\");\n\t\t\tcase \"M\":\n\t\t\tcase \"L\":\n\t\t\t\tresult.month = [\n\t\t\t\t\t\"numeric\",\n\t\t\t\t\t\"2-digit\",\n\t\t\t\t\t\"short\",\n\t\t\t\t\t\"long\",\n\t\t\t\t\t\"narrow\"\n\t\t\t\t][len - 1];\n\t\t\t\tbreak;\n\t\t\tcase \"w\":\n\t\t\tcase \"W\": throw new RangeError(\"`w/W` (week) patterns are not supported\");\n\t\t\tcase \"d\":\n\t\t\t\tresult.day = [\"numeric\", \"2-digit\"][len - 1];\n\t\t\t\tbreak;\n\t\t\tcase \"D\":\n\t\t\tcase \"F\":\n\t\t\tcase \"g\": throw new RangeError(\"`D/F/g` (day) patterns are not supported, use `d` instead\");\n\t\t\tcase \"E\":\n\t\t\t\tresult.weekday = len === 4 ? \"long\" : len === 5 ? \"narrow\" : \"short\";\n\t\t\t\tbreak;\n\t\t\tcase \"e\":\n\t\t\t\tif (len < 4) throw new RangeError(\"`e..eee` (weekday) patterns are not supported\");\n\t\t\t\tresult.weekday = [\n\t\t\t\t\t\"short\",\n\t\t\t\t\t\"long\",\n\t\t\t\t\t\"narrow\",\n\t\t\t\t\t\"short\"\n\t\t\t\t][len - 3];\n\t\t\t\tbreak;\n\t\t\tcase \"c\":\n\t\t\t\tif (len < 4) throw new RangeError(\"`c..ccc` (weekday) patterns are not supported\");\n\t\t\t\tresult.weekday = [\n\t\t\t\t\t\"short\",\n\t\t\t\t\t\"long\",\n\t\t\t\t\t\"narrow\",\n\t\t\t\t\t\"short\"\n\t\t\t\t][len - 3];\n\t\t\t\tbreak;\n\t\t\tcase \"a\":\n\t\t\t\tresult.hour12 = true;\n\t\t\t\tbreak;\n\t\t\tcase \"b\":\n\t\t\tcase \"B\": throw new RangeError(\"`b/B` (period) patterns are not supported, use `a` instead\");\n\t\t\tcase \"h\":\n\t\t\t\tresult.hourCycle = \"h12\";\n\t\t\t\tresult.hour = [\"numeric\", \"2-digit\"][len - 1];\n\t\t\t\tbreak;\n\t\t\tcase \"H\":\n\t\t\t\tresult.hourCycle = \"h23\";\n\t\t\t\tresult.hour = [\"numeric\", \"2-digit\"][len - 1];\n\t\t\t\tbreak;\n\t\t\tcase \"K\":\n\t\t\t\tresult.hourCycle = \"h11\";\n\t\t\t\tresult.hour = [\"numeric\", \"2-digit\"][len - 1];\n\t\t\t\tbreak;\n\t\t\tcase \"k\":\n\t\t\t\tresult.hourCycle = \"h24\";\n\t\t\t\tresult.hour = [\"numeric\", \"2-digit\"][len - 1];\n\t\t\t\tbreak;\n\t\t\tcase \"j\":\n\t\t\tcase \"J\":\n\t\t\tcase \"C\": throw new RangeError(\"`j/J/C` (hour) patterns are not supported, use `h/H/K/k` instead\");\n\t\t\tcase \"m\":\n\t\t\t\tresult.minute = [\"numeric\", \"2-digit\"][len - 1];\n\t\t\t\tbreak;\n\t\t\tcase \"s\":\n\t\t\t\tresult.second = [\"numeric\", \"2-digit\"][len - 1];\n\t\t\t\tbreak;\n\t\t\tcase \"S\":\n\t\t\tcase \"A\": throw new RangeError(\"`S/A` (second) patterns are not supported, use `s` instead\");\n\t\t\tcase \"z\":\n\t\t\t\tresult.timeZoneName = len < 4 ? \"short\" : \"long\";\n\t\t\t\tbreak;\n\t\t\tcase \"Z\":\n\t\t\tcase \"O\":\n\t\t\tcase \"v\":\n\t\t\tcase \"V\":\n\t\t\tcase \"X\":\n\t\t\tcase \"x\": throw new RangeError(\"`Z/O/v/V/X/x` (timeZone) patterns are not supported, use `z` instead\");\n\t\t}\n\t\treturn \"\";\n\t});\n\treturn result;\n}\n//#endregion\n//#region node_modules/.aspect_rules_js/@formatjs_generated+unicode@0.0.0/node_modules/@formatjs_generated/unicode/icu-skeleton-parser-regex.js\nconst WHITE_SPACE_REGEX = /[\\t-\\r \\x85\\u200E\\u200F\\u2028\\u2029]/i;\n//#endregion\n//#region packages/icu-skeleton-parser/number.ts\nfunction parseNumberSkeletonFromString(skeleton) {\n\tif (skeleton.length === 0) throw new Error(\"Number skeleton cannot be empty\");\n\tconst stringTokens = skeleton.split(WHITE_SPACE_REGEX).filter((x) => x.length > 0);\n\tconst tokens = [];\n\tfor (const stringToken of stringTokens) {\n\t\tlet stemAndOptions = stringToken.split(\"/\");\n\t\tif (stemAndOptions.length === 0) throw new Error(\"Invalid number skeleton\");\n\t\tconst [stem, ...options] = stemAndOptions;\n\t\tfor (const option of options) if (option.length === 0) throw new Error(\"Invalid number skeleton\");\n\t\ttokens.push({\n\t\t\tstem,\n\t\t\toptions\n\t\t});\n\t}\n\treturn tokens;\n}\nfunction icuUnitToEcma(unit) {\n\treturn unit.replace(/^(.*?)-/, \"\");\n}\nconst FRACTION_PRECISION_REGEX = /^\\.(?:(0+)(\\*)?|(#+)|(0+)(#+))$/g;\nconst SIGNIFICANT_PRECISION_REGEX = /^(@+)?(\\+|#+)?[rs]?$/g;\nconst INTEGER_WIDTH_REGEX = /(\\*)(0+)|(#+)(0+)|(0+)/g;\nconst CONCISE_INTEGER_WIDTH_REGEX = /^(0+)$/;\nfunction parseSignificantPrecision(str) {\n\tconst result = {};\n\tif (str[str.length - 1] === \"r\") result.roundingPriority = \"morePrecision\";\n\telse if (str[str.length - 1] === \"s\") result.roundingPriority = \"lessPrecision\";\n\tstr.replace(SIGNIFICANT_PRECISION_REGEX, function(_, g1, g2) {\n\t\tif (typeof g2 !== \"string\") {\n\t\t\tresult.minimumSignificantDigits = g1.length;\n\t\t\tresult.maximumSignificantDigits = g1.length;\n\t\t} else if (g2 === \"+\") result.minimumSignificantDigits = g1.length;\n\t\telse if (g1[0] === \"#\") result.maximumSignificantDigits = g1.length;\n\t\telse {\n\t\t\tresult.minimumSignificantDigits = g1.length;\n\t\t\tresult.maximumSignificantDigits = g1.length + (typeof g2 === \"string\" ? g2.length : 0);\n\t\t}\n\t\treturn \"\";\n\t});\n\treturn result;\n}\nfunction parseSign(str) {\n\tswitch (str) {\n\t\tcase \"sign-auto\": return { signDisplay: \"auto\" };\n\t\tcase \"sign-accounting\":\n\t\tcase \"()\": return { currencySign: \"accounting\" };\n\t\tcase \"sign-always\":\n\t\tcase \"+!\": return { signDisplay: \"always\" };\n\t\tcase \"sign-accounting-always\":\n\t\tcase \"()!\": return {\n\t\t\tsignDisplay: \"always\",\n\t\t\tcurrencySign: \"accounting\"\n\t\t};\n\t\tcase \"sign-except-zero\":\n\t\tcase \"+?\": return { signDisplay: \"exceptZero\" };\n\t\tcase \"sign-accounting-except-zero\":\n\t\tcase \"()?\": return {\n\t\t\tsignDisplay: \"exceptZero\",\n\t\t\tcurrencySign: \"accounting\"\n\t\t};\n\t\tcase \"sign-never\":\n\t\tcase \"+_\": return { signDisplay: \"never\" };\n\t}\n}\nfunction parseConciseScientificAndEngineeringStem(stem) {\n\tlet result;\n\tif (stem[0] === \"E\" && stem[1] === \"E\") {\n\t\tresult = { notation: \"engineering\" };\n\t\tstem = stem.slice(2);\n\t} else if (stem[0] === \"E\") {\n\t\tresult = { notation: \"scientific\" };\n\t\tstem = stem.slice(1);\n\t}\n\tif (result) {\n\t\tconst signDisplay = stem.slice(0, 2);\n\t\tif (signDisplay === \"+!\") {\n\t\t\tresult.signDisplay = \"always\";\n\t\t\tstem = stem.slice(2);\n\t\t} else if (signDisplay === \"+?\") {\n\t\t\tresult.signDisplay = \"exceptZero\";\n\t\t\tstem = stem.slice(2);\n\t\t}\n\t\tif (!CONCISE_INTEGER_WIDTH_REGEX.test(stem)) throw new Error(\"Malformed concise eng/scientific notation\");\n\t\tresult.minimumIntegerDigits = stem.length;\n\t}\n\treturn result;\n}\nfunction parseNotationOptions(opt) {\n\tconst result = {};\n\tconst signOpts = parseSign(opt);\n\tif (signOpts) return signOpts;\n\treturn result;\n}\n/**\n* https://github.com/unicode-org/icu/blob/master/docs/userguide/format_parse/numbers/skeletons.md#skeleton-stems-and-options\n*/\nfunction parseNumberSkeleton(tokens) {\n\tlet result = {};\n\tfor (const token of tokens) {\n\t\tswitch (token.stem) {\n\t\t\tcase \"percent\":\n\t\t\tcase \"%\":\n\t\t\t\tresult.style = \"percent\";\n\t\t\t\tcontinue;\n\t\t\tcase \"%x100\":\n\t\t\t\tresult.style = \"percent\";\n\t\t\t\tresult.scale = 100;\n\t\t\t\tcontinue;\n\t\t\tcase \"currency\":\n\t\t\t\tresult.style = \"currency\";\n\t\t\t\tresult.currency = token.options[0];\n\t\t\t\tcontinue;\n\t\t\tcase \"group-off\":\n\t\t\tcase \",_\":\n\t\t\t\tresult.useGrouping = false;\n\t\t\t\tcontinue;\n\t\t\tcase \"precision-integer\":\n\t\t\tcase \".\":\n\t\t\t\tresult.maximumFractionDigits = 0;\n\t\t\t\tcontinue;\n\t\t\tcase \"measure-unit\":\n\t\t\tcase \"unit\":\n\t\t\t\tresult.style = \"unit\";\n\t\t\t\tresult.unit = icuUnitToEcma(token.options[0]);\n\t\t\t\tcontinue;\n\t\t\tcase \"compact-short\":\n\t\t\tcase \"K\":\n\t\t\t\tresult.notation = \"compact\";\n\t\t\t\tresult.compactDisplay = \"short\";\n\t\t\t\tcontinue;\n\t\t\tcase \"compact-long\":\n\t\t\tcase \"KK\":\n\t\t\t\tresult.notation = \"compact\";\n\t\t\t\tresult.compactDisplay = \"long\";\n\t\t\t\tcontinue;\n\t\t\tcase \"scientific\":\n\t\t\t\tresult = {\n\t\t\t\t\t...result,\n\t\t\t\t\tnotation: \"scientific\",\n\t\t\t\t\t...token.options.reduce((all, opt) => ({\n\t\t\t\t\t\t...all,\n\t\t\t\t\t\t...parseNotationOptions(opt)\n\t\t\t\t\t}), {})\n\t\t\t\t};\n\t\t\t\tcontinue;\n\t\t\tcase \"engineering\":\n\t\t\t\tresult = {\n\t\t\t\t\t...result,\n\t\t\t\t\tnotation: \"engineering\",\n\t\t\t\t\t...token.options.reduce((all, opt) => ({\n\t\t\t\t\t\t...all,\n\t\t\t\t\t\t...parseNotationOptions(opt)\n\t\t\t\t\t}), {})\n\t\t\t\t};\n\t\t\t\tcontinue;\n\t\t\tcase \"notation-simple\":\n\t\t\t\tresult.notation = \"standard\";\n\t\t\t\tcontinue;\n\t\t\tcase \"unit-width-narrow\":\n\t\t\t\tresult.currencyDisplay = \"narrowSymbol\";\n\t\t\t\tresult.unitDisplay = \"narrow\";\n\t\t\t\tcontinue;\n\t\t\tcase \"unit-width-short\":\n\t\t\t\tresult.currencyDisplay = \"code\";\n\t\t\t\tresult.unitDisplay = \"short\";\n\t\t\t\tcontinue;\n\t\t\tcase \"unit-width-full-name\":\n\t\t\t\tresult.currencyDisplay = \"name\";\n\t\t\t\tresult.unitDisplay = \"long\";\n\t\t\t\tcontinue;\n\t\t\tcase \"unit-width-iso-code\":\n\t\t\t\tresult.currencyDisplay = \"symbol\";\n\t\t\t\tcontinue;\n\t\t\tcase \"scale\":\n\t\t\t\tresult.scale = parseFloat(token.options[0]);\n\t\t\t\tcontinue;\n\t\t\tcase \"rounding-mode-floor\":\n\t\t\t\tresult.roundingMode = \"floor\";\n\t\t\t\tcontinue;\n\t\t\tcase \"rounding-mode-ceiling\":\n\t\t\t\tresult.roundingMode = \"ceil\";\n\t\t\t\tcontinue;\n\t\t\tcase \"rounding-mode-down\":\n\t\t\t\tresult.roundingMode = \"trunc\";\n\t\t\t\tcontinue;\n\t\t\tcase \"rounding-mode-up\":\n\t\t\t\tresult.roundingMode = \"expand\";\n\t\t\t\tcontinue;\n\t\t\tcase \"rounding-mode-half-even\":\n\t\t\t\tresult.roundingMode = \"halfEven\";\n\t\t\t\tcontinue;\n\t\t\tcase \"rounding-mode-half-down\":\n\t\t\t\tresult.roundingMode = \"halfTrunc\";\n\t\t\t\tcontinue;\n\t\t\tcase \"rounding-mode-half-up\":\n\t\t\t\tresult.roundingMode = \"halfExpand\";\n\t\t\t\tcontinue;\n\t\t\tcase \"integer-width\":\n\t\t\t\tif (token.options.length > 1) throw new RangeError(\"integer-width stems only accept a single optional option\");\n\t\t\t\ttoken.options[0].replace(INTEGER_WIDTH_REGEX, function(_, g1, g2, g3, g4, g5) {\n\t\t\t\t\tif (g1) result.minimumIntegerDigits = g2.length;\n\t\t\t\t\telse if (g3 && g4) throw new Error(\"We currently do not support maximum integer digits\");\n\t\t\t\t\telse if (g5) throw new Error(\"We currently do not support exact integer digits\");\n\t\t\t\t\treturn \"\";\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t}\n\t\tif (CONCISE_INTEGER_WIDTH_REGEX.test(token.stem)) {\n\t\t\tresult.minimumIntegerDigits = token.stem.length;\n\t\t\tcontinue;\n\t\t}\n\t\tif (FRACTION_PRECISION_REGEX.test(token.stem)) {\n\t\t\tif (token.options.length > 1) throw new RangeError(\"Fraction-precision stems only accept a single optional option\");\n\t\t\ttoken.stem.replace(FRACTION_PRECISION_REGEX, function(_, g1, g2, g3, g4, g5) {\n\t\t\t\tif (g2 === \"*\") result.minimumFractionDigits = g1.length;\n\t\t\t\telse if (g3 && g3[0] === \"#\") result.maximumFractionDigits = g3.length;\n\t\t\t\telse if (g4 && g5) {\n\t\t\t\t\tresult.minimumFractionDigits = g4.length;\n\t\t\t\t\tresult.maximumFractionDigits = g4.length + g5.length;\n\t\t\t\t} else {\n\t\t\t\t\tresult.minimumFractionDigits = g1.length;\n\t\t\t\t\tresult.maximumFractionDigits = g1.length;\n\t\t\t\t}\n\t\t\t\treturn \"\";\n\t\t\t});\n\t\t\tconst opt = token.options[0];\n\t\t\tif (opt === \"w\") result = {\n\t\t\t\t...result,\n\t\t\t\ttrailingZeroDisplay: \"stripIfInteger\"\n\t\t\t};\n\t\t\telse if (opt) result = {\n\t\t\t\t...result,\n\t\t\t\t...parseSignificantPrecision(opt)\n\t\t\t};\n\t\t\tcontinue;\n\t\t}\n\t\tif (SIGNIFICANT_PRECISION_REGEX.test(token.stem)) {\n\t\t\tresult = {\n\t\t\t\t...result,\n\t\t\t\t...parseSignificantPrecision(token.stem)\n\t\t\t};\n\t\t\tcontinue;\n\t\t}\n\t\tconst signOpts = parseSign(token.stem);\n\t\tif (signOpts) result = {\n\t\t\t...result,\n\t\t\t...signOpts\n\t\t};\n\t\tconst conciseScientificAndEngineeringOpts = parseConciseScientificAndEngineeringStem(token.stem);\n\t\tif (conciseScientificAndEngineeringOpts) result = {\n\t\t\t...result,\n\t\t\t...conciseScientificAndEngineeringOpts\n\t\t};\n\t}\n\treturn result;\n}\n//#endregion\nexport { parseDateTimeSkeleton, parseNumberSkeleton, parseNumberSkeletonFromString };\n\n//# sourceMappingURL=index.js.map","import { parseDateTimeSkeleton, parseNumberSkeleton, parseNumberSkeletonFromString } from \"@formatjs/icu-skeleton-parser\";\n//#region packages/icu-messageformat-parser/error.ts\nlet ErrorKind = /* @__PURE__ */ function(ErrorKind) {\n\t/** Argument is unclosed (e.g. `{0`) */\n\tErrorKind[ErrorKind[\"EXPECT_ARGUMENT_CLOSING_BRACE\"] = 1] = \"EXPECT_ARGUMENT_CLOSING_BRACE\";\n\t/** Argument is empty (e.g. `{}`). */\n\tErrorKind[ErrorKind[\"EMPTY_ARGUMENT\"] = 2] = \"EMPTY_ARGUMENT\";\n\t/** Argument is malformed (e.g. `{foo!}``) */\n\tErrorKind[ErrorKind[\"MALFORMED_ARGUMENT\"] = 3] = \"MALFORMED_ARGUMENT\";\n\t/** Expect an argument type (e.g. `{foo,}`) */\n\tErrorKind[ErrorKind[\"EXPECT_ARGUMENT_TYPE\"] = 4] = \"EXPECT_ARGUMENT_TYPE\";\n\t/** Unsupported argument type (e.g. `{foo,foo}`) */\n\tErrorKind[ErrorKind[\"INVALID_ARGUMENT_TYPE\"] = 5] = \"INVALID_ARGUMENT_TYPE\";\n\t/** Expect an argument style (e.g. `{foo, number, }`) */\n\tErrorKind[ErrorKind[\"EXPECT_ARGUMENT_STYLE\"] = 6] = \"EXPECT_ARGUMENT_STYLE\";\n\t/** The number skeleton is invalid. */\n\tErrorKind[ErrorKind[\"INVALID_NUMBER_SKELETON\"] = 7] = \"INVALID_NUMBER_SKELETON\";\n\t/** The date time skeleton is invalid. */\n\tErrorKind[ErrorKind[\"INVALID_DATE_TIME_SKELETON\"] = 8] = \"INVALID_DATE_TIME_SKELETON\";\n\t/** Exepct a number skeleton following the `::` (e.g. `{foo, number, ::}`) */\n\tErrorKind[ErrorKind[\"EXPECT_NUMBER_SKELETON\"] = 9] = \"EXPECT_NUMBER_SKELETON\";\n\t/** Exepct a date time skeleton following the `::` (e.g. `{foo, date, ::}`) */\n\tErrorKind[ErrorKind[\"EXPECT_DATE_TIME_SKELETON\"] = 10] = \"EXPECT_DATE_TIME_SKELETON\";\n\t/** Unmatched apostrophes in the argument style (e.g. `{foo, number, 'test`) */\n\tErrorKind[ErrorKind[\"UNCLOSED_QUOTE_IN_ARGUMENT_STYLE\"] = 11] = \"UNCLOSED_QUOTE_IN_ARGUMENT_STYLE\";\n\t/** Missing select argument options (e.g. `{foo, select}`) */\n\tErrorKind[ErrorKind[\"EXPECT_SELECT_ARGUMENT_OPTIONS\"] = 12] = \"EXPECT_SELECT_ARGUMENT_OPTIONS\";\n\t/** Expecting an offset value in `plural` or `selectordinal` argument (e.g `{foo, plural, offset}`) */\n\tErrorKind[ErrorKind[\"EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE\"] = 13] = \"EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE\";\n\t/** Offset value in `plural` or `selectordinal` is invalid (e.g. `{foo, plural, offset: x}`) */\n\tErrorKind[ErrorKind[\"INVALID_PLURAL_ARGUMENT_OFFSET_VALUE\"] = 14] = \"INVALID_PLURAL_ARGUMENT_OFFSET_VALUE\";\n\t/** Expecting a selector in `select` argument (e.g `{foo, select}`) */\n\tErrorKind[ErrorKind[\"EXPECT_SELECT_ARGUMENT_SELECTOR\"] = 15] = \"EXPECT_SELECT_ARGUMENT_SELECTOR\";\n\t/** Expecting a selector in `plural` or `selectordinal` argument (e.g `{foo, plural}`) */\n\tErrorKind[ErrorKind[\"EXPECT_PLURAL_ARGUMENT_SELECTOR\"] = 16] = \"EXPECT_PLURAL_ARGUMENT_SELECTOR\";\n\t/** Expecting a message fragment after the `select` selector (e.g. `{foo, select, apple}`) */\n\tErrorKind[ErrorKind[\"EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT\"] = 17] = \"EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT\";\n\t/**\n\t* Expecting a message fragment after the `plural` or `selectordinal` selector\n\t* (e.g. `{foo, plural, one}`)\n\t*/\n\tErrorKind[ErrorKind[\"EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT\"] = 18] = \"EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT\";\n\t/** Selector in `plural` or `selectordinal` is malformed (e.g. `{foo, plural, =x {#}}`) */\n\tErrorKind[ErrorKind[\"INVALID_PLURAL_ARGUMENT_SELECTOR\"] = 19] = \"INVALID_PLURAL_ARGUMENT_SELECTOR\";\n\t/**\n\t* Duplicate selectors in `plural` or `selectordinal` argument.\n\t* (e.g. {foo, plural, one {#} one {#}})\n\t*/\n\tErrorKind[ErrorKind[\"DUPLICATE_PLURAL_ARGUMENT_SELECTOR\"] = 20] = \"DUPLICATE_PLURAL_ARGUMENT_SELECTOR\";\n\t/** Duplicate selectors in `select` argument.\n\t* (e.g. {foo, select, apple {apple} apple {apple}})\n\t*/\n\tErrorKind[ErrorKind[\"DUPLICATE_SELECT_ARGUMENT_SELECTOR\"] = 21] = \"DUPLICATE_SELECT_ARGUMENT_SELECTOR\";\n\t/** Plural or select argument option must have `other` clause. */\n\tErrorKind[ErrorKind[\"MISSING_OTHER_CLAUSE\"] = 22] = \"MISSING_OTHER_CLAUSE\";\n\t/** The tag is malformed. (e.g. `<bold!>foo</bold!>) */\n\tErrorKind[ErrorKind[\"INVALID_TAG\"] = 23] = \"INVALID_TAG\";\n\t/** The tag name is invalid. (e.g. `<123>foo</123>`) */\n\tErrorKind[ErrorKind[\"INVALID_TAG_NAME\"] = 25] = \"INVALID_TAG_NAME\";\n\t/** The closing tag does not match the opening tag. (e.g. `<bold>foo</italic>`) */\n\tErrorKind[ErrorKind[\"UNMATCHED_CLOSING_TAG\"] = 26] = \"UNMATCHED_CLOSING_TAG\";\n\t/** The opening tag has unmatched closing tag. (e.g. `<bold>foo`) */\n\tErrorKind[ErrorKind[\"UNCLOSED_TAG\"] = 27] = \"UNCLOSED_TAG\";\n\treturn ErrorKind;\n}({});\n//#endregion\n//#region packages/icu-messageformat-parser/types.ts\nlet TYPE = /* @__PURE__ */ function(TYPE) {\n\t/**\n\t* Raw text\n\t*/\n\tTYPE[TYPE[\"literal\"] = 0] = \"literal\";\n\t/**\n\t* Variable w/o any format, e.g `var` in `this is a {var}`\n\t*/\n\tTYPE[TYPE[\"argument\"] = 1] = \"argument\";\n\t/**\n\t* Variable w/ number format\n\t*/\n\tTYPE[TYPE[\"number\"] = 2] = \"number\";\n\t/**\n\t* Variable w/ date format\n\t*/\n\tTYPE[TYPE[\"date\"] = 3] = \"date\";\n\t/**\n\t* Variable w/ time format\n\t*/\n\tTYPE[TYPE[\"time\"] = 4] = \"time\";\n\t/**\n\t* Variable w/ select format\n\t*/\n\tTYPE[TYPE[\"select\"] = 5] = \"select\";\n\t/**\n\t* Variable w/ plural format\n\t*/\n\tTYPE[TYPE[\"plural\"] = 6] = \"plural\";\n\t/**\n\t* Only possible within plural argument.\n\t* This is the `#` symbol that will be substituted with the count.\n\t*/\n\tTYPE[TYPE[\"pound\"] = 7] = \"pound\";\n\t/**\n\t* XML-like tag\n\t*/\n\tTYPE[TYPE[\"tag\"] = 8] = \"tag\";\n\treturn TYPE;\n}({});\nlet SKELETON_TYPE = /* @__PURE__ */ function(SKELETON_TYPE) {\n\tSKELETON_TYPE[SKELETON_TYPE[\"number\"] = 0] = \"number\";\n\tSKELETON_TYPE[SKELETON_TYPE[\"dateTime\"] = 1] = \"dateTime\";\n\treturn SKELETON_TYPE;\n}({});\n/**\n* Type Guards\n*/\nfunction isLiteralElement(el) {\n\treturn el.type === 0;\n}\nfunction isArgumentElement(el) {\n\treturn el.type === 1;\n}\nfunction isNumberElement(el) {\n\treturn el.type === 2;\n}\nfunction isDateElement(el) {\n\treturn el.type === 3;\n}\nfunction isTimeElement(el) {\n\treturn el.type === 4;\n}\nfunction isSelectElement(el) {\n\treturn el.type === 5;\n}\nfunction isPluralElement(el) {\n\treturn el.type === 6;\n}\nfunction isPoundElement(el) {\n\treturn el.type === 7;\n}\nfunction isTagElement(el) {\n\treturn el.type === 8;\n}\nfunction isNumberSkeleton(el) {\n\treturn !!(el && typeof el === \"object\" && el.type === 0);\n}\nfunction isDateTimeSkeleton(el) {\n\treturn !!(el && typeof el === \"object\" && el.type === 1);\n}\nfunction createLiteralElement(value) {\n\treturn {\n\t\ttype: 0,\n\t\tvalue\n\t};\n}\nfunction createNumberElement(value, style) {\n\treturn {\n\t\ttype: 2,\n\t\tvalue,\n\t\tstyle\n\t};\n}\n//#endregion\n//#region node_modules/.aspect_rules_js/@formatjs_generated+unicode@0.0.0/node_modules/@formatjs_generated/unicode/icu-messageformat-parser-regex.js\nconst SPACE_SEPARATOR_REGEX = /[ \\xA0\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/;\nconst IDENTIFIER_PREFIX_REGEX = /([^\\t-\\r -\\/:-@\\[-\\^`\\{-~\\x85\\xA0-\\xA7\\xA9\\xAB\\xAC\\xAE\\xB0\\xB1\\xB6\\xBB\\xBF\\xD7\\xF7\\u1680\\u2000-\\u200A\\u2010-\\u2029\\u202F-\\u203E\\u2041-\\u2053\\u2055-\\u205F\\u2190-\\u245F\\u2500-\\u2775\\u2794-\\u2BFF\\u2E00-\\u2E7F\\u3000-\\u3003\\u3008-\\u3020\\u3030\\uFD3E\\uFD3F\\uFE45\\uFE46]*)/g;\n//#endregion\n//#region node_modules/.aspect_rules_js/@formatjs_generated+cldr.core@0.0.0/node_modules/@formatjs_generated/cldr.core/time-data.js\nconst timeData = {\n\t\"001\": [\"H\", \"h\"],\n\t\"419\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"AC\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"AD\": [\"H\", \"hB\"],\n\t\"AE\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"AF\": [\n\t\t\"H\",\n\t\t\"hb\",\n\t\t\"hB\",\n\t\t\"h\"\n\t],\n\t\"AG\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"AI\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"AL\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"AM\": [\"H\", \"hB\"],\n\t\"AO\": [\"H\", \"hB\"],\n\t\"AR\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"AS\": [\"h\", \"H\"],\n\t\"AT\": [\"H\", \"hB\"],\n\t\"AU\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"AW\": [\"H\", \"hB\"],\n\t\"AX\": [\"H\"],\n\t\"AZ\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"h\"\n\t],\n\t\"BA\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"h\"\n\t],\n\t\"BB\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"BD\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"H\"\n\t],\n\t\"BE\": [\"H\", \"hB\"],\n\t\"BF\": [\"H\", \"hB\"],\n\t\"BG\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"h\"\n\t],\n\t\"BH\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"BI\": [\"H\", \"h\"],\n\t\"BJ\": [\"H\", \"hB\"],\n\t\"BL\": [\"H\", \"hB\"],\n\t\"BM\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"BN\": [\n\t\t\"hb\",\n\t\t\"hB\",\n\t\t\"h\",\n\t\t\"H\"\n\t],\n\t\"BO\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"BQ\": [\"H\"],\n\t\"BR\": [\"H\", \"hB\"],\n\t\"BS\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"BT\": [\"h\", \"H\"],\n\t\"BW\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"BY\": [\"H\", \"h\"],\n\t\"BZ\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"CA\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"CC\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"CD\": [\"hB\", \"H\"],\n\t\"CF\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\"\n\t],\n\t\"CG\": [\"H\", \"hB\"],\n\t\"CH\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"h\"\n\t],\n\t\"CI\": [\"H\", \"hB\"],\n\t\"CK\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"CL\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"CM\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\"\n\t],\n\t\"CN\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"h\"\n\t],\n\t\"CO\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"CP\": [\"H\"],\n\t\"CR\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"CU\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"CV\": [\"H\", \"hB\"],\n\t\"CW\": [\"H\", \"hB\"],\n\t\"CX\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"CY\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"CZ\": [\"H\"],\n\t\"DE\": [\"H\", \"hB\"],\n\t\"DG\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"DJ\": [\"h\", \"H\"],\n\t\"DK\": [\"H\"],\n\t\"DM\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"DO\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"DZ\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"EA\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"EC\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"EE\": [\"H\", \"hB\"],\n\t\"EG\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"EH\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"ER\": [\"h\", \"H\"],\n\t\"ES\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"h\",\n\t\t\"hb\"\n\t],\n\t\"ET\": [\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"h\",\n\t\t\"H\"\n\t],\n\t\"FI\": [\"H\"],\n\t\"FJ\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"FK\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"FM\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"FO\": [\"H\", \"h\"],\n\t\"FR\": [\"H\", \"hB\"],\n\t\"GA\": [\"H\", \"hB\"],\n\t\"GB\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"GD\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"GE\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"h\"\n\t],\n\t\"GF\": [\"H\", \"hB\"],\n\t\"GG\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"GH\": [\"h\", \"H\"],\n\t\"GI\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"GL\": [\"H\", \"h\"],\n\t\"GM\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"GN\": [\"H\", \"hB\"],\n\t\"GP\": [\"H\", \"hB\"],\n\t\"GQ\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"h\",\n\t\t\"hb\"\n\t],\n\t\"GR\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"GS\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"GT\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"GU\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"GW\": [\"H\", \"hB\"],\n\t\"GY\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"HK\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"HN\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"HR\": [\"H\", \"hB\"],\n\t\"HU\": [\"H\", \"h\"],\n\t\"IC\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"ID\": [\"H\"],\n\t\"IE\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"IL\": [\"H\", \"hB\"],\n\t\"IM\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"IN\": [\"h\", \"H\"],\n\t\"IO\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"IQ\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"IR\": [\"hB\", \"H\"],\n\t\"IS\": [\"H\"],\n\t\"IT\": [\"H\", \"hB\"],\n\t\"JE\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"JM\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"JO\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"JP\": [\n\t\t\"H\",\n\t\t\"K\",\n\t\t\"h\"\n\t],\n\t\"KE\": [\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"h\"\n\t],\n\t\"KG\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"KH\": [\n\t\t\"hB\",\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hb\"\n\t],\n\t\"KI\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"KM\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"KN\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"KP\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"KR\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"KW\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"KY\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"KZ\": [\"H\", \"hB\"],\n\t\"LA\": [\n\t\t\"H\",\n\t\t\"hb\",\n\t\t\"hB\",\n\t\t\"h\"\n\t],\n\t\"LB\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"LC\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"LI\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"h\"\n\t],\n\t\"LK\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"LR\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"LS\": [\"h\", \"H\"],\n\t\"LT\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"LU\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\"\n\t],\n\t\"LV\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"h\"\n\t],\n\t\"LY\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"MA\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"MC\": [\"H\", \"hB\"],\n\t\"MD\": [\"H\", \"hB\"],\n\t\"ME\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"h\"\n\t],\n\t\"MF\": [\"H\", \"hB\"],\n\t\"MG\": [\"H\", \"h\"],\n\t\"MH\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"MK\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"ML\": [\"H\"],\n\t\"MM\": [\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"h\"\n\t],\n\t\"MN\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"MO\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"MP\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"MQ\": [\"H\", \"hB\"],\n\t\"MR\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"MS\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"MT\": [\"H\", \"h\"],\n\t\"MU\": [\"H\", \"h\"],\n\t\"MV\": [\"H\", \"h\"],\n\t\"MW\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"MX\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"MY\": [\n\t\t\"hb\",\n\t\t\"hB\",\n\t\t\"h\",\n\t\t\"H\"\n\t],\n\t\"MZ\": [\"H\", \"hB\"],\n\t\"NA\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"NC\": [\"H\", \"hB\"],\n\t\"NE\": [\"H\"],\n\t\"NF\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"NG\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"NI\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"NL\": [\"H\", \"hB\"],\n\t\"NO\": [\"H\", \"h\"],\n\t\"NP\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\"\n\t],\n\t\"NR\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"NU\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"NZ\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"OM\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"PA\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"PE\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"PF\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\"\n\t],\n\t\"PG\": [\"h\", \"H\"],\n\t\"PH\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"PK\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"H\"\n\t],\n\t\"PL\": [\"H\", \"h\"],\n\t\"PM\": [\"H\", \"hB\"],\n\t\"PN\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"PR\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"PS\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"PT\": [\"H\", \"hB\"],\n\t\"PW\": [\"h\", \"H\"],\n\t\"PY\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"QA\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"RE\": [\"H\", \"hB\"],\n\t\"RO\": [\"H\", \"hB\"],\n\t\"RS\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"h\"\n\t],\n\t\"RU\": [\"H\"],\n\t\"RW\": [\"H\", \"h\"],\n\t\"SA\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"SB\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"SC\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\"\n\t],\n\t\"SD\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"SE\": [\"H\"],\n\t\"SG\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"SH\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"SI\": [\"H\", \"hB\"],\n\t\"SJ\": [\"H\"],\n\t\"SK\": [\"H\"],\n\t\"SL\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"SM\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\"\n\t],\n\t\"SN\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\"\n\t],\n\t\"SO\": [\"h\", \"H\"],\n\t\"SR\": [\"H\", \"hB\"],\n\t\"SS\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"ST\": [\"H\", \"hB\"],\n\t\"SV\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"SX\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"SY\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"SZ\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"TA\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"TC\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"TD\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"TF\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\"\n\t],\n\t\"TG\": [\"H\", \"hB\"],\n\t\"TH\": [\"H\", \"h\"],\n\t\"TJ\": [\"H\", \"h\"],\n\t\"TL\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"h\"\n\t],\n\t\"TM\": [\"H\", \"h\"],\n\t\"TN\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"TO\": [\"h\", \"H\"],\n\t\"TR\": [\"H\", \"hB\"],\n\t\"TT\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"TW\": [\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"h\",\n\t\t\"H\"\n\t],\n\t\"TZ\": [\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"h\"\n\t],\n\t\"UA\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"h\"\n\t],\n\t\"UG\": [\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"h\"\n\t],\n\t\"UM\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"US\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"UY\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"UZ\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"h\"\n\t],\n\t\"VA\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\"\n\t],\n\t\"VC\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"VE\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"VG\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"VI\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"VN\": [\"H\", \"h\"],\n\t\"VU\": [\"h\", \"H\"],\n\t\"WF\": [\"H\", \"hB\"],\n\t\"WS\": [\"h\", \"H\"],\n\t\"XK\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"h\"\n\t],\n\t\"YE\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"YT\": [\"H\", \"hB\"],\n\t\"ZA\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"ZM\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"ZW\": [\"H\", \"h\"],\n\t\"af-ZA\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"ar-001\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"ca-ES\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\"\n\t],\n\t\"en-001\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"en-HK\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"en-IL\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"en-MY\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"es-BR\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"es-ES\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"es-GQ\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"fr-CA\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\"\n\t],\n\t\"gl-ES\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\"\n\t],\n\t\"gu-IN\": [\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"h\",\n\t\t\"H\"\n\t],\n\t\"hi-IN\": [\n\t\t\"hB\",\n\t\t\"h\",\n\t\t\"H\"\n\t],\n\t\"it-CH\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\"\n\t],\n\t\"it-IT\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\"\n\t],\n\t\"kn-IN\": [\n\t\t\"hB\",\n\t\t\"h\",\n\t\t\"H\"\n\t],\n\t\"ku-SY\": [\"H\", \"hB\"],\n\t\"ml-IN\": [\n\t\t\"hB\",\n\t\t\"h\",\n\t\t\"H\"\n\t],\n\t\"mr-IN\": [\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"h\",\n\t\t\"H\"\n\t],\n\t\"pa-IN\": [\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"h\",\n\t\t\"H\"\n\t],\n\t\"ta-IN\": [\n\t\t\"hB\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"te-IN\": [\n\t\t\"hB\",\n\t\t\"h\",\n\t\t\"H\"\n\t],\n\t\"zu-ZA\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"h\"\n\t]\n};\n//#endregion\n//#region packages/icu-messageformat-parser/date-time-pattern-generator.ts\n/**\n* Returns the best matching date time pattern if a date time skeleton\n* pattern is provided with a locale. Follows the Unicode specification:\n* https://www.unicode.org/reports/tr35/tr35-dates.html#table-mapping-requested-time-skeletons-to-patterns\n* @param skeleton date time skeleton pattern that possibly includes j, J or C\n* @param locale\n*/\nfunction getBestPattern(skeleton, locale) {\n\tlet skeletonCopy = \"\";\n\tfor (let patternPos = 0; patternPos < skeleton.length; patternPos++) {\n\t\tconst patternChar = skeleton.charAt(patternPos);\n\t\tif (patternChar === \"j\") {\n\t\t\tlet extraLength = 0;\n\t\t\twhile (patternPos + 1 < skeleton.length && skeleton.charAt(patternPos + 1) === patternChar) {\n\t\t\t\textraLength++;\n\t\t\t\tpatternPos++;\n\t\t\t}\n\t\t\tlet hourLen = 1 + (extraLength & 1);\n\t\t\tlet dayPeriodLen = extraLength < 2 ? 1 : 3 + (extraLength >> 1);\n\t\t\tlet dayPeriodChar = \"a\";\n\t\t\tlet hourChar = getDefaultHourSymbolFromLocale(locale);\n\t\t\tif (hourChar == \"H\" || hourChar == \"k\") dayPeriodLen = 0;\n\t\t\twhile (dayPeriodLen-- > 0) skeletonCopy += dayPeriodChar;\n\t\t\twhile (hourLen-- > 0) skeletonCopy = hourChar + skeletonCopy;\n\t\t} else if (patternChar === \"J\") skeletonCopy += \"H\";\n\t\telse skeletonCopy += patternChar;\n\t}\n\treturn skeletonCopy;\n}\n/**\n* Maps the [hour cycle type](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/hourCycle)\n* of the given `locale` to the corresponding time pattern.\n* @param locale\n*/\nfunction getDefaultHourSymbolFromLocale(locale) {\n\tlet hourCycle = locale.hourCycle;\n\tif (hourCycle === void 0) {\n\t\tconst localeWithHourCycles = locale;\n\t\thourCycle = localeWithHourCycles.getHourCycles?.()[0] ?? localeWithHourCycles.hourCycles?.[0];\n\t}\n\tif (hourCycle) switch (hourCycle) {\n\t\tcase \"h24\": return \"k\";\n\t\tcase \"h23\": return \"H\";\n\t\tcase \"h12\": return \"h\";\n\t\tcase \"h11\": return \"K\";\n\t\tdefault: throw new Error(\"Invalid hourCycle\");\n\t}\n\tconst languageTag = locale.language;\n\tlet regionTag;\n\tif (languageTag !== \"root\") regionTag = locale.maximize().region;\n\treturn (timeData[`${languageTag}-${regionTag}`] || timeData[regionTag || \"\"] || timeData[languageTag || \"\"] || timeData[`${languageTag}-001`] || timeData[\"001\"])[0].charAt(0);\n}\n//#endregion\n//#region packages/icu-messageformat-parser/parser.ts\nconst SPACE_SEPARATOR_START_REGEX = new RegExp(`^${SPACE_SEPARATOR_REGEX.source}*`);\nconst SPACE_SEPARATOR_END_REGEX = new RegExp(`${SPACE_SEPARATOR_REGEX.source}*$`);\nfunction createLocation(start, end) {\n\treturn {\n\t\tstart,\n\t\tend\n\t};\n}\nconst hasNativeFromEntries = !!Object.fromEntries;\nconst hasTrimStart = !!String.prototype.trimStart;\nconst hasTrimEnd = !!String.prototype.trimEnd;\nconst fromEntries = hasNativeFromEntries ? Object.fromEntries : function fromEntries(entries) {\n\tconst obj = {};\n\tfor (const [k, v] of entries) obj[k] = v;\n\treturn obj;\n};\nconst trimStart = hasTrimStart ? function trimStart(s) {\n\treturn s.trimStart();\n} : function trimStart(s) {\n\treturn s.replace(SPACE_SEPARATOR_START_REGEX, \"\");\n};\nconst trimEnd = hasTrimEnd ? function trimEnd(s) {\n\treturn s.trimEnd();\n} : function trimEnd(s) {\n\treturn s.replace(SPACE_SEPARATOR_END_REGEX, \"\");\n};\nlet IDENTIFIER_PREFIX_RE = createIdentifierPrefixRegex();\nfunction createIdentifierPrefixRegex() {\n\ttry {\n\t\tconst regex = new RegExp(\"([^\\\\p{White_Space}\\\\p{Pattern_Syntax}]*)\", \"yu\");\n\t\tif (regex.exec(\"a \")?.[1] === \"a\") return regex;\n\t} catch {}\n\treturn IDENTIFIER_PREFIX_REGEX;\n}\nfunction matchIdentifierAtIndex(s, index) {\n\tIDENTIFIER_PREFIX_RE.lastIndex = index;\n\treturn IDENTIFIER_PREFIX_RE.exec(s)[1] ?? \"\";\n}\nfunction plainTopLevelEndPosition(message) {\n\tif (message.length === 0) return null;\n\tlet line = 1;\n\tlet column = 1;\n\tfor (let offset = 0; offset < message.length;) {\n\t\tconst code = message.charCodeAt(offset);\n\t\tswitch (code) {\n\t\t\tcase 35:\n\t\t\tcase 39:\n\t\t\tcase 60:\n\t\t\tcase 123:\n\t\t\tcase 125: return null;\n\t\t}\n\t\tif (code === 10) {\n\t\t\tline++;\n\t\t\tcolumn = 1;\n\t\t\toffset++;\n\t\t} else {\n\t\t\tcolumn++;\n\t\t\tif (code >= 55296 && code <= 56319 && offset + 1 < message.length) {\n\t\t\t\tconst next = message.charCodeAt(offset + 1);\n\t\t\t\toffset += next >= 56320 && next <= 57343 ? 2 : 1;\n\t\t\t} else offset++;\n\t\t}\n\t}\n\treturn {\n\t\toffset: message.length,\n\t\tline,\n\t\tcolumn\n\t};\n}\nvar Parser = class {\n\tconstructor(message, options = {}) {\n\t\tthis.message = message;\n\t\tthis.position = {\n\t\t\toffset: 0,\n\t\t\tline: 1,\n\t\t\tcolumn: 1\n\t\t};\n\t\tthis.ignoreTag = !!options.ignoreTag;\n\t\tthis.locale = options.locale;\n\t\tthis.requiresOtherClause = !!options.requiresOtherClause;\n\t\tthis.shouldParseSkeletons = !!options.shouldParseSkeletons;\n\t}\n\tparse() {\n\t\tif (this.offset() !== 0) throw Error(\"parser can only be used once\");\n\t\tif (this.message.length > 0) {\n\t\t\tconst firstCode = this.message.charCodeAt(0);\n\t\t\tif (firstCode !== 35 && firstCode !== 39 && firstCode !== 60 && firstCode !== 123 && firstCode !== 125) {\n\t\t\t\tconst plainEndPosition = plainTopLevelEndPosition(this.message);\n\t\t\t\tif (plainEndPosition) {\n\t\t\t\t\tconst start = this.clonePosition();\n\t\t\t\t\tthis.position = plainEndPosition;\n\t\t\t\t\treturn {\n\t\t\t\t\t\tval: [{\n\t\t\t\t\t\t\ttype: 0,\n\t\t\t\t\t\t\tvalue: this.message,\n\t\t\t\t\t\t\tlocation: createLocation(start, this.clonePosition())\n\t\t\t\t\t\t}],\n\t\t\t\t\t\terr: null\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn this.parseMessage(0, \"\", false);\n\t}\n\tparseMessage(nestingLevel, parentArgType, expectingCloseTag) {\n\t\tlet elements = [];\n\t\twhile (!this.isEOF()) {\n\t\t\tconst char = this.char();\n\t\t\tif (char === 123) {\n\t\t\t\tconst result = this.parseArgument(nestingLevel, expectingCloseTag);\n\t\t\t\tif (result.err) return result;\n\t\t\t\telements.push(result.val);\n\t\t\t} else if (char === 125 && nestingLevel > 0) break;\n\t\t\telse if (char === 35 && (parentArgType === \"plural\" || parentArgType === \"selectordinal\")) {\n\t\t\t\tconst position = this.clonePosition();\n\t\t\t\tthis.bump();\n\t\t\t\telements.push({\n\t\t\t\t\ttype: 7,\n\t\t\t\t\tlocation: createLocation(position, this.clonePosition())\n\t\t\t\t});\n\t\t\t} else if (char === 60 && !this.ignoreTag && this.peek() === 47) {\n\t\t\t\tif (expectingCloseTag) break;\n\t\t\t\telse return this.error(26, createLocation(this.clonePosition(), this.clonePosition()));\n\t\t\t} else if (char === 60 && !this.ignoreTag && _isAlpha(this.peek() || 0)) {\n\t\t\t\tconst result = this.parseTag(nestingLevel, parentArgType);\n\t\t\t\tif (result.err) return result;\n\t\t\t\telements.push(result.val);\n\t\t\t} else {\n\t\t\t\tconst result = this.parseLiteral(nestingLevel, parentArgType);\n\t\t\t\tif (result.err) return result;\n\t\t\t\telements.push(result.val);\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tval: elements,\n\t\t\terr: null\n\t\t};\n\t}\n\t/**\n\t* A tag name must start with an ASCII lower/upper case letter. The grammar is based on the\n\t* [custom element name][] except that a dash is NOT always mandatory and uppercase letters\n\t* are accepted:\n\t*\n\t* ```\n\t* tag ::= \"<\" tagName (whitespace)* \"/>\" | \"<\" tagName (whitespace)* \">\" message \"</\" tagName (whitespace)* \">\"\n\t* tagName ::= [a-z] (PENChar)*\n\t* PENChar ::=\n\t* \"-\" | \".\" | [0-9] | \"_\" | [a-z] | [A-Z] | #xB7 | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x37D] |\n\t* [#x37F-#x1FFF] | [#x200C-#x200D] | [#x203F-#x2040] | [#x2070-#x218F] | [#x2C00-#x2FEF] |\n\t* [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]\n\t* ```\n\t*\n\t* [custom element name]: https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name\n\t* NOTE: We're a bit more lax here since HTML technically does not allow uppercase HTML element but we do\n\t* since other tag-based engines like React allow it\n\t*/\n\tparseTag(nestingLevel, parentArgType) {\n\t\tconst startPosition = this.clonePosition();\n\t\tthis.bump();\n\t\tconst tagName = this.parseTagName();\n\t\tthis.bumpSpace();\n\t\tif (this.bumpIf(\"/>\")) return {\n\t\t\tval: {\n\t\t\t\ttype: 0,\n\t\t\t\tvalue: `<${tagName}/>`,\n\t\t\t\tlocation: createLocation(startPosition, this.clonePosition())\n\t\t\t},\n\t\t\terr: null\n\t\t};\n\t\telse if (this.bumpIf(\">\")) {\n\t\t\tconst childrenResult = this.parseMessage(nestingLevel + 1, parentArgType, true);\n\t\t\tif (childrenResult.err) return childrenResult;\n\t\t\tconst children = childrenResult.val;\n\t\t\tconst endTagStartPosition = this.clonePosition();\n\t\t\tif (this.bumpIf(\"</\")) {\n\t\t\t\tif (this.isEOF() || !_isAlpha(this.char())) return this.error(23, createLocation(endTagStartPosition, this.clonePosition()));\n\t\t\t\tconst closingTagNameStartPosition = this.clonePosition();\n\t\t\t\tif (tagName !== this.parseTagName()) return this.error(26, createLocation(closingTagNameStartPosition, this.clonePosition()));\n\t\t\t\tthis.bumpSpace();\n\t\t\t\tif (!this.bumpIf(\">\")) return this.error(23, createLocation(endTagStartPosition, this.clonePosition()));\n\t\t\t\treturn {\n\t\t\t\t\tval: {\n\t\t\t\t\t\ttype: 8,\n\t\t\t\t\t\tvalue: tagName,\n\t\t\t\t\t\tchildren,\n\t\t\t\t\t\tlocation: createLocation(startPosition, this.clonePosition())\n\t\t\t\t\t},\n\t\t\t\t\terr: null\n\t\t\t\t};\n\t\t\t} else return this.error(27, createLocation(startPosition, this.clonePosition()));\n\t\t} else return this.error(23, createLocation(startPosition, this.clonePosition()));\n\t}\n\t/**\n\t* This method assumes that the caller has peeked ahead for the first tag character.\n\t*/\n\tparseTagName() {\n\t\tconst startOffset = this.offset();\n\t\tthis.bump();\n\t\twhile (!this.isEOF() && _isPotentialElementNameChar(this.char())) this.bump();\n\t\treturn this.message.slice(startOffset, this.offset());\n\t}\n\tparseLiteral(nestingLevel, parentArgType) {\n\t\tconst start = this.clonePosition();\n\t\tlet value = \"\";\n\t\twhile (true) {\n\t\t\tconst parseQuoteResult = this.tryParseQuote(parentArgType);\n\t\t\tif (parseQuoteResult) {\n\t\t\t\tvalue += parseQuoteResult;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst parseUnquotedResult = this.tryParseUnquoted(nestingLevel, parentArgType);\n\t\t\tif (parseUnquotedResult) {\n\t\t\t\tvalue += parseUnquotedResult;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst parseLeftAngleResult = this.tryParseLeftAngleBracket();\n\t\t\tif (parseLeftAngleResult) {\n\t\t\t\tvalue += parseLeftAngleResult;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tconst location = createLocation(start, this.clonePosition());\n\t\treturn {\n\t\t\tval: {\n\t\t\t\ttype: 0,\n\t\t\t\tvalue,\n\t\t\t\tlocation\n\t\t\t},\n\t\t\terr: null\n\t\t};\n\t}\n\ttryParseLeftAngleBracket() {\n\t\tif (!this.isEOF() && this.char() === 60 && (this.ignoreTag || !_isAlphaOrSlash(this.peek() || 0))) {\n\t\t\tthis.bump();\n\t\t\treturn \"<\";\n\t\t}\n\t\treturn null;\n\t}\n\t/**\n\t* Starting with ICU 4.8, an ASCII apostrophe only starts quoted text if it immediately precedes\n\t* a character that requires quoting (that is, \"only where needed\"), and works the same in\n\t* nested messages as on the top level of the pattern. The new behavior is otherwise compatible.\n\t*/\n\ttryParseQuote(parentArgType) {\n\t\tif (this.isEOF() || this.char() !== 39) return null;\n\t\tswitch (this.peek()) {\n\t\t\tcase 39:\n\t\t\t\tthis.bump();\n\t\t\t\tthis.bump();\n\t\t\t\treturn \"'\";\n\t\t\tcase 123:\n\t\t\tcase 60:\n\t\t\tcase 62:\n\t\t\tcase 125: break;\n\t\t\tcase 35:\n\t\t\t\tif (parentArgType === \"plural\" || parentArgType === \"selectordinal\") break;\n\t\t\t\treturn null;\n\t\t\tdefault: return null;\n\t\t}\n\t\tthis.bump();\n\t\tconst codePoints = [this.char()];\n\t\tthis.bump();\n\t\twhile (!this.isEOF()) {\n\t\t\tconst ch = this.char();\n\t\t\tif (ch === 39) {\n\t\t\t\tif (this.peek() === 39) {\n\t\t\t\t\tcodePoints.push(39);\n\t\t\t\t\tthis.bump();\n\t\t\t\t} else {\n\t\t\t\t\tthis.bump();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else codePoints.push(ch);\n\t\t\tthis.bump();\n\t\t}\n\t\treturn String.fromCodePoint(...codePoints);\n\t}\n\ttryParseUnquoted(nestingLevel, parentArgType) {\n\t\tif (this.isEOF()) return null;\n\t\tconst ch = this.char();\n\t\tif (ch === 60 || ch === 123 || ch === 35 && (parentArgType === \"plural\" || parentArgType === \"selectordinal\") || ch === 125 && nestingLevel > 0) return null;\n\t\telse {\n\t\t\tthis.bump();\n\t\t\treturn String.fromCodePoint(ch);\n\t\t}\n\t}\n\tparseArgument(nestingLevel, expectingCloseTag) {\n\t\tconst openingBracePosition = this.clonePosition();\n\t\tthis.bump();\n\t\tthis.bumpSpace();\n\t\tif (this.isEOF()) return this.error(1, createLocation(openingBracePosition, this.clonePosition()));\n\t\tif (this.char() === 125) {\n\t\t\tthis.bump();\n\t\t\treturn this.error(2, createLocation(openingBracePosition, this.clonePosition()));\n\t\t}\n\t\tlet value = this.parseIdentifierIfPossible().value;\n\t\tif (!value) return this.error(3, createLocation(openingBracePosition, this.clonePosition()));\n\t\tthis.bumpSpace();\n\t\tif (this.isEOF()) return this.error(1, createLocation(openingBracePosition, this.clonePosition()));\n\t\tswitch (this.char()) {\n\t\t\tcase 125:\n\t\t\t\tthis.bump();\n\t\t\t\treturn {\n\t\t\t\t\tval: {\n\t\t\t\t\t\ttype: 1,\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\tlocation: createLocation(openingBracePosition, this.clonePosition())\n\t\t\t\t\t},\n\t\t\t\t\terr: null\n\t\t\t\t};\n\t\t\tcase 44:\n\t\t\t\tthis.bump();\n\t\t\t\tthis.bumpSpace();\n\t\t\t\tif (this.isEOF()) return this.error(1, createLocation(openingBracePosition, this.clonePosition()));\n\t\t\t\treturn this.parseArgumentOptions(nestingLevel, expectingCloseTag, value, openingBracePosition);\n\t\t\tdefault: return this.error(3, createLocation(openingBracePosition, this.clonePosition()));\n\t\t}\n\t}\n\t/**\n\t* Advance the parser until the end of the identifier, if it is currently on\n\t* an identifier character. Return an empty string otherwise.\n\t*/\n\tparseIdentifierIfPossible() {\n\t\tconst startingPosition = this.clonePosition();\n\t\tconst startOffset = this.offset();\n\t\tconst value = matchIdentifierAtIndex(this.message, startOffset);\n\t\tconst endOffset = startOffset + value.length;\n\t\tthis.bumpTo(endOffset);\n\t\treturn {\n\t\t\tvalue,\n\t\t\tlocation: createLocation(startingPosition, this.clonePosition())\n\t\t};\n\t}\n\tparseArgumentOptions(nestingLevel, expectingCloseTag, value, openingBracePosition) {\n\t\tlet typeStartPosition = this.clonePosition();\n\t\tlet argType = this.parseIdentifierIfPossible().value;\n\t\tlet typeEndPosition = this.clonePosition();\n\t\tswitch (argType) {\n\t\t\tcase \"\": return this.error(4, createLocation(typeStartPosition, typeEndPosition));\n\t\t\tcase \"number\":\n\t\t\tcase \"date\":\n\t\t\tcase \"time\": {\n\t\t\t\tthis.bumpSpace();\n\t\t\t\tlet styleAndLocation = null;\n\t\t\t\tif (this.bumpIf(\",\")) {\n\t\t\t\t\tthis.bumpSpace();\n\t\t\t\t\tconst styleStartPosition = this.clonePosition();\n\t\t\t\t\tconst result = this.parseSimpleArgStyleIfPossible();\n\t\t\t\t\tif (result.err) return result;\n\t\t\t\t\tconst style = trimEnd(result.val);\n\t\t\t\t\tif (style.length === 0) return this.error(6, createLocation(this.clonePosition(), this.clonePosition()));\n\t\t\t\t\tstyleAndLocation = {\n\t\t\t\t\t\tstyle,\n\t\t\t\t\t\tstyleLocation: createLocation(styleStartPosition, this.clonePosition())\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tconst argCloseResult = this.tryParseArgumentClose(openingBracePosition);\n\t\t\t\tif (argCloseResult.err) return argCloseResult;\n\t\t\t\tconst location = createLocation(openingBracePosition, this.clonePosition());\n\t\t\t\tif (styleAndLocation && styleAndLocation.style.startsWith(\"::\")) {\n\t\t\t\t\tlet skeleton = trimStart(styleAndLocation.style.slice(2));\n\t\t\t\t\tif (argType === \"number\") {\n\t\t\t\t\t\tconst result = this.parseNumberSkeletonFromString(skeleton, styleAndLocation.styleLocation);\n\t\t\t\t\t\tif (result.err) return result;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tval: {\n\t\t\t\t\t\t\t\ttype: 2,\n\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\tlocation,\n\t\t\t\t\t\t\t\tstyle: result.val\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\terr: null\n\t\t\t\t\t\t};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (skeleton.length === 0) return this.error(10, location);\n\t\t\t\t\t\tlet dateTimePattern = skeleton;\n\t\t\t\t\t\tif (this.locale) dateTimePattern = getBestPattern(skeleton, this.locale);\n\t\t\t\t\t\tconst style = {\n\t\t\t\t\t\t\ttype: 1,\n\t\t\t\t\t\t\tpattern: dateTimePattern,\n\t\t\t\t\t\t\tlocation: styleAndLocation.styleLocation,\n\t\t\t\t\t\t\tparsedOptions: this.shouldParseSkeletons ? parseDateTimeSkeleton(dateTimePattern) : {}\n\t\t\t\t\t\t};\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tval: {\n\t\t\t\t\t\t\t\ttype: argType === \"date\" ? 3 : 4,\n\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\tlocation,\n\t\t\t\t\t\t\t\tstyle\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\terr: null\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tval: {\n\t\t\t\t\t\ttype: argType === \"number\" ? 2 : argType === \"date\" ? 3 : 4,\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\tlocation,\n\t\t\t\t\t\tstyle: styleAndLocation?.style ?? null\n\t\t\t\t\t},\n\t\t\t\t\terr: null\n\t\t\t\t};\n\t\t\t}\n\t\t\tcase \"plural\":\n\t\t\tcase \"selectordinal\":\n\t\t\tcase \"select\": {\n\t\t\t\tconst typeEndPosition = this.clonePosition();\n\t\t\t\tthis.bumpSpace();\n\t\t\t\tif (!this.bumpIf(\",\")) return this.error(12, createLocation(typeEndPosition, { ...typeEndPosition }));\n\t\t\t\tthis.bumpSpace();\n\t\t\t\tlet identifierAndLocation = this.parseIdentifierIfPossible();\n\t\t\t\tlet pluralOffset = 0;\n\t\t\t\tif (argType !== \"select\" && identifierAndLocation.value === \"offset\") {\n\t\t\t\t\tif (!this.bumpIf(\":\")) return this.error(13, createLocation(this.clonePosition(), this.clonePosition()));\n\t\t\t\t\tthis.bumpSpace();\n\t\t\t\t\tconst result = this.tryParseDecimalInteger(13, 14);\n\t\t\t\t\tif (result.err) return result;\n\t\t\t\t\tthis.bumpSpace();\n\t\t\t\t\tidentifierAndLocation = this.parseIdentifierIfPossible();\n\t\t\t\t\tpluralOffset = result.val;\n\t\t\t\t}\n\t\t\t\tconst optionsResult = this.tryParsePluralOrSelectOptions(nestingLevel, argType, expectingCloseTag, identifierAndLocation);\n\t\t\t\tif (optionsResult.err) return optionsResult;\n\t\t\t\tconst argCloseResult = this.tryParseArgumentClose(openingBracePosition);\n\t\t\t\tif (argCloseResult.err) return argCloseResult;\n\t\t\t\tconst location = createLocation(openingBracePosition, this.clonePosition());\n\t\t\t\tif (argType === \"select\") return {\n\t\t\t\t\tval: {\n\t\t\t\t\t\ttype: 5,\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\toptions: fromEntries(optionsResult.val),\n\t\t\t\t\t\tlocation\n\t\t\t\t\t},\n\t\t\t\t\terr: null\n\t\t\t\t};\n\t\t\t\telse return {\n\t\t\t\t\tval: {\n\t\t\t\t\t\ttype: 6,\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\toptions: fromEntries(optionsResult.val),\n\t\t\t\t\t\toffset: pluralOffset,\n\t\t\t\t\t\tpluralType: argType === \"plural\" ? \"cardinal\" : \"ordinal\",\n\t\t\t\t\t\tlocation\n\t\t\t\t\t},\n\t\t\t\t\terr: null\n\t\t\t\t};\n\t\t\t}\n\t\t\tdefault: return this.error(5, createLocation(typeStartPosition, typeEndPosition));\n\t\t}\n\t}\n\ttryParseArgumentClose(openingBracePosition) {\n\t\tif (this.isEOF() || this.char() !== 125) return this.error(1, createLocation(openingBracePosition, this.clonePosition()));\n\t\tthis.bump();\n\t\treturn {\n\t\t\tval: true,\n\t\t\terr: null\n\t\t};\n\t}\n\t/**\n\t* See: https://github.com/unicode-org/icu/blob/af7ed1f6d2298013dc303628438ec4abe1f16479/icu4c/source/common/messagepattern.cpp#L659\n\t*/\n\tparseSimpleArgStyleIfPossible() {\n\t\tlet nestedBraces = 0;\n\t\tconst startPosition = this.clonePosition();\n\t\twhile (!this.isEOF()) switch (this.char()) {\n\t\t\tcase 39: {\n\t\t\t\tthis.bump();\n\t\t\t\tlet apostrophePosition = this.clonePosition();\n\t\t\t\tif (!this.bumpUntil(\"'\")) return this.error(11, createLocation(apostrophePosition, this.clonePosition()));\n\t\t\t\tthis.bump();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 123:\n\t\t\t\tnestedBraces += 1;\n\t\t\t\tthis.bump();\n\t\t\t\tbreak;\n\t\t\tcase 125:\n\t\t\t\tif (nestedBraces > 0) nestedBraces -= 1;\n\t\t\t\telse return {\n\t\t\t\t\tval: this.message.slice(startPosition.offset, this.offset()),\n\t\t\t\t\terr: null\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tdefault: this.bump();\n\t\t}\n\t\treturn {\n\t\t\tval: this.message.slice(startPosition.offset, this.offset()),\n\t\t\terr: null\n\t\t};\n\t}\n\tparseNumberSkeletonFromString(skeleton, location) {\n\t\tlet tokens = [];\n\t\ttry {\n\t\t\ttokens = parseNumberSkeletonFromString(skeleton);\n\t\t} catch {\n\t\t\treturn this.error(7, location);\n\t\t}\n\t\treturn {\n\t\t\tval: {\n\t\t\t\ttype: 0,\n\t\t\t\ttokens,\n\t\t\t\tlocation,\n\t\t\t\tparsedOptions: this.shouldParseSkeletons ? parseNumberSkeleton(tokens) : {}\n\t\t\t},\n\t\t\terr: null\n\t\t};\n\t}\n\t/**\n\t* @param nesting_level The current nesting level of messages.\n\t* This can be positive when parsing message fragment in select or plural argument options.\n\t* @param parent_arg_type The parent argument's type.\n\t* @param parsed_first_identifier If provided, this is the first identifier-like selector of\n\t* the argument. It is a by-product of a previous parsing attempt.\n\t* @param expecting_close_tag If true, this message is directly or indirectly nested inside\n\t* between a pair of opening and closing tags. The nested message will not parse beyond\n\t* the closing tag boundary.\n\t*/\n\ttryParsePluralOrSelectOptions(nestingLevel, parentArgType, expectCloseTag, parsedFirstIdentifier) {\n\t\tlet hasOtherClause = false;\n\t\tconst options = [];\n\t\tconst parsedSelectors = /* @__PURE__ */ new Set();\n\t\tlet { value: selector, location: selectorLocation } = parsedFirstIdentifier;\n\t\twhile (true) {\n\t\t\tif (selector.length === 0) {\n\t\t\t\tconst startPosition = this.clonePosition();\n\t\t\t\tif (parentArgType !== \"select\" && this.bumpIf(\"=\")) {\n\t\t\t\t\tconst result = this.tryParseDecimalInteger(16, 19);\n\t\t\t\t\tif (result.err) return result;\n\t\t\t\t\tselectorLocation = createLocation(startPosition, this.clonePosition());\n\t\t\t\t\tselector = this.message.slice(startPosition.offset, this.offset());\n\t\t\t\t} else break;\n\t\t\t}\n\t\t\tif (parsedSelectors.has(selector)) return this.error(parentArgType === \"select\" ? 21 : 20, selectorLocation);\n\t\t\tif (selector === \"other\") hasOtherClause = true;\n\t\t\tthis.bumpSpace();\n\t\t\tconst openingBracePosition = this.clonePosition();\n\t\t\tif (!this.bumpIf(\"{\")) return this.error(parentArgType === \"select\" ? 17 : 18, createLocation(this.clonePosition(), this.clonePosition()));\n\t\t\tconst fragmentResult = this.parseMessage(nestingLevel + 1, parentArgType, expectCloseTag);\n\t\t\tif (fragmentResult.err) return fragmentResult;\n\t\t\tconst argCloseResult = this.tryParseArgumentClose(openingBracePosition);\n\t\t\tif (argCloseResult.err) return argCloseResult;\n\t\t\toptions.push([selector, {\n\t\t\t\tvalue: fragmentResult.val,\n\t\t\t\tlocation: createLocation(openingBracePosition, this.clonePosition())\n\t\t\t}]);\n\t\t\tparsedSelectors.add(selector);\n\t\t\tthis.bumpSpace();\n\t\t\t({value: selector, location: selectorLocation} = this.parseIdentifierIfPossible());\n\t\t}\n\t\tif (options.length === 0) return this.error(parentArgType === \"select\" ? 15 : 16, createLocation(this.clonePosition(), this.clonePosition()));\n\t\tif (this.requiresOtherClause && !hasOtherClause) return this.error(22, createLocation(this.clonePosition(), this.clonePosition()));\n\t\treturn {\n\t\t\tval: options,\n\t\t\terr: null\n\t\t};\n\t}\n\ttryParseDecimalInteger(expectNumberError, invalidNumberError) {\n\t\tlet sign = 1;\n\t\tconst startingPosition = this.clonePosition();\n\t\tif (this.bumpIf(\"+\")) {} else if (this.bumpIf(\"-\")) sign = -1;\n\t\tlet hasDigits = false;\n\t\tlet decimal = 0;\n\t\twhile (!this.isEOF()) {\n\t\t\tconst ch = this.char();\n\t\t\tif (ch >= 48 && ch <= 57) {\n\t\t\t\thasDigits = true;\n\t\t\t\tdecimal = decimal * 10 + (ch - 48);\n\t\t\t\tthis.bump();\n\t\t\t} else break;\n\t\t}\n\t\tconst location = createLocation(startingPosition, this.clonePosition());\n\t\tif (!hasDigits) return this.error(expectNumberError, location);\n\t\tdecimal *= sign;\n\t\tif (!Number.isSafeInteger(decimal)) return this.error(invalidNumberError, location);\n\t\treturn {\n\t\t\tval: decimal,\n\t\t\terr: null\n\t\t};\n\t}\n\toffset() {\n\t\treturn this.position.offset;\n\t}\n\tisEOF() {\n\t\treturn this.offset() === this.message.length;\n\t}\n\tclonePosition() {\n\t\treturn {\n\t\t\toffset: this.position.offset,\n\t\t\tline: this.position.line,\n\t\t\tcolumn: this.position.column\n\t\t};\n\t}\n\t/**\n\t* Return the code point at the current position of the parser.\n\t* Throws if the index is out of bound.\n\t*/\n\tchar() {\n\t\tconst offset = this.position.offset;\n\t\tif (offset >= this.message.length) throw Error(\"out of bound\");\n\t\tconst code = this.message.codePointAt(offset);\n\t\tif (code === void 0) throw Error(`Offset ${offset} is at invalid UTF-16 code unit boundary`);\n\t\treturn code;\n\t}\n\terror(kind, location) {\n\t\treturn {\n\t\t\tval: null,\n\t\t\terr: {\n\t\t\t\tkind,\n\t\t\t\tmessage: this.message,\n\t\t\t\tlocation\n\t\t\t}\n\t\t};\n\t}\n\t/** Bump the parser to the next UTF-16 code unit. */\n\tbump() {\n\t\tif (this.isEOF()) return;\n\t\tconst code = this.char();\n\t\tif (code === 10) {\n\t\t\tthis.position.line += 1;\n\t\t\tthis.position.column = 1;\n\t\t\tthis.position.offset += 1;\n\t\t} else {\n\t\t\tthis.position.column += 1;\n\t\t\tthis.position.offset += code < 65536 ? 1 : 2;\n\t\t}\n\t}\n\t/**\n\t* If the substring starting at the current position of the parser has\n\t* the given prefix, then bump the parser to the character immediately\n\t* following the prefix and return true. Otherwise, don't bump the parser\n\t* and return false.\n\t*/\n\tbumpIf(prefix) {\n\t\tconst offset = this.offset();\n\t\tif (this.message.slice(offset, offset + prefix.length) === prefix) {\n\t\t\tfor (let i = 0; i < prefix.length; i++) this.bump();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\t/**\n\t* Bump the parser until the pattern character is found and return `true`.\n\t* Otherwise bump to the end of the file and return `false`.\n\t*/\n\tbumpUntil(pattern) {\n\t\tconst currentOffset = this.offset();\n\t\tconst index = this.message.indexOf(pattern, currentOffset);\n\t\tif (index >= 0) {\n\t\t\tthis.bumpTo(index);\n\t\t\treturn true;\n\t\t} else {\n\t\t\tthis.bumpTo(this.message.length);\n\t\t\treturn false;\n\t\t}\n\t}\n\t/**\n\t* Bump the parser to the target offset.\n\t* If target offset is beyond the end of the input, bump the parser to the end of the input.\n\t*/\n\tbumpTo(targetOffset) {\n\t\tif (this.offset() > targetOffset) throw Error(`targetOffset ${targetOffset} must be greater than or equal to the current offset ${this.offset()}`);\n\t\ttargetOffset = Math.min(targetOffset, this.message.length);\n\t\twhile (true) {\n\t\t\tconst offset = this.offset();\n\t\t\tif (offset === targetOffset) break;\n\t\t\tif (offset > targetOffset) throw Error(`targetOffset ${targetOffset} is at invalid UTF-16 code unit boundary`);\n\t\t\tthis.bump();\n\t\t\tif (this.isEOF()) break;\n\t\t}\n\t}\n\t/** advance the parser through all whitespace to the next non-whitespace code unit. */\n\tbumpSpace() {\n\t\twhile (!this.isEOF() && _isWhiteSpace(this.char())) this.bump();\n\t}\n\t/**\n\t* Peek at the *next* Unicode codepoint in the input without advancing the parser.\n\t* If the input has been exhausted, then this returns null.\n\t*/\n\tpeek() {\n\t\tif (this.isEOF()) return null;\n\t\tconst code = this.char();\n\t\tconst offset = this.offset();\n\t\treturn this.message.charCodeAt(offset + (code >= 65536 ? 2 : 1)) ?? null;\n\t}\n};\n/**\n* This check if codepoint is alphabet (lower & uppercase)\n* @param codepoint\n* @returns\n*/\nfunction _isAlpha(codepoint) {\n\treturn codepoint >= 97 && codepoint <= 122 || codepoint >= 65 && codepoint <= 90;\n}\nfunction _isAlphaOrSlash(codepoint) {\n\treturn _isAlpha(codepoint) || codepoint === 47;\n}\n/** See `parseTag` function docs. */\nfunction _isPotentialElementNameChar(c) {\n\treturn c === 45 || c === 46 || c >= 48 && c <= 57 || c === 95 || c >= 97 && c <= 122 || c >= 65 && c <= 90 || c == 183 || c >= 192 && c <= 214 || c >= 216 && c <= 246 || c >= 248 && c <= 893 || c >= 895 && c <= 8191 || c >= 8204 && c <= 8205 || c >= 8255 && c <= 8256 || c >= 8304 && c <= 8591 || c >= 11264 && c <= 12271 || c >= 12289 && c <= 55295 || c >= 63744 && c <= 64975 || c >= 65008 && c <= 65533 || c >= 65536 && c <= 983039;\n}\n/**\n* Code point equivalent of regex `\\p{White_Space}`.\n* From: https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n*/\nfunction _isWhiteSpace(c) {\n\treturn c >= 9 && c <= 13 || c === 32 || c === 133 || c >= 8206 && c <= 8207 || c === 8232 || c === 8233;\n}\n//#endregion\n//#region packages/icu-messageformat-parser/manipulator.ts\n/**\n* Collect variable types, allowing shared date/time arguments.\n* @param ast AST to collect variables from\n* @param vars Map of variable names to type sets\n*/\nfunction collectVariables(ast, vars = /* @__PURE__ */ new Map()) {\n\tast.forEach((el) => {\n\t\tif (isArgumentElement(el) || isDateElement(el) || isTimeElement(el) || isNumberElement(el)) {\n\t\t\tif (vars.has(el.value)) {\n\t\t\t\tconst existingTypes = vars.get(el.value);\n\t\t\t\tif (!existingTypes.has(el.type) && !existingTypes.has(6) && !existingTypes.has(5)) {\n\t\t\t\t\tif ((el.type === 3 || el.type === 4) && Array.from(existingTypes).every((type) => type === 3 || type === 4)) existingTypes.add(el.type);\n\t\t\t\t\telse throw new Error(`Variable ${el.value} has conflicting types`);\n\t\t\t\t}\n\t\t\t} else vars.set(el.value, /* @__PURE__ */ new Set([el.type]));\n\t\t}\n\t\tif (isPluralElement(el) || isSelectElement(el)) {\n\t\t\tvars.set(el.value, /* @__PURE__ */ new Set([el.type]));\n\t\t\tObject.keys(el.options).forEach((k) => {\n\t\t\t\tcollectVariables(el.options[k].value, vars);\n\t\t\t});\n\t\t}\n\t\tif (isTagElement(el)) {\n\t\t\tvars.set(el.value, /* @__PURE__ */ new Set([el.type]));\n\t\t\tcollectVariables(el.children, vars);\n\t\t}\n\t});\n}\n/**\n* Check if 2 ASTs are structurally the same. This primarily means that\n* they have the same variables with the same type\n* @param a\n* @param b\n* @returns\n*/\nfunction isStructurallySame(a, b) {\n\tconst aVars = /* @__PURE__ */ new Map();\n\tconst bVars = /* @__PURE__ */ new Map();\n\tcollectVariables(a, aVars);\n\tcollectVariables(b, bVars);\n\tif (aVars.size !== bVars.size) return {\n\t\tsuccess: false,\n\t\terror: /* @__PURE__ */ new Error(`Different number of variables: [${Array.from(aVars.keys()).join(\", \")}] vs [${Array.from(bVars.keys()).join(\", \")}]`)\n\t};\n\treturn Array.from(aVars.entries()).reduce((result, [key, type]) => {\n\t\tif (!result.success) return result;\n\t\tconst bType = bVars.get(key);\n\t\tif (bType == null) return {\n\t\t\tsuccess: false,\n\t\t\terror: /* @__PURE__ */ new Error(`Missing variable ${key} in message`)\n\t\t};\n\t\tif (bType.size !== type.size || !Array.from(type).every((t) => bType.has(t))) return {\n\t\t\tsuccess: false,\n\t\t\terror: /* @__PURE__ */ new Error(`Variable ${key} has conflicting types: ${Array.from(type, (t) => TYPE[t]).join(\", \")} vs ${Array.from(bType, (t) => TYPE[t]).join(\", \")}`)\n\t\t};\n\t\treturn result;\n\t}, { success: true });\n}\n//#endregion\n//#region packages/icu-messageformat-parser/index.ts\nfunction pruneLocation(els) {\n\tels.forEach((el) => {\n\t\tdelete el.location;\n\t\tif (isSelectElement(el) || isPluralElement(el)) for (const k in el.options) {\n\t\t\tdelete el.options[k].location;\n\t\t\tpruneLocation(el.options[k].value);\n\t\t}\n\t\telse if (isNumberElement(el) && isNumberSkeleton(el.style)) delete el.style.location;\n\t\telse if ((isDateElement(el) || isTimeElement(el)) && isDateTimeSkeleton(el.style)) delete el.style.location;\n\t\telse if (isTagElement(el)) pruneLocation(el.children);\n\t});\n}\nfunction parse(message, opts = {}) {\n\topts = {\n\t\tshouldParseSkeletons: true,\n\t\trequiresOtherClause: true,\n\t\t...opts\n\t};\n\tconst result = new Parser(message, opts).parse();\n\tif (result.err) {\n\t\tconst error = SyntaxError(ErrorKind[result.err.kind]);\n\t\terror.location = result.err.location;\n\t\terror.originalMessage = result.err.message;\n\t\tthrow error;\n\t}\n\tif (!opts?.captureLocation) pruneLocation(result.val);\n\treturn result.val;\n}\nconst _Parser = Parser;\n//#endregion\nexport { SKELETON_TYPE, TYPE, _Parser, createLiteralElement, createNumberElement, isArgumentElement, isDateElement, isDateTimeSkeleton, isLiteralElement, isNumberElement, isNumberSkeleton, isPluralElement, isPoundElement, isSelectElement, isStructurallySame, isTagElement, isTimeElement, parse };\n\n//# sourceMappingURL=index.js.map","import { memoize, strategies } from \"@formatjs/fast-memoize\";\nimport { isArgumentElement, isDateElement, isDateTimeSkeleton, isLiteralElement, isNumberElement, isNumberSkeleton, isPluralElement, isPoundElement, isSelectElement, isTagElement, isTimeElement, parse } from \"@formatjs/icu-messageformat-parser\";\n//#region packages/intl-messageformat/error.ts\nlet ErrorCode = /* @__PURE__ */ function(ErrorCode) {\n\tErrorCode[\"MISSING_VALUE\"] = \"MISSING_VALUE\";\n\tErrorCode[\"INVALID_VALUE\"] = \"INVALID_VALUE\";\n\tErrorCode[\"MISSING_INTL_API\"] = \"MISSING_INTL_API\";\n\treturn ErrorCode;\n}({});\nvar FormatError = class extends Error {\n\tconstructor(msg, code, originalMessage) {\n\t\tsuper(msg);\n\t\tthis.code = code;\n\t\tthis.originalMessage = originalMessage;\n\t}\n\ttoString() {\n\t\treturn `[formatjs Error: ${this.code}] ${this.message}`;\n\t}\n};\nvar InvalidValueError = class extends FormatError {\n\tconstructor(variableId, value, options, originalMessage) {\n\t\tsuper(`Invalid values for \"${variableId}\": \"${value}\". Options are \"${Object.keys(options).join(\"\\\", \\\"\")}\"`, \"INVALID_VALUE\", originalMessage);\n\t}\n};\nvar InvalidValueTypeError = class extends FormatError {\n\tconstructor(value, type, originalMessage) {\n\t\tsuper(`Value for \"${value}\" must be of type ${type}`, \"INVALID_VALUE\", originalMessage);\n\t}\n};\nvar MissingValueError = class extends FormatError {\n\tconstructor(variableId, originalMessage) {\n\t\tsuper(`The intl string context variable \"${variableId}\" was not provided to the string \"${originalMessage}\"`, \"MISSING_VALUE\", originalMessage);\n\t}\n};\n//#endregion\n//#region packages/intl-messageformat/formatters.ts\nlet PART_TYPE = /* @__PURE__ */ function(PART_TYPE) {\n\tPART_TYPE[PART_TYPE[\"literal\"] = 0] = \"literal\";\n\tPART_TYPE[PART_TYPE[\"object\"] = 1] = \"object\";\n\treturn PART_TYPE;\n}({});\nfunction mergeLiteral(parts) {\n\tif (parts.length < 2) return parts;\n\treturn parts.reduce((all, part) => {\n\t\tconst lastPart = all[all.length - 1];\n\t\tif (!lastPart || lastPart.type !== 0 || part.type !== 0) all.push(part);\n\t\telse lastPart.value += part.value;\n\t\treturn all;\n\t}, []);\n}\nfunction isFormatXMLElementFn(el) {\n\treturn typeof el === \"function\";\n}\nfunction formatToParts(els, locales, formatters, formats, values, currentPluralValue, originalMessage) {\n\tif (els.length === 1 && isLiteralElement(els[0])) return [{\n\t\ttype: 0,\n\t\tvalue: els[0].value\n\t}];\n\tconst result = [];\n\tfor (const el of els) {\n\t\tif (isLiteralElement(el)) {\n\t\t\tresult.push({\n\t\t\t\ttype: 0,\n\t\t\t\tvalue: el.value\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (isPoundElement(el)) {\n\t\t\tif (typeof currentPluralValue === \"number\") result.push({\n\t\t\t\ttype: 0,\n\t\t\t\tvalue: formatters.getNumberFormat(locales).format(currentPluralValue)\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tconst { value: varName } = el;\n\t\tif (!(values && varName in values)) throw new MissingValueError(varName, originalMessage);\n\t\tlet value = values[varName];\n\t\tif (isArgumentElement(el)) {\n\t\t\tif (!value || typeof value === \"string\" || typeof value === \"number\" || typeof value === \"bigint\") value = typeof value === \"string\" || typeof value === \"number\" || typeof value === \"bigint\" ? String(value) : \"\";\n\t\t\tresult.push({\n\t\t\t\ttype: typeof value === \"string\" ? 0 : 1,\n\t\t\t\tvalue\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (isDateElement(el)) {\n\t\t\tconst style = typeof el.style === \"string\" ? formats.date[el.style] : isDateTimeSkeleton(el.style) ? el.style.parsedOptions : void 0;\n\t\t\tresult.push({\n\t\t\t\ttype: 0,\n\t\t\t\tvalue: formatters.getDateTimeFormat(locales, style).format(value)\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (isTimeElement(el)) {\n\t\t\tconst style = typeof el.style === \"string\" ? formats.time[el.style] : isDateTimeSkeleton(el.style) ? el.style.parsedOptions : formats.time.medium;\n\t\t\tresult.push({\n\t\t\t\ttype: 0,\n\t\t\t\tvalue: formatters.getDateTimeFormat(locales, style).format(value)\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (isNumberElement(el)) {\n\t\t\tconst style = typeof el.style === \"string\" ? formats.number[el.style] : isNumberSkeleton(el.style) ? el.style.parsedOptions : void 0;\n\t\t\tif (style && style.scale) {\n\t\t\t\tconst scale = style.scale || 1;\n\t\t\t\tif (typeof value === \"bigint\") {\n\t\t\t\t\tif (!Number.isInteger(scale)) throw new TypeError(`Cannot apply fractional scale ${scale} to bigint value. Scale must be an integer when formatting bigint.`);\n\t\t\t\t\tvalue = value * BigInt(scale);\n\t\t\t\t} else value = value * scale;\n\t\t\t}\n\t\t\tresult.push({\n\t\t\t\ttype: 0,\n\t\t\t\tvalue: formatters.getNumberFormat(locales, style).format(value)\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (isTagElement(el)) {\n\t\t\tconst { children, value } = el;\n\t\t\tconst formatFn = values[value];\n\t\t\tif (!isFormatXMLElementFn(formatFn)) throw new InvalidValueTypeError(value, \"function\", originalMessage);\n\t\t\tlet chunks = formatFn(formatToParts(children, locales, formatters, formats, values, currentPluralValue).map((p) => p.value));\n\t\t\tif (!Array.isArray(chunks)) chunks = [chunks];\n\t\t\tresult.push(...chunks.map((c) => {\n\t\t\t\treturn {\n\t\t\t\t\ttype: typeof c === \"string\" ? 0 : 1,\n\t\t\t\t\tvalue: c\n\t\t\t\t};\n\t\t\t}));\n\t\t}\n\t\tif (isSelectElement(el)) {\n\t\t\tconst key = value;\n\t\t\tconst opt = (Object.prototype.hasOwnProperty.call(el.options, key) ? el.options[key] : void 0) || el.options.other;\n\t\t\tif (!opt) throw new InvalidValueError(el.value, value, Object.keys(el.options), originalMessage);\n\t\t\tresult.push(...formatToParts(opt.value, locales, formatters, formats, values));\n\t\t\tcontinue;\n\t\t}\n\t\tif (isPluralElement(el)) {\n\t\t\tconst exactKey = `=${value}`;\n\t\t\tlet opt = Object.prototype.hasOwnProperty.call(el.options, exactKey) ? el.options[exactKey] : void 0;\n\t\t\tif (!opt) {\n\t\t\t\tif (!Intl.PluralRules) throw new FormatError(`Intl.PluralRules is not available in this environment.\nTry polyfilling it using \"@formatjs/intl-pluralrules\"\n`, \"MISSING_INTL_API\", originalMessage);\n\t\t\t\tconst numericValue = typeof value === \"bigint\" ? Number(value) : value;\n\t\t\t\tconst rule = formatters.getPluralRules(locales, { type: el.pluralType }).select(numericValue - (el.offset || 0));\n\t\t\t\topt = (Object.prototype.hasOwnProperty.call(el.options, rule) ? el.options[rule] : void 0) || el.options.other;\n\t\t\t}\n\t\t\tif (!opt) throw new InvalidValueError(el.value, value, Object.keys(el.options), originalMessage);\n\t\t\tconst numericValue = typeof value === \"bigint\" ? Number(value) : value;\n\t\t\tresult.push(...formatToParts(opt.value, locales, formatters, formats, values, numericValue - (el.offset || 0)));\n\t\t\tcontinue;\n\t\t}\n\t}\n\treturn mergeLiteral(result);\n}\n//#endregion\n//#region packages/intl-messageformat/core.ts\nfunction mergeConfig(c1, c2) {\n\tif (!c2) return c1;\n\treturn {\n\t\t...c1,\n\t\t...c2,\n\t\t...Object.keys(c1).reduce((all, k) => {\n\t\t\tall[k] = {\n\t\t\t\t...c1[k],\n\t\t\t\t...c2[k]\n\t\t\t};\n\t\t\treturn all;\n\t\t}, {})\n\t};\n}\nfunction mergeConfigs(defaultConfig, configs) {\n\tif (!configs) return defaultConfig;\n\treturn Object.keys(defaultConfig).reduce((all, k) => {\n\t\tall[k] = mergeConfig(defaultConfig[k], configs[k]);\n\t\treturn all;\n\t}, { ...defaultConfig });\n}\nfunction createFastMemoizeCache(store) {\n\treturn { create() {\n\t\treturn {\n\t\t\tget(key) {\n\t\t\t\treturn store[key];\n\t\t\t},\n\t\t\tset(key, value) {\n\t\t\t\tstore[key] = value;\n\t\t\t}\n\t\t};\n\t} };\n}\nfunction createDefaultFormatters(cache = {\n\tnumber: {},\n\tdateTime: {},\n\tpluralRules: {}\n}) {\n\treturn {\n\t\tgetNumberFormat: memoize((...args) => new Intl.NumberFormat(...args), {\n\t\t\tcache: createFastMemoizeCache(cache.number),\n\t\t\tstrategy: strategies.variadic\n\t\t}),\n\t\tgetDateTimeFormat: memoize((...args) => new Intl.DateTimeFormat(...args), {\n\t\t\tcache: createFastMemoizeCache(cache.dateTime),\n\t\t\tstrategy: strategies.variadic\n\t\t}),\n\t\tgetPluralRules: memoize((...args) => new Intl.PluralRules(...args), {\n\t\t\tcache: createFastMemoizeCache(cache.pluralRules),\n\t\t\tstrategy: strategies.variadic\n\t\t})\n\t};\n}\nvar IntlMessageFormat = class IntlMessageFormat {\n\tconstructor(message, locales = IntlMessageFormat.defaultLocale, overrideFormats, opts) {\n\t\tthis.formatterCache = {\n\t\t\tnumber: {},\n\t\t\tdateTime: {},\n\t\t\tpluralRules: {}\n\t\t};\n\t\tthis.format = ((values) => {\n\t\t\tconst parts = this.formatToParts(values);\n\t\t\tif (parts.length === 1) return parts[0].value;\n\t\t\tconst result = parts.reduce((all, part) => {\n\t\t\t\tif (!all.length || part.type !== 0 || typeof all[all.length - 1] !== \"string\") all.push(part.value);\n\t\t\t\telse all[all.length - 1] += part.value;\n\t\t\t\treturn all;\n\t\t\t}, []);\n\t\t\tif (result.length <= 1) return result[0] || \"\";\n\t\t\treturn result;\n\t\t});\n\t\tthis.formatToParts = ((values) => formatToParts(this.ast, this.locales, this.formatters, this.formats, values, void 0, this.message));\n\t\tthis.resolvedOptions = () => ({ locale: this.resolvedLocale?.toString() || Intl.NumberFormat.supportedLocalesOf(this.locales)[0] });\n\t\tthis.getAst = () => this.ast;\n\t\tthis.locales = locales;\n\t\tthis.resolvedLocale = IntlMessageFormat.resolveLocale(locales);\n\t\tif (typeof message === \"string\") {\n\t\t\tthis.message = message;\n\t\t\tif (!IntlMessageFormat.__parse) throw new TypeError(\"IntlMessageFormat.__parse must be set to process `message` of type `string`\");\n\t\t\tconst { ...parseOpts } = opts || {};\n\t\t\tthis.ast = IntlMessageFormat.__parse(message, {\n\t\t\t\t...parseOpts,\n\t\t\t\tlocale: this.resolvedLocale\n\t\t\t});\n\t\t} else this.ast = message;\n\t\tif (!Array.isArray(this.ast)) throw new TypeError(\"A message must be provided as a String or AST.\");\n\t\tthis.formats = mergeConfigs(IntlMessageFormat.formats, overrideFormats);\n\t\tthis.formatters = opts && opts.formatters || createDefaultFormatters(this.formatterCache);\n\t}\n\tstatic {\n\t\tthis.memoizedDefaultLocale = null;\n\t}\n\tstatic get defaultLocale() {\n\t\tif (!IntlMessageFormat.memoizedDefaultLocale) IntlMessageFormat.memoizedDefaultLocale = new Intl.NumberFormat().resolvedOptions().locale;\n\t\treturn IntlMessageFormat.memoizedDefaultLocale;\n\t}\n\tstatic {\n\t\tthis.resolveLocale = (locales) => {\n\t\t\tif (typeof Intl.Locale === \"undefined\") return;\n\t\t\tconst supportedLocales = Intl.NumberFormat.supportedLocalesOf(locales);\n\t\t\tif (supportedLocales.length > 0) return new Intl.Locale(supportedLocales[0]);\n\t\t\treturn new Intl.Locale(typeof locales === \"string\" ? locales : locales[0]);\n\t\t};\n\t}\n\tstatic {\n\t\tthis.__parse = parse;\n\t}\n\tstatic {\n\t\tthis.formats = {\n\t\t\tnumber: {\n\t\t\t\tinteger: { maximumFractionDigits: 0 },\n\t\t\t\tcurrency: { style: \"currency\" },\n\t\t\t\tpercent: { style: \"percent\" }\n\t\t\t},\n\t\t\tdate: {\n\t\t\t\tshort: {\n\t\t\t\t\tmonth: \"numeric\",\n\t\t\t\t\tday: \"numeric\",\n\t\t\t\t\tyear: \"2-digit\"\n\t\t\t\t},\n\t\t\t\tmedium: {\n\t\t\t\t\tmonth: \"short\",\n\t\t\t\t\tday: \"numeric\",\n\t\t\t\t\tyear: \"numeric\"\n\t\t\t\t},\n\t\t\t\tlong: {\n\t\t\t\t\tmonth: \"long\",\n\t\t\t\t\tday: \"numeric\",\n\t\t\t\t\tyear: \"numeric\"\n\t\t\t\t},\n\t\t\t\tfull: {\n\t\t\t\t\tweekday: \"long\",\n\t\t\t\t\tmonth: \"long\",\n\t\t\t\t\tday: \"numeric\",\n\t\t\t\t\tyear: \"numeric\"\n\t\t\t\t}\n\t\t\t},\n\t\t\ttime: {\n\t\t\t\tshort: {\n\t\t\t\t\thour: \"numeric\",\n\t\t\t\t\tminute: \"numeric\"\n\t\t\t\t},\n\t\t\t\tmedium: {\n\t\t\t\t\thour: \"numeric\",\n\t\t\t\t\tminute: \"numeric\",\n\t\t\t\t\tsecond: \"numeric\"\n\t\t\t\t},\n\t\t\t\tlong: {\n\t\t\t\t\thour: \"numeric\",\n\t\t\t\t\tminute: \"numeric\",\n\t\t\t\t\tsecond: \"numeric\",\n\t\t\t\t\ttimeZoneName: \"short\"\n\t\t\t\t},\n\t\t\t\tfull: {\n\t\t\t\t\thour: \"numeric\",\n\t\t\t\t\tminute: \"numeric\",\n\t\t\t\t\tsecond: \"numeric\",\n\t\t\t\t\ttimeZoneName: \"short\"\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n};\n//#endregion\n//#region packages/intl-messageformat/index.ts\nvar intl_messageformat_default = IntlMessageFormat;\n//#endregion\nexport { ErrorCode, FormatError, IntlMessageFormat, InvalidValueError, InvalidValueTypeError, MissingValueError, PART_TYPE, intl_messageformat_default as default, formatToParts, isFormatXMLElementFn };\n\n//# sourceMappingURL=index.js.map","/**\n * @license React\n * react.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n REACT_VIEW_TRANSITION_TYPE = Symbol.for(\"react.view_transition\"),\n MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n maybeIterable =\n (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n maybeIterable[\"@@iterator\"];\n return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nvar ReactNoopUpdateQueue = {\n isMounted: function () {\n return !1;\n },\n enqueueForceUpdate: function () {},\n enqueueReplaceState: function () {},\n enqueueSetState: function () {}\n },\n assign = Object.assign,\n emptyObject = {};\nfunction Component(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n}\nComponent.prototype.isReactComponent = {};\nComponent.prototype.setState = function (partialState, callback) {\n if (\n \"object\" !== typeof partialState &&\n \"function\" !== typeof partialState &&\n null != partialState\n )\n throw Error(\n \"takes an object of state variables to update or a function which returns an object of state variables.\"\n );\n this.updater.enqueueSetState(this, partialState, callback, \"setState\");\n};\nComponent.prototype.forceUpdate = function (callback) {\n this.updater.enqueueForceUpdate(this, callback, \"forceUpdate\");\n};\nfunction ComponentDummy() {}\nComponentDummy.prototype = Component.prototype;\nfunction PureComponent(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n}\nvar pureComponentPrototype = (PureComponent.prototype = new ComponentDummy());\npureComponentPrototype.constructor = PureComponent;\nassign(pureComponentPrototype, Component.prototype);\npureComponentPrototype.isPureReactComponent = !0;\nvar isArrayImpl = Array.isArray;\nfunction noop() {}\nvar ReactSharedInternals = { H: null, A: null, T: null, S: null },\n hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction ReactElement(type, key, props) {\n var refProp = props.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== refProp ? refProp : null,\n props: props\n };\n}\nfunction cloneAndReplaceKey(oldElement, newKey) {\n return ReactElement(oldElement.type, newKey, oldElement.props);\n}\nfunction isValidElement(object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n}\nfunction escape(key) {\n var escaperLookup = { \"=\": \"=0\", \":\": \"=2\" };\n return (\n \"$\" +\n key.replace(/[=:]/g, function (match) {\n return escaperLookup[match];\n })\n );\n}\nvar userProvidedKeyEscapeRegex = /\\/+/g;\nfunction getElementKey(element, index) {\n return \"object\" === typeof element && null !== element && null != element.key\n ? escape(\"\" + element.key)\n : index.toString(36);\n}\nfunction resolveThenable(thenable) {\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw thenable.reason;\n default:\n switch (\n (\"string\" === typeof thenable.status\n ? thenable.then(noop, noop)\n : ((thenable.status = \"pending\"),\n thenable.then(\n function (fulfilledValue) {\n \"pending\" === thenable.status &&\n ((thenable.status = \"fulfilled\"),\n (thenable.value = fulfilledValue));\n },\n function (error) {\n \"pending\" === thenable.status &&\n ((thenable.status = \"rejected\"), (thenable.reason = error));\n }\n )),\n thenable.status)\n ) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw thenable.reason;\n }\n }\n throw thenable;\n}\nfunction mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {\n var type = typeof children;\n if (\"undefined\" === type || \"boolean\" === type) children = null;\n var invokeCallback = !1;\n if (null === children) invokeCallback = !0;\n else\n switch (type) {\n case \"bigint\":\n case \"string\":\n case \"number\":\n invokeCallback = !0;\n break;\n case \"object\":\n switch (children.$$typeof) {\n case REACT_ELEMENT_TYPE:\n case REACT_PORTAL_TYPE:\n invokeCallback = !0;\n break;\n case REACT_LAZY_TYPE:\n return (\n (invokeCallback = children._init),\n mapIntoArray(\n invokeCallback(children._payload),\n array,\n escapedPrefix,\n nameSoFar,\n callback\n )\n );\n }\n }\n if (invokeCallback)\n return (\n (callback = callback(children)),\n (invokeCallback =\n \"\" === nameSoFar ? \".\" + getElementKey(children, 0) : nameSoFar),\n isArrayImpl(callback)\n ? ((escapedPrefix = \"\"),\n null != invokeCallback &&\n (escapedPrefix =\n invokeCallback.replace(userProvidedKeyEscapeRegex, \"$&/\") + \"/\"),\n mapIntoArray(callback, array, escapedPrefix, \"\", function (c) {\n return c;\n }))\n : null != callback &&\n (isValidElement(callback) &&\n (callback = cloneAndReplaceKey(\n callback,\n escapedPrefix +\n (null == callback.key ||\n (children && children.key === callback.key)\n ? \"\"\n : (\"\" + callback.key).replace(\n userProvidedKeyEscapeRegex,\n \"$&/\"\n ) + \"/\") +\n invokeCallback\n )),\n array.push(callback)),\n 1\n );\n invokeCallback = 0;\n var nextNamePrefix = \"\" === nameSoFar ? \".\" : nameSoFar + \":\";\n if (isArrayImpl(children))\n for (var i = 0; i < children.length; i++)\n (nameSoFar = children[i]),\n (type = nextNamePrefix + getElementKey(nameSoFar, i)),\n (invokeCallback += mapIntoArray(\n nameSoFar,\n array,\n escapedPrefix,\n type,\n callback\n ));\n else if (((i = getIteratorFn(children)), \"function\" === typeof i))\n for (\n children = i.call(children), i = 0;\n !(nameSoFar = children.next()).done;\n\n )\n (nameSoFar = nameSoFar.value),\n (type = nextNamePrefix + getElementKey(nameSoFar, i++)),\n (invokeCallback += mapIntoArray(\n nameSoFar,\n array,\n escapedPrefix,\n type,\n callback\n ));\n else if (\"object\" === type) {\n if (\"function\" === typeof children.then)\n return mapIntoArray(\n resolveThenable(children),\n array,\n escapedPrefix,\n nameSoFar,\n callback\n );\n array = String(children);\n throw Error(\n \"Objects are not valid as a React child (found: \" +\n (\"[object Object]\" === array\n ? \"object with keys {\" + Object.keys(children).join(\", \") + \"}\"\n : array) +\n \"). If you meant to render a collection of children, use an array instead.\"\n );\n }\n return invokeCallback;\n}\nfunction mapChildren(children, func, context) {\n if (null == children) return children;\n var result = [],\n count = 0;\n mapIntoArray(children, result, \"\", \"\", function (child) {\n return func.call(context, child, count++);\n });\n return result;\n}\nfunction lazyInitializer(payload) {\n if (-1 === payload._status) {\n var ctor = payload._result,\n thenable = ctor();\n thenable.then(\n function (moduleObject) {\n if (0 === payload._status || -1 === payload._status)\n (payload._status = 1),\n (payload._result = moduleObject),\n void 0 === thenable.status &&\n ((thenable.status = \"fulfilled\"),\n (thenable.value = moduleObject));\n },\n function (error) {\n if (0 === payload._status || -1 === payload._status)\n (payload._status = 2),\n (payload._result = error),\n void 0 === thenable.status &&\n ((thenable.status = \"rejected\"), (thenable.reason = error));\n }\n );\n -1 === payload._status &&\n ((payload._status = 0), (payload._result = thenable));\n }\n if (1 === payload._status) return payload._result.default;\n throw payload._result;\n}\nvar reportGlobalError =\n \"function\" === typeof reportError\n ? reportError\n : function (error) {\n if (\n \"object\" === typeof window &&\n \"function\" === typeof window.ErrorEvent\n ) {\n var event = new window.ErrorEvent(\"error\", {\n bubbles: !0,\n cancelable: !0,\n message:\n \"object\" === typeof error &&\n null !== error &&\n \"string\" === typeof error.message\n ? String(error.message)\n : String(error),\n error: error\n });\n if (!window.dispatchEvent(event)) return;\n } else if (\n \"object\" === typeof process &&\n \"function\" === typeof process.emit\n ) {\n process.emit(\"uncaughtException\", error);\n return;\n }\n console.error(error);\n };\nfunction startTransition(scope) {\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n currentTransition.types =\n null !== prevTransition ? prevTransition.types : null;\n ReactSharedInternals.T = currentTransition;\n try {\n var returnValue = scope(),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n \"object\" === typeof returnValue &&\n null !== returnValue &&\n \"function\" === typeof returnValue.then &&\n returnValue.then(noop, reportGlobalError);\n } catch (error) {\n reportGlobalError(error);\n } finally {\n null !== prevTransition &&\n null !== currentTransition.types &&\n (prevTransition.types = currentTransition.types),\n (ReactSharedInternals.T = prevTransition);\n }\n}\nfunction addTransitionType(type) {\n var transition = ReactSharedInternals.T;\n if (null !== transition) {\n var transitionTypes = transition.types;\n null === transitionTypes\n ? (transition.types = [type])\n : -1 === transitionTypes.indexOf(type) && transitionTypes.push(type);\n } else startTransition(addTransitionType.bind(null, type));\n}\nvar Children = {\n map: mapChildren,\n forEach: function (children, forEachFunc, forEachContext) {\n mapChildren(\n children,\n function () {\n forEachFunc.apply(this, arguments);\n },\n forEachContext\n );\n },\n count: function (children) {\n var n = 0;\n mapChildren(children, function () {\n n++;\n });\n return n;\n },\n toArray: function (children) {\n return (\n mapChildren(children, function (child) {\n return child;\n }) || []\n );\n },\n only: function (children) {\n if (!isValidElement(children))\n throw Error(\n \"React.Children.only expected to receive a single React element child.\"\n );\n return children;\n }\n};\nexports.Activity = REACT_ACTIVITY_TYPE;\nexports.Children = Children;\nexports.Component = Component;\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.Profiler = REACT_PROFILER_TYPE;\nexports.PureComponent = PureComponent;\nexports.StrictMode = REACT_STRICT_MODE_TYPE;\nexports.Suspense = REACT_SUSPENSE_TYPE;\nexports.ViewTransition = REACT_VIEW_TRANSITION_TYPE;\nexports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n ReactSharedInternals;\nexports.__COMPILER_RUNTIME = {\n __proto__: null,\n c: function (size) {\n return ReactSharedInternals.H.useMemoCache(size);\n }\n};\nexports.addTransitionType = addTransitionType;\nexports.cache = function (fn) {\n return function () {\n return fn.apply(null, arguments);\n };\n};\nexports.cacheSignal = function () {\n return null;\n};\nexports.cloneElement = function (element, config, children) {\n if (null === element || void 0 === element)\n throw Error(\n \"The argument must be a React element, but you passed \" + element + \".\"\n );\n var props = assign({}, element.props),\n key = element.key;\n if (null != config)\n for (propName in (void 0 !== config.key && (key = \"\" + config.key), config))\n !hasOwnProperty.call(config, propName) ||\n \"key\" === propName ||\n \"__self\" === propName ||\n \"__source\" === propName ||\n (\"ref\" === propName && void 0 === config.ref) ||\n (props[propName] = config[propName]);\n var propName = arguments.length - 2;\n if (1 === propName) props.children = children;\n else if (1 < propName) {\n for (var childArray = Array(propName), i = 0; i < propName; i++)\n childArray[i] = arguments[i + 2];\n props.children = childArray;\n }\n return ReactElement(element.type, key, props);\n};\nexports.createContext = function (defaultValue) {\n defaultValue = {\n $$typeof: REACT_CONTEXT_TYPE,\n _currentValue: defaultValue,\n _currentValue2: defaultValue,\n _threadCount: 0,\n Provider: null,\n Consumer: null\n };\n defaultValue.Provider = defaultValue;\n defaultValue.Consumer = {\n $$typeof: REACT_CONSUMER_TYPE,\n _context: defaultValue\n };\n return defaultValue;\n};\nexports.createElement = function (type, config, children) {\n var propName,\n props = {},\n key = null;\n if (null != config)\n for (propName in (void 0 !== config.key && (key = \"\" + config.key), config))\n hasOwnProperty.call(config, propName) &&\n \"key\" !== propName &&\n \"__self\" !== propName &&\n \"__source\" !== propName &&\n (props[propName] = config[propName]);\n var childrenLength = arguments.length - 2;\n if (1 === childrenLength) props.children = children;\n else if (1 < childrenLength) {\n for (var childArray = Array(childrenLength), i = 0; i < childrenLength; i++)\n childArray[i] = arguments[i + 2];\n props.children = childArray;\n }\n if (type && type.defaultProps)\n for (propName in ((childrenLength = type.defaultProps), childrenLength))\n void 0 === props[propName] &&\n (props[propName] = childrenLength[propName]);\n return ReactElement(type, key, props);\n};\nexports.createRef = function () {\n return { current: null };\n};\nexports.forwardRef = function (render) {\n return { $$typeof: REACT_FORWARD_REF_TYPE, render: render };\n};\nexports.isValidElement = isValidElement;\nexports.lazy = function (ctor) {\n return {\n $$typeof: REACT_LAZY_TYPE,\n _payload: { _status: -1, _result: ctor },\n _init: lazyInitializer\n };\n};\nexports.memo = function (type, compare) {\n return {\n $$typeof: REACT_MEMO_TYPE,\n type: type,\n compare: void 0 === compare ? null : compare\n };\n};\nexports.startTransition = startTransition;\nexports.unstable_useCacheRefresh = function () {\n return ReactSharedInternals.H.useCacheRefresh();\n};\nexports.use = function (usable) {\n return ReactSharedInternals.H.use(usable);\n};\nexports.useActionState = function (action, initialState, permalink) {\n return ReactSharedInternals.H.useActionState(action, initialState, permalink);\n};\nexports.useCallback = function (callback, deps) {\n return ReactSharedInternals.H.useCallback(callback, deps);\n};\nexports.useContext = function (Context) {\n return ReactSharedInternals.H.useContext(Context);\n};\nexports.useDebugValue = function () {};\nexports.useDeferredValue = function (value, initialValue) {\n return ReactSharedInternals.H.useDeferredValue(value, initialValue);\n};\nexports.useEffect = function (create, deps) {\n return ReactSharedInternals.H.useEffect(create, deps);\n};\nexports.useEffectEvent = function (callback) {\n return ReactSharedInternals.H.useEffectEvent(callback);\n};\nexports.useId = function () {\n return ReactSharedInternals.H.useId();\n};\nexports.useImperativeHandle = function (ref, create, deps) {\n return ReactSharedInternals.H.useImperativeHandle(ref, create, deps);\n};\nexports.useInsertionEffect = function (create, deps) {\n return ReactSharedInternals.H.useInsertionEffect(create, deps);\n};\nexports.useLayoutEffect = function (create, deps) {\n return ReactSharedInternals.H.useLayoutEffect(create, deps);\n};\nexports.useMemo = function (create, deps) {\n return ReactSharedInternals.H.useMemo(create, deps);\n};\nexports.useOptimistic = function (passthrough, reducer) {\n return ReactSharedInternals.H.useOptimistic(passthrough, reducer);\n};\nexports.useReducer = function (reducer, initialArg, init) {\n return ReactSharedInternals.H.useReducer(reducer, initialArg, init);\n};\nexports.useRef = function (initialValue) {\n return ReactSharedInternals.H.useRef(initialValue);\n};\nexports.useState = function (initialState) {\n return ReactSharedInternals.H.useState(initialState);\n};\nexports.useSyncExternalStore = function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n) {\n return ReactSharedInternals.H.useSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n};\nexports.useTransition = function () {\n return ReactSharedInternals.H.useTransition();\n};\nexports.version = \"19.3.0\";\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react.production.js');\n} else {\n module.exports = require('./cjs/react.development.js');\n}\n","{\n \"account\": {\n \"account\": \"Account\",\n \"noAccount\": \"No account page\",\n \"noAccountDescription\": \"This app has no account page for you.\",\n \"signInPolicy\": \"Sign-in policy\",\n \"couldNotReadMethods\": \"Could not read your sign-in methods\",\n \"couldNotReadProfile\": \"Could not read your profile\",\n \"profile\": \"Profile\",\n \"profileDescription\": \"Your name as others see it in this app, and the address you sign in with.\",\n \"email\": \"Email\",\n \"changeName\": \"Change name\",\n \"changeNameDescription\": \"The name others see on your comments, changes and invitations.\",\n \"changeEmail\": \"Change email\",\n \"changeEmailDescription\": \"We email a code to the new address. Once you enter it here, you sign in with that address.\",\n \"newEmail\": \"New email\",\n \"sendCode\": \"Send code\",\n \"codeSentTo\": \"Enter the 6-digit code we emailed to {email}. It works for 5 minutes. No code comes when another account has the address.\",\n \"code\": \"Code\",\n \"otherAddress\": \"Use another address\",\n \"theProvider\": \"the provider\",\n \"loading\": \"Loading\",\n \"backupCodes\": \"Backup codes\",\n \"copied\": \"Copied\",\n \"copy\": \"Copy\",\n \"download\": \"Download\",\n \"cancel\": \"Cancel\",\n \"save\": \"Save\",\n \"name\": \"Name\",\n \"yourPassword\": \"Your password\",\n \"passwordIsSet\": \"Sign in with your email address and this password. Changing it asks for the current one.\",\n \"passwordNotSet\": \"You sign in without a password now. Set one to sign in with your email address and a password too; you stay signed in everywhere.\",\n \"passwordForbidden\": \"Your admin turned passwords off for this app, so they cannot be used to sign in.\",\n \"passwordStaff\": \"Staff signed in as someone cannot change their password.\",\n \"passwordSaved\": \"Your password is saved.\",\n \"changePassword\": \"Change password\",\n \"setPassword\": \"Set a password\",\n \"currentPassword\": \"Current password\",\n \"newPassword\": \"New password\",\n \"repeatPassword\": \"Repeat new password\",\n \"atLeast\": \"At least {length} characters.\",\n \"useAtLeast\": \"Use at least {length} characters.\",\n \"passwordTooLong\": \"That password is too long.\",\n \"passwordsDiffer\": \"The passwords are not the same.\",\n \"continue\": \"Continue\",\n \"on\": \"On\",\n \"off\": \"Off\",\n \"optional\": \"Optional\",\n \"required\": \"Required\",\n \"passkeys\": \"Passkeys\",\n \"passkey\": \"Passkey\",\n \"passkeysAllowed\": \"Sign in with Face ID, Touch ID, Windows Hello, your phone or a security key instead of a password.\",\n \"passkeysRequired\": \"This app requires a passkey for every account. Sign in with Face ID, Touch ID, Windows Hello, your phone or a security key.\",\n \"passkeysForbidden\": \"Your admin turned passkeys off for this app, so they cannot be used to sign in.\",\n \"addedOn\": \"Added {date}\",\n \"addedEarlier\": \"Added earlier\",\n \"synced\": \"Synced across your devices\",\n \"oneDevice\": \"On one device\",\n \"rename\": \"Rename\",\n \"remove\": \"Remove\",\n \"keepLastPasskey\": \"Passkeys are required: add another one before removing this one.\",\n \"addPasskey\": \"Add a passkey\",\n \"renamePasskey\": \"Rename passkey\",\n \"renamePasskeyDescription\": \"A name that tells you where this passkey lives, such as the device or password manager.\",\n \"removePasskey\": \"Remove passkey?\",\n \"removePasskeyDescription\": \"{name} will no longer sign you in here. It stays on the device until you delete it there.\",\n \"thisPasskey\": \"This passkey\",\n \"connectedAccounts\": \"Connected accounts\",\n \"connectedAccountsDescription\": \"Sign in with these instead of your password. Connecting one asks you to sign in there; its address may differ from yours here.\",\n \"connected\": \"Connected\",\n \"connect\": \"Connect {name}\",\n \"connectAgain\": \"Connect {name} again\",\n \"mailbox\": \"Mailbox\",\n \"mailboxDescription\": \"Mail this app sends for you goes out from your own mailbox. Connecting one asks you to sign in there and allow sending mail; it cannot read your mail.\",\n \"stopped\": \"Stopped {time}\",\n \"ended\": \"Ended {time}\",\n \"signedInUntil\": \"Signed in until {time}\",\n \"devices\": \"Devices\",\n \"devicesDescription\": \"The browsers and apps signed in to your account. To sign out this one, use Sign out in the menu.\",\n \"couldNotReadDevices\": \"Could not read your devices\",\n \"noDevices\": \"No device is signed in.\",\n \"thisDevice\": \"This device\",\n \"browserOn\": \"{browser} on {system}\",\n \"aBrowserOn\": \"A browser on {system}\",\n \"unknownDevice\": \"Unknown device\",\n \"staffOf\": \"{operator} staff\",\n \"staff\": \"Staff\",\n \"signedInFromUntil\": \"Signed in {from}, until {until}\",\n \"signOut\": \"Sign out\",\n \"signOutDevice\": \"Sign out {name}?\",\n \"signOutDeviceDescription\": \"It has to sign in again to use your account.\",\n \"signOutOthers\": \"Sign out of all other devices\",\n \"signOutOthersTitle\": \"Sign out of all other devices?\",\n \"signOutOthersDescription\": \"Every other browser and app signed in to your account has to sign in again. This device stays signed in.\",\n \"staffSignIns\": \"Staff sign-ins\",\n \"staffSignInsDescription\": \"Each time staff of {operator} signed in as someone here, newest first.\",\n \"noStaffSignIns\": \"No staff has signed in as anyone yet.\",\n \"as\": \"as\",\n \"qrCode\": \"QR code for your authenticator app\",\n \"twoFactor\": \"Two-factor authentication\",\n \"twoFactorAllowed\": \"Ask for a second step after your password or an emailed sign-in code: a code from an authenticator app, or one emailed to you. A passkey needs no second step.\",\n \"twoFactorRequired\": \"This app requires two-factor authentication for every account. Turn it on to keep using the app.\",\n \"twoFactorForbidden\": \"Your admin turned two-factor authentication off for this app.\",\n \"twoFactorOnWithApp\": \"Signing in with a password or an emailed sign-in code also asks for a code from your authenticator app. Backup codes work when you do not have the app.\",\n \"twoFactorOnWithAppOrMail\": \"Signing in with a password or an emailed sign-in code also asks for a code from your authenticator app, or one emailed to you. Backup codes work when you do not have the app.\",\n \"twoFactorOnWithMail\": \"Signing in with a password or an emailed sign-in code also asks for a code emailed to you.\",\n \"turnOn\": \"Turn on\",\n \"turnOff\": \"Turn off\",\n \"addAuthenticator\": \"Add an authenticator app\",\n \"newBackupCodes\": \"New backup codes\",\n \"twoFactorIsRequired\": \"This app requires two-factor authentication.\",\n \"turnOffTitle\": \"Turn off two-factor authentication?\",\n \"turnOffDescription\": \"Signing in then needs only your password or an emailed code. Your backup codes stop working.\",\n \"newCodesTitle\": \"Make new backup codes?\",\n \"newCodesDescription\": \"Your current backup codes stop working, and you get ten new ones.\",\n \"makeNewCodes\": \"Make new codes\",\n \"yourNewCodes\": \"Your new backup codes\",\n \"keepCodesSafe\": \"Keep them somewhere safe: each one signs you in once if you lose your phone. They are not shown again.\",\n \"savedCodes\": \"I saved my backup codes\",\n \"authenticatorApp\": \"Authenticator app\",\n \"authenticatorAppDescription\": \"A code from an app such as Google Authenticator, Microsoft Authenticator or 1Password. Comes with backup codes.\",\n \"emailedCode\": \"Emailed code\",\n \"emailedCodeDescription\": \"A code mailed to your address each time you sign in with a password or an emailed sign-in code.\",\n \"twoFactorIsOn\": \"Two-factor authentication is on. Keep these backup codes somewhere safe: each one signs you in once if you lose your phone. They are not shown again.\",\n \"scanCode\": \"Scan this code with your authenticator app, then enter the 6-digit code it shows.\",\n \"cannotScan\": \"Can't scan it? Enter this key in the app:\",\n \"codeFromApp\": \"Code from the app\",\n \"secondStep\": \"Second step\",\n \"password\": \"Password\",\n \"passwordDescription\": \"Sign in with the email address and a password.\",\n \"emailedSignInCode\": \"Emailed sign-in code\",\n \"emailedSignInCodeDescription\": \"Sign in with a one-time code mailed to the account's address.\",\n \"passkeysPolicyDescription\": \"Sign in with Face ID, Touch ID, Windows Hello, a phone or a security key. Required: everyone adds one after signing in.\",\n \"twoFactorPolicyDescription\": \"A code from an authenticator app, or an emailed one, after a password or an emailed sign-in code. Required: everyone turns it on after signing in.\",\n \"staffAccess\": \"Staff sign-in as a person\",\n \"staffAccessDescription\": \"The team that runs this app signs in as someone to help them, with a reason, for a short session. Each time is in the log below; with \\\"Email the person\\\" they are told too.\",\n \"emailThePerson\": \"Email the person\",\n \"platformSignIn\": \"Sign-in through the platform\",\n \"platformSignInDescription\": \"The sign-in provider the platform that runs this app adds, for people who have an account here already. It never creates accounts.\",\n \"platformSignInWith\": \"Sign in with {provider} through the platform\",\n \"codeNeedsMail\": \"Needs mail settings (PROTOBASE_SMTP_URL and PROTOBASE_MAIL_FROM): off until they are set.\",\n \"passwordStaysOn\": \"Without mail settings, password sign-in stays on so nobody is locked out.\",\n \"staffNeedsMail\": \"Needs mail settings (PROTOBASE_SMTP_URL and PROTOBASE_MAIL_FROM): staff cannot sign in until they are set.\",\n \"platformOff\": \"Off while passkeys or two-factor authentication are required: it skips the second step.\",\n \"appliesAs\": \"Applies as {rule} for now.\",\n \"lastSaved\": \"Last saved on {time}.\",\n \"lastSavedBy\": \"Last saved by {name} on {time}.\",\n \"neverChanged\": \"Never changed: this is the app's default.\",\n \"reset\": \"Reset\",\n \"couldNotReadStaffSignIns\": \"Could not read the staff sign-ins\",\n \"couldNotReadPolicy\": \"Could not read the sign-in policy\",\n \"policySaved\": \"Saved. It applies to every sign-in from now on.\",\n \"policySubtitle\": \"How people sign in to this app. Signed-in people keep their session, and are asked for what is newly required within 15 minutes.\",\n \"mcpAddress\": \"MCP address\",\n \"mcpAddressDescription\": \"Add this address to an AI assistant or code editor that speaks MCP, as a custom connector or remote MCP server. It opens this app in your browser, where you sign in and allow it; it then works with your access.\",\n \"copyMcpAddress\": \"Copy the MCP address\",\n \"addToClaude\": \"Add to Claude\",\n \"deleteAccount\": \"Delete account\",\n \"deleteAccountDescription\": \"Delete your account and sign out everywhere. You can no longer sign in with it, and this cannot be undone.\",\n \"deleteAccountStaff\": \"Staff signed in as someone cannot delete their account.\",\n \"deleteAccountQuestion\": \"Delete your account?\",\n \"deleteAccountWarning\": \"Your account, its sign-in methods and every device signed in to it are deleted. This cannot be undone.\",\n \"deleteAccountPassword\": \"Enter your password to confirm.\",\n \"deleteAccountConfirm\": \"Delete my account\",\n \"deleteAccountLastAdmin\": \"You are the last admin of this app. Make someone else an admin first.\",\n \"deleteAccountLocked\": \"This account is locked, so it cannot be deleted.\"\n },\n \"action-card\": {\n \"cancel\": \"Cancel\"\n },\n \"activity-chart\": {\n \"day\": \"Day\",\n \"week\": \"Week\"\n },\n \"app\": {\n \"notFound\": \"Not found\",\n \"noResource\": \"There is no resource called {name}.\",\n \"somethingWentWrong\": \"Something went wrong\",\n \"signInPolicy\": \"Sign-in policy\",\n \"adminsOnly\": \"Admins only\",\n \"onlyAdminPolicy\": \"Only an admin can change how people sign in.\",\n \"ownersOnly\": \"Owners and admins only\",\n \"onlyOwners\": \"Only the organization's owners and admins manage its members.\",\n \"chooseResource\": \"Choose a resource\",\n \"pickFromSidebar\": \"Pick one from the sidebar.\",\n \"nothingHere\": \"There is nothing at this address.\",\n \"noPage\": \"There is no page called {page}.\",\n \"assistant\": \"Assistant\",\n \"operationFailed\": \"Operation {index} ({label}) failed: {message} Nothing was saved.\",\n \"nothingSaved\": \"{message} Nothing was saved.\",\n \"admin\": \"Admin\",\n \"new\": \"New\",\n \"loadingRecord\": \"Loading record\",\n \"noComponent\": \"No component is registered as {component}. Export it from protobase.ui.tsx, or load the plugin that provides it.\",\n \"choose\": \"Choose...\",\n \"fileMissing\": \"The file is missing from storage\",\n \"chooseFileFor\": \"Choose a file for {label}\",\n \"notUploaded\": \"Not uploaded\",\n \"uploadingLabel\": \"Uploading {label}\",\n \"uploading\": \"Uploading… {percent}%\",\n \"replace\": \"Replace\",\n \"remove\": \"Remove\",\n \"dropFile\": \"Drop a file here or\",\n \"chooseFile\": \"Choose a file\",\n \"average\": \"Average <lower>{label}</lower>\",\n \"pages\": \"Pages\",\n \"account\": \"Account\",\n \"sales\": \"Sales\",\n \"crm\": \"CRM\",\n \"catalog\": \"Catalog\",\n \"inventory\": \"Inventory\",\n \"hr\": \"HR\",\n \"cannotReach\": \"Cannot reach {label}\",\n \"searchPlural\": \"Search {plural}\",\n \"couldNotLoadOptions\": \"Could not load the options\",\n \"noMatches\": \"No matches\",\n \"loading\": \"Loading\",\n \"leaveTitle\": \"Leave without saving?\",\n \"leaveDescription\": \"You have unsaved changes on this page. They stay in this browser, and come back when you open the record again.\",\n \"leaveInputLost\": \"You have unsaved changes on this page. They are lost when you leave.\",\n \"stay\": \"Stay\",\n \"leave\": \"Leave\",\n \"reloadTitle\": \"Reload without saving?\",\n \"reloadDraftKept\": \"You have unsaved changes on this page. They stay in this browser, and come back after the page reloads.\",\n \"reloadInputLost\": \"You have unsaved changes on this page. They are lost when the page reloads.\",\n \"keepEditing\": \"Keep editing\",\n \"reload\": \"Reload\",\n \"show\": \"Show {label}\",\n \"hide\": \"Hide {label}\",\n \"couldNotShow\": \"Could not show the {label}\",\n \"setNewValue\": \"Set a new value\",\n \"noAnswer\": \"It did not answer.\",\n \"signInRefused\": \"It did not accept your sign-in: {message}\",\n \"loadingFrom\": \"Loading from {label}\",\n \"restWorks\": \"The rest of the app works as before.\",\n \"tryAgain\": \"Try again\",\n \"staffSession\": \"Staff session\",\n \"staffSignedIn\": \"{staff} is signed in as {user} until {until}. Reason: {reason}\",\n \"stopStaffSession\": \"Stop staff session\",\n \"open\": \"Open\",\n \"openLabel\": \"Open {label}\"\n },\n \"app-shell\": {\n \"navigation\": \"Navigation\",\n \"resources\": \"Resources\",\n \"breadcrumb\": \"Breadcrumb\",\n \"tabs\": \"Tabs\",\n \"more\": \"More\",\n \"openNavigation\": \"Open navigation\",\n \"backTo\": \"Back to {label}\",\n \"search\": \"Search\",\n \"closeSearch\": \"Close search\",\n \"clearSearch\": \"Clear search\",\n \"globalSearch\": \"Global search\",\n \"searchResults\": \"Search results\",\n \"searching\": \"Searching\",\n \"noMatches\": \"No matches for “{query}”\",\n \"profileMenu\": \"Profile menu\",\n \"organizations\": \"Organizations\",\n \"roles\": \"Roles\",\n \"signIn\": \"Sign in\",\n \"signOut\": \"Sign out\",\n \"theme\": \"Theme\",\n \"light\": \"Light\",\n \"dark\": \"Dark\",\n \"system\": \"System\",\n \"recent\": \"Recent {plural}\",\n \"loading\": \"Loading...\",\n \"couldNotLoad\": \"Could not load\",\n \"viewAll\": \"View all\",\n \"couldNotSearch\": \"Could not search <lower>{label}</lower>\"\n },\n \"app/change-confirm\": {\n \"title\": \"Change {label}?\",\n \"change\": \"Change\",\n \"cancel\": \"Cancel\"\n },\n \"app/charts\": {\n \"notSet\": \"Not set\",\n \"yes\": \"Yes\",\n \"no\": \"No\",\n \"nothingYet\": \"Nothing to chart yet.\",\n \"couldNotLoad\": \"Could not load the chart.\",\n \"weekOf\": \"Week of {day}\",\n \"other\": \"Other\",\n \"records\": \"{count} records\"\n },\n \"app/comments\": {\n \"couldNotPost\": \"Could not post the comment\",\n \"comment\": \"Comment\",\n \"placeholder\": \"Write a comment, @ to mention someone\",\n \"couldNotLoad\": \"Could not load the comments\",\n \"showEarlier\": \"Show earlier comments\",\n \"noComments\": \"No comments yet.\"\n },\n \"app/confirm-sign-in\": {\n \"confirmTitle\": \"Confirm it's you\",\n \"confirmWhy\": \"Showing this needs a passkey or your authenticator app in the last {minutes} minutes.\",\n \"usePasskey\": \"Use a passkey\",\n \"authenticatorCode\": \"Code from your authenticator app\",\n \"confirm\": \"Confirm\",\n \"nothingToConfirmWith\": \"Add a passkey or an authenticator app on your account page first.\"\n },\n \"app/create\": {\n \"title\": \"New <lower>{noun}</lower>\",\n \"subject\": \"New <lower>{noun}</lower>\",\n \"submit\": \"Create <lower>{noun}</lower>\",\n \"notCreated\": \"Not created\",\n \"notSaved\": \"Not saved\",\n \"cancel\": \"Cancel\",\n \"setByDatabase\": \"Set by the database\",\n \"details\": \"Details\",\n \"otherFields\": \"Other fields\",\n \"notAllowed\": \"Not allowed\",\n \"cannotCreate\": \"You cannot create {plural}.\"\n },\n \"app/delete\": {\n \"confirmTitle\": \"Delete {title}?\",\n \"confirmDescription\": \"This <lower>{noun}</lower> will be removed. This cannot be undone.\",\n \"cancel\": \"Cancel\",\n \"delete\": \"Delete\",\n \"changedTitle\": \"{title} was changed since you opened it\",\n \"changedDescription\": \"Someone saved this record in the meantime. Review what changed before you delete it.\",\n \"reviewChanges\": \"Review changes\",\n \"deleteAnyway\": \"Delete anyway\",\n \"noVisibleChanges\": \"No visible fields differ; the record was saved again with the same values.\",\n \"bulkConfirmTitle\": \"Delete {count, plural, one {# <lower>{noun}</lower>} other {# <lower>{plural}</lower>}}?\",\n \"bulkConfirmDescription\": \"This cannot be undone. Each record is deleted only if it has not changed since the list loaded; anything that changed is reported and kept.\",\n \"deleteCount\": \"Delete {count}\",\n \"deleting\": \"Deleting\",\n \"progress\": \"{done} of {total} done\",\n \"working\": \"Working\",\n \"deleted\": \"Deleted {count}\",\n \"deletedOf\": \"Deleted {count} of {total}\",\n \"kept\": \"{count} could not be deleted and were kept.\",\n \"done\": \"Done\",\n \"deletedToast\": \"{title} deleted\",\n \"undo\": \"Undo\",\n \"restored\": \"{title} restored\",\n \"alreadyBack\": \"{title} is already back\",\n \"couldNotRestore\": \"Could not restore {title}\",\n \"couldNotDelete\": \"Could not delete {title}\",\n \"changedSinceLoaded\": \"Changed since the list loaded, so it was kept.\",\n \"stillPointAt\": \"{plural} still point at this <lower>{noun}</lower>.\",\n \"show\": \"Show <lower>{plural}</lower>\"\n },\n \"app/displays\": {\n \"table\": \"Table\",\n \"display\": \"Display\",\n \"sort\": \"Sort\",\n \"ascending\": \"ascending\",\n \"descending\": \"descending\",\n \"movedTo\": \"Moved to {column}\",\n \"orderChanged\": \"Order changed\",\n \"stayedIn\": \"Saved, still in {column}\",\n \"undo\": \"Undo\",\n \"couldNotUndo\": \"Could not undo\",\n \"couldNotLoadRows\": \"Could not load rows\",\n \"noPlural\": \"No {plural}\",\n \"noValue\": \"No <lower>{label}</lower>\",\n \"somethingWrong\": \"Something went wrong\",\n \"showMore\": \"Show more\",\n \"noDrop\": \"No board drop is registered as {drop}. Give it in boardDrops in protobase.ui.tsx, or load the plugin that provides it.\",\n \"noComponent\": \"No component is registered as {component}. Export it from protobase.ui.tsx, or load the plugin that provides it.\",\n \"pickedUp\": \"Picked up {title}.\",\n \"isOver\": \"{title} is over {over}.\",\n \"putBack\": \"{title} was put back.\",\n \"wasMovedTo\": \"{title} was moved to {to}.\",\n \"cancelled\": \"Moving {title} was cancelled.\",\n \"startsOn\": \"{title} starts on {day}.\",\n \"noColumn\": \"no column\",\n \"noDay\": \"no day\",\n \"placeOf\": \"{column}, place {place} of {count}\",\n \"place\": \"{column}, place {place}\",\n \"boardAcross\": \"To move a card to another column, press Space, move it with the left and right arrow keys, and press Space again to drop it there. Escape puts it back.\",\n \"boardAnywhere\": \"To move a card, press Space, move it with the up and down arrow keys within its column and the left and right arrow keys to another column, and press Space again to drop it there. Escape puts it back.\",\n \"boardWithin\": \"To move a card, press Space, move it with the up and down arrow keys within its column, and press Space again to drop it there. Escape puts it back.\",\n \"calendarInstructions\": \"To move an event to another day, press Space, move it a day with the left and right arrow keys or a week with the up and down arrow keys, and press Space again to drop it there. Escape puts it back.\",\n \"timelineInstructions\": \"To move a bar to other days, press Space, move it a day with the left and right arrow keys, and press Space again to drop it there. Escape puts it back.\",\n \"week\": \"Week\",\n \"month\": \"Month\",\n \"quarter\": \"Quarter\",\n \"calendarScale\": \"Calendar scale\",\n \"timelineScale\": \"Timeline scale\",\n \"previousPeriod\": \"Previous {unit}\",\n \"nextPeriod\": \"Next {unit}\",\n \"today\": \"Today\",\n \"capped\": \"Showing the first {limit} records of this {unit}. Narrow the filter to see the rest.\",\n \"nothingIn\": \"Nothing in this {unit}.\",\n \"noneMatch\": \"No {plural} match.\",\n \"list\": \"List\",\n \"showOneApproximate\": \"Show the {singular}, at an approximate position\",\n \"showOne\": \"Show the {singular}\",\n \"showMany\": \"Show {count} {plural}\",\n \"showManyApproximate\": \"Show {count} {plural}, at approximate positions\",\n \"showManySomeApproximate\": \"Show {count} {plural}, {near} at approximate positions\",\n \"zoomIn\": \"Zoom in on {count} {noun}\",\n \"needsStyle\": \"The map display needs a map style: set PROTOBASE_MAP_STYLE_URL.\",\n \"noneHere\": \"No {plural} in this part of the map.\",\n \"showAll\": \"Show all\",\n \"chosen\": \"Chosen {singular}\",\n \"approximatePosition\": \"Approximate position\",\n \"previous\": \"Previous\",\n \"next\": \"Next\",\n \"close\": \"Close\",\n \"features\": \"Features\",\n \"couldNotReorder\": \"Could not change the order\",\n \"couldNotMoveTo\": \"Could not move it to {to}\",\n \"moreHidden\": \"+{count} more\"\n },\n \"app/embedded-list\": {\n \"firstOf\": \"The first {shown} of {total}.\",\n \"firstOfAbout\": \"The first {shown} of about {total}.\",\n \"open\": \"Open {singular}\",\n \"edit\": \"Edit {singular}\",\n \"viewAll\": \"View all\",\n \"couldNotLoad\": \"Could not load\",\n \"nothingYet\": \"Nothing here yet.\"\n },\n \"app/export\": {\n \"excel\": \"Excel (.xlsx)\",\n \"csv\": \"CSV\",\n \"asShown\": \"As shown\",\n \"rawValues\": \"Raw values\",\n \"shownHint\": \"Labels, dates and numbers as the list shows them.\",\n \"rawHint\": \"Values as they are stored, such as keys and codes.\",\n \"counting\": \"Counting rows…\",\n \"moreThan\": \"more than 10,000 rows\",\n \"columns\": \"Columns\",\n \"moveUp\": \"Move {label} up\",\n \"moveDown\": \"Move {label} down\",\n \"selectedRows\": \"{count} selected {rows, plural, one {row} other {rows}}\",\n \"rowsInList\": \"Rows in the list\",\n \"selected\": \"Selected ({count})\",\n \"exportPlural\": \"Export <lower>{plural}</lower>\",\n \"cancel\": \"Cancel\",\n \"export\": \"Export\",\n \"format\": \"Format\",\n \"rows\": \"Rows\",\n \"listHint\": \"With the list’s filters, search and sort.\",\n \"values\": \"Values\",\n \"exports\": \"Exports {rows}.\",\n \"overLimit\": \" A file holds at most {limit} rows; the rest are left out.\",\n \"exporting\": \"Exporting <lower>{plural}</lower>\",\n \"rowsExported\": \"Rows exported\",\n \"doneOf\": \"{done} of {total} rows\",\n \"done\": \"{done} rows\",\n \"exported\": \"Exported {count} <lower>{plural}</lower>\",\n \"truncated\": \"{name}: the first {count} rows, as many as a file holds.\",\n \"couldNotExport\": \"Could not export <lower>{plural}</lower>\",\n \"cancelled\": \"The export was cancelled\",\n \"couldNotBuild\": \"The export could not be built: {message}\",\n \"workbook\": \"Excel workbook\",\n \"csvFile\": \"CSV file\"\n },\n \"app/field\": {\n \"atLeastCharacters\": \"{label} needs at least {count} {n, plural, one {character} other {characters}}\",\n \"atMostCharacters\": \"{label} can have at most {count} {n, plural, one {character} other {characters}}\",\n \"wholeNumberAtLeast\": \"Enter a whole number of at least {min}\",\n \"wholeNumberAtMost\": \"Enter a whole number of at most {max}\",\n \"wholeNumber\": \"Enter a whole number\",\n \"number\": \"Enter a number\",\n \"wholeNumberBelow\": \"Enter a whole number below {below}\",\n \"decimalsBelow\": \"Enter a number with at most {scale, plural, one {# decimal} other {# decimals}}, below {below}\",\n \"date\": \"Enter a date\",\n \"timestamp\": \"Enter a date and time\",\n \"country\": \"Enter a two-letter country code, such as NL\",\n \"currency\": \"Enter a three-letter currency code, such as EUR\",\n \"uuid\": \"Enter a valid ID\",\n \"enum\": \"Choose one of the options\",\n \"relation\": \"Choose a record\",\n \"json\": \"Enter valid JSON\",\n \"required\": \"{label} is required\",\n \"checkField\": \"Check the marked field.\",\n \"checkFields\": \"Check {count} fields.\"\n },\n \"app/field-types\": {\n \"fieldType\": \"The field type {name}\"\n },\n \"app/field-types/members\": {\n \"needsOrganizations\": \"Choosing members needs organizations: turn them on in the auth config.\",\n \"couldNotLoadMembers\": \"Could not load the members.\",\n \"unknownMember\": \"Unknown member\",\n \"searchMembers\": \"Search members\"\n },\n \"app/gallery\": {\n \"couldNotLoad\": \"Could not load the photos\",\n \"showAll\": \"Show all {count} photos\",\n \"showPhoto\": \"Show photo {index} of {count}\",\n \"details\": \"Details\",\n \"holderDetails\": \"{singular} details\",\n \"close\": \"Close\",\n \"previousPhoto\": \"Previous photo\",\n \"nextPhoto\": \"Next photo\",\n \"couldNotLoadOne\": \"Could not load the {singular}\",\n \"open\": \"Open {singular}\"\n },\n \"app/hand-order\": {\n \"done\": \"Done\",\n \"reorder\": \"Reorder\",\n \"couldNotLoad\": \"Could not load\",\n \"nothingYet\": \"Nothing here yet.\",\n \"couldNotChange\": \"Could not change the order\",\n \"orderChanged\": \"Order changed\",\n \"undo\": \"Undo\",\n \"couldNotUndo\": \"Could not undo\",\n \"movedToPlace\": \"Moved to place {place}\",\n \"notMoved\": \"Left in its place\",\n \"noRule\": \"No drop rule is registered as {rule}. Give it in dropRules in protobase.ui.tsx, or load the plugin that provides it.\"\n },\n \"app/history\": {\n \"create\": \"created this\",\n \"update\": \"changed\",\n \"delete\": \"deleted this\",\n \"undelete\": \"restored this\",\n \"database\": \"Database\",\n \"databaseRole\": \"Database ({role})\",\n \"changed\": \"changed\",\n \"changedThis\": \"changed this\",\n \"couldNotLoad\": \"Could not load the history\",\n \"noChanges\": \"No changes kept yet.\",\n \"showMore\": \"Show more\"\n },\n \"app/import\": {\n \"import\": \"Import\",\n \"importPlural\": \"Import <lower>{plural}</lower>\",\n \"couldNotReadFile\": \"Could not read the file\",\n \"couldNotCheck\": \"Could not check the rows\",\n \"cancel\": \"Cancel\",\n \"next\": \"Next\",\n \"checkRows\": \"Check rows\",\n \"back\": \"Back\",\n \"checking\": \"Checking\",\n \"importRows\": \"Import {count} {rows, plural, one {row} other {rows}}\",\n \"cancelImport\": \"Cancel import\",\n \"done\": \"Done\",\n \"file\": \"File\",\n \"fileHint\": \"An Excel workbook (.xlsx) or a CSV file saved as UTF-8. Its first row names the columns.\",\n \"reading\": \"Reading {name}…\",\n \"theFile\": \"the file\",\n \"sheet\": \"Sheet\",\n \"create\": \"Create\",\n \"update\": \"Update\",\n \"upsert\": \"Create or update\",\n \"createHint\": \"Each row creates a record.\",\n \"updateHint\": \"Each row updates the record its value finds; a row that finds none is not imported.\",\n \"upsertHint\": \"Each row updates the record its value finds, or creates one when it finds none.\",\n \"doNotImport\": \"Do not import\",\n \"rows\": \"Rows\",\n \"whatEachRowDoes\": \"What each row does\",\n \"findBy\": \"Find records by\",\n \"chooseField\": \"Choose a field\",\n \"findByHint\": \"A field no two records share, such as the key or an email.\",\n \"foundInColumn\": \"Found in column\",\n \"chooseColumn\": \"Choose a column\",\n \"numbers\": \"Numbers\",\n \"dates\": \"Dates\",\n \"dayFirst\": \"Day first (31/12/2026)\",\n \"monthFirst\": \"Month first (12/31/2026)\",\n \"datesHint\": \"Dates written as 2026-12-31 read the same either way. Times without a zone are your own time.\",\n \"requiredMarked\": \"New records need the fields marked *.\",\n \"columns\": \"Columns\",\n \"emptyInFirstRows\": \"Empty in the first rows\",\n \"field\": \"Field\",\n \"fieldFor\": \"Field for {name}\",\n \"foundBy\": \"Found by\",\n \"pluralFoundBy\": \"{plural} found by\",\n \"noColumnFills\": \"No column fills {fields}, which new records need.\",\n \"rowsNotImported\": \"Rows not imported\",\n \"rowProblems\": \"Row {line}:\",\n \"andMore\": \"And {count} more rows, all in the file.\",\n \"checkingRows\": \"Checking rows… {count} read\",\n \"check\": \"Check\",\n \"toCreate\": \"To create\",\n \"toUpdate\": \"To update\",\n \"withProblems\": \"With problems\",\n \"firstRows\": \"First rows\",\n \"row\": \"Row\",\n \"problemRows\": \"Rows with problems, which are skipped\",\n \"download\": \"Download\",\n \"batches\": \"Rows are saved in batches of {size}. Cancelling, or an error, keeps the batches already saved; a row the server refuses is listed and the others are saved.\",\n \"stopping\": \"Stopping after this batch…\",\n \"saving\": \"Saving rows…\",\n \"rowsSaved\": \"Rows saved\",\n \"stopped\": \"The import stopped. The rows counted below were saved.\",\n \"cancelled\": \"Cancelled. The rows counted below were saved.\",\n \"summary\": \"Import summary\",\n \"created\": \"Created\",\n \"updated\": \"Updated\",\n \"skipped\": \"Skipped\",\n \"failed\": \"Failed\",\n \"notWrittenHint\": \"Skipped rows had problems in the file; the server refused the failed ones. The file holds each with the reason, to fix and import again.\",\n \"notImportedFile\": \"{name} - not imported.csv\",\n \"line\": \"Line\",\n \"problems\": \"Problems\",\n \"notNumber\": \"{cell} is not a number\",\n \"notWholeNumber\": \"{cell} is not a whole number\",\n \"tooLarge\": \"{cell} is too large\",\n \"notBoolean\": \"{cell} is not true or false (true, false, yes, no, 1 or 0)\",\n \"notDate\": \"{cell} is not a date (2026-04-03 or {dayFirst, select, true {day/month/year} other {month/day/year}})\",\n \"hasTime\": \"{cell} has a time of day; the field holds a date\",\n \"severalValues\": \"{cell} matches more than one value: {values}\",\n \"notOneOf\": \"{cell} is not one of {values}\",\n \"notText\": \"{cell} is true or false, not text\",\n \"emptyRequired\": \"is empty, and it is required\",\n \"noneHas\": \"no <lower>{singular}</lower> has {named}\",\n \"severalHave\": \"{count} <lower>{plural}</lower> have {named}\",\n \"notOneRecord\": \"Not one record: {found}\",\n \"nothingToUpdate\": \"Nothing to update: {found}\",\n \"fileNotUtf8\": \"The file is not UTF-8 text. Save it as \\\"CSV UTF-8\\\" and choose it again.\",\n \"noSheets\": \"The workbook has no sheets\",\n \"missingSheetPart\": \"The workbook names a sheet it does not hold\",\n \"notZip\": \"The file is not an Excel workbook (.xlsx): it is no ZIP archive\",\n \"zip64\": \"The workbook is too large to read: it is a ZIP64 archive\",\n \"compression\": \"The workbook's part {part} is compressed in a way that cannot be read (method {method})\",\n \"notWorkbook\": \"The file is not an Excel workbook (.xlsx): it has no {part}\",\n \"noSheetCalled\": \"The workbook has no sheet called {name}\",\n \"unreadable\": \"The file could not be read\",\n \"column\": \"Column {letters}\"\n },\n \"app/list\": {\n \"noList\": \"There is no list called {name}.\",\n \"searchPlural\": \"Search <lower>{plural}</lower>\",\n \"search\": \"Search\",\n \"sort\": \"Sort\",\n \"filters\": \"Filters\",\n \"filtersCount\": \"Filters ({count})\",\n \"newRecord\": \"New <lower>{singular}</lower>\",\n \"export\": \"Export\",\n \"openRecord\": \"Open <lower>{singular}</lower>\",\n \"delete\": \"Delete\",\n \"exportCount\": \"Export {count}\",\n \"deleteCount\": \"Delete {count}\",\n \"actionCount\": \"{label} ({count})\",\n \"dragToSort\": \"Drag a row by its handle to move it. Every move is saved as you drop it.\",\n \"unreadableFilter\": \"The filter in the address could not be read\",\n \"couldNotLoadRows\": \"Could not load rows\",\n \"created\": \"{plural} created\",\n \"noMatchSearch\": \"No <lower>{plural}</lower> match “{search}”.\",\n \"noMatchFilters\": \"No <lower>{plural}</lower> match these filters.\",\n \"noMatch\": \"No <lower>{plural}</lower> match.\",\n \"noneYet\": \"No <lower>{plural}</lower> yet.\",\n \"clearSearch\": \"Clear search\",\n \"clearFilters\": \"Clear filters\"\n },\n \"app/list-edit\": {\n \"changedBySomeoneElse\": \"Changed by someone else\",\n \"couldNotSave\": \"Could not save\"\n },\n \"app/live-update\": {\n \"holdTitle\": \"Updating the app\",\n \"holdLine\": \"The new version is downloading. The app opens it in a moment.\"\n },\n \"app/map\": {\n \"mapLayer\": \"Map layer\",\n \"map\": \"Map\"\n },\n \"app/meta-gate\": {\n \"loading\": \"Loading\",\n \"cannotReach\": \"Cannot reach the API\",\n \"noAnswer\": \"The server did not answer. Is it running?\"\n },\n \"app/new-version\": {\n \"title\": \"This app has been updated\",\n \"description\": \"Reload the page to use the new version, when it suits you.\",\n \"reload\": \"Reload\",\n \"reloadPage\": \"Reload page\",\n \"reloadPageHint\": \"Reload page to use the new version\",\n \"bannerTitle\": \"{app} updated\",\n \"bannerLine\": \"Save your work, then click here to reload. You may see errors until you do.\"\n },\n \"app/pages\": {\n \"notFound\": \"Not found\",\n \"noPage\": \"There is no page called {page}.\",\n \"tabs\": \"Tabs\",\n \"noTab\": \"This page has no tab called {name}.\",\n \"cancel\": \"Cancel\",\n \"couldNotDraw\": \"{name} could not be drawn.\",\n \"noComponent\": \"No component is registered as {component}. Export it from protobase.ui.tsx, or load the plugin that provides it.\",\n \"unknownBlock\": \"{type} is not a block this version of the app knows.\",\n \"somethingWrong\": \"Something went wrong\",\n \"needsRecord\": \"Needs a record\",\n \"cannotChange\": \"You cannot change this record\",\n \"cannotDelete\": \"You cannot delete this record\",\n \"doesNotApply\": \"Does not apply to this record\",\n \"noHandler\": \"The app has no handler for \\\"{name}\\\"\",\n \"noInputComponent\": \"The app has no component \\\"{component}\\\" for input \\\"{input}\\\"\",\n \"done\": \"{label}: done\",\n \"doneOn\": \"{label}: done on {done}{skipped, plural, =0 {} other {, skipped # it does not apply to}}{failed, plural, =0 {} other {, failed on #}}\",\n \"failed\": \"{label} failed\",\n \"noAction\": \"No action \\\"{name}\\\"\",\n \"couldNotLoad\": \"Could not load\",\n \"nothingYet\": \"Nothing here yet.\",\n \"saved\": \"{label}: saved\",\n \"create\": \"Create\",\n \"save\": \"Save\",\n \"notSaved\": \"Not saved\",\n \"settings\": \"Settings\",\n \"couldNotCount\": \"Could not count\",\n \"required\": \"Required\",\n \"wholeNumber\": \"A whole number\",\n \"number\": \"A number\",\n \"dateFormat\": \"A date as YYYY-MM-DD\",\n \"atMost\": \"At most {max} characters\"\n },\n \"app/rank-after\": {\n \"dependsOn\": \"{record} depends on {other}.\"\n },\n \"app/record\": {\n \"details\": \"Details\",\n \"history\": \"History\",\n \"comments\": \"Comments\",\n \"summary\": \"Summary\",\n \"loading\": \"Loading\",\n \"fetching\": \"Fetching the record.\",\n \"noRecord\": \"This record does not exist, or you cannot see it.\",\n \"openingElsewhere\": \"Opening the record in its organization.\",\n \"couldNotLoad\": \"Could not load the record\",\n \"someoneElse\": \"Someone else\",\n \"justNow\": \"just now\",\n \"saved\": \"Saved\",\n \"save\": \"Save\",\n \"cancel\": \"Cancel\",\n \"unsavedChanges\": \"Unsaved changes\",\n \"notSaved\": \"Not saved\",\n \"linesChanged\": \"The lines were changed by someone else\",\n \"linesReloaded\": \"The lines were reloaded. Your new order is kept: Save again to apply it.\",\n \"unsavedKept\": \"You have unsaved changes to this record.\",\n \"continueEditing\": \"Continue editing\",\n \"discard\": \"Discard\",\n \"unsavedRestored\": \"Your unsaved changes were restored.\",\n \"keep\": \"Keep\",\n \"savingSubject\": \"Saving {subject}...\",\n \"subjectSaved\": \"{subject} saved\",\n \"changedBySomeoneElse\": \"Changed by someone else\",\n \"couldNotSave\": \"Could not save\",\n \"recordActions\": \"Record actions\",\n \"edit\": \"Edit\",\n \"delete\": \"Delete\",\n \"nothingYet\": \"Nothing here yet.\",\n \"couldNotLoadRelated\": \"Could not load\",\n \"relatedRecords\": \"Related records\",\n \"lineNumber\": \"Line {place}\",\n \"lineField\": \"{label}, line {place}\",\n \"tooManyLines\": \"This record has more than {limit} lines, so they show here read-only.\"\n },\n \"app/record-chart\": {\n \"range\": \"Range\",\n \"hour\": \"Hour\",\n \"day\": \"Day\",\n \"week\": \"Week\",\n \"measure\": \"Per bucket\",\n \"average\": \"Average\",\n \"maximum\": \"Maximum\",\n \"noSamples\": \"No samples in this range.\",\n \"couldNotLoad\": \"Could not load the chart.\"\n },\n \"app/record-row\": {\n \"couldNotLoad\": \"Could not load\",\n \"noneMatch\": \"No {plural} match.\",\n \"viewAll\": \"View all\",\n \"new\": \"New\",\n \"previous\": \"Previous {label}\",\n \"next\": \"Next {label}\",\n \"couldNotLoadYour\": \"Could not load your {plural}\",\n \"noneYet\": \"No {plural} yet.\"\n },\n \"app/related-cards\": {\n \"showMore\": \"Show more\",\n \"showLess\": \"Show less\",\n \"couldNotLoad\": \"Could not load\",\n \"nothingYet\": \"Nothing here yet.\"\n },\n \"app/related-dots\": {\n \"none\": \"No {plural}\"\n },\n \"app/runtime\": {\n \"immediate\": \"Updates as soon as a release is out\",\n \"weekly\": \"Updates at a set time every week\",\n \"scheduled\": \"Updates at the time set for this release\",\n \"manual\": \"Updates only when asked to\",\n \"job\": \"Preparing the update\",\n \"build\": \"Building\",\n \"updatingNow\": \"Updating now\",\n \"started\": \"{stage}, started {ago}\",\n \"nextOn\": \"{policy}: next on {when}\",\n \"succeeded\": \"Updated to {version} on {when}\",\n \"unchanged\": \"The update to {version} on {when} changed nothing\",\n \"failed\": \"The update to {version} failed on {when}\",\n \"alreadyLatest\": \"Already on the latest version, or an update is running.\",\n \"onlyAdmin\": \"Only an admin can update the runtime.\",\n \"couldNotStart\": \"The update could not be started. Try again later.\",\n \"runtimeUpdate\": \"Runtime update\",\n \"close\": \"Close\",\n \"updating\": \"Updating…\",\n \"updateNow\": \"Update now\",\n \"currentVersion\": \"Current version\",\n \"latestVersion\": \"Latest version\",\n \"checkFailed\": \"The status could not be checked again; this is the last one read.\",\n \"updateAvailable\": \"Update available\",\n \"update\": \"Update\"\n },\n \"app/saved\": {\n \"favorite\": \"Favorite\",\n \"couldNotLoadYour\": \"Could not load your {plural}\",\n \"noneYet\": \"No {plural} yet.\",\n \"somethingWrong\": \"Something went wrong\",\n \"couldNotTakeOff\": \"Could not take it off\",\n \"couldNotSave\": \"Could not save it\"\n },\n \"app/search\": {\n \"search\": \"Search\",\n \"searchOne\": \"Search {name}\",\n \"searchTwo\": \"Search {first} and {second}\",\n \"searchMore\": \"Search {first}, {second} and more\",\n \"goTo\": \"Go to\",\n \"create\": \"Create\"\n },\n \"app/searches\": {\n \"saveSearch\": \"Save search\",\n \"saveAsNew\": \"Save as new {noun}\",\n \"updateName\": \"Update {name}\",\n \"updateNameQuestion\": \"Update {name}?\",\n \"updateNounQuestion\": \"Update this {noun}?\",\n \"couldNotLoadYour\": \"Could not load your {plural}\",\n \"noneYet\": \"No {plural} yet.\",\n \"somethingWrong\": \"Something went wrong\",\n \"couldNotRename\": \"Could not rename the search\",\n \"renameTitle\": \"Rename {title}\",\n \"deleteTitle\": \"Delete {title}\",\n \"unreadableFilter\": \"A filter that cannot be read\",\n \"notFound\": \"Not found\",\n \"noResource\": \"There is no resource called {resource}.\",\n \"noSavedYet\": \"No {plural} yet. Filter the {list} and save the search.\",\n \"on\": \"On\",\n \"off\": \"Off\",\n \"saved\": \"{title} saved\",\n \"couldNotChange\": \"Could not change the search\",\n \"asMany\": \"As many {plural}\",\n \"more\": \"{count} more {noun}\",\n \"fewer\": \"{count} fewer {noun}\",\n \"cancel\": \"Cancel\",\n \"save\": \"Save\",\n \"optional\": \"Optional\",\n \"added\": \"Added\",\n \"removed\": \"Removed\",\n \"changed\": \"Changed\",\n \"filterChanges\": \"Filter changes\",\n \"firstOf\": \"The first {limit} of {total}.\",\n \"noPlural\": \"No {plural}.\",\n \"update\": \"Update\",\n \"addedRemoved\": \"{added} added, {removed} removed\",\n \"searchSaved\": \"Search saved\",\n \"openPlural\": \"Open <lower>{plural}</lower>\",\n \"couldNotSave\": \"Could not save the search\",\n \"couldNotTakeOff\": \"Could not take the search off\",\n \"searchUpdated\": \"Search updated\",\n \"couldNotUpdate\": \"Could not update the search\",\n \"noneMatch\": \"No {plural} match.\",\n \"noNew\": \"No new {plural} since you last looked.\",\n \"viewAll\": \"View all results\",\n \"filters\": \"Filters\"\n },\n \"assistant-dock\": {\n \"askQuestion\": \"Ask a question...\",\n \"assistant\": \"Assistant\",\n \"reconnecting\": \"Reconnecting...\",\n \"empty\": \"Ask a question about this app or its data.\",\n \"noAnswer\": \"The assistant did not answer\",\n \"backendNoAnswer\": \"The assistant backend did not answer\",\n \"couldNotDraw\": \"It could not be drawn.\",\n \"cannotShowLive\": \"This version of the app cannot show it live.\"\n },\n \"auth\": {\n \"loading\": \"Loading\",\n \"cannotReach\": \"Cannot reach the server: {message}\",\n \"tryAgain\": \"Try again\",\n \"passwordChanged\": \"Your password is changed. Sign in with the new one.\",\n \"noAnswer\": \"The server did not answer\",\n \"code\": \"Code\",\n \"backupCode\": \"Backup code\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"passwordOptional\": \"Password (optional)\",\n \"signIn\": \"Sign in\",\n \"signOut\": \"Sign out\",\n \"continue\": \"Continue\",\n \"backToSignIn\": \"Back to sign in\",\n \"useAnotherAddress\": \"Use another address\",\n \"checkEmail\": \"Check your email\",\n \"newCodeSent\": \"A new code is on its way. Only the newest one works.\",\n \"sendNewCode\": \"Send a new code\",\n \"sendNewCodeIn\": \"Send a new code in {seconds}s\",\n \"signInCodeDescription\": \"Enter the code we sent to sign in.\",\n \"signInCodeSent\": \"If {email} has an account, a 6-digit code is on its way. It works for 5 minutes, once.\",\n \"signUpCodeDescription\": \"Enter the code we sent to create your account.\",\n \"signUpCodeSent\": \"A 6-digit code is on its way to {email}. It works for 5 minutes, once. If the address has an account already, the email says so instead.\",\n \"noAdminTitle\": \"No admin yet\",\n \"noAdminDescription\": \"This Protobase has no users to sign in with.\",\n \"noAdminExplanation\": \"Run this in the terminal where Protobase runs, then reload. The first admin is created on the server, not in the browser, so nobody else can claim a fresh URL.\",\n \"copyCommand\": \"Copy command\",\n \"firstAdminExplanation\": \"The first user is added in the Protobase Cloud console, not in the browser, so nobody else can claim a fresh URL. Add yourself there, then reload.\",\n \"firstAdminLink\": \"Add your first user in the Protobase Cloud console\",\n \"reload\": \"Reload\",\n \"tooManyRequests\": \"Too many requests. Wait a minute and try again.\",\n \"tooManyAttempts\": \"Too many attempts. Wait a minute and try again.\",\n \"resetTitle\": \"Reset your password\",\n \"resetDescription\": \"We email you a link to choose a new one.\",\n \"sendResetLink\": \"Send reset link\",\n \"resetSent\": \"If {email} has an account, an email with a link to choose a new password is on its way. The link works once, for a limited time.\",\n \"linkExpiredTitle\": \"This link no longer works\",\n \"linkExpiredExplanation\": \"A reset link works once, for a limited time. Ask for a new one to choose your password.\",\n \"sendNewLink\": \"Send a new link\",\n \"passwordsDiffer\": \"The passwords are not the same.\",\n \"choosePassword\": \"Choose a new password\",\n \"atLeast\": \"At least {length} characters.\",\n \"useAtLeast\": \"Use at least {length} characters.\",\n \"passwordTooLong\": \"That password is too long.\",\n \"newPassword\": \"New password\",\n \"repeatPassword\": \"Repeat new password\",\n \"setPassword\": \"Set new password\",\n \"signingInWith\": \"Signing in with {name}\",\n \"takingYouTo\": \"Taking you to {name}…\",\n \"providerNotOffered\": \"Signing in with {name} is not offered here. Sign in another way.\",\n \"turnOnTwoFactor\": \"Turn on two-factor authentication\",\n \"addPasskey\": \"Add a passkey\",\n \"requiredForEveryAccount\": \"This app requires it for every account.\",\n \"passkeyExplanation\": \"A passkey signs you in with Face ID, Touch ID, Windows Hello, your phone or a security key. Your browser asks which one to use.\",\n \"couldNotReadAccount\": \"Could not read your account\",\n \"signInTitle\": \"Sign in to Protobase\",\n \"continueWith\": \"Continue with {name}\",\n \"signInWithPasskey\": \"Sign in with a passkey\",\n \"passkeyFor\": \"Use a passkey made for {domain}\",\n \"or\": \"or\",\n \"emailSignInCode\": \"Email me a sign-in code\",\n \"usePassword\": \"Use a password\",\n \"forgotPassword\": \"Forgot password?\",\n \"newHere\": \"New here?\",\n \"haveAccount\": \"Have an account?\",\n \"createAnAccount\": \"Create an account\",\n \"browse\": \"Continue without signing in\",\n \"notNow\": \"Not now\",\n \"detailsTitle\": \"Your details\",\n \"detailsDescription\": \"One last step to create your account.\",\n \"yourName\": \"Your name\",\n \"codeWasRight\": \"The code was right: the account is for {email}.\",\n \"withoutPassword\": \" Without one, you sign in with a code we email you.\",\n \"createAccount\": \"Create account\",\n \"codeToConfirm\": \"We email you a code to make sure the address is yours.\",\n \"emailCode\": \"Email me a code\",\n \"browseWithoutAccount\": \"Continue without an account\",\n \"staffTitle\": \"Staff sign-in\",\n \"staffUnavailable\": \"Staff of the team that runs this app cannot sign in as people here.\",\n \"signInAsPerson\": \"Sign in as a person\",\n \"forStaffOf\": \"For staff of {operator}, to help someone with this app.\",\n \"theirEmail\": \"Their email\",\n \"reason\": \"Reason\",\n \"reasonExample\": \"Ticket 4211: the invoice totals look wrong\",\n \"staffExplanation\": \"You sign in at {operator} with a passkey or a second step. The session is short, shows a banner, and cannot change their sign-in. The app's admins see who signed in as whom, and why.\",\n \"totpInstruction\": \"Enter the 6-digit code from your authenticator app.\",\n \"otpInstruction\": \"Enter the 6-digit code we emailed you. It works for 5 minutes.\",\n \"backupInstruction\": \"Enter one of the backup codes you saved when you set up the authenticator app. Each works once.\",\n \"twoFactorTitle\": \"Two-factor authentication\",\n \"twoFactorDescription\": \"One more step to sign in.\",\n \"codeToFinish\": \"We email you a code to finish signing in.\",\n \"trustBrowser\": \"Trust this browser\",\n \"trustBrowserFor\": \"Don't ask again in this browser for 30 days\",\n \"verify\": \"Verify\",\n \"useAuthenticator\": \"Use the authenticator app\",\n \"emailCodeInstead\": \"Email me a code instead\",\n \"useBackupCode\": \"Use a backup code\",\n \"admin\": \"Admin\"\n },\n \"auth/errors\": {\n \"tooManyRequests\": \"Too many attempts. Wait a minute and try again.\",\n \"passkeyClosed\": \"The passkey prompt closed before it finished. Try again.\",\n \"wrongEmailOrPassword\": \"The email or password is not right.\",\n \"wrongPassword\": \"The password is not right.\",\n \"wrongCode\": \"The code is not right.\",\n \"wrongOrExpiredCode\": \"The code is not right, or has expired. Ask for a new one.\",\n \"codeExpired\": \"The code has expired. Ask for a new one.\",\n \"tooManyCodes\": \"Too many wrong codes. Ask for a new one.\",\n \"wrongBackupCode\": \"The backup code is not right, or was used before.\",\n \"tooManyCodesSignIn\": \"Too many wrong codes. Sign in again.\",\n \"locked\": \"Too many wrong codes. Wait 15 minutes and try again.\",\n \"tooSlow\": \"This sign-in took too long. Sign in again.\",\n \"passkeyNotFound\": \"This passkey is not registered for an account here.\",\n \"passkeyFailed\": \"The passkey could not be checked. Try again.\",\n \"passkeyAdded\": \"This passkey is added already.\",\n \"notFresh\": \"For this change, sign out and sign in again first.\",\n \"staffPermissionMissing\": \"Your staff account has no permission to sign in as people here.\",\n \"staffNotStrong\": \"Sign in to your staff account with a passkey or a second step, then try again.\",\n \"staffStale\": \"Your staff sign-in is too old. Sign in to your staff account again.\",\n \"staffExpired\": \"This staff sign-in took too long or was used already. Start again.\",\n \"staffProviderFailed\": \"The staff sign-in did not go through at the provider. Try again.\",\n \"staffUserUnavailable\": \"There is no account with this address, or it is disabled.\",\n \"staffReasonRequired\": \"Say why you sign in as this person, in at least 10 characters.\",\n \"staffForbidden\": \"Staff sign-in is turned off for this app.\",\n \"untrustedCallback\": \"This page is not on an address the server trusts.\",\n \"staffFailed\": \"The staff sign-in did not go through. Try again.\",\n \"passwordLeaked\": \"This password appears in a known data breach. Choose a different one.\",\n \"signupDisabled\": \"No account here belongs to this {name} account. Ask an admin to add you, or sign in another way.\",\n \"notLinked\": \"Your {name} account is not linked to your account here. Sign in another way, then connect {name} on your account page.\",\n \"linkedToOther\": \"This {name} account is linked to someone else here already.\",\n \"couldNotLink\": \"Your {name} account could not be linked. Try again.\",\n \"accessDenied\": \"{name} did not let you in, or you cancelled.\",\n \"domainNotAllowed\": \"{name} signed you in with an address this app does not accept from it. Sign in another way.\",\n \"providerFailed\": \"Signing in with {name} did not go through. Try again.\"\n },\n \"calls\": {\n \"accept\": \"Accept\",\n \"decline\": \"Decline\",\n \"startCall\": \"Start call\",\n \"join\": \"Join\",\n \"inProgress\": \"Call in progress\",\n \"people\": \"{count, plural, one {# person} other {# people}}\",\n \"joinCall\": \"Join call\",\n \"leave\": \"Leave\",\n \"microphone\": \"Microphone\",\n \"camera\": \"Camera\",\n \"shareScreen\": \"Share screen\",\n \"stopSharing\": \"Stop sharing\",\n \"muted\": \"Muted\",\n \"you\": \"You\",\n \"alone\": \"You are the only one here\",\n \"connecting\": \"Joining…\",\n \"reconnecting\": \"Reconnecting…\",\n \"full\": \"This call is full\",\n \"removed\": \"You were removed from this call\",\n \"ended\": \"The call ended\",\n \"refused\": \"You cannot join this call\",\n \"unavailable\": \"The call cannot be reached now. Try again in a moment.\",\n \"callAgain\": \"Join again\",\n \"noMicrophone\": \"Your microphone is blocked: allow it in the browser to be heard.\",\n \"noCamera\": \"Your camera is blocked: allow it in the browser to be seen.\",\n \"noDevices\": \"No camera or microphone was found.\",\n \"cannotConnect\": \"Cannot connect to {name}\",\n \"poorConnection\": \"Poor connection\",\n \"goodConnection\": \"Good connection\",\n \"sharing\": \"{name} is sharing their screen\",\n \"youAreSharing\": \"You are sharing your screen\",\n \"speaking\": \"Speaking\",\n \"preview\": \"Your camera before you join\",\n \"guestName\": \"{name} (guest)\",\n \"denied\": \"Nobody in the call let you in\",\n \"waiting\": \"Waiting for someone in the call to let you in…\",\n \"askToJoin\": \"Ask to join\",\n \"someone\": \"Someone in the call\",\n \"guests\": \"Guests\",\n \"waitingGuest\": \"{name} is waiting to join\",\n \"admit\": \"Let in\",\n \"deny\": \"Turn away\",\n \"remove\": \"Remove\",\n \"revoke\": \"Revoke\",\n \"newLink\": \"Create guest link\",\n \"copyLink\": \"Copy link\",\n \"copied\": \"Copied\",\n \"guestLinks\": \"Guest links\",\n \"noLinks\": \"No guest link yet. Anyone with a link waits here until someone in the call lets them in.\",\n \"inLobby\": \"Waiting to join\",\n \"guestsInCall\": \"Guests in the call\",\n \"guestsMaySend\": \"Guests may send\",\n \"sendAll\": \"Everything\",\n \"sendCamera\": \"Camera and mic\",\n \"sendMicrophone\": \"Mic only\",\n \"linkUntil\": \"Until {until}\",\n \"linkUntilEnd\": \"Until the call ends\",\n \"linkLasts\": \"The link works\",\n \"forAnHour\": \"For an hour\",\n \"addressesVisible\": \"In a call between browsers, a guest and the people in the call can see each other’s network addresses.\",\n \"guestRefused\": \"This could not be done: the guest or link is gone, the call is full, or guest links are off.\",\n \"close\": \"Close\",\n \"yourName\": \"Your name\",\n \"guestIntro\": \"You are invited to a call. Give your name, check your microphone and camera, and someone in the call lets you in.\",\n \"continue\": \"Continue\",\n \"youLeft\": \"You left the call\"\n },\n \"carousel\": {\n \"photoOf\": \"Photo {index} of {count}\",\n \"previousPhoto\": \"Previous photo\",\n \"nextPhoto\": \"Next photo\"\n },\n \"chat\": {\n \"message\": \"Message\",\n \"send\": \"Send\",\n \"today\": \"Today\",\n \"yesterday\": \"Yesterday\",\n \"newMessages\": \"New messages\",\n \"loadEarlier\": \"Load earlier messages\"\n },\n \"compact-table\": {\n \"table\": \"Table\",\n \"noRows\": \"No rows.\",\n \"rows\": \"{count, plural, one {# row} other {# rows}}\",\n \"cutOff\": \", cut off at the limit\"\n },\n \"data-grid\": {\n \"unsortable\": \"This column can't be sorted\",\n \"columnMenu\": \"{header} column menu\",\n \"unpin\": \"Unpin\",\n \"pinToLeft\": \"Pin to left\",\n \"resizeColumn\": \"Resize {header} column\",\n \"selected\": \"{count} selected\",\n \"no\": \"No\",\n \"shownIn\": \"Shown in {zone}\",\n \"new\": \"New\",\n \"clearSelection\": \"Clear selection\",\n \"noRowsSelected\": \"No rows selected\",\n \"selectRow\": \"Select row {row}\",\n \"rowActions\": \"Row actions\",\n \"row\": \"row\",\n \"move\": \"Move {label}\",\n \"reorderInstructions\": \"To move a row, press Space on its handle, move it with the up and down arrow keys, and press Space again to drop it there. Escape puts it back.\",\n \"pickedUp\": \"Picked up {name}, row {row} of {rows}.\",\n \"isOver\": \"{name} is over row {row} of {rows}.\",\n \"droppedAt\": \"{name} was dropped at row {row} of {rows}.\",\n \"putBack\": \"{name} was put back.\",\n \"cancelled\": \"Moving {name} was cancelled. It is back at row {row}.\"\n },\n \"filter-panel\": {\n \"today\": \"Today\",\n \"yesterday\": \"Yesterday\",\n \"24h\": \"Last 24 hours\",\n \"7d\": \"Last 7 days\",\n \"30d\": \"Last 30 days\",\n \"90d\": \"Last 90 days\",\n \"month\": \"This month\",\n \"quarter\": \"This quarter\",\n \"year\": \"This year\",\n \"unknownPreset\": \"The server offers the preset \\\"{id}\\\", which this UI does not know\",\n \"unsupported\": \"{id} (unsupported)\",\n \"remove\": \"Remove {label}\",\n \"clearAll\": \"Clear all\",\n \"searchIn\": \"Search <lower>{label}</lower>\",\n \"noMatches\": \"No matches\",\n \"moreFilters\": \"More filters\",\n \"filters\": \"Filters\",\n \"date\": \"Date\",\n \"showOnly\": \"Show only\",\n \"minimum\": \"{label} minimum\",\n \"maximum\": \"{label} maximum\"\n },\n \"format\": {\n \"rows\": \"{count} {n, plural, one {row} other {rows}}\",\n \"aboutRows\": \"about {count} rows\",\n \"secondsAgo\": \"{count} s ago\",\n \"minutesAgo\": \"{count} min ago\",\n \"hoursAgo\": \"{count} h ago\",\n \"daysAgo\": \"{count} d ago\",\n \"justNow\": \"just now\"\n },\n \"forms\": {\n \"loading\": \"Loading\",\n \"notFound\": \"Not found\",\n \"noForm\": \"There is no form at this address.\",\n \"setByDatabase\": \"Set by the database\",\n \"notSent\": \"Not sent\",\n \"send\": \"Send\",\n \"checkTooLong\": \"The check that you are not a bot took too long; send the form again\"\n },\n \"inline-child-table\": {\n \"instructions\": \"To pick up a line, press space or enter on its drag handle. Use the up and down arrow keys to move it, space or enter to drop it, and escape to cancel. The row menu also has Move up and Move down.\",\n \"line\": \"line\",\n \"pickedUp\": \"Picked up {name}, line {place} of {count}.\",\n \"over\": \"{name} is over line {place} of {count}.\",\n \"dropped\": \"{name} was dropped at line {place} of {count}.\",\n \"droppedAtStart\": \"{name} was dropped where it started.\",\n \"cancelled\": \"Moving {name} was cancelled. It is back at line {place}.\",\n \"addLine\": \"Add line\",\n \"noLines\": \"No lines yet.\",\n \"moveUp\": \"Move up\",\n \"moveDown\": \"Move down\",\n \"removeLine\": \"Remove line\",\n \"dragToReorder\": \"Drag to reorder {name}\",\n \"actionsFor\": \"Actions for {name}\"\n },\n \"invitations\": {\n \"email\": \"Email\",\n \"invite\": \"Invite\",\n \"expired\": \"Expired\",\n \"until\": \"Until {date}\",\n \"sendAgain\": \"Send again\",\n \"revoke\": \"Revoke\",\n \"passLinkOn\": \"This app cannot send email, so pass this link on yourself. It works once, until the invitation expires: {link}\"\n },\n \"lists\": {\n \"showMore\": \"Show more\"\n },\n \"live\": {\n \"yes\": \"Yes\",\n \"no\": \"No\",\n \"shownIn\": \"Shown in {zone}\",\n \"fileMissing\": \"File missing\"\n },\n \"markdown\": {\n \"write\": \"Write\",\n \"preview\": \"Preview\",\n \"nothingToPreview\": \"Nothing to preview\"\n },\n \"mentions\": {\n \"peopleToMention\": \"People to mention\",\n \"noOneFound\": \"No one found\",\n \"couldNotSearch\": \"Could not search for people\"\n },\n \"notifications/bell\": {\n \"notifications\": \"Notifications\",\n \"notificationsUnread\": \"Notifications, {count} unread\",\n \"notificationsManyUnread\": \"Notifications, more than 99 unread\",\n \"markAllRead\": \"Mark all as read\",\n \"empty\": \"No notifications yet\",\n \"showMore\": \"Show more\",\n \"loadFailed\": \"Your notifications could not be loaded.\",\n \"tryAgain\": \"Try again\",\n \"unread\": \"Unread\",\n \"pushOff\": \"Get notifications on this device, even when the app is closed.\",\n \"turnOn\": \"Turn on\",\n \"pushOn\": \"Notifications are on for this device.\",\n \"turnOff\": \"Turn off\",\n \"pushBlocked\": \"Notifications are blocked on this device. To get them, allow notifications for this site in your browser or device settings.\"\n },\n \"organizations\": {\n \"organizations\": \"Organizations\",\n \"manageOrganizations\": \"Manage organizations\",\n \"organization\": \"Organization\",\n \"members\": \"Members\",\n \"invitations\": \"Invitations\",\n \"owner\": \"Owner\",\n \"admin\": \"Admin\",\n \"member\": \"Member\",\n \"loading\": \"Loading\",\n \"name\": \"Name\",\n \"slug\": \"Slug\",\n \"save\": \"Save\",\n \"cancel\": \"Cancel\",\n \"delete\": \"Delete\",\n \"remove\": \"Remove\",\n \"create\": \"Create\",\n \"current\": \"Current\",\n \"open\": \"Open\",\n \"allOrganizations\": \"All organizations\",\n \"allOrganizationsDescription\": \"Every organization in the app. Your global roles let you work in any of them, with what those roles allow there. Opening one you are not a member of is written to the audit log.\",\n \"findOrganization\": \"Find an organization\",\n \"nameOrSlug\": \"Name or slug\",\n \"cannotChangeRole\": \"You cannot give or take away this role\",\n \"makeAccountToJoin\": \"Make your account for {email} to join.\",\n \"makeAccount\": \"Make your account for {email}.\",\n \"yourName\": \"Your name\",\n \"password\": \"Password\",\n \"passwordOptional\": \"Password (optional, {length}+ characters)\",\n \"passwordRequired\": \"Password ({length}+ characters)\",\n \"createAndJoin\": \"Create account and join\",\n \"createYourAccount\": \"Create your account\",\n \"invalidLink\": \"This invitation link is not valid\",\n \"invitation\": \"Invitation\",\n \"goToApp\": \"Go to the app\",\n \"invitesToApp\": \"{inviter} invites you to join {app}.\",\n \"invitesTo\": \"{inviter} invites you to {organization} as {role}.\",\n \"invitesToWith\": \"{inviter} invites you to {organization} as {role}, with {roles}.\",\n \"join\": \"Join {name}\",\n \"hasAccount\": \"{email} has an account already: sign in with it.\",\n \"signOut\": \"Sign out\",\n \"signInAs\": \"Sign in as {email}\",\n \"signInAsToJoin\": \"Sign in as {email} to join\",\n \"otherAddress\": \"This invitation is for {invited}, and you are signed in as {signedIn}.\",\n \"signOutToAccept\": \"Sign out to accept it\",\n \"inviteSomeone\": \"Invite someone\",\n \"inviteDescription\": \"They get an email with a link to join, or to make an account first. You can give the app roles you hold, and those your roles grant.\",\n \"organizationRole\": \"Organization role\",\n \"peopleInvited\": \"People invited to {organization}.\",\n \"notAcceptedYet\": \"Not accepted yet\",\n \"sendingAgain\": \"Sending again gives a new link, which replaces the earlier one.\",\n \"nobodyWaiting\": \"Nobody is waiting.\",\n \"roleOf\": \"Organization role of {name}\",\n \"couldNotReadMembers\": \"Could not read the members\",\n \"whoWorks\": \"Who works in {organization}, and with which roles.\",\n \"membersDescription\": \"Owners and admins manage the organization; app roles decide what each member sees and does in the app.\",\n \"details\": \"Details\",\n \"detailsEditable\": \"The name people see, and the slug that names it in links.\",\n \"detailsReadOnly\": \"Owners and admins can change these.\",\n \"guestLinks\": \"Guest links to calls\",\n \"guestLinksDescription\": \"Someone in a call can share a link that lets a person from outside wait in its lobby and join that one call once let in. Turning guest links off revokes every link and takes every guest out at once. Owners and admins can change this.\",\n \"guestLinksAllowed\": \"Allow guest links\",\n \"handOver\": \"Hand over\",\n \"handOverDescription\": \"Make another member the owner. You stay as an admin.\",\n \"newOwner\": \"New owner\",\n \"chooseMember\": \"Choose a member\",\n \"deleteOrganization\": \"Delete organization\",\n \"deleteDescription\": \"Takes the organization and its members and invitations away. Its records must be deleted first.\",\n \"deleteTitle\": \"Delete {name}?\",\n \"deleteConfirm\": \"Type its name to confirm. This cannot be undone.\",\n \"organizationName\": \"Organization name\",\n \"leave\": \"Leave\",\n \"leaveOwner\": \"An organization keeps an owner: hand it over before you leave, unless it has another owner.\",\n \"leaveMember\": \"You stop being a member, and lose your roles here.\",\n \"leaveName\": \"Leave {name}\",\n \"noOrganization\": \"You do not work in an organization now. Choose one under Organizations.\",\n \"youAre\": \"You are {role} here.\",\n \"throughGlobalRoles\": \"You work here through your global roles, without being a member.\",\n \"newOrganization\": \"New organization\",\n \"newOrganizationDescription\": \"You become its owner, with every role, and work in it once it is made.\",\n \"invitationsForYou\": \"Invitations for you\",\n \"invitationsForYouDescription\": \"Accept one to become a member and work there.\",\n \"accept\": \"Accept\",\n \"anOrganization\": \"An organization\",\n \"noAppRoles\": \"no app roles\",\n \"until\": \"Until {date}\",\n \"organizationsSubtitle\": \"You work in one organization at a time; what you see follows from your roles there.\",\n \"yourOrganizations\": \"Your organizations\",\n \"memberOf\": \"The organizations you are a member of.\",\n \"notMember\": \"You are not a member of an organization yet.\",\n \"couldNotReadOrganizations\": \"Could not read your organizations\"\n },\n \"plugins\": {\n \"loading\": \"Loading\",\n \"pluginsOff\": \"Plugins off\",\n \"pluginOff\": \"The plugin {plugin} is off: {reason}.\",\n \"dismiss\": \"Dismiss\",\n \"answered\": \"its plugin.json answered {status}\",\n \"couldNotLoad\": \"it could not be loaded: {reason}\",\n \"notObject\": \"its plugin.json is not an object\",\n \"noName\": \"its plugin.json names no plugin\",\n \"noApi\": \"its plugin.json names no plugin API\",\n \"noVersions\": \"its plugin.json names no Protobase versions\",\n \"noModule\": \"its plugin.json names no module\",\n \"badStylesheet\": \"its plugin.json names a stylesheet that is no URL\",\n \"badVersion\": \"its plugin.json has a version that is no text\"\n },\n \"primitives\": {\n \"close\": \"Close\",\n \"loading\": \"Loading\",\n \"remove\": \"Remove {label}\"\n },\n \"record-view\": {\n \"savedDifferent\": \"{name} saved a different value\",\n \"example\": \"Example:\",\n \"savedThis\": \"saved this {ago}:\",\n \"keepMine\": \"Keep mine\",\n \"useTheirs\": \"Use theirs\",\n \"actions\": \"Actions\",\n \"saving\": \"Saving...\",\n \"savedAgo\": \"Saved {ago}\",\n \"notSavedRetrying\": \"Not saved, retrying\",\n \"lastEditedBy\": \"Last edited by\",\n \"lastUpdated\": \"Last updated {ago}\",\n \"viewing\": \"{count} viewing\",\n \"tabs\": \"Tabs\"\n },\n \"roles\": {\n \"couldNotReadRoles\": \"Could not read your roles\",\n \"couldNotSwitch\": \"Could not switch the role\"\n },\n \"side-panel\": {\n \"close\": \"Close\"\n },\n \"status\": {\n \"setStatus\": \"Set a status\",\n \"editStatus\": \"Edit status\",\n \"availability\": \"Availability\",\n \"automatic\": \"Automatic\",\n \"busy\": \"Busy\",\n \"doNotDisturb\": \"Do not disturb\",\n \"doNotDisturbHint\": \"You get no push notifications; they wait in the bell.\",\n \"statusText\": \"Status\",\n \"statusPlaceholder\": \"Having lunch\",\n \"clearsAfter\": \"Clear after\",\n \"never\": \"Never\",\n \"thirtyMinutes\": \"30 minutes\",\n \"oneHour\": \"1 hour\",\n \"fourHours\": \"4 hours\",\n \"today\": \"Today\",\n \"thisWeek\": \"This week\",\n \"custom\": \"Choose a date and time\",\n \"clearsAt\": \"Clears at\",\n \"pickTime\": \"Choose a date and time still to come\",\n \"save\": \"Save\",\n \"cancel\": \"Cancel\",\n \"clear\": \"Clear status\",\n \"couldNotSave\": \"Could not save your status\",\n \"until\": \"Until {time}\",\n \"online\": \"Online\",\n \"away\": \"Away\"\n },\n \"toasts\": {\n \"dismiss\": \"Dismiss\"\n },\n \"users\": {\n \"inviteSomeone\": \"Invite someone\",\n \"inviteDescription\": \"They get an email with a link to make their account, with the roles you tick.\",\n \"notAcceptedYet\": \"Not accepted yet\",\n \"sendingAgain\": \"Sending again gives a new link, which replaces the earlier one.\",\n \"nobodyWaiting\": \"Nobody is waiting.\",\n \"addAnAccount\": \"Add an account\",\n \"addDescription\": \"Makes the account at once, with the address counted as verified. Without a password, the person signs in another way this app allows, such as an emailed code.\",\n \"email\": \"Email\",\n \"name\": \"Name\",\n \"password\": \"Password\",\n \"passwordOptional\": \"Password (optional, {length}+ characters)\",\n \"addAccount\": \"Add account\",\n \"couldNotReadRoles\": \"Could not read the roles\",\n \"people\": \"People\",\n \"peopleDescription\": \"Everyone with an account. Roles decide what each sees and does; someone blocked cannot sign in, and is signed out at once.\",\n \"findSomeone\": \"Find someone\",\n \"emailAddress\": \"Email address\",\n \"keepOneRole\": \"Keep at least one role.\",\n \"blocked\": \"Blocked\",\n \"unblock\": \"Unblock\",\n \"block\": \"Block\"\n }\n}\n","{\n \"account\": {\n \"account\": \"Account\",\n \"noAccount\": \"Geen accountpagina\",\n \"noAccountDescription\": \"Deze app heeft geen accountpagina voor je.\",\n \"signInPolicy\": \"Inlogbeleid\",\n \"couldNotReadMethods\": \"Kon je inlogmethoden niet lezen\",\n \"couldNotReadProfile\": \"Kon je profiel niet lezen\",\n \"profile\": \"Profiel\",\n \"profileDescription\": \"Je naam zoals anderen die in deze app zien, en het adres waarmee je inlogt.\",\n \"email\": \"E-mail\",\n \"changeName\": \"Naam wijzigen\",\n \"changeNameDescription\": \"De naam die anderen zien bij je opmerkingen, wijzigingen en uitnodigingen.\",\n \"changeEmail\": \"E-mailadres wijzigen\",\n \"changeEmailDescription\": \"We mailen een code naar het nieuwe adres. Zodra je die hier invult, log je in met dat adres.\",\n \"newEmail\": \"Nieuw e-mailadres\",\n \"sendCode\": \"Code versturen\",\n \"codeSentTo\": \"Vul de code van 6 cijfers in die we naar {email} mailden. Die werkt 5 minuten. Heeft een ander account het adres, dan komt er geen code.\",\n \"code\": \"Code\",\n \"otherAddress\": \"Ander adres gebruiken\",\n \"theProvider\": \"de provider\",\n \"loading\": \"Laden\",\n \"backupCodes\": \"Back-upcodes\",\n \"copied\": \"Gekopieerd\",\n \"copy\": \"Kopiëren\",\n \"download\": \"Downloaden\",\n \"cancel\": \"Annuleren\",\n \"save\": \"Bewaren\",\n \"name\": \"Naam\",\n \"yourPassword\": \"Je wachtwoord\",\n \"passwordIsSet\": \"Log in met je e-mailadres en dit wachtwoord. Wijzigen vraagt het huidige.\",\n \"passwordNotSet\": \"Je logt nu in zonder wachtwoord. Stel er een in om ook met je e-mailadres en een wachtwoord in te loggen; je blijft overal ingelogd.\",\n \"passwordForbidden\": \"Je beheerder heeft wachtwoorden uitgezet voor deze app, dus je kunt er niet mee inloggen.\",\n \"passwordStaff\": \"Een medewerker die als iemand anders is ingelogd, kan diens wachtwoord niet wijzigen.\",\n \"passwordSaved\": \"Je wachtwoord is bewaard.\",\n \"changePassword\": \"Wachtwoord wijzigen\",\n \"setPassword\": \"Wachtwoord instellen\",\n \"currentPassword\": \"Huidig wachtwoord\",\n \"newPassword\": \"Nieuw wachtwoord\",\n \"repeatPassword\": \"Nieuw wachtwoord herhalen\",\n \"atLeast\": \"Minstens {length} tekens.\",\n \"useAtLeast\": \"Gebruik minstens {length} tekens.\",\n \"passwordTooLong\": \"Dat wachtwoord is te lang.\",\n \"passwordsDiffer\": \"De wachtwoorden zijn niet hetzelfde.\",\n \"continue\": \"Doorgaan\",\n \"on\": \"Aan\",\n \"off\": \"Uit\",\n \"optional\": \"Optioneel\",\n \"required\": \"Verplicht\",\n \"passkeys\": \"Passkeys\",\n \"passkey\": \"Passkey\",\n \"passkeysAllowed\": \"Log in met Face ID, Touch ID, Windows Hello, je telefoon of een beveiligingssleutel in plaats van een wachtwoord.\",\n \"passkeysRequired\": \"Deze app vraagt een passkey voor elk account. Log in met Face ID, Touch ID, Windows Hello, je telefoon of een beveiligingssleutel.\",\n \"passkeysForbidden\": \"Je beheerder heeft passkeys uitgezet voor deze app, dus je kunt er niet mee inloggen.\",\n \"addedOn\": \"Toegevoegd {date}\",\n \"addedEarlier\": \"Eerder toegevoegd\",\n \"synced\": \"Gesynchroniseerd op je apparaten\",\n \"oneDevice\": \"Op één apparaat\",\n \"rename\": \"Naam wijzigen\",\n \"remove\": \"Verwijderen\",\n \"keepLastPasskey\": \"Passkeys zijn verplicht: voeg er nog een toe voordat je deze verwijdert.\",\n \"addPasskey\": \"Passkey toevoegen\",\n \"renamePasskey\": \"Naam van passkey wijzigen\",\n \"renamePasskeyDescription\": \"Een naam die zegt waar deze passkey staat, zoals het apparaat of de wachtwoordbeheerder.\",\n \"removePasskey\": \"Passkey verwijderen?\",\n \"removePasskeyDescription\": \"Met {name} log je hier niet meer in. Die blijft op het apparaat tot je die daar verwijdert.\",\n \"thisPasskey\": \"deze passkey\",\n \"connectedAccounts\": \"Gekoppelde accounts\",\n \"connectedAccountsDescription\": \"Log hiermee in in plaats van met je wachtwoord. Koppelen vraagt je daar in te loggen; het adres daar kan anders zijn dan hier.\",\n \"connected\": \"Gekoppeld\",\n \"connect\": \"{name} koppelen\",\n \"connectAgain\": \"{name} opnieuw koppelen\",\n \"mailbox\": \"Mailbox\",\n \"mailboxDescription\": \"Mail die deze app voor je verstuurt, gaat uit vanuit je eigen mailbox. Koppelen vraagt je daar in te loggen en het versturen van mail toe te staan; je mail lezen kan de app niet.\",\n \"stopped\": \"Gestopt {time}\",\n \"ended\": \"Afgelopen {time}\",\n \"signedInUntil\": \"Ingelogd tot {time}\",\n \"devices\": \"Apparaten\",\n \"devicesDescription\": \"De browsers en apps die op je account zijn ingelogd. Log hier uit met Uitloggen in het menu.\",\n \"couldNotReadDevices\": \"Kon je apparaten niet lezen\",\n \"noDevices\": \"Er is geen apparaat ingelogd.\",\n \"thisDevice\": \"Dit apparaat\",\n \"browserOn\": \"{browser} op {system}\",\n \"aBrowserOn\": \"Een browser op {system}\",\n \"unknownDevice\": \"Onbekend apparaat\",\n \"staffOf\": \"Medewerker van {operator}\",\n \"staff\": \"Medewerker\",\n \"signedInFromUntil\": \"Ingelogd {from}, tot {until}\",\n \"signOut\": \"Uitloggen\",\n \"signOutDevice\": \"{name} uitloggen?\",\n \"signOutDeviceDescription\": \"Dat moet opnieuw inloggen om je account te gebruiken.\",\n \"signOutOthers\": \"Uitloggen op alle andere apparaten\",\n \"signOutOthersTitle\": \"Uitloggen op alle andere apparaten?\",\n \"signOutOthersDescription\": \"Elke andere browser en app die op je account is ingelogd, moet opnieuw inloggen. Dit apparaat blijft ingelogd.\",\n \"staffSignIns\": \"Inlogs van medewerkers\",\n \"staffSignInsDescription\": \"Elke keer dat een medewerker van {operator} hier als iemand anders inlogde, nieuwste eerst.\",\n \"noStaffSignIns\": \"Nog geen medewerker heeft als iemand anders ingelogd.\",\n \"as\": \"als\",\n \"qrCode\": \"QR-code voor je authenticator-app\",\n \"twoFactor\": \"Tweestapsverificatie\",\n \"twoFactorAllowed\": \"Vraag een tweede stap na je wachtwoord of een gemailde inlogcode: een code uit een authenticator-app, of een die je gemaild krijgt. Een passkey heeft geen tweede stap nodig.\",\n \"twoFactorRequired\": \"Deze app vraagt tweestapsverificatie voor elk account. Zet het aan om de app te blijven gebruiken.\",\n \"twoFactorForbidden\": \"Je beheerder heeft tweestapsverificatie uitgezet voor deze app.\",\n \"twoFactorOnWithApp\": \"Inloggen met een wachtwoord of een gemailde inlogcode vraagt ook een code uit je authenticator-app. Back-upcodes werken als je de app niet bij de hand hebt.\",\n \"twoFactorOnWithAppOrMail\": \"Inloggen met een wachtwoord of een gemailde inlogcode vraagt ook een code uit je authenticator-app, of een die je gemaild krijgt. Back-upcodes werken als je de app niet bij de hand hebt.\",\n \"twoFactorOnWithMail\": \"Inloggen met een wachtwoord of een gemailde inlogcode vraagt ook een code die je gemaild krijgt.\",\n \"turnOn\": \"Aanzetten\",\n \"turnOff\": \"Uitzetten\",\n \"addAuthenticator\": \"Authenticator-app toevoegen\",\n \"newBackupCodes\": \"Nieuwe back-upcodes\",\n \"twoFactorIsRequired\": \"Deze app vraagt tweestapsverificatie.\",\n \"turnOffTitle\": \"Tweestapsverificatie uitzetten?\",\n \"turnOffDescription\": \"Inloggen vraagt dan alleen je wachtwoord of een gemailde code. Je back-upcodes werken niet meer.\",\n \"newCodesTitle\": \"Nieuwe back-upcodes maken?\",\n \"newCodesDescription\": \"Je huidige back-upcodes werken niet meer, en je krijgt tien nieuwe.\",\n \"makeNewCodes\": \"Nieuwe codes maken\",\n \"yourNewCodes\": \"Je nieuwe back-upcodes\",\n \"keepCodesSafe\": \"Bewaar ze op een veilige plek: met elke code log je één keer in als je je telefoon kwijt bent. Ze worden niet opnieuw getoond.\",\n \"savedCodes\": \"Ik heb mijn back-upcodes bewaard\",\n \"authenticatorApp\": \"Authenticator-app\",\n \"authenticatorAppDescription\": \"Een code uit een app zoals Google Authenticator, Microsoft Authenticator of 1Password. Met back-upcodes.\",\n \"emailedCode\": \"Gemailde code\",\n \"emailedCodeDescription\": \"Een code naar je adres, elke keer dat je inlogt met een wachtwoord of een gemailde inlogcode.\",\n \"twoFactorIsOn\": \"Tweestapsverificatie staat aan. Bewaar deze back-upcodes op een veilige plek: met elke code log je één keer in als je je telefoon kwijt bent. Ze worden niet opnieuw getoond.\",\n \"scanCode\": \"Scan deze code met je authenticator-app en vul daarna de code van 6 cijfers in die de app toont.\",\n \"cannotScan\": \"Lukt scannen niet? Vul deze sleutel in de app in:\",\n \"codeFromApp\": \"Code uit de app\",\n \"secondStep\": \"Tweede stap\",\n \"password\": \"Wachtwoord\",\n \"passwordDescription\": \"Inloggen met het e-mailadres en een wachtwoord.\",\n \"emailedSignInCode\": \"Gemailde inlogcode\",\n \"emailedSignInCodeDescription\": \"Inloggen met een eenmalige code naar het adres van het account.\",\n \"passkeysPolicyDescription\": \"Inloggen met Face ID, Touch ID, Windows Hello, een telefoon of een beveiligingssleutel. Verplicht: iedereen voegt er een toe na het inloggen.\",\n \"twoFactorPolicyDescription\": \"Een code uit een authenticator-app, of een gemailde, na een wachtwoord of een gemailde inlogcode. Verplicht: iedereen zet het aan na het inloggen.\",\n \"staffAccess\": \"Medewerker logt in als iemand anders\",\n \"staffAccessDescription\": \"Het team dat deze app beheert, logt in als iemand om die te helpen, met een reden, voor een korte sessie. Elke keer staat in het logboek hieronder; met \\\"De persoon mailen\\\" krijgt die het ook te horen.\",\n \"emailThePerson\": \"De persoon mailen\",\n \"platformSignIn\": \"Inloggen via het platform\",\n \"platformSignInDescription\": \"De inlogprovider die het platform van deze app toevoegt, voor mensen die hier al een account hebben. Die maakt nooit accounts.\",\n \"platformSignInWith\": \"Inloggen met {provider} via het platform\",\n \"codeNeedsMail\": \"Vraagt mailinstellingen (PROTOBASE_SMTP_URL en PROTOBASE_MAIL_FROM): uit tot die zijn ingesteld.\",\n \"passwordStaysOn\": \"Zonder mailinstellingen blijft inloggen met een wachtwoord aan, zodat niemand wordt buitengesloten.\",\n \"staffNeedsMail\": \"Vraagt mailinstellingen (PROTOBASE_SMTP_URL en PROTOBASE_MAIL_FROM): medewerkers kunnen niet inloggen tot die zijn ingesteld.\",\n \"platformOff\": \"Uit zolang passkeys of tweestapsverificatie verplicht zijn: het slaat de tweede stap over.\",\n \"appliesAs\": \"Geldt voorlopig als {rule}.\",\n \"lastSaved\": \"Laatst bewaard op {time}.\",\n \"lastSavedBy\": \"Laatst bewaard door {name} op {time}.\",\n \"neverChanged\": \"Nooit gewijzigd: dit is de standaard van de app.\",\n \"reset\": \"Terugzetten\",\n \"couldNotReadStaffSignIns\": \"Kon de inlogs van medewerkers niet lezen\",\n \"couldNotReadPolicy\": \"Kon het inlogbeleid niet lezen\",\n \"policySaved\": \"Bewaard. Het geldt vanaf nu voor elke inlog.\",\n \"policySubtitle\": \"Hoe mensen inloggen bij deze app. Wie is ingelogd, houdt de sessie en krijgt binnen 15 minuten de vraag naar wat nieuw verplicht is.\",\n \"mcpAddress\": \"MCP-adres\",\n \"mcpAddressDescription\": \"Voeg dit adres toe aan een AI-assistent of code-editor die MCP spreekt, als aangepaste connector of externe MCP-server. Die opent deze app in je browser, waar je inlogt en hem toestaat; daarna werkt hij met jouw toegang.\",\n \"copyMcpAddress\": \"Het MCP-adres kopiëren\",\n \"addToClaude\": \"Toevoegen aan Claude\",\n \"deleteAccount\": \"Account verwijderen\",\n \"deleteAccountDescription\": \"Verwijder je account en log overal uit. Je kunt er daarna niet meer mee inloggen, en dit kan niet ongedaan worden gemaakt.\",\n \"deleteAccountStaff\": \"Een medewerker die als iemand anders is ingelogd, kan diens account niet verwijderen.\",\n \"deleteAccountQuestion\": \"Je account verwijderen?\",\n \"deleteAccountWarning\": \"Je account, je inlogmethoden en elk apparaat dat ermee is ingelogd worden verwijderd. Dit kan niet ongedaan worden gemaakt.\",\n \"deleteAccountPassword\": \"Vul je wachtwoord in om te bevestigen.\",\n \"deleteAccountConfirm\": \"Mijn account verwijderen\",\n \"deleteAccountLastAdmin\": \"Je bent de laatste beheerder van deze app. Maak eerst iemand anders beheerder.\",\n \"deleteAccountLocked\": \"Dit account is vergrendeld en kan dus niet worden verwijderd.\"\n },\n \"action-card\": {\n \"cancel\": \"Annuleren\"\n },\n \"activity-chart\": {\n \"day\": \"Dag\",\n \"week\": \"Week\"\n },\n \"app\": {\n \"notFound\": \"Niet gevonden\",\n \"noResource\": \"Er is geen onderdeel met de naam {name}.\",\n \"somethingWentWrong\": \"Er ging iets mis\",\n \"signInPolicy\": \"Inlogbeleid\",\n \"adminsOnly\": \"Alleen beheerders\",\n \"onlyAdminPolicy\": \"Alleen een beheerder kan wijzigen hoe mensen inloggen.\",\n \"ownersOnly\": \"Alleen eigenaren en beheerders\",\n \"onlyOwners\": \"Alleen de eigenaren en beheerders van de organisatie beheren de leden.\",\n \"chooseResource\": \"Kies een onderdeel\",\n \"pickFromSidebar\": \"Kies er een in de zijbalk.\",\n \"nothingHere\": \"Er is niets op dit adres.\",\n \"noPage\": \"Er is geen pagina met de naam {page}.\",\n \"assistant\": \"Assistent\",\n \"operationFailed\": \"Bewerking {index} ({label}) mislukte: {message} Er is niets bewaard.\",\n \"nothingSaved\": \"{message} Er is niets bewaard.\",\n \"admin\": \"Beheer\",\n \"new\": \"Nieuw\",\n \"loadingRecord\": \"Record laden\",\n \"noComponent\": \"Er is geen component geregistreerd als {component}. Exporteer die uit protobase.ui.tsx, of laad de plug-in die haar levert.\",\n \"choose\": \"Kiezen...\",\n \"fileMissing\": \"Het bestand ontbreekt in de opslag\",\n \"chooseFileFor\": \"Kies een bestand voor {label}\",\n \"notUploaded\": \"Niet geüpload\",\n \"uploadingLabel\": \"{label} uploaden\",\n \"uploading\": \"Uploaden… {percent}%\",\n \"replace\": \"Vervangen\",\n \"remove\": \"Verwijderen\",\n \"dropFile\": \"Zet hier een bestand neer of\",\n \"chooseFile\": \"Kies een bestand\",\n \"average\": \"{label}, gemiddeld\",\n \"pages\": \"Pagina's\",\n \"account\": \"Account\",\n \"sales\": \"Verkoop\",\n \"crm\": \"CRM\",\n \"catalog\": \"Catalogus\",\n \"inventory\": \"Voorraad\",\n \"hr\": \"HR\",\n \"cannotReach\": \"Kan {label} niet bereiken\",\n \"searchPlural\": \"{plural} zoeken\",\n \"couldNotLoadOptions\": \"Kon de keuzes niet laden\",\n \"noMatches\": \"Niets gevonden\",\n \"loading\": \"Laden\",\n \"leaveTitle\": \"Weggaan zonder te bewaren?\",\n \"leaveDescription\": \"Je hebt niet-bewaarde wijzigingen op deze pagina. Ze blijven in deze browser, en komen terug als je het record weer opent.\",\n \"leaveInputLost\": \"Je hebt niet-bewaarde wijzigingen op deze pagina. Ze gaan verloren als je weggaat.\",\n \"stay\": \"Blijven\",\n \"leave\": \"Weggaan\",\n \"reloadTitle\": \"Opnieuw laden zonder op te slaan?\",\n \"reloadDraftKept\": \"Er zijn niet-opgeslagen wijzigingen op deze pagina. Ze blijven bewaard in deze browser en komen terug zodra de pagina opnieuw is geladen.\",\n \"reloadInputLost\": \"Er zijn niet-opgeslagen wijzigingen op deze pagina. Ze gaan verloren als de pagina opnieuw wordt geladen.\",\n \"keepEditing\": \"Verder bewerken\",\n \"reload\": \"Opnieuw laden\",\n \"show\": \"{label} tonen\",\n \"hide\": \"{label} verbergen\",\n \"couldNotShow\": \"Kon {label} niet tonen\",\n \"setNewValue\": \"Nieuwe waarde instellen\",\n \"noAnswer\": \"Het antwoordde niet.\",\n \"signInRefused\": \"Het accepteerde je inlog niet: {message}\",\n \"loadingFrom\": \"Laden van {label}\",\n \"restWorks\": \"De rest van de app werkt zoals eerst.\",\n \"tryAgain\": \"Opnieuw proberen\",\n \"staffSession\": \"Sessie van een medewerker\",\n \"staffSignedIn\": \"{staff} is ingelogd als {user} tot {until}. Reden: {reason}\",\n \"stopStaffSession\": \"Sessie van medewerker stoppen\",\n \"open\": \"Openen\",\n \"openLabel\": \"{label} openen\"\n },\n \"app-shell\": {\n \"navigation\": \"Navigatie\",\n \"resources\": \"Onderdelen\",\n \"breadcrumb\": \"Kruimelpad\",\n \"tabs\": \"Tabbladen\",\n \"more\": \"Meer\",\n \"openNavigation\": \"Navigatie openen\",\n \"backTo\": \"Terug naar {label}\",\n \"search\": \"Zoeken\",\n \"closeSearch\": \"Zoeken sluiten\",\n \"clearSearch\": \"Zoekopdracht wissen\",\n \"globalSearch\": \"Overal zoeken\",\n \"searchResults\": \"Zoekresultaten\",\n \"searching\": \"Zoeken\",\n \"noMatches\": \"Niets gevonden voor “{query}”\",\n \"profileMenu\": \"Profielmenu\",\n \"organizations\": \"Organisaties\",\n \"roles\": \"Rollen\",\n \"signIn\": \"Inloggen\",\n \"signOut\": \"Uitloggen\",\n \"theme\": \"Thema\",\n \"light\": \"Licht\",\n \"dark\": \"Donker\",\n \"system\": \"Systeem\",\n \"recent\": \"Recente {plural}\",\n \"loading\": \"Laden...\",\n \"couldNotLoad\": \"Kon niet laden\",\n \"viewAll\": \"Alles bekijken\",\n \"couldNotSearch\": \"Kon niet zoeken in <lower>{label}</lower>\"\n },\n \"app/change-confirm\": {\n \"title\": \"{label} wijzigen?\",\n \"change\": \"Wijzigen\",\n \"cancel\": \"Annuleren\"\n },\n \"app/charts\": {\n \"notSet\": \"Niet ingevuld\",\n \"yes\": \"Ja\",\n \"no\": \"Nee\",\n \"nothingYet\": \"Nog niets om in een grafiek te zetten.\",\n \"couldNotLoad\": \"Kon de grafiek niet laden.\",\n \"weekOf\": \"Week van {day}\",\n \"other\": \"Overig\",\n \"records\": \"{count} records\"\n },\n \"app/comments\": {\n \"couldNotPost\": \"Kon de opmerking niet plaatsen\",\n \"comment\": \"Opmerking\",\n \"placeholder\": \"Schrijf een opmerking, @ om iemand te noemen\",\n \"couldNotLoad\": \"Kon de opmerkingen niet laden\",\n \"showEarlier\": \"Eerdere opmerkingen tonen\",\n \"noComments\": \"Nog geen opmerkingen.\"\n },\n \"app/confirm-sign-in\": {\n \"confirmTitle\": \"Bevestig dat jij het bent\",\n \"confirmWhy\": \"Dit tonen vraagt in de laatste {minutes} minuten een passkey of je authenticator-app.\",\n \"usePasskey\": \"Passkey gebruiken\",\n \"authenticatorCode\": \"Code uit je authenticator-app\",\n \"confirm\": \"Bevestigen\",\n \"nothingToConfirmWith\": \"Voeg eerst een passkey of een authenticator-app toe op je accountpagina.\"\n },\n \"app/create\": {\n \"title\": \"{noun} toevoegen\",\n \"subject\": \"{noun}\",\n \"submit\": \"{noun} aanmaken\",\n \"notCreated\": \"Niet aangemaakt\",\n \"notSaved\": \"Niet bewaard\",\n \"cancel\": \"Annuleren\",\n \"setByDatabase\": \"Ingevuld door de database\",\n \"details\": \"Details\",\n \"otherFields\": \"Overige velden\",\n \"notAllowed\": \"Niet toegestaan\",\n \"cannotCreate\": \"Je mag geen {plural} aanmaken.\"\n },\n \"app/delete\": {\n \"confirmTitle\": \"{title} verwijderen?\",\n \"confirmDescription\": \"{title} wordt verwijderd. Dit kan niet ongedaan worden gemaakt.\",\n \"cancel\": \"Annuleren\",\n \"delete\": \"Verwijderen\",\n \"changedTitle\": \"{title} is gewijzigd sinds je het opende\",\n \"changedDescription\": \"Iemand heeft dit record intussen bewaard. Bekijk wat er veranderde voordat je het verwijdert.\",\n \"reviewChanges\": \"Wijzigingen bekijken\",\n \"deleteAnyway\": \"Toch verwijderen\",\n \"noVisibleChanges\": \"Geen zichtbaar veld verschilt; het record is opnieuw bewaard met dezelfde waarden.\",\n \"bulkConfirmTitle\": \"{count, plural, one {Eén record verwijderen?} other {# <lower>{plural}</lower> verwijderen?}}\",\n \"bulkConfirmDescription\": \"Dit kan niet ongedaan worden gemaakt. Elk record wordt alleen verwijderd als het niet is gewijzigd sinds de lijst laadde; wat wel is gewijzigd, wordt gemeld en behouden.\",\n \"deleteCount\": \"{count} verwijderen\",\n \"deleting\": \"Verwijderen\",\n \"progress\": \"{done} van {total} klaar\",\n \"working\": \"Bezig\",\n \"deleted\": \"{count} verwijderd\",\n \"deletedOf\": \"{count} van {total} verwijderd\",\n \"kept\": \"{count, plural, one {# kon niet worden verwijderd en is behouden.} other {# konden niet worden verwijderd en zijn behouden.}}\",\n \"done\": \"Klaar\",\n \"deletedToast\": \"{title} verwijderd\",\n \"undo\": \"Ongedaan maken\",\n \"restored\": \"{title} teruggezet\",\n \"alreadyBack\": \"{title} is al terug\",\n \"couldNotRestore\": \"Kon {title} niet terugzetten\",\n \"couldNotDelete\": \"Kon {title} niet verwijderen\",\n \"changedSinceLoaded\": \"Gewijzigd sinds de lijst laadde, dus behouden.\",\n \"stillPointAt\": \"{plural} verwijzen hier nog naar.\",\n \"show\": \"{plural} tonen\"\n },\n \"app/displays\": {\n \"table\": \"Tabel\",\n \"display\": \"Weergave\",\n \"sort\": \"Sorteren\",\n \"ascending\": \"oplopend\",\n \"descending\": \"aflopend\",\n \"movedTo\": \"Verplaatst naar {column}\",\n \"orderChanged\": \"Volgorde gewijzigd\",\n \"stayedIn\": \"Opgeslagen, nog in {column}\",\n \"undo\": \"Ongedaan maken\",\n \"couldNotUndo\": \"Kon niet ongedaan maken\",\n \"couldNotLoadRows\": \"Kon de rijen niet laden\",\n \"noPlural\": \"Geen {plural}\",\n \"noValue\": \"Geen <lower>{label}</lower>\",\n \"somethingWrong\": \"Er ging iets mis\",\n \"showMore\": \"Meer tonen\",\n \"noDrop\": \"Er is geen bordactie geregistreerd als {drop}. Geef die in boardDrops in protobase.ui.tsx, of laad de plug-in die haar levert.\",\n \"noComponent\": \"Er is geen component geregistreerd als {component}. Exporteer die uit protobase.ui.tsx, of laad de plug-in die haar levert.\",\n \"pickedUp\": \"{title} opgepakt.\",\n \"isOver\": \"{title} is boven {over}.\",\n \"putBack\": \"{title} is teruggezet.\",\n \"wasMovedTo\": \"{title} is verplaatst naar {to}.\",\n \"cancelled\": \"Verplaatsen van {title} is geannuleerd.\",\n \"startsOn\": \"{title} begint op {day}.\",\n \"noColumn\": \"geen kolom\",\n \"noDay\": \"geen dag\",\n \"placeOf\": \"{column}, plaats {place} van {count}\",\n \"place\": \"{column}, plaats {place}\",\n \"boardAcross\": \"Druk op Spatie om een kaart naar een andere kolom te verplaatsen, verplaats haar met de pijltjestoetsen links en rechts, en druk nogmaals op Spatie om haar daar neer te zetten. Escape zet haar terug.\",\n \"boardAnywhere\": \"Druk op Spatie om een kaart te verplaatsen, verplaats haar met de pijltjestoetsen omhoog en omlaag binnen haar kolom en met links en rechts naar een andere kolom, en druk nogmaals op Spatie om haar daar neer te zetten. Escape zet haar terug.\",\n \"boardWithin\": \"Druk op Spatie om een kaart te verplaatsen, verplaats haar met de pijltjestoetsen omhoog en omlaag binnen haar kolom, en druk nogmaals op Spatie om haar daar neer te zetten. Escape zet haar terug.\",\n \"calendarInstructions\": \"Druk op Spatie om een gebeurtenis naar een andere dag te verplaatsen, verplaats haar een dag met de pijltjestoetsen links en rechts of een week met omhoog en omlaag, en druk nogmaals op Spatie om haar daar neer te zetten. Escape zet haar terug.\",\n \"timelineInstructions\": \"Druk op Spatie om een balk naar andere dagen te verplaatsen, verplaats hem een dag met de pijltjestoetsen links en rechts, en druk nogmaals op Spatie om hem daar neer te zetten. Escape zet hem terug.\",\n \"week\": \"Week\",\n \"month\": \"Maand\",\n \"quarter\": \"Kwartaal\",\n \"calendarScale\": \"Schaal van de kalender\",\n \"timelineScale\": \"Schaal van de tijdlijn\",\n \"previousPeriod\": \"{unit, select, week {Vorige week} month {Vorige maand} quarter {Vorig kwartaal} other {Vorige {unit}}}\",\n \"nextPeriod\": \"{unit, select, week {Volgende week} month {Volgende maand} quarter {Volgend kwartaal} other {Volgende {unit}}}\",\n \"today\": \"Vandaag\",\n \"capped\": \"De eerste {limit} records van {unit, select, week {deze week} month {deze maand} quarter {dit kwartaal} other {deze {unit}}} worden getoond. Verfijn het filter om de rest te zien.\",\n \"nothingIn\": \"Niets in {unit, select, week {deze week} month {deze maand} quarter {dit kwartaal} other {deze {unit}}}.\",\n \"noneMatch\": \"Geen {plural} gevonden.\",\n \"list\": \"Lijst\",\n \"showOneApproximate\": \"{singular} tonen, op een geschatte plek\",\n \"showOne\": \"{singular} tonen\",\n \"showMany\": \"{count} {plural} tonen\",\n \"showManyApproximate\": \"{count} {plural} tonen, op geschatte plekken\",\n \"showManySomeApproximate\": \"{count} {plural} tonen, {near} op geschatte plekken\",\n \"zoomIn\": \"Inzoomen op {count} {noun}\",\n \"needsStyle\": \"De kaartweergave heeft een kaartstijl nodig: stel PROTOBASE_MAP_STYLE_URL in.\",\n \"noneHere\": \"Geen {plural} in dit deel van de kaart.\",\n \"showAll\": \"Alles tonen\",\n \"chosen\": \"Gekozen {singular}\",\n \"approximatePosition\": \"Geschatte plek\",\n \"previous\": \"Vorige\",\n \"next\": \"Volgende\",\n \"close\": \"Sluiten\",\n \"features\": \"Kenmerken\",\n \"couldNotReorder\": \"Kon de volgorde niet wijzigen\",\n \"couldNotMoveTo\": \"Kon het niet naar {to} verplaatsen\",\n \"moreHidden\": \"+{count} meer\"\n },\n \"app/embedded-list\": {\n \"firstOf\": \"De eerste {shown} van {total}.\",\n \"firstOfAbout\": \"De eerste {shown} van ongeveer {total}.\",\n \"open\": \"{singular} openen\",\n \"edit\": \"{singular} bewerken\",\n \"viewAll\": \"Alles bekijken\",\n \"couldNotLoad\": \"Kon niet laden\",\n \"nothingYet\": \"Hier staat nog niets.\"\n },\n \"app/export\": {\n \"excel\": \"Excel (.xlsx)\",\n \"csv\": \"CSV\",\n \"asShown\": \"Zoals getoond\",\n \"rawValues\": \"Ruwe waarden\",\n \"shownHint\": \"Labels, datums en getallen zoals de lijst ze toont.\",\n \"rawHint\": \"Waarden zoals ze zijn opgeslagen, zoals sleutels en codes.\",\n \"counting\": \"Rijen tellen…\",\n \"moreThan\": \"meer dan 10.000 rijen\",\n \"columns\": \"Kolommen\",\n \"moveUp\": \"{label} omhoog\",\n \"moveDown\": \"{label} omlaag\",\n \"selectedRows\": \"{count} geselecteerde {rows, plural, one {rij} other {rijen}}\",\n \"rowsInList\": \"Rijen in de lijst\",\n \"selected\": \"Geselecteerd ({count})\",\n \"exportPlural\": \"{plural} exporteren\",\n \"cancel\": \"Annuleren\",\n \"export\": \"Exporteren\",\n \"format\": \"Formaat\",\n \"rows\": \"Rijen\",\n \"listHint\": \"Met de filters, zoekopdracht en sortering van de lijst.\",\n \"values\": \"Waarden\",\n \"exports\": \"Exporteert {rows}.\",\n \"overLimit\": \" Een bestand bevat hoogstens {limit} rijen; de rest blijft weg.\",\n \"exporting\": \"{plural} exporteren\",\n \"rowsExported\": \"Geëxporteerde rijen\",\n \"doneOf\": \"{done} van {total} rijen\",\n \"done\": \"{done} rijen\",\n \"exported\": \"{count} <lower>{plural}</lower> geëxporteerd\",\n \"truncated\": \"{name}: de eerste {count} rijen, zoveel als een bestand bevat.\",\n \"couldNotExport\": \"Kon <lower>{plural}</lower> niet exporteren\",\n \"cancelled\": \"De export is geannuleerd\",\n \"couldNotBuild\": \"De export kon niet worden gemaakt: {message}\",\n \"workbook\": \"Excel-werkmap\",\n \"csvFile\": \"CSV-bestand\"\n },\n \"app/field\": {\n \"atLeastCharacters\": \"{label} moet minstens {count} {n, plural, one {teken} other {tekens}} hebben\",\n \"atMostCharacters\": \"{label} mag hoogstens {count} {n, plural, one {teken} other {tekens}} hebben\",\n \"wholeNumberAtLeast\": \"Vul een geheel getal in van minstens {min}\",\n \"wholeNumberAtMost\": \"Vul een geheel getal in van hoogstens {max}\",\n \"wholeNumber\": \"Vul een geheel getal in\",\n \"number\": \"Vul een getal in\",\n \"wholeNumberBelow\": \"Vul een geheel getal in onder {below}\",\n \"decimalsBelow\": \"Vul een getal in met hoogstens {scale, plural, one {# decimaal} other {# decimalen}}, onder {below}\",\n \"date\": \"Vul een datum in\",\n \"timestamp\": \"Vul een datum en tijd in\",\n \"country\": \"Vul een landcode van twee letters in, zoals NL\",\n \"currency\": \"Vul een valutacode van drie letters in, zoals EUR\",\n \"uuid\": \"Vul een geldig ID in\",\n \"enum\": \"Kies een van de opties\",\n \"relation\": \"Kies een record\",\n \"json\": \"Vul geldige JSON in\",\n \"required\": \"{label} is verplicht\",\n \"checkField\": \"Controleer het gemarkeerde veld.\",\n \"checkFields\": \"Controleer {count} velden.\"\n },\n \"app/field-types\": {\n \"fieldType\": \"Het veldtype {name}\"\n },\n \"app/field-types/members\": {\n \"needsOrganizations\": \"Leden kiezen vraagt om organisaties: zet ze aan in de auth-configuratie.\",\n \"couldNotLoadMembers\": \"De leden konden niet worden geladen.\",\n \"unknownMember\": \"Onbekend lid\",\n \"searchMembers\": \"Leden zoeken\"\n },\n \"app/gallery\": {\n \"couldNotLoad\": \"Kon de foto’s niet laden\",\n \"showAll\": \"Alle {count} foto’s tonen\",\n \"showPhoto\": \"Foto {index} van {count} tonen\",\n \"details\": \"Gegevens\",\n \"holderDetails\": \"Gegevens van <lower>{singular}</lower>\",\n \"close\": \"Sluiten\",\n \"previousPhoto\": \"Vorige foto\",\n \"nextPhoto\": \"Volgende foto\",\n \"couldNotLoadOne\": \"Kon {singular} niet laden\",\n \"open\": \"{singular} openen\"\n },\n \"app/hand-order\": {\n \"done\": \"Klaar\",\n \"reorder\": \"Volgorde wijzigen\",\n \"couldNotLoad\": \"Kon niet laden\",\n \"nothingYet\": \"Hier staat nog niets.\",\n \"couldNotChange\": \"Kon de volgorde niet wijzigen\",\n \"orderChanged\": \"Volgorde gewijzigd\",\n \"undo\": \"Ongedaan maken\",\n \"couldNotUndo\": \"Kon niet ongedaan maken\",\n \"movedToPlace\": \"Verplaatst naar plaats {place}\",\n \"notMoved\": \"Op zijn plaats gelaten\",\n \"noRule\": \"Er is geen sleepregel geregistreerd als {rule}. Geef die in dropRules in protobase.ui.tsx, of laad de plug-in die haar levert.\"\n },\n \"app/history\": {\n \"create\": \"maakte dit\",\n \"update\": \"wijzigde\",\n \"delete\": \"verwijderde dit\",\n \"undelete\": \"zette dit terug\",\n \"database\": \"Database\",\n \"databaseRole\": \"Database ({role})\",\n \"changed\": \"gewijzigd\",\n \"changedThis\": \"wijzigde dit\",\n \"couldNotLoad\": \"Kon de geschiedenis niet laden\",\n \"noChanges\": \"Nog geen wijzigingen bewaard.\",\n \"showMore\": \"Meer tonen\"\n },\n \"app/import\": {\n \"import\": \"Importeren\",\n \"importPlural\": \"{plural} importeren\",\n \"couldNotReadFile\": \"Kon het bestand niet lezen\",\n \"couldNotCheck\": \"Kon de rijen niet controleren\",\n \"cancel\": \"Annuleren\",\n \"next\": \"Volgende\",\n \"checkRows\": \"Rijen controleren\",\n \"back\": \"Terug\",\n \"checking\": \"Controleren\",\n \"importRows\": \"{count} {rows, plural, one {rij} other {rijen}} importeren\",\n \"cancelImport\": \"Import annuleren\",\n \"done\": \"Klaar\",\n \"file\": \"Bestand\",\n \"fileHint\": \"Een Excel-werkmap (.xlsx) of een CSV-bestand bewaard als UTF-8. De eerste rij noemt de kolommen.\",\n \"reading\": \"{name} lezen…\",\n \"theFile\": \"het bestand\",\n \"sheet\": \"Werkblad\",\n \"create\": \"Maken\",\n \"update\": \"Bijwerken\",\n \"upsert\": \"Maken of bijwerken\",\n \"createHint\": \"Elke rij maakt een record.\",\n \"updateHint\": \"Elke rij werkt het record bij dat haar waarde vindt; een rij die er geen vindt, wordt niet geïmporteerd.\",\n \"upsertHint\": \"Elke rij werkt het record bij dat haar waarde vindt, of maakt er een als ze er geen vindt.\",\n \"doNotImport\": \"Niet importeren\",\n \"rows\": \"Rijen\",\n \"whatEachRowDoes\": \"Wat elke rij doet\",\n \"findBy\": \"Records vinden op\",\n \"chooseField\": \"Kies een veld\",\n \"findByHint\": \"Een veld dat geen twee records delen, zoals de sleutel of een e-mailadres.\",\n \"foundInColumn\": \"Gevonden in kolom\",\n \"chooseColumn\": \"Kies een kolom\",\n \"numbers\": \"Getallen\",\n \"dates\": \"Datums\",\n \"dayFirst\": \"Dag eerst (31/12/2026)\",\n \"monthFirst\": \"Maand eerst (12/31/2026)\",\n \"datesHint\": \"Datums geschreven als 2026-12-31 lezen hoe dan ook hetzelfde. Tijden zonder zone zijn in je eigen tijd.\",\n \"requiredMarked\": \"Nieuwe records hebben de velden met * nodig.\",\n \"columns\": \"Kolommen\",\n \"emptyInFirstRows\": \"Leeg in de eerste rijen\",\n \"field\": \"Veld\",\n \"fieldFor\": \"Veld voor {name}\",\n \"foundBy\": \"Gevonden op\",\n \"pluralFoundBy\": \"{plural} gevonden op\",\n \"noColumnFills\": \"Geen kolom vult {fields}, wat nieuwe records nodig hebben.\",\n \"rowsNotImported\": \"Niet geïmporteerde rijen\",\n \"rowProblems\": \"Rij {line}:\",\n \"andMore\": \"En nog {count} rijen, allemaal in het bestand.\",\n \"checkingRows\": \"Rijen controleren… {count} gelezen\",\n \"check\": \"Controle\",\n \"toCreate\": \"Te maken\",\n \"toUpdate\": \"Bij te werken\",\n \"withProblems\": \"Met problemen\",\n \"firstRows\": \"Eerste rijen\",\n \"row\": \"Rij\",\n \"problemRows\": \"Rijen met problemen, die worden overgeslagen\",\n \"download\": \"Downloaden\",\n \"batches\": \"Rijen worden bewaard in groepen van {size}. Annuleren, of een fout, houdt de groepen die al bewaard zijn; een rij die de server weigert, wordt vermeld en de andere worden bewaard.\",\n \"stopping\": \"Stoppen na deze groep…\",\n \"saving\": \"Rijen bewaren…\",\n \"rowsSaved\": \"Bewaarde rijen\",\n \"stopped\": \"De import is gestopt. De rijen die hieronder zijn geteld, zijn bewaard.\",\n \"cancelled\": \"Geannuleerd. De rijen die hieronder zijn geteld, zijn bewaard.\",\n \"summary\": \"Samenvatting van de import\",\n \"created\": \"Gemaakt\",\n \"updated\": \"Bijgewerkt\",\n \"skipped\": \"Overgeslagen\",\n \"failed\": \"Mislukt\",\n \"notWrittenHint\": \"Overgeslagen rijen hadden problemen in het bestand; de mislukte weigerde de server. Het bestand bevat elke rij met de reden, om te verbeteren en opnieuw te importeren.\",\n \"notImportedFile\": \"{name} - niet geïmporteerd.csv\",\n \"line\": \"Regel\",\n \"problems\": \"Problemen\",\n \"notNumber\": \"{cell} is geen getal\",\n \"notWholeNumber\": \"{cell} is geen geheel getal\",\n \"tooLarge\": \"{cell} is te groot\",\n \"notBoolean\": \"{cell} is niet waar of onwaar (true, false, yes, no, 1 of 0)\",\n \"notDate\": \"{cell} is geen datum (2026-04-03 of {dayFirst, select, true {dag/maand/jaar} other {maand/dag/jaar}})\",\n \"hasTime\": \"{cell} heeft een tijd van de dag; het veld bevat een datum\",\n \"severalValues\": \"{cell} past bij meer dan één waarde: {values}\",\n \"notOneOf\": \"{cell} is niet een van {values}\",\n \"notText\": \"{cell} is waar of onwaar, geen tekst\",\n \"emptyRequired\": \"is leeg, en is verplicht\",\n \"noneHas\": \"geen <lower>{singular}</lower> heeft {named}\",\n \"severalHave\": \"{count} <lower>{plural}</lower> hebben {named}\",\n \"notOneRecord\": \"Niet één record: {found}\",\n \"nothingToUpdate\": \"Niets om bij te werken: {found}\",\n \"fileNotUtf8\": \"Het bestand is geen UTF-8-tekst. Bewaar het als \\\"CSV UTF-8\\\" en kies het opnieuw.\",\n \"noSheets\": \"De werkmap heeft geen werkbladen\",\n \"missingSheetPart\": \"De werkmap noemt een werkblad dat er niet in zit\",\n \"notZip\": \"Het bestand is geen Excel-werkmap (.xlsx): het is geen ZIP-archief\",\n \"zip64\": \"De werkmap is te groot om te lezen: het is een ZIP64-archief\",\n \"compression\": \"Het deel {part} van de werkmap is gecomprimeerd op een manier die niet kan worden gelezen (methode {method})\",\n \"notWorkbook\": \"Het bestand is geen Excel-werkmap (.xlsx): het heeft geen {part}\",\n \"noSheetCalled\": \"De werkmap heeft geen werkblad met de naam {name}\",\n \"unreadable\": \"Het bestand kon niet worden gelezen\",\n \"column\": \"Kolom {letters}\"\n },\n \"app/list\": {\n \"noList\": \"Er is geen lijst met de naam {name}.\",\n \"searchPlural\": \"Zoeken in <lower>{plural}</lower>\",\n \"search\": \"Zoeken\",\n \"sort\": \"Sorteren\",\n \"filters\": \"Filters\",\n \"filtersCount\": \"Filters ({count})\",\n \"newRecord\": \"{singular} toevoegen\",\n \"export\": \"Exporteren\",\n \"openRecord\": \"{singular} openen\",\n \"delete\": \"Verwijderen\",\n \"exportCount\": \"{count} exporteren\",\n \"deleteCount\": \"{count} verwijderen\",\n \"actionCount\": \"{label} ({count})\",\n \"dragToSort\": \"Sleep een rij aan de greep om hem te verplaatsen. Elke verplaatsing wordt bewaard zodra je loslaat.\",\n \"unreadableFilter\": \"Het filter in het adres kon niet worden gelezen\",\n \"couldNotLoadRows\": \"Kon de rijen niet laden\",\n \"created\": \"{plural} aangemaakt\",\n \"noMatchSearch\": \"Geen <lower>{plural}</lower> gevonden voor “{search}”.\",\n \"noMatchFilters\": \"Geen <lower>{plural}</lower> gevonden met deze filters.\",\n \"noMatch\": \"Geen <lower>{plural}</lower> gevonden.\",\n \"noneYet\": \"Nog geen <lower>{plural}</lower>.\",\n \"clearSearch\": \"Zoekopdracht wissen\",\n \"clearFilters\": \"Filters wissen\"\n },\n \"app/list-edit\": {\n \"changedBySomeoneElse\": \"Gewijzigd door iemand anders\",\n \"couldNotSave\": \"Kon niet bewaren\"\n },\n \"app/live-update\": {\n \"holdTitle\": \"De app wordt bijgewerkt\",\n \"holdLine\": \"De nieuwe versie wordt gedownload. De app opent die zo.\"\n },\n \"app/map\": {\n \"mapLayer\": \"Kaartlaag\",\n \"map\": \"Kaart\"\n },\n \"app/meta-gate\": {\n \"loading\": \"Laden\",\n \"cannotReach\": \"De API is niet bereikbaar\",\n \"noAnswer\": \"De server gaf geen antwoord. Draait hij?\"\n },\n \"app/new-version\": {\n \"title\": \"Deze app is bijgewerkt\",\n \"description\": \"Laad de pagina opnieuw voor de nieuwe versie, wanneer het uitkomt.\",\n \"reload\": \"Opnieuw laden\",\n \"reloadPage\": \"Opnieuw laden\",\n \"reloadPageHint\": \"Opnieuw laden om de nieuwe versie te gebruiken\",\n \"bannerTitle\": \"{app} bijgewerkt\",\n \"bannerLine\": \"Sla je werk op en klik hier om te herladen. Tot dan kunnen er fouten optreden.\"\n },\n \"app/pages\": {\n \"notFound\": \"Niet gevonden\",\n \"noPage\": \"Er is geen pagina met de naam {page}.\",\n \"tabs\": \"Tabbladen\",\n \"noTab\": \"Deze pagina heeft geen tabblad met de naam {name}.\",\n \"cancel\": \"Annuleren\",\n \"couldNotDraw\": \"{name} kon niet worden getekend.\",\n \"noComponent\": \"Er is geen component geregistreerd als {component}. Exporteer die uit protobase.ui.tsx, of laad de plug-in die haar levert.\",\n \"unknownBlock\": \"{type} is geen blok dat deze versie van de app kent.\",\n \"somethingWrong\": \"Er ging iets mis\",\n \"needsRecord\": \"Vraagt een record\",\n \"cannotChange\": \"Je kunt dit record niet wijzigen\",\n \"cannotDelete\": \"Je kunt dit record niet verwijderen\",\n \"doesNotApply\": \"Geldt niet voor dit record\",\n \"noHandler\": \"De app heeft geen handler voor \\\"{name}\\\"\",\n \"noInputComponent\": \"De app heeft geen component \\\"{component}\\\" voor invoer \\\"{input}\\\"\",\n \"done\": \"{label}: klaar\",\n \"doneOn\": \"{label}: klaar voor {done}{skipped, plural, =0 {} other {, # overgeslagen waarvoor het niet geldt}}{failed, plural, =0 {} other {, mislukt voor #}}\",\n \"failed\": \"{label} mislukt\",\n \"noAction\": \"Geen actie \\\"{name}\\\"\",\n \"couldNotLoad\": \"Kon niet laden\",\n \"nothingYet\": \"Hier staat nog niets.\",\n \"saved\": \"{label}: bewaard\",\n \"create\": \"Maken\",\n \"save\": \"Bewaren\",\n \"notSaved\": \"Niet bewaard\",\n \"settings\": \"Instellingen\",\n \"couldNotCount\": \"Kon niet tellen\",\n \"required\": \"Verplicht\",\n \"wholeNumber\": \"Een geheel getal\",\n \"number\": \"Een getal\",\n \"dateFormat\": \"Een datum als JJJJ-MM-DD\",\n \"atMost\": \"Hoogstens {max} tekens\"\n },\n \"app/rank-after\": {\n \"dependsOn\": \"{record} hangt af van {other}.\"\n },\n \"app/record\": {\n \"details\": \"Details\",\n \"history\": \"Geschiedenis\",\n \"comments\": \"Opmerkingen\",\n \"summary\": \"Overzicht\",\n \"loading\": \"Laden\",\n \"fetching\": \"Het record wordt opgehaald.\",\n \"noRecord\": \"Dit record bestaat niet, of je mag het niet zien.\",\n \"openingElsewhere\": \"Het record wordt in zijn organisatie geopend.\",\n \"couldNotLoad\": \"Kon het record niet laden\",\n \"someoneElse\": \"Iemand anders\",\n \"justNow\": \"zojuist\",\n \"saved\": \"Bewaard\",\n \"save\": \"Bewaren\",\n \"cancel\": \"Annuleren\",\n \"unsavedChanges\": \"Niet bewaarde wijzigingen\",\n \"notSaved\": \"Niet bewaard\",\n \"linesChanged\": \"De regels zijn door iemand anders gewijzigd\",\n \"linesReloaded\": \"De regels zijn opnieuw geladen. Je nieuwe volgorde is behouden: bewaar opnieuw om hem toe te passen.\",\n \"unsavedKept\": \"Je hebt niet bewaarde wijzigingen in dit record.\",\n \"continueEditing\": \"Verder bewerken\",\n \"discard\": \"Weggooien\",\n \"unsavedRestored\": \"Je niet bewaarde wijzigingen zijn teruggezet.\",\n \"keep\": \"Houden\",\n \"savingSubject\": \"{subject} bewaren...\",\n \"subjectSaved\": \"{subject} bewaard\",\n \"changedBySomeoneElse\": \"Gewijzigd door iemand anders\",\n \"couldNotSave\": \"Kon niet bewaren\",\n \"recordActions\": \"Recordacties\",\n \"edit\": \"Bewerken\",\n \"delete\": \"Verwijderen\",\n \"nothingYet\": \"Hier staat nog niets.\",\n \"couldNotLoadRelated\": \"Kon niet laden\",\n \"relatedRecords\": \"Gerelateerde records\",\n \"lineNumber\": \"Regel {place}\",\n \"lineField\": \"{label}, regel {place}\",\n \"tooManyLines\": \"Dit record heeft meer dan {limit} regels, dus ze staan hier alleen ter inzage.\"\n },\n \"app/record-chart\": {\n \"range\": \"Periode\",\n \"hour\": \"Uur\",\n \"day\": \"Dag\",\n \"week\": \"Week\",\n \"measure\": \"Per interval\",\n \"average\": \"Gemiddelde\",\n \"maximum\": \"Maximum\",\n \"noSamples\": \"Geen metingen in deze periode.\",\n \"couldNotLoad\": \"Kon de grafiek niet laden.\"\n },\n \"app/record-row\": {\n \"couldNotLoad\": \"Kon niet laden\",\n \"noneMatch\": \"Geen {plural} gevonden.\",\n \"viewAll\": \"Alles bekijken\",\n \"new\": \"Nieuw\",\n \"previous\": \"Terug in {label}\",\n \"next\": \"Verder in {label}\",\n \"couldNotLoadYour\": \"Kon je {plural} niet laden\",\n \"noneYet\": \"Nog geen {plural}.\"\n },\n \"app/related-cards\": {\n \"showMore\": \"Meer tonen\",\n \"showLess\": \"Minder tonen\",\n \"couldNotLoad\": \"Kon niet laden\",\n \"nothingYet\": \"Hier staat nog niets.\"\n },\n \"app/related-dots\": {\n \"none\": \"Geen {plural}\"\n },\n \"app/runtime\": {\n \"immediate\": \"Werkt bij zodra er een release is\",\n \"weekly\": \"Werkt elke week op een vast moment bij\",\n \"scheduled\": \"Werkt bij op het moment dat voor deze release is ingesteld\",\n \"manual\": \"Werkt alleen bij als erom wordt gevraagd\",\n \"job\": \"De update voorbereiden\",\n \"build\": \"Bouwen\",\n \"updatingNow\": \"Nu aan het bijwerken\",\n \"started\": \"{stage}, begonnen {ago}\",\n \"nextOn\": \"{policy}: volgende op {when}\",\n \"succeeded\": \"Bijgewerkt naar {version} op {when}\",\n \"unchanged\": \"De update naar {version} op {when} veranderde niets\",\n \"failed\": \"De update naar {version} mislukte op {when}\",\n \"alreadyLatest\": \"Al op de nieuwste versie, of er loopt een update.\",\n \"onlyAdmin\": \"Alleen een beheerder kan de runtime bijwerken.\",\n \"couldNotStart\": \"De update kon niet worden gestart. Probeer het later opnieuw.\",\n \"runtimeUpdate\": \"Runtime-update\",\n \"close\": \"Sluiten\",\n \"updating\": \"Bijwerken…\",\n \"updateNow\": \"Nu bijwerken\",\n \"currentVersion\": \"Huidige versie\",\n \"latestVersion\": \"Nieuwste versie\",\n \"checkFailed\": \"De status kon niet opnieuw worden gecontroleerd; dit is de laatst gelezen.\",\n \"updateAvailable\": \"Update beschikbaar\",\n \"update\": \"Bijwerken\"\n },\n \"app/saved\": {\n \"favorite\": \"Favoriet\",\n \"couldNotLoadYour\": \"Kon je {plural} niet laden\",\n \"noneYet\": \"Nog geen {plural}.\",\n \"somethingWrong\": \"Er ging iets mis\",\n \"couldNotTakeOff\": \"Kon het niet weghalen\",\n \"couldNotSave\": \"Kon het niet bewaren\"\n },\n \"app/search\": {\n \"search\": \"Zoeken\",\n \"searchOne\": \"Zoek in {name}\",\n \"searchTwo\": \"Zoek in {first} en {second}\",\n \"searchMore\": \"Zoek in {first}, {second} en meer\",\n \"goTo\": \"Ga naar\",\n \"create\": \"Maken\"\n },\n \"app/searches\": {\n \"saveSearch\": \"Zoekopdracht bewaren\",\n \"saveAsNew\": \"Als extra {noun} bewaren\",\n \"updateName\": \"{name} bijwerken\",\n \"updateNameQuestion\": \"{name} bijwerken?\",\n \"updateNounQuestion\": \"{noun} bijwerken?\",\n \"couldNotLoadYour\": \"Kon je {plural} niet laden\",\n \"noneYet\": \"Nog geen {plural}.\",\n \"somethingWrong\": \"Er ging iets mis\",\n \"couldNotRename\": \"Kon de zoekopdracht niet hernoemen\",\n \"renameTitle\": \"{title} hernoemen\",\n \"deleteTitle\": \"{title} verwijderen\",\n \"unreadableFilter\": \"Een filter dat niet kan worden gelezen\",\n \"notFound\": \"Niet gevonden\",\n \"noResource\": \"Er is geen onderdeel met de naam {resource}.\",\n \"noSavedYet\": \"Nog geen {plural}. Filter de {list} en bewaar de zoekopdracht.\",\n \"on\": \"Aan\",\n \"off\": \"Uit\",\n \"saved\": \"{title} bewaard\",\n \"couldNotChange\": \"Kon de zoekopdracht niet wijzigen\",\n \"asMany\": \"Evenveel {plural}\",\n \"more\": \"{count} {noun} meer\",\n \"fewer\": \"{count} {noun} minder\",\n \"cancel\": \"Annuleren\",\n \"save\": \"Bewaren\",\n \"optional\": \"Optioneel\",\n \"added\": \"Erbij\",\n \"removed\": \"Eraf\",\n \"changed\": \"Gewijzigd\",\n \"filterChanges\": \"Wijzigingen in het filter\",\n \"firstOf\": \"De eerste {limit} van {total}.\",\n \"noPlural\": \"Geen {plural}.\",\n \"update\": \"Bijwerken\",\n \"addedRemoved\": \"{added} erbij, {removed} eraf\",\n \"searchSaved\": \"Zoekopdracht bewaard\",\n \"openPlural\": \"{plural} openen\",\n \"couldNotSave\": \"Kon de zoekopdracht niet bewaren\",\n \"couldNotTakeOff\": \"Kon de zoekopdracht niet weghalen\",\n \"searchUpdated\": \"Zoekopdracht bijgewerkt\",\n \"couldNotUpdate\": \"Kon de zoekopdracht niet bijwerken\",\n \"noneMatch\": \"Geen {plural} gevonden.\",\n \"noNew\": \"Geen nieuwe {plural} sinds je laatst keek.\",\n \"viewAll\": \"Alle resultaten bekijken\",\n \"filters\": \"Filters\"\n },\n \"assistant-dock\": {\n \"askQuestion\": \"Stel een vraag...\",\n \"assistant\": \"Assistent\",\n \"reconnecting\": \"Opnieuw verbinden...\",\n \"empty\": \"Stel een vraag over deze app of de gegevens ervan.\",\n \"noAnswer\": \"De assistent antwoordde niet\",\n \"backendNoAnswer\": \"De backend van de assistent antwoordde niet\",\n \"couldNotDraw\": \"Dit kon niet worden getekend.\",\n \"cannotShowLive\": \"Deze versie van de app kan dit niet live tonen.\"\n },\n \"auth\": {\n \"loading\": \"Laden\",\n \"cannotReach\": \"Kan de server niet bereiken: {message}\",\n \"tryAgain\": \"Opnieuw proberen\",\n \"passwordChanged\": \"Je wachtwoord is gewijzigd. Log in met het nieuwe.\",\n \"noAnswer\": \"De server antwoordde niet\",\n \"code\": \"Code\",\n \"backupCode\": \"Back-upcode\",\n \"email\": \"E-mailadres\",\n \"password\": \"Wachtwoord\",\n \"passwordOptional\": \"Wachtwoord (optioneel)\",\n \"signIn\": \"Inloggen\",\n \"signOut\": \"Uitloggen\",\n \"continue\": \"Doorgaan\",\n \"backToSignIn\": \"Terug naar inloggen\",\n \"useAnotherAddress\": \"Een ander adres gebruiken\",\n \"checkEmail\": \"Kijk in je e-mail\",\n \"newCodeSent\": \"Er is een nieuwe code onderweg. Alleen de nieuwste werkt.\",\n \"sendNewCode\": \"Nieuwe code sturen\",\n \"sendNewCodeIn\": \"Nieuwe code sturen over {seconds}s\",\n \"signInCodeDescription\": \"Vul de code in die we stuurden om in te loggen.\",\n \"signInCodeSent\": \"Als {email} een account heeft, is er een code van 6 cijfers onderweg. Die werkt 5 minuten, één keer.\",\n \"signUpCodeDescription\": \"Vul de code in die we stuurden om je account te maken.\",\n \"signUpCodeSent\": \"Er is een code van 6 cijfers onderweg naar {email}. Die werkt 5 minuten, één keer. Heeft het adres al een account, dan staat dat in de e-mail.\",\n \"noAdminTitle\": \"Nog geen beheerder\",\n \"noAdminDescription\": \"Deze Protobase heeft geen gebruikers om mee in te loggen.\",\n \"noAdminExplanation\": \"Voer dit uit in de terminal waar Protobase draait en laad de pagina daarna opnieuw. De eerste beheerder wordt op de server gemaakt, niet in de browser, zodat niemand anders een nieuwe URL kan opeisen.\",\n \"copyCommand\": \"Opdracht kopiëren\",\n \"firstAdminExplanation\": \"De eerste gebruiker wordt in de Protobase Cloud-console toegevoegd, niet in de browser, zodat niemand anders een nieuwe URL kan opeisen. Voeg jezelf daar toe en laad de pagina daarna opnieuw.\",\n \"firstAdminLink\": \"Voeg je eerste gebruiker toe in de Protobase Cloud-console\",\n \"reload\": \"Opnieuw laden\",\n \"tooManyRequests\": \"Te veel verzoeken. Wacht een minuut en probeer het opnieuw.\",\n \"tooManyAttempts\": \"Te veel pogingen. Wacht een minuut en probeer het opnieuw.\",\n \"resetTitle\": \"Je wachtwoord herstellen\",\n \"resetDescription\": \"We mailen je een link om een nieuw te kiezen.\",\n \"sendResetLink\": \"Herstellink sturen\",\n \"resetSent\": \"Als {email} een account heeft, is er een e-mail onderweg met een link om een nieuw wachtwoord te kiezen. De link werkt één keer, een beperkte tijd.\",\n \"linkExpiredTitle\": \"Deze link werkt niet meer\",\n \"linkExpiredExplanation\": \"Een herstellink werkt één keer, een beperkte tijd. Vraag een nieuwe aan om je wachtwoord te kiezen.\",\n \"sendNewLink\": \"Nieuwe link sturen\",\n \"passwordsDiffer\": \"De wachtwoorden zijn niet hetzelfde.\",\n \"choosePassword\": \"Kies een nieuw wachtwoord\",\n \"atLeast\": \"Minstens {length} tekens.\",\n \"useAtLeast\": \"Gebruik minstens {length} tekens.\",\n \"passwordTooLong\": \"Dat wachtwoord is te lang.\",\n \"newPassword\": \"Nieuw wachtwoord\",\n \"repeatPassword\": \"Nieuw wachtwoord herhalen\",\n \"setPassword\": \"Nieuw wachtwoord instellen\",\n \"signingInWith\": \"Inloggen met {name}\",\n \"takingYouTo\": \"Je gaat naar {name}…\",\n \"providerNotOffered\": \"Inloggen met {name} kan hier niet. Log op een andere manier in.\",\n \"turnOnTwoFactor\": \"Tweestapsverificatie aanzetten\",\n \"addPasskey\": \"Passkey toevoegen\",\n \"requiredForEveryAccount\": \"Deze app vraagt het voor elk account.\",\n \"passkeyExplanation\": \"Met een passkey log je in met Face ID, Touch ID, Windows Hello, je telefoon of een beveiligingssleutel. Je browser vraagt welke je gebruikt.\",\n \"couldNotReadAccount\": \"Kon je account niet lezen\",\n \"signInTitle\": \"Inloggen bij Protobase\",\n \"continueWith\": \"Doorgaan met {name}\",\n \"signInWithPasskey\": \"Inloggen met een passkey\",\n \"passkeyFor\": \"Een passkey voor {domain} gebruiken\",\n \"or\": \"of\",\n \"emailSignInCode\": \"Mail me een inlogcode\",\n \"usePassword\": \"Een wachtwoord gebruiken\",\n \"forgotPassword\": \"Wachtwoord vergeten?\",\n \"newHere\": \"Nieuw hier?\",\n \"haveAccount\": \"Heb je een account?\",\n \"createAnAccount\": \"Account maken\",\n \"browse\": \"Doorgaan zonder in te loggen\",\n \"notNow\": \"Niet nu\",\n \"detailsTitle\": \"Je gegevens\",\n \"detailsDescription\": \"Nog één stap om je account te maken.\",\n \"yourName\": \"Je naam\",\n \"codeWasRight\": \"De code klopte: het account is voor {email}.\",\n \"withoutPassword\": \" Zonder wachtwoord log je in met een code die we je mailen.\",\n \"createAccount\": \"Account maken\",\n \"codeToConfirm\": \"We mailen je een code om te controleren dat het adres van jou is.\",\n \"emailCode\": \"Mail me een code\",\n \"browseWithoutAccount\": \"Doorgaan zonder account\",\n \"staffTitle\": \"Inloggen als medewerker\",\n \"staffUnavailable\": \"Medewerkers van het team dat deze app beheert, kunnen hier niet als iemand anders inloggen.\",\n \"signInAsPerson\": \"Inloggen als iemand anders\",\n \"forStaffOf\": \"Voor medewerkers van {operator}, om iemand met deze app te helpen.\",\n \"theirEmail\": \"Hun e-mailadres\",\n \"reason\": \"Reden\",\n \"reasonExample\": \"Ticket 4211: de factuurtotalen kloppen niet\",\n \"staffExplanation\": \"Je logt in bij {operator} met een passkey of een tweede stap. De sessie is kort, toont een balk en kan hun inlog niet wijzigen. De beheerders van de app zien wie als wie inlogde, en waarom.\",\n \"totpInstruction\": \"Vul de code van 6 cijfers uit je authenticator-app in.\",\n \"otpInstruction\": \"Vul de code van 6 cijfers in die we je mailden. Die werkt 5 minuten.\",\n \"backupInstruction\": \"Vul een van de back-upcodes in die je bewaarde toen je de authenticator-app instelde. Elke code werkt één keer.\",\n \"twoFactorTitle\": \"Tweestapsverificatie\",\n \"twoFactorDescription\": \"Nog één stap om in te loggen.\",\n \"codeToFinish\": \"We mailen je een code om het inloggen af te ronden.\",\n \"trustBrowser\": \"Deze browser vertrouwen\",\n \"trustBrowserFor\": \"Niet meer vragen in deze browser, 30 dagen lang\",\n \"verify\": \"Controleren\",\n \"useAuthenticator\": \"De authenticator-app gebruiken\",\n \"emailCodeInstead\": \"Mail me liever een code\",\n \"useBackupCode\": \"Een back-upcode gebruiken\",\n \"admin\": \"Beheerder\"\n },\n \"auth/errors\": {\n \"tooManyRequests\": \"Te veel pogingen. Wacht een minuut en probeer het opnieuw.\",\n \"passkeyClosed\": \"De passkey-vraag sloot voordat die klaar was. Probeer het opnieuw.\",\n \"wrongEmailOrPassword\": \"Het e-mailadres of wachtwoord klopt niet.\",\n \"wrongPassword\": \"Het wachtwoord klopt niet.\",\n \"wrongCode\": \"De code klopt niet.\",\n \"wrongOrExpiredCode\": \"De code klopt niet, of is verlopen. Vraag een nieuwe aan.\",\n \"codeExpired\": \"De code is verlopen. Vraag een nieuwe aan.\",\n \"tooManyCodes\": \"Te veel verkeerde codes. Vraag een nieuwe aan.\",\n \"wrongBackupCode\": \"De back-upcode klopt niet, of is al eerder gebruikt.\",\n \"tooManyCodesSignIn\": \"Te veel verkeerde codes. Log opnieuw in.\",\n \"locked\": \"Te veel verkeerde codes. Wacht 15 minuten en probeer het opnieuw.\",\n \"tooSlow\": \"Deze inlogpoging duurde te lang. Log opnieuw in.\",\n \"passkeyNotFound\": \"Deze passkey hoort hier bij geen enkel account.\",\n \"passkeyFailed\": \"De passkey kon niet worden gecontroleerd. Probeer het opnieuw.\",\n \"passkeyAdded\": \"Deze passkey is al toegevoegd.\",\n \"notFresh\": \"Log voor deze wijziging eerst uit en opnieuw in.\",\n \"staffPermissionMissing\": \"Je medewerkersaccount mag hier niet als iemand anders inloggen.\",\n \"staffNotStrong\": \"Log in op je medewerkersaccount met een passkey of een tweede stap, en probeer het dan opnieuw.\",\n \"staffStale\": \"Je inlog als medewerker is te oud. Log opnieuw in op je medewerkersaccount.\",\n \"staffExpired\": \"Deze inlog als medewerker duurde te lang of is al gebruikt. Begin opnieuw.\",\n \"staffProviderFailed\": \"De inlog als medewerker lukte niet bij de provider. Probeer het opnieuw.\",\n \"staffUserUnavailable\": \"Er is geen account met dit adres, of het is uitgeschakeld.\",\n \"staffReasonRequired\": \"Zeg in minstens 10 tekens waarom je als deze persoon inlogt.\",\n \"staffForbidden\": \"Inloggen als medewerker staat uit voor deze app.\",\n \"untrustedCallback\": \"Deze pagina staat niet op een adres dat de server vertrouwt.\",\n \"staffFailed\": \"De inlog als medewerker lukte niet. Probeer het opnieuw.\",\n \"passwordLeaked\": \"Dit wachtwoord komt voor in een bekend datalek. Kies een ander wachtwoord.\",\n \"signupDisabled\": \"Geen account hier hoort bij dit {name}-account. Vraag een beheerder om je toe te voegen, of log op een andere manier in.\",\n \"notLinked\": \"Je {name}-account is niet gekoppeld aan je account hier. Log op een andere manier in en koppel {name} dan op je accountpagina.\",\n \"linkedToOther\": \"Dit {name}-account is hier al aan iemand anders gekoppeld.\",\n \"couldNotLink\": \"Je {name}-account kon niet worden gekoppeld. Probeer het opnieuw.\",\n \"accessDenied\": \"{name} liet je niet binnen, of je hebt geannuleerd.\",\n \"domainNotAllowed\": \"{name} logde je in met een adres dat deze app daarvan niet accepteert. Log op een andere manier in.\",\n \"providerFailed\": \"Inloggen met {name} lukte niet. Probeer het opnieuw.\"\n },\n \"calls\": {\n \"accept\": \"Opnemen\",\n \"decline\": \"Weigeren\",\n \"startCall\": \"Gesprek starten\",\n \"join\": \"Deelnemen\",\n \"inProgress\": \"Gesprek bezig\",\n \"people\": \"{count, plural, one {# persoon} other {# personen}}\",\n \"joinCall\": \"Deelnemen aan gesprek\",\n \"leave\": \"Verlaten\",\n \"microphone\": \"Microfoon\",\n \"camera\": \"Camera\",\n \"shareScreen\": \"Scherm delen\",\n \"stopSharing\": \"Stoppen met delen\",\n \"muted\": \"Gedempt\",\n \"you\": \"Jij\",\n \"alone\": \"Je bent de enige hier\",\n \"connecting\": \"Deelnemen…\",\n \"reconnecting\": \"Opnieuw verbinden…\",\n \"full\": \"Dit gesprek is vol\",\n \"removed\": \"Je bent uit dit gesprek gehaald\",\n \"ended\": \"Het gesprek is afgelopen\",\n \"refused\": \"Je kunt niet aan dit gesprek deelnemen\",\n \"unavailable\": \"Het gesprek is nu niet bereikbaar. Probeer het zo opnieuw.\",\n \"callAgain\": \"Opnieuw deelnemen\",\n \"noMicrophone\": \"Je microfoon is geblokkeerd: sta hem toe in de browser om gehoord te worden.\",\n \"noCamera\": \"Je camera is geblokkeerd: sta hem toe in de browser om gezien te worden.\",\n \"noDevices\": \"Er is geen camera of microfoon gevonden.\",\n \"cannotConnect\": \"Kan geen verbinding maken met {name}\",\n \"poorConnection\": \"Slechte verbinding\",\n \"goodConnection\": \"Goede verbinding\",\n \"sharing\": \"{name} deelt het scherm\",\n \"youAreSharing\": \"Je deelt je scherm\",\n \"speaking\": \"Spreekt\",\n \"preview\": \"Je camera voordat je deelneemt\",\n \"guestName\": \"{name} (gast)\",\n \"denied\": \"Niemand in het gesprek heeft je binnengelaten\",\n \"waiting\": \"Wachten tot iemand in het gesprek je binnenlaat…\",\n \"askToJoin\": \"Vragen om deel te nemen\",\n \"someone\": \"Iemand in het gesprek\",\n \"guests\": \"Gasten\",\n \"waitingGuest\": \"{name} wacht om deel te nemen\",\n \"admit\": \"Binnenlaten\",\n \"deny\": \"Weigeren\",\n \"remove\": \"Verwijderen\",\n \"revoke\": \"Intrekken\",\n \"newLink\": \"Gastlink maken\",\n \"copyLink\": \"Link kopiëren\",\n \"copied\": \"Gekopieerd\",\n \"guestLinks\": \"Gastlinks\",\n \"noLinks\": \"Nog geen gastlink. Wie een link heeft, wacht hier tot iemand in het gesprek hem binnenlaat.\",\n \"inLobby\": \"Wacht om deel te nemen\",\n \"guestsInCall\": \"Gasten in het gesprek\",\n \"guestsMaySend\": \"Gasten mogen sturen\",\n \"sendAll\": \"Alles\",\n \"sendCamera\": \"Camera en microfoon\",\n \"sendMicrophone\": \"Alleen geluid\",\n \"linkUntil\": \"Tot {until}\",\n \"linkUntilEnd\": \"Tot het gesprek afloopt\",\n \"linkLasts\": \"De link werkt\",\n \"forAnHour\": \"Een uur lang\",\n \"addressesVisible\": \"In een gesprek tussen browsers zien een gast en de mensen in het gesprek elkaars netwerkadressen.\",\n \"guestRefused\": \"Dit lukte niet: de gast of link is weg, het gesprek is vol, of gastlinks staan uit.\",\n \"close\": \"Sluiten\",\n \"yourName\": \"Je naam\",\n \"guestIntro\": \"Je bent uitgenodigd voor een gesprek. Geef je naam, controleer je microfoon en camera, en iemand in het gesprek laat je binnen.\",\n \"continue\": \"Verder\",\n \"youLeft\": \"Je hebt het gesprek verlaten\"\n },\n \"carousel\": {\n \"photoOf\": \"Foto {index} van {count}\",\n \"previousPhoto\": \"Vorige foto\",\n \"nextPhoto\": \"Volgende foto\"\n },\n \"chat\": {\n \"message\": \"Bericht\",\n \"send\": \"Versturen\",\n \"today\": \"Vandaag\",\n \"yesterday\": \"Gisteren\",\n \"newMessages\": \"Nieuwe berichten\",\n \"loadEarlier\": \"Eerdere berichten laden\"\n },\n \"compact-table\": {\n \"table\": \"Tabel\",\n \"noRows\": \"Geen rijen.\",\n \"rows\": \"{count, plural, one {# rij} other {# rijen}}\",\n \"cutOff\": \", afgekapt bij de limiet\"\n },\n \"data-grid\": {\n \"unsortable\": \"Op deze kolom kan niet worden gesorteerd\",\n \"columnMenu\": \"Kolommenu {header}\",\n \"unpin\": \"Losmaken\",\n \"pinToLeft\": \"Links vastzetten\",\n \"resizeColumn\": \"Breedte kolom {header}\",\n \"selected\": \"{count} geselecteerd\",\n \"no\": \"Nee\",\n \"shownIn\": \"Getoond in {zone}\",\n \"new\": \"Nieuw\",\n \"clearSelection\": \"Selectie wissen\",\n \"noRowsSelected\": \"Geen rijen geselecteerd\",\n \"selectRow\": \"Rij {row} selecteren\",\n \"rowActions\": \"Rijacties\",\n \"row\": \"rij\",\n \"move\": \"{label} verplaatsen\",\n \"reorderInstructions\": \"Om een rij te verplaatsen, druk op Spatie op de greep, verplaats hem met de pijltjestoetsen omhoog en omlaag, en druk nogmaals op Spatie om hem daar neer te zetten. Escape zet hem terug.\",\n \"pickedUp\": \"{name} opgepakt, rij {row} van {rows}.\",\n \"isOver\": \"{name} is boven rij {row} van {rows}.\",\n \"droppedAt\": \"{name} is neergezet op rij {row} van {rows}.\",\n \"putBack\": \"{name} is teruggezet.\",\n \"cancelled\": \"Verplaatsen van {name} is geannuleerd. Hij staat weer op rij {row}.\"\n },\n \"filter-panel\": {\n \"today\": \"Vandaag\",\n \"yesterday\": \"Gisteren\",\n \"24h\": \"Afgelopen 24 uur\",\n \"7d\": \"Afgelopen 7 dagen\",\n \"30d\": \"Afgelopen 30 dagen\",\n \"90d\": \"Afgelopen 90 dagen\",\n \"month\": \"Deze maand\",\n \"quarter\": \"Dit kwartaal\",\n \"year\": \"Dit jaar\",\n \"unknownPreset\": \"De server biedt de periode \\\"{id}\\\", die deze UI niet kent\",\n \"unsupported\": \"{id} (niet ondersteund)\",\n \"remove\": \"{label} verwijderen\",\n \"clearAll\": \"Alles wissen\",\n \"searchIn\": \"Zoeken in <lower>{label}</lower>\",\n \"noMatches\": \"Niets gevonden\",\n \"moreFilters\": \"Meer filters\",\n \"filters\": \"Filters\",\n \"date\": \"Datum\",\n \"showOnly\": \"Alleen tonen\",\n \"minimum\": \"{label} minimum\",\n \"maximum\": \"{label} maximum\"\n },\n \"format\": {\n \"rows\": \"{count} {n, plural, one {rij} other {rijen}}\",\n \"aboutRows\": \"ongeveer {count} rijen\",\n \"secondsAgo\": \"{count} s geleden\",\n \"minutesAgo\": \"{count} min geleden\",\n \"hoursAgo\": \"{count} u geleden\",\n \"daysAgo\": \"{count} d geleden\",\n \"justNow\": \"zojuist\"\n },\n \"forms\": {\n \"loading\": \"Laden\",\n \"notFound\": \"Niet gevonden\",\n \"noForm\": \"Er is geen formulier op dit adres.\",\n \"setByDatabase\": \"Ingevuld door de database\",\n \"notSent\": \"Niet verzonden\",\n \"send\": \"Verzenden\",\n \"checkTooLong\": \"De controle of je geen bot bent duurde te lang; verzend het formulier opnieuw\"\n },\n \"inline-child-table\": {\n \"instructions\": \"Druk op spatie of enter op de sleepgreep om een regel op te pakken. Verplaats hem met de pijltjestoetsen omhoog en omlaag, zet hem neer met spatie of enter, en annuleer met escape. Het regelmenu heeft ook Omhoog en Omlaag.\",\n \"line\": \"regel\",\n \"pickedUp\": \"{name} opgepakt, regel {place} van {count}.\",\n \"over\": \"{name} is boven regel {place} van {count}.\",\n \"dropped\": \"{name} is neergezet op regel {place} van {count}.\",\n \"droppedAtStart\": \"{name} is neergezet waar hij begon.\",\n \"cancelled\": \"Verplaatsen van {name} is geannuleerd. Hij staat weer op regel {place}.\",\n \"addLine\": \"Regel toevoegen\",\n \"noLines\": \"Nog geen regels.\",\n \"moveUp\": \"Omhoog\",\n \"moveDown\": \"Omlaag\",\n \"removeLine\": \"Regel verwijderen\",\n \"dragToReorder\": \"Sleep om {name} te verplaatsen\",\n \"actionsFor\": \"Acties voor {name}\"\n },\n \"invitations\": {\n \"email\": \"E-mailadres\",\n \"invite\": \"Uitnodigen\",\n \"expired\": \"Verlopen\",\n \"until\": \"Tot {date}\",\n \"sendAgain\": \"Opnieuw sturen\",\n \"revoke\": \"Intrekken\",\n \"passLinkOn\": \"Deze app kan geen e-mail sturen, dus geef deze link zelf door. Die werkt één keer, tot de uitnodiging verloopt: {link}\"\n },\n \"lists\": {\n \"showMore\": \"Meer tonen\"\n },\n \"live\": {\n \"yes\": \"Ja\",\n \"no\": \"Nee\",\n \"shownIn\": \"Getoond in {zone}\",\n \"fileMissing\": \"Bestand ontbreekt\"\n },\n \"markdown\": {\n \"write\": \"Schrijven\",\n \"preview\": \"Voorbeeld\",\n \"nothingToPreview\": \"Niets om te tonen\"\n },\n \"mentions\": {\n \"peopleToMention\": \"Mensen om te noemen\",\n \"noOneFound\": \"Niemand gevonden\",\n \"couldNotSearch\": \"Kon niet naar mensen zoeken\"\n },\n \"notifications/bell\": {\n \"notifications\": \"Meldingen\",\n \"notificationsUnread\": \"Meldingen, {count} ongelezen\",\n \"notificationsManyUnread\": \"Meldingen, meer dan 99 ongelezen\",\n \"markAllRead\": \"Alles als gelezen markeren\",\n \"empty\": \"Nog geen meldingen\",\n \"showMore\": \"Meer tonen\",\n \"loadFailed\": \"Je meldingen konden niet worden geladen.\",\n \"tryAgain\": \"Opnieuw proberen\",\n \"unread\": \"Ongelezen\",\n \"pushOff\": \"Ontvang meldingen op dit apparaat, ook als de app gesloten is.\",\n \"turnOn\": \"Inschakelen\",\n \"pushOn\": \"Meldingen staan op dit apparaat aan.\",\n \"turnOff\": \"Uitschakelen\",\n \"pushBlocked\": \"Meldingen zijn op dit apparaat geblokkeerd. Je kunt ze voor deze site toestaan in de instellingen van je browser of apparaat.\"\n },\n \"organizations\": {\n \"organizations\": \"Organisaties\",\n \"manageOrganizations\": \"Organisaties beheren\",\n \"organization\": \"Organisatie\",\n \"members\": \"Leden\",\n \"invitations\": \"Uitnodigingen\",\n \"owner\": \"Eigenaar\",\n \"admin\": \"Beheerder\",\n \"member\": \"Lid\",\n \"loading\": \"Laden\",\n \"name\": \"Naam\",\n \"slug\": \"Slug\",\n \"save\": \"Bewaren\",\n \"cancel\": \"Annuleren\",\n \"delete\": \"Verwijderen\",\n \"remove\": \"Verwijderen\",\n \"create\": \"Maken\",\n \"current\": \"Huidige\",\n \"open\": \"Openen\",\n \"allOrganizations\": \"Alle organisaties\",\n \"allOrganizationsDescription\": \"Elke organisatie in de app. Met je globale rollen kun je in elk ervan werken, met wat die rollen daar toestaan. Wie er een opent waar die geen lid van is, komt in het auditlogboek.\",\n \"findOrganization\": \"Een organisatie zoeken\",\n \"nameOrSlug\": \"Naam of slug\",\n \"cannotChangeRole\": \"Je kunt deze rol niet geven of afnemen\",\n \"makeAccountToJoin\": \"Maak je account voor {email} om lid te worden.\",\n \"makeAccount\": \"Maak je account voor {email}.\",\n \"yourName\": \"Je naam\",\n \"password\": \"Wachtwoord\",\n \"passwordOptional\": \"Wachtwoord (optioneel, {length}+ tekens)\",\n \"passwordRequired\": \"Wachtwoord ({length}+ tekens)\",\n \"createAndJoin\": \"Account maken en lid worden\",\n \"createYourAccount\": \"Je account maken\",\n \"invalidLink\": \"Deze uitnodigingslink is niet geldig\",\n \"invitation\": \"Uitnodiging\",\n \"goToApp\": \"Naar de app\",\n \"invitesToApp\": \"{inviter} nodigt je uit voor {app}.\",\n \"invitesTo\": \"{inviter} nodigt je uit voor {organization} als {role}.\",\n \"invitesToWith\": \"{inviter} nodigt je uit voor {organization} als {role}, met {roles}.\",\n \"join\": \"Lid worden van {name}\",\n \"hasAccount\": \"{email} heeft al een account: log daarmee in.\",\n \"signOut\": \"Uitloggen\",\n \"signInAs\": \"Inloggen als {email}\",\n \"signInAsToJoin\": \"Inloggen als {email} om lid te worden\",\n \"otherAddress\": \"Deze uitnodiging is voor {invited}, en je bent ingelogd als {signedIn}.\",\n \"signOutToAccept\": \"Uitloggen om die te accepteren\",\n \"inviteSomeone\": \"Iemand uitnodigen\",\n \"inviteDescription\": \"Die krijgt een e-mail met een link om lid te worden, of om eerst een account te maken. Je kunt de app-rollen geven die je zelf hebt, en die je rollen toekennen.\",\n \"organizationRole\": \"Rol in de organisatie\",\n \"peopleInvited\": \"Mensen uitgenodigd voor {organization}.\",\n \"notAcceptedYet\": \"Nog niet geaccepteerd\",\n \"sendingAgain\": \"Opnieuw sturen geeft een nieuwe link, die de vorige vervangt.\",\n \"nobodyWaiting\": \"Er wacht niemand.\",\n \"roleOf\": \"Rol in de organisatie van {name}\",\n \"couldNotReadMembers\": \"Kon de leden niet lezen\",\n \"whoWorks\": \"Wie in {organization} werkt, en met welke rollen.\",\n \"membersDescription\": \"Eigenaren en beheerders beheren de organisatie; app-rollen bepalen wat elk lid in de app ziet en doet.\",\n \"details\": \"Gegevens\",\n \"detailsEditable\": \"De naam die mensen zien, en de slug die haar in links noemt.\",\n \"detailsReadOnly\": \"Eigenaren en beheerders kunnen dit wijzigen.\",\n \"guestLinks\": \"Gastlinks voor gesprekken\",\n \"guestLinksDescription\": \"Iemand in een gesprek kan een link delen waarmee iemand van buiten in de wachtruimte wacht en, eenmaal binnengelaten, aan dat ene gesprek deelneemt. Gastlinks uitzetten trekt elke link in en haalt elke gast meteen uit het gesprek. Eigenaren en beheerders kunnen dit wijzigen.\",\n \"guestLinksAllowed\": \"Gastlinks toestaan\",\n \"handOver\": \"Overdragen\",\n \"handOverDescription\": \"Maak een ander lid eigenaar. Jij blijft beheerder.\",\n \"newOwner\": \"Nieuwe eigenaar\",\n \"chooseMember\": \"Kies een lid\",\n \"deleteOrganization\": \"Organisatie verwijderen\",\n \"deleteDescription\": \"Verwijdert de organisatie met haar leden en uitnodigingen. Haar records moeten eerst worden verwijderd.\",\n \"deleteTitle\": \"{name} verwijderen?\",\n \"deleteConfirm\": \"Typ de naam om te bevestigen. Dit kan niet ongedaan worden gemaakt.\",\n \"organizationName\": \"Naam van de organisatie\",\n \"leave\": \"Verlaten\",\n \"leaveOwner\": \"Een organisatie houdt een eigenaar: draag die rol over voordat je vertrekt, tenzij er nog een eigenaar is.\",\n \"leaveMember\": \"Je bent dan geen lid meer, en verliest je rollen hier.\",\n \"leaveName\": \"{name} verlaten\",\n \"noOrganization\": \"Je werkt nu niet in een organisatie. Kies er een onder Organisaties.\",\n \"youAre\": \"Je bent hier {role}.\",\n \"throughGlobalRoles\": \"Je werkt hier via je globale rollen, zonder lid te zijn.\",\n \"newOrganization\": \"Nieuwe organisatie\",\n \"newOrganizationDescription\": \"Je wordt de eigenaar, met elke rol, en werkt erin zodra die is gemaakt.\",\n \"invitationsForYou\": \"Uitnodigingen voor jou\",\n \"invitationsForYouDescription\": \"Accepteer er een om lid te worden en daar te werken.\",\n \"accept\": \"Accepteren\",\n \"anOrganization\": \"Een organisatie\",\n \"noAppRoles\": \"geen app-rollen\",\n \"until\": \"Tot {date}\",\n \"organizationsSubtitle\": \"Je werkt in één organisatie tegelijk; wat je ziet volgt uit je rollen daar.\",\n \"yourOrganizations\": \"Je organisaties\",\n \"memberOf\": \"De organisaties waar je lid van bent.\",\n \"notMember\": \"Je bent nog geen lid van een organisatie.\",\n \"couldNotReadOrganizations\": \"Kon je organisaties niet lezen\"\n },\n \"plugins\": {\n \"loading\": \"Laden\",\n \"pluginsOff\": \"Plug-ins uit\",\n \"pluginOff\": \"De plug-in {plugin} staat uit: {reason}.\",\n \"dismiss\": \"Sluiten\",\n \"answered\": \"de plugin.json antwoordde {status}\",\n \"couldNotLoad\": \"hij kon niet worden geladen: {reason}\",\n \"notObject\": \"de plugin.json is geen object\",\n \"noName\": \"de plugin.json noemt geen plug-in\",\n \"noApi\": \"de plugin.json noemt geen plug-in-API\",\n \"noVersions\": \"de plugin.json noemt geen Protobase-versies\",\n \"noModule\": \"de plugin.json noemt geen module\",\n \"badStylesheet\": \"de plugin.json noemt een stylesheet die geen URL is\",\n \"badVersion\": \"de plugin.json heeft een versie die geen tekst is\"\n },\n \"primitives\": {\n \"close\": \"Sluiten\",\n \"loading\": \"Laden\",\n \"remove\": \"{label} verwijderen\"\n },\n \"record-view\": {\n \"savedDifferent\": \"{name} bewaarde een andere waarde\",\n \"example\": \"Voorbeeld:\",\n \"savedThis\": \"bewaarde dit {ago}:\",\n \"keepMine\": \"Mijn waarde houden\",\n \"useTheirs\": \"Hun waarde gebruiken\",\n \"actions\": \"Acties\",\n \"saving\": \"Bewaren...\",\n \"savedAgo\": \"Bewaard {ago}\",\n \"notSavedRetrying\": \"Niet bewaard, opnieuw proberen\",\n \"lastEditedBy\": \"Laatst bewerkt door\",\n \"lastUpdated\": \"Laatst bijgewerkt {ago}\",\n \"viewing\": \"{count} kijken mee\",\n \"tabs\": \"Tabbladen\"\n },\n \"roles\": {\n \"couldNotReadRoles\": \"Kon je rollen niet lezen\",\n \"couldNotSwitch\": \"Kon niet van rol wisselen\"\n },\n \"side-panel\": {\n \"close\": \"Sluiten\"\n },\n \"status\": {\n \"setStatus\": \"Status instellen\",\n \"editStatus\": \"Status wijzigen\",\n \"availability\": \"Beschikbaarheid\",\n \"automatic\": \"Automatisch\",\n \"busy\": \"Bezet\",\n \"doNotDisturb\": \"Niet storen\",\n \"doNotDisturbHint\": \"Je krijgt geen pushmeldingen; ze wachten bij de bel.\",\n \"statusText\": \"Status\",\n \"statusPlaceholder\": \"Aan het lunchen\",\n \"clearsAfter\": \"Wissen na\",\n \"never\": \"Nooit\",\n \"thirtyMinutes\": \"30 minuten\",\n \"oneHour\": \"1 uur\",\n \"fourHours\": \"4 uur\",\n \"today\": \"Vandaag\",\n \"thisWeek\": \"Deze week\",\n \"custom\": \"Kies een datum en tijd\",\n \"clearsAt\": \"Wist om\",\n \"pickTime\": \"Kies een datum en tijd die nog moet komen\",\n \"save\": \"Opslaan\",\n \"cancel\": \"Annuleren\",\n \"clear\": \"Status wissen\",\n \"couldNotSave\": \"Je status kon niet worden opgeslagen\",\n \"until\": \"Tot {time}\",\n \"online\": \"Online\",\n \"away\": \"Afwezig\"\n },\n \"toasts\": {\n \"dismiss\": \"Sluiten\"\n },\n \"users\": {\n \"inviteSomeone\": \"Iemand uitnodigen\",\n \"inviteDescription\": \"Die krijgt een e-mail met een link om een account te maken, met de rollen die je aanvinkt.\",\n \"notAcceptedYet\": \"Nog niet geaccepteerd\",\n \"sendingAgain\": \"Opnieuw sturen geeft een nieuwe link, die de vorige vervangt.\",\n \"nobodyWaiting\": \"Er wacht niemand.\",\n \"addAnAccount\": \"Een account toevoegen\",\n \"addDescription\": \"Maakt het account meteen, met het adres als gecontroleerd. Zonder wachtwoord logt de persoon in op een andere manier die deze app toestaat, zoals een gemailde code.\",\n \"email\": \"E-mailadres\",\n \"name\": \"Naam\",\n \"password\": \"Wachtwoord\",\n \"passwordOptional\": \"Wachtwoord (optioneel, {length}+ tekens)\",\n \"addAccount\": \"Account toevoegen\",\n \"couldNotReadRoles\": \"Kon de rollen niet lezen\",\n \"people\": \"Mensen\",\n \"peopleDescription\": \"Iedereen met een account. Rollen bepalen wat ieder ziet en doet; wie geblokkeerd is, kan niet inloggen en wordt meteen uitgelogd.\",\n \"findSomeone\": \"Iemand zoeken\",\n \"emailAddress\": \"E-mailadres\",\n \"keepOneRole\": \"Houd minstens één rol.\",\n \"blocked\": \"Geblokkeerd\",\n \"unblock\": \"Deblokkeren\",\n \"block\": \"Blokkeren\"\n }\n}\n","import type { Locale } from '@protobase/schema/internal'\nimport { IntlMessageFormat } from 'intl-messageformat'\nimport { createElement, Fragment, type ReactNode } from 'react'\nimport { activeLocale, formatTag } from './active-locale'\nimport en from './en.json' with { type: 'json' }\nimport nl from './nl.json' with { type: 'json' }\n\n// The built-in texts, one ICU MessageFormat catalogue per language, keyed by area and then id. Every language has\n// the English one's shape, which the types check.\ntype Catalogue = typeof en\nexport type Namespace = keyof Catalogue\nexport const catalogues: Record<Locale, Catalogue> = { en, nl }\n\n/** A value a text names: a number picks the plural and is written for the active locale. */\nexport type MessageValue = string | number | boolean | Date\n\n// The tags every text may use: `<lower>{label}</lower>` writes the label in lower case.\nconst tags = { lower: (chunks: unknown[]) => chunks.join('').toLowerCase() }\n\n// One compiled format per text and language, so its size is bounded by the catalogues.\nconst compiled = new Map<string, IntlMessageFormat>()\n\nconst formatOf = (namespace: Namespace, id: string) => {\n const locale = activeLocale()\n const key = `${locale}\\0${namespace}\\0${id}`\n const cached = compiled.get(key)\n if (cached) return cached\n const source = (catalogues[locale][namespace] as Record<string, string>)[id]\n if (source === undefined) throw new Error(`No text ${namespace}.${id} in ${locale}`)\n const format = new IntlMessageFormat(source, formatTag())\n compiled.set(key, format)\n return format\n}\n\n/**\n * An area's built-in texts: the lookup returns the one for the active locale, `text('search')` or\n * `text('rows', { count: 3 })`, and `text.rich` the same with React nodes among the values.\n */\nexport const messages = <N extends Namespace>(namespace: N) => {\n type Id = keyof Catalogue[N] & string\n const text = (id: Id, values?: Record<string, MessageValue>) => formatOf(namespace, id).format({ ...values, ...tags }) as string\n text.rich = (id: Id, values: Record<string, MessageValue | ReactNode>): ReactNode => {\n const parts = formatOf(namespace, id).format<ReactNode>({ ...values, ...tags })\n return Array.isArray(parts) ? createElement(Fragment, null, ...parts) : parts\n }\n return text\n}\n","import { messages } from '../locale/messages'\n\nexport const text = messages('format')\n","import { cachedFormat } from './intl-cache'\n\n// Times show in the viewer's time zone, the browser's; dates (`YYYY-MM-DD`, no time) have no zone and never shift.\n\n/** The viewer's IANA time zone, such as `Europe/Amsterdam`. */\nexport const viewerZone = () => Intl.DateTimeFormat().resolvedOptions().timeZone\n\nconst partsFormats = new Map<string, Intl.DateTimeFormat>()\n\nconst partsFormat = (zone: string) => {\n const known = partsFormats.get(zone)\n if (known) return known\n const format = new Intl.DateTimeFormat('en-US', { timeZone: zone, hourCycle: 'h23', year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', second: '2-digit' })\n partsFormats.set(zone, format)\n return format\n}\n\n// The wall clock of `zone` at `ms`, as numbers\nconst wallClock = (ms: number, zone: string) => {\n const parts = Object.fromEntries(partsFormat(zone).formatToParts(ms).map((part) => [part.type, part.value]))\n return { year: Number(parts.year), month: Number(parts.month), day: Number(parts.day), hour: Number(parts.hour), minute: Number(parts.minute), second: Number(parts.second) }\n}\n\n/** How far `zone`'s clock is ahead of UTC at `ms`, in milliseconds: 7 200 000 for Amsterdam in summer. */\nexport const zoneOffset = (ms: number, zone: string) => {\n const clock = wallClock(ms, zone)\n const asUtc = Date.UTC(clock.year, clock.month - 1, clock.day, clock.hour, clock.minute, clock.second)\n return asUtc - Math.floor(ms / 1000) * 1000\n}\n\nconst pad = (value: number) => String(value).padStart(2, '0')\n\n/** The day `ms` falls on in `zone`, as `YYYY-MM-DD`. */\nexport const dayIn = (ms: number, zone: string) => {\n const clock = wallClock(ms, zone)\n return `${clock.year}-${pad(clock.month)}-${pad(clock.day)}`\n}\n\n/** The instant `zone`'s clock reads `wall`, a wall-clock time written as if it were UTC milliseconds. */\nexport const instantAt = (wall: number, zone: string) => {\n // The offset at `wall` read as UTC is right unless the zone changes its clock in the hours between; a second pass fixes that\n const guess = wall - zoneOffset(wall, zone)\n return wall - zoneOffset(guess, zone)\n}\n\n/** The instant `day` (`YYYY-MM-DD`) starts in `zone`: its local midnight. */\nexport const startOfDayIn = (day: string, zone: string) => instantAt(Date.parse(`${day}T00:00:00Z`), zone)\n\n/** The zone a time is shown in, as its hover label says: \"Europe/Amsterdam (GMT+2)\", or \"UTC\". */\nexport const zoneLabel = (ms: number, zone: string) => {\n const named = cachedFormat(`zoneName:${zone}`, (tag) => new Intl.DateTimeFormat(tag, { timeZone: zone, timeZoneName: 'shortOffset' }))\n const name = named.formatToParts(ms).find((part) => part.type === 'timeZoneName')?.value ?? zone\n return zone === 'UTC' || zone === 'Etc/UTC' ? 'UTC' : `${zone} (${name})`\n}\n","import { cachedFormat } from './intl-cache'\nimport { text } from './messages'\nimport { viewerZone } from './zone'\n\n// Dates, months and weekdays are zone-free days, kept in UTC; times are the viewer's, in `zone`.\nconst dateFormat = (name: string, options: Intl.DateTimeFormatOptions) => () => cachedFormat(`date:${name}`, (tag) => new Intl.DateTimeFormat(tag, { ...options, timeZone: 'UTC' }))\nconst day = dateFormat('day', { day: 'numeric', month: 'short', year: 'numeric' })\nconst dayShort = dateFormat('dayShort', { day: 'numeric', month: 'short' })\nconst month = dateFormat('month', { month: 'long', year: 'numeric' })\nconst monthName = dateFormat('monthName', { month: 'long' })\nconst weekday = dateFormat('weekday', { weekday: 'short' })\nconst weekdayDate = dateFormat('weekdayDate', { weekday: 'long', day: 'numeric', month: 'short', year: 'numeric' })\n\nexport const formatDate = (ms: number) => day().format(ms)\n\nexport const formatDayShort = (ms: number) => dayShort().format(ms)\n\nconst zonedFormats = (zone: string) =>\n cachedFormat(`zoned:${zone}`, (tag) => ({\n day: new Intl.DateTimeFormat(tag, { day: 'numeric', month: 'short', year: 'numeric', timeZone: zone }),\n time: new Intl.DateTimeFormat(tag, { hour: '2-digit', minute: '2-digit', hour12: false, timeZone: zone }),\n }))\n\n/** \"6 Oct 2026, 16:32\": an instant on the clock of `zone`, the viewer's unless given. */\nexport const formatDateTime = (ms: number, zone = viewerZone()) => {\n const formats = zonedFormats(zone)\n return `${formats.day.format(ms)}, ${formats.time.format(ms)}`\n}\n\n/** \"October 2026\". */\nexport const formatMonth = (ms: number) => month().format(ms)\n\n/** \"October\". */\nexport const formatMonthName = (ms: number) => monthName().format(ms)\n\n/** \"October – December 2026\": the months from `from` to `to`, both included. */\nexport const formatMonthRange = (from: number, to: number) => month().formatRange(from, to)\n\n/** \"Mon\". */\nexport const formatWeekday = (ms: number) => weekday().format(ms)\n\n/** \"Monday, 12 Oct 2026\". */\nexport const formatWeekdayDate = (ms: number) => weekdayDate().format(ms)\n\n/** \"12–18 Oct 2026\", \"28 Dec 2026 – 3 Jan 2027\": the days from `from` to `to`, both included. */\nexport const formatDayRange = (from: number, to: number) => day().formatRange(from, to)\n\n/** \"09:30\": an instant's time on the clock of `zone`, the viewer's unless given. */\nexport const formatTime = (ms: number, zone = viewerZone()) => zonedFormats(zone).time.format(ms)\n\nexport const formatAgo = (seconds: number) => {\n if (seconds < 60) return text('secondsAgo', { count: seconds })\n if (seconds < 3600) return text('minutesAgo', { count: Math.floor(seconds / 60) })\n if (seconds < 86_400) return text('hoursAgo', { count: Math.floor(seconds / 3600) })\n return text('daysAgo', { count: Math.floor(seconds / 86_400) })\n}\n\nconst relative = () => cachedFormat('relative', (tag) => new Intl.RelativeTimeFormat(tag, { numeric: 'auto' }))\n\nconst units: Array<[Intl.RelativeTimeFormatUnit, number]> = [\n ['year', 31_536_000],\n ['month', 2_592_000],\n ['day', 86_400],\n ['hour', 3600],\n ['minute', 60],\n]\n\n/** \"5 minutes ago\", \"yesterday\", \"in 3 hours\"; `seconds` is how long ago it was, negative for a time to come. */\nexport const formatRelativeTime = (seconds: number) => {\n const away = Math.abs(seconds)\n const [unit, size] = units.find(([, size]) => away >= size) ?? ['second', 1]\n if (unit === 'second' && away < 45) return text('justNow')\n return relative().format(-Math.sign(seconds) * Math.floor(away / size), unit)\n}\n","import { messages } from '../locale/messages'\n\nexport const text = messages('live')\n","import type { StoredFile, UploadResult } from '@protobase/client'\nimport type { FieldModel } from '@protobase/schema'\nimport { text } from './messages'\n\n/** A file uploaded in the form and not yet saved: the ticket the save sends, and a local preview while there is one. */\nexport type FileDraft = { uploaded: UploadResult; preview?: string }\n\nexport const isStoredFile = (value: unknown): value is StoredFile =>\n typeof value === 'object' && value !== null && typeof (value as { uri?: unknown }).uri === 'string'\n\nexport const isFileDraft = (value: unknown): value is FileDraft =>\n typeof value === 'object' && value !== null && typeof (value as { uploaded?: { value?: unknown } }).uploaded?.value === 'string'\n\n/** What a file field shows: its name, type and size, whether stored or just uploaded; `undefined` when empty. */\nexport const fileShown = (value: unknown) => {\n if (isFileDraft(value)) return { ...value.uploaded.file, ...(value.preview && { url: value.preview }), corrected: value.uploaded.corrected }\n if (!isStoredFile(value)) return undefined\n if ('missing' in value) return { name: text('fileMissing'), type: '', missing: true as const }\n return value\n}\n\nconst units = ['bytes', 'kB', 'MB', 'GB']\n\n/** `48 kB`, `1.2 MB`: decimal units, like the field's `maxSize`. */\nexport const formatSize = (bytes: number) => {\n let size = bytes\n let unit = 0\n while (size >= 1000 && unit < units.length - 1) {\n size /= 1000\n unit += 1\n }\n return unit === 0 ? `${bytes} ${bytes === 1 ? 'byte' : 'bytes'}` : `${size < 10 ? size.toFixed(1) : Math.round(size)} ${units[unit]}`\n}\n\n/** Raster images the browser shows; SVG is never shown, since it can carry scripts. */\nexport const isPreviewable = (type: string) => type.startsWith('image/') && type !== 'image/svg+xml'\n\n/** Where a picture is drawn, in CSS pixels. */\nexport type ImageBox = { width: number; height: number }\n\n// An image for a box needs this many pixels per CSS pixel to stay sharp on a high-density screen.\nconst density = 2\n// A side a variant leaves unbounded counts as larger than any image.\nconst unbounded = 100_000\n\ntype Variant = { url: string; width?: number; height?: number }\n\nconst covers = (variant: Variant, box: ImageBox) =>\n (variant.width !== undefined || variant.height !== undefined) &&\n (variant.width ?? unbounded) >= box.width * density &&\n (variant.height ?? unbounded) >= box.height * density\n\nconst area = (variant: Variant) => (variant.width ?? unbounded) * (variant.height ?? unbounded)\n\n/**\n * The picture of a file for `box`: the link of its smallest variant large enough for it, else the file's own, with its\n * placeholder; `undefined` for a file that is no raster image with a link.\n */\nexport const shownImage = (value: unknown, box: ImageBox) => {\n const file = fileShown(value)\n if (!file || 'missing' in file || !file.url || !isPreviewable(file.type)) return undefined\n const variants: Variant[] = 'variants' in file && file.variants ? Object.values(file.variants) : []\n const best = variants.filter((variant) => covers(variant, box)).sort((a, b) => area(a) - area(b))[0]\n return { url: best?.url ?? file.url, ...('placeholder' in file && file.placeholder !== undefined && { placeholder: file.placeholder }) }\n}\n\n/** The file input's `accept`: the field's allowed types, or nothing when it takes any. */\nexport const acceptOf = (field: FieldModel) => {\n const accept = field.file?.accept ?? []\n return accept.length === 0 || accept.includes('*/*') ? undefined : accept.join(',')\n}\n\n/** What a save sends for a file field: the ticket of a new upload, `null` to clear it, the stored URI to keep it. */\nexport const filePatchValue = (draft: unknown) => {\n if (isFileDraft(draft)) return draft.uploaded.value\n if (isStoredFile(draft)) return draft.uri\n return null\n}\n\n/** Whether a file field's draft changes what is stored. */\nexport const fileDiffers = (draft: unknown, stored: unknown) => {\n if (isFileDraft(draft)) return true\n const uri = (value: unknown) => (isStoredFile(value) ? value.uri : null)\n return uri(draft) !== uri(stored)\n}\n","import { enumLabel, type FieldModel, type FieldViewModel } from '@protobase/schema'\nimport { formatDate, formatDateTime, formatRelativeTime } from '../format/date'\nimport { viewerZone, zoneLabel } from '../format/zone'\nimport { fileShown } from './file-values'\nimport { formatTag } from '../locale/active-locale'\nimport { text as message } from './messages'\n\n// A number with the view's prefix before it and suffix after it, such as `€1,200` or `120 m²`.\nconst affixed = (text: string, hints: FieldViewModel) => `${hints.prefix ?? ''}${text}${hints.suffix ?? ''}`\n\n/**\n * A read-only rendering of a stored value, following the view's prefix, suffix, decimals, format and value label hints; a\n * timestamp on the clock of `zone`, the viewer's unless given.\n */\nexport const displayValue = (field: FieldModel, value: unknown, hints: FieldViewModel = {}, zone = viewerZone(), now = Date.now()) => {\n if (value === null || value === undefined || value === '') return '—'\n switch (field.type) {\n case 'boolean':\n return value ? message('yes') : message('no')\n case 'file':\n return fileShown(value)?.name ?? '—'\n case 'enum':\n return enumLabel(String(value), hints.valueLabels)\n case 'timestamp': {\n const ms = Date.parse(String(value))\n return hints.format === 'relative' ? formatRelativeTime(Math.round((now - ms) / 1000)) : formatDateTime(ms, zone)\n }\n case 'date':\n return formatDate(Date.parse(String(value)))\n case 'decimal': {\n const text = hints.decimals === undefined ? String(value) : Number(value).toFixed(hints.decimals)\n if (hints.format === 'percent') return `${Number(value)}%`\n return affixed(Number(text).toLocaleString(formatTag(), { minimumFractionDigits: hints.decimals ?? 0, maximumFractionDigits: hints.decimals ?? 20 }), hints)\n }\n case 'integer':\n case 'bigint':\n return affixed(String(value), hints)\n default:\n return typeof value === 'object' ? JSON.stringify(value) : String(value)\n }\n}\n\n/** The hover label of a shown value: the time zone a timestamp is shown in, or its exact time when shown relative; nothing for other values. */\nexport const valueTitle = (field: FieldModel, value: unknown, zone = viewerZone(), hints: FieldViewModel = {}) => {\n if (field.type !== 'timestamp' || typeof value !== 'string') return undefined\n const ms = Date.parse(value)\n if (Number.isNaN(ms)) return undefined\n if (hints.format === 'relative') return formatDateTime(ms, zone)\n return message('shownIn', { zone: zoneLabel(ms, zone) })\n}\n","import type { FieldModel, FieldViewModel } from '@protobase/schema'\nimport type { RelatedLabels } from '@protobase/client'\nimport { displayValue } from '../../live/display-value'\nimport { fileShown, isStoredFile } from '../../live/file-values'\nimport { viewerZone, zoneOffset } from '../../format/zone'\n\n/** `shown` exports values as the list shows them (labels, formatted dates and numbers), `raw` as the API stores them. */\nexport type ExportMode = 'shown' | 'raw'\n\n/** One column of an export: the field it reads, its header (the field's label) and the view's hints for it. */\nexport type ExportColumn = { name: string; header: string; field: FieldModel; hints: FieldViewModel }\n\n/** A typed spreadsheet cell; a date is a number of days since 1900 with a date format, as Excel stores it. */\nexport type Cell = { kind: 'empty' } | { kind: 'text'; value: string } | { kind: 'number'; value: number; format?: string } | { kind: 'boolean'; value: boolean }\n\nconst empty: Cell = { kind: 'empty' }\nconst text = (value: string): Cell => ({ kind: 'text', value })\n\nconst isEmpty = (value: unknown) => value === null || value === undefined || value === ''\n\nconst relationLabel = (column: ExportColumn, value: unknown, labels: RelatedLabels) => labels[column.name]?.[String(value)] ?? String(value)\n\n// A file's name as the list shows it; raw, its stored `uri`, since a private file's URL is signed for an hour or two.\nconst fileText = (value: unknown, mode: ExportMode) => {\n if (!isStoredFile(value)) return String(value)\n return mode === 'raw' ? value.uri : (fileShown(value)?.name ?? value.uri)\n}\n\n/** A value as one CSV field: as the list shows it, or as the API sends it, empty for no value. */\nexport const csvText = (column: ExportColumn, value: unknown, labels: RelatedLabels, mode: ExportMode) => {\n if (isEmpty(value)) return ''\n const { field, hints } = column\n if (field.type === 'file') return fileText(value, mode)\n if (field.type === 'relation') return mode === 'shown' ? relationLabel(column, value, labels) : String(value)\n if (mode === 'shown') return displayValue(field, value, { ...hints, format: undefined })\n if (typeof value === 'object') return JSON.stringify(value)\n return String(value)\n}\n\n// Excel counts days from 30 December 1899 and has no time zones: a shown time is on the viewer's clock, as the list shows\n// it, and a raw one in UTC, as the API sends it.\nconst excelEpochDays = 25_569\nconst msPerDay = 86_400_000\nconst excelSerial = (ms: number) => ms / msPerDay + excelEpochDays\n\nconst dateFormats = { shown: { date: 'd mmm yyyy', timestamp: 'd mmm yyyy, hh:mm' }, raw: { date: 'yyyy-mm-dd', timestamp: 'yyyy-mm-dd hh:mm:ss' } }\n\n// Every character of a prefix or suffix escaped, so Excel shows it as it is around the number.\nconst literal = (affix: string | undefined) => [...(affix ?? '')].map((char) => `\\\\${char}`).join('')\n\n/** The Excel number format that shows a number as the list does: its decimals, prefix and suffix, or a percent sign. */\nexport const numberFormat = (hints: FieldViewModel) => {\n if (hints.format === 'percent') return 'General\\\\%'\n const digits = hints.decimals === undefined ? 'General' : hints.decimals > 0 ? `#,##0.${'0'.repeat(hints.decimals)}` : '#,##0'\n const code = `${literal(hints.prefix)}${digits}${literal(hints.suffix)}`\n return code === 'General' ? undefined : code\n}\n\n// A number when the text holds one exactly enough to calculate with; a bigint past 2^53 stays text, so no digit is lost.\nconst numberCell = (column: ExportColumn, value: unknown, mode: ExportMode): Cell => {\n const number = Number(value)\n if (!Number.isFinite(number)) return text(String(value))\n if (column.field.type === 'bigint' && !Number.isSafeInteger(number)) return text(String(value))\n const format = mode === 'shown' ? numberFormat(column.hints) : undefined\n return format ? { kind: 'number', value: number, format } : { kind: 'number', value: number }\n}\n\nconst dateCell = (type: 'date' | 'timestamp', value: unknown, mode: ExportMode, zone: string): Cell => {\n const ms = Date.parse(String(value))\n if (Number.isNaN(ms)) return text(String(value))\n const clock = type === 'timestamp' && mode === 'shown' ? ms + zoneOffset(ms, zone) : ms\n return { kind: 'number', value: excelSerial(clock), format: dateFormats[mode][type] }\n}\n\n/** A value as one typed Excel cell: numbers, dates and booleans as such, labels or stored values as text. */\nexport const xlsxCell = (column: ExportColumn, value: unknown, labels: RelatedLabels, mode: ExportMode, zone = viewerZone()): Cell => {\n if (isEmpty(value)) return empty\n const { field } = column\n switch (field.type) {\n case 'boolean':\n return { kind: 'boolean', value: Boolean(value) }\n case 'integer':\n case 'bigint':\n case 'decimal':\n return numberCell(column, value, mode)\n case 'date':\n case 'timestamp':\n return dateCell(field.type, value, mode, zone)\n case 'relation':\n if (mode === 'shown') return text(relationLabel(column, value, labels))\n return typeof value === 'number' ? { kind: 'number', value } : text(String(value))\n default:\n return text(csvText(column, value, labels, mode))\n }\n}\n","/** The UTF-8 byte order mark, which makes Excel read a CSV file as UTF-8 instead of the system's code page. */\nexport const utf8Bom = new Uint8Array([0xef, 0xbb, 0xbf])\n\nconst needsQuotes = /[\",\\r\\n]/\n\n// Text Excel would run as a formula when the file is opened, such as `=HYPERLINK(...)`: a leading apostrophe keeps it\n// text (OWASP's advice on CSV injection).\nconst formulaStart = /^[=+\\-@\\t\\r]/\n\n/** One field as RFC 4180 writes it: in double quotes, its quotes doubled, when it holds a comma, quote or line break. */\nexport const csvField = (value: string) => (needsQuotes.test(value) ? `\"${value.replaceAll('\"', '\"\"')}\"` : value)\n\n/** Text from a text field, kept from running as a formula in a spreadsheet. */\nexport const csvTextField = (value: string) => csvField(formulaStart.test(value) ? `'${value}` : value)\n\n/** One record, CRLF-terminated as RFC 4180 has it. */\nexport const csvLine = (fields: string[]) => `${fields.join(',')}\\r\\n`\n","// DEFLATE is a complex format; to read this code, you should probably check the RFC first:\n// https://tools.ietf.org/html/rfc1951\n// You may also wish to take a look at the guide I made about this program:\n// https://gist.github.com/101arrowz/253f31eb5abc3d9275ab943003ffecad\n// Some of the following code is similar to that of UZIP.js:\n// https://github.com/photopea/UZIP.js\n// However, the vast majority of the codebase has diverged from UZIP.js to increase performance and reduce bundle size.\n// Sometimes 0 will appear where -1 would be more appropriate. This is because using a uint\n// is better for memory in most engines (I *think*).\nvar ch2 = {};\nvar wk = (function (c, id, msg, transfer, cb) {\n var w = new Worker(ch2[id] || (ch2[id] = URL.createObjectURL(new Blob([\n c + ';addEventListener(\"error\",function(e){e=e.error;postMessage({$e$:[e.message,e.code,e.stack]})})'\n ], { type: 'text/javascript' }))));\n w.onmessage = function (e) {\n var d = e.data, ed = d.$e$;\n if (ed) {\n var err = new Error(ed[0]);\n err['code'] = ed[1];\n err.stack = ed[2];\n cb(err, null);\n }\n else\n cb(null, d);\n };\n w.postMessage(msg, transfer);\n return w;\n});\n\n// aliases for shorter compressed code (most minifers don't do this)\nvar u8 = Uint8Array, u16 = Uint16Array, i32 = Int32Array;\n// fixed length extra bits\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, /* unused */ 0, 0, /* impossible */ 0]);\n// fixed distance extra bits\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, /* unused */ 0, 0]);\n// code length index map\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\n// get base, reverse index map from extra bits\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n // numbers here are at max 18 bits\n var r = new i32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = ((j - b[i]) << 5) | i;\n }\n }\n return { b: b, r: r };\n};\nvar _a = freb(fleb, 2), fl = _a.b, revfl = _a.r;\n// we can ignore the fact that the other numbers are wrong; they never happen anyway\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0), fd = _b.b, revfd = _b.r;\n// map of value to reverse (assuming 16 bits)\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n // reverse table algorithm from SO\n var x = ((i & 0xAAAA) >> 1) | ((i & 0x5555) << 1);\n x = ((x & 0xCCCC) >> 2) | ((x & 0x3333) << 2);\n x = ((x & 0xF0F0) >> 4) | ((x & 0x0F0F) << 4);\n rev[i] = (((x & 0xFF00) >> 8) | ((x & 0x00FF) << 8)) >> 1;\n}\n// create huffman tree from u8 \"map\": index -> code length for code index\n// mb (max bits) must be at most 15\n// TODO: optimize/split up?\nvar hMap = (function (cd, mb, r) {\n var s = cd.length;\n // index\n var i = 0;\n // u16 \"map\": index -> # of codes with bit length = index\n var l = new u16(mb);\n // length of cd must be 288 (total # of codes)\n for (; i < s; ++i) {\n if (cd[i])\n ++l[cd[i] - 1];\n }\n // u16 \"map\": index -> minimum code for bit length = index\n var le = new u16(mb);\n for (i = 1; i < mb; ++i) {\n le[i] = (le[i - 1] + l[i - 1]) << 1;\n }\n var co;\n if (r) {\n // u16 \"map\": index -> number of actual bits, symbol for code\n co = new u16(1 << mb);\n // bits to remove for reverser\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n // ignore 0 lengths\n if (cd[i]) {\n // num encoding both symbol and bits read\n var sv = (i << 4) | cd[i];\n // free bits\n var r_1 = mb - cd[i];\n // start value\n var v = le[cd[i] - 1]++ << r_1;\n // m is end value\n for (var m = v | ((1 << r_1) - 1); v <= m; ++v) {\n // every 16 bit value starting with the code yields the same result\n co[rev[v] >> rvb] = sv;\n }\n }\n }\n }\n else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >> (15 - cd[i]);\n }\n }\n }\n return co;\n});\n// fixed length tree\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\n// fixed distance tree\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\n// fixed length map\nvar flm = /*#__PURE__*/ hMap(flt, 9, 0), flrm = /*#__PURE__*/ hMap(flt, 9, 1);\n// fixed distance map\nvar fdm = /*#__PURE__*/ hMap(fdt, 5, 0), fdrm = /*#__PURE__*/ hMap(fdt, 5, 1);\n// find max of array\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\n// read d, starting at bit p and mask with m\nvar bits = function (d, p, m) {\n var o = (p / 8) | 0;\n return ((d[o] | (d[o + 1] << 8)) >> (p & 7)) & m;\n};\n// read d, starting at bit p continuing for at least 16 bits\nvar bits16 = function (d, p) {\n var o = (p / 8) | 0;\n return ((d[o] | (d[o + 1] << 8) | (d[o + 2] << 16)) >> (p & 7));\n};\n// get end of byte\nvar shft = function (p) { return ((p + 7) / 8) | 0; };\n// typed array slice - allows garbage collector to free original reference,\n// while being more compatible than .slice\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n // can't use .constructor in case user-supplied\n return new u8(v.subarray(s, e));\n};\n/**\n * Codes for errors generated within this library\n */\nexport var FlateErrorCode = {\n UnexpectedEOF: 0,\n InvalidBlockType: 1,\n InvalidLengthLiteral: 2,\n InvalidDistance: 3,\n StreamFinished: 4,\n NoStreamHandler: 5,\n InvalidHeader: 6,\n NoCallback: 7,\n InvalidUTF8: 8,\n ExtraFieldTooLong: 9,\n InvalidDate: 10,\n FilenameTooLong: 11,\n StreamFinishing: 12,\n InvalidZipData: 13,\n UnknownCompressionMethod: 14\n};\n// error codes\nvar ec = [\n 'unexpected EOF',\n 'invalid block type',\n 'invalid length/literal',\n 'invalid distance',\n 'stream finished',\n 'no stream handler',\n , // determined by compression function\n 'no callback',\n 'invalid UTF-8 data',\n 'extra field too long',\n 'date not in range 1980-2099',\n 'filename too long',\n 'stream finishing',\n 'invalid zip data'\n // determined by unknown compression method\n];\n;\nvar err = function (ind, msg, nt) {\n var e = new Error(msg || ec[ind]);\n e.code = ind;\n if (Error.captureStackTrace)\n Error.captureStackTrace(e, err);\n if (!nt)\n throw e;\n return e;\n};\n// expands raw DEFLATE data\nvar inflt = function (dat, st, buf, dict) {\n // source length dict length\n var sl = dat.length, dl = dict ? dict.length : 0;\n if (!sl || st.f && !st.l)\n return buf || new u8(0);\n var noBuf = !buf;\n // have to estimate size\n var resize = noBuf || st.i != 2;\n // no state\n var noSt = st.i;\n // Assumes roughly 33% compression ratio average\n if (noBuf)\n buf = new u8(sl * 3);\n // ensure buffer can fit at least l elements\n var cbuf = function (l) {\n var bl = buf.length;\n // need to increase size to fit\n if (l > bl) {\n // Double or set to necessary, whichever is greater\n var nbuf = new u8(Math.max(bl * 2, l));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n // last chunk bitpos bytes\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n // total bits\n var tbts = sl * 8;\n do {\n if (!lm) {\n // BFINAL - this is only 1 when last chunk is next\n final = bits(dat, pos, 1);\n // type: 0 = no compression, 1 = fixed huffman, 2 = dynamic huffman\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n // go to end of byte boundary\n var s = shft(pos) + 4, l = dat[s - 4] | (dat[s - 3] << 8), t = s + l;\n if (t > sl) {\n if (noSt)\n err(0);\n break;\n }\n // ensure size\n if (resize)\n cbuf(bt + l);\n // Copy over uncompressed data\n buf.set(dat.subarray(s, t), bt);\n // Get new bitpos, update byte count\n st.b = bt += l, st.p = pos = t * 8, st.f = final;\n continue;\n }\n else if (type == 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type == 2) {\n // literal lengths\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n // length+distance tree\n var ldt = new u8(tl);\n // code length tree\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n // use index map to get real code\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n // code lengths bits\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n // code lengths map\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n // bits read\n pos += r & 15;\n // symbol\n var s = r >> 4;\n // code length to copy\n if (s < 16) {\n ldt[i++] = s;\n }\n else {\n // copy count\n var c = 0, n = 0;\n if (s == 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s == 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s == 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n // length tree distance tree\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n // max length bits\n lbt = max(lt);\n // max dist bits\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n }\n else\n err(1);\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n }\n // Make sure the buffer can hold this + the largest possible addition\n // Maximum chunk size (practically, theoretically infinite) is 2^17\n if (resize)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (;; lpos = pos) {\n // bits read, code\n var c = lm[bits16(dat, pos) & lms], sym = c >> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n if (!c)\n err(2);\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym == 256) {\n lpos = pos, lm = null;\n break;\n }\n else {\n var add = sym - 254;\n // no extra bits needed if less\n if (sym > 264) {\n // index\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n // dist\n var d = dm[bits16(dat, pos) & dms], dsym = d >> 4;\n if (!d)\n err(3);\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n if (resize)\n cbuf(bt + 131072);\n var end = bt + add;\n if (bt < dt) {\n var shift = dl - dt, dend = Math.min(dt, end);\n if (shift + bt < 0)\n err(3);\n for (; bt < dend; ++bt)\n buf[bt] = dict[shift + bt];\n }\n for (; bt < end; ++bt)\n buf[bt] = buf[bt - dt];\n }\n }\n st.l = lm, st.p = lpos, st.b = bt, st.f = final;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n // don't reallocate for streams or user buffers\n return bt != buf.length && noBuf ? slc(buf, 0, bt) : buf.subarray(0, bt);\n};\n// starting at p, write the minimum number of bits that can hold v to d\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) | 0;\n d[o] |= v;\n d[o + 1] |= v >> 8;\n};\n// starting at p, write the minimum number of bits (>8) that can hold v to d\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) | 0;\n d[o] |= v;\n d[o + 1] |= v >> 8;\n d[o + 2] |= v >> 16;\n};\n// creates code lengths from a frequency table\nvar hTree = function (d, mb) {\n // Need extra info to make a tree\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return { t: et, l: 0 };\n if (s == 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return { t: v, l: 1 };\n }\n t.sort(function (a, b) { return a.f - b.f; });\n // after i2 reaches last ind, will be stopped\n // freq must be greater than largest possible number of symbols\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l: l, r: r };\n // efficient algorithm from UZIP.js\n // i0 is lookbehind, i2 is lookahead - after processing two low-freq\n // symbols that combined have high freq, will start processing i2 (high-freq,\n // non-composite) symbols instead\n // see https://reddit.com/r/photopea/comments/ikekht/uzipjs_questions/\n while (i1 != s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 != i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l: l, r: r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n // code lengths\n var tr = new u16(maxSym + 1);\n // max bits in tree\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n // more algorithms from UZIP.js\n // TODO: find out how this code works (debt)\n // ind debt\n var i = 0, dt = 0;\n // left cost\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) { return tr[b.s] - tr[a.s] || a.f - b.f; });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << (mbt - tr[i2_1]));\n tr[i2_1] = mb;\n }\n else\n break;\n }\n dt >>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << (mb - tr[i2_2]++ - 1);\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] == mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return { t: new u8(tr), l: mbt };\n};\n// get the max length and assign length codes\nvar ln = function (n, l, d) {\n return n.s == -1\n ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1))\n : (l[n.s] = d);\n};\n// length codes generation\nvar lc = function (c) {\n var s = c.length;\n // Note that the semicolon was intentional\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n // ind num streak\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) { cl[cli++] = v; };\n for (var i = 1; i <= s; ++i) {\n if (c[i] == cln && i != s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? ((cls - 11) << 5) | 28690 : ((cls - 3) << 5) | 12305);\n cls = 0;\n }\n }\n else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(((cls - 3) << 5) | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return { c: cl.subarray(0, cli), n: s };\n};\n// calculate the length of output from tree, code lengths\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\n// writes a fixed block\n// returns the new bit pos\nvar wfblk = function (out, pos, dat) {\n // no need to write 00 as type: TypedArray defaults to 0\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\n// writes a block\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a = hTree(lf, 15), dlt = _a.t, mlb = _a.l;\n var _b = hTree(df, 15), ddt = _b.t, mdb = _b.l;\n var _c = lc(dlt), lclt = _c.c, nlc = _c.n;\n var _d = lc(ddt), lcdt = _d.c, ndc = _d.n;\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n ++lcfreq[lclt[i] & 31];\n for (var i = 0; i < lcdt.length; ++i)\n ++lcfreq[lcdt[i] & 31];\n var _e = hTree(lcfreq, 7), lct = _e.t, mlcb = _e.l;\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = (bl + 5) << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + 2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18];\n if (bs >= 0 && flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, (clct[i] >> 5) & 127), p += clct[i] >> 12;\n }\n }\n }\n else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n var sym = syms[i];\n if (sym > 255) {\n var len = (sym >> 18) & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, (sym >> 23) & 31), p += fleb[len];\n var dst = sym & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, (sym >> 5) & 8191), p += fdeb[dst];\n }\n else {\n wbits16(out, p, lm[sym]), p += ll[sym];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\n// deflate options (nice << 13) | chain\nvar deo = /*#__PURE__*/ new i32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\n// empty\nvar et = /*#__PURE__*/ new u8(0);\n// compresses data into a raw DEFLATE buffer\nvar dflt = function (dat, lvl, plvl, pre, post, st) {\n var s = st.z || dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7000)) + post);\n // writing to this writes to the output buffer\n var w = o.subarray(pre, o.length - post);\n var lst = st.l;\n var pos = (st.r || 0) & 7;\n if (lvl) {\n if (pos)\n w[0] = st.r >> 3;\n var opt = deo[lvl - 1];\n var n = opt >> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n // prev 2-byte val map curr 2-byte val map\n var prev = st.p || new u16(32768), head = st.h || new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i) { return (dat[i] ^ (dat[i + 1] << bs1_1) ^ (dat[i + 2] << bs2_1)) & msk_1; };\n // 24576 is an arbitrary number of maximum symbols per block\n // 424 buffer for last block\n var syms = new i32(25000);\n // length/literal freq distance freq\n var lf = new u16(288), df = new u16(32);\n // l/lcnt exbits index l/lind waitdx blkpos\n var lc_1 = 0, eb = 0, i = st.i || 0, li = 0, wi = st.w || 0, bs = 0;\n for (; i + 2 < s; ++i) {\n // hash value\n var hv = hsh(i);\n // index mod 32768 previous index mod\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n // We always should modify head and prev, but only add symbols if\n // this data is not yet processed (\"wait\" for wait index)\n if (wi <= i) {\n // bytes remaining\n var rem = s - i;\n if ((lc_1 > 7000 || li > 24576) && (rem > 423 || !lst)) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n // len dist chain\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv == hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n // max possible length\n // not capped at dif because decompressors implement \"rolling\" index population\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod != pimod) {\n if (dat[i + l] == dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] == dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n // break out early when we reach \"nice\" (we are satisfied enough)\n if (nl > maxn)\n break;\n // now, find the rarest 2-byte sequence within this\n // length of literals and search for that instead.\n // Much faster than just using the start\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j & 32767;\n var pti = prev[ti];\n var cd = ti - pti & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n // check the previous match\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod & 32767;\n }\n }\n // d will be nonzero only when a match was found\n if (d) {\n // store both dist and len data in one int32\n // Make sure this is recognized as a len/dist with 28th bit (2^28)\n syms[li++] = 268435456 | (revfl[l] << 18) | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n }\n else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n for (i = Math.max(i, wi); i < s; ++i) {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst) {\n st.r = (pos & 7) | w[(pos / 8) | 0] << 3;\n // shft(pos) now 1 less if pos & 7 != 0\n pos -= 7;\n st.h = head, st.p = prev, st.i = i, st.w = wi;\n }\n }\n else {\n for (var i = st.w || 0; i < s + lst; i += 65535) {\n // end\n var e = i + 65535;\n if (e >= s) {\n // write final block\n w[(pos / 8) | 0] = lst;\n e = s;\n }\n pos = wfblk(w, pos + 1, dat.subarray(i, e));\n }\n st.i = s;\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\n// CRC32 table\nvar crct = /*#__PURE__*/ (function () {\n var t = new Int32Array(256);\n for (var i = 0; i < 256; ++i) {\n var c = i, k = 9;\n while (--k)\n c = ((c & 1) && -306674912) ^ (c >>> 1);\n t[i] = c;\n }\n return t;\n})();\n// CRC32\nvar crc = function () {\n var c = -1;\n return {\n p: function (d) {\n // closures have awful performance\n var cr = c;\n for (var i = 0; i < d.length; ++i)\n cr = crct[(cr & 255) ^ d[i]] ^ (cr >>> 8);\n c = cr;\n },\n d: function () { return ~c; }\n };\n};\n// Adler32\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n // closures have awful performance\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i != l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | (a & 0xFF00) << 8 | (b & 255) << 8 | (b >> 8);\n }\n };\n};\n;\n// deflate with opts\nvar dopt = function (dat, opt, pre, post, st) {\n if (!st) {\n st = { l: 1 };\n if (opt.dictionary) {\n var dict = opt.dictionary.subarray(-32768);\n var newDat = new u8(dict.length + dat.length);\n newDat.set(dict);\n newDat.set(dat, dict.length);\n dat = newDat;\n st.w = dict.length;\n }\n }\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? (st.l ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 20) : (12 + opt.mem), pre, post, st);\n};\n// Walmart object spread\nvar mrg = function (a, b) {\n var o = {};\n for (var k in a)\n o[k] = a[k];\n for (var k in b)\n o[k] = b[k];\n return o;\n};\n// worker clone\n// This is possibly the craziest part of the entire codebase, despite how simple it may seem.\n// The only parameter to this function is a closure that returns an array of variables outside of the function scope.\n// We're going to try to figure out the variable names used in the closure as strings because that is crucial for workerization.\n// We will return an object mapping of true variable name to value (basically, the current scope as a JS object).\n// The reason we can't just use the original variable names is minifiers mangling the toplevel scope.\n// This took me three weeks to figure out how to do.\nvar wcln = function (fn, fnStr, td) {\n var dt = fn();\n var st = fn.toString();\n var ks = st.slice(st.indexOf('[') + 1, st.lastIndexOf(']')).replace(/\\s+/g, '').split(',');\n for (var i = 0; i < dt.length; ++i) {\n var v = dt[i], k = ks[i];\n if (typeof v == 'function') {\n fnStr += ';' + k + '=';\n var st_1 = v.toString();\n if (v.prototype) {\n // for global objects\n if (st_1.indexOf('[native code]') != -1) {\n var spInd = st_1.indexOf(' ', 8) + 1;\n fnStr += st_1.slice(spInd, st_1.indexOf('(', spInd));\n }\n else {\n fnStr += st_1;\n for (var t in v.prototype)\n fnStr += ';' + k + '.prototype.' + t + '=' + v.prototype[t].toString();\n }\n }\n else\n fnStr += st_1;\n }\n else\n td[k] = v;\n }\n return fnStr;\n};\nvar ch = [];\n// clone bufs\nvar cbfs = function (v) {\n var tl = [];\n for (var k in v) {\n if (v[k].buffer) {\n tl.push((v[k] = new v[k].constructor(v[k])).buffer);\n }\n }\n return tl;\n};\n// use a worker to execute code\nvar wrkr = function (fns, init, id, cb) {\n if (!ch[id]) {\n var fnStr = '', td_1 = {}, m = fns.length - 1;\n for (var i = 0; i < m; ++i)\n fnStr = wcln(fns[i], fnStr, td_1);\n ch[id] = { c: wcln(fns[m], fnStr, td_1), e: td_1 };\n }\n var td = mrg({}, ch[id].e);\n return wk(ch[id].c + ';onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage=' + init.toString() + '}', id, td, cbfs(td), cb);\n};\n// base async inflate fn\nvar bInflt = function () { return [u8, u16, i32, fleb, fdeb, clim, fl, fd, flrm, fdrm, rev, ec, hMap, max, bits, bits16, shft, slc, err, inflt, inflateSync, pbf, gopt]; };\nvar bDflt = function () { return [u8, u16, i32, fleb, fdeb, clim, revfl, revfd, flm, flt, fdm, fdt, rev, deo, et, hMap, wbits, wbits16, hTree, ln, lc, clen, wfblk, wblk, shft, slc, dflt, dopt, deflateSync, pbf]; };\n// gzip extra\nvar gze = function () { return [gzh, gzhl, wbytes, crc, crct]; };\n// gunzip extra\nvar guze = function () { return [gzs, gzl]; };\n// zlib extra\nvar zle = function () { return [zlh, wbytes, adler]; };\n// unzlib extra\nvar zule = function () { return [zls]; };\n// post buf\nvar pbf = function (msg) { return postMessage(msg, [msg.buffer]); };\n// get opts\nvar gopt = function (o) { return o && {\n out: o.size && new u8(o.size),\n dictionary: o.dictionary\n}; };\n// async helper\nvar cbify = function (dat, opts, fns, init, id, cb) {\n var w = wrkr(fns, init, id, function (err, dat) {\n w.terminate();\n cb(err, dat);\n });\n w.postMessage([dat, opts], opts.consume ? [dat.buffer] : []);\n return function () { w.terminate(); };\n};\n// auto stream\nvar astrm = function (strm) {\n strm.ondata = function (dat, final) { return postMessage([dat, final], [dat.buffer]); };\n return function (ev) {\n if (ev.data[0]) {\n strm.push(ev.data[0], ev.data[1]);\n postMessage([ev.data[0].length]);\n }\n else\n strm.flush(ev.data[1]);\n };\n};\n// async stream attach\nvar astrmify = function (fns, strm, opts, init, id, flush, ext) {\n var t;\n var w = wrkr(fns, init, id, function (err, dat) {\n if (err)\n w.terminate(), strm.ondata.call(strm, err);\n else if (!Array.isArray(dat))\n ext(dat);\n else if (dat.length == 1) {\n strm.queuedSize -= dat[0];\n if (strm.ondrain)\n strm.ondrain(dat[0]);\n }\n else {\n if (dat[1])\n w.terminate();\n strm.ondata.call(strm, err, dat[0], dat[1]);\n }\n });\n w.postMessage(opts);\n strm.queuedSize = 0;\n strm.push = function (d, f) {\n if (!strm.ondata)\n err(5);\n if (t)\n strm.ondata(err(4, 0, 1), null, !!f);\n strm.queuedSize += d.length;\n // can fail for cross-realm Uint8Array, but ok - only a small performance penalty\n w.postMessage([d, t = f], d.buffer instanceof ArrayBuffer ? [d.buffer] : []);\n };\n strm.terminate = function () { w.terminate(); };\n if (flush) {\n strm.flush = function (sync) { w.postMessage([0, sync]); };\n }\n};\n// read 2 bytes\nvar b2 = function (d, b) { return d[b] | (d[b + 1] << 8); };\n// read 4 bytes\nvar b4 = function (d, b) { return (d[b] | (d[b + 1] << 8) | (d[b + 2] << 16) | (d[b + 3] << 24)) >>> 0; };\n// read 8 bytes\nvar b8 = function (d, b) { return b4(d, b) + (b4(d, b + 4) * 4294967296); };\n// write bytes\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\n// gzip header\nvar gzh = function (c, o) {\n var fn = o.filename;\n c[0] = 31, c[1] = 139, c[2] = 8, c[8] = o.level < 2 ? 4 : o.level == 9 ? 2 : 0, c[9] = 3; // assume Unix\n if (o.mtime != 0)\n wbytes(c, 4, Math.floor(new Date(o.mtime || Date.now()) / 1000));\n if (fn) {\n c[3] = 8;\n for (var i = 0; i <= fn.length; ++i)\n c[i + 10] = fn.charCodeAt(i);\n }\n};\n// gzip footer: -8 to -4 = CRC, -4 to -0 is length\n// gzip start\nvar gzs = function (d) {\n if (d[0] != 31 || d[1] != 139 || d[2] != 8)\n err(6, 'invalid gzip data');\n var flg = d[3];\n var st = 10;\n if (flg & 4)\n st += (d[10] | d[11] << 8) + 2;\n for (var zs = (flg >> 3 & 1) + (flg >> 4 & 1); zs > 0; zs -= !d[st++])\n ;\n return st + (flg & 2);\n};\n// gzip length\nvar gzl = function (d) {\n var l = d.length;\n return (d[l - 4] | d[l - 3] << 8 | d[l - 2] << 16 | d[l - 1] << 24) >>> 0;\n};\n// gzip header length\nvar gzhl = function (o) { return 10 + (o.filename ? o.filename.length + 1 : 0); };\n// zlib header\nvar zlh = function (c, o) {\n var lv = o.level, fl = lv == 0 ? 0 : lv < 6 ? 1 : lv == 9 ? 3 : 2;\n c[0] = 120, c[1] = (fl << 6) | (o.dictionary && 32);\n c[1] |= 31 - ((c[0] << 8) | c[1]) % 31;\n if (o.dictionary) {\n var h = adler();\n h.p(o.dictionary);\n wbytes(c, 2, h.d());\n }\n};\n// zlib start\nvar zls = function (d, dict) {\n if ((d[0] & 15) != 8 || (d[0] >> 4) > 7 || ((d[0] << 8 | d[1]) % 31))\n err(6, 'invalid zlib data');\n if ((d[1] >> 5 & 1) == +!dict)\n err(6, 'invalid zlib data: ' + (d[1] & 32 ? 'need' : 'unexpected') + ' dictionary');\n return (d[1] >> 3 & 4) + 2;\n};\nfunction StrmOpt(opts, cb) {\n if (typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n return opts;\n}\n/**\n * Streaming DEFLATE compression\n */\nvar Deflate = /*#__PURE__*/ (function () {\n function Deflate(opts, cb) {\n if (typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n this.o = opts || {};\n this.s = { l: 0, i: 32768, w: 32768, z: 32768 };\n // Buffer length must always be 0 mod 32768 for index calculations to be correct when modifying head and prev\n // 98304 = 32768 (lookback) + 65536 (common chunk size)\n this.b = new u8(98304);\n if (this.o.dictionary) {\n var dict = this.o.dictionary.subarray(-32768);\n this.b.set(dict, 32768 - dict.length);\n this.s.i = 32768 - dict.length;\n }\n }\n Deflate.prototype.p = function (c, f) {\n this.ondata(dopt(c, this.o, 0, 0, this.s), f);\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Deflate.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (this.s.l)\n err(4);\n var endLen = chunk.length + this.s.z;\n if (endLen > this.b.length) {\n if (endLen > 2 * this.b.length - 32768) {\n var newBuf = new u8(endLen & -32768);\n newBuf.set(this.b.subarray(0, this.s.z));\n this.b = newBuf;\n }\n var split = this.b.length - this.s.z;\n this.b.set(chunk.subarray(0, split), this.s.z);\n this.s.z = this.b.length;\n this.p(this.b, false);\n this.b.set(this.b.subarray(-32768));\n this.b.set(chunk.subarray(split), 32768);\n this.s.z = chunk.length - split + 32768;\n this.s.i = 32766, this.s.w = 32768;\n }\n else {\n this.b.set(chunk, this.s.z);\n this.s.z += chunk.length;\n }\n this.s.l = final & 1;\n if (this.s.z > this.s.w + 8191 || final) {\n this.p(this.b, final || false);\n this.s.w = this.s.i, this.s.i -= 2;\n }\n if (final) {\n // cleanup unneeded buffers/state to reduce memory usage\n this.s = this.o = {};\n this.b = et;\n }\n };\n /**\n * Flushes buffered uncompressed data. Useful to immediately retrieve the\n * deflated output for small inputs.\n * @param sync Whether to flush to a byte boundary. A sync flush takes 4-5\n * extra bytes, but guarantees all pushed data is immediately\n * decompressible. A separate DEFLATE stream may be concatenated\n * with the current output after a sync flush.\n */\n Deflate.prototype.flush = function (sync) {\n if (!this.ondata)\n err(5);\n if (this.s.l)\n err(4);\n this.p(this.b, false);\n this.s.w = this.s.i, this.s.i -= 2;\n // could technically skip writing the type-0 block for (this.s.r & 7) == 0,\n // but the deterministic trailer (00 00 FF FF) is useful in some situations\n if (sync) {\n var c = new u8(6);\n c[0] = this.s.r >> 3;\n // write empty, non-final type-0 block\n var ep = wfblk(c, this.s.r, et);\n this.s.r = 0;\n this.ondata(c.subarray(0, ep >> 3), false);\n }\n };\n return Deflate;\n}());\nexport { Deflate };\n/**\n * Asynchronous streaming DEFLATE compression\n */\nvar AsyncDeflate = /*#__PURE__*/ (function () {\n function AsyncDeflate(opts, cb) {\n astrmify([\n bDflt,\n function () { return [astrm, Deflate]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Deflate(ev.data);\n onmessage = astrm(strm);\n }, 6, 1);\n }\n return AsyncDeflate;\n}());\nexport { AsyncDeflate };\nexport function deflate(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bDflt,\n ], function (ev) { return pbf(deflateSync(ev.data[0], ev.data[1])); }, 0, cb);\n}\n/**\n * Compresses data with DEFLATE without any wrapper\n * @param data The data to compress\n * @param opts The compression options\n * @returns The deflated version of the data\n */\nexport function deflateSync(data, opts) {\n return dopt(data, opts || {}, 0, 0);\n}\n/**\n * Streaming DEFLATE decompression\n */\nvar Inflate = /*#__PURE__*/ (function () {\n function Inflate(opts, cb) {\n // no StrmOpt here to avoid adding to workerizer\n if (typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n var dict = opts && opts.dictionary && opts.dictionary.subarray(-32768);\n this.s = { i: 0, b: dict ? dict.length : 0 };\n this.o = new u8(32768);\n this.p = new u8(0);\n if (dict)\n this.o.set(dict);\n }\n Inflate.prototype.e = function (c) {\n if (!this.ondata)\n err(5);\n if (this.d)\n err(4);\n if (!this.p.length)\n this.p = c;\n else if (c.length) {\n var n = new u8(this.p.length + c.length);\n n.set(this.p), n.set(c, this.p.length), this.p = n;\n }\n };\n Inflate.prototype.c = function (final) {\n this.s.i = +(this.d = final || false);\n var bts = this.s.b;\n var dt = inflt(this.p, this.s, this.o);\n this.ondata(slc(dt, bts, this.s.b), this.d);\n this.o = slc(dt, this.s.b - 32768), this.s.b = this.o.length;\n this.p = slc(this.p, (this.s.p / 8) | 0), this.s.p &= 7;\n };\n /**\n * Pushes a chunk to be inflated\n * @param chunk The chunk to push\n * @param final Whether this is the final chunk\n */\n Inflate.prototype.push = function (chunk, final) {\n this.e(chunk), this.c(final);\n };\n return Inflate;\n}());\nexport { Inflate };\n/**\n * Asynchronous streaming DEFLATE decompression\n */\nvar AsyncInflate = /*#__PURE__*/ (function () {\n function AsyncInflate(opts, cb) {\n astrmify([\n bInflt,\n function () { return [astrm, Inflate]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Inflate(ev.data);\n onmessage = astrm(strm);\n }, 7, 0);\n }\n return AsyncInflate;\n}());\nexport { AsyncInflate };\nexport function inflate(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bInflt\n ], function (ev) { return pbf(inflateSync(ev.data[0], gopt(ev.data[1]))); }, 1, cb);\n}\nexport function inflateSync(data, opts) {\n return inflt(data, { i: 2 }, opts && opts.out, opts && opts.dictionary);\n}\n// before you yell at me for not just using extends, my reason is that TS inheritance is hard to workerize.\n/**\n * Streaming GZIP compression\n */\nvar Gzip = /*#__PURE__*/ (function () {\n function Gzip(opts, cb) {\n this.c = crc();\n this.l = 0;\n this.v = 1;\n Deflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be GZIPped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Gzip.prototype.push = function (chunk, final) {\n this.c.p(chunk);\n this.l += chunk.length;\n Deflate.prototype.push.call(this, chunk, final);\n };\n Gzip.prototype.p = function (c, f) {\n var raw = dopt(c, this.o, this.v && gzhl(this.o), f && 8, this.s);\n if (this.v)\n gzh(raw, this.o), this.v = 0;\n if (f)\n wbytes(raw, raw.length - 8, this.c.d()), wbytes(raw, raw.length - 4, this.l);\n this.ondata(raw, f);\n };\n /**\n * Flushes buffered uncompressed data. Useful to immediately retrieve the\n * GZIPped output for small inputs.\n * @param sync Whether to flush to a byte boundary. A sync flush takes 4-5\n * extra bytes, but guarantees all pushed data is immediately\n * decompressible.\n */\n Gzip.prototype.flush = function (sync) {\n Deflate.prototype.flush.call(this, sync);\n };\n return Gzip;\n}());\nexport { Gzip };\n/**\n * Asynchronous streaming GZIP compression\n */\nvar AsyncGzip = /*#__PURE__*/ (function () {\n function AsyncGzip(opts, cb) {\n astrmify([\n bDflt,\n gze,\n function () { return [astrm, Deflate, Gzip]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Gzip(ev.data);\n onmessage = astrm(strm);\n }, 8, 1);\n }\n return AsyncGzip;\n}());\nexport { AsyncGzip };\nexport function gzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bDflt,\n gze,\n function () { return [gzipSync]; }\n ], function (ev) { return pbf(gzipSync(ev.data[0], ev.data[1])); }, 2, cb);\n}\n/**\n * Compresses data with GZIP\n * @param data The data to compress\n * @param opts The compression options\n * @returns The gzipped version of the data\n */\nexport function gzipSync(data, opts) {\n if (!opts)\n opts = {};\n var c = crc(), l = data.length;\n c.p(data);\n var d = dopt(data, opts, gzhl(opts), 8), s = d.length;\n return gzh(d, opts), wbytes(d, s - 8, c.d()), wbytes(d, s - 4, l), d;\n}\n/**\n * Streaming single or multi-member GZIP decompression\n */\nvar Gunzip = /*#__PURE__*/ (function () {\n function Gunzip(opts, cb) {\n this.v = 1;\n this.r = 0;\n Inflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be GUNZIPped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Gunzip.prototype.push = function (chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n this.r += chunk.length;\n if (this.v) {\n var p = this.p.subarray(this.v - 1);\n var s = p.length > 3 ? gzs(p) : 4;\n if (s > p.length) {\n if (!final)\n return;\n }\n else if (this.v > 1 && this.onmember) {\n this.onmember(this.r - p.length);\n }\n this.p = p.subarray(s), this.v = 0;\n }\n // necessary to prevent TS from using the closure value\n // This allows for workerization to function correctly\n Inflate.prototype.c.call(this, 0);\n // process concatenated GZIP\n if (this.s.f && !this.s.l) {\n this.v = shft(this.s.p) + 9;\n this.s = { i: 0 };\n this.o = new u8(0);\n this.push(new u8(0), final);\n }\n else if (final) {\n Inflate.prototype.c.call(this, final);\n }\n };\n return Gunzip;\n}());\nexport { Gunzip };\n/**\n * Asynchronous streaming single or multi-member GZIP decompression\n */\nvar AsyncGunzip = /*#__PURE__*/ (function () {\n function AsyncGunzip(opts, cb) {\n var _this = this;\n astrmify([\n bInflt,\n guze,\n function () { return [astrm, Inflate, Gunzip]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Gunzip(ev.data);\n strm.onmember = function (offset) { return postMessage(offset); };\n onmessage = astrm(strm);\n }, 9, 0, function (offset) { return _this.onmember && _this.onmember(offset); });\n }\n return AsyncGunzip;\n}());\nexport { AsyncGunzip };\nexport function gunzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bInflt,\n guze,\n function () { return [gunzipSync]; }\n ], function (ev) { return pbf(gunzipSync(ev.data[0], ev.data[1])); }, 3, cb);\n}\nexport function gunzipSync(data, opts) {\n var st = gzs(data);\n if (st + 8 > data.length)\n err(6, 'invalid gzip data');\n return inflt(data.subarray(st, -8), { i: 2 }, opts && opts.out || new u8(gzl(data)), opts && opts.dictionary);\n}\n/**\n * Streaming Zlib compression\n */\nvar Zlib = /*#__PURE__*/ (function () {\n function Zlib(opts, cb) {\n this.c = adler();\n this.v = 1;\n Deflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be zlibbed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Zlib.prototype.push = function (chunk, final) {\n this.c.p(chunk);\n Deflate.prototype.push.call(this, chunk, final);\n };\n Zlib.prototype.p = function (c, f) {\n var raw = dopt(c, this.o, this.v && (this.o.dictionary ? 6 : 2), f && 4, this.s);\n if (this.v)\n zlh(raw, this.o), this.v = 0;\n if (f)\n wbytes(raw, raw.length - 4, this.c.d());\n this.ondata(raw, f);\n };\n /**\n * Flushes buffered uncompressed data. Useful to immediately retrieve the\n * zlibbed output for small inputs.\n * @param sync Whether to flush to a byte boundary. A sync flush takes 4-5\n * extra bytes, but guarantees all pushed data is immediately\n * decompressible.\n */\n Zlib.prototype.flush = function (sync) {\n Deflate.prototype.flush.call(this, sync);\n };\n return Zlib;\n}());\nexport { Zlib };\n/**\n * Asynchronous streaming Zlib compression\n */\nvar AsyncZlib = /*#__PURE__*/ (function () {\n function AsyncZlib(opts, cb) {\n astrmify([\n bDflt,\n zle,\n function () { return [astrm, Deflate, Zlib]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Zlib(ev.data);\n onmessage = astrm(strm);\n }, 10, 1);\n }\n return AsyncZlib;\n}());\nexport { AsyncZlib };\nexport function zlib(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bDflt,\n zle,\n function () { return [zlibSync]; }\n ], function (ev) { return pbf(zlibSync(ev.data[0], ev.data[1])); }, 4, cb);\n}\n/**\n * Compress data with Zlib\n * @param data The data to compress\n * @param opts The compression options\n * @returns The zlib-compressed version of the data\n */\nexport function zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, opts.dictionary ? 6 : 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\n/**\n * Streaming Zlib decompression\n */\nvar Unzlib = /*#__PURE__*/ (function () {\n function Unzlib(opts, cb) {\n Inflate.call(this, opts, cb);\n this.v = opts && opts.dictionary ? 2 : 1;\n }\n /**\n * Pushes a chunk to be unzlibbed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Unzlib.prototype.push = function (chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n if (this.v) {\n if (this.p.length < 6 && !final)\n return;\n this.p = this.p.subarray(zls(this.p, this.v - 1)), this.v = 0;\n }\n if (final) {\n if (this.p.length < 4)\n err(6, 'invalid zlib data');\n this.p = this.p.subarray(0, -4);\n }\n // necessary to prevent TS from using the closure value\n // This allows for workerization to function correctly\n Inflate.prototype.c.call(this, final);\n };\n return Unzlib;\n}());\nexport { Unzlib };\n/**\n * Asynchronous streaming Zlib decompression\n */\nvar AsyncUnzlib = /*#__PURE__*/ (function () {\n function AsyncUnzlib(opts, cb) {\n astrmify([\n bInflt,\n zule,\n function () { return [astrm, Inflate, Unzlib]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Unzlib(ev.data);\n onmessage = astrm(strm);\n }, 11, 0);\n }\n return AsyncUnzlib;\n}());\nexport { AsyncUnzlib };\nexport function unzlib(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bInflt,\n zule,\n function () { return [unzlibSync]; }\n ], function (ev) { return pbf(unzlibSync(ev.data[0], gopt(ev.data[1]))); }, 5, cb);\n}\nexport function unzlibSync(data, opts) {\n return inflt(data.subarray(zls(data, opts && opts.dictionary), -4), { i: 2 }, opts && opts.out, opts && opts.dictionary);\n}\n// Default algorithm for compression (used because having a known output size allows faster decompression)\nexport { gzip as compress, AsyncGzip as AsyncCompress };\nexport { gzipSync as compressSync, Gzip as Compress };\n/**\n * Streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar Decompress = /*#__PURE__*/ (function () {\n function Decompress(opts, cb) {\n this.o = StrmOpt.call(this, opts, cb) || {};\n this.G = Gunzip;\n this.I = Inflate;\n this.Z = Unzlib;\n }\n // init substream\n // overriden by AsyncDecompress\n Decompress.prototype.i = function () {\n var _this = this;\n this.s.ondata = function (dat, final) {\n _this.ondata(dat, final);\n };\n };\n /**\n * Pushes a chunk to be decompressed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Decompress.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (!this.s) {\n if (this.p && this.p.length) {\n var n = new u8(this.p.length + chunk.length);\n n.set(this.p), n.set(chunk, this.p.length);\n }\n else\n this.p = chunk;\n if (this.p.length > 2) {\n this.s = (this.p[0] == 31 && this.p[1] == 139 && this.p[2] == 8)\n ? new this.G(this.o)\n : ((this.p[0] & 15) != 8 || (this.p[0] >> 4) > 7 || ((this.p[0] << 8 | this.p[1]) % 31))\n ? new this.I(this.o)\n : new this.Z(this.o);\n this.i();\n this.s.push(this.p, final);\n this.p = null;\n }\n }\n else\n this.s.push(chunk, final);\n };\n return Decompress;\n}());\nexport { Decompress };\n/**\n * Asynchronous streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar AsyncDecompress = /*#__PURE__*/ (function () {\n function AsyncDecompress(opts, cb) {\n Decompress.call(this, opts, cb);\n this.queuedSize = 0;\n this.G = AsyncGunzip;\n this.I = AsyncInflate;\n this.Z = AsyncUnzlib;\n }\n AsyncDecompress.prototype.i = function () {\n var _this = this;\n this.s.ondata = function (err, dat, final) {\n _this.ondata(err, dat, final);\n };\n this.s.ondrain = function (size) {\n _this.queuedSize -= size;\n if (_this.ondrain)\n _this.ondrain(size);\n };\n };\n /**\n * Pushes a chunk to be decompressed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n AsyncDecompress.prototype.push = function (chunk, final) {\n this.queuedSize += chunk.length;\n Decompress.prototype.push.call(this, chunk, final);\n };\n return AsyncDecompress;\n}());\nexport { AsyncDecompress };\nexport function decompress(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n ? gunzip(data, opts, cb)\n : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n ? inflate(data, opts, cb)\n : unzlib(data, opts, cb);\n}\n/**\n * Expands compressed GZIP, Zlib, or raw DEFLATE data, automatically detecting the format\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nexport function decompressSync(data, opts) {\n return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n ? gunzipSync(data, opts)\n : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n ? inflateSync(data, opts)\n : unzlibSync(data, opts);\n}\n// flatten a directory structure\nvar fltn = function (d, p, t, o) {\n for (var k in d) {\n var val = d[k], n = p + k, op = o;\n if (Array.isArray(val))\n op = mrg(o, val[1]), val = val[0];\n if (ArrayBuffer.isView(val))\n t[n] = [val, op];\n else {\n t[n += '/'] = [new u8(0), op];\n fltn(val, n, t, o);\n }\n }\n};\n// text encoder\nvar te = typeof TextEncoder != 'undefined' && /*#__PURE__*/ new TextEncoder();\n// text decoder\nvar td = typeof TextDecoder != 'undefined' && /*#__PURE__*/ new TextDecoder();\n// text decoder stream\nvar tds = 0;\ntry {\n td.decode(et, { stream: true });\n tds = 1;\n}\ncatch (e) { }\n// decode UTF8\nvar dutf8 = function (d) {\n for (var r = '', i = 0;;) {\n var c = d[i++];\n var eb = (c > 127) + (c > 223) + (c > 239);\n if (i + eb > d.length)\n return { s: r, r: slc(d, i - 1) };\n if (!eb)\n r += String.fromCharCode(c);\n else if (eb == 3) {\n c = ((c & 15) << 18 | (d[i++] & 63) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63)) - 65536,\n r += String.fromCharCode(55296 | (c >> 10), 56320 | (c & 1023));\n }\n else if (eb & 1)\n r += String.fromCharCode((c & 31) << 6 | (d[i++] & 63));\n else\n r += String.fromCharCode((c & 15) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63));\n }\n};\n/**\n * Streaming UTF-8 decoding\n */\nvar DecodeUTF8 = /*#__PURE__*/ (function () {\n /**\n * Creates a UTF-8 decoding stream\n * @param cb The callback to call whenever data is decoded\n */\n function DecodeUTF8(cb) {\n this.ondata = cb;\n if (tds)\n this.t = new TextDecoder();\n else\n this.p = et;\n }\n /**\n * Pushes a chunk to be decoded from UTF-8 binary\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n DecodeUTF8.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n final = !!final;\n if (this.t) {\n this.ondata(this.t.decode(chunk, { stream: true }), final);\n if (final) {\n if (this.t.decode().length)\n err(8);\n this.t = null;\n }\n return;\n }\n if (!this.p)\n err(4);\n var dat = new u8(this.p.length + chunk.length);\n dat.set(this.p);\n dat.set(chunk, this.p.length);\n var _a = dutf8(dat), s = _a.s, r = _a.r;\n if (final) {\n if (r.length)\n err(8);\n this.p = null;\n }\n else\n this.p = r;\n this.ondata(s, final);\n };\n return DecodeUTF8;\n}());\nexport { DecodeUTF8 };\n/**\n * Streaming UTF-8 encoding\n */\nvar EncodeUTF8 = /*#__PURE__*/ (function () {\n /**\n * Creates a UTF-8 decoding stream\n * @param cb The callback to call whenever data is encoded\n */\n function EncodeUTF8(cb) {\n this.ondata = cb;\n }\n /**\n * Pushes a chunk to be encoded to UTF-8\n * @param chunk The string data to push\n * @param final Whether this is the last chunk\n */\n EncodeUTF8.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (this.d)\n err(4);\n this.ondata(strToU8(chunk), this.d = final || false);\n };\n return EncodeUTF8;\n}());\nexport { EncodeUTF8 };\n/**\n * Converts a string into a Uint8Array for use with compression/decompression methods\n * @param str The string to encode\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n * not need to be true unless decoding a binary string.\n * @returns The string encoded in UTF-8/Latin-1 binary\n */\nexport function strToU8(str, latin1) {\n if (latin1) {\n var ar_1 = new u8(str.length);\n for (var i = 0; i < str.length; ++i)\n ar_1[i] = str.charCodeAt(i);\n return ar_1;\n }\n if (te)\n return te.encode(str);\n var l = str.length;\n var ar = new u8(str.length + (str.length >> 1));\n var ai = 0;\n var w = function (v) { ar[ai++] = v; };\n for (var i = 0; i < l; ++i) {\n if (ai + 5 > ar.length) {\n var n = new u8(ai + 8 + ((l - i) << 1));\n n.set(ar);\n ar = n;\n }\n var c = str.charCodeAt(i);\n if (c < 128 || latin1)\n w(c);\n else if (c < 2048)\n w(192 | (c >> 6)), w(128 | (c & 63));\n else if (c > 55295 && c < 57344)\n c = 65536 + (c & 1023 << 10) | (str.charCodeAt(++i) & 1023),\n w(240 | (c >> 18)), w(128 | ((c >> 12) & 63)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n else\n w(224 | (c >> 12)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n }\n return slc(ar, 0, ai);\n}\n/**\n * Converts a Uint8Array to a string\n * @param dat The data to decode to string\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n * not need to be true unless encoding to binary string.\n * @returns The original UTF-8/Latin-1 string\n */\nexport function strFromU8(dat, latin1) {\n if (latin1) {\n var r = '';\n for (var i = 0; i < dat.length; i += 16384)\n r += String.fromCharCode.apply(null, dat.subarray(i, i + 16384));\n return r;\n }\n else if (td) {\n return td.decode(dat);\n }\n else {\n var _a = dutf8(dat), s = _a.s, r = _a.r;\n if (r.length)\n err(8);\n return s;\n }\n}\n;\n// deflate bit flag\nvar dbf = function (l) { return l == 1 ? 3 : l < 6 ? 2 : l == 9 ? 1 : 0; };\n// skip local zip header\nvar slzh = function (d, b) { return b + 30 + b2(d, b + 26) + b2(d, b + 28); };\n// read zip header\nvar zh = function (d, b, z) {\n var fnl = b2(d, b + 28), efl = b2(d, b + 30), fn = strFromU8(d.subarray(b + 46, b + 46 + fnl), !(b2(d, b + 8) & 2048)), es = b + 46 + fnl;\n var _a = z64hs(d, es, efl, z, b4(d, b + 20), b4(d, b + 24), b4(d, b + 42)), sc = _a[0], su = _a[1], off = _a[2];\n return [b2(d, b + 10), sc, su, fn, es + efl + b2(d, b + 32), off];\n};\n// read zip64 header sizes\nvar z64hs = function (d, b, l, z, sc, su, off) {\n var nsc = sc == 4294967295, nsu = su == 4294967295, noff = off == 4294967295, e = b + l;\n var nf = nsc + nsu + noff;\n if (z && nf) {\n for (; b + 4 < e; b += 4 + b2(d, b + 2)) {\n if (b2(d, b) == 1) {\n return [\n nsc ? b8(d, b + 4 + 8 * nsu) : sc,\n nsu ? b8(d, b + 4) : su,\n noff ? b8(d, b + 4 + 8 * (nsu + nsc)) : off,\n 1\n ];\n }\n }\n // z == 2 for unknown whether or not zip64\n if (z < 2)\n err(13);\n }\n return [sc, su, off, 0];\n};\n// extra field length\nvar exfl = function (ex) {\n var le = 0;\n if (ex) {\n for (var k in ex) {\n var l = ex[k].length;\n if (l > 65535)\n err(9);\n le += l + 4;\n }\n }\n return le;\n};\n// write zip header\nvar wzh = function (d, b, f, fn, u, c, ce, co) {\n var fl = fn.length, ex = f.extra, col = co && co.length;\n var exl = exfl(ex);\n wbytes(d, b, ce != null ? 0x2014B50 : 0x4034B50), b += 4;\n if (ce != null)\n d[b++] = 20, d[b++] = f.os;\n d[b] = 20, b += 2; // spec compliance? what's that?\n d[b++] = (f.flag << 1) | (c < 0 && 8), d[b++] = u && 8;\n d[b++] = f.compression & 255, d[b++] = f.compression >> 8;\n var dt = new Date(f.mtime == null ? Date.now() : f.mtime), y = dt.getFullYear() - 1980;\n if (y < 0 || y > 119)\n err(10);\n wbytes(d, b, (y << 25) | ((dt.getMonth() + 1) << 21) | (dt.getDate() << 16) | (dt.getHours() << 11) | (dt.getMinutes() << 5) | (dt.getSeconds() >> 1)), b += 4;\n if (c != -1) {\n wbytes(d, b, f.crc);\n wbytes(d, b + 4, c < 0 ? -c - 2 : c);\n wbytes(d, b + 8, f.size);\n }\n wbytes(d, b + 12, fl);\n wbytes(d, b + 14, exl), b += 16;\n if (ce != null) {\n wbytes(d, b, col);\n wbytes(d, b + 6, f.attrs);\n wbytes(d, b + 10, ce), b += 14;\n }\n d.set(fn, b);\n b += fl;\n if (exl) {\n for (var k in ex) {\n var exf = ex[k], l = exf.length;\n wbytes(d, b, +k);\n wbytes(d, b + 2, l);\n d.set(exf, b + 4), b += 4 + l;\n }\n }\n if (col)\n d.set(co, b), b += col;\n return b;\n};\n// write zip footer (end of central directory)\nvar wzf = function (o, b, c, d, e) {\n wbytes(o, b, 0x6054B50); // skip disk\n wbytes(o, b + 8, c);\n wbytes(o, b + 10, c);\n wbytes(o, b + 12, d);\n wbytes(o, b + 16, e);\n};\n/**\n * A pass-through stream to keep data uncompressed in a ZIP archive.\n */\nvar ZipPassThrough = /*#__PURE__*/ (function () {\n /**\n * Creates a pass-through stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n */\n function ZipPassThrough(filename) {\n this.filename = filename;\n this.c = crc();\n this.size = 0;\n this.compression = 0;\n }\n /**\n * Processes a chunk and pushes to the output stream. You can override this\n * method in a subclass for custom behavior, but by default this passes\n * the data through. You must call this.ondata(err, chunk, final) at some\n * point in this method.\n * @param chunk The chunk to process\n * @param final Whether this is the last chunk\n */\n ZipPassThrough.prototype.process = function (chunk, final) {\n this.ondata(null, chunk, final);\n };\n /**\n * Pushes a chunk to be added. If you are subclassing this with a custom\n * compression algorithm, note that you must push data from the source\n * file only, pre-compression.\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n ZipPassThrough.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n this.c.p(chunk);\n this.size += chunk.length;\n if (final)\n this.crc = this.c.d();\n // we shouldn't really do this cast, but properly handling ArrayBufferLike\n // makes the API unergonomic with Buffer\n this.process(chunk, final || false);\n };\n return ZipPassThrough;\n}());\nexport { ZipPassThrough };\n// I don't extend because TypeScript extension adds 1kB of runtime bloat\n/**\n * Streaming DEFLATE compression for ZIP archives. Prefer using AsyncZipDeflate\n * for better performance\n */\nvar ZipDeflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n * @param opts The compression options\n */\n function ZipDeflate(filename, opts) {\n var _this = this;\n if (!opts)\n opts = {};\n ZipPassThrough.call(this, filename);\n this.d = new Deflate(opts, function (dat, final) {\n _this.ondata(null, dat, final);\n });\n this.compression = 8;\n this.flag = dbf(opts.level);\n }\n ZipDeflate.prototype.process = function (chunk, final) {\n try {\n this.d.push(chunk, final);\n }\n catch (e) {\n this.ondata(e, null, final);\n }\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n ZipDeflate.prototype.push = function (chunk, final) {\n ZipPassThrough.prototype.push.call(this, chunk, final);\n };\n return ZipDeflate;\n}());\nexport { ZipDeflate };\n/**\n * Asynchronous streaming DEFLATE compression for ZIP archives\n */\nvar AsyncZipDeflate = /*#__PURE__*/ (function () {\n /**\n * Creates an asynchronous DEFLATE stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n * @param opts The compression options\n */\n function AsyncZipDeflate(filename, opts) {\n var _this = this;\n if (!opts)\n opts = {};\n ZipPassThrough.call(this, filename);\n this.d = new AsyncDeflate(opts, function (err, dat, final) {\n _this.ondata(err, dat, final);\n });\n this.compression = 8;\n this.flag = dbf(opts.level);\n this.terminate = this.d.terminate;\n }\n AsyncZipDeflate.prototype.process = function (chunk, final) {\n this.d.push(chunk, final);\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n AsyncZipDeflate.prototype.push = function (chunk, final) {\n ZipPassThrough.prototype.push.call(this, chunk, final);\n };\n return AsyncZipDeflate;\n}());\nexport { AsyncZipDeflate };\n// TODO: Better tree shaking\n/**\n * A zippable archive to which files can incrementally be added\n */\nvar Zip = /*#__PURE__*/ (function () {\n /**\n * Creates an empty ZIP archive to which files can be added\n * @param cb The callback to call whenever data for the generated ZIP archive\n * is available\n */\n function Zip(cb) {\n this.ondata = cb;\n this.u = [];\n this.d = 1;\n }\n /**\n * Adds a file to the ZIP archive\n * @param file The file stream to add\n */\n Zip.prototype.add = function (file) {\n var _this = this;\n if (!this.ondata)\n err(5);\n // finishing or finished\n if (this.d & 2)\n this.ondata(err(4 + (this.d & 1) * 8, 0, 1), null, false);\n else {\n var f = strToU8(file.filename), fl_1 = f.length;\n var com = file.comment, o = com && strToU8(com);\n var u = fl_1 != file.filename.length || (o && (com.length != o.length));\n var hl_1 = fl_1 + exfl(file.extra) + 30;\n if (fl_1 > 65535)\n this.ondata(err(11, 0, 1), null, false);\n var header = new u8(hl_1);\n wzh(header, 0, file, f, u, -1);\n var chks_1 = [header];\n var pAll_1 = function () {\n for (var _i = 0, chks_2 = chks_1; _i < chks_2.length; _i++) {\n var chk = chks_2[_i];\n _this.ondata(null, chk, false);\n }\n chks_1 = [];\n };\n var tr_1 = this.d;\n this.d = 0;\n var ind_1 = this.u.length;\n var uf_1 = mrg(file, {\n f: f,\n u: u,\n o: o,\n t: function () {\n if (file.terminate)\n file.terminate();\n },\n r: function () {\n pAll_1();\n if (tr_1) {\n var nxt = _this.u[ind_1 + 1];\n if (nxt)\n nxt.r();\n else\n _this.d = 1;\n }\n tr_1 = 1;\n }\n });\n var cl_1 = 0;\n file.ondata = function (err, dat, final) {\n if (err) {\n _this.ondata(err, dat, final);\n _this.terminate();\n }\n else {\n cl_1 += dat.length;\n chks_1.push(dat);\n if (final) {\n var dd = new u8(16);\n wbytes(dd, 0, 0x8074B50);\n wbytes(dd, 4, file.crc);\n wbytes(dd, 8, cl_1);\n wbytes(dd, 12, file.size);\n chks_1.push(dd);\n uf_1.c = cl_1, uf_1.b = hl_1 + cl_1 + 16, uf_1.crc = file.crc, uf_1.size = file.size;\n if (tr_1)\n uf_1.r();\n tr_1 = 1;\n }\n else if (tr_1)\n pAll_1();\n }\n };\n this.u.push(uf_1);\n }\n };\n /**\n * Ends the process of adding files and prepares to emit the final chunks.\n * This *must* be called after adding all desired files for the resulting\n * ZIP file to work properly.\n */\n Zip.prototype.end = function () {\n var _this = this;\n if (this.d & 2) {\n this.ondata(err(4 + (this.d & 1) * 8, 0, 1), null, true);\n return;\n }\n if (this.d)\n this.e();\n else\n this.u.push({\n r: function () {\n if (!(_this.d & 1))\n return;\n _this.u.splice(-1, 1);\n _this.e();\n },\n t: function () { }\n });\n this.d = 3;\n };\n Zip.prototype.e = function () {\n var bt = 0, l = 0, tl = 0;\n for (var _i = 0, _a = this.u; _i < _a.length; _i++) {\n var f = _a[_i];\n tl += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0);\n }\n var out = new u8(tl + 22);\n for (var _b = 0, _c = this.u; _b < _c.length; _b++) {\n var f = _c[_b];\n wzh(out, bt, f, f.f, f.u, -f.c - 2, l, f.o);\n bt += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0), l += f.b;\n }\n wzf(out, bt, this.u.length, tl, l);\n this.ondata(null, out, true);\n this.d = 2;\n };\n /**\n * A method to terminate any internal workers used by the stream. Subsequent\n * calls to add() will fail.\n */\n Zip.prototype.terminate = function () {\n for (var _i = 0, _a = this.u; _i < _a.length; _i++) {\n var f = _a[_i];\n f.t();\n }\n this.d = 2;\n };\n return Zip;\n}());\nexport { Zip };\nexport function zip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n var r = {};\n fltn(data, '', r, opts);\n var k = Object.keys(r);\n var lft = k.length, o = 0, tot = 0;\n var slft = lft, files = new Array(lft);\n var term = [];\n var tAll = function () {\n for (var i = 0; i < term.length; ++i)\n term[i]();\n };\n var cbd = function (a, b) {\n mt(function () { cb(a, b); });\n };\n mt(function () { cbd = cb; });\n var cbf = function () {\n var out = new u8(tot + 22), oe = o, cdl = tot - o;\n tot = 0;\n for (var i = 0; i < slft; ++i) {\n var f = files[i];\n try {\n var l = f.c.length;\n wzh(out, tot, f, f.f, f.u, l);\n var badd = 30 + f.f.length + exfl(f.extra);\n var loc = tot + badd;\n out.set(f.c, loc);\n wzh(out, o, f, f.f, f.u, l, tot, f.m), o += 16 + badd + (f.m ? f.m.length : 0), tot = loc + l;\n }\n catch (e) {\n return cbd(e, null);\n }\n }\n wzf(out, o, files.length, cdl, oe);\n cbd(null, out);\n };\n if (!lft)\n cbf();\n var _loop_1 = function (i) {\n var fn = k[i];\n var _a = r[fn], file = _a[0], p = _a[1];\n var c = crc(), size = file.length;\n c.p(file);\n var f = strToU8(fn), s = f.length;\n var com = p.comment, m = com && strToU8(com), ms = m && m.length;\n var exl = exfl(p.extra);\n var compression = p.level == 0 ? 0 : 8;\n var cbl = function (e, d) {\n if (e) {\n tAll();\n cbd(e, null);\n }\n else {\n var l = d.length;\n files[i] = mrg(p, {\n size: size,\n crc: c.d(),\n c: d,\n f: f,\n m: m,\n u: s != fn.length || (m && (com.length != ms)),\n compression: compression\n });\n o += 30 + s + exl + l;\n tot += 76 + 2 * (s + exl) + (ms || 0) + l;\n if (!--lft)\n cbf();\n }\n };\n if (s > 65535)\n cbl(err(11, 0, 1), null);\n if (!compression)\n cbl(null, file);\n else if (size < 160000) {\n try {\n cbl(null, deflateSync(file, p));\n }\n catch (e) {\n cbl(e, null);\n }\n }\n else\n term.push(deflate(file, p, cbl));\n };\n // Cannot use lft because it can decrease\n for (var i = 0; i < slft; ++i) {\n _loop_1(i);\n }\n return tAll;\n}\n/**\n * Synchronously creates a ZIP file. Prefer using `zip` for better performance\n * with more than one file.\n * @param data The directory structure for the ZIP archive\n * @param opts The main options, merged with per-file options\n * @returns The generated ZIP archive\n */\nexport function zipSync(data, opts) {\n if (!opts)\n opts = {};\n var r = {};\n var files = [];\n fltn(data, '', r, opts);\n var o = 0;\n var tot = 0;\n for (var fn in r) {\n var _a = r[fn], file = _a[0], p = _a[1];\n var compression = p.level == 0 ? 0 : 8;\n var f = strToU8(fn), s = f.length;\n var com = p.comment, m = com && strToU8(com), ms = m && m.length;\n var exl = exfl(p.extra);\n if (s > 65535)\n err(11);\n var d = compression ? deflateSync(file, p) : file, l = d.length;\n var c = crc();\n c.p(file);\n files.push(mrg(p, {\n size: file.length,\n crc: c.d(),\n c: d,\n f: f,\n m: m,\n u: s != fn.length || (m && (com.length != ms)),\n o: o,\n compression: compression\n }));\n o += 30 + s + exl + l;\n tot += 76 + 2 * (s + exl) + (ms || 0) + l;\n }\n var out = new u8(tot + 22), oe = o, cdl = tot - o;\n for (var i = 0; i < files.length; ++i) {\n var f = files[i];\n wzh(out, f.o, f, f.f, f.u, f.c.length);\n var badd = 30 + f.f.length + exfl(f.extra);\n out.set(f.c, f.o + badd);\n wzh(out, o, f, f.f, f.u, f.c.length, f.o, f.m), o += 16 + badd + (f.m ? f.m.length : 0);\n }\n wzf(out, o, files.length, cdl, oe);\n return out;\n}\n/**\n * Streaming pass-through decompression for ZIP archives\n */\nvar UnzipPassThrough = /*#__PURE__*/ (function () {\n function UnzipPassThrough() {\n }\n UnzipPassThrough.prototype.push = function (chunk, final) {\n // same as ZipPassThrough: cast to retain Buffer ergonomics\n this.ondata(null, chunk, final);\n };\n UnzipPassThrough.compression = 0;\n return UnzipPassThrough;\n}());\nexport { UnzipPassThrough };\n/**\n * Streaming DEFLATE decompression for ZIP archives. Prefer AsyncZipInflate for\n * better performance.\n */\nvar UnzipInflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE decompression that can be used in ZIP archives\n */\n function UnzipInflate() {\n var _this = this;\n this.i = new Inflate(function (dat, final) {\n _this.ondata(null, dat, final);\n });\n }\n UnzipInflate.prototype.push = function (chunk, final) {\n try {\n this.i.push(chunk, final);\n }\n catch (e) {\n this.ondata(e, null, final);\n }\n };\n UnzipInflate.compression = 8;\n return UnzipInflate;\n}());\nexport { UnzipInflate };\n/**\n * Asynchronous streaming DEFLATE decompression for ZIP archives\n */\nvar AsyncUnzipInflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE decompression that can be used in ZIP archives\n */\n function AsyncUnzipInflate(_, sz) {\n var _this = this;\n if (sz < 320000) {\n this.i = new Inflate(function (dat, final) {\n _this.ondata(null, dat, final);\n });\n }\n else {\n this.i = new AsyncInflate(function (err, dat, final) {\n _this.ondata(err, dat, final);\n });\n this.terminate = this.i.terminate;\n }\n }\n AsyncUnzipInflate.prototype.push = function (chunk, final) {\n if (this.i.terminate)\n chunk = slc(chunk, 0);\n this.i.push(chunk, final);\n };\n AsyncUnzipInflate.compression = 8;\n return AsyncUnzipInflate;\n}());\nexport { AsyncUnzipInflate };\n/**\n * A ZIP archive decompression stream that emits files as they are discovered\n */\nvar Unzip = /*#__PURE__*/ (function () {\n /**\n * Creates a ZIP decompression stream\n * @param cb The callback to call whenever a file in the ZIP archive is found\n */\n function Unzip(cb) {\n this.onfile = cb;\n this.k = [];\n this.o = {\n 0: UnzipPassThrough\n };\n this.p = et;\n }\n /**\n * Pushes a chunk to be unzipped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Unzip.prototype.push = function (chunk, final) {\n var _this = this;\n if (!this.onfile)\n err(5);\n if (!this.p)\n err(4);\n if (this.c > 0) {\n var len = Math.min(this.c, chunk.length);\n var toAdd = chunk.subarray(0, len);\n this.c -= len;\n if (this.d)\n this.d.push(toAdd, !this.c);\n else\n this.k[0].push(toAdd);\n chunk = chunk.subarray(len);\n if (chunk.length)\n return this.push(chunk, final);\n }\n else {\n var f = 0, i = 0, is = void 0, buf = void 0;\n if (!this.p.length)\n buf = chunk;\n else if (!chunk.length)\n buf = this.p;\n else {\n buf = new u8(this.p.length + chunk.length);\n buf.set(this.p), buf.set(chunk, this.p.length);\n }\n var l = buf.length, oc = this.c, add = oc && this.d;\n var _loop_2 = function () {\n var sig = b4(buf, i);\n if (sig == 0x4034B50) {\n f = 1, is = i;\n this_1.d = null;\n this_1.c = 0;\n var bf = b2(buf, i + 6), cmp_1 = b2(buf, i + 8), u = bf & 2048, dd = bf & 8, fnl = b2(buf, i + 26), es = b2(buf, i + 28);\n if (l > i + 30 + fnl + es) {\n var chks_3 = [];\n this_1.k.unshift(chks_3);\n f = 2;\n var lsc = b4(buf, i + 18), lsu = b4(buf, i + 22);\n var fn_1 = strFromU8(buf.subarray(i + 30, i += 30 + fnl), !u);\n var _a = z64hs(buf, i, es, 2, lsc, lsu, 0), sc_1 = _a[0], su_1 = _a[1], z64 = _a[3];\n if (dd)\n sc_1 = -1 - z64;\n i += es;\n this_1.c = sc_1;\n var d_1;\n var file_1 = {\n name: fn_1,\n compression: cmp_1,\n start: function () {\n if (!file_1.ondata)\n err(5);\n if (!sc_1)\n file_1.ondata(null, et, true);\n else {\n var ctr = _this.o[cmp_1];\n if (!ctr)\n file_1.ondata(err(14, 'unknown compression type ' + cmp_1, 1), null, false);\n d_1 = sc_1 < 0 ? new ctr(fn_1) : new ctr(fn_1, sc_1, su_1);\n d_1.ondata = function (err, dat, final) { file_1.ondata(err, dat, final); };\n for (var _i = 0, chks_4 = chks_3; _i < chks_4.length; _i++) {\n var dat = chks_4[_i];\n d_1.push(dat, false);\n }\n if (_this.k[0] == chks_3 && _this.c)\n _this.d = d_1;\n else\n d_1.push(et, true);\n }\n },\n terminate: function () {\n if (d_1 && d_1.terminate)\n d_1.terminate();\n }\n };\n if (sc_1 >= 0)\n file_1.size = sc_1, file_1.originalSize = su_1;\n this_1.onfile(file_1);\n }\n return \"break\";\n }\n else if (oc) {\n if (sig == 0x8074B50) {\n is = i += 12 + (oc == -2 && 8), f = 3, this_1.c = 0;\n return \"break\";\n }\n else if (sig == 0x2014B50) {\n is = i -= 4, f = 3, this_1.c = 0;\n return \"break\";\n }\n }\n };\n var this_1 = this;\n for (; i < l - 4; ++i) {\n var state_1 = _loop_2();\n if (state_1 === \"break\")\n break;\n }\n this.p = et;\n if (oc < 0) {\n var dat = f ? buf.subarray(0, is - 12 - (oc == -2 && 8) - (b4(buf, is - 16) == 0x8074B50 && 4)) : buf.subarray(0, i);\n if (add)\n add.push(dat, !!f);\n else\n this.k[+(f == 2)].push(dat);\n }\n if (f & 2)\n return this.push(buf.subarray(i), final);\n this.p = buf.subarray(i);\n }\n if (final) {\n if (this.c)\n err(13);\n this.p = null;\n }\n };\n /**\n * Registers a decoder with the stream, allowing for files compressed with\n * the compression type provided to be expanded correctly\n * @param decoder The decoder constructor\n */\n Unzip.prototype.register = function (decoder) {\n this.o[decoder.compression] = decoder;\n };\n return Unzip;\n}());\nexport { Unzip };\nvar mt = typeof queueMicrotask == 'function' ? queueMicrotask : typeof setTimeout == 'function' ? setTimeout : function (fn) { fn(); };\nexport function unzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n var term = [];\n var tAll = function () {\n for (var i = 0; i < term.length; ++i)\n term[i]();\n };\n var files = {};\n var cbd = function (a, b) {\n mt(function () { cb(a, b); });\n };\n mt(function () { cbd = cb; });\n var e = data.length - 22;\n for (; b4(data, e) != 0x6054B50; --e) {\n if (!e || data.length - e > 65558) {\n cbd(err(13, 0, 1), null);\n return tAll;\n }\n }\n ;\n var lft = b2(data, e + 8);\n if (lft) {\n var c = lft;\n var o = b4(data, e + 16);\n var z = b4(data, e - 20) == 0x7064B50;\n if (z) {\n var ze = b4(data, e - 12);\n z = b4(data, ze) == 0x6064B50;\n if (z) {\n c = lft = b4(data, ze + 32);\n o = b4(data, ze + 48);\n }\n }\n var fltr = opts && opts.filter;\n var _loop_3 = function (i) {\n var _a = zh(data, o, z), c_1 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n o = no;\n var cbl = function (e, d) {\n if (e) {\n tAll();\n cbd(e, null);\n }\n else {\n if (d)\n files[fn] = d;\n if (!--lft)\n cbd(null, files);\n }\n };\n if (!fltr || fltr({\n name: fn,\n size: sc,\n originalSize: su,\n compression: c_1\n })) {\n if (!c_1)\n cbl(null, slc(data, b, b + sc));\n else if (c_1 == 8) {\n var infl = data.subarray(b, b + sc);\n // Synchronously decompress under 512KB, or barely-compressed data\n if (su < 524288 || sc > 0.8 * su) {\n try {\n cbl(null, inflateSync(infl, { out: new u8(su) }));\n }\n catch (e) {\n cbl(e, null);\n }\n }\n else\n term.push(inflate(infl, { size: su }, cbl));\n }\n else\n cbl(err(14, 'unknown compression type ' + c_1, 1), null);\n }\n else\n cbl(null, null);\n };\n for (var i = 0; i < c; ++i) {\n _loop_3(i);\n }\n }\n else\n cbd(null, {});\n return tAll;\n}\n/**\n * Synchronously decompresses a ZIP archive. Prefer using `unzip` for better\n * performance with more than one file.\n * @param data The raw compressed ZIP file\n * @param opts The ZIP extraction options\n * @returns The decompressed files\n */\nexport function unzipSync(data, opts) {\n var files = {};\n var e = data.length - 22;\n for (; b4(data, e) != 0x6054B50; --e) {\n if (!e || data.length - e > 65558)\n err(13);\n }\n ;\n var c = b2(data, e + 8);\n if (!c)\n return {};\n var o = b4(data, e + 16);\n var z = b4(data, e - 20) == 0x7064B50;\n if (z) {\n var ze = b4(data, e - 12);\n z = b4(data, ze) == 0x6064B50;\n if (z) {\n c = b4(data, ze + 32);\n o = b4(data, ze + 48);\n }\n }\n var fltr = opts && opts.filter;\n for (var i = 0; i < c; ++i) {\n var _a = zh(data, o, z), c_2 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n o = no;\n if (!fltr || fltr({\n name: fn,\n size: sc,\n originalSize: su,\n compression: c_2\n })) {\n if (!c_2)\n files[fn] = slc(data, b, b + sc);\n else if (c_2 == 8)\n files[fn] = inflateSync(data.subarray(b, b + sc), { out: new u8(su) });\n else\n err(14, 'unknown compression type ' + c_2);\n }\n }\n return files;\n}\n","import { Zip, ZipDeflate } from 'fflate'\nimport type { Cell } from './cells'\n\n/** The most data rows a sheet holds: Excel's 1,048,576 rows, less the header. */\nexport const xlsxMaxRows = 1_048_575\n\n// Excel refuses a cell of more text than this.\nconst maxCellText = 32_767\n\n// Characters XML 1.0 cannot hold at all, which would make the file unreadable.\nconst invalidXml = /[\\u0000-\\u0008\\u000b\\u000c\\u000e-\\u001f]/g\n\nconst escapeXml = (text: string) =>\n text.replace(invalidXml, '').replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>').replaceAll('\"', '"')\n\n/** A column's letters: 0 is A, 25 is Z, 26 is AA. */\nexport const columnLetters = (index: number): string => {\n const letter = String.fromCharCode(65 + (index % 26))\n return index < 26 ? letter : columnLetters(Math.floor(index / 26) - 1) + letter\n}\n\nconst textCell = (ref: string, text: string, style = '') =>\n `<c r=\"${ref}\"${style} t=\"inlineStr\"><is><t xml:space=\"preserve\">${escapeXml(text.slice(0, maxCellText))}</t></is></c>`\n\nconst xml = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n'\nconst mainNs = 'http://schemas.openxmlformats.org/spreadsheetml/2006/main'\nconst relNs = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships'\nconst packageRelNs = 'http://schemas.openxmlformats.org/package/2006/relationships'\n\nconst contentTypes = `${xml}<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\"><Default Extension=\"rels\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\"/><Default Extension=\"xml\" ContentType=\"application/xml\"/><Override PartName=\"/xl/workbook.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\"/><Override PartName=\"/xl/worksheets/sheet1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\"/><Override PartName=\"/xl/styles.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\"/></Types>`\nconst rootRels = `${xml}<Relationships xmlns=\"${packageRelNs}\"><Relationship Id=\"rId1\" Type=\"${relNs}/officeDocument\" Target=\"xl/workbook.xml\"/></Relationships>`\nconst workbookRels = `${xml}<Relationships xmlns=\"${packageRelNs}\"><Relationship Id=\"rId1\" Type=\"${relNs}/worksheet\" Target=\"worksheets/sheet1.xml\"/><Relationship Id=\"rId2\" Type=\"${relNs}/styles\" Target=\"styles.xml\"/></Relationships>`\n\n// A sheet name is at most 31 characters, without : \\ / ? * [ ]\nconst sheetName = (name: string) => name.replace(/[:\\\\/?*[\\]]/g, ' ').slice(0, 31).trim() || 'Sheet1'\n\nconst workbook = (name: string) =>\n `${xml}<workbook xmlns=\"${mainNs}\" xmlns:r=\"${relNs}\"><sheets><sheet name=\"${escapeXml(sheetName(name))}\" sheetId=\"1\" r:id=\"rId1\"/></sheets></workbook>`\n\n// Style 0 is the default and 1 the bold header; each number format after them gets a style of its own, from 2.\nconst styles = (formats: string[]) => {\n const numFmts = formats.map((code, index) => `<numFmt numFmtId=\"${164 + index}\" formatCode=\"${escapeXml(code)}\"/>`).join('')\n const xfs = formats.map((_, index) => `<xf numFmtId=\"${164 + index}\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\" applyNumberFormat=\"1\"/>`).join('')\n return `${xml}<styleSheet xmlns=\"${mainNs}\">${formats.length > 0 ? `<numFmts count=\"${formats.length}\">${numFmts}</numFmts>` : ''}<fonts count=\"2\"><font><sz val=\"11\"/><name val=\"Calibri\"/></font><font><b/><sz val=\"11\"/><name val=\"Calibri\"/></font></fonts><fills count=\"2\"><fill><patternFill patternType=\"none\"/></fill><fill><patternFill patternType=\"gray125\"/></fill></fills><borders count=\"1\"><border><left/><right/><top/><bottom/><diagonal/></border></borders><cellStyleXfs count=\"1\"><xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\"/></cellStyleXfs><cellXfs count=\"${2 + formats.length}\"><xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\"/><xf numFmtId=\"0\" fontId=\"1\" fillId=\"0\" borderId=\"0\" xfId=\"0\" applyFont=\"1\"/>${xfs}</cellXfs><cellStyles count=\"1\"><cellStyle name=\"Normal\" xfId=\"0\" builtinId=\"0\"/></cellStyles></styleSheet>`\n}\n\nconst encoder = new TextEncoder()\n\nexport type XlsxSheet = {\n /** The sheet's name: the resource's label. */\n name: string\n headers: string[]\n /** Each column's width in characters. */\n widths: number[]\n}\n\n/**\n * Writes a one-sheet .xlsx file as it goes, handing each compressed piece to `onChunk`: a bold, frozen header row, then\n * `rows` as often as they come, and `finish` once. Text is written inline in its cell rather than in a table of shared\n * strings, so the writer holds no more than the rows it is given.\n */\nexport const createXlsxWriter = (sheet: XlsxSheet, onChunk: (chunk: Uint8Array, final: boolean) => void) => {\n const zip = new Zip((error, chunk, final) => {\n if (error) throw error\n onChunk(chunk, final)\n })\n const add = (path: string, text: string) => {\n const file = new ZipDeflate(path, { level: 6 })\n zip.add(file)\n file.push(encoder.encode(text), true)\n }\n add('[Content_Types].xml', contentTypes)\n add('_rels/.rels', rootRels)\n add('xl/workbook.xml', workbook(sheet.name))\n add('xl/_rels/workbook.xml.rels', workbookRels)\n\n const worksheet = new ZipDeflate('xl/worksheets/sheet1.xml', { level: 6 })\n zip.add(worksheet)\n const cols = sheet.widths.map((width, index) => `<col min=\"${index + 1}\" max=\"${index + 1}\" width=\"${width}\" customWidth=\"1\"/>`).join('')\n const frozen = '<sheetViews><sheetView workbookViewId=\"0\"><pane ySplit=\"1\" topLeftCell=\"A2\" activePane=\"bottomLeft\" state=\"frozen\"/></sheetView></sheetViews>'\n const header = `<row r=\"1\">${sheet.headers.map((text, index) => textCell(`${columnLetters(index)}1`, text, ' s=\"1\"')).join('')}</row>`\n worksheet.push(encoder.encode(`${xml}<worksheet xmlns=\"${mainNs}\">${frozen}${cols ? `<cols>${cols}</cols>` : ''}<sheetData>${header}`))\n\n const letters = sheet.headers.map((_, index) => columnLetters(index))\n const formats: string[] = []\n const styleOf = (format: string) => {\n const index = formats.indexOf(format)\n if (index >= 0) return index + 2\n formats.push(format)\n return formats.length + 1\n }\n const cellXml = (cell: Cell, ref: string) => {\n switch (cell.kind) {\n case 'empty':\n return ''\n case 'text':\n return textCell(ref, cell.value)\n case 'boolean':\n return `<c r=\"${ref}\" t=\"b\"><v>${cell.value ? 1 : 0}</v></c>`\n case 'number':\n return `<c r=\"${ref}\"${cell.format ? ` s=\"${styleOf(cell.format)}\"` : ''}><v>${cell.value}</v></c>`\n }\n }\n\n let rowNumber = 1\n const rows = (cells: Cell[][]) => {\n let text = ''\n for (const row of cells) {\n rowNumber += 1\n if (rowNumber > xlsxMaxRows + 1) throw new Error(`A sheet holds at most ${xlsxMaxRows} rows`)\n text += `<row r=\"${rowNumber}\">${row.map((cell, index) => cellXml(cell, `${letters[index]}${rowNumber}`)).join('')}</row>`\n }\n worksheet.push(encoder.encode(text))\n }\n\n const finish = () => {\n worksheet.push(encoder.encode('</sheetData></worksheet>'), true)\n add('xl/styles.xml', styles(formats))\n zip.end()\n }\n\n return { rows, finish }\n}\n","import type { RelatedLabels } from '@protobase/client'\nimport { csvText, xlsxCell, type ExportColumn, type ExportMode } from './cells'\nimport { csvField, csvLine, csvTextField, utf8Bom } from './csv'\nimport { createXlsxWriter } from './xlsx'\n\nexport type ExportFormat = 'xlsx' | 'csv'\n\n/** What a file is built from, everything plain data so it can be posted to a worker. */\nexport type ExportPlan = {\n format: ExportFormat\n mode: ExportMode\n /** The resource's label, which names the sheet. */\n name: string\n columns: ExportColumn[]\n}\n\nexport type ExportRecord = Record<string, unknown>\n\n// Fields whose CSV text is free text someone typed, which a spreadsheet could take for a formula.\nconst typedText = new Set(['text', 'uuid', 'enum', 'relation', 'file', 'json', 'currency', 'country'])\n\nconst minWidth = 8\nconst maxWidth = 60\n\n/** Each column's width in characters, room for its header and the longest value of the first page as shown. */\nexport const columnWidths = (columns: ExportColumn[], records: ExportRecord[], labels: RelatedLabels) =>\n columns.map((column) => {\n const longest = Math.max(column.header.length, ...records.map((record) => csvText(column, record[column.name], labels, 'shown').length))\n return Math.min(maxWidth, Math.max(minWidth, longest + 2))\n })\n\nconst createCsvBuilder = (plan: ExportPlan, onChunk: (chunk: Uint8Array) => void) => {\n const encoder = new TextEncoder()\n onChunk(utf8Bom)\n onChunk(encoder.encode(csvLine(plan.columns.map((column) => csvField(column.header)))))\n const field = (column: ExportColumn, record: ExportRecord, labels: RelatedLabels) => {\n const text = csvText(column, record[column.name], labels, plan.mode)\n return typedText.has(column.field.type) ? csvTextField(text) : csvField(text)\n }\n return {\n page: (records: ExportRecord[], labels: RelatedLabels) => {\n onChunk(encoder.encode(records.map((record) => csvLine(plan.columns.map((column) => field(column, record, labels)))).join('')))\n },\n finish: () => undefined,\n }\n}\n\n// The columns' widths come from the first page, so the sheet starts with it.\nconst createXlsxBuilder = (plan: ExportPlan, onChunk: (chunk: Uint8Array) => void) => {\n let writer: ReturnType<typeof createXlsxWriter> | undefined\n const start = (records: ExportRecord[], labels: RelatedLabels) =>\n createXlsxWriter({ name: plan.name, headers: plan.columns.map((column) => column.header), widths: columnWidths(plan.columns, records, labels) }, onChunk)\n return {\n page: (records: ExportRecord[], labels: RelatedLabels) => {\n writer ??= start(records, labels)\n writer.rows(records.map((record) => plan.columns.map((column) => xlsxCell(column, record[column.name], labels, plan.mode))))\n },\n finish: () => {\n writer ??= start([], {})\n writer.finish()\n },\n }\n}\n\n/**\n * Builds an export file page by page: `page` with each page of records and the names of the records their relations\n * point at, then `finish` once. Each piece of the file goes to `onChunk` as soon as it is made.\n */\nexport const createExportBuilder = (plan: ExportPlan, onChunk: (chunk: Uint8Array) => void) =>\n plan.format === 'csv' ? createCsvBuilder(plan, onChunk) : createXlsxBuilder(plan, onChunk)\n","import type { RelatedLabels } from '@protobase/client'\nimport type { Locale } from '@protobase/schema/internal'\nimport { createExportBuilder, type ExportPlan, type ExportRecord } from './builder'\nimport { text } from './messages'\n\n/** What the page sends the worker that builds a file, one message after the other. */\nexport type ToBuilder = { kind: 'start'; plan: ExportPlan; locale: Locale } | { kind: 'page'; records: ExportRecord[]; labels: RelatedLabels } | { kind: 'finish' }\n\n/** The worker's answer to each message: the bytes of the file it made from it, which may be none. */\nexport type FromBuilder = { bytes: Uint8Array }\n\n/** Builds a file from messages, each answered with the bytes it adds to the file. */\nexport type BuilderPort = { send: (message: ToBuilder) => Promise<Uint8Array>; close: () => void }\n\nconst joined = (chunks: Uint8Array[]) => {\n const bytes = new Uint8Array(chunks.reduce((size, chunk) => size + chunk.length, 0))\n let offset = 0\n for (const chunk of chunks) {\n bytes.set(chunk, offset)\n offset += chunk.length\n }\n return bytes\n}\n\n/** Handles one message at a time, as the worker does, returning the bytes it made; used by the worker and by tests. */\nexport const createBuilderHandler = () => {\n let builder: ReturnType<typeof createExportBuilder> | undefined\n let chunks: Uint8Array[] = []\n return (message: ToBuilder) => {\n if (message.kind === 'start') builder = createExportBuilder(message.plan, (chunk) => chunks.push(chunk))\n else if (!builder) throw new Error('The export was not started')\n else if (message.kind === 'page') builder.page(message.records, message.labels)\n else builder.finish()\n const bytes = joined(chunks)\n chunks = []\n return bytes\n }\n}\n\n/** A port that builds on the page itself, for tests and stories. */\nexport const createInlinePort = (): BuilderPort => {\n const handle = createBuilderHandler()\n return { send: async (message) => handle(message), close: () => undefined }\n}\n\n/**\n * A port to a Web Worker that builds the file, so compressing it never holds up the page. The worker answers messages\n * in the order they came; an error in it fails every message still waiting.\n */\nexport const createWorkerPort = (): BuilderPort => {\n const worker = new Worker(new URL('./export-worker.ts', import.meta.url), { type: 'module', name: 'protobase-export' })\n const waiting: Array<{ resolve: (bytes: Uint8Array) => void; reject: (error: Error) => void }> = []\n worker.onmessage = (event: MessageEvent<FromBuilder>) => waiting.shift()?.resolve(event.data.bytes)\n worker.onerror = (event) => {\n event.preventDefault()\n const error = new Error(text('couldNotBuild', { message: event.message }))\n for (const entry of waiting.splice(0)) entry.reject(error)\n }\n return {\n send: (message) => new Promise((resolve, reject) => {\n waiting.push({ resolve, reject })\n worker.postMessage(message)\n }),\n close: () => worker.terminate(),\n }\n}\n","/// <reference lib=\"webworker\" />\nimport { setFallbackLocale } from '../../locale/active-locale'\nimport { createBuilderHandler, type FromBuilder, type ToBuilder } from './builder-port'\n\n// Builds an export file off the page's thread: each message's bytes go back as they are made, moved rather than copied.\nconst handle = createBuilderHandler()\nconst scope = self as unknown as DedicatedWorkerGlobalScope\n\n// The shown values are written in the page's language, which the start of each file names.\nscope.onmessage = (event: MessageEvent<ToBuilder>) => {\n if (event.data.kind === 'start') setFallbackLocale(event.data.locale)\n const bytes = handle(event.data)\n scope.postMessage({ bytes } satisfies FromBuilder, [bytes.buffer])\n}\n"],"ignoreList":[3,4,5,6,7,8,20],"mappings":"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A,IACA,KACA,IACD,EACAC,GAAM,CACL,IACA,IACA,IACD,EACAC,GAAM,CAAC,IAAK,IAAI,EAChBC,GAAM,CAAC,IAAK,IAAI,EAChBC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CAAC,IAAK,GAAG,EACfC,GAAM,CAAC,IAAK,IAAI,EAChBC,GAAM,CACL,IACA,KACA,IACA,IACD,EACAC,GAAM,CAAC,IAAK,IAAI,EAChBC,GAAM,CAAC,GAAG,EACVC,GAAM,CACL,IACA,KACA,GACD,EACAC,GAAM,CACL,IACA,KACA,GACD,EACAC,GAAM,CACL,IACA,KACA,IACA,IACD,EACAC,GAAM,CACL,IACA,KACA,GACD,EACAC,GAAM,CAAC,IAAK,IAAI,EAChBC,GAAM,CAAC,IAAK,IAAI,EAChBC,GAAM,CACL,IACA,KACA,GACD,EACAC,GAAM,CACL,IACA,KACA,KACA,GACD,EACAC,GAAM,CAAC,IAAK,GAAG,EACfC,GAAM,CAAC,IAAK,IAAI,EAChBC,GAAM,CAAC,IAAK,IAAI,EAChBC,GAAM,CACL,IACA,KACA,IACA,IACD,EACAC,GAAM,CACL,KACA,KACA,IACA,GACD,EACAC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CAAC,GAAG,EACVC,GAAM,CAAC,IAAK,IAAI,EAChBC,GAAM,CACL,IACA,KACA,IACA,IACD,EACAC,GAAM,CAAC,IAAK,GAAG,EACfC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CAAC,IAAK,GAAG,EACfC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CACL,IACA,KACA,IACA,IACD,EACAC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CAAC,KAAM,GAAG,EAChBC,GAAM,CACL,IACA,IACA,IACD,EACAC,GAAM,CAAC,IAAK,IAAI,EAChBC,GAAM,CACL,IACA,KACA,GACD,EACAC,GAAM,CAAC,IAAK,IAAI,EAChBC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CACL,IACA,IACA,IACD,EACAC,GAAM,CACL,IACA,KACA,KACA,GACD,EACAC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CAAC,GAAG,EACVC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CAAC,IAAK,IAAI,EAChBC,GAAM,CAAC,IAAK,IAAI,EAChBC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CAAC,GAAG,EACVC,GAAM,CAAC,IAAK,IAAI,EAChBC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CAAC,IAAK,GAAG,EACfC,GAAM,CAAC,GAAG,EACVC,GAAM,CACL,IACA,KACA,IACA,IACD,EACAC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CACL,IACA,KACA,KACA,GACD,EACAC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CAAC,IAAK,IAAI,EAChBC,GAAM,CACL,IACA,KACA,KACA,GACD,EACAC,GAAM,CACL,IACA,KACA,KACA,GACD,EACAC,GAAM,CAAC,IAAK,GAAG,EACfC,GAAM,CACL,IACA,KACA,IACA,IACD,EACAC,GAAM,CACL,KACA,KACA,IACA,GACD,EACAC,GAAM,CAAC,GAAG,EACVC,GAAM,CACL,IACA,KACA,IACA,IACD,EACAC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CACL,IACA,KACA,IACA,IACD,EACAC,GAAM,CAAC,IAAK,GAAG,EACfC,GAAM,CAAC,IAAK,IAAI,EAChBC,GAAM,CAAC,IAAK,IAAI,EAChBC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CACL,IACA,KACA,IACA,IACD,EACAC,GAAM,CACL,IACA,KACA,GACD,EACAC,GAAM,CAAC,IAAK,IAAI,EAChBC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CAAC,IAAK,GAAG,EACfC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CAAC,IAAK,GAAG,EACfC,GAAM,CACL,IACA,KACA,IACA,IACD,EACAC,GAAM,CAAC,IAAK,IAAI,EAChBC,GAAM,CAAC,IAAK,IAAI,EAChBC,GAAM,CACL,IACA,KACA,IACA,IACD,EACAC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CACL,IACA,KACA,IACA,IACD,EACAC,GAAM,CAAC,IAAK,IAAI,EAChBC,GAAM,CACL,IACA,KACA,IACA,IACD,EACAC,GAAM,CACL,IACA,KACA,KACA,GACD,EACAC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CAAC,IAAK,IAAI,EAChBC,GAAM,CAAC,IAAK,GAAG,EACfC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CAAC,GAAG,EACVC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CAAC,IAAK,IAAI,EAChBC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CAAC,IAAK,GAAG,EACfC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CACL,IACA,KACA,KACA,GACD,EACAC,GAAM,CAAC,KAAM,GAAG,EAChBC,GAAM,CAAC,GAAG,EACVC,GAAM,CAAC,IAAK,IAAI,EAChBC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CACL,IACA,KACA,IACA,IACD,EACAC,GAAM,CACL,IACA,KACA,KACA,GACD,EACAC,GAAM,CACL,IACA,IACA,GACD,EACAC,GAAM,CACL,KACA,KACA,IACA,GACD,EACAC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CACL,KACA,IACA,IACA,IACD,EACAC,GAAM,CACL,IACA,KACA,IACA,IACD,EACAC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CACL,IACA,KACA,IACA,IACD,EACAC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CACL,IACA,KACA,KACA,GACD,EACAC,GAAM,CACL,IACA,KACA,IACA,IACD,EACAC,GAAM,CAAC,IAAK,IAAI,EAChBC,GAAM,CACL,IACA,KACA,KACA,GACD,EACAC,GAAM,CACL,IACA,KACA,KACA,GACD,EACAC,GAAM,CACL,IACA,KACA,IACA,IACD,EACAC,GAAM,CACL,IACA,KACA,GACD,EACAC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CACL,IACA,KACA,IACA,IACD,EACAC,GAAM,CAAC,IAAK,GAAG,EACfC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CACL,IACA,IACA,IACD,EACAC,GAAM,CACL,IACA,KACA,KACA,GACD,EACAC,GAAM,CACL,IACA,KACA,KACA,GACD,EACAC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CAAC,IAAK,IAAI,EAChBC,GAAM,CAAC,IAAK,IAAI,EAChBC,GAAM,CACL,IACA,KACA,GACD,EACAC,GAAM,CAAC,IAAK,IAAI,EAChBC,GAAM,CAAC,IAAK,GAAG,EACfC,GAAM,CACL,IACA,KACA,IACA,IACD,EACAC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CAAC,GAAG,EACVC,GAAM,CACL,KACA,KACA,IACA,GACD,EACAC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CACL,IACA,KACA,KACA,GACD,EACAC,GAAM,CACL,IACA,KACA,IACA,IACD,EACAC,GAAM,CAAC,IAAK,IAAI,EAChBC,GAAM,CACL,IACA,KACA,KACA,GACD,EACAC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CAAC,IAAK,GAAG,EACfC,GAAM,CAAC,IAAK,GAAG,EACfC,GAAM,CAAC,IAAK,GAAG,EACfC,GAAM,CACL,IACA,KACA,IACA,IACD,EACAC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CACL,KACA,KACA,IACA,GACD,EACAC,GAAM,CAAC,IAAK,IAAI,EAChBC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CAAC,IAAK,IAAI,EAChBC,GAAM,CAAC,GAAG,EACVC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CAAC,IAAK,IAAI,EAChBC,GAAM,CAAC,IAAK,GAAG,EACfC,GAAM,CACL,IACA,IACA,IACD,EACAC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CACL,IACA,KACA,IACA,IACD,EACAC,GAAM,CACL,IACA,KACA,KACA,GACD,EACAC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CACL,IACA,IACA,IACD,EACAC,GAAM,CAAC,IAAK,GAAG,EACfC,GAAM,CACL,IACA,KACA,KACA,GACD,EACAC,GAAM,CACL,IACA,KACA,GACD,EACAC,GAAM,CAAC,IAAK,GAAG,EACfC,GAAM,CAAC,IAAK,IAAI,EAChBC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CACL,IACA,KACA,KACA,GACD,EACAC,GAAM,CAAC,IAAK,IAAI,EAChBC,GAAM,CAAC,IAAK,GAAG,EACfC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CACL,IACA,KACA,KACA,GACD,EACAC,GAAM,CAAC,IAAK,IAAI,EAChBC,GAAM,CAAC,IAAK,IAAI,EAChBC,GAAM,CACL,IACA,KACA,GACD,EACAC,GAAM,CAAC,GAAG,EACVC,GAAM,CAAC,IAAK,GAAG,EACfC,GAAM,CACL,IACA,KACA,KACA,GACD,EACAC,GAAM,CACL,IACA,KACA,IACA,IACD,EACAC,GAAM,CACL,IACA,IACA,IACD,EACAC,GAAM,CACL,IACA,KACA,KACA,GACD,EACAC,GAAM,CAAC,GAAG,EACVC,GAAM,CACL,IACA,KACA,IACA,IACD,EACAC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CAAC,IAAK,IAAI,EAChBC,GAAM,CAAC,GAAG,EACVC,GAAM,CAAC,GAAG,EACVC,GAAM,CACL,IACA,KACA,IACA,IACD,EACAC,GAAM,CACL,IACA,IACA,IACD,EACAC,GAAM,CACL,IACA,IACA,IACD,EACAC,GAAM,CAAC,IAAK,GAAG,EACfC,GAAM,CAAC,IAAK,IAAI,EAChBC,GAAM,CACL,IACA,KACA,IACA,IACD,EACAC,GAAM,CAAC,IAAK,IAAI,EAChBC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CACL,IACA,KACA,KACA,GACD,EACAC,GAAM,CACL,IACA,KACA,IACA,IACD,EACAC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CACL,IACA,KACA,IACA,IACD,EACAC,GAAM,CACL,IACA,IACA,IACD,EACAC,GAAM,CACL,IACA,IACA,IACD,EACAC,GAAM,CAAC,IAAK,IAAI,EAChBC,GAAM,CAAC,IAAK,GAAG,EACfC,GAAM,CAAC,IAAK,GAAG,EACfC,GAAM,CACL,IACA,KACA,KACA,GACD,EACAC,GAAM,CAAC,IAAK,GAAG,EACfC,GAAM,CACL,IACA,KACA,KACA,GACD,EACAC,GAAM,CAAC,IAAK,GAAG,EACfC,GAAM,CAAC,IAAK,IAAI,EAChBC,GAAM,CACL,IACA,KACA,IACA,IACD,EACAC,GAAM,CACL,KACA,KACA,IACA,GACD,EACAC,GAAM,CACL,KACA,KACA,IACA,GACD,EACAC,GAAM,CACL,IACA,KACA,GACD,EACAC,GAAM,CACL,KACA,KACA,IACA,GACD,EACAC,GAAM,CACL,IACA,KACA,IACA,IACD,EACAC,GAAM,CACL,IACA,KACA,IACA,IACD,EACAC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CACL,IACA,KACA,GACD,EACAC,GAAM,CACL,IACA,IACA,IACD,EACAC,GAAM,CACL,IACA,KACA,IACA,IACD,EACAC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CACL,IACA,KACA,IACA,IACD,EACAC,GAAM,CACL,IACA,KACA,IACA,IACD,EACAC,GAAM,CAAC,IAAK,GAAG,EACfC,GAAM,CAAC,IAAK,GAAG,EACfC,GAAM,CAAC,IAAK,IAAI,EAChBC,GAAM,CAAC,IAAK,GAAG,EACfC,GAAM,CACL,IACA,KACA,GACD,EACAC,GAAM,CACL,IACA,KACA,KACA,GACD,EACAC,GAAM,CAAC,IAAK,IAAI,EAChBC,GAAM,CACL,IACA,IACA,KACA,IACD,EACAC,GAAM,CACL,IACA,KACA,IACA,IACD,EACAC,GAAM,CAAC,IAAK,GAAG,EACf,QAAS,CACR,IACA,IACA,KACA,IACD,EACA,SAAU,CACT,IACA,KACA,KACA,GACD,EACA,QAAS,CACR,IACA,IACA,IACD,EACA,SAAU,CACT,IACA,KACA,IACA,IACD,EACA,QAAS,CACR,IACA,KACA,IACA,IACD,EACA,QAAS,CACR,IACA,IACA,KACA,IACD,EACA,QAAS,CACR,IACA,KACA,IACA,IACD,EACA,QAAS,CACR,IACA,IACA,KACA,IACD,EACA,QAAS,CACR,IACA,IACA,KACA,IACD,EACA,QAAS,CACR,IACA,IACA,KACA,IACD,EACA,QAAS,CACR,IACA,IACA,IACD,EACA,QAAS,CACR,IACA,IACA,IACD,EACA,QAAS,CACR,KACA,KACA,IACA,GACD,EACA,QAAS,CACR,KACA,IACA,GACD,EACA,QAAS,CACR,IACA,IACA,IACD,EACA,QAAS,CACR,IACA,IACA,IACD,EACA,QAAS,CACR,KACA,IACA,GACD,EACA,QAAS,CAAC,IAAK,IAAI,EACnB,QAAS,CACR,KACA,IACA,GACD,EACA,QAAS,CACR,KACA,KACA,IAC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","debugId":"4ab82e0f-d840-4b74-8ba5-bc2557b1149c"}
|