UNPKG

@gmb/bitmark-parser-generator

Version:
7,461 lines 289 kB
import { EnumType } from '@ncoderz/superenum';
import { PathLike } from 'node:fs';

declare const BitType: {
    readonly _error: "_error";
    readonly _comment: "_comment";
    readonly _standard: "_standard";
    readonly advertising: "advertising";
    readonly advertisingAdvertorial: "advertising-advertorial";
    readonly advertisingAdvertorialPage: "advertising-advertorial-page";
    readonly advertisingCallToAction: "advertising-call-to-action";
    readonly advertisingCallToActionMeeting: "advertising-call-to-action-meeting";
    readonly advertisingBanner: "advertising-banner";
    readonly advertisingSkyscraper: "advertising-skyscraper";
    readonly advertisingRectangle: "advertising-rectangle";
    readonly advertisingFullPage: "advertising-full-page";
    readonly advertisingHalfPage: "advertising-half-page";
    readonly advertisingQuarterPage: "advertising-quarter-page";
    readonly advertisingClassifiedPage: "advertising-classified-page";
    readonly advertisingLandscape: "advertising-landscape";
    readonly advertisingPortrait: "advertising-portrait";
    readonly aiChat: "ai-chat";
    readonly aiEditor: "ai-editor";
    readonly aiPrompt: "ai-prompt";
    readonly aiTutor: "ai-tutor";
    readonly aiWbt: "ai-wbt";
    readonly anchor: "anchor";
    readonly appAiPrompt: "app-ai-prompt";
    readonly appBitmarkFromEditor: "app-bitmark-from-editor";
    readonly appBitmarkFromJavascript: "app-bitmark-from-javascript";
    readonly appCalculatorLatex: "app-calculator-latex";
    readonly appCodeCell: "app-code-cell";
    readonly appCodeEditor: "app-code-editor";
    readonly appCodeIde: "app-code-ide";
    readonly appCreateBitsFromImage: "app-create-bits-from-image";
    readonly appFlashcards: "app-flashcards";
    readonly appFlashcardsLearn: "app-flashcards-learn";
    readonly appFlashcardsQuiz: "app-flashcards-quiz";
    readonly appGetScreenshot: "app-get-screenshot";
    readonly appLink: "app-link";
    readonly appRag: "app-rag";
    readonly appSearch: "app-search";
    readonly article: "article";
    readonly articleAi: "article-ai";
    readonly articleAlt: "article-alt";
    readonly articleAttachment: "article-attachment";
    readonly articleAuthor: "article-author";
    readonly articleEmbed: "article-embed";
    readonly articleLink: "article-link";
    readonly articleResponsive: "article-responsive";
    readonly articleResponsiveAlt: "article-responsive-alt";
    readonly assignment: "assignment";
    readonly assignmentList: "assignment-list";
    readonly audio: "audio";
    readonly audioEmbed: "audio-embed";
    readonly audioLink: "audio-link";
    readonly audioTranscript: "audio-transcript";
    readonly author: "author";
    readonly authorContentBitGenerator: "author-content-bit-generator";
    readonly bitAlias: "bit-alias";
    readonly bitBookEnding: "bit-book-ending";
    readonly bitBookSummary: "bit-book-summary";
    readonly bitmarkExample: "bitmark-example";
    readonly blogArticle: "blog-article";
    readonly book: "book";
    readonly bookAcknowledgements: "book-acknowledgements";
    readonly bookAddendum: "book-addendum";
    readonly bookAfterword: "book-afterword";
    readonly bookAlias: "book-alias";
    readonly bookAppendix: "book-appendix";
    readonly bookArticle: "book-article";
    readonly bookAuthor: "book-author";
    readonly bookAutherBio: "book-author-bio";
    readonly bookBibliography: "book-bibliography";
    readonly bookClose: "book-close";
    readonly bookComingSoon: "book-coming-soon";
    readonly bookConclusion: "book-conclusion";
    readonly bookCopyright: "book-copyright";
    readonly bookCopyrightPermissions: "book-copyright-permissions";
    readonly bookCover: "book-cover";
    readonly bookDedication: "book-dedication";
    readonly bookDiff: "book-diff";
    readonly bookEnd: "book-end";
    readonly bookEndnotes: "book-endnotes";
    readonly bookEpigraph: "book-epigraph";
    readonly bookEpilogue: "book-epilogue";
    readonly bookForword: "book-foreword";
    readonly bookFrontispiece: "book-frontispiece";
    readonly bookImprint: "book-imprint";
    readonly bookIncitingIncident: "book-inciting-incident";
    readonly bookIntroduction: "book-introduction";
    readonly bookLink: "book-link";
    readonly bookLinkNext: "book-link-next";
    readonly bookLinkPrev: "book-link-prev";
    readonly bookListOfContributors: "book-list-of-contributors";
    readonly bookNotes: "book-notes";
    readonly bookPostscript: "book-postscript";
    readonly bookPreface: "book-preface";
    readonly bookPrologue: "book-prologue";
    readonly bookReadMore: "book-read-more";
    readonly bookReference: "book-reference";
    readonly bookReferenceList: "book-reference-list";
    readonly bookRequestForABookReview: "book-request-for-a-book-review";
    readonly bookSummary: "book-summary";
    readonly bookTeaser: "book-teaser";
    readonly bookTitle: "book-title";
    readonly botActionAnnounce: "bot-action-announce";
    readonly botActionRatingNumber: "bot-action-rating-number";
    readonly botActionRemind: "bot-action-remind";
    readonly botActionResponse: "bot-action-response";
    readonly botActionSave: "bot-action-save";
    readonly botActionSend: "bot-action-send";
    readonly botActionTrueFalse: "bot-action-true-false";
    readonly botInterview: "bot-interview";
    readonly brandColor: "brand-color";
    readonly browserImage: "browser-image";
    readonly bug: "bug";
    readonly bugAlt: "bug-alt";
    readonly bugCollapsible: "bug-collapsible";
    readonly buttonCopyText: "button-copy-text";
    readonly catalogItemBook: "catalog-item-book";
    readonly catalogItemExternalBook: "catalog-item-external-book";
    readonly catalogItemProduct: "catalog-item-product";
    readonly callToAction: "call-to-action";
    readonly callToActionBookNow: "call-to-action-book-now";
    readonly callToActionContact: "call-to-action-contact";
    readonly callToActionCreateAccount: "call-to-action-create-account";
    readonly callToActionDownload: "call-to-action-download";
    readonly callToActionGetNow: "call-to-action-get-now";
    readonly callToActionGetOffer: "call-to-action-get-offer";
    readonly callToActionJoin: "call-to-action-join";
    readonly callToActionLearnMore: "call-to-action-learn-more";
    readonly callToActionMail: "call-to-action-mail";
    readonly callToActionSeeMore: "call-to-action-see-more";
    readonly callToActionShopNow: "call-to-action-shop-now";
    readonly callToActionStartNow: "call-to-action-start-now";
    readonly callToActionSubscribe: "call-to-action-subscribe";
    readonly callToActionWatch: "call-to-action-watch";
    readonly card1: "card-1";
    readonly chapter: "chapter";
    readonly chapterSubjectMatter: "chapter-subject-matter";
    readonly chat: "chat";
    readonly checklist: "checklist";
    readonly cloze: "cloze";
    readonly clozeAndMultipleChoiceText: "cloze-and-multiple-choice-text";
    readonly clozeInstructionGrouped: "cloze-instruction-grouped";
    readonly clozeList: "cloze-list";
    readonly clozeSeveral: "cloze-several";
    readonly clozeSolutionGrouped: "cloze-solution-grouped";
    readonly coachAudioTranscript: "coach-audio-transcript";
    readonly coachCallToActionChecklist: "coach-call-to-action-checklist";
    readonly coachCallToActionCloze: "coach-call-to-action-cloze";
    readonly coachCallToActionClozeAndMultipleChoiceText: "coach-call-to-action-cloze-and-multiple-choice-text";
    readonly coachCallToActionEssay: "coach-call-to-action-essay";
    readonly coachCallToActionMultipleChoiceText: "coach-call-to-action-multiple-choice-text";
    readonly coachHomeRules: "coach-home-rules";
    readonly coachSelfReflectionCloze: "coach-self-reflection-cloze";
    readonly coachSelfReflectionEssay: "coach-self-reflection-essay";
    readonly coachSelfReflectionMultipleChoice: "coach-self-reflection-multiple-choice";
    readonly coachSelfReflectionMultipleChoice1: "coach-self-reflection-multiple-choice-1";
    readonly coachSelfReflectionMultipleChoiceText: "coach-self-reflection-multiple-choice-text";
    readonly coachSelfReflectionMultipleResponse: "coach-self-reflection-multiple-response";
    readonly coachSelfReflectionMultipleResponse1: "coach-self-reflection-multiple-response-1";
    readonly coachSelfReflectionRating: "coach-self-reflection-rating";
    readonly coachVideoTranscript: "coach-video-transcript";
    readonly code: "code";
    readonly codeRuntime: "code-runtime";
    readonly collapsible: "collapsible";
    readonly conclusion: "conclusion";
    readonly conclusionAlt: "conclusion-alt";
    readonly consoleLog: "console-log";
    readonly container: "container";
    readonly containerAccordionTabs: "container-accordion-tabs";
    readonly containerBits2: "container-bits-2";
    readonly containerCards: "container-cards";
    readonly containerCarousel: "container-carousel";
    readonly containerCookRecipe: "container-cook-recipe";
    readonly containerFolder: "container-folder";
    readonly containerFolderAll: "container-folder-all";
    readonly containerGallery: "container-gallery";
    readonly containerGrid: "container-grid";
    readonly containerGroup: "container-group";
    readonly containerNewsArticle: "container-news-article";
    readonly containerNowrap: "container-nowrap";
    readonly containerNowrapStretch: "container-nowrap-stretch";
    readonly containerPreview: "container-preview";
    readonly containerScroller: "container-scroller";
    readonly containerSlides: "container-slides";
    readonly containerStack: "container-stack";
    readonly containerTabs: "container-tabs";
    readonly containerWrap: "container-wrap";
    readonly conversationLeft1: "conversation-left-1";
    readonly conversationLeft1Scream: "conversation-left-1-scream";
    readonly conversationLeft1Thought: "conversation-left-1-thought";
    readonly conversationRight1: "conversation-right-1";
    readonly conversationRight1Scream: "conversation-right-1-scream";
    readonly conversationRight1Thought: "conversation-right-1-thought";
    readonly clozeAndMultipleChoiceTextConversationLeft1: "cloze-and-multiple-choice-text-conversation-left-1";
    readonly clozeAndMultipleChoiceTextConversationLeft1Scream: "cloze-and-multiple-choice-text-conversation-left-1-scream";
    readonly clozeAndMultipleChoiceTextConversationLeft1Thought: "cloze-and-multiple-choice-text-conversation-left-1-thought";
    readonly clozeAndMultipleChoiceTextConversationRight1: "cloze-and-multiple-choice-text-conversation-right-1";
    readonly clozeAndMultipleChoiceTextConversationRight1Scream: "cloze-and-multiple-choice-text-conversation-right-1-scream";
    readonly clozeAndMultipleChoiceTextConversationRight1Thought: "cloze-and-multiple-choice-text-conversation-right-1-thought";
    readonly cookArrangement: "cook-arrangement";
    readonly cookIngredients: "cook-ingredients";
    readonly cookInsert: "cook-insert";
    readonly cookNoteOnQuantity: "cook-note-on-quantity";
    readonly cookPersonalRecommendation: "cook-personal-recommendation";
    readonly cookPlate: "cook-plate";
    readonly cookPracticeAdvise: "cook-practice-advise";
    readonly cookPreparation: "cook-preparation";
    readonly cookRecommendation: "cook-recommendation";
    readonly cookRemark: "cook-remark";
    readonly cookSideDish: "cook-side-dish";
    readonly cookSideDrink: "cook-side-drink";
    readonly cookStep: "cook-step";
    readonly cookTimer: "cook-timer";
    readonly cookVariation: "cook-variation";
    readonly correction: "correction";
    readonly danger: "danger";
    readonly dangerAlt: "danger-alt";
    readonly dangerCollapsible: "danger-collapsible";
    readonly definitionList: "definition-list";
    readonly definitionListCollapsible: "definition-list-collapsible";
    readonly definitionTerm: "definition-term";
    readonly deleted: "deleted";
    readonly details: "details";
    readonly details1: "details-1";
    readonly detailsImage: "details-image";
    readonly diff: "diff";
    readonly document: "document";
    readonly documentDownload: "document-download";
    readonly documentEmbed: "document-embed";
    readonly documentLink: "document-link";
    readonly documentUpload: "document-upload";
    readonly editorial: "editorial";
    readonly editorNote: "editor-note";
    readonly essay: "essay";
    readonly example: "example";
    readonly exampleAlt: "example-alt";
    readonly exampleCollapsible: "example-collapsible";
    readonly exampleList: "example-list";
    readonly extractorAiChat: "extractor-ai-chat";
    readonly extractorBlock: "extractor-block";
    readonly extractorBlueprint: "extractor-blueprint";
    readonly extractorBlueprintConfiguration: "extractor-blueprint-configuration";
    readonly extractorConfiguration: "extractor-configuration";
    readonly extractorImage: "extractor-image";
    readonly extractorImageCollapsible: "extractor-image-collapsible";
    readonly extractorInformation: "extractor-information";
    readonly extractorPage: "extractor-page";
    readonly extractorPageCollapsible: "extractor-page-collapsible";
    readonly extractorPageFooter: "extractor-page-footer";
    readonly extractorPageFooterCollapsible: "extractor-page-footer-collapsible";
    readonly extractorPageHeader: "extractor-page-header";
    readonly extractorPageHeaderCollapsible: "extractor-page-header-collapsible";
    readonly extractorPageNumber: "extractor-page-number";
    readonly extractorPageNumberCollapsible: "extractor-page-number-collapsible";
    readonly extractorPageWithBlocks: "extractor-page-with-blocks";
    readonly extractorPageWithBlocksCollapsible: "extractor-page-with-blocks-collapsible";
    readonly extractorReconcile: "extractor-reconcile";
    readonly extractorRepeatedText: "extractor-repeated-text";
    readonly extractorRule: "extractor-rule";
    readonly extractorTheme: "extractor-theme";
    readonly featured: "featured";
    readonly feedback: "feedback";
    readonly figure: "figure";
    readonly flashcard: "flashcard";
    readonly flashcard1: "flashcard-1";
    readonly focusImage: "focus-image";
    readonly footNote: "foot-note";
    readonly formFreeText: "form-free-text";
    readonly formula: "formula";
    readonly formulaImage: "formula-image";
    readonly gapText: "gap-text";
    readonly gapTextInstructionGrouped: "gap-text-instruction-grouped";
    readonly glossaryTerm: "glossary-term";
    readonly groupBorn: "group-born";
    readonly groupDied: "group-died";
    readonly handInAudio: "hand-in-audio";
    readonly handInContact: "hand-in-contact";
    readonly handInDocument: "hand-in-document";
    readonly handInFeedbackExpert: "hand-in-feedback-expert";
    readonly handInFeedbackSelf: "hand-in-feedback-self";
    readonly handInFile: "hand-in-file";
    readonly handInFreeText: "hand-in-free-text";
    readonly handInFreeTextExpert: "hand-in-free-text-expert";
    readonly handInLocation: "hand-in-location";
    readonly handInPhoto: "hand-in-photo";
    readonly handInScan: "hand-in-scan";
    readonly handInSubmit: "hand-in-submit";
    readonly handInSystemMedia: "hand-in-system-media";
    readonly handInVideo: "hand-in-video";
    readonly handInVoice: "hand-in-voice";
    readonly help: "help";
    readonly helpAlt: "help-alt";
    readonly highlightText: "highlight-text";
    readonly hint: "hint";
    readonly hintAlt: "hint-alt";
    readonly hintCollapsible: "hint-collapsible";
    readonly image: "image";
    readonly imageBanner: "image-banner";
    readonly imageFigure: "image-figure";
    readonly imageFigureAlt: "image-figure-alt";
    readonly imageLandscape: "image-landscape";
    readonly imageLink: "image-link";
    readonly imageMood: "image-mood";
    readonly imageOnDevice: "image-on-device";
    readonly imagePortrait: "image-portrait";
    readonly imagePrototype: "image-prototype";
    readonly imageResponsive: "image-responsive";
    readonly imageScreenshot: "image-screenshot";
    readonly imageSeparator: "image-separator";
    readonly imageSeparatorAlt: "image-separator-alt";
    readonly imagesLogoGrave: "images-logo-grave";
    readonly imageStyled: "image-styled";
    readonly imageSuperWide: "image-super-wide";
    readonly imageZoom: "image-zoom";
    readonly indexTerm: "index-term";
    readonly info: "info";
    readonly infoAlt: "info-alt";
    readonly infoCollapsible: "info-collapsible";
    readonly internalLink: "internal-link";
    readonly interview: "interview";
    readonly interviewInstructionGrouped: "interview-instruction-grouped";
    readonly langAudioScript: "lang-audio-script";
    readonly langEnablingLanguageSkills: "lang-enabling-language-skills";
    readonly langEnglishAroundWorld: "lang-english-around-world";
    readonly langExtraActivity: "lang-extra-activity";
    readonly langGoodToKnow: "lang-good-to-know";
    readonly langHomework: "lang-homework";
    readonly langLearningGoal: "lang-learning-goal";
    readonly langLearningOutcomes: "lang-learning-outcomes";
    readonly langLearningStrategy: "lang-learning-strategy";
    readonly langLevelDown: "lang-level-down";
    readonly langLevelUp: "lang-level-up";
    readonly langLifeSkillIcon: "lang-life-skill-icon";
    readonly langLifeSkills: "lang-life-skills";
    readonly langLikeALocal: "lang-like-a-local";
    readonly langMaterial: "lang-material";
    readonly langTeacherNote: "lang-teacher-note";
    readonly langTeacherPronunciation: "lang-teacher-pronunciation";
    readonly langUsefulPhrases: "lang-useful-phrases";
    readonly langVideoScript: "lang-video-script";
    readonly langVocabulary: "lang-vocabulary";
    readonly learningDocumentationFeedback: "learning-documentation-feedback";
    readonly learningPathBook: "learning-path-book";
    readonly learningPathBotTraining: "learning-path-bot-training";
    readonly learningPathClassroomEvent: "learning-path-classroom-event";
    readonly learningPathClassroomTraining: "learning-path-classroom-training";
    readonly learningPathClosing: "learning-path-closing";
    readonly learningPathExternalLink: "learning-path-external-link";
    readonly learningPathFeedback: "learning-path-feedback";
    readonly learningPathLearningGoal: "learning-path-learning-goal";
    readonly learningPathLti: "learning-path-lti";
    readonly learningPathSign: "learning-path-sign";
    readonly learningPathStep: "learning-path-step";
    readonly learningPathVideoCall: "learning-path-video-call";
    readonly leAssignment: "le-assignment";
    readonly leClassroomEvent: "le-classroom-event";
    readonly leCompletion: "le-completion";
    readonly leExternalLink: "le-external-link";
    readonly leFinishingTask: "le-finishing-task";
    readonly leFollowUpTask: "le-follow-up-task";
    readonly leMultiDayEvent: "le-multi-day-event";
    readonly legend: "legend";
    readonly leDocumentDownload: "le-document-download";
    readonly leLearningObjectives: "le-learning-objectives";
    readonly leLearningStep: "le-learning-step";
    readonly leListenAudioEmbed: "le-listen-audio-embed";
    readonly lePreparationTask: "le-preparation-task";
    readonly leRead: "le-read";
    readonly leReadBook: "le-read-book";
    readonly leTask: "le-task";
    readonly leTodo: "le-todo";
    readonly leVideoCall: "le-video-call";
    readonly leWatchVideoEmbed: "le-watch-video-embed";
    readonly lifeSkillSticker: "life-skill-sticker";
    readonly list: "list";
    readonly listItem: "list-item";
    readonly mark: "mark";
    readonly match: "match";
    readonly matchAll: "match-all";
    readonly matchAllReverse: "match-all-reverse";
    readonly matchAudio: "match-audio";
    readonly matchMatrix: "match-matrix";
    readonly matchPicture: "match-picture";
    readonly matchReverse: "match-reverse";
    readonly matchSolutionGrouped: "match-solution-grouped";
    readonly message: "message";
    readonly metalevelExplanation: "metalevel-explanation";
    readonly metaSearchDefaultTerms: "meta-search-default-terms";
    readonly metaSearchDefaultTopics: "meta-search-default-topics";
    readonly milestone: "milestone";
    readonly module: "module";
    readonly moduleProduct: "module-product";
    readonly multipleChoice: "multiple-choice";
    readonly multipleChoice1: "multiple-choice-1";
    readonly multipleChoiceText: "multiple-choice-text";
    readonly multipleResponse: "multiple-response";
    readonly multipleResponse1: "multiple-response-1";
    readonly newspaperArticle: "newspaper-article";
    readonly nonProductionPrototypeIframe: "non-production-prototype-iframe";
    readonly note: "note";
    readonly noteAi: "note-ai";
    readonly noteAlt: "note-alt";
    readonly notebookArticle: "notebook-article";
    readonly noteCollapsible: "note-collapsible";
    readonly output: "output";
    readonly page: "page";
    readonly pageAcademy: "page-academy";
    readonly pageArticle: "page-article";
    readonly pageArticleAlt: "page-article-alt";
    readonly pageArticleResponsive: "page-article-responsive";
    readonly pageBanner: "page-banner";
    readonly pageBuyButton: "page-buy-button";
    readonly pageBuyButtonAlt: "page-buy-button-alt";
    readonly pageBuyButtonPromotion: "page-buy-button-promotion";
    readonly pageCategory: "page-category";
    readonly pageCollapsible: "page-collapsible";
    readonly pageContainer: "page-container";
    readonly pageContainerFolder: "page-container-folder";
    readonly pageContainerGroup: "page-container-group";
    readonly pageContainerNowrap: "page-container-nowrap";
    readonly pageContainerNowrapStretch: "page-container-nowrap-stretch";
    readonly pageContainerWrap: "page-container-wrap";
    readonly pageCoverImage: "page-cover-image";
    readonly pageFooter: "page-footer";
    readonly pageHero: "page-hero";
    readonly pageOpenBook: "page-open-book";
    readonly pageOpenBookList: "page-open-book-list";
    readonly printBook: "print-book";
    readonly openBookChapter: "open-book-chapter";
    readonly openBookChapterTeaser: "open-book-chapter-teaser";
    readonly pagePerson: "page-person";
    readonly pageProduct: "page-product";
    readonly pageProductList: "page-product-list";
    readonly pageProductVideo: "page-product-video";
    readonly pageProductVideoList: "page-product-video-list";
    readonly pagePromotion: "page-promotion";
    readonly pageSectionFolder: "page-section-folder";
    readonly pageShopInShop: "page-shop-in-shop";
    readonly pageSpecial: "page-special";
    readonly pageEnd: "page-end";
    readonly pageStart: "page-start";
    readonly pageSubpage: "page-subpage";
    readonly pageSubscribe: "page-subscribe";
    readonly parameters: "parameters";
    readonly photo: "photo";
    readonly platform: "platform";
    readonly platformBrandTarget: "platform-brand-target";
    readonly platformHeader: "platform-header";
    readonly platformMain: "platform-main";
    readonly platformMainButton: "platform-main-button";
    readonly platformMainInput: "platform-main-input";
    readonly platformPath: "platform-path";
    readonly platformSection: "platform-section";
    readonly platformSectionButton: "platform-section-button";
    readonly platformSectionChat: "platform-section-chat";
    readonly platformSectionHeader: "platform-section-header";
    readonly platformSectionInput: "platform-section-input";
    readonly platformSystemIcon: "platform-system-icon";
    readonly preparationNote: "preparation-note";
    readonly printThisBook: "print-this-book";
    readonly printThisChapter: "print-this-chapter";
    readonly printPageBreak: "print-page-break";
    readonly pronunciationTable: "pronunciation-table";
    readonly prototypeImages: "prototype-images";
    readonly qAndA: "q-and-a";
    readonly qAndACard: "q-and-a-card";
    readonly question1: "question-1";
    readonly quote: "quote";
    readonly rating: "rating";
    readonly recipe: "recipe";
    readonly recordAudio: "record-audio";
    readonly recordVideo: "record-video";
    readonly releaseNote: "release-note";
    readonly releaseNotesSummary: "release-notes-summary";
    readonly remark: "remark";
    readonly remarkAlt: "remark-alt";
    readonly remarkCollapsible: "remark-collapsible";
    readonly reviewApprovedNote: "review-approved-note";
    readonly reviewAuthorNote: "review-author-note";
    readonly reviewCustomerNote: "review-customer-note";
    readonly reviewError: "review-error";
    readonly reviewErrorAi: "review-error-ai";
    readonly reviewErrorTranslation: "review-error-translation";
    readonly reviewNote: "review-note";
    readonly reviewRequestForReviewNote: "review-request-for-review-note";
    readonly reviewReviewerNote: "review-reviewer-note";
    readonly sampleSolution: "sample-solution";
    readonly sandbox: "sandbox";
    readonly sandboxOutputJson: "sandbox-output-json";
    readonly sandboxOutputMarkup: "sandbox-output-markup";
    readonly sandboxOutputRender: "sandbox-output-render";
    readonly scorm: "scorm";
    readonly screenshot: "screenshot";
    readonly selfAssessment: "self-assessment";
    readonly separator: "separator";
    readonly separatorAlt: "separator-alt";
    readonly sequence: "sequence";
    readonly sideNote: "side-note";
    readonly sideNoteCollapsible: "side-note-collapsible";
    readonly smartStandardArticleNonNormative: "smart-standard-article-non-normative";
    readonly smartStandardArticleNonNormativeCollapsible: "smart-standard-article-non-normative-collapsible";
    readonly smartStandardArticleNormative: "smart-standard-article-normative";
    readonly smartStandardArticleNormativeCollapsible: "smart-standard-article-normative-collapsible";
    readonly smartStandardDefinitionListNonNormative: "smart-standard-definition-list-non-normative";
    readonly smartStandardDefinitionListNormative: "smart-standard-definition-list-normative";
    readonly smartStandardExampleNonNormative: "smart-standard-example-non-normative";
    readonly smartStandardExampleNonNormativeCollapsible: "smart-standard-example-non-normative-collapsible";
    readonly smartStandardExampleNormative: "smart-standard-example-normative";
    readonly smartStandardExampleNormativeCollapsible: "smart-standard-example-normative-collapsible";
    readonly smartStandardFormula: "smart-standard-formula";
    readonly smartStandardFormulaNonNormative: "smart-standard-formula-non-normative";
    readonly smartStandardFormulaNormative: "smart-standard-formula-normative";
    readonly smartStandardImageFigureNonNormative: "smart-standard-image-figure-non-normative";
    readonly smartStandardImageFigureNonNormativeCollapsible: "smart-standard-image-figure-non-normative-collapsible";
    readonly smartStandardImageFigureNormative: "smart-standard-image-figure-normative";
    readonly smartStandardImageFigureNormativeCollapsible: "smart-standard-image-figure-normative-collapsible";
    readonly smartStandardLegend: "smart-standard-legend";
    readonly smartStandardLegendNonNormative: "smart-standard-legend-non-normative";
    readonly smartStandardLegendNormative: "smart-standard-legend-normative";
    readonly smartStandardList: "smart-standard-list";
    readonly smartStandardListCollapsible: "smart-standard-list-collapsible";
    readonly smartStandardListItem: "smart-standard-list-item";
    readonly smartStandardListItemCollapsible: "smart-standard-list-item-collapsible";
    readonly smartStandardNoteNonNormative: "smart-standard-note-non-normative";
    readonly smartStandardNoteNonNormativeCollapsible: "smart-standard-note-non-normative-collapsible";
    readonly smartStandardNoteNormative: "smart-standard-note-normative";
    readonly smartStandardNoteNormativeCollapsible: "smart-standard-note-normative-collapsible";
    readonly smartStandardRemarkLegend: "smart-standard-remark-legend";
    readonly smartStandardRemarkLegendNonNormative: "smart-standard-remark-legend-non-normative";
    readonly smartStandardRemarkLegendNormative: "smart-standard-remark-legend-normative";
    readonly smartStandardRemarkFormula: "smart-standard-remark-formula";
    readonly smartStandardRemarkFormulaNonNormative: "smart-standard-remark-formula-non-normative";
    readonly smartStandardRemarkFormulaNormative: "smart-standard-remark-formula-normative";
    readonly smartStandardRemarkNonNormative: "smart-standard-remark-non-normative";
    readonly smartStandardRemarkNonNormativeCollapsible: "smart-standard-remark-non-normative-collapsible";
    readonly smartStandardRemarkNormative: "smart-standard-remark-normative";
    readonly smartStandardRemarkNormativeCollapsible: "smart-standard-remark-normative-collapsible";
    readonly smartStandardRemarkTableExtendedImageNonNormative: "smart-standard-remark-table-extended-image-non-normative";
    readonly smartStandardRemarkTableExtendedImageNonNormativeCollapsible: "smart-standard-remark-table-extended-image-non-normative-collapsible";
    readonly smartStandardRemarkTableExtendedImageNormative: "smart-standard-remark-table-extended-image-normative";
    readonly smartStandardRemarkTableExtendedImageNormativeCollapsible: "smart-standard-remark-table-extended-image-normative-collapsible";
    readonly smartStandardRemarkTableExtendedNonNormative: "smart-standard-remark-table-extended-non-normative";
    readonly smartStandardRemarkTableExtendedNonNormativeCollapsible: "smart-standard-remark-table-extended-non-normative-collapsible";
    readonly smartStandardRemarkTableExtendedNormative: "smart-standard-remark-table-extended-normative";
    readonly smartStandardRemarkTableExtendedNormativeCollapsible: "smart-standard-remark-table-extended-normative-collapsible";
    readonly smartStandardRemarkTableImageNonNormative: "smart-standard-remark-table-image-non-normative";
    readonly smartStandardRemarkTableImageNonNormativeCollapsible: "smart-standard-remark-table-image-non-normative-collapsible";
    readonly smartStandardRemarkTableImageNormative: "smart-standard-remark-table-image-normative";
    readonly smartStandardRemarkTableImageNormativeCollapsible: "smart-standard-remark-table-image-normative-collapsible";
    readonly smartStandardRemarkTableNonNormative: "smart-standard-remark-table-non-normative";
    readonly smartStandardRemarkTableNonNormativeCollapsible: "smart-standard-remark-table-non-normative-collapsible";
    readonly smartStandardRemarkTableNormative: "smart-standard-remark-table-normative";
    readonly smartStandardRemarkTableNormativeCollapsible: "smart-standard-remark-table-normative-collapsible";
    readonly smartStandardTableExtendedImageNonNormative: "smart-standard-table-extended-image-non-normative";
    readonly smartStandardTableExtendedImageNonNormativeCollapsible: "smart-standard-table-extended-image-non-normative-collapsible";
    readonly smartStandardTableExtendedImageNormative: "smart-standard-table-extended-image-normative";
    readonly smartStandardTableExtendedImageNormativeCollapsible: "smart-standard-table-extended-image-normative-collapsible";
    readonly smartStandardTableExtendedNonNormative: "smart-standard-table-extended-non-normative";
    readonly smartStandardTableExtendedNonNormativeCollapsible: "smart-standard-table-extended-non-normative-collapsible";
    readonly smartStandardTableExtendedNormative: "smart-standard-table-extended-normative";
    readonly smartStandardTableExtendedNormativeCollapsible: "smart-standard-table-extended-normative-collapsible";
    readonly smartStandardTableImageNonNormative: "smart-standard-table-image-non-normative";
    readonly smartStandardTableImageNonNormativeCollapsible: "smart-standard-table-image-non-normative-collapsible";
    readonly smartStandardTableImageNormative: "smart-standard-table-image-normative";
    readonly smartStandardTableImageNormativeCollapsible: "smart-standard-table-image-normative-collapsible";
    readonly smartStandardTableNonNormative: "smart-standard-table-non-normative";
    readonly smartStandardTableNonNormativeCollapsible: "smart-standard-table-non-normative-collapsible";
    readonly smartStandardTableNormative: "smart-standard-table-normative";
    readonly smartStandardTableNormativeCollapsible: "smart-standard-table-normative-collapsible";
    readonly standardArticleNonNormative: "standard-article-non-normative";
    readonly standardArticleNormative: "standard-article-normative";
    readonly standardDefinitionListNonNormative: "standard-definition-list-non-normative";
    readonly standardDefinitionListNormative: "standard-definition-list-normative";
    readonly standardExampleNonNormative: "standard-example-non-normative";
    readonly standardExampleNormative: "standard-example-normative";
    readonly standardImageFigureNonNormative: "standard-image-figure-non-normative";
    readonly standardImageFigureNormative: "standard-image-figure-normative";
    readonly standardList: "standard-list";
    readonly standardListItem: "standard-list-item";
    readonly standardNoteNonNormative: "standard-note-non-normative";
    readonly standardNoteNormative: "standard-note-normative";
    readonly standardRemarkNonNormative: "standard-remark-non-normative";
    readonly standardRemarkNormative: "standard-remark-normative";
    readonly standardRemarkTableExtendedImageNonNormative: "standard-remark-table-extended-image-non-normative";
    readonly standardRemarkTableExtendedImageNormative: "standard-remark-table-extended-image-normative";
    readonly standardRemarkTableExtendedNonNormative: "standard-remark-table-extended-non-normative";
    readonly standardRemarkTableExtendedNormative: "standard-remark-table-extended-normative";
    readonly standardRemarkTableImageNonNormative: "standard-remark-table-image-non-normative";
    readonly standardRemarkTableImageNormative: "standard-remark-table-image-normative";
    readonly standardRemarkTableNonNormative: "standard-remark-table-non-normative";
    readonly standardRemarkTableNormative: "standard-remark-table-normative";
    readonly standardTableExtendedImageNonNormative: "standard-table-extended-image-non-normative";
    readonly standardTableExtendedImageNormative: "standard-table-extended-image-normative";
    readonly standardTableExtendedNonNormative: "standard-table-extended-non-normative";
    readonly standardTableExtendedNormative: "standard-table-extended-normative";
    readonly standardTableImageNonNormative: "standard-table-image-non-normative";
    readonly standardTableImageNormative: "standard-table-image-normative";
    readonly standardTableNonNormative: "standard-table-non-normative";
    readonly standardTableNormative: "standard-table-normative";
    readonly statement: "statement";
    readonly stdout: "stdout";
    readonly step: "step";
    readonly stepImageScreenshot: "step-image-screenshot";
    readonly stepImageScreenshotWithPointer: "step-image-screenshot-with-pointer";
    readonly sticker: "sticker";
    readonly stickyNote: "sticky-note";
    readonly stillImageFilm: "still-image-film";
    readonly stillImageFilmEmbed: "still-image-film-embed";
    readonly stillImageFilmLink: "still-image-film-link";
    readonly summary: "summary";
    readonly summaryAi: "summary-ai";
    readonly survey: "survey";
    readonly survey1: "survey-1";
    readonly surveyAnonymous: "survey-anonymous";
    readonly surveyAnonymous1: "survey-anonymous-1";
    readonly surveyMatrix: "survey-matrix";
    readonly surveyMatrixMe: "survey-matrix-me";
    readonly surveyRating: "survey-rating";
    readonly surveyRatingDisplay: "survey-rating-display";
    readonly surveyRatingOnce: "survey-rating-once";
    readonly table: "table";
    readonly tableAlt: "table-alt";
    readonly tableExtended: "table-extended";
    readonly tableExtendedImage: "table-extended-image";
    readonly tableImage: "table-image";
    readonly tableImageAlt: "table-image-alt";
    readonly takePicture: "take-picture";
    readonly toc: "toc";
    readonly tocChapter: "toc-chapter";
    readonly tocInline: "toc-inline";
    readonly tocResource: "toc-resource";
    readonly tocContent: "toc-content";
    readonly trueFalse: "true-false";
    readonly trueFalse1: "true-false-1";
    readonly vendorAmcharts5Chart: "vendor-amcharts-5-chart";
    readonly vendorDatadogDashboard: "vendor-datadog-dashboard";
    readonly vendorDatadogDashboardEmbed: "vendor-datadog-dashboard-embed";
    readonly vendorFormbricksEmbed: "vendor-formbricks-embed";
    readonly vendorFormbricksLink: "vendor-formbricks-link";
    readonly vendorFormbricksEmbedAnonymous: "vendor-formbricks-embed-anonymous";
    readonly vendorFormbricksLinkAnonymous: "vendor-formbricks-link-anonymous";
    readonly vendorHighchartsChart: "vendor-highcharts-chart";
    readonly vendorIframelyCard: "vendor-iframely-card";
    readonly vendorIframelyEmbed: "vendor-iframely-embed";
    readonly vendorIframelyPreview: "vendor-iframely-preview";
    readonly vendorIframelyPreviewMini: "vendor-iframely-preview-mini";
    readonly vendorJupyterCellCode: "vendor-jupyter-cell-code";
    readonly vendorJupyterCellMarkdown: "vendor-jupyter-cell-markdown";
    readonly vendorJupyterCellRaw: "vendor-jupyter-cell-raw";
    readonly vendorJupyterIpynb: "vendor-jupyter-ipynb";
    readonly vendorJupyterOutput: "vendor-jupyter-output";
    readonly vendorLearndashEmbed: "vendor-learndash-embed";
    readonly vendorPadletEmbed: "vendor-padlet-embed";
    readonly vendorStripePricingTable: "vendor-stripe-pricing-table";
    readonly vendorStripePricingTableExternal: "vendor-stripe-pricing-table-external";
    readonly vendorStripePricingTablePrintOnRequest: "vendor-stripe-pricing-table-print-on-request";
    readonly video: "video";
    readonly videoEmbed: "video-embed";
    readonly videoEmbedLandscape: "video-embed-landscape";
    readonly videoEmbedPortrait: "video-embed-portrait";
    readonly videoLandscape: "video-landscape";
    readonly videoLink: "video-link";
    readonly videoLinkLandscape: "video-link-landscape";
    readonly videoLinkPortrait: "video-link-portrait";
    readonly videoPortrait: "video-portrait";
    readonly videoTranscript: "video-transcript";
    readonly warning: "warning";
    readonly warningAlt: "warning-alt";
    readonly warningCollapsible: "warning-collapsible";
    readonly websiteLink: "website-link";
    readonly workbookArticle: "workbook-article";
};
type BitTypeType = EnumType<typeof BitType>;

declare const BodyBitType: {
    readonly text: "text";
    readonly gap: "gap";
    readonly mark: "mark";
    readonly select: "select";
    readonly highlight: "highlight";
};
type BodyBitTypeType = EnumType<typeof BodyBitType>;

declare const BitTagConfigKeyType: {
    readonly unknown: "unknown";
    readonly tag: "tag";
    readonly property: "property";
    readonly resource: "resource";
    readonly group: "group";
};
type BitTagConfigKeyTypeType = EnumType<typeof BitTagConfigKeyType>;

/**
 * Config keys for tags, resources, properties, and groups.
 *
 * Each type has a different prefix so there are no conflicts:
 * - Resources: `&`
 * - Properties: `@`
 * - Groups: `group_`
 * - Tags: <none>
 *
 */
declare const ConfigKey: {
    readonly group_standardAllBits: "group_standardAllBits";
    readonly group_standardItemLead: "group_standardItemLead";
    readonly group_standardItemLeadInstructionHint: "group_standardItemLeadInstructionHint";
    readonly group_standardInstructionHint: "group_standardInstructionHint";
    readonly group_standardTags: "group_standardTags";
    readonly group_standardTagsNoItemLead: "group_standardTagsNoItemLead";
    readonly group_imageSource: "group_imageSource";
    readonly group_technicalTerm: "group_technicalTerm";
    readonly group_person: "group_person";
    readonly group_gap: "group_gap";
    readonly group_trueFalse: "group_trueFalse";
    readonly group_trueFalseInlineHighlight: "group_trueFalseInlineHighlight";
    readonly group_trueFalseInlineSelect: "group_trueFalseInlineSelect";
    readonly group_trueFalseResponses: "group_trueFalseResponses";
    readonly group_markConfig: "group_markConfig";
    readonly group_mark: "group_mark";
    readonly group_bookCommon: "group_bookCommon";
    readonly group_learningPathCommon: "group_learningPathCommon";
    readonly group_advertisingCommon: "group_advertisingCommon";
    readonly group_platformStylesCommon: "group_platformStylesCommon";
    readonly group_quizCommon: "group_quizCommon";
    readonly group_backgroundWallpaper: "group_backgroundWallpaper";
    readonly group_imageNoZoom: "group_imageNoZoom";
    readonly group_resourceBitTags: "group_resourceBitTags";
    readonly group_resourceCommon: "group_resourceCommon";
    readonly group_resourceImageCommon: "group_resourceImageCommon";
    readonly group_resourceImageCommonNoZoom: "group_resourceImageCommonNoZoom";
    readonly group_resourceAudioCommon: "group_resourceAudioCommon";
    readonly group_resourceVideoCommon: "group_resourceVideoCommon";
    readonly group_resourceIcon: "group_resourceIcon";
    readonly group_resourceImage: "group_resourceImage";
    readonly group_resourceImageNoZoom: "group_resourceImageNoZoom";
    readonly group_resourceImageEmbed: "group_resourceImageEmbed";
    readonly group_resourceImageLink: "group_resourceImageLink";
    readonly group_resourceImageResponsive: "group_resourceImageResponsive";
    readonly group_resourceImagePortrait: "group_resourceImagePortrait";
    readonly group_resourceImageLandscape: "group_resourceImageLandscape";
    readonly group_resourceAudio: "group_resourceAudio";
    readonly group_resourceAudioEmbed: "group_resourceAudioEmbed";
    readonly group_resourceAudioLink: "group_resourceAudioLink";
    readonly group_resourceVideo: "group_resourceVideo";
    readonly group_resourceVideoEmbed: "group_resourceVideoEmbed";
    readonly group_resourceVideoLink: "group_resourceVideoLink";
    readonly group_resourceStillImageFilm: "group_resourceStillImageFilm";
    readonly group_resourceStillImageFilmEmbed: "group_resourceStillImageFilmEmbed";
    readonly group_resourceStillImageFilmLink: "group_resourceStillImageFilmLink";
    readonly group_resourceArticle: "group_resourceArticle";
    readonly group_resourceArticleEmbed: "group_resourceArticleEmbed";
    readonly group_resourceArticleLink: "group_resourceArticleLink";
    readonly group_resourceDocument: "group_resourceDocument";
    readonly group_resourceDocumentEmbed: "group_resourceDocumentEmbed";
    readonly group_resourceDocumentLink: "group_resourceDocumentLink";
    readonly group_resourceDocumentDownload: "group_resourceDocumentDownload";
    readonly group_resourceAppLink: "group_resourceAppLink";
    readonly group_resourceWebsiteLink: "group_resourceWebsiteLink";
    readonly group_previewImages: "group_previewImages";
    readonly group_previewVideos: "group_previewVideos";
    readonly property_action: "@action";
    readonly property_activityType: "@activityType";
    readonly property_additionalSolutions: "@additionalSolutions";
    readonly property_advertisingClickUrl: "@advertisingClickUrl";
    readonly property_ageRange: "@ageRange";
    readonly property_aiGenerated: "@aiGenerated";
    readonly property_allowedBit: "@allowedBit";
    readonly property_allowPrint: "@allowPrint";
    readonly property_allowSubtitles: "@allowSubtitles";
    readonly property_alt: "@alt";
    readonly property_altLangTag: "@altLangTag";
    readonly property_analyticsTag: "@analyticsTag";
    readonly property_author: "@author";
    readonly property_authorFullName: "@authorFullName";
    readonly property_authorJobTitle: "@authorJobTitle";
    readonly property_authorPseudonym: "@authorPseudonym";
    readonly property_authorTitle: "@authorTitle";
    readonly property_autoplay: "@autoplay";
    readonly property_availableClassifications: "@availableClassifications";
    readonly property_brandColor: "@brandColor";
    readonly property_brandColorName: "@brandColorName";
    readonly property_backgroundImage: "@backgroundImage";
    readonly property_blockId: "@blockId";
    readonly property_book: "@book";
    readonly property_bookAlias: "@bookAlias";
    readonly property_bookDiff: "@bookDiff";
    readonly property_bot: "@bot";
    readonly property_bubbleTag: "@bubbleTag";
    readonly property_extractorTag: "@extractorTag";
    readonly property_extractorInternal: "@extractorInternal";
    readonly property_bitFingerprint: "@bitFingerprint";
    readonly property_buttonCaption: "@buttonCaption";
    readonly property_callToActionUrl: "@callToActionUrl";
    readonly property_caption: "@caption";
    readonly property_categoryTag: "@categoryTag";
    readonly property_chatWithBook: "@chatWithBook";
    readonly property_chatWithBookBrainKey: "@chatWithBookBrainKey";
    readonly property_currency: "@currency";
    readonly property_bookIsbn: "@bookIsbn";
    readonly property_bookAuthor: "@bookAuthor";
    readonly property_bookType: "@bookType";
    readonly property_bookBindingType: "@bookBindingType";
    readonly property_bookNumberOfPages: "@bookNumberOfPages";
    readonly property_bookRating: "@bookRating";
    readonly property_bookSeriesTitle: "@bookSeriesTitle";
    readonly property_bookSeriesId: "@bookSeriesId";
    readonly property_bookSeriesNumber: "@bookSeriesNumber";
    readonly property_bookLanguage: "@bookLanguage";
    readonly property_bookPublishingDate: "@bookPublishingDate";
    readonly property_bookPublisher: "@bookPublisher";
    readonly property_bookTranslator: "@bookTranslator";
    readonly property_bookOriginalTitle: "@bookOriginalTitle";
    readonly property_gmbExternalShop: "@gmbExternalShop";
    readonly property_gmbExternalShopItems: "@gmbExternalShopItems";
    readonly property_citationStyle: "@citationStyle";
    readonly property_classification: "@classification";
    readonly property_codeLineNumbers: "@codeLineNumbers";
    readonly property_codeMinimap: "@codeMinimap";
    readonly property_color: "@color";
    readonly property_colorTag: "@colorTag";
    readonly property_computerLanguage: "@computerLanguage";
    readonly property_content2Buy: "@content2Buy";
    readonly property_listPrice: "@listPrice";
    readonly property_customerProductId: "@customerProductId";
    readonly property_customerProductShopLink: "@customerProductShopLink";
    readonly property_copyright: "@copyright";
    readonly property_coverColor: "@coverColor";
    readonly property_coverImage: "@coverImage";
    readonly property_customerExternalId: "@customerExternalId";
    readonly property_customerId: "@customerId";
    readonly property_date: "@date";
    readonly property_dateEnd: "@dateEnd";
    readonly property_decimalPlaces: "@decimalPlaces";
    readonly property_deeplink: "@deeplink";
    readonly property_displayName: "@displayName";
    readonly property_diffContext: "@diffContext";
    readonly property_diffOp: "@diffOp";
    readonly property_diffRef: "@diffRef";
    readonly property_diffTime: "@diffTime";
    readonly property_diffTo: "@diffTo";
    readonly property_disableCalculation: "@disableCalculation";
    readonly property_disableFeedback: "@disableFeedback";
    readonly property_duration: "@duration";
    readonly property_isEditable: "@isEditable";
    readonly property_needsValidation: "@needsValidation";
    readonly property_validationDate: "@validationDate";
    readonly property_emphasis: "@emphasis";
    readonly property_example: "@example";
    readonly property_externalId: "@externalId";
    readonly property_externalLink: "@externalLink";
    readonly property_externalLinkText: "@externalLinkText";
    readonly property_feedbackEngine: "@feedbackEngine";
    readonly property_feedbackType: "@feedbackType";
    readonly property_userFeedbackTranslationUrl: "@userFeedbackTranslationUrl";
    readonly property_userFeedbackContentUrl: "@userFeedbackContentUrl";
    readonly property_flashcardSet: "@flashcardSet";
    readonly property_focusX: "@focusX";
    readonly property_focusY: "@focusY";
    readonly property_format: "@format";
    readonly property_formula: "@formula";
    readonly property_fullName: "@fullName";
    readonly property_groupTag: "@groupTag";
    readonly property_gUri: "@gUri";
    readonly property_handInAcceptFileType: "@handInAcceptFileType";
    readonly property_handInInstruction: "@handInInstruction";
    readonly property_handInRequirement: "@handInRequirement";
    readonly property_hasBookNavigation: "@hasBookNavigation";
    readonly property_hasMarkAsDone: "@hasMarkAsDone";
    readonly property_height: "@height";
    readonly property_icon: "@icon";
    readonly property_iconTag: "@iconTag";
    readonly property_id: "@id";
    readonly property_iframeSrc: "@iframeSrc";
    readonly property_iframeName: "@iframeName";
    readonly property_imageFirst: "@imageFirst";
    readonly property_imageSource: "@imageSource";
    readonly property_index: "@index";
    readonly property_internalComment: "@internalComment";
    readonly property_internalPrintPdf: "@internalPrintPdf";
    readonly property_hasPrintRestriction: "@hasPrintRestriction";
    readonly property_enforceUpdateOverUserInput: "@enforceUpdateOverUserInput";
    readonly property_extractorExtractionTimestamp: "@extractorExtractionTimestamp";
    readonly property_isCaseSensitive: "@isCaseSensitive";
    readonly property_isCollapsible: "@isCollapsible";
    readonly property_isInfoOnly: "@isInfoOnly";
    readonly property_isPublic: "@isPublic";
    readonly property_isTemplate: "@isTemplate";
    readonly property_isTemplateStripTheme: "@isTemplateStripTheme";
    readonly property_isTracked: "@isTracked";
    readonly property_jobTitle: "@jobTitle";
    readonly property_jupyterExecutionCount: "@jupyterExecutionCount";
    readonly property_jupyterId: "@jupyterId";
    readonly property_kind: "@kind";
    readonly property_label: "@label";
    readonly property_labelFalse: "@labelFalse";
    readonly property_labelTrue: "@labelTrue";
    readonly property_lang: "@lang";
    readonly property_language: "@language";
    readonly property_layer: "@layer";
    readonly property_layerRole: "@layerRole";
    readonly property_levelACTFL: "@levelACTFL";
    readonly property_levelCEFR: "@levelCEFR";
    readonly property_levelCEFRp: "@levelCEFRp";
    readonly property_levelILR: "@levelILR";
    readonly property_license: "@license";
    readonly property_list: "@list";
    readonly property_listItemIndent: "@listItemIndent";
    readonly property_location: "@location";
    readonly property_machineTranslated: "@machineTranslated";
    readonly property_translationOf: "@translationOf";
    readonly property_translationOfBook: "@translationOfBook";
    readonly property_spansPageBreak: "@spansPageBreak";
    readonly property_mailingList: "@mailingList";
    readonly property_mark: "@mark";
    readonly property_maxCreatedBits: "@maxCreatedBits";
    readonly property_maxDisplayLevel: "@maxDisplayLevel";
    readonly property_maxTocChapterLevel: "@maxTocChapterLevel";
    readonly property_mockupId: "@mockupId";
    readonly property_mute: "@mute";
    readonly property_padletId: "@padletId";
    readonly property_page: "@page";
    readonly property_printParentChapterLevel: "@printParentChapterLevel";
    readonly property_printOnRequestCustomerId: "@printOnRequestCustomerId";
    readonly property_printOnRequestProductId: "@printOnRequestProductId";
    readonly property_pageNo: "@pageNo";
    readonly property_partialAnswer: "@partialAnswer";
    readonly property_partner: "@partner";
    readonly property_path: "@path";
    readonly property_platformBackgroundColor: "@platformBackgroundColor";
    readonly property_platformBorderColor: "@platformBorderColor";
    readonly property_platformBrandTarget: "@platformBrandTarget";
    readonly property_platformButtonBackgroundColor: "@platformButtonBackgroundColor";
    readonly property_platformButtonPrimaryColor: "@platformButtonPrimaryColor";
    readonly property_platformMessageBackgroundColor: "@platformMessageBackgroundColor";
    readonly property_platformName: "@platformName";
    readonly property_platformPlaceholderColor: "@platformPlaceholderColor";
    readonly property_platformPrimaryColor: "@platformPrimaryColor";
    readonly property_platformScrollbarColor: "@platformScrollbarColor";
    readonly property_platformSecondaryColor: "@platformSecondaryColor";
    readonly property_platformSelectionColor: "@platformSelectionColor";
    readonly property_platformSelectionTextColor: "@platformSelectionTextColor";
    readonly property_platformBaseLayerColor: "@platformBaseLayerColor";
    readonly property_platformMargin: "@platformMargin";
    readonly property_platformBorderRadius: "@platformBorderRadius";
    readonly property_platformSelectionBorderRadius: "@platformSelectionBorderRadius";
    readonly property_platformLogoMaxHeight: "@platformLogoMaxHeight";
    readonly property_platformNeedsShadow: "@platformNeedsShadow";
    readonly property_platformSeparatorColor: "@platformSeparatorColor";
    readonly property_platformTextSelectionColor: "@platformTextSelectionColor";
    readonly property_person: "@person";
    readonly property_pointerLeft: "@pointerLeft";
    readonly property_pointerTop: "@pointerTop";
    readonly property_posterImage: "@posterImage";
    readonly property_processHandIn: "@processHandIn";
    readonly property_processHandInLocation: "@processHandInLocation";
    readonly property_product: "@product";
    readonly property_productFolder: "@productFolder";
    readonly property_productId: "@productId";
    readonly property_productVideo: "@productVideo";
    readonly property_progress: "@progress";
    readonly property_pseudonym: "@pseudonym";
    readonly property_publications: "@publications";
    readonly property_publisher: "@publisher";
    readonly property_publisherName: "@publisherName";
    readonly property_quizCountItems: "@quizCountItems";
    readonly property_quizStrikethroughSolutions: "@quizStrikethroughSolutions";
    readonly property_quotedPerson: "@quotedPerson";
    readonly property_ratingLevelEnd: "@ratingLevelEnd";
    readonly property_ratingLevelSelected: "@ratingLevelSelected";
    readonly property_ratingLevelStart: "@ratingLevelStart";
    readonly property_reaction: "@reaction";
    readonly property_reasonableNumOfChars: "@reasonableNumOfChars";
    readonly property_reductionTag: "@reductionTag";
    readonly property_refAuthor: "@refAuthor";
    readonly property_refBookTitle: "@refBookTitle";
    readonly property_reference: "@reference";
    readonly property_refPublicationYear: "@refPublicationYear";
    readonly property_refPublisher: "@refPublisher";
    readonly property_relatedBook: "@relatedBook";
    readonly property_releaseDate: "@releaseDate";
    readonly property_releaseKind: "@releaseKind";
    readonly property_releaseVersion: "@releaseVersion";
    readonly property_reportTag: "@reportTag";
    readonly property_resolved: "@resolved";
    readonly property_resolvedBy: "@resolvedBy";
    readonly property_resolvedDate: "@resolvedDate";
    readonly property_revealSolutions: "@revealSolutions";
    readonly property_reviewTag: "@reviewTag";
    readonly property_reviewerTag: "@reviewerTag";
    readonly property_rightsPolicy: "@rightsPolicy";
    readonly property_sampleSolution: "@sampleSolution";
    readonly property_scormSource: "@scormSource";
    readonly property_search: "@search";
    readonly property_searchIndex: "@searchIndex";
    readonly property_selected: "@selected";
    readonly property_servings: "@servings";
    readonly property_showInIndex: "@showInIndex";
    readonly property_showSubtitles: "@showSubtitles";
    readonly property_siteName: "@siteName";
    readonly property_size: "@size";
    readonly property_slug: "@slug";
    readonly property_sourceBB: "@sourceBB";
    readonly property_sourceDocument: "@sourceDocument";
    readonly property_sourceRL: "@sourceRL";
    readonly property_spaceId: "@spaceId";
    readonly property_src1x: "@src1x";
    readonly property_src2x: "@src2x";
    readonly property_src3x: "@src3x";
    readonly property_src4x: "@src4x";
    readonly property_srcAlt: "@srcAlt";
    readonly property_stripePricingTableId: "@stripePricingTableId";
    readonly property_stripePricingTableDescriptiveName: "@stripePricingTableDescriptiveName";
    readonly property_stripePublishableKey: "@stripePublishableKey";
    readonly property_subject: "@subject";
    readonly property_subtype: "@subtype";
    readonly property_tableAutoWidth: "@tableAutoWidth";
    readonly property_tableColWidth: "@tableColWidth";
    readonly property_tableColumnMinWidth: "@tableColumnMinWidth";
    readonly property_tableFixedHeader: "@tableFixedHeader";
    readonly property_tableHeaderWhitespaceNoWrap: "@tableHeaderWhitespaceNoWrap";
    readonly property_tableHeight: "@tableHeight";
    readonly property_tablePagination: "@tablePagination";
    readonly property_tablePaginationLimit: "@tablePaginationLimit";
    readonly property_tableResizableColumns: "@tableResizableColumns";
    readonly property_tableSearch: "@tableSearch";
    readonly property_tableSort: "@tableSort";
    readonly property_tableWhitespaceNoWrap: "@tableWhitespaceNoWrap";
    readonly property_tableCellType: "@tableCellType";
    readonly property_tableRowSpan: "@tableRowSpan";
    readonly property_tableColSpan: "@tableColSpan";
    readonly property_tableScope: "@tableScope";
    readonly property_tag: "@tag";
    readonly property_target: "@target";
    readonly property_technicalTerm: "@technicalTerm";
    readonly property_textReference: "@textReference";
    readonly property_theme: "@theme";
    readonly property_rtl: "@rtl";
    readonly property_thumbImage: "@thumbImage";
    readonly property_title: "@title";
    readonly property_toc: "@toc";
    readonly property_tocContent: "@tocContent";
    readonly property_tocResource: "@tocResource";
    readonly property_topicTag: "@topicTag";
    readonly property_trim: "@trim";
    readonly property_unit: "@unit";
    readonly property_unitAbbr: "@unitAbbr";
    readonly property_unitAbbrPlural: "@unitAbbrPlural";
    readonly property_unitPlural: "@unitPlural";
    readonly property_vendorDashboardId: "@vendorDashboardId";
    readonly property_vendorSurveyId: "@vendorSurveyId";
    readonly property_vendorUrl: "@vendorUrl";
    readonly property_videoCallLink: "@videoCallLink";
    readonly property_width: "@width";
    readonly property_x: "@x";
    readonly property_y: "@y";
    readonly property_zoomDisabled: "@zoomDisabled";
    readonly resource_image: "&image";
    readonly resource_imageResponsive: "&imageResponsive";
    readonly resource_imagePortrait: "&imagePortrait";
    readonly resource_imageLandscape: "&imageLandscape";
    readonly resource_imageEmbed: "&imageEmbed";
    readonly resource_imageLink: "&imageLink";
    readonly resource_audio: "&audio";
    readonly resource_audioEmbed: "&audioEmbed";
    readonly resource_audioLink: "&audioLink";
    readonly resource_video: "&video";
    readonly resource_videoEmbed: "&videoEmbed";
    readonly resource_videoLink: "&videoLink";
    readonly resource_stillImageFilm: "&stillImageFilm";
    readonly resource_stillImageFilmEmbed: "&stillImageFilmEmbed";
    readonly resource_stillImageFilmLink: "&stillImageFilmLink";
    readonly resource_article: "&article";
    readonly resource_articleEmbed: "&articleEmbed";
    readonly resource_articleLink: "&articleLink";
    readonly resource_document: "&document";
    readonly resource_documentEmbed: "&documentEmbed";
    readonly resource_documentLink: "&documentLink";
    readonly resource_documentDownload: "&documentDownload";
    readonly resource_appLink: "&appLink";
    readonly resource_websiteLink: "&websiteLink";
    readonly resource_icon: "&icon";
    readonly resource_platformBackgroundImage: "&platformBackgroundImage";
    readonly resource_platformIcon: "&platformIcon";
    readonly resource_platformLogo: "&platformLogo";
    readonly resource_backgroundWallpaper: "&backgroundWallpaper";
    readonly resource_imagePlaceholder: "&imagePlaceholder";
    readonly resource_previewImage: "&previewImage";
    readonly resource_previewVideo: "&previewVideo";
    readonly resource_coverImage: "&coverImage";
    readonly resource_backgroundImage: "&backgroundImage";
    readonly tag_title: "#";
    readonly tag_anchor: "▼";
    readonly tag_reference: "►";
    readonly tag_property: "@";
    readonly tag_item: "%";
    readonly tag_instruction: "!";
    readonly tag_hint: "?";
    readonly tag_true: "+";
    readonly tag_false: "-";
    readonly tag_sampleSolution: "$";
    readonly tag_gap: "_";
    readonly tag_mark: "=";
    readonly tag_resource: "&";
    readonly _unknown: "_unknown";
};
type ConfigKeyType = EnumType<typeof ConfigKey>;

declare const ResourceType: {
    readonly unknown: "unknown";
    readonly image: "image";
    readonly imageResponsive: "image-responsive";
    readonly imagePortrait: "image-portrait";
    readonly imageLandscape: "image-landscape";
    readonly imageEmbed: "image-embed";
    readonly imageLink: "image-link";
    readonly audio: "audio";
    readonly audioEmbed: "audio-embed";
    readonly audioLink: "audio-link";
    readonly video: "video";
    readonly videoEmbed: "video-embed";
    readonly videoLink: "video-link";
    readonly stillImageFilm: "still-image-film";
    readonly stillImageFilmEmbed: "still-image-film-embed";
    readonly stillImageFilmLink: "still-image-film-link";
    readonly article: "article";
    readonly articleEmbed: "article-embed";
    readonly articleLink: "article-link";
    readonly document: "document";
    readonly documentEmbed: "document-embed";
    readonly documentLink: "document-link";
    readonly documentDownload: "document-download";
    readonly appLink: "app-link";
    readonly websiteLink: "website-link";
    readonly icon: "icon";
    readonly backgroundWallpaper: "backgroundWallpaper";
    readonly imagePlaceholder: "imagePlaceholder";
    readonly platformIcon: "platformIcon";
    readonly platformLogo: "platformLogo";
    readonly platformBackgroundImage: "platformBackgroundImage";
    readonly previewImage: "previewImage";
    readonly previewVideo: "previewVideo";
    readonly coverImage: "coverImage";
    readonly backgroundImage: "backgroundImage";
};
type ResourceTypeType = EnumType<typeof ResourceType>;

declare const TextFormat: {
    readonly plainText: "text";
    readonly latex: "latex";
    readonly json: "json";
    readonly xml: "xml";
    readonly bitmarkText: "bitmark++";
};
type TextFormatType = EnumType<typeof TextFormat>;

declare const TextMarkType: {
    readonly bold: "bold";
    readonly light: "light";
    readonly italic: "italic";
    readonly highlight: "highlight";
    readonly highlightOrange: "highlightOrange";
    readonly highlightYellow: "highlightYellow";
    readonly highlightGreen: "highlightGreen";
    readonly highlightBlue: "highlightBlue";
    readonly highlightPurple: "highlightPurple";
    readonly highlightPink: "highlightPink";
    readonly highlightBrown: "highlightBrown";
    readonly highlightBlack: "highlightBlack";
    readonly highlightWhite: "highlightWhite";
    readonly highlightGray: "highlightGray";
    readonly strike: "strike";
    readonly subscript: "subscript";
    readonly superscript: "superscript";
    readonly ins: "ins";
    readonly del: "del";
    readonly underline: "underline";
    readonly doubleUnderline: "doubleUnderline";
    readonly smallcaps: "smallcaps";
    readonly circle: "circle";
    readonly languageEmRed: "languageEmRed";
    readonly languageEmOrange: "languageEmOrange";
    readonly languageEmYellow: "languageEmYellow";
    readonly languageEmGreen: "languageEmGreen";
    readonly languageEmBlue: "languageEmBlue";
    readonly languageEmPurple: "languageEmPurple";
    readonly languageEmPink: "languageEmPink";
    readonly languageEmBrown: "languageEmBrown";
    readonly languageEmBlack: "languageEmBlack";
    readonly languageEmWhite: "languageEmWhite";
    readonly languageEmGray: "languageEmGray";
    readonly languageEm: "languageEm";
    readonly userUnderline: "userUnderline";
    readonly userDoubleUnderline: "userDoubleUnderline";
    readonly userStrike: "userStrike";
    readonly userCircle: "userCircle";
    readonly userHighlight: "userHighlight";
    readonly notranslate: "notranslate";
    readonly link: "link";
    readonly ref: "ref";
    readonly xref: "xref";
    readonly extref: "extref";
    readonly footnote: "footnote";
    readonly footnoteStar: "footnote*";
    readonly symbol: "symbol";
    readonly var: "var";
    readonly code: "code";
    readonly timer: "timer";
    readonly duration: "duration";
    readonly color: "color";
    readonly textStyle: "textStyle";
    readonly colorPicker: "colorPicker";
    readonly comment: "comment";
};
type TextMarkTypeType = EnumType<typeof TextMarkType>;

declare const TextNodeType: {
    readonly text: "text";
    readonly hardBreak: "hardBreak";
    readonly paragraph: "paragraph";
    readonly heading: "heading";
    readonly section: "section";
    readonly noBulletList: "noBulletList";
    readonly bulletList: "bulletList";
    readonly orderedList: "orderedList";
    readonly orderedListRoman: "orderedListRoman";
    readonly orderedListRomanLower: "orderedListRomanLower";
    readonly letteredList: "letteredList";
    readonly letteredListLower: "letteredListLower";
    readonly taskList: "taskList";
    readonly listItem: "listItem";
    readonly taskItem: "taskItem";
    readonly image: "image";
    readonly imageInline: "imageInline";
    readonly codeBlock: "codeBlock";
    readonly latex: "latex";
    readonly gap: "gap";
    readonly select: "select";
    readonly highlight: "highlight";
    readonly mark: "mark";
};
type TextNodeTypeType = EnumType<typeof TextNodeType>;

type JsonText = string | TextAst;
type TextAst = TextNode[];
interface TextNode {
    type: TextNodeTypeType;
    marks?: TextMark[];
    text?: string;
    content?: TextNode[];
    parent?: TextNodeTypeType;
    attrs?: TextNodeAttibutes;
}
interface TextMark {
    type: TextMarkTypeType;
    attrs?: TextMarkAttibutes;
}
interface LinkMark {
    type: 'link';
    attrs?: LinkMarkAttibutes;
}
interface CommentMark {
    type: 'comment';
    comment: string;
}
interface RefMark {
    type: 'ref';
    attrs?: RefMarkAttibutes;
}
interface XRefMark {
    type: 'xref';
    attrs?: XRefMarkAttibutes;
}
interface ExtRefMark {
    type: 'extref';
    attrs?: ExtRefMarkAttibutes;
}
interface FootnoteMark {
    type: 'footnote';
    attrs?: FootnoteAttibutes;
}
interface SymbolMark {
    type: 'symbol';
    attrs?: SymbolMarkAttibutes;
}
interface HeadingTextNode extends TextNode {
    type: 'heading';
    attrs?: HeadingTextNodeAttributes;
}
interface SectionTextNode extends TextNode {
    type: 'heading';
    section: string;
}
interface TaskItemTextNode extends TextNode {
    type: 'taskItem';
    attrs?: TaskItemTextNodeAttributes;
}
interface ImageTextNode extends TextNode {
    type: 'image';
    attrs?: ImageTextNodeAttributes;
}
interface ImageInlineTextNode extends TextNode {
    type: 'imageInline';
    attrs?: ImageTextNodeAttributes;
}
interface CodeBlockTextNode extends TextNode {
    type: 'codeBlock';
    attrs?: CodeBlockTextNodeAttributes;
}
interface LatexTextNode extends TextNode {
    type: 'latex';
    attrs?: LatexTextNodeAttributes;
}
interface ListTextNode extends TextNode {
    type: 'noBulletList' | 'bulletList' | 'orderedList' | 'orderedListRoman' | 'orderedListRomanLower' | 'letteredList' | 'letteredListLower';
    attrs?: ListTextNodeAttributes;
}
interface TextNodeAttibutes {
    section: string;
}
interface HeadingTextNodeAttributes extends TextNodeAttibutes {
    level: number;
}
interface TaskItemTextNodeAttributes extends TextNodeAttibutes {
    checked: boolean;
}
interface ImageTextNodeAttributes extends TextNodeAttibutes, MediaAttributes {
}
interface CodeBlockTextNodeAttributes extends TextNodeAttibutes {
    language: string;
}
interface LatexTextNodeAttributes extends TextNodeAttibutes {
    formula: string;
}
interface ListTextNodeAttributes extends TextNodeAttibutes {
    start: number;
}
interface TextMarkAttibutes {
}
interface LinkMarkAttibutes extends TextMarkAttibutes {
    href: string;
    target: string;
}
interface RefMarkAttibutes extends TextMarkAttibutes {
    reference: string;
}
interface XRefMarkAttibutes extends TextMarkAttibutes {
    xref: string;
    reference: string;
}
interface ExtRefMarkAttibutes extends TextMarkAttibutes, MediaAttributes {
    extref: string;
    references: string[];
    provider: string;
}
interface FootnoteAttibutes extends TextMarkAttibutes {
    content: TextNode[];
}
interface SymbolMarkAttibutes extends TextMarkAttibutes, MediaAttributes {
}
interface MediaAttributes {
    src: string;
    alt: string | null;
    title: string | null;
    textAlign: string;
    width: string | number | null;
    height: string | number | null;
    class: string;
    comment: string;
}

interface BodyBitsJson {
    [key: string]: BodyBitJson;
}
type BodyBitJson = TextNode | GapJson | MarkJson | SelectJson | HighlightJson;
interface BaseBodyBitJson {
    type: string;
    item: JsonText;
    lead: JsonText;
    hint: JsonText;
    instruction: JsonText;
    isExample: boolean;
    example: ExampleJson;
    __defaultExample?: ExampleJson;
    attrs: Record<string, unknown>;
}
interface GapJson extends BaseBodyBitJson {
    type: 'gap';
    solutions: string[];
    item: JsonText;
    lead: JsonText;
    hint: JsonText;
    instruction: JsonText;
    isCaseSensitive: boolean;
    isExample: boolean;
    example: ExampleJson;
    __solutionsAst?: TextAst[];
    __isDefaultExample?: boolean;
    __defaultExample?: ExampleJson;
}
interface MarkJson extends BaseBodyBitJson {
    type: 'mark';
    solution: string;
    mark: string;
    isExample: boolean;
    example: ExampleJson;
    __isDefaultExample?: boolean;
    __defaultExample?: ExampleJson;
}
interface SelectJson extends BaseBodyBitJson {
    type: 'select';
    options: SelectOptionJson[];
    prefix: string;
    postfix: string;
    isExample: boolean;
    __hintString?: string;
    __instructionString?: string;
}
interface SelectOptionJson {
    text: string;
    isCorrect: boolean;
    item: JsonText;
    lead: JsonText;
    hint: JsonText;
    instruction: JsonText;
    isExample: boolean;
    example: ExampleJson;
    __isDefaultExample?: boolean;
    __defaultExample?: ExampleJson;
}
interface HighlightJson extends BaseBodyBitJson {
    type: 'highlight';
    texts: HighlightTextJson[];
    prefix: string;
    postfix: string;
}
interface HighlightTextJson {
    text: string;
    isHighlighted: boolean;
    isCorrect: boolean;
    item: JsonText;
    lead: JsonText;
    hint: JsonText;
    instruction: JsonText;
    isExample: boolean;
    example: ExampleJson;
    __isDefaultExample?: boolean;
    __defaultExample?: ExampleJson;
}

type ResourceDataJson = ImageResourceJson & ImageResponsiveResourceJson & ImageLinkResourceJson & AudioResourceJson & AudioEmbedResourceJson & AudioLinkResourceJson & VideoResourceJson & VideoEmbedResourceJson & VideoLinkResourceJson & StillImageFilmResourceJson & StillImageFilmEmbedResourceJson & StillImageFilmLinkResourceJson & ArticleResourceJson & DocumentResourceJson & DocumentEmbedResourceJson & DocumentLinkResourceJson & DocumentDownloadResourceJson & AppLinkResourceJson & WebsiteLinkResourceJson;
type ResourceJson = ImageResourceWrapperJson | ImageResponsiveResourceWrapperJson | ImageLinkResourceWrapperJson | AudioResourceWrapperJson | AudioEmbedResourceWrapperJson | AudioLinkResourceWrapperJson | VideoResourceWrapperJson | VideoEmbedResourceWrapperJson | VideoLinkResourceWrapperJson | StillImageFilmResourceWrapperJson | StillImageFilmEmbedResourceWrapperJson | StillImageFilmLinkResourceWrapperJson | ArticleResourceWrapperJson | DocumentResourceWrapperJson | DocumentEmbedResourceWrapperJson | DocumentLinkResourceWrapperJson | DocumentDownloadResourceWrapperJson | AppLinkResourceWrapperJson | WebsiteLinkResourceWrapperJson;
interface ResourceWrapperJson {
    type: ResourceTypeType;
    __typeAlias: ResourceTypeType;
    __configKey: ConfigKeyType;
    __invalid?: boolean;
    __excessResource?: boolean;
}
interface ImageResourceWrapperJson extends ResourceWrapperJson {
    type: 'image';
    image: ImageResourceJson;
}
interface ImageResponsiveResourceWrapperJson extends ResourceWrapperJson {
    type: 'image-responsive';
    imagePortrait: ImageResourceJson;
    imageLandscape: ImageResourceJson;
}
interface ImageLinkResourceWrapperJson extends ResourceWrapperJson {
    type: 'image-link';
    imageLink: ImageLinkResourceJson;
}
interface AudioResourceWrapperJson extends ResourceWrapperJson {
    type: 'audio';
    audio: AudioResourceJson;
}
interface AudioEmbedResourceWrapperJson extends ResourceWrapperJson {
    type: 'audio-embed';
    audioEmbed: AudioEmbedResourceJson;
}
interface AudioLinkResourceWrapperJson extends ResourceWrapperJson {
    type: 'audio-link';
    audioLink: AudioLinkResourceJson;
}
interface VideoResourceWrapperJson extends ResourceWrapperJson {
    type: 'video';
    video: VideoResourceJson;
}
interface VideoEmbedResourceWrapperJson extends ResourceWrapperJson {
    type: 'video-embed';
    videoEmbed: VideoEmbedResourceJson;
}
interface VideoLinkResourceWrapperJson extends ResourceWrapperJson {
    type: 'video-link';
    videoLink: VideoLinkResourceJson;
}
interface StillImageFilmResourceWrapperJson extends ResourceWrapperJson {
    type: 'still-image-film';
    image: ImageResourceJson;
    audio: AudioResourceJson;
}
interface StillImageFilmEmbedResourceWrapperJson extends ResourceWrapperJson {
    type: 'still-image-film-embed';
    stillImageFilmEmbed: StillImageFilmEmbedResourceJson;
}
interface StillImageFilmLinkResourceWrapperJson extends ResourceWrapperJson {
    type: 'still-image-film-link';
    stillImageFilmLink: StillImageFilmLinkResourceJson;
}
interface ArticleResourceWrapperJson extends ResourceWrapperJson {
    type: 'article';
    article: ArticleResourceJson;
}
interface DocumentResourceWrapperJson extends ResourceWrapperJson {
    type: 'document';
    document: DocumentResourceJson;
}
interface DocumentEmbedResourceWrapperJson extends ResourceWrapperJson {
    type: 'document-embed';
    documentEmbed: DocumentEmbedResourceJson;
}
interface DocumentLinkResourceWrapperJson extends ResourceWrapperJson {
    type: 'document-link';
    documentLink: DocumentLinkResourceJson;
}
interface DocumentDownloadResourceWrapperJson extends ResourceWrapperJson {
    type: 'document-download';
    documentDownload: DocumentDownloadResourceJson;
}
interface AppLinkResourceWrapperJson extends ResourceWrapperJson {
    type: 'app-link';
    appLink: AppLinkResourceJson;
}
interface WebsiteLinkResourceWrapperJson extends ResourceWrapperJson {
    type: 'website-link';
    websiteLink: WebsiteLinkResourceJson;
}
interface BaseResourceJson {
    license: string;
    copyright: string;
    provider: string;
    showInIndex: boolean;
    caption: JsonText;
    search: string;
    srcAlt: string[];
    selected: boolean;
}
interface ImageResourceJson extends BaseResourceJson {
    format: string;
    src: string;
    src1x: string;
    src2x: string;
    src3x: string;
    src4x: string;
    width: string | null;
    height: string | null;
    alt: string;
    zoomDisabled: boolean;
}
interface ImageLinkResourceJson extends BaseResourceJson {
    format: string;
    url: string;
    src1x: string;
    src2x: string;
    src3x: string;
    src4x: string;
    width: string | null;
    height: string | null;
    alt: string;
    zoomDisabled: boolean;
}
interface ImageResponsiveResourceJson extends BaseResourceJson {
    imagePortrait: ImageResourceJson;
    imageLandscape: ImageResourceJson;
}
interface AudioResourceJson extends BaseResourceJson {
    format: string;
    src: string;
    duration: number;
    mute: boolean;
    autoplay: boolean;
}
interface AudioEmbedResourceJson extends BaseResourceJson {
    format: string;
    src: string;
    duration: number;
    mute: boolean;
    autoplay: boolean;
}
interface AudioLinkResourceJson extends BaseResourceJson {
    format: string;
    url: string;
    duration: number;
    mute: boolean;
    autoplay: boolean;
}
interface VideoResourceJson extends BaseResourceJson {
    format: string;
    src: string;
    width: string | null;
    height: string | null;
    duration: number;
    mute: boolean;
    autoplay: boolean;
    allowSubtitles: boolean;
    showSubtitles: boolean;
    alt: string;
    posterImage: ImageResourceJson;
    thumbnails: ImageResourceJson[];
}
interface VideoEmbedResourceJson extends BaseResourceJson {
    format: string;
    url: string;
    width: string | null;
    height: string | null;
    duration: number;
    mute: boolean;
    autoplay: boolean;
    allowSubtitles: boolean;
    showSubtitles: boolean;
    alt: string;
    posterImage: ImageResourceJson;
    thumbnails: ImageResourceJson[];
}
interface VideoLinkResourceJson extends BaseResourceJson {
    format: string;
    url: string;
    width: string | null;
    height: string | null;
    duration: number;
    mute: boolean;
    autoplay: boolean;
    allowSubtitles: boolean;
    showSubtitles: boolean;
    alt: string;
    posterImage: ImageResourceJson;
    thumbnails: ImageResourceJson[];
}
interface StillImageFilmResourceJson extends BaseResourceJson {
    image: ImageResourceJson;
    audio: AudioResourceJson;
}
interface StillImageFilmEmbedResourceJson extends BaseResourceJson {
    format: string;
    url: string;
    width: string | null;
    height: string | null;
    duration: number;
    mute: boolean;
    autoplay: boolean;
    allowSubtitles: boolean;
    showSubtitles: boolean;
    alt: string;
    posterImage: ImageResourceJson;
    thumbnails: ImageResourceJson[];
}
interface StillImageFilmLinkResourceJson extends BaseResourceJson {
    format: string;
    url: string;
    width: string | null;
    height: string | null;
    duration: number;
    mute: boolean;
    autoplay: boolean;
    allowSubtitles: boolean;
    showSubtitles: boolean;
    alt: string;
    posterImage: ImageResourceJson;
    thumbnails: ImageResourceJson[];
}
interface ArticleResourceJson extends BaseResourceJson {
    format: string;
    body: string;
}
interface DocumentResourceJson extends BaseResourceJson {
    format: string;
    url: string;
}
interface DocumentEmbedResourceJson extends BaseResourceJson {
    format: string;
    url: string;
}
interface DocumentLinkResourceJson extends BaseResourceJson {
    format: string;
    url: string;
}
interface DocumentDownloadResourceJson extends BaseResourceJson {
    format: string;
    url: string;
}
interface AppLinkResourceJson extends BaseResourceJson {
    url: string;
}
interface WebsiteLinkResourceJson extends BaseResourceJson {
    url: string;
}

interface BitJson {
    type: string;
    originalType: string;
    bitLevel: number;
    format: string;
    id: string | string[];
    gUri: string;
    internalComment: string | string[];
    customerId: string;
    customerExternalId: string | string[];
    externalId: string | string[];
    spaceId: string | string[];
    padletId: string;
    jupyterId: string;
    jupyterExecutionCount: number;
    copyright: string;
    license: string;
    rightsPolicy: string[];
    sourceRL: string;
    isPublic: boolean;
    isTemplate: boolean;
    isTemplateStripTheme: boolean;
    isEditable: boolean;
    needsValidation: boolean;
    validationDate: string;
    aiGenerated: boolean;
    machineTranslated: string;
    translationOf: string;
    spansPageBreak: boolean;
    searchIndex: string | string[];
    analyticsTag: string | string[];
    categoryTag: string | string[];
    topicTag: string | string[];
    reportTag: string | string[];
    altLangTag: string;
    feedbackEngine: string;
    feedbackType: string;
    disableFeedback: boolean;
    diffOp: string;
    diffRef: string;
    diffContext: string;
    diffTime: number;
    path: string;
    releaseVersion: string;
    releaseKind: string;
    releaseDate: string;
    iframeSrc: string;
    iframeName: string;
    ageRange: number | number[];
    lang: string;
    language: string | string[];
    computerLanguage: string;
    target: string | string[];
    slug: string;
    tag: string | string[];
    groupTag: GroupTagJson[];
    reviewTag: string | string[];
    reviewerTag: string | string[];
    reductionTag: string | string[];
    bubbleTag: string | string[];
    extractorTag: string | string[];
    extractorInternal: string | string[];
    sourceBB?: number[] | number[][];
    bitFingerprint: string | string[];
    levelCEFRp: string;
    levelCEFR: string;
    levelILR: string;
    levelACTFL: string;
    icon: string;
    iconTag: string;
    colorTag: string | string[];
    flashcardSet: string | string[];
    subtype: string;
    bookAlias: string | string[];
    bookDiff: string;
    coverImage: string | string[];
    coverColor: string;
    backgroundImage: string | string[];
    publisher: string | string[];
    publisherName: string;
    displayName: string;
    publications: string | string[];
    relatedBook: string | string[];
    userFeedbackTranslationUrl: string;
    userFeedbackContentUrl: string;
    author: string | string[];
    subject: string | string[];
    date: string;
    dateEnd: string;
    location: string;
    theme: string | string[];
    kind: string;
    hasMarkAsDone: boolean;
    processHandIn: boolean;
    processHandInLocation: string;
    chatWithBook: boolean;
    chatWithBookBrainKey: string;
    currency: string;
    bookIsbn: string;
    bookAuthor: string;
    bookType: string;
    bookBindingType: string;
    bookNumberOfPages: string;
    bookRating: string;
    bookSeriesTitle: string;
    bookSeriesId: string;
    bookSeriesNumber: string;
    bookLanguage: string;
    bookPublishingDate: string;
    bookPublisher: string;
    bookTranslator: string;
    bookOriginalTitle: string;
    gmbExternalShop: string;
    gmbExternalShopItems: string | string[];
    action: string;
    showInIndex: boolean;
    refAuthor: string | string[];
    refBookTitle: string;
    refPublisher: string | string[];
    refPublicationYear: string;
    citationStyle: string;
    blockId: string;
    pageNo: number;
    x: number;
    y: number;
    width: string;
    height: string;
    index: number;
    classification: string;
    availableClassifications: string | string[];
    allowedBit: string | string[];
    authorFullName: string;
    authorPseudonym: string;
    authorTitle: string;
    authorJobTitle: string;
    tableFixedHeader: boolean;
    tableHeaderWhitespaceNoWrap: boolean;
    tableSearch: boolean;
    tableSort: boolean;
    tablePagination: boolean;
    tablePaginationLimit: number;
    tableHeight: number;
    tableWhitespaceNoWrap: boolean;
    tableAutoWidth: boolean;
    tableResizableColumns: boolean;
    tableColumnMinWidth: number;
    quizCountItems: boolean;
    quizStrikethroughSolutions: boolean;
    codeLineNumbers: boolean;
    codeMinimap: boolean;
    stripePricingTableId: string;
    stripePricingTableDescriptiveName: string;
    stripePublishableKey: string;
    thumbImage: string;
    scormSource: string;
    posterImage: string;
    focusX: number;
    focusY: number;
    pointerLeft: string;
    pointerTop: string;
    listItemIndent: number;
    backgroundWallpaper: ImageResourceWrapperJson;
    hasBookNavigation: boolean;
    duration: string;
    deeplink: string | string[];
    externalLink: string;
    externalLinkText: string;
    videoCallLink: string;
    vendorDashboardId: string;
    vendorSurveyId: string;
    vendorUrl: string;
    search: string;
    bot: string | string[];
    list: string | string[];
    layer: string | string[];
    layerRole: string | string[];
    textReference: string;
    isTracked: boolean;
    isInfoOnly: boolean;
    imageFirst: boolean;
    activityType: string;
    labelTrue: string;
    labelFalse: string;
    content2Buy: string;
    listPrice: string;
    customerProductId: string;
    customerProductShopLink: string;
    mailingList: string;
    buttonCaption: string;
    callToActionUrl: string;
    advertisingClickUrl: string;
    brandColor: string;
    brandColorName: string;
    caption: JsonText;
    quotedPerson: string;
    reasonableNumOfChars: number;
    resolved: boolean;
    resolvedDate: string;
    resolvedBy: string;
    handInAcceptFileType: string | string[];
    handInRequirement: string | string[];
    handInInstruction: string;
    maxCreatedBits: number;
    maxDisplayLevel: number;
    maxTocChapterLevel: number;
    allowPrint: string;
    printParentChapterLevel: number;
    printOnRequestCustomerId: string;
    printOnRequestProductId: string;
    sourceDocument: string;
    internalPrintPdf: string;
    hasPrintRestriction: boolean;
    enforceUpdateOverUserInput: boolean;
    extractorExtractionTimestamp: string[];
    tocResource: string | string[];
    tocContent: string | string[];
    page: string;
    platformBrandTarget: string;
    platformName: string;
    platformIcon: ImageResourceWrapperJson;
    platformLogo: ImageResourceWrapperJson;
    platformLogoMaxHeight: number;
    platformPrimaryColor: string;
    platformSecondaryColor: string;
    platformBackgroundColor: string;
    platformScrollbarColor: string;
    platformSelectionColor: string;
    platformSeparatorColor: string;
    platformPlaceholderColor: string;
    platformTextSelectionColor: string;
    platformButtonPrimaryColor: string;
    platformButtonBackgroundColor: string;
    platformMessageBackgroundColor: string;
    platformBackgroundImage: ImageResourceWrapperJson;
    platformBorderColor: string;
    platformSelectionTextColor: string;
    platformBaseLayerColor: string;
    platformMargin: number;
    platformBorderRadius: number;
    platformSelectionBorderRadius: number;
    platformNeedsShadow: boolean;
    productId: string | string[];
    product: string;
    productVideo: string;
    productFolder: string;
    technicalTerm: TechnicalTermJson;
    servings: ServingsJson;
    ratingLevelStart: RatingLevelStartEndJson;
    ratingLevelEnd: RatingLevelStartEndJson;
    ratingLevelSelected: number;
    book: string | BookJson[];
    title: JsonText;
    subtitle: JsonText;
    level: number;
    toc: boolean;
    progress: boolean;
    isCollapsible: boolean;
    anchor: string;
    reference: string | string[];
    referenceEnd: string;
    revealSolutions: boolean;
    item: JsonText;
    lead: JsonText;
    pageNumber: JsonText;
    marginNumber: JsonText;
    hint: JsonText;
    instruction: JsonText;
    isExample: boolean;
    example: ExampleJson;
    imageSource: ImageSourceJson;
    person: PersonJson;
    partner: PersonJson;
    marks: MarkConfigJson[];
    extraProperties: {
        [key: string]: unknown | unknown[];
    };
    imagePlaceholder: ImageResourceWrapperJson;
    previewImage: ImageResourceWrapperJson[];
    previewVideo: VideoResourceWrapperJson[];
    resource: ResourceJson;
    logos: ImageResourceWrapperJson[];
    images: ImageResourceWrapperJson[];
    body: JsonText | unknown;
    sampleSolution: string;
    additionalSolutions: string[];
    partialAnswer: string;
    elements: string[];
    statement: JsonText;
    isCorrect: boolean;
    cards: FlashcardJson[];
    definitions: DefinitionListItemJson[];
    descriptions: DefinitionListItemJson[];
    statements: StatementJson[];
    responses: ResponseJson[] | BotResponseJson[];
    feedbacks: FeedbackJson[];
    quizzes: QuizJson[];
    heading: HeadingJson;
    pairs: PairJson[];
    matrix: MatrixJson[];
    table: TableJson;
    tableExtended: TableExtendedJson;
    choices: ChoiceJson[];
    questions: QuestionJson[];
    ingredients: IngredientJson[];
    listItems: ListItemJson[];
    sections: ListItemJson[];
    bookReferences: BookReferenceJson[];
    footer: JsonText;
    placeholders: BodyBitsJson;
}
interface BookJson {
    book: string;
    reference: string;
    referenceEnd: string;
}
interface GroupTagJson {
    name: string;
    tags: string[];
}
interface ImageSourceJson {
    url: string;
    mockupId: string;
    size?: number;
    format?: string;
    trim?: boolean;
}
interface PersonJson {
    name: string;
    title: string;
    avatarImage: ImageResourceWrapperJson;
}
interface MarkConfigJson {
    mark: string;
    color: string;
    emphasis: string;
}
interface FlashcardJson {
    question: TextAndIconJson;
    answer: TextAndIconJson;
    alternativeAnswers: TextAndIconJson[];
    item: JsonText;
    lead: JsonText;
    hint: JsonText;
    instruction: JsonText;
    isExample: boolean;
    example: ExampleJson;
    __isDefaultExample?: boolean;
    __defaultExample?: ExampleJson;
}
interface DefinitionListItemJson {
    term: TextAndIconJson;
    definition: TextAndIconJson;
    alternativeDefinitions: TextAndIconJson[];
    item: JsonText;
    lead: JsonText;
    hint: JsonText;
    instruction: JsonText;
    isExample: boolean;
    example: ExampleJson;
    __isDefaultExample?: boolean;
    __defaultExample?: ExampleJson;
}
interface TextAndIconJson {
    text: JsonText;
    icon: ImageResourceWrapperJson;
}
interface StatementJson {
    statement: JsonText;
    isCorrect: boolean;
    item: JsonText;
    lead: JsonText;
    hint: JsonText;
    instruction: JsonText;
    isExample: boolean;
    example: ExampleJson;
    __isDefaultExample?: boolean;
    __defaultExample?: ExampleJson;
}
interface FeedbackChoiceJson {
    choice: string;
    requireReason: boolean;
    item: JsonText;
    lead: JsonText;
    hint: JsonText;
    instruction: JsonText;
    isExample: boolean;
    example: ExampleJson;
    __isDefaultExample?: boolean;
    __defaultExample?: ExampleJson;
}
interface FeedbackReasonJson {
    item: JsonText;
    lead: JsonText;
    hint: JsonText;
    instruction: JsonText;
    text: string;
    reasonableNumOfChars: number;
    isExample: boolean;
    example: ExampleJson;
    __textAst?: TextAst;
    __isDefaultExample?: boolean;
    __defaultExample?: ExampleJson;
}
interface ChoiceJson {
    choice: string;
    isCorrect: boolean;
    item: JsonText;
    lead: JsonText;
    hint: JsonText;
    instruction: JsonText;
    isExample: boolean;
    example: ExampleJson;
    __isDefaultExample?: boolean;
    __defaultExample?: ExampleJson;
}
interface ResponseJson {
    response: string;
    isCorrect: boolean;
    item: JsonText;
    lead: JsonText;
    hint: JsonText;
    instruction: JsonText;
    isExample: boolean;
    example: ExampleJson;
    __isDefaultExample?: boolean;
    __defaultExample?: ExampleJson;
}
interface FeedbackJson {
    item: JsonText;
    lead: JsonText;
    hint: JsonText;
    instruction: JsonText;
    choices: FeedbackChoiceJson[];
    reason: FeedbackReasonJson;
}
interface QuizJson {
    item: JsonText;
    lead: JsonText;
    hint: JsonText;
    instruction: JsonText;
    isExample: boolean;
    choices: ChoiceJson[];
    responses: ResponseJson[];
    __isDefaultExample?: boolean;
    __defaultExample?: ExampleJson;
}
interface HeadingJson {
    forKeys: string;
    forValues: string | string[];
    __forValuesDefault?: string | string[];
}
interface PairJson {
    key: string;
    keyAudio: AudioResourceWrapperJson;
    keyImage: ImageResourceWrapperJson;
    item: JsonText;
    lead: JsonText;
    hint: JsonText;
    instruction: JsonText;
    isCaseSensitive: boolean;
    isExample: boolean;
    example: ExampleJson;
    values: string[];
    __valuesAst?: TextAst[];
    __isDefaultExample?: boolean;
    __defaultExample?: ExampleJson;
}
interface MatrixJson {
    key: string;
    item: JsonText;
    lead: JsonText;
    hint: JsonText;
    instruction: JsonText;
    isExample: boolean;
    cells: MatrixCellJson[];
    __isDefaultExample?: boolean;
}
interface MatrixCellJson {
    values: string[];
    item: JsonText;
    lead: JsonText;
    hint: JsonText;
    instruction: JsonText;
    isCaseSensitive: boolean;
    isExample: boolean;
    example: ExampleJson;
    __valuesAst?: TextAst[];
    __isDefaultExample?: boolean;
    __defaultExample?: ExampleJson;
}
interface PronunciationTableCellJson {
    title: JsonText;
    body: JsonText;
    audio: AudioResourceWrapperJson;
}
interface PronunciationTableJson {
    data: PronunciationTableCellJson[][];
}
interface TableJson {
    columnWidths?: (number | null)[];
    columns: JsonText[];
    data: JsonText[][];
}
interface TableExtendedJson {
    header?: TableSectionJson;
    body?: TableSectionJson;
    footer?: TableSectionJson;
}
interface TableSectionJson {
    rows: TableRowJson[];
}
interface TableRowJson {
    cells: TableCellJson[];
}
interface TableCellJson {
    content: JsonText;
    title?: boolean;
    rowspan?: number;
    colspan?: number;
    scope?: 'row' | 'col' | 'rowgroup' | 'colgroup';
    colwidth?: number;
}
interface QuestionJson {
    question: JsonText;
    partialAnswer: string;
    sampleSolution: string;
    additionalSolutions: string[];
    item: JsonText;
    lead: JsonText;
    hint: JsonText;
    instruction: JsonText;
    reasonableNumOfChars: number;
    isExample: boolean;
    example: ExampleJson;
    __sampleSolutionAst?: TextAst;
    __isDefaultExample?: boolean;
    __defaultExample?: ExampleJson;
}
interface BotResponseJson {
    response: string;
    reaction: string;
    feedback: string;
    item: string;
    lead: JsonText;
    hint: JsonText;
}
interface TechnicalTermJson {
    technicalTerm: string;
    lang: string;
}
interface ServingsJson {
    servings: number;
    unit: string;
    unitPlural: string;
    unitAbbr: string;
    unitAbbrPlural: string;
    decimalPlaces: number;
    disableCalculation: boolean;
    hint: string;
}
interface IngredientJson {
    title: string;
    checked: boolean;
    ingredient: string;
    quantity: number;
    unit: string;
    unitPlural: string;
    unitAbbr: string;
    unitAbbrPlural: string;
    decimalPlaces: number;
    disableCalculation: boolean;
    item: JsonText;
    lead: JsonText;
    hint: JsonText;
}
interface RatingLevelStartEndJson {
    level: number;
    label?: JsonText;
}
interface ListItemJson {
    item: JsonText;
    lead: JsonText;
    hint: JsonText;
    instruction: JsonText;
    body: JsonText | unknown;
}
interface BookReferenceJson {
    lang: string;
    refAuthor: string;
    refBookTitle: string[];
    refPublisher: string;
}
type ExampleJson = JsonText | boolean | null;

interface ParserLocation {
    offset: number;
    line: number;
    column: number;
}

interface ParserError {
    message: string;
    text?: string;
    location?: {
        start: ParserLocation;
        end: ParserLocation;
    };
    original?: {
        text?: string;
        location?: {
            start: ParserLocation;
            end: ParserLocation;
        };
    };
}

interface ParserInfo {
    version?: string;
    bitmarkVersion?: string;
    textParserVersion?: string;
    warnings?: ParserError[];
    errors?: ParserError[];
}

type Node = any;
interface BitmarkAst {
    bits?: Bit[];
    errors?: ParserError[];
}
interface Bit {
    bitType: BitTypeType;
    bitLevel: number;
    textFormat: TextFormatType;
    resourceType?: ResourceTypeType;
    isCommented?: boolean;
    id?: Property;
    gUri?: Property;
    internalComment?: Property;
    customerId?: Property;
    customerExternalId?: Property;
    externalId?: Property;
    spaceId?: Property;
    padletId?: Property;
    jupyterId?: Property;
    jupyterExecutionCount?: Property;
    copyright?: Property;
    license?: Property;
    rightsPolicy?: Property;
    sourceRL?: Property;
    isPublic?: Property;
    isTemplate?: Property;
    isTemplateStripTheme?: Property;
    isEditable?: Property;
    needsValidation?: Property;
    validationDate?: Property;
    aiGenerated?: Property;
    machineTranslated?: Property;
    translationOf?: Property;
    spansPageBreak?: Property;
    searchIndex?: Property;
    analyticsTag?: Property;
    categoryTag?: Property;
    topicTag?: Property;
    reportTag?: Property;
    altLangTag?: Property;
    feedbackEngine?: Property;
    feedbackType?: Property;
    disableFeedback?: Property;
    diffTo?: Property;
    diffOp?: Property;
    diffRef?: Property;
    diffContext?: Property;
    diffTime?: Property;
    path?: Property;
    releaseVersion?: Property;
    releaseKind?: Property;
    releaseDate?: Property;
    iframeSrc?: Property;
    iframeName?: Property;
    ageRange?: Property;
    lang?: Property;
    language?: Property;
    publisher?: Property;
    publisherName?: Property;
    displayName?: Property;
    theme?: Property;
    rtl?: Property;
    computerLanguage?: Property;
    target?: Property;
    slug?: Property;
    tag?: Property;
    groupTag?: GroupTagJson[];
    reviewTag?: Property;
    reviewerTag?: Property;
    reductionTag?: Property;
    bubbleTag?: Property;
    extractorTag?: Property;
    extractorInternal?: Property;
    sourceBB?: number[][];
    bitFingerprint?: Property;
    levelCEFRp?: Property;
    levelCEFR?: Property;
    levelILR?: Property;
    levelACTFL?: Property;
    icon?: Property;
    iconTag?: Property;
    colorTag?: Property;
    flashcardSet?: Property;
    subtype?: Property;
    bookAlias?: Property;
    bookDiff?: Property;
    coverImage?: Property | ImageResourceWrapperJson;
    coverColor?: Property;
    backgroundImage?: Property | ImageResourceWrapperJson;
    publications?: Property;
    relatedBook?: Property;
    translationOfBook?: Property;
    userFeedbackTranslationUrl?: Property;
    userFeedbackContentUrl?: Property;
    author?: Property;
    subject?: Property;
    date?: Property;
    dateEnd?: Property;
    location?: Property;
    kind?: Property;
    hasMarkAsDone?: Property;
    processHandIn?: Property;
    processHandInLocation?: Property;
    chatWithBook?: Property;
    chatWithBookBrainKey?: Property;
    currency?: Property;
    bookIsbn?: Property;
    bookAuthor?: Property;
    bookType?: Property;
    bookBindingType?: Property;
    bookNumberOfPages?: Property;
    bookRating?: Property;
    bookSeriesTitle?: Property;
    bookSeriesId?: Property;
    bookSeriesNumber?: Property;
    bookLanguage?: Property;
    bookPublishingDate?: Property;
    bookPublisher?: Property;
    bookTranslator?: Property;
    bookOriginalTitle?: Property;
    gmbExternalShop?: Property;
    gmbExternalShopItems?: Property;
    action?: Property;
    showInIndex?: Property;
    refAuthor?: Property;
    refBookTitle?: Property;
    refPublisher?: Property;
    refPublicationYear?: Property;
    citationStyle?: Property;
    blockId?: Property;
    pageNo?: Property;
    x?: Property;
    y?: Property;
    width?: Property;
    height?: Property;
    index?: Property;
    classification?: Property;
    availableClassifications?: Property;
    allowedBit?: Property;
    authorFullName?: Property;
    authorPseudonym?: Property;
    authorTitle?: Property;
    authorJobTitle?: Property;
    tableFixedHeader?: Property;
    tableHeaderWhitespaceNoWrap?: Property;
    tableSearch?: Property;
    tableSort?: Property;
    tablePagination?: Property;
    tablePaginationLimit?: Property;
    tableHeight?: Property;
    tableWhitespaceNoWrap?: Property;
    tableAutoWidth?: Property;
    tableResizableColumns?: Property;
    tableColWidth?: Property;
    tableColumnMinWidth?: Property;
    tableCellType?: Property;
    tableRowSpan?: Property;
    tableColSpan?: Property;
    tableScope?: Property;
    quizCountItems?: Property;
    quizStrikethroughSolutions?: Property;
    codeLineNumbers?: Property;
    codeMinimap?: Property;
    stripePricingTableId?: Property;
    stripePricingTableDescriptiveName?: Property;
    stripePublishableKey?: Property;
    thumbImage?: Property;
    scormSource?: Property;
    posterImage?: Property;
    focusX?: Property;
    focusY?: Property;
    pointerLeft?: Property;
    pointerTop?: Property;
    listItemIndent?: Property;
    backgroundWallpaper?: ImageResourceWrapperJson;
    hasBookNavigation?: Property;
    duration?: Property;
    deeplink?: Property;
    externalLink?: Property;
    externalLinkText?: Property;
    videoCallLink?: Property;
    vendorDashboardId?: Property;
    vendorSurveyId?: Property;
    vendorUrl?: Property;
    search?: Property;
    bot?: Property;
    referenceProperty?: Property;
    fullName?: Property;
    pseudonym?: Property;
    titleString?: Property;
    jobTitle?: Property;
    list?: Property;
    layer?: Property;
    layerRole?: Property;
    textReference?: Property;
    isTracked?: Property;
    isInfoOnly?: Property;
    imageFirst?: Property;
    activityType?: Property;
    labelTrue?: Property;
    labelFalse?: Property;
    content2Buy?: Property;
    listPrice?: Property;
    customerProductId?: Property;
    customerProductShopLink?: Property;
    mailingList?: Property;
    buttonCaption?: Property;
    callToActionUrl?: Property;
    advertisingClickUrl?: Property;
    brandColor?: Property;
    brandColorName?: Property;
    caption?: TextAst;
    quotedPerson?: Property;
    partialAnswer?: Property;
    reasonableNumOfChars?: Property;
    resolved?: Property;
    resolvedDate?: Property;
    resolvedBy?: Property;
    handInAcceptFileType?: Property;
    handInRequirement?: Property;
    handInInstruction?: Property;
    maxCreatedBits?: Property;
    maxDisplayLevel?: Property;
    maxTocChapterLevel?: Property;
    sourceDocument?: Property;
    internalPrintPdf?: Property;
    hasPrintRestriction?: Property;
    enforceUpdateOverUserInput?: Property;
    extractorExtractionTimestamp?: Property;
    tocResource?: Property;
    tocContent?: Property;
    page?: Property;
    allowPrint?: Property;
    allowPrintValue?: Property;
    printParentChapterLevel?: Property;
    printOnRequestCustomerId?: Property;
    printOnRequestProductId?: Property;
    platformBrandTarget?: Property;
    platformName?: Property;
    platformIcon?: ImageResourceWrapperJson;
    platformLogo?: ImageResourceWrapperJson;
    platformLogoMaxHeight?: Property;
    platformPrimaryColor?: Property;
    platformSecondaryColor?: Property;
    platformBackgroundColor?: Property;
    platformScrollbarColor?: Property;
    platformSelectionColor?: Property;
    platformSeparatorColor?: Property;
    platformPlaceholderColor?: Property;
    platformTextSelectionColor?: Property;
    platformButtonPrimaryColor?: Property;
    platformButtonBackgroundColor?: Property;
    platformMessageBackgroundColor?: Property;
    platformBackgroundImage?: ImageResourceWrapperJson;
    platformBorderColor?: Property;
    platformSelectionTextColor?: Property;
    platformBaseLayerColor?: Property;
    platformMargin?: Property;
    platformBorderRadius?: Property;
    platformSelectionBorderRadius?: Property;
    platformNeedsShadow?: Property;
    productId?: Property;
    product?: Property;
    productList?: Property;
    productVideo?: Property;
    productVideoList?: Property;
    productFolder?: Property;
    technicalTerm?: TechnicalTermJson;
    servings?: ServingsJson;
    ratingLevelStart?: RatingLevelStartEndJson;
    ratingLevelEnd?: RatingLevelStartEndJson;
    ratingLevelSelected?: Property;
    formula?: Property;
    markConfig?: MarkConfigJson[];
    extraProperties?: ExtraProperties;
    book?: string | BookJson[];
    title?: TextAst;
    subtitle?: TextAst;
    level?: number;
    toc?: Property;
    progress?: Property;
    isCollapsible?: Property;
    anchor?: string;
    reference?: string;
    referenceEnd?: string;
    revealSolutions?: Property;
    item?: TextAst;
    lead?: TextAst;
    pageNumber?: TextAst;
    marginNumber?: TextAst;
    hint?: TextAst;
    instruction?: TextAst;
    isExample?: boolean;
    example?: ExampleJson;
    imageSource?: ImageSourceJson;
    person?: PersonJson;
    previewImage?: ImageResourceWrapperJson[];
    previewVideo?: VideoResourceWrapperJson[];
    imagePlaceholder?: ImageResourceWrapperJson;
    resources?: ResourceJson[];
    body?: Body;
    sampleSolution?: Property;
    additionalSolutions?: Property;
    statement?: StatementJson;
    choices?: ChoiceJson[];
    responses?: ResponseJson[];
    cardNode?: CardNode;
    footer?: Footer;
    markup?: string;
    parser?: ParserInfo;
    __isDefaultExample: boolean;
    __defaultExample?: ExampleJson;
}
type Example = JsonText | string | boolean;
interface ExtraProperties {
    [key: string]: Property;
}
type Property = string[] | number[] | boolean[] | string | number | boolean;
interface Body {
    body?: JsonText | unknown;
    bodyBits?: BodyBitJson[];
    placeholders?: BodyBitsJson;
    bodyString?: string;
}
interface BodyPart {
    type: BodyBitTypeType;
    data?: unknown;
}
interface CardBit extends Bit {
}
interface CardNode {
    questions?: QuestionJson[];
    elements?: string[];
    flashcards?: FlashcardJson[];
    definitions?: DefinitionListItemJson[];
    statement?: StatementJson;
    statements?: StatementJson[];
    choices?: ChoiceJson[];
    responses?: ResponseJson[];
    feedbacks?: FeedbackJson[];
    quizzes?: QuizJson[];
    heading?: HeadingJson;
    pairs?: PairJson[];
    matrix?: MatrixJson[];
    pronunciationTable?: PronunciationTableJson;
    table?: TableJson | TableExtendedJson;
    botResponses?: BotResponseJson[];
    cardBits?: Bit[];
    ingredients?: IngredientJson[];
}
interface Footer {
    footer?: JsonText;
}

/**
 * Defines the type of a node in the AST.
 * All valid node types should be defined here.
 *
 * Nodes not defined here will not be walked by the AST walker.
 *
 * @enum
 */
declare const NodeType: {
    readonly unknown: "unknown";
    readonly __isDefaultExample: "__isDefaultExample";
    readonly __typeAlias: "__typeAlias";
    readonly action: "action";
    readonly actionValue: "actionValue";
    readonly activityType: "activityType";
    readonly activityTypeValue: "activityTypeValue";
    readonly additionalSolutions: "additionalSolutions";
    readonly additionalSolutionsValue: "additionalSolutionsValue";
    readonly advertisingClickUrl: "advertisingClickUrl";
    readonly advertisingClickUrlValue: "advertisingClickUrlValue";
    readonly ageRange: "ageRange";
    readonly ageRangeValue: "ageRangeValue";
    readonly aiGenerated: "aiGenerated";
    readonly aiGeneratedValue: "aiGeneratedValue";
    readonly alias: "alias";
    readonly alignment: "alignment";
    readonly allowedBit: "allowedBit";
    readonly allowedBitValue: "allowedBitValue";
    readonly allowPrint: "allowPrint";
    readonly allowPrintValue: "allowPrintValue";
    readonly alt: "alt";
    readonly alternativeAnswers: "alternativeAnswers";
    readonly alternativeAnswersValue: "alternativeAnswersValue";
    readonly alternativeDefinitions: "alternativeDefinitions";
    readonly alternativeDefinitionsValue: "alternativeDefinitionsValue";
    readonly altLangTag: "altLangTag";
    readonly altLangTagValue: "altLangTagValue";
    readonly analyticsTag: "analyticsTag";
    readonly analyticsTagValue: "analyticsTagValue";
    readonly anchor: "anchor";
    readonly answer: "answer";
    readonly appLink: "appLink";
    readonly attrs: "attrs";
    readonly audio: "audio";
    readonly audioEmbed: "audioEmbed";
    readonly audioLink: "audioLink";
    readonly author: "author";
    readonly authorFullName: "authorFullName";
    readonly authorFullNameValue: "authorFullNameValue";
    readonly authorJobTitle: "authorJobTitle";
    readonly authorJobTitleValue: "authorJobTitleValue";
    readonly authorPseudonym: "authorPseudonym";
    readonly authorPseudonymValue: "authorPseudonymValue";
    readonly authorTitle: "authorTitle";
    readonly authorTitleValue: "authorTitleValue";
    readonly authorValue: "authorValue";
    readonly availableClassifications: "availableClassifications";
    readonly availableClassificationsValue: "availableClassificationsValue";
    readonly avatarImage: "avatarImage";
    readonly backgroundWallpaper: "backgroundWallpaper";
    readonly backgroundWallpaperValue: "backgroundWallpaperValue";
    readonly backgroundImage: "backgroundImage";
    readonly backgroundImageValue: "backgroundImageValue";
    readonly bitLevel: "bitLevel";
    readonly bitmarkAst: "bitmarkAst";
    readonly bitmarkVersion: "bitmarkVersion";
    readonly bits: "bits";
    readonly bitsValue: "bitsValue";
    readonly bitType: "bitType";
    readonly bitFingerprint: "bitFingerprint";
    readonly bitFingerprintValue: "bitFingerprintValue";
    readonly blockId: "blockId";
    readonly blockIdValue: "blockIdValue";
    readonly body: "body";
    readonly bodyBit: "bodyBit";
    readonly bodyBits: "bodyBits";
    readonly bodyJson: "bodyJson";
    readonly bodyParts: "bodyParts";
    readonly bodyPartsValue: "bodyPartsValue";
    readonly bodyPartText: "bodyPartText";
    readonly bodyText: "bodyText";
    readonly bodyValue: "bodyValue";
    readonly book: "book";
    readonly bookAlias: "bookAlias";
    readonly bookAliasValue: "bookAliasValue";
    readonly bookAuthor: "bookAuthor";
    readonly bookBindingType: "bookBindingType";
    readonly bookDiff: "bookDiff";
    readonly bookDiffValue: "bookDiffValue";
    readonly bookIsbn: "bookIsbn";
    readonly bookLanguage: "bookLanguage";
    readonly bookNumberOfPages: "bookNumberOfPages";
    readonly bookOriginalTitle: "bookOriginalTitle";
    readonly bookPublisher: "bookPublisher";
    readonly bookPublishingDate: "bookPublishingDate";
    readonly bookRating: "bookRating";
    readonly bookSeriesId: "bookSeriesId";
    readonly bookSeriesNumber: "bookSeriesNumber";
    readonly bookSeriesTitle: "bookSeriesTitle";
    readonly bookTranslator: "bookTranslator";
    readonly bookType: "bookType";
    readonly bookValue: "bookValue";
    readonly bot: "bot";
    readonly botResponses: "botResponses";
    readonly botResponsesValue: "botResponsesValue";
    readonly botValue: "botValue";
    readonly brandColor: "brandColor";
    readonly brandColorName: "brandColorName";
    readonly brandColorNameValue: "brandColorNameValue";
    readonly brandColorValue: "brandColorValue";
    readonly bubbleTag: "bubbleTag";
    readonly bubbleTagValue: "bubbleTagValue";
    readonly buttonCaption: "buttonCaption";
    readonly buttonCaptionValue: "buttonCaptionValue";
    readonly callToActionUrl: "callToActionUrl";
    readonly callToActionUrlValue: "callToActionUrlValue";
    readonly caption: "caption";
    readonly captionDefinitionList: "captionDefinitionList";
    readonly captionValue: "captionValue";
    readonly cardBits: "cardBits";
    readonly cardBitsValue: "cardBitsValue";
    readonly cardNode: "cardNode";
    readonly categoryTag: "categoryTag";
    readonly categoryTagValue: "categoryTagValue";
    readonly cells: "cells";
    readonly cellsValue: "cellsValue";
    readonly chatWithBook: "chatWithBook";
    readonly chatWithBookBrainKey: "chatWithBookBrainKey";
    readonly chatWithBookBrainKeyValue: "chatWithBookBrainKeyValue";
    readonly chatWithBookValue: "chatWithBookValue";
    readonly checked: "checked";
    readonly choice: "choice";
    readonly choices: "choices";
    readonly choicesValue: "choicesValue";
    readonly citationStyle: "citationStyle";
    readonly citationStyleValue: "citationStyleValue";
    readonly class: "class";
    readonly classification: "classification";
    readonly classificationValue: "classificationValue";
    readonly codeLineNumbers: "codeLineNumbers";
    readonly codeLineNumbersValue: "codeLineNumbersValue";
    readonly codeMinimap: "codeMinimap";
    readonly codeMinimapValue: "codeMinimapValue";
    readonly color: "color";
    readonly colorTag: "colorTag";
    readonly colorTagValue: "colorTagValue";
    readonly column: "column";
    readonly columns: "columns";
    readonly columnsValue: "columnsValue";
    readonly comment: "comment";
    readonly commentedBitType: "commentedBitType";
    readonly computerLanguage: "computerLanguage";
    readonly computerLanguageValue: "computerLanguageValue";
    readonly content: "contentValue";
    readonly content2Buy: "content2Buy";
    readonly contentValue: "contentValue";
    readonly contentValueValue: "contentValueValue";
    readonly copyright: "copyright";
    readonly coverColor: "coverColor";
    readonly coverColorValue: "coverColorValue";
    readonly coverImage: "coverImage";
    readonly coverImageValue: "coverImageValue";
    readonly currency: "currency";
    readonly customerExternalId: "customerExternalId";
    readonly customerId: "customerId";
    readonly customerIdValue: "customerIdValue";
    readonly customerProductId: "customerProductId";
    readonly customerProductShopLink: "customerProductShopLink";
    readonly data: "data";
    readonly dataValue: "dataValue";
    readonly dataValueValue: "dataValueValue";
    readonly date: "date";
    readonly dateEnd: "dateEnd";
    readonly dateEndValue: "dateEndValue";
    readonly dateValue: "dateValue";
    readonly decimalPlaces: "decimalPlaces";
    readonly deeplink: "deeplink";
    readonly deeplinkValue: "deeplinkValue";
    readonly definition: "definition";
    readonly definitions: "definitions";
    readonly definitionsValue: "definitionsValue";
    readonly displayName: "displayName";
    readonly displayNameValue: "displayNameValue";
    readonly diffContext: "diffContext";
    readonly diffContextValue: "diffContextValue";
    readonly diffOp: "diffOp";
    readonly diffOpValue: "diffOpValue";
    readonly diffRef: "diffRef";
    readonly diffRefValue: "diffRefValue";
    readonly diffTime: "diffTime";
    readonly diffTimeValue: "diffTimeValue";
    readonly diffTo: "diffTo";
    readonly diffToValue: "diffToValue";
    readonly disableCalculation: "disableCalculation";
    readonly disableFeedback: "disableFeedback";
    readonly disableFeedbackValue: "disableFeedbackValue";
    readonly document: "document";
    readonly documentDownload: "documentDownload";
    readonly documentEmbed: "documentEmbed";
    readonly documentLink: "documentLink";
    readonly duration: "duration";
    readonly durationValue: "durationValue";
    readonly elements: "elements";
    readonly elementsValue: "elementsValue";
    readonly elementsValueValue: "elementsValueValue";
    readonly emphasis: "emphasis";
    readonly end: "end";
    readonly enforceUpdateOverUserInput: "enforceUpdateOverUserInput";
    readonly enforceUpdateOverUserInputValue: "enforceUpdateOverUserInputValue";
    readonly errors: "errors";
    readonly errorsValue: "errorsValue";
    readonly example: "example";
    readonly exampleValue: "exampleValue";
    readonly externalId: "externalId";
    readonly externalIdValue: "externalIdValue";
    readonly externalLink: "externalLink";
    readonly externalLinkText: "externalLinkText";
    readonly extractorExtractionTimestamp: "extractorExtractionTimestamp";
    readonly extractorExtractionTimestampValue: "extractorExtractionTimestampValue";
    readonly extractorTag: "extractorTag";
    readonly extractorTagValue: "extractorTagValue";
    readonly extractorInternal: "extractorInternal";
    readonly extractorInternalValue: "extractorInternalValue";
    readonly extraProperties: "extraProperties";
    readonly feedback: "feedback";
    readonly feedbackEngine: "feedbackEngine";
    readonly feedbackEngineValue: "feedbackEngineValue";
    readonly feedbacks: "feedbacks";
    readonly feedbacksValue: "feedbacksValue";
    readonly feedbackType: "feedbackType";
    readonly flashcards: "flashcards";
    readonly flashcardSet: "flashcardSet";
    readonly flashcardSetValue: "flashcardSetValue";
    readonly flashcardsValue: "flashcardsValue";
    readonly focusX: "focusX";
    readonly focusXValue: "focusXValue";
    readonly focusY: "focusY";
    readonly focusYValue: "focusYValue";
    readonly footer: "footer";
    readonly footerText: "footerText";
    readonly footerValue: "footerValue";
    readonly forKeys: "forKeys";
    readonly format: "format";
    readonly formula: "formula";
    readonly formulaValue: "formulaValue";
    readonly forValues: "forValues";
    readonly forValuesValue: "forValuesValue";
    readonly fullName: "fullName";
    readonly fullNameValue: "fullNameValue";
    readonly gap: "gap";
    readonly gmbExternalShop: "gmbExternalShop";
    readonly gmbExternalShopItems: "gmbExternalShopItems";
    readonly groupTag: "groupTag";
    readonly groupTagValue: "groupTagValue";
    readonly gUri: "gUri";
    readonly gUriValue: "gUriValue";
    readonly handInAcceptFileType: "handInAcceptFileType";
    readonly handInAcceptFileTypeValue: "handInAcceptFileTypeValue";
    readonly handInInstruction: "handInInstruction";
    readonly handInInstructionValue: "handInInstructionValue";
    readonly handInRequirement: "handInRequirement";
    readonly handInRequirementValue: "handInRequirementValue";
    readonly hasBookNavigation: "hasBookNavigation";
    readonly hasBookNavigationValue: "hasBookNavigationValue";
    readonly hasMarkAsDone: "hasMarkAsDone";
    readonly hasMarkAsDoneValue: "hasMarkAsDoneValue";
    readonly hasPrintRestriction: "hasPrintRestriction";
    readonly hasPrintRestrictionValue: "hasPrintRestrictionValue";
    readonly head: "head";
    readonly heading: "heading";
    readonly height: "height";
    readonly heightValue: "heightValue";
    readonly highlight: "highlight";
    readonly hint: "hint";
    readonly hintValue: "hintValue";
    readonly href: "href";
    readonly icon: "icon";
    readonly iconTag: "iconTag";
    readonly iconTagValue: "iconTagValue";
    readonly iconValue: "iconValue";
    readonly id: "id";
    readonly idValue: "idValue";
    readonly iframeName: "iframeName";
    readonly iframeSrc: "iframeSrc";
    readonly image: "image";
    readonly imageFirst: "imageFirst";
    readonly imageFirstValue: "imageFirstValue";
    readonly imageLandscape: "imageLandscape";
    readonly imageLink: "imageLink";
    readonly imagePlaceholder: "imagePlaceholder";
    readonly imagePlaceholderValue: "imagePlaceholderValue";
    readonly imagePortrait: "imagePortrait";
    readonly imageSource: "imageSource";
    readonly index: "index";
    readonly indexValue: "indexValue";
    readonly ingredients: "ingredients";
    readonly ingredientsValue: "ingredientsValue";
    readonly ingredient: "ingredient";
    readonly ingredientValue: "ingredientValue";
    readonly instruction: "instruction";
    readonly instructionValue: "instructionValue";
    readonly internalComment: "internalComment";
    readonly internalCommentValue: "internalCommentValue";
    readonly internalPrintPdf: "internalPrintPdf";
    readonly internalPrintPdfValue: "internalPrintPdfValue";
    readonly isCaseSensitive: "isCaseSensitive";
    readonly isCollapsible: "isCollapsible";
    readonly isCollapsibleValue: "isCollapsibleValue";
    readonly isCommented: "isCommented";
    readonly isCorrect: "isCorrect";
    readonly isEditable: "isEditable";
    readonly isEditableValue: "isEditableValue";
    readonly isExample: "isExample";
    readonly isInfoOnly: "isInfoOnly";
    readonly isInfoOnlyValue: "isInfoOnlyValue";
    readonly isPlain: "isPlain";
    readonly isPublic: "isPublic";
    readonly isPublicValue: "isPublicValue";
    readonly isTemplate: "isTemplate";
    readonly isTemplateStripTheme: "isTemplateStripTheme";
    readonly isTemplateStripThemeValue: "isTemplateStripThemeValue";
    readonly isTemplateValue: "isTemplateValue";
    readonly isTracked: "isTracked";
    readonly isTrackedValue: "isTrackedValue";
    readonly item: "item";
    readonly itemLead: "itemLead";
    readonly itemValue: "itemValue";
    readonly jobTitle: "jobTitle";
    readonly jobTitleValue: "jobTitleValue";
    readonly jupyterExecutionCount: "jupyterExecutionCount";
    readonly jupyterExecutionCountValue: "jupyterExecutionCountValue";
    readonly jupyterId: "jupyterId";
    readonly jupyterIdValue: "jupyterIdValue";
    readonly key: "key";
    readonly keyAudio: "keyAudio";
    readonly keyImage: "keyImage";
    readonly kind: "kind";
    readonly kindValue: "kindValue";
    readonly label: "label";
    readonly labelFalse: "labelFalse";
    readonly labelFalseValue: "labelFalseValue";
    readonly labelTrue: "labelTrue";
    readonly labelTrueValue: "labelTrueValue";
    readonly lang: "lang";
    readonly language: "language";
    readonly languageValue: "languageValue";
    readonly langValue: "langValue";
    readonly layer: "layer";
    readonly layerRole: "layerRole";
    readonly layerRoleValue: "layerRoleValue";
    readonly layerValue: "layerValue";
    readonly lead: "lead";
    readonly leadValue: "leadValue";
    readonly level: "level";
    readonly levelACTFL: "levelACTFL";
    readonly levelACTFLValue: "levelACTFLValue";
    readonly levelCEFR: "levelCEFR";
    readonly levelCEFRp: "levelCEFRp";
    readonly levelCEFRpValue: "levelCEFRpValue";
    readonly levelCEFRValue: "levelCEFRValue";
    readonly levelILR: "levelILR";
    readonly levelILRValue: "levelILRValue";
    readonly license: "license";
    readonly line: "line";
    readonly list: "list";
    readonly listItemIndent: "listItemIndent";
    readonly listItemIndentValue: "listItemIndentValue";
    readonly listPrice: "listPrice";
    readonly listValue: "listValue";
    readonly location: "location";
    readonly locationValue: "locationValue";
    readonly machineTranslated: "machineTranslated";
    readonly machineTranslatedValue: "machineTranslatedValue";
    readonly mailingList: "mailingList";
    readonly marginNumber: "marginNumber";
    readonly marginNumberValue: "marginNumberValue";
    readonly mark: "mark";
    readonly markConfig: "markConfig";
    readonly markConfigValue: "markConfigValue";
    readonly marks: "marks";
    readonly marksValue: "marksValue";
    readonly markup: "markup";
    readonly matrix: "matrix";
    readonly matrixValue: "matrixValue";
    readonly maxCreatedBits: "maxCreatedBits";
    readonly maxCreatedBitsValue: "maxCreatedBitsValue";
    readonly maxDisplayLevel: "maxDisplayLevel";
    readonly maxDisplayLevelValue: "maxDisplayLevelValue";
    readonly maxTocChapterLevel: "maxTocChapterLevel";
    readonly maxTocChapterLevelValue: "maxTocChapterLevelValue";
    readonly message: "message";
    readonly mockupId: "mockupId";
    readonly name: "name";
    readonly needsValidation: "needsValidation";
    readonly needsValidationValue: "needsValidationValue";
    readonly offset: "offset";
    readonly options: "options";
    readonly optionsValue: "optionsValue";
    readonly original: "original";
    readonly padletId: "padletId";
    readonly padletIdValue: "padletIdValue";
    readonly page: "page";
    readonly pageNo: "pageNo";
    readonly pageNoValue: "pageNoValue";
    readonly pageNumber: "pageNumber";
    readonly pageNumberValue: "pageNumberValue";
    readonly pageValue: "pageValue";
    readonly pairs: "pairs";
    readonly pairsValue: "pairsValue";
    readonly parent: "parent";
    readonly parser: "parser";
    readonly partialAnswer: "partialAnswer";
    readonly partialAnswerValue: "partialAnswerValue";
    readonly path: "path";
    readonly pathValue: "pathValue";
    readonly person: "person";
    readonly platformBackgroundColor: "platformBackgroundColor";
    readonly platformBackgroundColorValue: "platformBackgroundColorValue";
    readonly platformBackgroundImage: "platformBackgroundImage";
    readonly platformBackgroundImageValue: "platformBackgroundImageValue";
    readonly platformBaseLayerColor: "platformBaseLayerColor";
    readonly platformBaseLayerColorValue: "platformBaseLayerColorValue";
    readonly platformBorderColor: "platformBorderColor";
    readonly platformBorderColorValue: "platformBorderColorValue";
    readonly platformBorderRadius: "platformBorderRadius";
    readonly platformBorderRadiusValue: "platformBorderRadiusValue";
    readonly platformBrandTarget: "platformBrandTarget";
    readonly platformBrandTargetValue: "platformBrandTargetValue";
    readonly platformButtonBackgroundColor: "platformButtonBackgroundColor";
    readonly platformButtonBackgroundColorValue: "platformButtonBackgroundColorValue";
    readonly platformButtonPrimaryColor: "platformButtonPrimaryColor";
    readonly platformButtonPrimaryColorValue: "platformButtonPrimaryColorValue";
    readonly platformIcon: "platformIcon";
    readonly platformIconValue: "platformIconValue";
    readonly platformLogo: "platformLogo";
    readonly platformLogoMaxHeight: "platformLogoMaxHeight";
    readonly platformLogoMaxHeightValue: "platformLogoMaxHeightValue";
    readonly platformLogoValue: "platformLogoValue";
    readonly platformMargin: "platformMargin";
    readonly platformMarginValue: "platformMarginValue";
    readonly platformMessageBackgroundColor: "platformMessageBackgroundColor";
    readonly platformMessageBackgroundColorValue: "platformMessageBackgroundColorValue";
    readonly platformName: "platformName";
    readonly platformNameValue: "platformNameValue";
    readonly platformNeedsShadow: "platformNeedsShadow";
    readonly platformNeedsShadowValue: "platformNeedsShadowValue";
    readonly platformPlaceholderColor: "platformPlaceholderColor";
    readonly platformPlaceholderColorValue: "platformPlaceholderColorValue";
    readonly platformPrimaryColor: "platformPrimaryColor";
    readonly platformPrimaryColorValue: "platformPrimaryColorValue";
    readonly platformScrollbarColor: "platformScrollbarColor";
    readonly platformScrollbarColorValue: "platformScrollbarColorValue";
    readonly platformSecondaryColor: "platformSecondaryColor";
    readonly platformSecondaryColorValue: "platformSecondaryColorValue";
    readonly platformSelectionBorderRadius: "platformSelectionBorderRadius";
    readonly platformSelectionBorderRadiusValue: "platformSelectionBorderRadiusValue";
    readonly platformSelectionColor: "platformSelectionColor";
    readonly platformSelectionColorValue: "platformSelectionColorValue";
    readonly platformSelectionTextColor: "platformSelectionTextColor";
    readonly platformSelectionTextColorValue: "platformSelectionTextColorValue";
    readonly platformSeparatorColor: "platformSeparatorColor";
    readonly platformSeparatorColorValue: "platformSeparatorColorValue";
    readonly platformTextSelectionColor: "platformTextSelectionColor";
    readonly platformTextSelectionColorValue: "platformTextSelectionColorValue";
    readonly pointerLeft: "pointerLeft";
    readonly pointerLeftValue: "pointerLeftValue";
    readonly pointerTop: "pointerTop";
    readonly pointerTopValue: "pointerTopValue";
    readonly posterImage: "posterImage";
    readonly posterImageValue: "posterImageValue";
    readonly postfix: "postfix";
    readonly prefix: "prefix";
    readonly previewImage: "previewImage";
    readonly previewImageValue: "previewImageValue";
    readonly previewVideo: "previewVideo";
    readonly previewVideoValue: "previewVideoValue";
    readonly printParentChapterLevel: "printParentChapterLevel";
    readonly printParentChapterLevelValue: "printParentChapterLevelValue";
    readonly printOnRequestCustomerId: "printOnRequestCustomerId";
    readonly printOnRequestCustomerIdValue: "printOnRequestCustomerIdValue";
    readonly printOnRequestProductId: "printOnRequestProductId";
    readonly printOnRequestProductIdValue: "printOnRequestProductIdValue";
    readonly processHandIn: "processHandIn";
    readonly processHandInLocation: "processHandInLocation";
    readonly processHandInLocationValue: "processHandInLocationValue";
    readonly processHandInValue: "processHandInValue";
    readonly product: "product";
    readonly productFolder: "productFolder";
    readonly productFolderValue: "productFolderValue";
    readonly productId: "productId";
    readonly productIdValue: "productIdValue";
    readonly productList: "productList";
    readonly productListValue: "productListValue";
    readonly productValue: "productValue";
    readonly productVideo: "productVideo";
    readonly productVideoList: "productVideoList";
    readonly productVideoListValue: "productVideoListValue";
    readonly productVideoValue: "productVideoValue";
    readonly progress: "progress";
    readonly progressValue: "progressValue";
    readonly pronunciationTable: "pronunciationTable";
    readonly properties: "properties";
    readonly property: "property";
    readonly propertyKey: "propertyKey";
    readonly propertyValue: "propertyValue";
    readonly propertyValues: "propertyValues";
    readonly provider: "provider";
    readonly pseudonym: "pseudonym";
    readonly pseudonymValue: "pseudonymValue";
    readonly publications: "publications";
    readonly publicationsValue: "publicationsValue";
    readonly publisher: "publisher";
    readonly publisherName: "publisherName";
    readonly publisherNameValue: "publisherNameValue";
    readonly publisherValue: "publisherValue";
    readonly quantity: "quantity";
    readonly question: "question";
    readonly questions: "questions";
    readonly questionsValue: "questionsValue";
    readonly questionValue: "questionValue";
    readonly quizCountItems: "quizCountItems";
    readonly quizCountItemsValue: "quizCountItemsValue";
    readonly quizStrikethroughSolutions: "quizStrikethroughSolutions";
    readonly quizStrikethroughSolutionsValue: "quizStrikethroughSolutionsValue";
    readonly quizzes: "quizzes";
    readonly quizzesValue: "quizzesValue";
    readonly quotedPerson: "quotedPerson";
    readonly ratingLevelEnd: "ratingLevelEnd";
    readonly ratingLevelSelected: "ratingLevelSelected";
    readonly ratingLevelSelectedValue: "ratingLevelSelectedValue";
    readonly ratingLevelStart: "ratingLevelStart";
    readonly reaction: "reaction";
    readonly reason: "reason";
    readonly reasonableNumOfChars: "reasonableNumOfChars";
    readonly reasonableNumOfCharsValue: "reasonableNumOfCharsValue";
    readonly reductionTag: "reductionTag";
    readonly reductionTagValue: "reductionTagValue";
    readonly refAuthor: "refAuthor";
    readonly refBookTitle: "refBookTitle";
    readonly reference: "reference";
    readonly referenceEnd: "referenceEnd";
    readonly referenceProperty: "referenceProperty";
    readonly referencePropertyValue: "referencePropertyValue";
    readonly refPublicationYear: "refPublicationYear";
    readonly refPublisher: "refPublisher";
    readonly relatedBook: "relatedBook";
    readonly relatedBookValue: "relatedBookValue";
    readonly translationOfBook: "translationOfBook";
    readonly translationOfBookValue: "translationOfBookValue";
    readonly userFeedbackTranslationUrl: "userFeedbackTranslationUrl";
    readonly userFeedbackTranslationUrlValue: "userFeedbackTranslationUrlValue";
    readonly userFeedbackContentUrl: "userFeedbackContentUrl";
    readonly userFeedbackContentUrlValue: "userFeedbackContentUrlValue";
    readonly releaseDate: "releaseDate";
    readonly releaseDateValue: "releaseDateValue";
    readonly releaseKind: "releaseKind";
    readonly releaseKindValue: "releaseKindValue";
    readonly releaseVersion: "releaseVersion";
    readonly releaseVersionValue: "releaseVersionValue";
    readonly reportTag: "reportTag";
    readonly reportTagValue: "reportTagValue";
    readonly resolved: "resolved";
    readonly resolvedBy: "resolvedBy";
    readonly resolvedByValue: "resolvedByValue";
    readonly resolvedDate: "resolvedDate";
    readonly resolvedDateValue: "resolvedDateValue";
    readonly resolvedValue: "resolvedValue";
    readonly resources: "resources";
    readonly resourcesValue: "resourcesValue";
    readonly resourceType: "resourceType";
    readonly response: "response";
    readonly responses: "responses";
    readonly responsesValue: "responsesValue";
    readonly revealSolutions: "revealSolutions";
    readonly reviewTag: "reviewTag";
    readonly reviewTagValue: "reviewTagValue";
    readonly reviewerTag: "reviewerTag";
    readonly reviewerTagValue: "reviewerTagValue";
    readonly rightsPolicy: "rightsPolicy";
    readonly rightsPolicyValue: "rightsPolicyValue";
    readonly root: "root";
    readonly rows: "rows";
    readonly rowsValue: "rowsValue";
    readonly rtl: "rtl";
    readonly rtlValue: "rtlValue";
    readonly rubric: "rubric";
    readonly rubricValue: "rubricValue";
    readonly sampleSolution: "sampleSolution";
    readonly sampleSolutionValue: "sampleSolutionValue";
    readonly scormSource: "scormSource";
    readonly scormSourceValue: "scormSourceValue";
    readonly search: "search";
    readonly searchIndex: "searchIndex";
    readonly searchIndexValue: "searchIndexValue";
    readonly searchValue: "searchValue";
    readonly section: "section";
    readonly select: "select";
    readonly selected: "selected";
    readonly servings: "servings";
    readonly servingsValue: "servingsValue";
    readonly showInIndex: "showInIndex";
    readonly showInIndexValue: "showInIndexValue";
    readonly size: "size";
    readonly slug: "slug";
    readonly slugValue: "slugValue";
    readonly solution: "solution";
    readonly solutions: "solutions";
    readonly solutionsValue: "solutionsValue";
    readonly sourceBB: "sourceBB";
    readonly sourceBBValue: "sourceBBValue";
    readonly sourceDocument: "sourceDocument";
    readonly sourceDocumentValue: "sourceDocumentValue";
    readonly sourceRL: "sourceRL";
    readonly sourceRLValue: "sourceRLValue";
    readonly spaceId: "spaceId";
    readonly spaceIdValue: "spaceIdValue";
    readonly spansPageBreak: "spansPageBreak";
    readonly spansPageBreakValue: "spansPageBreakValue";
    readonly src: "src";
    readonly src1x: "src1x";
    readonly src2x: "src2x";
    readonly src3x: "src3x";
    readonly src4x: "src4x";
    readonly srcAlt: "srcAlt";
    readonly srcAltValue: "srcAltValue";
    readonly start: "start";
    readonly statement: "statement";
    readonly statementValue: "statementValue";
    readonly statements: "statements";
    readonly statementsValue: "statementsValue";
    readonly statementText: "statementText";
    readonly stillImageFilmEmbed: "stillImageFilmEmbed";
    readonly stillImageFilmLink: "stillImageFilmLink";
    readonly stripePricingTableId: "stripePricingTableId";
    readonly stripePricingTableIdValue: "stripePricingTableIdValue";
    readonly stripePricingTableDescriptiveName: "stripePricingTableDescriptiveName";
    readonly stripePricingTableDescriptiveNameValue: "stripePricingTableDescriptiveNameValue";
    readonly stripePublishableKey: "stripePublishableKey";
    readonly stripePublishableKeyValue: "stripePublishableKeyValue";
    readonly subject: "subject";
    readonly subjectValue: "subjectValue";
    readonly subtitle: "subtitle";
    readonly subtitleValue: "subtitleValue";
    readonly subtype: "subtype";
    readonly subtypeValue: "subtypeValue";
    readonly table: "table";
    readonly tableAutoWidth: "tableAutoWidth";
    readonly tableAutoWidthValue: "tableAutoWidthValue";
    readonly tableColWidth: "tableColWidth";
    readonly tableColWidthValue: "tableColWidthValue";
    readonly tableColumnMinWidth: "tableColumnMinWidth";
    readonly tableColumnMinWidthValue: "tableColumnMinWidthValue";
    readonly tableFixedHeader: "tableFixedHeader";
    readonly tableFixedHeaderValue: "tableFixedHeaderValue";
    readonly tableHeaderWhitespaceNoWrap: "tableHeaderWhitespaceNoWrap";
    readonly tableHeaderWhitespaceNoWrapValue: "tableHeaderWhitespaceNoWrapValue";
    readonly tableHeight: "tableHeight";
    readonly tableHeightValue: "tableHeightValue";
    readonly tablePagination: "tablePagination";
    readonly tablePaginationLimit: "tablePaginationLimit";
    readonly tablePaginationLimitValue: "tablePaginationLimitValue";
    readonly tablePaginationValue: "tablePaginationValue";
    readonly tableResizableColumns: "tableResizableColumns";
    readonly tableResizableColumnsValue: "tableResizableColumnsValue";
    readonly tableSearch: "tableSearch";
    readonly tableSearchValue: "tableSearchValue";
    readonly tableSort: "tableSort";
    readonly tableSortValue: "tableSortValue";
    readonly tableWhitespaceNoWrap: "tableWhitespaceNoWrap";
    readonly tableWhitespaceNoWrapValue: "tableWhitespaceNoWrapValue";
    readonly tag: "tag";
    readonly tagValue: "tagValue";
    readonly target: "target";
    readonly targetValue: "targetValue";
    readonly technicalTerm: "technicalTerm";
    readonly technicalTermValue: "technicalTermValue";
    readonly term: "term";
    readonly text: "text";
    readonly textAlign: "textAlign";
    readonly textAst: "textAst";
    readonly textAstValue: "textAstValue";
    readonly textFormat: "textFormat";
    readonly textReference: "textReference";
    readonly textReferenceValue: "textReferenceValue";
    readonly texts: "texts";
    readonly textsValue: "textsValue";
    readonly theme: "theme";
    readonly themeValue: "themeValue";
    readonly thumbImage: "thumbImage";
    readonly thumbImageValue: "thumbImageValue";
    readonly thumbnails: "thumbnails";
    readonly thumbnailsValue: "thumbnailsValue";
    readonly title: "title";
    readonly titleString: "titleString";
    readonly titleValue: "titleValue";
    readonly toc: "toc";
    readonly tocContent: "tocContent";
    readonly tocContentValue: "tocContentValue";
    readonly tocResource: "tocResource";
    readonly tocResourceValue: "tocResourceValue";
    readonly tocValue: "tocValue";
    readonly topicTag: "topicTag";
    readonly topicTagValue: "topicTagValue";
    readonly translationOf: "translationOf";
    readonly translationOfValue: "translationOfValue";
    readonly trim: "trim";
    readonly type: "type";
    readonly unit: "unit";
    readonly unitAbbr: "unitAbbr";
    readonly unitAbbrPlural: "unitAbbrPlural";
    readonly unitPlural: "unitPlural";
    readonly url: "url";
    readonly validationDate: "validationDate";
    readonly validationDateValue: "validationDateValue";
    readonly value: "value";
    readonly values: "values";
    readonly valuesValue: "valuesValue";
    readonly vendorDashboardId: "vendorDashboardId";
    readonly vendorDashboardIdValue: "vendorDashboardIdValue";
    readonly vendorSurveyId: "vendorSurveyId";
    readonly vendorSurveyIdValue: "vendorSurveyIdValue";
    readonly vendorUrl: "vendorUrl";
    readonly vendorUrlValue: "vendorUrlValue";
    readonly version: "version";
    readonly video: "video";
    readonly videoCallLink: "videoCallLink";
    readonly videoCallLinkValue: "videoCallLinkValue";
    readonly videoEmbed: "videoEmbed";
    readonly videoLink: "videoLink";
    readonly warnings: "warnings";
    readonly warningsValue: "warningsValue";
    readonly websiteLink: "websiteLink";
    readonly width: "width";
    readonly widthValue: "widthValue";
    readonly x: "x";
    readonly xValue: "xValue";
    readonly y: "y";
    readonly yValue: "yValue";
    readonly zoomDisabled: "zoomDisabled";
};
type NodeTypeType = EnumType<typeof NodeType>;

/**
 * AST tree node information
 */
interface NodeInfo {
    /**
     * Child index of the node
     */
    index: number;
    /**
     * Node key
     */
    key: NodeTypeType;
    /**
     * Node value (if any)
     */
    value?: any;
}
/**
 * Callbacks for walking the AST
 */
interface AstWalkCallbacks<C = undefined> {
    /**
     * Called when a branch node is entered
     *
     * @param node - this node info
     * @param route - route to this node from the root
     * @returns
     */
    enter?: (node: NodeInfo, route: NodeInfo[], context: C) => void | boolean;
    /**
     * Called when between child nodes
     *
     * @param node - this node info (the parent of the children in leftNode / rightNode)
     * @param leftNode - the left (previous) child node info
     * @param rightNode - the right (next) child node info
     * @param route
     * @returns
     */
    between?: (node: NodeInfo, leftNode: NodeInfo, rightNode: NodeInfo, route: NodeInfo[], context: C) => void | boolean;
    /**
     * Called when a branch node is exited
     * @param node - this node info
     * @param route - route to this node from the root
     * @returns
     */
    exit?: (node: NodeInfo, route: NodeInfo[], context: C) => void;
    /**
     * Called when a leaf node is entered
     * @param node - this node info
     * @param route - route to this node from the root
     * @returns
     */
    leaf?: (node: NodeInfo, route: NodeInfo[], context: C) => void;
}
/**
 * An AST (Abstract Syntax Tree) implementation for the bitmark language
 */
declare class Ast {
    constructor();
    /**
     * Walk bitmark AST, decending each branch and calling callbacks when entering, leaving, and when in between child
     * nodes.
     *
     * Walking the tree can be used to convert it to another format (e.g. bitmark markup or JSON or text) or for analysis.
     *
     * The tree is navigated from root to leaf, decending each branch greedily.
     *
     * e.g. for the tree:
     * ```
     * A
     * |__B1
     * |  |__C1
     * |  |__C2
     * |__B2
     *    |__C3
     *
     * Enter A1
     * Enter B1
     * Leaf  C1
     * Betwe B1 (C1, C2)
     * Leaf  C2
     * Exit  B1
     * Betwe A1 (B1, B2)
     * Enter B2
     * Leaf  C3
     * Exit  B2
     * Exit  A1
     * ```
     *
     * @param context - context object to pass to callbacks
     * @param ast - bitmark / text AST
     * @param type - type of AST to walk (i.e. NodeType.bitmarkAst, NodeType.textAst)
     * @param callbacks - set of callbacks to call while walking the tree
     */
    walk<C>(ast: Node, type: NodeTypeType, callbacks: AstWalkCallbacks<C>, context: C): void;
    /**
     * Convert a route to a unique key that describes that route.
     *
     * For the route A1 -> B4 -> C2 the route key would be A1_B4_C2
     *
     * @param route - the tree path from the root to the curent node
     * @returns
     */
    getRouteKey(route: NodeInfo[]): string;
    /**
     * Print an AST to the console.
     * Useful for debug / development purposes
     *
     * @param ast - AST
     * @param rootKey - root node key
     */
    printTree(ast: Node, rootKey?: NodeTypeType): void;
    /**
     * Preprocess bitmark AST into a standard format (BitmarkAst object) from bitmark AST either as a string
     * or a plain JS object
     *
     * @param ast - bitmark AST as a string or a plain JS object
     * @returns bitmark AST in a standard format (BitmarkAst object)
     */
    preprocessAst(ast: string | unknown): BitmarkAst | undefined;
    /**
     * Check if a plain JS object is valid AST
     *
     * @param ast - a plain JS object that might be AST
     * @returns true if AST, otherwise false
     */
    isAst(ast: unknown): boolean;
    private walkRecursive;
    private getAstKey;
    private isArray;
    private isObject;
    private isValue;
}

declare const BodyTextFormat: {
    readonly plainText: "text";
    readonly latex: "latex";
    readonly json: "json";
    readonly xml: "xml";
    readonly bitmarkPlusPlus: "bitmark++";
};
type BodyTextFormatType = EnumType<typeof BodyTextFormat>;

/**
 * The location of text.
 *
 * The location of the text affects how breakscaping is applied.
 */
declare const TextLocation: {
    readonly tag: "tag";
    readonly body: "body";
};
type TextLocationType = EnumType<typeof TextLocation>;

/**
 * Configuration options for breakscape and unbreakscape operations.
 *
 * @public
 */
interface BreakscapeOptions$1 {
    /**
     * The text format to use for processing.
     * @defaultValue TextFormat.bitmarkPlusPlus
     */
    format?: BodyTextFormatType;
    /**
     * The text location context for processing.
     * @defaultValue TextLocation.body
     */
    location?: TextLocationType;
    /**
     * Whether to mutate the input array in-place when processing arrays.
     * If false, a new array will be created.
     * @defaultValue false
     */
    inPlaceArray?: boolean;
    /**
     * Legacy: if true, perform v2 breakscaping from JSON
     */
    v2?: boolean;
}

type BreakscapedString = string & {
    readonly __isBreakscaped: unique symbol;
};

declare const BitmarkVersion: {
    readonly v2: 2;
    readonly v3: 3;
};
type BitmarkVersionType = EnumType<typeof BitmarkVersion>;

interface Generator<T extends Node, R = void> {
    generate: (ast: T, param1?: unknown, param2?: unknown) => Promise<R>;
    generateSync: (ast: T, param1?: unknown, param2?: unknown) => R;
}

/**
 * Generator that walks bitmark AST.
 *
 * The implementation should implement functions with the correct naming, and these will be called when
 * walking the AST:
 *
 * enter_<nodeKey>() - called when entering a branch node
 * between_<nodeKey>() - called when between child nodes
 * exit_<nodeKey>() - called when exiting a branch node
 * leaf_<nodeKey>() - called when entering a leaf node
 */
declare abstract class AstWalkerGenerator<AstType, R, Context = undefined> implements Generator<AstType, R>, AstWalkCallbacks<Context> {
    protected ast: Ast;
    protected debugGenerationInline: boolean;
    protected printed: boolean;
    abstract generate(ast: AstType, param1?: unknown, param2?: unknown): Promise<R>;
    abstract generateSync(ast: AstType, param1?: unknown, param2?: unknown): R;
    enter(node: NodeInfo, route: NodeInfo[], context: Context): boolean | void;
    between(node: NodeInfo, left: NodeInfo, right: NodeInfo, route: NodeInfo[], context: Context): boolean | void;
    exit(node: NodeInfo, route: NodeInfo[], context: Context): void;
    leaf(node: NodeInfo, route: NodeInfo[], context: Context): void;
    protected getParentNode(route: NodeInfo[], nodesBack?: number): NodeInfo | undefined;
    protected getSiblingNodes(route: NodeInfo[]): {
        left?: unknown;
        right?: unknown;
    };
    protected isEmptyParagraph(node: TextNode): boolean;
    protected abstract writeInlineDebug(key: string, state: {
        open?: boolean;
        close?: boolean;
        single?: boolean;
    }): void;
}

/**
 * Text generation options
 */
interface TextOptions {
    /**
     * Callback for writing text
     *
     * If set, the callback will be called, rather than writing to the output string
     */
    writeCallback?: WriteCallback;
    /**
     * Callback for rendering body bits
     */
    bodyBitCallback?: BodyBitCallback;
    /**
     * [development only]
     * Generate debug information in the output.
     */
    debugGenerationInline?: boolean;
}
type GenerateOptions = {
    plainTextDividerAllowed?: boolean;
    noBreakscaping?: boolean;
    forceInline?: boolean;
    noMarkup?: boolean;
};
declare const Stage: {
    enter: string;
    between: string;
    exit: string;
};
type StageType = EnumType<typeof Stage>;
type WriteCallback = (s: string) => void;
type BodyBitCallback = (bodyBit: BodyBitJson, index: number, route: NodeInfo[]) => string;
interface MediaAttributeOptions {
    ignoreAttributes?: Set<string>;
}
/**
 * Generate text from a bitmark text AST
 */
declare class TextGenerator extends AstWalkerGenerator<TextAst, BreakscapedString> {
    protected ast: Ast;
    private bitmarkVersion;
    private options;
    private internalTextGenerator;
    private generateOptions;
    private textFormat;
    private textLocation;
    private writerText;
    private nodeIndex;
    private currentIndent;
    private prevIndent;
    private indentationStringCache;
    private inParagraph;
    private inHeading;
    private inCodeBlock;
    private inBulletList;
    private inInline;
    private markDepth;
    private textDepth;
    private placeholderIndex;
    private placeholders;
    private rootParagraphNodeContentIndex;
    private previousRootParagraphContextType;
    private inPreText;
    private thisNodeIsPreText;
    private preTextIndexTemp;
    private havePreText;
    private preTextIndex;
    /**
     * Generate text from a bitmark text AST
     *
     * @param bitmarkVersion - bitmark version, use null to use latest version
     * @param options - text generation options
     */
    constructor(bitmarkVersion?: BitmarkVersionType, options?: TextOptions);
    /**
     * Generate text from a bitmark text AST
     *
     * @param ast bitmark text AST
     */
    generate(ast: TextAst, textFormat: TextFormatType, textLocation: TextLocationType, options?: GenerateOptions): Promise<BreakscapedString>;
    /**
     * Generate text from a bitmark text AST synchronously
     *
     * @param ast bitmark text AST
     */
    generateSync(ast: TextAst, textFormat: TextFormatType, textLocation: TextLocationType, options?: GenerateOptions): BreakscapedString;
    getPlaceholders(): BodyBitsJson;
    private resetState;
    private walkAndWrite;
    protected enter_textAstValue(node: NodeInfo, route: NodeInfo[]): void | false;
    protected between_textAstValue(node: NodeInfo, left: NodeInfo, right: NodeInfo, route: NodeInfo[]): void | false;
    protected exit_textAstValue(node: NodeInfo, route: NodeInfo[]): void | false;
    protected enter_contentValue(node: NodeInfo, route: NodeInfo[]): void | false;
    protected between_contentValue(node: NodeInfo, left: NodeInfo, right: NodeInfo, route: NodeInfo[]): void;
    protected exit_contentValue(node: NodeInfo, route: NodeInfo[]): void | false;
    protected enter_contentValueValue(node: NodeInfo, route: NodeInfo[]): void | false;
    protected between_contentValueValue(node: NodeInfo, left: NodeInfo, right: NodeInfo, route: NodeInfo[]): void;
    protected exit_contentValueValue(node: NodeInfo, route: NodeInfo[]): void | false;
    protected enter_marks(_node: NodeInfo, _route: NodeInfo[]): void | false;
    protected exit_marks(_node: NodeInfo, _route: NodeInfo[]): void | false;
    protected handleEnterNode(node: TextNode, route: NodeInfo[]): void | false;
    protected handleBetweenNode(node: TextNode, _left: NodeInfo, _right: NodeInfo, _route: NodeInfo[]): void;
    protected handleExitNode(node: TextNode, _route: NodeInfo[]): void | false;
    protected handleIndent(node: TextNode): void;
    protected handleDedent(node: TextNode): void;
    protected handleEnterContentValueNode(_node: NodeInfo, route: NodeInfo[]): void | false;
    protected handleBetweenContentValueNode(_node: NodeInfo, left: NodeInfo, _right: NodeInfo, route: NodeInfo[]): void;
    protected handleExitContentValueNode(_node: NodeInfo, route: NodeInfo[]): void | false;
    private updatePreTextState;
    protected handleEnterNodePreTextCheck(node: TextNode, route: NodeInfo[]): void;
    /**
     * Check if a text node has a link mark, and if so, return the href
     *
     * @param node the node to check for a link mark
     * @returns the href, or false if no link mark
     */
    protected getLinkHref(node: TextNode): string | false;
    /**
     * Get the current indentation string
     * @returns
     */
    protected getIndentationString(): string;
    protected writeBodyBit(node: TextNode, route: NodeInfo[]): void;
    protected writeText(node: TextNode): void;
    /**
     * Check if a node is a link node and if so and the node has only the link mark, and the link without the
     * protocol is the same as the text, return true. Otherwise return false.
     *
     * @param node
     * @returns true if a simple link, otherwise false
     */
    protected isSimpleLink(node: TextNode): boolean;
    /**
     * Get the link text if the node is a link, otherwise return false
     *
     * @param node
     * @returns
     */
    protected getLinkText(node: TextNode): string | false;
    /**
     * If the existing written text ends with a half-mark, and the new text starts with the same half-mark, insert a
     * breakscape ^ between them to break the sequence.
     *
     * Only applies to bitmark version > 2
     *
     * @param s
     */
    protected getInterTextBreakscape(s: string): string;
    protected validateGenerateOptions(ast: TextNode[]): void;
    /**
     * Write the marks for the node.
     *
     * All marks need to be considered at once, because if there are multiple marks, they need to be written in
     * a combined manner.
     *
     * e.g. if there are bold and italic marks, they need to be written as
     *
     * ==the text==|bold|italic|
     * rather than
     * **__the text__**
     * or
     * **__the text**__
     *
     * @param node the text node
     * @param start true if starting (before) the text, false if ending (after) the text
     */
    protected writeMarks(node: TextNode, stage: StageType): void | false;
    protected writeParagraph(node: TextNode, route: NodeInfo[]): void;
    protected writeHardBreak(_node: TextNode): void;
    protected writeHeading(node: HeadingTextNode): void;
    protected writeSection(node: SectionTextNode): void;
    protected writeBullet(node: TextNode, route: NodeInfo[]): void;
    protected writeImage(node: ImageTextNode | ImageInlineTextNode): void;
    protected writeCodeBlock(node: CodeBlockTextNode): void;
    protected writeLatex(node: LatexTextNode): void;
    protected writeMarkTextWrapper(s: string): void;
    protected writeInlineMark(mark: TextMark): void;
    /**
     * Resolve the marks of a text node into the marks that will actually be written.
     *
     * - Merges a legacy standalone 'duration' mark into its sibling 'timer' mark.
     * - Drops marks the current grammar cannot express (standalone 'duration', 'timer'
     *   without a duration).
     * - Moves a 'textStyle'/'color' mark before a preceding bare 'highlight'/'userHighlight'
     *   mark when its color is a valid highlight color; written in the original order the
     *   output would re-parse as a highlight-with-color compound mark and change meaning.
     */
    protected getWritableMarks(nodeMarks: TextMark[]): TextMark[];
    /**
     * True if the mark is written using its standard form (e.g. **bold**, !!highlight!!)
     * when it is the only mark. A highlight mark with a color attribute is excluded - it
     * can only be expressed using the inline chain form (==text==|highlight|color:x|).
     */
    protected isStandardMark(mark: TextMark): boolean;
    /**
     * True if the mark is written using the inline chain form (==text==|mark|).
     */
    protected isInlineMark(mark: TextMark): boolean;
    protected writeCommentMark(mark: CommentMark): void;
    protected writeLinkMark(mark: LinkMark): void;
    protected writeRefMark(mark: RefMark): void;
    protected writeXRefMark(mark: XRefMark): void;
    protected writeExtRefMark(mark: ExtRefMark): void;
    protected writeFootnoteMark(mark: FootnoteMark): void;
    protected writeFootnoteStarMark(mark: FootnoteMark): void;
    protected writeSymbolMark(mark: SymbolMark): void;
    protected writeInlineMarkStartEnd(): void;
    protected writePlainTextDivider(): void;
    protected writeString(s?: string): void;
    protected writeNL(): void;
    protected writeInlineDebug(key: string, state: {
        open?: boolean;
        close?: boolean;
        single?: boolean;
    }): void;
    protected getMediaAttrs(mediaType: string, attrs: MediaAttributes, options?: MediaAttributeOptions): string | undefined;
    protected breakscape(s: string, options: BreakscapeOptions$1): string;
    protected getBitType(route: NodeInfo[]): BitTypeType | undefined;
    /**
     * Writes a string value to the output.
     * @param value - The string value to be written.
     */
    write(value: string): this;
    /**
     * Writes a new line to the output. The line is indented automatically. The line is ended with the endOfLineString.
     * @param value - The line to write. When omitted, only the endOfLineString is written.
     */
    writeLine(value?: string): this;
    /**
     * Writes a collection of lines to the output. Each line is indented automatically and ended with the endOfLineString.
     * @param values - The lines to write.
     * @param delimiter - An optional delimiter to be written at the end of each line, except for the last one.
     */
    writeLines(values: string[], delimiter?: string): this;
    /**
     * Writes a single whitespace character to the output.
     */
    writeWhiteSpace(): this;
}

declare const ExampleType: {
    readonly none: "none";
    readonly string: "string";
    readonly boolean: "boolean";
};
type ExampleTypeType = EnumType<typeof ExampleType>;

declare const Count: {
    readonly infinity: "infinity";
};
type CountType = EnumType<typeof Count> | number;

declare const Tag: {
    readonly tag_title: "#";
    readonly tag_anchor: "▼";
    readonly tag_reference: "►";
    readonly tag_property: "@";
    readonly tag_item: "%";
    readonly tag_instruction: "!";
    readonly tag_hint: "?";
    readonly tag_true: "+";
    readonly tag_false: "-";
    readonly tag_sampleSolution: "$";
    readonly tag_gap: "_";
    readonly tag_mark: "=";
    readonly tag_resource: "&";
};
type TagType = EnumType<typeof Tag>;

declare const TagFormat: {
    readonly none: "none";
    readonly plainText: "plainText";
    readonly bitmarkText: "bitmarkText";
    readonly number: "number";
    readonly boolean: "boolean";
    readonly invertedBoolean: "invertedBoolean";
    readonly enumeration: "enumeration";
    readonly coordinates: "coordinates";
};
type TagFormatType = EnumType<typeof TagFormat>;

declare const CardSetConfigKey: {
    readonly flashcard: "flashcard";
    readonly flashcard1: "flashcard1";
    readonly definitionList: "definitionList";
    readonly definitionListPlain: "definitionListPlain";
    readonly elements: "elements";
    readonly statements: "statements";
    readonly quiz: "quiz";
    readonly quizResponses: "quizResponses";
    readonly feedback: "feedback";
    readonly questions: "questions";
    readonly matchPairs: "matchPairs";
    readonly matchAudioPairs: "matchAudioPairs";
    readonly matchImagePairs: "matchImagePairs";
    readonly matchMatrix: "matchMatrix";
    readonly table: "table";
    readonly tableExtended: "tableExtended";
    readonly pronunciationTable: "pronunciationTable";
    readonly botActionResponses: "botActionResponses";
    readonly exampleBitList: "exampleBitList";
    readonly pageFooterSections: "pageFooterSections";
    readonly clozeList: "clozeList";
    readonly ingredients: "ingredients";
    readonly bookReferenceList: "bookReferenceList";
};
type CardSetConfigKeyType = EnumType<typeof CardSetConfigKey>;

/**
 * Type definitions for the raw configuration data.
 *
 */

/**
 * JSON-pattern value for the new (export) jsonKey form. See specs/JSONKEY_SYNTAX.md.
 *
 * Stored verbatim in the raw configs and emitted under the field name `jsonKey`
 * when writing assets/config/**\/*.jsonc. Pattern-language validation (sigils,
 * scope-shifts, predicates) lives in the new parser's compiler, not here.
 */
type ExportJsonKey = null | boolean | number | string | ExportJsonKey[] | {
    [k: string]: ExportJsonKey;
};
/**
 * Key-pattern value for the HTML backend of the key-pattern language.
 * See crates/lib/jsonkey_parser/doc/HTML.md (design: PLAN-109).
 *
 * Structurally identical to {@link ExportJsonKey} (a recursive JSON value) — the
 * pattern grammar, sigils, and predicates are shared; only the leaf node model
 * (and HTML-specific reserved keys such as `@el` / `@attr` / `@children` /
 * `@text`) differ, and those are validated by the new parser's compiler, not
 * here. Stored verbatim in the raw configs and emitted under the field name
 * `htmlKey` when writing assets/config/**\/*.jsonc. Omit when absent.
 */
type HtmlKey = null | boolean | number | string | HtmlKey[] | {
    [k: string]: HtmlKey;
};

declare abstract class AbstractTagConfig {
    readonly type: BitTagConfigKeyTypeType;
    readonly configKey: ConfigKeyType;
    readonly tag: string;
    readonly maxCount: CountType;
    readonly minCount: number;
    readonly chain?: TagsConfig;
    readonly jsonKey?: string;
    readonly exportJsonKey?: ExportJsonKey;
    readonly hasExportJsonKey: boolean;
    readonly htmlKey?: HtmlKey;
    readonly hasHtmlKey: boolean;
    readonly deprecated?: string;
    constructor(params: {
        type: BitTagConfigKeyTypeType;
        configKey: ConfigKeyType;
        tag: string;
        maxCount: CountType;
        minCount: number;
        chain: TagsConfig | undefined;
        jsonKey: string | undefined;
        exportJsonKey: ExportJsonKey | undefined;
        hasExportJsonKey: boolean;
        htmlKey: HtmlKey | undefined;
        hasHtmlKey: boolean;
        deprecated: string | undefined;
    });
}

interface ToStringOptions$6 {
    includeChains?: boolean;
    includeConfigs?: boolean;
}
declare class MarkupTagConfig extends AbstractTagConfig {
    readonly type: BitTagConfigKeyTypeType;
    constructor(params: {
        configKey: ConfigKeyType;
        tag: TagType;
        maxCount: CountType;
        minCount: number;
        chain: TagsConfig | undefined;
        jsonKey: string | undefined;
        exportJsonKey: ExportJsonKey | undefined;
        hasExportJsonKey: boolean;
        htmlKey: HtmlKey | undefined;
        hasHtmlKey: boolean;
        deprecated: string | undefined;
    });
    toString(options?: ToStringOptions$6): string;
}

interface ToStringOptions$5 {
    includeChains?: boolean;
    includeConfigs?: boolean;
}
declare class PropertyTagConfig extends AbstractTagConfig {
    readonly type: BitTagConfigKeyTypeType;
    readonly array?: boolean;
    readonly format?: TagFormatType;
    readonly values?: string[];
    readonly defaultValue?: string;
    constructor(params: {
        configKey: ConfigKeyType;
        tag: string;
        maxCount: CountType;
        minCount: number;
        chain: TagsConfig | undefined;
        jsonKey: string | undefined;
        exportJsonKey: ExportJsonKey | undefined;
        hasExportJsonKey: boolean;
        htmlKey: HtmlKey | undefined;
        hasHtmlKey: boolean;
        format: TagFormatType | undefined;
        values: string[] | undefined;
        defaultValue: string | undefined;
        deprecated: string | undefined;
    });
    toString(options?: ToStringOptions$5): string;
}

interface ToStringOptions$4 {
    includeChains?: boolean;
    includeConfigs?: boolean;
}
declare class ResourceTagConfig extends AbstractTagConfig {
    readonly type: BitTagConfigKeyTypeType;
    constructor(params: {
        configKey: ConfigKeyType;
        tag: string;
        maxCount: CountType;
        minCount: number;
        chain: TagsConfig | undefined;
        jsonKey: string | undefined;
        exportJsonKey: ExportJsonKey | undefined;
        hasExportJsonKey: boolean;
        htmlKey: HtmlKey | undefined;
        hasHtmlKey: boolean;
        deprecated: string | undefined;
    });
    toString(options?: ToStringOptions$4): string;
}

type TagConfig = MarkupTagConfig | PropertyTagConfig | ResourceTagConfig;

interface TagsConfig {
    [configKey: string]: TagConfig;
}

interface ToStringOptions$3 {
    includeChains?: boolean;
    includeConfigs?: boolean;
}
declare class CardVariantConfig {
    tags: TagsConfig;
    bodyAllowed?: boolean;
    bodyRequired?: boolean;
    repeatCount?: CountType;
    readonly jsonKey?: string | null;
    readonly exportJsonKey?: ExportJsonKey;
    readonly hasExportJsonKey: boolean;
    readonly htmlKey?: HtmlKey;
    readonly hasHtmlKey: boolean;
    readonly format?: TextFormatType;
    constructor(tags: TagsConfig, bodyAllowed?: boolean, bodyRequired?: boolean, repeatCount?: CountType, jsonKey?: string | null, exportJsonKey?: ExportJsonKey, hasExportJsonKey?: boolean, format?: TextFormatType, htmlKey?: HtmlKey, hasHtmlKey?: boolean);
    toString(options?: ToStringOptions$3): string;
}

interface ToStringOptions$2 {
    includeChains?: boolean;
    includeConfigs?: boolean;
}
declare class CardSideConfig {
    readonly name: string;
    readonly repeat: boolean;
    readonly jsonKey: string | null | undefined;
    readonly exportJsonKey?: ExportJsonKey;
    readonly hasExportJsonKey: boolean;
    readonly htmlKey?: HtmlKey;
    readonly hasHtmlKey: boolean;
    readonly variants: CardVariantConfig[];
    constructor(name: string, repeat: boolean, variants: CardVariantConfig[], jsonKey?: string | null, exportJsonKey?: ExportJsonKey, hasExportJsonKey?: boolean, htmlKey?: HtmlKey, hasHtmlKey?: boolean);
    toString(options?: ToStringOptions$2): string;
}

interface ToStringOptions$1 {
    includeChains?: boolean;
    includeConfigs?: boolean;
}
interface CardSetSection {
    jsonKey: string;
    exportJsonKey?: ExportJsonKey;
    hasExportJsonKey?: boolean;
    htmlKey?: HtmlKey;
    hasHtmlKey?: boolean;
    isDefault?: boolean;
    sideJsonKey?: string;
    sideExportJsonKey?: ExportJsonKey;
    hasSideExportJsonKey?: boolean;
    sideHtmlKey?: HtmlKey;
    hasSideHtmlKey?: boolean;
    minCount?: number;
    maxCount?: number;
}
declare class CardSetConfig {
    readonly configKey: CardSetConfigKeyType;
    readonly jsonKey: string | null;
    readonly exportJsonKey?: ExportJsonKey;
    readonly hasExportJsonKey: boolean;
    readonly htmlKey?: HtmlKey;
    readonly hasHtmlKey: boolean;
    readonly sections: Record<string, CardSetSection> | undefined;
    readonly sides: CardSideConfig[];
    get variants(): CardVariantConfig[][];
    constructor(configKey: CardSetConfigKeyType, jsonKey: string | null, exportJsonKey: ExportJsonKey | undefined, hasExportJsonKey: boolean, sections: Record<string, CardSetSection> | undefined, sides: CardSideConfig[], htmlKey?: HtmlKey | undefined, hasHtmlKey?: boolean);
    toString(options?: ToStringOptions$1): string;
}

interface ToStringOptions {
    includeChains?: boolean;
    includeConfigs?: boolean;
}
declare class BitConfig {
    readonly since: string;
    readonly bitType: BitTypeType;
    readonly inheritedBitTypes: BitTypeType[];
    readonly inheritedBitTypesSet: Set<BitTypeType>;
    readonly textFormatDefault: TextFormatType;
    readonly tags: TagsConfig;
    readonly cardSet?: CardSetConfig;
    readonly quizBit?: boolean;
    readonly deprecated?: string;
    readonly bodyAllowed?: boolean;
    readonly bodyRequired?: boolean;
    readonly footerAllowed?: boolean;
    readonly footerRequired?: boolean;
    readonly resourceAttachmentAllowed?: boolean;
    readonly rootExampleType?: ExampleTypeType;
    readonly comboResourceConfigKey?: ConfigKeyType;
    constructor(config: {
        since: string;
        bitType: BitTypeType;
        inheritedBitTypes: BitTypeType[];
        textFormatDefault: TextFormatType;
        tags: TagsConfig;
        cardSet: CardSetConfig | undefined;
        quizBit: boolean | undefined;
        deprecated: string | undefined;
        bodyAllowed: boolean | undefined;
        bodyRequired: boolean | undefined;
        footerAllowed: boolean | undefined;
        footerRequired: boolean | undefined;
        resourceAttachmentAllowed: boolean | undefined;
        rootExampleType: ExampleTypeType | undefined;
        comboResourceConfigKey: ConfigKeyType | undefined;
    });
    toString(options?: ToStringOptions): string;
}

interface BitmarkTextParserOptions {
    format: TextFormatType;
    location: TextLocationType;
}
declare class TextParser {
    /**
     * Get the version of the text parser
     */
    version(): string;
    /**
     * Preprocess bitmark text AST into a standard format (TextAst object) from bitmark text AST either as a string
     * or a plain JS object
     *
     * @param ast - bitmark text AST as a string or a plain JS object
     * @returns bitmark text AST in a standard format (BitmarkAst object)
     */
    preprocessAst(ast: string | unknown): TextAst | undefined;
    /**
     * Check if a plain JS object is valid text AST
     *
     * @param ast - a plain JS object that might be text AST
     * @returns true if text AST, otherwise false
     */
    isAst(ast: unknown): boolean;
    /**
     * Convert Bitmark text to text AST.
     *
     * The Bitmark text should be a string.
     * If parsed bitmark text AST is passed to this function, it will be returned as is.
     *
     * @param text - bitmark text
     * @returns bitmark text AST as plain JS object
     */
    toAst(text: string | TextAst | undefined, options: BitmarkTextParserOptions): TextAst;
    /**
     * Extract all the body bits from the text AST
     *
     * @param text
     * @returns
     */
    extractBodyBits(text: JsonText): BodyBitJson[];
    /**
     * Walk all the body bits from the text AST
     *
     * @param text
     * @returns
     */
    walkBodyBits(text: JsonText, callback: (parent: TextAst, index: number, bodyBit: BodyBitJson) => void): void;
}

interface WithExampleJson {
    isExample: boolean;
    example: ExampleJson;
    __defaultExample?: ExampleJson;
}
interface BuildContext {
    bitConfig: BitConfig;
    bitType: BitTypeType;
    textFormat: TextFormatType;
}
interface ToAstPropertyOptions {
    cardSet?: {
        sideNo: number;
        variantNo: number;
    };
}
declare class BaseBuilder {
    protected textParser: TextParser;
    protected textGenerator: TextGenerator;
    constructor();
    /**
     * Convert example to an Example.
     * - If example is set, then the isExample will be true and example with be example as a BreakscapedText.
     * - Else if __isDefaultExample is true, then __isDefaultExample / isExample will both be true.
     * - Else __isDefaultExample / isExample will both be false.
     *
     * @param __isDefaultExample - true if the example is the default value
     * @param example - the example to convert (BreakscapedText, boolean) or undefined if none / default
     * @returns example/__isDefaultExample resolved to an Example object
     */
    protected toExample(__isDefaultExample: boolean | undefined, example: TextAst | string | boolean | undefined | null, defaultExample?: TextAst | string | boolean | undefined | null): WithExampleJson;
    /**
     * Convert a raw bitmark property to an AST property.
     *
     * @param key
     * @param value
     * @param options
     * @returns
     */
    protected toAstProperty(bitType: BitTypeType, key: ConfigKeyType, value: unknown | unknown[] | undefined, options: ToAstPropertyOptions | undefined): Property | undefined;
    protected getEmptyTextAst(context: BuildContext): TextAst;
    /**
     * Convert the JsonText from the JSON to the AST format:
     * Input:
     *  - Bitmark v2: breakscaped string
     *  - Bitmark v3: bitmark text JSON (TextAst)
     * Output:
     *  - bitmark text JSON (TextAst) with __tag property to indicate item is text
     *
     * In the case of Bitmark v2 type texts, there is nothing to do but cast the type.
     *
     * @param context BuildContext
     * @param textFormat format of TextAst
     * @param textLocation location of the text (body, tag, etc.)
     * @param text JsonText or JsonText[] to convert
     * @returns Breakscaped string or breakscaped string[]
     */
    protected handleJsonText<T extends JsonText | JsonText[] | undefined, R = T extends JsonText[] ? TextAst[] : TextAst>(context: BuildContext, textLocation: TextLocationType, text: T): R;
}

interface BuildBitOptions {
    cardSet?: {
        sideNo: number;
        variantNo: number;
    };
}
/**
 * Builder to build bitmark AST node programmatically
 */
declare class Builder extends BaseBuilder {
    private resourceBuilder;
    /**
     * Build bitmark node
     *
     * @param data - data for the node
     * @returns
     */
    buildBitmark(data: {
        bits?: Bit[];
        errors?: ParserError[];
    }): BitmarkAst;
    /**
     * Build bit node
     *
     * @param data - data for the node
     * @returns
     */
    buildBit(data: {
        bitType: BitTypeType;
        bitLevel: number;
        textFormat?: TextFormatType;
        resourceType?: ResourceTypeType;
        isCommented?: boolean;
        id?: string | string[];
        gUri?: string;
        internalComment?: string | string[];
        customerId?: string;
        customerExternalId?: string | string[];
        externalId?: string | string[];
        spaceId?: string | string[];
        padletId?: string;
        jupyterId?: string;
        jupyterExecutionCount?: number;
        copyright?: string;
        license?: string;
        rightsPolicy?: string | string[];
        sourceRL?: string;
        isPublic?: boolean;
        isTemplate?: boolean;
        isTemplateStripTheme?: boolean;
        isEditable?: boolean;
        needsValidation?: boolean;
        validationDate?: string;
        aiGenerated?: boolean;
        machineTranslated?: string;
        translationOf?: string;
        spansPageBreak?: boolean;
        searchIndex?: string | string[];
        analyticsTag?: string | string[];
        categoryTag?: string | string[];
        topicTag?: string | string[];
        reportTag?: string | string[];
        altLangTag?: string;
        feedbackEngine?: string;
        feedbackType?: string;
        disableFeedback?: boolean;
        diffTo?: string;
        diffOp?: string;
        diffRef?: string;
        diffContext?: string;
        diffTime?: number;
        path?: string;
        releaseVersion?: string;
        releaseKind?: string;
        releaseDate?: string;
        iframeSrc?: string;
        iframeName?: string;
        ageRange?: number | number[];
        lang?: string;
        language?: string | string[];
        publisher?: string | string[];
        publisherName?: string;
        displayName?: string;
        theme?: string | string[];
        rtl?: boolean;
        computerLanguage?: string;
        target?: string | string[];
        slug?: string;
        tag?: string | string[];
        groupTag?: Partial<GroupTagJson> | Partial<GroupTagJson>[];
        reviewTag?: string | string[];
        reviewerTag?: string | string[];
        reductionTag?: string | string[];
        bubbleTag?: string | string[];
        extractorTag?: string | string[];
        extractorInternal?: string | string[];
        sourceBB?: number[] | number[][];
        bitFingerprint?: string | string[];
        levelCEFRp?: string | string[];
        levelCEFR?: string | string[];
        levelILR?: string | string[];
        levelACTFL?: string | string[];
        icon?: string;
        iconTag?: string;
        colorTag?: string | string[];
        flashcardSet?: string | string[];
        subtype?: string;
        bookAlias?: string | string[];
        bookDiff?: string;
        coverImage?: string | string[] | Partial<ImageResourceWrapperJson>;
        coverColor?: string;
        backgroundImage?: string | string[] | Partial<ImageResourceWrapperJson>;
        publications?: string | string[];
        relatedBook?: string | string[];
        translationOfBook?: string;
        userFeedbackTranslationUrl?: string;
        userFeedbackContentUrl?: string;
        author?: string | string[];
        subject?: string | string[];
        date?: string;
        dateEnd?: string;
        location?: string;
        kind?: string;
        hasMarkAsDone?: boolean;
        processHandIn?: boolean;
        processHandInLocation?: string;
        chatWithBook?: boolean;
        chatWithBookBrainKey?: string;
        currency?: string;
        bookIsbn?: string;
        bookAuthor?: string;
        bookType?: string;
        bookBindingType?: string;
        bookNumberOfPages?: string;
        bookRating?: string;
        bookSeriesTitle?: string;
        bookSeriesId?: string;
        bookSeriesNumber?: string;
        bookLanguage?: string;
        bookPublishingDate?: string;
        bookPublisher?: string;
        bookTranslator?: string;
        bookOriginalTitle?: string;
        gmbExternalShop?: string;
        gmbExternalShopItems?: string | string[];
        action?: string;
        showInIndex?: boolean;
        refAuthor?: string | string[];
        refBookTitle?: string;
        refPublisher?: string | string[];
        refPublicationYear?: string;
        citationStyle?: string;
        blockId?: string;
        pageNo?: number;
        x?: number;
        y?: number;
        width?: string;
        height?: string;
        index?: number;
        classification?: string;
        availableClassifications?: string | string[];
        allowedBit?: string | string[];
        authorFullName?: string;
        authorPseudonym?: string;
        authorTitle?: string;
        authorJobTitle?: string;
        tableFixedHeader?: boolean;
        tableHeaderWhitespaceNoWrap?: boolean;
        tableSearch?: boolean;
        tableSort?: boolean;
        tablePagination?: boolean;
        tablePaginationLimit?: number;
        tableHeight?: number;
        tableWhitespaceNoWrap?: boolean;
        tableAutoWidth?: boolean;
        tableResizableColumns?: boolean;
        tableColumnMinWidth?: number;
        quizCountItems?: boolean;
        quizStrikethroughSolutions?: boolean;
        codeLineNumbers?: boolean;
        codeMinimap?: boolean;
        stripePricingTableId?: string;
        stripePricingTableDescriptiveName?: string;
        stripePublishableKey?: string;
        thumbImage?: string;
        scormSource?: string;
        posterImage?: string;
        focusX?: number;
        focusY?: number;
        pointerLeft?: string;
        pointerTop?: string;
        listItemIndent?: number;
        backgroundWallpaper?: Partial<ImageResourceWrapperJson>;
        hasBookNavigation?: boolean;
        duration?: string;
        referenceProperty?: string | string[];
        deeplink?: string | string[];
        externalLink?: string;
        externalLinkText?: string;
        videoCallLink?: string;
        vendorDashboardId?: string;
        vendorSurveyId?: string;
        vendorUrl?: string;
        search?: string;
        bot?: string | string[];
        fullName?: string;
        pseudonym?: string;
        titleString?: string;
        jobTitle?: string;
        list?: string | string[];
        layer?: string | string[];
        layerRole?: string | string[];
        textReference?: string;
        isTracked?: boolean;
        isInfoOnly?: boolean;
        imageFirst?: boolean;
        activityType?: string;
        labelTrue?: string;
        labelFalse?: string;
        content2Buy?: string;
        listPrice?: string;
        customerProductId?: string;
        customerProductShopLink?: string;
        mailingList?: string;
        buttonCaption?: string;
        callToActionUrl?: string;
        advertisingClickUrl?: string;
        brandColor?: string;
        brandColorName?: string;
        caption?: JsonText;
        quotedPerson?: string;
        reasonableNumOfChars?: number;
        resolved?: boolean;
        resolvedDate?: string;
        resolvedBy?: string;
        handInAcceptFileType?: string | string[];
        handInRequirement?: string | string[];
        handInInstruction?: string;
        maxCreatedBits?: number;
        maxDisplayLevel?: number;
        maxTocChapterLevel?: number;
        sourceDocument?: string;
        internalPrintPdf?: string;
        allowPrint?: string;
        hasPrintRestriction?: boolean;
        enforceUpdateOverUserInput?: boolean;
        extractorExtractionTimestamp?: string[];
        tocResource?: string | string[];
        tocContent?: string | string[];
        page?: string | string[];
        printParentChapterLevel?: number;
        printOnRequestCustomerId?: string;
        printOnRequestProductId?: string;
        platformBrandTarget?: string;
        platformName?: string;
        platformIcon?: Partial<ImageResourceWrapperJson>;
        platformLogo?: Partial<ImageResourceWrapperJson>;
        platformLogoMaxHeight?: number;
        platformPrimaryColor?: string;
        platformSecondaryColor?: string;
        platformBackgroundColor?: string;
        platformScrollbarColor?: string;
        platformSelectionColor?: string;
        platformSeparatorColor?: string;
        platformPlaceholderColor?: string;
        platformTextSelectionColor?: string;
        platformButtonPrimaryColor?: string;
        platformButtonBackgroundColor?: string;
        platformMessageBackgroundColor?: string;
        platformBackgroundImage?: Partial<ImageResourceWrapperJson>;
        platformBorderColor?: string;
        platformSelectionTextColor?: string;
        platformBaseLayerColor?: string;
        platformMargin?: number;
        platformBorderRadius?: number;
        platformSelectionBorderRadius?: number;
        platformNeedsShadow?: boolean;
        productId?: string | string[];
        product?: string | string[];
        productVideo?: string | string[];
        productFolder?: string;
        technicalTerm?: Partial<TechnicalTermJson>;
        servings?: Partial<ServingsJson>;
        ratingLevelStart?: Partial<RatingLevelStartEndJson>;
        ratingLevelEnd?: Partial<RatingLevelStartEndJson>;
        ratingLevelSelected?: number;
        formula?: string;
        partialAnswer?: string;
        book?: string | BookJson[];
        title?: JsonText;
        subtitle?: JsonText;
        level?: number | string;
        toc?: boolean;
        progress?: boolean;
        isCollapsible?: boolean;
        anchor?: string;
        reference?: string;
        referenceEnd?: string;
        revealSolutions?: boolean;
        isCaseSensitive?: boolean;
        item?: JsonText;
        lead?: JsonText;
        pageNumber?: JsonText;
        marginNumber?: JsonText;
        hint?: JsonText;
        instruction?: JsonText;
        example?: Partial<ExampleJson>;
        imageSource?: Partial<ImageSourceJson>;
        person?: Partial<PersonJson>;
        extraProperties?: {
            [key: string]: unknown | unknown[];
        };
        markConfig?: Partial<MarkConfigJson>[];
        previewImage?: Partial<ImageResourceWrapperJson> | Partial<ImageResourceWrapperJson>[];
        previewVideo?: Partial<VideoResourceWrapperJson> | Partial<VideoResourceWrapperJson>[];
        imagePlaceholder?: Partial<ImageResourceWrapperJson>;
        resources?: Partial<ResourceJson> | Partial<ResourceJson>[];
        body?: Partial<Body>;
        sampleSolution?: string;
        additionalSolutions?: string | string[];
        heading?: Partial<HeadingJson>;
        elements?: JsonText[];
        flashcards?: Partial<FlashcardJson>[];
        definitions?: Partial<DefinitionListItemJson>[];
        legend?: Partial<DefinitionListItemJson>[];
        statement?: Partial<StatementJson>;
        statements?: Partial<StatementJson>[];
        responses?: Partial<ResponseJson>[];
        quizzes?: Partial<QuizJson>[];
        pairs?: Partial<PairJson>[];
        matrix?: Partial<MatrixJson>[];
        pronunciationTable?: Partial<PronunciationTableJson>;
        table?: Partial<TableJson | TableExtendedJson>;
        choices?: Partial<ChoiceJson>[];
        questions?: Partial<QuestionJson>[];
        botResponses?: Partial<BotResponseJson>[];
        ingredients?: Partial<IngredientJson>[];
        cardBits?: Partial<CardBit>[];
        footer?: Partial<Footer>;
        markup?: string;
        parser?: ParserInfo;
        __isDefaultExample?: boolean;
    }, options?: BuildBitOptions): Bit | undefined;
    /**
     * Build books[] node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildBooks(context: BuildContext, data: Partial<BookJson>[] | string | undefined): BookJson[] | string | undefined;
    /**
     * Build choice node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildBook(_context: BuildContext, data: Partial<BookJson> | undefined): BookJson | undefined;
    /**
     * Build groupTag[] node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildGroupTags(context: BuildContext, data: Partial<GroupTagJson> | Partial<GroupTagJson>[] | undefined): GroupTagJson[] | undefined;
    /**
     * Normalise a sourceBB input into the AST shape (always number[][]).
     * Accepts a single 4-number tuple or an array of tuples; returns undefined when empty.
     */
    protected normaliseSourceBB(data: number[] | number[][] | undefined): number[][] | undefined;
    /**
     * Build groupTag node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildGroupTag(_context: BuildContext, data: Partial<GroupTagJson> | undefined): GroupTagJson | undefined;
    /**
     * Build feedbackChoices[] node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildFeedbackChoices(context: BuildContext, data: Partial<FeedbackChoiceJson>[] | undefined): FeedbackChoiceJson[] | undefined;
    /**
     * Build feedbackChoice node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildFeedbackChoice(context: BuildContext, data: Partial<FeedbackChoiceJson> | undefined): FeedbackChoiceJson | undefined;
    /**
     * Build feedbackReason node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildFeedbackReason(context: BuildContext, data: Partial<FeedbackReasonJson> | undefined): FeedbackReasonJson | undefined;
    /**
     * Build choice[] node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildChoices(context: BuildContext, data: Partial<ChoiceJson>[] | undefined): ChoiceJson[] | undefined;
    /**
     * Build choice node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildChoice(context: BuildContext, data: Partial<ChoiceJson> | undefined): ChoiceJson | undefined;
    /**
     * Build response[] node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildResponses(context: BuildContext, data: Partial<ResponseJson>[] | undefined): ResponseJson[] | undefined;
    /**
     * Build response node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildResponse(context: BuildContext, data: Partial<ResponseJson> | undefined): ResponseJson | undefined;
    /**
     * Build bot response[] node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildBotResponses(context: BuildContext, data: Partial<BotResponseJson>[] | undefined): BotResponseJson[] | undefined;
    /**
     * Build bot response node
     *
     * @param data - data for the node
     * @returns
     */
    protected botResponse(context: BuildContext, data: Partial<BotResponseJson> | undefined): BotResponseJson | undefined;
    /**
     * Build feedbacks[] node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildFeedbacks(context: BuildContext, data: Partial<FeedbackJson>[] | undefined): FeedbackJson[] | undefined;
    /**
     * Build feedback node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildFeedback(context: BuildContext, data: Partial<FeedbackJson> | undefined): FeedbackJson | undefined;
    /**
     * Build quizzes[] node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildQuizzes(context: BuildContext, data: Partial<QuizJson>[] | undefined): QuizJson[] | undefined;
    /**
     * Build quiz node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildQuiz(context: BuildContext, data: Partial<QuizJson> | undefined): QuizJson | undefined;
    /**
     * Build heading node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildHeading(_context: BuildContext, data: Partial<HeadingJson> | undefined): HeadingJson | undefined;
    /**
     * Build pair[] node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildPairs(context: BuildContext, data: Partial<PairJson>[] | undefined): PairJson[] | undefined;
    /**
     * Build pair node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildPair(context: BuildContext, data: Partial<PairJson> | undefined): PairJson | undefined;
    /**
     * Build matrix[] node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildMatricies(context: BuildContext, data: Partial<MatrixJson>[] | undefined): MatrixJson[] | undefined;
    /**
     * Build matrix node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildMatrix(context: BuildContext, data: Partial<MatrixJson> | undefined): MatrixJson | undefined;
    /**
     * Build matrixCell node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildMatrixCell(context: BuildContext, data: Partial<MatrixCellJson> | undefined): MatrixCellJson | undefined;
    /**
     * Build pronunciation table node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildPronunciationTable(context: BuildContext, dataIn: Partial<PronunciationTableJson> | undefined): PronunciationTableJson | undefined;
    /**
     * Build table / table extended node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildTable(context: BuildContext, dataIn: Partial<TableJson | TableExtendedJson> | undefined): TableJson | TableExtendedJson | undefined;
    /**
     * Build question[] node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildQuestions(context: BuildContext, data: Partial<QuestionJson>[] | undefined): QuestionJson[] | undefined;
    /**
     * Build question node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildQuestion(context: BuildContext, data: Partial<QuestionJson> | undefined): QuestionJson | undefined;
    /**
     * Build ingredient[] node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildIngredients(context: BuildContext, data: Partial<IngredientJson>[] | undefined): IngredientJson[] | undefined;
    /**
     * Build ingredient node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildIngredient(context: BuildContext, data: Partial<IngredientJson> | undefined): IngredientJson | undefined;
    /**
     * Build body node
     * - Handles JSON, Bitmark text, and plain text
     *   - body: set to either string, TextAst, or JSON
     *   - bodyBits: set to array of BodyBitJson (will be validated and merged into body if it is a string)
     *   - placeholders: set to placeholders from v2 JSON when body is a v2 JSON string
     *   - bodyString: set to the original string if body is a string (only used for card body)
     *
     * @param data - data for the node
     * @returns
     */
    protected buildBody(context: BuildContext, data: Partial<Body> | undefined): Body | undefined;
    /**
     * Build footer node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildFooter(context: BuildContext, data: Partial<Footer> | undefined): Footer | undefined;
    /**
     * Build gap node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildGap(context: BuildContext, data: Partial<GapJson> | undefined): GapJson | undefined;
    /**
     * Build mark configs node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildMarkConfigs(context: BuildContext, data: Partial<MarkConfigJson>[] | undefined): MarkConfigJson[] | undefined;
    /**
     * Build mark config node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildMarkConfig(_context: BuildContext, data: Partial<MarkConfigJson> | undefined): MarkConfigJson | undefined;
    /**
     * Build mark node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildMark(context: BuildContext, data: Partial<MarkJson> | undefined): MarkJson | undefined;
    /**
     * Build select node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildSelect(context: BuildContext, data: Partial<SelectJson> | undefined): SelectJson | undefined;
    /**
     * Build selectOption[] node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildSelectOptions(context: BuildContext, data: Partial<SelectOptionJson>[] | undefined): SelectOptionJson[] | undefined;
    /**
     * Build selectOption node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildSelectOption(context: BuildContext, data: Partial<SelectOptionJson> | undefined): SelectOptionJson | undefined;
    /**
     * Build highlight node
     *
     * @param data - data for the node
     * @returns
     */
    buildHighlight(context: BuildContext, data: Partial<HighlightJson> | undefined): HighlightJson | undefined;
    /**
     * Build highlightText[] node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildHighlightTexts(context: BuildContext, data: Partial<HighlightTextJson>[] | undefined): HighlightTextJson[] | undefined;
    /**
     * Build highlightText node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildHighlightText(context: BuildContext, data: Partial<HighlightTextJson> | undefined): HighlightTextJson | undefined;
    /**
     * Build flashcards node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildFlashcards(context: BuildContext, data: Partial<FlashcardJson>[] | undefined): FlashcardJson[] | undefined;
    /**
     * Build flashcard node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildFlashcard(context: BuildContext, data: Partial<FlashcardJson> | undefined): FlashcardJson | undefined;
    /**
     * Build definitionListItem[] node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildDefinitionList(context: BuildContext, data: Partial<DefinitionListItemJson>[] | undefined): DefinitionListItemJson[] | undefined;
    /**
     * Build definitionListItem node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildDefinitionListItem(context: BuildContext, data: Partial<DefinitionListItemJson> | undefined): DefinitionListItemJson | undefined;
    protected buildTextAndIcon(context: BuildContext, data: Partial<TextAndIconJson> | undefined, textAsStrings?: boolean): TextAndIconJson | undefined;
    /**
     * Build statement[] node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildStatements(context: BuildContext, data: Partial<StatementJson>[] | undefined): StatementJson[] | undefined;
    /**
     * Build statement node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildStatement(context: BuildContext, data: Partial<StatementJson> | undefined): StatementJson | undefined;
    /**
     * Build (image-on-device) imageSource node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildImageSource(_context: BuildContext, data: Partial<ImageSourceJson> | undefined): ImageSourceJson | undefined;
    /**
     * Build (chat) person node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildPerson(context: BuildContext, data: Partial<PersonJson> | undefined): PersonJson | undefined;
    /**
     * Build (cook-ingredients) technicalTerm node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildTechnicalTerm(_context: BuildContext, data: Partial<TechnicalTermJson> | undefined): TechnicalTermJson | undefined;
    /**
     * Build (cook-ingredients) servings node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildServings(_context: BuildContext, data: Partial<ServingsJson> | undefined): ServingsJson | undefined;
    /**
     * Build (survey-rating) ratingLevelStart / ratingLevelEnd node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildRatingLevelStartEnd(context: BuildContext, data: Partial<RatingLevelStartEndJson> | undefined): RatingLevelStartEndJson | undefined;
    /**
     * Build card bit[] node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildCardBits(context: BuildContext, data: Partial<CardBit>[] | undefined): Bit[] | undefined;
    /**
     * Build card bit node
     *
     * @param data - data for the node
     * @returns
     */
    protected buildCardBit(context: BuildContext, data: Partial<CardBit> | undefined): CardBit | undefined;
    protected toImageResource(context: BuildContext, data: Partial<ImageResourceWrapperJson> | undefined): ImageResourceWrapperJson;
    protected toImageResources(context: BuildContext, data: Partial<ImageResourceWrapperJson> | Partial<ImageResourceWrapperJson>[] | undefined): ImageResourceWrapperJson[];
    protected toVideoResources(context: BuildContext, data: Partial<VideoResourceWrapperJson> | Partial<VideoResourceWrapperJson>[] | undefined): VideoResourceWrapperJson[];
    private buildCardNode;
    /**
     * Copy any attributes from 'attrs' property to the root node (necessary when the input if from JSON)
     * The values in 'attrs' will overwrite any existing values in the node
     *
     * The original object is not modified, a new object is returned
     *
     * @param data
     */
    private bodyBitCopyFromAttrs;
    /**
     * Set examples down the tree
     *
     * @param body
     * @param cardNode
     * @param __isDefaultExample
     * @param example
     * @returns true if any of the answers has an example, otherwise undefined
     */
    private pushExampleDownTree;
    /**
     * Set examples for boolean nodes
     *
     * @param __isDefaultExample
     * @param example
     * @param onlyCorrect
     * @param nodes
     * @returns true if any of the answers has an example, otherwise undefined
     */
    private pushExampleDownTreeBoolean;
    /**
     * Set examples for string nodes
     *
     * @param __isDefaultExample
     * @param example
     * @param nodes
     * @returns true if any of the answers has an example, otherwise undefined
     */
    private pushExampleDownTreeString;
    private pushExampleDownTreeBodyBits;
    /**
     * Push a value down the tree, without overriding existing values
     *
     * This function is not type safe and should be used with care
     *
     * @param body/body[] set if the value should be passed down the body to the body bits / card body bits
     * @param bodyBitTypes body bit types to push the value down to
     * @param cardNode set if the value should be passed down the card node
     * @param path path for the value
     * @param value the value to push down
     */
    private pushDownTree;
    private parseExtraProperties;
    /**
     * Set the 'isExample' flags on the bit
     *
     * The flag is set if the bit has an example. The flag is set at each branch level up the tree from
     * where the 'example' exists.
     *
     * @param bit
     */
    private setIsExampleFlags;
    private setDefaultBitValues;
    private addVersionToParserInfo;
}

/**
 * Builder to build bitmark Resource AST nodes programmatically
 */
declare class ResourceBuilder extends BaseBuilder {
    /**
     * Build and validate resource JSON object(s) from external resource JSON object(s)
     *
     * Note: a single input resource object can be converted to multiple resource objects
     * (e.g. stillImageFilm -> image + audio)
     *
     * @param bitType
     * @param resource
     * @returns
     */
    resourceFromResourceJson(context: BuildContext, resource?: Partial<ResourceJson> | Partial<ResourceJson>[]): ResourceJson | ResourceJson[] | undefined;
    resourceFromResourceDataJson(context: BuildContext, type: ResourceTypeType, data: Partial<ResourceDataJson> | undefined): ResourceJson | undefined;
    /**
     * Build resource node
     *
     * @param data - data for the node
     * @returns
     */
    resource(context: BuildContext, data: {
        type: ResourceTypeType;
        value?: string;
        srcAlt?: string[];
        format?: string;
        src1x?: string;
        src2x?: string;
        src3x?: string;
        src4x?: string;
        width?: string;
        height?: string;
        alt?: string;
        zoomDisabled?: boolean;
        duration?: number;
        mute?: boolean;
        autoplay?: boolean;
        allowSubtitles?: boolean;
        showSubtitles?: boolean;
        posterImage?: ImageResourceJson;
        thumbnails?: ImageResourceJson[];
        siteName?: string;
        license?: string;
        copyright?: string;
        showInIndex?: boolean;
        caption?: TextAst;
        search?: string;
        selected?: boolean;
    }): ResourceJson | undefined;
    /**
     * Build imageResource node
     *
     * @param data - data for the node
     * @returns
     */
    imageResource(context: BuildContext, data: {
        format: string;
        value: string;
        srcAlt?: string[];
        src1x?: string;
        src2x?: string;
        src3x?: string;
        src4x?: string;
        width?: string | null;
        height?: string | null;
        alt?: string;
        zoomDisabled?: boolean;
        license?: string;
        copyright?: string;
        showInIndex?: boolean;
        caption?: TextAst;
        search?: string;
        selected?: boolean;
    }, __typeAlias?: ResourceTypeType): ImageResourceWrapperJson | undefined;
    /**
     * Build imageLinkResource node
     *
     * @param data - data for the node
     * @returns
     */
    imageLinkResource(context: BuildContext, data: {
        format: string;
        value: string;
        srcAlt?: string[];
        src1x?: string;
        src2x?: string;
        src3x?: string;
        src4x?: string;
        width?: string;
        height?: string;
        alt?: string;
        zoomDisabled?: boolean;
        license?: string;
        copyright?: string;
        showInIndex?: boolean;
        caption?: TextAst;
        search?: string;
        selected?: boolean;
    }): ImageLinkResourceWrapperJson | undefined;
    /**
     * Build audioResource node
     *
     * @param data - data for the node
     * @returns
     */
    audioResource(context: BuildContext, data: {
        format: string;
        value: string;
        srcAlt?: string[];
        duration?: number;
        mute?: boolean;
        autoplay?: boolean;
        license?: string;
        copyright?: string;
        showInIndex?: boolean;
        caption?: TextAst;
        search?: string;
        selected?: boolean;
    }): AudioResourceWrapperJson | undefined;
    /**
     * Build audioEmbedResource node
     *
     * @param data - data for the node
     * @returns
     */
    audioEmbedResource(context: BuildContext, data: {
        format: string;
        value: string;
        srcAlt?: string[];
        duration?: number;
        mute?: boolean;
        autoplay?: boolean;
        license?: string;
        copyright?: string;
        showInIndex?: boolean;
        caption?: TextAst;
        search?: string;
        selected?: boolean;
    }): AudioEmbedResourceWrapperJson | undefined;
    /**
     * Build audioLinkResource node
     *
     * @param data - data for the node
     * @returns
     */
    audioLinkResource(context: BuildContext, data: {
        format: string;
        value: string;
        srcAlt?: string[];
        duration?: number;
        mute?: boolean;
        autoplay?: boolean;
        license?: string;
        copyright?: string;
        showInIndex?: boolean;
        caption?: TextAst;
        search?: string;
        selected?: boolean;
    }): AudioLinkResourceWrapperJson | undefined;
    /**
     * Build videoResource node
     *
     * @param data - data for the node
     * @returns
     */
    videoResource(context: BuildContext, data: {
        format: string;
        value: string;
        srcAlt?: string[];
        width?: string;
        height?: string;
        duration?: number;
        mute?: boolean;
        autoplay?: boolean;
        allowSubtitles?: boolean;
        showSubtitles?: boolean;
        alt?: string;
        posterImage?: ImageResourceJson;
        thumbnails?: ImageResourceJson[];
        license?: string;
        copyright?: string;
        showInIndex?: boolean;
        caption?: TextAst;
        search?: string;
        selected?: boolean;
    }): VideoResourceWrapperJson | undefined;
    /**
     * Build videoEmbedResource node
     *
     * @param data - data for the node
     * @returns
     */
    videoEmbedResource(context: BuildContext, data: {
        format: string;
        value: string;
        srcAlt?: string[];
        width?: string;
        height?: string;
        duration?: number;
        mute?: boolean;
        autoplay?: boolean;
        allowSubtitles?: boolean;
        showSubtitles?: boolean;
        alt?: string;
        posterImage?: ImageResourceJson;
        thumbnails?: ImageResourceJson[];
        license?: string;
        copyright?: string;
        showInIndex?: boolean;
        caption?: TextAst;
        search?: string;
        selected?: boolean;
    }): VideoEmbedResourceWrapperJson | undefined;
    /**
     * Build videoLinkResource node
     *
     * @param data - data for the node
     * @returns
     */
    videoLinkResource(context: BuildContext, data: {
        format: string;
        value: string;
        srcAlt?: string[];
        width?: string;
        height?: string;
        duration?: number;
        mute?: boolean;
        autoplay?: boolean;
        allowSubtitles?: boolean;
        showSubtitles?: boolean;
        alt?: string;
        posterImage?: ImageResourceJson;
        thumbnails?: ImageResourceJson[];
        license?: string;
        copyright?: string;
        showInIndex?: boolean;
        caption?: TextAst;
        search?: string;
        selected?: boolean;
    }): VideoLinkResourceWrapperJson | undefined;
    /**
     * Build stillImageFilmEmbedResource node
     *
     * @param data - data for the node
     * @returns
     */
    stillImageFilmEmbedResource(context: BuildContext, data: {
        format: string;
        value: string;
        srcAlt?: string[];
        width?: string;
        height?: string;
        duration?: number;
        mute?: boolean;
        autoplay?: boolean;
        allowSubtitles?: boolean;
        showSubtitles?: boolean;
        alt?: string;
        posterImage?: ImageResourceJson;
        thumbnails?: ImageResourceJson[];
        license?: string;
        copyright?: string;
        showInIndex?: boolean;
        caption?: TextAst;
        search?: string;
        selected?: boolean;
    }): StillImageFilmEmbedResourceWrapperJson | undefined;
    /**
     * Build stillImageFilmLinkResource node
     *
     * @param data - data for the node
     * @returns
     */
    stillImageFilmLinkResource(context: BuildContext, data: {
        format: string;
        value: string;
        srcAlt?: string[];
        width?: string;
        height?: string;
        duration?: number;
        mute?: boolean;
        autoplay?: boolean;
        allowSubtitles?: boolean;
        showSubtitles?: boolean;
        alt?: string;
        posterImage?: ImageResourceJson;
        thumbnails?: ImageResourceJson[];
        license?: string;
        copyright?: string;
        showInIndex?: boolean;
        caption?: TextAst;
        search?: string;
        selected?: boolean;
    }): StillImageFilmLinkResourceWrapperJson | undefined;
    /**
     * Build articleResource node
     *
     * @param data - data for the node
     * @returns
     */
    articleResource(context: BuildContext, data: {
        format: string;
        srcAlt?: string[];
        value: string;
        license?: string;
        copyright?: string;
        showInIndex?: boolean;
        caption?: TextAst;
        search?: string;
        selected?: boolean;
    }): ArticleResourceWrapperJson | undefined;
    /**
     * Build documentResource node
     *
     * @param data - data for the node
     * @returns
     */
    documentResource(context: BuildContext, data: {
        format: string;
        value: string;
        srcAlt?: string[];
        license?: string;
        copyright?: string;
        showInIndex?: boolean;
        caption?: TextAst;
        search?: string;
        selected?: boolean;
    }): DocumentResourceWrapperJson | undefined;
    /**
     * Build documentEmbedResource node
     *
     * @param data - data for the node
     * @returns
     */
    documentEmbedResource(context: BuildContext, data: {
        format: string;
        value: string;
        srcAlt?: string[];
        license?: string;
        copyright?: string;
        showInIndex?: boolean;
        caption?: TextAst;
        search?: string;
        selected?: boolean;
    }): DocumentEmbedResourceWrapperJson | undefined;
    /**
     * Build documentLinkResource node
     *
     * @param data - data for the node
     * @returns
     */
    documentLinkResource(context: BuildContext, data: {
        format: string;
        value: string;
        srcAlt?: string[];
        license?: string;
        copyright?: string;
        showInIndex?: boolean;
        caption?: TextAst;
        search?: string;
        selected?: boolean;
    }): DocumentLinkResourceWrapperJson | undefined;
    /**
     * Build documentDownloadResource node
     *
     * @param data - data for the node
     * @returns
     */
    documentDownloadResource(context: BuildContext, data: {
        format: string;
        value: string;
        srcAlt?: string[];
        license?: string;
        copyright?: string;
        showInIndex?: boolean;
        caption?: TextAst;
        search?: string;
        selected?: boolean;
    }): DocumentDownloadResourceWrapperJson | undefined;
    /**
     * Build appLinkResource node
     *
     * @param data - data for the node
     * @returns
     */
    appLinkResource(context: BuildContext, data: {
        value: string;
        srcAlt?: string[];
        license?: string;
        copyright?: string;
        showInIndex?: boolean;
        caption?: TextAst;
        search?: string;
        selected?: boolean;
    }): AppLinkResourceWrapperJson | undefined;
    /**
     * Build websiteLinkResource node
     *
     * @param data - data for the node
     * @returns
     */
    websiteLinkResource(context: BuildContext, data: {
        value: string;
        srcAlt?: string[];
        siteName?: string;
        license?: string;
        copyright?: string;
        showInIndex?: boolean;
        caption?: TextAst;
        search?: string;
        selected?: boolean;
    }): WebsiteLinkResourceWrapperJson | undefined;
}

/**
 * Simple writer to write text or code.
 */
interface Writer {
    /**
     * If true, the writer is synchronous.
     * If false, the writer is asynchronous.
     *
     * When the writer is synchronous, the openSync() and closeSync() methods can be used, and
     * the output can be generated synchrounously.
     */
    readonly isSync: boolean;
    /**
     * Open the writer for writing.
     *
     * Must be called before any calls to writeXXX();
     *
     * This method can be used regardless of the value of isSync.
     */
    open(): Promise<void>;
    /**
     * Close the writer for writing.
     *
     * Must be called after any calls to writeXXX();
     *
     * This method can be used regardless of the value of isSync.
     */
    close(): Promise<void>;
    /**
     * Open the writer for writing.
     *
     * Must be called before any calls to writeXXX();
     *
     * This method is only available when isSync is true.
     */
    openSync(): void;
    /**
     * Close the writer for writing.
     *
     * Must be called after any calls to writeXXX();
     *
     * This method is only available when isSync is true.
     */
    closeSync(): void;
    /**
     * Writes a string value to the output.
     * @param value - The string value to be written.
     */
    write(value: string): this;
    /**
     * Writes a new line to the output. The line is indented automatically. The line is ended with the endOfLineString.
     * @param value - The line to write. When omitted, only the endOfLineString is written.
     */
    writeLine(value?: string): this;
    /**
     * Writes a collection of lines to the output. Each line is indented automatically and ended with the endOfLineString.
     * @param values - The lines to write.
     * @param delimiter - An optional delimiter to be written at the end of each line, except for the last one.
     */
    writeLines(values: string[], delimiter?: string): this;
    /**
     * Writes a single whitespace character to the output.
     */
    writeWhiteSpace(): this;
    /**
     * Get the last string non-empty that was written.
     *
     * @returns The last non-empty string that was written, or an empty string if nothing has been written.
     */
    getLastWrite(): string;
}

/**
 * Writer to write to a string.
 */
declare class StringWriter implements Writer {
    private _buffer;
    private _string;
    endOfLineString: string;
    private lastWrite;
    get isSync(): boolean;
    /**
     * Get the string which has been written.
     *
     * This cannot be called until after close() has resolved its Promise.
     *
     * @returns
     */
    getString(): string;
    open(): Promise<void>;
    close(): Promise<void>;
    openSync(): void;
    closeSync(): void;
    writeLine(value?: string): this;
    writeLines(values: string[], delimiter?: string): this;
    write(value: string): this;
    writeWhiteSpace(): this;
    getLastWrite(): string;
}

declare const CardSetVersion: {
    readonly v1: 1;
    readonly v2: 2;
};
type CardSetVersionType = EnumType<typeof CardSetVersion>;

/**
 * Bitmark generation options
 */
interface BitmarkOptions {
    /**
     * If true, always include bitmark text format even if it is the default for the bit
     * If false, only include bitmark text format if it is not the default for the bit
     */
    explicitTextFormat?: boolean;
    /**
     * Prettify the JSON in the bitmark body.
     *
     * If not set or false, JSON will not be prettified.
     * If true, JSON will be prettified with an indent of 2.
     * If a positive integer, JSON will be prettified with an indent of this number.
     */
    prettifyJson?: boolean | number;
    /**
     * Card set version to generate:
     * 1: === / == / --
     * 2: ++==== / ==== / -- / ~~ / ====++
     */
    cardSetVersion?: CardSetVersionType;
    /**
     * The number of spaces to insert around values in the bitmark.
     * If set to true, will use the default of 1 space.
     * If set to false, will not insert any spaces.
     * If set to a number, will insert that many spaces, up to a limit of 10.
     *
     * default: true
     */
    spacesAroundValues?: number | boolean;
    /**
     * [development only]
     * Generate debug information in the output.
     */
    debugGenerationInline?: boolean;
    /**
     * Generate table cell content without breakscaping text.
     */
    noBreakscaping?: boolean;
}
/**
 * Bitmark generator options
 */
interface BitmarkGeneratorOptions {
    /**
     * bitmarkVersion - The version of bitmark to output.
     * If not specified, the version will default to 3.
     *
     * Specifying the version will set defaults for other options.
     * - Bitmark v2:
     *   - cardSetVersion: 1
     * - Bitmark v3:
     *   - cardSetVersion: 2
     */
    bitmarkVersion?: BitmarkVersionType;
    /**
     * The options for JSON generation.
     */
    bitmarkOptions?: BitmarkOptions;
}
/**
 * Generate bitmark markup from a bitmark AST
 *
 * NOTE: Newlines - a newline is written BEFORE each content that requries a newline
 *
 */
declare class BitmarkGenerator extends AstWalkerGenerator<BitmarkAst, void> {
    protected ast: Ast;
    protected textGenerator: TextGenerator;
    private bitmarkVersion;
    private options;
    private mainWriter;
    private partWriter;
    private writer;
    private prettifySpace;
    private spacesAroundValues;
    private spacesAroundValuesStr;
    private bitType;
    private textFormat;
    private isBodyBitmarkText;
    private isCardAllowed;
    private firstBit;
    private hasCardSet;
    private hasFooter;
    private inTag;
    private skipTableTraversal;
    /**
     * Generate bitmark markup from a bitmark AST
     *
     * @param writer - destination for the output
     * @param bitmarkVersion - The version of bitmark to output.
     * If not specified, the version will default to 3.
     *
     * Specifying the version will set defaults for other options.
     * - Bitmark v2:
     *   - cardSetVersion: 1
     * - Bitmark v3:
     *   - cardSetVersion: 2
     *
     * @param options - bitmark generation options
     */
    constructor(writer: Writer, options?: BitmarkGeneratorOptions);
    /**
     * Generate bitmark markup from bitmark AST
     *
     * @param ast bitmark AST
     */
    generate(ast: BitmarkAst): Promise<void>;
    /**
     * Generate text from a bitmark text AST synchronously
     *
     * @param ast bitmark text AST
     */
    generateSync(ast: BitmarkAst): void;
    private resetState;
    private walkAndWrite;
    protected enter_bitsValue(node: NodeInfo, _route: NodeInfo[]): boolean;
    protected exit_bitsValue(_node: NodeInfo, _route: NodeInfo[]): void;
    protected enter_internalComment(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_groupTag(node: NodeInfo, route: NodeInfo[]): boolean;
    protected leaf_labelTrue(node: NodeInfo, route: NodeInfo[]): boolean;
    protected leaf_labelFalse(_node: NodeInfo, _route: NodeInfo[]): boolean;
    protected enter_imageSource(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_technicalTerm(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_servings(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_person(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_text(node: NodeInfo, route: NodeInfo[]): boolean;
    protected leaf_text(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_icon(node: NodeInfo, route: NodeInfo[]): boolean;
    protected leaf_iconValue(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_ratingLevelStart(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_ratingLevelEnd(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enterRatingLevelStartEndCommon(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_markConfig(_node: NodeInfo, _route: NodeInfo[]): boolean;
    protected enter_markConfigValue(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_partialAnswer(node: NodeInfo, route: NodeInfo[]): boolean;
    protected leaf_partialAnswer(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_sampleSolution(node: NodeInfo, route: NodeInfo[]): boolean;
    protected leaf_sampleSolution(node: NodeInfo, route: NodeInfo[]): boolean;
    protected leaf_reasonableNumOfChars(node: NodeInfo, route: NodeInfo[]): void;
    protected enter_sourceBB(node: NodeInfo, route: NodeInfo[]): boolean;
    protected leaf_additionalSolutionsValue(node: NodeInfo, route: NodeInfo[]): void;
    protected enter_item(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_lead(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_pageNumber(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_marginNumber(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_body(node: NodeInfo, route: NodeInfo[]): boolean;
    protected exit_body(_node: NodeInfo, _route: NodeInfo[]): void;
    protected bodyBitCallback(bodyBit: BodyBitJson, _index: number, _route: NodeInfo[]): string;
    protected enter_gap(node: NodeInfo, _route: NodeInfo[]): boolean;
    protected enter_mark(node: NodeInfo, _route: NodeInfo[]): boolean;
    protected enter_select(_node: NodeInfo, _route: NodeInfo[]): boolean;
    protected enter_highlight(_node: NodeInfo, _route: NodeInfo[]): boolean;
    protected enter_footer(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_solutions(node: NodeInfo, route: NodeInfo[]): boolean;
    protected leaf_solution(node: NodeInfo, route: NodeInfo[]): void;
    protected leaf_mark(node: NodeInfo, route: NodeInfo[]): void;
    protected enter_optionsValue(node: NodeInfo, _route: NodeInfo[]): boolean;
    protected enter_textsValue(node: NodeInfo, _route: NodeInfo[]): boolean;
    protected enter_cardNode(_node: NodeInfo, _route: NodeInfo[]): boolean;
    protected between_cardNode(_node: NodeInfo, _left: NodeInfo, _right: NodeInfo, _route: NodeInfo[]): void;
    protected exit_cardNode(_node: NodeInfo, _route: NodeInfo[]): void;
    protected enter_elements(_node: NodeInfo, _route: NodeInfo[]): void;
    protected between_elements(_node: NodeInfo, _left: NodeInfo, _right: NodeInfo, _route: NodeInfo[]): void;
    protected between_flashcards(_node: NodeInfo, _left: NodeInfo, _right: NodeInfo, _route: NodeInfo[]): void;
    protected between_flashcardsValue(_node: NodeInfo, _left: NodeInfo, right: NodeInfo, _route: NodeInfo[]): void;
    protected between_alternativeAnswers(_node: NodeInfo, _route: NodeInfo[]): void;
    protected between_alternativeDefinitions(_node: NodeInfo, _route: NodeInfo[]): void;
    protected enter_statements(_node: NodeInfo, _route: NodeInfo[]): void;
    protected between_statements(_node: NodeInfo, _left: NodeInfo, _right: NodeInfo, _route: NodeInfo[]): void;
    protected enter_statementsValue(node: NodeInfo, _route: NodeInfo[]): boolean;
    protected enter_choicesValue(node: NodeInfo, _route: NodeInfo[]): boolean;
    protected enter_responsesValue(node: NodeInfo, _route: NodeInfo[]): boolean;
    protected between_feedbacks(_node: NodeInfo, _left: NodeInfo, _right: NodeInfo, _route: NodeInfo[]): void;
    protected enter_reason(_node: NodeInfo, _route: NodeInfo[]): boolean;
    protected enter_quizzes(_node: NodeInfo, _route: NodeInfo[]): void;
    protected between_quizzes(_node: NodeInfo, _left: NodeInfo, _right: NodeInfo, _route: NodeInfo[]): void;
    protected enter_heading(_node: NodeInfo, _route: NodeInfo[]): boolean | void;
    protected between_heading(_node: NodeInfo, _left: NodeInfo, _right: NodeInfo, _route: NodeInfo[]): void;
    protected enter_forValues(_node: NodeInfo, _route: NodeInfo[]): void;
    protected between_forValues(_node: NodeInfo, _left: NodeInfo, _right: NodeInfo, _route: NodeInfo[]): void;
    protected enter_pairs(_node: NodeInfo, _route: NodeInfo[]): void;
    protected between_pairs(_node: NodeInfo, _left: NodeInfo, _right: NodeInfo, _route: NodeInfo[]): void;
    protected enter_keyAudio(node: NodeInfo, _route: NodeInfo[]): boolean;
    protected enter_keyImage(node: NodeInfo, _route: NodeInfo[]): boolean;
    protected enter_matrix(_node: NodeInfo, _route: NodeInfo[]): void;
    protected between_matrix(_node: NodeInfo, _left: NodeInfo, _right: NodeInfo, _route: NodeInfo[]): void;
    protected enter_values(_node: NodeInfo, _route: NodeInfo[]): void;
    protected between_values(_node: NodeInfo, _left: NodeInfo, _right: NodeInfo, _route: NodeInfo[]): void;
    protected between_pronunciationTable(_node: NodeInfo, _left: NodeInfo, _right: NodeInfo, route: NodeInfo[]): void;
    protected enter_table(node: NodeInfo, route: NodeInfo[]): boolean | void;
    protected between_table(_node: NodeInfo, _left: NodeInfo, _right: NodeInfo, route: NodeInfo[]): void;
    private writeAdvancedTable;
    private writeTableRow;
    private writeTableCell;
    private writeTableCellProperty;
    protected between_data(_node: NodeInfo, _left: NodeInfo, _right: NodeInfo, route: NodeInfo[]): void;
    protected between_columns(_node: NodeInfo, _left: NodeInfo, _right: NodeInfo, route: NodeInfo[]): void;
    protected leaf_columnsValue(node: NodeInfo, _route: NodeInfo[]): void;
    protected enter_columnsValue(node: NodeInfo, _route: NodeInfo[]): void;
    protected between_dataValue(_node: NodeInfo, _left: NodeInfo, _right: NodeInfo, route: NodeInfo[]): void;
    protected leaf_dataValueValue(node: NodeInfo, route: NodeInfo[]): void;
    protected enter_dataValueValue(node: NodeInfo, route: NodeInfo[]): void | boolean;
    protected between_captionDefinitionList(_node: NodeInfo, _left: NodeInfo, _right: NodeInfo, route: NodeInfo[]): void;
    protected leaf_term(node: NodeInfo, route: NodeInfo[]): boolean;
    protected leaf_definition(node: NodeInfo, route: NodeInfo[]): boolean;
    protected between_definitions(_node: NodeInfo, _left: NodeInfo, _right: NodeInfo, route: NodeInfo[]): void;
    protected between_definitionsValue(_node: NodeInfo, _left: NodeInfo, right: NodeInfo, route: NodeInfo[]): void;
    protected enter_questions(_node: NodeInfo, _route: NodeInfo[]): void;
    protected between_questions(_node: NodeInfo, _left: NodeInfo, _right: NodeInfo, _route: NodeInfo[]): void;
    protected enter_ingredients(_node: NodeInfo, _route: NodeInfo[]): void;
    protected between_ingredients(_node: NodeInfo, _left: NodeInfo, _right: NodeInfo, _route: NodeInfo[]): void;
    protected enter_ingredientsValue(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_botResponses(_node: NodeInfo, _route: NodeInfo[]): void;
    protected between_botResponses(_node: NodeInfo, _left: NodeInfo, _right: NodeInfo, _route: NodeInfo[]): void;
    protected enter_cardBits(_node: NodeInfo, _route: NodeInfo[]): void;
    protected between_cardBits(_node: NodeInfo, _left: NodeInfo, _right: NodeInfo, _route: NodeInfo[]): void;
    protected leaf_item(node: NodeInfo, route: NodeInfo[]): void;
    protected leaf_response(node: NodeInfo, route: NodeInfo[]): void;
    protected leaf_reaction(node: NodeInfo, route: NodeInfo[]): void;
    protected leaf_feedback(node: NodeInfo, route: NodeInfo[]): void;
    protected enter_backgroundWallpaper(node: NodeInfo, _route: NodeInfo[]): boolean;
    protected enter_imagePlaceholder(node: NodeInfo, _route: NodeInfo[]): boolean;
    protected enter_previewImageValue(node: NodeInfo, _route: NodeInfo[]): boolean;
    protected enter_previewVideoValue(node: NodeInfo, _route: NodeInfo[]): boolean;
    protected enter_platformIcon(node: NodeInfo, _route: NodeInfo[]): boolean;
    protected enter_platformLogo(node: NodeInfo, _route: NodeInfo[]): boolean;
    protected enter_platformBackgroundImage(node: NodeInfo, _route: NodeInfo[]): boolean;
    protected enter_coverImage(node: NodeInfo, route: NodeInfo[]): boolean;
    protected leaf_coverImage(node: NodeInfo, route: NodeInfo[]): void;
    protected enter_backgroundImage(node: NodeInfo, route: NodeInfo[]): boolean;
    protected leaf_backgroundImage(node: NodeInfo, route: NodeInfo[]): void;
    protected exit_imagePlaceholder(_node: NodeInfo, _route: NodeInfo[]): void;
    protected enter_posterImage(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_thumbnails(node: NodeInfo, route: NodeInfo[]): boolean;
    protected leaf_level(node: NodeInfo, route: NodeInfo[]): boolean;
    protected leaf_titleString(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_title(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_subtitle(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_book(_node: NodeInfo, _route: NodeInfo[]): void;
    protected enter_bookValue(node: NodeInfo, route: NodeInfo[]): boolean;
    protected leaf_book(node: NodeInfo, route: NodeInfo[]): void;
    protected leaf_anchor(node: NodeInfo, _route: NodeInfo[]): void;
    protected leaf_reference(node: NodeInfo, route: NodeInfo[]): void;
    protected enter_hint(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_instruction(node: NodeInfo, route: NodeInfo[]): boolean;
    protected leaf_lang(node: NodeInfo, route: NodeInfo[]): void;
    protected enter_refAuthor(node: NodeInfo, route: NodeInfo[]): void;
    protected leaf_refBookTitle(node: NodeInfo, route: NodeInfo[]): void;
    protected enter_refPublisher(node: NodeInfo, route: NodeInfo[]): void;
    protected leaf_refPublicationYear(node: NodeInfo, route: NodeInfo[]): void;
    protected leaf_citationStyle(node: NodeInfo, route: NodeInfo[]): void;
    protected leaf_isExample(node: NodeInfo, route: NodeInfo[]): void;
    protected enter_elementsValue(node: NodeInfo, _route: NodeInfo[]): boolean;
    protected leaf_solutionsValue(node: NodeInfo, route: NodeInfo[]): void;
    protected leaf_prefix(node: NodeInfo, _route: NodeInfo[]): void;
    protected leaf_postfix(node: NodeInfo, _route: NodeInfo[]): void;
    protected leaf_isCaseSensitive(node: NodeInfo, route: NodeInfo[]): void;
    protected leaf_forKeys(node: NodeInfo, _route: NodeInfo[]): void;
    protected leaf_forValues(node: NodeInfo, _route: NodeInfo[]): void;
    protected leaf_forValuesValue(node: NodeInfo, _route: NodeInfo[]): void;
    protected leaf_key(node: NodeInfo, _route: NodeInfo[]): void;
    protected leaf_valuesValue(node: NodeInfo, _route: NodeInfo[]): void;
    protected enter_question(node: NodeInfo, route: NodeInfo[]): boolean;
    protected leaf_question(node: NodeInfo, route: NodeInfo[]): void;
    protected leaf_srcAltValue(node: NodeInfo, route: NodeInfo[]): void;
    protected leaf_src1x(node: NodeInfo, route: NodeInfo[]): void;
    protected leaf_src2x(node: NodeInfo, route: NodeInfo[]): void;
    protected leaf_src3x(node: NodeInfo, route: NodeInfo[]): void;
    protected leaf_src4x(node: NodeInfo, route: NodeInfo[]): void;
    protected leaf_width(node: NodeInfo, route: NodeInfo[]): void;
    protected leaf_height(node: NodeInfo, route: NodeInfo[]): void;
    protected leaf_alt(node: NodeInfo, route: NodeInfo[]): void;
    protected leaf_zoomDisabled(node: NodeInfo, route: NodeInfo[]): void;
    protected leaf_license(node: NodeInfo, route: NodeInfo[]): void;
    protected leaf_copyright(node: NodeInfo, route: NodeInfo[]): void;
    protected leaf_provider(_node: NodeInfo, _route: NodeInfo[]): void;
    protected leaf_showInIndex(node: NodeInfo, route: NodeInfo[]): void;
    protected enter_caption(node: NodeInfo, route: NodeInfo[]): boolean;
    protected leaf_search(node: NodeInfo, route: NodeInfo[]): void;
    protected leaf_selected(node: NodeInfo, route: NodeInfo[]): void;
    protected leaf_duration(node: NodeInfo, route: NodeInfo[]): void;
    protected leaf_mute(node: NodeInfo, route: NodeInfo[]): void;
    protected leaf_autoplay(node: NodeInfo, route: NodeInfo[]): void;
    protected leaf_allowSubtitles(node: NodeInfo, route: NodeInfo[]): void;
    protected leaf_showSubtitles(node: NodeInfo, route: NodeInfo[]): void;
    /**
     * Generate the handlers for resources, as they are mostly the same, but not quite
     */
    protected generateResourceHandlers(): void;
    /**
     * Generate the handlers for properties, as they are mostly the same, but not quite
     */
    protected generatePropertyHandlers(): void;
    /**
     * Get the bit type from any node
     *
     * @param route the route to the current node
     * @returns the bit type
     */
    protected getBitType(route: NodeInfo[]): BitTypeType | undefined;
    /**
     * Check if in a chain.
     *
     * Return false if at the root of the bit or a card bit, otherwise true.
     * This is useful to determine if a newline should be written before certain properties.
     *
     * @param route
     * @returns
     */
    protected isChain(route: NodeInfo[]): boolean;
    protected haveValidCardSet(bit: Bit): boolean;
    protected haveValidFooter(bit: Bit): boolean;
    /**
     * Calculate the number of spaces around values from the options.
     *
     * This function should only be called from the constructor.
     * Otherwise use this.spacesAroundValues.
     *
     * @returns
     */
    protected calcSpacesAroundValues(): number;
    /**
     * Helper function to write a tag key, breakscaping appropriately.
     * Use only to write a tag key.
     *
     * @param s
     */
    protected writeTagKey<T extends string>(s?: T): void;
    /**
     * Write text or value, handling:
     *  - the format and location (i.e. conversion to text and breakscaping).
     *  - the spaces around values (if tag value).
     *
     * @param text
     * @param format
     * @param location
     * @param options
     */
    protected writeTextOrValue(text: JsonText, format: TextFormatType, location: TextLocationType, options?: GenerateOptions): void;
    protected writeString(s?: string): void;
    protected writeOPBUL(): void;
    protected writeOPESC(): void;
    protected writeOPRANGLE(): void;
    protected writeOPDANGLE(): void;
    protected writeOPD(level: number): void;
    protected writeOPU(): void;
    protected writeOPE(): void;
    protected writeOPB(): void;
    protected writeOPQ(): void;
    protected writeOPA(): void;
    protected writeOPP(): void;
    protected writeOPM(): void;
    protected writeOPS(): void;
    protected writeOPR(): void;
    protected writeOPC(): void;
    protected writeOPAMP(): void;
    protected writeOPDOLLAR(): void;
    protected writeOPHASH(): void;
    protected writeOPPRE(): void;
    protected writeOPPOST(): void;
    protected writeOP(): void;
    protected writeCL(): void;
    protected writeAmpersand(): void;
    protected writeColon(): void;
    protected writeHash(): void;
    protected writeSpacesAroundValues(): void;
    protected writePlainTextDivider(): void;
    protected writeCardSetStart(): void;
    protected writeCardSetEnd(): void;
    protected writeCardSetCardDivider(qualifier?: string): void;
    protected writeCardSetSideDivider(): void;
    protected writeCardSetVariantDivider(): void;
    private getCardDividerMarker;
    private appendCardDividerQualifier;
    protected writeNL_IfNotChain(route: NodeInfo[]): void;
    protected writeNL(): void;
    protected writePropertyStyleResource(key: string, resource: ResourceJson, deprecated_writeAsProperty?: boolean): boolean | void;
    protected writeResource(type: ResourceTypeType, value: string): void;
    protected writeProperty(name: string, values: unknown | unknown[] | undefined, route: NodeInfo[], options: {
        format: TagFormatType;
        array?: boolean;
        ignoreFalse?: boolean;
        ignoreTrue?: boolean;
        writeEmpty?: boolean;
        forceChain?: boolean;
    }): void;
    protected writeInlineDebug(key: string, state: {
        open?: boolean;
        close?: boolean;
        single?: boolean;
    }): void;
    protected isEmptyText(text: TextAst | undefined): boolean;
    protected isWriteTextFormat(bitsValue: string, textFormatDefault: TextFormatType): boolean;
    protected calculateIsCardAllowed(): boolean;
    protected isTableBitType(): boolean;
    protected isOfBitType1(): boolean;
    protected isOfBitType(baseBitType: BitTypeType | BitTypeType[]): boolean;
    /**
     * Writes a string value to the output.
     * @param value - The string value to be written.
     */
    write(value: string): this;
    /**
     * Writes a new line to the output. The line is indented automatically. The line is ended with the endOfLineString.
     * @param value - The line to write. When omitted, only the endOfLineString is written.
     */
    writeLine(value?: string): this;
    /**
     * Writes a collection of lines to the output. Each line is indented automatically and ended with the endOfLineString.
     * @param values - The lines to write.
     * @param delimiter - An optional delimiter to be written at the end of each line, except for the last one.
     */
    writeLines(values: string[], delimiter?: string): this;
    /**
     * Writes a single whitespace character to the output.
     */
    writeWhiteSpace(): this;
}

/**
 * JSON output options
 */
interface JsonOptions {
    /**
     * Enable parser warnings.
     *
     * If not set or false, parser warnings will not be included in the output.
     * If true, any parser warnings will be included in the output.
     */
    enableWarnings?: boolean | number;
    /**
     * Prettify the JSON.
     *
     * If not set or false, JSON will not be prettified.
     * If true, JSON will be prettified with an indent of 2.
     * If a positive integer, JSON will be prettified with an indent of this number.
     *
     * If prettify is set, a string will be returned if possible.
     */
    prettify?: boolean | number;
    /**
     * Stringify the JSON.
     *
     * If not set or false, JSON will be returned as a plain JS object.
     * It true, JSON will be stringified.
     *
     * If prettify is set, it will override this setting.
     */
    stringify?: boolean;
    /**
     * Output text as plain text rather than parsed bitmark text
     *
     * If not set, the default for the bitmark version will be used.
     * If false, text will be output as parsed bitmark text.
     * It true, text will be output as plain text strings.
     */
    textAsPlainText?: boolean;
    /**
     * Exclude unknown properties in the output.
     *
     * If not set or false, unknown properties will be included in the JSON output.
     * It true, unknown properties will NOT be included in the JSON output.
     *
     */
    excludeUnknownProperties?: boolean;
    /**
     * [development only]
     * Generate debug information in the output.
     */
    debugGenerationInline?: boolean;
}
/**
 * JSON generator options
 */
interface JsonGeneratorOptions {
    /**
     * bitmarkVersion - The version of bitmark to output.
     * If not specified, the version will default to 3.
     *
     * Specifying the version will set defaults for other options.
     * - Bitmark v2:
     *   - textAsPlainText: true
     * - Bitmark v3:
     *   - textAsPlainText: false
     */
    bitmarkVersion?: BitmarkVersionType;
    /**
     * The options for JSON generation.
     */
    jsonOptions?: JsonOptions;
}
interface ExampleNode {
    isExample: boolean;
    example?: Example | undefined;
    __isDefaultExample: boolean;
}
interface ExampleJsonWrapper {
    isExample: boolean;
    example: ExampleJson;
}
/**
 * Generate bitmark JSON from a bitmark AST
 *
 *
 */
declare class JsonGenerator extends AstWalkerGenerator<BitmarkAst, void> {
    protected ast: Ast;
    protected textGenerator: TextGenerator;
    private bitmarkVersion;
    private textParserVersion;
    private textParser;
    private options;
    private jsonPrettifySpace;
    private writer;
    private json;
    private bitWrapperJson;
    private bitJson;
    private textDefault;
    private bodyDefault;
    private bodyJson;
    private listItem;
    private placeholderIndex;
    /**
     * Generate bitmark JSON from a bitmark AST
     *
     * @param writer - destination for the output
     * @param options - JSON generation options
     */
    constructor(writer: Writer, options?: JsonGeneratorOptions);
    /**
     * Generate bitmark markup from bitmark AST
     *
     * @param ast bitmark AST
     */
    generate(ast: BitmarkAst): Promise<void>;
    /**
     * Generate text from a bitmark text AST synchronously
     *
     * @param ast bitmark text AST
     */
    generateSync(ast: BitmarkAst): void;
    private resetState;
    private walkAndWrite;
    protected enter_bitmarkAst(_node: NodeInfo, _route: NodeInfo[]): void;
    protected exit_bitmarkAst(_node: NodeInfo, _route: NodeInfo[]): void;
    protected enter_bitsValue(node: NodeInfo, _route: NodeInfo[]): void;
    protected exit_bitsValue(_node: NodeInfo, _route: NodeInfo[]): void;
    protected enter_imageSource(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_person(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_ratingLevelStart(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_ratingLevelEnd(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_sourceBB(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_productId(node: NodeInfo, route: NodeInfo[]): boolean;
    /**
     * PLAN-016: `isCollapsible` is emitted only when true. `false` is the implied
     * default for every bit, so it is never written to the JSON — an absent key
     * means the bit's configured default (`true` for the deprecated
     * `*-collapsible` bit types, `false` everywhere else).
     *
     * Defining these handlers suppresses the generic property handlers that
     * `generatePropertyHandlers()` would otherwise install for this tag.
     */
    protected leaf_isCollapsible(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_isCollapsible(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_markConfig(_node: NodeInfo, _route: NodeInfo[]): boolean;
    protected enter_markConfigValue(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_item(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_lead(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_pageNumber(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_marginNumber(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_hint(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_instruction(node: NodeInfo, route: NodeInfo[]): boolean;
    protected leaf_titleString(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_title(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_subtitle(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_caption(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_width(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_height(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_extraProperties(node: NodeInfo, _route: NodeInfo[]): boolean;
    protected enter_cardBitsValue(node: NodeInfo, route: NodeInfo[]): void;
    protected exit_cardBitsValue(_node: NodeInfo, _route: NodeInfo[]): void;
    protected enter_body(node: NodeInfo, route: NodeInfo[]): boolean;
    protected bodyBitCallback(bodyBit: BodyBitJson, _index: number, _route: NodeInfo[]): string;
    /**
     * Move all properties of body bits to the attrs property.
     * This function is called recursively to process all body bits in the body tree.
     *
     * NOTE: Internally, the body bit is stored as it appears in bitmark v2, but in v3 all the properties
     * should be in the `attrs` property. The properies are only moved to 'attrs' for the JSON output
     *
     * The original body bit is not modified.
     * The function returns a new body bit with the properties moved.
     *
     * @param nodes the body to process, or the subtree to process
     * @param recursion leave as default, used for recursion only
     * @returns
     */
    protected moveBodyBitPropertiesToAttrs(nodes: TextAst, recursion?: number): TextAst;
    protected enter_footer(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_elements(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_flashcards(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_definitions(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_statement(node: NodeInfo, route: NodeInfo[]): void;
    protected enter_statements(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_choices(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_responses(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_feedbacks(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_quizzes(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_heading(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_pairs(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_matrix(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_pronunciationTable(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_table(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_questions(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_botResponses(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_ingredients(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_captionDefinitionList(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_backgroundWallpaper(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_imagePlaceholder(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_previewImage(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_previewVideo(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_platformIcon(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_platformLogo(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_platformBackgroundImage(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_coverImage(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_backgroundImage(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_resources(node: NodeInfo, route: NodeInfo[]): boolean;
    protected leaf_level(node: NodeInfo, route: NodeInfo[]): boolean;
    protected enter_book(node: NodeInfo, route: NodeInfo[]): boolean;
    protected leaf_book(node: NodeInfo, route: NodeInfo[]): boolean;
    protected leaf_anchor(node: NodeInfo, route: NodeInfo[]): boolean;
    protected leaf_reference(node: NodeInfo, route: NodeInfo[]): boolean;
    protected leaf_referenceEnd(node: NodeInfo, route: NodeInfo[]): boolean;
    protected leaf_markup(node: NodeInfo, _route: NodeInfo[]): boolean;
    protected enter_internalComment(_node: NodeInfo, _route: NodeInfo[]): boolean;
    protected enter_parser(node: NodeInfo, route: NodeInfo[]): void;
    /**
     * Generate the handlers for properties, as they are mostly the same, but not quite
     */
    protected generatePropertyHandlers(): void;
    /**
     * Default handler for properties.
     *
     * @param node the node
     * @param route  the route to the node
     * @param parentNodeTypes the parent node types for which to handle the node
     * @returns
     */
    protected standardHandler(node: NodeInfo, route: NodeInfo[], parentNodeTypes: NodeTypeType | NodeTypeType[] | undefined, options: {
        array: boolean;
        allowNull?: boolean;
        keyOverride?: string;
        valueOverride?: unknown;
    }): boolean;
    protected addProperty(target: any, name: string, values: unknown | unknown[] | undefined, options: {
        array: boolean;
        allowNull?: boolean;
    }): void;
    protected toExample(node: ExampleNode, options: {
        defaultExample: string | boolean | null;
        isBoolean: boolean;
        textFormat: TextFormatType;
    }): ExampleJsonWrapper;
    /**
     * Get the bit type from any node
     *
     * @param route the route to the current node
     * @returns the bit type
     */
    protected getBitType(route: NodeInfo[]): BitTypeType | undefined;
    /**
     * Get the text format from any node
     *
     * @param route the route to the current node
     * @returns the text format
     */
    protected getTextFormat(route: NodeInfo[]): TextFormatType;
    /**
     * Get the bit resourceType atttachment from any node
     *
     * @param route the route to the current node
     * @returns the bit type
     */
    protected getResourceType(route: NodeInfo[]): ResourceTypeType | undefined;
    /**
     * Get the internal comments from any node
     *
     * @param route the route to the current node
     * @returns the text format
     */
    protected getInternalComments(route: NodeInfo[]): BreakscapedString[] | undefined;
    /**
     * Convert the text from the AST to the JSON format:
     * Input:
     *  - breakscaped string
     * Output:
     *  - text: plain text
     *  - json: bitmark text JSON
     *  - Bitmark v2: breakscaped string
     *  - Bitmark v3: bitmark text JSON (TextAst)
     *
     * In the case of Bitmark v2 type texts, there is nothing to do but cast the type.
     *
     * @param text
     * @returns
     */
    protected convertBreakscapedStringToJsonText(text: BreakscapedString | undefined, format: TextFormatType, textLocation: TextLocationType): JsonText;
    /**
     * Concatenates a plain JSON text with a JsonText that may be plain (v2) or BitmarkText (v3)
     * Returns the combined text.
     *
     * @param text the text to concatenate
     * @param textPlain the plain text to concatenate
     */
    protected concatenatePlainTextWithJsonTexts(text: JsonText, extraBreaks: number, textPlain: string): JsonText;
    /**
     * Check if an object is bitmark text
     * The check looks for a special tag on the array (__tag: 'text')
     *
     * @param obj object that might be bitmark text
     * @returns
     */
    protected isBitmarkText(obj: unknown): boolean;
    protected writeInlineDebug(key: string, state: {
        open?: boolean;
        close?: boolean;
        single?: boolean;
    }): void;
    protected writeString(s?: string): void;
    /**
     * Create a new bit json object.
     * - This function defines the order of the properties in the json.
     *
     * @param bit
     * @returns
     */
    protected createBitJson(bit: Bit): Partial<BitJson>;
    /**
     * Remove wanted properties from bit json object.
     * - This function defines the defaults for properties in the json.
     *
     * TODO: All these defaults should come from the config and be set in the Builder.
     *
     * @param bit
     * @returns
     */
    protected cleanBitJson(bitJson: Partial<BitJson>): Partial<BitJson>;
    protected tableIsEmpty(table: TableJson | TableExtendedJson | undefined): boolean;
    /**
     * Convert any bitmark texts to strings.
     */
    protected convertAllBitmarkTextsToStringsForPlainText(json: Record<string, unknown> | unknown[]): void;
    /**
     * Remove any property with a key starting with an double underscore.
     *
     * @param json
     */
    protected removeTemporaryProperties(json: Record<string, unknown> | unknown[]): void;
    /**
     * Writes a string value to the output.
     * @param value - The string value to be written.
     */
    write(value: string): this;
    /**
     * Writes a new line to the output. The line is indented automatically. The line is ended with the endOfLineString.
     * @param value - The line to write. When omitted, only the endOfLineString is written.
     */
    writeLine(value?: string): this;
    /**
     * Writes a collection of lines to the output. Each line is indented automatically and ended with the endOfLineString.
     * @param values - The lines to write.
     * @param delimiter - An optional delimiter to be written at the end of each line, except for the last one.
     */
    writeLines(values: string[], delimiter?: string): this;
    /**
     * Writes a single whitespace character to the output.
     */
    writeWhiteSpace(): this;
}

declare const BitmarkParserType: {
    readonly peggy: "peggy";
};
type BitmarkParserTypeType = EnumType<typeof BitmarkParserType>;

declare const InfoFormat: {
    readonly text: "text";
    readonly json: "json";
    readonly pojo: "pojo";
};
type InfoFormatType = EnumType<typeof InfoFormat>;

declare const InfoType: {
    readonly list: "list";
    readonly deprecated: "deprecated";
    readonly all: "all";
    readonly bit: "bit";
};
type InfoTypeType = EnumType<typeof InfoType>;

interface ParserJson {
    version?: string;
    bitmarkVersion?: string;
    commentedBitType?: string;
    internalComments?: string[];
    warnings?: ParserError[];
    errors?: ParserError[];
}

interface BitWrapperJson {
    bitmark?: string;
    bit: BitJson;
    parser?: ParserJson;
}

/**
 * A parser for parsing bitmark JSON to bitmark AST
 */
declare class JsonParser {
    /**
     * Convert JSON to AST.
     *
     * The JSON can be a bit or a bitwrapper and can be a string or a plain JS object
     *
     * @param json - bitmark JSON as a string or a plain JS object
     * @returns bitmark AST
     */
    toAst(json: unknown): BitmarkAst;
    /**
     * Preprocess bitmark JSON into a standard format (BitWrapperJson[] object) from either a bit or a bitwrapper
     * as a string or a plain JS object
     *
     * @param json - bitmark JSON as a string or a plain JS object
     * @returns bitmark JSON in a standard format (BitWrapperJson[] object)
     */
    preprocessJson(json: string | unknown): BitWrapperJson[];
    /**
     * Check if a plain JS object is valid BitWrapper JSON
     *
     * @param bitWrapper - a plain JS object that might be BitWrapper JSON
     * @returns true if BitWrapper JSON, otherwise false
     */
    isBitWrapper(bitWrapper: unknown): boolean;
    /**
     * Check if a plain JS object is valid Bit JSON
     *
     * @param bitWrapper - a plain JS object that might be Bit JSON
     * @returns true if Bit JSON, otherwise false
     */
    isBit(bit: unknown): boolean;
    /**
     * Convert a Bit to BitWrapper
     *
     * @param bit a valid Bit
     * @returns the Bit wrapper in a BitWrapper
     */
    bitToBitWrapper(bit: BitJson): BitWrapperJson;
    private bitToAst;
    private processStatements;
    private processResponses;
    private processBotResponse;
    private processListItems;
    private getResourceType;
    private processResources;
    private processBody;
    private processFooter;
    private processTitle;
    private processReference;
    private parseExample;
}

interface BitmarkParserOptions {
    parserType?: BitmarkParserTypeType;
}
declare class BitmarkParser {
    protected jsonParser: JsonParser;
    /**
     * Convert Bitmark markup to AST.
     *
     * The Bitmark markup should be a string.
     *
     * @param json - bitmark JSON as a string or a plain JS object
     * @param _options - unused
     * @returns bitmark AST
     */
    toAst(bitmark: string, _options?: BitmarkParserOptions): BitmarkAst;
}

/**
 * Extract HTML tables and convert them into bitmark table bit-JSON.
 *
 * Produces an array of bare `BitJson`-shaped objects (`type` = `table-extended` or `table`) that
 * can be fed directly into the existing JSON → AST → output pipeline. Cell content is built as
 * `TextAst` (rich text nodes) directly; the downstream generators handle serialisation and
 * breakscaping.
 *
 * See PLAN-013 for the full specification.
 */

type HtmlTableFormat = 'table' | 'table-extended';
interface HtmlTableParseOptions {
    /** Output bit type. Default `table-extended` (lossless). `table` is lossy. */
    tableFormat?: HtmlTableFormat;
    /** Keep unmappable tags as literal text instead of unwrapping them. Default false. */
    keepUnknownTags?: boolean;
    /** Called with a human-readable message when information is lost (e.g. lossy `table` output). */
    onWarning?: (message: string) => void;
}
/** Loosely-typed table bit JSON (matches a subset of BitJson). */
interface TableBitJson {
    type: HtmlTableFormat;
    format: 'bitmark++';
    caption?: TextAst;
    table: TableJson | TableExtendedJson;
}
declare class HtmlTableParser {
    private keepUnknownTags;
    /**
     * Parse an HTML string and return one table bit per top-level `<table>`.
     */
    parse(html: string, options?: HtmlTableParseOptions): TableBitJson[];
    /** Collect every `<table>` element, NOT descending into nested tables. */
    private collectTopLevelTables;
    private tableToBit;
    private rowToCells;
    private cellToJson;
    private widthFromCell;
    private isLossyAsBasic;
    /**
     * Convert a cell/li's child nodes into block-level TextAst nodes (paragraphs, lists, images).
     */
    private blockNodes;
    /** Convert child nodes to a flat list of inline TextNodes, applying the given marks. */
    private inlineNodes;
    private inlineFromElement;
    private inlineText;
    private serializeOpenTag;
    private isListTag;
    private listNode;
    private listType;
    private listItemNode;
    private taskItemNode;
    private imageNode;
    private isMathTag;
    private latexNode;
    private latexFromMath;
    private findLatexAnnotation;
    private textContent;
    private localName;
    /** Trim leading/trailing whitespace from inline content (edges only). */
    private trimInline;
}

/**
 * Writer to write to a stream.
 */
declare abstract class StreamWriter implements Writer {
    private _stream;
    endOfLineString: string;
    private lastWrite;
    get isSync(): boolean;
    /**
     * Get the current write stream
     */
    get stream(): NodeJS.WritableStream | undefined;
    /**
     * Set the current write stream
     */
    set stream(stream: NodeJS.WritableStream | undefined);
    abstract open(): Promise<void>;
    abstract close(): Promise<void>;
    openSync(): void;
    closeSync(): void;
    writeLine(value?: string): this;
    writeLines(values: string[], delimiter?: string): this;
    write(value: string): this;
    writeWhiteSpace(): this;
    getLastWrite(): string;
}

/**
 * Options for file writing
 */
interface FileOptions {
    /**
     * Append to a file if true, otherwise overwrite
     */
    append?: boolean;
    /**
     * Character encoding, defaults to 'utf8'
     */
    encoding?: BufferEncoding;
}
/**
 * Writer to write to a file.
 */
declare class FileWriter extends StreamWriter {
    private _path;
    private _append;
    private _encoding;
    /**
     * Create a writer to write to a file.
     *
     * @param path - path of file to write
     * @param options - options for file writing
     */
    constructor(path: PathLike, options?: FileOptions);
    get path(): PathLike;
    get append(): boolean;
    get encoding(): BufferEncoding;
    open(): Promise<void>;
    close(): Promise<void>;
}

/**
 * Info options for the parser
 */
interface InfoOptions {
    /**
     * Specify the type of information to return, overriding the default (list)
     * - list: list of supported bits
     * - deprecated: list of deprecated bits
     * - all: list of supported bits and deprecated bits
     * - bit: configuration for a specific bit, or all bits
     */
    type?: InfoTypeType;
    /**
     * Specify the bit type to return, overriding the default (all)
     */
    bit?: string;
    /**
     * Specify the output format, overriding the default (text)
     */
    outputFormat?: InfoFormatType;
    /**
     * Prettify the JSON.
     *
     * If not set or false, JSON will not be prettified.
     * If true, JSON will be prettified with an indent of 2.
     * If a positive integer, JSON will be prettified with an indent of this number.
     *
     * If prettify is set, a string will be returned if possible.
     */
    prettify?: boolean | number;
}
/**
 * Config generation options for the parser
 */
interface GenerateConfigOptions {
}
/**
 * Conversion options for bitmark / JSON conversion
 */
interface ConvertOptions {
    /**
     * The version of bitmark to output.
     * If not specified, the version will be 3.
     *
     * Specifying the version will set defaults for other options.
     * - Bitmark v2:
     *   - bitmarkOptions.cardSetVersion: 1
     *   - jsonOptions.textAsPlainText: true
     * - Bitmark v3:
     *   - bitmarkOptions.cardSetVersion: 2
     *   - jsonOptions.textAsPlainText: false
     *
     */
    bitmarkVersion?: BitmarkVersionType;
    /**
     * Specify the bitmark parser to use, overriding the default
     */
    bitmarkParserType?: BitmarkParserTypeType;
    /**
     * Set to force input to be interpreted as a particular format, overriding the auto-detection
     * Auto-detection can fail or open unwanted files for strings that look like paths
     */
    inputFormat?: InputType;
    /**
     * Specify the output format, overriding the default
     */
    outputFormat?: OutputType;
    /**
     * Specify a file to write the output to
     */
    outputFile?: string;
    /**
     * Options for the output file
     */
    fileOptions?: FileOptions;
    /**
     * Options for bitmark generation
     */
    bitmarkOptions?: BitmarkOptions;
    /**
     * Options for JSON generation
     */
    jsonOptions?: JsonOptions;
}
/**
 * Prettify options for bitmark / JSON prettify / validate
 */
interface UpgradeOptions {
    /**
     * The version of bitmark to output.
     * If not specified, the version will be 3.
     *
     * Specifying the version will set defaults for other options.
     * - Bitmark v2:
     *   - bitmarkOptions.cardSetVersion: 1
     *   - jsonOptions.textAsPlainText: true
     * - Bitmark v3:
     *   - bitmarkOptions.cardSetVersion: 2
     *   - jsonOptions.textAsPlainText: false
     *
     */
    bitmarkVersion?: BitmarkVersionType;
    /**
     * Specify the bitmark parser to use, overriding the default
     */
    bitmarkParserType?: BitmarkParserTypeType;
    /**
     * Set to force input to be interpreted as a particular format, overriding the auto-detection
     * Auto-detection can fail or open unwanted files for strings that look like paths
     */
    inputFormat?: InputType;
    /**
     * Specify a file to write the output to
     */
    outputFile?: string;
    /**
     * Options for the output file
     */
    fileOptions?: FileOptions;
    /**
     * Options for bitmark generation
     */
    bitmarkOptions?: BitmarkOptions;
    /**
     * Options for JSON generation
     */
    jsonOptions?: JsonOptions;
}
/**
 * Conversion options for bitmark text / JSON conversion
 */
interface ConvertTextOptions {
    /**
     * Specify the text format (default: bitmark++)
     */
    textFormat?: BodyTextFormatType;
    /**
     * Specify the text location (default: body)
     */
    textLocation?: TextLocationType;
    /**
     * Set to force input to be interpreted as a particular format, overriding the auto-detection
     * Auto-detection can fail or open unwanted files for strings that look like paths
     */
    inputFormat?: InputType;
    /**
     * Specify a file to write the output to
     */
    outputFile?: string;
    /**
     * Options for the output file
     */
    fileOptions?: FileOptions;
    /**
     * Options for JSON generation
     */
    jsonOptions?: TextJsonOptions;
}
/**
 * Create AST options
 */
interface CreateAstOptions {
    /**
     * Set to force input to be interpreted as a particular format, overriding the auto-detection
     * Auto-detection can fail or open unwanted files for strings that look like paths
     */
    inputFormat?: InputType;
}
interface ExtractPlainTextOptions {
    /**
     * Set to force input to be interpreted as a particular format, overriding the auto-detection
     * Auto-detection can fail for certain inputs as the input formats can overlap
     */
    inputFormat?: InputFormatType;
}
/**
 * Options for {@link BitmarkParserGenerator.convertHtmlTable}
 */
interface ConvertHtmlTableOptions {
    /**
     * Force the input format, overriding auto-detection.
     * - `html`: input is HTML; extract tables and output bitmark/JSON/AST
     * - any other value: input is bitmark/JSON/AST; output HTML
     */
    inputFormat?: InputFormatType;
    /**
     * Output format.
     * - HTML input: `bitmark` (default) | `json` | `ast` | `html` (re-emit / normalise)
     * - bitmark/JSON/AST input: `html` (default, and only valid value)
     */
    outputFormat?: OutputType | 'html';
    /**
     * Bit type to emit when converting HTML to bits.
     * `table-extended` (default, lossless) or `table` (lossy: drops spans/scope/sections).
     */
    tableFormat?: HtmlTableFormat;
    /**
     * Keep unmappable HTML tags as literal text instead of unwrapping them (HTML -> bits only).
     */
    keepUnknownTags?: boolean;
    /**
     * Disable breakscaping when generating bitmark table cell content from HTML.
     * Useful when cells already contain raw bitmark that should pass through untouched.
     */
    noBreakscaping?: boolean;
    /**
     * Specify a file to write the output to
     */
    outputFile?: string;
    /**
     * Options for the output file
     */
    fileOptions?: FileOptions;
    /**
     * Options for bitmark generation (HTML -> bitmark)
     */
    bitmarkOptions?: BitmarkOptions;
    /**
     * Options for JSON generation (HTML -> json)
     */
    jsonOptions?: JsonOptions;
}
/**
 * Breakscape options
 */
interface BreakscapeOptions {
    /**
     * Set to force input to be interpreted as a particular format, overriding the auto-detection
     * Auto-detection can fail or open unwanted files for strings that look like paths
     */
    inputFormat?: InputType;
    /**
     * Specify a file to write the output to
     */
    outputFile?: string;
    /**
     * Options for the output file
     */
    fileOptions?: FileOptions;
    /**
     * Specify the text format (default:  bitmark++)
     */
    textFormat?: BodyTextFormatType;
    /**
     * Specify the text location (default: body)
     */
    textLocation?: TextLocationType;
}
/**
 * Unbreakscape options
 */
interface UnbreakscapeOptions {
    /**
     * Set to force input to be interpreted as a particular format, overriding the auto-detection
     * Auto-detection can fail or open unwanted files for strings that look like paths
     */
    inputFormat?: InputType;
    /**
     * Specify a file to write the output to
     */
    outputFile?: string;
    /**
     * Options for the output file
     */
    fileOptions?: FileOptions;
    /**
     * Specify the text format (default: bitmark++)
     */
    textFormat?: BodyTextFormatType;
    /**
     * Specify the text location (default: body)
     */
    textLocation?: TextLocationType;
}
/**
 * Input type enumeration
 */
declare const Input: {
    /**
     * Input is as a string
     */
    readonly string: "string";
    /**
     * Input is as a file path
     */
    readonly file: "file";
};
type InputType = EnumType<typeof Input>;
/**
 * Output type enumeration
 */
declare const Output: {
    /**
     * Output bitmark string
     */
    readonly bitmark: "bitmark";
    /**
     * Output JSON as a plain JS object, or a file
     */
    readonly json: "json";
    /**
     * Output AST as a plain JS object, or a file
     */
    readonly ast: "ast";
    /**
     * Output plain text as a string, or a file
     */
    readonly text: "text";
};
type OutputType = EnumType<typeof Output>;
/**
 * Input format enumeration
 */
declare const InputFormat: {
    /**
     * Input is bitmark
     */
    readonly bitmark: "bitmark";
    /**
     * Input is bitmarkText
     */
    readonly bitmarkText: "bitmarkText";
    /**
     * Input is plain text
     */
    readonly plainText: "plainText";
    /**
     * Input is HTML (used by convertHtmlTable)
     */
    readonly html: "html";
};
type InputFormatType = EnumType<typeof InputFormat>;
/**
 * Options for bitmark text JSON generation
 */
interface TextJsonOptions {
    /**
     * Prettify the JSON.
     *
     * If not set or false, JSON will not be prettified.
     * If true, JSON will be prettified with an indent of 2.
     * If a positive integer, JSON will be prettified with an indent of this number.
     *
     * If prettify is set, a string will be returned if possible.
     */
    prettify?: boolean | number;
    /**
     * Stringify the JSON.
     *
     * If not set or false, JSON will be returned as a plain JS object.
     * It true, JSON will be stringified.
     *
     * If prettify is set, it will override this setting.
     */
    stringify?: boolean;
    /**
     * [development only]
     * Generate debug information in the output.
     */
    debugGenerationInline?: boolean;
}
/**
 * Bitmark tool for manipulating bitmark in all its formats.
 *
 */
declare class BitmarkParserGenerator {
    protected ast: Ast;
    protected jsonParser: JsonParser;
    protected bitmarkParser: BitmarkParser;
    protected textParser: TextParser;
    protected textGenerator: TextGenerator;
    /**
     * Get the version of the bitmark-parser-generator library
     */
    version(): string;
    /**
     * Get information about the bitmark-parser-generator library
     */
    info(options?: InfoOptions): unknown;
    /**
     * Generate the new configuration for the bitmark parser.
     */
    generateConfig(options?: GenerateConfigOptions): void;
    /**
     * Convert bitmark from bitmark to JSON, or JSON to bitmark.
     *
     * Input type is detected automatically and may be:
     * - string: bitmark, JSON, or AST
     * - object: JSON or AST
     * - file: bitmark, JSON, or AST
     *
     * Output type is selected automatically based on input type detection:
     * - input(JSON/AST) ==> output(bitmark)
     * - input(bitmark)  ==> output(JSON)
     *
     * Output type can be overridden to one of the following:
     * - bitmark: output bitmark string
     * - json: output JSON as a plain JS object, or a file
     * - ast: output AST as a plain JS object, or a file
     * - text: output plain text as a string, or a file
     *
     * By default, the result is returned as a string for bitmark, or a plain JS object for JSON/AST.
     *
     * The options can be used to write the output to a file and to set conversion options or override defaults.
     *
     * If both the input and output formats are the same, the input will be validated and rewritten.
     * This feature be used to upgrade bitmark or JSON to the latest version.
     *
     * @param input - bitmark or JSON or AST as a string, JSON or AST as plain JS object, or path to a file containing
     * bitmark, JSON, or AST.
     * @param options - the conversion options
     * @returns A string if converting to bitmark, a plain JS object if converting to JSON, or
     * void if writing to a file
     * @throws Error if any error occurs
     */
    convert(input: string | unknown, options?: ConvertOptions): string | unknown | void;
    /**
     * Upgrade bitmark or JSON, upgrading to the latest supported syntax, removing unrecognised data in the process.
     *
     * THIS FEATURE SHOULD BE USED WITH CAUTION. IT WILL POTENTIALLY DELETE DATA.
     *
     * Input type is detected automatically and may be:
     * - string: bitmark, JSON
     * - object: JSON
     * - file: bitmark, JSON
     *
     * Output type is the same as the detected input type
     *
     * By default, the result is returned as a string for bitmark, or a plain JS object for JSON.
     *
     * The options can be used to write the output to a file and to set conversion options or override defaults.
     *
     * If both the input and output formats are the same, the input will be validated and rewritten.
     *
     * @param input - bitmark or JSON or AST as a string, JSON or AST as plain JS object, or path to a file containing
     * bitmark, JSON, or AST.
     * @param options - the conversion options
     * @returns Promise that resolves to string if upgrading to bitmark, a plain JS object if converting to JSON, or
     * void if writing to a file
     * @throws Error if any error occurs
     */
    upgrade(input: string | unknown, options?: UpgradeOptions): string | unknown | void;
    /**
     * Create a bitmark AST (Abstract Syntax Tree) from bitmark or JSON or AST
     *
     * Input type is detected automatically and may be string, object (JSON or AST), or file
     *
     * @param input the JSON or bitmark to convert to a bitmark AST
     * @param options - the create AST options
     * @returns bitmark AST
     * @throws Error if any error occurs
     */
    createAst(input: unknown, options?: CreateAstOptions): BitmarkAst;
    /**
     * Convert bitmark text to JSON, or JSON to bitmark text.
     *
     * Input type is detected automatically and may be:
     * - string: bitmark text or JSON
     * - object: JSON
     * - file: bitmark text or JSON
     *
     * Output type is selected automatically based on input type detection:
     * - input(JSON) ==> output(bitmark text)
     * - input(bitmark text)  ==> output(JSON)
     *
     * By default, the result is returned as a string for bitmark text, or a plain JS object for JSON.
     *
     * The options can be used to write the output to a file and to set conversion options or override defaults.
     *
     * @param input - bitmark text or JSON as a string, JSON as plain JS object, or path to a file containing
     * bitmark text or JSON.
     * @param options - the conversion options
     * @returns Promise that resolves to string if converting to bitmark text, a plain JS object if converting to JSON, or
     * void if writing to a file
     * @throws Error if any error occurs
     */
    convertText(input: string | unknown, options?: ConvertTextOptions): string | unknown | void;
    extractPlainText(input: string | unknown, options?: ExtractPlainTextOptions): string;
    /**
     * Convert between HTML tables and bitmark tables.
     *
     * Direction is auto-detected (override with `options.inputFormat`):
     * - HTML input: every `<table>` is extracted and emitted as a `[.table-extended]` (or `[.table]`)
     *   bit; output as bitmark (default), JSON, AST, or HTML (re-emit).
     * - bitmark / JSON / AST input: each `table` / `table-extended` bit is rendered as an HTML
     *   `<table>` fragment.
     *
     * Cell content is reproduced verbatim except inline conversion to bitmark marks (bold, italic,
     * superscript, etc.), with lists and images mapped to their bitmark equivalents.
     *
     * @param input - HTML, bitmark, JSON or AST string; or a parsed JSON/AST value; or a file path.
     * @param options - the conversion options
     * @returns the converted output as a string (or object for JSON/AST), or void when writing a file
     * @throws Error if any error occurs
     */
    convertHtmlTable(input: string | unknown, options?: ConvertHtmlTableOptions): string | unknown | void;
    /**
     * Write an HTML string to the configured output file, or return it.
     */
    private outputHtml;
    /**
     * Breakscape bitmark text.
     *
     * Input type is detected automatically and may be:
     * - string: text
     * - file: path to a file containing text
     *
     * By default, the result is returned as a string.
     * By default, the text is breakscaped as if it was bitmark text in the body.
     * Use the options to change this behaviour.
     *
     * The options can be used to write the output to a file.
     *
     * @param input - text, or path to a file containing text.
     * @param options - the conversion options
     * @returns breakscaped string, or void if writing to a file
     * @throws Error if any error occurs
     */
    breakscapeText(input: string, options?: BreakscapeOptions): string | void;
    /**
     * Unescape (unbreakscape) bitmark text
     *
     * Input type is detected automatically and may be:
     * - string: text
     * - file: path to a file containing text
     *
     * By default, the result is returned as a string.
     * By default, the text is unbreakscaped as if it was bitmark text in the body.
     * Use the options to change this behaviour.
     *
     * The options can be used to write the output to a file.
     *
     * @param input - text, or path to a file containing text.
     * @param options - the conversion options
     * @returns unbreakscaped string, or void if writing to a file
     * @throws Error if any error occurs
     */
    unbreakscapeText(input: string, options?: UnbreakscapeOptions): string | void;
    textAstToPlainText(textAst: TextAst, _options?: ExtractPlainTextOptions): string;
    /**
     * Stringify / prettify a plain JS object to a JSON string, depending on the JSON options
     *
     * @param json
     * @param options
     * @param forceStringify
     * @returns
     */
    private jsonStringifyPrettify;
    /**
     * Get the supported bits as a formatted strings
     *
     * @param supportedBits
     * @returns
     */
    private supportedBitsAsString;
}

/**
 * Generate bitmark markup from a bitmark AST as a string
 */
declare class BitmarkStringGenerator implements Generator<BitmarkAst, string> {
    private generator;
    private writer;
    /**
     * Generate bitmark markup from a bitmark AST as a string
     *
     * @param bitmarkVersion - bitmark version, use null to use latest version
     * @param options - bitmark generation options
     */
    constructor(options?: BitmarkGeneratorOptions);
    /**
     * Generate bitmark markup from bitmark AST as a string
     *
     * @param ast bitmark AST
     */
    generate(ast: BitmarkAst): Promise<string>;
    /**
     * Generate bitmark markup from bitmark AST as a string synchronously
     *
     * @param ast bitmark AST
     */
    generateSync(ast: BitmarkAst): string;
}

/**
 * Generate bitmark JSON from a bitmark AST as a string
 */
declare class JsonStringGenerator implements Generator<BitmarkAst, string> {
    private generator;
    private writer;
    /**
     * Generate bitmark JSON from a bitmark AST as a string
     *
     * @param options - JSON generation options
     */
    constructor(options?: JsonGeneratorOptions);
    /**
     * Generate bitmark JSON from bitmark AST as a string
     *
     * @param ast bitmark AST
     */
    generate(ast: BitmarkAst): Promise<string>;
    /**
     * Generate bitmark JSON from bitmark AST as a string synchronously
     *
     * @param ast bitmark AST
     */
    generateSync(ast: BitmarkAst): string;
}

/** Axis-aligned bounding box: `[x0, y0, x1, y1]` (top-left + bottom-right). */
type Bbox = [number, number, number, number];
interface BoundingBoxEntry {
    bit: BitJson;
    wrapper: BitWrapperJson;
    /** Normalized list of boxes parsed from `bit.sourceBB` (always at least one). */
    boxes: Bbox[];
}
interface FromBitsOptions {
    /**
     * If provided, only include bits whose `bit.sourceRL` exactly equals this
     * value. Bits with no `sourceRL` are excluded.
     */
    sourceRL?: string;
}
/**
 * Index over a list of bits with `@sourceBB` tags, designed for live region
 * selection in a browser (e.g. the user drags a box and the preview updates
 * as they go). Each bit's `sourceBB` is parsed once at construction so that
 * intersection queries are pure bounding-box scans on the hot path.
 */
declare class BoundingBoxIndex {
    private readonly _entries;
    private readonly bitmarkParser;
    private constructor();
    /**
     * Build an index from already-parsed bits. Bits without a parseable
     * `sourceBB` are dropped. Order of the input is preserved.
     *
     * Pass `options.sourceRL` to scope the index to a single source page —
     * bits whose `sourceRL` doesn't match (or is absent) are excluded.
     */
    static fromBits(wrappers: BitWrapperJson[], options?: FromBitsOptions): BoundingBoxIndex;
    /** All bits with at least one valid `sourceBB`, in input order. */
    get entries(): ReadonlyArray<BoundingBoxEntry>;
    /**
     * Bits whose ANY `sourceBB` box intersects `query` (strict overlap —
     * touching-only edges do NOT count as an intersection).
     */
    intersecting(query: Bbox): BoundingBoxEntry[];
    /**
     * Flat list of every individual `sourceBB` box that intersects `query`.
     * For a multi-box bit, only the boxes that themselves intersected are
     * returned.
     */
    intersectingBoxes(query: Bbox): Bbox[];
    /**
     * Smallest axis-aligned box that fully encloses every individual `sourceBB`
     * box that intersected the query. For a multi-box bit, only the boxes that
     * themselves intersected contribute to the union — non-intersecting boxes
     * from the same bit are ignored. Returns `null` if no box matches.
     */
    enclosingBoundingBox(query: Bbox): Bbox | null;
    /** Render selected bits back to bitmark text. Empty input returns `''`. */
    toBitmark(entries: BoundingBoxEntry[]): string;
}

interface ParseOptions {
    startRule?: string;
}
type Parse = (str: string, options?: ParseOptions) => TextAst | string;
declare const parse: Parse;

/**
 * Bitmark file generator options
 */
interface BitmarkFileGeneratorOptions extends BitmarkGeneratorOptions {
    /**
     * The options for file output.
     */
    fileOptions?: FileOptions;
    /**
     * If true, the file will be generated asynchronously - generateSync() will throw an error.
     * If false, the file will be generated synchronously.
     *
     * Defaults to false.
     */
    async?: boolean;
}
/**
 * Generate bitmark markup from a bitmark AST as a file
 */
declare class BitmarkFileGenerator implements Generator<BitmarkAst> {
    private generator;
    private async;
    /**
     * Generate bitmark markup from a bitmark AST as a file
     *
     * @param path - path of file to generate
     * @param options - bitmark generation options
     */
    constructor(path: PathLike, options?: BitmarkFileGeneratorOptions);
    /**
     * Generate bitmark markup from bitmark AST as a file
     *
     * @param ast bitmark AST
     */
    generate(ast: BitmarkAst): Promise<void>;
    /**
     * Generate bitmark markup from bitmark AST as a file synchronously
     *
     * @param ast bitmark AST
     */
    generateSync(_ast: BitmarkAst): void;
}

/**
 * JSON file generator options
 */
interface JsonFileGeneratorOptions extends JsonGeneratorOptions {
    /**
     * The options for file output.
     */
    fileOptions?: FileOptions;
    /**
     * If true, the file will be generated asynchronously - generateSync() will throw an error.
     * If false, the file will be generated synchronously.
     *
     * Defaults to false.
     */
    async?: boolean;
}
/**
 * Generate bitmark JSON from a bitmark AST as a file
 *
 */
declare class JsonFileGenerator implements Generator<BitmarkAst> {
    private generator;
    private async;
    /**
     * Generate bitmark JSON from a bitmark AST as a file
     *
     * @param path - path of file to generate
     * @param bitmarkVersion - bitmark version, use null to use latest version
     * @param fileOptions - file options
     * @param bitmarkOptions - bitmark generation options
     */
    constructor(path: PathLike, options?: JsonFileGeneratorOptions);
    /**
     * Generate bitmark JSON from bitmark AST as a file
     *
     * @param ast bitmark AST
     */
    generate(ast: BitmarkAst): Promise<void>;
    /**
     * Generate bitmark JSON from bitmark AST as a file synchronously
     *
     * @param ast bitmark AST
     */
    generateSync(_ast: BitmarkAst): void;
}

/**
 * Generate HTML `<table>` fragments from bitmark table bit-JSON.
 *
 * Consumes the JSON bit array (a string or parsed value), like {@link PlainTextGenerator}, and
 * renders each `table` / `table-extended` bit as a pretty-printed HTML `<table>` fragment. Cell
 * content (TextAst) is rendered back to inline/block HTML, mapping bitmark marks to inline tags.
 *
 * See PLAN-013 for the full specification.
 */
declare class HtmlTableGenerator {
    private readonly indentUnit;
    /**
     * Generate HTML table fragments from a string or JSON value.
     * @returns the concatenated `<table>` fragments, blank-line separated (empty string if none).
     */
    generate(input: string | unknown): string;
    private collectBits;
    private renderTableBit;
    private toExtended;
    private renderSection;
    private renderCell;
    private asTextAst;
    private cellContentToHtml;
    private blockToHtml;
    private inlineToHtml;
    private inlineNodeToHtml;
    private wrapMarks;
    private listToHtml;
    private listTag;
    private listItemToHtml;
    private imageToHtml;
    private textToHtml;
    private inlineImageTokenToHtml;
    private latexToHtml;
    private escapeText;
    private escapeAttr;
}

export { type AppLinkResourceJson, type AppLinkResourceWrapperJson, type ArticleResourceJson, type ArticleResourceWrapperJson, Ast, type AstWalkCallbacks, type AudioEmbedResourceJson, type AudioEmbedResourceWrapperJson, type AudioLinkResourceJson, type AudioLinkResourceWrapperJson, type AudioResourceJson, type AudioResourceWrapperJson, type Bbox, type Bit, type BitJson, BitType, type BitTypeType, type BitWrapperJson, type BitmarkAst, BitmarkFileGenerator, BitmarkGenerator, type BitmarkOptions, BitmarkParser, BitmarkParserGenerator, BitmarkParserType, type BitmarkParserTypeType, BitmarkStringGenerator, BitmarkVersion, type BitmarkVersionType, type Body, type BodyBitJson, type BodyBitsJson, type BodyPart, BodyTextFormat, type BodyTextFormatType, type BookJson, type BookReferenceJson, type BotResponseJson, type BoundingBoxEntry, BoundingBoxIndex, type BreakscapeOptions, type BreakscapedString, Builder, type CardBit, type CardNode, CardSetVersion, type CardSetVersionType, type ChoiceJson, type CodeBlockTextNode, type CodeBlockTextNodeAttributes, type CommentMark, type ConvertHtmlTableOptions, type ConvertOptions, type ConvertTextOptions, type CreateAstOptions, type DefinitionListItemJson, type DocumentDownloadResourceJson, type DocumentDownloadResourceWrapperJson, type DocumentEmbedResourceJson, type DocumentEmbedResourceWrapperJson, type DocumentLinkResourceJson, type DocumentLinkResourceWrapperJson, type DocumentResourceJson, type DocumentResourceWrapperJson, type Example, type ExampleJson, type ExtRefMark, type ExtRefMarkAttibutes, type ExtraProperties, type FeedbackChoiceJson, type FeedbackJson, type FeedbackReasonJson, type FileOptions, FileWriter, type FlashcardJson, type Footer, type FootnoteAttibutes, type FootnoteMark, type FromBitsOptions, type GapJson, type Generator, type GroupTagJson, type HeadingJson, type HeadingTextNode, type HeadingTextNodeAttributes, type HighlightJson, type HighlightTextJson, type HtmlTableFormat, HtmlTableGenerator, type HtmlTableParseOptions, HtmlTableParser, type ImageInlineTextNode, type ImageLinkResourceJson, type ImageLinkResourceWrapperJson, type ImageResourceJson, type ImageResourceWrapperJson, type ImageSourceJson, type ImageTextNode, type ImageTextNodeAttributes, InfoFormat, type InfoFormatType, type InfoOptions, InfoType, type InfoTypeType, type IngredientJson, Input, InputFormat, type InputFormatType, type InputType, JsonFileGenerator, JsonGenerator, type JsonOptions, JsonParser, JsonStringGenerator, type LatexTextNode, type LatexTextNodeAttributes, type LinkMark, type LinkMarkAttibutes, type ListItemJson, type ListTextNode, type ListTextNodeAttributes, type MarkConfigJson, type MarkJson, type MatrixCellJson, type MatrixJson, type MediaAttributes, type Node, type NodeInfo, NodeType, type NodeTypeType, Output, type OutputType, type PairJson, type ParserJson, type PersonJson, type UpgradeOptions as PrettifyOptions, type PronunciationTableCellJson, type PronunciationTableJson, type Property, type QuestionJson, type QuizJson, type RatingLevelStartEndJson, type RefMark, type RefMarkAttibutes, ResourceBuilder, type ResourceDataJson, type ResourceJson, type ResourceTypeType, type ResourceWrapperJson, type ResponseJson, type SectionTextNode, type SelectJson, type SelectOptionJson, type ServingsJson, type StatementJson, type StillImageFilmEmbedResourceJson, type StillImageFilmEmbedResourceWrapperJson, type StillImageFilmLinkResourceJson, type StillImageFilmLinkResourceWrapperJson, type StillImageFilmResourceJson, type StillImageFilmResourceWrapperJson, StreamWriter, StringWriter, type SymbolMark, type TableCellJson, type TableExtendedJson, type TableJson, type TableRowJson, type TableSectionJson, type TaskItemTextNode, type TaskItemTextNodeAttributes, type TechnicalTermJson, type JsonText as Text, type TextAndIconJson, type TextAst, type TextJsonOptions, type TextMark, type TextMarkAttibutes, TextMarkType, type TextMarkTypeType, type TextNode, type TextNodeAttibutes, TextNodeType, type TextNodeTypeType, type UnbreakscapeOptions, type UpgradeOptions, type VideoEmbedResourceJson, type VideoEmbedResourceWrapperJson, type VideoLinkResourceJson, type VideoLinkResourceWrapperJson, type VideoResourceJson, type VideoResourceWrapperJson, type WebsiteLinkResourceJson, type WebsiteLinkResourceWrapperJson, type Writer, type XRefMark, type XRefMarkAttibutes, parse as bitmarkTextParse };